/* World UI: HUD, dialog, panels, theatre, character sheet. Colours follow the current town (--acc, --soft, --ink). */
:root{--acc:#7c5ac7;--soft:#fff;--ink:#2a2040;--font:"Segoe UI Variable Display","Segoe UI",system-ui,-apple-system,Roboto,Arial,sans-serif}
*{box-sizing:border-box}
html,body{margin:0;height:100%;overflow:hidden;background:#1b1530;font-family:var(--font);color:var(--ink);-webkit-tap-highlight-color:transparent}
#app{position:fixed;inset:0;overflow:hidden}
#c{position:absolute;inset:0;display:block;touch-action:none;cursor:grab;outline:0}
[hidden]{display:none!important}
button{font:inherit;cursor:pointer}
:focus-visible{outline:3px solid #ffbf3a;outline-offset:2px}

/* HUD */
#hud{position:absolute;left:0;right:0;top:0;padding:max(10px,env(safe-area-inset-top)) 12px 0;display:flex;justify-content:space-between;gap:10px;pointer-events:none}
#hud>*{pointer-events:auto}
#left{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
#where{background:rgba(255,255,255,.92);border:2.5px solid var(--acc);border-radius:999px;padding:7px 16px;font-weight:800;font-size:15px;letter-spacing:.01em;box-shadow:0 4px 14px rgba(0,0,0,.18);color:#2a2040}
#target{background:#ffc21a;border:2px solid #8a5a00;border-radius:999px;padding:5px 6px 5px 14px;font-weight:700;font-size:13px;color:#3a2600;display:flex;align-items:center;gap:6px}
#target button{border:0;background:rgba(0,0,0,.15);border-radius:50%;width:22px;height:22px;line-height:20px;font-weight:800;color:#3a2600;padding:0}
#btns{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
#btns>*{background:rgba(255,255,255,.92);border:2.5px solid var(--acc);border-radius:999px;min-width:42px;height:42px;padding:0 14px;display:inline-flex;align-items:center;justify-content:center;gap:6px;font-weight:700;font-size:14px;color:#2a2040;text-decoration:none;box-shadow:0 4px 14px rgba(0,0,0,.18)}
#btns>*:hover{transform:translateY(-1px)}
#btns .lab{display:inline}
#emotes{position:absolute;top:calc(max(10px,env(safe-area-inset-top)) + 54px);right:12px;display:flex;flex-wrap:wrap;gap:6px;max-width:320px;justify-content:flex-end;background:rgba(255,255,255,.94);padding:10px;border-radius:18px;border:2.5px solid var(--acc);box-shadow:0 8px 24px rgba(0,0,0,.25)}
.chip{border:2px solid var(--acc);background:#fff;color:#2a2040;border-radius:999px;padding:6px 12px;font-weight:700;font-size:13px}
.chip:hover{background:var(--acc);color:#fff}
#prompt{position:absolute;left:50%;bottom:max(20px,env(safe-area-inset-bottom));transform:translateX(-50%);background:rgba(255,255,255,.95);border:2.5px solid var(--acc);color:#2a2040;border-radius:999px;padding:8px 18px;font-weight:700;font-size:14px;box-shadow:0 4px 14px rgba(0,0,0,.25);pointer-events:none;white-space:nowrap}
body:not(.touch) #prompt::before{content:"E  ";display:inline-block;background:var(--acc);color:#fff;border-radius:6px;padding:0 6px;margin-right:6px}
#banner{position:absolute;left:50%;top:22%;transform:translateX(-50%);text-align:center;pointer-events:none;opacity:0}
#banner.go{animation:ban 3.1s ease both}
#banner h1{margin:0;font-size:clamp(28px,6vw,56px);font-weight:900;letter-spacing:-.01em;color:#fff;text-shadow:0 3px 0 var(--acc),0 6px 24px rgba(0,0,0,.4)}
#banner p{margin:6px 0 0;font-weight:700;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,.5)}
@keyframes ban{0%{opacity:0;transform:translate(-50%,14px)}12%,78%{opacity:1;transform:translate(-50%,0)}100%{opacity:0;transform:translate(-50%,-10px)}}

/* touch controls */
#stick{position:absolute;width:110px;height:110px;margin:-55px 0 0 -55px;border-radius:50%;background:rgba(255,255,255,.28);border:3px solid rgba(255,255,255,.7);pointer-events:none}
#knob{position:absolute;left:30px;top:30px;width:50px;height:50px;border-radius:50%;background:var(--acc);border:3px solid #fff;box-shadow:0 3px 10px rgba(0,0,0,.35)}
#abtn{position:absolute;right:max(18px,env(safe-area-inset-right));bottom:max(24px,env(safe-area-inset-bottom));width:76px;height:76px;border-radius:50%;border:4px solid #fff;background:var(--acc);color:#fff;font-weight:900;font-size:28px;box-shadow:0 6px 18px rgba(0,0,0,.35);opacity:.55;display:none;touch-action:manipulation}
#abtn.on{opacity:1;animation:pop 1.2s ease-in-out infinite}
body.touch #abtn{display:block}
body.touch #prompt{bottom:max(112px,env(safe-area-inset-bottom))}
@keyframes pop{50%{transform:scale(1.08)}}

/* dialog box (zelda style) */
#dlg{position:absolute;left:50%;bottom:max(18px,env(safe-area-inset-bottom));transform:translateX(-50%);width:min(720px,calc(100% - 24px));background:rgba(255,252,246,.97);border:4px solid var(--acc);border-radius:20px;padding:16px 20px 16px;box-shadow:0 10px 36px rgba(0,0,0,.35);color:#2a2040}
.dark #dlg,.dark .card,.dark #btns>*,.dark #where{background:rgba(10,18,32,.95);color:#dff0ff}
#dname{display:inline-block;background:var(--acc);color:#fff;font-weight:800;border-radius:10px;padding:2px 12px;margin:-32px 0 6px;font-size:14px;box-shadow:0 3px 8px rgba(0,0,0,.25)}
.dark #dname{color:#04101e}
#dtext{margin:4px 0 10px;font-size:18px;line-height:1.45;min-height:2.6em}
#dopts{display:flex;flex-wrap:wrap;gap:8px;max-height:36vh;overflow:auto}
.b{background:var(--acc);color:#fff;border:0;border-radius:12px;padding:9px 16px;font-weight:700;font-size:15px;box-shadow:0 3px 0 rgba(0,0,0,.25)}
.dark .b{color:#04101e}
.b.ghost{background:transparent;color:inherit;border:2px solid var(--acc);box-shadow:none}
.b.town{background:#fff;color:var(--acc);border:2px solid var(--acc)}
.b:hover{filter:brightness(1.08)}

/* overlays */
.ov{position:absolute;inset:0;display:grid;place-items:center;padding:14px;background:rgba(20,10,40,.5);backdrop-filter:blur(3px);z-index:20}
.card{position:relative;background:#fffaf2;border:4px solid var(--acc);border-radius:24px;padding:24px 24px 22px;width:min(560px,100%);max-height:calc(100% - 20px);overflow:auto;box-shadow:0 14px 50px rgba(0,0,0,.4);color:#2a2040}
.card.wide{width:min(760px,100%)}
.card h2{margin:0 0 6px;font-size:28px;line-height:1.1;font-weight:900;color:var(--acc);padding-right:34px}
.dark .card h2{color:#59dcff}
.card .tx{margin:0 0 16px;font-size:17px;line-height:1.5}
.x{position:absolute;top:12px;right:12px;width:34px;height:34px;border-radius:50%;border:2px solid var(--acc);background:#fff;color:var(--acc);font-weight:900;font-size:18px;line-height:1;padding:0}
.opts{display:grid;gap:10px}
.opt{display:grid;grid-template-columns:1fr auto;gap:2px 12px;text-align:left;background:#fff;color:#2a2040;border:2.5px solid var(--acc);border-radius:16px;padding:12px 16px;box-shadow:0 3px 0 rgba(0,0,0,.15);align-items:center}
.dark .opt{background:#0d1a2e;color:#dff0ff}
.opt b{font-size:17px}.opt span{grid-column:1;font-size:14px;opacity:.75}.opt i{grid-row:1/3;grid-column:2;font-style:normal;font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--acc);text-align:right;max-width:90px;line-height:1.2}
button.opt:hover{transform:translateY(-2px);background:var(--soft)}
.opt.soon{opacity:.6;border-style:dashed;box-shadow:none}

#viewer{padding:0;background:#fff;z-index:30;display:flex;flex-direction:column;place-items:stretch}
.vbar{display:flex;gap:12px;align-items:center;justify-content:space-between;padding:10px 14px;background:var(--acc);color:#fff;font-weight:700}
.vbar a,.vbar button{color:#fff;background:rgba(255,255,255,.2);border:0;border-radius:999px;padding:8px 16px;text-decoration:none;font-weight:700}
#vframe{flex:1;width:100%;border:0;background:#fff}

/* theatre */
#theater{background:radial-gradient(120% 90% at 50% 20%,#4a2a66,#150a24);z-index:30}
.stage{position:relative;width:min(1100px,100%);display:flex;flex-direction:column;align-items:center;gap:12px}
.bigscreen{width:100%;aspect-ratio:16/9;max-height:62vh;background:#000;border:10px solid #1d1230;border-radius:12px;box-shadow:0 0 0 3px #d9b24a,0 0 80px rgba(255,210,120,.35);overflow:hidden}
.bigscreen iframe{width:100%;height:100%;border:0;background:#fff}
.curt{position:absolute;top:-14px;width:16%;height:calc(100% + 40px);background:repeating-linear-gradient(90deg,#8f1d3a 0 14px,#b0243f 14px 28px,#7a1630 28px 40px);z-index:1;pointer-events:none;box-shadow:0 0 30px rgba(0,0,0,.5)}
.curt.l{left:-16px;border-radius:0 0 60% 0/0 0 12% 0}.curt.r{right:-16px;border-radius:0 0 0 60%/0 0 0 12%}
.tbar{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;align-items:center;color:#fff;position:relative;z-index:2}
.tbar p{margin:0;font-weight:600;max-width:36em;text-align:center}
.tbar a,.tbar button{background:#ffd24a;color:#2a1740;border:0;border-radius:999px;padding:10px 20px;font-weight:800;text-decoration:none;font-size:15px}
.tbar button{background:#fff}
.seats{width:110%;height:46px;margin-top:-6px;background:repeating-radial-gradient(ellipse at 50% 200%,#5e1030 0 18px,#7a1630 18px 36px);border-radius:50% 50% 0 0/100% 100% 0 0;opacity:.85}

/* character sheet */
.cats{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px;margin:12px 0}
.catcard{background:#fff;border:3px solid var(--acc);border-radius:20px;padding:12px 14px 16px;text-align:center}
.catcard canvas{width:min(220px,70%);height:auto;aspect-ratio:220/240;display:block;margin:0 auto}
.catcard h3{margin:0;font-size:24px;font-weight:900}.catcard p{margin:2px 0 8px;font-size:14px;opacity:.8}
.exprs{display:flex;flex-wrap:wrap;gap:5px;justify-content:center;margin-bottom:10px}
.exprs .chip{padding:3px 9px;font-size:12px}
.how{font-size:14px;line-height:1.5;opacity:.85;margin:6px 0 0}
.how kbd{background:#eee;border:1px solid #bbb;border-bottom-width:2px;border-radius:5px;padding:0 6px;font:inherit;font-weight:700}

@media (max-width:640px){
  #btns .lab{display:none}#btns>*{min-width:42px;padding:0 10px}
  #dtext{font-size:16px}.card{padding:20px 16px}.card h2{font-size:23px}
  #where{font-size:13px;padding:6px 12px}
}
@media (prefers-reduced-motion:reduce){#banner.go{animation:none;opacity:1}#abtn.on{animation:none}}
.pimg{width:100%;height:auto;max-height:46vh;object-fit:cover;border-radius:14px;border:3px solid var(--acc);margin:0 0 12px;display:block;background:#0b0418}
#tfall{width:100%;height:100%;display:grid;place-content:center;gap:16px;text-align:center;padding:24px;background:radial-gradient(80% 80% at 50% 40%,#3a2060,#120a24);color:#fff}#tfall[hidden]{display:none}#tfall p{margin:0;font-size:clamp(14px,2.2vw,20px);max-width:28em}#tfall a{justify-self:center;background:#ffd24a;color:#2a1740;border-radius:999px;padding:12px 24px;font-weight:800;text-decoration:none}
#loading{position:absolute;inset:0;z-index:60;display:grid;place-content:center;justify-items:center;gap:6px;background:radial-gradient(90% 80% at 50% 35%,#4a1d6e,#150a28 70%);color:#fff;text-align:center;cursor:pointer}#loading[hidden]{display:none}#loading img{width:min(62vw,300px);height:auto;filter:drop-shadow(0 0 28px rgba(255,63,176,.55))}#loading p{margin:0;font-weight:800;font-size:clamp(18px,3vw,26px);letter-spacing:.04em;text-shadow:0 0 14px #ff3fb0}#loading span{font-size:12px;opacity:.6;letter-spacing:.14em;text-transform:uppercase}
#toast{position:absolute;left:50%;top:max(70px,calc(env(safe-area-inset-top) + 64px));transform:translateX(-50%);z-index:40;max-width:min(92vw,520px);background:var(--acc);color:#fff;border:3px solid #fff;border-radius:16px;padding:10px 18px;font-weight:800;text-align:center;box-shadow:0 8px 24px rgba(0,0,0,.35);opacity:0}
#toast.go{animation:toast 4.4s ease both}
@keyframes toast{0%{opacity:0;transform:translate(-50%,-10px)}8%,88%{opacity:1;transform:translate(-50%,0)}100%{opacity:0;transform:translate(-50%,-8px)}}
.dark #toast{color:#04101e}
.catcard.locked{background:#2a2142;border-color:#5a4a8c;color:#d8cfee}
.catcard.locked h3{letter-spacing:.2em}.catcard.locked p{opacity:.85}
.lockline{margin-top:6px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;font-size:12px;opacity:.7}
.catcard.cur{box-shadow:0 0 0 4px var(--acc),0 10px 24px rgba(0,0,0,.25)}
.cats{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
