*{box-sizing:border-box}
[hidden]{display:none!important}
body{margin:0;font-size:14px}
:root{padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}

/* Layout: full-bleed canvas world; HUD floats at the edges; sheets rise from the bottom on phones, center on desktop. Single night-sea look. */
:root{
  --ink:#0f2a31; --ink-2:#17404a; --ink-3:#22545f;
  --sand:#f4e6c6; --sand-dim:#b8ab8d;
  --lamp:#ffc94a; --lamp-deep:#e59a1c;
  --leaf:#86d38f; --coral:#ff8a72;
  --sea:#1b5e7a;
  --f-display:"Pixelify Sans", "Courier New", monospace;
  --f-body:"Rethink Sans", system-ui, -apple-system, sans-serif;
  --f-hand:"Kalam", "Comic Sans MS", cursive;
  color-scheme:dark;
}
html,body{height:100%}
body{background:var(--sea);color:var(--sand);font-family:var(--f-body);overflow:hidden;-webkit-tap-highlight-color:transparent;overscroll-behavior:none}
#game{position:fixed;inset:0;touch-action:none}
#game canvas{position:absolute;inset:0;width:100%;height:100%;display:block;outline:none}
button{font:inherit;color:inherit;cursor:pointer}
button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--lamp);outline-offset:2px}

