/* =====================================================================
   SWARMFALL WEB · wisplight.css
   Shared production stylesheet for swarmfall.tcasetech.com
   Loaded by every page. Dark default; .light swaps tokens on
   functional surfaces. Fonts loaded per-page via Google Fonts.
   ===================================================================== */
:root{
  --bg:#06080c;--bg-1:#0a0f14;--bg-2:#0d141a;--bg-3:#111c22;
  --mint:#34f5c5;--mint-dim:#1d9c84;--mint-glow:rgba(52,245,197,.55);--mint-soft:rgba(52,245,197,.10);
  --gold:#d9b673;--gold-deep:#9c7a3e;
  --danger:#e25a4a;--warn:#e0a33c;--ok:#4fe0b0;--purple:#9a7cff;
  --ink:#e8f3f0;--ink-2:#a7b8b6;--ink-3:#5d6f72;--line:#1d3a3a;--line-2:#15262b;
  --card-grad:linear-gradient(150deg,rgba(13,20,26,.55),rgba(7,11,17,.45));
  --field-bg:rgba(255,255,255,.03);
  --fd:'Oxanium',system-ui,sans-serif;--fb:'Chakra Petch',system-ui,sans-serif;--ff:'EB Garamond',Georgia,serif;
  --r-sm:10px;--r-md:14px;--r-lg:18px;
  --shadow:0 20px 60px rgba(0,0,0,.5);
}
.light{
  --bg:#f4f7f6;--bg-1:#fff;--bg-2:#fff;--bg-3:#eef3f1;
  --mint:#0c9f7e;--mint-dim:#0c9f7e;--mint-glow:rgba(12,159,126,.3);--mint-soft:rgba(12,159,126,.08);
  --ink:#0f1c1a;--ink-2:#3f5350;--ink-3:#7c908d;--line:#d6e2df;--line-2:#e6eeec;
  --card-grad:#fff;--field-bg:#f4f7f6;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html{scroll-behavior:smooth}
body{font-family:var(--fb);background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.6;min-height:100vh}
a{color:inherit}
img{max-width:100%;display:block}
::selection{background:var(--mint);color:#03100c}

/* ambient layers (marketing) */
.amb{position:fixed;inset:0;z-index:0;pointer-events:none}
.amb canvas{position:absolute;inset:0;width:100%;height:100%}
.amb .scan{position:absolute;inset:0;opacity:.3;background:repeating-linear-gradient(0deg,rgba(52,245,197,.022) 0 1px,transparent 1px 3px)}

/* nav */
.nav{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:18px;padding:14px 28px;background:rgba(6,8,12,.82);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line-2)}
.light .nav{background:rgba(255,255,255,.86)}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;cursor:pointer}
.brand img{width:28px;height:28px;filter:drop-shadow(0 0 8px var(--mint-glow))}
.brand b{font-family:var(--fd);font-weight:800;font-size:16px;letter-spacing:.08em;color:var(--ink)}
.nav .links{display:flex;gap:20px;margin-left:8px}
.nav .links a{font-family:var(--fd);font-weight:600;font-size:12.5px;letter-spacing:.02em;color:var(--ink-2);text-decoration:none;transition:.14s}
.nav .links a:hover{color:var(--mint)}
.nav .right{margin-left:auto;display:flex;align-items:center;gap:10px}
.navtoggle{display:none;background:none;border:none;color:var(--ink);cursor:pointer}

