/* ============ NEON ARCADE — shared theme ============ */
:root{
  --bg:#07070f;
  --bg2:#0f0524;
  --teal:#2dd4bf;
  --pink:#ff2d75;
  --purple:#c14dff;
  --accent:#ffb02d;
  --text:#e0fff8;
  --muted:#8a93b2;
  --card:#11132a;
  --card2:#171a36;
  /* ---- Apple-style squircle radius scale (harmonized across the site) ---- */
  --r-xs:10px;   /* tiny chips / badges */
  --r-sm:14px;   /* buttons, pills, inputs */
  --r-md:20px;   /* cards, thumbnails */
  --r-lg:26px;   /* modals, panels */
  --r-xl:32px;   /* big hero containers */
}
/* True superellipse "squircle" corners where the browser supports the new
   CSS corner-shape spec (Chrome 139+/Safari TP). Everywhere else, the generous
   border-radius above already gives a clean, premium rounded look. This is
   progressive enhancement — nothing breaks on older browsers. */
@supports (corner-shape: superellipse(2)){
  .card,.thumb,.pillbtn,.btn,.catbtn,.np-cta,.search,.neon-modal,.menu-panel,
  .ad,.tag,.fav-btn,.theme-swatch,.menu-item,.menu-toggle-btn,.nav-links,
  .menu-toggle,.nav-toggle,.menu-btn{
    corner-shape: superellipse(2.2); /* ~iOS app-icon squircle */
  }
  .fav-btn,.theme-swatch{ corner-shape: superellipse(3); } /* rounder for circles */
}
*{margin:0;padding:0;box-sizing:border-box}
/* Solid dark base FIRST so fast mobile scroll never flashes white in the
   not-yet-painted area. The gradient layers on top. */
html{background-color:var(--bg);}
html,body{min-height:100%;background-color:var(--bg);background-image:
  radial-gradient(1200px 600px at 50% -10%, color-mix(in srgb, var(--teal) 14%, transparent), transparent),
  linear-gradient(180deg,var(--bg),var(--bg2));
  background-attachment:fixed;
  transition:background .4s ease;
  color:var(--text);font-family:'Segoe UI',system-ui,sans-serif;
  -webkit-overflow-scrolling:touch;overscroll-behavior:none;}
/* Themed scrollbar so the track matches the neon theme, not a white gutter */
html{scrollbar-color:var(--teal) var(--bg2);}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:var(--bg2)}
::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--teal) 55%,transparent);border-radius:8px}
::-webkit-scrollbar-thumb:hover{background:var(--teal)}
a{color:inherit;text-decoration:none}
.mono{font-family:'Courier New',monospace}

/* header */
.nav{display:flex;align-items:center;justify-content:space-between;
  padding:16px 30px;max-width:1700px;margin:0 auto;position:sticky;top:0;
  backdrop-filter:blur(8px);background:rgba(7,7,15,.55);z-index:50}
.logo{font-family:'Courier New',monospace;font-weight:bold;font-size:24px;
  letter-spacing:3px;color:var(--teal);text-shadow:0 0 18px rgba(45,212,191,.6)}
.logo span{color:var(--pink);text-shadow:0 0 18px rgba(255,45,117,.6)}
.nav-links a{color:var(--muted);margin-left:22px;font-size:14px;letter-spacing:1px;
  text-transform:uppercase;transition:.2s}
.nav-links a:hover{color:var(--teal)}

/* hero */
.hero{text-align:center;padding:56px 20px 30px;max-width:900px;margin:0 auto}
.hero h1{font-family:'Courier New',monospace;font-size:clamp(34px,7vw,68px);
  letter-spacing:4px;line-height:1.05;
  background:linear-gradient(90deg,var(--teal),var(--purple),var(--pink));
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 24px rgba(193,77,255,.35))}
.hero p{color:var(--muted);margin-top:16px;font-size:18px}

/* ad slots */
.ad{margin:26px auto;max-width:1280px;min-height:90px;display:flex;
  align-items:center;justify-content:center;border:1px dashed rgba(138,147,178,.35);
  border-radius:var(--r-md);color:var(--muted);font-size:13px;letter-spacing:2px;
  text-transform:uppercase;background:rgba(255,255,255,.02)}
