:root{--ink:#302b27;--paper:#e9dfc8;--wood:#76563d;--accent:#b77843;--night:#202a39;--line:#8b8173}
*{box-sizing:border-box}body{margin:0;background:#171717;color:var(--ink);font-family:Georgia,"Noto Serif SC",serif;overflow:hidden}button{font:inherit;color:inherit}
#game{height:100dvh;max-width:1100px;margin:auto;background:#c9b99e;display:grid;grid-template-rows:44px 1fr 92px;box-shadow:0 0 80px #000}
header,footer{display:flex;align-items:center;padding:8px 14px;background:#25211e;color:#eee;gap:12px}header span{flex:1;letter-spacing:2px}header button,#hintBtn{background:#4b4037;border:1px solid #75685c;color:#eee;border-radius:4px;padding:6px 12px}
#saveState{opacity:0;color:#d7c59d;transition:.2s;white-space:nowrap}#saveState.visible{opacity:1}.setting-row{display:flex;justify-content:space-between;align-items:center;gap:28px;margin:18px 0}.music-setting-control{display:flex;align-items:center;gap:10px}.music-setting-control input{width:160px}.music-setting-control output{min-width:3.4em;text-align:right;font-variant-numeric:tabular-nums}.skip{position:absolute;right:12px;top:8px;z-index:5}
#scene{position:relative;overflow:hidden;transition:.5s;background:#211c18;container-type:size}.night{filter:brightness(.72) saturate(.86)}#wall{position:absolute;left:50%;top:50%;width:min(100cqw,calc(100cqh * 1.776833));height:min(100cqh,calc(100cqw / 1.776833));transform:translate(-50%,-50%);background-position:center;background-size:100% 100%;background-repeat:no-repeat}.wall-a #wall{background-image:url('assets/scenes/wall-a-v1.png')}.wall-a.manual-is-held #wall{background-image:url('assets/scenes/wall-a-manual-held-v1.png')}.wall-b #wall{background-image:url('assets/scenes/wall-b-open-clock-clean-v2.png')}.wall-b.curtain-is-closed #wall{background-image:url('assets/scenes/wall-b-closed-clock-clean-v2.png')}.wall-c #wall{background-image:url('assets/scenes/wall-c-v1.png')}
.wall-art-canvas{position:absolute;inset:0;z-index:0;display:block;width:100%;height:100%;pointer-events:none}
.nav{position:absolute;z-index:8;top:50%;width:48px;height:80px;border:0;background:#241f1b99;color:white;font-size:42px;transform:translateY(-50%)}.left{left:max(0px,calc((100cqw - 100cqh * 1.776833)/2))}.right{right:max(0px,calc((100cqw - 100cqh * 1.776833)/2))}
.hot{position:absolute;border:2px solid transparent;background:transparent;cursor:pointer;border-radius:8px}.hot:hover,.hot:focus-visible{border-color:#f0d59b88;background:#fff1}.label{position:absolute;background:#251f1acc;color:#fff;padding:5px 9px;border-radius:4px;font-size:13px;pointer-events:none}.hot>.label{opacity:0;transition:opacity .16s}.hot:hover>.label,.hot:focus-visible>.label{opacity:1}.object-hot{border:0;border-radius:0}.object-hot:hover,.object-hot:focus-visible{border:0;background:#f6d99824;box-shadow:inset 0 0 0 2px #f0d59b99}.object-hot>.label{display:none}
.difference-hot{z-index:4;border:0;background:transparent;overflow:visible}.difference-hot:hover,.difference-hot:focus-visible{border:0;background:#f4d79418;box-shadow:0 0 0 2px #e9ce8a44}.difference-hot:after{content:var(--badge-glyph);position:absolute;right:2px;bottom:2px;display:grid;place-items:center;width:23px;height:23px;border:1px solid #5b432e;border-radius:50%;background:radial-gradient(circle at 35% 28%,#e4c883,#a67a42 70%,#60452d);box-shadow:0 2px 4px #1f140d88,inset 0 0 0 2px #d9b97166;color:#3b2b20;font:700 15px/1 Georgia,serif;opacity:.5;transform:rotate(-7deg);transition:.18s}.difference-hot:hover:after,.difference-hot:focus-visible:after{opacity:1;transform:rotate(0) scale(1.08)}.difference-hot .label{white-space:nowrap}.difference-coaster{left:68.1%;top:49.7%;width:7.4%;height:5.1%;border-radius:50%}.difference-poster{left:71.5%;top:40.3%;width:5.5%;height:8%}.difference-vine{left:18.2%;top:7.2%;width:8%;height:22%}.difference-pot{left:81.6%;top:69.5%;width:10.5%;height:18%;border-radius:45% 45% 34% 34%}
.desk{position:absolute;left:22.7%;top:46.7%;width:61%;height:44.8%;background:transparent;border:0;pointer-events:none}.radio{left:54.65%;top:37.9%;width:12.65%;height:12.75%;clip-path:polygon(5% 3%,88% 3%,98% 12%,100% 88%,94% 98%,7% 98%,0 90%,0 13%)}.manual-hot{left:42.05%;top:46.85%;width:13%;height:8.35%;clip-path:polygon(0 14%,41% 0,50% 9%,61% 2%,100% 13%,98% 88%,60% 83%,51% 100%,43% 86%,2% 91%)}.lamp-hot{left:31.2%;top:24%;width:9.7%;height:26.2%;clip-path:none}.lamp-hot:hover,.lamp-hot:focus-visible{background:transparent;box-shadow:none}.cardboard{position:absolute;left:50.8%;top:74.7%;width:13.7%;height:12.3%;background:transparent}
.window,.curtain,.sofa{position:absolute;background:transparent;border:0;pointer-events:none}.window{left:3.4%;top:1.4%;width:38.4%;height:56.8%}.curtain-left{left:2.65%;top:.9%;width:7.45%;height:59.2%;clip-path:polygon(9% 0,100% 0,100% 94%,84% 100%,8% 99%,0 94%,0 4%)}.curtain-right{left:34.75%;top:.9%;width:7.25%;height:56.8%;clip-path:polygon(0 0,91% 0,100% 4%,100% 97%,89% 100%,0 100%)}.curtain-full{left:2.7%;top:.9%;width:38.55%;height:59.2%;clip-path:polygon(2% 0,98% 0,100% 4%,100% 98%,96% 100%,3% 100%,0 97%,0 3%)}.clock{left:78.95%;top:17.25%;width:10.85%;height:19.25%;border-radius:50%;clip-path:ellipse(50% 50% at 50% 50%)}.clock-face{display:none}
.shelf-hotspots{position:absolute;inset:0;pointer-events:none}.book-spine{position:absolute;border:0;background:transparent;color:transparent;padding:0;cursor:pointer;pointer-events:auto;clip-path:polygon(8% 0,92% 0,100% 4%,100% 98%,92% 100%,7% 100%,0 97%,0 3%)}.book-spine span{display:none}.book-spine:hover,.book-spine:focus-visible{background:#f0d59b30;box-shadow:inset 0 0 0 2px #f0d59baa;outline:0}.poster-mark{position:absolute;left:60.6%;top:11.4%;width:15.5%;height:38%;border:0}.plant{position:absolute;right:8.2%;bottom:12%;width:12.5%;height:51%;pointer-events:none}
.debug-hotspots .object-hot,.debug-hotspots .book-spine{background:#42d8ff35!important;box-shadow:inset 0 0 0 3px #00c8ff!important}.debug-hotspots .difference-hot{background:#ff4f6a50!important;box-shadow:inset 0 0 0 3px #ff3154!important}
/* Mouse discovery should come from the illustration itself, without exposing
   the invisible hit areas. Keyboard focus remains visible for accessibility. */
#wall .hot:hover,
#wall .book-spine:hover,
#wall .bookcase-puzzle-hot:hover{
  border-color:transparent!important;
  outline:0!important;
  background:transparent!important;
  box-shadow:none!important;
  filter:none!important;
}
#toast{position:absolute;left:50%;bottom:20px;transform:translateX(-50%);background:#211d1acc;color:#fff;padding:9px 16px;border-radius:5px;opacity:0;transition:.25s;z-index:12}.show{opacity:1!important}
#inventory{display:flex;gap:8px;flex:1;overflow:auto}.item{min-width:76px;height:66px;border:1px solid #796b5d;background:#e5d4b8;border-radius:5px;padding:5px;font-size:12px}.item.selected{outline:3px solid #d89f55}
dialog{border:0;border-radius:8px;background:#d6c7ab;color:var(--ink);max-width:min(760px,94vw);max-height:88vh;overflow:auto;box-shadow:0 16px 80px #000a}dialog::backdrop{background:#0009}dialog>button{position:absolute;right:9px;top:7px;border:0;background:transparent;font-size:28px;z-index:2}#modalBody{min-width:min(620px,84vw);padding:28px;min-height:300px}
#manual{width:min(1000px,96vw);height:min(650px,88vh);overflow:hidden;background:#43382e url('assets/closeups/manual-blank-spread-v1.png') center/contain no-repeat;padding:24px}.book{height:100%;position:relative}.book>button{position:absolute;top:44%;z-index:3;border:0;background:#302820bb;color:#eee;font-size:35px;width:40px;height:70px}.book>#prevPage{left:-18px}.book>#nextPage{right:-18px}.book article{position:absolute;top:7%;bottom:7%;width:40%;overflow:auto;background:transparent;padding:24px 26px;box-shadow:none}.book article.left-page{left:7%}.book article.right-page{right:7%}.book article h2{font-size:clamp(18px,2.2vw,27px);margin:10px 0}.book article p{line-height:1.65}.scribble{font-family:"Comic Sans MS",cursive;color:#765235;transform:rotate(-1deg);margin:12px}.manual-action{padding:9px 14px;background:#fff7;border:1px solid #8a795e;border-radius:4px}.diagram{white-space:pre;font-family:monospace;background:#fff5;padding:14px;overflow:auto}
.radio-ui{text-align:center}.radio-console{position:relative;width:min(100%,760px);aspect-ratio:1680/941;margin:0 auto;border:5px solid #4d392b;overflow:hidden;background:#c99455}.radio-art{display:block;width:100%;height:100%;object-fit:cover}.radio-control{position:absolute;border:0;background:transparent;padding:0;cursor:pointer}.radio-control:focus-visible{outline:3px solid #f2d58b;outline-offset:2px}.radio-control span{position:absolute;left:50%;top:calc(100% + 5px);transform:translateX(-50%);padding:3px 7px;border-radius:3px;background:#241b16d9;color:#f5e8cc;font-size:12px;white-space:nowrap;opacity:0;transition:.15s}.radio-control:hover span,.radio-control:focus-visible span{opacity:1}.power-control{left:59.3%;top:36.2%;width:4.2%;height:8%;border-radius:50%}.power-control.active,.power-control:hover,.power-control:active{box-shadow:none;filter:none}.band-control{left:69.2%;top:35.2%;width:7%;height:7%}.band-control i{position:absolute;left:40%;top:20%;width:22%;height:60%;border-radius:2px;background:#d9b77c99;transition:.16s}.tuning-control{left:57.2%;top:63.2%;width:9%;height:20%;border-radius:50%}.volume-control{left:66.1%;top:68%;width:6.8%;height:15%;border-radius:50%}.tuning-control i,.volume-control i{position:absolute;inset:8%;border-radius:50%;transition:.08s}.tuning-control i:after,.volume-control i:after{content:"";position:absolute;left:48%;top:2%;width:4%;height:27%;background:#eed39d;border-radius:3px;box-shadow:0 1px 2px #000}.radio-control input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:.001;cursor:ew-resize}.radio-readout{position:absolute;left:57.8%;top:49.5%;width:20%;padding:3px;background:#1e1915d9;color:#f0d39a;font:700 clamp(10px,1.7vw,17px)/1.1 monospace;letter-spacing:.03em}.restore-meter{position:absolute;left:73.6%;top:62.7%;width:4.4%;height:7.8%;overflow:hidden}.restore-meter span{display:block;height:100%;background:#bf5d3b99;transition:.25s}.side-control{right:0;top:34%;width:5.5%;height:45%}.side-control span{left:auto;right:2px;top:45%;transform:none}.radio-help{margin:10px 0 0;color:#5c493a;font-size:14px}.radio-hint{margin:5px 0 0;color:#765235}.markers{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.marker{height:80px;background:#b6a387;border:1px dashed #615546}.marker.found{background:#7b9a78;color:white}.reset-view{text-align:center}.reset-art{max-width:620px;margin:8px auto;overflow:hidden;border:5px solid #4d392b}.reset-art img{display:block;width:100%;height:auto}
.books-art{position:relative;margin:12px auto;max-width:620px;overflow:hidden;border:5px solid #4d392b;background:#261b14}.books-art img{display:block;width:100%;height:auto}.books-art i{position:absolute;top:9%;bottom:10%;left:calc(5% + var(--book) * 18.7%);width:17%;border:3px solid #efd79b;box-shadow:0 0 0 999px #1d15109c;pointer-events:none}.books-view{text-align:center}.books-view button{padding:10px 18px;background:#8c5e3f;color:#fff4df;border:1px solid #4b3426;border-radius:4px}
.photo-view{text-align:center}.photo-view img{display:block;width:min(100%,680px);max-height:58vh;object-fit:contain;margin:10px auto;border:5px solid #eee0bd;box-shadow:0 7px 22px #24180f66}.difference-progress{display:inline-block;margin-top:4px;padding:5px 12px;border:1px solid #8a7153;background:#ead8b5;color:#59422f;border-radius:999px}
.clock-view{text-align:center}.clock-art{position:relative;width:min(100%,680px);aspect-ratio:1672/941;margin:8px auto;overflow:hidden;border:5px solid #4d392b;background:#c99455}.clock-art canvas{display:block;width:100%;height:100%;cursor:grab;touch-action:none}.clock-art canvas.dragging{cursor:grabbing}.photo-back-art{position:relative;max-width:680px;margin:10px auto}.photo-back-art img{width:100%;margin:0}.photo-note{position:absolute;inset:20% 18%;display:flex;align-items:center;justify-content:center;font-family:"Comic Sans MS","Noto Serif SC",cursive;font-size:clamp(17px,2.5vw,28px);line-height:1.8;color:#72543c;transform:rotate(-2deg)}
.ticket-view{text-align:center}.ticket-art{position:relative;max-width:680px;margin:8px auto;border:5px solid #4d392b;overflow:hidden}.ticket-art img{display:block;width:100%;max-height:43vh;object-fit:cover}.ticket-art span{position:absolute;left:50%;bottom:8px;transform:translateX(-50%);padding:5px 12px;background:#2d211bd9;color:#fff1d5;white-space:nowrap;font-size:13px}.ticket-view button{margin:5px;padding:9px 14px}.ticket-view button:disabled{opacity:.55}
.calibration-view{text-align:center}.calibration-view img{display:block;width:min(100%,680px);max-height:53vh;object-fit:contain;margin:8px auto;border:5px solid #4d392b}
.frequency-controls{display:flex;align-items:center;gap:5px;flex-wrap:wrap;justify-content:center}.frequency-controls button{min-width:44px}#hold{position:relative;overflow:hidden;min-width:220px;padding:13px 18px}#hold span{position:relative;z-index:2}#hold i{position:absolute;inset:0 auto 0 0;width:0;background:#b7784388;z-index:1}#hold.holding{transform:translateY(1px);box-shadow:inset 0 2px 5px #0005}#hold.holding i{animation:hold-progress 1.5s linear forwards}@keyframes hold-progress{to{width:100%}}
.recording{position:fixed;inset:0;z-index:30;display:none;align-items:center;justify-content:center;flex-direction:column;background:#151515dd;color:#f0e6d2;font-size:clamp(18px,3vw,30px);padding:30px;text-align:center}.recording.active{display:flex}.line-a{align-self:45%;font-family:Georgia}.line-b{font-family:"Comic Sans MS",cursive;transform:rotate(-1deg)}
.ending{font-size:20px;line-height:1.8;text-align:center}.service{border-collapse:collapse;margin:20px auto}.service td,.service th{border:1px solid #777;padding:8px 16px}
.packing{position:relative;min-height:360px;overflow:hidden}.packing-radio{width:180px;margin:45px auto 0;padding:28px 15px;background:#66513e;border:7px solid #4d392b;color:#eee;transition:.7s}.packing-cloth{position:absolute;left:50%;top:55px;width:210px;height:110px;transform:translateX(-50%) scaleY(0);transform-origin:bottom;background:#aa9275;border-radius:45% 45% 12px 12px;opacity:.9;transition:.7s}.packing-box{width:250px;height:135px;margin:-10px auto 15px;padding-top:80px;background:#9b744b;color:#4b3422;transform:translateY(150px);transition:.8s}.packing.wrapped .packing-cloth{transform:translateX(-50%) scaleY(1)}.packing.boxed .packing-radio,.packing.boxed .packing-cloth{opacity:0;transform:translateY(80px) scale(.7)}.packing.boxed .packing-box{transform:translateY(-95px)}.repair-card{margin:18px auto;max-width:520px;padding:22px;background:#eee2c8;box-shadow:0 8px 22px #0005;opacity:0;transform:translateY(-90px) rotate(-2deg);transition:.8s cubic-bezier(.2,.8,.3,1.2)}.repair-card.drop{opacity:1;transform:translateY(0) rotate(-1deg)}
@media(max-width:650px){#game{grid-template-rows:48px 1fr 82px}header{gap:5px;padding:6px}header span{font-size:12px;letter-spacing:0}header button{font-size:11px;padding:5px}#saveState{display:none}#modalBody{min-width:82vw;padding:22px}.book article{top:9%;bottom:9%;width:42%;padding:14px 12px;font-size:12px}.book article.left-page{left:5%}.book article.right-page{right:5%}}
.rotary{cursor:grab;touch-action:none}.rotary:active{cursor:grabbing}.frequency-needle{position:absolute;top:46.1%;width:2px;height:12.2%;background:#b3482e;box-shadow:0 0 2px #2b1710;pointer-events:none;transform:translateX(-50%)}.volume-indicator{position:absolute;left:69.38%;top:69.4%;width:2px;height:6.5%;background:#ead3a0;box-shadow:0 1px 2px #241810;transform-origin:50% 50%;pointer-events:none}.restore-readout{position:absolute;left:58.3%;top:49.7%;width:19%;padding:3px;background:#211a15dd;color:#e6c582;font:700 clamp(10px,1.5vw,15px)/1 monospace;letter-spacing:.08em}.visually-hidden{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}
.volume-indicator{left:66.1%;top:68%;width:6.8%;height:15%;background:transparent;box-shadow:none;border-radius:50%;transform-origin:50% 50%}.volume-indicator:after{content:"";position:absolute;left:48%;top:5%;width:4%;height:28%;background:#ead3a0;box-shadow:0 1px 2px #241810;border-radius:2px}
.tuning-control{left:56.7%;top:59%;width:9%;height:20%}.volume-control,.volume-indicator{left:65.05%;top:64.1%;width:6.8%;height:15%}
.power-control{left:58.8%;top:38.2%;width:3.2%;height:6.2%}.band-control{left:69.8%;top:39.3%;width:4.2%;height:5.7%}.tuning-control{left:57%;top:60.5%;width:8.2%;height:15%}.volume-control{left:66.2%;top:67.2%;width:4.8%;height:9%}.radio-control:hover,.radio-control:active{box-shadow:none;filter:none}
.rotary:focus-visible{outline:none}
.tuning-control{left:56.8%;top:61.5%;width:8.2%;height:15%}.volume-control{left:66.2%;top:68.2%;width:4.8%;height:9%}
.power-control span,.band-control span{display:none}

/* P5: the four collected corner marks are placed back into a physical-looking
   circuit diagram. Finding the marks is the main challenge; placement remains
   tactile, deterministic, and touch-friendly. */
.marker-puzzle{text-align:center;max-width:620px;margin:auto}.marker-puzzle>p{margin:8px auto 14px;color:#5f4938}.marker-circuit{position:relative;width:min(440px,78vw);height:min(245px,43vw);min-height:190px;margin:14px auto 18px;border:4px double #6f543d;border-radius:20px;background:#ead8af66;box-shadow:inset 0 0 24px #7c573329}.marker-circuit:before,.marker-circuit:after{content:"";position:absolute;pointer-events:none}.marker-circuit:before{left:17%;right:17%;top:50%;border-top:3px solid #654a35;box-shadow:0 -82px 0 #654a35,0 82px 0 #654a35}.marker-circuit:after{top:17%;bottom:17%;left:50%;border-left:3px solid #654a35;box-shadow:-154px 0 0 #654a35,154px 0 0 #654a35}.marker-slot{position:absolute;z-index:1;width:64px;height:64px;border:2px dashed #735842;background:#e7d1a6;color:#8b7059;font:700 42px/1 Georgia,serif;border-radius:9px;box-shadow:0 3px 7px #3e281d33}.marker-slot.filled{border-style:solid;background:#d6bd8e;color:#4a3427}.slot-0{left:7%;top:6%}.slot-1{right:7%;top:6%}.slot-2{right:7%;bottom:6%}.slot-3{left:7%;bottom:6%}.marker-tray{display:flex;justify-content:center;gap:14px;min-height:66px}.marker-piece{width:58px;height:58px;border:1px solid #5d4331;background:#b99a6c;color:#38271e;font:700 39px/1 Georgia,serif;border-radius:50%;box-shadow:0 4px 0 #72543d,0 7px 12px #28190f44;cursor:pointer}.marker-piece.selected{transform:translateY(-4px);background:#e0c68f;outline:3px solid #7f5a37}.marker-slot.wrong{animation:marker-wrong .26s ease}.marker-status{min-height:24px;font-size:14px}.completed-circuit{position:relative;width:min(420px,76vw);height:180px;margin:16px auto;border:4px double #614630;border-radius:13px;background:#e6d0a6;box-shadow:inset 0 0 24px #6e4b2b28}.completed-circuit span{position:absolute;left:23%;top:28%;width:54%;height:44%;display:grid;place-items:center;border:3px solid #58402e;background:#f0dbb0;font-weight:700}.completed-circuit i{position:absolute;right:11%;top:49%;width:12%;border-top:4px solid #58402e}.completed-circuit i:after{content:"";position:absolute;right:-2px;top:-9px;border-left:14px solid #58402e;border-top:7px solid transparent;border-bottom:7px solid transparent}@keyframes marker-wrong{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}

/* Manual close-up: match the 1672×941 artwork so the paper never letterboxes. */
#manual{
  width:min(1000px,96vw,calc(88vh * 1.776833));
  height:auto;
  aspect-ratio:1672/941;
  max-width:none;
  max-height:none;
  padding:0;
  overflow:hidden;
  border-radius:0;
  background-color:transparent;
  background-image:url('assets/closeups/manual-blank-spread-v1.png');
  background-position:center;
  background-size:100% 100%;
  background-repeat:no-repeat;
  box-shadow:0 18px 70px #0009;
}
#manual>button{
  top:2.3%;
  right:2.3%;
  width:36px;
  height:36px;
  padding:0;
  border-radius:50%;
  color:#3c2b20;
  background:#ead7ad66;
  font:400 25px/34px Georgia,serif;
}
#manual .book{position:absolute;inset:0;width:100%;height:100%}
#manual .book>button{
  top:45%;
  width:38px;
  height:64px;
  border:1px solid #3b291b80;
  border-radius:3px;
  background:#33251bb3;
  color:#f1dfb9;
  font:400 32px/1 Georgia,serif;
  box-shadow:0 2px 7px #0004;
}
#manual .book>#prevPage{left:1.2%}
#manual .book>#nextPage{right:1.2%}
#manual button:focus-visible{outline:2px solid #c99758;outline-offset:1px}
#manual .book article{
  top:7.2%;
  bottom:8.2%;
  width:37.2%;
  padding:15px 22px;
  overflow:hidden;
  color:#3e2d21;
  background:transparent;
  font-family:"Songti SC","STSong","Noto Serif SC",serif;
  font-size:clamp(13px,1.55vw,17px);
  line-height:1.55;
  letter-spacing:.018em;
  text-shadow:0 .3px 0 #8d664522;
}
#manual .book article.left-page{left:10.7%}
#manual .book article.right-page{right:10.2%}
#manual .book article>small{
  display:block;
  margin:0 0 4px;
  color:#604a37;
  font-size:.68em;
  letter-spacing:.08em;
  opacity:.62;
}
#manual .book article h2{
  margin:4px 0 12px;
  color:#38271d;
  font-family:"Songti SC","STSong","Noto Serif SC",serif;
  font-size:clamp(17px,2vw,24px);
  font-weight:700;
  line-height:1.25;
  letter-spacing:.04em;
}
#manual .book article p{margin:0;line-height:1.62}
#manual .scribble{
  margin:12px 8px 0;
  color:#765238;
  font-family:"Kaiti SC","STKaiti","KaiTi",cursive;
  font-size:.92em;
  line-height:1.48;
  letter-spacing:.035em;
  transform:rotate(-.6deg);
}
#manual .diagram{
  max-width:100%;
  margin:12px 0 0;
  padding:10px 12px;
  overflow:hidden;
  border:1px solid #876b4845;
  background:#f3dfae38;
  color:#483426;
  font:500 .82em/1.45 "Songti SC","STSong",serif;
  white-space:pre-wrap;
}
#manual .manual-action{
  margin-top:12px;
  padding:7px 11px;
  border:1px solid #6e5037aa;
  background:#ead19a66;
  color:#493322;
  font-size:.82em;
}
.weak-signal-visual{display:block;width:100%;height:auto;max-height:250px;margin:5px auto 0;overflow:visible}
.weak-signal-visual .manual-ink{fill:none;stroke:#57402e;stroke-width:4.3;stroke-linecap:round;stroke-linejoin:round;opacity:.92}
.weak-signal-visual .moon-line{stroke-width:3.8}
.weak-signal-visual .glow-rays{stroke-width:3.4}
.weak-signal-visual .arrow-line{stroke-width:3.2}
@media(max-width:650px){
  #manual .book article{top:6.8%;bottom:7.7%;width:38%;padding:8px 10px;font-size:clamp(8px,2.15vw,12px);line-height:1.42}
  #manual .book article.left-page{left:10.1%}
  #manual .book article.right-page{right:9.8%}
  #manual .book article h2{margin:2px 0 6px;font-size:clamp(10px,3vw,16px)}
  #manual .scribble{margin:6px 3px 0;line-height:1.32}
  #manual .book>button{width:28px;height:48px;font-size:25px}
  #manual>button{width:28px;height:28px;font-size:20px;line-height:26px}
  .weak-signal-visual{max-height:145px;margin-top:1px}
}

/* P3-P5 interaction pass: physical ticket, in-page calibration, matching books. */
.side-control{left:72.7%!important;right:auto!important;top:58.4%!important;width:6.7%!important;height:23.5%!important;border-radius:5px!important;z-index:12!important;pointer-events:auto!important}
.side-control span{left:50%!important;right:auto!important;top:101%!important;transform:translateX(-50%)!important}
.bookcase-puzzle-hot{position:absolute;left:26.6%;top:22.5%;width:27.5%;height:19%;border:0;background:transparent;pointer-events:auto;cursor:pointer}
.bookcase-puzzle-hot span{display:none}.bookcase-puzzle-hot:hover,.bookcase-puzzle-hot:focus-visible{box-shadow:inset 0 0 0 2px #efd79b66;background:#efd79b12;outline:0}
.book-sort-stage{position:relative;width:min(700px,82vw);height:min(365px,48vw);min-height:270px;margin:8px auto 12px;overflow:hidden;border:9px solid #5a3219;border-top-width:15px;border-bottom-width:23px;background:radial-gradient(ellipse at 50% 75%,#392316 0,#25170f 68%,#190f0a 100%);box-shadow:inset 0 0 0 2px #24140c,inset 0 14px 22px #100a0788,0 7px 14px #2a180d55}.book-sort-stage:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#170d0866 0,transparent 8%,transparent 92%,#170d0866),repeating-linear-gradient(0deg,#ffffff06 0 1px,transparent 1px 4px);mix-blend-mode:soft-light;pointer-events:none;z-index:1}.book-sort-stage:after{content:"";position:absolute;left:0;right:0;bottom:0;height:16px;background:linear-gradient(#82481f,#5d3116 52%,#38200f);border-top:2px solid #9b5a2e;z-index:5;pointer-events:none}.sort-books-row{position:absolute;left:10%;right:10%;top:7%;bottom:4%;display:flex;align-items:flex-end;justify-content:center;gap:0;z-index:2}.sort-books-row:before,.sort-books-row:after{content:"";position:absolute;height:0;border-top:2px solid #8f6a3c;filter:blur(.25px);z-index:4;pointer-events:none;opacity:.65}.sort-books-row:before{left:-3.2%;top:68%;width:3.5%;transform:rotate(-2deg);transform-origin:right center}.sort-books-row:after{right:-3.2%;top:43%;width:3.5%;transform:rotate(3deg);transform-origin:left center}.books-view .sort-book{position:relative;flex:0 0 var(--book-width);height:100%;margin:0 -1px 0 0;padding:0;border:0;border-radius:0;background:transparent;color:inherit;cursor:grab;touch-action:none;transition:filter .14s,transform .14s;z-index:2;appearance:none;-webkit-appearance:none}.sort-book img{position:absolute;left:0;bottom:0;width:100%;height:auto;max-height:100%;object-fit:contain;object-position:center bottom;pointer-events:none;filter:sepia(.12) saturate(.78) brightness(.8) contrast(.96) drop-shadow(1px 3px 2px #0d080688)}.sort-book .book-vine{position:absolute;inset:0;width:100%;height:100%;overflow:visible;z-index:3;pointer-events:none}.sort-book .book-vine path{fill:none;stroke:#8f6a3c;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:blur(.2px) drop-shadow(0 .6px 0 #382619);opacity:.62}.sort-book:hover:not(:disabled),.sort-book:focus-visible:not(:disabled){filter:brightness(1.08);outline:0}.sort-book.selected{filter:brightness(1.12) drop-shadow(0 0 4px #c7a76988)}.sort-book.dragging{cursor:grabbing;z-index:8;transition:none;filter:brightness(1.1) drop-shadow(0 9px 5px #10090677)}.sort-book:disabled{cursor:default}.book-sort-stage.solved .sort-book{cursor:default}.sorted-photo{position:absolute;right:-3.5%;top:26%;width:22%;height:42%;padding:5px;border:0;background:#e9d8b5;box-shadow:2px 5px 8px #0e0906aa;transform:rotate(7deg);cursor:pointer;z-index:1;animation:photo-slip .6s ease-out both}.sorted-photo img{display:block;width:100%;height:100%;object-fit:cover;filter:sepia(.35) saturate(.7)}.sorted-photo:hover,.sorted-photo:focus-visible{transform:rotate(5deg) translateX(3px);outline:2px solid #dfc887}.photo-return-slot{position:absolute;right:-2%;top:30%;width:17%;height:34%;z-index:5;border:1px dashed #ddc98a88;background:#e8d29a18;color:#e7d7a9;cursor:pointer;transform:rotate(5deg)}.photo-return-slot span{font:600 13px/1.3 "Kaiti SC","STKaiti",serif}.books-view>p{min-height:1.5em}@keyframes photo-slip{from{transform:rotate(3deg) translateX(-55%);opacity:0}to{transform:rotate(7deg) translateX(0);opacity:1}}
@media(max-width:650px){.book-sort-stage{width:min(700px,88vw);height:min(365px,60vw);min-height:245px;border-width:7px;border-top-width:11px;border-bottom-width:17px}.sort-books-row{left:7%;right:7%}.sort-book .book-vine path{stroke-width:1.4}.sorted-photo{right:-2%;width:24%}}

/* Books are direct-manipulation objects: suppress text/image selection while
   the pointer is captured so the spine follows mouse and touch continuously. */
.books-view .sort-book{user-select:none;-webkit-user-select:none}
.books-view .sort-book img{user-select:none;-webkit-user-drag:none}
.books-view .sort-book.dragging{will-change:transform}
.book-drag-proxy{position:absolute!important;z-index:12!important;flex:none!important;margin:0!important;pointer-events:none!important;visibility:visible!important;transition:none!important;cursor:grabbing!important;will-change:left,transform}

/* Each clue is painted on its own spine.  Nothing bridges into the shelf or
   a neighbouring book until the player has placed the books side by side. */
.sort-books-row:before,.sort-books-row:after{display:none}
.sort-book .book-vine{inset:0;overflow:hidden;filter:sepia(.12) saturate(.86);opacity:.92}
.sort-book .book-vine .vine-main,.sort-book .book-vine .vine-branch{fill:none;stroke:#b58c4c;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 .7px .25px #392515aa);opacity:.9}
.sort-book .book-vine .vine-main{stroke-width:2.05}
.sort-book .book-vine .vine-branch{stroke-width:1.35}
.sort-book .book-vine .vine-leaf{fill:#bd9454;fill-opacity:.92;stroke:#74522e;stroke-width:.55;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 .5px .25px #39251599);opacity:.94}

/* Refined spine ornament: a restrained, printed-gold vine rather than a
   freehand line laid across the whole shelf. */
.sort-books-row::before,.sort-books-row::after{content:none!important;display:none!important}
.sort-book .book-vine{clip-path:inset(0 8% 0 8% round 10px);overflow:hidden!important;shape-rendering:geometricPrecision;filter:none;opacity:.82}
.sort-book .book-vine .vine-main,.sort-book .book-vine .vine-branch{stroke:#b79256;filter:none;opacity:.9}
.sort-book .book-vine .vine-main{stroke-width:1.5}
.sort-book .book-vine .vine-branch{stroke-width:1.05}
.sort-book .book-vine .vine-leaf{fill:#b79256;fill-opacity:.88;stroke:#765631;stroke-width:.35;filter:none;opacity:.9}

/* Final vine treatment: proportions match a tall spine, with a restrained
   debossed edge, smooth gilt face and consistently shaped leaves. */
.sort-book .book-vine{opacity:.9}
.sort-book .book-vine .vine-shadow,.sort-book .book-vine .vine-branch-shadow{fill:none;stroke:#49301d;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:none;opacity:.5}
.sort-book .book-vine .vine-shadow{stroke-width:2.6}
.sort-book .book-vine .vine-branch-shadow{stroke-width:1.85}
.sort-book .book-vine .vine-main,.sort-book .book-vine .vine-branch{stroke:#c29a5b;filter:none;opacity:.96}
.sort-book .book-vine .vine-main{stroke-width:1.55}
.sort-book .book-vine .vine-branch{stroke-width:1.15}
.sort-book .book-vine .vine-leaf{fill:#c29a5b;fill-opacity:.98;stroke:#654426;stroke-width:.5;filter:none;opacity:.98}
.sort-book .book-vine .vine-leaf-vein{fill:none;stroke:#73502d;stroke-width:.45;stroke-linecap:round;vector-effect:non-scaling-stroke;filter:none;opacity:.72}
.sort-book[data-sort-book="bud"] .book-vine .vine-shadow,.sort-book[data-sort-book="bud"] .book-vine .vine-branch-shadow{stroke:#33281e;opacity:.42}
.sort-book[data-sort-book="bud"] .book-vine .vine-main,.sort-book[data-sort-book="bud"] .book-vine .vine-branch{stroke:#705535}
.sort-book[data-sort-book="bud"] .book-vine .vine-leaf{fill:#705535;stroke:#3c2e20}
.sort-book[data-sort-book="bud"] .book-vine .vine-leaf-vein{stroke:#3f3022}

/* The four room differences are invisible hit areas.  The photograph is the
   clue; the scene must not reveal either the badge or its clickable outline. */
.difference-hot,
.difference-hot:hover,
.difference-hot:focus-visible{
  border:0!important;
  outline:0!important;
  background:transparent!important;
  box-shadow:none!important;
}
.difference-hot::after,
.difference-hot:hover::after,
.difference-hot:focus-visible::after,
.difference-hot .label{display:none!important}

/* Crop the painted fronts from the approved four-badge sprite.  The source
   also contains the pin backs below, so 400% made the two outer faces drift. */
.badge-face{
  background-size:449% 219%!important;
  background-position-y:28.2%!important;
}
.badge-face.badge-m4{background-position-x:1.6%!important}
.badge-face.badge-m2{background-position-x:33.8%!important}
.badge-face.badge-m3{background-position-x:65.9%!important}
.badge-face.badge-m1{background-position-x:98.1%!important}

/* The RESET control is the small physical recess painted on the radio side. */
.reset-art{position:relative}
.reset-image-hotspot{
  position:absolute!important;
  left:63%!important;
  top:64.2%!important;
  width:5%!important;
  height:12.5%!important;
  min-width:0!important;
  padding:0!important;
  border:0!important;
  border-radius:50%!important;
  background:transparent!important;
  box-shadow:none!important;
  cursor:pointer;
  touch-action:none;
  overflow:visible!important;
}
.reset-image-hotspot:hover,.reset-image-hotspot:focus-visible{
  outline:2px solid #e7cc8a88;
  outline-offset:-3px;
}
.reset-image-hotspot i{
  position:absolute!important;
  inset:17%!important;
  width:auto!important;
  border-radius:50%;
  background:transparent!important;
}
.reset-image-hotspot.holding i{
  animation:reset-press 1.5s linear forwards!important;
}
@keyframes reset-press{
  from{box-shadow:inset 0 0 0 0 #e4bd7166}
  to{box-shadow:inset 0 0 0 18px #e4bd7188}
}

.interference-code{
  position:absolute;
  left:65.3%;
  top:53.6%;
  width:6.65%;
  height:3.5%;
  display:grid;
  place-items:center;
  z-index:9;
  color:#e7c785;
  background:#211a15ed;
  font:700 clamp(9px,1.35vw,14px)/1 monospace;
  letter-spacing:.05em;
  text-shadow:0 0 4px #e7ba5d99;
  pointer-events:none;
}
.restore-guide{
  max-width:700px;
  margin:9px auto 0;
  padding:8px 12px;
  border-top:1px solid #7d634555;
  color:#5b4433;
  font-size:.92em;
}

.ticket-join-stage{position:relative;width:min(700px,78vw);height:min(330px,42vw);min-height:230px;margin:8px auto;border:5px solid #4d392b;overflow:hidden;background:#653918}
.ticket-piece,.joined-ticket,.calibration-ticket{position:absolute;z-index:2}.ticket-piece{top:24%;width:46%;aspect-ratio:1.8;cursor:grab;touch-action:none;filter:drop-shadow(0 5px 5px #1d0e0866)}.ticket-piece.dragging{cursor:grabbing;z-index:4}.ticket-piece.drag-left{left:1.5%}.ticket-piece.drag-right{right:1.5%;top:34%}
.ticket-sprite{position:absolute;inset:0;background-image:url('assets/items/ticket-halves-transparent-v2.png');background-repeat:no-repeat;background-size:213% auto;background-position-y:center;pointer-events:none}.ticket-sprite.left-piece{background-position-x:left}.ticket-sprite.right-piece{background-position-x:right}
.joined-ticket{left:7%;right:7%;top:18%;bottom:12%;display:flex;filter:drop-shadow(0 6px 6px #1d0e0877)}.joined-ticket .ticket-sprite{position:relative;inset:auto;flex:0 0 51.7%;width:51.7%;height:100%;background-size:212% auto}.joined-ticket .ticket-sprite.right-piece{margin-left:-3.4%}.held-note{color:#6b4d34;font-style:italic}

.calibration-sheet{position:relative;height:190px;margin:7px 0 0;border:1px solid #876b4845;background:linear-gradient(#efdcae18,#d6bb8430);overflow:hidden}.calibration-samples{position:absolute;inset:0;z-index:1;color:#4e392a;font:700 .76em Georgia,serif}.calibration-samples>span{position:absolute;left:var(--x);top:var(--y);transform:translate(-50%,-50%) rotate(var(--r));line-height:1;opacity:.86}.calibration-samples .sample-target{top:30.6%;font-size:1.08em;letter-spacing:-.02em;opacity:1;transform:translate(-50%,-50%)}.sample-major{left:44.1%!important}.sample-minor{left:57.2%!important}.align-mark{position:absolute;left:53%;top:40.8%;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:13px solid #597057;transform:translate(-50%,-50%);z-index:2;filter:drop-shadow(0 1px 0 #e4cf9c)}.calibration-ticket{left:2%;top:67%;width:68%;height:50%;display:flex;cursor:grab;touch-action:none;outline:0;filter:drop-shadow(0 4px 4px #21150b55);transform:translateY(-50%);z-index:3}.calibration-ticket:focus-visible{outline:2px solid #8d673e;outline-offset:2px}.calibration-ticket .ticket-sprite{position:relative;inset:auto;z-index:1;flex:0 0 51.7%;width:51.7%;height:100%;background-size:212% auto}.calibration-ticket .ticket-sprite.right-piece{margin-left:-3.4%}.calibration-ticket.placed{left:16%;top:7%;transform:none;cursor:default}.calibration-sheet.solved .align-mark{opacity:.35}.calibration-sheet.solved:after{content:"MHz";position:absolute;right:7%;bottom:7%;color:#3f5b3d;font-weight:700;font-size:.76em}
@media(max-width:650px){.calibration-sheet{height:145px}.calibration-ticket{width:70%;height:52%}}

.manual-notes{margin-top:9px}.manual-notes p{margin:2px 0!important;max-width:92%}.hand-a{color:#51493f;font-family:"Kaiti SC","STKaiti",serif;font-size:.88em;letter-spacing:.04em;transform:rotate(-.4deg)}.hand-b{margin-left:13%!important;color:#8b4d32;font-family:"Xingkai SC","STXingkai","Kaiti SC",cursive;font-size:.92em;letter-spacing:.02em;transform:rotate(1deg)}
.photo-note{flex-direction:column;gap:18px}.photo-note .hand-a,.photo-note .hand-b{display:block;margin:0!important;font-size:inherit}

.wall-b .wall-art-canvas{z-index:0}

.circuit-manual-visual{position:relative;display:block;width:100%;height:132px;margin:10px 0 0;border:1px solid #876b4855;background:#efdcae30;color:#54402f;cursor:pointer}.circuit-manual-visual svg{display:block;width:100%;height:100%;padding:7px}.circuit-manual-visual path{fill:none;stroke:#604936;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round}.circuit-manual-visual path.branch{stroke:#846b52;stroke-width:1}.circuit-manual-visual circle{fill:#ead7ae;stroke:#604936;stroke-width:1.1}.circuit-manual-visual text{fill:#5c4432;font:5px Georgia,serif}
.badge-face{display:block;width:100%;aspect-ratio:1;border-radius:50%;background-image:url('assets/items/route-badges-sprite-v1.png');background-repeat:no-repeat;background-size:400% auto;filter:drop-shadow(0 2px 2px #28190f66);pointer-events:none}.badge-face.badge-m4{background-position:0 26%}.badge-face.badge-m2{background-position:33.333% 26%}.badge-face.badge-m3{background-position:66.667% 26%}.badge-face.badge-m1{background-position:100% 26%}
.item.badge-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:2px 7px}.item.badge-item .badge-face{width:43px}.item.badge-item>span:last-child{font-size:10px;line-height:1}
.difference-hot:after{content:"";width:28px;height:28px;border:0;background-image:url('assets/items/route-badges-sprite-v1.png');background-repeat:no-repeat;background-size:400% auto;box-shadow:none;filter:drop-shadow(0 2px 3px #1f140d88)}.difference-hot.badge-m4:after{background-position:0 26%}.difference-hot.badge-m2:after{background-position:33.333% 26%}.difference-hot.badge-m3:after{background-position:66.667% 26%}.difference-hot.badge-m1:after{background-position:100% 26%}
/* The approved concept sheet shows the two corner faces upside down relative
   to the final route. Rotate only their painted faces so the physical metal
   treatment stays intact while the connections match └ and ┘. */
.badge-face.badge-m4,.badge-face.badge-m1{transform:rotate(180deg)}
.difference-hot.badge-m4:after,.difference-hot.badge-m1:after{transform:rotate(173deg)}
.difference-hot.badge-m4:hover:after,.difference-hot.badge-m4:focus-visible:after,
.difference-hot.badge-m1:hover:after,.difference-hot.badge-m1:focus-visible:after{transform:rotate(180deg) scale(1.08)}
.circuit-manual-visual{height:180px}.circuit-manual-visual svg{padding:3px}.circuit-manual-visual .route-line{fill:none;stroke:#73563e;stroke-width:6;stroke-linecap:round;stroke-linejoin:round}.circuit-manual-visual .route-nodes circle{fill:#ead8b3;stroke:#71533c;stroke-width:3}.circuit-manual-visual text{font:700 18px Georgia,serif}
.route-eight{width:min(540px,76vw);height:auto;min-height:0;aspect-ratio:740/520}.route-eight:before,.route-eight:after{display:none}.route-eight svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}.route-eight .route-line{fill:none;stroke:#a88966;stroke-width:6;stroke-linecap:round;stroke-linejoin:round}.route-eight .route-nodes circle{fill:#ead8b3;stroke:#76553d;stroke-width:3}.route-eight text{fill:#5c4432;font:700 18px Georgia,serif}.route-eight .marker-slot{width:54px;height:54px;padding:0;border:0;background:transparent;border-radius:50%;box-shadow:none;transform:translate(-50%,-50%)}.route-eight .marker-slot:hover,.route-eight .marker-slot:focus-visible{outline:3px solid #b28755;outline-offset:3px}.route-eight .marker-slot.filled{border:0;background:transparent}.route-eight .marker-slot .badge-face{width:100%;height:100%}.empty-node{display:block;width:100%;height:100%;border-radius:50%;background:transparent}
.route-slot-0{left:15.54%;top:48.46%}.route-slot-1{left:33.11%;top:48.46%}.route-slot-2{left:46.62%;top:27.31%}.route-slot-3{left:33.11%;top:70.19%}.route-slot-4{left:61.49%;top:70.19%}.route-slot-5{left:77.70%;top:82.69%}
.marker-tray{gap:18px;min-height:68px}.marker-piece{width:62px;height:62px;padding:2px;border:0;background:transparent;box-shadow:none}.marker-piece .badge-face{width:100%;height:100%}.marker-piece.selected{transform:translateY(-5px);background:transparent;outline:3px solid #8e633a;outline-offset:2px}.completed-route.marker-circuit{width:min(540px,76vw);height:auto;margin:12px auto 14px;background:#ead8af66}.completed-route .marker-slot{pointer-events:none}.marker-puzzle h2{margin:0 0 5px}.marker-puzzle>p{margin:5px auto 9px}.folded-p10{width:130px;height:92px;border:1px solid #7f6548;background:linear-gradient(135deg,#ead4a4 49%,#c5a978 50%,#ead4a4 52%);box-shadow:3px 5px 9px #2d1d1244;transform:rotate(-3deg);cursor:pointer}
.appendix-notes,.epilogue-notes{max-width:460px;margin:18px auto;text-align:left}.appendix-notes .hand-b,.epilogue-notes .hand-b{margin-left:18%!important}.epilogue-notes{border-top:1px solid #84684b55;padding-top:10px}

/* Ending: return to the room, let its objects disappear, then bring the
   repaired M-07 back as the final physical interaction. */
.ending-flow{position:fixed;inset:0;z-index:29;display:grid;place-items:center;overflow:hidden;background:#17130f;color:#eee7d8}
.ending-room-canvas,.ending-empty-room{position:absolute;left:50%;top:50%;width:min(1100px,100vw,calc(100vh * 1.77778));aspect-ratio:16/9;transform:translate(-50%,-50%);overflow:hidden;background:#201a15}
.ending-room-layer,.ending-empty-room{background-position:center;background-repeat:no-repeat;background-size:100% 100%}
.ending-room-layer{position:absolute;inset:0;opacity:0;transition:opacity .72s ease}.ending-room-layer.visible{opacity:1}
.ending-room-vignette{position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 90px #1b100b66}
.ending-empty-room{background-image:url('assets/ending/room-stage-5-empty.png')}
.ending-service-card{position:relative;z-index:2;width:min(520px,86vw);padding:28px 34px 25px;background:#eadfc6;color:#392f28;border:1px solid #8b765f;box-shadow:0 18px 70px #000b;opacity:0;transform:translateY(-42px) rotate(-1.2deg);transition:.75s cubic-bezier(.2,.8,.25,1)}
.ending-service-card.visible{opacity:1;transform:translateY(0) rotate(-.35deg)}.ending-service-card.leaving{opacity:0;transform:translateY(36px) rotate(.4deg)}
.ending-service-card header{display:flex;padding:0 0 11px;border-bottom:2px solid #695847;color:#493a2f;background:transparent}.ending-service-card header span{flex:1;letter-spacing:.16em}.ending-service-card header strong{letter-spacing:.12em}
.ending-service-card .service{width:100%;margin:17px 0 15px;font-size:16px}.ending-service-card .service th,.ending-service-card .service td{border-color:#76645288;padding:8px 12px}.ending-service-card tbody tr{opacity:0;transform:translateX(-10px);transition:.45s}.ending-service-card tbody tr.visible{opacity:1;transform:none}
.ending-service-notes{padding-top:8px;border-top:1px solid #84684b55;opacity:0;transition:.55s}.ending-service-notes.visible{opacity:1}.ending-service-notes p{margin:3px 0}.ending-service-notes .hand-b{margin-left:18%!important}
.ending-radio-scene{width:min(980px,94vw);text-align:center;opacity:0;animation:ending-radio-in .8s ease forwards}.ending-radio-kicker{margin:0 0 12px;color:#d4c5aa;letter-spacing:.24em}.ending-radio-console{width:min(900px,92vw);border-color:#79624d;box-shadow:0 18px 70px #000c}.ending-radio-console:after{content:"";position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 34px #20140b55}
.ending-power-control{position:absolute;z-index:3;left:58.8%;top:38.2%;width:3.2%;height:6.2%;padding:0;border:0;border-radius:50%;background:transparent;cursor:pointer}.ending-power-control:focus-visible{outline:3px solid #f1d08a;outline-offset:4px}.ending-power-control.on{box-shadow:0 0 18px 5px #e9c66b99}
.ending-frequency{position:absolute;z-index:2;left:57.5%;top:49.1%;width:20.2%;padding:5px 2px;background:#17130fee;color:#f0cf84;font:700 clamp(11px,1.8vw,20px)/1.1 monospace;letter-spacing:.08em;opacity:0;transition:.4s}.ending-frequency.visible{opacity:1;text-shadow:0 0 7px #e7ba5d99}
#endingRadioHint{margin:12px 0 0;color:#cbbda6;letter-spacing:.08em}
.ending-final-card{text-align:center;opacity:0;transform:translateY(18px);transition:1s;color:#eee2cc}.ending-final-card.visible{opacity:1;transform:none}.ending-final-frequency{margin:0 0 22px;color:#d8b96f;font:700 clamp(34px,7vw,76px)/1 monospace;letter-spacing:.12em}.ending-final-card h1{font-size:clamp(28px,5vw,56px);font-weight:400;letter-spacing:.08em}.ending-word{margin:30px 0;letter-spacing:.55em;color:#cbb99c}.ending-final-card button{padding:10px 22px;border:1px solid #8e7b64;border-radius:3px;background:#3a3028;color:#eee2cc;cursor:pointer}
@keyframes ending-radio-in{to{opacity:1}}
@media(max-width:650px){.ending-service-card{padding:22px 20px}.ending-service-card .service{font-size:13px}.ending-radio-kicker{font-size:13px}.ending-power-control{min-width:30px;min-height:30px;transform:translate(-8px,-7px)}}

/* Inventory objects remain recognizable at a glance without turning the
   footer into a text menu. */
.item.object-item{min-width:68px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:3px 6px}
.item.object-item>span:last-child{font-size:10px;line-height:1;color:#4d3b2d}
.inventory-thumb{display:block;width:53px;height:39px;background-repeat:no-repeat;background-position:center;background-size:contain;filter:drop-shadow(0 2px 2px #2d1b1066);pointer-events:none}
.thumb-tickets{background-image:url('assets/items/ticket-halves-transparent-v2.png')}
.thumb-photo{background-image:url('assets/closeups/old-room-photo-differences-v2.png');border:2px solid #ead9b8;box-sizing:border-box;transform:rotate(-2deg)}
.thumb-manual{background-image:url('assets/closeups/manual-blank-spread-v1.png')}
.manual-return-hot:hover,.manual-return-hot:focus-visible{background:#f6d99814;box-shadow:inset 0 0 0 2px #f0d59b55}
