:root{
  --bg-0:#140a30; --bg-1:#2b1a6b; --bg-2:#3a1d8a;
  --accent:#ff7a45; --accent-2:#ffd23f; --teal:#2ec4b6; --pink:#ff5d8f;
  --ink:#fff; --ink-dim:rgba(255,255,255,.72); --ink-faint:rgba(255,255,255,.45);
  --panel:rgba(28,18,64,.72); --line:rgba(255,255,255,.14);
  --radius:18px; --radius-sm:12px;
  --font:"Trebuchet MS","Segoe UI",Roboto,Arial,"PingFang SC","Microsoft YaHei",sans-serif;
}
*{box-sizing:border-box}
body{margin:0;font-family:var(--font);color:var(--ink);background:#0e0826}
#game{position:fixed;inset:0;width:100%;height:100%;border:0;background:#0e0826}
#shell{position:fixed;inset:0;z-index:10;pointer-events:none}
#shell .screen{position:absolute;inset:0;display:none;flex-direction:column;pointer-events:auto}
#shell .screen.is-active{display:flex}
#shell .modal{position:absolute;inset:0;display:none;align-items:center;justify-content:center;background:rgba(10,6,28,.66);backdrop-filter:blur(5px);pointer-events:auto;padding:18px}
#shell .modal.open{display:flex}
.card{position:relative;width:min(92vw,560px);background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 20px 60px rgba(0,0,0,.5);padding:26px 28px;max-height:90vh;overflow:auto}
.card.lock{text-align:center;max-width:420px}
.card h2{margin:0 0 8px;color:var(--accent-2)}
.card .sub{color:var(--ink-dim);margin:0 0 14px}
.card .fine{color:var(--ink-faint);font-size:12px;margin-top:14px}
.card .ic{font-size:38px}
.x{position:absolute;top:10px;right:16px;background:none;border:none;color:var(--ink-dim);font-size:26px;cursor:pointer;line-height:1}

/* Loading */
#loading{background:radial-gradient(circle at 50% 30%,#3a2d6b,#1a1340);align-items:center;justify-content:center}
.ring{width:60px;height:60px;border-radius:50%;border:6px solid rgba(255,255,255,.18);border-top-color:var(--accent);animation:spin 1s linear infinite;margin-bottom:20px}
@keyframes spin{to{transform:rotate(360deg)}}
.logo{font-size:42px;font-weight:800}.logo span{color:var(--accent-2);font-size:.5em;vertical-align:middle;margin:0 .1em}
.tip{margin-top:10px;color:var(--ink-dim)}

/* Portal screens must be OPAQUE so the 3D iframe never shows through as a
   background on the home / world-map views. The in-game HUD (#hud) stays
   transparent on purpose so the 3D is visible only while actually playing. */
#home, #worlds { background: linear-gradient(160deg, #2b1a6b 0%, #0e0826 100%); }

/* Topbar / home */
.topbar{width:100%;display:flex;align-items:center;justify-content:space-between;padding:18px 30px}
.brand{font-size:26px;font-weight:800}.brand span{color:var(--accent)}
.nav{display:flex;gap:10px;flex-wrap:wrap}
.navlink{background:rgba(255,255,255,.08);border:1px solid var(--line);color:#fff;padding:9px 16px;border-radius:999px;font-weight:700;cursor:pointer;font-family:inherit;font-size:14px}
.navlink:hover{background:rgba(255,255,255,.2)}
.navlink.cta{background:var(--teal);border-color:transparent;color:#06231f}
.hero{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:0 20px}
.badge{background:rgba(255,210,61,.16);color:var(--accent-2);border:1px solid rgba(255,210,61,.4);padding:6px 14px;border-radius:999px;font-weight:700;font-size:13px}
.hero h1{font-size:clamp(30px,5vw,56px);line-height:1.1;font-weight:800;margin:18px 0}
.hero h1 span{color:var(--accent)}
.sub{color:var(--ink-dim);font-size:17px;max-width:560px;margin:0 0 24px}
.hero-actions{display:flex;gap:14px;flex-wrap:wrap;justify-content:center}
.btn{font-family:inherit;font-weight:800;border:none;border-radius:var(--radius-sm);padding:15px 30px;cursor:pointer;font-size:17px;transition:transform .12s,box-shadow .18s,filter .18s}
.btn:active{transform:translateY(1px)}
.btn-play{color:#2a0e00;background:linear-gradient(135deg,var(--accent-2),var(--accent));box-shadow:0 12px 30px rgba(255,93,143,.4)}
.btn-play:hover{transform:translateY(-3px)}
.btn-ghost{color:#fff;background:rgba(255,255,255,.1);border:1px solid var(--line)}
.btn-ghost:hover{background:rgba(255,255,255,.2)}
.btn-block{width:100%;display:block;margin-top:8px}
.stats{display:flex;gap:34px;margin-top:30px}
.stats div{display:flex;flex-direction:column;color:#fff}
.stats b{font-size:26px;color:var(--accent-2)}
.stats span{font-size:13px;color:var(--ink-dim)}
.foot{text-align:center;color:var(--ink-faint);font-size:13px;padding:16px}

/* World map */
.worlds-head{padding:10px 30px 0;text-align:center}
.worlds-head h2{font-size:30px;margin:0;color:#fff}
.world-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;padding:18px 30px 40px;overflow:auto;flex:1;align-content:start}
.wcard{background:linear-gradient(160deg,var(--bg-2),var(--bg-0));border:1px solid var(--line);border-radius:16px;padding:20px;cursor:pointer;transition:transform .15s,box-shadow .18s;position:relative}
.wcard:hover{transform:translateY(-3px);box-shadow:0 16px 36px rgba(0,0,0,.45)}
.wcard h3{margin:0 0 4px;font-size:20px;color:#fff}
.wcard small{color:var(--ink-dim)}
.wcard .badge2{position:absolute;top:14px;right:14px;font-size:11px;font-weight:800;padding:4px 10px;border-radius:999px}
.wcard.locked{cursor:pointer;opacity:.92}
.wcard.locked .badge2{background:rgba(255,107,107,.18);color:#ff8a8a;border:1px solid rgba(255,107,107,.5)}
.wcard.open .badge2{background:rgba(46,196,182,.18);color:var(--teal);border:1px solid rgba(46,196,182,.5)}
.wcard .lk{font-size:22px;margin-top:10px}

/* HUD */
.hud-bar{display:flex;align-items:center;gap:14px;padding:14px 22px;background:rgba(20,12,48,.5);backdrop-filter:blur(6px)}
.hud-back,.hud-acc{background:rgba(255,255,255,.12);border:none;color:#fff;padding:8px 16px;border-radius:999px;cursor:pointer;font-size:14px;font-family:inherit}
/* HUD account button — signed-out vs signed-in states */
.hud-acc.is-out{background:var(--teal);color:#06231f;font-weight:800;border:1px solid transparent}
.hud-acc.is-out:hover{filter:brightness(1.1)}
.hud-acc.is-in{background:rgba(46,196,182,.16);border:1px solid rgba(46,196,182,.55);color:#bff3ec;white-space:nowrap;max-width:46vw;overflow:hidden;text-overflow:ellipsis}
.hud-title{color:#fff;font-weight:700;flex:1}
/* HUD overlay must be CLICK-THROUGH: the screen covers the whole viewport
   (inset:0) and is transparent, but its inherited pointer-events:auto was
   swallowing every mouse event so the 3D iframe underneath could not be
   rotated / zoomed. Let events fall through to the game; keep only the top
   bar interactive for its buttons. */
#shell #hud{pointer-events:none}
#hud .hud-bar{pointer-events:auto}
/* HUD wallet badge (coins / credits — consistent across every station & level) */
.hud-wallet{display:flex;gap:8px;align-items:center}
.hud-wallet span{background:rgba(255,255,255,.12);border-radius:999px;padding:6px 12px;font-size:14px;font-weight:700;color:#fff;white-space:nowrap}
.hud-wallet b{color:var(--accent-2)}

/* Pricing */
.plan-list{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
@media(max-width:620px){.plan-list{grid-template-columns:1fr}}
.pcol{background:rgba(255,255,255,.05);border:1px solid var(--line);border-radius:14px;padding:16px;text-align:center}
.pcol.best{border-color:var(--accent-2);box-shadow:0 0 0 1px var(--accent-2) inset}
.pcol h3{margin:6px 0;font-size:18px;color:#fff}
.pcol .price{font-size:28px;font-weight:800;color:#fff}
.pcol .price small{font-size:12px;color:var(--ink-dim);font-weight:500}
.pcol ul{list-style:none;padding:0;margin:10px 0;font-size:12px;color:var(--ink-dim);text-align:left}
.pcol li{padding:3px 0;border-bottom:1px solid var(--line)}
.pcol li.on{color:#fff}
.pcol .tag{font-size:10px;font-weight:800;padding:3px 8px;border-radius:999px;background:rgba(255,210,61,.18);color:var(--accent-2)}
.pcol .tag.best{background:rgba(255,93,143,.2);color:var(--pink)}

/* Auth / account forms */
.card label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--ink-dim);margin-bottom:12px}
.card input{padding:11px 13px;border-radius:10px;border:1px solid var(--line);background:rgba(10,6,28,.5);color:#fff;font-family:inherit;font-size:15px}

/* Permanent character picker (register only) */
.au-gender{margin:0 0 12px}
.au-glabel{display:block;font-size:13px;color:var(--ink-dim);margin-bottom:6px}
.au-gender-opts{display:flex;gap:10px}
.au-gopt{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:12px;border:1px solid var(--line);border-radius:10px;background:rgba(10,6,28,.5);color:#fff;font-family:inherit;font-size:15px;font-weight:700;cursor:pointer;transition:border-color .15s,background .15s}
.au-gopt:hover{border-color:var(--accent)}
.au-gopt.sel{border-color:var(--accent-2);background:rgba(255,210,61,.14);box-shadow:0 0 0 1px var(--accent-2) inset}
.au-gic{font-size:18px}
.au-gopt[data-gender="male"] .au-gic{color:#6db3ff}
.au-gopt[data-gender="female"] .au-gic{color:var(--pink)}

.kpi{background:rgba(255,255,255,.05);border:1px solid var(--line);border-radius:12px;padding:12px;margin:8px 0}
.kpi b{display:block;font-size:18px;color:var(--accent-2)}
.kpi span{font-size:12px;color:var(--ink-dim)}
.pill{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.08);border:1px solid var(--line);border-radius:999px;padding:5px 12px;font-size:12px;color:var(--ink-dim)}

/* Trial banner */
.trial-banner{position:fixed;left:50%;transform:translateX(-50%);bottom:18px;z-index:30;display:flex;align-items:center;gap:12px;background:linear-gradient(135deg,rgba(255,210,61,.96),rgba(255,122,69,.96));color:#2a0e00;padding:12px 18px;border-radius:999px;box-shadow:0 14px 36px rgba(0,0,0,.45);pointer-events:auto;max-width:92vw;font-weight:700;font-size:14px}
.trial-banner[hidden]{display:none}
.trial-banner .tb-ic{font-size:18px}
.trial-banner .tb-text{flex:1;min-width:0}
.trial-banner .btn-sm{padding:8px 16px;font-size:13px;margin:0}
.trial-banner .btn-ghost{background:rgba(42,14,0,.16);border-color:rgba(42,14,0,.32);color:#2a0e00}

/* Account drawer polish */
.acc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}
.acc-head b{font-size:18px;color:#fff}
.acc-tag{font-size:11px;font-weight:800;padding:4px 10px;border-radius:999px}
.acc-tag.free{background:rgba(46,196,182,.2);color:var(--teal);border:1px solid rgba(46,196,182,.5)}
.acc-tag.plus{background:rgba(255,210,61,.2);color:var(--accent-2);border:1px solid rgba(255,210,61,.5)}
.acc-tag.pro{background:rgba(255,93,143,.2);color:var(--pink);border:1px solid rgba(255,93,143,.5)}
.acc-email{color:var(--ink-dim);font-size:13px;margin:0 0 10px}
.redeem{display:flex;gap:8px;margin-top:10px}
.redeem input{flex:1;padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:rgba(10,6,28,.5);color:#fff;font-family:inherit;font-size:14px}
.fine.ok{color:var(--teal)}.fine.bad{color:#ff8a8a}

/* Account wallet + transactions */
.wtx{margin-top:4px}
.wtx #wtx-list{display:flex;flex-direction:column;gap:2px;margin-top:6px}
.wtx-row{display:flex;justify-content:space-between;font-size:12px;color:var(--ink-dim);padding:5px 0;border-bottom:1px solid var(--line)}
.wtx-row b.plus{color:var(--teal)}
.wtx-row b.minus{color:#ff8a8a}
