/* Infinity Arcs portal - neon arcade theme. System fonts only (kids pages allow nothing from other origins). */
:root{
  --bg:#0a0918;--bg2:#121029;--panel:#17153a;--panel2:#221f52;--line:rgba(255,255,255,.09);--line2:rgba(255,255,255,.16);
  --glass:rgba(23,21,58,.62);--glass2:rgba(255,255,255,.05);
  --text:#f5f3ff;--muted:#a7a2d4;--faint:#6f6a9c;
  --accent:#8b5cf6;--accent2:#ec4899;--accent3:#22d3ee;--lime:#a3e635;--hot:#fb923c;--good:#34d399;--warn:#fbbf24;
  --grad:linear-gradient(135deg,#8b5cf6 0%,#ec4899 55%,#22d3ee 100%);
  --grad2:linear-gradient(90deg,#22d3ee,#8b5cf6,#ec4899);
  --glow:0 0 0 1px rgba(139,92,246,.55),0 10px 40px rgba(139,92,246,.45),0 0 60px rgba(236,72,153,.18);
  --r:16px;--gap:14px;--tile:176px;--top:66px;
  font-family:ui-rounded,"SF Pro Rounded","Nunito","Segoe UI",system-ui,-apple-system,Roboto,sans-serif;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
html,body{margin:0;background:var(--bg);color:var(--text)}
body{min-height:100vh;display:flex;flex-direction:column;-webkit-font-smoothing:antialiased;position:relative;overflow-x:hidden}
/* animated aurora backdrop + faint grid */
body::before{content:"";position:fixed;inset:-20vmax;z-index:-2;pointer-events:none;
  background:radial-gradient(40vmax 30vmax at 15% 10%,rgba(139,92,246,.28),transparent 60%),radial-gradient(35vmax 28vmax at 85% 15%,rgba(236,72,153,.18),transparent 60%),radial-gradient(40vmax 30vmax at 60% 90%,rgba(34,211,238,.14),transparent 60%);
  animation:aurora 24s ease-in-out infinite alternate}
body::after{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.35;
  background-image:linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px);background-size:44px 44px;
  -webkit-mask-image:radial-gradient(ellipse at 50% 0%,#000 0%,transparent 70%);mask-image:radial-gradient(ellipse at 50% 0%,#000 0%,transparent 70%)}
@keyframes aurora{0%{transform:translate3d(0,0,0) rotate(0)}50%{transform:translate3d(-3vmax,2vmax,0) rotate(8deg)}100%{transform:translate3d(3vmax,-2vmax,0) rotate(-6deg)}}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%;height:auto}
button{font:inherit;color:inherit;cursor:pointer}
:focus-visible{outline:2px solid var(--accent3);outline-offset:3px}
h1{font-size:clamp(1.6rem,3vw,2.4rem);margin:.6em 0 .3em;font-weight:900;letter-spacing:-.025em}
h2{font-size:1.2rem;margin:0;font-weight:850;letter-spacing:-.015em}
.sr,.skip:not(:focus){position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip:focus{position:fixed;top:8px;left:8px;z-index:99;background:#fff;color:#000;padding:8px 12px;border-radius:8px}
.wrap{width:100%;max-width:1480px;margin:0 auto;padding:0 24px 48px;flex:1;outline:none}
.js .ssr{display:none} /* crawlable server-injected content; JS renders the real UI */
.gtext{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
kbd{display:inline-grid;place-items:center;min-width:22px;height:22px;padding:0 6px;border-radius:6px;border:1px solid var(--line2);border-bottom-width:2px;background:var(--glass2);font:700 .72rem ui-monospace,Menlo,monospace;color:var(--muted)}

/* ---------- top bar ---------- */
.topbar{position:sticky;top:0;z-index:50;height:var(--top);display:flex;align-items:center;gap:18px;padding:0 24px;background:rgba(10,9,24,.72);backdrop-filter:blur(16px) saturate(1.4);-webkit-backdrop-filter:blur(16px) saturate(1.4);border-bottom:1px solid var(--line)}
.topbar::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--grad2);opacity:.55}
.logo{display:flex;align-items:center;gap:10px;font-weight:900;font-size:1.3rem;letter-spacing:-.03em;white-space:nowrap}
.logo img{filter:drop-shadow(0 0 10px rgba(139,92,246,.7));transition:transform .4s}
.logo:hover img{transform:rotate(-12deg) scale(1.08)}
.logo b{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.search{position:relative;flex:1;max-width:580px;margin:0 auto}
.search svg{position:absolute;left:15px;top:50%;width:18px;height:18px;transform:translateY(-50%);fill:var(--muted);pointer-events:none}
.search input{width:100%;height:44px;border-radius:999px;border:1px solid var(--line2);background:rgba(255,255,255,.05);color:var(--text);padding:0 52px 0 44px;font-size:1rem;outline:none;transition:border-color .2s,box-shadow .2s,background .2s}
.search input::placeholder{color:var(--faint)}
.search input:focus{border-color:var(--accent);background:rgba(139,92,246,.1);box-shadow:0 0 0 4px rgba(139,92,246,.22),0 0 30px rgba(139,92,246,.25)}
.search .kbd{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none}
.search input:focus ~ .kbd,.search input:not(:placeholder-shown) ~ .kbd{display:none}
.search input::-webkit-search-cancel-button{filter:invert(1);opacity:.6}
.suggest{position:absolute;top:52px;left:0;right:0;background:rgba(23,21,58,.97);backdrop-filter:blur(14px);border:1px solid var(--line2);border-radius:18px;box-shadow:0 24px 60px rgba(0,0,0,.6),0 0 40px rgba(139,92,246,.2);overflow:hidden;max-height:70vh;overflow-y:auto;padding:6px}
.suggest a{display:flex;align-items:center;gap:12px;padding:8px 10px;border-radius:12px;transition:background .12s}
.suggest a:hover,.suggest a[aria-selected=true]{background:rgba(139,92,246,.22)}
.suggest img{width:64px;height:48px;object-fit:cover;border-radius:10px;background:var(--bg2)}
.suggest small{color:var(--muted);display:block}
.suggest .all{justify-content:center;color:var(--accent3);font-weight:800}
.suggest .empty{padding:14px;color:var(--muted)}
.topnav{display:flex;gap:6px}
.topnav a{display:inline-flex;align-items:center;gap:7px;padding:9px 15px;border-radius:999px;font-weight:800;color:var(--muted);transition:.2s;border:1px solid transparent}
.topnav a svg{width:17px;height:17px;fill:currentColor}
.topnav a:hover{color:var(--text);background:var(--glass2);border-color:var(--line)}
.topnav a.on{color:#fff;background:rgba(139,92,246,.2);border-color:rgba(139,92,246,.5);box-shadow:0 0 20px rgba(139,92,246,.25)}
.badge[hidden]{display:none}
.badge{display:inline-block;min-width:20px;padding:0 6px;border-radius:999px;background:var(--accent2);color:#fff;font-size:.72rem;line-height:20px;text-align:center;box-shadow:0 0 12px rgba(236,72,153,.6)}

/* category chips */
.chips{display:flex;gap:8px;overflow-x:auto;padding:12px 24px;scrollbar-width:none;max-width:1480px;margin:0 auto;width:100%;-webkit-mask-image:linear-gradient(90deg,transparent,#000 24px,#000 calc(100% - 40px),transparent);mask-image:linear-gradient(90deg,transparent,#000 24px,#000 calc(100% - 40px),transparent)}
.chips::-webkit-scrollbar{display:none}
.chips a{flex:none;display:inline-flex;align-items:center;gap:6px;padding:8px 15px;border-radius:999px;background:var(--glass2);border:1px solid var(--line);font-weight:800;font-size:.88rem;color:var(--muted);transition:.2s}
.chips a:hover{color:#fff;border-color:var(--line2);background:rgba(255,255,255,.09);transform:translateY(-1px)}
.chips a.on{color:#fff;background:var(--grad);border-color:transparent;box-shadow:0 6px 20px rgba(139,92,246,.45)}

/* ---------- cards ---------- */
.card{position:relative;display:block;border-radius:var(--r);overflow:hidden;background:var(--panel);aspect-ratio:4/3;box-shadow:0 6px 18px rgba(0,0,0,.35);transition:transform .25s cubic-bezier(.3,1.5,.5,1),box-shadow .25s;isolation:isolate}
.card::after{content:"";position:absolute;inset:0;border-radius:inherit;padding:2px;background:var(--grad);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:0;transition:opacity .25s;pointer-events:none;z-index:3}
.card img{width:100%;height:100%;object-fit:cover;transition:transform .5s cubic-bezier(.2,.8,.2,1),filter .25s;background:linear-gradient(110deg,var(--panel) 30%,var(--panel2) 50%,var(--panel) 70%);background-size:200% 100%;animation:shimmer 1.4s infinite}
.card img.ok{animation:none}
.card .t{position:absolute;left:0;right:0;bottom:0;padding:28px 12px 10px;font-weight:850;font-size:.9rem;line-height:1.2;background:linear-gradient(transparent,rgba(8,6,24,.95));opacity:0;transform:translateY(8px);transition:.25s;z-index:2}
.card .t small{display:block;font-weight:700;font-size:.72rem;color:var(--accent3);margin-top:3px;text-transform:uppercase;letter-spacing:.06em}
.card .play{position:absolute;top:50%;left:50%;width:54px;height:54px;margin:-27px 0 0 -27px;border-radius:50%;background:var(--grad);display:grid;place-items:center;opacity:0;transform:scale(.5) rotate(-30deg);transition:.25s cubic-bezier(.3,1.6,.5,1);box-shadow:0 0 0 6px rgba(255,255,255,.12),0 8px 30px rgba(236,72,153,.6);z-index:2}
.card .play::before{content:"";border-left:17px solid #fff;border-top:11px solid transparent;border-bottom:11px solid transparent;margin-left:5px}
.card .fav{position:absolute;top:8px;right:8px;width:34px;height:34px;border-radius:50%;border:1px solid rgba(255,255,255,.15);background:rgba(8,6,24,.55);backdrop-filter:blur(6px);display:grid;place-items:center;opacity:0;transition:.2s;z-index:4}
.card .fav:hover{transform:scale(1.12)}
.card .fav svg{width:16px;height:16px;fill:none;stroke:#fff;stroke-width:2}
.card .fav.on{opacity:1}.card .fav.on svg{fill:var(--accent2);stroke:var(--accent2);filter:drop-shadow(0 0 6px rgba(236,72,153,.8))}
.card .tagline{position:absolute;top:8px;left:8px;padding:3px 9px;border-radius:8px;font-size:.66rem;font-weight:900;background:var(--grad);color:#fff;text-transform:uppercase;letter-spacing:.08em;z-index:4;box-shadow:0 4px 14px rgba(139,92,246,.5)}
.card .tagline.hot{background:linear-gradient(135deg,#f97316,#ef4444);box-shadow:0 4px 14px rgba(249,115,22,.5)}
.card .tagline.new{background:linear-gradient(135deg,#a3e635,#22c55e);color:#062010;box-shadow:0 4px 14px rgba(163,230,53,.45)}
.card:hover,.card:focus-visible{transform:translateY(-6px) scale(1.035);box-shadow:var(--glow);z-index:5;outline:none}
.card:hover::after,.card:focus-visible::after{opacity:1}
.card:hover img,.card:focus-visible img{transform:scale(1.1);filter:brightness(.7) saturate(1.3)}
.card:hover .t,.card:focus-visible .t,.card:hover .play,.card:focus-visible .play,.card:hover .fav,.card:focus-visible .fav{opacity:1;transform:none}
@media (hover:none){.card .t{opacity:1;transform:none;font-size:.78rem;padding-top:22px}.card .t small{display:none}.card .fav{opacity:.9}}
@keyframes shimmer{to{background-position:-200% 0}}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--tile),1fr));gap:var(--gap);grid-auto-flow:dense}
.grid.mosaic .card:nth-child(11n+1){grid-column:span 2;grid-row:span 2}
.grid.mosaic .card:nth-child(11n+1) .t{font-size:1.1rem;opacity:1;transform:none}
.row{margin:38px 0}
.row-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:10px}
.row-h h2{display:flex;align-items:center;gap:12px;font-size:1.3rem}
.row-h h2 small{font-size:.8rem;color:var(--muted);font-weight:700}
.row-h a,.row-h .tbtn{display:inline-flex;align-items:center;gap:4px;color:#fff;font-weight:800;font-size:.85rem;white-space:nowrap;padding:7px 14px;border-radius:999px;background:var(--glass2);border:1px solid var(--line);transition:.2s}
.row-h a:hover{background:rgba(139,92,246,.22);border-color:rgba(139,92,246,.5);box-shadow:0 0 18px rgba(139,92,246,.3)}
.row-h .ico{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;font-size:1.15rem;background:linear-gradient(135deg,rgba(139,92,246,.35),rgba(236,72,153,.25));border:1px solid rgba(255,255,255,.12);box-shadow:0 0 18px rgba(139,92,246,.3)}
.scroller{position:relative}
.scroller::before,.scroller::after{content:"";position:absolute;top:0;bottom:12px;width:36px;z-index:3;pointer-events:none}
.scroller::before{left:-2px;background:linear-gradient(90deg,var(--bg),transparent);opacity:var(--lf,0);transition:opacity .2s}
.scroller::after{right:-2px;background:linear-gradient(-90deg,var(--bg),transparent)}
.strip{display:grid;grid-auto-flow:column;grid-auto-columns:var(--tile);gap:var(--gap);overflow-x:auto;scroll-snap-type:x mandatory;padding:10px 4px 16px;margin:-10px -4px 0;scrollbar-width:none}
.strip::-webkit-scrollbar{display:none}
.strip .card{scroll-snap-align:start}
.arrow{position:absolute;top:calc(50% - 30px);width:44px;height:44px;border-radius:50%;border:1px solid var(--line2);background:rgba(23,21,58,.9);backdrop-filter:blur(8px);box-shadow:0 6px 20px rgba(0,0,0,.5);z-index:6;font-size:1.4rem;font-weight:900;display:none;transition:.2s}
.arrow:hover{background:var(--accent);box-shadow:0 0 24px rgba(139,92,246,.7)}
.arrow.l{left:-16px}.arrow.r{right:-16px}
@media (hover:hover) and (min-width:800px){.scroller:hover .arrow{display:grid;place-items:center}}
/* originals row: a wider, glowing strip for our own games */
.row.originals{padding:22px 22px 8px;border-radius:24px;background:linear-gradient(135deg,rgba(139,92,246,.16),rgba(236,72,153,.08) 50%,rgba(34,211,238,.08));border:1px solid rgba(139,92,246,.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 20px 60px rgba(139,92,246,.12)}
.row.originals .strip{grid-auto-columns:calc(var(--tile) * 1.25)}
.row.originals .scroller::after,.row.originals .scroller::before{display:none}
/* scroll reveal */
.reveal{opacity:0;transform:translateY(22px);transition:opacity .6s ease,transform .6s cubic-bezier(.2,.8,.2,1)}
.reveal.in{opacity:1;transform:none}

/* ---------- hero ---------- */
.hero{display:grid;grid-template-columns:2.1fr 1fr;gap:var(--gap);margin-top:18px}
.hero-main{position:relative;border-radius:26px;overflow:hidden;min-height:380px;background:var(--panel);box-shadow:0 30px 80px rgba(0,0,0,.5),0 0 0 1px var(--line2)}
.hero-slide{position:absolute;inset:0;opacity:0;transition:opacity .8s;display:flex;align-items:flex-end}
.hero-slide.on{opacity:1;z-index:1}
.hero-slide img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scale(1.12);transition:transform 7s ease-out}
.hero-slide.on img{transform:scale(1)}
.hero-slide::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(10,9,24,.97) 0%,rgba(10,9,24,.7) 40%,rgba(10,9,24,.1) 75%),linear-gradient(0deg,rgba(10,9,24,.9),transparent 45%)}
.hero-copy{position:relative;z-index:2;padding:36px;max-width:600px}
.hero-copy .k{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;background:rgba(255,255,255,.08);border:1px solid var(--line2);backdrop-filter:blur(6px);font-weight:900;font-size:.72rem;text-transform:uppercase;letter-spacing:.1em}
.hero-copy .k::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--lime);box-shadow:0 0 10px var(--lime);animation:blink 1.6s ease-in-out infinite}
.hero-copy h2{font-size:clamp(1.8rem,4vw,3.2rem);margin:.3em 0 .25em;font-weight:950;letter-spacing:-.035em;line-height:1.02;text-shadow:0 4px 30px rgba(0,0,0,.6)}
.hero-copy p{color:#dcd8ff;margin:0 0 20px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;max-width:480px}
.hero-ctas{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.hero-ctas .meta{color:var(--muted);font-weight:700;font-size:.85rem}
@keyframes blink{50%{opacity:.35}}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:13px 26px;border-radius:999px;border:0;background:var(--grad);background-size:160% 160%;color:#fff;font-weight:900;font-size:1rem;letter-spacing:.01em;box-shadow:0 10px 30px rgba(139,92,246,.5),inset 0 1px 0 rgba(255,255,255,.3);transition:transform .2s,box-shadow .2s,background-position .4s;text-transform:uppercase}
.btn:hover{transform:translateY(-2px) scale(1.04);background-position:100% 0;box-shadow:0 14px 40px rgba(236,72,153,.55),inset 0 1px 0 rgba(255,255,255,.3)}
.btn.ghost{background:var(--glass2);border:1px solid var(--line2);box-shadow:none;text-transform:none}
.btn.ghost:hover{background:rgba(139,92,246,.22);border-color:rgba(139,92,246,.5)}
.btn .pl{width:0;height:0;border-left:11px solid #fff;border-top:7px solid transparent;border-bottom:7px solid transparent}
.dots{position:absolute;right:20px;bottom:20px;z-index:3;display:flex;gap:7px}
.dots button{position:relative;width:10px;height:10px;border-radius:99px;border:0;background:rgba(255,255,255,.3);padding:0;overflow:hidden;transition:width .3s}
.dots button.on{width:42px;background:rgba(255,255,255,.25)}
.dots button.on::after{content:"";position:absolute;inset:0;background:#fff;transform-origin:left;animation:dotfill var(--slide,5.5s) linear forwards}
.hero-main.paused .dots button.on::after{animation-play-state:paused}
@keyframes dotfill{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.hero-nav{position:absolute;top:50%;z-index:4;width:44px;height:44px;margin-top:-22px;border-radius:50%;border:1px solid var(--line2);background:rgba(10,9,24,.55);backdrop-filter:blur(8px);font-size:1.4rem;font-weight:900;opacity:0;transition:.2s;display:grid;place-items:center}
.hero-nav.l{left:14px}.hero-nav.r{right:14px}
.hero-main:hover .hero-nav{opacity:1}
.hero-nav:hover{background:var(--accent);box-shadow:0 0 20px rgba(139,92,246,.7)}
.hero-side{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:var(--gap)}
.hero-side .card{aspect-ratio:auto;border-radius:20px}
.hero-side .card .t{opacity:1;transform:none}

/* category quick picks */
.quick{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(150px,1fr);gap:12px;overflow-x:auto;scrollbar-width:none;margin:22px -4px 0;padding:6px 4px}
.quick::-webkit-scrollbar{display:none}
.qcat{position:relative;display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:18px;background:linear-gradient(135deg,hsla(var(--h),85%,60%,.28),hsla(calc(var(--h) + 40),85%,50%,.1));border:1px solid hsla(var(--h),85%,65%,.35);overflow:hidden;transition:transform .25s cubic-bezier(.3,1.5,.5,1),box-shadow .25s;min-height:68px}
.qcat::after{content:"";position:absolute;width:80px;height:80px;right:-24px;bottom:-30px;border-radius:50%;background:hsla(var(--h),90%,65%,.35);filter:blur(18px)}
.qcat:hover{transform:translateY(-4px);box-shadow:0 12px 30px hsla(var(--h),85%,50%,.35)}
.qcat .e{font-size:1.7rem;line-height:1;filter:drop-shadow(0 4px 8px rgba(0,0,0,.4));transition:transform .3s}
.qcat:hover .e{transform:scale(1.2) rotate(-8deg)}
.qcat b{display:block;font-size:.92rem;line-height:1.15}
.qcat small{color:var(--muted);font-weight:700;font-size:.75rem}

/* ---------- game page ---------- */
.crumbs{font-size:.86rem;color:var(--muted);margin:18px 0 12px;display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-weight:700}
.crumbs a{color:var(--accent3)}
.crumbs a:hover{text-decoration:underline}
.gp{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:24px;align-items:start}
.stage{position:relative;padding:3px;border-radius:24px;background:var(--grad);box-shadow:0 0 50px rgba(139,92,246,.35),0 30px 80px rgba(0,0,0,.6)}
.stage::before{content:"";position:absolute;inset:-2px;border-radius:26px;background:var(--grad);filter:blur(18px);opacity:.45;z-index:-1;animation:breathe 4s ease-in-out infinite}
@keyframes breathe{50%{opacity:.2}}
.player{position:relative;border-radius:21px;overflow:hidden;background:#05040f;aspect-ratio:16/9}
.player.portrait{aspect-ratio:auto;height:min(78vh,860px);max-width:min(100%,520px);margin:0 auto}
.stage:has(.player.portrait){max-width:min(100%,526px);margin:0 auto}
.player iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:#000}
.cover{position:absolute;inset:0;display:grid;place-items:center;text-align:center;z-index:2;cursor:pointer;overflow:hidden}
.cover .bgimg{position:absolute;inset:-30px;width:calc(100% + 60px);height:calc(100% + 60px);object-fit:cover;filter:blur(22px) brightness(.4) saturate(1.4);transform:scale(1.05)}
.cover::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 50% 45%,transparent 0%,rgba(5,4,15,.6) 70%)}
.cover .inner{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:16px;padding:20px}
.cover .thumb{width:220px;aspect-ratio:4/3;object-fit:cover;border-radius:20px;box-shadow:0 0 0 3px rgba(255,255,255,.12),0 20px 50px rgba(0,0,0,.7);transition:transform .3s}
.cover:hover .thumb{transform:translateY(-4px) rotate(-1.5deg) scale(1.03)}
.cover h1{margin:0;font-size:clamp(1.4rem,3vw,2.2rem);text-shadow:0 4px 24px rgba(0,0,0,.7)}
.cover .chipline{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.cover .chipline span{padding:4px 11px;border-radius:999px;background:rgba(255,255,255,.08);border:1px solid var(--line2);font-size:.75rem;font-weight:800;color:#dcd8ff}
.cover .btn{font-size:1.2rem;padding:16px 40px;animation:pulse 2s ease-in-out infinite}
@keyframes pulse{0%,100%{box-shadow:0 10px 30px rgba(139,92,246,.5),0 0 0 0 rgba(236,72,153,.55)}50%{box-shadow:0 10px 30px rgba(139,92,246,.5),0 0 0 16px rgba(236,72,153,0)}}
.loading{position:absolute;inset:0;z-index:3;display:grid;place-items:center;background:rgba(5,4,15,.94);text-align:center;transition:opacity .35s}
.loading.done{opacity:0;pointer-events:none}
.spinner{width:64px;height:64px;border-radius:50%;margin:0 auto 16px;background:conic-gradient(from 0deg,transparent 0 25%,#22d3ee,#8b5cf6,#ec4899);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 6px),#000 calc(100% - 5px));mask:radial-gradient(farthest-side,transparent calc(100% - 6px),#000 calc(100% - 5px));animation:spin .8s linear infinite}
.loading .slow{color:var(--muted);font-size:.9rem;margin-top:10px}
@keyframes spin{to{transform:rotate(360deg)}}
.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:var(--glass);backdrop-filter:blur(12px);border:1px solid var(--line);border-radius:18px;padding:10px 12px;margin-top:16px}
.toolbar .name{font-weight:900;margin-right:auto;flex:1 1 0;display:flex;align-items:center;gap:12px;min-width:0;font-size:1.05rem}
.toolbar .name img{width:46px;height:34px;border-radius:9px;object-fit:cover;box-shadow:0 0 0 1px var(--line2)}
.toolbar .name span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tbtn{display:inline-flex;align-items:center;gap:7px;height:40px;padding:0 14px;border-radius:12px;border:1px solid var(--line);background:var(--glass2);font-weight:800;font-size:.88rem;transition:.2s}
.tbtn:hover:not(:disabled){background:rgba(139,92,246,.22);border-color:rgba(139,92,246,.5);transform:translateY(-1px)}
.tbtn:disabled{opacity:.45;cursor:default}
.tbtn svg{width:18px;height:18px;fill:currentColor}
.tbtn.on{color:var(--accent2);border-color:rgba(236,72,153,.5);background:rgba(236,72,153,.12)}
.tbtn.on svg{filter:drop-shadow(0 0 6px rgba(236,72,153,.8))}
.info{background:var(--glass);backdrop-filter:blur(12px);border:1px solid var(--line);border-radius:20px;padding:22px 24px;margin-top:16px;line-height:1.6}
.info h2{margin-bottom:8px;display:flex;align-items:center;gap:10px}
.info h2 i{font-style:normal;width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-size:.95rem;background:rgba(139,92,246,.22)}
.info p{color:#dcd8ff;margin:.4em 0 1.1em}
.info .howto{padding:12px 16px;border-radius:14px;background:rgba(34,211,238,.07);border:1px solid rgba(34,211,238,.25)}
.tags{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 0}
.tags a,.tags span{padding:5px 12px;border-radius:999px;background:var(--glass2);border:1px solid var(--line);font-size:.8rem;color:var(--muted);font-weight:800}
.tags a.cat{background:var(--grad);border-color:transparent;color:#fff}
.side{position:sticky;top:calc(var(--top) + 16px)}
.side h2{margin:0 0 12px;display:flex;align-items:center;gap:8px}
.side .grid{--tile:140px;grid-template-columns:1fr 1fr;gap:12px}
.player.fake-fs{position:fixed;inset:0;z-index:100;border-radius:0;height:100%;max-width:none;aspect-ratio:auto}
.fs-exit{display:none;position:absolute;top:10px;right:10px;z-index:5;width:40px;height:40px;border-radius:50%;border:0;background:rgba(0,0,0,.6);font-size:1.2rem}
.player.fake-fs .fs-exit{display:block}

/* ---------- misc pages ---------- */
.page-h{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;flex-wrap:wrap}
.page-h p{color:var(--muted);margin:0 0 6px;font-weight:600}
.cat-hero{position:relative;display:flex;align-items:center;gap:22px;margin:6px 0 22px;padding:26px 28px;border-radius:24px;overflow:hidden;background:linear-gradient(135deg,hsla(var(--h),85%,58%,.32),hsla(calc(var(--h) + 50),85%,50%,.12) 60%,transparent),var(--glass);border:1px solid hsla(var(--h),85%,65%,.35)}
.cat-hero::after{content:"";position:absolute;right:-60px;top:-60px;width:240px;height:240px;border-radius:50%;background:hsla(var(--h),90%,60%,.35);filter:blur(50px)}
.cat-hero .e{font-size:3.2rem;line-height:1;filter:drop-shadow(0 6px 14px rgba(0,0,0,.4))}
.cat-hero h1{margin:0 0 4px}
.cat-hero p{margin:0;color:#dcd8ff;font-weight:600}
.cat-hero .count{position:relative;z-index:1;margin-left:auto;text-align:right;font-weight:900;font-size:2rem;line-height:1}
.cat-hero .count small{display:block;font-size:.75rem;color:var(--muted);text-transform:uppercase;letter-spacing:.1em}
.cat-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:var(--gap);margin-top:18px}
.cat-tile{position:relative;border-radius:20px;overflow:hidden;aspect-ratio:16/9;background:var(--panel);transition:transform .25s cubic-bezier(.3,1.5,.5,1),box-shadow .25s;border:1px solid hsla(var(--h),85%,65%,.3)}
.cat-tile img{width:100%;height:100%;object-fit:cover;filter:brightness(.45) saturate(1.3);transition:transform .5s,filter .3s}
.cat-tile::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(135deg,hsla(var(--h),85%,55%,.55),transparent 65%)}
.cat-tile .e{position:absolute;top:14px;right:16px;z-index:2;font-size:2.2rem;filter:drop-shadow(0 4px 10px rgba(0,0,0,.5));transition:transform .3s}
.cat-tile div{position:absolute;inset:auto 0 0 0;z-index:2;padding:16px;font-weight:900;font-size:1.2rem;letter-spacing:-.01em}
.cat-tile small{display:block;font-weight:700;color:#e2deff;font-size:.8rem}
.cat-tile:hover{transform:translateY(-5px) scale(1.02);box-shadow:0 16px 40px hsla(var(--h),85%,50%,.4)}
.cat-tile:hover img{transform:scale(1.08);filter:brightness(.55) saturate(1.4)}
.cat-tile:hover .e{transform:scale(1.2) rotate(-10deg)}
.pager{display:flex;gap:6px;justify-content:center;flex-wrap:wrap;margin:28px 0}
.pager a,.pager span{min-width:42px;height:42px;display:grid;place-items:center;padding:0 12px;border-radius:12px;background:var(--glass2);border:1px solid var(--line);font-weight:900;transition:.2s}
.pager a:hover{background:rgba(139,92,246,.22);border-color:rgba(139,92,246,.5)}
.pager .on{background:var(--grad);border-color:transparent;box-shadow:0 6px 18px rgba(139,92,246,.45)}
.pager .gap{background:none;border:0}
.more{display:flex;justify-content:center;margin:20px 0}
.sentinel{height:1px}
.empty-state{text-align:center;color:var(--muted);padding:44px 10px}
.empty-state .big{font-size:3rem;margin-bottom:6px}
.empty-state .btn{margin-top:14px}
.nf{text-align:center;padding:40px 10px 0}
.nf .code{font-size:clamp(5rem,16vw,10rem);font-weight:950;line-height:.9;letter-spacing:-.06em;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 30px rgba(139,92,246,.45));animation:glitch 3s steps(1) infinite}
.nf h1{font-size:clamp(1.6rem,4vw,2.6rem);margin:.2em 0}
.nf p{color:var(--muted);font-weight:600}
.nf .row-btns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:18px}
@keyframes glitch{0%,92%,100%{transform:none}93%{transform:translate(3px,-2px) skewX(6deg)}95%{transform:translate(-3px,2px) skewX(-6deg)}97%{transform:translate(2px,1px)}}
.big-search{position:relative;display:flex;gap:8px;margin:12px 0 18px}
.big-search input{flex:1;height:58px;border-radius:18px;border:1px solid var(--line2);background:rgba(255,255,255,.05);color:var(--text);padding:0 20px;font-size:1.15rem;font-weight:600;outline:none;transition:.2s}
.big-search input:focus{border-color:var(--accent);box-shadow:0 0 0 4px rgba(139,92,246,.22),0 0 30px rgba(139,92,246,.25)}
.result-h{color:var(--muted);font-weight:700;margin:6px 0 14px}
.notice{margin:16px 0 0;padding:11px 16px;border-radius:14px;background:rgba(251,191,36,.1);border:1px solid rgba(251,191,36,.4);color:#fde68a;font-size:.88rem;font-weight:600}
.skeleton-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--tile),1fr));gap:var(--gap);margin-top:20px}
.skeleton-grid i{aspect-ratio:4/3;border-radius:var(--r);background:linear-gradient(110deg,var(--panel) 30%,var(--panel2) 50%,var(--panel) 70%);background-size:200% 100%;animation:shimmer 1.4s infinite}
.toast{position:fixed;left:50%;bottom:90px;transform:translateX(-50%) translateY(20px);background:rgba(23,21,58,.96);border:1px solid var(--line2);backdrop-filter:blur(10px);padding:11px 20px;border-radius:999px;font-weight:800;opacity:0;transition:.3s cubic-bezier(.3,1.5,.5,1);z-index:200;pointer-events:none;box-shadow:0 12px 40px rgba(0,0,0,.5),0 0 30px rgba(139,92,246,.3)}
.toast.on{opacity:1;transform:translateX(-50%)}
.totop{position:fixed;right:22px;bottom:24px;z-index:55;width:48px;height:48px;border-radius:50%;border:1px solid var(--line2);background:var(--grad);color:#fff;font-size:1.3rem;font-weight:900;box-shadow:0 10px 30px rgba(139,92,246,.5);opacity:0;transform:translateY(20px) scale(.8);transition:.3s cubic-bezier(.3,1.5,.5,1);pointer-events:none;display:grid;place-items:center}
.totop.on{opacity:1;transform:none;pointer-events:auto}
.totop:hover{transform:translateY(-3px) scale(1.06)}
.footer{position:relative;border-top:1px solid var(--line);background:linear-gradient(180deg,rgba(18,16,41,.6),rgba(10,9,24,.95));margin-top:40px}
.footer::before{content:"";position:absolute;top:-1px;left:0;right:0;height:1px;background:var(--grad2);opacity:.6}
.footer-in{max-width:1480px;margin:0 auto;padding:30px 24px;display:grid;gap:12px;color:var(--muted);font-size:.9rem}
.footer-in>div{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.footer-in>div strong{color:var(--text);font-size:1.05rem}.footer-in>div p{margin:0;flex-basis:100%}
.footer nav{display:flex;gap:18px;flex-wrap:wrap}.footer nav a{color:var(--text);font-weight:800;transition:color .2s}.footer nav a:hover{color:var(--accent3)}
.fine{font-size:.78rem;margin:0}
.bottomnav{display:none}

/* ---------- responsive ---------- */
@media (max-width:1100px){.gp{grid-template-columns:1fr}.side{position:static}.side .grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}}
@media (max-width:900px){.hero{grid-template-columns:1fr}.hero-side{grid-template-columns:repeat(4,1fr);grid-template-rows:auto}.hero-side .card{aspect-ratio:4/3}}
@media (max-width:760px){
  :root{--tile:128px;--gap:10px;--top:58px}
  .wrap{padding:0 14px 96px}
  .topbar{padding:0 14px;gap:10px}
  .logo span,.topnav,.search .kbd{display:none}
  .chips{padding:10px 14px}
  .hero-main{min-height:280px;border-radius:20px}
  .hero-copy{padding:20px 20px 46px}.hero-copy p,.hero-ctas .meta{display:none}
  .hero-copy .k{font-size:.62rem;letter-spacing:.06em}
  .dots{left:20px;right:auto;bottom:18px}
  .hero-nav{display:none}
  .hero-side{grid-template-columns:repeat(2,1fr)}
  .row{margin:28px 0}
  .row.originals{padding:16px 14px 4px;margin-left:-6px;margin-right:-6px}
  .grid.mosaic .card:nth-child(11n+1){grid-column:span 2;grid-row:span 2}
  .stage{margin:0 -14px;border-radius:0;padding:2px 0}
  .stage::before{display:none}
  .player{border-radius:0}
  .player.portrait{height:72vh}
  .player:not(.portrait){aspect-ratio:4/3}
  .cover .thumb{width:120px;border-radius:14px}
  .cover .inner{gap:10px;padding:10px}
  .cover h1{font-size:1.25rem}
  .cover .btn{padding:13px 30px;font-size:1.05rem}
  .toolbar{gap:4px;padding:8px}.tbtn{padding:0 11px}
  .toolbar .tlabel{display:none}
  .cat-hero{padding:18px;gap:14px}.cat-hero .e{font-size:2.4rem}.cat-hero .count{font-size:1.4rem}
  .bottomnav{display:flex;position:fixed;left:10px;right:10px;bottom:calc(8px + env(safe-area-inset-bottom));z-index:60;background:rgba(18,16,41,.88);backdrop-filter:blur(16px) saturate(1.4);-webkit-backdrop-filter:blur(16px) saturate(1.4);border:1px solid var(--line2);border-radius:22px;padding:6px;box-shadow:0 12px 40px rgba(0,0,0,.6)}
  .bottomnav a{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 0;border-radius:16px;font-size:.68rem;font-weight:800;color:var(--muted);transition:.2s}
  .bottomnav svg{width:23px;height:23px;fill:currentColor}
  .bottomnav a.on{color:#fff;background:linear-gradient(135deg,rgba(139,92,246,.4),rgba(236,72,153,.25))}
  .bottomnav a.on svg{fill:#fff;filter:drop-shadow(0 0 6px rgba(236,72,153,.8))}
  .footer{margin-bottom:84px}
  .toast{bottom:96px}
  .totop{bottom:96px;right:16px;width:44px;height:44px}
}
/* player on portrait phones: 'any' games get the same tall box as portrait games (full width, viewport below the header minus crumbs/controls) */
@media (max-width:760px) and (orientation:portrait){
  .player.portrait,.player.any{aspect-ratio:auto;height:calc(100svh - var(--top) - 130px);min-height:420px;max-width:none;margin:0}
  .stage:has(.player.portrait){max-width:none}
}
/* landscape games on portrait phones: friendly turn-sideways overlay (no images, no network; hides itself when the phone rotates) */
.rotate-ov{display:none}
@media (max-width:760px) and (orientation:portrait){
  .player.landscape:not(.rot-dismissed):not(.fake-fs) .rotate-ov{display:flex}
}
.rotate-ov{position:absolute;inset:0;z-index:6;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:12px;text-align:center;background:rgba(10,9,24,.92);color:#fff}
.rotate-ov .rot-ic{font-size:2.8rem;line-height:1;animation:rotspin 2.4s ease-in-out infinite}
.rotate-ov p{margin:0;font-weight:900;font-size:1.15rem}
.rotate-ov .rot-big{min-height:52px;min-width:200px;padding:12px 22px;border:0;border-radius:999px;font-size:1.05rem;font-weight:900;background:var(--grad);color:#fff;cursor:pointer;box-shadow:0 10px 30px rgba(139,92,246,.5)}
.rotate-ov .rot-skip{min-height:48px;min-width:160px;padding:10px 16px;border:0;border-radius:12px;background:transparent;color:#d6d9ff;font-size:.95rem;text-decoration:underline;cursor:pointer}
@keyframes rotspin{0%,30%{transform:rotate(0)}60%,100%{transform:rotate(90deg)}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}.reveal{opacity:1;transform:none}}

/* landscape phones (short viewport + touch): the player fits the visible height (100dvh minus the sticky header). While a game is
   playing the header stops being sticky and app.js scrolls the player into view, so the whole player (100dvh) is on screen.
   The ⛶ button stays in the toolbar under the player. Desktop / fine pointers never match this query. */
@media (orientation:landscape) and (max-height:500px) and (pointer:coarse){
  .player{aspect-ratio:auto;height:calc(100vh - var(--top));height:calc(100dvh - var(--top))}
  .stage{padding:0;border-radius:0}.stage::before{display:none}
  body.ig-playing .topbar{position:relative}
  body.ig-playing .player{height:100vh;height:100dvh;border-radius:0}
  body.ig-playing .player.fake-fs{height:100%}
}
/* phones: the fixed bottom nav would cover the bottom of the player, so it is hidden while a game is playing */
@media (max-width:760px){
  body.ig-playing .bottomnav,body.ig-playing .totop{display:none}
  body.ig-playing .footer{margin-bottom:0}
}
/* kids pages: same look, calmer motion */
[data-kids="1"] body::before,body[data-kids="1"]::before{animation:none}
body[data-kids="1"] .stage::before{animation:none}
/* /licenses (site-wide open-source notices; built by scripts/build.mjs from the packages' LICENSE/LICENSES/THIRD_PARTY files) */
.lic section{margin:18px 0 26px}
.lic h2{font-size:1.15rem;margin:0 0 8px}
.lic ul{margin:0 0 10px;padding-left:20px;color:var(--text)}
.lic pre{white-space:pre-wrap;word-break:break-word;font-size:.8rem;line-height:1.45;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);border-radius:10px;padding:12px 14px;color:var(--muted);max-width:80ch}
.lic details summary{cursor:pointer;font-weight:700;margin:6px 0}

/* ---------- splash: first page of a visit (non-kids pages only; header.html skips it for the rest of the session) ---------- */
.splash{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;background:radial-gradient(60vmax 45vmax at 30% 20%,rgba(139,92,246,.35),transparent 60%),radial-gradient(50vmax 40vmax at 75% 80%,rgba(236,72,153,.22),transparent 60%),var(--bg);
  transition:opacity .55s ease,visibility .55s;animation:splash-failsafe 0s linear 8s forwards}
.splash.out{opacity:0;visibility:hidden}
html:not(.js) .splash,.no-splash .splash{display:none}
.splash-in{display:flex;flex-direction:column;align-items:center;gap:18px;animation:splash-up .6s cubic-bezier(.2,.8,.2,1) both}
.splash-logo{position:relative;width:128px;height:128px;display:grid;place-items:center}
.splash-logo img{position:relative;z-index:1;filter:drop-shadow(0 0 24px rgba(139,92,246,.9));animation:splash-pulse 1.6s ease-in-out infinite}
.splash-ring{position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0 30%,#22d3ee,#8b5cf6,#ec4899,transparent 95%);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 5px),#000 calc(100% - 4px));mask:radial-gradient(farthest-side,transparent calc(100% - 5px),#000 calc(100% - 4px));animation:spin 1.1s linear infinite}
.splash-name{font-size:clamp(1.8rem,5vw,2.6rem);font-weight:950;letter-spacing:-.04em}
.splash-name b{background:var(--grad);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:splash-shine 2.4s linear infinite}
.splash-bar{width:min(240px,60vw);height:6px;border-radius:99px;background:rgba(255,255,255,.08);overflow:hidden}
.splash-bar i{display:block;width:40%;height:100%;border-radius:99px;background:var(--grad2);animation:splash-load 1.2s ease-in-out infinite}
.splash-tip{color:var(--muted);font-weight:700;font-size:.9rem;letter-spacing:.02em}
@keyframes splash-pulse{50%{transform:scale(1.08)}}
@keyframes splash-load{0%{transform:translateX(-110%)}100%{transform:translateX(260%)}}
@keyframes splash-shine{to{background-position:-200% 0}}
@keyframes splash-up{from{opacity:0;transform:translateY(14px) scale(.96)}}
@keyframes splash-failsafe{to{opacity:0;visibility:hidden}}