.ad.tall{min-height:250px}
/* Placeholders stay hidden until a real ad network is set in js/ad-manager.js (html.ads-live) */
.ad{display:none}
html.ads-live .ad{display:flex}
html.ads-live.is-premium .ad{display:none !important}

/* toast stack: popups queue up instead of overlapping */
#toastStack{position:fixed;left:50%;transform:translateX(-50%);bottom:22px;z-index:99999;display:flex;flex-direction:column-reverse;align-items:center;gap:10px;pointer-events:none;max-width:92vw}
body.has-cookie #toastStack{bottom:96px}
#toastStack>div{position:static !important;transform:none !important;margin:0 !important}

/* grid */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));
  gap:20px;max-width:1100px;margin:10px auto 40px;padding:0 20px}
.card{background:linear-gradient(160deg,var(--card),var(--card2));
  border:1px solid rgba(255,255,255,.06);border-radius:var(--r-md);overflow:hidden;
  transition:.22s;cursor:pointer;position:relative}
.card:hover{transform:translateY(-6px);border-color:var(--teal);
  box-shadow:0 14px 40px rgba(45,212,191,.18)}
/* Thumbnails are SQUARE (the AI art is 1:1) so the frame is square too — the
   image fills it edge-to-edge with zero cropping. THIS is the "fit the frame" fix. */
.thumb{aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;
  font-size:44px;position:relative;overflow:hidden}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}
.thumb::after{content:'';position:absolute;inset:0;
  background:linear-gradient(180deg,transparent 60%,rgba(0,0,0,.5))}
.card h3{padding:12px 14px 3px;font-size:15px;letter-spacing:.5px}
.card p{padding:0 14px 14px;color:var(--muted);font-size:12px;line-height:1.4}
.tag{position:absolute;top:10px;right:10px;background:rgba(0,0,0,.5);
  color:var(--teal);font-size:11px;padding:4px 8px;border-radius:var(--r-sm);
  letter-spacing:1px;z-index:2}

