/* ───────── in-game UI layer ─────────
   Units: 1rem = 10 stage px in landscape (html font-size set from the stage scale in JS).
   Portrait: #ui covers the viewport; the dialogue box docks below the stage (--stage-h). */
#ui {
  position: absolute;
  left: var(--sx, 0px); top: var(--sy, 0px);
  width: var(--sw, 100%); height: var(--sh, 100%);
  font-family: var(--sans);
  --box-ink: #1f2328;
  --plate: #16181c;
  --accent: #e8a23a;
}
body.portrait #ui { left: 0; top: 0; width: 100%; height: 100%; }
#ui.ui-hidden > :not(#inv-ui):not(#card):not(#center-text) { opacity: 0 !important; pointer-events: none !important; transition: opacity .25s; }

/* ───────── dialogue box (ADV) ───────── */
#adv {
  position: absolute;
  left: 50%; bottom: 3rem;
  width: min(164rem, calc(100% - 4rem));
  min-height: 24.6rem;
  margin-left: calc(min(164rem, calc(100% - 4rem)) / -2);
  padding: 4.2rem 6.4rem 4.6rem;
  background: rgba(255, 255, 255, calc(var(--win-op) + .18));
  border-radius: 1.8rem;
  box-shadow: 0 1.6rem 4.8rem rgba(4, 10, 18, .32), 0 .3rem .9rem rgba(4, 10, 18, .16), inset 0 0 0 1px rgba(20, 24, 30, .06);
  color: var(--box-ink);
  opacity: 0; transform: translateY(1.6rem);
  transition: opacity .32s var(--ease), transform .4s var(--ease);
  cursor: pointer;
}
#adv.on { opacity: 1; transform: none; }
#namebox {
  position: absolute; left: 50%; top: 0;
  transform: translate(-50%, -52%);
  min-width: 19rem; height: 5.4rem;
  padding: 0 4.2rem;
  display: flex; align-items: center; justify-content: center; gap: 1.1rem;
  background: var(--plate);
  color: #fff;
  font: 600 2.5rem/1 var(--sans);
  letter-spacing: .08em;
  clip-path: polygon(1.6rem 0, calc(100% - 1.6rem) 0, 100% 50%, calc(100% - 1.6rem) 100%, 1.6rem 100%, 0 50%);
  filter: drop-shadow(0 .3rem .6rem rgba(0, 0, 0, .25));
  transition: opacity .2s;
}
#namebox .hole { width: .9rem; height: .9rem; transform: rotate(45deg); background: var(--spk); flex: none; border-radius: .1rem; }
#adv.narr #namebox { opacity: 0; }
#adv-text {
  position: relative;
  font-family: var(--serif);
  font-size: calc(3.4rem * var(--fs, 1));
  line-height: 1.72;
  letter-spacing: .01em;
  word-break: keep-all;
  overflow-wrap: anywhere;
  white-space: pre-wrap;
  min-height: calc(3.4rem * var(--fs, 1) * 1.72 * 3);
  text-align: center;
  display: flex; flex-direction: column; justify-content: center;
}
#adv.narr #adv-text { text-align: left; justify-content: flex-start; }
#adv-text > .line { display: block; }

/* rich text */
.c { opacity: 0; transition: opacity .16s linear; }
.c.on { opacity: 1; }
.c.em { color: #b9690d; font-weight: 700; }
.dark-text .c.em, #nvl .c.em, #center-text .c.em { color: var(--sun); }
.c.big { font-size: 1.42em; line-height: 1; }
.c.small { font-size: .8em; opacity: 0; }
.c.small.on { opacity: .72; }
.c.shake.on { display: inline-block; animation: chshake .26s steps(2) infinite; animation-delay: var(--d, 0s); }
@keyframes chshake { 0% { transform: translate(0, 0); } 25% { transform: translate(.04em, -.05em); } 50% { transform: translate(-.05em, .03em); } 75% { transform: translate(.03em, .05em); } }
.c.glitch { position: relative; }
.c.glitch.on { color: #35505f; text-shadow: .06em 0 rgba(255, 40, 90, .55), -.06em 0 rgba(40, 200, 255, .6); }
#nvl .c.glitch.on, #center-text .c.glitch.on { color: #cfefff; }
.c.glitch.flick { opacity: .25; }
body.reduced .c.shake.on { animation: none; }

#next-ind {
  position: absolute; right: 3.2rem; bottom: 4.4rem;
  width: 0; height: 0;
  border-left: .9rem solid transparent; border-right: .9rem solid transparent; border-top: 1.2rem solid #1a1c20;
  opacity: 0; transition: opacity .2s;
}
#next-ind svg { display: none; }
#adv.done #next-ind { opacity: 1; animation: bob 1.1s var(--ease-io) infinite; }
@keyframes bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(.6rem); } }

