@font-face{font-family:"Inter";src:url(/fonts/inter-latin.woff2) format("woff2");font-weight:100 900;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Inter";src:url(/fonts/inter-cyrillic.woff2) format("woff2");font-weight:100 900;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"JetBrains Mono";src:url(/fonts/jbmono-latin.woff2) format("woff2");font-weight:100 800;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"JetBrains Mono";src:url(/fonts/jbmono-cyrillic.woff2) format("woff2");font-weight:100 800;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Orbitron";src:url(/fonts/orbitron-latin.woff2) format("woff2");font-weight:400 900;font-display:swap}

:root{--radius:16px;--radius-sm:10px;--font:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--mono:"JetBrains Mono",ui-monospace,Consolas,monospace;--head:var(--font);--ease:cubic-bezier(.2,.8,.2,1);--spring:cubic-bezier(.34,1.56,.64,1);--safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px);--nav-h:64px}
[data-theme=dark]{color-scheme:dark;--bg:#0a0c16;--bg2:#10142a;--surface:rgba(24,28,52,.62);--surface-solid:#161a30;--surface-2:rgba(255,255,255,.05);--border:rgba(255,255,255,.09);--border-strong:rgba(255,255,255,.18);--text:#eceefb;--dim:#9aa1c4;--accent:#7f8cff;--accent2:#b98cff;--accent-ink:#0b0d1c;--danger:#ff6b81;--ok:#4be3a5;--warn:#ffc857;--shadow:0 10px 40px -12px rgba(0,0,0,.6);--glow:0 0 0 1px rgba(127,140,255,.35),0 8px 30px -6px rgba(127,140,255,.45);--grad:linear-gradient(135deg,#7f8cff,#b98cff);--blur:18px;--radius:18px}
[data-theme=light]{color-scheme:light;--bg:#f2f4fb;--bg2:#e6eafa;--surface:rgba(255,255,255,.82);--surface-solid:#fff;--surface-2:rgba(30,40,90,.05);--border:rgba(30,40,90,.11);--border-strong:rgba(30,40,90,.24);--text:#12172b;--dim:#586080;--accent:#4a56d8;--accent2:#c25fd0;--accent-ink:#fff;--danger:#d6314f;--ok:#0f9d68;--warn:#b57400;--shadow:0 12px 34px -14px rgba(40,50,120,.28),0 2px 6px rgba(40,50,120,.06);--glow:0 0 0 3px rgba(74,86,216,.18),0 8px 22px -6px rgba(74,86,216,.4);--grad:linear-gradient(135deg,#4a56d8,#c25fd0);--blur:10px;--radius:20px}
[data-theme=neon]{color-scheme:dark;--bg:#05020d;--bg2:#0c0420;--surface:rgba(12,6,28,.78);--surface-solid:#0d0620;--surface-2:rgba(0,240,255,.05);--border:rgba(0,240,255,.28);--border-strong:rgba(255,43,214,.7);--text:#e8f6ff;--dim:#8fb4cc;--accent:#ff2bd6;--accent2:#00f0ff;--accent-ink:#09000f;--danger:#ff3860;--ok:#39ff9a;--warn:#fcee0a;--shadow:0 0 22px -8px rgba(255,43,214,.45);--glow:0 0 4px rgba(255,43,214,.9),0 0 18px rgba(255,43,214,.65),0 0 40px rgba(255,43,214,.35);--grad:linear-gradient(90deg,#ff2bd6,#00f0ff);--blur:6px;--radius:4px;--head:"Orbitron","JetBrains Mono",monospace}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;min-height:100dvh;background:var(--bg);color:var(--text);font:15px/1.55 var(--font);overflow-x:hidden;-webkit-font-smoothing:antialiased}
.theme-anim,.theme-anim *{transition:background-color .5s var(--ease),color .5s var(--ease),border-color .5s var(--ease),box-shadow .5s var(--ease),fill .5s,stroke .5s!important}
#bg{position:fixed;inset:0;width:100%;height:100%;z-index:-2;pointer-events:none}
[data-theme=dark] body::before{content:"";position:fixed;inset:0;z-index:-3;background:radial-gradient(1200px 700px at 15% -10%,#1d2250 0,transparent 60%),radial-gradient(900px 600px at 100% 0,#2a1650 0,transparent 55%),var(--bg)}
[data-theme=light] body::before{content:"";position:fixed;inset:0;z-index:-3;background:radial-gradient(900px 600px at 10% -10%,#dfe4ff 0,transparent 60%),radial-gradient(800px 500px at 100% 10%,#fbe4f6 0,transparent 55%),var(--bg)}
[data-theme=neon] body::before{content:"";position:fixed;inset:0;z-index:-3;background:radial-gradient(1000px 600px at 50% 110%,#3a0a45 0,transparent 60%),var(--bg)}
[data-theme=neon] body::after{content:"";position:fixed;inset:0;z-index:50;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(0,0,0,.18) 0 1px,transparent 1px 3px);mix-blend-mode:multiply;opacity:.55}
a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}
h1,h2,h3,h4{font-family:var(--head);margin:0 0 .4em;line-height:1.2;letter-spacing:-.01em}
[data-theme=neon] h1,[data-theme=neon] h2,[data-theme=neon] h3{letter-spacing:.04em;text-transform:uppercase}
::selection{background:var(--accent);color:var(--accent-ink)}
:focus-visible{outline:2px solid var(--accent2);outline-offset:2px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
svg.i{width:1.15em;height:1.15em;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none;vertical-align:-.2em}
.mono{font-family:var(--mono)}.dim{color:var(--dim)}.small{font-size:.85em}.center{text-align:center}.row{display:flex;align-items:center;gap:10px}.wrap{flex-wrap:wrap}.grow{flex:1;min-width:0}.gap-s{gap:6px}.mt{margin-top:16px}.mb{margin-bottom:16px}.hidden{display:none!important}

/* header */
.top{position:sticky;top:0;z-index:30;padding-top:var(--safe-t);backdrop-filter:blur(var(--blur)) saturate(1.4);-webkit-backdrop-filter:blur(var(--blur)) saturate(1.4);background:color-mix(in srgb,var(--bg) 62%,transparent);border-bottom:1px solid var(--border)}
.top-in{max-width:1200px;margin:0 auto;padding:10px 18px;display:flex;align-items:center;gap:14px;min-height:60px}
.logo{display:flex;align-items:center;gap:10px;font:800 1.15rem var(--head);color:var(--text)!important;text-decoration:none!important}
.logo .mark{width:32px;height:32px;border-radius:10px;background:var(--grad);display:grid;place-items:center;color:var(--accent-ink);box-shadow:var(--glow)}
[data-theme=neon] .logo .mark{border-radius:0;clip-path:polygon(0 0,100% 0,100% 70%,70% 100%,0 100%)}
.nav{display:flex;gap:4px;margin-left:12px}
.nav a{padding:8px 12px;border-radius:10px;color:var(--dim);font-weight:500;text-decoration:none}
.nav a:hover,.nav a.on{color:var(--text);background:var(--surface-2)}
.spacer{flex:1}
.avatar{width:36px;height:36px;border-radius:50%;display:block;flex:none}
[data-theme=neon] .avatar{border-radius:0;clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%)}
.btn.sm .avatar{width:22px;height:22px}

/* buttons */
.btn{--c:var(--text);position:relative;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;padding:9px 18px;border:1px solid var(--border);border-radius:12px;background:var(--surface-2);color:var(--c);font:600 .95rem var(--font);cursor:pointer;text-decoration:none!important;transition:transform .25s var(--spring),box-shadow .25s,background .25s,border-color .25s,filter .25s;user-select:none;-webkit-user-select:none;touch-action:manipulation}
.btn:hover{border-color:var(--border-strong);transform:translateY(-1px)}
.btn:active{transform:translateY(1px) scale(.97)}
.btn[disabled]{opacity:.5;pointer-events:none}
.btn.primary{background:var(--grad);color:var(--accent-ink);border-color:transparent;box-shadow:var(--glow)}
.btn.primary:hover{filter:brightness(1.1) saturate(1.1)}
.btn.danger{--c:var(--danger)}.btn.danger:hover{background:color-mix(in srgb,var(--danger) 14%,transparent);border-color:var(--danger)}
.btn.ghost{background:transparent;border-color:transparent}.btn.ghost:hover{background:var(--surface-2)}
.btn.sm{min-height:34px;padding:5px 12px;font-size:.88rem;border-radius:10px}
.btn.icon{padding:0;width:42px}.btn.icon.sm{width:34px}
.btn.lg{min-height:52px;padding:12px 28px;font-size:1.05rem;border-radius:14px}
.btn.on{border-color:var(--accent);color:var(--accent)}
[data-theme=neon] .btn{border-radius:0;clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px);border:0;background:rgba(0,240,255,.08);color:var(--accent2);font-family:var(--mono);text-transform:uppercase;letter-spacing:.06em;box-shadow:inset 0 0 0 1px var(--accent2)}
[data-theme=neon] .btn:hover{background:rgba(0,240,255,.2);box-shadow:inset 0 0 0 1px var(--accent2),0 0 18px rgba(0,240,255,.5);transform:none}
[data-theme=neon] .btn.primary{background:var(--accent);color:#16001a;box-shadow:0 0 18px rgba(255,43,214,.8);animation:flick 5s infinite}
[data-theme=neon] .btn.primary:hover{background:#ff62e3;box-shadow:0 0 32px rgba(255,43,214,1)}
[data-theme=neon] .btn.danger{box-shadow:inset 0 0 0 1px var(--danger);background:rgba(255,56,96,.08)}
.ripple{position:absolute;border-radius:50%;background:currentColor;opacity:.25;transform:scale(0);animation:rip .6s ease-out forwards;pointer-events:none}
@keyframes rip{to{transform:scale(4);opacity:0}}

/* layout */
main{max-width:1200px;margin:0 auto;padding:28px 18px 120px}
.page{animation:pagein .45s var(--ease) both}
.page.out{animation:pageout .18s ease-in both}
@keyframes pagein{from{opacity:0;transform:translateY(14px) scale(.995)}to{opacity:1;transform:none}}
@keyframes pageout{to{opacity:0;transform:translateY(-8px)}}
.card{position:relative;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);backdrop-filter:blur(var(--blur));-webkit-backdrop-filter:blur(var(--blur))}
[data-theme=light] .card{box-shadow:var(--shadow)}
[data-theme=neon] .card{clip-path:polygon(0 0,calc(100% - 16px) 0,100% 16px,100% 100%,16px 100%,0 calc(100% - 16px));border-color:var(--border)}
.stagger>*{opacity:0;animation:pagein .5s var(--ease) forwards;animation-delay:calc(var(--i,0)*55ms)}
.grid{display:grid;gap:16px}.g2{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.g3{grid-template-columns:repeat(auto-fill,minmax(230px,1fr))}
.h-title{font-size:clamp(1.6rem,4vw,2.2rem);margin-bottom:6px}
.sec-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:18px}

/* forms */
label.f{display:block;margin-bottom:14px}label.f>span{display:block;font-size:.85rem;color:var(--dim);margin-bottom:6px;font-weight:500}
input,textarea,select{width:100%;padding:11px 14px;border-radius:12px;border:1px solid var(--border);background:var(--surface-2);color:var(--text);font:inherit;transition:border-color .2s,box-shadow .2s,background .2s}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:var(--glow)}
select option{background:var(--surface-solid);color:var(--text)}
textarea{resize:vertical;min-height:110px}
[data-theme=neon] input,[data-theme=neon] textarea,[data-theme=neon] select{border-radius:0;border:0;border-bottom:2px solid var(--accent2);background:rgba(0,240,255,.05);font-family:var(--mono)}
input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent);flex:none}
.chk{display:flex;align-items:center;gap:10px;margin:8px 0;cursor:pointer}
.err{color:var(--danger);font-size:.88rem;min-height:1.2em;margin:6px 0}
.hint{color:var(--dim);font-size:.82rem;margin-top:4px}
.pw-meter{height:5px;border-radius:5px;background:var(--surface-2);margin-top:8px;overflow:hidden}
.pw-meter i{display:block;height:100%;width:0;border-radius:5px;transition:width .35s var(--ease),background .35s}
.seg{display:inline-flex;gap:4px;padding:4px;border-radius:14px;background:var(--surface-2);border:1px solid var(--border);flex-wrap:wrap}
.seg button{border:0;background:transparent;color:var(--dim);padding:7px 14px;border-radius:10px;font:600 .88rem var(--font);cursor:pointer;display:flex;gap:6px;align-items:center;transition:all .25s var(--ease)}
.seg button.on{background:var(--accent);color:var(--accent-ink);box-shadow:var(--glow)}
[data-theme=neon] .seg button{border-radius:0;font-family:var(--mono);text-transform:uppercase}
.auth{max-width:440px;margin:6vh auto 0}
.auth h1{font-size:1.9rem}

/* badges */
.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 10px;border-radius:99px;font-size:.78rem;font-weight:600;background:var(--surface-2);border:1px solid var(--border);color:var(--dim)}
.badge.ok{color:var(--ok)}.badge.warn{color:var(--warn)}.badge.bad{color:var(--danger)}.badge.acc{color:var(--accent)}
[data-theme=neon] .badge{border-radius:0;font-family:var(--mono)}

/* landing */
.hero{position:relative;text-align:center;padding:7vh 0 5vh}
.hero h1{font-size:clamp(2.3rem,7vw,4.6rem);font-weight:800;margin-bottom:.35em;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
[data-theme=neon] .hero h1{color:var(--text);background:none;-webkit-text-fill-color:initial}
.hero p{max-width:640px;margin:0 auto 28px;color:var(--dim);font-size:1.15rem}
.hero .cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.pill{display:inline-flex;gap:8px;align-items:center;padding:6px 14px;border-radius:99px;border:1px solid var(--border);background:var(--surface);margin-bottom:22px;font-size:.85rem;color:var(--dim)}
.pill b{color:var(--accent)}
.feat{display:flex;flex-direction:column;gap:8px}.feat .ic{width:46px;height:46px;border-radius:14px;background:var(--grad);color:var(--accent-ink);display:grid;place-items:center;font-size:1.3rem;box-shadow:var(--glow)}
[data-theme=neon] .feat .ic{border-radius:0;clip-path:polygon(0 0,100% 0,100% 70%,70% 100%,0 100%)}
.themes-demo{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.theme-tile{cursor:pointer;border-radius:var(--radius);padding:0;border:2px solid var(--border);overflow:hidden;background:none;color:inherit;font:inherit;text-align:left;transition:transform .3s var(--spring),border-color .3s,box-shadow .3s}
.theme-tile:hover{transform:translateY(-4px) scale(1.02)}
.theme-tile.on{border-color:var(--accent);box-shadow:var(--glow)}
.theme-tile .pv{height:90px;position:relative}
.theme-tile .pv.dark{background:linear-gradient(135deg,#0a0c16,#2a1650)}.theme-tile .pv.light{background:linear-gradient(135deg,#f2f4fb,#fbe4f6)}.theme-tile .pv.neon{background:linear-gradient(135deg,#05020d,#3a0a45);box-shadow:inset 0 -30px 40px -20px #ff2bd6}
.theme-tile .pv::after{content:"";position:absolute;left:14px;top:18px;width:52%;height:12px;border-radius:6px;background:#7f8cff}.theme-tile .pv.light::after{background:#4a56d8}.theme-tile .pv.neon::after{background:#ff2bd6;box-shadow:0 0 12px #ff2bd6;border-radius:0}
.theme-tile .lb{padding:10px 14px;background:var(--surface-solid);font-weight:600}
.glitch{position:relative;display:inline-block}
[data-theme=neon] .glitch{text-shadow:0 0 8px rgba(255,43,214,.8),0 0 28px rgba(255,43,214,.5);animation:flick 6s infinite}
[data-theme=neon] .glitch::before,[data-theme=neon] .glitch::after{content:attr(data-t);position:absolute;inset:0;overflow:hidden;pointer-events:none}
[data-theme=neon] .glitch::before{color:var(--accent2);animation:gl1 3.2s infinite steps(1);clip-path:inset(0 0 60% 0);transform:translateX(-2px)}
[data-theme=neon] .glitch::after{color:#ff2bd6;animation:gl2 2.6s infinite steps(1);clip-path:inset(60% 0 0 0);transform:translateX(2px)}
@keyframes gl1{0%,88%,100%{transform:translate(0);clip-path:inset(0 0 100% 0)}90%{transform:translate(-4px,1px);clip-path:inset(10% 0 60% 0)}94%{transform:translate(3px,-1px);clip-path:inset(40% 0 30% 0)}}
@keyframes gl2{0%,80%,100%{transform:translate(0);clip-path:inset(100% 0 0 0)}83%{transform:translate(4px,0);clip-path:inset(55% 0 20% 0)}91%{transform:translate(-3px,1px);clip-path:inset(75% 0 5% 0)}}
@keyframes flick{0%,19%,21%,23%,55%,57%,100%{opacity:1}20%,22%,56%{opacity:.78}}

/* room cards */
.rcard{display:flex;flex-direction:column;gap:10px;color:var(--text)!important;text-decoration:none!important;transform-style:preserve-3d;transition:transform .15s ease-out,box-shadow .3s,border-color .3s;will-change:transform}
.rcard:hover{border-color:var(--accent);box-shadow:var(--glow)}
.rcard h3{margin:0;font-size:1.1rem;overflow-wrap:anywhere}
.rcard .meta{display:flex;gap:8px;flex-wrap:wrap;color:var(--dim);font-size:.82rem}
.rcard p{margin:0;color:var(--dim);font-size:.9rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.shine{position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:radial-gradient(240px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.12),transparent 60%);opacity:0;transition:opacity .3s}
.rcard:hover .shine{opacity:1}
.skel{border-radius:12px;background:linear-gradient(90deg,var(--surface-2) 25%,color-mix(in srgb,var(--text) 10%,transparent) 50%,var(--surface-2) 75%);background-size:200% 100%;animation:sk 1.3s infinite linear}
@keyframes sk{to{background-position:-200% 0}}

/* room page */
.room-head{display:flex;gap:16px;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;margin-bottom:18px}
.room-head h1{font-size:clamp(1.5rem,4vw,2.1rem);margin-bottom:6px;overflow-wrap:anywhere}
.online-dot{width:8px;height:8px;border-radius:50%;background:var(--ok);box-shadow:0 0 8px var(--ok);animation:pulse 1.8s infinite}
@keyframes pulse{50%{opacity:.4;transform:scale(.7)}}
.composer textarea{min-height:90px;font-family:var(--font)}.composer.code textarea{font-family:var(--mono);font-size:.9rem;min-height:130px}
.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:20px 0 14px}
.toolbar input[type=search]{max-width:260px;padding-left:38px;background-image:none}
.searchbox{position:relative}.searchbox .i{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--dim);pointer-events:none}
.feed{display:flex;flex-direction:column;gap:14px}
.gal{columns:3 220px;column-gap:14px}.gal .it{break-inside:avoid;margin-bottom:14px}
.it{position:relative;animation:itin .55s var(--spring) both}
@keyframes itin{from{opacity:0;transform:translateY(24px) scale(.94)}to{opacity:1;transform:none}}
.it.sel>.card{border-color:var(--accent);box-shadow:var(--glow)}
.it.pinned>.card::before{content:"";position:absolute;left:0;top:14px;bottom:14px;width:3px;border-radius:3px;background:var(--grad)}
.it.dying{animation:dissolve .6s ease-in forwards;pointer-events:none}
@keyframes dissolve{0%{opacity:1;filter:none}60%{filter:blur(6px) saturate(2);opacity:.6;transform:scale(1.02)}100%{opacity:0;filter:blur(18px);transform:scale(.8) translateY(-14px);height:0;margin:0}}
.ihead{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.ihead .t{font-weight:700;overflow-wrap:anywhere}
.imeta{font-size:.78rem;color:var(--dim);display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.iact{display:flex;gap:4px;margin-left:auto;flex-wrap:wrap}
.md{overflow-wrap:anywhere;line-height:1.65}.md>*:first-child{margin-top:0}.md>*:last-child{margin-bottom:0}
.md h1,.md h2,.md h3{font-size:1.25em;margin:1em 0 .4em}.md p{margin:.6em 0}.md ul,.md ol{padding-left:1.4em;margin:.5em 0}
.md blockquote{margin:.6em 0;padding:.2em 1em;border-left:3px solid var(--accent);color:var(--dim)}
.md code{font-family:var(--mono);background:var(--surface-2);padding:.1em .4em;border-radius:6px;font-size:.88em}
.md pre{margin:.6em 0}.md hr{border:0;border-top:1px solid var(--border)}.md img{max-width:100%;border-radius:10px}
.md table{border-collapse:collapse}.md td,.md th{border:1px solid var(--border);padding:4px 10px}
pre.code{position:relative;margin:0;padding:14px;border-radius:12px;background:color-mix(in srgb,var(--bg) 80%,#000);border:1px solid var(--border);overflow:auto;font:.86rem/1.55 var(--mono);max-height:520px;tab-size:2}
pre.code code{background:none;padding:0;font-size:inherit}
.tk-k{color:var(--accent2)}.tk-s{color:var(--ok)}.tk-c{color:var(--dim);font-style:italic}.tk-n{color:var(--warn)}.tk-f{color:var(--accent)}
.copy-b{position:absolute;right:8px;top:8px;opacity:.0;transition:opacity .2s}pre.code:hover .copy-b,.copy-b:focus{opacity:1}
.fileic{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;font-size:1.4rem;background:var(--surface-2);color:var(--accent);flex:none}
.fcard{display:flex;gap:14px;align-items:center}
.thumb{display:block;width:100%;border-radius:12px;cursor:zoom-in;transition:transform .3s var(--ease),filter .3s;background:var(--surface-2)}
.thumb:hover{transform:scale(1.015);filter:brightness(1.08)}
.icard{padding:10px}.icard .thumb{margin-bottom:8px}
.sel-chk{position:absolute;left:10px;top:10px;z-index:3;transform:scale(1.2)}
.burn-b{color:var(--warn)}
.bulkbar{position:fixed;left:50%;bottom:calc(var(--nav-h) + var(--safe-b) + 14px);transform:translate(-50%,120px);z-index:35;display:flex;gap:10px;align-items:center;padding:10px 16px;border-radius:16px;background:var(--surface-solid);border:1px solid var(--border-strong);box-shadow:var(--shadow);transition:transform .4s var(--spring)}
.bulkbar.show{transform:translate(-50%,0)}
.empty{text-align:center;color:var(--dim);padding:50px 10px}.empty .i{width:54px;height:54px;opacity:.5;margin-bottom:10px}
.lock-anim{width:84px;height:84px;margin:0 auto 12px;color:var(--accent)}
.lock-anim .sh{transform-origin:6px 11px;transition:transform .5s var(--spring)}
.lock-anim.open .sh{transform:translateY(-3px) rotate(-28deg)}
.lock-anim.shake{animation:shake .5s}
@keyframes shake{20%,60%{transform:translateX(-9px)}40%,80%{transform:translateX(9px)}}

/* upload */
.drop{border:2px dashed var(--border-strong);border-radius:var(--radius);padding:26px;text-align:center;color:var(--dim);cursor:pointer;transition:all .3s var(--ease)}
.drop:hover{border-color:var(--accent);color:var(--text);background:var(--surface-2)}
.dropov{position:fixed;inset:0;z-index:90;display:grid;place-items:center;background:color-mix(in srgb,var(--bg) 78%,transparent);backdrop-filter:blur(10px);opacity:0;pointer-events:none;transition:opacity .25s}
.dropov.on{opacity:1}
.dropov .zone{width:min(560px,86vw);padding:60px 20px;border:3px dashed var(--accent);border-radius:28px;text-align:center;font:700 1.5rem var(--head);animation:zonep 1.2s infinite;box-shadow:var(--glow);background:var(--surface)}
.dropov .zone .i{width:64px;height:64px;display:block;margin:0 auto 12px;color:var(--accent);animation:bob 1s infinite alternate}
@keyframes zonep{50%{transform:scale(1.03);border-color:var(--accent2)}}@keyframes bob{to{transform:translateY(-10px)}}
.uplist{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.up{padding:10px 14px;border-radius:12px;background:var(--surface-2);border:1px solid var(--border)}
.bar{height:8px;border-radius:8px;background:var(--surface-2);overflow:hidden;margin:8px 0 4px;border:1px solid var(--border)}
.bar i{display:block;height:100%;width:0;border-radius:8px;background:var(--grad);box-shadow:0 0 12px var(--accent);transition:width .25s linear;background-size:200% 100%;animation:barflow 2s linear infinite}
@keyframes barflow{to{background-position:-200% 0}}
.up.done .bar i{animation:none}.up.err .bar i{background:var(--danger);box-shadow:none}

/* modal / lightbox / toasts */
.modal-bg{position:fixed;inset:0;z-index:80;display:grid;place-items:center;padding:16px;background:rgba(3,4,12,.6);backdrop-filter:blur(6px);animation:fade .2s both}
.modal{width:min(560px,100%);max-height:90vh;overflow:auto;animation:pop .35s var(--spring) both}
.modal.wide{width:min(900px,100%)}
@keyframes fade{from{opacity:0}}@keyframes pop{from{opacity:0;transform:scale(.88) translateY(20px)}}
.lb{position:fixed;inset:0;z-index:95;background:rgba(2,3,8,.93);display:flex;flex-direction:column;animation:fade .2s both;touch-action:none}
.lb-stage{flex:1;position:relative;overflow:hidden;display:grid;place-items:center}
.lb img{max-width:100%;max-height:100%;transition:transform .15s ease-out;user-select:none;-webkit-user-drag:none;cursor:grab;will-change:transform}
.lb-bar{display:flex;gap:8px;align-items:center;padding:10px 14px;padding-top:calc(10px + var(--safe-t));color:#fff}
.lb .btn{color:#fff}
.lb-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:2}.lb-nav.l{left:10px}.lb-nav.r{right:10px}
.toasts{position:fixed;right:16px;top:calc(76px + var(--safe-t));z-index:120;display:flex;flex-direction:column;gap:10px;width:min(360px,calc(100vw - 32px))}
.toast{display:flex;gap:10px;align-items:flex-start;padding:12px 16px;border-radius:14px;background:var(--surface-solid);border:1px solid var(--border-strong);box-shadow:var(--shadow);animation:tin .5s var(--spring) both;overflow:hidden;position:relative}
.toast.out{animation:tout .3s ease-in forwards}.toast .i{margin-top:3px}
.toast.ok .i{color:var(--ok)}.toast.err .i{color:var(--danger)}.toast.info .i{color:var(--accent)}
.toast::after{content:"";position:absolute;left:0;bottom:0;height:2px;background:var(--grad);animation:tl var(--d,4s) linear forwards}
@keyframes tin{from{opacity:0;transform:translateX(60px) scale(.9)}}@keyframes tout{to{opacity:0;transform:translateX(60px)}}@keyframes tl{from{width:100%}to{width:0}}
[data-theme=neon] .toast{border-radius:0;clip-path:polygon(0 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%)}
.confetti{position:fixed;inset:0;pointer-events:none;z-index:130}
.menu{position:absolute;right:0;top:100%;z-index:40;min-width:200px;padding:6px;border-radius:14px;background:var(--surface-solid);border:1px solid var(--border-strong);box-shadow:var(--shadow);animation:pop .2s var(--spring) both;transform-origin:top right}
.menu button{display:flex;gap:10px;align-items:center;width:100%;padding:9px 12px;border:0;background:none;color:var(--text);border-radius:10px;font:500 .92rem var(--font);cursor:pointer;text-align:left}
.menu button:hover{background:var(--surface-2)}.menu button.danger{color:var(--danger)}

/* bottom nav + mobile */
.bnav{display:none}
@media(max-width:760px){
 :root{--nav-h:62px}
 .nav{display:none}.top-in{padding:8px 14px}.hide-m{display:none!important}
 main{padding:18px 14px calc(var(--nav-h) + var(--safe-b) + 40px)}
 .bnav{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;height:calc(var(--nav-h) + var(--safe-b));padding-bottom:var(--safe-b);background:color-mix(in srgb,var(--bg) 80%,transparent);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-top:1px solid var(--border)}
 .bnav a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:var(--dim);font-size:.7rem;text-decoration:none;font-weight:600;transition:color .2s,transform .2s var(--spring)}
 .bnav a .i{width:22px;height:22px}.bnav a.on{color:var(--accent)}.bnav a:active{transform:scale(.9)}
 .toasts{right:10px;left:10px;width:auto;top:calc(70px + var(--safe-t))}
 .themes-demo{grid-template-columns:1fr}.theme-tile .pv{height:56px}
 .toolbar input[type=search]{max-width:none;flex:1}.iact .btn.sm{min-height:40px;min-width:40px}
 .btn{min-height:44px}.modal{border-radius:22px 22px 0 0;align-self:end}.modal-bg{align-items:end;padding:0}
}

/* admin */
table.t{width:100%;border-collapse:collapse;font-size:.9rem}table.t th,table.t td{padding:10px 8px;text-align:left;border-bottom:1px solid var(--border)}table.t th{color:var(--dim);font-weight:600;font-size:.8rem;text-transform:uppercase;letter-spacing:.05em}
.tw{overflow-x:auto}
.stat{display:flex;flex-direction:column;gap:2px}.stat b{font:800 1.9rem var(--head);background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
[data-theme=neon] .stat b{color:var(--accent2);background:none;-webkit-text-fill-color:initial;text-shadow:0 0 12px var(--accent2)}
canvas.chart{width:100%;height:160px;display:block}
.qr{background:#fff;padding:12px;border-radius:12px;display:inline-block;line-height:0}
.code404{font:900 clamp(5rem,22vw,11rem)/1 var(--head);background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
[data-theme=neon] .code404{color:var(--accent);background:none;-webkit-text-fill-color:initial;text-shadow:0 0 30px var(--accent)}
footer.foot{text-align:center;color:var(--dim);font-size:.85rem;padding:30px 0}
.kbd{font:600 .78rem var(--mono);padding:2px 7px;border-radius:6px;border:1px solid var(--border-strong);background:var(--surface-2)}
.xp{height:4px;border-radius:4px;background:var(--surface-2);overflow:hidden}.xp i{display:block;height:100%;background:var(--warn)}
#install{display:none}
video,audio{max-width:100%;border-radius:12px}
iframe.pdf{width:100%;height:70vh;border:0;border-radius:12px;background:#fff}

@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