/* buttons */
.btn{font-family:var(--fd);font-weight:700;letter-spacing:.06em;font-size:12.5px;padding:9px 16px;border-radius:var(--r-sm);cursor:pointer;border:1px solid var(--line);background:transparent;color:var(--ink-2);transition:.16s;text-decoration:none;display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.btn:hover{border-color:var(--mint-dim);color:var(--mint);transform:translateY(-1px)}
.btn:active{transform:translateY(0) scale(.98)}
.btn.primary{border:none;color:#03100c;background:linear-gradient(180deg,#52ffd6,var(--mint));box-shadow:0 0 22px var(--mint-glow)}
.btn.primary:hover{box-shadow:0 0 34px var(--mint-glow);color:#03100c}
.btn.danger{border-color:rgba(226,90,74,.4);color:var(--danger)}.btn.danger:hover{background:rgba(226,90,74,.1)}
.btn.lg{font-size:14px;padding:13px 26px}
.btn.block{width:100%;justify-content:center}
.btn svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2}

/* footer */
.site-foot{position:relative;z-index:1;border-top:1px solid var(--line-2);padding:26px 28px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;color:var(--ink-3);font-size:11px;font-family:var(--fd);letter-spacing:.08em;text-transform:uppercase}
.site-foot a{color:var(--ink-3);text-decoration:none}.site-foot a:hover{color:var(--mint)}

/* cookie bar */
.cookie{position:fixed;left:16px;right:16px;bottom:16px;z-index:40;display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:14px 18px;border:1px solid var(--line);border-radius:var(--r-md);background:rgba(8,12,18,.96);backdrop-filter:blur(8px);box-shadow:0 10px 40px rgba(0,0,0,.5)}
.light .cookie{background:rgba(255,255,255,.97)}
.cookie p{flex:1;min-width:220px;font-size:12px;color:var(--ink-2)}
.cookie p a{color:var(--mint);text-decoration:none}
.cookie .cbtns{display:flex;gap:8px}

/* shared card / pill bits reused on functional pages */
.pill{display:inline-flex;align-items:center;gap:6px;font-family:var(--fd);font-weight:800;font-size:10px;letter-spacing:.08em;text-transform:uppercase;padding:5px 11px;border-radius:99px}
.pill.warn{color:var(--warn);background:rgba(224,163,60,.13);border:1px solid rgba(224,163,60,.4)}
.pill.ok{color:var(--ok);background:rgba(79,224,176,.13);border:1px solid rgba(79,224,176,.4)}
.pill.danger{color:var(--danger);background:rgba(226,90,74,.13);border:1px solid rgba(226,90,74,.4)}
.pill.unseen{color:var(--mint);background:var(--mint-soft);border:1px solid var(--mint-dim)}

@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important}html{scroll-behavior:auto}}
@media(max-width:760px){
  .nav .links{display:none}
  .nav .links.open{display:flex;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:0;background:var(--bg-1);border-bottom:1px solid var(--line);padding:8px 0}
  .nav .links.open a{padding:12px 28px}
  .navtoggle{display:grid;place-items:center}
}

/* =====================================================================
   FUNCTIONAL-PAGE COMPONENTS (dashboard, playtest, feedback, profile,
   admin). Shared so each page stays lean. Calm register.
   ===================================================================== */
.avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-family:var(--fd);font-weight:800;font-size:14px;color:#06120f;background:radial-gradient(circle at 38% 30%,#7af7da,var(--ok));border:1px solid var(--mint-dim);cursor:pointer;text-decoration:none}
.app-bg{position:fixed;inset:0;z-index:0;background:radial-gradient(120% 50% at 50% -10%,rgba(52,245,197,.06),transparent 55%),var(--bg);pointer-events:none}
.app{position:relative;z-index:1;min-height:100vh}
.page{max-width:880px;margin:0 auto;padding:30px 26px 60px}
.crumb{font-family:var(--fd);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--mint);margin-bottom:6px}
.crumb a{color:var(--mint);text-decoration:none}
.ptitle{font-family:var(--fd);font-weight:800;font-size:26px;color:var(--ink);letter-spacing:.02em}
.psub{font-family:var(--ff);font-style:italic;color:var(--ink-3);margin-top:5px;font-size:14px}

.stepper{display:flex;align-items:center;margin:26px 0 28px;padding:18px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--card-grad)}
.step{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;position:relative}
.step .sd{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-family:var(--fd);font-weight:800;font-size:13px;border:2px solid var(--line);background:var(--bg-2);color:var(--ink-3);z-index:2;transition:.25s}
.step.done .sd{background:linear-gradient(180deg,#52ffd6,var(--mint));border-color:transparent;color:#03100c;box-shadow:0 0 16px var(--mint-glow)}
.step.cur .sd{border-color:var(--mint);color:var(--mint);animation:pulse 2s ease-in-out infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 12px var(--mint-soft)}50%{box-shadow:0 0 22px var(--mint-glow)}}
.step .sl{font-family:var(--fd);font-weight:700;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);text-align:center}
.step.done .sl,.step.cur .sl{color:var(--ink-2)}
.step::before{content:"";position:absolute;top:17px;left:-50%;width:100%;height:2px;background:var(--line);z-index:1}
.step:first-child::before{display:none}
.step.done::before,.step.cur::before{background:var(--mint-dim)}