/* quick menu */
#quick {
  position: absolute;
  right: calc((100% - min(164rem, calc(100% - 4rem))) / 2 + 2.6rem);
  bottom: 4.1rem;
  display: flex; gap: .2rem;
  transition: opacity .3s var(--ease);
  font: 500 1.55rem/1 var(--sans);
  letter-spacing: .02em;
}
#quick button {
  padding: .7rem .9rem;
  color: #8b929b;
  border-radius: .6rem;
  transition: color .15s, background .15s;
}
#quick button:hover { color: var(--box-ink); background: rgba(20, 24, 30, .06); }
#quick button.active { color: #b9690d; }
#quick button.active::before { content: ''; display: inline-block; width: .6rem; height: .6rem; margin-right: .5rem; border-radius: 50%; background: var(--accent); vertical-align: .15em; }
#quick button[disabled] { opacity: .35; pointer-events: none; }
#adv:not(.on) + #quick { opacity: 0; pointer-events: none; }
body.portrait #adv:not(.on) + #quick { opacity: 1; pointer-events: auto; }

/* mode badge (AUTO / SKIP) */
#mode-badge {
  position: absolute; right: 3rem; top: 3rem;
  padding: .8rem 1.8rem;
  background: var(--plate); color: #fff;
  font: 700 1.6rem/1 var(--sans); letter-spacing: .3em;
  clip-path: polygon(1rem 0, 100% 0, calc(100% - 1rem) 100%, 0 100%);
}
#mode-badge::after { content: ''; display: inline-block; width: .8rem; height: .8rem; margin-left: .8rem; background: var(--accent); border-radius: 50%; animation: pulse 1s infinite; vertical-align: .1em; }
@keyframes pulse { 50% { opacity: .2; } }

/* ───────── NVL (dark glass) ───────── */
#nvl {
  position: absolute; inset: 0;
  background: rgba(6, 12, 20, .62);
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
  padding: 10rem 20rem 12rem;
  opacity: 0; transition: opacity .5s var(--ease);
  cursor: pointer;
}
#nvl.on { opacity: 1; }
#nvl-page { height: 100%; overflow: hidden; }
#nvl-page p {
  margin: 0 0 1.4em;
  font: calc(3.4rem * var(--fs, 1))/1.85 var(--serif);
  color: #f3f1ec;
  word-break: keep-all; overflow-wrap: anywhere; white-space: pre-wrap;
  text-shadow: 0 .2rem 1rem rgba(0, 0, 0, .5);
  transition: opacity .5s;
}
#nvl-page p.old { opacity: .58; }
#nvl-page .nvl-name { display: inline-block; margin-right: 1.2rem; font: 600 .66em/1 var(--sans); letter-spacing: .1em; color: var(--nc, var(--sun)); vertical-align: .15em; }
#nvl .nvl-next { position: absolute; right: 8rem; bottom: 6rem; width: 0; height: 0; border-left: .9rem solid transparent; border-right: .9rem solid transparent; border-top: 1.2rem solid #fff; opacity: 0; }
#nvl.done .nvl-next { opacity: .9; animation: bob 1.1s var(--ease-io) infinite; }

