/* Boundwake — studio standard pass (Nov 5, 2026 CT)
   Craft lock: Lifeline vivid/app + Kilumen theme tokens → Boundwake parchment/realm identity.
   See docs/UI_STANDARD_LEDGER.md. Not a cream restyle of the soul pass. */
:root{
  --parch:#F7EBD2;--parch2:#EBD7B0;--parch3:#FBF4E4;--ink:#241C14;--muted:#5E4C38;
  --plum:#2C2140;--gold:#E0B14A;--gold2:#B07D24;--moss:#2F7A48;--ember:#C45A32;--mist:#5A82A8;
  --life:#3F7A3A;--life2:#2A5A28;--life-t:#EEF5E6;
  --work:#B85A22;--work2:#8A3E12;--work-t:#F8EBDC;
  --adv:#1F6B52;--adv2:#134A3A;--adv-t:#E4F2EC;
  --sk:#3F5F9A;--sk2:#2A4270;--sk-t:#E8EEF8;
  --bond:#9A3A5C;--bond2:#6E2842;--bond-t:#F8E6EE;
  --realm:#1F7A72;--realm2:#135650;--realm-t:#E2F2F0;
  --codex:#4A4A8A;--codex2:#32326A;--codex-t:#E8E8F6;
  --bel:#9A7420;--bel2:#6E5210;--bel-t:#F6EED4;
  --fate:#6A3A9A;--fate2:#4A2870;--fate-t:#EFE6F8;
  --death:#4A3560;--death2:#2E2040;--death-t:#EAE4F2;
  --display:"Nunito","Fredoka",ui-rounded,"Trebuchet MS",system-ui,sans-serif;
  --body:system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --accent:var(--gold);--accent2:var(--gold2);--tint:var(--parch3);
  --r-card:16px;--r-btn:12px;--r-pill:999px;
  --bw:2px;--shadow-card:0 1px 0 #fff8 inset,0 8px 22px #00000055,0 0 0 1px #0002;
  --shadow-btn:0 3px 0 #00000033;--dock-h:96px;
  --safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;overflow-x:hidden}
