-
-
Save zachlatta/6d088d33451aa21017c7cd58399b921c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @font-face { | |
| font-family: "Pixelated MS Sans Serif"; | |
| src: url(https://unpkg.com/[email protected]/dist/ms_sans_serif.woff) format("woff"); | |
| src: url(https://unpkg.com/[email protected]/dist/ms_sans_serif.woff2) format("woff2"); | |
| font-weight: 400; | |
| font-style: normal; | |
| } | |
| @font-face { | |
| font-family:"Pixelated MS Sans Serif";src:url(https://unpkg.com/[email protected]/dist/ms_sans_serif_bold.woff) format("woff");src:url(https://unpkg.com/[email protected]/dist/ms_sans_serif_bold.woff2) format("woff2");font-weight:700;font-style:normal; | |
| } | |
| body { | |
| font-family: "Pixelated MS Sans Serif",Arial !important; | |
| background-color: #008080; | |
| background-image: url('https://i.pinimg.com/originals/42/ab/b2/42abb28c017832576edfcd44b91fd683.gif') no-repeat center center fixed; | |
| image-rendering: pixelated; | |
| background-size: cover; | |
| } | |
| .posts { | |
| border-radius: 0 !important; | |
| } | |
| .post { | |
| box-shadow: inset -1px -1px #0a0a0a, inset 1px 1px #dfdfdf, inset -2px -2px grey, inset 2px 2px #fff !important; | |
| background: silver !important; | |
| } | |
| .post-text { | |
| color: #222 !important; | |
| } | |
| .nav-link { | |
| color: white !important; | |
| }; | |
| .post-header { | |
| background:linear-gradient(90deg,navy,#1084d0);padding:3px 2px 3px 3px;display:flex;justify-content:space-between; | |
| align-items:center | |
| } | |
| .header-link { | |
| color: white !important; | |
| } | |
| .react-calendar-heatmap text { | |
| fill: white !important; | |
| } | |
| /*! Used code of Github repo jdan/98.css */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
<!doctype html>
<title>CinemaHub — с админкой и рейтингами</title> <style> :root{ --bg:#0f1115; --card:#0f1720; --muted:#9aa4b2; --accent:#6ee7b7; --glass: rgba(255,255,255,0.04); --glass-2: rgba(255,255,255,0.02); --radius:12px; --max-width:1200px; font-family: Inter, "Segoe UI", Roboto, Arial; color-scheme: dark; } *{box-sizing:border-box} body{margin:0;background:linear-gradient(180deg,#081018 0%,#0b0f14 60%),var(--bg);color:#e6eef6;padding:28px;display:flex;justify-content:center;} .wrap{width:100%;max-width:var(--max-width)} header{display:flex;gap:16px;align-items:center;justify-content:space-between;margin-bottom:12px} .brand{display:flex;gap:12px;align-items:center} .logo{width:56px;height:56px;border-radius:10px;background:linear-gradient(135deg,#3dd186,#5cc8ff);display:flex;align-items:center;justify-content:center;font-weight:700;color:#042028;font-size:18px} h1{font-size:18px;margin:0} .sub{font-size:13px;color:var(--muted);margin-top:2px} .controls{display:flex;gap:10px;align-items:center} .lang{background:var(--glass);padding:6px;border-radius:10px;display:flex;gap:6px} .lang button{background:transparent;border:0;color:var(--muted);padding:6px 8px;border-radius:8px;cursor:pointer} .lang button.active{color:#042028;background:linear-gradient(90deg,var(--accent),#60c1ff)} .search{display:flex;align-items:center;gap:8px;background:var(--glass-2);padding:8px;border-radius:12px} .search input{background:transparent;border:0;color:inherit;outline:none;width:220px} nav{display:flex;gap:10px;margin:12px 0 18px;flex-wrap:wrap} .tab{padding:8px 14px;border-radius:999px;background:transparent;border:1px solid rgba(255,255,255,0.04);cursor:pointer;color:var(--muted)} .tab.active{background:linear-gradient(90deg,#0b1226,#09202a);border:1px solid rgba(110,231,183,0.12);color:var(--accent)} .hero{display:flex;gap:18px;align-items:center;padding:18px;border-radius:var(--radius);background:linear-gradient(90deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01));margin-bottom:22px} .btn{padding:10px 14px;border-radius:10px;border:0;background:linear-gradient(90deg,var(--accent),#60c1ff);color:#042028;font-weight:600;cursor:pointer} .btn.ghost{background:transparent;border:1px solid rgba(255,255,255,0.06);color:var(--muted)} .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px} .card{background:linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01));border-radius:12px;padding:10px;border:1px solid rgba(255,255,255,0.03);overflow:hidden} .poster{height:280px;background:#091018;border-radius:10px;overflow:hidden;display:flex;align-items:end;padding:12px;color:#fff;font-weight:700;background-size:cover;background-position:center;position:relative} .meta{display:flex;justify-content:space-between;align-items:center;padding-top:8px} .title{font-size:15px;font-weight:700} .desc{font-size:13px;color:var(--muted);margin-top:6px} .tags{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px} .tag{font-size:12px;padding:6px 8px;border-radius:8px;background:rgba(255,255,255,0.03);color:var(--muted)} footer{margin-top:18px;color:var(--muted);font-size:13px;padding:12px;border-radius:10px;background:var(--glass-2)} .admin-toggle{display:flex;align-items:center;gap:8px;background:var(--glass);padding:8px;border-radius:10px} /* modal */ .modal{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:rgba(2,6,12,0.6);z-index:40;padding:20px} .modal.open{display:flex} .modal-content{width:100%;max-width:960px;background:#071019;border-radius:12px;padding:12px;box-shadow:0 30px 80px rgba(2,6,12,0.8)} iframe.player{width:100%;height:520px;border-radius:8px;border:0;background:#000} @media(max-width:720px){ iframe.player{height:260px}; .poster{height:200px} }/* Admin panel styles */
.admin-panel{position:fixed;right:20px;top:80px;width:420px;max-width:calc(100% - 40px);background:linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01));border-radius:12px;padding:12px;border:1px solid rgba(255,255,255,0.04);box-shadow:0 20px 60px rgba(0,0,0,0.6);z-index:60;display:none}
.admin-panel.open{display:block}
.admin-panel h3{margin:0 0 8px 0}
.field{margin-bottom:8px}
.field label{display:block;font-size:13px;color:var(--muted);margin-bottom:6px}
.field input[type="text"], .field input[type="number"], .field select, .field textarea{width:100%;padding:8px;border-radius:8px;border:1px solid rgba(255,255,255,0.04);background:transparent;color:inherit}
.row{display:flex;gap:8px}
.small{width:90px}
.companies-list{max-height:120px;overflow:auto;border:1px dashed rgba(255,255,255,0.03);padding:8px;border-radius:8px}
.film-item{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.star{cursor:pointer;font-size:16px;padding:2px}
.rating{display:flex;gap:4px;align-items:center}
.avg{font-weight:700;color:var(--accent);margin-left:6px}
.company-badge{font-size:12px;padding:4px 8px;border-radius:999px;background:rgba(255,255,255,0.03);color:var(--muted)}
.trash{background:transparent;border:0;color:#ff8b8b;cursor:pointer}
.ok{background:linear-gradient(90deg,#6ee7b7,#60c1ff);border:0;padding:8px;border-radius:8px;color:#042028;cursor:pointer}
</style>
CinemaHub
Админ-панель
Админ-панель позволяет: добавлять/редактировать/удалять фильмы, создавать фирмы (студии), привязывать фильмы к фирмам, загружать постеры и указывать embed src. Рейтинг — пользователи оценивают фильмы звёздами; оценки сохраняются локально и считаются в среднем.
Для production: замените localStorage на сервер и хранение файлов на облако (S3, CDN) или используйте CMS.
`; renderCompanySelect(); renderGrid(); renderAdminFilms(); /* ========== Small utils ========== */ function debounce(fn, ms=200){ let t; return (...a)=>{ clearTimeout(t); t=setTimeout(()=>fn(...a), ms); } } /* ========== Extra: clicking company badge in grid to filter by it ========= */ document.addEventListener('click', (e)=>{ const badge = e.target.closest('.company-badge'); if(badge){ const name = badge.innerText; // find company id const c = companies.find(x=>x.name===name); if(c){ currentFilter='all'; tabs.forEach(x=>x.classList.remove('active')); tabs[0].classList.add('active'); q.value = ''; // clear search // filter grid by company const filtered = movies.filter(m=>m.companyId===c.id); gridEl.innerHTML = ''; if(filtered.length===0){ gridEl.innerHTML = `