.newbadge{position:absolute;left:48px;top:14px;z-index:3;background:linear-gradient(135deg,var(--pink),var(--purple));color:#fff;font-size:10px;font-weight:800;letter-spacing:1.5px;padding:3px 9px;border-radius:var(--r-xs);box-shadow:0 0 14px rgba(255,45,117,.5)}

/* play page frame */
.play-wrap{max-width:1000px;margin:0 auto;padding:20px}
.play-frame{width:100%;border:none;border-radius:var(--r-sm);
  box-shadow:0 0 50px rgba(45,212,191,.12);background:#07070f;display:block}
.back{display:inline-block;color:var(--muted);margin:10px 0;font-size:14px}
.back:hover{color:var(--teal)}

/* footer */
footer{border-top:1px solid rgba(255,255,255,.06);margin-top:40px;
  padding:30px 20px;text-align:center;color:var(--muted);font-size:13px}
footer a{color:var(--teal)}

/* generic page text */
.page{max-width:760px;margin:0 auto;padding:30px 22px 60px;line-height:1.7}
.page h1{font-family:'Courier New',monospace;color:var(--teal);margin-bottom:18px;letter-spacing:2px}
.page h2{margin:24px 0 8px;color:var(--text)}
.page p,.page li{color:var(--muted);margin-bottom:10px}
.page ul{padding-left:22px}

/* ============ AD ARCHITECTURE — layout reflow (zero-clutter) ============ */
/* Sidebar anchors live in fixed outer margins. We indent the page content
   by --ad-margin (set by ad-manager.js) so gameplay/content NEVER overlaps
   an ad. On premium or narrow screens --ad-margin is unset (= 0). */
:root{ --ad-margin: 0px; }
/* Side anchors only appear on ultra-wide screens (>=1620px) and sit in the
   genuinely-empty margin beyond the centered content (max ~1280px), so they
   NEVER squeeze the game grid or gameplay. No content reflow needed —
   the layout stays fully immersive at every normal screen size. */
/* Premium users: hide every ad surface entirely, reclaim the margins */
html.is-premium #neon-ad-left,
html.is-premium #neon-ad-right,
html.is-premium .ad{ display:none !important; }
html.is-premium{ --ad-margin: 0px; }

/* The in-content ad placeholders inherit the neon look already (.ad).
   Give them a subtle premium-removable shimmer line for polish. */
.ad{ position:relative; overflow:hidden; }
.ad::before{
  content:""; position:absolute; top:0; left:-40%; width:40%; height:100%;
  background:linear-gradient(90deg,transparent,rgba(45,212,191,.08),transparent);
  animation:adsheen 4s linear infinite;
}
@keyframes adsheen{ to{ left:140%; } }
html.is-premium .ad::before{ display:none; }

/* ============ PREMIUM cosmetics ============ */
/* Zen mode: ultra-clean — dims non-essential chrome for distraction-free play */
html.cos-zen .ad,
html.cos-zen #neon-ad-left,
html.cos-zen #neon-ad-right{ display:none !important; }
html.cos-zen .share,
html.cos-zen footer p:last-child{ opacity:.0; pointer-events:none; }
html.cos-zen .nav{ background:transparent; backdrop-filter:none; }
/* premium star button in nav */
.nav .premium-link{ color:var(--accent,#ffb02d)!important; text-shadow:0 0 12px rgba(255,176,45,.5);
  border:1px solid rgba(255,176,45,.4); padding:5px 12px; border-radius:18px; }
.nav .premium-link:hover{ box-shadow:0 0 16px rgba(255,176,45,.4); }
html.is-premium .nav .premium-link::before{ content:"⭐ "; }

/* ============ FLUID ANIMATION SYSTEM (site-wide) ============ */
/* GPU-friendly defaults + a smooth global easing token */
:root{ --ease: cubic-bezier(.16,1,.3,1); }

/* Card hover: lift + glow, GPU-accelerated, springy */
.card{ transition:transform .35s var(--ease), box-shadow .35s var(--ease), border-color .25s ease; will-change:transform; }
.card:hover{ transform:translateY(-8px) scale(1.015); }
.card img{ transition:transform .5s var(--ease), opacity .5s ease; }
.card:hover img{ transform:scale(1.07); }
/* thumbnails fade in as they load */
/* Robust fade-in: images are VISIBLE by default (opacity:1) so a cache race or a
   missed onload can NEVER leave a thumbnail permanently blank. The .loaded class
   just re-triggers a gentle fade the first time it decodes. */
.card img{ opacity:1; animation:thumbIn .5s var(--ease) both; }
@keyframes thumbIn{ from{ opacity:0; } to{ opacity:1; } }

/* Card entrance stagger (applied via .reveal on grid items) */
@keyframes cardIn{ from{ opacity:0; transform:translateY(18px) scale(.98);} to{ opacity:1; transform:none; } }
.card.reveal{ animation:cardIn .5s var(--ease) both; }

/* Pill/button micro-interactions everywhere */
.pillbtn, .btn, .catbtn, .np-cta{ transition:transform .15s var(--ease), box-shadow .25s ease, color .2s, border-color .2s, background .2s; }
.pillbtn:active, .btn:active, .np-cta:active{ transform:scale(.95); }

/* Smooth category sidebar item slide */
.catbtn{ transition:background .2s var(--ease), color .2s, box-shadow .2s, transform .15s var(--ease); }
.catbtn:hover{ transform:translateX(3px); }

/* Hero title subtle float */
@keyframes heroFloat{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(-4px); } }
.hero h1{ animation:heroFloat 6s ease-in-out infinite; }

/* Logo pulse glow */
.logo{ transition:filter .3s; }
.logo:hover{ filter:drop-shadow(0 0 10px var(--teal)); }

/* Modal/overlay fade+scale (used by premium/store/help overlays) */
@keyframes overlayIn{ from{ opacity:0; } to{ opacity:1; } }
@keyframes cardPop{ from{ opacity:0; transform:translateY(14px) scale(.96);} to{ opacity:1; transform:none; } }

/* Force exact column counts at breakpoints. The sidebar (~210px) eats width,
   so minmax math under-counts; explicit columns guarantees 6 across on desktop. */
@media(min-width:760px){
  .grid2{ grid-template-columns:repeat(4,1fr) !important; gap:16px !important; }
}
@media(min-width:1050px){
  .grid2{ grid-template-columns:repeat(5,1fr) !important; }
}
@media(min-width:1250px){
  .grid2{ grid-template-columns:repeat(6,1fr) !important; gap:18px !important; }
}

/* Page-level smooth load */
body{ animation:overlayIn .4s ease both; }

/* Respect users who prefer less motion (accessibility + perf) */
@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{ animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; scroll-behavior:auto !important; }
  .hero h1{ animation:none; }
}

/* 3D game badge */
.tag.badge3d{ background:rgba(193,77,255,.22); color:var(--purple)!important; }

/* ============ SHARED MODAL SYSTEM (premium/store/earn/support) ============ */
.neon-modal-ov{position:fixed;inset:0;z-index:10000;display:flex;align-items:center;justify-content:center;
  background:rgba(3,3,10,.82);backdrop-filter:blur(8px);padding:20px;animation:overlayIn .25s ease both}
.neon-modal{max-width:420px;width:100%;text-align:center;background:linear-gradient(160deg,var(--bg2),var(--bg));
  border:1px solid color-mix(in srgb,var(--teal) 45%,transparent);border-radius:var(--r-lg);padding:28px 26px;
  box-shadow:0 0 70px color-mix(in srgb,var(--purple) 30%,transparent);
  font-family:'Segoe UI',system-ui,sans-serif;color:#e0fff8;animation:cardPop .4s var(--ease) both;max-height:88vh;overflow:auto}
.np-cta{background:var(--teal);border:none;color:#04201c;font-weight:bold;padding:12px 20px;border-radius:var(--r-sm);
  cursor:pointer;font-family:inherit;letter-spacing:.5px;font-size:15px;transition:transform .15s var(--ease),box-shadow .25s}
.np-cta:hover{box-shadow:0 0 22px color-mix(in srgb,var(--teal) 60%,transparent);transform:translateY(-1px)}
.np-cta:active{transform:scale(.96)}
.np-ghost{display:block;width:100%;background:none;border:none;color:var(--muted);cursor:pointer;font-family:inherit;font-size:13px;padding:6px;transition:color .2s}
.np-ghost:hover{color:#cfe}
.coin-chip b{color:var(--accent)}

/* ============ MOBILE NAV — collapsing dropdown ============ */
.nav-toggle{display:none;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.15);
  color:var(--teal);font-size:20px;line-height:1;padding:6px 12px;border-radius:10px;cursor:pointer}
@media(max-width:760px){
  .nav{flex-wrap:nowrap;padding:12px 14px;gap:8px}
  .nav-toggle{display:inline-block}
  /* turn the link row into a dropdown panel */
  .nav-links{position:absolute;top:100%;right:10px;left:10px;flex-direction:column;align-items:stretch;
    background:linear-gradient(180deg,var(--bg2),var(--bg));border:1px solid rgba(45,212,191,.25);
    border-radius:14px;padding:8px;gap:2px;box-shadow:0 12px 40px rgba(0,0,0,.6);
    max-height:0;overflow:hidden;opacity:0;pointer-events:none;transform:translateY(-8px);
    transition:max-height .25s ease,opacity .2s ease,transform .25s ease;z-index:120}
  .nav-links.open{max-height:80vh;opacity:1;pointer-events:auto;transform:translateY(0);overflow:auto}
  .nav-links a{margin-left:0;padding:12px 14px;border-radius:10px;font-size:15px;text-transform:none;letter-spacing:.5px}
  .nav-links a:hover,.nav-links a:active{background:rgba(255,255,255,.05);color:var(--teal)}
  /* keep coin chip + account chip inside the dropdown too, full width */
  .nav-links .coin-chip,.nav-links .acct-chip{margin-left:0;width:100%;justify-content:flex-start;border-radius:10px;padding:12px 14px}
  .nav{position:relative}
}

/* ============ THEME SWATCHES (hero picker) ============ */
.theme-swatch{width:26px;height:26px;border-radius:50%;border:2px solid rgba(255,255,255,.18);
  cursor:pointer;padding:0;transition:transform .15s cubic-bezier(.16,1,.3,1),box-shadow .2s,border-color .2s}
.theme-swatch:hover{transform:scale(1.18)}
.theme-swatch.active{border-color:#fff;box-shadow:0 0 14px rgba(255,255,255,.45),0 0 6px var(--teal);transform:scale(1.12)}

/* ============ UNIFIED MENU / SETTINGS PANEL ============ */
.menu-btn{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.15);color:var(--teal);
  font-size:20px;line-height:1;padding:7px 13px;border-radius:10px;cursor:pointer;transition:.15s}
.menu-btn:hover{box-shadow:0 0 14px rgba(45,212,191,.3);border-color:var(--teal)}
.menu-scrim{position:fixed;inset:0;background:rgba(0,0,0,.55);backdrop-filter:blur(3px);z-index:480;opacity:0;pointer-events:none;transition:opacity .25s}
.menu-scrim.show{opacity:1;pointer-events:auto}
.menu-panel{position:fixed;top:0;right:0;bottom:0;width:300px;max-width:86vw;z-index:490;
  background:linear-gradient(180deg,var(--bg2),var(--bg));border-left:1px solid rgba(45,212,191,.25);
  box-shadow:-12px 0 50px rgba(0,0,0,.6);transform:translateX(100%);transition:transform .3s cubic-bezier(.16,1,.3,1);
  overflow-y:auto;padding:16px 16px 30px;display:flex;flex-direction:column;gap:6px}
.menu-panel.open{transform:translateX(0)}
.menu-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.menu-logo{font-family:'Courier New',monospace;font-weight:bold;letter-spacing:2px;color:var(--teal)}
.menu-x{background:none;border:none;color:var(--muted);font-size:26px;line-height:1;cursor:pointer}
.menu-x:hover{color:var(--text)}
.menu-sec{padding:8px 0;border-top:1px solid rgba(255,255,255,.06)}
.menu-lab{color:var(--muted);font-size:10px;letter-spacing:2px;margin:2px 4px 8px}
.menu-item{display:block;color:var(--text);text-decoration:none;padding:11px 12px;border-radius:10px;font-size:15px;transition:.15s}
.menu-item:hover{background:rgba(255,255,255,.06);color:var(--teal)}
.menu-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 12px;color:var(--text);font-size:14px}
.menu-swatches{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;max-width:180px}
.menu-toggle-btn{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.15);color:var(--muted);
  padding:5px 14px;border-radius:16px;cursor:pointer;font-family:inherit;font-size:13px;min-width:54px}