/* ───────── choices ───────── */
#choices {
  position: absolute; inset: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 2.2rem;
  padding-bottom: 6rem;
  background: radial-gradient(70% 70% at 50% 50%, rgba(4, 10, 18, .42), rgba(4, 10, 18, .2));
  opacity: 0; transition: opacity .35s var(--ease);
}
#choices.on { opacity: 1; }
.choice {
  position: relative;
  width: min(96rem, calc(100% - 8rem));
  min-height: 8.6rem;
  padding: 2rem 7rem 2rem 9rem;
  background: rgba(255, 255, 255, .97);
  color: var(--box-ink);
  border: .2rem solid #1c1e22;
  border-radius: 1.6rem;
  box-shadow: 0 1rem 2.6rem rgba(0, 0, 0, .28);
  font: calc(3rem * var(--fs, 1))/1.45 var(--serif);
  text-align: left;
  word-break: keep-all;
  transform: translateY(1.4rem); opacity: 0;
  transition: transform .45s var(--ease), opacity .45s var(--ease), box-shadow .2s, border-color .2s, background .2s;
}
#choices.on .choice { transform: none; opacity: 1; }
#choices.on .choice:nth-child(2) { transition-delay: .06s; }
#choices.on .choice:nth-child(3) { transition-delay: .12s; }
#choices.on .choice:nth-child(4) { transition-delay: .18s; }
.choice::before { /* repair-tag eyelet */
  content: ''; position: absolute; left: 3.4rem; top: 50%;
  width: 2.2rem; height: 2.2rem; margin-top: -1.1rem;
  border-radius: 50%;
  border: .35rem solid #1c1e22;
  background: #eef0f2;
  transition: border-color .2s, background .2s;
}
.choice::after { /* little index number on the right */
  content: attr(data-n); position: absolute; right: 3rem; top: 50%; transform: translateY(-50%);
  font: 600 1.6rem/1 var(--sans); color: #a0a6ae; letter-spacing: .1em;
}
#choices.on .choice:not(.locked):hover, #choices.on .choice:not(.locked):focus-visible, #choices.on .choice.kbd {
  transform: translateY(-.4rem);
  border-color: #b9690d;
  box-shadow: 0 1.4rem 3.2rem rgba(0, 0, 0, .32), 0 0 0 .5rem rgba(255, 207, 122, .35);
  outline: none;
}
#choices.on .choice:not(.locked):hover::before, #choices.on .choice.kbd::before { border-color: #b9690d; background: var(--sun); }
.choice.locked { color: #8d939b; background: rgba(236, 238, 240, .94); border-color: #8d939b; cursor: not-allowed; }
.choice.locked::before { border-color: #a5abb2; }
.choice .lock { display: inline-block; width: 1.6rem; height: 1.3rem; margin-right: 1.2rem; border-radius: .25rem; background: #8d939b; position: relative; vertical-align: -.05em; }
.choice .lock::before { content: ''; position: absolute; left: .3rem; top: -1rem; width: 1rem; height: 1.1rem; border: .3rem solid #8d939b; border-bottom: 0; border-radius: .8rem .8rem 0 0; }
.choice.picked { border-color: #b9690d; background: #fff8ea; }

/* ───────── date caption ───────── */
#date-cap {
  position: absolute; left: 4.6rem; top: 4rem;
  display: flex; flex-direction: column; gap: .7rem;
  padding: 1.5rem 3.2rem 1.6rem 2.6rem;
  background: rgba(18, 20, 24, .84);
  color: #fff;
  border-left: .5rem solid var(--sun);
  border-radius: 0 1rem 1rem 0;
  box-shadow: 0 .8rem 2.4rem rgba(0, 0, 0, .25);
  opacity: 0; transform: translateX(-3rem);
  transition: opacity .6s var(--ease), transform .7s var(--ease);
  pointer-events: none;
}
#date-cap.on { opacity: 1; transform: none; }
#date-cap .d1 { font: 600 1.9rem/1.1 var(--sans); letter-spacing: .08em; color: #e9edf2; }
#date-cap .d2 { font: 700 2.9rem/1.2 var(--serif); letter-spacing: .04em; }

/* ───────── toasts ───────── */
#toasts { position: absolute; right: 3.6rem; top: 3.6rem; display: flex; flex-direction: column; gap: 1rem; align-items: flex-end; pointer-events: none; z-index: 5; }
.toast {
  display: flex; align-items: center; gap: 1.2rem;
  padding: 1.3rem 2.2rem 1.3rem 1.6rem;
  background: rgba(255, 255, 255, .96);
  color: var(--box-ink);
  border-radius: 1.2rem;
  box-shadow: 0 .8rem 2.4rem rgba(0, 0, 0, .28);
  font: 500 1.9rem/1.2 var(--sans);
  opacity: 0; transform: translateY(-1.2rem);
  transition: opacity .4s var(--ease), transform .5s var(--ease);
}
.toast.on { opacity: 1; transform: none; }
.toast b { font-weight: 800; letter-spacing: .14em; color: #b9690d; font-size: 1.5rem; }
.toast .glass { width: 2.6rem; height: 2.6rem; border-radius: .7rem .3rem .9rem .4rem; background: linear-gradient(135deg, #bff0ff, var(--tide) 60%, #2c8fb8); box-shadow: inset 0 0 0 .2rem rgba(255, 255, 255, .5); transform: rotate(12deg); }
.toast.warn .glass { background: linear-gradient(135deg, #ffd2c6, var(--danger)); }
.toast.save .glass { background: linear-gradient(135deg, #fff1cf, var(--sun)); }

/* ───────── center text ───────── */
#center-text {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  padding: 0 14rem;
  background: rgba(0, 0, 0, .7);
  opacity: 0; transition: opacity .9s var(--ease);
  cursor: pointer;
}
#center-text.on { opacity: 1; }
#center-text .ct {
  text-wrap: balance;
  font: 700 calc(6.2rem * var(--fs, 1))/1.6 var(--serif);
  color: #fbf7ee;
  letter-spacing: .06em;
  text-align: center;
  word-break: keep-all;
  text-shadow: 0 0 3rem rgba(255, 207, 122, .25), 0 .2rem 1rem rgba(0, 0, 0, .6);
}
#center-text .ct .c { opacity: 0; filter: blur(.8rem); transform: translateY(.6rem); display: inline-block; white-space: pre; transition: opacity 1.1s var(--ease), filter 1.1s var(--ease), transform 1.1s var(--ease); }
#center-text .ct .c.on { opacity: 1; filter: none; transform: none; }

/* ───────── chapter / ending cards ───────── */
#card {
  position: absolute; inset: 0; z-index: 20;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  background: radial-gradient(90% 80% at 50% 45%, #13283f 0%, #0b1622 55%, #060d16 100%);
  color: var(--paper);
  opacity: 0; transition: opacity .9s var(--ease);
  cursor: pointer;
  overflow: hidden;
}
#card.on { opacity: 1; }
#card .glow { position: absolute; left: 50%; top: 50%; width: 140rem; height: 60rem; margin: -30rem 0 0 -70rem; background: radial-gradient(closest-side, rgba(111, 211, 255, .12), transparent); pointer-events: none; }
#card .lbl { font: 600 2rem/1 var(--sans); letter-spacing: .62em; margin-right: -.62em; color: var(--tide); opacity: 0; transform: translateY(1rem); transition: all 1s var(--ease) .2s; }
#card .ttl { word-break: keep-all; text-wrap: balance; margin: 3.4rem 0 0; font: 700 8rem/1.2 var(--serif); letter-spacing: .14em; margin-right: -.14em; text-align: center; opacity: 0; transform: translateY(1.4rem); transition: all 1.2s var(--ease) .45s; text-shadow: 0 0 4rem rgba(111, 211, 255, .18); }
#card .tide { width: 72rem; height: 4rem; margin: 3.4rem 0 2.6rem; overflow: visible; }
#card .tide path { fill: none; stroke: url(#tideGrad); stroke-width: 2.4; stroke-linecap: round; stroke-dasharray: 1400; stroke-dashoffset: 1400; transition: stroke-dashoffset 2.2s var(--ease-io) .7s; }
#card .tide circle { fill: var(--sun); opacity: 0; transition: opacity .6s 2.4s; }
#card .sub { font: 400 2.6rem/1.4 var(--serif); color: var(--muted); letter-spacing: .1em; opacity: 0; transition: opacity 1.2s var(--ease) 1.3s; text-align: center; }
#card .en { font: italic 500 2.6rem/1.4 var(--latin); color: var(--muted); letter-spacing: .06em; }
#card.on .lbl, #card.on .ttl { opacity: 1; transform: none; }
#card.on .tide path { stroke-dashoffset: 0; }
#card.on .tide circle, #card.on .sub { opacity: 1; }
#card.ending { background: radial-gradient(90% 80% at 50% 45%, #1a2a3a 0%, #0b1622 60%, #04080d 100%); }
#card.ending .ttl { font-family: var(--latin); font-style: italic; font-weight: 500; font-size: 9.6rem; letter-spacing: .1em; }
#card.ending .sub { font-size: 3.4rem; color: var(--paper); }
#card.ending .rec { margin-top: 5rem; font: 500 1.7rem/1 var(--sans); letter-spacing: .3em; color: var(--muted); opacity: 0; transition: opacity 1s 2.6s; }
#card.ending.on .rec { opacity: .8; }
#card.bad { background: radial-gradient(90% 80% at 50% 45%, #2a1416 0%, #12090b 60%, #050304 100%); }
#card.bad .lbl { color: var(--danger); }
#card .btns { display: flex; gap: 2rem; margin-top: 6rem; opacity: 0; transition: opacity .8s 1.2s; }
#card.on .btns { opacity: 1; }
#card .btns button { padding: 1.8rem 4rem; min-width: 30rem; border-radius: 1.2rem; background: #fff; color: #1f2328; font: 600 2.2rem/1 var(--sans); border: .2rem solid #1c1e22; box-shadow: 0 .8rem 2rem rgba(0, 0, 0, .35); transition: transform .2s var(--ease), box-shadow .2s; }
#card .btns button:hover { transform: translateY(-.3rem); box-shadow: 0 1.2rem 2.6rem rgba(0, 0, 0, .4), 0 0 0 .4rem rgba(255, 207, 122, .4); }

/* ───────── investigation ───────── */
#inv-ui { position: absolute; inset: 0; cursor: none; touch-action: none; z-index: 3; }
#inv-ui .inv-top {
  position: absolute; left: 50%; top: 3.4rem; transform: translateX(-50%);
  display: flex; align-items: center; gap: 2rem;
  padding: 1.3rem 2.8rem;
  background: rgba(255, 255, 255, .95); color: var(--box-ink);
  border-radius: 99rem; box-shadow: 0 .8rem 2.4rem rgba(0, 0, 0, .3);
  font: 600 2.1rem/1.2 var(--sans);
  white-space: nowrap; max-width: calc(100% - 6rem);
}
#inv-ui .inv-top .tag { font: 800 1.5rem/1 var(--sans); letter-spacing: .25em; color: #fff; background: var(--plate); padding: .7rem 1.2rem; border-radius: .6rem; }
#inv-ui .inv-top .prompt { overflow: hidden; text-overflow: ellipsis; }
#inv-ui .dots { display: flex; gap: .8rem; }
#inv-ui .dots i { width: 1.5rem; height: 1.5rem; border-radius: .4rem .2rem .5rem .2rem; background: #d8dde2; transform: rotate(14deg); transition: background .3s, box-shadow .3s; }
#inv-ui .dots i.on { background: linear-gradient(135deg, #c8f4ff, var(--tide)); box-shadow: 0 0 1rem rgba(111, 211, 255, .9); }
#inv-ui .reticle { position: absolute; left: 0; top: 0; width: 11rem; height: 11rem; margin: -5.5rem 0 0 -5.5rem; pointer-events: none; will-change: transform; }
#inv-ui .reticle svg { width: 100%; height: 100%; overflow: visible; }
#inv-ui .reticle .ring { fill: none; stroke: rgba(255, 255, 255, .9); stroke-width: 2.4; }
#inv-ui .reticle .ticks { stroke: rgba(255, 255, 255, .85); stroke-width: 2.4; transform-origin: 55px 55px; animation: spin 6s linear infinite; }
#inv-ui .reticle .arc { fill: none; stroke: var(--tide); stroke-width: 4; stroke-linecap: round; transform-origin: 55px 55px; transform: rotate(-90deg); transition: stroke .2s; }
#inv-ui .reticle .dot { fill: #fff; }
#inv-ui .reticle.hot .ring, #inv-ui .reticle.hot .ticks { stroke: var(--sun); }
#inv-ui .reticle.hot .arc { stroke: var(--sun); }
#inv-ui .reticle { filter: drop-shadow(0 0 .5rem rgba(0, 0, 0, .6)); }
@keyframes spin { to { transform: rotate(360deg); } }
#inv-ui .gauge {
  position: absolute; right: 3.4rem; bottom: 3.4rem;
  width: 38rem; padding: 2rem 2.2rem 1.4rem;
  background: linear-gradient(180deg, #f4f1ea, #e6e1d6);
  border-radius: 1.6rem;
  border: .3rem solid #1c1e22;
  box-shadow: 0 1.4rem 3.4rem rgba(0, 0, 0, .45), inset 0 .2rem 0 rgba(255, 255, 255, .7);
  color: #1c1e22;
}
#inv-ui .gauge svg { display: block; width: 100%; height: auto; overflow: visible; }
#inv-ui .gauge .brand { display: flex; justify-content: space-between; align-items: baseline; margin-top: .6rem; font: 800 1.6rem/1 var(--sans); letter-spacing: .18em; }
#inv-ui .gauge .brand small { font: 600 1.3rem/1 var(--sans); letter-spacing: .08em; color: #6b6f75; }
#inv-ui .gauge .led { display: inline-block; width: 1.1rem; height: 1.1rem; border-radius: 50%; background: #5a5f66; margin-right: .8rem; vertical-align: 0; transition: background .1s, box-shadow .1s; }
#inv-ui .gauge .led.on { background: #ff6b3d; box-shadow: 0 0 1rem #ff6b3d; }
#inv-ui .needle { transform-origin: 160px 150px; }
#inv-ui .hint {
  position: absolute; width: 22rem; height: 22rem; margin: -11rem 0 0 -11rem; border-radius: 50%;
  background: radial-gradient(closest-side, rgba(111, 211, 255, .5), rgba(111, 211, 255, .12) 60%, transparent);
  animation: hint 1.8s ease-in-out infinite; pointer-events: none; mix-blend-mode: screen;
}
@keyframes hint { 0%, 100% { transform: scale(.7); opacity: .35; } 50% { transform: scale(1.1); opacity: 1; } }
#inv-ui .found-mark { position: absolute; width: 8rem; height: 8rem; margin: -4rem 0 0 -4rem; pointer-events: none; }
#inv-ui .found-mark::before { content: ''; position: absolute; inset: 1.6rem; border: .3rem solid var(--tide); border-radius: 50%; box-shadow: 0 0 1.6rem var(--tide), inset 0 0 1rem rgba(111, 211, 255, .6); }
#inv-ui .found-mark::after { content: '✓'; position: absolute; inset: 0; display: grid; place-items: center; color: #fff; font: 800 2.6rem/1 var(--sans); text-shadow: 0 0 1rem var(--tide); }
#inv-ui .burst { position: absolute; width: 40rem; height: 40rem; margin: -20rem 0 0 -20rem; pointer-events: none; }
#inv-ui .burst i { position: absolute; left: 50%; top: 50%; width: 1rem; height: 1rem; margin: -.5rem; background: #e9fbff; box-shadow: 0 0 1.2rem var(--tide); border-radius: .2rem; animation: shard 1s var(--ease) forwards; }
#inv-ui .burst b { position: absolute; inset: 0; border-radius: 50%; border: .4rem solid rgba(180, 240, 255, .9); animation: ring 1s var(--ease) forwards; }
@keyframes shard { from { transform: translate(0, 0) rotate(0); opacity: 1; } to { transform: translate(var(--tx), var(--ty)) rotate(220deg); opacity: 0; } }
@keyframes ring { from { transform: scale(.1); opacity: 1; } to { transform: scale(1); opacity: 0; } }
#inv-ui .miss { position: absolute; padding: .8rem 1.4rem; margin: -6rem 0 0 -5rem; background: rgba(18, 20, 24, .85); color: #fff; font: 600 1.7rem/1 var(--sans); border-radius: .8rem; animation: miss 1s forwards; pointer-events: none; white-space: nowrap; }
@keyframes miss { 0% { opacity: 0; transform: translateY(.6rem); } 15% { opacity: 1; transform: none; } 70% { opacity: 1; } 100% { opacity: 0; } }
#inv-ui .inv-skip { position: absolute; left: 3.4rem; bottom: 3.4rem; padding: 1.4rem 2.6rem; background: #fff; color: var(--box-ink); border: .2rem solid #1c1e22; border-radius: 99rem; font: 600 1.9rem/1 var(--sans); cursor: pointer; box-shadow: 0 .8rem 2rem rgba(0, 0, 0, .3); animation: fadein .6s; }
#inv-ui .inv-skip:hover { box-shadow: 0 .8rem 2rem rgba(0, 0, 0, .3), 0 0 0 .4rem rgba(255, 207, 122, .45); }
@keyframes fadein { from { opacity: 0; } }
#inv-ui.touch { cursor: default; }
#inv-ui .inv-help { position: absolute; left: 50%; top: 10.6rem; transform: translateX(-50%); padding: 1rem 2rem; background: rgba(18, 20, 24, .78); color: #fff; font: 500 1.6rem/1.3 var(--sans); border-radius: 99rem; white-space: nowrap; pointer-events: none; transition: opacity .6s; }
#ui.investigating #adv { z-index: 4; cursor: default; pointer-events: none; left: 3.4rem; margin-left: 0; width: calc(100% - 3.4rem - 38rem - 3.4rem - 2.4rem); min-height: 0; padding: 3rem 4.4rem 3.2rem; transition: opacity .25s, transform .4s var(--ease); }
#ui.investigating #adv-text { min-height: calc(3.4rem * var(--fs, 1) * 1.72 * 2); text-align: left; justify-content: flex-start; }
#ui.investigating #adv.on.peek { opacity: .16; }
#ui.investigating #next-ind { display: none; }
#ui.investigating #quick, #ui.investigating #date-cap { display: none; }

/* ───────── compact landscape phones: bigger text, slimmer chrome ───────── */
body.compact #adv { bottom: 1.6rem; padding: 3.6rem 4.4rem 4.2rem; min-height: 0; width: calc(100% - 3rem); margin-left: calc((100% - 3rem) / -2); }
body.compact #adv-text { min-height: calc(3.4rem * var(--fs, 1) * 1.6 * 3); line-height: 1.6; }
body.compact #quick { font-size: 2.6rem; right: 3.1rem; bottom: 1.8rem; }
body.compact #quick button { padding: .9rem 1.2rem; }
body.compact #quick [data-q="load"], body.compact #quick [data-q="qload"], body.compact #quick [data-q="config"] { display: none; }
body.compact #adv { padding-bottom: 5.4rem; }
body.compact #next-ind { bottom: 5.4rem; right: 2.4rem; }
body.compact #date-cap { left: 2.4rem; top: 2rem; }
body.compact #nvl { padding: 6rem 7rem 7rem; }
body.compact .choice { min-height: 7rem; padding: 1.4rem 5rem 1.4rem 7.4rem; }
body.compact .choice::before { left: 2.4rem; }
body.compact #choices { gap: 1.4rem; }
body.compact #inv-ui .gauge { width: 30rem; right: 2rem; bottom: 2rem; }
body.compact #ui.investigating #adv { left: 2rem; width: calc(100% - 2rem - 30rem - 2rem - 2rem); padding: 2.4rem 3rem; }

/* ───────── portrait: stage on top, dialogue docked below ───────── */
body.portrait #adv {
  left: 1.6rem; right: 1.6rem; width: auto; margin: 0;
  /* centred in the dock between the stage and the quick bar */
  top: calc(var(--stage-h) + 1.8rem + (100% - var(--stage-h) - 15rem - var(--safe-b)) / 2);
  bottom: auto;
  min-height: 0;
  padding: 5.4rem 4.2rem 5.6rem;
  border-radius: 2.6rem;
  transform: translateY(-50%);
  transition: opacity .3s var(--ease);
}
body.portrait #adv.on { transform: translateY(-50%); }
body.portrait #adv-text { font-size: calc(3.5rem * var(--fs, 1)); line-height: 1.85; min-height: calc(3.5rem * var(--fs, 1) * 1.85 * 4); }
body.portrait #namebox { height: 6.4rem; font-size: 2.9rem; min-width: 22rem; }
body.portrait #next-ind { right: 3.6rem; bottom: 2.6rem; }
body.portrait #quick {
  position: fixed; left: 0; right: 0; bottom: 0;
  justify-content: space-around;
  padding: 1rem 1.4rem calc(1.2rem + var(--safe-b));
  background: linear-gradient(180deg, transparent, rgba(6, 10, 16, .55) 40%);
  font-size: 2.6rem;
}
body.portrait #quick button { color: rgba(255, 255, 255, .78); padding: 1.6rem 1.2rem; }
body.portrait #quick button:hover { color: #fff; background: rgba(255, 255, 255, .08); }
body.portrait #quick button.active { color: var(--sun); }
body.portrait #quick [data-q="load"], body.portrait #quick [data-q="qload"], body.portrait #quick [data-q="config"] { display: none; }
body.portrait #date-cap { left: 0; top: calc(var(--safe-t) + 1.4rem); padding: 1rem 2.4rem 1.1rem 1.8rem; border-left-width: .6rem; }
body.portrait #date-cap .d1 { font-size: 2.1rem; }
body.portrait #date-cap .d2 { font-size: 2.9rem; }
body.portrait #toasts { right: 1.6rem; top: calc(var(--safe-t) + 1.6rem); }
body.portrait .toast { font-size: 2.5rem; }
body.portrait .toast b { font-size: 2rem; }
body.portrait #mode-badge { top: calc(var(--stage-h) + 1.6rem); right: 1.6rem; font-size: 2rem; }
body.portrait #choices {
  top: var(--stage-h); padding: 3rem 0 calc(12rem + var(--safe-b));
  background: linear-gradient(180deg, rgba(6, 10, 16, .78), rgba(6, 10, 16, .9));
  gap: 2.4rem;
}
body.portrait .choice { width: calc(100% - 4.8rem); font-size: calc(3.3rem * var(--fs, 1)); padding: 2.6rem 4rem 2.6rem 8rem; border-radius: 2rem; }
body.portrait .choice::before { left: 2.8rem; }
body.portrait .choice::after { display: none; }
body.portrait #nvl { padding: calc(var(--safe-t) + 8rem) 5rem calc(14rem + var(--safe-b)); }
body.portrait #nvl-page p { font-size: calc(3.5rem * var(--fs, 1)); line-height: 1.9; }
body.portrait #nvl .nvl-next { right: 5rem; bottom: calc(10rem + var(--safe-b)); }
body.portrait #center-text { padding: 0 5rem; }
body.portrait #center-text .ct { font-size: calc(4.6rem * var(--fs, 1)); }
body.portrait #card .ttl { font-size: 6.4rem; letter-spacing: .08em; padding: 0 3rem; }
body.portrait #card .lbl { font-size: 2.4rem; }
body.portrait #card .sub, body.portrait #card .en { font-size: 3rem; padding: 0 4rem; }
body.portrait #card .tide { width: 60rem; max-width: 86%; }
body.portrait #card .btns { flex-direction: column; }
body.portrait #card .btns button { font-size: 3rem; padding: 2.6rem 5rem; }
body.portrait #inv-ui .inv-top { top: calc(var(--safe-t) + 1.6rem); font-size: 2.6rem; max-width: calc(100% - 3rem); }
body.portrait #inv-ui .gauge { right: 50%; transform: translateX(50%); bottom: calc(var(--safe-b) + 2.4rem); width: 52rem; }
body.portrait #inv-ui .inv-skip { left: 2rem; bottom: auto; top: calc(var(--safe-t) + 10rem); font-size: 2.6rem; }
body.portrait #inv-ui .inv-help { bottom: auto; top: calc(var(--safe-t) + 10rem); font-size: 2.4rem; }
body.portrait #ui.investigating #adv { left: 1.6rem; right: 1.6rem; width: auto; top: calc(var(--stage-h) + 2.4rem); bottom: auto; padding: 3rem 3.6rem; transform: none; }
body.portrait #ui.investigating #adv-text { min-height: calc(3.5rem * var(--fs, 1) * 1.85 * 2); }
body.portrait #ui:has(#choices.on) #adv { opacity: 0; }
