/* Small visual actions belong to the evidence; the stage controls stay shared. */

/* London: one scene, with the current speaker's answer beside their position. */
.archive-case .archive-plan.has-dialogue{
 display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);
 grid-template-rows:auto auto auto auto auto auto;column-gap:38px;row-gap:18px;
 align-items:center;min-height:535px;padding:26px;
 background:linear-gradient(90deg,#29363858,#2936388f 48%,#293638c9),url('assets/street.webp') 24% center/cover;
}
.archive-plan.has-dialogue>.archive-plan-top{grid-column:1/-1;grid-row:1;width:auto;margin:0;background:none;padding:0 0 8px;border-bottom:1px solid #b99e684d}
.archive-plan.has-dialogue>.archive-floor{grid-column:1;grid-row:2;justify-self:center;min-width:65%;margin:0}
.archive-plan.has-dialogue>.archive-stairs{grid-column:1;grid-row:3;justify-self:center}
.archive-plan.has-dialogue>.archive-door{grid-column:1;grid-row:4;justify-self:center}
.archive-plan.has-dialogue>.archive-street{grid-column:1;grid-row:5;gap:14px;align-items:start}
.archive-plan.has-dialogue>.archive-street .archive-station{min-width:0;flex:1}
.archive-plan.has-dialogue>.archive-ground{grid-column:1;grid-row:6;min-width:0;margin:0}
.archive-plan.has-dialogue>.archive-route-line{display:none}
.archive-case .has-dialogue .archive-station[aria-pressed=true]{background:#64513e;border-color:#c4a47b;box-shadow:0 0 0 3px #bfa07422,0 5px 20px #141c2455}
.archive-case .archive-dialogue{
 grid-column:2;grid-row:2/7;align-self:center;margin:0;padding:24px 26px;
 background:linear-gradient(125deg,#414a48f7,#333f42fa);border:1px solid #9f927773;
 box-shadow:0 15px 34px #101a2255;min-width:0;position:relative;animation:case-dialogue-arrive .22s ease-out;
}
.archive-dialogue::before{content:'';position:absolute;left:-8px;top:45%;width:14px;height:14px;background:#404947;border-left:1px solid #9f927773;border-bottom:1px solid #9f927773;transform:rotate(45deg)}
.archive-case .archive-dialogue .archive-testimony-inner{margin:0}
.archive-case .archive-dialogue .archive-testimony-inner>small{display:block;font-size:.9375rem;padding-bottom:11px;border-bottom:1px solid #a18d6555;color:#d4c1a1}
.archive-case .archive-dialogue blockquote{font-size:clamp(1.125rem,2.15vw,1.375rem);line-height:1.95;font-weight:500;margin:18px 0 22px;color:#dfd5c4}
.archive-case .archive-dialogue .archive-assignment{font-size:.9375rem;color:#b7bcb4}
.archive-case .witness-3 .archive-dialogue{align-self:start;margin-top:38px}
.archive-case :is(.witness-1,.witness-2) .archive-dialogue{align-self:end;margin-bottom:12px}
.archive-witness-controls{display:flex;justify-content:flex-end}
.archive-case .archive-letter-desk{background:linear-gradient(125deg,#253237,#303a37);padding:30px;border-color:#92806566}
.archive-case .archive-letter-timeline{gap:28px;align-items:start}
.archive-case .archive-letter-timeline article{
 padding:27px 25px 32px;background:linear-gradient(100deg,#39443f,#424b43 47%,#303c38 48%,#3b463f 49%,#39433e);
 border:1px solid #96857066;border-top-color:#b4a08199;box-shadow:3px 6px 0 #1d2b2c,0 15px 24px #0c191c55;
}
.archive-case .archive-letter-timeline article+article{margin-top:16px;background:linear-gradient(177deg,#414940,#374139 53%,#303a34 54%,#3a443b 55%)}
.archive-letter-timeline article::after{content:'';position:absolute;right:0;bottom:0;width:17px;height:17px;background:linear-gradient(135deg,#b49e7150 49%,#253336 51%);pointer-events:none}
.archive-case .archive-letter-timeline p{font-family:var(--archive-serif);color:#d9d0bc;line-height:2}
.archive-returned-person{display:block;width:48px;height:83px;margin:0 auto 8px;flex-shrink:0;color:#d0b58b}
.archive-case .archive-passage.person-visible{background:#344045;color:#ddcdb1;border-color:#b89a68;animation:case-person-return .28s ease-out}

/* Dartmoor: light follows the selected evidence; objects open like short notes. */
.moor-inspection-light{position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(ellipse 29% 43% at var(--lamp-x) var(--lamp-y),#d6bb824f 0,#b89a6929 44%,transparent 80%);animation:case-lamp-settle .22s ease-out}
.moor-scene .moor-point[aria-pressed=true]{box-shadow:0 0 0 3px #bea16d24,0 5px 22px #111e2080}
.moor-findings{background:linear-gradient(112deg,#394339,#2f3b35);border-bottom:2px solid #7f735a80}
.moor-findings-index{font-family:var(--moor-serif);font-style:italic}
.moor-findings-body{min-width:0;animation:case-note-open .2s ease-out}
.moor-object-study{position:relative;isolation:isolate;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;max-width:720px;--item-focus:16.66%}
.moor-object-study[data-object=candle]{--item-focus:50%}
.moor-object-study[data-object=match]{--item-focus:83.33%}
.moor-object-study::before{content:'';position:absolute;inset:0 0 auto;height:165px;z-index:-1;pointer-events:none;background:radial-gradient(ellipse 25% 80% at var(--item-focus) 30%,#d4b27530,transparent 85%);transition:background .2s}
.moor-object-button{grid-row:1;position:relative;min-width:0;min-height:135px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:16px 8px 22px;list-style:none;cursor:pointer;border:1px solid #8c80624d;border-bottom-color:#a78f687a;background:#21312a40;color:#c9c8b7;text-align:center;touch-action:manipulation}
.moor-object-button[data-value=knife]{grid-column:1}
.moor-object-button[data-value=candle]{grid-column:2}
.moor-object-button[data-value=match]{grid-column:3}
.moor-object-button>span:first-of-type{font-size:.9375rem;line-height:1.7}
.moor-object-button .moor-mark{width:70px;height:70px;color:#c6c4b2;filter:drop-shadow(0 6px 5px #14231e)}
.moor-object-button[aria-pressed=true]{border-color:#b59b6a;background:#a38a4921;color:#ddcda9}
.moor-object-button[aria-pressed=true] .moor-mark{color:#e0cca0}
.moor-object-button:focus-visible{outline:2px solid #c9b287;outline-offset:3px}
.moor-findings-body .moor-object-annotation{grid-row:2;grid-column:1/-1;margin:0;padding:15px 18px;border-left:2px solid #bba375;background:#46504377;max-width:none;animation:case-note-open .2s ease-out;font-size:1rem;line-height:1.9}
.moor-returned-evidence{position:absolute;bottom:18px;left:20px;z-index:1;display:flex;gap:8px;padding:8px 12px;background:#26352be8;border:1px solid #b79d6c77;border-radius:2px;pointer-events:none}
.moor-returned-evidence .moor-mark{width:35px;height:40px;color:#d6c196}

/* Pacific: the two messages use the same paper language, then meet in the reveal. */
.signal-exchange{position:relative;padding:18px 14px 22px;border-block:1px solid #a6a99336;background:linear-gradient(115deg,#1b2b304f,#43545422);gap:24px}
.signal-dispatch{
 position:relative;overflow:hidden;padding:28px 28px 24px 35px;
 background:linear-gradient(100deg,#3b4b4b,#475750 45%,#38494a);color:#ded6bf;border:1px solid #a2a08877;
 box-shadow:2px 5px 0 #24373ae6,0 14px 25px #14252866;transform-origin:50% 0;
}
.signal-dispatch::before{content:'';position:absolute;top:10px;bottom:10px;left:8px;width:5px;background:radial-gradient(circle at center,#202f33 2px,transparent 2.5px) center top/5px 18px repeat-y;pointer-events:none}
.signal-dispatch::after{content:'';position:absolute;left:20px;right:0;bottom:7px;border-top:1px dashed #a7a18655;pointer-events:none}
.signal-dispatch header{color:#d0cdb9;border-bottom-color:#a2a58d66;line-height:1.75;font-size:.9375rem}
.signal-dispatch header small{color:#b9c3b6;font-size:.8125rem}
.signal-dispatch header b{font-weight:500}
.signal-paper-message{position:relative;border-bottom:1px solid #a2a58d4d}
.signal-dispatch .signal-paper-message p{color:#e0d7be;font-family:var(--signal-serif);font-size:clamp(1.45rem,3vw,1.9rem);font-weight:500;line-height:1.85;margin:27px 0;min-height:105px;letter-spacing:.06em}
.signal-dispatch .signal-paper-message strong{font:500 2.65rem/1.4 'Courier New',monospace;letter-spacing:.11em;color:#daca9f}
.signal-dispatch mark{background:#b69c6030;color:#dfc792;padding:0 3px}
.signal-dispatch footer{color:#b6c1b7;padding-top:16px;font-size:.875rem;border:0;background:none;margin:0;min-height:0;line-height:1.7}
.signal-exchange:not(.is-received) .signal-out{animation:case-paper-out .3s ease-out}
.signal-exchange.is-received .signal-out{transform:rotate(-.7deg)}
.signal-exchange.is-received .signal-in{transform:rotate(.7deg);animation:case-paper-in .32s ease-out}
.signal-exchange.is-received .signal-place{color:#e0c18a;box-shadow:0 2px 0 #c4a16b90}
.signal-exchange.is-received .signal-echo{color:#c5b184}

@keyframes case-dialogue-arrive{from{transform:translateX(-5px)}to{transform:translateX(0)}}
@keyframes case-person-return{from{opacity:.45}to{opacity:1}}
@keyframes case-lamp-settle{from{opacity:.3}to{opacity:1}}
@keyframes case-note-open{from{transform:translateY(4px)}to{transform:translateY(0)}}
@keyframes case-paper-out{from{transform:translateY(-9px) rotate(-.5deg)}to{transform:translateY(0) rotate(0)}}
@keyframes case-paper-in{from{transform:translateY(14px) rotate(1.3deg)}to{transform:translateY(0) rotate(.7deg)}}

@media(max-width:760px){
 .archive-case .archive-plan.has-dialogue{grid-template-columns:minmax(0,1fr);grid-template-rows:repeat(7,auto);min-height:0;padding:18px 16px;gap:16px;background-position:28% center}
 .archive-plan.has-dialogue>.archive-plan-top{grid-column:1}
 .archive-plan.has-dialogue>.archive-street{gap:12px}
 .archive-plan.has-dialogue>.archive-ground{grid-row:7}
 .archive-case .archive-plan.has-dialogue>.archive-dialogue{grid-column:1;grid-row:6;margin:0;align-self:auto;padding:19px 20px}
 .archive-case .archive-plan.witness-0>.archive-dialogue{grid-row:5}
 .archive-case .archive-plan.witness-0>.archive-street{grid-row:6}
 .archive-case .archive-plan.witness-3>.archive-dialogue{grid-row:4}
 .archive-case .archive-plan.witness-3>.archive-door{grid-row:5}
 .archive-case .archive-plan.witness-3>.archive-street{grid-row:6}
 .archive-dialogue::before{left:calc(50% - 7px);top:-8px;transform:rotate(135deg)}
 .witness-1 .archive-dialogue::before{left:76%}
 .witness-2 .archive-dialogue::before{left:22%}
 .archive-case .archive-dialogue blockquote{font-size:1.1875rem;line-height:1.9;margin:14px 0 17px}
 .archive-case .archive-dialogue .archive-assignment{font-size:.9375rem;line-height:1.85}
 .archive-case .archive-dialogue .quiet{min-height:44px;padding:8px 13px}
 .archive-case .archive-letter-desk{padding:20px 15px 23px}
 .archive-case .archive-letter-timeline{grid-template-columns:minmax(0,1fr);gap:23px}
 .archive-case .archive-letter-timeline article+article{margin-top:0}
 .archive-case .archive-letter-timeline article{padding:23px 21px 27px}
 .moor-scene-0:has(.moor-point-0[aria-pressed=true]){--lamp-x:24%!important;--lamp-y:81%!important}
 .moor-scene-0:has(.moor-point-1[aria-pressed=true]){--lamp-x:45%!important;--lamp-y:57%!important}
 .moor-scene-0:has(.moor-point-2[aria-pressed=true]){--lamp-x:76%!important;--lamp-y:72%!important}
 .moor-object-study{gap:8px}
 .moor-object-button{min-height:125px;padding:12px 4px 23px}
 .moor-object-button .moor-mark{width:55px;height:61px}
 .moor-object-button>span:first-of-type{font-size:.875rem}
 .moor-findings-body .moor-object-annotation{padding:13px 15px;font-size:1rem}
 .moor-returned-evidence{bottom:12px;left:12px;gap:6px;padding:6px 9px}
 .moor-returned-evidence .moor-mark{width:29px;height:34px}
 .signal-exchange,.signal-exchange.is-received{padding:14px 7px 18px;gap:16px}
 .signal-dispatch{padding:22px 21px 21px 28px}
 .signal-dispatch .signal-paper-message p{font-size:1.4375rem;line-height:1.9;min-height:0;margin:23px 0;letter-spacing:.03em}
 .signal-exchange.is-received .signal-out,.signal-exchange.is-received .signal-in{transform:none}
 .signal-exchange.is-received .signal-in{animation:case-note-open .25s ease-out}
 .signal-exchange.is-received .signal-echo{line-height:1;margin:0}
}
@media(prefers-reduced-motion:reduce){
 .archive-dialogue,.archive-case .archive-passage.person-visible,.moor-inspection-light,.moor-findings-body,.moor-object-annotation,.signal-exchange .signal-out,.signal-exchange.is-received .signal-in{animation:none;transition:none}
}
body[data-motion=reduce] :is(.archive-dialogue,.archive-passage.person-visible,.moor-inspection-light,.moor-findings-body,.moor-object-annotation,.signal-exchange .signal-out,.signal-exchange.is-received .signal-in){animation:none;transition:none}