body{
  background:
    radial-gradient(ellipse at 50% 115%,#4a3a2a 0%,transparent 55%),
    radial-gradient(ellipse at 18% 0%,#3d2f5c 0%,transparent 48%),
    var(--plum);
  color:var(--ink);font:15px/1.45 var(--body);
  transition:background .4s ease;
  padding:var(--safe-t) 0 0;
}
body[data-tab="life"]{--accent:var(--life);--accent2:var(--life2);--tint:var(--life-t);background:radial-gradient(ellipse at 50% 110%,#3a4a2a 0%,transparent 55%),radial-gradient(ellipse at 80% 0%,#4a3a2a 0%,transparent 45%),#1e1a28}
body[data-tab="work"]{--accent:var(--work);--accent2:var(--work2);--tint:var(--work-t);background:radial-gradient(ellipse at 30% 100%,#5a3018 0%,transparent 50%),radial-gradient(ellipse at 90% 10%,#4a2a18 0%,transparent 45%),#241820}
body[data-tab="adv"]{--accent:var(--adv);--accent2:var(--adv2);--tint:var(--adv-t);background:radial-gradient(ellipse at 50% 0%,#1a3a30 0%,transparent 55%),radial-gradient(ellipse at 10% 90%,#2a4a28 0%,transparent 50%),#152418}
body[data-tab="skills"]{--accent:var(--sk);--accent2:var(--sk2);--tint:var(--sk-t);background:radial-gradient(ellipse at 70% 0%,#2a3a5c 0%,transparent 55%),radial-gradient(ellipse at 20% 100%,#3a2a5c 0%,transparent 45%),#1a1830}
body[data-tab="bonds"]{--accent:var(--bond);--accent2:var(--bond2);--tint:var(--bond-t);background:radial-gradient(ellipse at 50% 100%,#4a2038 0%,transparent 55%),radial-gradient(ellipse at 80% 0%,#3a2040 0%,transparent 45%),#241028}
body[data-tab="realms"]{--accent:var(--realm);--accent2:var(--realm2);--tint:var(--realm-t);background:radial-gradient(ellipse at 40% 0%,#1a3a38 0%,transparent 55%),radial-gradient(ellipse at 90% 90%,#2a4a40 0%,transparent 45%),#122428}
body[data-tab="legacy"]{--accent:var(--gold);--accent2:var(--gold2);--tint:var(--parch3)}
body[data-tab="codex"]{--accent:var(--codex);--accent2:var(--codex2);--tint:var(--codex-t);background:radial-gradient(ellipse at 50% 0%,#2a2850 0%,transparent 55%),radial-gradient(ellipse at 10% 80%,#1a2040 0%,transparent 45%),#12122a}
body[data-tab="bel"]{--accent:var(--bel);--accent2:var(--bel2);--tint:var(--bel-t);background:radial-gradient(ellipse at 60% 100%,#4a3810 0%,transparent 55%),radial-gradient(ellipse at 20% 0%,#3a2a10 0%,transparent 45%),#221a10}
body[data-tab="fate"]{--accent:var(--fate);--accent2:var(--fate2);--tint:var(--fate-t);background:radial-gradient(ellipse at 50% 40%,#3a2860 0%,transparent 55%),var(--plum)}
body[data-tab="death"]{--accent:var(--death);--accent2:var(--death2);--tint:var(--death-t);background:radial-gradient(ellipse at 50% 30%,#2a1a40 0%,transparent 60%),#120c1d}
body[data-tab="gate"]{--accent:var(--gold);--accent2:var(--gold2);--tint:var(--parch3)}

#motes{position:fixed;inset:0;pointer-events:none;z-index:0}
#stage{
  max-width:460px;margin:0 auto;min-height:100%;min-height:100dvh;
  padding:10px 10px calc(var(--dock-h) + var(--safe-b) + 12px);
  position:relative;z-index:1;
}
#app{position:relative}
h1,h2,h3,.disp{font-family:var(--display);margin:.15em 0;letter-spacing:.01em;text-wrap:balance}
h1{font-size:26px;font-weight:800;line-height:1.15}
h2{font-size:20px;font-weight:800}
h3{font-size:16px;font-weight:800;color:var(--accent2);display:flex;align-items:center;gap:8px}

/* ---- cards ---- */
.card{
  background:linear-gradient(180deg,var(--parch3),var(--parch));
  border:var(--bw) solid color-mix(in srgb,var(--accent) 55%,#8a6a3a);
  border-radius:var(--r-card);
  box-shadow:var(--shadow-card),0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent);
  padding:0;margin:10px 0;position:relative;overflow:hidden;
  animation:cardIn .26s var(--ease-out,ease-out);
}
.card-body{padding:12px 14px 14px;background:color-mix(in srgb,var(--tint) 70%,transparent)}
.card-hd{
  display:flex;align-items:center;gap:8px;min-height:42px;
  padding:8px 14px;
  background:linear-gradient(135deg,var(--accent),var(--accent2));
  color:#fffaf0;font:800 14px/1.2 var(--display);letter-spacing:.04em;text-transform:uppercase;
  box-shadow:inset 0 1px 0 #fff4,0 2px 6px #0003;
  text-shadow:0 1px 0 #0004;
}
.card-hd .ico{width:16px;height:16px;opacity:.95;filter:drop-shadow(0 1px 0 #0005)}
.card-hd .hd-sub{margin-left:auto;font:700 11px var(--body);letter-spacing:.02em;text-transform:none;opacity:.9}
.panel-life{--accent:var(--life);--accent2:var(--life2);--tint:var(--life-t)}
.panel-work{--accent:var(--work);--accent2:var(--work2);--tint:var(--work-t)}
.panel-adv{--accent:var(--adv);--accent2:var(--adv2);--tint:var(--adv-t)}
.panel-skills{--accent:var(--sk);--accent2:var(--sk2);--tint:var(--sk-t)}
.panel-bonds{--accent:var(--bond);--accent2:var(--bond2);--tint:var(--bond-t)}
.panel-realms{--accent:var(--realm);--accent2:var(--realm2);--tint:var(--realm-t)}
.panel-codex{--accent:var(--codex);--accent2:var(--codex2);--tint:var(--codex-t)}
.panel-bel{--accent:var(--bel);--accent2:var(--bel2);--tint:var(--bel-t)}
.panel-fate{--accent:var(--fate);--accent2:var(--fate2);--tint:var(--fate-t);text-align:center}
.panel-death{--accent:var(--death);--accent2:var(--death2);--tint:var(--death-t)}
.panel-gate{text-align:center}
.panel-gate .card-body{padding:28px 18px}
.panel-gate .eyebrow{letter-spacing:.14em;text-transform:uppercase;font:800 11px var(--body);color:var(--gold2);margin:0 0 6px}
.panel-fate .card-body{padding:16px 16px 18px}
.hub{--accent:var(--gold);--accent2:var(--gold2);--tint:var(--parch3)}
.hub .card-body{padding:12px 12px 10px;background:linear-gradient(180deg,var(--parch3),var(--parch))}

/* ---- identity / portrait ---- */
.hdr{display:flex;gap:12px;align-items:flex-start}
.portrait{
  width:88px;height:88px;flex:none;position:relative;
  border-radius:18px;
  background:
    radial-gradient(circle at 50% 32%,#fff8e8,#d9bf8c 70%,#b8955a);
  border:3px solid #fff8e8;
  box-shadow:
    0 0 0 3px var(--accent),
    0 0 0 5px color-mix(in srgb,var(--accent2) 70%,#000),
    0 6px 14px #0006,
    inset 0 1px 0 #fff8;
  overflow:hidden;image-rendering:auto;
}
.portrait.big{
  width:min(200px,72vw);height:min(200px,72vw);margin:8px auto 12px;
  border-radius:22px;border-width:4px;
  box-shadow:0 0 0 4px var(--accent),0 0 0 7px var(--accent2),0 10px 24px #0007,inset 0 1px 0 #fff8;
}
.portrait img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:center bottom;image-rendering:auto;-ms-interpolation-mode:bicubic}
.draft{display:none}
.portrait.monogram,.portrait .mono-fallback{
  display:flex;align-items:center;justify-content:center;
  font:800 30px/1 Georgia,"Times New Roman",serif;color:#5a3d18;letter-spacing:.04em;image-rendering:auto;
  position:absolute;inset:0;background:radial-gradient(circle at 50% 35%,#fff5dd,#d9bf8c);
}
.portrait.big .mono-fallback,.portrait.big.monogram{font-size:64px}
.name{font:800 19px/1.15 var(--display);color:var(--ink)}.sub{color:var(--muted);font-size:12.5px;line-height:1.35}
.gold-line{font-weight:800;color:var(--gold2);display:inline-flex;align-items:center;gap:4px}

/* ---- bars ---- */
.bars{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px;margin-top:10px}
.bar{font-size:12px;font-weight:700;display:grid;grid-template-columns:1fr auto;gap:2px 8px;align-items:center}
.bar .val{font-variant-numeric:tabular-nums;font-weight:800;color:#3a2e20;min-width:2.2ch;text-align:right}
.bar i,.bar .track{
  grid-column:1 / -1;display:block;width:100%;height:12px;border-radius:8px;
  background:#0000001a;overflow:hidden;box-shadow:inset 0 1px 2px #0003;
}
.bar b,.bar .fill{
  display:block;height:100%;border-radius:8px;transition:width .45s ease;
  background-image:linear-gradient(180deg,#fff6 0,#fff0 55%),linear-gradient(90deg,var(--b1,#3F6B4F),var(--b2,#2F7A48));
  box-shadow:inset 0 -2px 0 #0002;min-width:0;
}
.bar-health{--b1:#ff7a7a;--b2:#C45A5A}.bar-spirit{--b1:#ffe07a;--b2:#C9A227}
.bar-wits{--b1:#8ab0e0;--b2:#4A6A9A}.bar-presence{--b1:#c48ad0;--b2:#8A5A9A}
.bar-strain{--b1:#ff9a6a;--b2:var(--ember)}.bar-renown{--b1:#e0c06a;--b2:#B07D24}
.bar.bad .fill,.bar.bad b{--b1:#ff8a6a;--b2:var(--ember)}
.bar.magic,.bar-mana{grid-column:1 / -1;--b1:#8ec4ef;--b2:var(--mist)}
.bar.magic .val,.bar-mana .val{min-width:4.5ch}
.pills{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.pill{
  font-size:11.5px;font-weight:700;background:#fff8;border:1.5px solid color-mix(in srgb,var(--accent) 35%,#b8955a88);
  border-radius:var(--r-pill);padding:4px 10px;display:inline-flex;align-items:center;gap:5px;color:var(--ink);
}
.pill .ico{width:12px;height:12px}
.pill.bad{background:#c45a3222;border-color:var(--ember);color:#8B2E1A}

/* ---- tabs ---- */
.tabs{
  display:flex;flex-wrap:wrap;gap:6px;align-content:flex-start;
  overflow:visible;scrollbar-width:thin;
  padding:4px 2px 10px;margin:2px 0 6px;
}
.tabs::-webkit-scrollbar{height:8px}
.tabs::-webkit-scrollbar-thumb{background:#e0b14a88;border-radius:99px}
.tabs button{
  flex:none;display:inline-flex;align-items:center;gap:5px;
  border:2px solid #a9844a88;border-radius:var(--r-pill);
  padding:9px 13px;min-height:40px;font:700 12.5px var(--display);
  background:linear-gradient(180deg,#fff6e4,#e8cf98);color:var(--ink);
  box-shadow:0 2px 0 #0002;
}
.tabs button .ico{width:14px;height:14px;opacity:.8}
.tabs button.on{
  color:#fffaf0;border-color:var(--accent2);
  background:linear-gradient(135deg,var(--accent),var(--accent2));
  box-shadow:0 3px 0 color-mix(in srgb,var(--accent2) 80%,#000),inset 0 1px 0 #fff4;
  text-shadow:0 1px 0 #0003;
}
.tabs button.on .ico{opacity:1;filter:drop-shadow(0 1px 0 #0004)}
.tabs button[data-tab="life"].on{--accent:var(--life);--accent2:var(--life2)}
.tabs button[data-tab="work"].on{--accent:var(--work);--accent2:var(--work2)}
.tabs button[data-tab="adv"].on{--accent:var(--adv);--accent2:var(--adv2)}
.tabs button[data-tab="skills"].on{--accent:var(--sk);--accent2:var(--sk2)}
.tabs button[data-tab="bonds"].on{--accent:var(--bond);--accent2:var(--bond2)}
.tabs button[data-tab="realms"].on{--accent:var(--realm);--accent2:var(--realm2)}
.tabs button[data-tab="codex"].on{--accent:var(--codex);--accent2:var(--codex2)}
.tabs button[data-tab="bel"].on{--accent:var(--bel);--accent2:var(--bel2)}

/* ---- buttons ---- */
button{
  font:700 14px/1.25 var(--display);color:var(--ink);
  background:linear-gradient(180deg,#fff3d6,#e8cf98);
  border:2px solid #a9844a;border-radius:var(--r-btn);
  padding:10px 14px;min-height:44px;cursor:pointer;
  box-shadow:var(--shadow-btn),inset 0 1px 0 #fff6;
  transition:transform .08s,box-shadow .15s,filter .15s;
}
button:hover{filter:brightness(1.04)}
button:active{transform:translateY(2px);box-shadow:0 1px 0 #0003,inset 0 1px 0 #fff4}
button:disabled{opacity:.48;cursor:not-allowed;filter:none;transform:none;box-shadow:none;border-style:dashed}
button:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
button.on,button.primary{
  background:linear-gradient(180deg,#ffe7a3,#e0b14a 55%,#c9942e);
  border-color:#a9844a;font-weight:800;
  box-shadow:0 3px 0 #8a6420,inset 0 1px 0 #fff8;
}
button.primary:active{box-shadow:0 1px 0 #8a6420}
button.ghost{
  background:color-mix(in srgb,var(--tint) 80%,#fff);
  border-color:color-mix(in srgb,var(--accent) 40%,#a9844a);
}
.btn-gate{
  display:inline-flex;align-items:center;justify-content:center;margin-top:10px;
  padding:12px 20px;min-height:48px;border-radius:14px;
  background:linear-gradient(180deg,#ffe39a,#e0b14a);color:var(--ink);
  font:800 15px var(--display);text-decoration:none;border:2px solid #a9844a;
  box-shadow:0 3px 0 #8a6420;
}

/* ---- list rows ---- */
.row{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  padding:11px 10px;margin:0 -2px;
  background:#fff9;border-radius:10px;
  border-left:4px solid var(--accent);
  border-bottom:1px solid color-mix(in srgb,var(--accent) 18%,#b8955a33);
  margin-bottom:6px;
}
.row:last-child{border-bottom:0;margin-bottom:0}
.row small{color:var(--muted);font-weight:500}
.row .ico{vertical-align:-2px;margin-right:2px}
.row button{min-height:40px;padding:8px 12px;flex:none}
.row:nth-child(even){background:color-mix(in srgb,var(--tint) 55%,#fff)}

/* ---- Age dock (never covers content) ---- */
.dock{
  position:fixed;left:0;right:0;bottom:0;z-index:5;
  height:calc(var(--dock-h) + var(--safe-b));
  padding:0 12px var(--safe-b);
  display:flex;align-items:flex-start;justify-content:center;
  pointer-events:none;
  background:#120c1d;
  border-top:2px solid #e0b14a66;
  box-shadow:0 -10px 28px #000a;
}

body.has-sheet .dock{visibility:hidden;pointer-events:none}

.dock .age{
  pointer-events:auto;position:relative;left:auto;bottom:auto;transform:none;
  margin-top:10px;
  font:800 18px/1.1 var(--display);padding:0 28px;min-width:168px;height:56px;
  border-radius:var(--r-pill);border:3px solid #fff8e8;
  background:radial-gradient(circle at 50% 28%,#ffe7a3,#e0b14a 55%,#b07d24);
  color:var(--ink);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--gold) 40%,transparent),0 8px 22px #e0b14a66,0 4px 0 #8a6420;
  /* breathe disabled — constant anim blocked Playwright/clicks (Gary playtest MED) */
  animation:none;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
}
.dock .age:active{transform:scale(.96);box-shadow:0 0 0 3px color-mix(in srgb,var(--gold) 40%,transparent),0 4px 12px #e0b14a55,0 2px 0 #8a6420}
.dock .age:disabled{filter:grayscale(.55);opacity:.55;animation:none;box-shadow:0 2px 0 #0003}
@keyframes breathe{50%{box-shadow:0 0 0 3px color-mix(in srgb,var(--gold) 55%,transparent),0 10px 28px #e0b14acc,0 4px 0 #8a6420;transform:scale(1.03)}}
@keyframes cardIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---- journal ---- */
.journal{max-height:min(42vh,320px);overflow:auto;font-size:14.5px;line-height:1.4;padding:2px 2px 4px}
.journal .y{
  font:800 13.5px var(--display);color:var(--life2);margin:14px 0 4px;padding-bottom:3px;
  border-bottom:2px solid color-mix(in srgb,var(--life) 45%,#ffb3c0);
  letter-spacing:.03em;display:flex;align-items:center;gap:6px;
}
.journal .y:first-child{margin-top:2px}
.journal .y::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--life);box-shadow:0 0 0 3px color-mix(in srgb,var(--life) 30%,transparent)}
.journal p{margin:5px 0;color:var(--ink)}
.menu-lead{font-size:13px;color:var(--muted);margin:0 0 10px;line-height:1.4;font-style:normal}
.menu-lead strong{color:var(--ink);font-weight:800}
.empty{
  text-align:center;padding:22px 14px;color:var(--muted);font-size:14px;
  border:2px dashed color-mix(in srgb,var(--accent) 40%,#b8955a66);
  border-radius:12px;background:color-mix(in srgb,var(--tint) 50%,#fff);
}

/* ---- event sheet ---- */
.sheet{
  position:fixed;inset:0;background:#0a0814cc;display:flex;align-items:flex-end;justify-content:center;
  z-index:9;animation:fade .18s;padding:0 0 var(--safe-b);backdrop-filter:blur(2px);
}
.sheet .card{
  max-width:440px;width:100%;margin:0;border-radius:20px 20px 0 0;border:3px solid var(--gold);
  border-bottom:0;animation:up .22s ease-out;--accent:var(--gold);--accent2:var(--gold2);--tint:#fffdf6;
  box-shadow:0 -8px 32px #0008,0 0 0 1px #0003;
  max-height:min(86vh,720px);overflow:auto;
}
.sheet .card-hd{border-radius:0;text-transform:none;font-size:17px;letter-spacing:.01em;min-height:48px}
.sheet .card-body{padding:14px 16px 20px}
.sheet .prompt{margin:0 0 12px;font-size:15.5px;line-height:1.45;color:var(--ink)}
.choices{display:grid;gap:10px}
.choices button{
  text-align:left;line-height:1.35;padding:13px 16px;min-height:52px;border-radius:14px;
  font-size:15px;font-weight:800;border-width:2px;
  background:linear-gradient(180deg,#fff,#f4e8d0);box-shadow:0 3px 0 #8a642055;
}
.choices button:nth-child(3n+1){border-color:#3F5F9A;background:linear-gradient(180deg,#f4f7ff,#e4ecf8);box-shadow:0 3px 0 #2A4270}
.choices button:nth-child(3n+2){border-color:#6A3A9A;background:linear-gradient(180deg,#f8f2ff,#ebe0f4);box-shadow:0 3px 0 #4A2870}
.choices button:nth-child(3n){border-color:#1F6B52;background:linear-gradient(180deg,#eef8f3,#dceee6);box-shadow:0 3px 0 #134A3A}
.choices button:active{transform:translateY(2px);box-shadow:0 1px 0 #0003}
.odds{float:right;font-size:12px;font-weight:800;display:inline-flex;align-items:center;gap:3px;margin-left:8px}
.odds .ico{width:12px;height:12px}
.odds-good{color:var(--moss)}.odds-mid{color:#8a6a20}.odds-bad{color:var(--ember)}

/* Adventure outcome acknowledge (Gary Nov 5 — stay until Continue) */
.outcome-ack .outcome-verdict{
  margin:0 0 10px;font:800 18px/1.3 var(--display);letter-spacing:.01em;
  padding:8px 12px;border-radius:12px;border:2px solid transparent;text-align:center;
}
.outcome-ack .outcome-verdict.good{
  color:#1F6B52;background:#e8f6ef;border-color:#1F6B52;
}
.outcome-ack .outcome-verdict.bad{
  color:#8B2E1A;background:#fceceb;border-color:#c45a32;
}
.outcome-ack .outcome-deltas{
  list-style:none;margin:0 0 14px;padding:0;display:grid;gap:6px;
}
.outcome-ack .outcome-deltas li{
  padding:8px 12px;border-radius:10px;font-weight:700;font-size:14px;
  background:color-mix(in srgb,var(--tint) 55%,#fff);border:1.5px solid #b8955a55;
}
.outcome-ack .outcome-deltas li.good{border-color:#1F6B5288;color:#1F6B52}
.outcome-ack .outcome-deltas li.bad{border-color:#c45a3288;color:#8B2E1A}
.outcome-ack .outcome-deltas-empty{margin:0 0 12px}
.outcome-ack .actions{margin-top:4px}
.outcome-ack .actions .primary{width:100%;min-height:48px;font-size:16px}

/* Keep Continue on screen. The card is centered and the tale scrolls above the button. */
.sheet.outcome-ack{
  align-items:center;justify-content:center;
  padding:16px 16px calc(16px + var(--safe-b));overflow:auto;
}
.sheet.outcome-ack .card{
  width:min(440px,100%);
  max-height:min(90dvh,90vh,720px);
  margin:auto;
  display:flex;flex-direction:column;
  border-radius:20px;border-bottom:3px solid var(--gold);
  overflow:hidden;
}
.sheet.outcome-ack .card-hd{flex:none}
.sheet.outcome-ack .card-body{overflow:auto;flex:1 1 auto;min-height:0}
.sheet.outcome-ack .actions{
  flex:none;margin:0;padding:12px 16px 16px;
  background:#fffdf6;border-top:1px solid #e6d5a8;
}


@keyframes up{from{transform:translateY(36px);opacity:0}}@keyframes fade{from{opacity:0}}
.cold{color:#f4e6c8;text-align:center;padding:26vh 16px 40px;font:700 22px/1.45 var(--display);min-height:80vh;text-shadow:0 2px 18px #0008}
.cold p{animation:fade .5s ease}
.cold button{margin:6px}
.muted{color:var(--muted)}.good{color:var(--moss)}.bad{color:var(--ember)}
.toast{
  position:fixed;top:calc(12px + var(--safe-t));left:50%;transform:translateX(-50%);
  background:var(--plum);color:var(--parch);border:2px solid var(--gold);
  padding:10px 16px;border-radius:12px;z-index:20;animation:fade .2s;max-width:90%;
  box-shadow:0 8px 24px #0008;font-weight:700;
}

/* ---- icons + flares (kept; not the polish) ---- */
.ico{display:inline-block;width:14px;height:14px;vertical-align:-2px;line-height:0}
.ico svg{width:100%;height:100%;display:block}
/* Per-icon filled colors — not flat ink stamps (Gary Nov 5 ~1:38 PM CT) */
.ico{color:var(--ink)}
.ico-health{color:#C45A5A}.ico-spirit{color:#E0B14A}.ico-wits{color:#6E8FAF}.ico-presence{color:#B06A9A}
.ico-strain{color:#C45A32}.ico-renown{color:#E0B14A}.ico-mana{color:#6E8FAF}.ico-gold{color:#E0B14A}
.ico-odds{color:#7A5A9A}.ico-might{color:#A85A2A}.ico-grace{color:#3F8B6A}.ico-echo{color:#8A7AC8}
.ico-act{color:#5A8A6A}.ico-social{color:#B06A9A}.ico-adventure{color:#2F7A48}.ico-work{color:#A85A2A}
.ico-skill{color:#5A7AAA}.ico-bond{color:#C45A7A}.ico-realm{color:#5A82A8}.ico-codex{color:#7A5A9A}
.ico-belong{color:#B07D24}.ico-fire{color:#C45A32}.ico-water{color:#5A82A8}.ico-wind{color:#2F6B62}
.ico-earth{color:#5A7A45}.ico-light{color:#E0B14A}.ico-shadow{color:#5A5080}
/* Flare chips keep their own tint; icons inside inherit chip color (already set) */
.flare .ico{color:inherit;filter:none}
.gold-line .ico-gold{color:#E0B14A;filter:drop-shadow(0 0 2px #e0b14a66)}
.tabs button .ico{opacity:1}
.tabs button:not(.on) .ico{opacity:.88}
.card-hd .ico{color:#fff;filter:drop-shadow(0 1px 0 #0005)}
.pill .ico{opacity:1}

.flare{display:inline-flex;align-items:center;gap:3px;padding:0 5px 1px;border-radius:6px;font-weight:700;line-height:1.35;white-space:nowrap;max-width:100%}
.flare b{font-weight:800}
.flare .ico{width:12px;height:12px;flex:none}
.flare-health{color:#8B2E2E;background:#c45a5a22}.flare-spirit{color:#7A5A10;background:#e0b14a33}
.flare-wits{color:#2E4A7A;background:#6e8faf33}.flare-presence{color:#5A2E6A;background:#9b4b6b22}
.flare-strain{color:#8B2E1A;background:#c45a3228}.flare-renown{color:#7A5A10;background:#e0b14a28}
.flare-mana{color:#2E4A7A;background:#6e8faf33}.flare-gold{color:#7A5A10;background:#e0b14a33}
.flare-might{color:#6A3A18;background:#a85a2a22}.flare-grace{color:#2E5A45;background:#3f6b4f22}
.flare-echo{color:#3A3560;background:#6e8faf28}.flare-skill{color:#2E4A5A;background:#4a6a9a22}
.flare-trait{color:#5A3A7A;background:#5a3a7a22}.flare-adv{color:#2E5A45;background:#2e5a4522}
.flare-fire{color:#8B2E1A;background:#c45a3228}.flare-water{color:#2E4A7A;background:#6e8faf28}
.flare-wind{color:#2E5A5A;background:#2f6b6222}.flare-earth{color:#4A5A20;background:#5a7a4522}
.flare-light{color:#7A5A10;background:#e0b14a28}.flare-shadow{color:#3A3560;background:#2c214028}

.actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.actions button{flex:1 1 auto}

.end-pad{height:8px}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .dock .age{transform:none!important}
}
@media (max-height:640px){
  :root{--dock-h:80px}
  .dock .age{height:50px;font-size:16px;margin-top:8px}
  .portrait{width:72px;height:72px}
  .bars{gap:6px 12px}
}


/* ---- play layout shell (mobile stack; expansive PC below) ---- */
.play-layout{display:block}
.play-hub,.play-main,.play-body{min-width:0}
.play-side{display:none}
.play-hub .dock{/* mobile: still fixed full-bleed Age bar */
  position:fixed;left:0;right:0;bottom:0;z-index:5;
  height:calc(var(--dock-h) + var(--safe-b));
  padding:0 12px var(--safe-b);
  display:flex;align-items:flex-start;justify-content:center;
  pointer-events:none;
  background:#120c1df5;
  border-top:2px solid #e0b14a66;
  box-shadow:0 -10px 28px #000a;
}

/* ---- expansive PC layout (≥1024px): parchment columns fill the monitor ---- */
@media (min-width:1024px){
  html,body{height:100%}
  body:has(.play-layout){overflow:hidden}
  #bw-amb{position:fixed}
  #stage{
    width:calc(100vw - 32px);max-width:none;margin:0 auto;
    height:100dvh;box-sizing:border-box;padding:10px 16px;
    display:flex;flex-direction:column;min-height:0;
  }
  html.bw-amb #stage{padding-top:10px}
  #app{
    flex:1 1 0%;min-height:0;height:100%;
    display:flex;flex-direction:column;
  }
  .play-layout{
    flex:1 1 0%;width:100%;min-height:0;height:auto;
    display:grid;
    grid-template-columns:minmax(280px,22vw) minmax(0,1fr) minmax(250px,20vw);
    gap:12px;align-items:stretch;
  }
  /* Desktop contrast polish (Gary Nov 5): plum night columns + opaque parchment plates */
  .play-hub,.play-main,.play-side{
    display:flex;flex-direction:column;min-height:0;height:auto;align-self:stretch;
    background:linear-gradient(180deg,#221a34,#140e1f);
    border:2px solid #e0b14a44;border-radius:18px;
    box-shadow:0 12px 36px #0008,0 0 0 1px #0003;
    padding:10px;box-sizing:border-box;overflow:hidden;
  }
  .play-hub > .card.hub{
    flex:1 1 0;margin:0;min-height:0;display:flex;flex-direction:column;
    background:linear-gradient(180deg,var(--parch3),var(--parch));
    border:var(--bw) solid color-mix(in srgb,var(--accent) 55%,#8a6a3a);
    box-shadow:var(--shadow-card),0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent);
  }
  .play-hub > .card.hub .card-body{
    flex:1 1 0;overflow:auto;min-height:0;
    background:linear-gradient(180deg,var(--parch3),var(--parch));
  }
  .play-hub .dock{
    position:relative;flex:0 0 auto;height:auto;margin-top:8px;padding:0;
    background:transparent;border:0;box-shadow:none;pointer-events:auto;justify-content:stretch;
  }
  .play-hub .dock .age{width:100%;min-width:0;margin-top:0;height:50px}
  .play-main .tabs{
    position:relative;flex:0 0 auto;z-index:3;
    margin:0 0 8px;padding:8px 10px;
    background:#120c1de8;border:2px solid #e0b14a44;border-radius:14px;
    display:flex;flex-wrap:wrap;gap:6px;overflow:visible;
  }
  .play-main .tabs button{font-size:12px;padding:8px 11px;min-height:34px}
  .play-body{
    flex:1 1 0;min-height:0;overflow:auto;
    display:flex;flex-direction:column;gap:8px;
  }
  .play-body > .card{margin:0}
  .play-body > .card.panel-life{
    flex:1 1 0;min-height:0;display:flex;flex-direction:column;
    background:linear-gradient(180deg,var(--parch3),var(--parch));
    border:var(--bw) solid color-mix(in srgb,var(--accent) 55%,#8a6a3a);
    box-shadow:var(--shadow-card),0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent);
  }
  .play-body > .card.panel-life .card-hd{border-radius:12px 12px 0 0}
  .play-body > .card.panel-life .card-body{
    flex:1 1 0;min-height:0;overflow:hidden;display:flex;flex-direction:column;
    background:color-mix(in srgb,var(--life-t) 82%,var(--parch));
    border-radius:0 0 12px 12px;
  }
  .play-body .journal{flex:1 1 0;max-height:none!important;min-height:0;overflow:auto}
  .play-body > .card.panel-life .actions{flex:none;margin-top:auto;padding-top:8px}
  .play-side{--accent:var(--realm);--accent2:var(--realm2);--tint:var(--realm-t);margin:0}
  .play-side.card,.card.panel-side{
    flex:1 1 0;margin:0;min-height:0;display:flex;flex-direction:column;
    background:linear-gradient(180deg,var(--parch3),var(--parch));
    border:var(--bw) solid color-mix(in srgb,var(--accent) 55%,#8a6a3a);
    box-shadow:var(--shadow-card),0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent);
  }
  .panel-side .card-hd{border-radius:12px 12px 0 0}
  .panel-side .card-body,.play-side .card-body{
    flex:1 1 0;min-height:0;overflow:auto;padding:12px 14px;
    background:color-mix(in srgb,var(--realm-t) 78%,var(--parch));
    border-radius:0 0 12px 12px;
  }
  .play-hub .row:nth-child(even),
  .play-body .row:nth-child(even),
  .play-side .row:nth-child(even){
    background:color-mix(in srgb,var(--parch2) 42%,#fff);
  }
  .side-label{margin:10px 0 4px;font:800 10.5px var(--body);letter-spacing:.12em;text-transform:uppercase;color:var(--gold2)}
  .side-label:first-child{margin-top:0}
  .side-realm{margin:0 0 6px;line-height:1.35}
  .side-skills{display:flex;flex-direction:column;gap:4px}
  .side-row{display:flex;justify-content:space-between;gap:8px;align-items:center;padding:6px 8px;border-radius:10px;background:#fff8;border-left:3px solid var(--accent);font-size:13px}
  .side-meta{margin:12px 0 4px;font-size:12.5px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
  .side-hint{margin:8px 0 0}
  .end-pad{display:none}
  body[data-tab="fate"] #stage,
  body[data-tab="death"] #stage,
  body[data-tab="gate"] #stage,
  body[data-tab="cold"] #stage{
    max-width:760px;width:auto;height:auto;min-height:100dvh;display:block;overflow:auto;
  }
  body[data-tab="fate"],body[data-tab="death"],body[data-tab="gate"],body[data-tab="cold"]{overflow:auto}
  body[data-tab="fate"] .card,body[data-tab="death"] .card{margin-left:auto;margin-right:auto}
  .sheet{align-items:center;padding:24px}
  .sheet .card{max-width:560px;border-radius:20px;border-bottom:3px solid var(--gold)}
}

@media (min-width:1440px){
  #stage{width:calc(100vw - 40px)}
  .play-layout{grid-template-columns:minmax(320px,380px) minmax(0,1fr) minmax(280px,360px);gap:14px}
}

@media (min-width:1800px){
  #stage{width:calc(100vw - 56px);max-width:1800px}
  .play-layout{grid-template-columns:400px minmax(0,1fr) 380px;gap:16px}
}

/* ---- Boundwake illustrated scenery (Lifeline ambient craft class; fantasy realms) ---- */
#bw-amb{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.bw-amb-arts{position:absolute;inset:0}
.bw-amb-art{position:absolute;inset:0;opacity:0;transition:opacity .65s ease}
.bw-amb-art.on{opacity:1}
.bw-amb-art svg{width:100%;height:100%;display:block}
#bw-amb::after{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(140% 90% at 50% 12%,transparent 48%,#120c1d44 82%,#120c1dcc 100%),
    linear-gradient(180deg,#120c1d11 0%,transparent 22%,transparent 62%,#120c1db8 100%);
}
html.bw-amb[data-tod="night"] #bw-amb::after{
  background:
    radial-gradient(140% 90% at 50% 10%,transparent 42%,#0a081866 78%,#0a0818dd 100%),
    linear-gradient(180deg,#0a081822 0%,transparent 30%,transparent 58%,#0a0818cc 100%);
}
html.bw-amb body{background:#120c1d}
html.bw-amb #stage{position:relative;z-index:1;padding-top:clamp(72px,14vh,132px)}
html.bw-amb body[data-tab="fate"] #stage,
html.bw-amb body[data-tab="gate"] #stage,
html.bw-amb body[data-tab="death"] #stage,
html.bw-amb body[data-tab="cold"] #stage{padding-top:clamp(40px,8vh,80px)}
/* Scenery peeks in the strip above the hub identity card */
html.bw-amb .card.hub{margin-top:0}
html.bw-amb #motes{position:absolute;inset:0;width:100%;height:100%;z-index:2;pointer-events:none}
/* Soft CSS motion on SVG pieces (paused when reduced-motion) */
html.bw-amb:not([data-motion="reduced"]) .bw-cloud{animation:bw-drift 48s linear infinite}
html.bw-amb:not([data-motion="reduced"]) .bw-cloud:nth-of-type(2){animation-duration:62s;animation-direction:reverse}
html.bw-amb:not([data-motion="reduced"]) .bw-orb{animation:bw-bob 7s ease-in-out infinite;transform-origin:center;transform-box:fill-box}
html.bw-amb:not([data-motion="reduced"]) .bw-birds{animation:bw-fly 22s linear infinite}
html.bw-amb:not([data-motion="reduced"]) .bw-boat{animation:bw-bob 5.5s ease-in-out infinite;animation-delay:var(--d,0s)}
html.bw-amb:not([data-motion="reduced"]) .bw-wave{animation:bw-wave 9s ease-in-out infinite}
html.bw-amb:not([data-motion="reduced"]) .bw-grove-heart{animation:bw-grove 4.5s ease-in-out infinite;transform-origin:center;transform-box:fill-box}
@keyframes bw-drift{from{transform:translateX(-8%)}to{transform:translateX(110%)}}
@keyframes bw-bob{50%{transform:translateY(4px)}}
@keyframes bw-fly{0%{transform:translateX(0)}50%{transform:translateX(18px) translateY(-6px)}100%{transform:translateX(0)}}
@keyframes bw-wave{50%{transform:translateY(3px)}}
@keyframes bw-grove{50%{opacity:.55;transform:scale(1.12)}}
@media (prefers-reduced-motion:reduce){
  html.bw-amb .bw-cloud,html.bw-amb .bw-orb,html.bw-amb .bw-birds,html.bw-amb .bw-boat,html.bw-amb .bw-wave,html.bw-amb .bw-grove-heart{animation:none!important}
  .bw-amb-art{transition:none}
}
/* Keep cards readable over living scene — slight plate lift, no layout redo */
html.bw-amb .card{box-shadow:var(--shadow-card),0 0 0 1px #0003,0 12px 28px #0008}
html.bw-amb .dock{background:#120c1df5}
html.bw-amb .sheet{background:#0a0814d8}

/* ---- modifier info panel (affinity / trait / echo) ---- */
.info-pop{position:fixed;inset:0;z-index:80;display:flex;align-items:flex-end;justify-content:center;padding:0 10px 18px;pointer-events:auto}
.info-backdrop{position:absolute;inset:0;border:0;background:#0a0814a8;cursor:pointer}
.info-card{position:relative;z-index:1;width:100%;max-width:420px;margin:0;border-radius:18px 18px 14px 14px;border:3px solid var(--gold);
  animation:up .2s ease-out;--accent:var(--gold);--accent2:var(--gold2);box-shadow:0 -8px 40px #000a}
.info-card .card-hd{display:flex;align-items:center;gap:8px;padding-right:40px}
.info-card .card-hd .ico{width:18px;height:18px;color:#fff}
.info-x{position:absolute;right:10px;top:50%;transform:translateY(-50%);width:32px;height:32px;border:0;border-radius:10px;
  background:#0003;color:#fff;font:700 20px/1 var(--body);cursor:pointer}
.info-x:focus-visible{outline:2px solid #fff;outline-offset:2px}
.info-kind{margin:0 0 8px;font:800 11px var(--body);letter-spacing:.12em;text-transform:uppercase;color:var(--gold2)}
.info-body{margin:0 0 14px;font-size:14.5px;line-height:1.45;color:var(--ink)}
[data-info]{cursor:pointer}
[data-info]:focus-visible{outline:2px solid var(--gold);outline-offset:2px;border-radius:8px}
body.info-open .dock{pointer-events:none}
@media (prefers-reduced-motion:reduce){.info-card{animation:none}}

/* ---- bond person sheets (stats + job, never gold) ---- */
.bond-card{
  background:#fff9;border-radius:14px;border:2px solid color-mix(in srgb,var(--bond) 35%,#b8955a55);
  border-left:5px solid var(--bond);padding:10px 12px;margin:0 0 10px;
}
.bond-card .bond-hd{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:baseline;margin:0 0 6px}
.bond-card .bond-hd b{font:800 15px var(--display);color:var(--ink)}
.bond-card .bond-job{font-weight:700;color:var(--bond2)}
.bond-card .bars{margin:4px 0 8px}
.bond-card .bond-close{margin:4px 0 8px}
.bond-card .actions{margin-top:4px}
.bar-bond i b{background:linear-gradient(90deg,#c45a7a,#9a3a5c)}

/* PC fill overrides ambient stage pad (must follow #bw-amb rules) */
@media (min-width:1024px){
  html.bw-amb body:has(.play-layout) #stage{
    padding-top:10px;padding-bottom:10px;height:100dvh;
  }
  html.bw-amb body:has(.play-layout) #app{
    flex:1 1 0%;min-height:0;height:100%;display:flex;flex-direction:column;
  }
  html.bw-amb body:has(.play-layout) .play-layout{
    flex:1 1 0%;min-height:0;
  }
}

/* ---- music toggle (Boundwake beds) ---- */
.music-fab{position:fixed;top:10px;right:10px;z-index:40;pointer-events:auto}
.music-tog{
  width:40px;height:40px;border-radius:12px;border:2px solid #e0b14a88;
  background:linear-gradient(180deg,#fff6e4,#e8cf98);color:var(--ink);
  font-size:18px;line-height:1;cursor:pointer;
  box-shadow:0 4px 14px #0007;display:inline-flex;align-items:center;justify-content:center;
}
.music-tog:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.music-row{display:flex;align-items:center;gap:8px;margin-top:12px}
.music-row .music-tog{width:34px;height:34px;font-size:15px}
@media (min-width:1024px){
  .music-fab{top:14px;right:18px}
}

/* ---- party / Passive Relationship Growth ---- */
.party-tag{
  display:inline-flex;align-items:center;gap:4px;
  font:800 10px var(--body);letter-spacing:.06em;text-transform:uppercase;
  padding:3px 8px;border-radius:999px;background:#2f7a4822;color:#2a5a28;border:1px solid #2f7a4888;
}
.party-tag.soft{background:#5a82a822;color:#2e4a7a;border-color:#5a82a888}
.bond-card.in-party{border-color:color-mix(in srgb,var(--life) 55%,#b8955a55);box-shadow:0 0 0 1px #2f7a4833}
.party-list{margin:8px 0 12px}

.party-tag.clash{background:#c45a3222;color:#8B2E1A;border-color:#c45a3288}
.bond-card.temper-clash{border-color:#c45a3255}
.bond-temper{font-weight:700;color:var(--bond2);font-size:12.5px}
.temper-note{margin:4px 0 8px;font-size:12.5px}

/* ---- Realms visit list + tall-menu scroll ---- */
.realms-stack{display:flex;flex-direction:column;gap:10px;padding-bottom:12px}
.row-loc{align-items:flex-start}
.row-loc button{flex:none;margin-top:2px}
.muted{color:var(--muted);font-size:12px}
/* Mobile / all: stage scrolls when content taller than viewport */
#stage{overflow-y:auto;-webkit-overflow-scrolling:touch}
@media (min-width:1024px){
  /* Desktop: column plate clips; play-body is the scrollport for tall tabs (Realms, Skills, Bonds) */
  .play-main{overflow:hidden}
  .play-body{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
  body[data-tab="realms"] .play-body,
  body[data-tab="skills"] .play-body,
  body[data-tab="bonds"] .play-body,
  body[data-tab="codex"] .play-body,
  body[data-tab="bel"] .play-body,
  body[data-tab="work"] .play-body{overflow-y:auto}
}

/* Skill lock reasons (Gary Nov 5 growth) */
.lock-why{color:var(--amber,#d4a574);font-style:italic;opacity:.92}
.row-skill button:disabled{opacity:.55}

/* Tournaments */
.panel-adv .row button[data-a="tourney"], .panel-adv .row button[data-a="tinvite"]{min-width:4.5rem}

/* phone density (Gary Nov 5 — layout fill, Boundwake parchment) */
@media (max-width: 1023px) {
  .play-layout{display:block;min-height:100dvh}
  .play-hub{padding:8px 10px 4px}
  .play-main{display:flex;flex-direction:column;min-height:0}
  .play-body{flex:1 1 auto;overflow:auto;-webkit-overflow-scrolling:touch;padding:8px 10px 88px;display:flex;flex-direction:column;gap:8px}
  .play-body .card{margin:0;flex:0 0 auto}
  .play-body .card-body{padding:10px 12px}
  .play-body .card-hd{padding:8px 12px;font-size:13px;letter-spacing:.04em}
  .row{padding:8px 0;gap:8px}
  .row-skill{align-items:flex-start}
  .tabs{gap:6px;padding:6px 8px 8px;flex-wrap:wrap}
  .tabs button{padding:8px 10px;font-size:12px}
  .dock{padding:8px 12px calc(10px + env(safe-area-inset-bottom,0))}
  .realms-stack{gap:8px;padding-bottom:8px}
  .lock-why{display:block;margin-top:2px;font-size:11px}
  .party-list,.bond-card{margin-top:6px}
}

/* Dense skills accordion (Boundwake parchment — layout density, not Bit Tensei chrome) */
.skill-acc{border:2px solid var(--line,#c9b896);border-radius:12px;background:var(--paper,#f4ead2);margin:0 0 8px;overflow:hidden}
.skill-acc-hd{list-style:none;cursor:pointer;padding:10px 12px;font-weight:700;font-size:13px;letter-spacing:.03em;display:flex;align-items:center;gap:8px;background:linear-gradient(180deg,#efe2c0,#e6d5a8)}
.skill-acc-hd::-webkit-details-marker{display:none}
.skill-acc-hd small{margin-left:auto;font-weight:600;opacity:.7}
.skill-acc-body{padding:4px 8px 8px}
.row-skill.dense{display:flex;align-items:flex-start;gap:8px;padding:8px 4px;border-bottom:1px solid #00000012}
.row-skill.dense:last-child{border-bottom:0}
.row-skill .skill-main{display:flex;gap:8px;flex:1;min-width:0}
.row-skill .skill-meta{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.row-skill .skill-meta b{font-size:14px;line-height:1.2}
.row-skill .skill-side{display:flex;flex-direction:column;align-items:flex-end;gap:4px;min-width:72px}
.row-skill .skill-val{font-weight:700;font-variant-numeric:tabular-nums}
.skill-bar{display:block;height:5px;border-radius:99px;background:#00000018;overflow:hidden;margin-top:3px}
.skill-bar > b{display:block;height:100%;background:linear-gradient(90deg,#8a6a3a,#c4a35a)}
.row-skill.locked .skill-bar > b{background:#8a7a60}
.tip-train{margin:4px 0 0;font-size:12px}
.life-shortcuts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin:0 0 8px}
.life-shortcuts button{display:flex;align-items:center;justify-content:center;gap:4px;padding:10px 6px;font-size:12px;border-radius:10px;border:2px solid var(--line,#c9b896);background:var(--paper,#f4ead2);font-weight:700}
@media (max-width:1023px){
  .life-shortcuts{grid-template-columns:repeat(3,minmax(0,1fr));padding:0 2px}
  .row-skill .skill-meta b{font-size:13px}
  .skill-acc-hd{padding:9px 10px}
  .play-body{padding-left:8px;padding-right:8px}
  .play-body > .card,.play-body > .skill-acc{width:100%}
}

/* skill PNG inline sizes (Gary Nov 5 ~2:27 PM CT — Top Skills were giant on PC) */
.ico-sk{position:relative;width:28px;height:28px;flex:0 0 28px;overflow:hidden;border-radius:6px;vertical-align:middle}
.ico-sk svg{width:100%;height:100%;display:block}
.ico-sk .sk-png{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;display:none;pointer-events:none}
.ico-sk.has-png .sk-png{display:block}
.ico-sk.has-png svg{visibility:hidden}
.side-skills .ico-sk,.side-row .ico-sk{width:24px;height:24px;flex-basis:24px}
.row-skill .ico-sk{width:28px;height:28px;flex-basis:28px}
@media (max-width:1023px){
  /* Gary Nov 5 ~3:15 PM CT: phone stays regular size */
  .row-skill .ico-sk{width:32px;height:32px;flex-basis:32px}
}
@media (min-width:1024px){
  .row-skill .ico-sk,.side-skills .ico-sk{width:28px;height:28px;flex-basis:28px}
  .side-skills .ico-sk{width:24px;height:24px;flex-basis:24px}
}
.side-row{max-height:none}
.side-row .ico-sk{margin-right:6px}

/* Work tab accordions (Gary Nov 5 ~2:33 PM CT — openings were burying Workshops/Court/Mentors) */
.work-acc{border:2px solid var(--line,#c9b896);border-radius:12px;background:var(--paper,#f4ead2);margin:0 0 8px;overflow:hidden}
.work-acc-hd{list-style:none;cursor:pointer;padding:10px 12px;font-weight:700;font-size:13px;letter-spacing:.03em;display:flex;align-items:center;gap:8px;background:linear-gradient(180deg,#efe2c0,#e6d5a8)}
.work-acc-hd::-webkit-details-marker{display:none}
.work-acc-hd small{margin-left:auto;font-weight:600;opacity:.75}
.work-acc-body{padding:8px 10px 10px}
.work-acc-body h3{margin:10px 0 6px;font-size:13px}
.work-acc-body h3:first-child{margin-top:0}
@media (max-width:1023px){
  .play-body > .work-acc{width:100%}
  .work-acc-hd{padding:9px 10px}
}

/* toast vs tabs (playtest LOW) */
.toast{top:calc(8px + var(--safe-t));z-index:12;pointer-events:none}
.tabs{position:relative;z-index:5}
.dock{position:relative;z-index:6}

/* Tournament team / guild hall art (Character Models + Animator hooks) */
.bw-mark{width:28px;height:28px;object-fit:contain;vertical-align:middle;margin-right:6px;image-rendering:pixelated}
.bw-mark.lg{width:40px;height:40px}
.roster-bust{width:40px;height:40px;border-radius:8px;object-fit:cover;image-rendering:pixelated;border:1.5px solid var(--line,#c9b896);background:#efe2c0;flex:0 0 auto}
.row.roster-row{align-items:center;gap:8px}
.row.roster-row>div{display:flex;align-items:center;gap:8px;flex:1;min-width:0}
.bw-banner{margin:0 0 8px}
.bw-renown-chip{display:inline-flex;align-items:center;gap:6px;position:relative}

/* playtest polish nov5 */
.toast{top:calc(10px + var(--safe-t));bottom:auto;z-index:40;pointer-events:none!important;max-width:min(92vw,420px)}
.sheet{z-index:30}
.sheet[data-sheet]{pointer-events:auto}
.sheet .choices button[disabled],.choices button[aria-disabled="true"]{pointer-events:none;opacity:.45;cursor:not-allowed}
.dock .age{animation:none!important;transform:none}
.dock .age:active{transform:scale(.97)}
body[data-tab="work"] .play-body > .card.panel-work{overflow:visible}
body[data-tab="work"] .play-body > .card.panel-work .card-hd{white-space:normal;line-height:1.25;min-height:auto;padding:10px 12px}
body[data-tab="work"] .work-acc{margin-bottom:10px}
body[data-tab="work"] .work-acc-body .row{flex-wrap:wrap;gap:6px}
.lock-why{color:var(--ember,#C45A32);font-weight:700}
.pill{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:999px;background:#00000012;margin:2px;font-size:12px;font-weight:700}

/* work tab crush fix nov5 replay */
/* skills+work crush fix nov5 pass2 */
@media (min-width:1024px) {
  body[data-tab="work"] .play-body,
  body[data-tab="skills"] .play-body {
    display:flex; flex-direction:column; gap:10px;
    align-items:stretch;
  }
  body[data-tab="work"] .play-body > *,
  body[data-tab="skills"] .play-body > * {
    flex:0 0 auto !important;
    flex-shrink:0 !important;
    min-height:auto !important;
    max-height:none !important;
    height:auto !important;
    overflow:visible !important;
  }
  body[data-tab="work"] .work-acc,
  body[data-tab="skills"] .skill-acc {
    overflow:visible !important;
  }
  body[data-tab="work"] .work-acc[open] > .work-acc-body,
  body[data-tab="skills"] .skill-acc[open] > .skill-acc-body {
    display:block !important;
    overflow:visible !important;
    min-height:auto !important;
    padding:12px 12px 14px;
  }
  body[data-tab="work"] .work-acc-body .row,
  body[data-tab="work"] .work-acc-body .actions,
  body[data-tab="skills"] .skill-acc-body .row-skill,
  body[data-tab="skills"] .skill-acc-body .actions {
    min-height:36px;
  }
  body[data-tab="work"] .bw-banner,
  body[data-tab="skills"] .bw-banner {
    max-height:48px; overflow:hidden; flex:0 0 auto !important;
  }
  /* Never let intro/mana/path cards eat the column */
  body[data-tab="skills"] .play-body > .card {
    flex:0 0 auto !important;
  }
}
body[data-tab="work"] .work-acc-body,
body[data-tab="skills"] .skill-acc-body {
  overflow:visible;
}
/* ALL TALL TABS scroll fix (Gary Nov 5 ~6:52 PM CT)
   Belongings / Work / Skills / Realms / Bonds / Adventure / Legacy / Codex
   were clipped: .play-body flex column + flex-shrink on tall .card while
   .card{overflow:hidden} — play-body never overflowed. Life journal keeps
   its own scroll; other Life cards already flex:0 0 auto nearby. */
@media (min-width:1024px) {
  body[data-tab="bel"] .play-body,
  body[data-tab="work"] .play-body,
  body[data-tab="skills"] .play-body,
  body[data-tab="realms"] .play-body,
  body[data-tab="bonds"] .play-body,
  body[data-tab="adv"] .play-body,
  body[data-tab="legacy"] .play-body,
  body[data-tab="codex"] .play-body {
    display:flex; flex-direction:column; gap:10px;
    align-items:stretch;
    overflow-y:auto !important; overflow-x:hidden;
    overscroll-behavior:contain; -webkit-overflow-scrolling:touch;
  }
  body[data-tab="bel"] .play-body > *,
  body[data-tab="work"] .play-body > *,
  body[data-tab="skills"] .play-body > *,
  body[data-tab="realms"] .play-body > *,
  body[data-tab="bonds"] .play-body > *,
  body[data-tab="adv"] .play-body > *,
  body[data-tab="legacy"] .play-body > *,
  body[data-tab="codex"] .play-body > * {
    flex:0 0 auto !important;
    flex-shrink:0 !important;
    min-height:auto !important;
    max-height:none !important;
    height:auto !important;
    overflow:visible !important;
  }
  body[data-tab="bel"] .play-body > .card .card-body,
  body[data-tab="work"] .play-body > .card .card-body,
  body[data-tab="skills"] .play-body > .card .card-body,
  body[data-tab="realms"] .play-body > .card .card-body,
  body[data-tab="bonds"] .play-body > .card .card-body,
  body[data-tab="adv"] .play-body > .card .card-body,
  body[data-tab="legacy"] .play-body > .card .card-body,
  body[data-tab="codex"] .play-body > .card .card-body {
    flex:0 0 auto !important;
    min-height:auto !important;
    height:auto !important;
    max-height:none !important;
    overflow:visible !important;
  }
  body[data-tab="realms"] .realms-stack {
    flex:0 0 auto !important;
    overflow:visible !important;
    max-height:none !important;
    height:auto !important;
  }
  body[data-tab="work"] .work-acc,
  body[data-tab="skills"] .skill-acc,
  body[data-tab="bel"] .work-acc,
  body[data-tab="legacy"] .legacy-acc {
    flex:0 0 auto !important;
    max-height:none !important;
    height:auto !important;
    overflow:visible !important;
  }
  body[data-tab="work"] .work-acc[open] > .work-acc-body,
  body[data-tab="skills"] .skill-acc[open] > .skill-acc-body,
  body[data-tab="bel"] .work-acc[open] > .work-acc-body,
  body[data-tab="legacy"] .legacy-acc[open] > .legacy-acc-body {
    display:block !important;
    overflow:visible !important;
    min-height:auto !important;
  }
}
@media (max-width:1023px) {
  body[data-tab="bel"] .play-body,
  body[data-tab="work"] .play-body,
  body[data-tab="skills"] .play-body,
  body[data-tab="realms"] .play-body,
  body[data-tab="bonds"] .play-body,
  body[data-tab="adv"] .play-body,
  body[data-tab="legacy"] .play-body,
  body[data-tab="codex"] .play-body {
    overflow:auto; -webkit-overflow-scrolling:touch;
  }
  body[data-tab="bel"] .play-body > .card,
  body[data-tab="work"] .play-body > .card,
  body[data-tab="skills"] .play-body > .card,
  body[data-tab="realms"] .play-body > .card,
  body[data-tab="bonds"] .play-body > .card,
  body[data-tab="adv"] .play-body > .card,
  body[data-tab="legacy"] .play-body > .card,
  body[data-tab="codex"] .play-body > .card,
  body[data-tab="bel"] .play-body > .card .card-body,
  body[data-tab="work"] .play-body > .card .card-body,
  body[data-tab="skills"] .play-body > .card .card-body,
  body[data-tab="realms"] .play-body > .card .card-body,
  body[data-tab="bonds"] .play-body > .card .card-body,
  body[data-tab="adv"] .play-body > .card .card-body,
  body[data-tab="legacy"] .play-body > .card .card-body,
  body[data-tab="codex"] .play-body > .card .card-body,
  body[data-tab="realms"] .realms-stack {
    flex:0 0 auto !important;
    overflow:visible !important;
    max-height:none !important;
    height:auto !important;
  }
}

/* life journal scroll fix nov5 soccer v3 */
/* Autopilot + other Life cards: prevent flex collapse of card-body (blank Autopilot bug) */
@media (min-width:1024px) {
  body[data-tab="life"] .play-body > .card.panel-life:not(.journal-host) {
    flex: 0 0 auto !important;
    min-height: auto !important;
    height: auto !important;
    max-height: none !important;
  }
  body[data-tab="life"] .play-body > .card.panel-life:not(.journal-host) .card-body {
    flex: 0 0 auto !important;
    min-height: auto !important;
    height: auto !important;
    overflow: visible !important;
  }
  body[data-tab="life"] .play-body > .card.auto-host .card-body {
    padding: 12px 14px 14px;
    color: var(--ink, #241C14);
    background: linear-gradient(180deg, #FBF4E4, #EEF5E6);
  }
  body[data-tab="life"] .play-body > .card.auto-host .auto-blurb {
    color: var(--muted, #5E4C38);
    margin: 0 0 10px;
  }
  body[data-tab="life"] .play-body > .card.auto-host .auto-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
  }
  body[data-tab="life"] .play-body > .card.auto-host .auto-actions button {
    min-height: 44px;
    font-weight: 800;
  }
}

/* life journal scroll fix nov5 soccer v3 */
@media (min-width:1024px) {
  body[data-tab="life"] .play-body {
    display:flex; flex-direction:column; gap:10px; align-items:stretch;
  }
  body[data-tab="life"] .play-body > .card.panel-life {
    flex:0 0 auto !important;
    min-height:auto !important;
    max-height:none !important;
    height:auto !important;
  }
  body[data-tab="life"] .play-body > .card.journal-host,
  body[data-tab="life"] .play-body > .card.panel-life.journal-host {
    flex:1 1 auto !important;
    min-height:min(48vh, 440px) !important;
    display:flex !important;
    flex-direction:column !important;
    overflow:hidden !important;
  }
  body[data-tab="life"] .journal-host .card-body {
    flex:1 1 auto !important;
    min-height:0 !important;
    display:flex !important;
    flex-direction:column !important;
    overflow:hidden !important;
  }
  body[data-tab="life"] .journal {
    flex:1 1 auto !important;
    max-height:none !important;
    min-height:220px !important;
    overflow:auto !important;
  }
}
.journal { max-height:min(52vh, 420px); }

/* autopilot skip dock nov5 */
.dock-auto{display:flex;flex-direction:column;align-items:stretch;gap:6px;width:100%}
.dock-auto .age{width:100%}
.auto-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:4px;pointer-events:auto}
.auto-label{font-size:11px;font-weight:700;letter-spacing:.04em;opacity:.8;margin-right:2px}
.auto-skip,.auto-stop{font-size:11px;padding:6px 8px;min-height:28px;border-radius:8px;border:1.5px solid #e0b14a66;background:#120c1de8;color:#f4ead2;font-weight:700}
.auto-stop{border-color:#c45a32;color:#f4c4b0}
.auto-actions{flex-wrap:wrap}
@media (min-width:1024px){
  .play-hub .dock-auto{margin-top:6px}
}

/* story modal hit + market nov5 */
.sheet{z-index:60!important}
.sheet .choices{gap:12px;padding-bottom:8px}
.sheet .choices button{
  min-height:60px!important;padding:16px 18px!important;
  position:relative;z-index:2;touch-action:manipulation;
}
.sheet .choices button .flare,
.sheet .choices button .odds,
.sheet .choices button *{pointer-events:none!important}
.sheet .card{pointer-events:auto}
.mkt-board .row{align-items:flex-start}
.mkt-good{color:var(--moss,#2F6B4F);font-weight:800}
.mkt-ok{color:#4a7a40;font-weight:700}
.mkt-fair{color:var(--muted);font-weight:700}
.mkt-hi{color:#8a6a20;font-weight:700}
.mkt-bad{color:var(--ember,#C45A32);font-weight:800}


/* Legacy hub (Life Goals + Achievements) — Boundwake parchment */
.panel-legacy{--accent:var(--gold);--accent2:var(--gold2);--tint:var(--parch3)}
.legacy-row{display:flex;align-items:flex-start;gap:10px;min-height:56px}
.legacy-ico{flex:none;width:28px;display:flex;justify-content:center;padding-top:2px}
.legacy-main{flex:1 1 auto;min-width:0}
.legacy-act{flex:none;display:flex;align-items:center}
.legacy-bar{height:8px;border-radius:99px;background:#0002;overflow:hidden;margin:6px 0 2px;border:1px solid #b8955a55}
.legacy-bar > span{display:block;height:100%;background:linear-gradient(90deg,#e0b14a,#3F7A3A);border-radius:99px}
.legacy-claimed{opacity:.78}
.legacy-mods .row{justify-content:space-between}
.codex-locked{opacity:.7;font-style:italic}
@media (min-width:1024px){
  body[data-tab="legacy"] .play-body > .card.panel-legacy,
  body[data-tab="legacy"] .play-body > details.legacy-acc.panel-legacy{
    flex:0 0 auto!important;height:auto!important;min-height:auto!important;
  }
  body[data-tab="legacy"] .play-body > .card.panel-legacy .card-body,
  body[data-tab="legacy"] .play-body > details.legacy-acc.panel-legacy .legacy-acc-body,
  body[data-tab="legacy"] .play-body > details.legacy-acc.panel-legacy .card-body{
    flex:0 0 auto!important;min-height:auto!important;overflow:visible!important;
  }
}

/* Legacy hub collapsible Life Goals / Achievements (Gary Nov 5 ~6:27 PM CT) */
.legacy-acc{margin:0 0 10px;overflow:hidden}
.legacy-acc-hd{
  list-style:none;cursor:pointer;user-select:none;
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
}
.legacy-acc-hd::-webkit-details-marker{display:none}
.legacy-acc-hd::marker{content:''}
.legacy-acc-chev{
  flex:none;width:1.1em;height:1.1em;margin-right:2px;
  display:inline-block;position:relative;
}
.legacy-acc-chev::before{
  content:'';position:absolute;inset:0;
  border-right:2.5px solid currentColor;border-bottom:2.5px solid currentColor;
  width:0.42em;height:0.42em;margin:auto;left:0;right:0;top:0;bottom:0;
  transform:rotate(-45deg); /* points right when collapsed */
  transition:transform .15s ease;
  opacity:.9;
}
.legacy-acc[open] > .legacy-acc-hd .legacy-acc-chev::before{
  transform:rotate(45deg); /* points down when open */
}
.legacy-acc-hd .hd-sub{margin-left:auto}
.legacy-acc-hd .legacy-ready-count{color:var(--gold2,#B07D24);font-weight:800}
.legacy-acc-body{padding:10px 12px 12px}
.legacy-acc:not([open]) > .legacy-acc-hd{
  /* collapsed header still reads as a full card strip */
  border-radius:inherit;
}
body[data-tab="legacy"] .play-body > details.legacy-acc.panel-legacy{
  display:block;width:100%;
}

/* Legacy row info (hover tip + click → info panel) */
.legacy-row[data-legacy-detail]{position:relative;cursor:pointer}
.legacy-row[data-legacy-detail]:focus-visible{outline:2px solid var(--gold,#E0B14A);outline-offset:2px}
.legacy-info-affordance{font-size:12px;opacity:.75;font-weight:700;margin-left:4px}
.legacy-hover-tip{
  display:none;position:absolute;left:12px;right:12px;bottom:calc(100% + 6px);z-index:20;
  padding:10px 12px;border-radius:12px;
  background:linear-gradient(180deg,var(--parch3,#FBF4E4),var(--parch,#F7EBD2));
  border:2px solid color-mix(in srgb, var(--gold,#E0B14A) 55%, #8a6a3a);
  box-shadow:0 8px 22px #00000055, 0 0 0 1px #0002;
  color:var(--ink,#241C14);font:13px/1.4 var(--body);pointer-events:none;
}
.legacy-hover-tip b{display:inline}
.legacy-hover-tip > div{margin-top:4px}
@media (hover:hover) and (pointer:fine){
  .legacy-row:hover > .legacy-hover-tip.legacy-hover-tip-ready{display:block}
}
@media (prefers-reduced-motion:reduce){
  .legacy-hover-tip{transition:none}
}


/* Passes store (ads + gamepasses scaffolding Nov 5 2026) */
.pass-list{display:flex;flex-direction:column;gap:0}
.pass-row{align-items:flex-start}
.pass-row button{min-width:7.5rem}
.pass-owned,.pass-alpha{display:inline-block;padding:6px 10px;border-radius:8px;font-size:12px;font-weight:700;background:color-mix(in srgb,var(--tint) 70%,#fff);color:var(--ink)}
.pass-alpha{background:color-mix(in srgb,#c9a227 28%,#fff)}
.panel-passes{--accent:var(--echo,#6b4a8a);--accent2:#4a3068;--tint:color-mix(in srgb,#6b4a8a 12%,#fff)}
body[data-tab="passes"] .play-body > *{flex:0 0 auto}
body[data-tab="passes"] .card.panel-passes{overflow:visible}

/* Mid-life choices reuse existing buttons; larger targets only on the phone menu. */
.life-choices { margin-top: 10px; }
html.is-phone .life-choices { display: flex; flex-wrap: wrap; gap: 10px; }
html.is-phone .life-choices button { min-height: 48px; min-width: 120px; flex: 1; }
