html,body{margin:0;height:100%;overflow:hidden;background:#0a0820;font-family:system-ui,sans-serif}
canvas{display:block}
#overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.45);color:#fff;cursor:pointer;z-index:10}
#overlay.hidden{display:none}
.box{text-align:center;background:rgba(20,30,60,.8);padding:24px 36px;border-radius:12px;border:3px solid #6cf}
.box h1{margin:0 0 8px}.small{font-size:13px;opacity:.85}
#hud{position:fixed;left:10px;top:10px;color:#fff;background:rgba(0,0,0,.4);padding:4px 10px;border-radius:6px;font-size:14px;z-index:5}
#joy{position:fixed;left:24px;bottom:24px;width:110px;height:110px;border-radius:50%;background:rgba(255,255,255,.25);display:none;z-index:6;touch-action:none}
#knob{position:absolute;left:35px;top:35px;width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.7)}
body.touch #joy{display:block}

#hub{position:fixed;right:14px;top:14px;width:190px;display:flex;flex-direction:column;align-items:center;gap:6px;z-index:5;color:#bff9ff;font-size:13px}
#minimap{width:180px;height:180px;border-radius:50%;filter:drop-shadow(0 0 8px #ff3df0)}
.guide{display:flex;flex-direction:column;align-items:center;gap:4px;text-shadow:0 0 6px #22f0ff}
#guide{background:#120a2a;color:#7ff8ff;border:2px solid #22f0ff;border-radius:999px;padding:5px 12px;font:600 13px system-ui;box-shadow:0 0 10px #22f0ff88;outline:none;cursor:pointer}
#guide option{background:#120a2a}
#dist{min-height:16px;font-weight:600;color:#ff9af7;text-shadow:0 0 6px #ff3df0}
.keys{opacity:.6;font-size:11px}
body.hudoff #hub{display:none}
#hud{background:rgba(10,6,30,.6);border:1px solid #22f0ff;color:#bff9ff}
#warp{position:fixed;inset:0;pointer-events:none;opacity:0;z-index:20;background:repeating-conic-gradient(from 0deg,rgba(34,240,255,.0) 0deg 4deg,rgba(34,240,255,.55) 4deg 5deg,rgba(255,61,240,.0) 5deg 9deg,rgba(255,61,240,.5) 9deg 10deg);-webkit-mask:radial-gradient(circle,transparent 8%,#000 60%);mask:radial-gradient(circle,transparent 8%,#000 60%)}
#warp.on{animation:warp .9s ease-in forwards}
@keyframes warp{0%{opacity:0;transform:scale(1.6) rotate(0)}70%{opacity:1}100%{opacity:1;transform:scale(.6) rotate(25deg);background-color:#fff}}

#gallery{position:fixed;inset:0;z-index:20;display:none;overflow:auto;background:rgba(8,4,20,.94);color:#eaf6ff;font-family:system-ui,sans-serif;padding:24px 32px}
#gallery.on{display:block}
#gallery .gtop{display:flex;justify-content:space-between;align-items:center;border-bottom:2px solid #ff3df0;padding-bottom:10px}
#gallery h1{margin:0;font-size:22px;color:#7ff8ff}
#gallery h2{color:#ffb35c;margin:22px 0 4px}
#gclose{background:#22f0ff;color:#08041a;border:0;border-radius:8px;padding:8px 14px;font-weight:700;cursor:pointer}
.gnote{opacity:.7;margin:0 0 12px;font-size:13px}
.ggrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}
.ggrid figure{margin:0;background:#140c2a;border:1px solid #3a2a6a;border-radius:10px;overflow:hidden;cursor:zoom-in}
.ggrid figure:hover{border-color:#22f0ff}
.ggrid img{width:100%;display:block}
.ggrid figcaption{padding:8px 10px;font-size:14px}
#gzoom{position:fixed;inset:0;z-index:30;display:none;background:rgba(0,0,0,.9);flex-direction:column;align-items:center;justify-content:center;cursor:zoom-out}
#gzoom.on{display:flex}
#gzoom img{max-width:92vw;max-height:84vh;border-radius:8px}
#gzoom p{color:#fff;font-family:system-ui;margin-top:10px}
#tvhint{position:fixed;left:50%;bottom:60px;transform:translateX(-50%);display:none;background:rgba(10,6,30,.8);color:#ffd09a;padding:8px 14px;border-radius:8px;font-family:system-ui}
#tvhint.on{display:block}

#news{position:fixed;inset:0;z-index:20;display:none;overflow:auto;background:rgba(6,10,20,.95);color:#eaf6ff;font-family:system-ui,sans-serif;padding:24px 32px}
#news.on{display:block}
#news .gtop{display:flex;justify-content:space-between;align-items:center;border-bottom:2px solid #22f0ff;padding-bottom:10px}
#news h1{margin:0;color:#ffd09a}
#nclose{background:#ffb35c;color:#120a04;border:0;border-radius:8px;padding:8px 14px;font-weight:700;cursor:pointer}
#nlist{list-style:none;padding:0;max-width:900px}
#nlist li{padding:10px 0;border-bottom:1px solid #223}
#nlist a{color:#7ff8ff;font-size:17px;text-decoration:none}
#nlist a:hover{text-decoration:underline}
.nmeta{display:block;font-size:12px;opacity:.65;margin-top:3px}

#tokens{color:#ffd23d;font-weight:700;text-shadow:0 0 6px #ffd23d}
#snd{background:#0a0620;color:#bff9ff;border:1px solid #22f0ff;border-radius:12px;padding:3px 10px;font-size:12px;cursor:pointer}
.gpick{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:6px 0 12px}.gpick button{background:#140c2a;color:#dff;border:1px solid #22f0ff;border-radius:14px;padding:5px 12px;cursor:pointer}.gpick button.on{background:#22f0ff;color:#08041a}
#skintag{position:fixed;left:14px;top:48px;z-index:6;background:rgba(10,6,32,.85);color:#bff9ff;border:1px solid #22f0ff;border-radius:16px;padding:6px 14px;font-size:13px;cursor:pointer;box-shadow:0 0 12px #22f0ff88;animation:tagf 3s ease-in-out infinite}@keyframes tagf{50%{transform:translateY(-4px)}}
#skinpanel{display:none;position:fixed;left:14px;top:86px;z-index:6;width:330px;background:rgba(10,6,32,.94);border:1px solid #22f0ff;border-radius:12px;padding:10px;color:#dff}#skinpanel.on{display:block}#skinpanel p{margin:0 0 6px;font-size:13px}#skinsel{width:100%;padding:5px;background:#140c2a;color:#fff;border:1px solid #22f0ff;border-radius:8px}
.skingrid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:8px}.skintile{background:#140c2a;border:1px solid #444;border-radius:8px;padding:3px;color:#cfe;font-size:10px;cursor:pointer}.skintile img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px;display:block}.skintile:hover{border-color:#22f0ff}
/* step 12: boundary warning (original design) */
#bound{position:fixed;inset:0;pointer-events:none;opacity:0;transition:opacity .25s;z-index:40;--k:0}
#bound.on{opacity:1}
#bound::before{content:"";position:absolute;inset:0;box-shadow:inset 0 0 calc(80px + 120px * var(--k)) rgba(255,70,40,.55);}
#bound .bstatic{position:absolute;inset:0;opacity:calc(.15 + .35 * var(--k));background:repeating-linear-gradient(0deg,rgba(255,255,255,.08) 0 1px,transparent 1px 3px),repeating-linear-gradient(90deg,rgba(255,90,60,.06) 0 2px,transparent 2px 5px);-webkit-mask:radial-gradient(ellipse at center,transparent 45%,#000 85%);mask:radial-gradient(ellipse at center,transparent 45%,#000 85%);animation:bst .12s steps(2) infinite}
@keyframes bst{0%{background-position:0 0,0 0}50%{background-position:0 2px,3px 0}100%{background-position:0 1px,1px 0}}
#bound .bbox{position:absolute;top:18%;left:50%;transform:translateX(-50%);text-align:center;color:#ffe2d6;font:600 14px/1.3 monospace;letter-spacing:.12em;text-shadow:0 0 8px rgba(255,80,50,.8);background:rgba(20,6,6,.45);border:1px solid rgba(255,110,80,.6);padding:10px 22px}
#bound h2{margin:4px 0;font-size:26px;color:#fff}#bound .btag{margin:0;color:#ff8a6a;font-size:11px}#bound .bnum{font-size:44px;margin:4px 0 0;color:#fff}
#fade{position:fixed;inset:0;background:#000;opacity:0;pointer-events:none;z-index:45}
#aura{position:fixed;left:14px;top:96px;z-index:30;padding:5px 12px;border-radius:14px;border:1px solid #ffcc55;background:rgba(40,28,6,.6);color:#ffe2a0;font:600 12px sans-serif;letter-spacing:.08em;text-shadow:0 0 6px #ffb030;cursor:pointer}
#aura[aria-pressed="false"]{opacity:.6;border-color:#8a7a50;text-shadow:none}

.hudtog{position:fixed;left:14px;z-index:30;padding:5px 12px;border-radius:14px;border:1px solid #7fe0ff;background:rgba(6,24,40,.6);color:#cfefff;font:600 12px sans-serif;letter-spacing:.08em;cursor:pointer}
#stance{top:128px}#boost{top:160px;border-color:#ffcc55;color:#ffe2a0}#emote{top:192px}.hudtog[aria-pressed="false"]{opacity:.65}
#mic{top:224px}#calltest{top:256px;opacity:.7}
#callpop{position:fixed;left:50%;top:18%;transform:translateX(-50%);z-index:40;background:rgba(8,20,34,.92);border:1px solid #7fe0ff;border-radius:14px;padding:14px 18px;color:#e6f6ff;font:14px sans-serif;text-align:center;box-shadow:0 0 24px rgba(127,224,255,.35)}
#callpop .callnote{font-size:11px;opacity:.75;margin:4px 0 10px}#callpop button{margin:0 6px;padding:6px 16px;border-radius:10px;border:1px solid #7fe0ff;background:#123;color:#fff;cursor:pointer}#callaccept{background:#1f6b3a!important}#calldecline{background:#6b1f2a!important}
#callstate{position:fixed;left:50%;top:10px;transform:translateX(-50%);z-index:40;padding:5px 12px;border-radius:12px;border:1px solid #6fe39a;background:rgba(10,40,20,.8);color:#cfffe0;font:12px sans-serif;cursor:pointer}

/* v13: mic+sound row on top of minimap */
#mmrow{display:flex;gap:6px;justify-content:center;margin-bottom:-6px;z-index:6}
#mmrow button,#mmrow #mic{position:static;padding:3px 9px;font-size:12px;border-radius:12px;min-height:28px}
/* v13: touch action buttons */
#hub{top:40px}

/* v13b: controller layout */
@media (max-height:500px){body.touch #hub{right:190px;top:34px;transform:scale(.72);transform-origin:top right}}
/* v16 compact HUD menus */
#hmenu{position:fixed;top:40px;left:50%;transform:translateX(-50%);z-index:55;display:flex;gap:6px;align-items:flex-start;font:600 13px system-ui}
#hmenu button{min-height:44px;min-width:44px;padding:0 12px;border-radius:12px;border:1px solid rgba(120,240,255,.6);background:rgba(12,10,30,.82);color:#e6fbff;font:inherit;cursor:pointer}
.hm{position:relative}.hmp{display:none;position:absolute;left:50%;transform:translateX(-50%);top:50px;flex-direction:column;gap:6px;padding:8px;background:rgba(8,6,24,.94);border:1px solid rgba(120,240,255,.4);border-radius:14px;min-width:170px;max-height:60vh;overflow:auto}
.hmp.on{display:flex}.hmp button{width:100%;text-align:left}
.hmp #snd,.hmp #mic{position:static!important;margin:0!important;width:100%;display:block!important;visibility:visible!important}
@media (max-width:700px){#hmenu .lbl{display:none}}@media (max-width:700px) and (orientation:portrait){#hmenu{top:auto;bottom:calc(50vh - 22px);left:auto;right:6px;transform:none;flex-direction:column}.hmp{left:auto;right:52px;top:0;transform:none}}
#ebubble{position:fixed;left:50%;top:34%;transform:translate(-50%,-50%) scale(.6);opacity:0;pointer-events:none;z-index:40;background:#fff;color:#111;font:800 20px system-ui;padding:10px 16px;border-radius:18px;box-shadow:0 4px 18px #0008;transition:transform .2s,opacity .2s}
#ebubble::after{content:'';position:absolute;left:50%;bottom:-10px;margin-left:-8px;border:8px solid transparent;border-top-color:#fff;border-bottom:0}
#ebubble.on{opacity:1;transform:translate(-50%,-50%) scale(1)}
body.noinfo .keys,body.noinfo #keys,body.noinfo #tvhint,body.noinfo .gnote,body.noinfo #hud,body.noinfo #dist,body.noinfo .hint,body.noinfo small{display:none!important}
@media (orientation:landscape) and (max-height:500px){.hmp{max-height:calc(100vh - 150px)}}
/* v16b: TEST CALL is dev-only; hidden on every public build */#calltest{display:none!important}
#groupcall{position:fixed;left:calc(8px + env(safe-area-inset-left));top:104px;z-index:52;min-height:44px;min-width:44px;padding:0 14px;border-radius:12px;border:1px solid rgba(120,240,255,.6);background:rgba(12,10,30,.82);color:#e6fbff;font:600 13px system-ui}
#gctoast{position:fixed;left:50%;bottom:22%;transform:translateX(-50%);background:rgba(10,6,30,.92);color:#e6fbff;padding:10px 16px;border-radius:12px;font:600 14px system-ui;opacity:0;pointer-events:none;transition:opacity .4s;z-index:60}#gctoast.on{opacity:1}
@media (max-width:700px) and (orientation:portrait){#groupcall{left:auto;right:6px;top:auto;bottom:calc(50vh + 140px)}}
/* v17 compact hudmenus only; touch keeps >=44px */
#hmenu{gap:4px;font-size:11px}#hmenu button{min-height:32px;min-width:32px;padding:0 9px;font-size:11px;border-radius:10px}.hmp{min-width:150px;padding:6px;gap:4px;top:38px}
.hmp button{font-size:12px;white-space:nowrap}
@media (pointer:coarse){#hmenu button,.hmp button{min-height:44px}#hmenu button{min-width:44px}}
/* TESTNET notice: small, inside the sign-in area under the Xaman button; never hidden by Info */
#wallet #tnbadge{position:static!important;left:auto!important;top:auto!important;transform:none!important;display:inline-block!important;margin-top:4px;font-size:10px!important;padding:2px 8px!important;opacity:.75;pointer-events:none}

/* v17 skin tab pulse (box-shadow/outline only: no layout shift) */
@keyframes skPulse { 0%,100% { box-shadow: 0 0 0 0 rgba(120,220,255,0); } 50% { box-shadow: 0 0 0 5px rgba(120,220,255,.95), 0 0 24px 10px rgba(120,220,255,.7); } }
#skintag.sk-flash, #skintag.sk-still { opacity: 1 !important; border-color: #7fe6ff !important; }
#skintag.sk-flash { animation: skPulse 1s ease-in-out 3 !important; }
#skintag.sk-still { outline: 3px solid rgba(120,220,255,.95); outline-offset: 2px !important; box-shadow: 0 0 12px 3px rgba(120,220,255,.7) !important; }

/* copyright line on the click-to-enter overlay only */
#overlay .copy{position:fixed;left:0;right:0;bottom:max(8px,env(safe-area-inset-bottom));text-align:center;font-size:11px;opacity:.6;pointer-events:none}
/* v18 intro overlay (above the enter screen, no layout impact) */
#intro{position:fixed;inset:0;z-index:9999;background:#05030f;transition:opacity .4s}
#intro canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
#introSkip{position:absolute;top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));min-width:88px;min-height:44px;padding:0 16px;border-radius:22px;border:1px solid #22f0ff;background:rgba(10,6,32,.8);color:#bff9ff;font:600 15px system-ui,sans-serif;cursor:pointer;z-index:1}
/* v18b retro title: original outlined serif with red neon stroke, thin bars above/below (system serif, no web font) */
#overlay h1.retro{font:700 clamp(34px,9vw,84px)/1.05 Georgia,"Times New Roman",serif;letter-spacing:.06em;text-transform:uppercase;color:transparent;-webkit-text-stroke:2px #ff2a3d;text-shadow:0 0 6px rgba(255,42,61,.9),0 0 22px rgba(255,42,61,.55);padding:.18em .2em;margin:0 auto .3em;max-width:100%;border-top:2px solid #ff2a3d;border-bottom:2px solid #ff2a3d;box-shadow:0 -6px 12px -8px #ff2a3d,0 6px 12px -8px #ff2a3d;display:inline-block;animation:retroGlow 2.4s ease-out both}
@keyframes retroGlow{from{opacity:0;text-shadow:none;filter:blur(2px)}to{opacity:1}}
@media (prefers-reduced-motion:reduce){#overlay h1.retro{animation:none}}
#overlay .copy{position:static!important;display:block;margin:-.2em 0 .8em;font-size:11px;opacity:.55}
/* v18c title: chrome->orange/red gradient, italic skew, speed streaks (original; built-in heavy sans) */
#overlay h1.retro{font:900 italic clamp(34px,9vw,84px)/1.05 Impact,"Arial Black","Helvetica Neue",Arial,sans-serif;letter-spacing:.04em;-webkit-text-stroke:0;color:transparent;background:linear-gradient(180deg,#f4f7fb 0%,#b9c3cf 38%,#ffb347 52%,#ff5a1f 72%,#c8102e 100%);-webkit-background-clip:text;background-clip:text;text-shadow:none;filter:drop-shadow(0 0 6px rgba(255,42,61,.55)) drop-shadow(0 0 16px rgba(255,42,61,.3));transform:skewX(-10deg);border:0;box-shadow:none;position:relative;padding:.1em .25em .35em}
#overlay h1.retro::after{content:"";position:absolute;left:18%;right:-6%;bottom:.08em;height:.26em;background:linear-gradient(90deg,transparent,#ff5a1f 30%,transparent) 0 0/100% 2px no-repeat,linear-gradient(90deg,transparent,#ffb347 40%,transparent) 12% 50%/88% 2px no-repeat,linear-gradient(90deg,transparent,#c8102e 50%,transparent) 26% 100%/74% 2px no-repeat;pointer-events:none}
#roombar{position:fixed;left:50%;transform:translateX(-50%);bottom:18px;z-index:31;display:flex;gap:8px}
.rbtn{min-height:40px;min-width:44px;padding:8px 14px;border-radius:14px;border:1px solid #7fe0ff;background:rgba(6,24,40,.75);color:#cfefff;font:600 14px sans-serif;cursor:pointer}
#roomchat{position:fixed;left:50%;transform:translateX(-50%);bottom:70px;width:min(420px,46vw);z-index:31;background:rgba(6,18,30,.8);border:1px solid #2a6a80;border-radius:12px;padding:8px;color:#e6f7ff;font:14px/1.35 sans-serif}
#roomchat .rlog{max-height:140px;overflow-y:auto;word-break:break-word;margin-bottom:6px}#roomchat .sys{color:#8fd0e0;font-style:italic}
#roomchat form{display:flex;gap:6px}#roomchat input{flex:1;min-width:0;min-height:40px;border-radius:10px;border:1px solid #2a6a80;background:#031019;color:#fff;padding:0 10px;font-size:16px}
#roomchat .rhide{margin-top:6px;width:100%}
@media (max-width:500px){#roomchat{width:calc(100vw - 24px);bottom:auto;top:110px}#roombar{bottom:150px}}
@media (max-height:500px){#roomchat{width:40vw;bottom:auto;top:8px}#roomchat .rlog{max-height:70px}#roombar{bottom:12px}}

/* v24 touch targets: >=44px on coarse pointers; hub children compensate for hub scale (--hk) */
.lay-touch #skintag,.lay-touch #walletBtn,.lay-touch .rbtn,.lay-touch .hudtog,.lay-touch #snd,.lay-touch #texit{min-height:44px!important;min-width:44px!important}
/* v26: hub buttons keep natural (proportional) visuals; an invisible ::after pads the tap area to >=44 screen px */
.lay-touch #hub #mymusic,.lay-touch #hub #mmrow button,.lay-touch #hub #mic{position:relative!important;min-height:28px!important;min-width:28px!important}
.lay-touch #hub #mymusic::after,.lay-touch #hub #mmrow button::after,.lay-touch #hub #mic::after{content:'';position:absolute;left:50%;top:50%;width:max(100%,calc(44px / var(--hk,1)));height:max(100%,calc(44px / var(--hk,1)));transform:translate(-50%,-50%);background:transparent}
.lay-touch #mymusic:not(#hub *),.lay-touch #mic:not(#hub *){min-height:44px;min-width:44px}
#roombar{padding-bottom:0}
.lay-touch #walletBtn{white-space:nowrap}
/* v24 chat zone: while room chat is open the top HUD steps aside; chat never sits over the Click-to-enter box */
body:has(#roomchat:not([hidden])) :is(#hub,#hmenu,#hud,#skintag,#calltest,#aura,#mymusic,#tnbadge){visibility:hidden!important;pointer-events:none!important}
body:has(#overlay:not(.hidden)) #roomchat{display:none!important}
/* v26: skin tag + picker sit above the Click-to-enter overlay (desktop: a real click reached #overlay, not the tag) */
#skintag,#skinpanel{z-index:11!important}