.card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--card-grad);padding:22px;margin-bottom:16px}
.card h3{font-family:var(--fd);font-weight:700;font-size:16px;color:var(--ink);margin-bottom:4px;display:flex;align-items:center;gap:9px}
.card h3 svg{width:18px;height:18px;stroke:var(--mint);fill:none;stroke-width:1.7}
.card .cdesc{font-size:13px;color:var(--ink-3);line-height:1.6;margin-bottom:14px}
.cta-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px}

.pill.seen{color:var(--ink-2);background:rgba(127,127,127,.08);border:1px solid var(--line)}
.pill.prog{color:var(--purple);background:rgba(154,124,255,.13);border:1px solid rgba(154,124,255,.4)}
.pill.done{color:var(--ok);background:rgba(79,224,176,.1);border:1px solid rgba(79,224,176,.35)}
.pill.other{color:var(--gold);background:rgba(217,182,115,.12);border:1px solid rgba(217,182,115,.4)}

/* shared form fields on functional pages */
.field{margin-bottom:14px}
.field label{display:block;font-family:var(--fd);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin-bottom:6px}
.field input,.field textarea,textarea.field-ta{width:100%;background:var(--field-bg);border:1px solid var(--line);border-radius:var(--r-sm);padding:12px 13px;color:var(--ink);font-family:var(--fb);font-size:14px;outline:none;transition:.16s}
.field input:focus,.field textarea:focus,textarea.field-ta:focus{border-color:var(--mint-dim);box-shadow:0 0 0 1px var(--mint-dim),0 0 14px var(--mint-soft)}
.field input::placeholder,textarea::placeholder{color:var(--ink-3);opacity:.7}
textarea.field-ta{resize:vertical;min-height:90px}
.field .err{font-size:11px;color:var(--danger);margin-top:5px;display:none}
.field.invalid input,.field.invalid textarea{border-color:var(--danger)}
.field.invalid .err{display:block}
.turnstile{display:flex;align-items:center;gap:9px;margin-top:6px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--field-bg);font-size:11px;color:var(--ink-3)}
.turnstile .cbx{width:16px;height:16px;border-radius:4px;border:1px solid var(--mint-dim);background:var(--mint-soft);display:grid;place-items:center;color:var(--mint);font-size:11px;flex:0 0 16px}