/* HUD */
.hud{position:fixed;z-index:5;pointer-events:none}
.hud > *{pointer-events:auto}
#hud-l{top:calc(env(safe-area-inset-top,0px) + 12px);left:max(12px, env(safe-area-inset-left,0px));display:flex;flex-direction:column;gap:6px;max-width:min(300px, calc(100vw - 90px))}
.plate{background:color-mix(in srgb, var(--ink) 88%, transparent);border:2px solid var(--ink-3);border-radius:4px;padding:10px 12px;box-shadow:0 3px 0 rgba(0,0,0,.35)}
#isl-name{font-family:var(--f-display);font-weight:700;font-size:18px;line-height:1.1;letter-spacing:.02em;color:var(--sand);text-wrap:balance}
#isl-sub{font-size:12px;color:var(--sand-dim);margin-top:2px}
.pop{display:flex;align-items:baseline;gap:8px;margin-top:8px}
#pop-n{font-family:var(--f-display);font-size:30px;font-weight:700;color:var(--lamp);font-variant-numeric:tabular-nums;line-height:1}
.pop small{font-size:12px;color:var(--sand-dim);text-transform:uppercase;letter-spacing:.08em}
.ms{margin-top:8px}
.ms-bar{height:6px;background:var(--ink-2);border-radius:2px;overflow:hidden}
.ms-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--lamp-deep),var(--lamp));width:0}
#ms-txt{font-size:11px;color:var(--sand-dim);margin-top:4px}
#hud-r{top:calc(env(safe-area-inset-top,0px) + 12px);right:max(12px, env(safe-area-inset-right,0px));display:flex;flex-direction:column;gap:6px}
.ib{width:44px;height:44px;display:grid;place-items:center;background:color-mix(in srgb, var(--ink) 88%, transparent);border:2px solid var(--ink-3);border-radius:4px;box-shadow:0 3px 0 rgba(0,0,0,.35);position:relative}
.ib:hover{border-color:var(--lamp)}
.ib svg{width:22px;height:22px;fill:none;stroke:var(--sand);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.ib .dot{position:absolute;top:-4px;right:-4px;width:10px;height:10px;border-radius:50%;background:var(--coral);border:2px solid var(--ink)}
.ib.admin{border-color:var(--lamp-deep)}
#prompt{position:fixed;z-index:5;left:50%;transform:translateX(-50%);bottom:calc(env(safe-area-inset-bottom,0px) + 22px);font-family:var(--f-display);font-size:16px;background:var(--ink);border:2px solid var(--lamp);color:var(--sand);padding:10px 16px;border-radius:4px;box-shadow:0 3px 0 rgba(0,0,0,.4);display:flex;gap:10px;align-items:center;white-space:nowrap;max-width:calc(100vw - 150px);overflow:hidden;text-overflow:ellipsis}
#prompt kbd{font-family:var(--f-display);background:var(--lamp);color:var(--ink);padding:1px 7px;border-radius:3px;font-size:14px}
#act{position:fixed;z-index:5;right:max(18px, env(safe-area-inset-right,0px));bottom:calc(env(safe-area-inset-bottom,0px) + 22px);width:68px;height:68px;border-radius:50%;background:var(--lamp);color:var(--ink);font-family:var(--f-display);font-weight:700;font-size:15px;border:3px solid var(--ink);box-shadow:0 4px 0 rgba(0,0,0,.4)}
#act:disabled{background:var(--ink-2);color:var(--sand-dim)}
#joy{position:fixed;z-index:4;width:110px;height:110px;margin:-55px 0 0 -55px;border-radius:50%;border:2px solid rgba(244,230,198,.45);background:rgba(15,42,49,.25);pointer-events:none}
#joy i{position:absolute;left:50%;top:50%;width:44px;height:44px;margin:-22px 0 0 -22px;border-radius:50%;background:rgba(244,230,198,.75)}
#hint{position:fixed;z-index:5;left:max(12px, env(safe-area-inset-left,0px));bottom:calc(env(safe-area-inset-bottom,0px) + 12px);font-size:12px;color:var(--sand);background:color-mix(in srgb, var(--ink) 75%, transparent);padding:6px 10px;border-radius:3px}
#unhide{position:fixed;z-index:6;right:max(8px, env(safe-area-inset-right,0px));bottom:calc(env(safe-area-inset-bottom,0px) + 8px);opacity:.35;font-size:11px;background:var(--ink);border:1px solid var(--ink-3);padding:4px 8px;border-radius:3px}
body.rec .hud,body.rec #prompt,body.rec #act,body.rec #hint{display:none!important}
#banner{position:fixed;z-index:7;top:calc(env(safe-area-inset-top,0px) + 12px);left:50%;transform:translateX(-50%);background:var(--lamp);color:var(--ink);font-weight:700;padding:8px 10px 8px 14px;border-radius:4px;display:flex;gap:10px;align-items:center;box-shadow:0 3px 0 rgba(0,0,0,.4);max-width:calc(100vw - 32px)}
#banner button{background:var(--ink);color:var(--sand);border:0;border-radius:3px;padding:6px 10px}
#toast{position:fixed;z-index:30;left:50%;transform:translateX(-50%);top:calc(env(safe-area-inset-top,0px) + 70px);background:var(--sand);color:var(--ink);padding:8px 14px;border-radius:4px;font-weight:500;box-shadow:0 3px 0 rgba(0,0,0,.35);max-width:calc(100vw - 32px);text-align:center}

/* Dialog (RPG style) */
#dialog{position:fixed;z-index:8;left:50%;transform:translateX(-50%);bottom:calc(env(safe-area-inset-bottom,0px) + 100px);width:min(560px, calc(100vw - 32px));background:var(--ink);border:3px solid var(--sand);border-radius:4px;padding:12px 16px 14px;box-shadow:0 5px 0 rgba(0,0,0,.4);cursor:pointer}
#dlg-name{font-family:var(--f-display);color:var(--lamp);font-size:15px;margin-bottom:4px}
#dlg-text{font-size:15px;line-height:1.5}
#dlg-more{font-size:11px;color:var(--sand-dim);text-align:right;margin-top:4px}

/* Sheet */
#sheet{position:fixed;inset:0;z-index:20;background:rgba(5,14,18,.55);display:flex;align-items:center;justify-content:center;padding-left:max(16px, env(safe-area-inset-left,0px));padding-right:max(16px, env(safe-area-inset-right,0px));padding-block:calc(env(safe-area-inset-top,0px) + 16px) calc(env(safe-area-inset-bottom,0px) + 16px)}
.card{width:min(620px,100%);max-height:100%;display:flex;flex-direction:column;background:var(--ink);border:2px solid var(--ink-3);border-radius:6px;box-shadow:0 6px 0 rgba(0,0,0,.4);min-width:0}
.card > header{display:flex;align-items:center;gap:12px;padding:14px 16px 10px;border-bottom:2px solid var(--ink-2)}
.card > header h2{margin:0;flex:1;font-family:var(--f-display);font-size:20px;font-weight:700;text-wrap:balance}
.x{background:var(--ink-2);border:0;width:36px;height:36px;border-radius:4px;font-size:18px}
#sheet-body{padding:14px 16px 18px;overflow:auto;min-width:0}
@media (max-width:600px){#sheet{align-items:flex-end;padding-left:0;padding-right:0;padding-bottom:0}.card{width:100%;max-height:88%;border-radius:10px 10px 0 0;border-bottom:0}#sheet-body{padding-bottom:calc(env(safe-area-inset-bottom,0px) + 18px)}}
.lede{color:var(--sand-dim);font-size:14px;line-height:1.5;margin:0 0 12px;max-width:62ch}
.empty{padding:20px;text-align:center;color:var(--sand-dim);border:2px dashed var(--ink-3);border-radius:4px;line-height:1.5}
.eyebrow{font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--sand-dim)}
.big{font-family:var(--f-display);font-size:44px;font-weight:700;color:var(--lamp);line-height:1;font-variant-numeric:tabular-nums}
.names{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px;margin-top:10px}
.nm{background:#4b5550;color:#e7e3d6;font-family:var(--f-display);padding:7px 9px;border-radius:3px;display:flex;justify-content:space-between;gap:6px;min-width:0;box-shadow:inset 0 -2px 0 rgba(0,0,0,.25),inset 0 1px 0 rgba(255,255,255,.12)}
.nm span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nm b{font-weight:400;color:#b5b0a0;font-size:12px;font-variant-numeric:tabular-nums}
.nm.me{background:var(--lamp);color:var(--ink)}
.nm.me b{color:var(--ink)}
.feed{display:flex;flex-direction:column;gap:10px}
.entry{border-left:3px solid var(--lamp);padding:2px 0 2px 12px}
.entry h3{margin:0;font-size:15px;font-weight:700}
.entry .meta{font-size:12px;color:var(--sand-dim);margin:2px 0 4px}
.entry p{margin:0;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}
.chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.chip{font-size:12px;background:var(--ink-2);padding:3px 8px;border-radius:20px}
.letter{background:#f3e7c9;color:#3a2a1a;border-radius:3px;padding:20px 22px;font-family:var(--f-hand);font-size:18px;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08),0 3px 0 rgba(0,0,0,.3)}
.letter h3{font-family:var(--f-hand);font-size:22px;margin:0 0 8px}
.letter .sign{text-align:right;margin-top:10px}
.tabs{display:flex;gap:4px;overflow-x:auto;margin-bottom:12px;padding-bottom:2px}
.tab{background:var(--ink-2);border:0;padding:8px 12px;border-radius:4px;font-weight:500;white-space:nowrap}
.tab[aria-selected="true"]{background:var(--lamp);color:var(--ink)}
.field{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.field label{font-size:12px;color:var(--sand-dim)}
.field input,.field textarea,.field select,.inp{background:var(--ink-2);border:2px solid var(--ink-3);color:var(--sand);border-radius:4px;padding:9px 10px;font:inherit;font-size:15px;min-width:0;width:100%;box-sizing:border-box}
.field textarea{min-height:90px;resize:vertical}
.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.row > .field{flex:1;min-width:120px}
.btn{background:var(--lamp);color:var(--ink);border:0;border-radius:4px;padding:10px 14px;font-weight:700;box-shadow:0 2px 0 var(--lamp-deep)}
.btn.ghost{background:var(--ink-2);color:var(--sand);box-shadow:none}
.btn.warn{background:var(--coral);box-shadow:none}
.btn:disabled{opacity:.5;cursor:default}
.mini{background:var(--ink-2);border:0;border-radius:3px;padding:3px 8px;font-size:12px}
.list{display:flex;flex-direction:column;gap:4px;max-height:260px;overflow:auto;margin-top:8px}
.li{display:flex;justify-content:space-between;align-items:center;gap:8px;background:var(--ink-2);padding:6px 8px;border-radius:3px;min-width:0}
.li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.palette{display:grid;grid-template-columns:repeat(auto-fill,minmax(82px,1fr));gap:6px}
.pal{background:var(--ink-2);border:2px solid transparent;border-radius:4px;padding:6px 4px;display:flex;flex-direction:column;align-items:center;gap:4px;font-size:12px}
.pal[aria-pressed="true"]{border-color:var(--lamp)}
.pal canvas{image-rendering:pixelated;width:48px;height:48px;object-fit:contain}
.savebar{position:sticky;bottom:-18px;margin:14px -16px -18px;padding:12px 16px;background:var(--ink-2);display:flex;gap:8px;align-items:center;flex-wrap:wrap;border-top:2px solid var(--ink-3)}
.savebar span{flex:1;font-size:13px;color:var(--sand-dim);min-width:150px}
.draw-stage{background:var(--ink-2);border-radius:6px;padding:16px;text-align:center;margin-top:10px}
.draw-name{font-family:var(--f-display);font-size:26px;color:var(--lamp);overflow-wrap:anywhere}
.draw-text{font-size:15px;margin-top:4px;overflow-wrap:anywhere}
.pick{background:var(--ink);border:2px solid var(--lamp);border-radius:6px;padding:12px;margin-top:8px;text-align:left}
.rules{margin:0;padding-left:20px;line-height:1.6;display:flex;flex-direction:column;gap:6px}
.clue{background:var(--ink-2);border-radius:4px;padding:10px 12px;line-height:1.5;overflow-wrap:anywhere}
.clue.locked{color:var(--sand-dim);font-style:italic;background:repeating-linear-gradient(45deg,var(--ink-2) 0 8px,var(--ink) 8px 16px)}
.mapwrap{display:grid;place-items:center;background:#0b3443;border-radius:6px;padding:10px}
#mapcv{width:100%;max-width:420px;aspect-ratio:1;image-rendering:pixelated;max-height:60vh}
.legend{display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--sand-dim);margin-top:8px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px;vertical-align:-1px}

/* Start */
#start{position:fixed;inset:0;z-index:15;display:grid;place-items:safe center;overflow-y:auto;background:radial-gradient(ellipse at center, rgba(8,24,30,.15), rgba(8,24,30,.7));padding-left:max(16px, env(safe-area-inset-left,0px));padding-right:max(16px, env(safe-area-inset-right,0px));padding-block:16px}
.start-card{width:min(440px,100%);background:var(--ink);border:3px solid var(--sand);border-radius:6px;padding:22px 22px 20px;box-shadow:0 6px 0 rgba(0,0,0,.45)}
.start-card h1{font-family:var(--f-display);font-size:34px;line-height:1;margin:6px 0 10px;text-wrap:balance}
.start-card p{margin:0 0 14px;line-height:1.5;color:var(--sand-dim)}
.start-stats{display:flex;gap:18px;margin-bottom:16px}
.start-stats div{display:flex;flex-direction:column}
.start-stats b{font-family:var(--f-display);font-size:24px;color:var(--lamp);font-variant-numeric:tabular-nums}
.start-stats span{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--sand-dim)}
.start-actions{display:flex;flex-direction:column;gap:8px}
.start-actions .btn{padding:12px 14px;font-size:16px}
.join{display:flex;gap:6px}
.join .inp{flex:1}
.keys{font-size:12px;color:var(--sand-dim);margin-top:12px;line-height:1.5}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* name labels over characters */
#labels{position:fixed;inset:0;pointer-events:none;z-index:3;overflow:hidden}
.lbl{position:absolute;left:0;top:0;transform:translate(-50%,-100%);font-family:var(--f-display);font-size:12px;font-weight:600;background:rgba(15,42,49,.78);color:var(--sand);padding:2px 7px;border-radius:3px;white-space:nowrap;will-change:transform}
.lbl.gold{color:var(--lamp)}
.lbl.sign{background:#a7794a;color:#2b1a0c;border:1px solid #6b4a2b}
body.rec #labels .lbl:not(.keep){display:none}
#loading{position:fixed;inset:0;z-index:40;display:grid;place-items:center;background:var(--ink);font-family:var(--f-display);font-size:18px;color:var(--sand)}
.tokenbox{background:var(--ink-2);border-radius:6px;padding:12px;margin-top:10px;font-size:13px;line-height:1.5;color:var(--sand-dim)}
.tokenbox ol{margin:6px 0 0;padding-left:18px}
.tokenbox a{color:var(--lamp)}

.fishplate{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px}
.fishplate b{font-family:var(--f-display);font-size:20px;color:var(--lamp);font-variant-numeric:tabular-nums}
#unpub{position:fixed;z-index:9;left:50%;transform:translateX(-50%);bottom:calc(env(safe-area-inset-bottom,0px) + 84px);display:flex;gap:10px;align-items:center;background:var(--coral);color:var(--ink);font-weight:700;padding:8px 8px 8px 14px;border-radius:4px;box-shadow:0 3px 0 rgba(0,0,0,.4);max-width:calc(100vw - 32px);font-size:13px}
#unpub button{background:var(--ink);color:var(--sand);border:0;border-radius:3px;padding:7px 12px;font-weight:700;white-space:nowrap}
body.rec #unpub{display:none!important}
#jump{position:fixed;z-index:5;right:calc(max(18px, env(safe-area-inset-right,0px)) + 80px);bottom:calc(env(safe-area-inset-bottom,0px) + 18px);width:56px;height:56px;border-radius:50%;background:var(--sand);color:var(--ink);font-family:var(--f-display);font-weight:700;font-size:11px;border:3px solid var(--ink);box-shadow:0 4px 0 rgba(0,0,0,.4);touch-action:none}
body.rec #jump{display:none!important}

/* ---- compact HUD (v2) ---- */
#hud-l{gap:6px;max-width:min(320px, calc(100vw - 80px))}
#hud-pill{display:flex;align-items:center;gap:8px;background:color-mix(in srgb, var(--ink) 82%, transparent);border:1.5px solid var(--ink-3);border-radius:999px;padding:6px 12px 6px 14px;box-shadow:0 2px 0 rgba(0,0,0,.3);font-size:13px;color:var(--sand);min-width:0;max-width:100%}
#hud-pill #isl-name{font-family:var(--f-display);font-weight:700;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;letter-spacing:0}
.pill-pop{white-space:nowrap;color:var(--sand-dim)}
.pill-pop b{font-family:var(--f-display);color:var(--lamp);font-size:15px;font-variant-numeric:tabular-nums}
.pill-ep{font-size:11px;font-weight:700;background:var(--ink-2);border-radius:999px;padding:2px 7px;color:var(--sand);white-space:nowrap}
#hud-more{padding:10px 12px;font-size:12px}
#hud-more #isl-sub{font-size:12px;color:var(--sand-dim);margin:0 0 8px}
#hud-more .ms{margin-top:0}
.fishplate{border-radius:999px;padding:5px 12px;width:max-content;max-width:100%}
.fishplate b{font-size:16px}
#hud-r{gap:6px;align-items:flex-end}
#b-menu{width:40px;height:40px;border-radius:999px;border-width:1.5px;background:color-mix(in srgb, var(--ink) 82%, transparent)}
#menu{display:flex;flex-direction:column;background:var(--ink);border:1.5px solid var(--ink-3);border-radius:10px;padding:6px;box-shadow:0 4px 0 rgba(0,0,0,.35);min-width:190px}
.mi{display:flex;align-items:center;gap:10px;background:none;border:0;color:var(--sand);padding:10px 10px;border-radius:6px;font-size:14px;text-align:left;position:relative}
.mi:hover,.mi:focus-visible{background:var(--ink-2)}
.mi svg{width:18px;height:18px;fill:none;stroke:var(--sand);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
.mi .dot{position:static;margin-left:auto;width:8px;height:8px;border-radius:50%;background:var(--coral)}
.mi.admin{color:var(--lamp)}
#prompt{font-size:13px;padding:7px 12px;border-width:1.5px;border-radius:999px;bottom:calc(env(safe-area-inset-bottom,0px) + 18px)}
#prompt kbd{font-size:12px;padding:0 6px}
#act{width:auto;height:auto;min-width:64px;max-width:min(60vw,240px);padding:14px 18px;border-radius:999px;display:flex;align-items:center;gap:8px;font-size:14px;bottom:calc(env(safe-area-inset-bottom,0px) + 22px);border-width:2px;white-space:nowrap;overflow:hidden;touch-action:manipulation}
#act-t{overflow:hidden;text-overflow:ellipsis}
#act.talk{background:var(--sand)}
#act-ico svg{width:18px;height:18px;display:block;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
#hint{left:50%;transform:translateX(-50%);bottom:auto;top:calc(env(safe-area-inset-top,0px) + 60px);font-size:12px;border-radius:999px;padding:6px 12px;text-align:center;max-width:calc(100vw - 32px)}
.lbl{font-size:10px;padding:1px 6px;background:rgba(15,42,49,.6);font-weight:400}
#unpub{bottom:calc(env(safe-area-inset-bottom,0px) + 90px)}
