/* 自架字體子集（scripts/build-font-subsets.mjs 產出；來源與授權見 src/assets/fonts/LICENSES.md）。
   weight 宣告為全距，避免瀏覽器對單字重字體做合成粗體；缺字時依 stack 落回源泉圓體→系統黑體，
   正常內容經逐字覆蓋驗證不觸發 fallback。 */
@font-face {
  font-family: "Reggae One";
  src: url("assets/fonts/reggae-one-burst.woff2") format("woff2");
  font-weight: 100 1000;
  font-display: swap;
}

@font-face {
  font-family: "Zhaohua Typewriter";
  src: url("assets/fonts/zhaohua-typewriter-title.woff2?v=2f869d2e8e43") format("woff2");
  font-weight: 100 1000;
  font-display: swap;
}

@font-face {
  font-family: "GenSenRounded2 TW";
  src: url("assets/fonts/gensen-rounded-tw-m.woff2") format("woff2");
  font-weight: 100 599;
  font-display: swap;
}

@font-face {
  font-family: "GenSenRounded2 TW";
  src: url("assets/fonts/gensen-rounded-tw-b.woff2") format("woff2");
  font-weight: 600 1000;
  font-display: swap;
}

:root {
  color-scheme: dark;
  --hearing-navy: #112b45;
  --hearing-navy-deep: #081827;
  --hearing-navy-soft: #183b59;
  --chamber-mahogany: #693934;
  --chamber-mahogany-deep: #3e211f;
  --trace-teal: #1e9b91;
  --trace-teal-bright: #69ded1;
  --evidence-amber: #f1b43c;
  --evidence-amber-soft: #ffd878;
  --question-coral: #e6524b;
  --question-coral-deep: #ad2f2a;
  --record-paper: #f4f1e8;
  /* Fine, irregular pulp grain; unlike ruled lines this has no visible grid. */
  --paper-grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.72' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Cpath fill='%236e512f' opacity='.13' filter='url(%23p)' d='M0 0h180v180H0z'/%3E%3C/svg%3E");
  --record-paper-muted: #d9d1c0;
  --record-ink: #192b3c;
  --muted-blue: #a9c0ce;
  --line-blue: #31536d;
  --focus: #f1b43c;
  --font-display: "GenSenRounded2 TW", "Microsoft JhengHei UI", "PingFang TC", "Noto Sans TC", system-ui, sans-serif;
  --font-body: "GenSenRounded2 TW", "Microsoft JhengHei UI", "PingFang TC", "Noto Sans TC", system-ui, sans-serif;
  --font-title: "Zhaohua Typewriter", "GenSenRounded2 TW", "Microsoft JhengHei UI", "PingFang TC", "Noto Sans TC", system-ui, sans-serif;
  --font-burst: "Reggae One", "GenSenRounded2 TW", "Microsoft JhengHei UI", "PingFang TC", "Noto Sans TC", system-ui, sans-serif;
  --font-data: "Cascadia Mono", "SFMono-Regular", Consolas, "GenSenRounded2 TW", "Microsoft JhengHei UI", monospace;
  --shadow-stage: 0 24px 64px rgb(0 0 0 / 0.42);
  --shadow-paper: 9px 12px 26px rgb(4 14 22 / 0.24);
}

*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  min-width: 320px;
  min-height: 100%;
  background: var(--hearing-navy-deep);
  scroll-behavior: smooth;
}

body {
  min-width: 320px;
  min-height: 100%;
  margin: 0;
  overflow-x: hidden;
  background: var(--hearing-navy-deep);
  color: var(--record-paper);
  font-family: var(--font-body);
  line-height: 1.65;
  text-rendering: optimizeLegibility;
}

button,
input,
select,
textarea {
  font: inherit;
}

/* The Floor Rule（DESIGN.md typography）：`small` 的 UA 預設是 0.8333em，相對縮小後
   在 1rem 父層只剩 13.33px，掉出 0.84rem（13.44px）樓地板。用 max() 保留「比父層小一階」
   的語意，同時把樓地板架起來——只會變大不會變小，比逐條補字級不漏。 */
small {
  font-size: max(0.84rem, 0.8333em);
}

button,
a {
  -webkit-tap-highlight-color: transparent;
}

button {
  border: 0;
}

button:not(:disabled),
a {
  cursor: pointer;
}

button:focus-visible,
a:focus-visible,
[tabindex="-1"]:focus-visible,
summary:focus-visible {
  outline: 3px solid var(--focus);
  outline-offset: 4px;
}

button:disabled {
  cursor: not-allowed;
  filter: grayscale(0.55);
  opacity: 0.5;
}

a {
  color: inherit;
}

img,
svg {
  display: block;
  max-width: 100%;
}

h1,
h2,
h3,
p,
blockquote,
dl,
dd,
ol,
ul {
  margin-top: 0;
}

h1,
h2,
h3 {
  font-family: var(--font-display);
  font-weight: 900;
  line-height: 1.18;
  letter-spacing: -0.035em;
  text-wrap: balance;
}

p,
li,
dd {
  text-wrap: pretty;
}

.sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

.skip-link {
  position: fixed;
  top: 12px;
  left: 12px;
  z-index: 9999;
  padding: 10px 14px;
  background: var(--record-paper);
  color: var(--record-ink);
  font-weight: 800;
  transform: translateY(-180%);
}

.skip-link:focus {
  transform: none;
}

.game-shell,
#app {
  min-height: 100dvh;
}

#app {
  outline: none;
}

.screen {
  width: min(100%, 1600px);
  min-height: 100dvh;
  margin-inline: auto;
  overflow: clip;
  background: var(--hearing-navy-deep);
  box-shadow: var(--shadow-stage);
}

.noscript-message {
  width: min(90%, 720px);
  margin: 40px auto;
  padding: 24px;
  background: var(--record-paper);
  color: var(--record-ink);
}

/* Shared controls */

.action-button {
  min-height: 52px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  padding: 13px 24px;
  border: 2px solid rgb(255 255 255 / 0.28);
  color: var(--record-paper);
  font-weight: 900;
  line-height: 1.25;
  text-decoration: none;
  box-shadow: 4px 5px 0 rgb(0 0 0 / 0.35);
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
  transition:
    transform 150ms cubic-bezier(0.2, 0.8, 0.2, 1),
    box-shadow 150ms ease,
    background-color 150ms ease;
}

.action-button > span:last-child {
  font-size: 1.4em;
  line-height: 1;
}

.action-button--amber {
  border-color: var(--evidence-amber-soft);
  background: var(--evidence-amber);
  color: #172536;
}

.action-button--teal {
  border-color: var(--trace-teal-bright);
  background: var(--trace-teal);
  color: #071d25;
}

.action-button--navy {
  border-color: var(--line-blue);
  background: var(--hearing-navy);
  color: var(--record-paper);
}

.text-button {
  min-height: 44px;
  padding: 8px 12px;
  background: transparent;
  color: var(--muted-blue);
  font-weight: 800;
  text-decoration: underline;
  text-underline-offset: 5px;
}

.text-button--light {
  color: var(--record-paper);
}

.utility-button {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 8px 12px;
  border: 1px solid var(--line-blue);
  background: var(--hearing-navy);
  color: var(--record-paper);
  font-size: 0.84rem;
  font-weight: 800;
  white-space: nowrap;
}

.utility-button > span[aria-hidden="true"] {
  color: var(--evidence-amber);
  font-family: var(--font-data);
  font-size: 1rem;
}

.utility-button--stage {
  border-color: rgb(244 241 232 / 0.55);
  background: rgb(8 24 39 / 0.88);
}

.header-back {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 6px 10px;
  background: transparent;
  color: var(--muted-blue);
  font-weight: 800;
}

.header-back > span:first-child {
  color: var(--evidence-amber);
  font-size: 1.7rem;
}

.dialog-close {
  width: 48px;
  min-width: 48px;
  height: 48px;
  border: 2px solid currentColor;
  background: transparent;
  color: inherit;
  font-size: 1.75rem;
  line-height: 1;
}

.case-strip {
  width: fit-content;
  max-width: 100%;
  display: flex;
  align-items: stretch;
  border: 2px solid var(--trace-teal);
  background: var(--hearing-navy);
  box-shadow: 4px 4px 0 rgb(0 0 0 / 0.3);
  clip-path: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px);
}

.case-strip__number,
.case-strip__title {
  display: inline-flex;
  align-items: center;
  padding: 7px 13px;
  font-weight: 900;
  line-height: 1.25;
}

.case-strip__number {
  background: var(--trace-teal);
  color: var(--hearing-navy-deep);
  font-family: var(--font-data);
  font-size: 0.84rem;
  letter-spacing: 0.08em;
}

.case-strip__title {
  min-width: 0;
  color: var(--record-paper);
}

.case-strip--compact .case-strip__number,
.case-strip--compact .case-strip__title {
  padding: 6px 10px;
  font-size: 0.84rem;
}

.screen-header {
  min-height: 78px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 14px clamp(18px, 3vw, 46px);
  border-bottom: 2px solid var(--evidence-amber);
  background:
    linear-gradient(90deg, var(--chamber-mahogany-deep), transparent 42%),
    var(--hearing-navy);
}

.screen-header__primary,
.screen-header__utilities {
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 18px;
}

.screen-header h1 {
  margin: 0;
  font-size: clamp(1.2rem, 2.2vw, 1.8rem);
}

.screen-header__utilities {
  justify-content: flex-end;
}

.screen-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 18px clamp(18px, 3vw, 46px);
  border-top: 1px solid var(--line-blue);
  background: var(--hearing-navy);
}

.screen-footer p {
  max-width: 70ch;
  margin: 0;
  color: var(--muted-blue);
  font-size: 0.94rem;
}

.page-feedback {
  color: var(--evidence-amber-soft) !important;
  font-weight: 800;
}

.title-safety {
  max-width: 52ch;
  margin: 18px 0 0;
  color: var(--muted-blue);
  font-size: 0.84rem;
}

/* Season-one intake dossier — the title screen belongs to the same archive as the cases. */

.aa-title {
  position: relative;
  min-height: 100svh;
  isolation: isolate;
  overflow: hidden;
  background: var(--hearing-navy-deep);
}

.aa-title::after {
  position: fixed;
  z-index: 90;
  inset: 0;
  pointer-events: none;
  background: var(--hearing-navy-deep);
  content: "";
  opacity: 0;
  transition: opacity 150ms ease-in;
}

.aa-title.is-leaving::after {
  opacity: 1;
}

.aa-title__scene,
.aa-title__scene::after,
.aa-title__shade {
  position: absolute;
  inset: 0;
}

.aa-title__scene {
  z-index: -2;
  overflow: hidden;
}

.aa-title__scene-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center center;
  filter: brightness(0.82) saturate(0.94);
  transform: scale(1.005);
  animation: aa-title-room-drift 32s ease-in-out infinite alternate;
}

.aa-title__shade {
  background:
    linear-gradient(90deg, rgb(8 24 39 / 0.98) 0%, rgb(8 24 39 / 0.9) 36%, rgb(8 24 39 / 0.18) 68%, rgb(8 24 39 / 0.35) 100%),
    linear-gradient(0deg, rgb(8 24 39 / 0.94), transparent 34%, rgb(8 24 39 / 0.46));
}

.aa-title__scene::after {
  background:
    linear-gradient(90deg, transparent 49.8%, rgb(105 222 209 / 0.09) 50%, transparent 50.2%),
    repeating-linear-gradient(0deg, transparent 0 39px, rgb(105 222 209 / 0.025) 40px);
  content: "";
}

@keyframes aa-title-room-drift {
  from { transform: scale(1.01); }
  to { transform: scale(1.06); }
}

.aa-title__utility {
  position: absolute;
  z-index: 4;
  top: max(18px, env(safe-area-inset-top));
  right: max(18px, env(safe-area-inset-right));
}

.aa-title__layout {
  position: relative;
  z-index: 2;
  display: grid;
  width: min(100% - 64px, 720px);
  min-height: 100svh;
  align-content: center;
  gap: 28px;
  margin-left: clamp(32px, 6vw, 108px);
  padding: 64px 0 92px;
}

.aa-title__lockup {
  display: grid;
  justify-items: start;
  text-align: left;
}

.aa-title__kicker {
  display: inline-block;
  margin-bottom: 11px;
  padding: 4px 10px;
  border-left: 4px solid var(--trace-teal-bright);
  background: rgb(8 24 39 / 0.74);
  color: var(--trace-teal-bright);
  font-family: var(--font-data);
  font-size: clamp(0.84rem, 1.4vw, 0.94rem);
  font-weight: 900;
  letter-spacing: 0.1em;
}

.aa-title__identity {
  position: relative;
  display: grid;
  justify-items: start;
}

.aa-title__identity h1 {
  margin: 0;
  color: var(--record-paper);
  font-family: var(--font-title);
  font-size: clamp(4rem, 6.7vw, 6.6rem);
  font-weight: 900;
  letter-spacing: 0.025em;
  line-height: 0.96;
  text-shadow: 7px 8px 0 rgb(62 33 31 / 0.96);
}

.aa-title__identity h1 span {
  display: block;
}

.aa-title__identity h1 span:last-child {
  margin-top: 12px;
  color: var(--evidence-amber-soft);
  letter-spacing: 0.1em;
}

.aa-title__seal {
  position: absolute;
  right: -76px;
  bottom: -8px;
  display: grid;
  width: 68px;
  height: 68px;
  place-items: center;
  border: 5px double var(--question-coral);
  color: #ff8e84;
  font-family: var(--font-title);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.12em;
  line-height: 1.2;
  text-indent: 0.12em;
  transform: rotate(-8deg);
}

.aa-title__hook {
  margin: 20px 0 0;
  color: var(--record-paper);
  font-size: clamp(1.08rem, 1.8vw, 1.35rem);
  font-weight: 800;
  line-height: 1.55;
  text-shadow: 0 2px 10px rgb(0 0 0 / 0.8);
}

.aa-title__trace {
  position: relative;
  width: min(100%, 560px);
  height: 54px;
  margin-top: 0;
}

.aa-title__trace svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
}

.aa-title__trace path {
  fill: none;
  stroke: var(--trace-teal-bright);
  stroke-dasharray: 760;
  stroke-dashoffset: 760;
  stroke-linecap: square;
  stroke-width: 4;
  filter: drop-shadow(4px 5px 0 rgb(8 24 39 / 0.7));
  animation: aa-title-trace 900ms 120ms ease-out forwards;
}

.aa-title__trace circle {
  fill: var(--evidence-amber);
  stroke: var(--hearing-navy);
  stroke-width: 4;
}

@keyframes aa-title-trace {
  to { stroke-dashoffset: 0; }
}

.aa-title__dossier {
  position: relative;
  width: min(100%, 700px);
  padding: 27px 30px 18px;
  border: 2px solid #b7ab94;
  color: var(--record-ink);
  background:
    linear-gradient(90deg, transparent 0 25px, rgb(173 47 42 / 0.42) 26px 27px, transparent 28px),
    repeating-linear-gradient(0deg, transparent 0 31px, rgb(30 155 145 / 0.12) 32px 33px),
    linear-gradient(135deg, rgb(255 255 255 / 0.25), transparent 46%),
    var(--paper-grain),
    var(--record-paper);
  box-shadow: 10px 13px 0 rgb(4 14 22 / 0.58);
  margin-top: 30px;
}

.aa-title__dossier::after {
  position: absolute;
  top: -2px;
  right: -2px;
  width: 36px;
  height: 36px;
  border-bottom: 2px solid #b7ab94;
  border-left: 2px solid #b7ab94;
  background: #ded7c8;
  clip-path: polygon(100% 0, 100% 100%, 0 0);
  content: "";
}

.aa-title__folder-tab {
  position: absolute;
  top: -30px;
  left: 0;
  min-width: 230px;
  padding: 5px 18px 7px;
  background: #b89760;
  color: var(--record-ink);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.06em;
  clip-path: polygon(0 0, 88% 0, 100% 100%, 0 100%);
}

.aa-title__dossier-kicker {
  margin: 0 0 4px;
  color: var(--question-coral-deep);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.08em;
}

.aa-title__dossier h2 {
  max-width: 30ch;
  margin: 0 0 8px;
  color: var(--record-ink);
  font-family: var(--font-title);
  font-size: clamp(1.35rem, 2.3vw, 1.72rem);
  letter-spacing: 0.015em;
  line-height: 1.32;
}

.aa-title__brief {
  max-width: 58ch;
  margin: 0 0 13px;
  color: #31465a;
  font-size: 0.94rem;
  font-weight: 650;
  line-height: 1.55;
}

.aa-title__workflow {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0;
  padding: 0;
  margin: 0 0 13px;
  border-block: 2px solid var(--record-ink);
  list-style: none;
}

.aa-title__workflow li {
  display: grid;
  min-width: 0;
  align-content: center;
  gap: 1px;
  padding: 8px 11px;
}

.aa-title__workflow li + li {
  border-left: 1px solid #71808c;
}

.aa-title__workflow span {
  color: var(--question-coral-deep);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
}

.aa-title__workflow strong {
  color: var(--record-ink);
  font-size: 0.88rem;
  line-height: 1.35;
}

.aa-title__oath {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin: 0 0 15px;
  padding: 7px 10px;
  background: var(--hearing-navy);
  color: var(--record-paper);
  box-shadow: 4px 4px 0 var(--chamber-mahogany-deep);
}

.aa-title__oath span {
  flex: 0 0 auto;
  color: var(--trace-teal-bright);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
}

.aa-title__oath strong {
  font-family: var(--font-title);
  font-size: 1rem;
  letter-spacing: 0.04em;
}

.aa-title__actions {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 10px;
}

.aa-title__action {
  display: grid;
  width: 100%;
  min-width: 0;
  min-height: 56px;
  align-content: center;
  gap: 2px;
  padding: 9px 18px;
}

.aa-title__action strong {
  font-size: 1.05rem;
}

.aa-title__action small {
  font-size: 0.84rem;
  font-weight: 750;
}

.aa-title__replay {
  grid-column: 1 / -1;
  justify-self: start;
  color: #43566a;
}

.aa-title__docket-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 7px 18px;
  padding-top: 10px;
  color: #516170;
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 800;
}

.aa-title__docket-meta span + span::before {
  margin-right: 18px;
  color: var(--question-coral-deep);
  content: "◆";
}

.aa-title__footer {
  position: absolute;
  z-index: 2;
  right: 20px;
  bottom: max(18px, env(safe-area-inset-bottom));
  left: 20px;
  display: flex;
  justify-content: center;
  text-align: center;
}

.aa-title__footer .title-safety {
  margin: 0;
}

#app.aa-screen-transition {
  position: relative;
}

#app.aa-screen-transition::after {
  position: fixed;
  z-index: 90;
  inset: 0;
  pointer-events: none;
  background: var(--hearing-navy-deep);
  content: "";
  animation: aa-screen-arrive 170ms ease-out both;
}

@keyframes aa-screen-arrive {
  from { opacity: 1; }
  to { opacity: 0; }
}

@media (max-width: 520px) {
  .aa-title__utility {
    top: max(10px, env(safe-area-inset-top));
    right: 10px;
  }

  .aa-title__utility .utility-button > span:last-child {
    display: none;
  }

  .aa-title {
    overflow: auto;
  }

  .aa-title__scene-image {
    object-position: 64% center;
  }

  .aa-title__shade {
    background:
      linear-gradient(90deg, rgb(8 24 39 / 0.97), rgb(8 24 39 / 0.78)),
      linear-gradient(0deg, rgb(8 24 39 / 0.97), transparent 44%, rgb(8 24 39 / 0.74));
  }

  .aa-title__layout {
    width: min(100% - 28px, 430px);
    min-height: auto;
    gap: 34px;
    margin: 0 auto;
    padding: 78px 0 26px;
  }

  .aa-title__identity h1 {
    font-size: clamp(3.25rem, 16vw, 4.2rem);
    text-shadow: 5px 6px 0 var(--chamber-mahogany-deep);
  }

  .aa-title__seal {
    right: -52px;
    bottom: -12px;
    width: 60px;
    height: 60px;
    border-width: 4px;
    font-size: 0.84rem;
  }

  .aa-title__trace {
    width: 92%;
    height: 42px;
  }

  .aa-title__hook {
    font-size: 1rem;
  }

  .aa-title__dossier {
    padding: 24px 18px 15px;
  }

  .aa-title__folder-tab {
    min-width: 205px;
  }

  .aa-title__dossier h2 {
    font-size: 1.26rem;
  }

  .aa-title__brief {
    font-size: 0.88rem;
  }

  .aa-title__workflow li {
    padding: 7px 6px;
  }

  .aa-title__workflow strong {
    font-size: 0.84rem;
  }

  .aa-title__oath {
    display: grid;
    gap: 0;
  }

  .aa-title__footer {
    position: relative;
    right: auto;
    bottom: auto;
    left: auto;
    padding: 0 14px max(14px, env(safe-area-inset-bottom));
  }

  .aa-title__footer .title-safety {
    font-size: 0.84rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  .aa-title::after {
    transition: none;
  }

  .aa-title__scene-image,
  .aa-title__trace path,
  #app.aa-screen-transition::after {
    animation: none;
  }

  .aa-title__trace path {
    stroke-dashoffset: 0;
  }

  #app.aa-screen-transition::after {
    display: none;
  }
}

@media (forced-colors: active) {
  .aa-title__seal,
  .aa-title__dossier,
  .aa-title__folder-tab,
  .aa-title__oath {
    border: 2px solid CanvasText;
    forced-color-adjust: auto;
  }
}

/* Sprite v2 prologue: one persistent cinema stage, patched across six shots plus title sting. */
.aa-prologue,
.aa-finale,
.aa-case-title-card {
  position: relative;
  display: grid;
  min-height: 100svh;
  overflow: hidden;
  isolation: isolate;
  background: var(--hearing-navy-deep);
}

.aa-prologue,
.aa-finale {
  grid-template-rows: auto 1fr;
}

/* Successful workbench responses keep the advisor beside the feedback. */
.workbench-footer:has(> .case-character-stage) {
  display: grid;
  grid-template-columns: 100px minmax(0, 1fr) auto;
  gap: 16px;
  padding-left: 16px;
}

.workbench-footer > .case-character-stage {
  position: relative;
  inset: auto;
  width: 100px;
  height: 96px;
  overflow: hidden;
  opacity: 1;
}

.workbench-footer > .case-character-stage .character-actor {
  top: 0;
  right: -70px;
  bottom: auto;
  width: 240px;
  opacity: 1;
}

@media (max-width: 820px) {
  .workbench-footer:has(> .case-character-stage) {
    grid-template-columns: 100px minmax(0, 1fr);
    gap: 8px 12px;
  }

  .workbench-footer:has(> .case-character-stage) > button {
    grid-column: 2;
  }
}

/* C1 reusable character-animation vertical slice */

.case-character-stage {
  position: absolute;
  inset: 0;
  z-index: 2;
  overflow: hidden;
  pointer-events: none;
}

.case-character-stage .character-actor {
  left: auto;
  right: 0;
  bottom: 0;
  width: min(42vw, 32rem);
  max-width: none;
  aspect-ratio: 1;
  transform: none;
}

.case-character-stage .character-actor__sprite,
.case-character-stage .character-actor__fallback {
  width: 100% !important;
  height: 100% !important;
  object-fit: contain;
  object-position: center bottom;
}

.case1-character-stage--investigation .character-actor,
.case-character-stage--investigation .character-actor {
  right: clamp(1rem, 6vw, 7rem);
  bottom: -8%;
  width: min(43vw, 38rem);
}

.case1-character-stage--hearing .character-actor,
.case-character-stage--hearing .character-actor {
  right: clamp(2rem, 8vw, 10rem);
  bottom: -18%;
  width: min(48vw, 42rem);
}

.case1-character-stage--workbench,
.case-character-stage--workbench {
  z-index: 0;
  overflow: visible;
}

.case1-character-stage--workbench .character-actor,
.case-character-stage--workbench .character-actor {
  right: clamp(6px, 5vw, 72px);
  bottom: -18%;
  width: min(32vw, 25rem);
}

.case1-character-stage--report,
.case-character-stage--report {
  z-index: 1;
  opacity: 0.22;
}

.case1-character-stage--report .character-actor,
.case-character-stage--report .character-actor {
  top: 1rem;
  right: -2rem;
  bottom: auto;
  width: min(40vw, 32rem);
}

@media (max-width: 820px) {
  .case1-character-stage--investigation .character-actor,
  .case-character-stage--investigation .character-actor {
    right: -8%;
    bottom: 16%;
    width: min(76vw, 29rem);
  }

  .case1-character-stage--hearing .character-actor,
  .case-character-stage--hearing .character-actor {
    right: -14%;
    bottom: -10%;
    width: min(82vw, 31rem);
  }

  .case1-character-stage--workbench .character-actor,
  .case-character-stage--workbench .character-actor {
    right: -7%;
    bottom: -12%;
    width: min(52vw, 21rem);
    opacity: 0.42;
  }

  .case1-character-stage--report .character-actor,
  .case-character-stage--report .character-actor {
    top: 1rem;
    right: -24%;
    width: min(86vw, 29rem);
  }
}

@media (forced-colors: active) {
  .case1-character-stage--report,
  .case-character-stage--report { opacity: 0.12; }
}

.case-character-stage--case2-workbench {
  opacity: 0.2;
}

.case-character-stage--case2-report {
  opacity: 0.18;
}

.case-character-stage--case3 {
  z-index: 2;
}

.case-character-stage--case3 .character-actor {
  right: clamp(2rem, 8vw, 10rem);
  bottom: -10%;
  width: min(46vw, 38rem);
}

.case3-character-stage--hearing .character-actor {
  right: clamp(2rem, 10vw, 12rem);
  bottom: -6%;
  width: min(40vw, 34rem);
}

.case-character-stage--case3-workbench {
  opacity: 0.2;
  z-index: 0;
  overflow: visible;
}

.case-character-stage--case3-report {
  opacity: 0.18;
}

@media (min-width: 821px) {
  .case-character-stage--case2.case-character-stage--hearing .character-actor {
    right: clamp(3rem, 10vw, 11rem);
    bottom: -4%;
    width: min(32vw, 28rem);
  }

  .case3-character-stage--hearing .character-actor {
    right: clamp(4rem, 12vw, 14rem);
    bottom: -2%;
    width: min(34vw, 30rem);
  }
}

@media (max-width: 820px) {
  .case-character-stage--case3 .character-actor {
    right: -12%;
    bottom: 4%;
    width: min(78vw, 29rem);
  }

  .case3-character-stage--hearing .character-actor {
    right: -16%;
    bottom: -10%;
    width: min(82vw, 31rem);
  }

  .case-character-stage--case3-workbench .character-actor {
    right: -8%;
    bottom: -12%;
    width: min(52vw, 21rem);
  }

  .case-character-stage--case3-report .character-actor {
    right: -24%;
    width: min(86vw, 29rem);
  }
}

.aa-prologue__cinema,
.aa-prologue__scene,
.aa-prologue__scene-image,
.aa-prologue__impact-lines,
.aa-prologue__fx-layer,
.aa-prologue__actor-layer,
.aa-prologue__prop-layer,
.aa-finale__cinema,
.aa-finale__scene,
.aa-finale__scene-image,
.aa-finale__impact-lines,
.aa-finale__fx-layer,
.aa-finale__actor-layer,
.aa-finale__prop-layer {
  position: absolute;
  inset: 0;
}

.aa-prologue__cinema,
.aa-finale__cinema {
  z-index: 0;
  overflow: hidden;
  background:
    radial-gradient(circle at 50% 42%, rgb(49 83 109 / 0.24), transparent 44%),
    var(--hearing-navy-deep);
  transform-origin: center;
}

.aa-prologue__cinema::before,
.aa-prologue__cinema::after,
.aa-finale__cinema::before,
.aa-finale__cinema::after {
  position: absolute;
  z-index: 8;
  right: 0;
  left: 0;
  height: clamp(18px, 3.2vw, 42px);
  background: #030b12;
  content: "";
  pointer-events: none;
}

.aa-prologue__cinema::before,
.aa-finale__cinema::before { top: 0; }
.aa-prologue__cinema::after,
.aa-finale__cinema::after { bottom: 0; }

.aa-prologue__scene,
.aa-finale__scene { z-index: 0; }

.aa-prologue__scene-image,
.aa-finale__scene-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: brightness(0.78) saturate(0.88);
}

.aa-prologue[data-shot="2"] .aa-prologue__scene-image {
  object-position: center 44%;
  filter: brightness(0.9) saturate(0.88);
}

.aa-prologue[data-shot="3"] .aa-prologue__scene-image {
  filter: brightness(0.84) saturate(0.82) sepia(0.05);
}

.aa-prologue__impact-lines,
.aa-finale__impact-lines {
  z-index: 1;
  opacity: 0;
  background: repeating-conic-gradient(from 12deg at 50% 48%, transparent 0 5deg, rgb(255 255 255 / 0.2) 5.5deg 6deg);
  mix-blend-mode: screen;
  pointer-events: none;
}

.aa-prologue__actor-layer,
.aa-finale__actor-layer { z-index: 2; }
.aa-prologue__fx-layer,
.aa-finale__fx-layer { z-index: 3; }
.aa-prologue__prop-layer,
.aa-finale__prop-layer { z-index: 4; }

.aa-prologue__fx-layer { z-index: 7; }

.character-actor {
  --actor-dialogue-size: min(42vw, 512px);
  --actor-dialogue-bottom: clamp(112px, 17svh, 170px);
  position: absolute;
  bottom: var(--actor-dialogue-bottom);
  width: var(--actor-dialogue-size);
  aspect-ratio: 1;
  filter: drop-shadow(0 22px 18px rgb(0 0 0 / 0.48));
  transform-origin: center bottom;
}

.character-actor--stage-left { left: clamp(1%, 5vw, 8%); }
.character-actor--stage-right { right: clamp(1%, 5vw, 8%); }
.character-actor--primary { left: 50%; transform: translateX(-50%); }

/* Facing layer: flip ownership lives on this dedicated wrapper only
   (GSAP owns .character-actor transforms and must never write here). */
.character-actor__facing {
  width: 100%;
  height: 100%;
  transform-origin: center bottom;
}

.character-actor[data-facing-flipped="true"] .character-actor__facing {
  transform: scaleX(-1);
}

.character-actor__sprite,
.character-actor__fallback {
  display: block;
  width: 100% !important;
  height: auto !important;
  aspect-ratio: 1;
  object-fit: contain;
  object-position: center bottom;
}

.character-actor__sprite {
  background-repeat: no-repeat;
  image-rendering: auto;
}

.character-actor__sprite[hidden],
.character-actor__fallback[hidden] {
  display: none;
}

.stage-fx {
  position: absolute;
  top: 50%;
  left: 50%;
  width: min(74vw, 1024px);
  transform: translate(-50%, -56%);
  filter: drop-shadow(0 10px 16px rgb(0 0 0 / 0.42));
}

.stage-fx__sprite {
  display: block;
  width: 100% !important;
  height: auto !important;
  background-repeat: no-repeat;
}

.stage-fx--pencil-line-straight .stage-fx__sprite { aspect-ratio: 4; }
.stage-fx--pencil-line-cross .stage-fx__sprite { aspect-ratio: 2; }
.stage-fx--stamp-verdict {
  /* 47vh 是矮視窗夾制：1440×900（423px）與 1920×1080（508px）都吃不到 420px 上限、
     維持原尺寸，1280×720 這種矮視窗才縮到 338px，章不必被夾到字卡文字上。 */
  --stamp-size: min(38vw, 47vh, 420px);
  /* 整枚章一起傾斜：判決字與印框同角度，才不會看起來歪掉 */
  width: var(--stamp-size);
  transform: translate(-50%, -56%) rotate(-6deg);
}
.stage-fx--stamp-verdict .stage-fx__sprite { aspect-ratio: 1; }
.stage-fx--case-file-flip .stage-fx__sprite { aspect-ratio: 16 / 9; }

/* 判決字要落在印框鏤空區內（sprite 終格量測：14.3%–84.6% × 29.5%–63.7%）。
   width: max-content 讓兩個字維持單行——絕對定位只給 left 時，shrink-to-fit
   可用寬只剩容器一半，「異常」「一定」會被硬折成兩行、撐出印框外。 */
.stage-fx__label {
  position: absolute;
  top: 46.6%;
  left: 49.4%;
  width: max-content;
  color: var(--question-coral-deep);
  font: 900 calc(var(--stamp-size, 38vw) * 0.23)/1 var(--font-display);
  letter-spacing: 0.12em;
  text-indent: 0.12em;
  transform: translate(-50%, -50%);
}

/* 印框圖載入失敗時，字自己撐起一枚章 */
.stage-fx[data-motion-state="fallback"] .stage-fx__label {
  padding: 0.1em 0.28em 0.16em;
  border: 0.12em solid currentColor;
}

.aa-prologue__evidence {
  position: absolute;
  top: 17%;
  left: 50%;
  width: min(24vw, 230px);
  filter: drop-shadow(8px 12px 0 rgb(0 0 0 / 0.38));
  transform: translateX(-50%) rotate(-3deg);
}

.aa-prologue .stage-fx__label {
  font-family: var(--font-title);
  white-space: nowrap;
}

.aa-prologue[data-beat-id="prologue-opening-10"] .aa-prologue__fx-layer {
  z-index: 7;
}

.aa-prologue[data-beat-id="prologue-opening-10"] .stage-fx--stamp-verdict {
  top: 14%;
  left: 72%;
  --stamp-size: min(30vw, 240px);
  width: var(--stamp-size);
}

.aa-prologue[data-beat-id="prologue-opening-10"] .stage-fx__label {
  font-size: clamp(2rem, 5vw, 4rem);
  white-space: nowrap;
}

.aa-prologue[data-beat-id="prologue-opening-10"] .aa-prologue__montage {
  top: 26%;
  font-size: clamp(1.5rem, 3.4vw, 2.6rem);
}

.aa-prologue__header,
.aa-finale__header {
  display: flex;
  z-index: 2;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: max(18px, env(safe-area-inset-top)) max(18px, env(safe-area-inset-right)) 0 max(18px, env(safe-area-inset-left));
  color: var(--trace-teal-bright);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 800;
  letter-spacing: 0.1em;
}

.aa-prologue__skip,
.aa-finale__skip,
.aa-title__replay {
  color: var(--record-paper-muted);
  font-size: 0.84rem;
  font-weight: 800;
  text-decoration: underline;
  text-underline-offset: 4px;
}

.aa-prologue__stage,
.aa-finale__stage {
  display: grid;
  align-items: end;
  min-height: 0;
  padding: 24px 20px max(18px, env(safe-area-inset-bottom));
}

.aa-prologue__dialogue,
.aa-finale__dialogue {
  z-index: 10;
  width: min(1060px, 100%);
  margin: 0 auto;
}

.aa-prologue__montage {
  position: absolute;
  z-index: 6;
  top: 24%;
  left: 50%;
  width: min(86vw, 720px);
  margin: 0;
  padding: clamp(18px, 4vw, 34px);
  border: 2px solid var(--record-paper);
  background: var(--hearing-navy);
  color: var(--record-paper);
  font-family: var(--font-display);
  font-size: clamp(2rem, 5vw, 4rem);
  font-weight: 900;
  letter-spacing: 0.04em;
  line-height: 1.35;
  text-align: center;
  box-shadow: 7px 8px 0 var(--chamber-mahogany-deep);
  transform: translateX(-50%) rotate(-2deg);
  animation: aa-prologue-montage 360ms ease-out both;
}

@keyframes aa-prologue-montage {
  from { opacity: 0; transform: translateX(-50%) scale(0.94) rotate(-2deg); }
  to { opacity: 1; transform: translateX(-50%) scale(1) rotate(-2deg); }
}

/* 拍10（『也許』變成『一定』）是全序章唯一「字卡＋蓋章＋角色」同框的一拍。
   置中的字卡（left 50%、寬 720px）在 1920 以下會侵入 stage-left 的大花醫師——
   1280×720 整張臉都在卡後面。這裡把字卡改錨在他可見身體的右側空間。 */
@media (min-width: 521px) {
  .aa-prologue[data-shot="3"] {
    /* 大花醫師立繪的可見右緣：欄位 left ＋ 圖內身體佔 cell 的 78.5%
       （量自 dr-bigflower/resolve-stable-v8.webp 終格 alpha bbox） */
    --shot3-actor-right: calc(clamp(1%, 5vw, 8%) + 0.785 * min(42vw, 512px));
    --shot3-card-left: calc(var(--shot3-actor-right) + 20px);
    --shot3-card-width: min(720px, 100% - var(--shot3-actor-right) - 48px);
  }

  .aa-prologue[data-shot="3"] .aa-prologue__montage {
    left: var(--shot3-card-left);
    width: var(--shot3-card-width);
    transform: rotate(-2deg);
    animation-name: aa-prologue-montage-inset;
  }

  @keyframes aa-prologue-montage-inset {
    from { opacity: 0; transform: scale(0.94) rotate(-2deg); }
    to { opacity: 1; transform: scale(1) rotate(-2deg); }
  }
}

.aa-prologue[data-shot="3"] .stage-fx--stamp-verdict {
  /* 第二個值是下緣夾制：對話框高度各尺寸都固定 194px，印框旋轉後半高約
     0.264×邊長，再留 12px；1280×720 這種矮視窗才不會把章壓進對話框後面 */
  top: min(
    24% + 340px,
    100% - 206px - 0.264 * var(--stamp-size)
  );
  /* 章跟著字卡右緣走；第二個值是右緣夾制（印框旋轉後半寬約 0.426×邊長，
     取 0.45 留餘裕），窄視窗才不會被 cinema 的 overflow 切掉章的右邊 */
  left: min(
    var(--shot3-card-left) + var(--shot3-card-width) - 0.02 * var(--stamp-size),
    100% - 0.45 * var(--stamp-size)
  );
  transform: translate(-50%, -50%) rotate(-6deg);
}

.aa-prologue__sting,
.aa-finale__sting {
  display: grid;
  width: min(84vw, 650px);
  gap: 10px;
  padding: 32px 28px;
  border-block: 2px solid var(--evidence-amber);
  background: rgb(8 24 39 / 0.82);
  color: var(--record-paper);
  text-align: center;
  box-shadow: 7px 8px 0 rgb(62 33 31 / 0.72);
}

.aa-prologue__ending,
.aa-finale__ending {
  z-index: 12;
  display: grid;
  place-items: center;
  min-height: 0;
  padding: 24px;
  background: rgb(3 11 18 / 0.72);
}

.aa-prologue__ending[hidden],
.aa-prologue__stage[hidden],
.aa-finale__ending[hidden],
.aa-finale__stage[hidden] {
  display: none;
}

.aa-prologue__sting span,
.aa-finale__sting span,
.aa-case-title-card__skip > span {
  color: var(--trace-teal-bright);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.14em;
}

.aa-prologue__sting strong,
.aa-finale__sting strong,
.aa-case-title-card__skip strong {
  font-family: var(--font-title);
  font-size: clamp(2rem, 5vw, 4rem);
  letter-spacing: 0.04em;
  line-height: 1.16;
}

.aa-prologue__sting small,
.aa-finale__sting small,
.aa-case-title-card__skip small {
  color: var(--muted-blue);
  font-size: 1rem;
  font-weight: 700;
}

.aa-case-title-card {
  place-items: center;
  animation: aa-case-title-in 300ms ease-out both;
}

.aa-case-title-card__skip {
  display: grid;
  width: min(84vw, 720px);
  gap: 12px;
  padding: 32px 24px;
  border-block: 1px solid var(--evidence-amber);
  background: transparent;
  color: var(--record-paper);
  text-align: center;
  animation: aa-case-title-out 250ms 1750ms ease-in forwards;
}

.aa-case-title-card__skip i {
  display: block;
  width: min(100%, 460px);
  height: 1px;
  margin: 8px auto 0;
  background: var(--evidence-amber);
}

.aa-case-title-card__skip em {
  color: var(--record-paper-muted);
  font-size: 0.84rem;
  font-style: normal;
  font-weight: 800;
}

@keyframes aa-case-title-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes aa-case-title-out {
  to { opacity: 0; }
}

@media (max-width: 520px) {
  .aa-prologue__stage,
  .aa-finale__stage { padding-inline: 12px; }
  .aa-prologue__cinema::before,
  .aa-prologue__cinema::after,
  .aa-finale__cinema::before,
  .aa-finale__cinema::after { display: none; }
  .aa-prologue__montage {
    top: 17%;
    width: calc(100% - 32px);
    font-size: 2rem;
  }
  .character-actor {
    --actor-dialogue-bottom: clamp(164px, 23svh, 206px);
    --actor-dialogue-size: min(74vw, 430px);
    bottom: var(--actor-dialogue-bottom);
    width: var(--actor-dialogue-size);
  }
  .character-actor--stage-left { left: -8%; }
  .character-actor--stage-right { right: -8%; }
  .character-actor[data-intent="listening"] { display: none; }
  .aa-prologue[data-shot="5"] .character-actor[data-intent="listening"] {
    display: block;
    opacity: 0.72;
    transform: scale(0.84);
  }
  .aa-prologue[data-shot="5"] .character-actor--stage-left { left: -20%; }
  .aa-prologue[data-shot="5"] .character-actor--stage-right { right: -20%; }
  .stage-fx { width: 94vw; }
  /* width 要重寫一次：同名特異度下，上面的 .stage-fx { width: 94vw } 排在後面會贏 */
  .stage-fx--stamp-verdict {
    --stamp-size: min(68vw, 360px);
    width: var(--stamp-size);
  }
  /* 手機字卡在 17%、寬度吃滿版，章壓在卡片下緣偏右；再往下就蓋到大花醫師的臉 */
  .aa-prologue[data-shot="3"] .stage-fx--stamp-verdict {
    top: calc(17% + 215px);
    left: min(62%, 100% - 0.45 * var(--stamp-size));
  }
  .aa-prologue__evidence { top: 19%; width: 34vw; }
  .aa-prologue__sting,
  .aa-finale__sting,
  .aa-case-title-card__skip { width: calc(100% - 32px); }
}

@media (prefers-reduced-motion: reduce) {
  .aa-prologue__montage,
  .aa-case-title-card,
  .aa-case-title-card__skip { animation: none; }

  .aa-prologue__cinema,
  .aa-finale__cinema { transform: none !important; }
  .aa-prologue__impact-lines,
  .aa-finale__impact-lines { display: none; }
}

@media (forced-colors: active) {
  .aa-prologue__sting,
  .aa-finale__sting,
  .aa-case-title-card__skip { border: 2px solid CanvasText; }
}

/* 季末結局演出（Step 3）：沿用序章 cinema／對話框／sting，只補本段特有的舞台與道具。 */

.aa-finale__scene-image {
  transition: filter 600ms ease;
}

.aa-finale[data-camera="dim-1"] .aa-finale__scene-image { filter: brightness(0.78) saturate(0.86); }
.aa-finale[data-camera="dim-2"] .aa-finale__scene-image { filter: brightness(0.55) saturate(0.8); }
.aa-finale[data-camera="dim-3"] .aa-finale__scene-image { filter: brightness(0.35) saturate(0.72); }

.aa-finale__portrait {
  position: absolute;
  bottom: clamp(112px, 17svh, 170px);
  width: min(42vw, 512px);
  filter: drop-shadow(0 22px 18px rgb(0 0 0 / 0.48));
}

.aa-finale__portrait--stage-left { left: clamp(1%, 5vw, 8%); }
.aa-finale__portrait--stage-right { right: clamp(1%, 5vw, 8%); }

/* 道具：五張方法頁逐張落桌 */

.aa-finale__pages {
  position: absolute;
  top: 12%;
  left: 50%;
  display: grid;
  width: min(84vw, 640px);
  margin: 0;
  padding: 0;
  gap: 8px;
  list-style: none;
  transform: translateX(-50%);
}

.aa-finale__pages li {
  display: flex;
  align-items: baseline;
  gap: 12px;
  padding: 10px 16px;
  border-left: 4px solid var(--evidence-amber);
  background: var(--record-paper);
  color: var(--record-ink);
  box-shadow: var(--shadow-paper);
  transform: rotate(-1deg);
  animation: aa-finale-page-drop 420ms ease-out both;
  animation-delay: calc(var(--page-index) * 160ms);
}

.aa-finale__pages li:nth-child(even) { transform: rotate(1.2deg); }

.aa-finale__pages li span {
  color: var(--chamber-mahogany);
  font-family: var(--font-data);
  font-size: 0.78rem;
  font-weight: 900;
}

.aa-finale__pages li strong {
  font-family: var(--font-title);
  font-size: clamp(1rem, 2.4vw, 1.4rem);
  letter-spacing: 0.04em;
}

@keyframes aa-finale-page-drop {
  from { opacity: 0; transform: translateY(-24px) rotate(-4deg); }
  to { opacity: 1; }
}

/* 道具：筆記本（dated 時多一行日期） */

.aa-finale__notebook {
  position: absolute;
  left: calc(clamp(1%, 5vw, 8%) + min(28vw, 340px));
  bottom: calc(22% + 12px);
  display: grid;
  width: min(38vw, 300px);
  padding: 18px 20px;
  gap: 10px;
  border: 2px solid var(--chamber-mahogany-deep);
  background: var(--paper-grain), linear-gradient(180deg, #f5dc66 0 12px, #fff29b 13px, #fff4a8);
  box-shadow: var(--shadow-paper);
  transform: rotate(-3deg);
}

.aa-finale__notebook i {
  display: block;
  height: 2px;
  background: rgb(62 33 31 / 0.28);
}

.aa-finale__notebook .is-date {
  color: var(--chamber-mahogany-deep);
  font-family: var(--font-data);
  font-size: 0.86rem;
  font-weight: 900;
  letter-spacing: 0.08em;
  opacity: 0;
}

.aa-finale__notebook[data-prop-state="dated"] .is-date {
  animation: aa-finale-fade-in 520ms ease-out both;
}

@keyframes aa-finale-fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

/* 道具：卷宗封面（判定對象 孩子 → 劃線 → 主張） */

.aa-finale__cover {
  position: absolute;
  top: 16%;
  left: 50%;
  display: grid;
  width: min(60vw, 420px);
  padding: clamp(18px, 3vw, 30px);
  gap: 10px;
  justify-items: center;
  border: 3px double var(--chamber-mahogany);
  background: var(--record-paper);
  color: var(--record-ink);
  box-shadow: var(--shadow-paper);
  transform: translateX(-50%) rotate(-2deg);
}

.aa-finale__cover span {
  color: var(--chamber-mahogany);
  font-family: var(--font-data);
  font-size: 0.8rem;
  font-weight: 900;
  letter-spacing: 0.18em;
}

.aa-finale__cover-target {
  position: relative;
  font-family: var(--font-title);
  font-size: clamp(1.6rem, 4vw, 2.6rem);
  letter-spacing: 0.06em;
}

.aa-finale__cover-strike {
  position: absolute;
  top: 52%;
  right: -6%;
  left: -6%;
  height: 4px;
  background: var(--question-coral-deep);
  transform: scaleX(0);
  transform-origin: left center;
}

.aa-finale__cover[data-prop-state="strike"] .aa-finale__cover-strike,
.aa-finale__cover[data-prop-state="claim"] .aa-finale__cover-strike {
  animation: aa-finale-strike 420ms ease-out both;
}

@keyframes aa-finale-strike {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}

.aa-finale__cover-claim {
  color: var(--chamber-mahogany-deep);
  font-family: var(--font-title);
  font-size: clamp(1.6rem, 4vw, 2.6rem);
  font-weight: 700;
  letter-spacing: 0.06em;
  opacity: 0;
}

.aa-finale__cover[data-prop-state="claim"] .aa-finale__cover-claim {
  animation: aa-finale-fade-in 520ms 120ms ease-out both;
}

/* 蒙太奇：全幅場景＋底部漸層＋右下正式案名 */

.aa-finale[data-kind="montage"] .aa-finale__scene-image { filter: brightness(0.82) saturate(0.9); }

.aa-finale[data-kind="montage"] .aa-finale__cinema::after {
  height: 46%;
  background: linear-gradient(to top, rgb(3 11 18 / 0.92), transparent);
}

.aa-finale[data-kind="montage"] .character-actor {
  --montage-actor-size: min(42vw, 512px);
  width: var(--montage-actor-size);
  bottom: clamp(110px, 15svh, 150px);
  mask-image: linear-gradient(to bottom, #000 0 78%, transparent 100%);
}

.aa-finale[data-kind="montage"] .character-actor:only-child {
  left: calc(50% - var(--montage-actor-size) / 2);
  right: auto;
}

@media (max-width: 520px) {
  .aa-finale[data-kind="montage"] .character-actor {
    --montage-actor-size: 52vw;
    bottom: clamp(160px, 22svh, 200px);
  }
  .aa-finale[data-kind="montage"] .character-actor--stage-left { left: 0; }
  .aa-finale[data-kind="montage"] .character-actor--stage-right { right: 0; }
  .aa-finale[data-kind="montage"] .character-actor:only-child {
    --montage-actor-size: min(78vw, 430px);
    left: calc(50% - var(--montage-actor-size) / 2);
  }
}

.aa-finale__montage {
  position: relative;
  z-index: 10;
  display: grid;
  width: min(1060px, 100%);
  margin: 0 auto;
  gap: 10px;
  justify-items: start;
}

.aa-finale__montage-line {
  margin: 0;
  color: var(--record-paper);
  font-family: var(--font-body);
  font-size: clamp(1rem, 2.6vw, 1.35rem);
  font-weight: 700;
  line-height: 1.7;
  text-shadow: 0 2px 8px rgb(3 11 18 / 0.9);
  animation: aa-finale-fade-in 420ms ease-out both;
}

.aa-finale__montage-caption {
  justify-self: end;
  padding: 4px 10px;
  border-bottom: 2px solid var(--evidence-amber);
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.82rem;
  font-weight: 900;
  letter-spacing: 0.14em;
}

/* 謝幕：深藍底紙卡，名單兩欄；界線行單欄 */

.aa-finale[data-kind="credits"] .aa-finale__cinema,
.aa-finale[data-kind="card"] .aa-finale__cinema,
.aa-finale[data-kind="reveal"] .aa-finale__cinema {
  background: var(--hearing-navy-deep);
}

.aa-finale[data-kind="credits"] .aa-finale__stage,
.aa-finale[data-kind="card"] .aa-finale__stage,
.aa-finale[data-kind="reveal"] .aa-finale__stage {
  align-items: center;
  justify-items: center;
}

.aa-finale__credits {
  position: relative;
  z-index: 10;
  display: grid;
  width: min(680px, 100%);
  padding: clamp(22px, 4vw, 38px);
  gap: 18px;
  border-block: 2px solid var(--evidence-amber);
  background: rgb(17 43 69 / 0.86);
  box-shadow: 7px 8px 0 var(--chamber-mahogany-deep);
  animation: aa-finale-fade-in 420ms ease-out both;
}

.aa-finale__credits dl {
  display: grid;
  margin: 0;
  gap: 12px;
}

.aa-finale__credits dl > div {
  display: grid;
  grid-template-columns: minmax(6rem, 32%) 1fr;
  align-items: baseline;
  gap: 16px;
}

.aa-finale__credits dt {
  color: var(--trace-teal-bright);
  font-family: var(--font-data);
  font-size: 0.82rem;
  font-weight: 900;
  letter-spacing: 0.12em;
  text-align: right;
}

.aa-finale__credits dd {
  margin: 0;
  color: var(--record-paper);
  font-family: var(--font-display);
  font-size: clamp(1.05rem, 2.4vw, 1.4rem);
  font-weight: 800;
}

.aa-finale__credits dd em {
  margin-left: 8px;
  color: var(--muted-blue);
  font-family: var(--font-data);
  font-size: 0.76rem;
  font-style: normal;
  font-weight: 800;
}

.aa-finale__credits dl > .is-boundary {
  grid-template-columns: 1fr;
}

.aa-finale__credits dl > .is-boundary dd {
  color: var(--record-paper-muted);
  font-family: var(--font-body);
  font-size: clamp(0.9rem, 2vw, 1.02rem);
  font-weight: 600;
  line-height: 1.75;
}

/* 結尾卡：兩句大字 */

.aa-finale__card {
  position: relative;
  z-index: 10;
  display: grid;
  width: min(860px, 100%);
  gap: 18px;
  justify-items: center;
  text-align: center;
}

.aa-finale__card strong {
  color: var(--record-paper);
  font-family: var(--font-title);
  font-size: clamp(1.6rem, 5.4vw, 3.2rem);
  letter-spacing: 0.05em;
  line-height: 1.35;
  animation: aa-finale-fade-in 620ms ease-out both;
}

.aa-finale__card strong:nth-child(2) { animation-delay: 320ms; }

/* 揭牌：六格檔案櫃翻牌 */

.aa-finale__reveal {
  position: relative;
  z-index: 10;
  display: grid;
  width: min(1060px, 100%);
  gap: 18px;
  justify-items: center;
}

.aa-finale__reveal ol {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  width: 100%;
  margin: 0;
  padding: 0;
  gap: 14px;
  list-style: none;
  perspective: 900px;
}

.aa-finale__reveal li {
  display: grid;
  min-height: clamp(92px, 14vh, 132px);
  padding: 14px 16px;
  gap: 6px;
  align-content: center;
  border: 2px solid var(--line-blue);
  background: var(--hearing-navy);
  transform-style: preserve-3d;
}

.aa-finale__reveal li.is-flipped {
  animation: aa-finale-flip 520ms ease-out both;
  animation-delay: calc(var(--cell-index) * 160ms);
}

.aa-finale__reveal li span {
  color: var(--muted-blue);
  font-family: var(--font-data);
  font-size: 0.76rem;
  font-weight: 800;
  letter-spacing: 0.1em;
  text-decoration: line-through;
}

.aa-finale__reveal li strong {
  color: var(--evidence-amber-soft);
  font-family: var(--font-title);
  font-size: clamp(1rem, 2.4vw, 1.3rem);
  letter-spacing: 0.04em;
}

.aa-finale__reveal li[data-pending="true"] strong { color: var(--muted-blue); }

@keyframes aa-finale-flip {
  from { opacity: 0; transform: rotateY(90deg); }
  to { opacity: 1; transform: rotateY(0deg); }
}

/* 回程：模糊氣泡沿原路縮小；印章倒放 */

.aa-finale__bubbles {
  position: absolute;
  inset: 0;
}

.aa-finale__bubbles i {
  position: absolute;
  border-radius: 50%;
  background: rgb(233 220 196 / 0.3);
  filter: blur(3px);
  animation: aa-finale-bubble-shrink 1400ms ease-out both;
}

.aa-finale__bubbles i:nth-child(1) { top: 22%; left: 18%; width: 18vmin; height: 18vmin; }
.aa-finale__bubbles i:nth-child(2) { top: 34%; left: 46%; width: 12.9vmin; height: 12.9vmin; animation-delay: 180ms; }
.aa-finale__bubbles i:nth-child(3) { top: 26%; left: 72%; width: 9vmin; height: 9vmin; animation-delay: 360ms; }

@keyframes aa-finale-bubble-shrink {
  from { opacity: 0.9; transform: scale(1); }
  to { opacity: 0.18; transform: scale(0.42); }
}

.aa-finale .stage-fx--stamp-verdict.is-reverse {
  animation: aa-finale-stamp-reverse 720ms ease-out both;
}

@keyframes aa-finale-stamp-reverse {
  from { opacity: 0.9; transform: scale(1); }
  to { opacity: 0; transform: scale(0.6); }
}

/* 最後一拍：新卷宗滑入，露出待查核文件。 */
.aa-finale[data-kind="black"] .aa-finale__cinema { background: #030b12; }
.aa-finale[data-kind="black"] .aa-finale__stage { min-height: 100svh; align-content: center; }
.aa-finale__black {
  position: relative;
  z-index: 10;
  display: grid;
  width: min(1060px, 100%);
  min-height: 60svh;
  margin: 0 auto;
  padding: 70px 24px 30px;
  align-content: center;
  justify-items: center;
  gap: 48px;
}
.aa-finale__newfile {
  position: relative;
  width: min(64vw, 360px);
  height: 230px;
  border: 2px solid #b88835;
  border-radius: 5px;
  background: #9d702b;
  box-shadow: 14px 18px 0 rgb(0 0 0 / 0.3);
  transform: rotate(-4deg);
  animation: aa-finale-newfile-slide 700ms 220ms cubic-bezier(0.16, 1, 0.3, 1) both;
}
.aa-finale__newfile::before {
  content: '';
  position: absolute;
  left: -2px;
  top: -22px;
  width: 38%;
  height: 24px;
  border: 2px solid #b88835;
  border-bottom: 0;
  border-radius: 7px 10px 0 0;
  background: #9d702b;
}
.aa-finale__newfile-paper {
  position: absolute;
  inset: 12px 18px 20px;
  padding: 18px;
  background: var(--record-paper);
  transform: translateY(-38px);
  animation: aa-finale-newfile-paper 480ms 760ms ease-out both;
}
.aa-finale__newfile-paper i { display: block; height: 2px; margin-bottom: 10px; background: #c0b5a1; }
.aa-finale__newfile-cover {
  position: absolute;
  inset: 34px -2px -2px;
  display: grid;
  align-content: center;
  justify-items: start;
  gap: 8px;
  padding: 24px;
  border: 2px solid #e9b955;
  border-radius: 4px;
  background: #cca04e;
  color: #382a18;
}
.aa-finale__newfile-cover small { font-weight: 700; letter-spacing: 0.2em; }
.aa-finale__newfile-cover strong { font-size: clamp(1.5rem, 4vw, 2rem); letter-spacing: 0.12em; }
.aa-finale__newfile-cover span { width: 50%; height: 2px; background: #805b26; }
.aa-finale__finish {
  min-height: 48px;
  padding: 12px 24px;
  border: 1px solid var(--evidence-amber);
  background: var(--hearing-navy);
  color: var(--record-paper);
  font: inherit;
  font-weight: 700;
  cursor: pointer;
}
.aa-finale__finish:focus-visible { outline: 3px solid var(--record-paper); outline-offset: 5px; }
@keyframes aa-finale-newfile-slide {
  from { opacity: 0; transform: translate(42%, 30%) rotate(9deg); }
  to { opacity: 1; transform: translate(0, 0) rotate(-4deg); }
}
@keyframes aa-finale-newfile-paper {
  from { transform: translateY(0); }
  to { transform: translateY(-38px); }
}

/* 非對話拍的推進鈕不疊在內容上：改成流內元素排在最後一行。 */

.aa-finale__montage > .aa-advance,
.aa-finale__credits > .aa-advance,
.aa-finale__card > .aa-advance,
.aa-finale__reveal > .aa-advance,
.aa-finale__black > .aa-advance {
  position: static;
  justify-self: end;
}

/* 切黑拍的檔案卡壓在右下，推進鈕改靠左避免疊在紙面上。 */
.aa-finale__black > .aa-advance { justify-self: start; }

/* sting 的「完」 */

.aa-finale__sting b {
  color: var(--evidence-amber);
  font-family: var(--font-data);
  font-size: 0.9rem;
  font-weight: 900;
  letter-spacing: 0.4em;
  text-indent: 0.4em;
}

@media (max-width: 520px) {
  .aa-finale__pages { top: 9%; width: calc(100% - 28px); }
  .aa-finale__pages li { padding: 8px 12px; }
  .aa-finale__notebook { left: 4%; bottom: 26%; width: min(46vw, 200px); }
  .aa-finale__cover { width: calc(100% - 40px); }
  .aa-finale__portrait { bottom: clamp(164px, 23svh, 206px); width: min(74vw, 430px); }
  .aa-finale__portrait--stage-left { left: -8%; }
  .aa-finale__portrait--stage-right { right: -8%; }
  .aa-finale__credits dl > div { grid-template-columns: 1fr; gap: 2px; }
  .aa-finale__credits dt { text-align: left; }
  .aa-finale__reveal ol { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .aa-finale__montage { gap: 8px; }
  .aa-finale__newfile { width: min(70vw, 260px); }
}

@media (prefers-reduced-motion: reduce) {
  .aa-finale__pages li,
  .aa-finale__notebook[data-prop-state="dated"] .is-date,
  .aa-finale__cover[data-prop-state="claim"] .aa-finale__cover-claim,
  .aa-finale__montage-line,
  .aa-finale__credits,
  .aa-finale__card strong,
  .aa-finale__reveal li.is-flipped,
  .aa-finale__bubbles i,
  .aa-finale .stage-fx--stamp-verdict.is-reverse,
  .aa-finale__newfile {
    opacity: 1;
    transform: none;
    animation: none;
  }

  .aa-finale__cover[data-prop-state="strike"] .aa-finale__cover-strike,
  .aa-finale__cover[data-prop-state="claim"] .aa-finale__cover-strike {
    transform: scaleX(1);
    animation: none;
  }

  .aa-finale__newfile { transform: rotate(-4deg); }
  .aa-finale__newfile-paper { animation: none; transform: translateY(-38px); }
}

@media (forced-colors: active) {
  .aa-finale__credits,
  .aa-finale__reveal li,
  .aa-finale__newfile { border: 2px solid CanvasText; }
}

/* Briefing */

.briefing-screen {
  display: grid;
  grid-template-rows: auto 1fr auto;
  background:
    linear-gradient(135deg, rgb(105 57 52 / 0.22), transparent 40%),
    var(--hearing-navy-deep);
}

.briefing-layout {
  width: min(100% - 40px, 1240px);
  align-self: center;
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(280px, 0.8fr);
  gap: clamp(28px, 6vw, 84px);
  margin: 48px auto;
}

.briefing-docket {
  position: relative;
  padding: clamp(28px, 5vw, 58px);
  border: 2px solid #b6a98c;
  background:
    repeating-linear-gradient(0deg, transparent 0 31px, rgb(30 155 145 / 0.12) 32px 33px),
    var(--record-paper);
  color: var(--record-ink);
  box-shadow: var(--shadow-paper);
  clip-path: polygon(0 0, calc(100% - 28px) 0, 100% 28px, 100% 100%, 0 100%);
}

.briefing-docket::after {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  border-style: solid;
  border-width: 0 28px 28px 0;
  border-color: transparent var(--record-paper-muted) transparent transparent;
}

.briefing-docket__stamp {
  position: absolute;
  top: 30px;
  right: 36px;
  padding: 5px 12px;
  border: 3px double var(--question-coral-deep);
  color: var(--question-coral-deep);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.1em;
  transform: rotate(5deg);
}

.briefing-docket__eyebrow {
  margin-bottom: 12px;
  color: #526a6c;
  font-size: 0.85rem;
  font-weight: 900;
}

.briefing-docket blockquote {
  max-width: 22ch;
  margin: 0;
  color: var(--record-ink);
  font-size: clamp(1.8rem, 4vw, 3.4rem);
  font-weight: 900;
  line-height: 1.35;
  letter-spacing: -0.04em;
}

.briefing-docket__rule {
  width: 42%;
  height: 6px;
  margin: 32px 0;
  background: var(--question-coral);
  transform: rotate(-1deg);
}

.briefing-docket dl {
  display: grid;
  gap: 18px;
  margin-bottom: 0;
}

.briefing-docket dl > div {
  display: grid;
  grid-template-columns: 9ch minmax(0, 1fr);
  gap: 16px;
}

.briefing-docket dt {
  color: #526a6c;
  font-weight: 900;
}

.briefing-docket dd {
  margin: 0;
  font-weight: 800;
}

.briefing-principle {
  align-self: center;
}

.principle-mark {
  width: 78px;
  height: 78px;
  display: grid;
  place-items: center;
  margin-bottom: 22px;
  border: 3px solid var(--evidence-amber);
  color: var(--evidence-amber);
  font: 900 3rem/1 var(--font-data);
  transform: rotate(-5deg);
}

.briefing-principle h2 {
  max-width: 12ch;
  margin-bottom: 18px;
  font-size: clamp(1.8rem, 3.8vw, 3.4rem);
}

.briefing-principle > p {
  max-width: 40ch;
  color: var(--muted-blue);
}

.briefing-steps {
  display: grid;
  gap: 12px;
  margin: 30px 0 0;
  padding: 0;
  list-style: none;
}

.briefing-steps li {
  display: flex;
  align-items: center;
  gap: 14px;
  font-weight: 800;
}

.briefing-steps li span {
  width: 32px;
  height: 32px;
  display: grid;
  place-items: center;
  border: 1px solid var(--trace-teal-bright);
  color: var(--trace-teal-bright);
  font: 800 0.84rem/1 var(--font-data);
}

/* Progress */

.case-progress {
  min-width: 280px;
}

.case-progress__label {
  display: block;
  margin-bottom: 7px;
  color: var(--muted-blue);
  font-size: 0.84rem;
  font-weight: 800;
}

.case-progress__track {
  position: relative;
  width: 100%;
  height: 6px;
  background: var(--line-blue);
}

.case-progress__fill {
  position: absolute;
  inset: 0 auto 0 0;
  width: 100%;
  background: var(--trace-teal-bright);
  clip-path: inset(0 calc(100% - var(--progress)) 0 0);
  transition: clip-path 380ms cubic-bezier(0.2, 0.8, 0.2, 1);
}

.case-progress__node {
  position: absolute;
  top: 50%;
  left: var(--node);
  width: 13px;
  height: 13px;
  border: 3px solid var(--line-blue);
  background: var(--hearing-navy);
  transform: translate(-50%, -50%) rotate(45deg);
}

.case-progress__node.is-reached {
  border-color: var(--trace-teal-bright);
  background: var(--evidence-amber);
}

.case-progress--compact {
  width: min(42vw, 520px);
}

/* Investigation */

.investigation-screen {
  display: grid;
  grid-template-rows: auto minmax(0, 1fr);
  background: #050f18;
}

.investigation-screen .screen-header {
  z-index: 20;
  min-height: 68px;
  border-bottom-color: var(--trace-teal);
  background:
    linear-gradient(90deg, rgb(62 33 31 / 0.86), transparent 38%),
    rgb(8 24 39 / 0.96);
  box-shadow: 0 8px 24px rgb(0 0 0 / 0.3);
}

.location-stage {
  min-width: 0;
  min-height: calc(100dvh - 68px);
  position: relative;
  overflow: hidden;
  isolation: isolate;
  background: #07131f;
}

.location-art,
.location-stage__shade {
  position: absolute;
  inset: 0;
}

.location-art {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 48%;
  filter: saturate(0.92) contrast(1.03) brightness(0.92);
}

.location-stage__shade {
  z-index: 1;
  pointer-events: none;
  background:
    linear-gradient(90deg, rgb(4 12 20 / 0.32), transparent 36%),
    linear-gradient(0deg, rgb(4 12 20 / 0.84) 0, transparent 44%);
}

.location-stage[data-mode="talk"] .location-stage__shade,
.location-stage[data-mode="move"] .location-stage__shade {
  background:
    linear-gradient(90deg, rgb(4 12 20 / 0.82) 0 46%, transparent 72%),
    linear-gradient(0deg, rgb(4 12 20 / 0.76), transparent 48%);
}

.location-placard {
  position: absolute;
  top: 22px;
  left: 24px;
  z-index: 4;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 8px 14px;
  border: 1px solid rgb(244 241 232 / 0.44);
  background: rgb(8 24 39 / 0.82);
  box-shadow: 5px 7px 18px rgb(0 0 0 / 0.28);
}

.location-placard span {
  color: var(--trace-teal-bright);
  font: 800 0.84rem/1 var(--font-data);
}

.location-placard strong {
  color: var(--record-paper);
  font-size: 0.86rem;
}

.investigation-prompt {
  position: absolute;
  bottom: clamp(22px, 3vw, 42px);
  left: clamp(20px, 4vw, 60px);
  z-index: 5;
  width: min(46vw, 610px);
  padding: 20px 24px 22px;
  border: 2px solid rgb(244 241 232 / 0.62);
  background: rgb(6 20 32 / 0.92);
  box-shadow: 10px 12px 30px rgb(0 0 0 / 0.38);
  clip-path: polygon(0 0, calc(100% - 18px) 0, 100% 18px, 100% 100%, 0 100%);
}

.investigation-prompt > span {
  display: block;
  margin-bottom: 5px;
  color: var(--evidence-amber);
  font-size: 0.84rem;
  font-weight: 900;
}

.investigation-prompt > strong {
  display: block;
  color: var(--record-paper);
  font-size: clamp(1.55rem, 2.5vw, 2.45rem);
  line-height: 1.2;
}

.investigation-prompt p {
  max-width: 48ch;
  margin: 8px 0 0;
  color: var(--muted-blue);
  font-size: 0.92rem;
}

.investigation-prompt .investigation-next-step {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid rgb(105 222 209 / 0.42);
  color: var(--record-paper);
  font-weight: 800;
}

.investigation-next-step span {
  flex: 0 0 auto;
  color: var(--trace-teal-bright);
  font: 800 0.84rem/1 var(--font-data);
}

.investigation-command-menu {
  position: absolute;
  right: clamp(18px, 3.4vw, 52px);
  bottom: clamp(22px, 3vw, 42px);
  z-index: 6;
  width: min(40vw, 430px);
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  padding: 10px;
  border: 2px solid rgb(244 241 232 / 0.58);
  background: rgb(7 19 31 / 0.92);
  box-shadow: 10px 12px 30px rgb(0 0 0 / 0.4);
}

.investigation-command-menu button {
  min-height: 86px;
  display: grid;
  grid-template-columns: 42px minmax(0, 1fr);
  grid-template-rows: auto auto;
  align-content: center;
  column-gap: 10px;
  padding: 12px 14px;
  border: 1px solid var(--line-blue);
  background: var(--hearing-navy);
  color: var(--record-paper);
  text-align: left;
  box-shadow: 3px 4px 0 rgb(0 0 0 / 0.32);
}

.investigation-command-menu button > span {
  grid-row: 1 / 3;
  align-self: center;
  color: var(--evidence-amber);
  font: 900 1.8rem/1 var(--font-data);
  text-align: center;
}

.investigation-command-menu button strong {
  align-self: end;
  font-size: 1.08rem;
}

.investigation-command-menu button small {
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.investigation-mode-back {
  position: absolute;
  top: 22px;
  right: 24px;
  z-index: 9;
  min-height: 46px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 9px 14px;
  border: 1px solid rgb(244 241 232 / 0.56);
  background: rgb(8 24 39 / 0.88);
  color: var(--record-paper);
  font-weight: 900;
}

.investigation-mode-back span {
  color: var(--evidence-amber);
  font-size: 1.5rem;
  line-height: 1;
}

.examine-guide {
  position: absolute;
  top: 82px;
  right: 24px;
  z-index: 5;
  max-width: 310px;
  display: grid;
  gap: 2px;
  padding: 10px 13px;
  border: 1px solid var(--trace-teal-bright);
  background: rgb(6 20 32 / 0.84);
  color: var(--record-paper);
  text-align: right;
}

.examine-guide strong {
  color: var(--trace-teal-bright);
  font-size: 0.84rem;
}

.examine-guide span {
  font-size: 0.84rem;
}

.hotspot-layer {
  position: absolute;
  inset: 0;
  z-index: 3;
  cursor: none;
  touch-action: none;
}

.examine-cursor {
  position: absolute;
  top: var(--cursor-y, 50%);
  left: var(--cursor-x, 50%);
  width: 44px;
  height: 44px;
  border: 2px solid var(--record-paper);
  box-shadow:
    0 0 0 2px rgb(8 24 39 / 0.84),
    4px 6px 14px rgb(0 0 0 / 0.36);
  pointer-events: none;
  transform: translate(-50%, -50%);
  transition:
    width 100ms ease,
    height 100ms ease,
    border-color 100ms ease;
}

.examine-cursor::before,
.examine-cursor::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  background: var(--record-paper);
  transform: translate(-50%, -50%);
}

.examine-cursor::before {
  width: 2px;
  height: 58px;
}

.examine-cursor::after {
  width: 58px;
  height: 2px;
}

.hotspot-layer.is-reacting .examine-cursor {
  width: 58px;
  height: 58px;
  border-color: var(--evidence-amber);
}

.hotspot-layer.is-reacting .examine-cursor::before,
.hotspot-layer.is-reacting .examine-cursor::after {
  background: var(--evidence-amber);
}

.hotspot {
  position: absolute;
  top: var(--y);
  left: var(--x);
  width: max(clamp(104px, 10vw, 148px), var(--w, 0px));
  height: max(clamp(104px, 10vw, 148px), var(--h, 0px));
  padding: 0;
  border: 0;
  background: transparent;
  clip-path: circle(50% at 50% 50%);
  transform: translate(-50%, -50%);
}

/* 區域熱點：整件物品（如身高計、生長曲線板）都算命中範圍，取消圓形裁切。
   焦點指示與點熱點一致由準星承擔（點熱點的 outline 本來就被 clip-path 裁掉）。 */
.hotspot[data-scene-w] {
  clip-path: none;
}

/* 未收錄的區域熱點沒有物件輪廓可暗示（如 C5 客廳整面留白牆），
   靜止準星拉高可見度並緩慢脈動，玩家才找得到唯一的調查點。 */
.hotspot[data-scene-w]:not(.is-collected):not(.is-locked) {
  --reticle-rest-opacity: 0.62;
  --reticle-rest-animation: hotspot-scan-pulse 2600ms ease-in-out infinite;
}

.hotspot[data-scene-w]:focus-visible {
  outline: none;
}

.hotspot__reticle {
  z-index: 1;
}

.hotspot.is-locked {
  z-index: 0;
}
.hotspot:not(.is-locked) { z-index: 1; }

.hotspot__reticle {
  --reticle-scale: 0.72;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 64px;
  height: 64px;
  display: grid;
  place-items: center;
  border: 4px solid var(--evidence-amber);
  background:
    linear-gradient(var(--evidence-amber), var(--evidence-amber)) center / 2px 100% no-repeat,
    linear-gradient(90deg, var(--evidence-amber), var(--evidence-amber)) center / 100% 2px no-repeat,
    rgb(8 24 39 / 0.18);
  box-shadow:
    0 0 0 2px rgb(8 24 39 / 0.78),
    0 6px 18px rgb(0 0 0 / 0.42);
  /* 未靠近也保留淡準星：完全隱形會讓玩家找不到調查點而卡關（C5 客廳實測）。 */
  opacity: var(--reticle-rest-opacity, 0.34);
  animation: var(--reticle-rest-animation, none);
  transform: translate(-50%, -50%) scale(var(--reticle-scale)) rotate(45deg);
  transition:
    opacity 120ms ease,
    transform 180ms cubic-bezier(0.16, 1, 0.3, 1);
}

.hotspot__reticle::after {
  content: "";
  width: 10px;
  height: 10px;
  border: 2px solid var(--hearing-navy-deep);
  background: var(--question-coral);
  transform: rotate(45deg);
}

.hotspot:hover .hotspot__reticle,
.hotspot:focus-visible .hotspot__reticle {
  --reticle-scale: 1;
  opacity: 1;
  transform: translate(-50%, -50%) scale(var(--reticle-scale)) rotate(45deg);
  animation: hotspot-scan-pulse 1300ms ease-in-out 220ms infinite;
}

/* Amber scan-frame pulse once the reticle is revealed. */
@keyframes hotspot-scan-pulse {
  0%, 100% {
    box-shadow:
      0 0 0 2px rgb(8 24 39 / 0.78),
      0 6px 18px rgb(0 0 0 / 0.42);
    transform: translate(-50%, -50%) scale(var(--reticle-scale)) rotate(45deg);
  }

  50% {
    box-shadow:
      0 0 0 3px rgb(8 24 39 / 0.85),
      0 0 22px rgb(241 180 60 / 0.4),
      0 6px 18px rgb(0 0 0 / 0.42);
    transform: translate(-50%, -50%) scale(calc(var(--reticle-scale) * 1.07)) rotate(45deg);
  }
}

@media (hover: none), (pointer: coarse) {
  .examine-cursor {
    display: none;
  }

  .hotspot:not(.is-proximate):not(:focus-visible) .hotspot__reticle {
    --reticle-scale: 0.72;
    opacity: var(--reticle-rest-opacity, 0.3);
    transform: translate(-50%, -50%) scale(var(--reticle-scale)) rotate(45deg);
    animation: var(--reticle-rest-animation, none);
  }

  .hotspot.is-proximate .hotspot__reticle,
  .hotspot:focus-visible .hotspot__reticle {
    --reticle-scale: 0.9;
    opacity: 0.82;
    transform: translate(-50%, -50%) scale(var(--reticle-scale)) rotate(45deg);
    animation: hotspot-scan-pulse 1700ms ease-in-out infinite;
  }

  .hotspot.is-collected.is-proximate .hotspot__reticle,
  .hotspot.is-collected:focus-visible .hotspot__reticle {
    opacity: 0.46;
    animation: none;
  }
}

.hotspot.is-collected .hotspot__reticle {
  border-color: var(--trace-teal-bright);
  background:
    linear-gradient(var(--trace-teal-bright), var(--trace-teal-bright)) center / 2px 100% no-repeat,
    linear-gradient(90deg, var(--trace-teal-bright), var(--trace-teal-bright)) center / 100% 2px no-repeat,
    rgb(8 24 39 / 0.18);
}

.hotspot.is-collected .hotspot__reticle::after {
  background: var(--trace-teal);
}

.hotspot.is-locked .hotspot__reticle {
  border-color: var(--question-coral);
}

.investigation-mode-panel {
  position: absolute;
  top: 18%;
  left: clamp(20px, 4vw, 60px);
  z-index: 6;
  width: min(44vw, 520px);
  padding: 22px;
  border: 2px solid rgb(244 241 232 / 0.62);
  background: rgb(7 20 32 / 0.92);
  color: var(--record-paper);
  box-shadow: 12px 16px 34px rgb(0 0 0 / 0.4);
}

.investigation-mode-panel > header {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 18px;
  padding-bottom: 14px;
  border-bottom: 2px solid var(--evidence-amber);
}

.investigation-mode-panel > header span {
  color: var(--evidence-amber);
  font-size: 0.84rem;
  font-weight: 900;
}

.investigation-mode-panel > header h2 {
  margin: 0;
  font-size: clamp(1.5rem, 2.7vw, 2.35rem);
}

.talk-topic-list,
.move-destination-list {
  display: grid;
  gap: 8px;
  margin-top: 16px;
}

.talk-topic-list button,
.move-destination-list button {
  min-height: 66px;
  display: grid;
  grid-template-columns: 32px minmax(0, 1fr) auto;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border: 1px solid var(--line-blue);
  background: var(--hearing-navy);
  color: var(--record-paper);
  text-align: left;
}

.talk-topic-list button > span,
.move-destination-list button > span {
  color: var(--trace-teal-bright);
  font: 900 1rem/1 var(--font-data);
  text-align: center;
}

.talk-topic-list button strong,
.move-destination-list button strong {
  font-size: 0.96rem;
}

.talk-topic-list button i {
  color: var(--evidence-amber);
  font: 900 0.84rem/1 var(--font-data);
}

.move-destination-list button small {
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.move-destination-list .move-to-hearing {
  border-color: var(--evidence-amber);
  background: #6b3a31;
}

.scene-dialogue {
  position: absolute;
  right: clamp(18px, 4vw, 60px);
  bottom: clamp(18px, 3vw, 38px);
  left: clamp(18px, 4vw, 60px);
  z-index: 12;
  min-height: 156px;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  grid-template-rows: auto minmax(0, 1fr);
  column-gap: 24px;
  padding: 0 0 0 0;
  border: 3px solid var(--record-paper);
  background: rgb(7 20 32 / 0.96);
  color: var(--record-paper);
  box-shadow: 12px 16px 38px rgb(0 0 0 / 0.5);
  clip-path: polygon(0 0, calc(100% - 22px) 0, 100% 22px, 100% 100%, 0 100%);
}

.scene-dialogue header:not(.aa-nameplate) {
  grid-column: 1;
  display: flex;
  align-items: center;
  gap: 12px;
  width: fit-content;
  min-width: 210px;
  padding: 7px 18px;
  background: var(--trace-teal);
  color: #061c26;
}

.scene-dialogue header:not(.aa-nameplate) span {
  font-size: 0.84rem;
  font-weight: 800;
}

.scene-dialogue p {
  grid-column: 1;
  margin: 0;
  padding: 14px 20px 18px;
  font-size: clamp(20px, 1.2vw + 14px, 25px);
  font-weight: 700;
  line-height: 1.58;
}

.scene-dialogue > button {
  grid-column: 2;
  grid-row: 1 / 3;
  min-width: 108px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 16px;
  border-left: 1px solid var(--line-blue);
  background: var(--hearing-navy);
  color: var(--record-paper);
  font-weight: 900;
}

.scene-dialogue > button span {
  color: var(--evidence-amber);
  font-size: 1.5rem;
}

.typewriter-copy {
  display: grid;
}

.typewriter-copy > .typewriter-copy__visual {
  grid-area: 1 / 1;
  white-space: pre-wrap;
}

.typewriter-copy::before {
  grid-area: 1 / 1;
  visibility: hidden;
  white-space: pre-wrap;
  content: attr(data-typewriter-reserve);
}

[data-dialogue-typing="true"] .typewriter-copy__visual::after {
  display: inline-block;
  width: 0.46em;
  height: 0.86em;
  margin-left: 0.16em;
  background: var(--evidence-amber);
  box-shadow: 2px 2px 0 rgb(0 0 0 / 0.32);
  vertical-align: -0.06em;
  content: "";
  animation: typewriter-cursor-blink 720ms steps(1, end) infinite;
}

@keyframes typewriter-cursor-blink {
  50% { opacity: 0.2; }
}

/* Hearing */

.hearing-screen {
  height: 100dvh;
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  background: var(--hearing-navy-deep);
}

.hearing-stage {
  min-height: 0;
  position: relative;
  overflow: hidden;
  isolation: isolate;
  background: var(--chamber-mahogany-deep);
}

.hearing-stage::before {
  position: absolute;
  z-index: 1;
  inset: 0;
  background:
    repeating-conic-gradient(from 254deg at 72% 54%, transparent 0deg 1.5deg, rgb(241 180 60 / 0.07) 1.6deg 2.2deg),
    linear-gradient(90deg, rgb(8 24 39 / 0.9), transparent 43%, rgb(62 33 31 / 0.38));
  content: "";
  pointer-events: none;
}

.hearing-stage__image {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center center;
  filter: saturate(0.86) contrast(1.06);
  transition: filter 170ms ease;
}

.hearing-stage__vignette {
  position: absolute;
  z-index: 1;
  inset: 0;
  width: 100%;
  height: 100%;
  background:
    radial-gradient(ellipse 56% 62% at 66% 44%, transparent 0 44%, rgb(5 15 25 / 0.3) 82%, rgb(5 15 25 / 0.44) 100%),
    linear-gradient(0deg, rgb(5 15 25 / 0.78), transparent 40%),
    linear-gradient(90deg, rgb(5 15 25 / 0.25), transparent 48%);
  pointer-events: none;
}

.hearing-topbar {
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  z-index: 3;
  display: flex;
  align-items: start;
  justify-content: space-between;
  gap: 20px;
  padding: clamp(12px, 2.2vw, 28px);
}

.hearing-topbar__actions {
  display: flex;
  gap: 8px;
}

.hearing-context {
  position: absolute;
  top: 18%;
  left: 4%;
  z-index: 2;
  display: grid;
  gap: 5px;
  padding: 13px 16px;
  border-top: 3px solid var(--evidence-amber);
  background: rgb(8 24 39 / 0.82);
}

.hearing-context span {
  color: var(--trace-teal-bright);
  font-size: 0.84rem;
  font-weight: 900;
}

.hearing-context strong {
  font-size: clamp(1rem, 2vw, 1.5rem);
}

.player-desk {
  position: absolute;
  bottom: 3%;
  left: 3%;
  z-index: 2;
  width: min(38%, 480px);
  height: 100px;
  padding: 12px 16px;
  border: 3px solid #9a653f;
  background: rgb(8 24 39 / 0.94);
  box-shadow: 9px 12px 0 rgb(0 0 0 / 0.3);
  transform: perspective(600px) rotateX(7deg) rotateY(3deg);
}

.player-desk svg {
  width: 100%;
  height: 58px;
}

.player-desk path {
  fill: none;
  stroke: var(--trace-teal-bright);
  stroke-width: 5;
  stroke-linecap: round;
  stroke-dasharray: 10 9;
}

.player-desk circle {
  fill: var(--evidence-amber);
  stroke: var(--trace-teal-bright);
  stroke-width: 3;
}

.player-desk span {
  display: block;
  color: var(--muted-blue);
  font: 800 0.84rem/1 var(--font-data);
}

.testimony-panel {
  position: relative;
  z-index: 5;
  padding: 14px clamp(16px, 3.3vw, 52px) max(16px, env(safe-area-inset-bottom));
  border-top: 4px solid var(--evidence-amber);
  background:
    linear-gradient(90deg, rgb(105 57 52 / 0.38), transparent 30%),
    var(--hearing-navy);
  box-shadow: 0 -12px 32px rgb(0 0 0 / 0.34);
}

.testimony-panel__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
}

.testimony-panel__top h1 {
  width: fit-content;
  margin: -34px 0 0;
  padding: 8px 24px;
  border: 2px solid var(--evidence-amber);
  background: var(--trace-teal);
  color: #071d25;
  font-size: clamp(1rem, 2vw, 1.35rem);
  box-shadow: 4px 5px 0 rgb(0 0 0 / 0.3);
  clip-path: polygon(10px 0, calc(100% - 10px) 0, 100% 50%, calc(100% - 10px) 100%, 10px 100%, 0 50%);
}

.statement-track {
  display: flex;
  gap: 11px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.statement-track li {
  width: 28px;
  height: 28px;
  display: grid;
  place-items: center;
  border: 2px solid var(--line-blue);
  color: var(--muted-blue);
  font: 800 0.84rem/1 var(--font-data);
  transform: rotate(45deg);
}

.statement-track li > span {
  transform: rotate(-45deg);
}

.statement-track li.is-active {
  border-color: var(--evidence-amber);
  background: var(--chamber-mahogany);
  color: var(--record-paper);
}

.statement-track li.is-solved {
  border-color: var(--trace-teal-bright);
  background: var(--trace-teal);
  color: #071d25;
}

.testimony-feedback {
  max-width: 78ch;
  display: flex;
  gap: 12px;
  margin: 12px auto 0;
  padding: 8px 13px;
  border: 1px solid var(--line-blue);
  background: #0c2235;
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.testimony-feedback span {
  flex: 0 0 auto;
  color: var(--trace-teal-bright);
  font-weight: 900;
}

.testimony-feedback p {
  margin: 0;
}

.statement-row {
  display: grid;
  grid-template-columns: 52px minmax(0, 1fr) 52px;
  align-items: center;
  gap: 16px;
  margin-top: 10px;
}

.statement-nav {
  width: 52px;
  height: 52px;
  border: 2px solid #976b3d;
  background: #13273b;
  color: var(--evidence-amber-soft);
  font-size: 2rem;
  line-height: 1;
  box-shadow: 3px 4px 0 rgb(0 0 0 / 0.3);
}

.statement-text {
  max-width: 42ch;
  margin: 0 auto;
  color: var(--record-paper);
  font-size: clamp(1.25rem, 2.4vw, 2rem);
  font-weight: 900;
  line-height: 1.48;
  text-align: center;
}

.statement-text mark {
  padding: 0 0.08em;
  background: linear-gradient(transparent 62%, var(--question-coral) 62%);
  color: inherit;
}

.statement-text.is-solved {
  color: #d7f8f2;
}

.statement-meta {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  margin: 6px auto 11px;
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.statement-meta span:first-child {
  color: var(--trace-teal-bright);
  font-family: var(--font-data);
  font-weight: 900;
}

.hearing-actions {
  width: min(100%, 840px);
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
  margin-inline: auto;
}

.hearing-action {
  min-height: 60px;
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr);
  grid-template-rows: auto auto;
  align-items: center;
  column-gap: 12px;
  padding: 10px 18px;
  border: 2px solid rgb(255 255 255 / 0.2);
  color: var(--record-paper);
  text-align: left;
  box-shadow: 5px 6px 0 rgb(0 0 0 / 0.35);
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
}

.hearing-action > span {
  grid-row: 1 / 3;
  width: 42px;
  height: 42px;
  display: grid;
  place-items: center;
  border: 2px solid currentColor;
  font: 900 1.35rem/1 var(--font-data);
}

.hearing-action strong {
  align-self: end;
  font-size: 1.1rem;
}

.hearing-action small {
  align-self: start;
  opacity: 0.8;
}

.hearing-action--press {
  background: var(--question-coral);
}

.hearing-action--present {
  background: var(--evidence-amber);
  color: #172536;
}

/* Record dialog */

.record-dialog {
  width: min(1180px, calc(100vw - 36px));
  height: min(820px, calc(100dvh - 36px));
  max-width: none;
  max-height: none;
  margin: auto;
  padding: 0;
  border: 0;
  overflow: hidden;
  background: transparent;
  color: var(--record-ink);
}

.record-dialog[open] {
  position: fixed;
  z-index: 900;
  inset: 0;
  box-shadow: 0 0 0 100vmax rgb(3 13 22 / 0.84);
}

.record-dialog::backdrop {
  background: rgb(3 13 22 / 0.84);
}

.record-book {
  width: 100%;
  height: 100%;
  position: relative;
  display: grid;
  grid-template-rows: auto minmax(0, 1fr) auto;
  border: 7px solid #5e3529;
  background:
    linear-gradient(90deg, rgb(105 57 52 / 0.1), transparent 22%),
    var(--record-paper);
  box-shadow: 18px 24px 50px rgb(0 0 0 / 0.45);
}

.record-book::after {
  content: "";
  position: absolute;
  inset: 8px;
  border: 1px solid #b5a889;
  pointer-events: none;
}

.record-book__header {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  padding: 18px 24px 15px;
  border-bottom: 3px double var(--record-ink);
}

.record-book__header span {
  color: #607579;
  font: 800 0.84rem/1.2 var(--font-data);
  letter-spacing: 0.1em;
}

.record-book__header h2 {
  margin: 2px 0 0;
  font-size: 1.7rem;
}

.record-book__swipe-hint {
  display: none;
}

.record-book__body {
  min-height: 0;
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: minmax(250px, 0.78fr) minmax(0, 1.5fr);
  overflow: hidden;
}

.record-index {
  min-height: 0;
  overflow-y: auto;
  border-right: 2px solid #b8ad96;
  background: #e9e2d3;
}

.record-tab {
  width: 100%;
  min-height: 72px;
  display: grid;
  grid-template-columns: 50px minmax(0, 1fr) auto;
  align-items: center;
  gap: 12px;
  padding: 11px 14px;
  border-bottom: 1px solid #bcb19c;
  background: transparent;
  color: var(--record-ink);
  text-align: left;
}

.record-tab__glyph {
  width: 48px;
  height: 48px;
  display: grid;
  place-items: center;
  border: 2px solid #6f7e7d;
  background: var(--record-paper);
  color: var(--hearing-navy);
  font-weight: 900;
}

.record-tab small,
.record-tab strong {
  display: block;
}

.record-tab small {
  color: #667c7e;
  font: 700 0.84rem/1.3 var(--font-data);
}

.record-tab strong {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.record-tab > i {
  color: var(--question-coral-deep);
  font-size: 0.84rem;
  font-style: normal;
  font-weight: 900;
}

.record-tab.is-active {
  background: var(--record-paper);
}

.record-tab.is-selected {
  box-shadow: inset 6px 0 0 var(--question-coral);
}

.record-tab.is-selected .record-tab__glyph {
  border-color: var(--question-coral);
  background: var(--evidence-amber-soft);
}

/* 證物圖示：有生成圖片時以圖片取代 glyph 字符（見 visual-assets.mjs 的 EVIDENCE_IMAGE_ASSETS）。 */
.evidence-visual.has-image {
  padding: 0;
  overflow: hidden;
}

.evidence-visual img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.evidence-sheet {
  min-width: 0;
  min-height: 0;
  overflow-y: auto;
  padding: clamp(22px, 4vw, 46px);
}

.evidence-sheet__meta {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 20px;
  color: #637777;
  font: 800 0.84rem/1.4 var(--font-data);
}

.evidence-sheet__visual {
  display: grid;
  grid-template-columns: clamp(84px, 10vw, 116px) minmax(0, 1fr);
  align-items: center;
  gap: clamp(14px, 2.5vw, 26px);
  padding: clamp(14px, 2.5vw, 24px);
  border: 2px solid #7b887f;
  background:
    linear-gradient(90deg, rgb(30 155 145 / 0.14) 1px, transparent 1px) 0 0 / 24px 24px,
    linear-gradient(rgb(30 155 145 / 0.14) 1px, transparent 1px) 0 0 / 24px 24px,
    #f8f4e9;
  box-shadow: var(--shadow-paper);
  transform: rotate(-0.45deg);
}

.evidence-sheet__visual > span {
  aspect-ratio: 1;
  display: grid;
  place-items: center;
  border: 3px solid var(--trace-teal);
  color: var(--trace-teal);
  font-size: clamp(2rem, 4.5vw, 3.2rem);
  font-weight: 900;
}

.evidence-sheet__visual-text {
  min-width: 0;
}

.evidence-sheet__visual small,
.evidence-sheet__visual strong {
  display: block;
}

.evidence-sheet__visual small {
  margin-bottom: 6px;
  color: #607579;
  font: 800 0.84rem/1.4 var(--font-data);
}

.evidence-sheet__visual strong {
  font-size: clamp(1.3rem, 2.4vw, 1.9rem);
  line-height: 1.25;
}

.evidence-sheet__summary {
  max-width: 68ch;
  margin: 26px 0;
  font-weight: 800;
}

.evidence-limits {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px;
  margin: 0;
}

.evidence-limits > div {
  padding: 18px;
  border-top: 5px solid var(--trace-teal);
  background: #e2ece5;
}

.evidence-limits > div:last-child {
  border-top-color: var(--question-coral);
  background: #ede1d7;
}

.evidence-limits dt {
  margin-bottom: 8px;
  color: #50696b;
  font-size: 0.84rem;
  font-weight: 900;
}

.evidence-limits dd {
  margin: 0;
  font-weight: 800;
}

.record-book__footer {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  padding: 14px 22px;
  border-top: 2px solid #b8ad96;
  background: #e9e2d3;
}

.record-book__footer > p {
  max-width: 68ch;
  margin: 0;
  color: #536a6d;
  font-size: 0.84rem;
  font-weight: 800;
}

.record-selection-note {
  display: grid;
}

.record-selection-note strong {
  color: var(--question-coral-deep);
}

.record-selection-note span {
  color: #5b7071;
  font-size: 0.84rem;
}

.record-feedback {
  position: absolute;
  right: 20px;
  bottom: 80px;
  z-index: 5;
  width: min(520px, calc(100% - 40px));
  padding: 14px 16px;
  border: 2px solid var(--evidence-amber);
  background: var(--hearing-navy);
  color: var(--record-paper);
  box-shadow: 8px 11px 24px rgb(0 0 0 / 0.28);
}

.record-feedback.is-wrong {
  border-color: var(--question-coral);
}

.record-feedback strong {
  color: var(--evidence-amber-soft);
}

.record-feedback p {
  margin: 4px 0 0;
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.record-empty {
  display: grid;
  place-content: center;
  gap: 8px;
  padding: 40px;
  text-align: center;
}

.record-empty strong {
  font-size: 1.5rem;
}

.record-empty p {
  color: #5e7274;
}

/* Impact */

.gsap-motion .impact-overlay *,
.gsap-motion .impact-overlay,
.gsap-motion .impact-overlay[data-impact-grade] * {
  animation: none !important;
}

.impact-overlay {
  position: fixed;
  inset: 0;
  z-index: 100;
  display: grid;
  place-items: center;
  overflow: hidden;
  padding: 24px;
  background: linear-gradient(115deg, var(--chamber-mahogany-deep), var(--hearing-navy-deep) 58%);
}

.impact-speedlines {
  position: absolute;
  inset: -30%;
  opacity: 0.46;
  /* P3：速度線改粗細不均、高對比雙層（粗線稀疏＋細線補隙）。 */
  background:
    repeating-conic-gradient(from 8deg at 50% 50%, transparent 0deg 5.2deg, rgb(244 241 232 / 0.52) 5.5deg 6.9deg, transparent 7.2deg 11.4deg),
    repeating-conic-gradient(from 2deg at 50% 50%, transparent 0deg 2.7deg, rgb(244 241 232 / 0.26) 2.9deg 3.2deg);
  animation: impact-lines-in 520ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-trace {
  position: absolute;
  inset: 12% -5% auto;
  width: 110%;
  height: 55%;
  overflow: visible;
}

.impact-trace path {
  fill: none;
  stroke: var(--trace-teal-bright);
  stroke-width: 18;
  stroke-linecap: square;
  stroke-dasharray: 1600;
  stroke-dashoffset: 1600;
  filter: drop-shadow(9px 11px 0 rgb(0 0 0 / 0.3));
  animation: trace-strike 560ms cubic-bezier(0.16, 1, 0.3, 1) 90ms forwards;
}

.impact-witness {
  position: absolute;
  inset: 0;
  z-index: 1;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 42% center;
  opacity: 0.16;
  filter: saturate(0.62) contrast(1.08) brightness(0.72);
  mask-image: linear-gradient(90deg, #000 0 18%, rgb(0 0 0 / 0.58) 48%, transparent 82%);
  pointer-events: none;
}

.impact-overlay[data-impact-grade="minor"] .impact-speedlines {
  opacity: 0.3;
  animation: impact-minor-lines 320ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-overlay[data-impact-grade="minor"] .impact-trace {
  inset: 25% 9% auto;
  width: 82%;
  height: 42%;
}

.impact-overlay[data-impact-grade="minor"] .impact-trace path {
  stroke-width: 13;
  animation: trace-strike 360ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

.impact-overlay[data-impact-grade="minor"] .impact-copy {
  animation: impact-minor-settle 340ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-overlay[data-impact-grade="minor"] .impact-copy h2 {
  font-size: clamp(3rem, 8vw, 5rem);
}

.impact-overlay[data-impact-grade="minor"] .impact-witness {
  animation: impact-witness-minor 340ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-overlay[data-impact-grade="major"] .impact-speedlines {
  opacity: 0.58;
  animation: impact-lines-in 640ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-overlay[data-impact-grade="major"] .impact-trace path {
  stroke-width: 24;
  stroke-dashoffset: 0;
  transform-box: fill-box;
  transform-origin: center;
  animation: impact-gate-slash 620ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-overlay[data-impact-grade="major"] .impact-copy {
  animation: impact-major-copy 620ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-overlay[data-impact-grade="major"] .impact-witness {
  opacity: 0.24;
  animation: impact-witness-major 640ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-claim-track,
.impact-forge-transfer {
  position: absolute;
  left: 50%;
  z-index: 2;
  pointer-events: none;
  transform: translateX(-50%);
}

.impact-claim-track {
  --impact-enter-transform: translate(-50%, -18px) scaleX(0.92);
  --impact-rest-transform: translate(-50%, 0) scaleX(1);
  top: clamp(54px, 12vh, 118px);
  width: min(86vw, 920px);
  color: var(--record-paper);
  animation: impact-gate-enter 420ms cubic-bezier(0.16, 1, 0.3, 1) 40ms both;
}

.impact-claim-track__label {
  display: block;
  width: fit-content;
  padding: 5px 10px;
  border: 1px solid var(--evidence-amber-soft);
  background: var(--hearing-navy);
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.12em;
}

.impact-claim-track__rail {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 56px minmax(0, 1fr);
  min-height: 64px;
  border: 2px solid var(--record-paper);
  background: linear-gradient(90deg, rgb(17 43 69 / 0.96), rgb(105 57 52 / 0.96));
  box-shadow: 8px 9px 0 rgb(0 0 0 / 0.34);
}

.impact-claim-track__rail > span:not(.impact-claim-track__gap) {
  display: grid;
  place-items: center;
  min-width: 0;
  padding: 10px 42px;
  font-weight: 900;
  text-align: center;
}

.impact-claim-track__rail > span:first-child {
  border-right: 0;
}

.impact-claim-track__gap {
  display: grid;
  place-items: center;
}
.disconnected-link {
  width: 48px;
  height: 48px;
  stroke: var(--record-paper);
  stroke-width: 4;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.disconnected-link__cut {
  stroke: var(--question-coral);
}

.impact-claim-track__stamp,
.impact-forge-transfer__stamp {
  --impact-stamp-angle: -7deg;
  --impact-stamp-entry-angle: -14deg;
  --impact-stamp-entry-scale: 1.28;
  padding: 7px 13px;
  border: 4px double var(--question-coral);
  background: var(--record-paper);
  color: var(--question-coral-deep);
  font-family: var(--font-data);
  letter-spacing: 0.08em;
}

.impact-claim-track__stamp {
  position: absolute;
  top: -4px;
  right: 8px;
  padding-inline: 16px;
  font-size: clamp(1rem, 2.2vw, 1.45rem);
  transform: rotate(-7deg);
  animation: impact-gate-stamp 300ms cubic-bezier(0.16, 1, 0.3, 1) 360ms both;
}

.impact-overlay[data-impact-grade="forge"] .impact-speedlines {
  --impact-lines-opacity: 0.38;
  opacity: 0.38;
  animation: impact-lines-in 420ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-overlay[data-impact-grade="forge"] .impact-trace path {
  stroke: var(--evidence-amber-soft);
  stroke-dashoffset: 0;
  transform-box: fill-box;
  transform-origin: center;
  animation: impact-gate-slash 460ms cubic-bezier(0.16, 1, 0.3, 1) 20ms both;
}

.impact-overlay[data-impact-grade="forge"] .impact-witness {
  animation: impact-witness-minor 340ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-overlay[data-impact-grade="forge"] .impact-copy {
  --impact-enter-transform: translateY(16px) rotate(-2deg);
  --impact-rest-transform: translateY(0) rotate(-2deg);
  animation: impact-gate-enter 320ms cubic-bezier(0.16, 1, 0.3, 1) 180ms both;
}

.impact-forge-transfer {
  --forge-shift: clamp(125px, 44vw, 380px);
  top: clamp(48px, 10vh, 96px);
  width: min(82vw, 760px);
  height: 180px;
  color: var(--record-ink);
}

.impact-forge-transfer__card {
  position: absolute;
  top: 38px;
  left: 2%;
  z-index: 2;
  display: grid;
  width: min(290px, 52%);
  min-height: 116px;
  align-content: center;
  gap: 5px;
  padding: 14px 18px;
  border: 2px solid var(--evidence-amber);
  background: var(--record-paper);
  box-shadow: 7px 8px 0 rgb(0 0 0 / 0.36);
  opacity: 0.92;
  transform: translateX(var(--forge-shift)) rotate(-3deg) scale(0.72);
  transform-origin: center;
  animation: impact-forge-card 520ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.impact-forge-transfer__card span,
.impact-forge-transfer__card small,
.impact-forge-transfer__book span {
  font-family: var(--font-data);
  font-weight: 900;
  letter-spacing: 0.08em;
}

.impact-forge-transfer__card span {
  color: var(--question-coral-deep);
  font-size: 0.84rem;
}

.impact-forge-transfer__card strong {
  font-size: clamp(1rem, 2vw, 1.3rem);
}

.impact-forge-transfer__card small {
  color: #425669;
  font-size: 0.84rem;
}

.impact-forge-transfer__stamp {
  --impact-stamp-angle: -8deg;
  --impact-stamp-entry-angle: -15deg;
  --impact-stamp-entry-scale: 1.35;
  position: absolute;
  top: 62px;
  left: 39%;
  z-index: 4;
  font-size: clamp(0.95rem, 2vw, 1.3rem);
  letter-spacing: 0.1em;
  transform: rotate(-8deg);
  animation: impact-gate-stamp 220ms cubic-bezier(0.16, 1, 0.3, 1) 180ms both;
}

.impact-forge-transfer__book {
  --impact-enter-transform: translateX(22px);
  --impact-rest-transform: translateX(0);
  position: absolute;
  top: 20px;
  right: 0;
  z-index: 1;
  display: grid;
  width: 34%;
  min-width: 176px;
  height: 146px;
  place-content: center;
  gap: 12px;
  border: 3px solid var(--evidence-amber-soft);
  background: var(--hearing-navy);
  color: var(--record-paper);
  box-shadow: 9px 10px 0 rgb(0 0 0 / 0.38);
  transform: translateX(0);
  animation: impact-gate-enter 300ms cubic-bezier(0.16, 1, 0.3, 1) 100ms both;
}

.impact-forge-transfer__book i {
  display: block;
  width: 120px;
  height: 12px;
  border: 2px solid var(--evidence-amber);
  background: var(--hearing-navy-deep);
  box-shadow: inset 0 3px 0 rgb(0 0 0 / 0.35);
}

.impact-copy {
  position: relative;
  z-index: 2;
  width: min(100%, 1040px);
  text-align: center;
  transform: rotate(-2deg);
}

.impact-copy > p {
  margin-bottom: 6px;
  color: var(--evidence-amber-soft);
  font-weight: 900;
  letter-spacing: 0.09em;
}

.impact-copy h2 {
  margin-bottom: 18px;
  color: var(--record-paper);
  font-size: clamp(3.4rem, 10vw, 6rem);
  line-height: 0.92;
  text-shadow:
    7px 8px 0 var(--question-coral-deep),
    13px 15px 0 rgb(0 0 0 / 0.32);
}

.impact-copy > strong {
  display: block;
  width: fit-content;
  max-width: 100%;
  margin: 0 auto 14px;
  padding: 7px 13px;
  background: var(--evidence-amber);
  color: var(--record-ink);
}

.impact-copy > span {
  display: block;
  max-width: 60ch;
  margin-inline: auto;
  color: var(--record-paper);
  font-size: clamp(1rem, 2vw, 1.3rem);
  font-weight: 800;
}

.impact-continue {
  position: absolute;
  right: clamp(18px, 5vw, 70px);
  bottom: clamp(18px, 5vw, 54px);
  z-index: 3;
  min-height: 52px;
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 12px 20px;
  border: 2px solid var(--evidence-amber-soft);
  background: var(--hearing-navy);
  color: var(--record-paper);
  font-weight: 900;
  box-shadow: 5px 6px 0 rgb(0 0 0 / 0.4);
}

/* P3 爆字卡：Reggae One 超粗斜切、紙張色字面、斜切底版、深藍描邊、硬陰影。
   純裝飾層（press burst 的 aria-live 字除外），動畫只寫 transform／opacity。 */
.burst-card {
  position: relative;
  z-index: 3;
  display: inline-grid;
  place-items: center;
  padding: 0.12em 0.5em;
  pointer-events: none;
}

.burst-card__plate {
  position: absolute;
  inset: 6% -4%;
  z-index: -1;
  display: block;
  border: 4px solid var(--hearing-navy-deep);
  background: var(--question-coral);
  box-shadow: 10px 12px 0 rgb(0 0 0 / 0.42);
  transform: skewX(-9deg) rotate(-1.5deg);
}

.burst-card--amber .burst-card__plate {
  background: var(--evidence-amber);
}

.burst-card__word {
  margin: 0;
  color: var(--record-paper);
  font: 900 clamp(3.2rem, 9vw, 5.4rem)/0.95 var(--font-burst);
  font-style: normal;
  letter-spacing: 0.04em;
  transform: skewX(-6deg);
  -webkit-text-stroke: 2.5px var(--hearing-navy-deep);
  paint-order: stroke fill;
  text-shadow: 6px 6px 0 rgb(0 0 0 / 0.4);
  white-space: nowrap;
}

.impact-copy .impact-burst {
  margin-bottom: clamp(10px, 2.5vh, 26px);
  transform: rotate(-3deg);
}

/* P3 FlashController 白閃層：上限 rgba(244,241,232,0.5)／120ms，一律經 controller 排程。 */
.flash-veil {
  position: fixed;
  inset: 0;
  z-index: 130;
  pointer-events: none;
  background: #f4f1e8;
  opacity: 0;
}

/* P3 出示證物拍上卡：translateY＋微旋轉定格＋琥珀框閃一次。 */
.present-slam {
  position: fixed;
  inset: 0;
  z-index: 120;
  display: grid;
  place-items: center;
  pointer-events: none;
}

.present-slam { background: rgb(3 11 18 / 0.76); }

.present-slam__card {
  position: relative;
  display: grid;
  min-width: min(74vw, 320px);
  justify-items: center;
  gap: 6px;
  padding: 20px 26px 16px;
  border: 3px solid var(--record-ink);
  background: var(--record-paper);
  color: var(--record-ink);
  box-shadow: 9px 10px 0 rgb(0 0 0 / 0.42);
  transform: rotate(-3deg);
}

.present-slam__card strong {
  font-size: clamp(1.1rem, 2.4vw, 1.4rem);
  font-weight: 900;
}

.present-slam__card small {
  color: var(--question-coral-deep);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.14em;
}

.present-slam__glyph {
  width: clamp(64px, 12vw, 92px);
  height: auto;
}

.present-slam__frame {
  position: absolute;
  inset: -7px;
  display: block;
  border: 5px solid var(--evidence-amber);
  opacity: 0;
  pointer-events: none;
}

/* P3 畫面轉場儀式：deep-navy wipe＋「聽證開始」字卡；調查地點卷宗翻頁。 */
.surface-ritual {
  position: fixed;
  inset: 0;
  z-index: 110;
  overflow: hidden;
  pointer-events: none;
}

.surface-ritual--dossier {
  perspective: 1400px;
}

.surface-ritual__wipe {
  position: absolute;
  inset: 0;
  display: block;
  background: linear-gradient(115deg, var(--hearing-navy-deep) 0 58%, var(--chamber-mahogany-deep));
  transform: scaleX(0);
}

.surface-ritual__card {
  position: absolute;
  top: 50%;
  left: 50%;
  padding: 16px clamp(26px, 6vw, 44px);
  border: 3px solid var(--record-paper);
  background: var(--hearing-navy);
  color: var(--record-paper);
  box-shadow: 9px 10px 0 rgb(0 0 0 / 0.45), inset 0 0 0 2px var(--hearing-navy), inset 0 0 0 4px rgb(244 241 232 / 0.4);
  font-family: var(--font-title);
  font-size: clamp(1.9rem, 5vw, 3rem);
  font-weight: 900;
  letter-spacing: 0.22em;
  text-indent: 0.22em;
  white-space: nowrap;
  /* 置中由 GSAP xPercent/yPercent 全權持有（CSS 百分比 translate 會與 GSAP 疊加）。 */
  opacity: 0;
}

.surface-ritual__page {
  position: absolute;
  inset: 0;
  display: block;
  background:
    linear-gradient(90deg, var(--chamber-mahogany-deep) 0 14px, rgb(230 82 75 / 0.5) 14px 16px, transparent 16px),
    linear-gradient(90deg, rgb(0 0 0 / 0.16), transparent 22%),
    repeating-linear-gradient(0deg, transparent 0 34px, rgb(17 43 69 / 0.06) 34px 35px),
    var(--record-paper);
  box-shadow: 14px 0 26px rgb(0 0 0 / 0.36);
}

@keyframes impact-lines-in {
  from {
    opacity: 0;
    transform: scale(0.72);
  }
  to {
    opacity: var(--impact-lines-opacity, 0.46);
    transform: scale(1);
  }
}

@keyframes trace-strike {
  to {
    stroke-dashoffset: 0;
  }
}

@keyframes impact-minor-lines {
  from {
    opacity: 0;
    transform: scale(0.9);
  }
  to {
    opacity: 0.3;
    transform: scale(1);
  }
}

@keyframes impact-minor-settle {
  from {
    opacity: 0;
    transform: translateY(18px) rotate(-1deg) scale(1.035);
  }
  to {
    opacity: 1;
    transform: translateY(0) rotate(-2deg) scale(1);
  }
}

@keyframes impact-gate-slash {
  from {
    opacity: 0;
    transform: translate(-4%, 9%) scale(0.86);
  }
  to {
    opacity: 1;
    transform: translate(0, 0) scale(1);
  }
}

@keyframes impact-major-copy {
  from {
    opacity: 0;
    transform: translateX(34px) rotate(-4deg) scale(1.1);
  }
  to {
    opacity: 1;
    transform: translateX(0) rotate(-2deg) scale(1);
  }
}

@keyframes impact-witness-minor {
  0% { transform: translateX(-18px) rotate(-0.7deg); }
  42% { transform: translateX(7px) rotate(0.4deg); }
  100% { transform: translateX(0) rotate(0); }
}

@keyframes impact-witness-major {
  0%, 100% { transform: translateX(0) rotate(0); }
  18% { transform: translateX(-18px) rotate(-1.3deg); }
  35% { transform: translateX(13px) rotate(0.8deg); }
  54% { transform: translateX(-8px) rotate(-0.5deg); }
  72% { transform: translateX(4px) rotate(0.25deg); }
}

@keyframes impact-gate-enter {
  from {
    opacity: 0;
    transform: var(--impact-enter-transform);
  }
  to {
    opacity: 1;
    transform: var(--impact-rest-transform);
  }
}



@keyframes impact-gate-stamp {
  from {
    opacity: 0;
    transform: translateY(-18px) rotate(var(--impact-stamp-entry-angle)) scale(var(--impact-stamp-entry-scale));
  }
  to {
    opacity: 1;
    transform: translateY(0) rotate(var(--impact-stamp-angle)) scale(1);
  }
}

@keyframes impact-forge-card {
  0%, 34% {
    opacity: 1;
    transform: translateX(0) rotate(2deg) scale(1);
  }
  100% {
    opacity: 0.92;
    transform: translateX(var(--forge-shift)) rotate(-3deg) scale(0.72);
  }
}

/* Calibration */

.calibration-screen,
.conclusion-screen {
  display: grid;
  grid-template-rows: auto auto minmax(0, 1fr) auto;
}

.calibration-intro,
.conclusion-intro {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 36px;
  padding: 30px clamp(18px, 4vw, 58px);
  border-bottom: 1px solid var(--line-blue);
  background: #0d2234;
}

.calibration-intro > div,
.conclusion-intro {
  min-width: 0;
}

.calibration-intro span,
.conclusion-intro > span {
  color: var(--trace-teal-bright);
  font: 800 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.1em;
}

.calibration-intro h2,
.conclusion-intro h2 {
  margin: 6px 0 0;
  font-size: clamp(1.6rem, 3.5vw, 3rem);
}

.calibration-intro > p,
.conclusion-intro > p {
  max-width: 52ch;
  margin: 0;
  color: var(--muted-blue);
}

.calibration-layout {
  min-height: 0;
  display: grid;
  grid-template-columns: minmax(0, 0.95fr) minmax(420px, 1.05fr);
}

.curve-board {
  min-width: 0;
  padding: clamp(18px, 3vw, 38px);
  border-right: 1px solid var(--line-blue);
  background: #0b1e2e;
}

.curve-board__heading {
  display: flex;
  justify-content: space-between;
  gap: 18px;
  margin-bottom: 16px;
}

.curve-board__heading strong {
  font-size: 1.2rem;
}

.curve-board__heading span {
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.calibration-chart {
  width: 100%;
  min-height: 340px;
  border: 2px solid var(--line-blue);
  background: var(--hearing-navy);
}

.chart-grid line {
  stroke: #32516a;
  stroke-width: 1;
}

.chart-axis-label {
  fill: var(--muted-blue);
  font: 700 13px var(--font-data);
}

.chart-main-path {
  fill: none;
  stroke: var(--trace-teal-bright);
  stroke-width: 6;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.chart-point circle {
  fill: var(--hearing-navy);
  stroke: var(--muted-blue);
  stroke-width: 4;
}

.chart-point text {
  fill: var(--muted-blue);
  font: 700 13px var(--font-data);
}

.chart-point--comparable circle {
  fill: var(--trace-teal);
  stroke: var(--trace-teal-bright);
}

.chart-point--reference circle {
  fill: var(--evidence-amber);
  stroke: var(--record-paper);
  stroke-dasharray: 3 2;
}

.chart-point--exclude circle {
  fill: var(--question-coral);
  stroke: var(--record-paper);
}

.curve-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 14px 24px;
  margin-top: 14px;
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.curve-legend span {
  display: inline-flex;
  align-items: center;
  gap: 7px;
}

.legend-dot {
  width: 12px;
  height: 12px;
  display: inline-block;
  border: 2px solid var(--record-paper);
}

.legend-dot--comparable {
  background: var(--trace-teal);
}

.legend-dot--reference {
  background: var(--evidence-amber);
}

.legend-dot--exclude {
  background: var(--question-coral);
}

.record-calibration {
  min-height: 0;
  overflow-y: auto;
  background: var(--record-paper);
  color: var(--record-ink);
}

.calibration-row {
  padding: 20px clamp(18px, 3vw, 32px);
  border-bottom: 1px solid #b8ad96;
}

.calibration-row.has-error {
  outline: 2px solid var(--question-coral);
  outline-offset: -2px;
  background: #f2e4dd;
}

.calibration-row__record {
  display: grid;
  grid-template-columns: 12ch minmax(100px, 0.5fr) minmax(0, 1fr);
  align-items: baseline;
  gap: 14px;
}

.calibration-row__record > span {
  color: #5f7777;
  font: 800 0.84rem/1.4 var(--font-data);
}

.calibration-row__record > strong {
  font-size: 1.05rem;
}

.calibration-row__record > small {
  color: #556b6d;
}

.decision-control {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 7px;
  margin-top: 13px;
}

.decision-control button {
  min-height: 44px;
  padding: 8px;
  border: 2px solid #8d958b;
  background: transparent;
  color: var(--record-ink);
  font-weight: 900;
}

.decision-control button.is-selected {
  border-color: var(--trace-teal);
  background: var(--trace-teal);
  color: #fff;
}

.row-error {
  margin: 8px 0 0;
  color: #8d302b;
  font-size: 0.84rem;
  font-weight: 900;
}

/* Conclusion */

.conclusion-intro {
  align-items: start;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) minmax(260px, 0.6fr);
}

.conclusion-intro > span {
  padding-top: 7px;
}

.conclusion-intro h2 {
  margin: 0;
}

.conclusion-binder {
  min-height: 0;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  overflow-y: auto;
  background:
    linear-gradient(90deg, transparent 33.2%, #b5aa92 33.3% 33.45%, transparent 33.55% 66.4%, #b5aa92 66.5% 66.65%, transparent 66.75%),
    var(--record-paper);
  color: var(--record-ink);
}

.conclusion-section {
  min-width: 0;
  padding: clamp(22px, 3.5vw, 42px);
}

.conclusion-section.has-error {
  background: rgb(230 82 75 / 0.09);
}

.conclusion-section header {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 22px;
}

.conclusion-section header > span {
  width: 36px;
  height: 36px;
  display: grid;
  place-items: center;
  background: var(--hearing-navy);
  color: var(--record-paper);
  font: 900 0.84rem/1 var(--font-data);
  clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
}

.conclusion-section h3 {
  margin: 0;
  font-size: clamp(1.25rem, 2vw, 1.7rem);
}

.conclusion-options {
  display: grid;
  gap: 12px;
}

.conclusion-options button {
  min-height: 78px;
  display: grid;
  grid-template-columns: 30px minmax(0, 1fr);
  align-items: start;
  gap: 10px;
  padding: 14px;
  border: 2px solid #a59a84;
  background: transparent;
  color: var(--record-ink);
  font-weight: 800;
  line-height: 1.55;
  text-align: left;
}

.conclusion-options button > span {
  color: #647879;
  font-family: var(--font-data);
}

.conclusion-options button.is-selected {
  border-color: var(--trace-teal);
  background: #dcece4;
  box-shadow: 5px 6px 0 rgb(25 43 60 / 0.16);
}

.conclusion-options button.is-selected > span {
  color: var(--trace-teal);
}

/* Report */

.report-screen {
  padding: clamp(18px, 4vw, 54px);
  background:
    linear-gradient(135deg, var(--chamber-mahogany-deep), transparent 48%),
    var(--hearing-navy-deep);
}

.report-stage {
  position: relative;
}

.report-stage__trace {
  position: fixed;
  top: 12%;
  right: -5%;
  width: 46vw;
  height: 14px;
  background: var(--trace-teal);
  box-shadow:
    -140px 60px 0 -4px var(--trace-teal-bright),
    -310px 95px 0 -5px var(--evidence-amber);
  transform: rotate(-14deg);
  opacity: 0.46;
}

.case-report {
  position: relative;
  z-index: 1;
  width: min(100%, 980px);
  margin-inline: auto;
  padding: clamp(24px, 5vw, 64px);
  border: 2px solid #b4a98f;
  background:
    repeating-linear-gradient(0deg, transparent 0 35px, rgb(30 155 145 / 0.08) 36px 37px),
    var(--record-paper);
  color: var(--record-ink);
  box-shadow: 18px 24px 0 rgb(0 0 0 / 0.24), var(--shadow-paper);
  clip-path: polygon(0 0, calc(100% - 34px) 0, 100% 34px, 100% 100%, 0 100%);
}

.case-report::after {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  border-style: solid;
  border-width: 0 34px 34px 0;
  border-color: transparent var(--record-paper-muted) transparent transparent;
}

.case-report__header {
  display: flex;
  align-items: start;
  justify-content: space-between;
  gap: 24px;
  padding-bottom: 24px;
  border-bottom: 3px double var(--record-ink);
}

.case-report__header span {
  color: #657878;
  font: 800 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.1em;
}

.case-report__header h1 {
  margin: 4px 0 0;
  font-size: clamp(2rem, 5vw, 4.1rem);
}

.report-stamp {
  padding: 8px 14px;
  border: 4px double var(--trace-teal);
  color: var(--trace-teal);
  font-weight: 900;
  transform: rotate(4deg);
}

.report-case-line {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  margin: 24px 0 34px;
}

.report-case-line > span {
  color: #667a7a;
  font-size: 0.84rem;
  font-weight: 900;
}

.report-finding {
  padding: clamp(22px, 4vw, 40px);
  background: var(--hearing-navy);
  color: var(--record-paper);
}

.report-finding > span {
  color: var(--evidence-amber-soft);
  font-size: 0.84rem;
  font-weight: 900;
}

.report-finding h2 {
  margin: 7px 0 12px;
  font-size: clamp(1.8rem, 4vw, 3.6rem);
}

.report-finding p {
  max-width: 68ch;
  margin: 0;
  color: #d4e1e5;
}

.report-reasoning {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  border-bottom: 1px solid #b1a68f;
}

.report-reasoning section {
  padding: 28px 20px;
  border-right: 1px solid #b1a68f;
}

.report-reasoning section:last-child {
  border-right: 0;
}

.report-reasoning span {
  color: var(--question-coral-deep);
  font: 900 0.84rem/1 var(--font-data);
}

.report-reasoning h3 {
  margin: 7px 0 9px;
  font-size: 1.15rem;
}

.report-reasoning p {
  margin: 0;
  color: #4e6266;
  font-size: 0.88rem;
}

.report-boundary {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 24px;
  padding: 34px 0;
}

.report-boundary > div {
  padding: 18px 20px;
  border-top: 5px solid var(--question-coral);
  background: #eadfd4;
}

.report-boundary > div:last-child {
  border-top-color: var(--trace-teal);
  background: #dce9e0;
}

.report-boundary span {
  color: #5f7474;
  font-size: 0.84rem;
  font-weight: 900;
}

.report-boundary p {
  margin: 8px 0 0;
  font-weight: 800;
}

.report-safety {
  padding: 18px 20px;
  border: 1px solid #a79c87;
  background: #e8e0d1;
}

.report-safety strong {
  color: #663c36;
}

.report-safety p {
  margin: 5px 0 0;
  color: #4e6063;
}

.report-sources {
  margin-top: 20px;
  border-top: 1px solid #b1a68f;
  border-bottom: 1px solid #b1a68f;
}

.report-sources summary {
  min-height: 44px;
  padding: 11px 0;
  font-weight: 900;
}

.report-sources ul {
  margin: 0 0 16px;
  padding-left: 1.3em;
}

.report-sources a {
  color: #155e64;
  text-underline-offset: 3px;
}

.case-report__footer {
  display: flex;
  justify-content: flex-end;
  gap: 12px;
  padding-top: 28px;
}

/* Interaction polish */

.aa-choice,
.hearing-action,
.impact-continue {
  transition: transform 130ms ease, box-shadow 130ms ease, border-color 130ms ease;
}

@media (hover: hover) {
  .action-button:not(:disabled):hover,
  .hearing-action:not(:disabled):hover,
  .impact-continue:hover {
    transform: translate(-1px, -2px);
    box-shadow: 6px 8px 0 rgb(0 0 0 / 0.4);
  }

  .aa-choice-stack .aa-choice:not(:disabled):hover {
    transform: translate(-1px, -2px);
    box-shadow: 6px 6px 0 var(--chamber-mahogany-deep);
  }

  .aa-advance:hover {
    color: var(--evidence-amber);
  }

  .utility-button:hover,
  .statement-nav:hover {
    border-color: var(--evidence-amber);
    background: #183b59;
  }

  .record-tab:hover {
    background-color: rgb(30 155 145 / 0.12);
  }

  .investigation-command-menu button:hover,
  .talk-topic-list button:not(:disabled):hover,
  .move-destination-list button:not(:disabled):hover,
  .investigation-mode-back:hover,
  .scene-dialogue > button:hover {
    border-color: var(--evidence-amber);
    background-color: #183b59;
  }

  .decision-control button:hover,
  .conclusion-options button:hover {
    border-color: var(--trace-teal);
  }

  .hotspot:not(:disabled):hover {
    background: transparent;
    transform: translate(-50%, -50%);
  }
}

.action-button:not(:disabled):active,
.hearing-action:not(:disabled):active,
.impact-continue:active {
  transform: translate(2px, 3px);
  box-shadow: 2px 2px 0 rgb(0 0 0 / 0.35);
}

.aa-choice-stack .aa-choice:not(:disabled):active {
  transform: translate(2px, 3px);
  box-shadow: 2px 2px 0 var(--chamber-mahogany-deep);
}

/* Tablet */

@media (max-width: 1000px) {
  .screen-header {
    min-height: 70px;
  }

  .screen-header h1 {
    display: none;
  }

  .briefing-layout {
    grid-template-columns: 1fr;
  }

  .briefing-principle {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    column-gap: 24px;
  }

  .briefing-principle .principle-mark {
    grid-row: 1 / 4;
  }

  .briefing-principle h2 {
    max-width: none;
  }

  .briefing-steps {
    grid-column: 2;
  }

  .location-stage {
    min-height: calc(100dvh - 70px);
  }

  .investigation-prompt {
    width: min(47vw, 470px);
  }

  .investigation-command-menu {
    width: min(43vw, 400px);
  }

  .investigation-mode-panel {
    width: min(52vw, 500px);
  }

  .calibration-layout {
    grid-template-columns: 1fr;
  }

  .curve-board {
    border-right: 0;
    border-bottom: 1px solid var(--line-blue);
  }

  .calibration-chart {
    min-height: 280px;
    max-height: 420px;
  }

  .conclusion-binder {
    grid-template-columns: 1fr;
    background: var(--record-paper);
  }

  .conclusion-section {
    border-bottom: 1px solid #b5aa92;
  }

  .conclusion-options {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* Mobile */

@media (max-width: 720px) {
  .screen {
    width: 100%;
    box-shadow: none;
  }

  .screen-header {
    min-height: 62px;
    gap: 10px;
    padding: 9px 12px;
  }

  .screen-header__primary,
  .screen-header__utilities {
    gap: 7px;
  }

  .screen-header .case-strip__title {
    display: none;
  }

  .screen-header__utilities .utility-button > span:last-child {
    display: none;
  }

  .screen-footer {
    align-items: stretch;
    flex-direction: column;
    gap: 12px;
    padding: 14px 16px max(14px, env(safe-area-inset-bottom));
  }

  .screen-footer .action-button {
    width: 100%;
  }

  .title-safety {
    margin-top: 10px;
    font-size: 0.84rem;
  }

  .briefing-layout {
    width: min(100% - 24px, 620px);
    gap: 28px;
    margin: 22px auto 30px;
  }

  .briefing-docket {
    padding: 28px 20px;
  }

  .briefing-docket__stamp {
    top: 18px;
    right: 20px;
    font-size: 0.84rem;
  }

  .briefing-docket blockquote {
    padding-top: 28px;
    font-size: clamp(1.65rem, 8vw, 2.5rem);
  }

  .briefing-docket dl > div {
    grid-template-columns: 1fr;
    gap: 3px;
  }

  .briefing-principle {
    display: block;
  }

  .briefing-principle .principle-mark {
    width: 58px;
    height: 58px;
    font-size: 2.3rem;
  }

  .briefing-steps {
    display: grid;
  }

  .investigation-screen .screen-header {
    min-height: 62px;
  }

  .location-stage {
    /* 場景與熱點都以原始 16:9 座標工作；手機不再把圖片裁成 3:2。 */
    --investigation-image-height: 56.25vw;
    min-height: calc(100svh - 62px);
    overflow-y: auto;
    background:
      linear-gradient(180deg, #06111c 0 var(--investigation-image-height), #0c2235 var(--investigation-image-height));
  }

  .location-art {
    width: 100%;
    height: var(--investigation-image-height);
    object-fit: cover;
    object-position: center;
    filter: saturate(0.9) contrast(1.02) brightness(0.9);
    transform: none;
  }

  .location-stage .vn-scene {
    height: var(--investigation-image-height);
  }

  .location-stage__shade {
    bottom: auto;
    height: var(--investigation-image-height);
    background: linear-gradient(0deg, rgb(4 12 20 / 0.58), transparent 52%);
  }

  .location-stage[data-mode="talk"] .location-stage__shade,
  .location-stage[data-mode="move"] .location-stage__shade {
    background: linear-gradient(0deg, rgb(4 12 20 / 0.58), transparent 52%);
  }

  .hotspot-layer {
    inset: 0 0 auto;
    height: var(--investigation-image-height);
  }

  .location-placard {
    top: 8px;
    left: 12px;
    gap: 8px;
    padding: 6px 9px;
  }

  .location-placard span {
    font-size: 0.84rem;
  }

  .location-placard strong {
    font-size: 0.84rem;
  }

  .investigation-prompt {
    top: calc(var(--investigation-image-height) + 12px);
    right: 12px;
    bottom: auto;
    left: 12px;
    width: auto;
    padding: 12px 14px;
  }

  .investigation-prompt > strong {
    font-size: 1.32rem;
  }

  .investigation-prompt p {
    margin-top: 4px;
    font-size: 0.84rem;
  }

  .investigation-command-menu {
    right: 12px;
    bottom: max(12px, env(safe-area-inset-bottom));
    left: 12px;
    width: auto;
    gap: 6px;
    padding: 7px;
  }

  .investigation-command-menu button {
    min-height: 68px;
    grid-template-columns: 32px minmax(0, 1fr);
    column-gap: 7px;
    padding: 8px 10px;
  }

  .investigation-command-menu button > span {
    font-size: 1.42rem;
  }

  .investigation-command-menu button strong {
    font-size: 0.94rem;
  }

  .investigation-command-menu button small {
    font-size: 0.84rem;
  }

  .investigation-mode-back {
    top: calc(var(--investigation-image-height) + 10px);
    right: 12px;
    min-height: 44px;
    padding: 7px 10px;
  }

  .examine-guide {
    top: calc(var(--investigation-image-height) + 64px);
    right: 12px;
    left: 12px;
    max-width: none;
    text-align: left;
  }

  .hotspot-layer {
    right: auto;
    bottom: auto;
    width: 100%;
    height: var(--investigation-image-height);
  }

  .hotspot {
    width: 104px;
    height: 104px;
  }

  .hotspot__reticle {
    width: 58px;
    height: 58px;
  }

  .investigation-mode-panel {
    top: calc(var(--investigation-image-height) + 62px);
    right: 12px;
    left: 12px;
    width: auto;
    padding: 14px;
    box-shadow: none;
  }

  .investigation-mode-panel > header {
    padding-bottom: 8px;
  }

  .investigation-mode-panel > header h2 {
    font-size: 1.3rem;
  }

  .talk-topic-list,
  .move-destination-list {
    gap: 6px;
    margin-top: 10px;
  }

  .talk-topic-list button,
  .move-destination-list button {
    min-height: 54px;
    padding: 7px 9px;
  }

  .scene-dialogue {
    right: 12px;
    bottom: max(12px, env(safe-area-inset-bottom));
    left: 12px;
    min-height: 0;
    grid-template-columns: 1fr;
    grid-template-rows: auto auto auto;
    column-gap: 0;
  }

  .scene-dialogue header:not(.aa-nameplate) {
    grid-column: 1;
    min-width: 0;
    padding: 6px 12px;
  }

  .scene-dialogue p {
    grid-column: 1;
    padding: 10px 13px;
  }

  .scene-dialogue > button {
    grid-column: 1;
    grid-row: 3;
    min-width: 0;
    min-height: 44px;
    padding: 8px 12px;
    border-top: 1px solid var(--line-blue);
    border-left: 0;
  }

  .hearing-screen {
    height: auto;
    min-height: 100svh;
    grid-template-rows: minmax(44svh, 52svh) auto;
  }

  .hearing-stage {
    min-height: 44svh;
  }

  .hearing-stage__image {
    object-position: 68% center;
  }

  .hearing-topbar {
    padding: 8px;
  }

  .hearing-topbar .case-strip__title {
    display: none;
  }

  .hearing-topbar__actions .utility-button {
    min-width: 44px;
    padding-inline: 8px;
  }

  .hearing-topbar__actions .utility-button > span:last-child {
    display: none;
  }

  .hearing-context {
    top: auto;
    bottom: 16px;
    left: 10px;
    padding: 8px 10px;
  }

  .hearing-context span {
    display: none;
  }

  .player-desk {
    display: none;
  }

  .testimony-panel {
    padding: 12px 10px max(10px, env(safe-area-inset-bottom));
  }

  .testimony-panel__top h1 {
    margin: -29px 0 0;
    padding: 7px 18px;
    font-size: 0.9rem;
  }

  .statement-track {
    gap: 8px;
  }

  .statement-track li {
    width: 24px;
    height: 24px;
  }

  .testimony-feedback {
    margin-top: 10px;
    font-size: 0.84rem;
  }

  .statement-row {
    grid-template-columns: 44px minmax(0, 1fr) 44px;
    gap: 7px;
    margin-top: 12px;
  }

  .statement-nav {
    width: 44px;
    height: 52px;
  }

  .statement-text {
    font-size: clamp(1.05rem, 5vw, 1.4rem);
  }

  .statement-meta {
    min-height: 28px;
    gap: 10px;
    margin: 5px 0 8px;
    font-size: 0.84rem;
    text-align: center;
  }

  .hearing-actions {
    gap: 7px;
  }

  .hearing-action {
    min-height: 58px;
    grid-template-columns: 34px minmax(0, 1fr);
    column-gap: 8px;
    padding: 8px 9px;
  }

  .hearing-action > span {
    width: 32px;
    height: 32px;
    font-size: 1rem;
  }

  .hearing-action strong {
    font-size: 0.92rem;
  }

  .hearing-action small {
    font-size: 0.84rem;
  }

  .record-dialog {
    width: 100vw;
    height: 100dvh;
  }

  .record-book {
    border-width: 0;
    grid-template-rows: auto minmax(0, 1fr) auto;
  }

  .record-book::after {
    display: none;
  }

  .record-book__header {
    padding: 12px 14px;
  }

  .record-book__header h2 {
    font-size: 1.3rem;
  }

  .record-book__swipe-hint {
    display: block;
    margin-top: 3px;
    color: #607579;
    font-size: 0.84rem;
    font-weight: 800;
  }

  .record-book__body {
    display: grid;
    grid-template-columns: 1fr;
    grid-template-rows: auto minmax(0, 1fr);
  }

  .record-index {
    display: flex;
    overflow-x: auto;
    overflow-y: hidden;
    border-right: 0;
    border-bottom: 2px solid #b8ad96;
  }

  .record-tab {
    width: 136px;
    min-width: 136px;
    min-height: 62px;
    grid-template-columns: 36px minmax(0, 1fr);
    padding: 8px;
    border-right: 1px solid #bcb19c;
    border-bottom: 0;
  }

  .record-tab__glyph {
    width: 36px;
    height: 36px;
  }

  .record-tab > i {
    display: none;
  }

  .record-tab strong {
    font-size: 0.84rem;
  }

  .evidence-sheet {
    padding: 18px 14px 24px;
  }

  .evidence-sheet__meta {
    margin-bottom: 12px;
  }

  .evidence-sheet__visual {
    grid-template-columns: 64px minmax(0, 1fr);
    gap: 12px;
    padding: 12px;
  }

  .evidence-sheet__visual > span {
    font-size: 2rem;
  }

  .evidence-sheet__visual strong {
    font-size: 1.15rem;
  }

  .evidence-sheet__summary {
    margin: 16px 0;
    font-size: 0.86rem;
  }

  .evidence-limits {
    grid-template-columns: 1fr;
    gap: 10px;
  }

  .evidence-limits > div {
    padding: 13px;
  }

  .record-book__footer {
    align-items: stretch;
    flex-direction: column;
    gap: 8px;
    padding: 10px 12px max(10px, env(safe-area-inset-bottom));
  }

  .record-book__footer .action-button {
    width: 100%;
  }

  .record-feedback {
    position: static;
    width: auto;
    margin: 0 12px 10px;
    grid-row: 3;
  }

  .impact-copy h2 {
    font-size: clamp(3rem, 17vw, 5rem);
  }

  .impact-witness {
    object-position: 43% center;
    opacity: 0.14;
    mask-image: linear-gradient(0deg, #000 0 26%, rgb(0 0 0 / 0.5) 58%, transparent 88%);
  }

  .impact-overlay[data-impact-grade="major"] .impact-witness {
    opacity: 0.2;
  }

  .impact-claim-track {
    top: max(42px, env(safe-area-inset-top));
    width: calc(100% - 24px);
  }

  .impact-claim-track__rail {
    min-height: 58px;
  }

  .impact-claim-track__rail > span:not(.impact-claim-track__gap) {
    padding: 8px 10px;
    font-size: 0.84rem;
    line-height: 1.25;
  }



  .impact-claim-track__stamp {
    top: -4px;
    right: 0;
    padding: 4px 7px;
    border-width: 3px;
    font-size: 0.84rem;
  }

  .impact-forge-transfer {
    --forge-shift: clamp(118px, 36vw, 148px);
    top: max(40px, env(safe-area-inset-top));
    width: calc(100% - 24px);
    height: 154px;
  }

  .impact-forge-transfer__card {
    top: 34px;
    width: 58%;
    min-height: 98px;
    padding: 10px 12px;
  }

  .impact-forge-transfer__card strong {
    font-size: 0.9rem;
  }

  .impact-forge-transfer__stamp {
    top: 52px;
    left: 33%;
    padding: 5px 8px;
    border-width: 3px;
    font-size: 0.84rem;
  }

  .impact-forge-transfer__book {
    top: 20px;
    width: 45%;
    min-width: 0;
    height: 120px;
  }

  .impact-forge-transfer__book i {
    width: min(96px, 76%);
  }

  .impact-copy > span {
    font-size: 0.94rem;
  }

  .impact-continue {
    right: 16px;
    bottom: max(16px, env(safe-area-inset-bottom));
    left: 16px;
    justify-content: center;
  }

  .calibration-intro {
    align-items: start;
    flex-direction: column;
    gap: 12px;
    padding: 20px 16px;
  }

  .calibration-intro h2 {
    font-size: 1.65rem;
  }

  .calibration-intro > p {
    font-size: 0.84rem;
  }

  .curve-board {
    padding: 18px 12px;
  }

  .curve-board__heading {
    align-items: start;
    flex-direction: column;
    gap: 2px;
  }

  .calibration-chart {
    min-height: 230px;
  }

  .calibration-row {
    padding: 17px 14px;
  }

  .calibration-row__record {
    grid-template-columns: 1fr auto;
    gap: 4px 12px;
  }

  .calibration-row__record > small {
    grid-column: 1 / -1;
  }

  .decision-control {
    gap: 5px;
  }

  .decision-control button {
    min-height: 48px;
    padding: 6px 4px;
    font-size: 0.84rem;
  }

  .conclusion-intro {
    grid-template-columns: 1fr;
    gap: 8px;
    padding: 20px 16px;
  }

  .conclusion-intro > span {
    padding: 0;
  }

  .conclusion-intro h2 {
    font-size: 1.65rem;
  }

  .conclusion-intro > p {
    font-size: 0.84rem;
  }

  .conclusion-section {
    padding: 24px 16px;
  }

  .conclusion-options {
    grid-template-columns: 1fr;
  }

  .conclusion-options button {
    min-height: 68px;
  }

  .report-screen {
    padding: 0;
  }

  .case-report {
    padding: 26px 16px max(26px, env(safe-area-inset-bottom));
    box-shadow: none;
    clip-path: none;
  }

  .case-report::after {
    display: none;
  }

  .case-report__header {
    align-items: center;
  }

  .case-report__header h1 {
    font-size: 2.5rem;
  }

  .report-stamp {
    padding: 5px 8px;
    font-size: 0.84rem;
  }

  .report-case-line {
    align-items: start;
    flex-direction: column;
    margin: 18px 0 24px;
  }

  .report-finding {
    padding: 22px 17px;
  }

  .report-finding h2 {
    font-size: 1.9rem;
  }

  .report-reasoning {
    grid-template-columns: 1fr;
  }

  .report-reasoning section {
    border-right: 0;
    border-bottom: 1px solid #b1a68f;
  }

  .report-boundary {
    grid-template-columns: 1fr;
    gap: 12px;
    padding: 24px 0;
  }

  .case-report__footer {
    align-items: stretch;
    flex-direction: column-reverse;
  }

  .case-report__footer .action-button {
    width: 100%;
  }
}

@media (max-width: 390px) {
  .location-stage {
    min-height: calc(100svh - 62px);
  }

  .investigation-prompt p {
    display: none;
  }

  .investigation-command-menu button {
    min-height: 62px;
  }

  .investigation-mode-panel {
    padding: 11px;
  }

  .talk-topic-list button,
  .move-destination-list button {
    min-height: 50px;
  }

  .examine-guide span {
    font-size: 0.84rem;
  }

  .testimony-feedback span {
    display: none;
  }

  .statement-meta span:last-child {
    max-width: 27ch;
  }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    scroll-behavior: auto !important;
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }

  .impact-overlay {
    clip-path: none;
  }

  .impact-trace path {
    stroke-dashoffset: 0;
  }

  .impact-overlay[data-impact-grade],
  .impact-overlay[data-impact-grade] .impact-speedlines,
  .impact-overlay[data-impact-grade] .impact-copy,
  .impact-overlay[data-impact-grade] .impact-witness,
  .impact-overlay[data-impact-grade] .impact-trace path,
  .impact-overlay[data-impact-grade] [data-impact-claim-track],
  .impact-overlay[data-impact-grade] [data-impact-gap],
  .impact-overlay[data-impact-grade] [data-impact-claim-stamp],
  .impact-overlay[data-impact-grade] [data-impact-forge-card],
  .impact-overlay[data-impact-grade] [data-impact-forge-stamp],
  .impact-overlay[data-impact-grade] [data-impact-forge-book] {
    animation: none;
  }

  .impact-overlay[data-impact-grade] {
    filter: none;
  }

  .impact-overlay[data-impact-grade] .impact-copy {
    opacity: 1;
    transform: rotate(-2deg);
  }

  .impact-overlay[data-impact-grade] .impact-witness {
    transform: none;
  }

  /* P3：reduced-motion 無閃無震——白閃層、轉場儀式、拍上卡直接不顯示；
     爆字卡與 impact 內容由上方 animation:none 直接定格，資訊等價。 */
  .flash-veil,
  .surface-ritual,
  .present-slam {
    display: none;
  }
}

@media (forced-colors: active) {
  .action-button,
  .hearing-action,
  .investigation-command-menu button,
  .talk-topic-list button,
  .move-destination-list button,
  .investigation-mode-back,
  .examine-cursor,
  .hotspot__reticle,
  .record-tab,
  .decision-control button,
  .conclusion-options button {
    border: 2px solid ButtonText;
  }

  .case-progress__fill,
  .chart-main-path,
  .impact-trace path {
    forced-color-adjust: none;
  }

  /* P3：forced-colors 不退化——白閃層關閉；爆字卡取消描邊硬陰影、底版改系統框線，字面維持 CanvasText。 */
  .flash-veil {
    display: none;
  }

  .burst-card__plate,
  .present-slam__frame,
  .surface-ritual__card {
    border: 2px solid ButtonText;
    box-shadow: none;
  }

  .burst-card__word {
    -webkit-text-stroke: 0;
    text-shadow: none;
  }
}

/* Visual asset system v2: independent scene and half-body character layers. */

.vn-scene {
  position: absolute;
  z-index: 0;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: var(--scene-position, center);
}

.vn-character {
  position: absolute;
  z-index: 2;
  right: clamp(1rem, 7vw, 8rem);
  bottom: -7%;
  width: min(43vw, 38rem);
  height: 90%;
  object-fit: contain;
  object-position: right bottom;
  filter: drop-shadow(-18px 18px 22px rgb(2 10 17 / 0.62));
  pointer-events: none;
  user-select: none;
}

.vn-character--narrative {
  right: clamp(1rem, 8vw, 9rem);
  bottom: 10%;
  height: 84%;
}

.vn-character--investigation {
  right: clamp(1rem, 6vw, 7rem);
  bottom: -8%;
  height: 88%;
}

.vn-character--hearing {
  right: clamp(2rem, 8vw, 10rem);
  bottom: -22%;
  height: 124%;
}

.narrative-stage .vn-scene,
.location-stage .vn-scene {
  filter: saturate(0.96) contrast(1.04) brightness(0.94);
}

.narrative-stage__shade,
.location-stage__shade {
  z-index: 1;
}

.narrative-case-mark,
.narrative-dialogue,
.scene-dialogue,
.investigation-prompt,
.investigation-command-menu,
.investigation-mode-panel,
.examine-guide,
.hotspot-layer,
.investigation-mode-back {
  z-index: 4;
}

.hearing-topbar,
.hearing-context,
.player-desk {
  z-index: 4;
}

.case2-character,
.case3-character,
.case4-character,
.case5-character,
.sleep-character {
  z-index: 2;
  right: clamp(1rem, 6vw, 7rem);
  bottom: -8%;
  width: min(43vw, 38rem);
  height: 88%;
  object-fit: contain;
  object-position: right bottom;
}

@media (max-width: 820px) {
  .vn-character,
  .case2-character,
  .case3-character,
  .case4-character,
  .case5-character,
  .sleep-character {
    right: -8%;
    bottom: -4%;
    width: min(72vw, 31rem);
    height: 76%;
  }

  .vn-character--narrative {
    right: -10%;
    bottom: 16%;
    height: 72%;
  }

  .vn-character--hearing {
    right: -10%;
    bottom: -18%;
    height: 108%;
  }

}

@media (max-width: 560px) {
  .vn-character--narrative {
    right: -18%;
    bottom: 26%;
    height: 62%;
  }

  .vn-character--investigation,
  .case2-character,
  .case3-character,
  .case4-character,
  .case5-character,
  .sleep-character {
    right: -18%;
    bottom: 5%;
    width: min(82vw, 29rem);
    height: 66%;
  }

  .vn-character--hearing {
    right: -19%;
    bottom: -14%;
    height: 96%;
  }
}

.season-dossier__stage {
  position: relative;
  isolation: isolate;
  overflow: hidden;
}

.season-dossier__stage::before {
  position: absolute;
  z-index: 1;
  inset: 0;
  background:
    linear-gradient(90deg, rgb(7 24 35 / 0.98) 0 48%, rgb(7 24 35 / 0.72) 72%, rgb(7 24 35 / 0.9)),
    linear-gradient(0deg, rgb(7 24 35 / 0.94), transparent 54%);
  content: "";
  pointer-events: none;
}

.season-dossier__stage > :not(.season-dossier__scene, .season-dossier__character, .season-dossier__character-stage) {
  position: relative;
  z-index: 3;
}

body .season-dossier__scene {
  z-index: 0;
  opacity: 0.82;
}

body .season-dossier__character {
  z-index: 2;
  right: -4%;
  bottom: -5%;
  width: min(42%, 470px);
  height: 92%;
  opacity: 0.94;
}

@media (max-width: 680px) {
  body .season-dossier__character {
    right: -18%;
    bottom: 0;
    width: min(75vw, 390px);
    height: 58%;
    opacity: 0.22;
  }
}

@media (forced-colors: active) {
  .vn-character {
    filter: none;
  }
}

/* C1 line-by-line testimony flow */

.hearing-screen--line-flow {
  --line-flow-teal: #69ded1;
  --line-flow-paper: #f4f1e8;
  grid-template-rows: minmax(250px, 44dvh) minmax(0, 1fr);
}

.hearing-screen--line-flow[data-counter-pending="true"] {
  grid-template-rows: minmax(250px, 30dvh) minmax(0, 1fr);
}

/* 反駁拍：角色改由 counter 面板內的 pressed 立繪擔任，舞台上的同名角色須退場，避免同角雙影。 */
.hearing-screen--line-flow[data-counter-pending="true"] > .hearing-stage .case-character-stage,
.hearing-screen--line-flow[data-counter-pending="true"] > .hearing-stage .hearing-stage__character {
  display: none;
}

.hearing-screen--line-flow[data-impact-active="true"] > .hearing-stage,
.hearing-screen--line-flow[data-impact-active="true"] > .testimony-panel {
  visibility: hidden;
}

.hearing-screen--line-flow .testimony-panel--line-flow {
  min-height: 0;
  display: grid;
  /* 台詞列不能用 minmax(92px, auto)：auto 最小值取列內元素的「最小貢獻」，而
     .line-flow-statement 設了 min-height:92px，面板高度吃緊時整列就被凍在 92px，
     兩行台詞溢出盒外、被下方導覽列蓋住。全部改 min-content 讓每列以內容為底線
     （92px 底高仍由 min-height 保證），也不受證詞更新列插入造成的列序位移影響。
     center 在內容溢出時上緣會變成捲不到的死區，safe center 讓它退回 start。 */
  grid-template-rows: none;
  grid-auto-rows: min-content;
  align-content: center;
  align-content: safe center;
  gap: 10px;
  overflow: auto;
  padding: 18px clamp(18px, 4vw, 64px) max(18px, env(safe-area-inset-bottom));
}

.hearing-screen--line-flow .testimony-panel--line-flow::before {
  background: linear-gradient(90deg, var(--question-coral) 0 17%, var(--evidence-amber) 17% 42%, var(--trace-teal) 42% 100%);
}

.hearing-screen--line-flow .line-flow-header {
  width: min(100%, 980px);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin: 0 auto;
}

.hearing-screen--line-flow .line-flow-header p,
.hearing-screen--line-flow .line-flow-header span,
.hearing-screen--line-flow .line-flow-header strong {
  margin: 0;
}

.hearing-screen--line-flow .line-flow-header p {
  display: flex;
  align-items: baseline;
  gap: 12px;
}

.hearing-screen--line-flow .line-flow-header span {
  color: var(--line-flow-paper);
  font-size: clamp(1rem, 2vw, 1.35rem);
  font-weight: 900;
}

.hearing-screen--line-flow .line-flow-header strong {
  color: var(--line-flow-teal);
  font: 850 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.08em;
}

.hearing-screen--line-flow .line-flow-header button {
  min-height: 44px;
  padding: 9px 14px;
  border: 1px solid var(--line-blue);
  background: #0b2033;
  color: var(--line-flow-paper);
  font-weight: 850;
  box-shadow: 4px 4px 0 rgb(0 0 0 / 0.28);
}

.hearing-screen--line-flow .testimony-wire {
  position: relative;
  width: min(100%, 820px);
  min-height: 18px;
  display: grid;
  grid-template-columns: repeat(var(--line-count), minmax(0, 1fr));
  align-items: center;
  margin: 0 auto;
}

.hearing-screen--line-flow .testimony-wire::before {
  position: absolute;
  right: calc(50% / var(--line-count));
  left: calc(50% / var(--line-count));
  height: 1px;
  background: var(--line-blue);
  content: "";
}

.hearing-screen--line-flow .testimony-wire i {
  z-index: 1;
  width: 9px;
  height: 9px;
  justify-self: center;
  border: 2px solid #6f8da0;
  background: var(--hearing-navy-deep);
  transform: rotate(45deg);
}

.hearing-screen--line-flow .testimony-wire i[data-current="true"] {
  width: 13px;
  height: 13px;
  border-color: var(--line-flow-teal);
  background: var(--line-flow-teal);
  box-shadow: 0 0 0 3px #123b4a;
}

.hearing-screen--line-flow .testimony-wire i[data-new="true"] {
  border-color: var(--evidence-amber);
  background: var(--evidence-amber);
  box-shadow: 0 0 0 3px var(--chamber-mahogany-deep);
  animation: testimony-node-in 480ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.hearing-screen--line-flow .line-flow-statement {
  position: relative;
  width: min(100%, 980px);
  min-height: 92px;
  display: grid;
  grid-template-columns: 52px minmax(0, 1fr);
  align-items: stretch;
  margin: 0 auto;
  border: 1px solid var(--line-blue);
  background: #0d263b;
  box-shadow: 8px 9px 0 rgb(0 0 0 / 0.28);
}

/* 左緣量尺刻度：整條刻度就是選句的左緣，正在打字的句子刻度亮起（原本是一條 4px
   琥珀實心色條，語意相同但讀起來只是裝飾條；改回真正的刻度後與名牌、旁白同語彙）。 */
.hearing-screen--line-flow .line-flow-statement > span {
  --line-tick-ink: rgb(241 180 60 / 0.55);
  display: grid;
  place-items: center;
  border-right: 1px solid var(--line-blue);
  background: repeating-linear-gradient(180deg, var(--line-tick-ink) 0 2px, transparent 2px 10px) left top / 6px 100% no-repeat;
  color: var(--line-flow-teal);
  font: 900 0.84rem/1 var(--font-data);
}

.hearing-screen--line-flow .line-flow-statement[data-typing="true"] > span {
  --line-tick-ink: var(--evidence-amber-soft);
}

.hearing-screen--line-flow .line-flow-statement__copy {
  display: grid;
  width: min(100%, 42ch);
  align-self: center;
  padding: 18px clamp(148px, 18vw, 176px) 18px clamp(16px, 3vw, 36px);
  margin: 0 auto;
  color: #fff;
  font-size: clamp(1.25rem, 2.15vw, 2rem);
  font-weight: 800;
  line-height: 1.55;
  letter-spacing: -0.015em;
  overflow-wrap: anywhere;
}

.hearing-screen--line-flow .line-flow-statement__visual {
  grid-area: 1 / 1;
}

.hearing-screen--line-flow .line-flow-statement__copy::before {
  grid-area: 1 / 1;
  visibility: hidden;
  white-space: pre-wrap;
  content: attr(data-typewriter-reserve);
}

.hearing-screen--line-flow .line-flow-statement[data-typing="true"] .line-flow-statement__visual::after {
  display: inline-block;
  width: 0.48em;
  height: 0.86em;
  margin-left: 0.18em;
  background: var(--evidence-amber);
  box-shadow: 2px 2px 0 rgb(0 0 0 / 0.32);
  vertical-align: -0.06em;
  content: "";
}

.hearing-screen--line-flow .line-flow-statement__skip {
  position: absolute;
  right: 12px;
  bottom: 12px;
  min-width: 132px;
  min-height: 44px;
  padding: 8px 12px;
  border: 1px solid var(--evidence-amber);
  background: var(--hearing-navy);
  color: var(--evidence-amber);
  font-weight: 850;
  box-shadow: 4px 4px 0 rgb(0 0 0 / 0.32);
}

.hearing-screen--line-flow .line-flow-statement__skip:focus-visible {
  outline: 3px solid var(--focus);
  outline-offset: 3px;
}

.hearing-screen--line-flow .line-flow-statement__copy mark {
  padding: 1px 4px;
  background: var(--evidence-amber);
  color: #251710;
  font-weight: 900;
}

.hearing-screen--line-flow .line-flow-hint {
  width: min(100%, 820px);
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 8px 12px;
  margin: 0 auto;
  border: 1px solid var(--question-coral);
  background: #2f2026;
  color: var(--line-flow-paper);
}

.hearing-screen--line-flow .line-flow-hint span {
  color: #ffaaa4;
  font: 900 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.1em;
}

.hearing-screen--line-flow .line-flow-hint p {
  margin: 0;
  font-size: 0.88rem;
}

.hearing-screen--line-flow .line-flow-navigation {
  width: min(100%, 620px);
  display: grid;
  grid-template-columns: minmax(112px, 1fr) auto minmax(112px, 1fr);
  align-items: center;
  gap: 12px;
  margin: 0 auto;
}

.hearing-screen--line-flow .line-flow-navigation button {
  min-width: 44px;
  min-height: 52px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: 8px 14px;
  border: 1px solid var(--line-blue);
  background: #112f48;
  color: var(--line-flow-paper);
  box-shadow: 4px 4px 0 rgb(0 0 0 / 0.28);
}

.hearing-screen--line-flow .line-flow-navigation button[aria-disabled="true"] {
  opacity: 0.42;
  box-shadow: none;
}

.hearing-screen--line-flow .line-flow-navigation button > span {
  color: var(--line-flow-teal);
  font-size: 1.05rem;
}

.hearing-screen--line-flow .line-flow-navigation button small {
  font-weight: 800;
}

.hearing-screen--line-flow .line-flow-navigation > span {
  min-width: 48px;
  color: var(--muted-blue);
  font: 850 0.84rem/1 var(--font-data);
  text-align: center;
}

.hearing-screen--line-flow .line-flow-navigation > span i {
  padding: 0 4px;
  font-style: normal;
  opacity: 0.6;
}

.hearing-screen--line-flow .testimony-feedback {
  width: min(100%, 820px);
  margin-top: 0;
}

.hearing-screen--line-flow .testimony-update {
  width: min(100%, 820px);
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 8px 12px;
  margin: 0 auto;
  border: 1px solid var(--evidence-amber);
  background: var(--chamber-mahogany-deep);
  color: var(--record-paper);
  box-shadow: 4px 4px 0 rgb(0 0 0 / 0.28);
  animation: testimony-update-in 2s ease both;
}

.hearing-screen--line-flow .testimony-update strong {
  flex: 0 0 auto;
  color: var(--evidence-amber-soft);
  font: 900 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.1em;
}

.hearing-screen--line-flow .testimony-update span {
  font-size: 0.86rem;
  font-weight: 750;
}

.hearing-screen--line-flow .hearing-actions {
  width: min(100%, 820px);
}

.hearing-screen--line-flow .hearing-action--press {
  min-height: 60px;
  border-color: var(--record-paper);
  background: var(--question-coral);
  color: var(--record-paper);
  box-shadow: 5px 6px 0 rgb(0 0 0 / 0.35);
}

.hearing-screen--line-flow .hearing-action--present {
  min-height: 60px;
  border-color: var(--record-paper);
  background: var(--evidence-amber);
  color: #172536;
  box-shadow: 5px 6px 0 rgb(0 0 0 / 0.35);
}

.hearing-screen--line-flow .press-beat {
  min-height: 0;
  display: grid;
  grid-template-rows: auto minmax(0, auto);
  place-content: center;
  gap: 14px;
  overflow: auto;
  padding: 28px clamp(18px, 5vw, 76px) max(24px, env(safe-area-inset-bottom));
  background:
    linear-gradient(114deg, rgb(226 82 75 / 0.2), transparent 34%),
    linear-gradient(246deg, rgb(244 190 69 / 0.13), transparent 38%),
    var(--hearing-navy-deep);
}

.hearing-screen--line-flow .press-beat::before {
  background: linear-gradient(90deg, var(--question-coral) 0 48%, var(--evidence-amber) 48% 52%, var(--trace-teal) 52% 100%);
}

.hearing-screen--line-flow .press-beat__eyebrow,
.hearing-screen--line-flow .press-beat__dialogue {
  width: min(100%, 880px);
  margin-inline: auto;
}

.hearing-screen--line-flow .press-beat__eyebrow {
  margin-block: 0;
  color: #ffaaa4;
  font: 900 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.12em;
}

.hearing-screen--line-flow .press-beat__dialogue {
  min-height: 184px;
}

.hearing-screen--line-flow .press-beat--burst {
  justify-items: center;
  text-align: center;
}

/* P3：字面樣式移交 .burst-card__word（斜切底版＋深藍描邊）；keyframe 僅留作無 GSAP fallback。 */
.hearing-screen--line-flow .press-beat__burst {
  margin: 0;
  animation: press-burst 320ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.gsap-motion .hearing-screen--line-flow .press-beat__burst,
.gsap-motion .press-beat--burst .burst-card {
  animation: none !important;
}

.hearing-screen--line-flow .press-beat__caption {
  margin: 0;
  color: var(--muted-blue);
  font-size: 0.92rem;
  font-weight: 750;
}

.hearing-screen--line-flow .record-feedback.is-wrong-line {
  border-color: var(--line-flow-teal);
}

.hearing-screen--line-flow .testimony-panel--counter {
  min-height: 0;
  display: grid;
  align-content: start;
  gap: 12px;
  overflow: auto;
  padding: 18px clamp(18px, 4vw, 64px) max(18px, env(safe-area-inset-bottom));
  background:
    linear-gradient(104deg, rgb(230 82 75 / 0.14), transparent 28%),
    var(--hearing-navy-deep);
}

.hearing-screen--line-flow .testimony-panel--counter::before {
  background: linear-gradient(90deg, var(--question-coral) 0 48%, var(--hearing-navy-deep) 48% 52%, var(--evidence-amber) 52% 100%);
}

.counter-panel__header,
.counter-panel__connector,
.counter-panel__challenge,
.counter-panel__origin,
.counter-panel__break,
.counter-responses,
.counter-feedback {
  position: relative;
  z-index: 1;
  width: min(100%, 980px);
  margin-inline: auto;
}

/* 反駁角色立繪：貼齊面板右下、退到文字層後方。 */
.counter-panel__character-stage {
  z-index: 0;
}

.counter-panel__character-stage .character-actor {
  right: clamp(-3rem, -1vw, 0rem);
  bottom: -6%;
  width: min(34vw, 27rem);
  opacity: 0.92;
}

@media (max-width: 820px) {
  .counter-panel__character-stage .character-actor {
    right: -14%;
    bottom: -4%;
    width: min(58vw, 21rem);
    opacity: 0.4;
  }
}

.counter-panel__header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 18px;
  padding-top: 4px;
}

.counter-panel__header span {
  color: #ffaaa4;
  font: 900 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.1em;
}

.counter-panel__header strong {
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.counter-panel__connector {
  display: grid;
  grid-template-columns: minmax(18px, 1fr) auto minmax(18px, 1fr);
  align-items: center;
  gap: 10px;
}

.counter-panel__connector i {
  height: 2px;
  background: var(--trace-teal-bright);
  box-shadow: 0 4px 0 rgb(0 0 0 / 0.3);
}

.counter-panel__connector i:first-child {
  clip-path: polygon(0 0, 94% 0, 100% 50%, 94% 100%, 0 100%);
}

.counter-panel__connector i:last-child {
  clip-path: polygon(6% 0, 100% 0, 100% 100%, 6% 100%, 0 50%);
}



.counter-panel__challenge {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  border: 1px solid #57768b;
  background: #0d263b;
  box-shadow: 9px 10px 0 rgb(0 0 0 / 0.32);
}

.counter-panel__challenge h1 {
  align-self: center;
  max-width: none;
  padding: 46px clamp(16px, 3vw, 36px) 18px;
  margin: 0;
  color: #fff;
  font-size: clamp(1.32rem, 2.7vw, 2.15rem);
  font-weight: 900;
  line-height: 1.48;
  letter-spacing: -0.02em;
  overflow-wrap: anywhere;
}

.counter-panel__challenge mark {
  padding: 1px 4px;
  background: var(--evidence-amber);
  color: #251710;
  font-weight: 900;
  box-decoration-break: clone;
  -webkit-box-decoration-break: clone;
}

.counter-panel__origin {
  display: grid;
  grid-template-columns: minmax(120px, 0.24fr) minmax(0, 1fr);
  border: 1px solid var(--line-blue);
  background: #0a1f31;
  color: var(--muted-blue);
}

.counter-panel__origin span {
  align-self: center;
  padding: 10px 14px;
  color: #8fb1c3;
  font: 850 0.84rem/1.4 var(--font-data);
  letter-spacing: 0.06em;
  text-align: center;
}

.counter-panel__origin p {
  padding: 10px 16px;
  margin: 0;
  border-left: 1px solid var(--line-blue);
  font-size: 0.88rem;
  line-height: 1.55;
}

.counter-panel__break {
  display: flex;
  align-items: baseline;
  gap: 12px;
  padding: 9px 12px;
  border: 1px solid var(--question-coral);
  background: #342026;
  color: var(--record-paper);
}

.counter-panel__break strong {
  flex: 0 0 auto;
  color: #ffaaa4;
  font: 900 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.08em;
}

.counter-panel__break p {
  margin: 0;
  font-size: 0.88rem;
}

.counter-responses {
  display: grid;
  gap: 8px;
}

.counter-responses > p {
  margin: 0 0 2px;
  color: var(--record-paper);
  font-size: 0.9rem;
  font-weight: 850;
}

.counter-response {
  min-width: 0;
  min-height: 56px;
  display: grid;
  align-content: center;
  gap: 3px;
  padding: 12px 16px;
  border: 1px solid #57768b;
  background: #12314a;
  color: var(--record-paper);
  text-align: left;
  box-shadow: 5px 6px 0 rgb(0 0 0 / 0.3);
}

.counter-response span {
  font-weight: 850;
  line-height: 1.45;
  overflow-wrap: anywhere;
}

.counter-response small {
  color: #ffb5af;
  font-size: 0.84rem;
  font-weight: 850;
}

.counter-response.is-selected {
  border: 2px solid #ffaaa4;
  background: #3a2229;
  box-shadow: 5px 6px 0 rgb(0 0 0 / 0.3);
  animation: counter-nudge 180ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.counter-response:focus-visible,
.counter-panel__challenge h1:focus-visible {
  outline: 3px solid var(--focus);
  outline-offset: 3px;
}

.counter-feedback {
  min-height: 0;
  padding: 10px 12px;
  border: 1px solid #a64c48;
  background: #2d1d23;
  color: var(--record-paper);
}

.counter-feedback:empty {
  display: none;
}

.counter-feedback strong {
  color: #ffaaa4;
  font: 900 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.08em;
}

.counter-feedback p {
  margin: 3px 0 0;
  font-size: 0.88rem;
  line-height: 1.55;
}

.hearing-screen--line-flow .impact-copy {
  display: grid;
  justify-items: center;
}

.hearing-screen--line-flow .impact-continue {
  position: static;
  width: min(100%, 320px);
  min-height: 64px;
  justify-content: center;
  margin: 26px auto 0;
  border-width: 3px;
  font-size: 1rem;
}

@keyframes counter-nudge {
  0%, 100% { transform: translateX(0); }
  35% { transform: translateX(-5px); }
  70% { transform: translateX(3px); }
}

@keyframes press-burst {
  from { opacity: 0; transform: scale(0.72) rotate(-3deg); }
  to { opacity: 1; transform: scale(1) rotate(0); }
}

@keyframes testimony-node-in {
  from { transform: rotate(45deg) scale(0.3); opacity: 0; }
  70% { transform: rotate(45deg) scale(1.35); opacity: 1; }
  to { transform: rotate(45deg) scale(1); opacity: 1; }
}

@keyframes testimony-update-in {
  0% { opacity: 0; transform: translateY(-8px); }
  12%, 76% { opacity: 1; transform: translateY(0); }
  100% { opacity: 0; transform: translateY(-4px); }
}

.hearing-screen--line-flow .line-flow-header button:focus-visible,
.hearing-screen--line-flow .line-flow-navigation button:focus-visible,
.hearing-screen--line-flow .line-flow-statement__copy:focus-visible,
.hearing-screen--line-flow .testimony-overview-dialog button:focus-visible {
  outline: 3px solid var(--focus);
  outline-offset: 3px;
}

/* Paper sheet needs an ink halo so the amber ring stays visible. */
.hearing-screen--line-flow .testimony-overview-dialog button:focus-visible {
  box-shadow: 0 0 0 1px var(--record-ink), 0 0 0 7px rgb(25 43 60 / 0.28);
}

.hearing-screen--line-flow .testimony-overview-dialog {
  width: min(900px, calc(100vw - 40px));
  max-width: none;
  max-height: min(820px, calc(100dvh - 40px));
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--record-ink);
}

.hearing-screen--line-flow .testimony-overview-dialog::backdrop {
  background: rgb(3 13 22 / 0.88);
}

.hearing-screen--line-flow .testimony-overview-dialog__sheet {
  max-height: inherit;
  display: grid;
  grid-template-rows: auto auto minmax(0, 1fr) auto;
  overflow: hidden;
  border-top: 6px solid var(--trace-teal);
  background: var(--record-paper);
  box-shadow: 14px 18px 0 rgb(0 0 0 / 0.34);
}

.hearing-screen--line-flow .testimony-overview-dialog__sheet > header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 18px 22px 14px;
  border-bottom: 1px solid #b9b3a6;
}

.hearing-screen--line-flow .testimony-overview-dialog__sheet > header span {
  color: #31536d;
  font: 850 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.08em;
}

.hearing-screen--line-flow .testimony-overview-dialog__sheet h2 {
  margin: 4px 0 0;
  font-size: clamp(1.35rem, 3vw, 2rem);
}

.hearing-screen--line-flow .testimony-overview-dialog__sheet > p {
  padding: 11px 22px;
  margin: 0;
  border-bottom: 1px solid #c8c1b5;
  color: #425463;
}

.hearing-screen--line-flow .testimony-overview-dialog ol {
  padding: 0 22px;
  margin: 0;
  overflow: auto;
  list-style: none;
  counter-reset: overview-line;
}

.hearing-screen--line-flow .testimony-overview-dialog li {
  display: grid;
  grid-template-columns: 40px minmax(0, 1fr) auto;
  align-items: center;
  gap: 14px;
  padding: 15px 0;
  border-bottom: 1px solid #c8c1b5;
}

.hearing-screen--line-flow .testimony-overview-dialog li[aria-current="true"] {
  background: repeating-linear-gradient(180deg, rgb(241 180 60 / 0.9) 0 2px, transparent 2px 9px) left top / 5px 100% no-repeat;
  box-shadow: inset 6px 0 rgb(241 180 60 / 0.35);
}

.hearing-screen--line-flow .testimony-overview-dialog li > span {
  color: #45677e;
  font: 900 0.84rem/1 var(--font-data);
  text-align: center;
}

.hearing-screen--line-flow .testimony-overview-dialog li > p {
  margin: 0;
  line-height: 1.55;
}

.hearing-screen--line-flow .testimony-overview-dialog li > div {
  display: grid;
  justify-items: end;
  gap: 4px;
}

.hearing-screen--line-flow .testimony-overview-dialog li strong {
  color: #146e68;
  font: 900 0.84rem/1.2 var(--font-data);
}

.hearing-screen--line-flow .testimony-overview-dialog li button {
  min-height: 44px;
  padding: 8px 12px;
  border: 1px solid #31536d;
  background: transparent;
  color: #173046;
  font-weight: 850;
}

.hearing-screen--line-flow .testimony-overview-dialog__sheet > footer {
  display: flex;
  justify-content: flex-end;
  padding: 14px 22px;
  border-top: 1px solid #b9b3a6;
}

@media (hover: hover) {
  .hearing-screen--line-flow .line-flow-header button:hover,
  .hearing-screen--line-flow .line-flow-navigation button[aria-disabled="false"]:hover,
  .hearing-screen--line-flow .testimony-overview-dialog li button:hover {
    border-color: var(--trace-teal);
  }

  .counter-response:hover {
    border-color: var(--evidence-amber);
    background: #183d59;
  }
}

@media (max-width: 720px) {
  .hearing-screen--line-flow {
    min-height: 100svh;
    grid-template-rows: minmax(250px, 36svh) auto;
  }

  /* 反駁拍在窄幅裝置聚焦文字對抗：縮小舞台，讓反駁句、破綻提示與
     三個回應選項不需捲動即可見（捲動殘留只會讓尾端更可見）。 */
  .hearing-screen--line-flow[data-counter-pending="true"] {
    grid-template-rows: minmax(140px, 18svh) auto;
  }

  .hearing-screen--line-flow .hearing-stage {
    min-height: 36svh;
  }

  .hearing-screen--line-flow[data-counter-pending="true"] .hearing-stage {
    min-height: 18svh;
  }

  .hearing-screen--line-flow .testimony-panel--line-flow {
    min-height: 64svh;
    align-content: start;
    gap: 9px;
    padding: 14px 10px max(12px, env(safe-area-inset-bottom));
  }

  .hearing-screen--line-flow .press-beat {
    min-height: 64svh;
    place-content: center;
    padding: 22px 14px max(18px, env(safe-area-inset-bottom));
  }

  .hearing-screen--line-flow .press-beat__dialogue {
    min-height: 164px;
  }

  .hearing-screen--line-flow .testimony-panel--counter {
    min-height: 64svh;
    gap: 8px;
    padding: 14px 10px max(12px, env(safe-area-inset-bottom));
  }

  .counter-panel__header {
    gap: 10px;
  }

  .counter-panel__challenge,
  .counter-panel__origin {
    grid-template-columns: 1fr;
  }

  .counter-panel__origin span {
    place-items: start;
    padding: 8px 11px;
    border-right: 0;
    border-bottom: 1px solid #57768b;
    text-align: left;
  }

  .counter-panel__challenge h1 {
    max-width: none;
    padding: 42px 12px 13px;
    font-size: clamp(1.12rem, 5vw, 1.4rem);
    line-height: 1.48;
  }

  .counter-panel__origin p {
    padding: 9px 11px;
    border-left: 0;
    font-size: 0.84rem;
  }

  .counter-panel__break {
    align-items: flex-start;
    flex-direction: column;
    gap: 3px;
  }

  .counter-response {
    min-height: 54px;
    padding: 10px 12px;
    font-size: 0.88rem;
  }

  .counter-feedback {
    padding: 8px 10px;
  }

  .counter-feedback p {
    font-size: 0.84rem;
    line-height: 1.45;
  }

  .hearing-screen--line-flow .line-flow-header {
    align-items: flex-start;
  }

  .hearing-screen--line-flow .line-flow-header p {
    align-items: flex-start;
    flex-direction: column;
    gap: 3px;
  }

  .hearing-screen--line-flow .line-flow-header button {
    flex: 0 0 auto;
  }

  .hearing-screen--line-flow .line-flow-statement {
    min-height: 104px;
    grid-template-columns: 38px minmax(0, 1fr);
  }

  .hearing-screen--line-flow .line-flow-statement__copy {
    padding: 15px 138px 15px 12px;
    font-size: clamp(1.25rem, 4.6vw, 1.35rem);
    line-height: 1.55;
  }

  .hearing-screen--line-flow .line-flow-statement__skip {
    right: 8px;
    bottom: 8px;
    min-width: 122px;
    padding-right: 9px;
    padding-left: 9px;
    font-size: 0.84rem;
  }

  .hearing-screen--line-flow .line-flow-navigation {
    grid-template-columns: minmax(88px, 1fr) auto minmax(88px, 1fr);
    gap: 7px;
  }

  .hearing-screen--line-flow .line-flow-navigation button {
    min-height: 52px;
    gap: 8px;
    padding: 7px 10px;
  }

  .hearing-screen--line-flow .hearing-action {
    min-height: 58px;
  }

  .hearing-screen--line-flow .testimony-overview-dialog {
    width: 100vw;
    height: 100dvh;
    max-height: none;
    margin: 0;
  }

  .hearing-screen--line-flow .testimony-overview-dialog__sheet {
    width: 100%;
    min-height: 100dvh;
    max-height: none;
    box-shadow: none;
  }

  .hearing-screen--line-flow .testimony-overview-dialog__sheet > header,
  .hearing-screen--line-flow .testimony-overview-dialog__sheet > footer {
    padding-right: 14px;
    padding-left: 14px;
  }

  .hearing-screen--line-flow .testimony-overview-dialog__sheet > p,
  .hearing-screen--line-flow .testimony-overview-dialog ol {
    padding-right: 14px;
    padding-left: 14px;
  }

  .hearing-screen--line-flow .testimony-overview-dialog li {
    grid-template-columns: 28px minmax(0, 1fr);
    gap: 8px;
  }

  .hearing-screen--line-flow .testimony-overview-dialog li > div {
    grid-column: 2;
    justify-items: start;
  }
}

@media (max-width: 390px) {
  .hearing-screen--line-flow .line-flow-header span {
    font-size: 0.96rem;
  }

  .hearing-screen--line-flow .line-flow-header button {
    padding-right: 10px;
    padding-left: 10px;
    font-size: 0.84rem;
  }

  .hearing-screen--line-flow .line-flow-navigation button small {
    font-size: 0.84rem;
  }

  .hearing-screen--line-flow .press-beat__burst {
    font-size: clamp(3rem, 17vw, 4.2rem);
  }
}

@media (prefers-reduced-motion: reduce) {
  .hearing-screen--line-flow .line-flow-statement,
  .hearing-screen--line-flow .line-flow-statement__copy,
  .hearing-screen--line-flow .testimony-wire i,
  .hearing-screen--line-flow .press-beat__burst,
  .hearing-screen--line-flow .testimony-update {
    animation: none;
    transition: none;
  }

  .hearing-screen--line-flow .line-flow-statement__skip,
  .hearing-screen--line-flow .line-flow-statement__visual::after {
    display: none !important;
  }

  .counter-response.is-selected {
    animation: none !important;
    transform: none !important;
  }
}

@media (forced-colors: active) {
  .hearing-screen--line-flow .line-flow-header button,
  .hearing-screen--line-flow .line-flow-statement,
  .hearing-screen--line-flow .line-flow-statement__skip,
  .hearing-screen--line-flow .line-flow-navigation button,
  .hearing-screen--line-flow .line-flow-hint,
  .hearing-screen--line-flow .press-beat,
  .hearing-screen--line-flow .testimony-update,
  .hearing-screen--line-flow .testimony-panel--counter,
  .counter-panel__challenge,
  .counter-panel__origin,
  .counter-panel__break,
  .counter-response,
  .counter-feedback,
  .hearing-screen--line-flow .testimony-overview-dialog__sheet,
  .hearing-screen--line-flow .testimony-overview-dialog li button {
    border: 2px solid CanvasText;
    forced-color-adjust: auto;
  }
}

/* Sleep side file --------------------------------------------------------- */
.sleep-screen {
  --sleep-ink: #071725;
  --sleep-panel: #0c2438;
  --sleep-panel-2: #13324a;
  --sleep-cyan: #55e6d2;
  --sleep-violet: #9d83f8;
  --sleep-yellow: #ffd45c;
  --sleep-red: #ff6b67;
  background: #071725;
}

.sleep-narrative-stage,
.sleep-location-stage {
  background: radial-gradient(circle at 50% 20%, #203a58 0, #0a1b2b 58%, #050c14 100%);
}

.sleep-location-art {
  filter: saturate(0.62) brightness(0.5) hue-rotate(16deg);
}

.season-dossier__character-stage {
  z-index: 2;
}

.season-dossier__character-stage .season-dossier__character.character-actor {
  top: auto;
  right: -2%;
  bottom: 0;
  width: min(34vw, 400px);
  height: auto;
  aspect-ratio: 1;
  opacity: 0.4;
}

/* Sleep character slice: the clock is the thesis; the actors stay beneath it. */
.sleep-screen .case-character-stage {
  z-index: 2;
}

.sleep-screen .case-character-stage .character-actor {
  right: clamp(1rem, 7vw, 8rem);
  bottom: -8%;
  width: min(42vw, 36rem);
}

.sleep-character-stage--narrative .character-actor {
  right: clamp(2rem, 8vw, 9rem);
  bottom: 7%;
  width: min(40vw, 34rem);
}

.sleep-character-stage--hearing .character-actor {
  right: clamp(2rem, 9vw, 10rem);
  bottom: -18%;
  width: min(46vw, 38rem);
}

.sleep-character-stage--workbench {
  z-index: 0 !important;
  overflow: visible;
  opacity: 0.24;
}

.sleep-character-stage--workbench .character-actor {
  right: clamp(1rem, 4vw, 5rem);
  bottom: -16%;
  width: min(30vw, 24rem);
}

.sleep-comparison-screen,
.sleep-advice-screen {
  position: relative;
  isolation: isolate;
}

.sleep-comparison-screen .sleep-workbench-heading,
.sleep-comparison-screen .sleep-comparison-stage,
.sleep-comparison-screen .screen-footer,
.sleep-advice-screen .sleep-resolution-dialogue,
.sleep-advice-screen .sleep-workbench-heading,
.sleep-advice-screen .sleep-advice-slot,
.sleep-advice-screen .screen-footer {
  position: relative;
  z-index: 1;
}

@media (max-width: 820px) {
  .sleep-screen .case-character-stage .character-actor {
    right: -10%;
    bottom: 2%;
    width: min(76vw, 29rem);
  }

  .sleep-character-stage--narrative .character-actor {
    right: -12%;
    bottom: 14%;
    width: min(74vw, 28rem);
  }

  .sleep-character-stage--hearing .character-actor {
    right: -14%;
    bottom: -10%;
    width: min(80vw, 31rem);
  }

  .sleep-character-stage--workbench .character-actor {
    right: -8%;
    bottom: -12%;
    width: min(54vw, 21rem);
  }

}

@media (prefers-reduced-motion: reduce) {
  .sleep-screen .case-character-stage--workbench { opacity: 0.14; }
}

.sleep-night-wash {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(100deg, rgba(4, 15, 28, 0.25), rgba(17, 17, 52, 0.72)),
    radial-gradient(circle at 72% 22%, rgba(157, 131, 248, 0.2), transparent 24%);
  pointer-events: none;
}

.sleep-location-stage .location-placard,
.sleep-screen .investigation-mode-panel,
.sleep-screen .scene-dialogue {
  border-color: rgba(85, 230, 210, 0.55);
}

.sleep-location-stage .location-placard span,
.sleep-screen .investigation-mode-panel > header span,
.sleep-screen .scene-dialogue header:not(.aa-nameplate) span { color: var(--sleep-cyan); }

.sleep-briefing-rail { border-top-color: var(--sleep-violet); }

.sleep-claim-unbuilt { border-color: rgba(157, 131, 248, 0.6); }

.sleep-claim-track {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.sleep-claim-track li {
  display: grid;
  gap: 3px;
  min-height: 58px;
  padding: 10px 13px;
  border: 1px solid #315069;
  border-top: 4px solid var(--sleep-violet);
  background: rgba(8, 28, 43, 0.94);
}

.sleep-claim-track li span { color: #fffbea; font-weight: 800; }
.sleep-claim-track li strong { color: #a9bfd0; font: 800 0.84rem var(--font-data); letter-spacing: 0.08em; }
.sleep-claim-track li[data-claim-state="supported"] { border-top-color: var(--sleep-yellow); }
.sleep-claim-track li[data-claim-state="overreach"] { border-top-color: var(--sleep-red); }
.sleep-claim-track li[data-claim-state="overreach"] strong { color: #ffaaa6; }

.sleep-workbench-heading {
  background:
    linear-gradient(112deg, rgba(157, 131, 248, 0.13), transparent 42%),
    var(--sleep-panel);
  border-bottom-color: var(--sleep-violet);
}

.sleep-workbench-heading > div > span { color: var(--sleep-cyan); }

.sleep-clock-mini {
  display: grid;
  grid-template-columns: 1fr 5px 1fr;
  align-items: center;
  min-width: 250px;
  color: #9cabb7;
  font: 900 clamp(1.4rem, 3vw, 2.65rem) var(--font-data);
}

.sleep-clock-mini span:last-child { color: var(--sleep-yellow); }
.sleep-clock-mini i { width: 5px; height: 54px; background: var(--sleep-red); transform: skew(-8deg); }

.sleep-comparison-stage {
  display: grid;
  grid-template-columns: minmax(130px, 0.55fr) minmax(0, 3fr) minmax(130px, 0.55fr);
  gap: 14px;
  padding: 18px;
  background:
    linear-gradient(90deg, transparent 49.7%, rgba(255, 107, 103, 0.34) 49.7% 50.3%, transparent 50.3%),
    #081b2a;
}

.sleep-comparison-stage > aside {
  align-self: stretch;
  padding: 18px 14px;
  border: 1px solid #2e526a;
  border-top: 5px solid var(--sleep-cyan);
  background: rgba(11, 36, 55, 0.96);
}

.sleep-comparison-stage > aside.is-rewrite { border-top-color: var(--sleep-red); }
.sleep-comparison-stage > aside span { display: block; color: var(--sleep-cyan); font: 900 0.84rem var(--font-data); letter-spacing: 0.12em; }
.sleep-comparison-stage > aside strong { display: block; margin-top: 14px; line-height: 1.7; }

.sleep-comparison-list { display: grid; gap: 14px; }
.sleep-comparison-list fieldset {
  display: grid;
  grid-template-columns: minmax(180px, 0.7fr) minmax(0, 2fr);
  gap: 14px;
  margin: 0;
  padding: 16px;
  border: 1px solid #365a72;
  border-left: 5px solid var(--sleep-cyan);
  background: var(--sleep-panel);
}

.sleep-comparison-list fieldset.has-error { border-color: var(--sleep-red); }
.sleep-comparison-list legend { display: contents; }
.sleep-comparison-list legend > span { color: var(--sleep-cyan); font: 900 0.84rem var(--font-data); letter-spacing: 0.12em; }
.sleep-comparison-list legend > strong { display: block; margin: 4px 0; color: #fffbea; font-size: 1.28rem; }
/* `small` 未宣告字級會吃 UA 預設 0.8333em（13.33px），掉出 0.84rem 樓地板。 */
.sleep-comparison-list legend > small { color: #b7c9d5; line-height: 1.5; }
.sleep-comparison-list fieldset > div { grid-column: 2; grid-row: 1 / span 3; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }

.sleep-comparison-list button,
.sleep-advice-slot button {
  min-height: 52px;
  padding: 9px 11px;
  border: 1px solid #3f6680;
  background: #11334b;
  color: #f8f3e7;
  text-align: left;
}

.sleep-comparison-list button span,
.sleep-advice-slot button span { display: block; color: #9fb6c6; font: 800 0.84rem var(--font-data); letter-spacing: 0.08em; }
.sleep-comparison-list button strong,
.sleep-advice-slot button strong { display: block; margin-top: 4px; }
.sleep-comparison-list button.is-selected,
.sleep-advice-slot button.is-selected {
  border-color: var(--sleep-yellow);
  background: #715411;
  box-shadow: inset 4px 0 var(--sleep-yellow);
}

.sleep-resolution-dialogue {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1px;
  margin: 0;
  padding: 1px;
  background: #34526a;
}

.sleep-resolution-dialogue p {
  margin: 0;
  padding: 18px;
  background: #0b2234;
  line-height: 1.65;
}

.sleep-resolution-dialogue strong { display: block; margin-bottom: 5px; color: var(--sleep-yellow); }

.sleep-advice-slot {
  width: min(980px, calc(100% - 36px));
  margin: 24px auto 108px;
  padding: clamp(18px, 3vw, 34px);
  border: 1px solid #40657d;
  border-top: 7px solid var(--sleep-violet);
  background: var(--sleep-panel);
  box-shadow: 14px 14px 0 rgba(1, 8, 14, 0.45);
}

.sleep-advice-slot[data-complete="true"] { border-top-color: var(--sleep-cyan); }
.sleep-advice-slot header span { color: var(--sleep-cyan); font: 900 0.84rem var(--font-data); letter-spacing: 0.12em; }
.sleep-advice-slot header h2 { margin: 6px 0 20px; font-size: clamp(1.45rem, 3vw, 2.5rem); }
.sleep-advice-slot > div { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.sleep-advice-slot button { min-height: 126px; }
.sleep-advice-slot button small { display: block; margin-top: 10px; color: #c2d0da; line-height: 1.5; }

.report-stage.sleep-report-stage { background: #071725; }
.sleep-report-stage .sleep-report-backdrop {
  height: min(100%, 100svh);
  opacity: 0.4;
  object-position: center top;
  mask-image: linear-gradient(#000 45%, transparent);
  pointer-events: none;
}

.sleep-report-stage .case-report { position: relative; }

@media (max-width: 800px) {
  .sleep-claim-track { grid-template-columns: 1fr; }
  .sleep-clock-mini { min-width: 0; width: 100%; }
  .sleep-comparison-stage { grid-template-columns: 1fr; padding: 10px; background: #081b2a; }
  .sleep-comparison-stage > aside { display: none; }
  .sleep-comparison-list fieldset { grid-template-columns: 1fr; padding: 13px; }
  .sleep-comparison-list fieldset > div { grid-column: 1; grid-row: auto; }
  .sleep-resolution-dialogue { grid-template-columns: 1fr; }
  .sleep-advice-slot { width: calc(100% - 20px); margin-bottom: 126px; padding: 15px; }
  .sleep-advice-slot > div { grid-template-columns: 1fr; }
  .sleep-report-boundary { width: 90vw; }
}

@media (max-width: 480px) {
  .sleep-comparison-list fieldset > div { grid-template-columns: 1fr; }
  .sleep-comparison-list button { min-height: 48px; }
}

@media (prefers-reduced-motion: reduce) {
  .sleep-report-boundary { transform: none; }
}

@media (forced-colors: active) {
  .sleep-clock-mini i,
  .sleep-report-boundary i { background: CanvasText; }
  .sleep-comparison-list button.is-selected,
  .sleep-advice-slot button.is-selected { outline: 3px solid Highlight; }
}

/* CASE 05 PART 1 — an original high-stakes ad edit bay and causal hearing. */

.case5-screen {
  --case5-ink: #081824;
  --case5-blue: #123652;
  --case5-red: #d94a3f;
  --case5-yellow: #ffd354;
  --case5-mint: #6ce0d1;
}

.case5-location-stage,
.case5-narrative-stage {
  background: var(--case5-ink);
}

.case5-location-art {
  filter: saturate(0.54) contrast(1.14) brightness(0.59) hue-rotate(-7deg);
}

.case5-narrative-stage .location-art {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.case5-narrative-stage .narrative-case-mark,
.case5-narrative-stage .narrative-dialogue,
.case5-location-stage .location-placard,
.case5-location-stage .investigation-command-menu,
.case5-location-stage .investigation-mode-panel,
.case5-location-stage .hotspot-layer,
.case5-location-stage .examine-guide,
.case5-location-stage .scene-dialogue {
  z-index: 6;
}

.case5-location-stage .investigation-mode-back {
  z-index: 12;
}

/* C5 客廳原圖為 16:9；cover 置中裁切會把左側沙發切一半，偏左保留主要家具，
   量測牆（圖面 x53–83%）在偏左裁切下仍完整可見。熱點座標走 data-scene-x 映射，不受影響。 */
.location-stage[data-location="family-living-room"] .location-art {
  object-position: 22% 48%;
}

.case5-claim-rails {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  padding: 8px clamp(10px, 2vw, 22px);
  border-block: 1px solid #45647a;
  background: #091b2a;
}

.case5-claim-rails section {
  min-width: 0;
  padding: 8px;
  border: 1px solid #36566d;
  background: #102e46;
}

.case5-claim-rails h3 {
  display: inline-block;
  min-width: 68px;
  padding: 2px 8px;
  margin: -15px 0 7px;
  background: var(--case5-yellow);
  color: #301f07;
  font: 950 0.84rem/1.7 var(--font-data);
  letter-spacing: 0.12em;
  text-align: center;
  transform: skew(-7deg);
}

.case5-claim-rails section[data-rail="因為"] h3 { background: var(--case5-red); color: white; }
.case5-claim-rails section[data-rail="證明"] h3 { background: var(--case5-mint); }

.case5-claim-rails section > div {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 8px;
  align-items: center;
  min-height: 34px;
  padding: 5px 7px;
  border-top: 1px solid #284960;
}

.case5-claim-rails section > div span {
  overflow: hidden;
  font-size: 0.84rem;
  font-weight: 800;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.case5-claim-rails section > div strong {
  color: var(--muted-blue);
  font: 800 0.84rem var(--font-data);
  white-space: nowrap;
}

.case5-claim-rails [data-claim-state="overreach"] { border-left: 3px solid var(--case5-red); }
.case5-claim-rails [data-claim-state="overreach"] strong { color: #ffaaa3; }
.case5-claim-rails [data-claim-state="supported"] { border-left: 3px solid var(--case5-mint); }
.case5-claim-rails [data-claim-state="supported"] strong { color: #9ff4ea; }
.case5-claim-rails [data-claim-state="gap"] { border-left: 3px solid var(--case5-yellow); }
.case5-claim-rails [data-claim-state="gap"] strong { color: var(--case5-yellow); }

.case5-calendar-tool {
  position: absolute;
  z-index: 8;
  right: clamp(12px, 3vw, 38px);
  bottom: clamp(12px, 3vh, 34px);
  width: min(650px, calc(100% - 24px));
  padding: 18px;
  border: 1px solid #608097;
  border-top: 5px solid var(--case5-yellow);
  background: rgb(8 24 36 / 0.96);
  box-shadow: 12px 14px 0 rgb(0 0 0 / 0.28);
}

.case5-calendar-tool > span {
  color: var(--case5-yellow);
  font: 900 0.84rem var(--font-data);
  letter-spacing: 0.11em;
}

.case5-calendar-tool h2 {
  margin: 3px 0 10px;
  font-size: clamp(1.25rem, 2.4vw, 1.85rem);
}

.case5-calendar-tool > div,
.case5-use-ribbon {
  display: grid;
  grid-template-columns: auto minmax(60px, 1fr) auto;
  gap: 9px;
  align-items: center;
}

.case5-calendar-tool > div i,
.case5-use-ribbon i {
  height: 8px;
  background: repeating-linear-gradient(90deg, var(--case5-yellow) 0 16px, #9c6d18 16px 21px);
}

.case5-calendar-tool > div b,
.case5-calendar-tool > div strong {
  font: 800 0.84rem var(--font-data);
}

.case5-calendar-tool p {
  margin: 10px 0;
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.case5-calendar-tool button {
  width: 100%;
  min-height: 50px;
  padding: 10px 14px;
  background: var(--case5-yellow);
  color: #2d2007;
  font-weight: 950;
}

.case5-workbench-heading {
  border-bottom-color: var(--case5-yellow);
  background:
    linear-gradient(102deg, transparent 0 63%, rgb(217 74 63 / 0.24) 63% 67%, transparent 67%),
    #102d45;
}

.case5-use-ribbon {
  padding: 13px clamp(18px, 4vw, 46px);
  border-block: 1px solid #785f28;
  background: #251f16;
  color: var(--record-paper);
  font: 800 0.84rem var(--font-data);
}

.case5-use-ribbon strong {
  color: var(--case5-yellow);
  text-align: right;
}

.case5-sort-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 9px;
  width: min(1180px, calc(100% - 36px));
  padding: 20px 0 28px;
  margin: 0 auto;
  list-style: none;
}

.case5-sort-list li {
  display: grid;
  grid-template-columns: 42px minmax(0, 1fr) auto;
  gap: 12px;
  align-items: center;
  min-height: 82px;
  padding: 11px;
  border: 1px solid #486980;
  border-left: 4px solid var(--case5-yellow);
  background: #102c43;
}

.case5-sort-list li.has-error { border-color: var(--case5-red); }

.case5-sort-list li > span {
  display: grid;
  height: 42px;
  background: #091b2a;
  color: var(--case5-yellow);
  font: 950 1.25rem var(--font-data);
  place-items: center;
}

.case5-sort-list small,
.case5-sort-list strong { display: block; }
.case5-sort-list small { color: var(--case5-mint); font: 800 0.84rem var(--font-data); }

.case5-sort-list li > div:last-child {
  display: flex;
  gap: 5px;
}

.case5-sort-list button {
  width: 42px;
  height: 42px;
  border: 1px solid #6a8799;
  background: #1b415e;
  color: white;
  font-weight: 950;
}

.case5-axis-items {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  width: min(1280px, calc(100% - 36px));
  padding: 20px 0 28px;
  margin: 0 auto;
}

.case5-axis-items fieldset {
  min-width: 0;
  padding: 12px;
  border: 1px solid #486980;
  background: #102c43;
}

.case5-axis-items fieldset.has-error { border-color: var(--case5-red); }
.case5-axis-items legend { max-width: 92%; padding: 0 7px; }
.case5-axis-items legend small,
.case5-axis-items legend strong { display: block; }
.case5-axis-items legend small { color: var(--case5-mint); font: 800 0.84rem var(--font-data); }

.case5-axis-items fieldset > div {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(118px, 1fr));
  gap: 7px;
}

.case5-axis-items button {
  min-height: 50px;
  padding: 9px 10px;
  border: 1px solid #64839a;
  background: #183d59;
  color: var(--record-paper);
  text-align: left;
}

.case5-axis-items button.is-selected {
  border-color: var(--case5-yellow);
  background: #70501c;
  box-shadow: inset 4px 0 0 var(--case5-yellow);
}

.case5-checkpoint {
  min-height: 100svh;
  background:
    linear-gradient(118deg, transparent 0 57%, rgb(217 74 63 / 0.18) 57% 62%, transparent 62%),
    linear-gradient(#102f48 1px, transparent 1px),
    var(--case5-ink);
  background-size: auto, 100% 44px, auto;
}

.case5-checkpoint__stage {
  width: min(1060px, calc(100% - 32px));
  padding: clamp(24px, 5vw, 58px);
  margin: clamp(24px, 6vh, 70px) auto;
  border: 1px solid #658399;
  border-left: 8px solid var(--case5-yellow);
  background: rgb(9 28 43 / 0.96);
  box-shadow: 18px 20px 0 rgb(217 74 63 / 0.34);
}

.case5-checkpoint__stage > span {
  color: var(--case5-yellow);
  font: 900 0.84rem var(--font-data);
  letter-spacing: 0.13em;
}

.case5-checkpoint__stage h1 {
  max-width: 13em;
  margin: 8px 0;
  font-size: clamp(2.3rem, 6vw, 5rem);
  line-height: 1.05;
}

.case5-checkpoint__stage > p { color: var(--muted-blue); }
.case5-checkpoint__stage code { color: var(--case5-mint); }

.case5-checkpoint__stage ol {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 9px;
  padding: 0;
  margin: 20px 0;
  list-style: none;
}

.case5-checkpoint__stage li {
  padding: 14px;
  border-top: 4px solid var(--case5-mint);
  background: #12344e;
}

.case5-checkpoint__stage li:nth-child(n + 3) { border-top-color: var(--case5-red); }
.case5-checkpoint__stage li strong { display: block; color: var(--case5-yellow); }

.case5-checkpoint__stage > div:last-child {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 22px;
}

@media (max-width: 820px) {
  .case5-claim-rails {
    grid-template-columns: 1fr;
    max-height: 210px;
    overflow-y: auto;
  }

  .case5-sort-list,
  .case5-axis-items {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 560px) {
  .case5-calendar-tool {
    position: relative;
    right: auto;
    bottom: auto;
    width: calc(100% - 24px);
    margin: calc(var(--investigation-image-height) + 12px) 12px 14px;
  }

  .case5-calendar-tool > div,
  .case5-use-ribbon {
    grid-template-columns: 1fr;
  }

  .case5-calendar-tool > div i,
  .case5-use-ribbon i { width: 100%; }
  .case5-use-ribbon strong { text-align: left; }

  .case5-sort-list,
  .case5-axis-items {
    width: calc(100% - 20px);
    padding-top: 12px;
  }

  .case5-sort-list li {
    grid-template-columns: 34px minmax(0, 1fr);
  }

  .case5-sort-list li > span { height: 36px; }
  .case5-sort-list li > div:last-child { grid-column: 2; }

  .case5-checkpoint__stage ol { grid-template-columns: 1fr; }
  .case5-checkpoint__stage > div:last-child { align-items: stretch; flex-direction: column; }
}

@media (forced-colors: active) {
  .case5-claim-rails section,
  .case5-calendar-tool,
  .case5-sort-list li,
  .case5-axis-items fieldset,
  .case5-axis-items button,
  .case5-checkpoint__stage,
  .case5-checkpoint__stage li {
    border: 2px solid CanvasText;
    forced-color-adjust: auto;
  }
}

/* CASE 04 — radiology film, sealed verdict, and four transparent reasoning layers. */
.case4-screen {
  --case4-cobalt: #173967;
  --case4-film: #72d6dc;
  --case4-ivory: #f5f0df;
  --case4-verdict: #b83d32;
  background:
    linear-gradient(135deg, rgba(114, 214, 220, 0.07), transparent 34%),
    var(--hearing-navy-deep);
}

.claim-track--case4 {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.case4-location-stage,
.case4-narrative-stage {
  isolation: isolate;
}

.case-character-stage--case4 {
  z-index: 2;
}

.case-character-stage--case4 .character-actor {
  right: clamp(2rem, 8vw, 10rem);
  bottom: -8%;
  width: min(43vw, 38rem);
}

.case4-character--hearing {
  filter: drop-shadow(-16px 18px 14px rgb(0 0 0 / 0.36));
}

.case-character-stage--case4-workbench {
  z-index: 0;
  overflow: visible;
  opacity: 0.2;
}

.case-character-stage--case4-report {
  z-index: 1;
  opacity: 0.18;
}

.case-character-stage--case5 {
  z-index: 2;
}

.case-character-stage--case5 .character-actor {
  right: clamp(2rem, 8vw, 10rem);
  bottom: -10%;
  width: min(46vw, 38rem);
}

.case5-character-stage--hearing .character-actor {
  right: clamp(4rem, 12vw, 14rem);
  bottom: -4%;
  width: min(34vw, 30rem);
}

.case-character-stage--case5-workbench {
  z-index: 0;
  overflow: visible;
  opacity: 0.2;
}

.case-character-stage--case5-report {
  z-index: 1;
  opacity: 0.18;
}

.case4-location-art {
  filter: saturate(0.72) contrast(1.08) hue-rotate(164deg);
}

.case4-narrative-stage .narrative-case-mark,
.case4-narrative-stage .narrative-dialogue,
.case4-location-stage .location-placard,
.case4-location-stage .investigation-command-dock,
.case4-location-stage .investigation-mode-panel,
.case4-location-stage .hotspot-layer,
.case4-location-stage .examine-guide,
.case4-location-stage .scene-dialogue {
  z-index: 4;
}

.case4-report-stage {
  overflow: hidden;
}

.case4-report-stage .report-chain ol {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

.case4-report-layers {
  position: absolute;
  top: 45px;
  left: 50%;
  width: min(820px, 74vw);
  height: 420px;
  transform: translateX(-50%);
  pointer-events: none;
}

.case4-report-layers i {
  position: absolute;
  inset: calc(var(--layer, 0) * 18px);
  transform: rotate(calc((var(--layer, 0) - 1.5) * 1.6deg));
  border: 1px solid rgba(114, 214, 220, 0.24);
  background: rgba(114, 214, 220, 0.035);
}

.case4-report-layers i:nth-child(2) { --layer: 1; }
.case4-report-layers i:nth-child(3) { --layer: 2; }
.case4-report-layers i:nth-child(4) { --layer: 3; }

.case4-report-layers strong {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) rotate(-4deg);
  color: rgba(255, 214, 106, 0.42);
  font-family: var(--font-display);
  font-size: clamp(3.5rem, 10vw, 8rem);
  line-height: 0.72;
  text-align: center;
}

.case4-report-layers small {
  /* 0.16em 相對於水印大字：桌機 20.5px 沒問題，但行動版母體收到 3.5rem 時只剩 8.96px。
     max() 保留比例關係並架住 0.84rem 樓地板（只在小視窗生效，桌機值不變）。 */
  font-size: max(0.84rem, 0.16em);
  letter-spacing: 0.08em;
}

@media (max-width: 760px) {
  .claim-track--case4 {
    grid-template-columns: 1fr;
  }

  .case4-report-layers {
    width: 92vw;
  }

  .case4-report-stage .report-chain ol {
    grid-template-columns: 1fr;
  }

  .case-character-stage--case4 .character-actor {
    right: -12%;
    bottom: -10%;
    width: min(78vw, 29rem);
  }

  .case-character-stage--case4-workbench .character-actor {
    right: -8%;
    bottom: -12%;
    width: min(52vw, 21rem);
  }

  .case-character-stage--case4-report .character-actor {
    right: -24%;
    width: min(86vw, 29rem);
  }

  .case-character-stage--case5 .character-actor {
    right: -12%;
    bottom: 4%;
    width: min(78vw, 29rem);
  }

  .case5-character-stage--hearing .character-actor {
    right: -16%;
    bottom: -10%;
    width: min(82vw, 31rem);
  }

  .case-character-stage--case5-workbench .character-actor {
    right: -8%;
    bottom: -12%;
    width: min(52vw, 21rem);
  }

  .case-character-stage--case5-report .character-actor {
    right: -24%;
    width: min(86vw, 29rem);
  }
}

@media (prefers-reduced-motion: reduce) {
  .case4-report-layers i,
  .case4-report-layers strong {
    transform: none;
  }

  .case4-report-layers strong {
    top: 35%;
    left: 35%;
  }
}

@media (forced-colors: active) {
  .case4-sentence-card,
  .case4-sentence-card button,
  .case4-report-layers i {
    border: 2px solid CanvasText;
    forced-color-adjust: auto;
  }
}

.case3-character {
  position: absolute;
  z-index: 2;
  right: clamp(2%, 6vw, 10%);
  bottom: -9%;
  width: min(40vw, 520px);
  height: 94%;
  object-fit: contain;
  object-position: bottom right;
  filter: drop-shadow(-16px 18px 14px rgb(0 0 0 / 0.36));
  pointer-events: none;
}

.case3-narrative-stage .case3-character { height: 98%; }
.case3-narrative-stage .narrative-dialogue { margin-right: min(10vw, 140px); }

.case3-location-stage .case3-location-art {
  filter: saturate(0.67) brightness(0.72) contrast(1.08);
}

.case3-location-stage .investigation-command-menu,
.case3-location-stage .investigation-mode-panel,
.case3-location-stage .examine-guide,
.case3-location-stage .hotspot-layer,
.case3-location-stage .scene-dialogue,
.case3-location-stage .location-placard { z-index: 5; }

.case3-location-stage .investigation-mode-back { z-index: 12; }

.uniform-card-tools {
  position: absolute;
  z-index: 7;
  right: clamp(14px, 3vw, 42px);
  bottom: clamp(18px, 4vh, 44px);
  width: min(680px, calc(100% - 28px));
  padding: 18px;
  border: 1px solid #6f899a;
  border-left: 4px solid var(--evidence-amber);
  background: rgb(8 24 39 / 0.96);
  box-shadow: 10px 12px 0 rgb(0 0 0 / 0.28);
}

.uniform-card-tools header span {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.1em;
}

.uniform-card-tools h2 { margin: 4px 0 12px; font-size: clamp(1.25rem, 2.2vw, 1.8rem); }

.uniform-card-list,
.uniform-card-actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 9px;
}

.uniform-card-list button,
.uniform-card-actions button,
.uniform-card-back {
  min-height: 58px;
  padding: 10px 12px;
  border: 1px solid #59758a;
  background: #173550;
  color: var(--record-paper);
  text-align: left;
}

.uniform-card-list button[aria-pressed="true"] {
  border-color: var(--trace-teal-bright);
  box-shadow: inset 4px 0 0 var(--trace-teal);
}

.uniform-card-list span,
.uniform-card-list strong,
.uniform-card-list small { display: block; }
.uniform-card-list span { color: var(--evidence-amber-soft); font: 800 0.84rem var(--font-data); }
.uniform-card-list small { color: var(--muted-blue); }
.uniform-card-actions { margin-top: 10px; }
.uniform-card-actions button:last-child { border-color: var(--evidence-amber); }
.uniform-card-back { display: none; }

.case3-workbench-layout {
  display: grid;
  grid-template-columns: minmax(250px, 0.48fr) minmax(0, 1.52fr);
  min-height: 0;
  border-top: 1px solid var(--line-blue);
}

.case3-guide {
  padding: clamp(18px, 3vw, 30px);
  border-right: 1px solid var(--line-blue);
  background: #102a42;
}

.case3-guide > span { color: var(--evidence-amber-soft); font: 900 0.84rem var(--font-data); letter-spacing: 0.1em; }
.case3-guide h2 { margin: 6px 0 14px; font-size: clamp(1.45rem, 2.5vw, 2rem); }
.case3-guide dl { display: grid; gap: 10px; }
.case3-guide dl div { padding: 11px; border-left: 3px solid var(--trace-teal); background: #0b2033; }
.case3-guide dt { color: var(--trace-teal-bright); font-size: 0.84rem; font-weight: 900; }
.case3-guide dd { margin: 2px 0 0; }
.case3-guide p { color: var(--muted-blue); font-size: 0.84rem; }
.case3-guide button { width: 100%; min-height: 50px; padding: 9px 12px; border: 1px solid var(--evidence-amber); background: var(--evidence-amber); color: #251710; font-weight: 900; }
.case3-guide[data-read="true"] { box-shadow: inset 5px 0 0 var(--trace-teal); }

.case3-track-work { min-width: 0; padding: clamp(16px, 3vw, 30px); background: #0b2033; }

.dual-track {
  position: relative;
  padding: 18px;
  border: 1px solid #49677e;
  background: #081827;
}

.dual-track__axis > span { display: block; margin-bottom: 8px; color: var(--evidence-amber-soft); font: 900 0.84rem var(--font-data); letter-spacing: 0.1em; }
.dual-track__axis--progress > span { color: var(--trace-teal-bright); }
.dual-track__axis ol { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; padding: 0; margin: 0; list-style: none; }
.dual-track__axis li { min-height: 64px; padding: 10px; border-top: 4px solid var(--evidence-amber); background: #173550; }
.dual-track__axis--progress li { border-top-color: var(--trace-teal); }
.dual-track__axis small,
.dual-track__axis strong { display: block; }
.dual-track__axis small { color: var(--muted-blue); font: 700 0.84rem var(--font-data); }
.dual-track__axis .is-birthday { border: 2px solid var(--evidence-amber); box-shadow: inset 0 0 0 2px #081827; }

.dual-track__divider {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 0;
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.dual-track__divider b { display: grid; flex: 0 0 42px; height: 42px; border: 2px solid var(--evidence-amber); color: var(--evidence-amber-soft); font: 900 1.8rem var(--font-data); place-items: center; }

.case3-workbench-items { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 14px; }
.case3-workbench-item { min-width: 0; padding: 12px; border: 1px solid #4d6b80; background: #102a42; }
.case3-workbench-item.has-error { border-color: var(--question-coral); }
.case3-workbench-item legend { padding: 0 6px; }
.case3-workbench-item legend span,
.case3-workbench-item legend strong { display: block; }
.case3-workbench-item legend span { color: var(--muted-blue); font: 700 0.84rem var(--font-data); }
.case3-workbench-item > div { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 7px; }
.case3-workbench-item button { min-height: 48px; padding: 8px 10px; border: 1px solid #59758a; background: #173550; color: var(--record-paper); text-align: left; }
.case3-workbench-item button.is-selected { border-color: var(--evidence-amber-soft); background: #6a4521; box-shadow: inset 4px 0 0 var(--evidence-amber); }

.case3-report-trace path:first-child { stroke: var(--evidence-amber); stroke-width: 6; }
.case3-report-trace path:last-child { stroke: var(--trace-teal-bright); }
.case3-side-unlock { border-color: var(--trace-teal-bright); }
.case3-side-unlock small { display: block; margin-top: 8px; color: var(--muted-blue); }

@media (max-width: 820px) {
  .case3-character { right: -8%; width: min(68vw, 430px); height: 76%; }
  .case3-narrative-stage .case3-character { right: -12%; height: 80%; }
  .case3-narrative-stage .narrative-dialogue { margin-right: 0; }
  .case3-workbench-layout { grid-template-columns: 1fr; }
  .case3-guide { border-right: 0; border-bottom: 1px solid var(--line-blue); }
}

@media (max-width: 560px) {
  .uniform-card-tools { position: relative; right: auto; bottom: auto; width: calc(100% - 24px); margin: auto 12px 14px; }
  .case3-location-stage[data-location="living-room"][data-mode="examine"]:has(.uniform-card-tools) > .investigation-mode-back { display: none; }
  .uniform-card-tools .uniform-card-back {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    width: 100%;
    min-height: 48px;
    margin-top: 10px;
    font-weight: 800;
  }
  .uniform-card-list,
  .uniform-card-actions,
  .case3-workbench-items { grid-template-columns: 1fr; }
  .dual-track__axis ol { grid-template-columns: 1fr; }
}

@media (forced-colors: active) {
  .uniform-card-tools,
  .case3-guide,
  .dual-track,
  .case3-workbench-item { border: 2px solid CanvasText; }
}

/* CASE 02 — one chart, two lenses. Original courtroom energy, growth-data language. */

.case2-screen {
  --case2-grid: rgb(105 222 209 / 0.13);
}

.claim-track--dual {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.claim-track--unbuilt {
  display: flex;
  min-height: 58px;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px clamp(14px, 3vw, 34px);
  border: 1px dashed #6f899a;
  background: #102a42;
  color: var(--muted-blue);
}

.claim-track--unbuilt span {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.11em;
}

.case2-scene-grid {
  position: absolute;
  z-index: 1;
  inset: 0;
  background-image:
    linear-gradient(var(--case2-grid) 1px, transparent 1px),
    linear-gradient(90deg, var(--case2-grid) 1px, transparent 1px);
  background-size: 72px 72px;
  mask-image: linear-gradient(90deg, transparent, #000 35%, #000);
  pointer-events: none;
}

.case2-character {
  position: absolute;
  z-index: 2;
  right: clamp(1%, 4vw, 7%);
  bottom: -9%;
  width: min(43vw, 570px);
  height: 94%;
  object-fit: contain;
  object-position: bottom right;
  filter: drop-shadow(-18px 18px 16px rgb(0 0 0 / 0.34));
  pointer-events: none;
}

.case2-narrative-stage .case2-character {
  right: 5%;
  height: 97%;
}

.case2-narrative-stage .narrative-dialogue {
  margin-right: min(12vw, 170px);
}

.case2-location-stage .location-art {
  filter: saturate(0.72) contrast(1.08) brightness(0.82);
}

.case2-location-stage .investigation-command-menu,
.case2-location-stage .investigation-mode-panel,
.case2-location-stage .examine-guide,
.case2-location-stage .hotspot-layer,
.case2-location-stage .scene-dialogue,
.case2-location-stage .location-placard,
.case2-location-stage .investigation-mode-back {
  z-index: 5;
}

.case2-location-stage .investigation-mode-back {
  z-index: 12;
}

.archive-tools {
  position: absolute;
  z-index: 6;
  right: clamp(12px, 3vw, 42px);
  bottom: clamp(16px, 3vh, 36px);
  width: min(620px, calc(100% - 24px));
  padding: 18px;
  border: 1px solid #6f899a;
  border-left: 4px solid var(--evidence-amber);
  background: rgb(8 24 39 / 0.96);
  box-shadow: 10px 12px 0 rgb(0 0 0 / 0.28);
}

.archive-tools > div:first-child span,
.curve-gate-preview span {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.12em;
}

.archive-tools h2 {
  margin: 3px 0 2px;
  font-size: clamp(1.25rem, 2vw, 1.75rem);
}

.archive-tools p {
  margin: 0 0 12px;
  color: var(--muted-blue);
}

.archive-tools__actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 9px;
}

.archive-tools__actions button {
  min-height: 64px;
  padding: 10px 12px;
  border: 1px solid #59758a;
  background: #173550;
  color: var(--record-paper);
  text-align: left;
}

.archive-tools__actions button:last-child {
  border-color: var(--trace-teal-bright);
}

.archive-tools__actions strong,
.archive-tools__actions small {
  display: block;
}

.archive-tools__actions small {
  color: var(--muted-blue);
}

.curve-gate-preview {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding-top: 12px;
  margin-top: 12px;
  border-top: 1px solid var(--line-blue);
}

.curve-gate-preview[data-ready="false"] strong {
  color: var(--record-paper-muted);
  filter: grayscale(1);
}

.case2-workbench-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.5fr) minmax(310px, 0.72fr);
  min-height: 0;
  border-top: 1px solid var(--line-blue);
}

.trajectory-board {
  min-width: 0;
  padding: clamp(16px, 3vw, 34px);
  margin: 0;
  border-right: 1px solid var(--line-blue);
  background:
    linear-gradient(rgb(49 83 109 / 0.18) 1px, transparent 1px),
    linear-gradient(90deg, rgb(49 83 109 / 0.18) 1px, transparent 1px),
    #0b2033;
  background-size: 30px 30px;
}

.trajectory-board figcaption {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 10px;
}

.trajectory-board figcaption span {
  color: var(--muted-blue);
  font-family: var(--font-data);
  font-size: 0.84rem;
  letter-spacing: 0.1em;
}

.trajectory-board figcaption strong {
  color: var(--evidence-amber-soft);
  font-size: clamp(1.15rem, 2vw, 1.65rem);
}

.trajectory-board svg {
  width: 100%;
  max-height: 380px;
  overflow: visible;
  border: 1px solid #49677e;
  background: rgb(8 24 39 / 0.91);
}

.trajectory-board[data-verified="false"] svg {
  filter: grayscale(1);
  opacity: 0.48;
}

.curve-reference {
  stroke: #4b667b;
  stroke-dasharray: 5 8;
}

.curve-reference-label,
.curve-point text {
  fill: #c8d7de;
  font: 700 18px var(--font-data);
}

.curve-line {
  fill: none;
  stroke-width: 8;
  vector-effect: non-scaling-stroke;
}

.curve-line--a,
.curve-point--a circle {
  stroke: var(--trace-teal-bright);
}

.curve-line--b,
.curve-point--b circle {
  stroke: var(--evidence-amber-soft);
}

.curve-line--b {
  stroke-dasharray: 15 11;
}

.curve-point circle {
  fill: #0b2033;
  stroke-width: 6;
}

.curve-point--a text {
  fill: var(--trace-teal-bright);
}

.curve-point--b text {
  fill: var(--evidence-amber-soft);
}

.curve-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 20px;
  padding: 12px 0;
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.curve-legend strong {
  margin-left: auto;
  color: var(--record-paper);
}

.curve-key {
  display: inline-block;
  width: 28px;
  margin-right: 7px;
  border-top: 4px solid var(--trace-teal-bright);
  vertical-align: middle;
}

.curve-key--b {
  border-top-color: var(--evidence-amber-soft);
  border-top-style: dashed;
}

.trajectory-table-wrap {
  overflow-x: auto;
  border: 1px solid var(--line-blue);
}

.trajectory-table-wrap table {
  width: 100%;
  min-width: 650px;
  border-collapse: collapse;
  background: #0f293f;
  font-family: var(--font-data);
  font-size: 0.84rem;
}

.trajectory-table-wrap caption {
  padding: 7px 10px;
  color: var(--muted-blue);
  text-align: left;
}

.trajectory-table-wrap th,
.trajectory-table-wrap td {
  padding: 8px 10px;
  border-top: 1px solid var(--line-blue);
  text-align: left;
  white-space: nowrap;
}

.trajectory-table-wrap small {
  color: var(--muted-blue);
}

.lens-decisions {
  display: grid;
  align-content: start;
  gap: 12px;
  padding: clamp(16px, 3vw, 28px);
  background: #102a42;
}

.lens-record {
  padding: 14px;
  border: 1px solid #4d6b80;
  background: rgb(8 24 39 / 0.72);
}

.lens-record.has-error {
  border-color: var(--question-coral);
}

.lens-record legend {
  padding: 0 7px;
}

.lens-record legend span,
.lens-record legend strong {
  display: block;
}

.lens-record legend span {
  color: var(--muted-blue);
  font-family: var(--font-data);
  font-size: 0.84rem;
  letter-spacing: 0.1em;
}

.lens-record > div {
  display: grid;
  gap: 8px;
}

.lens-record button {
  min-height: 50px;
  padding: 9px 12px;
  border: 1px solid #59758a;
  background: #173550;
  color: var(--record-paper);
  text-align: left;
}

.lens-record button.is-selected {
  border-color: var(--evidence-amber-soft);
  background: #6a4521;
  box-shadow: inset 4px 0 0 var(--evidence-amber);
}

.case2-report-trace path:first-child {
  stroke: var(--trace-teal-bright);
}

.case2-report-trace path:last-child {
  stroke: var(--evidence-amber);
  stroke-dasharray: 14 10;
}

.report-revised-fields {
  padding: 18px;
  border: 1px solid #b9ad96;
  background: #e9e3d5;
}

.report-revised-fields > span {
  color: #5c3a2c;
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.1em;
}

.report-revised-fields ul {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  padding: 0;
  margin: 10px 0 0;
  list-style: none;
}

.report-revised-fields li {
  padding: 10px;
  border-left: 3px solid var(--trace-teal);
  background: var(--record-paper);
  color: var(--record-ink);
  font-weight: 800;
}

@media (max-width: 820px) {
  .case2-character {
    right: -7%;
    width: min(70vw, 440px);
    height: 78%;
  }

  .case2-narrative-stage .case2-character {
    right: -12%;
    height: 80%;
  }

  .case2-narrative-stage .narrative-dialogue {
    margin-right: 0;
  }

  .case2-workbench-layout {
    grid-template-columns: 1fr;
  }

  .trajectory-board {
    border-right: 0;
    border-bottom: 1px solid var(--line-blue);
  }

  .report-revised-fields ul {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 560px) {
  .claim-track--unbuilt,
  .trajectory-board figcaption,
  .curve-gate-preview {
    align-items: flex-start;
    flex-direction: column;
  }

  .claim-track--dual .claim-track__item {
    min-height: 68px;
  }

  .archive-tools {
    position: relative;
    right: auto;
    bottom: auto;
    width: calc(100% - 24px);
    margin: calc(var(--investigation-image-height) + 12px) 12px 14px;
  }

  .archive-tools__actions {
    grid-template-columns: 1fr;
  }

  .curve-legend strong {
    width: 100%;
    margin-left: 0;
  }

}

@media (prefers-reduced-motion: reduce) {
  .case2-scene-grid {
    background-image: linear-gradient(var(--case2-grid) 1px, transparent 1px);
  }
}

@media (forced-colors: active) {
  .archive-tools,
  .trajectory-board svg,
  .trajectory-table-wrap,
  .lens-record,
  .lens-record button,
  .report-revised-fields {
    border: 2px solid CanvasText;
  }
}

/* ===========================================================================
   Season one v2 — original record-hearing interface
   ========================================================================== */

.season-screen,
.narrative-screen,
.gap-screen,
.workbench-screen,
.report-screen {
  position: relative;
  isolation: isolate;
}

.season-screen::before,
.gap-screen::before,
.workbench-screen::before {
  position: absolute;
  z-index: -1;
  inset: 0;
  background:
    linear-gradient(115deg, transparent 0 44%, rgb(105 57 52 / 0.3) 44.2% 56%, transparent 56.2%),
    repeating-linear-gradient(90deg, transparent 0 79px, rgb(169 192 206 / 0.045) 79px 80px),
    var(--hearing-navy-deep);
  content: "";
}

.text-button {
  min-height: 44px;
  padding: 8px 12px;
  border-bottom: 2px solid currentcolor;
  background: transparent;
  color: inherit;
  font-weight: 850;
}

.action-button--navy {
  border-color: var(--muted-blue);
  background: var(--hearing-navy);
  color: var(--record-paper);
}

.action-button--teal {
  border-color: var(--trace-teal-bright);
  background: #106d68;
  color: #fff;
}

/* ===========================================================================
   Season docket — 季入口卷宗牆（計畫 §1.4 方向⑤）

   語彙全部沿用 P1–P3.5 已上線的殼：檔案籤＝`.case-strip--file-tab` 的牛皮紙梯形籤
   （拉出一份卷宗後，同一張籤就變成該案 HUD 頂欄）；卷宗紙質＝`.case-report` 的纖維
   紋理與線繩裝訂；蓋章＝`.report-stamp`／`.report-datestamp` 的紅印泥雙框章。

   蓋章欄在四種狀態都在：已結案蓋紅印泥、調查中蓋琥珀活頁章、未接案與未解鎖維持
   空章框——「還沒蓋章」本身就是狀態，所以不再另用 ✓／◆／— 記號重複表達一次。

   紙正，墨歪：紙、卷宗夾與檔案籤一律對齊格線，只有印章與編號章傾斜。整張紙跟著歪
   是剪貼簿語彙，不是檔案室語彙。

   字級：季入口屬**檔案層**，所有字級落在 DESIGN.md typography.scale 五格
   （0.84／0.95／1.05／1.2／1.4rem）；唯一例外是季名 lockup，屬舞台層、逐元件 clamp。
   ========================================================================== */

.season-hero,
.season-docket {
  --kraft: #d2ac72;
  --kraft-lit: #e3c492;
  --kraft-deep: #c8a167;
  --kraft-dust: #bea47c;
  --kraft-dust-lit: #d0b88e;
  --kraft-edge: #896438;
  --kraft-ink: #40331e;
  --kraft-rule: rgb(105 57 52 / 0.34);
  --kraft-hole: rgb(25 43 60 / 0.5);
  --kraft-fold: rgb(62 33 31 / 0.2);
  /* Dark red ink stays readable on the deepest kraft shade. */
  --ink-red: #672019;
  --ink-red-line: rgb(103 32 25 / 0.8);
  --ink-red-wash: rgb(166 51 40 / 0.08);
  --ink-red-bloom: rgb(166 51 40 / 0.15);
  --ink-amber-deep: #9a6a10;
  --dossier-drop: rgb(8 24 39 / 0.55);
  /* 四角括號沿用全站焦點語彙的**形狀**，但改墨色：琥珀對牛皮紙只有 1.47:1，
     等於畫了看不見的框（DESIGN.md：焦點可見性優先於品牌裝飾，紙面以深墨補強）。
     墨色對牛皮紙 9.9:1、對琥珀按鈕 7.7:1。 */
  --ink-bracket:
    linear-gradient(var(--record-ink), var(--record-ink)) 0 0 / 12px 3px no-repeat,
    linear-gradient(var(--record-ink), var(--record-ink)) 0 0 / 3px 12px no-repeat,
    linear-gradient(var(--record-ink), var(--record-ink)) 100% 0 / 12px 3px no-repeat,
    linear-gradient(var(--record-ink), var(--record-ink)) 100% 0 / 3px 12px no-repeat,
    linear-gradient(var(--record-ink), var(--record-ink)) 0 100% / 12px 3px no-repeat,
    linear-gradient(var(--record-ink), var(--record-ink)) 0 100% / 3px 12px no-repeat,
    linear-gradient(var(--record-ink), var(--record-ink)) 100% 100% / 12px 3px no-repeat,
    linear-gradient(var(--record-ink), var(--record-ink)) 100% 100% / 3px 12px no-repeat;
  --kraft-fiber:
    var(--paper-grain),
    repeating-linear-gradient(7deg, rgb(100 65 27 / 0.035) 0 1px, transparent 1px 5px);
}

.season-hero {
  position: relative;
  display: grid;
  min-height: clamp(230px, 34dvh, 330px);
  place-items: end center;
  overflow: hidden;
  border-bottom: 6px solid var(--chamber-mahogany);
  background: var(--hearing-navy-deep);
}

.season-hero__art {
  position: absolute;
  inset: 0;
  overflow: hidden;
  background: var(--hearing-navy-deep);
}

.season-hero__art > img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 38%;
  filter: brightness(0.5) saturate(0.8);
}

.season-hero__art::after {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(0deg, var(--hearing-navy-deep), rgb(8 24 39 / 0.2) 58%, rgb(8 24 39 / 0.64)),
    linear-gradient(90deg, rgb(8 24 39 / 0.58), transparent 48%, rgb(8 24 39 / 0.58));
  content: "";
}

.season-hero__utility {
  position: absolute;
  z-index: 2;
  top: max(18px, env(safe-area-inset-top));
  right: 24px;
}

.season-hero__copy {
  position: relative;
  display: flex;
  z-index: 1;
  width: min(100% - 48px, 1120px);
  flex-direction: column;
  align-items: flex-start;
  padding: 68px 0 30px;
}

.season-hero__copy > span,
.season-docket__heading > span,
.workbench-heading > div > span,
.decision-dialog__kicker {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 800;
  letter-spacing: 0.15em;
  text-transform: uppercase;
}

.season-hero__copy > p:first-child {
  margin: 0;
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 800;
  letter-spacing: 0.12em;
}

/* 舞台層 per-component clamp（DESIGN.md：舞台層不設通用刻度）。標題畫面已有完整
   lockup，季入口這一份是「抽屜正面的銘牌」，只需認得出是同一季，不需再演一次。 */
.season-hero__copy h1 {
  margin: 8px 0 13px;
  font-family: var(--font-title);
  font-size: clamp(2.2rem, 4vw, 3.4rem);
  letter-spacing: 0.05em;
  line-height: 1.12;
  text-shadow: 5px 6px 0 var(--chamber-mahogany-deep);
}

.season-hero__copy h1 span,
.season-hero__copy h1 strong {
  display: block;
}

.season-hero__copy h1 span {
  margin-bottom: 5px;
  color: var(--muted-blue);
  font-size: 0.4em;
  letter-spacing: 0.08em;
  line-height: 1.2;
}

.season-hero__copy > blockquote {
  max-width: 36em;
  margin: 0;
  color: var(--record-paper);
  font-size: 1.2rem;
  font-weight: 750;
}

.title-safety {
  max-width: 52ch;
  margin: 20px 0 0;
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.season-docket {
  width: min(1120px, calc(100% - 48px));
  margin: 0 auto;
  padding: 40px 0 78px;
}

/* --- 桌上這份：唯一被抽出來攤在桌面上的卷宗 --- */

.season-resume-card {
  position: relative;
  display: grid;
  width: 100%;
  min-height: 100px;
  grid-template-columns: 84px minmax(210px, 0.72fr) minmax(250px, 1fr);
  align-items: stretch;
  overflow: hidden;
  padding: 0;
  margin: 0 0 36px;
  border: 2px solid var(--kraft-edge);
  background: var(--kraft-fiber), linear-gradient(180deg, var(--kraft-lit), var(--kraft));
  color: var(--record-ink);
  text-align: left;
  box-shadow: 8px 9px 0 var(--dossier-drop);
}

.season-resume-card__badge {
  display: grid;
  place-items: center;
  border-right: 2px solid var(--kraft-edge);
  background: var(--hearing-navy);
  color: var(--evidence-amber);
  font-family: var(--font-title);
  font-size: 1.4rem;
  font-weight: 700;
}

.season-resume-card__banner,
.season-resume-card__paper {
  display: flex;
  min-width: 0;
  justify-content: center;
  flex-direction: column;
  padding: 16px 20px;
}

.season-resume-card__banner {
  background: var(--hearing-navy);
  color: var(--record-paper);
}

.season-resume-card__banner small,
.season-resume-card__paper small {
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 800;
  letter-spacing: 0.04em;
}

.season-resume-card__banner strong {
  overflow: hidden;
  font-family: var(--font-title);
  font-size: 1.2rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 量尺刻度（DESIGN.md §Ruler Ticks）：這份正在被量，所以刻度是琥珀的。 */
.season-resume-card__paper {
  position: relative;
  gap: 3px;
  padding-left: 30px;
  border-left: 1px solid var(--kraft-rule);
}

.season-resume-card__paper::before {
  position: absolute;
  top: 15px;
  bottom: 15px;
  left: 14px;
  width: 6px;
  background: repeating-linear-gradient(180deg, var(--evidence-amber) 0 2px, transparent 2px 10px);
  content: "";
  pointer-events: none;
}

.season-resume-card__paper strong {
  font-size: 1.05rem;
  font-weight: 900;
}

.season-resume-card__paper small {
  color: var(--chamber-mahogany);
}

.season-resume-card:hover {
  border-color: var(--evidence-amber);
}

/* --- 抽屜銘牌：牌面本身是牛皮紙，右側掛抽屜填充度 --- */

.season-docket__heading {
  display: flex;
  align-items: end;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px 28px;
  padding: 10px 20px 12px;
  margin-bottom: 30px;
  border: 2px solid var(--kraft-edge);
  background: var(--kraft-fiber), linear-gradient(180deg, var(--kraft-lit), var(--kraft-deep));
  color: var(--record-ink);
  clip-path: polygon(0 0, calc(100% - 15px) 0, 100% 15px, 100% 100%, 15px 100%, 0 calc(100% - 15px));
}

/* 分類行不做第二個 tracked eyebrow——全頁只有 hero 那一條是 kicker，這一行是
   標籤上印好的分類欄，所以字距收窄、字重降一級，讀起來像表格欄位不像段落標頭。 */
.season-docket__heading > div > span {
  color: var(--kraft-ink);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 700;
  letter-spacing: 0.08em;
}

.season-docket__heading h2 {
  margin: 1px 0 0;
  font-family: var(--font-title);
  font-size: 1.4rem;
  font-weight: 700;
  letter-spacing: 0.14em;
}

.season-docket__meta {
  display: grid;
  justify-items: end;
  gap: 2px;
  text-align: right;
}

.season-docket__tally {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0;
  color: var(--record-ink);
  font-family: var(--font-data);
  font-size: 0.95rem;
  font-weight: 800;
  letter-spacing: 0.04em;
}

.season-docket__ticks {
  display: inline-flex;
  gap: 7px;
}

.season-docket__ticks i {
  width: 9px;
  height: 9px;
  border: 2px solid var(--kraft-ink);
  background: transparent;
  transform: rotate(45deg);
}

.season-docket__ticks i[data-case-status="completed"] {
  background: var(--trace-teal);
}

.season-docket__ticks i[data-case-status="in-progress"] {
  background: var(--evidence-amber);
}

.season-docket__promise {
  max-width: 42ch;
  margin: 0;
  color: var(--kraft-ink);
  font-size: 0.95rem;
  font-weight: 700;
}

/* --- 卷宗牆：夾與夾之間只留一道縫，整排讀起來是一個抽屜，不是六張卡片 --- */

.season-case-list {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 30px 3px;
  padding: 0;
  margin: 0;
  list-style: none;
}

.season-case {
  --tab-offset: 10px;
  position: relative;
  display: grid;
  min-width: 0;
  grid-template-rows: auto minmax(0, 1fr);
  transition: transform 120ms ease-out;
}

.season-case[data-tab-slot="1"] { --tab-offset: 32px; }
.season-case[data-tab-slot="2"] { --tab-offset: 54px; }

/* 檔案籤：與 `.case-strip--file-tab` 同一張紙、同一個梯形切角。
   元素維持 `<h3>`（改版前案名就是 h3）——輔助技術仍可用標題導覽逐案跳。 */
.season-case__tab {
  position: relative;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  gap: 9px;
  justify-self: start;
  min-width: 0;
  max-width: calc(100% - var(--tab-offset) - 8px);
  padding: 5px 13px 6px 9px;
  margin: 0 0 -2px var(--tab-offset);
  border: 2px solid var(--kraft-edge);
  border-bottom: 0;
  background: var(--kraft-fiber), linear-gradient(180deg, var(--kraft-lit), var(--kraft));
  color: var(--record-ink);
  clip-path: polygon(9px 0, calc(100% - 9px) 0, 100% 100%, 0 100%);
}

.season-case__index {
  flex: none;
  padding: 1px 7px;
  border: 2px solid var(--ink-red-line);
  background: var(--ink-red-wash);
  color: var(--ink-red);
  font-family: var(--font-data);
  font-size: 0.95rem;
  font-weight: 900;
  letter-spacing: 0.1em;
  transform: rotate(-2deg);
}

.season-case__name {
  overflow: hidden;
  min-width: 0;
  font-family: var(--font-title);
  font-size: 1.2rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  line-height: 1.5;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 卷宗封面：左緣線繩裝訂沿用 `.case-report` 的書背語彙。 */
.season-case__cover {
  position: relative;
  display: grid;
  min-height: 206px;
  grid-template-rows: auto minmax(72px, 1fr) auto;
  gap: 13px;
  padding: 15px 17px 15px 34px;
  border: 2px solid var(--kraft-edge);
  background:
    var(--kraft-fiber),
    linear-gradient(178deg, var(--kraft-lit), var(--kraft) 24%, var(--kraft-deep));
  color: var(--record-ink);
  box-shadow: inset 0 1px 0 rgb(255 246 220 / 0.65), inset 0 -2px 0 rgb(114 77 35 / 0.2), 4px 7px 12px rgb(8 24 39 / 0.38);
}

.season-case__cover::before {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 20px;
  border-right: 1px solid var(--kraft-rule);
  background:
    radial-gradient(circle at 50% 24px, var(--kraft-hole) 0 3px, transparent 4px) 0 0 / 100% 62px repeat-y,
    linear-gradient(90deg, var(--kraft-fold), transparent);
  content: "";
  pointer-events: none;
}

.season-case__cover::after {
  position: absolute;
  z-index: 4;
  inset: 3px;
  pointer-events: none;
  background: var(--ink-bracket);
  content: "";
  opacity: 0;
  transition: opacity 110ms ease-out;
}

.season-case:has(button:hover) .season-case__cover::after,
.season-case:has(button:focus-visible) .season-case__cover::after {
  opacity: 1;
}

/* 籤跟著封面一起亮：手指按在哪一份卷宗上，整份（含露出來的籤）都要有反應。 */
.season-case:has(button:hover) .season-case__tab,
.season-case:has(button:focus-visible) .season-case__tab {
  background: var(--kraft-fiber), linear-gradient(180deg, var(--record-paper), var(--kraft-lit));
}

.season-case:has(button:hover) {
  transform: translateY(-2px);
}

/* 未解鎖＝還壓在抽屜裡：紙色更暗、投影更淺，整份往後退一層。
   可讀的三個字級（案名、命題、解鎖條件）對此底色仍在 4.9:1 以上。 */
.season-case[data-case-status="locked"] .season-case__tab {
  background: var(--kraft-fiber), linear-gradient(180deg, var(--kraft-dust-lit), var(--kraft-dust));
}

.season-case[data-case-status="locked"] .season-case__cover {
  background:
    var(--kraft-fiber),
    linear-gradient(178deg, var(--kraft-dust-lit), var(--kraft-dust) 30%, var(--kraft-dust));
  box-shadow: 4px 5px 0 rgb(8 24 39 / 0.42);
}

.season-case[data-case-kind="side"] .season-case__cover {
  border-style: dashed;
}

.season-case__premise {
  margin: 0;
  font-size: 1.05rem;
  font-weight: 800;
  line-height: 1.55;
}

/* 蓋章欄：四種狀態都在，未接案與未解鎖維持空章框（沒蓋＝狀態，不是缺漏）。 */
.season-case__mark {
  display: grid;
  align-content: center;
  justify-items: start;
  gap: 9px;
  min-width: 0;
}

.season-case__stamp {
  max-width: 100%;
  padding: 4px 13px;
  border: 3px double var(--ink-red);
  background:
    radial-gradient(circle at 26% 34%, var(--ink-red-bloom), transparent 60%),
    radial-gradient(circle at 74% 72%, var(--ink-red-wash), transparent 54%);
  color: var(--ink-red);
  font-family: var(--font-title);
  font-size: 1.2rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  line-height: 1.4;
  text-indent: 0.2em;
  transform: rotate(-4deg);
}

.season-case[data-case-status="in-progress"] .season-case__stamp {
  border-color: var(--evidence-amber);
  background: var(--hearing-navy);
  color: var(--evidence-amber-soft);
  box-shadow: 4px 4px 0 var(--dossier-drop);
}

.season-case[data-case-status="available"] .season-case__stamp,
.season-case[data-case-status="locked"] .season-case__stamp {
  border: 2px dashed var(--kraft-ink);
  background: none;
  color: var(--kraft-ink);
  transform: none;
}

/* 未解鎖的卷宗一滴印泥都還沒沾到，連案號都只是印上去的：改墨色。
   （這也剛好把印泥紅在灰牛皮上的 4.13:1 抬到 4.95:1。） */
.season-case[data-case-status="locked"] .season-case__index {
  border-color: var(--kraft-ink);
  background: none;
  color: var(--kraft-ink);
}

.season-case__datestamp {
  padding: 3px 9px;
  border: 2px solid var(--ink-red-line);
  color: var(--ink-red);
  font-family: var(--font-data);
  font-size: 0.95rem;
  font-weight: 800;
  letter-spacing: 0.12em;
  transform: rotate(-2deg);
}

.season-case__stage {
  position: relative;
  max-width: 100%;
  padding-left: 14px;
  color: var(--kraft-ink);
  font-size: 0.95rem;
  font-weight: 800;
}

.season-case__stage::before {
  position: absolute;
  top: 4px;
  bottom: 4px;
  left: 0;
  width: 5px;
  background: repeating-linear-gradient(180deg, var(--ink-amber-deep) 0 2px, transparent 2px 10px);
  content: "";
  pointer-events: none;
}

.season-case__note {
  color: var(--kraft-ink);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 800;
}

.season-case__action {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 8px 14px;
  padding-top: 12px;
  border-top: 1px solid var(--kraft-rule);
}

.season-case__action button {
  position: relative;
  min-height: 44px;
  padding: 9px 16px;
  border: 2px solid var(--record-ink);
  background: var(--evidence-amber);
  color: var(--record-ink);
  font-size: 1.05rem;
  font-weight: 900;
  box-shadow: 4px 4px 0 var(--dossier-drop);
}

.season-case__action button:hover {
  background: var(--evidence-amber-soft);
}

/* 按鈕本身是琥珀底，全站的琥珀四角括號畫在上面等於沒畫；只換顏色、形狀與時機不動，
   forced-colors 仍走既有 `.season-case__action :focus-visible` 的 Highlight 外框。 */
.season-case__action button:focus-visible::after {
  background: var(--ink-bracket);
}

.season-case__duration {
  margin-left: auto;
  color: #553027;
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 800;
}

/* 三欄只在夾寬 ≥360px 時成立——再窄，最長案名（神奇粉包的不在場證明）就會被檔案籤
   的 text-overflow 截掉。斷點是從「籤放不放得下」推回來的，不是挑好看的數字。 */
@media (max-width: 1180px) {
  .season-case-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .season-case__name {
    font-size: 1.05rem;
  }
}

/* Decisions and v1 handoff */

.decision-dialog[open] {
  position: fixed;
  z-index: 1000;
  inset: 0;
  display: flex;
  width: min(520px, calc(100% - 32px));
  max-height: min(690px, calc(100dvh - 32px));
  flex-direction: column;
  align-items: stretch;
  overflow: auto;
  padding: clamp(24px, 5vw, 46px);
  margin: auto;
  border: 2px solid var(--evidence-amber);
  background: var(--record-paper);
  color: var(--record-ink);
  box-shadow: 0 0 0 100vmax rgb(2 10 17 / 0.78), 14px 14px 0 var(--chamber-mahogany);
  clip-path: polygon(0 0, calc(100% - 24px) 0, 100% 24px, 100% 100%, 0 100%);
}

.decision-dialog__mark {
  align-self: start;
  min-width: 68px;
  padding: 6px 10px;
  margin-bottom: 18px;
  background: var(--question-coral);
  color: #fff;
  font-family: var(--font-data);
  font-size: 1.4rem;
  font-weight: 900;
  text-align: center;
  transform: rotate(-2deg);
}

.decision-dialog h2 {
  margin: 5px 0 12px;
  font-size: clamp(1.9rem, 6vw, 3rem);
}

.decision-dialog p:not(.decision-dialog__kicker) {
  color: #425669;
}

.decision-dialog__actions {
  display: grid;
  gap: 10px;
  margin-top: 16px;
}

/* Opening and briefing */

.narrative-screen {
  display: grid;
  grid-template-rows: auto 1fr;
  background: #06131f;
}

.narrative-stage {
  position: relative;
  display: grid;
  min-height: calc(100dvh - 68px);
  place-items: end center;
  overflow: hidden;
  background: var(--hearing-navy);
}

.narrative-stage .location-art {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 28%;
}

.narrative-stage__shade {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(180deg, rgb(4 12 20 / 0.1), rgb(4 12 20 / 0.92)),
    linear-gradient(90deg, rgb(8 24 39 / 0.2), transparent 38%, rgb(62 33 31 / 0.44));
}

.narrative-case-mark {
  position: absolute;
  top: 9%;
  left: max(30px, 5vw);
  padding: 10px 16px;
  border-left: 3px solid var(--evidence-amber);
  background: rgb(8 24 39 / 0.84);
  box-shadow: 7px 7px 0 var(--chamber-mahogany);
  font-family: var(--font-title);
  font-size: clamp(0.84rem, 1.4vw, 1.05rem);
  font-weight: 900;
  letter-spacing: 0.1em;
}

.narrative-dialogue {
  position: relative;
  z-index: 2;
  width: min(1060px, calc(100% - 40px));
  padding: 0 0 max(36px, 5dvh);
}

.narrative-dialogue > header:not(.aa-nameplate) {
  display: flex;
  align-items: center;
  gap: 10px;
}

.narrative-dialogue > header:not(.aa-nameplate) strong {
  display: inline-block;
  min-width: 150px;
  padding: 8px 15px;
  border-left: 3px solid var(--evidence-amber);
  background: var(--chamber-mahogany);
  font-weight: 900;
}

.narrative-dialogue > header:not(.aa-nameplate) span {
  padding: 5px 9px;
  background: rgb(8 24 39 / 0.86);
  color: var(--muted-blue);
  font-size: 0.84rem;
}

.narrative-dialogue > p {
  position: relative;
  min-height: 152px;
  padding: clamp(24px, 4vw, 42px);
  margin: 0;
  border: 2px solid #6f899a;
  background: rgb(8 24 39 / 0.94);
  box-shadow: 12px 12px 0 rgb(0 0 0 / 0.3);
  font-size: clamp(1.25rem, 2.2vw, 1.8rem);
  font-weight: 750;
  line-height: 1.55;
}

.narrative-dialogue .action-button {
  position: absolute;
  right: 18px;
  bottom: calc(max(36px, 5dvh) + 18px);
}

.narrative-dialogue > button {
  position: absolute;
  right: 18px;
  bottom: calc(max(36px, 5dvh) + 18px);
  min-width: 142px;
  min-height: 48px;
  padding: 10px 18px;
  border: 2px solid var(--evidence-amber-soft);
  background: var(--evidence-amber);
  color: #251710;
  font-weight: 900;
  box-shadow: 5px 5px 0 var(--chamber-mahogany-deep);
}

.briefing-claim-rail {
  position: absolute;
  z-index: 3;
  top: 90px;
  right: 0;
  width: min(330px, 28vw);
  padding: 20px 20px 18px;
  border-left: 3px solid var(--question-coral);
  background: rgb(62 33 31 / 0.93);
}

.briefing-claim-rail span {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.15em;
}

.briefing-claim-rail p {
  margin: 7px 0 0;
  font-weight: 850;
}

.briefing-claim-rail blockquote {
  margin: 7px 0 15px;
  font-weight: 850;
}

.briefing-claim-rail .claim-track {
  grid-template-columns: 1fr;
}

.briefing-claim-rail .claim-track__item {
  border-right: 0;
  border-bottom: 1px solid #506d80;
}

.briefing-claim-rail .claim-track__item::after {
  display: none;
}

/* Three-part claim track — the season's identifying navigation */

.claim-track {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  padding: 0;
  margin: 0;
  list-style: none;
}

.claim-track__item {
  position: relative;
  min-width: 0;
  padding: 12px 34px 12px 46px;
  border-right: 1px solid #506d80;
  background: #102a42;
  color: #c7d5dc;
}

.claim-track__item::before {
  position: absolute;
  top: 50%;
  left: 16px;
  width: 19px;
  height: 19px;
  border: 2px solid currentcolor;
  content: "";
  transform: translateY(-50%) rotate(45deg);
}

.claim-track__item::after {
  position: absolute;
  z-index: 2;
  top: 0;
  right: -16px;
  width: 16px;
  height: 100%;
  background: inherit;
  content: "";
  clip-path: polygon(0 0, 100% 50%, 0 100%);
}

.claim-track__item:last-child::after {
  display: none;
}

.claim-track__item span,
.claim-track__item strong {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.claim-track__item span {
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 800;
  letter-spacing: 0.08em;
}

.claim-track__item strong {
  color: inherit;
  font-size: 0.84rem;
}

.claim-track__item[data-claim-state="gap"] {
  background: #71332e;
  color: #fff1df;
}

.claim-track__item[data-claim-state="overreach"] {
  background: #9d302b;
  color: #fff;
}

.claim-track__item[data-claim-state="supported"] {
  background: #106d68;
  color: #fff;
}

.claim-track__item[data-claim-state="supported"]::before {
  border-width: 0 3px 3px 0;
  transform: translateY(-62%) rotate(45deg);
}

.investigation-screen {
  grid-template-rows: auto auto minmax(0, 1fr);
}

.investigation-claim-anchor {
  position: relative;
  z-index: 20;
  border-bottom: 2px solid var(--chamber-mahogany);
}

.investigation-claim-anchor .claim-track__item {
  min-height: 62px;
}

.investigation-screen .location-stage {
  min-height: calc(100dvh - 130px);
}

.investigation-empty,
.move-missing {
  padding: 14px 16px;
  margin: 6px 0 0;
  border-left: 3px solid var(--evidence-amber);
  background: rgb(8 24 39 / 0.74);
  color: var(--muted-blue);
}

/* Testimony confrontation */

.hearing-screen {
  grid-template-rows: minmax(250px, 44dvh) minmax(0, 1fr);
}

.hearing-context {
  z-index: 4;
  left: clamp(18px, 4vw, 64px);
  border-left-color: var(--question-coral);
  box-shadow: 8px 8px 0 rgb(0 0 0 / 0.35);
}

.hearing-context span {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  letter-spacing: 0.12em;
}

.player-desk {
  position: absolute;
  z-index: 5;
  right: 0;
  bottom: 0;
  left: 0;
  height: 22%;
  border-top: 4px solid #9d6f45;
  background:
    linear-gradient(12deg, transparent 49%, rgb(255 255 255 / 0.04) 50%, transparent 51%),
    linear-gradient(#5d302b, #291716);
  clip-path: polygon(0 31%, 13% 20%, 28% 25%, 44% 11%, 62% 22%, 78% 10%, 100% 26%, 100% 100%, 0 100%);
}

.player-desk span {
  position: absolute;
  right: clamp(18px, 5vw, 70px);
  bottom: 13px;
  color: #f2cf92;
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 850;
  letter-spacing: 0.13em;
}

.testimony-panel {
  position: relative;
  border-top: 0;
  background:
    linear-gradient(105deg, rgb(105 57 52 / 0.35), transparent 27%),
    #081827;
}

.testimony-panel::before {
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  height: 5px;
  background: linear-gradient(90deg, var(--question-coral) 0 18%, var(--evidence-amber) 18% 51%, var(--trace-teal) 51% 100%);
  content: "";
}

.testimony-panel .claim-track {
  border-bottom: 1px solid var(--line-blue);
}

.testimony-panel__top {
  padding-top: 17px;
}

.testimony-panel__top > div > span {
  color: var(--question-coral);
  font-family: var(--font-data);
  font-weight: 900;
  letter-spacing: 0.12em;
}

.testimony-feedback[data-feedback-kind="gap"] {
  border-color: var(--question-coral);
  background: #421f1d;
}

.evidence-source {
  padding-top: 12px;
  border-top: 1px solid #c8c0af;
  color: #526474;
  font-family: var(--font-data);
  font-size: 0.84rem;
}

/* Evidence gap */

.gap-screen {
  display: grid;
  grid-template-rows: auto 1fr;
}

.gap-layout {
  display: grid;
  width: min(1040px, calc(100% - 48px));
  min-height: calc(100dvh - 68px);
  grid-template-columns: minmax(220px, 0.72fr) minmax(0, 1.5fr);
  align-items: center;
  gap: clamp(38px, 8vw, 110px);
  margin: 0 auto;
  padding: 60px 0;
}

.gap-signal {
  position: relative;
  display: grid;
  aspect-ratio: 1;
  place-items: center;
  border: 8px solid var(--question-coral);
  background: var(--chamber-mahogany-deep);
  box-shadow: 18px 18px 0 rgb(0 0 0 / 0.28);
  transform: rotate(-5deg);
}

.gap-signal::after {
  position: absolute;
  inset: 14%;
  border: 2px dashed var(--evidence-amber);
  content: "";
}

.gap-signal span {
  font-family: var(--font-data);
  font-size: clamp(6rem, 18vw, 12rem);
  font-weight: 900;
  line-height: 1;
}

.gap-copy > span {
  color: var(--question-coral);
  font-family: var(--font-data);
  font-weight: 900;
  letter-spacing: 0.14em;
}

.gap-copy h1 {
  max-width: 11ch;
  margin: 8px 0 20px;
  font-size: clamp(2.8rem, 6vw, 5.6rem);
}

.gap-copy p {
  max-width: 52ch;
  color: #d4e0e6;
  font-size: 1.05rem;
}

.gap-copy .action-button {
  margin-top: 18px;
}

/* Two-axis record workbench */

.workbench-screen {
  display: grid;
  grid-template-rows: auto auto 1fr auto;
}

.workbench-heading {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 26px;
  padding: 30px clamp(20px, 5vw, 72px) 24px;
  border-bottom: 1px solid var(--line-blue);
}

.workbench-heading h1 {
  margin: 5px 0 8px;
  font-size: clamp(2rem, 4vw, 3.6rem);
}

.workbench-heading p {
  max-width: 60ch;
  margin: 0;
  color: var(--muted-blue);
}

.workbench-axis-status {
  display: grid;
  min-width: 180px;
  grid-template-columns: 1fr 1fr;
  border: 1px solid var(--line-blue);
}

.workbench-axis-status span {
  padding: 11px 13px;
  color: var(--muted-blue);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 850;
  text-align: center;
}

.workbench-axis-status span + span {
  border-left: 1px solid var(--line-blue);
}

.workbench-axis-status span[data-complete="true"] {
  background: #106d68;
  color: #fff;
}

.spatial-workbench-heading {
  align-items: center;
}

.spatial-selection-status {
  display: grid;
  min-width: 0;
  grid-area: selection;
  gap: 4px;
  padding: 12px 16px;
  border: 1px solid var(--line-blue);
  background: rgb(8 24 39 / 0.76);
}

.spatial-selection-status span,
.interval-docking-rail__scale,
.unplaced-tray header > span,
.spatial-slot header > span,
.spatial-challenge legend span {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 850;
  letter-spacing: 0.08em;
}

.spatial-selection-status strong {
  color: var(--record-paper);
}

.spatial-workbench {
  display: grid;
  min-width: 0;
  align-content: start;
  grid-template-columns: minmax(0, 7fr) minmax(260px, 3fr);
  grid-template-areas:
    "rail selection"
    "rail tray"
    "unknown tray";
  gap: 18px;
  padding: 24px clamp(20px, 4vw, 56px) 34px;
  background:
    linear-gradient(90deg, rgb(8 24 39 / 0.48), transparent 68%),
    var(--hearing-navy-deep);
}

.unplaced-tray {
  min-width: 0;
  display: grid;
  gap: 8px;
  padding: 10px 14px 12px;
  border: 1px solid #45657a;
  background: rgb(17 43 69 / 0.82);
}

.unplaced-tray header {
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin: 0;
}

.unplaced-tray p {
  margin: 0;
  overflow: hidden;
  color: var(--muted-blue);
  font-size: 0.84rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.spatial-slot h2 {
  margin: 0;
  font-size: 0.95rem;
}

.spatial-slot header p {
  margin: 0;
  color: var(--muted-blue);
  font-size: 0.84rem;
  line-height: 1.45;
}

.unplaced-tray__cards {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(168px, 1fr);
  gap: 8px;
  overflow-x: auto;
  padding: 10px 4px 6px;
  margin: -6px -4px -6px;
  scroll-snap-type: x proximity;
}

.spatial-slot__cards {
  display: grid;
  align-content: start;
  gap: 6px;
}

.unplaced-tray__empty {
  padding: 10px 12px;
  margin: 0;
  border: 1px dashed #678195;
  color: var(--muted-blue);
  font-size: 0.84rem;
  text-align: center;
}

/* 傳喚工作台的時間間隔尺：紅木檯座上一條可被逐段點亮的時間軌。 */
.interval-docking-rail {
  display: grid;
  min-width: 0;
  grid-template-columns: minmax(0, 3.1fr) minmax(178px, 1fr);
  gap: 12px;
  padding: 14px;
  border: 2px solid var(--evidence-amber);
  background: var(--chamber-mahogany-deep);
  box-shadow: 6px 6px 0 rgb(4 14 24 / 0.72);
}

.interval-docking-rail__timeline {
  display: grid;
  min-width: 0;
  align-content: start;
}

.interval-docking-rail__scale {
  position: relative;
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 14px;
  margin-bottom: 18px;
  color: var(--record-paper-muted);
}

.interval-docking-rail__scale::before {
  position: absolute;
  right: 0;
  left: 0;
  height: 4px;
  background: var(--evidence-amber);
  content: "";
}

.interval-docking-rail__scale > * {
  position: relative;
  z-index: 1;
  padding: 4px 9px;
  background: var(--chamber-mahogany-deep);
}

.interval-docking-rail__scale strong {
  justify-self: center;
  color: var(--evidence-amber-soft);
  text-align: center;
}

.interval-docking-rail__slots {
  display: grid;
  min-width: 0;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
}

.spatial-slot {
  position: relative;
  display: grid;
  min-width: 0;
  min-height: 150px;
  grid-template-rows: auto minmax(0, 1fr);
  align-content: start;
  gap: 8px;
  padding: 12px 10px 30px;
  border: 1px solid #45657a;
  background: rgb(8 24 39 / 0.8);
}

/* 軌道鉚釘：槽與上方時間軌的接點，落定後點亮。 */
.interval-docking-rail__slots .spatial-slot::before {
  position: absolute;
  top: -18px;
  left: 50%;
  width: 3px;
  height: 10px;
  background: rgb(241 180 60 / 0.55);
  content: "";
  transform: translateX(-50%);
}

.spatial-slot__node {
  position: absolute;
  top: -24px;
  left: 50%;
  width: 10px;
  height: 10px;
  border: 2px solid var(--evidence-amber);
  border-radius: 50%;
  background: var(--chamber-mahogany-deep);
  transform: translateX(-50%);
}

.spatial-slot.is-filled {
  border-color: var(--trace-teal);
  background: rgb(12 40 56 / 0.88);
}

.spatial-slot.is-filled .spatial-slot__node {
  border-color: var(--trace-teal-bright);
  background: var(--trace-teal-bright);
  box-shadow: 0 0 10px rgb(105 222 209 / 0.75);
}

.spatial-slot--unknown {
  min-height: 0;
  border: 2px dashed #678195;
  background: rgb(17 43 69 / 0.48);
}

.spatial-slot--unknown.is-filled {
  border-color: var(--trace-teal);
  border-style: solid;
}

/* 放置層鋪滿整個槽：點槽的任何位置＝把目前傳喚的紀錄放進來。 */
.spatial-slot__target {
  position: absolute;
  z-index: 1;
  inset: 0;
  display: grid;
  align-content: end;
  justify-content: center;
  padding: 6px;
  border: 0;
  background: transparent;
}

.spatial-slot__hint {
  padding: 3px 12px;
  border: 1px dashed var(--trace-teal-bright);
  background: rgb(12 33 52 / 0.94);
  color: var(--trace-teal-bright);
  font-size: 0.84rem;
  font-weight: 850;
  letter-spacing: 0.04em;
  opacity: 0;
  transition: opacity 120ms ease-out;
}

.spatial-slot__target:hover .spatial-slot__hint,
.spatial-slot__target:focus-visible .spatial-slot__hint {
  opacity: 1;
}

.spatial-slot header,
.spatial-slot__cards {
  position: relative;
  z-index: 2;
  pointer-events: none;
}

/* 槽內落定紙片：純展示的小卡，尺寸仍守 44px 觸控底線。 */
.placed-record {
  display: grid;
  min-height: 48px;
  grid-template-columns: 38px minmax(0, 1fr);
  align-items: center;
  gap: 8px;
  padding: 5px 8px;
  border: 1px solid #678195;
  background: var(--record-paper);
  color: var(--record-ink);
  box-shadow: 3px 3px 0 rgb(4 14 24 / 0.6);
  clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 0 100%);
}

.placed-record__glyph {
  display: grid;
  place-items: center;
  width: 38px;
  height: 38px;
  font-size: 1.3rem;
}

.placed-record__text {
  display: grid;
  min-width: 0;
}

.placed-record__text strong {
  overflow-wrap: anywhere;
  font-size: 0.84rem;
  line-height: 1.3;
}

.placed-record__text small {
  overflow: hidden;
  color: #425669;
  font-family: var(--font-data);
  font-size: 0.84rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.workbench-evidence-card {
  position: relative;
  display: grid;
  width: 100%;
  min-width: 0;
  min-height: 60px;
  grid-template-columns: 44px minmax(0, 1fr);
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border: 1px solid #678195;
  background: var(--record-paper);
  color: var(--record-ink);
  text-align: left;
  box-shadow: 4px 4px 0 rgb(4 14 24 / 0.66);
  clip-path: polygon(0 0, calc(100% - 12px) 0, 100% 12px, 100% 100%, 0 100%);
  transition: border-color 140ms ease-out, transform 140ms ease-out, box-shadow 140ms ease-out;
  scroll-snap-align: start;
}

.workbench-evidence-card__glyph {
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  font-size: 1.5rem;
}

.workbench-evidence-card__text {
  display: grid;
  min-width: 0;
  gap: 1px;
}

.workbench-evidence-card__text strong {
  overflow-wrap: anywhere;
  font-size: 0.84rem;
  line-height: 1.3;
}

/* 日期擷取單行呈現；完整敘述在證物紀錄冊與傳喚台詞裡。 */
.workbench-evidence-card__text small {
  overflow: hidden;
  color: #425669;
  font-family: var(--font-data);
  font-size: 0.84rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.workbench-evidence-card:hover,
.workbench-evidence-card.is-selected {
  border-color: var(--evidence-amber);
  transform: translate(-1px, -1px);
  box-shadow: 6px 6px 0 var(--chamber-mahogany);
}

.workbench-evidence-card.is-selected {
  outline: 3px solid var(--evidence-amber);
  outline-offset: 2px;
}

.workbench-evidence-card.has-error {
  border: 2px solid var(--question-coral);
  box-shadow: 5px 5px 0 var(--question-coral-deep);
}

.spatial-challenge {
  min-width: 0;
  padding: 12px;
  margin: 0;
  border: 1px solid var(--trace-teal);
  background: rgb(17 43 69 / 0.92);
}

.spatial-challenge.has-error {
  border: 2px solid var(--question-coral);
}

.spatial-challenge legend {
  width: 100%;
  padding: 0;
  margin-bottom: 10px;
}

.spatial-challenge legend span,
.spatial-challenge legend strong {
  display: block;
}

.spatial-challenge legend strong {
  margin-top: 4px;
  font-size: 0.84rem;
  line-height: 1.45;
}

.spatial-challenge__options {
  display: grid;
  gap: 7px;
}

.spatial-challenge__options button {
  min-height: 44px;
  padding: 9px 10px;
  border: 1px solid #678195;
  background: #0c2134;
  color: #dce6ea;
  font-size: 0.84rem;
  font-weight: 800;
  text-align: left;
}

.spatial-challenge__options button:hover,
.spatial-challenge__options button.is-selected {
  border-color: var(--evidence-amber);
  background: var(--chamber-mahogany);
  color: #fff;
}

.row-error {
  grid-column: 1 / -1;
  padding: 8px 12px;
  margin: 0;
  border: 1px solid var(--question-coral);
  background: rgb(105 57 52 / 0.52);
  font-size: 0.84rem;
}

.workbench-footer {
  position: sticky;
  z-index: 10;
  bottom: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  padding: 14px clamp(20px, 5vw, 72px) max(14px, env(safe-area-inset-bottom));
  border-top: 2px solid var(--trace-teal);
  background: rgb(8 24 39 / 0.97);
}

.workbench-footer.spatial-workbench-footer {
  position: static;
}

/* 傳喚式重建（C1 工作台）：主張幽靈軌 → 玩家軌 → 待確認托盤 → 主持人對話框 */

/* 傳喚式重建＝逆轉裁判文法：整幕鎖在一個視野（上舞台、下對話），
   對話面板是指令來源，時間軌是舞台，一次「聽→放→裁決」不需捲動。 */
.summon-workbench-screen {
  display: grid;
  height: 100dvh;
  min-height: 0;
  grid-template-rows: auto minmax(0, 1fr) auto;
}

.summon-stage {
  display: grid;
  min-width: 0;
  min-height: 0;
  align-content: start;
  justify-items: stretch;
  gap: 10px;
  padding: 12px clamp(16px, 3vw, 44px) 14px;
  overflow-y: auto;
  background:
    linear-gradient(90deg, rgb(8 24 39 / 0.48), transparent 68%),
    var(--hearing-navy-deep);
}

.summon-stage > * {
  width: min(100%, 1080px);
  margin-inline: auto;
}

.summon-workbench-heading {
  display: flex;
  align-items: baseline;
  justify-content: start;
  gap: 12px;
  padding: 0;
  border-bottom: 0;
}

.summon-workbench-heading span {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 850;
  letter-spacing: 0.08em;
  white-space: nowrap;
}

.summon-workbench-heading h1 {
  margin: 0;
  font-size: 1.12rem;
}

/* 幽靈軌：對方主張畫出的半年，一條半透明的虛線檔案帶。 */
.claim-ghost-track {
  display: grid;
  min-width: 0;
  grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
  align-items: center;
  gap: 4px 18px;
  padding: 8px 14px;
  border: 1px dashed rgb(214 165 92 / 0.5);
  background: rgb(17 43 69 / 0.5);
}

.claim-ghost-track > header {
  display: grid;
  gap: 1px;
  margin: 0;
}

.claim-ghost-track > header span {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 850;
  letter-spacing: 0.08em;
}

.claim-ghost-track > header strong {
  overflow: hidden;
  color: rgb(233 240 245 / 0.76);
  font-size: 0.85rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.claim-ghost-track ol {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  padding: 0;
  margin: 0;
  list-style: none;
}

.claim-ghost-track li {
  display: grid;
  min-width: 0;
  gap: 0;
  padding: 4px 8px;
  border: 1px dashed rgb(214 165 92 / 0.36);
  color: rgb(233 240 245 / 0.6);
}

.claim-ghost-track li strong {
  overflow: hidden;
  font-size: 0.84rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.claim-ghost-track li small {
  overflow: hidden;
  font-family: var(--font-data);
  font-size: 0.84rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.summon-player-track {
  display: grid;
  min-width: 0;
  align-content: start;
  gap: 8px;
}

.summon-player-track__label {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
}

.summon-player-track__label span {
  color: var(--trace-teal);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 850;
  letter-spacing: 0.08em;
}

.summon-player-track__label small {
  color: var(--muted-blue);
  font-family: var(--font-data);
  font-size: 0.84rem;
}

.workbench-evidence-card.is-summoned {
  border-color: var(--evidence-amber);
  box-shadow: 5px 5px 0 var(--chamber-mahogany);
}

.workbench-evidence-card__summon-mark {
  position: absolute;
  top: -7px;
  right: 6px;
  padding: 1px 8px;
  background: var(--evidence-amber);
  color: var(--hearing-navy-deep);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-style: normal;
  font-weight: 850;
  letter-spacing: 0.06em;
  transform: rotate(2deg);
  box-shadow: 2px 2px 0 rgb(4 14 24 / 0.6);
}

/* 對話面板：亮邊壓底的指令台，大花醫師立繪站在框後。 */
.summon-dialogue {
  position: relative;
  display: grid;
  min-height: 176px;
  grid-template-columns: minmax(0, 1fr);
  align-items: end;
  padding: 26px clamp(16px, 3vw, 44px) clamp(12px, 2vw, 18px);
  border-top: 4px solid var(--evidence-amber);
  background:
    linear-gradient(90deg, rgb(105 57 52 / 0.38), transparent 34%),
    var(--hearing-navy);
  box-shadow: 0 -12px 32px rgb(0 0 0 / 0.34);
}

body .summon-dialogue__character.vn-character {
  position: absolute;
  z-index: 0;
  right: clamp(6px, 5vw, 72px);
  bottom: 0;
  width: auto;
  height: 132%;
  max-height: 264px;
  object-fit: contain;
  object-position: right bottom;
  filter: drop-shadow(-10px 10px 16px rgb(2 10 17 / 0.55));
  pointer-events: none;
}

.summon-dialogue__frame {
  position: relative;
  z-index: 1;
  display: grid;
  width: min(100%, 1080px);
  min-width: 0;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: end;
  gap: 14px;
  padding-right: clamp(150px, 17vw, 240px);
  margin-inline: auto;
}

/* 傳喚證物窗：出示中的紀錄浮在對話框旁（逆轉裁判的證物角窗）。 */
.summon-dialogue__exhibit {
  display: grid;
  justify-items: center;
  gap: 3px;
  width: clamp(104px, 11vw, 128px);
  padding: 8px 8px 7px;
  margin: 0 0 4px;
  border: 3px solid var(--record-paper);
  background: rgb(7 20 32 / 0.95);
  box-shadow: 5px 5px 0 rgb(4 14 24 / 0.7);
  transform: rotate(-2deg);
}

.summon-dialogue__exhibit-visual {
  display: grid;
  place-items: center;
  width: 100%;
  aspect-ratio: 1;
  overflow: hidden;
  background: var(--record-paper);
  font-size: 2rem;
}

.summon-dialogue__exhibit figcaption {
  display: grid;
  justify-items: center;
  min-width: 0;
}

.summon-dialogue__exhibit figcaption strong {
  overflow: hidden;
  max-width: 100%;
  color: var(--record-paper);
  font-size: 0.84rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.summon-dialogue__exhibit figcaption small {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
}

/* 名牌要完整凸出框頂，框本身不做斜切；斜角語彙留給選項按鈕與證物卡。 */
.summon-dialogue__copy {
  position: relative;
  display: grid;
  align-content: start;
  gap: 8px;
  min-width: 0;
  min-height: 122px;
  padding: 18px 18px 14px;
  border: 3px solid var(--record-paper);
  background: rgb(7 20 32 / 0.96);
  color: var(--record-paper);
  box-shadow: 6px 6px 0 rgb(4 14 24 / 0.55);
}

/* 名牌色塊凸出框頂：逆轉裁判的說話者標籤。 */
.summon-dialogue__copy > header {
  position: absolute;
  top: 0;
  left: 12px;
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 2px 12px;
  border: 2px solid var(--record-paper);
  background: var(--evidence-amber);
  transform: translateY(-56%);
  box-shadow: 3px 3px 0 rgb(4 14 24 / 0.7);
}

.summon-dialogue__copy > header strong {
  color: var(--hearing-navy-deep);
  font-size: 0.9rem;
}

.summon-dialogue__copy > header span {
  color: rgb(8 24 39 / 0.72);
  font-family: var(--font-data);
  font-size: 0.84rem;
  letter-spacing: 0.08em;
}

.summon-dialogue__copy > p {
  min-height: 3em;
  margin: 4px 0 0;
  overflow-wrap: anywhere;
  font-size: clamp(1.25rem, 2.2vw, 1.4rem);
  line-height: 1.6;
}

.summon-dialogue__options {
  display: grid;
  gap: 8px;
}

.summon-dialogue__options button,
.summon-dialogue__copy > button {
  min-height: 44px;
  padding: 10px 16px;
  border: 2px solid var(--trace-teal);
  background: rgb(17 43 69 / 0.9);
  color: var(--record-paper);
  font: inherit;
  font-weight: 800;
  text-align: center;
  cursor: pointer;
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
}

.summon-dialogue__options button:hover,
.summon-dialogue__copy > button:hover {
  border-color: var(--evidence-amber);
  background: var(--hearing-navy);
}

.summon-dialogue__copy > button {
  justify-self: end;
  padding-inline: 22px;
  border-color: var(--evidence-amber);
}

.page-feedback {
  margin: 0;
  color: var(--muted-blue);
}

/* Report conclusion */

.report-stage {
  position: relative;
  min-height: calc(100dvh - 68px);
  padding: clamp(30px, 6vw, 76px) clamp(20px, 5vw, 70px);
  background:
    radial-gradient(circle at 78% 14%, rgb(30 155 145 / 0.22), transparent 24%),
    linear-gradient(145deg, var(--hearing-navy), var(--hearing-navy-deep));
}

.report-stage__trace {
  position: absolute;
  top: 7%;
  left: 0;
  width: 100%;
  height: 240px;
  opacity: 0.32;
}

.report-stage__trace path {
  fill: none;
  stroke: var(--trace-teal-bright);
  stroke-width: 5;
}

.report-stage .case-report {
  position: relative;
  z-index: 2;
  width: min(1040px, 100%);
  margin-inline: auto;
}

.report-chain {
  display: block;
  margin: 26px 0;
  border: 1px solid #b1a68f;
}

.report-chain > h2 {
  padding: 18px 22px 0;
  margin: 0;
  font-size: 1.2rem;
}

.report-chain > ol {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  padding: 0;
  margin: 12px 0 0;
  list-style: none;
}

.report-chain li {
  padding: 20px 22px;
  border-top: 1px solid #b1a68f;
}

.report-chain li + li {
  border-left: 1px solid #b1a68f;
}

.report-chain li span {
  display: block;
  color: #8d342f;
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.08em;
}

.report-chain li strong {
  display: block;
  margin-top: 5px;
}

.report-sources {
  margin-top: 12px;
  border-top: 1px solid #b1a68f;
  border-bottom: 1px solid #b1a68f;
}

.report-sources summary {
  min-height: 44px;
  padding: 10px 0;
  font-weight: 850;
}

.report-sources ul {
  padding: 0 0 12px 20px;
  margin: 0;
}

.report-sources a {
  color: #145f72;
  text-underline-offset: 3px;
}

.report-next-case {
  position: relative;
  z-index: 2;
  width: min(860px, calc(100% - 40px));
  padding: 18px 24px;
  margin: 26px auto 0;
  border: 2px solid var(--evidence-amber);
  background: rgb(8 24 39 / 0.88);
  box-shadow: 9px 9px 0 var(--chamber-mahogany);
}

.report-next-case span {
  display: block;
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.12em;
}

.report-next-case strong {
  display: block;
  margin: 4px 0;
  font-size: 1.15rem;
}

.report-next-case p {
  margin: 0;
  color: var(--muted-blue);
  font-size: 0.84rem;
}

/* The first viewport is cinematic; dense utility areas stay responsive. */

@media (max-width: 1000px) {
  .season-resume-card {
    grid-template-columns: 72px minmax(190px, 0.8fr) minmax(210px, 1fr);
  }

  .workbench-record {
    grid-template-columns: 1fr;
  }

  .workbench-options {
    grid-column: 1 / -1;
  }

  .report-chain {
    display: block;
  }

  .report-chain > ol {
    grid-template-columns: 1fr;
  }

  .report-chain li + li {
    border-left: 0;
  }
}

@media (max-width: 720px) {
  .season-screen::before,
  .gap-screen::before,
  .workbench-screen::before {
    background:
      linear-gradient(155deg, transparent 0 60%, rgb(105 57 52 / 0.28) 60.3% 72%, transparent 72.3%),
      var(--hearing-navy-deep);
  }

  .season-hero {
    min-height: 262px;
    place-items: end start;
  }

  .season-hero__utility {
    top: max(12px, env(safe-area-inset-top));
    right: 12px;
  }

  .season-hero__copy {
    width: calc(100% - 32px);
    padding: 74px 0 24px;
    margin-inline: auto;
  }

  .season-hero__copy h1 {
    margin: 6px 0 11px;
  }

  /* 行動版的藝術圖被裁得更緊、細節更密，字壓在上面需要更厚的遮罩。 */
  .season-hero__art::after {
    background:
      linear-gradient(0deg, var(--hearing-navy-deep) 0 6%, rgb(8 24 39 / 0.5) 60%, rgb(8 24 39 / 0.7)),
      linear-gradient(90deg, rgb(8 24 39 / 0.66), rgb(8 24 39 / 0.24) 62%, rgb(8 24 39 / 0.56));
  }

  .season-hero__copy > blockquote {
    margin-bottom: 14px;
    font-size: 1.05rem;
  }

  .title-safety {
    margin-top: 12px;
    font-size: 0.84rem;
  }

  .season-docket {
    width: calc(100% - 28px);
    padding: 34px 0 58px;
  }

  .season-resume-card {
    min-height: 0;
    grid-template-columns: 58px minmax(0, 1fr);
  }

  .season-resume-card__badge {
    grid-row: 1 / 3;
  }

  .season-resume-card__banner,
  .season-resume-card__paper {
    padding: 12px 15px;
  }

  .season-resume-card__paper {
    grid-column: 2;
    padding-left: 30px;
    border-top: 1px solid var(--kraft-rule);
    border-left: 0;
  }

  .season-resume-card__paper::before {
    top: 12px;
    bottom: 12px;
  }

  .season-docket__heading {
    align-items: start;
    flex-direction: column;
    gap: 12px;
  }

  .season-docket__meta {
    justify-items: start;
    text-align: left;
  }

  .season-case-list {
    grid-template-columns: minmax(0, 1fr);
    gap: 26px 0;
  }

  .season-case[data-tab-slot="1"] { --tab-offset: 24px; }
  .season-case[data-tab-slot="2"] { --tab-offset: 40px; }

  .season-case__cover {
    min-height: 0;
    grid-template-rows: auto auto auto;
    padding: 14px 15px 14px 32px;
  }

  .season-case__premise {
    font-size: 0.95rem;
  }

  .season-case__stamp {
    font-size: 1.05rem;
  }

  .decision-dialog[open] {
    max-height: calc(100svh - 24px);
    padding: 25px 20px;
  }

  .narrative-stage {
    min-height: calc(100svh - 62px);
    place-items: end stretch;
  }

  .narrative-case-mark {
    top: 4%;
    left: 14px;
  }

  .briefing-claim-rail {
    top: 68px;
    width: min(76%, 290px);
  }

  .narrative-dialogue {
    width: calc(100% - 24px);
    padding-bottom: max(16px, env(safe-area-inset-bottom));
    margin-inline: auto;
  }

  /* 這裡原本把敘事對話內文壓到 1.02rem（390×844 實測 16.32px），低於型階的對話樓地板
     20px——`.narrative-dialogue > p` 的特異度高於 `.aa-dialogue__copy`，P1 抬高對話字級時
     漏掉這條窄幅覆寫。移除字級覆寫後回到 clamp 下限 20px，其餘版位不動。 */
  .narrative-dialogue > p {
    min-height: 165px;
    padding: 20px 18px 66px;
  }

  .narrative-dialogue > button {
    right: 12px;
    bottom: calc(max(16px, env(safe-area-inset-bottom)) + 12px);
  }

  .claim-track__item {
    min-height: 58px;
    padding: 8px 10px 8px 30px;
  }

  .claim-track__item::before {
    left: 9px;
    width: 13px;
    height: 13px;
  }

  .claim-track__item::after {
    right: -8px;
    width: 8px;
  }

  .claim-track__item span {
    font-size: 0.84rem;
  }

  .claim-track__item strong {
    font-size: 0.84rem;
  }

  .investigation-screen .location-stage {
    min-height: calc(100svh - 120px);
  }

  .hearing-screen {
    height: auto;
    min-height: 100svh;
    grid-template-rows: minmax(230px, 36svh) auto;
  }

  .hearing-topbar {
    padding-top: max(10px, env(safe-area-inset-top));
  }

  .hearing-context {
    top: auto;
    right: 14px;
    bottom: 20%;
    left: 14px;
    max-width: none;
  }

  .testimony-panel {
    min-height: calc(64svh);
  }

  .testimony-panel .claim-track__item {
    min-height: 52px;
  }

  .testimony-panel__top {
    padding-top: 12px;
  }

  .gap-layout {
    width: calc(100% - 32px);
    min-height: calc(100svh - 62px);
    grid-template-columns: 1fr;
    align-content: center;
    gap: 32px;
    padding: 40px 0;
  }

  .gap-signal {
    width: min(46vw, 190px);
    justify-self: center;
  }

  .gap-copy {
    text-align: center;
  }

  .gap-copy h1,
  .gap-copy p {
    margin-right: auto;
    margin-left: auto;
  }

  .gap-copy h1 {
    font-size: clamp(2.5rem, 12vw, 4rem);
  }

  .gap-copy .action-button {
    width: 100%;
  }

  .workbench-heading {
    align-items: start;
    flex-direction: column;
    padding: 22px 16px 18px;
  }

  .workbench-axis-status {
    width: 100%;
  }

  .spatial-workbench {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas:
      "selection"
      "tray"
      "unknown"
      "rail";
    gap: 14px;
    padding: 18px 12px 26px;
  }

  /* 行動版傳喚工作台：舞台元素全部縮進一個螢幕，
     指令（對話）貼底、時間槽緊鄰其上，一次放置不需捲動。 */
  .summon-stage {
    gap: 8px;
    padding: 10px 10px 12px;
  }

  .summon-workbench-heading {
    gap: 8px;
  }

  .summon-workbench-heading h1 {
    font-size: 0.98rem;
  }

  .claim-ghost-track {
    grid-template-columns: minmax(0, 1fr);
    gap: 5px;
    padding: 7px 10px;
  }

  .claim-ghost-track > header {
    grid-template-columns: auto minmax(0, 1fr);
    align-items: baseline;
    gap: 8px;
  }

  .claim-ghost-track > header strong {
    font-size: 0.84rem;
  }

  .unplaced-tray {
    padding: 8px 10px 10px;
  }

  .unplaced-tray__cards {
    grid-auto-columns: minmax(158px, 68vw);
  }

  .interval-docking-rail {
    grid-template-columns: minmax(0, 1fr);
    gap: 10px;
    padding: 12px 10px 10px;
    box-shadow: 5px 5px 0 rgb(4 14 24 / 0.72);
  }

  .interval-docking-rail__scale {
    gap: 8px;
    margin-bottom: 14px;
  }

  .interval-docking-rail__scale > * {
    padding: 3px 6px;
    font-size: 0.84rem;
  }

  .interval-docking-rail__slots {
    gap: 6px;
  }

  .spatial-slot {
    min-height: 126px;
    gap: 6px;
    padding: 8px 7px 26px;
  }

  .spatial-slot h2 {
    font-size: 0.84rem;
  }

  /* 槽的說明由大花醫師的傳喚台詞承擔；行動版收起小字換空間。 */
  .interval-docking-rail__slots .spatial-slot header p {
    display: none;
  }

  .spatial-slot--unknown {
    display: grid;
    min-height: 62px;
    grid-template-columns: auto minmax(0, 1fr);
    grid-template-rows: none;
    align-items: center;
    align-content: center;
    gap: 4px 10px;
    padding: 8px 10px;
  }

  .spatial-slot--unknown header {
    display: grid;
    gap: 0;
  }

  .spatial-slot--unknown header p {
    display: none;
  }

  .placed-record {
    min-height: 44px;
    grid-template-columns: 30px minmax(0, 1fr);
    gap: 6px;
    padding: 4px 6px;
  }

  .placed-record__glyph {
    width: 30px;
    height: 30px;
    font-size: 1.05rem;
  }

  .placed-record__text strong {
    font-size: 0.84rem;
  }

  .summon-dialogue {
    min-height: 160px;
    padding: 22px 10px 12px;
  }

  .summon-dialogue__character {
    display: none;
  }

  .summon-dialogue__frame {
    grid-template-columns: minmax(0, 1fr);
    padding-right: 0;
  }

  /* 行動版由托盤上的「傳喚中」亮框指認對象，證物窗讓位給台詞。 */
  .summon-dialogue__exhibit {
    display: none;
  }

  .summon-dialogue__copy {
    padding: 16px 14px 12px;
  }

  .summon-dialogue__copy > p {
    min-height: 4em;
  }

  .spatial-selection-status {
    width: 100%;
    min-width: 0;
  }

  .spatial-selection-status[data-selection-active="true"] {
    position: sticky;
    z-index: 18;
    top: max(10px, env(safe-area-inset-top));
    grid-template-columns: auto minmax(0, 1fr);
    align-items: center;
    gap: 10px;
    padding: 9px 12px;
    border-color: var(--evidence-amber);
    background: var(--hearing-navy);
    box-shadow: 0 4px 0 var(--chamber-mahogany-deep);
  }

  .spatial-selection-status[data-selection-active="true"] strong {
    overflow-wrap: anywhere;
    font-size: 0.88rem;
    text-align: right;
  }

  .spatial-workbench-footer {
    position: static;
  }

  .workbench-footer {
    align-items: stretch;
    flex-direction: column;
    gap: 9px;
    padding: 12px;
  }

  .workbench-footer .action-button {
    width: 100%;
  }

  .report-stage {
    min-height: calc(100svh - 62px);
    padding: 22px 0;
  }

  .report-chain {
    margin: 20px 0;
  }

  .report-chain li {
    padding: 17px;
  }

  .report-next-case {
    width: calc(100% - 28px);
    margin-top: 18px;
  }
}

@media (max-width: 390px) {
  .claim-track__item {
    padding-right: 7px;
    padding-left: 25px;
  }

  .claim-track__item::before {
    left: 7px;
    width: 11px;
    height: 11px;
  }

  .claim-track__item strong {
    font-size: 0.84rem;
  }

  .workbench-heading h1 {
    font-size: 1.85rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  .decision-dialog__mark,
  .gap-signal {
    transform: none;
  }

  .hearing-stage::before,
  .impact-speedlines {
    background-image: none;
  }

  .workbench-evidence-card {
    transition: none;
  }

  .workbench-evidence-card:hover,
  .workbench-evidence-card.is-selected {
    transform: none;
  }

  .spatial-slot__hint {
    transition: none;
  }

  /* 卷宗牆：抬起與四角括號改為瞬時切換，狀態完全等價。 */
  .season-case,
  .season-case__cover::after {
    transition: none;
  }
}

@media (forced-colors: active) {
  .season-case__cover,
  .season-case__tab,
  .season-resume-card,
  .season-docket__heading,
  .decision-dialog,
  .claim-track__item,
  .gap-signal,
  .unplaced-tray,
  .interval-docking-rail,
  .spatial-slot,
  .workbench-evidence-card,
  .placed-record,
  .summon-dialogue__exhibit,
  .spatial-challenge,
  .spatial-challenge__options button,
  .spatial-slot__target,
  .report-chain,
  .report-next-case {
    border: 2px solid CanvasText;
  }

  .claim-track__item[data-claim-state]::before,
  .report-stage__trace path {
    forced-color-adjust: auto;
  }

  /* 純裝飾的紙質線索（書背打孔、量尺刻度）隱藏；章框與菱形刻度改系統色保留，
     因為它們是「這份卷宗現在什麼狀態」的唯一圖形線索，且旁邊都有文字。 */
  .season-case__cover::before,
  .season-case__stage::before,
  .season-resume-card__paper::before {
    display: none;
  }

  .season-case__stamp,
  .season-case__datestamp,
  .season-case__index {
    border-color: CanvasText;
    color: CanvasText;
  }

  .season-docket__ticks i {
    border-color: CanvasText;
    background: Canvas;
  }

  .season-docket__ticks i[data-case-status="completed"],
  .season-docket__ticks i[data-case-status="in-progress"] {
    background: CanvasText;
  }
}

/* CASE 05 PART 2 — material applicability and the season-one closing desk. */

.case5-reopen-summary {
  position: relative;
  z-index: 7;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) minmax(240px, 0.7fr);
  gap: 14px;
  align-items: center;
  padding: 14px clamp(18px, 4vw, 58px);
  border-block: 1px solid #725f2c;
  background: #241e14;
}

.case5-reopen-summary span {
  color: var(--case5-yellow);
  font: 900 0.84rem var(--font-data);
  letter-spacing: 0.1em;
}

.case5-reopen-summary strong { color: var(--record-paper); }
.case5-reopen-summary p { margin: 0; color: var(--muted-blue); font-size: 0.84rem; }

.case5-matrix-screen,
.case5-conclusion-screen {
  background:
    linear-gradient(90deg, rgb(65 97 118 / 0.16) 1px, transparent 1px),
    linear-gradient(rgb(65 97 118 / 0.12) 1px, transparent 1px),
    #071a29;
  background-size: 54px 54px;
}

.case5-matrix-heading {
  position: relative;
  overflow: hidden;
}

.case5-matrix-heading::after {
  position: absolute;
  right: -2%;
  bottom: -28px;
  color: rgb(255 211 84 / 0.11);
  content: "MATCH?";
  font: 950 clamp(4rem, 11vw, 10rem)/1 var(--font-data);
  letter-spacing: -0.08em;
  pointer-events: none;
  transform: rotate(-5deg);
}

.case5-matrix-heading > * { position: relative; z-index: 1; }

.case5-matrix-list {
  display: grid;
  gap: 16px;
  width: min(1540px, calc(100% - 32px));
  padding: 20px 0 30px;
  margin-inline: auto;
}

.case5-matrix-card {
  border: 1px solid #587990;
  border-top: 5px solid var(--case5-yellow);
  background: #0c273b;
  box-shadow: 10px 12px 0 rgb(0 0 0 / 0.2);
}

.case5-matrix-card:nth-child(2) { border-top-color: var(--case5-red); }
.case5-matrix-card:nth-child(3) { border-top-color: var(--case5-mint); }

.case5-matrix-card > header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 14px;
  border-bottom: 1px solid #35586f;
  background: #123651;
}

.case5-matrix-card header span {
  color: var(--case5-yellow);
  font: 900 0.84rem var(--font-data);
  letter-spacing: 0.1em;
}

.case5-matrix-card header h2 { margin: 1px 0 0; font-size: clamp(1.25rem, 2.2vw, 1.75rem); }

.case5-matrix-card header button {
  min-height: 48px;
  padding: 8px 13px;
  border: 1px solid var(--case5-yellow);
  background: #755218;
  color: white;
  font-weight: 900;
}

.case5-material-closed {
  padding: 18px;
  margin: 0;
  color: var(--muted-blue);
}

.case5-matrix-grid {
  display: grid;
  grid-template-columns: minmax(112px, 0.72fr) repeat(4, minmax(175px, 1fr)) minmax(190px, 1.15fr);
  gap: 1px;
  background: #365970;
}

.case5-matrix-grid > section,
.case5-matrix-grid > fieldset {
  min-width: 0;
  padding: 12px;
  border: 0;
  margin: 0;
  background: #0d2a40;
}

.case5-matrix-grid > fieldset.has-error {
  box-shadow: inset 0 0 0 3px var(--case5-red);
}

.case5-matrix-grid legend,
.case5-matrix-grid section > span {
  color: var(--case5-mint);
  font: 900 0.84rem var(--font-data);
  letter-spacing: 0.06em;
}

.case5-matrix-grid p {
  min-height: 4.8em;
  margin: 7px 0 10px;
  color: var(--record-paper);
  font-size: 0.84rem;
  line-height: 1.5;
}

.case5-matrix-grid fieldset > div {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 5px;
}

.case5-matrix-grid button {
  min-height: 43px;
  padding: 6px;
  border: 1px solid #587990;
  background: #173f5d;
  color: var(--record-paper);
  font-size: 0.84rem;
  font-weight: 800;
}

.case5-matrix-grid button.is-selected {
  border-color: var(--case5-yellow);
  background: #77551b;
  box-shadow: inset 3px 0 0 var(--case5-yellow);
}

.case5-matrix-grid section strong,
.case5-matrix-grid section small { display: block; }
.case5-matrix-grid section strong { margin-top: 8px; }
.case5-matrix-grid section small { margin-top: 5px; color: var(--muted-blue); font-size: 0.84rem; }
.case5-matrix-grid .is-source { background: #172d3d; }
.case5-matrix-grid .is-source strong { color: var(--case5-yellow); }
.case5-matrix-grid .is-support { background: #103c40; }

.case5-conclusion-layout {
  display: grid;
  grid-template-columns: minmax(220px, 0.55fr) minmax(0, 1.45fr);
  gap: clamp(16px, 3vw, 36px);
  width: min(1180px, calc(100% - 32px));
  padding: clamp(22px, 5vw, 58px) 0;
  margin-inline: auto;
}

.case5-material-verdicts {
  display: grid;
  align-content: start;
  gap: 9px;
}

.case5-material-verdicts section {
  padding: 14px;
  border-left: 4px solid var(--case5-yellow);
  background: #12344d;
}

.case5-material-verdicts section:nth-child(2) { border-left-color: var(--case5-red); }
.case5-material-verdicts section:nth-child(3) { border-left-color: var(--case5-mint); }
.case5-material-verdicts span { color: var(--muted-blue); font: 800 0.84rem var(--font-data); }
.case5-material-verdicts strong { display: block; margin-top: 5px; }

.case5-conclusion-questions {
  display: grid;
  gap: 14px;
}

.case5-conclusion-questions fieldset {
  padding: 18px;
  border: 1px solid #5f7f95;
  background: #0f2c42;
}

.case5-conclusion-questions fieldset.has-error { border-color: var(--case5-red); }
.case5-conclusion-questions legend { padding: 0 8px; }
.case5-conclusion-questions legend span,
.case5-conclusion-questions legend strong { display: block; }
.case5-conclusion-questions legend span { color: var(--case5-yellow); font: 900 0.84rem var(--font-data); letter-spacing: 0.1em; }
.case5-conclusion-questions legend strong { font-size: clamp(1.05rem, 2vw, 1.45rem); }

.case5-conclusion-questions fieldset > div {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}

.case5-conclusion-questions button {
  min-height: 62px;
  padding: 10px 13px;
  border: 1px solid #607f96;
  background: #183f5d;
  color: var(--record-paper);
  font-weight: 900;
  text-align: left;
}

.case5-conclusion-questions button.is-selected {
  border-color: var(--case5-yellow);
  background: #77551b;
  box-shadow: inset 5px 0 0 var(--case5-yellow);
}

.case5-conclusion-layout > blockquote {
  grid-column: 1 / -1;
  padding: 18px 22px;
  margin: 0;
  border-left: 5px solid var(--case5-mint);
  background: #103b40;
  color: #c9fff7;
  font-weight: 900;
}

.case5-report-stage {
  position: relative;
  isolation: isolate;
}

.case5-report-verdict {
  position: absolute;
  z-index: -1;
  top: 3%;
  right: 3%;
  display: grid;
  width: min(36vw, 470px);
  gap: 7px;
  opacity: 0.38;
  transform: rotate(4deg);
}

.case5-report-verdict span {
  padding: 8px 14px;
  border-left: 7px solid var(--case5-yellow);
  background: #133a55;
  font: 900 1.1rem var(--font-data);
}

.case5-report-verdict span:nth-child(2) { border-left-color: var(--case5-red); }
.case5-report-verdict span:nth-child(3) { border-left-color: var(--case5-mint); }
.case5-report-verdict strong { padding: 18px; background: var(--case5-red); font-size: 1.35rem; }

/* --- 結案卷宗（演出後落地）：左結案卡預覽、右 CTA 欄 --- */

.season-dossier {
  min-height: 100svh;
  background:
    radial-gradient(circle at 50% 20%, rgb(241 180 60 / 0.14), transparent 34%),
    linear-gradient(112deg, transparent 0 58%, rgb(217 74 63 / 0.13) 58% 62%, transparent 62%),
    #071823;
}

.season-dossier__stage {
  width: min(1180px, calc(100% - 32px));
  padding: clamp(28px, 6vw, 68px);
  margin: 28px auto;
  border: 1px solid #617f93;
  background: rgb(8 28 42 / 0.95);
  box-shadow: 18px 20px 0 rgb(0 0 0 / 0.28);
}

.season-dossier__masthead span {
  color: var(--case5-yellow);
  font: 900 0.84rem var(--font-data);
  letter-spacing: 0.13em;
}

.season-dossier__masthead h1 {
  margin: 8px 0 26px;
  font-family: var(--font-title);
  font-size: clamp(1.9rem, 4.6vw, 3.4rem);
  letter-spacing: 0.02em;
  line-height: 1.08;
}

.season-dossier__layout {
  display: grid;
  align-items: start;
  grid-template-columns: minmax(0, 460px) minmax(240px, 300px);
  gap: clamp(20px, 3vw, 38px);
}

/* 寬螢幕：大花醫師站在右側自己的走道，不壓到卡片與 CTA。 */
@media (min-width: 1100px) {
  .season-dossier__stage { padding-right: min(27vw, 330px); }
}

/* 結案卡預覽：與分享圖同一份模型，桌機固定 4:5 直式卷宗封面。
   封面語法：藏青頂帶（局名）→ 紙面兩句結尾語＋硃紅印章 → 五問查核清單 → 六案索引標籤 → 署名。 */
.season-dossier__card {
  position: relative;
  display: flex;
  flex-direction: column;
  width: min(100%, 460px);
  /* 桌機固定 4:5 直式；欄寬不足時（≤ 1000px）改回自然高度，避免內容溢出紙面。 */
  aspect-ratio: 4 / 5;
  border: 1px solid #cdc3a8;
  background: var(--paper-grain), var(--record-paper);
  color: var(--record-ink);
  box-shadow: 14px 16px 0 rgb(0 0 0 / 0.34);
}

.season-dossier__card-tab {
  position: absolute;
  top: -14px;
  left: 26px;
  width: 112px;
  height: 15px;
  border: 1px solid #0c2436;
  border-bottom: 0;
  background: var(--hearing-navy-deep);
}

.season-dossier__card-band {
  position: relative;
  display: grid;
  gap: 4px;
  padding: clamp(16px, 2.2vw, 22px) clamp(18px, 2.6vw, 28px) clamp(14px, 2vw, 18px);
  background:
    linear-gradient(90deg, transparent 0 calc(100% - 6px), var(--evidence-amber) calc(100% - 6px)),
    var(--hearing-navy-deep);
  color: var(--record-paper);
}

.season-dossier__card-eyebrow {
  color: var(--evidence-amber);
  font: 900 0.66rem var(--font-data);
  letter-spacing: 0.22em;
}

.season-dossier__card-title {
  margin: 0;
  font-family: var(--font-title);
  font-size: clamp(1.35rem, 2.6vw, 1.7rem);
  font-weight: 700;
  letter-spacing: 0.14em;
  line-height: 1.15;
}

.season-dossier__card-date {
  position: absolute;
  top: clamp(16px, 2.2vw, 22px);
  right: clamp(22px, 2.6vw, 32px);
  color: #9fb4c2;
  font: 700 0.64rem var(--font-data);
  letter-spacing: 0.1em;
}

/* 紙面：淡橫線＋左側硃紅裝訂線，像一頁真正的卷宗紙。 */
.season-dossier__card-body {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: clamp(10px, 1.6vw, 16px);
  padding: clamp(16px, 2.4vw, 24px) clamp(18px, 2.6vw, 28px) clamp(16px, 2.4vw, 22px);
  background:
    linear-gradient(90deg, transparent 0 11px, rgb(230 82 75 / 0.32) 11px 12px, transparent 12px),
    repeating-linear-gradient(180deg, transparent 0 27px, rgb(105 57 52 / 0.1) 27px 28px);
}

.season-dossier__card-hero {
  display: grid;
  align-items: center;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 4px 10px;
}

.season-dossier__card-lead,
.season-dossier__card-sub {
  margin: 0;
  font-family: var(--font-title);
  font-weight: 700;
}

.season-dossier__card-lead { grid-column: 1 / -1; }
.season-dossier__card-sub { grid-column: 1; }

.season-dossier__card-lead {
  font-size: clamp(1.28rem, 2.5vw, 1.58rem);
  letter-spacing: 0.02em;
  line-height: 1.25;
}

.season-dossier__card-sub {
  margin-top: 2px;
  color: var(--chamber-mahogany);
  font-size: clamp(0.86rem, 1.6vw, 1rem);
  line-height: 1.4;
}

.season-dossier__seal {
  grid-column: 2;
  grid-row: 2;
  align-self: center;
  padding: 7px 11px;
  border: 3px double #b3352c;
  border-radius: 3px;
  color: #b3352c;
  font-family: var(--font-title);
  font-size: clamp(0.82rem, 1.5vw, 0.96rem);
  font-weight: 700;
  letter-spacing: 0.1em;
  line-height: 1.35;
  text-align: center;
  white-space: nowrap;
  opacity: 0.92;
  mix-blend-mode: multiply;
  transform: rotate(-6deg);
}

.season-dossier__seal s { text-decoration-thickness: 2px; }

.season-dossier__card-label {
  display: block;
  margin-bottom: 6px;
  color: var(--chamber-mahogany);
  font: 900 0.62rem var(--font-data);
  letter-spacing: 0.18em;
}

/* 五問查核清單：打勾＝這一季走完的方法順序。 */
.season-dossier__checks {
  padding-top: 10px;
  border-top: 1px solid rgb(105 57 52 / 0.35);
}

.season-dossier__checks ol {
  display: grid;
  gap: 5px;
  padding: 0;
  margin: 0;
  list-style: none;
}

.season-dossier__checks li {
  display: grid;
  align-items: center;
  grid-template-columns: 16px minmax(0, 1fr);
  gap: 9px;
  font-size: 0.86rem;
  font-weight: 700;
  line-height: 1.3;
}

.season-dossier__checks i {
  position: relative;
  width: 14px;
  height: 14px;
  border: 1.5px solid var(--chamber-mahogany);
  background: rgb(255 255 255 / 0.5);
}

.season-dossier__checks i::after {
  position: absolute;
  top: -1px;
  left: 3px;
  width: 5px;
  height: 9px;
  border: solid #b3352c;
  border-width: 0 2.5px 2.5px 0;
  content: "";
  transform: rotate(40deg);
}

/* 六案索引標籤：表面名在上、正式名在下；未完成支線顯示「調查中」（虛線空標籤）。 */
.season-dossier__spines {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 6px;
  padding: 0;
  margin: 0;
  list-style: none;
}

.season-dossier__spines li {
  min-width: 0;
  padding: 5px 7px 6px;
  border: 1px solid rgb(105 57 52 / 0.32);
  border-top: 4px solid var(--evidence-amber);
  background: rgb(255 255 255 / 0.55);
}

.season-dossier__spines li:nth-child(3n + 2) { border-top-color: var(--question-coral); }
.season-dossier__spines li:nth-child(3n) { border-top-color: var(--trace-teal-bright); }

.season-dossier__spines span,
.season-dossier__spines strong { display: block; }

.season-dossier__spines span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.season-dossier__spines span {
  color: #6d6355;
  font: 700 0.56rem var(--font-data);
  letter-spacing: 0.04em;
}

.season-dossier__spines strong {
  min-height: 2.6em;
  margin-top: 2px;
  font-family: var(--font-title);
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1.3;
  overflow-wrap: anywhere;
}

.season-dossier__spines li[data-pending] {
  border-style: dashed;
  border-top: 4px solid var(--record-paper-muted);
  background: transparent;
}

.season-dossier__spines li[data-pending] strong { color: #8a8070; }

.season-dossier__card-foot {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 12px;
  padding-top: 10px;
  margin-top: auto;
  border-top: 1px solid rgb(105 57 52 / 0.35);
}

.season-dossier__card-signature {
  display: flex;
  align-items: baseline;
  gap: 8px;
  min-width: 0;
  margin: 0;
}

.season-dossier__card-signature span {
  color: #5c6a63;
  font: 700 0.64rem var(--font-data);
  letter-spacing: 0.08em;
  white-space: nowrap;
}

.season-dossier__card-signature strong {
  min-width: 6em;
  padding-bottom: 2px;
  overflow: hidden;
  border-bottom: 2px solid var(--evidence-amber);
  /* 署名是玩家任意輸入，字體子集不可能涵蓋；整串走系統字，避免子集有／無的字重混雜。 */
  font-family: "Microsoft JhengHei UI", "PingFang TC", "Noto Sans TC", system-ui, sans-serif;
  font-size: 0.98rem;
  font-weight: 700;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.season-dossier__card-byline {
  margin: 0;
  text-align: right;
}

.season-dossier__card-byline strong {
  display: block;
  font-family: var(--font-title);
  font-size: 0.88rem;
  font-weight: 700;
  letter-spacing: 0.06em;
}

.season-dossier__card-byline small {
  color: #5c6a63;
  font: 700 0.6rem var(--font-data);
}

/* 右欄：署名輸入與四個 CTA。 */
.season-dossier__actions {
  display: flex;
  align-items: stretch;
  flex-direction: column;
  gap: 10px;
}

.season-dossier__signature-field {
  display: grid;
  gap: 6px;
  margin-bottom: 4px;
}

.season-dossier__signature-field span {
  color: var(--case5-yellow);
  font: 900 0.78rem var(--font-data);
  letter-spacing: 0.12em;
}

.season-dossier__signature-field input {
  min-height: 48px;
  padding: 10px 14px;
  border: 2px solid #6f8ea3;
  background: rgb(244 241 232 / 0.94);
  color: #172536;
  font-family: var(--font-body);
  font-size: 1rem;
  font-weight: 700;
}

.season-dossier__actions .action-button {
  justify-content: center;
  width: 100%;
  text-align: center;
  text-decoration: none;
}

.season-dossier__actions .action-button--navy.is-quiet {
  background: transparent;
  box-shadow: none;
}

.season-dossier__share-status {
  margin: 2px 0 0;
  color: #b7c6cd;
  font-size: 0.82rem;
  line-height: 1.55;
}

/* 結案卡分享覆層：預覽圖＋分享圖卡／下載圖片／複製文字／關閉（比照 growth-sim share-overlay）。 */
.season-share-overlay {
  position: fixed;
  inset: 0;
  z-index: 1100;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  background: rgb(2 10 17 / 0.82);
}

.season-share-overlay__panel {
  display: grid;
  gap: 10px;
  width: min(440px, 100%);
  max-height: calc(100dvh - 32px);
  padding: 14px;
  overflow-y: auto;
  border: 3px solid var(--record-paper);
  border-top: 5px solid var(--evidence-amber);
  background: var(--hearing-navy-deep);
  color: var(--record-paper);
  box-shadow: 8px 8px 0 var(--chamber-mahogany);
}

.season-share-overlay__image {
  display: block;
  width: 100%;
  height: auto;
  border: 1px solid #cdc3a8;
  background: var(--record-paper);
}

.season-share-overlay__hint {
  margin: 0;
  color: #b7c6cd;
  font-size: 0.82rem;
  line-height: 1.5;
  text-align: center;
}

.season-share-overlay__actions {
  display: grid;
  gap: 8px;
}

.season-share-overlay__actions .action-button {
  justify-content: center;
  width: 100%;
  min-height: 44px;
  text-align: center;
}

.season-share-overlay__actions .action-button--navy.is-quiet {
  background: transparent;
  box-shadow: none;
}

@media (max-width: 680px) {
  .season-share-overlay { padding: 10px; }
  .season-share-overlay__panel { max-height: calc(100dvh - 20px); padding: 10px; }
  .season-share-overlay__image { max-height: 52dvh; width: auto; max-width: 100%; margin: 0 auto; }
}

@media (prefers-reduced-motion: no-preference) {
  .season-share-overlay__panel { animation: season-share-overlay-in 0.18s ease-out; }

  @keyframes season-share-overlay-in {
    from { opacity: 0; transform: translateY(8px); }
    to { opacity: 1; transform: none; }
  }
}

.season-finale-navigation {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 22px;
}

.season-finale-cta {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 24px;
  padding: clamp(20px, 4vw, 34px);
  margin-top: 26px;
  border: 1px solid #7692a4;
  background: var(--record-paper);
  color: var(--record-ink);
  box-shadow: 12px 14px 0 rgb(0 0 0 / 0.28);
}

.season-finale-cta__copy > span {
  color: #31536d;
  font: 900 0.84rem var(--font-data);
  letter-spacing: 0.1em;
}

.season-finale-cta h2 {
  margin: 7px 0 10px;
  color: var(--record-ink);
  font-size: clamp(1.5rem, 3vw, 2.35rem);
  line-height: 1.15;
}

.season-finale-cta p { margin: 0; }
.season-finale-cta ul { padding-left: 1.25rem; margin: 16px 0 0; }
.season-finale-cta li + li { margin-top: 7px; }

@media (max-width: 1000px) {
  .case5-matrix-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .case5-matrix-grid .is-source,
  .case5-matrix-grid .is-support { grid-column: 1 / -1; }
}

@media (max-width: 680px) {
  .case5-reopen-summary,
  .case5-conclusion-layout { grid-template-columns: 1fr; }

  .case5-matrix-card > header {
    align-items: stretch;
    flex-direction: column;
  }

  .case5-matrix-grid { grid-template-columns: 1fr; }
  .case5-matrix-grid .is-source,
  .case5-matrix-grid .is-support { grid-column: auto; }
  .case5-matrix-grid p { min-height: auto; }
  .case5-conclusion-questions fieldset > div { grid-template-columns: 1fr; }
  .season-finale-navigation { align-items: stretch; flex-direction: column; }
}

@media (max-width: 1000px) {
  .season-dossier__card { aspect-ratio: auto; }
}

@media (max-width: 760px) {
  .season-dossier__layout { grid-template-columns: minmax(0, 1fr); }

  .season-dossier__card { width: min(100%, 420px); }

  .season-dossier__spines { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 420px) {
  .season-dossier__card-hero { grid-template-columns: minmax(0, 1fr); }

  .season-dossier__card-sub { grid-column: 1; }

  .season-dossier__seal {
    grid-column: 1;
    grid-row: auto;
    justify-self: end;
    margin-top: 6px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .case5-matrix-heading::after,
  .case5-report-verdict { transform: none; }

  .season-dossier__seal { transform: none; }
}

@media (forced-colors: active) {
  .case5-reopen-summary,
  .case5-matrix-card,
  .case5-matrix-grid > section,
  .case5-matrix-grid > fieldset,
  .case5-matrix-grid button,
  .case5-material-verdicts section,
  .case5-conclusion-questions fieldset,
  .case5-conclusion-questions button,
  .season-dossier__stage,
  .season-dossier__card,
  .season-dossier__signature-field input {
    border: 2px solid CanvasText;
    forced-color-adjust: auto;
  }
}

/* Keep the v2 independent scene/character contract at the end of the cascade. */

/* Impact witness is a character-stage wrapper, not the legacy image actor. Keep
   the stage framing, but never let the stage's atmospheric alpha/mask erase the
   actual actor pose and nameplate handoff. */
body .impact-overlay .impact-witness {
  inset: auto -2% -10% auto;
  width: min(55vw, 720px);
  height: 110%;
  object-fit: contain;
  object-position: right bottom;
  opacity: 1 !important;
  filter: saturate(0.82) contrast(1.08) brightness(0.88);
  mask-image: none !important;
  -webkit-mask-image: none !important;
}

body .impact-overlay .impact-witness .character-actor {
  right: 0;
  bottom: 0;
  width: 100%;
  max-width: none;
  opacity: 1 !important;
}

body .season-dossier__character.vn-character {
  z-index: 2;
  right: -4%;
  bottom: -5%;
  width: min(42%, 470px);
  height: 92%;
  opacity: 0.94;
}

@media (max-width: 680px) {
  body .impact-overlay .impact-witness {
    right: -20%;
    /* Keep the face/action pose below the tall mobile Continue rail; the
       lower crop is intentional and preserves the impact copy's reading lane. */
    bottom: -14%;
    width: min(88vw, 520px);
    height: 94%;
    opacity: 1 !important;
    mask-image: none !important;
    -webkit-mask-image: none !important;
  }

  body .impact-overlay .impact-witness .character-actor {
    width: 100%;
    max-width: none;
    opacity: 1 !important;
  }

  body .season-dossier__character.vn-character {
    right: -18%;
    bottom: 18%;
    width: min(75vw, 390px);
    height: 58%;
    opacity: 0.58;
  }
}

body .vn-scene {
  z-index: 0;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: var(--scene-position, center);
  filter: saturate(0.96) contrast(1.04) brightness(0.94);
}

body .vn-character {
  z-index: 2;
  right: clamp(1rem, 7vw, 8rem);
  bottom: -7%;
  width: min(43vw, 38rem);
  height: 90%;
  object-fit: contain;
  object-position: right bottom;
  filter: drop-shadow(-18px 18px 22px rgb(2 10 17 / 0.62));
}

body .vn-character--narrative {
  right: clamp(1rem, 8vw, 9rem);
  bottom: 10%;
  height: 84%;
}

body .vn-character--investigation {
  right: clamp(1rem, 6vw, 7rem);
  bottom: -8%;
  height: 88%;
}

body .vn-character--hearing {
  right: clamp(2rem, 8vw, 10rem);
  bottom: -22%;
  width: min(43vw, 38rem);
  height: 124%;
}

.narrative-stage__shade,
.location-stage__shade {
  z-index: 1;
}

.narrative-case-mark,
.narrative-dialogue,
.scene-dialogue,
.investigation-prompt,
.investigation-command-menu,
.investigation-mode-panel,
.examine-guide,
.hotspot-layer,
.hearing-topbar,
.hearing-context,
.player-desk {
  z-index: 4;
}

.location-stage > .investigation-mode-back {
  z-index: 12;
}

@media (max-width: 820px) {
  body .vn-character {
    right: 0;
    bottom: -4%;
    width: min(72vw, 31rem);
    height: 76%;
  }

  body .vn-character--narrative {
    right: 0;
    bottom: 16%;
    height: 72%;
  }

  body .vn-character--hearing {
    right: 0;
    bottom: -18%;
    width: min(72vw, 31rem);
    height: 108%;
  }

}

@media (max-width: 560px) {
  body .vn-character--narrative {
    right: 0;
    bottom: 26%;
    width: min(82vw, 29rem);
    height: 62%;
  }

  body .vn-character--investigation {
    right: 0;
    bottom: 5%;
    width: min(82vw, 29rem);
    height: 66%;
  }

  body .vn-character--hearing {
    right: 0;
    bottom: -14%;
    width: min(82vw, 29rem);
    height: 96%;
  }
}

@media (max-width: 720px) {
  .claim-track--case4 .claim-track__item span,
  .claim-track--case4 .claim-track__item strong {
    overflow: visible;
    line-height: 1.18;
    text-overflow: clip;
    white-space: normal;
  }
}

@media (min-width: 1001px) {
  body .season-dossier__character.vn-character {
    right: -3%;
    bottom: -2%;
    width: 34%;
    height: 78%;
    opacity: 0.7;
  }
}

@media (max-width: 680px) {
  body .season-dossier__character.vn-character {
    top: auto;
    right: -12%;
    bottom: 0;
    width: min(78vw, 18rem);
    height: 22rem;
    object-position: right bottom;
    opacity: 0.34;
  }

  /* 手機：卷宗底部留一段走道給大花醫師站，立繪不壓到導覽列。 */
  .season-dossier__stage { padding-bottom: clamp(190px, 54vw, 240px); }

  .season-dossier__character-stage .season-dossier__character.character-actor {
    top: auto;
    right: -6%;
    bottom: 0;
    width: min(58vw, 15rem);
    height: auto;
    opacity: 1;
  }
}

/* Data-driven branching narrative: one investigation surface for every case. */

.branch-narrative-screen {
  background: var(--hearing-navy-deep);
}

.branch-narrative-workspace {
  min-height: calc(100dvh - 72px);
  display: grid;
  grid-template-columns: minmax(19rem, 0.8fr) minmax(0, 1.2fr);
}

.branch-narrative-stage,
.branch-narrative-file,
.branch-narrative-brief,
.branch-narrative-actions,
.branch-narrative-actions__grid {
  min-width: 0;
}

.branch-narrative-stage {
  position: relative;
  min-height: 44rem;
  overflow: hidden;
  border-right: 1px solid var(--line-blue);
  background: var(--hearing-navy);
  isolation: isolate;
}

.branch-narrative-stage__scene {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: saturate(0.78) contrast(1.08);
}

.branch-narrative-stage__wash {
  position: absolute;
  inset: 0;
  z-index: 1;
  background:
    linear-gradient(180deg, rgb(8 24 39 / 0.06) 20%, rgb(8 24 39 / 0.94) 92%),
    linear-gradient(90deg, transparent 50%, rgb(8 24 39 / 0.68));
  pointer-events: none;
}

body .branch-narrative-stage__character.vn-character,
body .branch-narrative-stage__character.character-actor {
  position: absolute;
  z-index: 2;
  right: -5%;
  bottom: 0;
  width: min(72%, 30rem);
  height: 67%;
  object-fit: contain;
  object-position: right bottom;
  filter: drop-shadow(-16px 18px 24px rgb(0 0 0 / 0.5));
}

.branch-narrative-stage__character-stage {
  z-index: 2;
}

.branch-narrative-stage__character-stage .branch-narrative-stage__character.character-actor {
  height: auto;
  aspect-ratio: 1;
}

.branch-narrative-stage__placard {
  position: absolute;
  z-index: 3;
  top: clamp(1.2rem, 3vw, 2.4rem);
  left: clamp(1rem, 3vw, 2.5rem);
  width: min(calc(100% - 2rem), 26rem);
  padding: 1rem 1.15rem 1.15rem;
  border: 1px solid var(--line-blue);
  border-top: 4px solid var(--evidence-amber);
  background: rgb(8 24 39 / 0.88);
  box-shadow: 8px 9px 0 rgb(0 0 0 / 0.2);
  backdrop-filter: blur(8px);
}

.branch-narrative-stage__placard .case-strip {
  margin-bottom: 0.7rem;
}

.branch-narrative-stage__placard > span,
.branch-narrative-stage__placard > strong {
  display: block;
}

.branch-narrative-stage__placard > span {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.12em;
}

.branch-narrative-stage__placard > strong {
  margin-top: 0.22rem;
  overflow-wrap: anywhere;
  color: var(--record-paper);
  font-size: 1rem;
}

.branch-narrative-file {
  display: grid;
  align-content: start;
  gap: clamp(1.1rem, 2.4vw, 2rem);
  padding: clamp(1.1rem, 3vw, 2.8rem);
  background:
    linear-gradient(rgb(25 43 60 / 0.055) 1px, transparent 1px) 0 0 / 100% 2rem,
    var(--record-paper);
  color: var(--record-ink);
}

.branch-narrative-rail {
  display: grid;
  grid-template-columns: minmax(9.5rem, 0.24fr) minmax(0, 1fr);
  gap: 1rem;
  padding: 1rem 1.2rem;
  border: 1px solid var(--line-blue);
  border-top: 4px solid var(--trace-teal-bright);
  background: var(--hearing-navy);
  color: var(--record-paper);
  box-shadow: 6px 7px 0 rgb(17 43 69 / 0.17);
}

.branch-narrative-rail__heading span,
.branch-narrative-rail__heading strong {
  display: block;
}

.branch-narrative-rail__heading span {
  color: var(--trace-teal-bright);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.13em;
}

.branch-narrative-rail__heading strong {
  margin-top: 0.25rem;
  font-size: 1rem;
}

.branch-narrative-rail ol {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(7.2rem, 1fr);
  gap: 0;
  margin: 0;
  padding: 0;
  overflow-x: auto;
  list-style: none;
  scrollbar-color: var(--trace-teal) var(--hearing-navy-deep);
}

.branch-narrative-rail li {
  position: relative;
  display: grid;
  grid-template-columns: 1.7rem minmax(0, 1fr);
  gap: 0.45rem;
  align-items: start;
  min-width: 0;
  padding: 0.2rem 0.65rem 0.25rem 0;
}

.branch-narrative-rail li::after {
  content: "";
  position: absolute;
  top: 0.78rem;
  right: 0;
  left: 1.65rem;
  height: 2px;
  background: var(--line-blue);
}

.branch-narrative-rail li:last-child::after {
  display: none;
}

.branch-narrative-rail li > span {
  position: relative;
  z-index: 1;
  display: grid;
  place-items: center;
  width: 1.55rem;
  height: 1.55rem;
  border: 2px solid var(--muted-blue);
  background: var(--hearing-navy-deep);
  color: var(--muted-blue);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
}

.branch-narrative-rail li[data-current="true"] > span {
  border-color: var(--evidence-amber-soft);
  background: var(--evidence-amber);
  color: var(--record-ink);
  box-shadow: 0 0 0 4px rgb(241 180 60 / 0.16);
}

.branch-narrative-rail li div {
  position: relative;
  z-index: 1;
  min-width: 0;
  padding-right: 0.35rem;
  background: var(--hearing-navy);
}

.branch-narrative-rail li strong,
.branch-narrative-rail li small {
  display: block;
}

.branch-narrative-rail li strong {
  font-size: 0.84rem;
  line-height: 1.25;
}

.branch-narrative-rail li small {
  display: -webkit-box;
  margin-top: 0.18rem;
  overflow-wrap: anywhere;
  overflow: hidden;
  color: var(--muted-blue);
  font-family: var(--font-body);
  font-size: 0.84rem;
  line-height: 1.25;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
}

.branch-narrative-brief {
  position: relative;
  padding: clamp(1.3rem, 3.5vw, 3rem);
  border: 2px solid var(--record-ink);
  background: rgb(244 241 232 / 0.92);
  box-shadow: var(--shadow-paper);
  clip-path: polygon(0 0, calc(100% - 1.35rem) 0, 100% 1.35rem, 100% 100%, 1.35rem 100%, 0 calc(100% - 1.35rem));
}

.branch-narrative-brief::before {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  width: 1.35rem;
  height: 1.35rem;
  border-bottom: 2px solid var(--record-ink);
  border-left: 2px solid var(--record-ink);
  background: var(--record-paper-muted);
}

.branch-narrative-brief > header {
  padding-bottom: 1.25rem;
  border-bottom: 4px double var(--record-ink);
}

.branch-narrative-brief > header > span,
.branch-narrative-context > span,
.branch-narrative-response > span,
.branch-narrative-evidence > span,
.branch-narrative-actions > header > span,
.branch-narrative-closure > div > span {
  color: var(--question-coral-deep);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.11em;
}

.branch-narrative-brief h2 {
  max-width: 28ch;
  margin: 0.45rem 0 0;
  color: var(--record-ink);
  font-size: 2rem;
}

.branch-narrative-objective {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 0.55rem;
  align-items: baseline;
  margin: 0.85rem 0 0;
  color: var(--record-ink);
  font-size: 1rem;
  font-weight: 700;
}

.branch-narrative-objective > strong {
  color: var(--question-coral-deep);
  font-family: var(--font-data);
  font-size: 0.84rem;
  letter-spacing: 0.08em;
}

.branch-narrative-context,
.branch-narrative-response {
  margin-top: 1.45rem;
  padding-top: 0.85rem;
  border-top: 4px solid var(--evidence-amber);
}

.branch-narrative-context p,
.branch-narrative-response p {
  margin: 0.35rem 0 0;
  color: var(--record-ink);
  font-size: 1rem;
  font-weight: 700;
}

.branch-narrative-response {
  border-top-color: var(--trace-teal);
  background: color-mix(in srgb, var(--trace-teal) 10%, transparent);
  padding: 0.85rem 1rem;
}

.branch-narrative-response > span {
  color: var(--hearing-navy);
}

.branch-narrative-response__beat {
  margin-top: 0.55rem;
}

.branch-narrative-response__beat + .branch-narrative-response__beat {
  padding-top: 0.7rem;
  border-top: 1px solid var(--line-blue);
}

.branch-narrative-response__beat > strong {
  color: var(--hearing-navy);
  font-family: var(--font-data);
  font-size: 0.84rem;
  letter-spacing: 0.08em;
}

.branch-narrative-response__beat > p {
  white-space: pre-line;
}

.branch-narrative-ending {
  margin-top: 1.45rem;
  padding-top: 1rem;
  border-top: 4px solid var(--evidence-amber);
}

.branch-narrative-ending > span {
  color: var(--question-coral-deep);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.11em;
}

.branch-narrative-ending > h3 {
  margin: 0.35rem 0 0;
  color: var(--record-ink);
  font-size: 2rem;
}

.branch-narrative-ending > p {
  margin: 0.55rem 0 0;
  color: var(--record-ink);
  font-size: 1rem;
  font-weight: 700;
  white-space: pre-line;
}

.branch-narrative-recovery-notice {
  margin: 1.3rem 0 0;
  padding: 0.8rem 1rem;
  border: 2px dashed var(--question-coral-deep);
  background: color-mix(in srgb, var(--question-coral) 8%, transparent);
  color: var(--question-coral-deep);
  font-weight: 800;
}

.branch-narrative-evidence {
  margin-top: 1.4rem;
  padding-top: 1rem;
  border-top: 1px solid rgb(25 43 60 / 0.3);
}

.branch-narrative-evidence > span {
  color: var(--record-ink);
}

.branch-narrative-evidence ul {
  display: flex;
  flex-wrap: wrap;
  gap: 0.55rem;
  margin: 0.7rem 0 0;
  padding: 0;
  list-style: none;
}

.branch-narrative-evidence li {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  min-height: 2.35rem;
  padding: 0.42rem 0.7rem;
  border: 1px solid var(--record-ink);
  background: var(--record-paper);
  box-shadow: 3px 3px 0 rgb(25 43 60 / 0.16);
}

.branch-narrative-evidence li strong {
  color: var(--record-ink);
  font-family: var(--font-data);
  font-size: 0.84rem;
}

.branch-narrative-evidence li span {
  font-size: 0.84rem;
  font-weight: 800;
}

.branch-narrative-actions {
  margin-top: clamp(1.7rem, 3.5vw, 3rem);
}

.branch-narrative-actions > header {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 0.8rem;
}

.branch-narrative-actions > header > span {
  color: var(--record-ink);
}

.branch-narrative-actions h3 {
  margin: 0;
  color: var(--record-ink);
  font-size: 1rem;
}

.branch-narrative-actions__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr));
  gap: 0.75rem;
}

.branch-narrative-actions__grid > button {
  position: relative;
  min-height: 8.3rem;
  display: grid;
  align-content: start;
  gap: 0.35rem;
  padding: 1rem 3rem 1rem 1.1rem;
  border: 2px solid var(--hearing-navy);
  background: var(--hearing-navy);
  color: var(--record-paper);
  text-align: left;
  box-shadow: 5px 6px 0 rgb(25 43 60 / 0.2);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 0.8rem), calc(100% - 0.8rem) 100%, 0 100%);
  transition: transform 140ms ease, background-color 140ms ease, box-shadow 140ms ease;
}

.branch-narrative-actions__grid > button::before {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  height: 0.3rem;
  background: var(--evidence-amber);
}

.branch-narrative-actions__grid > button > span {
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.08em;
}

.branch-narrative-actions__grid > button > strong {
  font-size: 1rem;
  line-height: 1.35;
}

.branch-narrative-actions__grid > button > small {
  color: var(--muted-blue);
  line-height: 1.4;
}

.branch-narrative-actions__grid > button > i {
  position: absolute;
  right: 1rem;
  bottom: 0.8rem;
  color: var(--evidence-amber-soft);
  font-family: var(--font-data);
  font-size: 2rem;
  font-style: normal;
}

.branch-narrative-closure {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  margin-top: clamp(1.7rem, 3.5vw, 3rem);
  padding: 1.1rem;
  border-top: 5px solid var(--evidence-amber);
  border-bottom: 2px solid var(--record-ink);
  background: color-mix(in srgb, var(--evidence-amber) 12%, transparent);
}

.branch-narrative-closure[data-kind="recovery"] {
  border-top-color: var(--question-coral);
  background: color-mix(in srgb, var(--question-coral) 10%, transparent);
}

.branch-narrative-closure[data-kind="complete"] {
  border-top-color: var(--trace-teal);
  background: color-mix(in srgb, var(--trace-teal) 10%, transparent);
}

.branch-narrative-closure > div {
  min-width: 0;
}

.branch-narrative-closure > div > span,
.branch-narrative-closure > div > strong,
.branch-narrative-closure > div > small {
  display: block;
}

.branch-narrative-closure > div > strong {
  margin-top: 0.25rem;
  color: var(--record-ink);
}

.branch-narrative-closure > div > small {
  margin-top: 0.25rem;
  color: var(--record-ink);
}

@media (hover: hover) {
  .branch-narrative-actions__grid > button:hover {
    background: var(--hearing-navy-soft);
    box-shadow: 8px 9px 0 rgb(25 43 60 / 0.2);
    transform: translate(-2px, -2px);
  }
}

@media (max-width: 980px) {
  .branch-narrative-workspace {
    grid-template-columns: 1fr;
  }

  .branch-narrative-stage {
    min-height: 30rem;
    border-right: 0;
    border-bottom: 1px solid var(--line-blue);
  }

  body .branch-narrative-stage__character.vn-character,
  body .branch-narrative-stage__character.character-actor {
    right: 1%;
    bottom: 0;
    width: min(58%, 27rem);
    height: 72%;
  }

}

@media (max-width: 680px) {
  .branch-narrative-stage {
    min-height: 24rem;
  }

  body .branch-narrative-stage__character.vn-character,
  body .branch-narrative-stage__character.character-actor {
    right: -8%;
    bottom: 0;
    width: min(74%, 24rem);
    height: 66%;
    opacity: 0.92;
  }

  .branch-narrative-stage__placard {
    top: 0.8rem;
    left: 0.8rem;
    width: min(calc(100% - 1.6rem), 20rem);
    padding: 0.75rem 0.85rem;
  }

  .branch-narrative-file {
    padding: 0.85rem;
  }

  .branch-narrative-rail {
    grid-template-columns: 1fr;
    gap: 0.7rem;
    padding: 0.85rem;
  }

  .branch-narrative-rail ol {
    grid-auto-flow: row;
    grid-auto-columns: auto;
    overflow: visible;
  }

  .branch-narrative-rail li {
    grid-template-columns: 1.7rem minmax(0, 1fr);
    padding-bottom: 0.45rem;
  }

  .branch-narrative-rail li::after {
    top: 1.4rem;
    bottom: -0.1rem;
    left: 0.75rem;
    width: 2px;
    height: auto;
  }

  .branch-narrative-brief {
    padding: 1.1rem;
    clip-path: none;
  }

  .branch-narrative-brief::before {
    display: none;
  }

  .branch-narrative-actions > header,
  .branch-narrative-closure {
    align-items: stretch;
    flex-direction: column;
  }

  .branch-narrative-actions__grid {
    grid-template-columns: 1fr;
  }

  .branch-narrative-actions__grid > button {
    min-height: 7rem;
  }

  .branch-narrative-closure .action-button {
    width: 100%;
  }

  .branch-narrative-evidence li {
    width: 100%;
  }
}

@media (max-width: 390px) {
  .branch-narrative-stage {
    min-height: 21rem;
  }

  .branch-narrative-stage__placard .case-strip__title {
    max-width: 13rem;
    white-space: normal;
  }

  body .branch-narrative-stage__character.vn-character,
  body .branch-narrative-stage__character.character-actor {
    right: -13%;
    width: 78%;
    height: 62%;
  }

}

@media (prefers-reduced-motion: reduce) {
  .branch-narrative-actions__grid > button {
    transition: none;
  }
}

@media (forced-colors: active) {
  .branch-narrative-stage,
  .branch-narrative-stage__placard,
  .branch-narrative-rail,
  .branch-narrative-brief,
  .branch-narrative-actions__grid > button,
  .branch-narrative-evidence li,
  .branch-narrative-closure {
    border: 2px solid CanvasText;
    clip-path: none;
    forced-color-adjust: auto;
  }

  .branch-narrative-stage__wash {
    display: none;
  }
}

/* Phase A: shared hearing dialogue grammar.  Workbench keeps its own summon-dialogue contract. */
.aa-dialogue {
  position: relative;
  display: grid;
  min-width: 0;
  min-height: 176px;
  padding: 30px clamp(16px, 3vw, 44px) clamp(14px, 2vw, 20px);
  border: 4px solid var(--record-paper);
  border-top: 5px solid var(--evidence-amber);
  background:
    radial-gradient(circle at 18% 24%, rgb(169 192 206 / 0.13) 0 1px, transparent 1.5px) 0 0 / 10px 10px,
    linear-gradient(90deg, rgb(105 57 52 / 0.4), transparent 38%),
    var(--hearing-navy-deep);
  color: var(--record-paper);
  box-shadow:
    0 0 0 2px rgb(4 14 24 / 0.85),
    8px 8px 0 rgb(4 14 24 / 0.7);
  clip-path: none;
}

/* Inner hairline: second frame layer of the double border shell. */
.aa-dialogue::after {
  position: absolute;
  z-index: 0;
  inset: 4px;
  border: 1px solid rgb(244 241 232 / 0.3);
  content: "";
  pointer-events: none;
}

.narrative-dialogue.aa-dialogue {
  width: min(1060px, calc(100% - 40px));
  margin: 0 auto max(18px, 3dvh);
}

.narrative-screen:has(.aa-dialogue) {
  height: 100dvh;
  min-height: 0;
  grid-template-rows: auto minmax(0, 1fr);
  overflow: hidden;
}

.narrative-screen:has(.aa-dialogue) > .narrative-stage {
  min-height: 0;
  height: 100%;
  overflow: hidden;
}

.scene-dialogue.aa-dialogue {
  position: absolute;
  display: grid;
  right: clamp(18px, 4vw, 60px);
  bottom: clamp(18px, 3vw, 38px);
  left: clamp(18px, 4vw, 60px);
  width: auto;
}

.aa-dialogue__frame {
  isolation: isolate;
}

.aa-dialogue__copy {
  min-width: 0;
  min-height: 4em;
  padding-right: 66px;
  margin: 0;
  overflow-wrap: anywhere;
  color: var(--record-paper);
  font-size: clamp(20px, 1.2vw + 14px, 25px);
  font-weight: 750;
  line-height: 1.58;
}

.aa-dialogue__copy--monologue {
  color: var(--muted-blue);
  font-weight: 650;
}

/* 調查筆記是同一份卷宗裡的另一層資料，不是人物名牌的延伸。 */
.scene-dialogue__note {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  gap: 10px 16px;
  align-items: start;
  min-width: 0;
  margin: 0 clamp(14px, 2vw, 26px) 12px;
  padding: 9px 12px 10px;
  border-top: 1px solid rgb(105 222 209 / 0.36);
  border-bottom: 1px solid rgb(105 222 209 / 0.2);
  background: rgb(30 155 145 / 0.1);
  color: var(--muted-blue);
}

.scene-dialogue__note-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding-top: 2px;
  color: var(--evidence-amber);
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.08em;
  white-space: nowrap;
}

.scene-dialogue__note-label::before {
  color: var(--trace-teal-bright);
  content: "◆";
}

.scene-dialogue__note-body {
  min-width: 0;
}

.scene-dialogue__note p {
  min-height: 0;
  padding: 0;
  color: var(--record-paper);
  font-size: clamp(0.95rem, 0.35vw + 0.82rem, 1.1rem);
  font-weight: 650;
  line-height: 1.45;
}

.scene-dialogue__note small {
  display: block;
  margin-top: 4px;
  color: var(--muted-blue);
  font-family: var(--font-data);
  font-size: 0.84rem;
  line-height: 1.35;
}

.aa-nameplate {
  position: absolute;
  z-index: 1;
  top: 0;
  left: clamp(12px, 2vw, 22px);
  display: flex;
  align-items: baseline;
  gap: 8px;
  max-width: calc(100% - 34px);
  padding: 3px 14px 8px 17px;
  border: 2px solid var(--record-paper);
  background: var(--chamber-mahogany);
  color: var(--record-paper);
  box-shadow:
    inset 0 -3px 0 rgb(4 14 24 / 0.32),
    4px 5px 0 rgb(4 14 24 / 0.72);
  transform: translateY(-56%);
}

/* 名牌的量尺刻度：左緣豎刻度＋底緣橫刻度組成 L 形量角，與聽證選句左緣刻度、
   結尾旁白邊欄共用同一組刻度語彙（不是裝飾色條）。 */
.aa-nameplate::before {
  --plate-tick-ink: rgb(241 180 60 / 0.62);
  position: absolute;
  inset: 0;
  background:
    repeating-linear-gradient(90deg, var(--plate-tick-ink) 0 2px, transparent 2px 9px) left bottom / 100% 6px no-repeat,
    repeating-linear-gradient(180deg, var(--plate-tick-ink) 0 2px, transparent 2px 9px) left top / 5px 100% no-repeat;
  content: "";
  pointer-events: none;
}

.aa-nameplate[data-voice="ji-cheng"] {
  background: #12645f;
  color: var(--record-paper);
}

.aa-nameplate[data-voice="dr-bigflower"] {
  background: var(--evidence-amber);
  color: var(--hearing-navy-deep);
}

.aa-nameplate[data-voice="dr-bigflower"]::before {
  --plate-tick-ink: rgb(8 24 39 / 0.42);
}

.aa-nameplate strong {
  overflow: hidden;
  color: inherit;
  font-family: var(--font-body);
  font-size: 1.1rem;
  font-weight: 900;
  line-height: 1.3;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.aa-speaker-note {
  grid-column: 1 / -1;
  min-width: 0;
  margin: 0 0 8px;
  color: var(--muted-blue);
  font-family: var(--font-body);
  font-size: 0.95rem;
  line-height: 1.5;
  overflow-wrap: anywhere;
  white-space: normal;
}

.counter-panel__challenge > .aa-speaker-note {
  padding: 28px clamp(16px, 3vw, 36px) 0;
}

.counter-panel__challenge > .aa-speaker-note + h1 {
  padding-top: 8px;
}

.impact-copy > .aa-speaker-note {
  padding-top: 28px;
}

.aa-advance {
  position: absolute;
  z-index: 1;
  right: clamp(10px, 2vw, 18px);
  bottom: clamp(8px, 1.5vw, 14px);
  display: grid;
  width: 56px;
  min-height: 44px;
  place-items: center;
  padding: 4px;
  background: transparent;
  color: var(--evidence-amber-soft);
  font: 900 1.2rem/1 var(--font-data);
  letter-spacing: 0;
  text-shadow: 2px 2px 0 var(--chamber-mahogany-deep);
}

/* Reset the legacy full-label advance controls only inside the AA dialogue frame. */
.narrative-dialogue.aa-dialogue > .aa-advance,
.scene-dialogue.aa-dialogue > .aa-advance {
  inset: auto 10px 10px auto;
  width: 56px;
  min-width: 0;
  min-height: 44px;
  padding: 4px;
  border: 0;
  background: transparent;
  color: var(--evidence-amber-soft);
  box-shadow: none;
  font: 900 1.2rem/1 var(--font-data);
  grid-column: auto;
  grid-row: auto;
  text-shadow: 1px 1px 0 var(--chamber-mahogany-deep);
}

/* 推進指示器不是彈跳（無 overshoot ease）：短週期的下沉提示，故命名為 cue。 */
.aa-advance__chevrons {
  display: inline-block;
  animation: aa-advance-cue 950ms cubic-bezier(0.45, 0, 0.2, 1) infinite;
}

@keyframes aa-advance-cue {
  0%, 100% { opacity: 0.82; transform: translateY(-2px); }
  45% { opacity: 1; transform: translateY(3px); }
  68% { opacity: 1; transform: translateY(1px); }
}

.aa-choice-stack {
  display: grid;
  gap: 8px;
  margin: 4px 0 8px;
}

.aa-choice-stack .aa-choice {
  width: 100%;
  min-height: 44px;
  border: 2px solid var(--record-paper);
  background:
    radial-gradient(circle at 16% 30%, rgb(169 192 206 / 0.16) 0 1px, transparent 1.5px) 0 0 / 9px 9px,
    var(--hearing-navy-deep);
  color: var(--record-paper);
  box-shadow: 4px 4px 0 var(--chamber-mahogany-deep);
  clip-path: none;
  font-weight: 900;
}

.aa-choice-stack .aa-choice:hover,
.aa-choice-stack .aa-choice.is-selected,
.aa-choice-stack .aa-choice[aria-pressed="true"] {
  border-color: var(--evidence-amber);
  color: var(--evidence-amber-soft);
}

.aa-corner-focus:focus-visible,
.action-button:focus-visible,
.season-case__action :focus-visible,
.record-tab:focus-visible,
.hearing-action:focus-visible,
.aa-choice:focus-visible {
  position: relative;
  isolation: isolate;
  outline: 0;
}

.aa-advance.aa-corner-focus:focus-visible {
  position: absolute;
}

.aa-corner-focus:focus-visible::after,
.action-button:focus-visible::after,
.season-case__action :focus-visible::after,
.record-tab:focus-visible::after,
.hearing-action:focus-visible::after,
.aa-choice:focus-visible::after {
  position: absolute;
  z-index: 2;
  inset: 3px;
  pointer-events: none;
  background:
    linear-gradient(var(--evidence-amber), var(--evidence-amber)) 0 0 / 12px 3px no-repeat,
    linear-gradient(var(--evidence-amber), var(--evidence-amber)) 0 0 / 3px 12px no-repeat,
    linear-gradient(var(--evidence-amber), var(--evidence-amber)) 100% 0 / 12px 3px no-repeat,
    linear-gradient(var(--evidence-amber), var(--evidence-amber)) 100% 0 / 3px 12px no-repeat,
    linear-gradient(var(--evidence-amber), var(--evidence-amber)) 0 100% / 12px 3px no-repeat,
    linear-gradient(var(--evidence-amber), var(--evidence-amber)) 0 100% / 3px 12px no-repeat,
    linear-gradient(var(--evidence-amber), var(--evidence-amber)) 100% 100% / 12px 3px no-repeat,
    linear-gradient(var(--evidence-amber), var(--evidence-amber)) 100% 100% / 3px 12px no-repeat;
  content: "";
}

.decision-dialog[open] {
  display: grid;
  grid-template-areas:
    "mark"
    "kicker"
    "actions"
    "title"
    "copy";
  gap: 10px;
  padding: clamp(20px, 5vw, 38px);
  border: 3px solid var(--record-paper);
  border-top: 5px solid var(--evidence-amber);
  background:
    radial-gradient(circle at 20% 22%, rgb(169 192 206 / 0.11) 0 1px, transparent 1.5px) 0 0 / 10px 10px,
    var(--hearing-navy-deep);
  color: var(--record-paper);
  box-shadow: 0 0 0 100vmax rgb(2 10 17 / 0.78), 8px 8px 0 var(--chamber-mahogany);
  clip-path: none;
}

.decision-dialog__mark {
  grid-area: mark;
  margin: 0;
  background: var(--chamber-mahogany);
  color: var(--record-paper);
  box-shadow: 3px 3px 0 rgb(4 14 24 / 0.72);
}

.decision-dialog__kicker { grid-area: kicker; }

.decision-dialog h2 {
  grid-area: title;
  margin: 2px 0 0;
  color: var(--record-paper);
  font-size: clamp(1.35rem, 5vw, 2.25rem);
}

.decision-dialog p:not(.decision-dialog__kicker) {
  grid-area: copy;
  margin: 0;
  color: var(--muted-blue);
}

.decision-dialog__actions { grid-area: actions; }

@media (max-width: 520px) {
  .narrative-dialogue.aa-dialogue {
    width: calc(100% - 24px);
    min-height: 154px;
    padding: 28px 14px 14px;
  }

  .scene-dialogue.aa-dialogue {
    right: 12px;
    bottom: max(12px, env(safe-area-inset-bottom));
    left: 12px;
    min-height: 154px;
    padding: 28px 14px 14px;
  }

  .aa-dialogue__copy {
    min-height: 4.2em;
    padding-right: 48px;
  }

  .scene-dialogue__note {
    gap: 6px 10px;
    margin-inline: 0;
    padding: 8px 10px 9px;
  }

  .scene-dialogue__note-label {
    font-size: 0.84rem;
  }

  .aa-advance {
    right: 4px;
    bottom: 4px;
    width: 48px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .aa-advance__chevrons,
  .hotspot__reticle,
  .hotspot:hover .hotspot__reticle,
  .hotspot:focus-visible .hotspot__reticle {
    animation: none;
  }
}

@media (forced-colors: active) {
  .aa-dialogue,
  .aa-nameplate,
  .aa-choice-stack .aa-choice,
  .decision-dialog[open] {
    border: 2px solid CanvasText;
    forced-color-adjust: auto;
  }

  .aa-dialogue::after,
  .aa-nameplate::before {
    display: none;
  }

  .aa-corner-focus:focus-visible,
  .action-button:focus-visible,
  .season-case__action :focus-visible,
  .record-tab:focus-visible,
  .hearing-action:focus-visible,
  .aa-choice:focus-visible {
    outline: 3px solid Highlight;
    outline-offset: 3px;
  }

  .aa-corner-focus:focus-visible::after,
  .action-button:focus-visible::after,
  .season-case__action :focus-visible::after,
  .record-tab:focus-visible::after,
  .hearing-action:focus-visible::after,
  .aa-choice:focus-visible::after {
    display: none;
  }
}

/* Paper props keep their own color: no viewport scanlines or vignette above UI. */

/* ============================================================
   P3.5 Report Dossier & HUD Case File Tab
   報告卷宗（紙質纖維＋紅欄線＋裝訂＋紅印章＋日期章＋證據卡推理鏈＋結案徽記）
   與 HUD 檔案籤（編號章＋案名＋階段燈）、音效實體開關、聽證爭點刻度。
   全部為 presentation-only：裝飾一律 aria-hidden、不攔截輸入；
   數字（日期章／編號章）一律 --font-data，不用 --font-title。
   ============================================================ */

/* --- HUD 檔案籤（screenHeader 系畫面） --- */

.screen-header__case {
  display: grid;
  gap: 6px;
  min-width: 0;
}

.screen-header__case h1 {
  min-width: 0;
}

.case-strip--file-tab {
  position: relative;
  align-items: stretch;
  border: 2px solid #8f7a4f;
  border-bottom: 0;
  background:
    repeating-linear-gradient(63deg, rgb(88 74 52 / 0.05) 0 1px, transparent 1px 6px),
    linear-gradient(180deg, #efe6cd, #ddd0b2);
  color: var(--record-ink);
  box-shadow: none;
  clip-path: polygon(10px 0, calc(100% - 10px) 0, 100% 100%, 0 100%);
}

.case-strip--file-tab .case-strip__number {
  margin: 4px 3px 4px 8px;
  padding: 2px 8px;
  border: 2px solid rgb(141 52 47 / 0.75);
  background: rgb(141 52 47 / 0.06);
  color: #8d342f;
  letter-spacing: 0.1em;
  transform: rotate(-2deg);
}

.case-strip--file-tab .case-strip__title {
  padding: 4px 8px;
  color: var(--record-ink);
  font-family: var(--font-title);
  font-weight: 700;
  letter-spacing: 0.06em;
}

.case-strip__stage {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  min-width: 0;
  padding: 4px 12px 4px 10px;
  border-left: 1px dashed rgb(63 47 26 / 0.45);
  color: #4c4025;
  font-size: 0.84rem;
  font-weight: 800;
}

.case-strip__lamp {
  flex: none;
  width: 9px;
  height: 9px;
  border: 1.5px solid rgb(25 43 60 / 0.4);
  background: var(--muted-blue);
  transform: rotate(45deg);
}

.case-strip__stage[data-stage-tone="brief"] .case-strip__lamp { background: var(--muted-blue); }
.case-strip__stage[data-stage-tone="work"] .case-strip__lamp { background: var(--trace-teal); }
.case-strip__stage[data-stage-tone="press"] .case-strip__lamp { background: var(--question-coral); }
.case-strip__stage[data-stage-tone="gap"] .case-strip__lamp { background: var(--evidence-amber); }
.case-strip__stage[data-stage-tone="done"] .case-strip__lamp { background: var(--trace-teal-bright); }

.case-strip__stage-label {
  overflow: hidden;
  max-width: 30ch;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* --- 音效鈕實體撥動開關（保留 data-action / aria-pressed 語意） --- */

.audio-switch {
  gap: 9px;
}

.audio-switch__track {
  position: relative;
  display: inline-flex;
  flex: none;
  align-items: center;
  width: 50px;
  height: 24px;
  border: 2px solid var(--line-blue);
  background: var(--hearing-navy-deep);
  box-shadow: inset 0 2px 0 rgb(0 0 0 / 0.4);
}

.audio-switch__knob {
  position: absolute;
  top: 1px;
  left: 1px;
  display: grid;
  place-items: center;
  width: 21px;
  height: 18px;
  background: var(--muted-blue);
  box-shadow: 2px 2px 0 rgb(0 0 0 / 0.42);
  color: var(--hearing-navy-deep);
  font: 900 0.84rem/1 var(--font-data);
  transform: translateX(0);
  transition: transform 140ms ease;
}

.audio-switch[aria-pressed="true"] .audio-switch__knob {
  background: var(--evidence-amber);
  transform: translateX(23px);
}

/* --- 聽證爭點刻度條（僅外顯既有進度狀態） --- */

.hearing-issue-scale {
  display: flex;
  gap: 8px;
  padding: 5px 2px 2px;
}

.hearing-issue-scale i {
  width: 9px;
  height: 9px;
  border: 2px solid var(--line-blue);
  background: transparent;
  transform: rotate(45deg);
}

.hearing-issue-scale i[data-issue-state="current"] {
  border-color: var(--evidence-amber);
  background: rgb(241 180 60 / 0.4);
}

.hearing-issue-scale i[data-issue-state="solved"] {
  border-color: var(--trace-teal-bright);
  background: var(--trace-teal-bright);
}

/* --- 報告卷宗：紙質纖維＋紅欄線＋左緣線繩裝訂 --- */

.case-report {
  --dossier-red: #a63328;
  --dossier-spine: clamp(34px, 5vw, 58px);
  padding-left: calc(var(--dossier-spine) + clamp(18px, 3vw, 40px));
  background:
    linear-gradient(
      90deg,
      transparent 0 calc(var(--dossier-spine) + 8px),
      rgb(166 51 40 / 0.4) calc(var(--dossier-spine) + 8px) calc(var(--dossier-spine) + 10px),
      transparent calc(var(--dossier-spine) + 10px)
    ),
    repeating-linear-gradient(0deg, transparent 0 35px, rgb(30 155 145 / 0.08) 36px 37px),
    var(--paper-grain),
    var(--record-paper);
}

.case-report::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: var(--dossier-spine);
  border-right: 1px solid rgb(105 57 52 / 0.35);
  background:
    linear-gradient(0deg, transparent 0 24px, rgb(62 33 31 / 0.5) 24px 46px, transparent 46px) 50% 0 / 5px 76px repeat-y,
    radial-gradient(circle at 50% 35px, rgb(25 43 60 / 0.55) 0 3.5px, transparent 4.5px) 0 0 / 100% 76px repeat-y,
    linear-gradient(90deg, rgb(62 33 31 / 0.18), rgb(62 33 31 / 0.05) 58%, transparent);
  pointer-events: none;
}

/* --- 判定欄提前放大（.report-finding 為 .case-report 首元素） --- */

.report-finding {
  margin: 0 0 30px;
  border-top: 6px solid var(--evidence-amber);
  box-shadow: 7px 8px 0 rgb(8 24 39 / 0.2);
}

.report-finding > span {
  font: 900 0.92rem/1.3 var(--font-data);
  letter-spacing: 0.2em;
}

.report-finding h2 {
  font-size: clamp(2.2rem, 4.8vw, 4.2rem);
  line-height: 1.22;
}

/* --- 紅印泥章＋日期章 --- */

.report-stamp-set {
  display: grid;
  flex: none;
  gap: 10px;
  align-content: start;
  justify-items: center;
}

.report-stamp {
  position: relative;
  padding: 10px 18px;
  border: 3px solid rgb(166 51 40 / 0.85);
  box-shadow: inset 0 0 0 2px rgb(166 51 40 / 0.35);
  background:
    radial-gradient(circle at 24% 36%, rgb(166 51 40 / 0.16), transparent 58%),
    radial-gradient(circle at 76% 70%, rgb(166 51 40 / 0.12), transparent 52%);
  color: #a63328;
  font-weight: 900;
  letter-spacing: 0.14em;
  transform: rotate(-4deg);
}

.report-stamp::after {
  content: "";
  position: absolute;
  inset: -3px;
  background:
    radial-gradient(circle 6px at 12% 16%, var(--record-paper) 0 55%, transparent 75%),
    radial-gradient(circle 5px at 88% 80%, var(--record-paper) 0 50%, transparent 75%),
    radial-gradient(circle 4px at 62% 4%, var(--record-paper) 0 45%, transparent 75%),
    radial-gradient(circle 4px at 30% 96%, var(--record-paper) 0 45%, transparent 75%);
  opacity: 0.75;
  pointer-events: none;
}

.report-datestamp {
  padding: 4px 9px;
  border: 2px solid rgb(166 51 40 / 0.75);
  background: radial-gradient(circle at 68% 32%, rgb(166 51 40 / 0.12), transparent 62%);
  color: #a63328;
  font: 800 0.88rem/1.15 var(--font-data);
  letter-spacing: 0.14em;
  transform: rotate(-2deg);
}

/* --- 推理鏈：紙卡 chip＋青綠箭頭（保留 <ol> 語意與 #report-reasoning） --- */

.report-chain {
  margin: 30px 0;
  padding: 0;
  border: 0;
}

.report-chain > h2 {
  padding: 0 0 2px;
  margin: 0;
  font-size: 1.2rem;
}

.report-chain > ol {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px 30px;
  padding: 14px 2px 6px;
  margin: 0;
  list-style: none;
}

.report-chain li {
  position: relative;
  padding: 14px 16px 16px;
  border: 2px solid #b9ac8e;
  background: linear-gradient(175deg, #fbf7ec, #efe7d3);
  box-shadow: 5px 6px 0 rgb(25 43 60 / 0.16);
}

.report-chain li::after {
  content: "";
  position: absolute;
  top: -2px;
  right: -2px;
  border-style: solid;
  border-width: 0 16px 16px 0;
  border-color: transparent var(--record-paper) transparent transparent;
}

.report-chain li + li::before {
  content: "";
  position: absolute;
  top: 50%;
  left: -26px;
  width: 22px;
  height: 14px;
  background: var(--trace-teal);
  clip-path: polygon(0 32%, 55% 32%, 55% 0, 100% 50%, 55% 100%, 55% 68%, 0 68%);
  transform: translateY(-50%);
}

.report-chain li span {
  display: inline-block;
  padding: 3px 8px;
  margin-bottom: 9px;
  border: 2px solid rgb(141 52 47 / 0.75);
  background: rgb(141 52 47 / 0.06);
  color: #8d342f;
  font-family: var(--font-data);
  font-size: 0.84rem;
  font-weight: 900;
  letter-spacing: 0.1em;
  transform: rotate(-1.5deg);
}

.report-chain li strong {
  display: block;
  margin-top: 0;
  font-size: 1.02rem;
  line-height: 1.5;
}

/* --- 結案徽記（案件編號＋日期章＋「已歸檔」；aria-hidden 裝飾） --- */

.report-archive-seal {
  display: grid;
  grid-template-columns: auto auto;
  align-items: stretch;
  width: fit-content;
  max-width: 100%;
  margin: 34px 0 4px auto;
  border: 3px double rgb(166 51 40 / 0.85);
  background: radial-gradient(circle at 30% 42%, rgb(166 51 40 / 0.08), transparent 62%);
  color: #a63328;
  transform: rotate(-2.5deg);
}

.report-archive-seal__meta {
  display: grid;
  gap: 2px;
  align-content: center;
  padding: 8px 12px;
  border-right: 1px solid rgb(166 51 40 / 0.55);
  font: 800 0.84rem/1.3 var(--font-data);
  letter-spacing: 0.1em;
}

.report-archive-seal__word {
  display: grid;
  place-items: center;
  padding: 8px 14px;
  font-family: var(--font-title);
  font-size: 1.4rem;
  font-weight: 700;
  letter-spacing: 0.22em;
}

/* --- 響應式（重申既有斷點行為，避免被本區後位規則覆蓋） --- */

@media (max-width: 1000px) {
  .report-chain > ol {
    grid-template-columns: 1fr;
    gap: 26px;
  }

  .report-chain li + li::before {
    top: -21px;
    left: 26px;
    transform: rotate(90deg);
  }
}

@media (max-width: 720px) {
  /* 檔案籤行動版：燈保留、階段文字轉為僅供輔助技術（sr-only 模式），
     避免頂欄在 390px 擠出水平溢位；桌機仍顯示完整階段文字。 */
  .screen-header {
    gap: 8px;
    padding: 9px 10px;
  }

  .screen-header .header-back {
    padding: 6px 8px;
  }

  .screen-header .case-strip__stage {
    position: relative;
    padding: 4px 10px;
  }

  .screen-header .case-strip__stage-label {
    position: absolute;
    overflow: hidden;
    width: 1px;
    height: 1px;
    margin: -1px;
    white-space: nowrap;
    clip-path: inset(50%);
  }

  .screen-header .header-back,
  .case-strip--file-tab .case-strip__number {
    white-space: nowrap;
  }

  .case-strip--file-tab .case-strip__number {
    padding: 2px 6px;
    margin: 4px 2px 4px 4px;
  }

  .screen-header__utilities .audio-switch {
    padding: 8px 9px;
  }

  .hearing-topbar__actions .audio-switch > span:last-child {
    display: none;
  }

  .case-report {
    --dossier-spine: 22px;
    padding-left: 40px;
  }

  .report-finding {
    padding: 22px 17px;
  }

  .report-finding h2 {
    font-size: 2.1rem;
  }

  .report-stamp {
    padding: 6px 10px;
    font-size: 0.84rem;
  }

  .report-datestamp {
    font-size: 0.84rem;
  }

  .report-stamp-set {
    gap: 7px;
  }

  .report-archive-seal {
    margin-right: 4px;
  }
}

@media (max-width: 520px) {
  /* 窄幅（390／360）頂欄總寬收斂：QA 會驗 360px 無水平溢位。 */
  .screen-header__primary,
  .screen-header__utilities {
    gap: 5px;
  }

  .screen-header .header-back {
    padding: 6px 6px;
    font-size: 0.84rem;
  }

  .case-strip--file-tab .case-strip__number {
    padding: 2px 5px;
  }

  .case-strip__stage {
    padding: 4px 8px;
  }

  .screen-header__utilities .audio-switch {
    padding: 8px 7px;
  }

  .screen-header__utilities .audio-switch__track {
    width: 42px;
    height: 22px;
  }

  .screen-header__utilities .audio-switch__knob {
    width: 19px;
    height: 16px;
  }

  .screen-header__utilities .audio-switch[aria-pressed="true"] .audio-switch__knob {
    transform: translateX(17px);
  }
}

/* --- reduced-motion：本區唯一動態是音效開關旋鈕位移，顯式停用 --- */

@media (prefers-reduced-motion: reduce) {
  .audio-switch__knob {
    transition: none;
  }
}

/* --- forced-colors：新裝飾不退化——框線改系統色，狀態仍以形狀（實心／空心）與文字傳達 --- */

@media (forced-colors: active) {
  .case-strip--file-tab {
    border: 2px solid ButtonText;
    clip-path: none;
  }

  .case-strip--file-tab .case-strip__number,
  .case-strip__stage {
    border-color: ButtonText;
  }

  .case-strip__lamp {
    border: 1.5px solid ButtonText;
    background: ButtonText;
  }

  .audio-switch__track {
    border: 2px solid ButtonText;
  }

  .audio-switch__knob {
    border: 1px solid ButtonText;
    background: ButtonFace;
    color: ButtonText;
    box-shadow: none;
  }

  .hearing-issue-scale i {
    border-color: ButtonText;
    background: transparent;
  }

  .hearing-issue-scale i[data-issue-state="solved"] {
    background: ButtonText;
  }

  .hearing-issue-scale i[data-issue-state="current"] {
    background: Highlight;
    border-color: Highlight;
  }

  .case-report::before {
    display: none;
  }

  .report-finding {
    border: 2px solid CanvasText;
  }

  .report-stamp,
  .report-datestamp,
  .report-archive-seal {
    border-color: CanvasText;
    background: none;
    color: CanvasText;
  }

  .report-stamp::after {
    display: none;
  }

  .report-archive-seal__meta {
    border-right-color: CanvasText;
  }

  .report-chain li {
    border: 2px solid CanvasText;
    background: Canvas;
    box-shadow: none;
  }

  .report-chain li::after {
    display: none;
  }

  .report-chain li + li::before {
    background: CanvasText;
  }

  .report-chain li span {
    border-color: CanvasText;
    background: none;
    color: CanvasText;
  }
}

/* ============================================================
   P3.5 Case Ending Sequence（結案序列 overlay）
   六案破案後的一次性結尾演出：結尾劇情幕（letterbox 文字電影化）→
   標籤幕（黃筆記本純 CSS 紙面）→ 判決儀式（查核結果／報告完成）→ 卷宗落版。
   overlay 是「內容層」例外（可接收輸入），裝飾子層一律 aria-hidden；
   動畫全部由 GSAP 寫 transform／opacity，本區不含 CSS animation／transition。
   z-index 125：高於 present-slam(120)，低於 flash-veil(130)——判決白閃蓋得到 overlay。
   ============================================================ */

.case-ending {
  position: fixed;
  inset: 0;
  z-index: 125;
  display: grid;
  overflow: hidden;
  color: var(--record-paper);
}

/* [hidden] 必須壓過本區的 display 宣告（stage／scene 用 hidden attr 切幕）。 */
.case-ending [hidden] {
  display: none !important;
}

.case-ending__backdrop {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 50% 30%, rgb(24 59 89 / 0.55), transparent 62%),
    linear-gradient(180deg, #050f18, var(--hearing-navy-deep) 46%, #050f18);
}

.case-ending__letterbox {
  position: absolute;
  right: 0;
  left: 0;
  z-index: 1;
  height: clamp(26px, 6vh, 62px);
  background: #030a11;
}

.case-ending__letterbox--top { top: 0; border-bottom: 1px solid rgb(49 83 109 / 0.5); }
.case-ending__letterbox--bottom { bottom: 0; border-top: 1px solid rgb(49 83 109 / 0.5); }

.case-ending__frame {
  position: relative;
  z-index: 2;
  display: grid;
  align-content: center;
  justify-items: center;
  overflow-y: auto;
  padding: clamp(48px, 10vh, 96px) 16px clamp(84px, 14vh, 128px);
}

.case-ending__stage {
  display: grid;
  justify-items: center;
  width: min(100%, 720px);
  gap: clamp(12px, 2.4vh, 22px);
}

/* 逐拍元素初始不可見（GSAP autoAlpha 接手）；visibility 同時對 AT 隱藏未揭露拍。 */
.case-ending-beat-el {
  opacity: 0;
  visibility: hidden;
}

/* --- 結尾劇情幕（epilogue） --- */

.case-ending-scene {
  display: grid;
  justify-items: center;
  width: 100%;
  gap: clamp(12px, 2.2vh, 20px);
}

.case-ending-title {
  display: grid;
  justify-items: center;
  gap: 10px;
  text-align: center;
}

.case-ending-title__kicker {
  padding: 4px 14px;
  border: 2px solid var(--evidence-amber);
  color: var(--evidence-amber);
  font-family: var(--font-title);
  font-size: clamp(0.95rem, 2vw, 1.15rem);
  font-weight: 700;
  letter-spacing: 0.34em;
  text-indent: 0.34em;
}

.case-ending-title__word {
  color: var(--record-paper);
  font-family: var(--font-title);
  font-size: clamp(2.3rem, 7vw, 4.4rem);
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: 0.12em;
  text-shadow: 5px 6px 0 rgb(0 0 0 / 0.45);
}

.case-ending-beat {
  width: min(100%, 640px);
  margin: 0;
}

.case-ending-beat__copy {
  margin: 0;
  min-height: 1.65em;
}

.case-ending-beat--narration {
  position: relative;
  padding: 14px 20px 14px 26px;
  background: rgb(8 24 39 / 0.82);
  color: var(--muted-blue);
  font-size: clamp(1rem, 2vw, 1.15rem);
  line-height: 1.75;
}

/* 旁白拍的左緣量尺刻度（青綠＝已接回的資料軌跡），與名牌／聽證選句同一組刻度語彙。 */
.case-ending-beat--narration::before {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 6px;
  background: repeating-linear-gradient(180deg, rgb(30 155 145 / 0.9) 0 2px, transparent 2px 10px);
  content: "";
  pointer-events: none;
}

.case-ending-beat--line {
  display: grid;
  justify-items: start;
  gap: 0;
}

.case-ending-nameplate {
  position: relative;
  z-index: 1;
  padding: 3px 14px;
  border: 2px solid var(--evidence-amber);
  background: var(--hearing-navy);
  color: var(--evidence-amber-soft);
  font-size: 0.95rem;
  font-weight: 900;
  letter-spacing: 0.08em;
  transform: translateY(6px);
}

.case-ending-beat--line .case-ending-beat__copy {
  width: 100%;
  padding: 16px 20px 14px;
  border: 1px solid var(--line-blue);
  background: rgb(17 43 69 / 0.92);
  font-size: clamp(1.1rem, 2.4vw, 1.35rem);
  font-weight: 800;
  line-height: 1.7;
}

.case-ending-beat--written {
  padding: 20px 24px;
  border: 1px solid rgb(105 57 52 / 0.4);
  background:
    repeating-linear-gradient(0deg, transparent 0 32px, rgb(30 155 145 / 0.14) 32px 33px),
    var(--record-paper);
  color: var(--record-ink);
  box-shadow: 8px 9px 0 rgb(0 0 0 / 0.38);
  font-size: clamp(1.05rem, 2.2vw, 1.3rem);
  font-weight: 800;
  line-height: 1.8;
}

/* --- 標籤幕（tag）：黃筆記本純 CSS 紙面 --- */

.case-ending-tag__header span {
  display: inline-block;
  padding: 4px 16px;
  border: 2px solid var(--muted-blue);
  color: var(--muted-blue);
  font-family: var(--font-title);
  font-size: clamp(1rem, 2.2vw, 1.2rem);
  font-weight: 700;
  letter-spacing: 0.3em;
  text-indent: 0.3em;
}

.case-ending-tag__caption {
  width: min(100%, 620px);
  margin: 0;
  color: var(--muted-blue);
  font-size: clamp(1rem, 2vw, 1.12rem);
  line-height: 1.75;
  text-align: center;
}

.case-ending-notebook {
  position: relative;
  width: min(100%, 620px);
  padding: clamp(40px, 6vh, 52px) clamp(20px, 4vw, 40px) clamp(24px, 4vh, 36px) clamp(44px, 7vw, 62px);
  background:
    var(--paper-grain),
    linear-gradient(180deg, #f5dc66 0 22px, #fff29b 23px, #fff4a8 72%, #f8e783);
  color: #33291a;
  border: 1px solid #ddc365;
  border-bottom-color: #c7ad50;
  box-shadow: inset 0 1px 0 #fff8c8, 3px 10px 16px rgb(0 0 0 / 0.3);
}

.case-ending-notebook__binding {
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  height: 22px;
  border-bottom: 1px solid rgb(162 123 30 / 0.18);
  background: linear-gradient(180deg, rgb(186 143 30 / 0.14), transparent);
}

.case-ending-notebook__label {
  position: absolute;
  top: 30px;
  right: 14px;
  color: #6a5125;
  font-family: var(--font-title);
  font-size: 0.92rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  transform: rotate(-1.4deg);
}

.case-ending-notebook__lines {
  display: grid;
  gap: 14px;
  padding: 0;
  margin: 0;
  list-style: none;
}

.case-ending-note {
  position: relative;
}

.case-ending-note .case-ending-beat__copy {
  font-size: clamp(1.02rem, 2.1vw, 1.22rem);
  font-weight: 800;
  line-height: 1.7;
}

.case-ending-note--rule .case-ending-beat__copy {
  color: #3d331f;
}

.case-ending-note__strike {
  position: absolute;
  top: 52%;
  right: -4px;
  left: -4px;
  display: block;
  height: 3px;
  background: #8d342f;
  transform: scaleX(0);
}

.case-ending-note--fix .case-ending-beat__copy {
  color: #8d342f;
}

.case-ending-note--note .case-ending-beat__copy {
  position: relative;
  padding-left: 18px;
  color: #4c4025;
}

/* 註記行的紅筆邊註：手寫壓痕（兩端收筆、微歪），不是 UI 色條。 */
.case-ending-note--note .case-ending-beat__copy::before {
  position: absolute;
  top: 0.3em;
  bottom: 0.3em;
  left: 4px;
  width: 3px;
  background: linear-gradient(180deg, rgb(141 52 47 / 0) 0, rgb(141 52 47 / 0.72) 16%, rgb(141 52 47 / 0.78) 84%, rgb(141 52 47 / 0) 100%);
  content: "";
  transform: rotate(0.9deg);
  pointer-events: none;
}

/* --- 判決儀式（verdict）：查核結果大字卡＋報告完成印章＋卷宗落版 --- */

.case-ending__stage--verdict {
  justify-items: center;
  gap: clamp(18px, 3.4vh, 30px);
  text-align: center;
}

/* 莊重變體：teal／深藍 plate（不用紅）；字面改朝華標題字體——「查核結果」在 title
   詞彙表已覆蓋，不走 Reggae One（缺「查」），禁止單詞混字形。 */
.burst-card--verdict .burst-card__plate {
  background: linear-gradient(140deg, #0f5f58, #113b55);
  transform: skewX(-4deg) rotate(-0.8deg);
}

.burst-card--verdict .burst-card__word {
  font-family: var(--font-title);
  font-size: clamp(2.5rem, 8vw, 4.6rem);
  font-weight: 700;
  letter-spacing: 0.16em;
  text-indent: 0.16em;
  transform: none;
  -webkit-text-stroke: 2px var(--hearing-navy-deep);
}

.case-ending-stamp {
  position: relative;
  display: grid;
  place-items: center;
  padding: 12px 30px;
  border: 4px solid #c03a30;
  box-shadow: inset 0 0 0 3px rgb(244 241 232 / 0.9), inset 0 0 0 6px rgb(192 58 48 / 0.75);
  background: rgb(192 58 48 / 0.08);
}

.case-ending-stamp__word {
  color: #e6524b;
  font: 900 clamp(2rem, 6vw, 3.3rem)/1.05 var(--font-burst);
  letter-spacing: 0.06em;
  -webkit-text-stroke: 1.5px rgb(62 33 31 / 0.6);
  paint-order: stroke fill;
  white-space: nowrap;
}

.case-ending-stamp__ink {
  position: absolute;
  inset: -22%;
  display: block;
  background: radial-gradient(circle, rgb(192 58 48 / 0.42) 0 42%, transparent 72%);
  opacity: 0;
  pointer-events: none;
}

.case-ending-dossier {
  position: relative;
  display: grid;
  justify-items: center;
  gap: 8px;
  min-width: min(78vw, 340px);
  padding: 26px 30px 20px;
  border: 2px solid rgb(105 57 52 / 0.55);
  background:
    linear-gradient(90deg, transparent 0 18px, rgb(166 51 40 / 0.4) 18px 20px, transparent 20px),
    var(--paper-grain),
    var(--record-paper);
  color: var(--record-ink);
  box-shadow: 10px 12px 0 rgb(0 0 0 / 0.42);
}

.case-ending-dossier__tab {
  position: absolute;
  top: -13px;
  left: 22px;
  display: block;
  width: 96px;
  height: 14px;
  border: 2px solid rgb(105 57 52 / 0.55);
  border-bottom: 0;
  background: #e7ddc4;
}

.case-ending-dossier__seal {
  padding: 3px 12px;
  border: 3px double #b3352c;
  color: #b3352c;
  font-family: var(--font-title);
  font-size: 1.05rem;
  font-weight: 700;
  letter-spacing: 0.24em;
  text-indent: 0.24em;
  transform: rotate(-3deg);
}

.case-ending-dossier__title {
  font-family: var(--font-title);
  font-size: clamp(1.3rem, 3vw, 1.7rem);
  font-weight: 700;
  letter-spacing: 0.1em;
}

/* --- 推進／跳過控制（鍵盤可及、focus 沿用全域 outline、觸控 ≥44px） --- */

.case-ending__controls {
  position: absolute;
  right: clamp(14px, 4vw, 44px);
  bottom: clamp(14px, 4vh, 40px);
  left: clamp(14px, 4vw, 44px);
  z-index: 3;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

.case-ending__advance {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-height: 52px;
  padding: 12px 22px;
  border: 2px solid var(--evidence-amber-soft);
  background: var(--hearing-navy);
  color: var(--record-paper);
  font-weight: 900;
  box-shadow: 5px 6px 0 rgb(0 0 0 / 0.4);
}

.case-ending__advance-glyph {
  color: var(--evidence-amber-soft);
}

.case-ending__skip {
  min-height: 44px;
  padding: 8px 14px;
  border: 1px dashed rgb(169 192 206 / 0.6);
  background: transparent;
  color: var(--muted-blue);
  font-size: 0.95rem;
  font-weight: 800;
}

@media (max-width: 680px) {
  .case-ending__frame {
    align-content: start;
    padding-top: clamp(40px, 9vh, 72px);
  }

  /* 判決儀式只有大字卡＋印章＋卷宗三件短內容，維持垂直置中；start 對齊只為
     epilogue／tag 的長文可從頂端捲動而設。 */
  .case-ending[data-ending-stage="verdict"] .case-ending__frame {
    align-content: center;
    padding-top: clamp(48px, 10vh, 96px);
  }

  .case-ending-beat--line .case-ending-beat__copy {
    padding: 12px 14px;
  }

  .case-ending-beat--narration {
    padding: 12px 14px 12px 20px;
  }

  .case-ending-notebook {
    padding-left: clamp(34px, 9vw, 48px);
  }

  .case-ending__controls {
    right: 12px;
    bottom: 10px;
    left: 12px;
  }

  .case-ending__advance {
    min-height: 48px;
    padding: 10px 16px;
  }
}

/* reduced-motion：本區沒有 CSS animation／transition；定格逐幕由 GSAP 端把 tween 歸零、
   打字機直接整段顯示，拍序與內容不變（契約 D3）。 */

@media (forced-colors: active) {
  .case-ending__backdrop {
    background: Canvas;
  }

  .case-ending__letterbox {
    background: Canvas;
    border-color: CanvasText;
  }

  .case-ending-beat--narration,
  .case-ending-beat--line .case-ending-beat__copy,
  .case-ending-beat--written,
  .case-ending-notebook,
  .case-ending-stamp,
  .case-ending-dossier,
  .case-ending-title__kicker,
  .case-ending-nameplate,
  .case-ending__advance,
  .case-ending__skip {
    border: 2px solid CanvasText;
    background: Canvas;
    color: CanvasText;
    box-shadow: none;
  }

  .case-ending-note__strike {
    background: CanvasText;
  }

  /* 旁白左緣刻度純裝飾（外框已改系統色，區隔零損失）；紅筆邊註是「這行是註記」的
     唯一視覺線索，故改系統色保留，不隨自訂色被略過。 */
  .case-ending-beat--narration::before {
    display: none;
  }

  .case-ending-note--note .case-ending-beat__copy::before {
    background: CanvasText;
  }

  .case-ending-stamp__ink {
    display: none;
  }
}

/* 歸檔演出保留獨立空間，手機長證物名稱不與說明重疊。 */
.impact-copy .impact-forge-transfer {
  position: relative;
  top: auto;
  left: auto;
  width: min(100%, 760px);
  height: 180px;
  margin: 0 auto 20px;
  transform: none;
}
.impact-copy .impact-forge-transfer__card {
  opacity: 1;
  transform: none;
  animation: none;
}
.impact-copy .impact-forge-transfer__stamp {
  left: auto;
  right: 3%;
  top: 80px;
}
.impact-forge-transfer__book::before {
  content: '';
  position: absolute;
  top: -14px;
  left: -3px;
  width: 48%;
  height: 14px;
  border: 3px solid var(--evidence-amber-soft);
  border-bottom: 0;
  background: var(--hearing-navy);
}
.impact-copy > .impact-archive-status {
  display: block;
  margin-top: 16px;
  color: var(--evidence-amber-soft);
  font-size: 1rem;
}
.impact-continue[aria-disabled="true"] { opacity: 0.5; cursor: wait; }
@media (max-width: 680px) {
  .impact-overlay[data-impact-grade="forge"] .impact-copy h2 { font-size: 1.8rem; }
  .impact-copy .impact-forge-transfer { height: 166px; margin-bottom: 12px; }
  .impact-copy .impact-forge-transfer__card { width: 52%; }
}

.impact-overlay[data-impact-grade="forge"] { overflow-y: auto; }
.impact-overlay[data-impact-grade="forge"] .impact-continue {
  position: relative;
  inset: auto;
  display: inline-flex;
  margin-top: 20px;
}

.impact-forge-transfer__glyph.evidence-visual {
  width: 48px;
  height: 48px;
  margin: 0 auto;
}

/* All hearings share one square sprite size and baseline, including sleep.
   Legacy portrait heights must not stretch sprites via aspect-ratio. */
.hearing-screen > .hearing-stage .case-character-stage[data-animation-surface="hearing"] .character-actor {
  width: auto;
  height: min(100%, 34vw, 30rem);
  right: clamp(2rem, 8vw, 10rem);
  bottom: 0;
}

@media (max-width: 820px) {
  .hearing-screen > .hearing-stage .case-character-stage[data-animation-surface="hearing"] .character-actor {
    right: 0;
    height: min(calc(100% - 56px), 72vw, 29rem);
  }
}

.case-character-stage[data-animation-surface="investigation"] .character-actor,
.case-character-stage[data-animation-surface="narrative"] .character-actor,
.case1-character-stage--narrative .character-actor {
  width: var(--actor-dialogue-size);
  height: auto;
  bottom: var(--actor-dialogue-bottom);
}

/* Case 04: one aligned classification sheet, with sources kept beside each choice. */
.workbench-screen.case4-sorter-screen { display: block; background: var(--hearing-navy-deep); }
.case4-sorter-screen::before { content: none; }
.case4-sorter { width: min(1240px, calc(100% - 64px)); margin: 0 auto; padding: 32px 0 40px; }
.case4-sorter-heading { display: flex; align-items: center; justify-content: space-between; gap: 32px; margin-bottom: 28px; }
.case4-sorter-heading h1 { margin: 8px 0 12px; font-size: clamp(1.6rem, 2.6vw, 2.4rem); line-height: 1.4; text-wrap: balance; }
.case4-sorter-heading p { margin: 0; color: var(--muted-blue); }
.case4-sorter-heading .case4-sorter-kicker { color: var(--evidence-amber); font-family: var(--font-title); font-size: 0.95rem; }
.case4-sorter-heading .case4-sorter-progress { display: flex; align-items: baseline; flex-wrap: wrap; justify-content: end; gap: 6px 10px; min-width: 150px; color: var(--record-paper); }
.case4-sorter-progress strong { font-size: 2rem; line-height: 1.2; color: var(--trace-teal-bright); font-variant-numeric: tabular-nums; }
.case4-sorter-progress small { font-size: 1rem; color: var(--muted-blue); }
.case4-sorter-progress > span { font-size: 0.85rem; }
.case4-sorter-table { border: 1px solid var(--line-blue); }
.case4-sorter-columns, .case4-sorter-screen .case4-sentence-card { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px 28px; padding: 20px 24px; }
.case4-sorter-columns { background: var(--hearing-navy); color: var(--record-paper); align-items: center; border-top: 3px solid var(--evidence-amber); }
.case4-sorter-caption { display: grid; gap: 5px; }
.case4-sorter-caption > span { color: var(--muted-blue); font-size: 0.82rem; }
.case4-sorter-layers, .case4-sorter-choices { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.case4-sorter-layers > div { display: grid; gap: 5px; text-align: center; }
.case4-sorter-layers strong { color: var(--evidence-amber-soft); font-size: 1rem; }
.case4-sorter-layers span { color: var(--muted-blue); font-size: 0.73rem; }
.case4-sorter-screen .case4-sentence-card { margin: 0; min-width: 0; align-items: center; border: 0; border-bottom: 1px solid #cbd1ce; background: var(--record-paper); color: var(--record-ink); box-shadow: none; }
.case4-sorter-screen .case4-sentence-card:last-child { border-bottom: 0; }
.case4-sorter-screen .case4-sentence-card:nth-child(even) { background: #e9eeec; }
.case4-sorter-copy { display: flex; align-items: start; gap: 16px; min-width: 0; }
.case4-sorter-index { padding-top: 22px; color: #5a6d74; font-size: 0.8rem; font-variant-numeric: tabular-nums; }
.case4-sorter-copy p { margin: 0; }
.case4-sorter-copy .case4-sorter-source { margin-bottom: 5px; color: #486269; font-size: 0.76rem; line-height: 1.5; }
.case4-sorter-sentence { font-size: 1rem; line-height: 1.65; font-weight: 700; overflow-wrap: anywhere; }
.case4-sorter-choices button { display: flex; align-items: center; justify-content: center; gap: 6px; min-width: 0; min-height: 48px; padding: 8px 4px; border: 1px solid #899da5; border-radius: 4px; background: transparent; color: var(--record-ink); font-size: 0.86rem; font-weight: 700; cursor: pointer; }
.case4-sorter-check { display: inline-grid; place-items: center; flex: 0 0 14px; width: 14px; height: 14px; border: 1px solid #708891; border-radius: 50%; font-size: 12px; line-height: 1; }
.case4-sorter-choices button:hover { background: #d9e6e2; border-color: #276f69; }
.case4-sorter-choices button.is-selected { background: #145951; color: #fff; border-color: #145951; }
.case4-sorter-choices button.is-selected .case4-sorter-check { border-color: transparent; }
.case4-sorter-choices button:focus-visible { outline: 3px solid #b86712; outline-offset: 3px; }
.case4-sorter-screen .case4-sentence-card.has-error { background: #fff1e8; box-shadow: inset 0 0 0 2px var(--question-coral-deep); }
.case4-sorter-screen .row-error { grid-column: 1 / -1; margin: 0 0 0 32px; color: #922d29; font-size: 0.9rem; }
.case4-sorter-footer { display: flex; justify-content: space-between; align-items: center; gap: 24px; padding: 24px 0 0; }
.case4-sorter-footer .page-feedback { margin: 0; max-width: 65ch; color: var(--muted-blue); font-size: 0.95rem; }
.case4-sorter-footer .action-button { flex-shrink: 0; }
@media (max-width: 900px) {
  .case4-sorter { width: calc(100% - 32px); padding-top: 24px; }
  .case4-sorter-heading { align-items: start; gap: 18px; }
  .case4-sorter-columns, .case4-sorter-screen .case4-sentence-card { grid-template-columns: minmax(0, 1fr); padding: 20px; }
  .case4-sorter-caption { display: none; }
  .case4-sorter-choices { margin-left: 32px; }
  .case4-sorter-layers span { font-size: 0.78rem; }
}
@media (max-width: 540px) {
  .case4-sorter { width: calc(100% - 24px); }
  .case4-sorter-heading { display: block; margin-bottom: 20px; }
  .case4-sorter-heading h1 { font-size: 1.65rem; }
  .case4-sorter-heading .case4-sorter-progress { justify-content: start; margin-top: 18px; }
  .case4-sorter-progress strong { font-size: 1.5rem; }
  .case4-sorter-columns, .case4-sorter-screen .case4-sentence-card { padding: 18px 16px; }
  .case4-sorter-layers, .case4-sorter-choices { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .case4-sorter-layers > div { text-align: left; }
  .case4-sorter-copy { gap: 10px; }
  .case4-sorter-source { font-size: 0.8rem; }
  .case4-sorter-index { flex: 0 0 20px; }
  .case4-sorter-choices { margin-left: 30px; }
  .case4-sorter-choices button { font-size: 0.95rem; }
  .case4-sorter-footer { flex-direction: column; align-items: stretch; gap: 16px; }
  .case4-sorter-footer .action-button { width: 100%; }
}
@media (forced-colors: active) {
  .case4-sorter-choices button.is-selected { outline: 2px solid Highlight; }
}


/* Keep both sides of a hearing exchange on stage. */
.hearing-screen > .hearing-stage .case-character-stage[data-press-witness]:not([data-press-witness=""]) .character-actor[data-slot="stage-left"] {
  left: clamp(2rem, 8vw, 10rem);
  right: auto;
  transform: none;
}
.hearing-screen > .hearing-stage .case-character-stage[data-press-witness]:not([data-press-witness=""]) .character-actor[data-slot="stage-right"] {
  left: auto;
  transform: none;
}
@media (max-width: 820px) {
  .hearing-screen > .hearing-stage .case-character-stage[data-press-witness]:not([data-press-witness=""]) .character-actor {
    height: min(calc(100% - 56px), 50vw, 29rem);
  }
  .hearing-screen > .hearing-stage .case-character-stage[data-press-witness]:not([data-press-witness=""]) .character-actor[data-slot="stage-left"] {
    left: 0;
  }
}


.counter-panel__character-stage .character-actor[data-slot="stage-left"] {
  left: clamp(-3rem, -1vw, 0rem);
  right: auto;
  transform: none;
}
.counter-panel__character-stage .character-actor[data-slot="stage-right"] {
  left: auto;
  transform: none;
}
@media (max-width: 820px) {
  .counter-panel__character-stage .character-actor[data-slot="stage-left"] {
    left: -14%;
  }
}


/* Successful rebuttal keeps the investigator and the reacting witness visible. */
body .impact-overlay .impact-witness[data-press-witness]:not([data-press-witness=""]) {
  inset: 0;
  width: 100%;
  height: 100%;
}
body .impact-overlay .impact-witness[data-press-witness]:not([data-press-witness=""]) .character-actor {
  width: min(40vw, 560px);
  bottom: -5%;
  transform: none;
}
body .impact-overlay .impact-witness .character-actor[data-slot="stage-left"] {
  left: -2%;
  right: auto;
}
body .impact-overlay .impact-witness .character-actor[data-slot="stage-right"] {
  left: auto;
  right: -2%;
}
@media (max-width: 680px) {
  body .impact-overlay .impact-witness[data-press-witness]:not([data-press-witness=""]) .character-actor {
    width: 55vw;
    bottom: -3%;
  }
}