/* download + install */
.dl{border:1px solid var(--mint-dim);border-radius:var(--r-lg);padding:22px;background:radial-gradient(120% 100% at 50% 0,rgba(52,245,197,.08),rgba(7,11,17,.5));margin-bottom:16px}
.light .dl{background:radial-gradient(120% 100% at 50% 0,rgba(12,159,126,.07),#fff)}
.dl .dlh{display:flex;align-items:center;gap:14px;margin-bottom:14px}
.dl .dli{width:50px;height:50px;border-radius:13px;display:grid;place-items:center;border:1px solid var(--mint-dim);background:var(--mint-soft);flex:0 0 50px}
.dl .dli svg{width:26px;height:26px;stroke:var(--mint);fill:none;stroke-width:1.6}
.dl .dlt b{font-family:var(--fd);font-weight:800;font-size:18px;color:var(--ink);display:block}
.dl .dlt span{font-size:12px;color:var(--ink-3);font-family:var(--fd)}
.install{counter-reset:s;margin-top:8px}
.install li{list-style:none;position:relative;padding:10px 0 10px 38px;border-bottom:1px solid var(--line-2);font-size:13px;color:var(--ink-2)}
.install li:last-child{border-bottom:none}
.install li::before{counter-increment:s;content:counter(s);position:absolute;left:0;top:9px;width:24px;height:24px;border-radius:50%;border:1px solid var(--mint-dim);color:var(--mint);font-family:var(--fd);font-weight:800;font-size:12px;display:grid;place-items:center}
.install li b{color:var(--ink);font-weight:700}

/* feedback type selector + dropzone */
.seg{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:14px}
.seg button{font-family:var(--fd);font-weight:700;font-size:12px;padding:9px 14px;border-radius:var(--r-sm);border:1px solid var(--line);background:var(--bg-2);color:var(--ink-3);cursor:pointer;display:flex;align-items:center;gap:7px;transition:.14s}
.seg button svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.8}
.seg button.on{background:var(--mint-soft);color:var(--mint);border-color:var(--mint-dim)}
.seg button.on[data-danger]{background:rgba(226,90,74,.12);color:var(--danger);border-color:rgba(226,90,74,.4)}
.drop{border:1px dashed var(--line);border-radius:var(--r-sm);padding:18px;text-align:center;color:var(--ink-3);font-size:12.5px;margin-bottom:14px;cursor:pointer}
.drop:hover{border-color:var(--mint-dim);color:var(--ink-2)}
.drop svg{width:22px;height:22px;stroke:var(--mint-dim);fill:none;stroke-width:1.6;display:block;margin:0 auto 6px}

/* profile rows + chips */
.prow{display:flex;align-items:center;gap:14px;padding:14px 0;border-bottom:1px solid var(--line-2)}
.prow:last-child{border-bottom:none}
.prow .pl{flex:1}.prow .pk{font-family:var(--fd);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.prow .pv{font-size:14px;color:var(--ink);margin-top:2px}
.chip{font-family:var(--fd);font-weight:700;font-size:10px;letter-spacing:.06em;padding:4px 9px;border-radius:99px;border:1px solid var(--line);color:var(--ink-2)}
.chip.g{border-color:rgba(127,127,127,.3);color:var(--ink)}

/* tables (my-feedback, admin) */
.tbl{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;margin-bottom:16px}
.trow{display:flex;align-items:center;gap:14px;padding:14px 16px;border-bottom:1px solid var(--line-2);transition:.12s}
.trow:last-child{border-bottom:none}.trow:hover{background:var(--bg-3)}
.trow .tav{width:34px;height:34px;border-radius:50%;flex:0 0 34px;display:grid;place-items:center;font-family:var(--fd);font-weight:800;font-size:13px;color:#06120f}
.trow .tinfo{flex:1;min-width:0}
.trow .tn{font-family:var(--fd);font-weight:700;font-size:14px;color:var(--ink)}
.trow .td{font-size:12px;color:var(--ink-3);margin-top:1px}
.trow .tact{display:flex;gap:7px;flex:0 0 auto;align-items:center}
.mini{font-family:var(--fd);font-weight:700;font-size:11px;padding:7px 12px;border-radius:8px;border:1px solid var(--line);background:transparent;color:var(--ink-2);cursor:pointer;transition:.14s;text-decoration:none}
.mini:hover{border-color:var(--mint-dim);color:var(--mint)}

/* empty state */
.empty{text-align:center;padding:56px 24px}
.empty .ei{width:60px;height:60px;border-radius:50%;margin:0 auto 16px;display:grid;place-items:center;border:1px solid var(--line);background:var(--bg-2)}
.empty .ei svg{width:28px;height:28px;stroke:var(--mint-dim);fill:none;stroke-width:1.4}
.empty h3{font-family:var(--ff);font-style:italic;font-size:20px;color:var(--ink-2)}
.empty p{font-size:13px;color:var(--ink-3);margin-top:6px}

/* state banner (pending/declined hero blocks) */
.statecard{text-align:center;padding:34px}
.statecard .si{width:60px;height:60px;border-radius:50%;margin:0 auto 16px;display:grid;place-items:center}
.statecard .si svg{width:28px;height:28px;fill:none;stroke-width:1.6}
.statecard h3{justify-content:center}

/* =====================================================================
   ADMIN COMPONENTS (overview stats, triage, detail status picker)
   ===================================================================== */
.admin-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:22px}
.stat{border:1px solid var(--line);border-radius:var(--r-md);padding:16px;background:var(--bg-2)}
.stat .v{font-family:var(--fd);font-weight:800;font-size:26px;color:var(--ink)}
.stat .v.mint{color:var(--mint)}.stat .v.warn{color:var(--warn)}.stat .v.gold{color:var(--gold)}
.stat .k{font-family:var(--fd);font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin-top:4px}
.tabs button .ct{opacity:.6;margin-left:5px}
.mini.ok{border-color:rgba(79,224,176,.4);color:var(--ok)}.mini.ok:hover{background:rgba(79,224,176,.1)}
.mini.no{border-color:rgba(226,90,74,.4);color:var(--danger)}.mini.no:hover{background:rgba(226,90,74,.1)}
.statuspick{display:flex;flex-direction:column;gap:8px}
.statuspick button{display:flex;align-items:center;justify-content:space-between;font-family:var(--fd);font-weight:700;font-size:12px;padding:11px 13px;border-radius:var(--r-sm);border:1px solid var(--line);background:var(--bg-2);color:var(--ink-2);cursor:pointer;transition:.14s}
.statuspick button:hover{border-color:var(--mint-dim)}
.statuspick button.on{border-color:var(--mint);background:var(--mint-soft);color:var(--mint)}
.statuspick button .dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.fb-detail{display:grid;grid-template-columns:1fr 280px;gap:16px}
.adminbar{display:flex;align-items:center;gap:6px}
.bars{display:flex;align-items:flex-end;gap:6px;height:90px;margin-top:8px}
.bars .bcol{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px}
.bars .bcol .bar{width:100%;background:var(--mint-soft);border:1px solid var(--mint-dim);border-radius:4px 4px 0 0}
.bars .bcol.peak .bar{background:linear-gradient(180deg,#52ffd6,var(--mint));border:none}
.bars .bcol span{font-size:9px;color:var(--ink-3);font-family:var(--fd)}
.crashlog{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;color:var(--ink-3);background:rgba(0,0,0,.25);border:1px solid var(--line);border-radius:8px;padding:12px;overflow-x:auto;line-height:1.6;white-space:pre}
@media(max-width:720px){.admin-grid{grid-template-columns:1fr 1fr}.fb-detail{grid-template-columns:1fr}}

/* =====================================================================
   ADDED v2 · footer social, toasts, notifications, achievements,
   leaderboard, changelog feed, skeletons, badges, segmented toggle
   ===================================================================== */

/* footer social row */
.site-foot{align-items:center}
.foot-social{display:flex;align-items:center;gap:14px}
.foot-social a{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;border:1px solid var(--line);color:var(--ink-3);transition:.16s}
.foot-social a:hover{color:var(--mint);border-color:var(--mint-dim);transform:translateY(-2px);box-shadow:0 0 16px var(--mint-soft)}
.foot-legal{font-size:11px;color:var(--ink-3);letter-spacing:.06em}
.foot-legal a{color:var(--ink-3)}.foot-legal a:hover{color:var(--mint)}

/* toast */
.toast-wrap{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:60;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{pointer-events:auto;min-width:220px;max-width:90vw;display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:var(--r-md);border:1px solid var(--mint-dim);background:rgba(8,14,18,.97);box-shadow:0 12px 40px rgba(0,0,0,.55);color:var(--ink);font-size:13px;font-family:var(--fb);animation:toastin .28s cubic-bezier(.2,.8,.3,1)}
.toast.ok{border-color:var(--mint-dim)}.toast.warn{border-color:rgba(224,163,60,.5)}.toast.err{border-color:rgba(226,90,74,.5)}
.toast .ti{width:18px;height:18px;flex:0 0 18px}
.toast.ok .ti{color:var(--mint)}.toast.warn .ti{color:var(--warn)}.toast.err .ti{color:var(--danger)}
@keyframes toastin{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
.toast.out{opacity:0;transform:translateY(14px);transition:.3s}

/* notification bell + dropdown (nav) */
.notif{position:relative}
.notif-btn{position:relative;display:grid;place-items:center;width:34px;height:34px;border-radius:50%;border:1px solid var(--line);background:transparent;color:var(--ink-2);cursor:pointer;transition:.16s}
.notif-btn:hover{color:var(--mint);border-color:var(--mint-dim)}
.notif-btn svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8}
.notif-dot{position:absolute;top:-2px;right:-2px;min-width:16px;height:16px;padding:0 4px;border-radius:99px;background:var(--danger);color:#fff;font-family:var(--fd);font-weight:800;font-size:9px;display:none;place-items:center;border:2px solid var(--bg)}
.notif-dot.show{display:grid}
.notif-panel{position:absolute;right:0;top:46px;width:340px;max-width:88vw;background:rgba(8,12,18,.98);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow);overflow:hidden;display:none;z-index:50}
.notif-panel.open{display:block}
.notif-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--line-2)}
.notif-head b{font-family:var(--fd);font-size:13px;color:var(--ink)}
.notif-head button{background:none;border:none;color:var(--mint);font-family:var(--fd);font-size:11px;cursor:pointer}
.notif-list{max-height:380px;overflow-y:auto}
.notif-item{display:flex;gap:11px;padding:12px 14px;border-bottom:1px solid var(--line-2);text-decoration:none;transition:.12s}
.notif-item:hover{background:var(--bg-3)}
.notif-item.unread{background:var(--mint-soft)}
.notif-item .nicon{width:30px;height:30px;border-radius:8px;flex:0 0 30px;display:grid;place-items:center;border:1px solid var(--line);background:var(--bg-2)}
.notif-item .nicon svg{width:15px;height:15px;stroke:var(--mint);fill:none;stroke-width:1.7}
.notif-item .nt{font-size:13px;color:var(--ink);font-weight:600;line-height:1.4}
.notif-item .nb{font-size:12px;color:var(--ink-3);margin-top:2px}
.notif-item .ntime{font-size:10px;color:var(--ink-3);font-family:var(--fd);margin-top:4px;letter-spacing:.06em;text-transform:uppercase}
.notif-empty{padding:34px 16px;text-align:center;color:var(--ink-3);font-family:var(--ff);font-style:italic}

/* achievements */
.ach-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.ach{border:1px solid var(--line);border-radius:var(--r-md);padding:16px;background:var(--bg-2);text-align:center;position:relative;transition:.18s;opacity:.55;filter:grayscale(.6)}
.ach.earned{opacity:1;filter:none;border-color:var(--mint-dim);box-shadow:0 0 18px var(--mint-soft)}
.ach .aicon{width:46px;height:46px;border-radius:12px;margin:0 auto 10px;display:grid;place-items:center;border:1px solid var(--line);background:var(--bg-3);font-size:22px}
.ach.earned .aicon{border-color:var(--mint-dim);background:var(--mint-soft)}
.ach .an{font-family:var(--fd);font-weight:700;font-size:13px;color:var(--ink)}
.ach .ad{font-size:11px;color:var(--ink-3);margin-top:4px;line-height:1.5}
.ach .alock{position:absolute;top:10px;right:10px;color:var(--ink-3)}
.ach.earned .alock{display:none}
.ach .aprog{margin-top:9px;height:5px;border-radius:99px;background:var(--bg-3);overflow:hidden}
.ach .aprog i{display:block;height:100%;background:linear-gradient(90deg,var(--mint-dim),var(--mint))}

/* leaderboard */
.lb{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.lb-row{display:flex;align-items:center;gap:14px;padding:13px 16px;border-bottom:1px solid var(--line-2)}
.lb-row:last-child{border-bottom:none}.lb-row.me{background:var(--mint-soft)}
.lb-rank{font-family:var(--fd);font-weight:800;font-size:16px;width:34px;text-align:center;color:var(--ink-2)}
.lb-row.top1 .lb-rank{color:var(--gold)}.lb-row.top2 .lb-rank{color:#cfd8d6}.lb-row.top3 .lb-rank{color:#c08a52}
.lb-name{flex:1;font-family:var(--fd);font-weight:700;font-size:14px;color:var(--ink)}
.lb-score{font-family:var(--fd);font-weight:800;color:var(--mint)}

/* changelog feed (updates page, API-driven) */
.feed{position:relative;padding-left:26px}
.feed::before{content:"";position:absolute;left:7px;top:6px;bottom:6px;width:2px;background:var(--line)}
.feed-item{position:relative;padding:0 0 26px}
.feed-item::before{content:"";position:absolute;left:-26px;top:4px;width:14px;height:14px;border-radius:50%;border:2px solid var(--mint);background:var(--bg);box-shadow:0 0 10px var(--mint-soft)}
.feed-item.current::before{background:var(--mint)}
.feed-ver{font-family:var(--fd);font-weight:800;font-size:18px;color:var(--ink);display:flex;align-items:center;gap:10px}
.feed-date{font-family:var(--fd);font-size:11px;color:var(--ink-3);letter-spacing:.08em;text-transform:uppercase;margin-top:2px}
.feed-notes{margin-top:10px;color:var(--ink-2);font-size:14px;line-height:1.7;white-space:pre-wrap}

/* skeleton loaders */
.skel{background:linear-gradient(90deg,var(--bg-2) 25%,var(--bg-3) 50%,var(--bg-2) 75%);background-size:200% 100%;animation:shimmer 1.3s infinite;border-radius:8px}
@keyframes shimmer{to{background-position:-200% 0}}

/* generic small badge */
.tag-badge{display:inline-flex;align-items:center;gap:5px;font-family:var(--fd);font-weight:700;font-size:10px;letter-spacing:.06em;text-transform:uppercase;padding:4px 9px;border-radius:99px;border:1px solid var(--line);color:var(--ink-2)}
.tag-badge.mint{color:var(--mint);border-color:var(--mint-dim);background:var(--mint-soft)}
.tag-badge.gold{color:var(--gold);border-color:var(--gold-deep);background:rgba(217,182,115,.1)}

/* avatar shown as an image (profile icon) instead of an initial */
.avatar.img,.tav.img{background-size:cover!important;background-position:center!important;color:transparent!important;text-shadow:none!important}
.avatar.img{border-color:var(--mint-dim)}

/* avatar / profile-icon picker */
.ava-current{display:flex;align-items:center;gap:14px}
.ava-current .avatar{width:60px;height:60px;font-size:24px;flex:0 0 60px}
.ava-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:10px;max-height:54vh;overflow-y:auto;padding:4px 2px}
.ava-opt{aspect-ratio:1;border-radius:14px;border:1px solid var(--line);background:var(--bg-2);overflow:hidden;cursor:pointer;position:relative;transition:.14s;padding:0}
.ava-opt img{width:100%;height:100%;object-fit:cover;display:block}
.ava-opt:hover{border-color:var(--mint-dim);transform:translateY(-2px);box-shadow:0 0 14px var(--mint-soft)}
.ava-opt.sel{border-color:var(--mint);box-shadow:0 0 0 2px var(--mint),0 0 16px var(--mint-glow)}
.ava-opt.sel::after{content:"✓";position:absolute;top:2px;right:5px;color:var(--mint);font-family:var(--fd);font-weight:800;font-size:13px;text-shadow:0 1px 4px #000}
.ava-opt .nm{position:absolute;left:0;right:0;bottom:0;font-size:8px;line-height:1.1;padding:3px 2px;background:linear-gradient(transparent,rgba(0,0,0,.82));color:var(--ink-2);font-family:var(--fd);text-align:center;opacity:0;transition:.14s}
.ava-opt:hover .nm{opacity:1}

/* modal / sheet */
.modal-overlay{position:fixed;inset:0;z-index:80;background:rgba(3,6,9,.78);backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;padding:18px}
.modal-overlay.open{display:flex}
.modal{width:min(640px,96vw);max-height:90vh;display:flex;flex-direction:column;background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);overflow:hidden;animation:rise .26s cubic-bezier(.2,.8,.3,1)}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--line-2)}
.modal-head h3{font-family:var(--fd);font-weight:800;font-size:17px;color:var(--ink)}
.modal-head .mx{background:none;border:none;color:var(--ink-3);font-size:22px;cursor:pointer;line-height:1}
.modal-head .mx:hover{color:var(--mint)}
.modal-body{padding:16px 18px;overflow-y:auto}
.modal-foot{padding:12px 18px;border-top:1px solid var(--line-2);display:flex;justify-content:flex-end;gap:9px}
@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}

/* segmented toggle (e.g. notify prefs) */
.switch{position:relative;width:44px;height:24px;border-radius:99px;border:1px solid var(--line);background:var(--bg-3);cursor:pointer;transition:.18s;flex:0 0 44px}
.switch::after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--ink-3);transition:.18s}
.switch.on{background:var(--mint-soft);border-color:var(--mint-dim)}
.switch.on::after{left:23px;background:var(--mint);box-shadow:0 0 10px var(--mint-glow)}