.menu-toggle-btn.on{border-color:var(--teal);color:var(--teal)}
.menu-foot{margin-top:auto;color:var(--muted);font-size:11px;text-align:center;opacity:.5;padding-top:14px}
/* keep the top bar minimal — coins chip stays visible, hide old inline links */
@media(max-width:760px){ .nav{flex-wrap:nowrap} }


/* ===== v24 fixes: thumbnails always fill their frame; phone grid = 2 columns ===== */
.thumb picture{display:block;width:100%;height:100%}
.thumb picture img{width:100%;height:100%;object-fit:cover;display:block}
@media(max-width:759px){
  .grid2{ grid-template-columns:repeat(2,1fr) !important; gap:12px !important; }
  .card h3{padding:9px 10px 2px;font-size:13px}
  .card p{padding:0 10px 11px;font-size:11px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .tag{top:7px;right:7px;font-size:9px;padding:3px 6px}
  .newbadge{left:42px;top:10px;font-size:9px;padding:2px 7px}
  .fav-btn{transform:scale(.88);transform-origin:top left}
  .hero h1{font-size:clamp(34px,11vw,56px)}
}
@media(min-width:520px) and (max-width:759px){ .grid2{ grid-template-columns:repeat(3,1fr) !important; } }
@media(max-width:759px){ .newbadge + .fav-btn + .thumb, .newbadge{z-index:3} .newbadge ~ .tag{display:none} }
