
:root{--bg:#05080d;--panel:#08121a;--panel2:#0d1922;--line:#6b5535;--gold:#e0b66d;--red:#9d2d36;--text:#f4eee2;--muted:#92a2ad}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;background:#020407;color:var(--text);font-family:-apple-system,BlinkMacSystemFont,"PingFang TC","Noto Sans TC","Microsoft JhengHei",sans-serif;overflow:hidden}
button{font:inherit;color:inherit}.screen,.drawer,.overlay-screen,.vn-screen,.memory-screen,.hunt-screen,.letter-screen,.ending-screen{position:absolute;inset:0;display:none}.show{display:block!important}
#app{position:relative;width:100%;height:100dvh;overflow:hidden;background:#05080d}.scroll-screen{overflow:auto;background:radial-gradient(circle at 50% 0,#132536,#05080d 62%)}
.primary,.ghost{width:100%;min-height:48px;border-radius:10px;font-weight:700}.primary{background:linear-gradient(#8b3035,#4b1518);border:1px solid #d9ac64}.ghost{background:#0b151d;border:1px solid #665238}
.topbar{height:58px;padding:calc(8px + env(safe-area-inset-top)) 12px 7px;display:flex;align-items:center;gap:10px;background:#050a0feF;border-bottom:1px solid #4b3b28}.topbar .back{border:0;background:none;font-size:30px}.topbar b{font-family:serif;font-size:18px}.topbar small{display:block;color:#a99470;font-size:14px}

/* train opening */
.intro-screen{background:radial-gradient(circle at 72% 48%,#155177 0,#071424 28%,#02050b 67%,#000 100%);overflow:hidden}
.tunnel{position:absolute;inset:-20%;border-radius:50%;animation:pulse 1.2s linear infinite}.tunnel-a{background:repeating-radial-gradient(ellipse at 72% 48%,transparent 0 7%,#65baff22 7.5% 8%,transparent 8.5% 14%)}.tunnel-b{background:repeating-linear-gradient(87deg,transparent 0 5%,#f4d8ff24 5.3% 5.6%,transparent 5.9% 11%);filter:blur(1px);animation:streak .7s linear infinite}
@keyframes pulse{to{transform:scale(1.06)}}@keyframes streak{to{transform:translate(7%,-3%)}}
.flying-charms i{position:absolute;color:#e44950;font-family:serif;font-style:normal;opacity:.28;border:1px solid #c43b43;padding:4px 7px;background:#4b111855}.flying-charms i:nth-child(1){left:8%;top:16%;transform:rotate(-10deg)}.flying-charms i:nth-child(2){right:8%;top:29%;transform:rotate(9deg)}.flying-charms i:nth-child(3){left:14%;bottom:34%;transform:rotate(13deg)}
.train-shell{position:absolute;left:5%;bottom:27%;width:76%;height:28%;background:linear-gradient(#111820,#05080c 72%);border:3px solid #2b3740;border-radius:25px 25px 7px 7px;box-shadow:0 0 45px #64bcff55,0 20px 50px #000;transform:perspective(600px) rotateY(6deg)}
.train-no{position:absolute;top:4%;left:44%;font-weight:900;color:#ff553f;letter-spacing:.14em}.train-windows{position:absolute;left:7%;right:7%;top:25%;height:42%;background:repeating-linear-gradient(90deg,#173348 0 11%,#d19c7d 11.5% 14%,#1a4a62 14.5% 25%,#0c1116 25.5% 28%)}.train-shell .lamp{position:absolute;bottom:12%;width:16px;height:16px;border-radius:50%;background:#fff0bd;box-shadow:0 0 25px #fff}.train-shell .l{left:10%}.train-shell .r{right:10%}
.intro-copy{position:absolute;left:20px;right:20px;bottom:calc(22px + env(safe-area-inset-bottom));padding-top:100px;background:linear-gradient(transparent,#020409e9 36%)}.intro-copy span{color:var(--gold);font-size:13px;letter-spacing:.18em}.intro-copy h1{font-family:serif;font-size:62px;margin:0 0 4px;letter-spacing:.1em;text-shadow:0 0 25px #bd2f3b}.intro-copy p{font-family:serif;font-size:16px;line-height:1.65;color:#d2d7db}.intro-copy button{margin-top:8px}
.first-play-hint{color:#e8c07a!important;font-size:14px!important;font-family:'Noto Sans TC',sans-serif!important;line-height:1.6!important;border-left:2px solid #e8c07a;padding-left:9px;margin:6px 0 12px!important}
.opening-sound-hint{position:absolute;left:16px;right:16px;bottom:calc(56px + env(safe-area-inset-bottom));text-align:center;color:#e8c07a;font-size:14px;letter-spacing:.04em;text-shadow:0 1px 4px #000;z-index:5}
.opening-screen{background:#000;position:relative}.opening-screen video{width:100%;height:100%;object-fit:cover}.skip{position:absolute;right:10px;top:calc(10px + env(safe-area-inset-top));border:1px solid #745f40;background:#05080bdc;border-radius:20px;padding:7px 11px;z-index:5}
.game-menu{position:absolute;left:8px;top:calc(64px + env(safe-area-inset-top));z-index:150;display:none}
.game-menu.game-active{display:block}
.game-menu-toggle{width:32px;height:32px;border:1px solid #745f40;background:#05080bdc;border-radius:50%;font-size:15px;color:#e0c78a;display:flex;align-items:center;justify-content:center;padding:0}
.game-menu-panel{display:none;position:absolute;left:0;top:38px;background:#0a0f14f2;border:1px solid #51402c;border-radius:10px;padding:6px;min-width:150px;box-shadow:0 8px 24px #000a}
.game-menu-panel.open{display:flex;flex-direction:column;gap:2px}
.game-menu-panel button{background:none;border:0;color:#dbe3e6;text-align:left;padding:9px 10px;font-size:13px;border-radius:7px;white-space:nowrap}
.game-menu-panel button:active{background:#1a232c}
.slot-picker-overlay{display:none;position:fixed;inset:0;z-index:300;background:#000c;align-items:center;justify-content:center}
.slot-picker-overlay.show{display:flex!important}
.slot-picker-card{background:#0e151b;border:1px solid #51402c;border-radius:14px;padding:18px;width:min(320px,86vw)}
.slot-picker-card h2{font-size:16px;margin:0 0 12px;color:#e0c78a;text-align:center}
.slot-list{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.slot-item{background:#161f29;border:1px solid #51402c;border-radius:9px;padding:10px 12px;text-align:left}
.slot-item b{color:#e0c78a;font-size:13px;display:block}
.slot-item small{color:#9ba8b0;font-size:11px}
.slot-item.empty{opacity:.5}
.corpse-match-cards{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.guo-sort-cards{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.guo-sort-card{background:linear-gradient(145deg,#15181b,#0a0e12);border:1px solid #5c4931;border-radius:9px;padding:10px 12px;font-size:14px;line-height:1.5;color:#c8d0d5;cursor:pointer}
.guo-sort-card.selected{border-color:#d6ad67;background:#2a2010}
.guo-sort-card.placed-qi{border-left:4px solid #7a9a8f}
.guo-sort-card.placed-luo{border-left:4px solid #a06a5a}
.guo-sort-card.placed-unclear{border-left:4px solid #8a8078}
.guo-sort-card b{display:block;color:#e0b66c;font-size:13px;margin-bottom:3px}
.guo-sort-card small{display:block;margin-top:5px;color:#8a9096;font-size:11.5px}
.guo-cross-link{color:#e0c78a!important;font-style:italic}
.guo-sort-body{padding-bottom:0}
.guo-sort-tray-spacer{height:4px}
.guo-sort-tray-wrap{position:sticky;bottom:calc(66px + env(safe-area-inset-bottom));left:0;right:0;background:linear-gradient(180deg,rgba(10,14,18,0),#0a0e12 18%);padding:10px 16px 10px;z-index:96}
.guo-sort-tray{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}
.guo-tray-selected{color:#e0c78a;font-size:13px;font-weight:600;margin:0}
.guo-tray-progress{color:#8a9096;font-size:12px;margin:0;white-space:nowrap}
.guo-sort-buckets{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px}
.guo-sort-buckets button{background:#161f29;border:1px solid #51402c;border-radius:7px;padding:9px 3px;font-size:11px;line-height:1.3;color:#dbe3e6;min-height:44px}
.guo-sort-buckets button:disabled{opacity:.35}
.guo-board-summary{margin:12px 0;padding:10px 12px;background:#0a0e12;border-left:2px solid #4a3f30;border-radius:4px;font-size:14px;line-height:1.7;color:#c9d0d4}
.guo-board-summary p{margin:0 0 8px}
.guo-board-summary p:last-child{margin-bottom:0}
.corpse-match-card{background:linear-gradient(145deg,#15181b,#0a0e12);border:1px solid #5c4931;border-radius:10px;padding:12px}
.corpse-match-card.is-assigned{border-color:#7a9a7a}
.corpse-card-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.corpse-number-badge{flex:0 0 auto;width:30px;height:30px;border-radius:50%;background:#2a2010;border:1px solid #d6ad67;color:#e0c78a;font-size:15px;font-weight:bold;display:flex;align-items:center;justify-content:center}
.corpse-assigned-name{font-size:14px;color:#8a9096;letter-spacing:.03em}
.is-assigned .corpse-assigned-name{color:#7a9a7a;font-weight:bold}
.corpse-wound-text{font-size:13px;line-height:1.6;color:#9ba8b0;margin:0 0 10px;padding:8px 10px;background:#0a0e12;border-left:2px solid #4a3f30;border-radius:4px}
.corpse-match-card b{color:#e0b66c;font-size:15px}
.corpse-match-card p{font-size:14px;line-height:1.5;color:#c8d0d5;margin:5px 0 9px}
.match-options{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.match-options button{background:#161f29;border:1px solid #51402c;border-radius:7px;padding:7px 4px;font-size:12px;color:#dbe3e6}
.match-options button.selected{border-color:#d6ad67;background:#2a2010;color:#e0c78a}
.match-options button:disabled{opacity:.35}
.match-clear{margin-top:8px;width:100%;background:none;border:1px dashed #6a4b4b;border-radius:7px;padding:6px;font-size:12px;color:#d8a8ac}
#corpseMatchHint{color:#d8a8ac;font-size:13px;margin-top:8px;text-align:center}
.explore-hotspots{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:14px}
.explore-hotspot{background:linear-gradient(180deg,#161f29,#0c1119);border:1px solid #6a5535;border-radius:10px;padding:12px 8px;text-align:center;font-size:13px;color:#dbe3e6;min-height:52px}
.explore-hotspot.examined{opacity:.55;border-color:#4a7a4a;background:#12181f}
.explore-progress{text-align:center;font-size:12px;color:#9ba8b0;margin-top:10px}
.explore-log{display:flex;flex-direction:column-reverse;margin-top:12px}
.explore-entry{background:#0a131a;border-left:3px solid #a9343c;border-radius:6px;padding:10px 12px;margin-bottom:8px;font-size:14px;line-height:1.6;color:#c9d0d4}
.explore-entry b{color:#e0b66c;display:block;margin-bottom:3px}
.crawl-viewport{position:absolute;left:0;right:0;top:0;height:50%;overflow:hidden;pointer-events:none}
.crawl-timed{position:absolute;left:0;right:0;top:0;padding:20px 24px;opacity:0}
.crawl-slot1{animation:crawlFade 22s ease forwards;animation-delay:1s}
.crawl-slot2{animation:crawlFade 21s ease forwards;animation-delay:26s}
.crawl-slot3{animation:crawlFade 15s ease forwards;animation-delay:50s}
@keyframes crawlFade{0%{opacity:0}8%{opacity:1}88%{opacity:1}100%{opacity:0}}
.crawl-block{margin-bottom:0;padding:22px 18px;border-radius:4px}
.crawl-block p{font-family:serif;font-size:15px;line-height:2;text-align:center;margin:0 0 26px;text-shadow:0 2px 8px #000}
.crawl-block.crawl-bw{background:#0a0a0ab8;backdrop-filter:blur(1px) grayscale(1) contrast(1.1);color:#eaeaea;border:1px solid #4448}
.crawl-block.crawl-sepia{background:#1c140ab8;backdrop-filter:blur(1px) sepia(.4);color:#f0dfb8;border:1px solid #6a502a88}
.crawl-block.crawl-purple{background:#1a0e2ab8;backdrop-filter:blur(1px) hue-rotate(220deg) saturate(1.3);color:#d8c8f0;border:1px solid #5a3a7a88}

/* role select */
.select-copy{padding:22px 14px 9px}.select-copy>span{color:var(--gold);font-size:13px;letter-spacing:.18em}.select-copy h2{font-family:serif;font-size:30px;margin:6px 0}.select-copy p{font-size:14px;color:#99a7b0;line-height:1.55}
.role-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:6px 11px 30px}.role-card{height:255px;border:1px solid #58452f;border-radius:14px;overflow:hidden;padding:0;position:relative;text-align:left;background:#0b131a;box-shadow:0 10px 24px #000a,inset 0 0 0 1px #ffffff0a}.role-card img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 20%;filter:saturate(.86) contrast(1.03)}.role-card:after{content:"";position:absolute;inset:0;background:linear-gradient(transparent 38%,#03070a22 54%,#04080def 83%)}.role-card:before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(135deg,#f3d78e30 0%,transparent 26%),linear-gradient(to bottom right,transparent 92%,#e3bd77bb 93% 95%,transparent 96%),linear-gradient(to top left,transparent 92%,#e3bd77bb 93% 95%,transparent 96%)}.role-info{position:absolute;z-index:2;left:10px;right:10px;bottom:10px}.role-info b{font-family:serif;font-size:20px;color:#fbe9c4;text-shadow:0 2px 8px #000}.role-info span{display:inline-block;color:#0c0f12;background:linear-gradient(180deg,#f7e1a8,#e3bd77);font-size:13px;padding:2px 9px;border-radius:9px;letter-spacing:.06em;font-weight:600;margin-top:4px;box-shadow:0 2px 6px #0006}.role-info small{display:block;color:#a5b1b8;font-size:14px;line-height:1.4;margin-top:5px}

/* main mobile game */
.game-screen{background:#04070b}.game-head{height:57px;padding:calc(8px + env(safe-area-inset-top)) 10px 7px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #4f3e29;background:#05090df2}.game-head b{font-family:serif;font-size:19px}.game-head small{display:block;color:#c0aa82;font-size:14px}.game-head button{border:1px solid #665239;background:#0d1720;border-radius:8px;padding:7px 10px}
.game-main{position:absolute;inset:57px 0 calc(66px + env(safe-area-inset-bottom));overflow:hidden}.car-area{overflow:auto;padding:8px 8px 20px;height:100%}.objective{display:flex;justify-content:space-between;gap:8px;align-items:center;margin-bottom:7px;margin-top:34px;background:#0a141c;border:1px solid #55442e;border-radius:9px;padding:7px 9px}.objective span{font-size:14px;color:#9ba8b0}.objective b{font-size:13px;color:#e1b86f;text-align:right}
.carriage{height:57vh;min-height:470px;position:relative;overflow:hidden;border:3px solid #2c241d;border-radius:11px;background:repeating-linear-gradient(90deg,#7b593d 0 18px,#6a4b34 18px 36px,#7d5b3f 36px 54px);box-shadow:inset 0 0 70px #0009}
.back-wall{position:absolute;left:0;right:0;top:0;height:24%;background:linear-gradient(#1b1916,#2a211a);border-bottom:4px solid #402e20}.door{position:absolute;top:1.5%;left:42%;width:16%;height:18%;background:linear-gradient(#38322b,#131a1e);border:4px solid #221b16;border-radius:4px}.door i{position:absolute;top:-16px;left:50%;transform:translateX(-50%);font-style:normal;background:#151316;color:#e14735;font-size:13px;font-weight:900;padding:1px 5px}.window{position:absolute;top:3%;width:27%;height:17%;border:4px solid #241d18;background:linear-gradient(145deg,#102637,#31566b 55%,#c17f62);box-shadow:inset 0 0 16px #000}.w1{left:4%}.w2{right:4%}.curtain{position:absolute;top:1%;width:6%;height:23%;background:repeating-linear-gradient(90deg,#5b2637 0 6px,#7e4050 7px 12px);z-index:3}.c1{left:2%}.c2{right:2%}.rack{position:absolute;top:22%;height:4%;width:28%;border:2px solid #6b5840;background:repeating-linear-gradient(90deg,#715f42 0 7px,#312a20 8px 10px)}.r1{left:2%}.r2{right:2%}.bench{position:absolute;top:27%;bottom:7%;width:19%;border:4px solid #2c231b;border-radius:7px;background:repeating-linear-gradient(0deg,#1f4d4e 0 16%,#173a3d 16.5% 19%);box-shadow:inset 0 0 18px #000}.b1{left:2%}.b2{right:2%}.floor-lamp{position:absolute;width:16px;height:16px;border-radius:50%;background:#f0a444;box-shadow:0 0 14px #ffb94c}.fl1{left:27%;top:45%}.fl2{right:27%;bottom:29%}.crate{position:absolute;right:5%;top:43%;width:45px;height:45px;border:3px solid #413422;background:repeating-linear-gradient(45deg,#665033 0 9px,#4e3b27 9px 18px)}.paper{position:absolute;left:56%;bottom:7%;width:37px;height:24px;background:#baa77a;transform:rotate(16deg);opacity:.75}
.actor{position:absolute;z-index:8;width:58px;text-align:center;transform:translate(-50%,-50%);border:0;background:none;padding:0}.actor img{width:46px;height:69px;image-rendering:pixelated;filter:drop-shadow(0 4px 2px #0009)}.actor span{display:inline-block;margin-top:-5px;background:#05090de8;border:1px solid #85704e;border-radius:4px;padding:2px 4px;font-size:13px}.actor.player img{filter:drop-shadow(0 0 5px #fff) drop-shadow(0 4px 2px #000)}
.story-box{margin-top:7px;background:#071018;border:1px solid #5a4930;border-radius:10px;padding:9px 10px}.story-box b{color:#dfb56c;font-size:13px}.story-box p{font-family:serif;font-size:14px;line-height:1.55;margin:4px 0}.action-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:7px}.action-grid button{background:#0d1921;border:1px solid #59482f;border-radius:9px;padding:9px;text-align:left;font-size:13px}.action-grid small{display:block;color:#8fa0aa;font-size:13px;margin-top:2px}
.bottom-nav{display:none;position:absolute;left:0;right:0;bottom:0;z-index:95;height:calc(66px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);grid-template-columns:repeat(5,1fr);background:#05090df4;border-top:1px solid #51412b}.bottom-nav button{background:none;border:0;color:#75828a;font-size:17px}.bottom-nav span{display:block;font-size:13px;margin-top:2px}.bottom-nav button.active{color:#e0b66d}
.bottom-nav.game-active{display:grid}
.bottom-nav.hunt-hidden{display:none}

/* drawers / character sheet */
.drawer{z-index:70;background:#05090df8;overflow:auto;padding:13px 12px 80px}.drawer header{display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;background:#05090df2;padding:5px 0 10px}.drawer h2{margin:0;font-size:21px}.drawer header button{background:#101921;border:1px solid #5d4a31;border-radius:8px;padding:6px 10px}.info-card{background:#0b141b;border:1px solid #4d3d2a;border-radius:11px;padding:10px;margin-bottom:8px}.info-card .tag{color:#d8b26c;font-size:14px}.info-card h3{font-size:16px;margin:4px 0}.info-card p{font-size:15px;line-height:1.6;color:#c4cfd5;margin:0}
.character-sheet{display:grid;grid-template-columns:43% 1fr;gap:10px;background:radial-gradient(circle at 30% 25%,#263c49,#0a1016 55%);border:1px solid #55432e;border-radius:13px;padding:10px;margin-bottom:10px}.character-sheet img{width:100%;height:310px;object-fit:cover;object-position:center 10%;border-radius:8px}.character-sheet h2{font-size:23px;margin:0}.public-role{color:#d6ae69;font-size:14px;margin:2px 0 12px}.stat{margin:9px 0;font-size:14px}.stat-line{display:flex;justify-content:space-between}.meter{height:6px;background:#1a252c;border-radius:8px;overflow:hidden;margin-top:3px}.meter i{display:block;height:100%}.hp{background:#d94251}.mind{background:#349bd0}.faith{background:#62b56a}.person-list{display:grid;gap:7px}.person-btn{display:grid;grid-template-columns:58px 1fr;gap:9px;align-items:center;background:#0c151d;border:1px solid #55432e;border-radius:10px;padding:7px;text-align:left}.person-btn img{width:58px;height:72px;object-fit:cover;border-radius:6px}

/* corpse deduction */
.overlay-screen{z-index:85;background:#05090d;overflow:auto}.overlay-body{padding:14px 12px 96px}.case-intro>span{color:#d9b16a;font-size:13px;letter-spacing:.16em}.case-intro h2{font-family:serif;font-size:27px;margin:5px 0}.case-intro p{font-size:15px;color:#96a5ae;line-height:1.6}.corpse-cards{display:grid;gap:8px}.corpse-card{background:linear-gradient(145deg,#15181b,#0a0e12);border:1px solid #5c4931;border-radius:10px;padding:10px;text-align:left}.corpse-card b{color:#e0b66c;font-size:15px}.corpse-card p{font-size:15px;line-height:1.55;color:#c8d0d5}.corpse-card.selected{border-color:#b7333e;box-shadow:0 0 0 1px #b7333e}.sequence-board{margin-top:12px;background:#0a131a;border:1px solid #5b472f;border-radius:11px;padding:10px}.sequence-board>b{font-size:14px}.sequence-slots{display:grid;grid-template-columns:repeat(5,1fr);gap:5px;margin:8px 0}.seq-slot{height:48px;border:1px dashed #5b5042;border-radius:7px;display:grid;place-items:center;font-size:14px;color:#dcb46b}.sequence-board button{margin-top:7px}.sequence-board p{font-size:13px;color:#d3a25e;line-height:1.4}
.puzzle-options{display:grid;gap:9px;margin-top:14px}
.puzzle-option{background:linear-gradient(180deg,#161f29,#0c1119);border:1px solid #6a5535;border-radius:12px;padding:12px 14px;text-align:left;font-size:14px;line-height:1.5;color:#dbe3e6}
.puzzle-option:disabled{opacity:.5}
.puzzle-feedback{margin-top:12px}
.puzzle-feedback-line{padding:10px 12px;border-radius:9px;font-size:13px;line-height:1.5}
.puzzle-feedback-line.good{background:#122415;border:1px solid #3a7a4a;color:#a8d8b4}
.puzzle-feedback-line.bad{background:#2a1416;border:1px solid #7a3a3a;color:#d8a8ac}
.puzzle-known-clues{margin-top:10px;padding:8px 10px;background:#12181f;border:1px dashed #51402c;border-radius:8px;font-size:12px;color:#a8b8bc;line-height:1.5}

/* visual novel */
.vn-screen{z-index:90;background:#07090d}.vn-art{position:absolute;inset:0 0 46%;background:radial-gradient(ellipse at 62% 32%,#7a4a3a55,transparent 60%),linear-gradient(140deg,#182230,#3a2530 55%,#5c2f34);overflow:hidden}.vn-art .vn-rays{position:absolute;inset:-25%;background:repeating-conic-gradient(from 210deg at 68% 32%,#fff2,#fff0 8deg 17deg);opacity:.15;pointer-events:none}.vn-art .vn-glow{position:absolute;inset:0;background:radial-gradient(circle at 68% 36%,#f6cf8f4d,transparent 46%);mix-blend-mode:screen;pointer-events:none}.vn-art:after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(110deg,transparent 0 12%,#fff3ce22 12.3% 12.8%,transparent 13% 20%)}.vn-art img{position:absolute;right:0;bottom:-8%;width:72%;height:115%;object-fit:contain;filter:drop-shadow(0 14px 26px #000c) drop-shadow(0 0 44px #f6cf8f33)}
.vn-box{position:absolute;left:0;right:0;bottom:0;min-height:60%;background:linear-gradient(#10151fe8,#05070bf9);border-top:1px solid #f3d78e77;backdrop-filter:blur(7px);padding:14px 14px calc(84px + env(safe-area-inset-bottom));overflow:auto}
.vn-box:before{content:"";position:absolute;left:16px;right:16px;top:0;height:1px;background:linear-gradient(90deg,transparent,#f7e1a8,transparent)}
.vn-name{font-family:serif;font-size:21px;color:#f3d78e;letter-spacing:.02em;text-shadow:0 0 14px #f3d78e55}
.vn-name:before{content:"♦";color:#a9343c;font-size:14px;margin-right:7px;vertical-align:middle;text-shadow:none}
.vn-box small{color:#95a3ac;font-size:14px}
.bond-meter{display:flex;align-items:center;gap:6px;margin:8px 0 3px}.bond-meter .bond-label{font-size:13px;color:#c79a56;letter-spacing:.12em;white-space:nowrap}.bond-meter .bond-track{flex:1;display:flex;gap:3px}.bond-meter .bond-seg{flex:1;height:5px;border-radius:3px;background:#1c232c;border:1px solid #453620}.bond-meter .bond-seg.filled{background:linear-gradient(90deg,#e3bd77,#f7e1a8);border-color:#f3d78e;box-shadow:0 0 7px #f3d78e99}
.vn-box p{font-family:serif;font-size:16px;line-height:1.75}
.vn-choices{display:grid;gap:8px}.vn-choices button{background:linear-gradient(180deg,#161f29,#0c1119);border:1px solid #6a5535;border-radius:12px;padding:11px 14px;text-align:left;transition:transform .12s,border-color .12s}.vn-choices button:before{content:"◆";color:#e3bd77;margin-right:8px;font-size:13px}.vn-choices button:active{transform:scale(.98);border-color:#e3bd77}
.vn-box>.ghost{margin-top:8px}

/* memories */
.memory-screen{z-index:95;background:#020305}.memory-station{position:absolute;inset:0;background:radial-gradient(circle at 65% 25%,#ee8c6655,transparent 28%),linear-gradient(160deg,#122939,#1b1d25 50%,#5a2b31 100%)}.station-lights{position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0 8%,#c8e9ff22 8.3% 8.8%,transparent 9% 16%)}.crowd{position:absolute;left:0;right:0;bottom:28%;height:28%;background:repeating-linear-gradient(90deg,transparent 0 3%,#121416 3.2% 5.5%,transparent 5.8% 9%);opacity:.8}.memory-copy{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(transparent,#030507 24%);padding:90px 18px calc(88px + env(safe-area-inset-bottom))}.memory-copy span{color:#daae69;font-size:14px;letter-spacing:.16em}.memory-copy h2{font-family:serif;font-size:28px;margin:5px 0}.memory-copy p{font-family:serif;font-size:16px;line-height:1.75;color:#e0dfdc}.comic{height:100%;display:grid;grid-template-rows:repeat(3,1fr);gap:2px}.comic figure{margin:0;position:relative;overflow:hidden;background:#111}.comic-art{position:absolute;inset:0}.comic-art:before,.comic-art:after{content:"";position:absolute}.a1{background:radial-gradient(circle at 70% 40%,#e88a6155,transparent 22%),linear-gradient(#283b47,#4b373a 58%,#18191d)}.a1:before{left:0;right:0;bottom:15%;height:35%;background:repeating-linear-gradient(90deg,#17181b 0 4%,transparent 4.3% 7%)}.a2{background:linear-gradient(135deg,#2b3034,#6a3036)}.a2:before{left:10%;right:10%;top:35%;height:7px;background:#1b1c1e;box-shadow:0 20px #1b1c1e}.a2:after{left:0;right:0;bottom:20%;height:31%;background:repeating-linear-gradient(90deg,#121417 0 5%,transparent 5.4% 9%)}.a3{background:radial-gradient(circle at 50% 20%,#d9544566,transparent 25%),linear-gradient(#15232f,#3d292d 70%,#111)}.a3:before{left:0;right:0;bottom:15%;height:42%;background:repeating-linear-gradient(90deg,#0f1114 0 6%,transparent 6.4% 10%)}.comic figcaption{position:absolute;left:8px;right:8px;bottom:8px;background:#030507df;border-left:3px solid #a83238;padding:8px;font-family:serif;font-size:13px;line-height:1.5}.memory-float{position:absolute;right:10px;bottom:calc(78px + env(safe-area-inset-bottom));background:#56171b;border:1px solid #d9ad67;border-radius:8px;padding:9px 12px}

/* ghost test */
.ghost-choices{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:10px 0}.ghost-pick{background:#0b151d;border:1px solid #51402c;border-radius:9px;padding:8px;text-align:left}.ghost-pick.selected{border-color:#d6ad67}.ghost-pick img{width:46px;height:58px;object-fit:cover;float:left;margin-right:7px;border-radius:5px}.ghost-result{margin-top:10px;background:#0a131a;border:1px solid #4c3c2a;border-radius:10px;padding:12px;font-family:serif;line-height:1.5}
.spectate-offer{margin-top:10px}
.spectate-offer button{margin-top:8px;width:100%}

/* hunt */
.hunt-screen{z-index:105;background:radial-gradient(circle at 50% 15%,#3a1419,#040608 62%);overflow:auto;padding:20px 12px 85px}.hunt-head{text-align:center}.hunt-head>span{color:#d7ad69;font-size:14px;letter-spacing:.16em}.hunt-head h1{font-family:serif;font-size:34px;letter-spacing:.2em;margin:5px 0}.hunt-head p{font-size:13px;color:#a99a87;line-height:1.5}.hunt-targets{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.hunt-inventory-row{margin:10px 0;padding:8px 10px;background:#12181f;border:1px solid #3d4e57;border-radius:8px;font-size:13px;color:#c4cfd5}
.hunt-inventory-row b{color:#d8b26c}.hunt-target{background:#120f13;border:1px solid #6c4147;border-radius:10px;padding:8px;text-align:left}.hunt-target.selected{border-color:#e0b66d}.hunt-target.dead{opacity:.35;filter:grayscale(1)}.hunt-target img{width:50px;height:64px;object-fit:cover;float:left;margin-right:7px;border-radius:5px}.hunt-target small{display:block;font-size:13px;color:#a4948d}.hunt-items{display:flex;gap:6px;overflow:auto;margin:10px 0;padding-bottom:2px}.hunt-item{flex:0 0 100px;background:#0e151b;border:1px solid #51402b;border-radius:8px;padding:8px;font-size:14px}.hunt-item.selected{border-color:#e0b66d}.hunt-log{margin:8px 0;background:#0b1218;border:1px solid #53353a;border-radius:9px;padding:10px;min-height:55px;font-size:15px;line-height:1.55}

/* letter */
.letter-screen{z-index:115;background:radial-gradient(circle at 50% 15%,#201617,#030405 70%);overflow:auto;padding:28px 16px 90px}.letter-paper{background:#e5d6b6;color:#2c2117;min-height:78vh;padding:20px 18px;box-shadow:0 25px 70px #000;font-family:serif;line-height:1.8;position:relative}.letter-paper h2{text-align:center;font-size:18px;letter-spacing:.12em}.letter-kicker{text-align:center;font-size:13px;color:#74572f}.letter-paper #letterText{white-space:pre-wrap;font-size:15px;min-height:38vh}.letter-screen>.primary{margin-top:10px}
.letter-illustration{position:relative;width:118px;margin:0 auto 12px;padding:8px;background:#f4ead0;box-shadow:0 6px 16px #0006,0 0 0 1px #c9b482;transform:rotate(-2deg)}
.letter-illustration img{display:block;width:100%;height:140px;object-fit:cover;object-position:center 15%;filter:sepia(.35) contrast(1.05) brightness(.96)}
.letter-seal{position:absolute;right:-10px;bottom:-10px;width:34px;height:34px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#c23b4d,#7a1f2c);color:#f3e6c8;font-family:serif;font-size:15px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 8px #0008,inset 0 0 6px #0006;transform:rotate(8deg);border:1px solid #4a1119}
.letter-page-nav{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px;padding-top:12px;border-top:1px dashed #a98f5f}
.letter-page-nav span{font-size:13px;color:#74572f;letter-spacing:.06em}
.letter-page-nav button{background:#3a2b1a;color:#f0e3c4;border:1px solid #74572f;border-radius:8px;padding:9px 18px;font-family:serif;font-size:15px}
.ending-screen{z-index:120;background:radial-gradient(circle at 50% 30%,#23394a,#030508 70%);display:none;place-items:center;padding:20px}.ending-screen.show{display:grid!important}.ending-card{text-align:center;background:#071018dd;border:1px solid #665238;border-radius:14px;padding:20px}.ending-card span{color:#d9b16a;font-size:14px;letter-spacing:.17em}.ending-card h2{font-family:serif;font-size:28px}.ending-card p{font-family:serif;font-size:15px;line-height:1.7;color:#d5d9dc}
#toast{position:absolute;z-index:200;top:70px;left:50%;transform:translateX(-50%);background:#05090deE;border:1px solid #755f40;border-radius:18px;padding:7px 11px;font-size:14px;display:none;white-space:nowrap}
@media(min-width:700px){body{background:#010204}#app{width:432px;height:100dvh;margin:auto;box-shadow:0 0 90px #000}}

/* v17 cinematic refinements */
.intro-screen{background:#03060b}
.title-art{position:absolute;inset:0}.title-art img{width:100%;height:100%;object-fit:cover;object-position:center 46%;filter:saturate(.9) contrast(1.05) brightness(.82)}
.title-glass{position:absolute;inset:0;background:linear-gradient(180deg,#0003 0,#02060a18 35%,#020409e8 78%,#020409 100%),radial-gradient(circle at 65% 35%,transparent,#0007)}
.intro-copy{z-index:4;background:linear-gradient(transparent,#020409e8 30%)}.intro-copy h1{font-size:68px}
.role-card img{object-position:center 38%;filter:saturate(.92) contrast(1.04)}
.role-card:after{background:linear-gradient(transparent 42%,#03070a22 58%,#04080df2 87%)}
.station-map-card{margin:10px 0 14px;background:#071018;border:1px solid #5d4930;border-radius:12px;padding:10px}
.map-head{display:flex;justify-content:space-between;gap:8px;align-items:end}.map-head b{font-size:15px;color:#e1b66d}.map-head small{font-size:13px;color:#82929d;text-align:right}
.station-map{height:270px;position:relative;margin-top:8px;border:2px solid #2d3941;border-radius:10px;overflow:hidden;background:linear-gradient(90deg,#182129 0 17%,#343a3e 17% 83%,#182129 83%),repeating-linear-gradient(0deg,transparent 0 33px,#78868d22 34px 35px)}
.station-map:before{content:"";position:absolute;left:18%;right:18%;top:18%;bottom:18%;border:3px solid #7f6b4c33;border-radius:8px}
.platform,.hall,.service,.gate{position:absolute;background:#071018dd;border:1px solid #5b4931;border-radius:6px;padding:4px 6px;font-size:13px;color:#b9c4ca}.platform{top:8px;left:42%}.hall{top:45%;left:43%}.service{left:4%;bottom:12%}.gate{right:4%;bottom:13%}
.map-pin{position:absolute;transform:translate(-50%,-50%);width:32px;height:32px;border-radius:50%;background:#9b2e37;border:2px solid #ebc47e;box-shadow:0 0 15px #d6494caa;display:grid;place-items:center;font-size:13px;font-weight:800}.map-pin small{position:absolute;top:34px;white-space:nowrap;background:#05090de8;border:1px solid #6a573a;border-radius:5px;padding:2px 4px;font-size:12px}
.death-reveal{border-left:3px solid #b2343d!important}.dialogue-count{font-size:13px;color:#d9ae66;margin-bottom:5px}
.memory-archive{z-index:102;background:#05080d}.archive-visual{height:41vh;position:relative;background:linear-gradient(140deg,#153448,#5d3c49 55%,#d88666);overflow:hidden}.archive-visual img{position:absolute;right:-2%;bottom:-10%;height:115%;width:72%;object-fit:contain;filter:drop-shadow(0 12px 25px #000)}.archive-light{position:absolute;inset:0;background:repeating-linear-gradient(110deg,transparent 0 12%,#fff3d12c 12.3% 12.8%,transparent 13% 20%)}.archive-body{position:absolute;left:0;right:0;top:38vh;bottom:0;background:linear-gradient(#09131bf8,#04070b);border-top:1px solid #655139;padding:14px 14px calc(18px + env(safe-area-inset-bottom));overflow:auto}.archive-body #archiveText{font-family:serif;font-size:15px;line-height:1.8;white-space:pre-wrap}.archive-body button{margin-top:12px}
.transition-card{position:fixed;z-index:180;left:12px;right:12px;top:50%;transform:translateY(-50%);background:#05090df5;border:1px solid #806440;border-radius:13px;padding:18px;box-shadow:0 18px 70px #000}.transition-card b{display:block;color:#e1b66d;font-family:serif;font-size:20px}.transition-card p{font-family:serif;font-size:15px;line-height:1.7;color:#d3d6d7}.transition-card button{margin-top:8px}

/* v18 guided-flow + carriage visual correction */
.talk-progress{display:none;margin:8px 0;background:#0e141c;border:1px solid #3d4a4e;border-radius:9px;padding:9px}
.talk-progress.show{display:block}
.talk-progress-head{font-size:14px;color:#a0d3d0;letter-spacing:.06em;margin-bottom:8px}
.talk-progress-row{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px}
.talk-chip{position:relative;flex:0 0 44px;text-align:center;opacity:.5;background:none;border:0;padding:0;font:inherit;cursor:pointer}
.talk-chip img{width:44px;height:56px;object-fit:cover;border-radius:6px;border:1px solid #3d4a4e}
.talk-chip small{display:block;font-size:13px;color:#c9d3d3;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.talk-chip.done{opacity:1}
.talk-chip.done img{border-color:#8fd0a0}
.talk-chip .talk-check{position:absolute;top:-4px;right:2px;width:15px;height:15px;border-radius:50%;background:#3a7a4a;color:#fff;font-size:14px;display:flex;align-items:center;justify-content:center}

.step-guide{position:relative;margin:-1px 0 8px;background:linear-gradient(135deg,#101a20,#091016);border:1px solid #6a5435;border-left:3px solid #d5a85f;border-radius:9px;padding:8px 42px 8px 9px;box-shadow:0 6px 18px #0005}
.step-guide small{display:block;color:#d5a85f;font-size:12px;letter-spacing:.08em}.step-guide b{display:flex;flex-wrap:wrap;gap:5px;font-size:13px;margin-top:4px}.step-guide b i{font-style:normal;padding:2px 7px;border-radius:9px;border:1px solid #443824;color:#6b7075;background:#0a1116}.step-guide b i.done{color:#9fae9a;border-color:#3a4a37}.step-guide b i.cur{color:#0c0f12;background:#d5a85f;border-color:#d5a85f;font-weight:600}.step-guide button{position:absolute;right:7px;top:8px;border:1px solid #705a39;background:#111a20;border-radius:12px;color:#e2bd7b;font-size:13px;padding:5px 7px}.step-guide p{display:none;margin:7px 0 0;border-top:1px solid #443824;padding-top:7px;color:#aeb9bf;font-size:14px;line-height:1.55}.step-guide.open p{display:block}
.puzzle-tip{background:#101820;border:1px solid #5b4930;border-radius:8px;padding:8px;margin-bottom:9px}.puzzle-tip b{display:block;color:#e0b66d;font-size:13px}.puzzle-tip span{display:block;color:#aeb9bf;font-size:13px;line-height:1.55;margin-top:3px}
.sequence-board p b{color:#f0c97e}
/* old Taiwanese train / pixel-RPG carriage: dark wood, teal benches, warm lamps */
.carriage{min-height:500px;border-color:#4a3828;background:repeating-linear-gradient(90deg,#4b3526 0 14px,#3b291e 14px 28px,#563b29 28px 42px);box-shadow:inset 0 0 75px #000c,0 0 0 1px #9a70432b}
.back-wall{height:26%;background:repeating-linear-gradient(90deg,#241b16 0 24px,#2d211a 24px 48px),linear-gradient(#151616,#31241b);border-bottom:5px solid #5b3c29;box-shadow:inset 0 -18px 28px #0007}
.door{top:2%;height:19%;background:linear-gradient(#25221e,#11171a);border-color:#5b4330;box-shadow:inset 0 0 18px #000}.door i{background:#18100d;color:#ff5b3e;text-shadow:0 0 7px #ff442e}
.window{top:3%;height:18%;border-color:#5b4330;background:linear-gradient(145deg,#071824,#173d4d 48%,#31566b 67%,#b56c55);box-shadow:inset 0 0 20px #000,0 0 9px #315e7155}
.curtain{height:24%;background:repeating-linear-gradient(90deg,#3b1d2b 0 5px,#633247 6px 11px);filter:saturate(.8)}
.rack{top:23%;border-color:#72593c;background:repeating-linear-gradient(90deg,#765f40 0 6px,#2a2119 7px 9px)}
.bench{top:29%;bottom:6%;width:20%;border-color:#171a18;background:repeating-linear-gradient(0deg,#163b3c 0 15%,#245457 15.5% 18%,#173b3d 18.5% 32%);box-shadow:inset 0 0 24px #000c,2px 3px 0 #5a3f2d}
.floor-lamp{width:14px;height:14px;background:#eaa04c;box-shadow:0 0 18px #ffb24e,0 0 34px #d96f3455}
.actor img{image-rendering:pixelated;filter:drop-shadow(0 5px 2px #000b)}
.transition-card{position:absolute;left:12px;right:12px;max-width:408px;margin:auto;top:50%;transform:translateY(-50%)}
.map-pin small{max-width:118px;white-space:normal;line-height:1.25;text-align:center;z-index:4}.map-pin:nth-child(even) small{transform:translateX(-30%)}.map-pin:nth-child(odd) small{transform:translateX(-55%)}
@media(max-height:760px){.carriage{min-height:430px}.step-guide{padding-top:6px;padding-bottom:6px}}
/* v19 soul fragments / evidence search / finale */
.bottom-nav button{font-size:16px}.bottom-nav span{font-size:12px}
.search-places{display:grid;grid-template-columns:1fr 1fr;gap:9px}.search-place{min-height:105px;text-align:left;padding:12px;border-radius:12px;border:1px solid #675038;background:linear-gradient(145deg,#17232c,#0a1015);position:relative;overflow:hidden}.search-place:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 75% 25%,#d99d4a22,transparent 30%)}.search-place b,.search-place small{position:relative;display:block}.search-place b{color:#e2b66c;font-family:serif}.search-place small{color:#9eabb2;margin-top:5px;line-height:1.5}.search-result{margin-top:12px;border:1px solid #59452e;background:#071018;border-radius:10px;padding:12px;min-height:80px;line-height:1.65;font-size:13px}.soul-progress{height:7px;background:#172129;border-radius:9px;overflow:hidden;margin:8px 0}.soul-progress i{display:block;height:100%;background:linear-gradient(90deg,#7b2d39,#d7ad66)}.fragment-card{border:1px solid #5b4931;background:#0b151c;border-radius:10px;padding:10px;margin:8px 0}.fragment-card.locked{opacity:.42;filter:grayscale(.7)}.fragment-card b{display:block;color:#e1b66d}.fragment-card small{display:block;color:#91a0a9;margin-top:4px;line-height:1.5}.ghost-badge{color:#cda7ff!important}.hunt-log .exchange{color:#e5bc75}.ending-choices button{width:100%;margin:7px 0;text-align:left;padding:12px}.ending-choices b,.ending-choices small{display:block}.ending-choices small{font-size:14px;line-height:1.55;margin-top:5px}.ending-card{max-height:92vh;overflow:auto}.ending-card #endingResult{font-family:serif;line-height:1.8;margin:12px 0;color:#ead8ba}

/* ===== v20 polish ===== */
.title-art img{object-position:center 46%}
/* keep actors apart on 402-432px game canvas */
.actor span{max-width:58px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* illustrated memories, one cinematic frame at a time */
.memory-station{background-image:linear-gradient(180deg,#02050a22,#030406b8),url('assets/mem_station.jpg')!important;background-size:cover!important;background-position:center!important}
.memory-station .station-lights,.memory-station .crowd{display:none!important}
.massacre-single{background:#020305}.massacre-frame{position:absolute;inset:0;overflow:hidden}.massacre-frame>img{width:100%;height:100%;object-fit:cover;object-position:center;filter:saturate(.88) contrast(1.06)}.massacre-shade{position:absolute;inset:0;background:linear-gradient(180deg,#0002,#0001 45%,#020305e8 82%)}.massacre-caption{position:absolute;left:14px;right:14px;bottom:130px;border-left:3px solid #a9343c;background:#030609e9;padding:11px 12px}.massacre-caption span{font-size:14px;color:#e0b46d;letter-spacing:.14em}.massacre-caption p{font-family:serif;font-size:16px;line-height:1.65;margin:5px 0 0}.massacre-single .memory-float{left:14px;right:14px;width:auto;text-align:center}
.memory-archive .archive-visual{height:52vh;background:#05080d}.memory-archive .archive-visual img{position:absolute;inset:0!important;width:100%!important;height:100%!important;object-fit:cover!important;object-position:center!important;filter:saturate(.88) contrast(1.06)!important}.archive-light{background:linear-gradient(180deg,#0001,#02060a88)!important}.archive-scene-label{position:absolute;left:12px;bottom:12px;background:#05090de8;border:1px solid #70573a;border-radius:7px;padding:5px 8px;color:#e0b56d;font-size:14px}.memory-archive .archive-body{top:49vh}.memory-archive .archive-body #archiveText{font-family:inherit;font-size:16px;line-height:1.7;white-space:normal}.memory-archive .archive-body #archiveText .mem-speaker{display:block;color:#e0b56d;font-family:serif;font-weight:800;margin-bottom:6px}.memory-archive .archive-body #archiveText p{margin:0;font-family:serif}.memory-archive .archive-body #archiveText .mem-tip{margin-top:10px;padding:7px 9px;background:#101922;border-left:2px solid #9a3038;color:#aeb8be;font-size:14px}
/* Five-body map disappears after solved through JS; labels also no longer overlap */
.map-pin small{max-width:110px;overflow:hidden;text-overflow:ellipsis}.station-map{min-height:290px}
/* milestone card */
.milestone-card{position:absolute;z-index:190;left:14px;right:14px;top:50%;transform:translateY(-50%);background:radial-gradient(circle at 50% 0,#3b1720,#070b10 58%);border:1px solid #b18a54;border-radius:15px;padding:22px 17px;text-align:center;box-shadow:0 25px 80px #000}.milestone-card .seal{font-size:14px;color:#d8ad66;letter-spacing:.18em}.milestone-card h2{font-family:serif;font-size:27px;margin:7px 0}.milestone-card p{font-size:14px;line-height:1.65;color:#cbd1d4}.milestone-card button{margin-top:10px}
.act-summary{text-align:left;margin-top:14px;padding-top:12px;border-top:1px dashed #4a3f30}
.act-summary-kicker{font-size:11px;letter-spacing:.12em;color:#8a9096;margin-bottom:4px}
.act-summary-line{font-size:13px;color:#a8d8b4;line-height:1.5;margin:3px 0}
.act-summary-question{font-size:13px;color:#e0c78a;line-height:1.5;margin-top:8px;font-style:italic}
.evidence-connect{color:#e0c78a;font-size:13px;font-style:italic;display:inline-block;margin-top:4px}
.reconstruction-body{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;background:#04070b}
.recon-timeline{min-height:24px;font-size:13px;color:#e0c78a;letter-spacing:.05em;margin:8px 0}
.recon-row{display:flex;gap:8px;width:100%;transition:all .6s ease}
.recon-card{flex:1;background:#12181f;border:1px solid #51402c;border-radius:8px;padding:10px 4px;text-align:center;transition:order .6s ease;order:0}
.recon-card b{display:block;font-size:15px;color:#dbe3e6}
.recon-card small{display:block;margin-top:6px;font-size:12px;color:#9ba8b0;opacity:0;animation:reconFadeIn .5s ease forwards}
.recon-card.revealed{border-color:#7a9a7a}
.recon-line{font-size:16px;color:#f0e3c4;text-align:center;margin-top:20px;font-family:serif;opacity:0;animation:reconFadeIn .8s ease forwards}
@keyframes reconFadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.memory-flash-screen{position:fixed;inset:0;z-index:250;background:#000;display:none;align-items:center;justify-content:center;padding:40px;flex-direction:column;max-width:430px;left:0;right:0;margin-left:auto;margin-right:auto}
.memory-flash-screen.show{display:flex!important}
.memory-flash-screen .flash-lines{max-width:390px;width:100%}
.flash-lines{max-width:640px;text-align:center}
.flash-line{font-family:serif;font-size:19px;color:#c9b98a;line-height:1.8;font-style:italic;opacity:0;animation:reconFadeIn 1s ease forwards}
.flash-line.dim{color:#8a8078}
/* clearer search categories */
.search-place.weapon:after,.search-place.clue:after{position:absolute;right:8px;top:8px;font-size:13px;border:1px solid #6e5839;border-radius:10px;padding:2px 5px}.search-place.weapon:after{content:'可能有道具';color:#e1ad6b}.search-place.clue:after{content:'可能有線索';color:#86c8d2}
/* hunt has no no-item choice */
.hunt-items:empty:after{content:'身上沒有可用的攻擊道具';display:block;width:100%;padding:12px;border:1px solid #653d43;border-radius:9px;color:#d6a6ab;text-align:center;font-size:13px}
@media(min-width:700px){.milestone-card,.transition-card{max-width:408px;left:50%;right:auto;width:408px;transform:translate(-50%,-50%)}}

/* v21: correct Traditional Chinese title glyph and stable character placement */
.game-title{
  display:flex !important;
  align-items:baseline;
  gap:.05em;
  font-family:"Microsoft JhengHei","PingFang TC","Noto Sans TC",sans-serif !important;
  font-weight:800 !important;
  font-style:normal !important;
  letter-spacing:0 !important;
  line-height:1 !important;
}
.game-title span{display:inline-block}
.actor{
  width:62px !important;
  min-height:80px;
}
.actor img{
  width:46px !important;
  height:69px !important;
  object-fit:contain;
  image-rendering:pixelated;
}
.actor.player img{
  filter:drop-shadow(0 0 7px #fff) drop-shadow(0 4px 2px #000) !important;
}
.actor.player span{
  border-color:#e6c47b !important;
  color:#fff !important;
}

/* v22 strict handheld layout + sequential flow */
html,body{width:100%;height:100%;overflow:hidden}
body{display:flex;justify-content:center;background:#010204}
#app{position:relative!important;width:min(100vw,430px)!important;max-width:430px!important;height:100dvh!important;max-height:100dvh!important;margin:0 auto!important;overflow:hidden!important;box-shadow:0 0 45px #000}
.screen,.drawer,.overlay-screen,.vn-screen,.memory-screen,.hunt-screen,.letter-screen,.ending-screen,.milestone-card,.transition-card{position:absolute!important;max-width:430px!important;left:0!important;right:0!important;margin-left:auto!important;margin-right:auto!important}
.milestone-card,.transition-card{top:50%!important;transform:translateY(-50%)!important}
.car-area{min-width:0!important}
.carriage{width:100%!important;min-width:0!important;overflow:hidden!important}
.actor{width:54px!important}
.actor img{width:42px!important;height:63px!important}
.actor.ghost-actor{opacity:.62;filter:saturate(.25)}
.actor.ghost-actor img{filter:drop-shadow(0 0 7px #8ad7ff)}
.search-places{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.search-place{min-height:90px;background:#0c151d;border:1px solid #59472f;border-radius:10px;padding:10px;text-align:left}
.search-place b{display:block;color:#e0b66d}.search-place small{display:block;color:#96a4ad;font-size:14px;line-height:1.45;margin-top:5px}
.search-place.done{opacity:.35}
.search-result{margin-top:10px;background:#071018;border:1px solid #5b4930;border-radius:10px;padding:10px;font-size:13px;line-height:1.55}
.search-illustration,.clue-illustration{width:100%;display:block;border-radius:8px;margin-bottom:8px;border:1px solid #6d5636}
/* Combat log now reveals one line at a time, like a dialogue box, instead of
   dumping the whole round as a static bullet list. */
.hunt-log.playing{min-height:120px}
.combat-line{display:flex;gap:9px;align-items:flex-start;background:linear-gradient(180deg,#161217,#0c0a0d);border:1px solid #5a3a3f;border-radius:10px;padding:9px 11px;margin-bottom:7px;font-size:14px;line-height:1.55;opacity:1;transform:translateY(0);transition:opacity .35s ease,transform .35s ease}
.combat-line.entering{opacity:0;transform:translateY(8px)}
.combat-line b{flex-shrink:0;width:18px;height:18px;border-radius:50%;background:#8f2b35;color:#f3e4c8;display:grid;place-items:center;font-size:14px}
.combat-line span{color:#e6dccb}

/* 方季宜法師額外能力：本輪多選一位目標 */
/* ---- 擲筊 (moon-block divination) — used when attacking with 撕魂卦 / 極・撕魂卦 ---- */
.jiao-overlay{position:absolute;inset:0;z-index:220;display:none;align-items:center;justify-content:center;background:rgba(5,3,4,.86)}
.jiao-overlay.show{display:flex!important}
.jiao-card{width:82%;max-width:320px;background:linear-gradient(180deg,#1c1216,#0a0708);border:1px solid #7a3f2e;border-radius:14px;padding:22px 18px;text-align:center;box-shadow:0 20px 50px #000a}
.jiao-title{font-family:serif;font-size:18px;color:#e8c07a;letter-spacing:.1em}
.jiao-sub{font-size:14px;color:#a99a87;margin-top:4px;line-height:1.5}
.jiao-blocks{display:flex;justify-content:center;gap:18px;margin:22px 0}
.jiao-block{width:52px;height:80px;perspective:400px}
.jiao-block i{display:block;width:100%;height:100%;border-radius:50% 50% 46% 46%/60% 60% 40% 40%;background:linear-gradient(160deg,#7a2118,#3d0f0a);border:1px solid #a9432f;box-shadow:inset 0 -8px 14px #00000066,0 6px 14px #0007;transition:transform .25s ease, background .25s ease}
.jiao-block.rolling i{animation:jiaoSpin .18s linear infinite}
@keyframes jiaoSpin{0%{transform:rotateX(0deg) rotateY(0deg)}100%{transform:rotateX(340deg) rotateY(220deg)}}
.jiao-block.face-yang i{background:linear-gradient(160deg,#e8c07a,#b98a3f);border-color:#f3d78e;transform:rotateX(0deg)}
.jiao-block.face-yin i{background:linear-gradient(160deg,#7a2118,#3d0f0a);border-color:#a9432f;transform:rotateX(180deg)}
.jiao-result{min-height:44px;margin:6px 0 4px;font-size:16px;line-height:1.6}
.jiao-result b.jiao-good{color:#e8c07a;font-size:16px}
.jiao-result b.jiao-bad{color:#8a95a0;font-size:16px}

/* ---- Search finds now pop out as a card instead of a fixed-timer inline reveal —
   dismissed by the player, which naturally slows the pace back down to their own speed. ---- */
.search-find-popup{position:absolute;inset:0;z-index:210;display:none;align-items:center;justify-content:center;background:rgba(5,3,4,.82)}
.search-find-popup.show{display:flex!important}
.search-find-card{width:82%;max-width:320px;background:linear-gradient(180deg,#1a2029,#0a0e13);border:1px solid #e3ba72;border-radius:14px;padding:18px;text-align:center;box-shadow:0 0 40px #d9a54533;animation:findPop .3s ease}
@keyframes findPop{0%{transform:scale(.85);opacity:0}100%{transform:scale(1);opacity:1}}
.search-find-img{width:100%;max-height:130px;object-fit:cover;border-radius:8px;margin-bottom:10px;display:none}
.search-find-img[src]:not([src=""]){display:block}
.search-find-icon{font-size:26px;margin-bottom:4px}
.search-find-title{font-family:serif;color:#e8c07a;font-size:14px;margin-bottom:6px}
.search-find-text{font-size:16px;color:#c9d0d4;line-height:1.65;margin-bottom:14px}
.confession-block{margin-bottom:14px}
.confession-speaker{font-family:serif;font-size:15px;color:#e8c07a;letter-spacing:.08em;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid #4a3f30}
.confession-text{font-size:16px;color:#c9d0d4;line-height:1.75}
.confession-text p{margin:0 0 12px 0}
.confession-text p:last-child{margin-bottom:0}
.search-find-progress{font-size:14px;color:#8996a0;letter-spacing:.02em;margin:-6px 0 12px;padding-top:8px;border-top:1px dashed #3d4a4e}

/* ---- Shared-memory flashback when two characters with intersecting stories talk ---- */
.shared-memory-overlay{position:absolute;inset:0;z-index:215;display:none;align-items:center;justify-content:center;background:rgba(8,4,10,.9)}
.shared-memory-overlay.show{display:flex!important}
.shared-memory-card{width:86%;max-width:340px;background:linear-gradient(180deg,#1c1420,#0a070c);border:1px solid #6a3f74;border-radius:14px;padding:20px 18px;text-align:center;box-shadow:0 0 46px #6a3f7433}
.shared-memory-kicker{font-size:14px;color:#c79ad3;letter-spacing:.14em;margin-bottom:10px}
.shared-memory-portraits{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:14px}
.shared-memory-portraits img{width:64px;height:82px;object-fit:cover;border-radius:8px;border:1px solid #6a3f74}
.shared-memory-link{color:#d3a0e0;font-size:16px}
.shared-memory-title{font-family:serif;color:#e0b6ec;font-size:15px;margin-bottom:8px}
.shared-memory-card p{font-size:14px;color:#cbc0d0;line-height:1.7;margin-bottom:14px}

.mage-bonus{margin:10px 0;background:#160f1c;border:1px solid #6a3f74;border-radius:10px;padding:10px}
.mage-bonus>b{display:block;color:#d3a0e0;font-size:13px}
.mage-bonus>small{display:block;color:#a596ab;font-size:14px;line-height:1.5;margin-top:3px}
.mage-bonus-grid{display:flex;gap:6px;overflow-x:auto;margin-top:8px;padding-bottom:2px}

.ghost-bonus{margin:10px 0;background:#151824;border:1px solid #4a6a74;border-radius:10px;padding:10px}
.ghost-bonus>b{display:block;color:#a0d3d0;font-size:13px}
.ghost-bonus>small{display:block;color:#96a5a5;font-size:14px;line-height:1.5;margin-top:3px}
.ghost-action-tabs{display:flex;gap:6px;margin-top:8px}
.ghost-action-tabs button{flex:1;background:#0e1620;border:1px solid #3d4a4e;border-radius:8px;padding:7px 4px;font-size:14px;color:#c9d3d3}
.ghost-action-tabs button.sel{border-color:#a0d3d0;color:#a0d3d0;background:#16242a}
.ghost-give-panel{margin-top:8px}
.ghost-give-panel>small{display:block;color:#8996a0;font-size:13px;margin-bottom:4px}
.hunt-target.mini:disabled,.hunt-item.mini:disabled{opacity:.3;pointer-events:none}
.hunt-item.mini small{display:block;color:#8996a0;font-size:13px;margin-top:2px;line-height:1.3;white-space:normal}
.ghost-action-tabs button:disabled{opacity:.4}
.ghost-confirmed-note{margin-top:8px;padding:8px 10px;background:#122415;border:1px solid #3a7a4a;border-radius:8px;font-size:13px;color:#a8d8b4;display:flex;align-items:center;justify-content:space-between;gap:8px}
.ghost-recheck{flex:0 0 auto;background:none;border:1px solid #a8d8b4;color:#a8d8b4;font-size:13px;padding:3px 8px;border-radius:6px}
.ghost-give-row{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px;margin-top:6px}
.ghost-give-row .hunt-item.mini{flex:0 0 auto;padding:6px 10px}
.ghost-give-row .hunt-target.mini{flex:0 0 60px}
.hunt-target.mini{flex:0 0 64px;padding:5px;text-align:center}
.hunt-target.mini img{width:100%;height:56px;object-fit:cover;border-radius:5px;float:none;margin:0 0 4px}
.hunt-target.mini b{font-size:14px;display:block}

/* Ending-screen faction reveal — hidden all game, paid off here */
.death-report{margin-top:14px;padding-top:12px;border-top:1px dashed #6a5535}
.death-report-kicker{color:#d9b16a;font-size:14px;letter-spacing:.12em;margin-bottom:8px}
.death-report-row{display:flex;align-items:center;gap:9px;padding:7px 0;border-bottom:1px solid #2c2224}
.death-report-row:last-child{border-bottom:none}
.death-report-row img{width:34px;height:44px;object-fit:cover;border-radius:5px;filter:grayscale(0)}
.death-report-row.dead img{filter:grayscale(.85);opacity:.7}
.death-report-row b{display:block;font-size:15px;color:#f0e3c4}
.death-report-row small{display:block;font-size:14px;margin-top:2px}
.death-report-row.alive small{color:#8fd0a0}
.death-report-row.dead small{color:#c98a8a}

.conductor-reveal{padding:6px 2px;text-align:left}
.conductor-reveal.epilogue{padding:10px}
.conductor-reveal.epilogue p{color:#c9c0b8}
.conductor-reveal.epilogue p:last-child{color:#e8c07a;font-weight:600;text-align:center;margin-top:16px}
.conductor-reveal-kicker{color:#e8c07a;font-size:13px;letter-spacing:.14em;text-align:center;margin-bottom:10px}
.conductor-reveal p{font-family:serif;font-size:12.5px;line-height:1.85;color:#f0e3c4;margin-bottom:10px}

.soul-act-card.locked{opacity:.45}
.soul-act-card button{margin-top:8px}

.canonical-ending{margin-top:14px;padding:14px;background:linear-gradient(180deg,#1a1622,#0a080c);border:1px solid #6a5535;border-radius:10px}
.canonical-ending-kicker{color:#d9b16a;font-size:14px;letter-spacing:.14em;text-align:center;margin-bottom:6px}
.canonical-ending h4{font-family:serif;font-size:16px;color:#f0e3c4;text-align:center;margin:0 0 8px}
.canonical-ending p{font-size:14px;line-height:1.75;color:#cbc0d0}

.share-block{margin-top:14px}
.share-block button{background:linear-gradient(135deg,#8b3035,#4b1518,#8b3035);border:1px solid #e8c07a}

.faction-winner{margin-top:14px;padding:14px;background:linear-gradient(180deg,#2a1620,#0d090c);border:1px solid #a9432f;border-radius:10px;text-align:center}
.faction-winner-kicker{color:#e8c07a;font-size:14px;letter-spacing:.14em;margin-bottom:8px}
.faction-winner-text{font-family:serif;font-size:16px;color:#f0e3c4;line-height:1.7;margin-bottom:8px}
.faction-winner-tally{font-size:14px;color:#a99a87;letter-spacing:.04em}
.faction-reveal{margin-top:14px;padding-top:12px;border-top:1px dashed #6a5535}
.faction-reveal-kicker{color:#d9b16a;font-size:14px;letter-spacing:.12em;margin-bottom:8px}
.faction-reveal-row{display:flex;align-items:center;gap:9px;padding:7px 0;border-bottom:1px solid #2c2224}
.faction-reveal-row:last-child{border-bottom:none}
.faction-reveal-row img{width:34px;height:44px;object-fit:cover;border-radius:5px}
.faction-reveal-row b{display:block;font-size:15px;color:#f0e3c4}
.faction-reveal-row small{display:block;font-size:14px;color:#c79a56;margin-top:2px}
.faction-reveal-row.is-you{background:#1c1418;border-radius:8px;padding-left:6px}
.hunt-screen{overflow:auto!important}
.hunt-items:empty{display:none}
#corpseCase .station-map-card{display:block}
@media(min-width:431px){#app{width:430px!important}.screen,.drawer,.overlay-screen,.vn-screen,.memory-screen,.hunt-screen,.letter-screen,.ending-screen{width:430px!important}}

/* v23 centered popup guidance */
.milestone-card{
  text-align:center!important;
  width:calc(100% - 28px)!important;
  max-width:402px!important;
  padding:22px 18px!important;
  box-sizing:border-box!important;
}
.milestone-card .seal,
.milestone-card h2,
.milestone-card p{
  text-align:center!important;
  margin-left:auto!important;
  margin-right:auto!important;
}
.milestone-card p{
  max-width:340px!important;
  line-height:1.75!important;
}
.milestone-card .primary{
  width:100%!important;
  margin-top:14px!important;
}
#caseBody .info-card{
  text-align:center!important;
}
#caseBody .info-card p,
#caseBody .info-card h3{
  text-align:center!important;
}

/* v24 UI alignment, larger logo, clean map labels, drag/drop ordering */
.intro-copy{
  left:22px!important;
  right:22px!important;
  bottom:calc(18px + env(safe-area-inset-bottom))!important;
}
.game-title{
  font-size:86px!important;
  line-height:.92!important;
  margin:3px 0 10px!important;
  text-shadow:0 0 16px #a92f38,0 0 34px #6d1620!important;
}
.intro-copy>span{font-size:14px!important}

.character-sheet{
  grid-template-columns:46% minmax(0,1fr)!important;
  align-items:start!important;
}
.character-sheet img{
  height:260px!important;
  object-position:center 18%!important;
}
.character-sheet>div{min-width:0!important}
.character-sheet .info-card{max-width:100%!important;overflow-wrap:anywhere}

.station-map{height:235px!important}
.map-pin.number-pin{
  width:31px!important;height:31px!important;
  padding:0!important;
  display:grid!important;place-items:center!important;
  font-size:14px!important;
  line-height:1!important;
}
.map-pin.number-pin small{display:none!important}
/* Station map visual is collapsed by default — the compact map-notes list below
   already carries the same information in far less vertical space. */
.station-map-card .map-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.map-toggle-btn{flex-shrink:0;background:#1a232c;border:1px solid #5d4930;color:#e0b66d;font-size:14px;padding:5px 10px;border-radius:8px}
#cfSceneTab .station-map-card #stationMap{display:block;max-height:290px;margin-top:0}
.map-notes{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:6px;
  margin-top:9px;
}
.map-note{
  display:grid;
  grid-template-columns:20px minmax(0,1fr);
  gap:6px;
  align-items:center;
  width:100%;
  min-width:0;
  border:1px solid #4d402f;
  background:#09131a;
  border-radius:8px;
  padding:6px 7px;
  text-align:left;
}
.map-note>b{
  width:18px;height:18px;border-radius:50%;
  display:grid;place-items:center;
  background:#9b2e37;border:1px solid #e3ba72;color:#fff;
  font-size:13px;
}
.map-note>span{color:#e0b66d;font-weight:700;font-size:14px;grid-column:2;display:block}
.map-note>small{grid-column:2;min-width:0;color:#8996a0;font-size:13px;line-height:1.3;overflow-wrap:anywhere}

/* Merged instruction block: collapsed to one line by default, tap to expand. */
.puzzle-tip{padding:0!important;overflow:hidden}
.tip-head{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;background:transparent;text-align:left}
.tip-head b{color:#e0b66d;font-size:13px;font-weight:600}
.tip-caret{flex-shrink:0;font-size:13px;color:#8f9aa2;border:1px solid #4d402f;border-radius:8px;padding:2px 8px}
.tip-body{display:none;padding:0 10px 10px}
.puzzle-tip.open .tip-body{display:block}
.case-file-toggle.open .tip-body{display:block}
.tip-body p{color:#aeb9bf;font-size:14px;line-height:1.5;margin:0 0 6px}
.tip-body p:last-child{margin-bottom:0}

.corpse-card-head{display:flex;align-items:center;flex-wrap:wrap;gap:6px}
.corpse-card-head>b{flex:1;min-width:0}

.drag-help{font-size:14px;color:#93a1aa;line-height:1.45;margin:6px 0 9px}
.sequence-slots.drag-slots{
  display:grid!important;
  grid-template-columns:repeat(5,minmax(0,1fr))!important;
  gap:5px!important;
}
.seq-slot.drop-zone{
  min-width:0!important;
  height:91px!important;
  border:1px dashed #6b5b47!important;
  border-radius:8px!important;
  padding:4px!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:flex-start!important;
  gap:4px!important;
  background:#091118!important;
  transition:.15s ease;
}
.seq-slot.drop-zone.over{
  border-color:#e0b66d!important;
  background:#1b1712!important;
  transform:translateY(-2px);
}
.slot-no{
  width:22px;height:22px;border-radius:50%;
  display:grid;place-items:center;
  background:#171d22;color:#e0b66d;
  font-size:14px;font-weight:800;
  flex:0 0 auto;
}
.slot-empty{font-size:13px;color:#66757f;text-align:center;margin-top:10px}
.corpse-pool{
  display:flex;
  flex-wrap:wrap;
  gap:6px;
  padding:9px 0 4px;
  min-height:49px;
}
.drag-corpse{
  border:1px solid #735f41;
  background:#111920;
  border-radius:7px;
  color:#f1e8d8;
  padding:8px 9px;
  font-size:14px;
  line-height:1.2;
  cursor:grab;
  touch-action:none;
}
.drag-corpse.placed{
  width:100%;
  height:54px;
  padding:5px 3px;
  font-size:13px;
  overflow:hidden;
}
.drag-corpse.dragging{opacity:.35}
.drag-corpse.armed{border-color:#e0b66d;box-shadow:0 0 0 1px #e0b66d}

#corpseCase .corpse-card{
  pointer-events:none;
}
#sequenceHint{
  text-align:left!important;
  line-height:1.55!important;
}

/* v25: restore requested title scale + exact last-reference carriage background */
.intro-copy .game-title{
  font-size:112px!important;
  line-height:.82!important;
  letter-spacing:.02em!important;
  margin:6px 0 14px!important;
  white-space:nowrap!important;
}
.intro-copy .game-title span{
  display:inline-block!important;
  text-shadow:0 0 18px #b5313b,0 0 42px #761820!important;
}

/* Now intentionally switched to the illustrated carriage scene the user asked
   for (assets/mem_carriage.jpg). This is safe this time because the interactive
   layer (renderActors) no longer draws its own pixel sprites or name labels on
   top — just invisible hit-zones — so there's no duplicate-label collision like
   the earlier broken background had. */
.carriage{
  min-height:500px;
  background:
    linear-gradient(#02060a10,#02060a30),
    url('assets/mem_carriage.jpg') center 22%/cover no-repeat;
  border-color:#4a3828;
}
.carriage .back-wall,
.carriage .door,
.carriage .window,
.carriage .curtain,
.carriage .rack,
.carriage .bench,
.carriage .floor-lamp,
.carriage .crate,
.carriage .paper{
  display:none;
}
.actor-zone{position:absolute;width:19%;height:38%;transform:translate(-50%,-50%);border:0;background:none;padding:0;z-index:8;border-radius:50%}
.actor-zone.ghost-actor{background:radial-gradient(ellipse, #7a3bbf44, transparent 70%)}

/* v26 direct full-card drag */
.corpse-drag-source{
  display:grid!important;
  gap:9px!important;
}
.corpse-card.draggable-corpse{
  position:relative;
  cursor:grab!important;
  user-select:none!important;
  -webkit-user-select:none!important;
  touch-action:none!important;
  pointer-events:auto!important;
  transition:transform .15s ease,border-color .15s ease,opacity .15s ease!important;
}
.corpse-card.draggable-corpse:active{cursor:grabbing!important}
.corpse-card.draggable-corpse.dragging{
  opacity:.38!important;
  transform:scale(.985)!important;
}
.corpse-card.draggable-corpse.placed{
  border-color:#8a693e!important;
  background:#0c1319!important;
}
.corpse-card-head{
  display:flex!important;
  justify-content:space-between!important;
  gap:8px!important;
  align-items:center!important;
}
.drag-badge,.placed-badge{
  flex:0 0 auto;
  font-size:13px;
  border-radius:999px;
  padding:3px 7px;
  border:1px solid #745f40;
  color:#dcb36b;
  background:#071017;
}
.placed-badge{
  border-color:#a0733c;
  color:#f0cf89;
}
.sequence-slots.drag-slots{
  display:grid!important;
  grid-template-columns:repeat(5,minmax(0,1fr))!important;
  gap:5px!important;
  margin:10px 0!important;
}
.seq-slot.drop-zone{
  min-width:0!important;
  height:78px!important;
  display:flex!important;
  flex-direction:column!important;
  justify-content:center!important;
  align-items:center!important;
  text-align:center!important;
  border:1px dashed #665640!important;
  border-radius:8px!important;
  background:#081117!important;
  padding:5px!important;
}
.seq-slot.drop-zone.over{
  border:2px solid #e0b66d!important;
  background:#211a12!important;
  box-shadow:0 0 16px #d6a95544!important;
}
.slot-no{
  width:23px!important;height:23px!important;border-radius:50%!important;
  display:grid!important;place-items:center!important;
  background:#181e23!important;color:#e0b66d!important;
  font-weight:800!important;font-size:14px!important;
  margin-bottom:5px!important;
}
.slot-label{
  font-size:13px!important;
  color:#c2ccd2!important;
  line-height:1.25!important;
  overflow-wrap:anywhere!important;
}
.touch-drag-ghost{
  position:fixed!important;
  z-index:9999!important;
  transform:translate(-50%,-50%) scale(.84)!important;
  pointer-events:none!important;
  opacity:.9!important;
  box-shadow:0 18px 45px #000b!important;
  max-width:360px!important;
}
#corpseCase .corpse-card{pointer-events:auto!important}

/* v28 — requested logo, clean carriage, mobile corpse puzzle */
.game-logo-exact{
  display:block!important;
  width:min(68vw,290px)!important;
  height:auto!important;
  object-fit:contain!important;
  object-position:left center!important;
  margin:4px 0 12px -3px!important;
  filter:drop-shadow(0 0 14px #8f2535)!important;
}
.actor{z-index:20!important}
.actor img{width:40px!important;height:60px!important}
.actor span{font-size:13px!important;max-width:54px!important}

/* Compact five-body screen: no giant vertical cards. */
#corpseCase .overlay-body{padding:10px 10px 88px!important}
#corpseCase .case-intro{padding:11px 12px!important;margin-bottom:9px!important}
#corpseCase .case-intro h2{font-size:18px!important;margin:4px 0!important}
#corpseCase .case-intro p{font-size:14px!important;line-height:1.45!important}
#corpseCase .station-map-card{margin-bottom:9px!important}
#corpseCase .corpse-cards{
  display:grid!important;
  grid-template-columns:1fr!important;
  gap:6px!important;
}
#corpseCase .corpse-card{
  min-height:0!important;
  padding:9px 10px!important;
  margin:0!important;
  border-radius:9px!important;
}
#corpseCase .corpse-card-head b{font-size:16px!important}
#corpseCase .corpse-card p{
  font-size:15px!important;
  line-height:1.45!important;
  margin:4px 0 0!important;
}
#corpseCase .sequence-board{
  margin-top:9px!important;
  padding:10px!important;
}
#corpseCase .puzzle-tip{padding:8px!important;font-size:13px!important}
#corpseCase .drag-help{font-size:13px!important;margin:6px 0!important}
#corpseCase .sequence-slots.drag-slots{
  grid-template-columns:repeat(5,1fr)!important;
  gap:4px!important;
}
#corpseCase .seq-slot.drop-zone{
  height:62px!important;
  padding:3px!important;
  touch-action:none!important;
}
#corpseCase .slot-label{font-size:12px!important}
#corpseCase .slot-no{width:20px!important;height:20px!important;font-size:13px!important}
.draggable-corpse{touch-action:none!important;-webkit-user-drag:element!important}
.draggable-corpse.selected-drag{
  outline:2px solid #e5b96d!important;
  box-shadow:0 0 18px #d39a4244!important;
}
.touch-drag-ghost{
  position:fixed!important;
  z-index:99999!important;
  transform:translate(-50%,-50%) scale(.82)!important;
  width:min(86vw,360px)!important;
  pointer-events:none!important;
  opacity:.92!important;
}
@media(max-width:480px){
  .intro-copy{left:20px!important;right:20px!important}
  .game-logo-exact{width:235px!important}
  .carriage{min-height:470px!important}
}

/* Final override: the illustrated carriage (assets/mem_carriage.jpg) is
   900x600 (landscape). Forcing the container to that exact aspect ratio,
   rather than a fixed portrait min-height, means background-size:cover
   never needs to crop — so the percentage-based hit-zone positions (which
   are calibrated against the full, uncropped image) always land on the
   right character regardless of screen width. This intentionally comes
   last in the stylesheet so it wins over earlier fixed-height rules. */
.carriage{
  height:auto!important;
  min-height:0!important;
  aspect-ratio:900/600!important;
  background-size:cover!important;
  background-position:center!important;
}
/* Five Bodies case-file four-tab restructure */
.case-file-tabs-wrap{margin:10px 0 14px}
.case-file-tabs{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:8px}
@media (min-width:400px){.case-file-tabs{grid-template-columns:repeat(4,1fr)}}
.cf-tab{background:#0e1319;border:1px solid #5d4930;color:#9aa5ab;font-size:13px;padding:9px 4px;border-radius:8px;text-align:center}
.cf-tab.active{background:#2a2010;border-color:#e0b66d;color:#e0c78a;font-weight:600}
.case-file-body{background:#071018;border:1px solid #3a3226;border-radius:10px;padding:10px}
.cf-empty-note{color:#7c8890;font-size:13px;margin:4px 0}
.cf-corpse-card{background:linear-gradient(145deg,#15181b,#0a0e12);border:1px solid #5c4931;border-radius:9px;padding:10px 12px;margin-bottom:8px}
.cf-corpse-card:last-child{margin-bottom:0}
.cf-corpse-id{color:#e0b66d;font-size:14px;font-weight:600;margin:0 0 5px}
.cf-corpse-text{color:#c8d0d5;font-size:13.5px;line-height:1.55;margin:0}
.cf-corpse-details{margin-top:8px;padding-top:8px;border-top:1px solid #3a3226}
.cf-corpse-details small{color:#9ba8b0;font-size:12.5px;line-height:1.6}
.cf-detail-toggle{display:block;width:100%;text-align:left;background:none;border:none;color:#8a9096;font-size:12.5px;padding:8px 0 0;margin-top:4px}
.cf-records-group{color:#e0b66d;font-size:13px;font-weight:600;margin:10px 0 6px}
.cf-records-group:first-child{margin-top:0}
.cf-record-item{border-bottom:1px solid #2a241c}
.cf-record-item:last-child{border-bottom:none}
.cf-record-head{display:flex;justify-content:space-between;align-items:center;width:100%;background:none;border:none;color:#c8d0d5;font-size:13.5px;padding:9px 2px;text-align:left}
.cf-record-caret{color:#8a9096;font-size:12px}
.cf-record-body{color:#9ba8b0;font-size:13px;line-height:1.6;padding:0 2px 10px}
#cfSceneTab .station-map-card{margin:0}
.cf-corpse-summary-line{color:#c8d0d5;font-size:13.5px;line-height:1.6;margin:0}
.cf-detail-label{color:#e0b66d;font-size:12px;font-weight:600;margin:8px 0 2px}
.cf-detail-label:first-child{margin-top:0}
.cf-corpse-details p:not(.cf-detail-label){color:#c8d0d5;font-size:13px;line-height:1.55;margin:0 0 4px}
/* Fang divination mini-game */
.hex-lines{display:flex;flex-direction:column-reverse;gap:10px;margin:16px 0;min-height:140px}
.hex-line{height:14px;display:flex;gap:6px;opacity:0;transform:translateY(6px);transition:opacity .4s,transform .4s}
.hex-line.shown{opacity:1;transform:translateY(0)}
.hex-line .bar{flex:1;background:#d6ad67;border-radius:3px}
.hex-line.broken .bar{flex:1;background:transparent;border-top:14px solid transparent;position:relative}
.hex-line.broken .bar::before,.hex-line.broken .bar::after{content:"";position:absolute;top:0;height:14px;background:#d6ad67;border-radius:3px;width:44%}
.hex-line.broken .bar::before{left:0}
.hex-line.broken .bar::after{right:0}
.hex-timing-wrap{margin:20px 0}
.hex-timing-track{position:relative;height:28px;background:#161f29;border:1px solid #51402c;border-radius:14px;overflow:hidden;margin-bottom:14px}
.hex-timing-zone{position:absolute;top:0;bottom:0;background:#3a2f18;border-left:2px solid #e0b66d;border-right:2px solid #e0b66d}
.hex-timing-cursor{position:absolute;top:2px;bottom:2px;width:4px;background:#e0c78a;border-radius:2px}
.hex-result-text{color:#c9d0d4;font-size:14px;line-height:1.7;min-height:20px;text-align:center}
.fang-apparition-overlay{position:fixed;inset:0;background:#000;z-index:260;display:none;align-items:center;justify-content:center;padding:40px;opacity:0;transition:opacity 1.2s}
.fang-apparition-overlay.show{display:flex!important;opacity:1}
.fang-apparition-overlay p{color:#d8dde0;font-size:19px;line-height:1.9;text-align:center;max-width:600px}
/* Zhang code-box mini-game */
.zhang-code-display{text-align:center;font-size:32px;letter-spacing:10px;color:#e0c78a;margin:20px 0;font-family:monospace}
.zhang-keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;max-width:280px;margin:0 auto}
.zhang-keypad button{background:#161f29;border:1px solid #51402c;border-radius:8px;color:#dbe3e6;font-size:20px;padding:16px 0;min-height:52px}
.zhang-keypad button.wide{grid-column:span 1}
/* Qi dice mini-game */
.qi-dice-result{text-align:center;font-size:36px;letter-spacing:14px;margin:16px 0;min-height:50px}
.qi-bet-row,.qi-choice-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:10px 0}
.qi-bet-row button,.qi-choice-row button{background:#161f29;border:1px solid #51402c;border-radius:8px;color:#dbe3e6;font-size:16px;padding:14px 0;min-height:48px}
.qi-bet-row button.selected,.qi-choice-row button.selected{border-color:#e0b66d;background:#2a2010;color:#e0c78a}
/* Hu shooting mini-game */
.hu-shoot-field{position:relative;height:360px;background:#0a0e12;border:1px solid #3a3226;border-radius:10px;overflow:hidden;margin:14px 0}
.hu-target{position:absolute;width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;border:2px solid #e0b66d}
.hu-target.valid{background:#3a2f18;color:#e0c78a}
.hu-target.noshoot{background:#3a1818;color:#e08a8a}
.hu-target.final{background:#1a1a1a;color:#dbe3e6;width:70px;height:90px;border-radius:8px}
/* Hong rhythm mini-game */
.hong-combo-display{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin:16px 0;min-height:40px}
.hong-combo-display span{padding:6px 12px;border-radius:6px;background:#161f29;border:1px solid #51402c;color:#8a9096;font-size:14px}
.hong-combo-display span.current{border-color:#e0b66d;color:#e0c78a}
.hong-combo-display span.done{opacity:.4}
.hong-combo-display span.broken{border-color:#a06a5a;color:#d69a8a;text-decoration:line-through}
.hong-input-row{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.hong-input-row button{background:#161f29;border:1px solid #51402c;border-radius:8px;color:#dbe3e6;font-size:16px;padding:16px 0;min-height:52px}
/* Luo falling-object mini-game */
.luo-tray{position:absolute;width:56px;height:36px;background:#e0b66d;border-radius:6px}
.luo-catch-field{position:relative;height:360px;background:#0a0e12;border:1px solid #3a3226;border-radius:10px;overflow:hidden;margin:14px 0;touch-action:none}
.luo-dir-pad-2d{display:grid;grid-template-columns:repeat(3,64px);grid-template-rows:repeat(2,56px);gap:6px;max-width:280px;margin:0 auto;justify-content:center}
.luo-dir-pad-2d button{background:#161f29;border:1px solid #51402c;border-radius:8px;color:#dbe3e6;font-size:22px;user-select:none;-webkit-user-select:none}
.luo-fall-item{position:absolute;width:44px;height:28px;border-radius:5px;display:flex;align-items:center;justify-content:center;font-size:11px;color:#0a0e12;font-weight:600}
.luo-fall-item.pos{background:#8ac07a}
.luo-fall-item.neg{background:#c07a7a}
.hu-crosshair{position:absolute;width:34px;height:34px;border:2px solid #e0b66d;border-radius:50%;pointer-events:none;transform:translate(-50%,-50%);left:50%;top:50%}
.hu-crosshair::before,.hu-crosshair::after{content:"";position:absolute;background:#e0b66d}
.hu-crosshair::before{left:50%;top:-6px;width:2px;height:10px;transform:translateX(-50%)}
.hu-crosshair::after{left:-6px;top:50%;width:10px;height:2px;transform:translateY(-50%)}
#huFireBtn{width:100%;margin-top:10px}
/* Zhang ordering puzzle */
.zhang-slot-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:14px 0}
.zhang-slot-row .slot{min-height:70px;background:#0a0e12;border:1px dashed #51402c;border-radius:8px;display:flex;align-items:center;justify-content:center;padding:6px;font-size:12px;color:#8a9096;text-align:center}
.zhang-slot-row .slot.filled{border-style:solid;border-color:#e0b66d;color:#e0c78a}
.zhang-card-row{display:flex;flex-direction:column;gap:8px}
.zhang-card{background:linear-gradient(145deg,#15181b,#0a0e12);border:1px solid #5c4931;border-radius:9px;padding:10px 12px;font-size:13.5px;line-height:1.55;color:#c8d0d5}
.zhang-card.selected{border-color:#e0b66d}
.zhang-card.used{opacity:.35}
/* Guo Siyao event reconstruction board */
.guo-recon-timeline{display:flex;flex-direction:column;gap:8px;margin:14px 0}
.guo-recon-slot{background:#0a0e12;border:1px solid #3a3226;border-radius:9px;padding:10px 12px}
.guo-recon-slot .slot-label{color:#e0b66d;font-size:13px;font-weight:600;margin-bottom:4px}
.guo-recon-slot.locked{opacity:.5}
.guo-recon-slot.unresolved{border-style:dashed}
.guo-recon-slot.resolved{border-style:solid;border-color:#8ac07a}
.guo-recon-slot .placed-item{color:#c8d0d5;font-size:13px;line-height:1.5;margin-top:4px;padding:6px 8px;background:#161f29;border-radius:6px}
.guo-recon-slot .slot-hint{color:#6a7278;font-size:12px;font-style:italic}
.guo-recon-feedback{min-height:20px;color:#d69a8a;font-size:13.5px;line-height:1.6;margin:8px 0}
.guo-recon-tray{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.guo-recon-tray .evidence-card{background:linear-gradient(145deg,#15181b,#0a0e12);border:1px solid #5c4931;border-radius:9px;padding:10px 12px;font-size:13px;line-height:1.5;color:#c8d0d5}
.guo-recon-tray .evidence-card.selected{border-color:#e0b66d}
.guo-recon-final{background:#0a0e12;border:1px solid #51402c;border-radius:10px;padding:14px;margin:14px 0;text-align:center}
.guo-recon-final .final-item{display:inline-block;padding:10px 14px;margin:6px;border-radius:8px;background:#161f29;border:1px solid #51402c;color:#dbe3e6;font-size:13.5px}
.guo-recon-final .final-item.selected{border-color:#e0b66d;color:#e0c78a}
.guo-recon-tray-label{color:#8a9096;font-size:12px;margin:10px 0 4px}
.evidence-card.context{opacity:.7;font-size:12.5px}
.evidence-card.unresolved-clue{border-style:dashed;opacity:.85}
.evidence-card.unresolved-clue small{display:block;color:#8a9096;margin-top:4px}
/* Guo Siyao investigation game (v131) */
.guo-investigate-areas{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:14px 0}
.guo-investigate-area{background:#0a0e12;border:1px solid #3a3226;border-radius:10px;padding:16px 10px;text-align:center;font-size:14px;color:#dbe3e6}
.guo-investigate-area.checked{border-color:#8ac07a;color:#c8e0be}
.guo-investigate-area .area-icon{font-size:26px;display:block;margin-bottom:6px}
.guo-investigate-detail{background:#0a0e12;border:1px solid #51402c;border-radius:10px;padding:14px;margin:10px 0;font-size:13.5px;line-height:1.6;color:#c8d0d5}
.guo-deduction-panel{margin-top:14px}
.guo-deduction-panel .evidence-card{cursor:pointer}
.guo-deduction-panel .evidence-card.selected{border-color:#e0b66d}
.guo-deduction-feedback{min-height:20px;color:#d69a8a;font-size:13.5px;margin:8px 0}
.guo-deduction-result{text-align:center;padding:12px;background:#0a0e12;border:1px solid #8ac07a;border-radius:10px;margin-top:10px}
/* Hong rhythm beat cue (v133.3) */
.hong-beat-indicator{width:90px;height:90px;border-radius:50%;background:#161f29;border:3px solid #51402c;margin:14px auto;display:flex;align-items:center;justify-content:center;font-size:28px;color:#dbe3e6;transition:transform .12s,background .12s,border-color .12s;position:relative}
.hong-beat-indicator.pulse{transform:scale(1.18);border-color:#e0b66d;background:#2a2216}
.hong-beat-indicator.correct{border-color:#8ac07a;background:#1a2a18}
.hong-beat-indicator.wrong{border-color:#c07a7a;background:#2a1818}
/* The phase-transition beat (breathing text + Continue) is genuine prose,
   not a single glyph — the fixed 90x90 circle above was never meant to
   hold it, and cramming it in caused overlapping/oversized content. This
   variant resets to a normal flexible block for that one screen only. */
.hong-beat-indicator.wide-content{width:100%;height:auto;border-radius:12px;flex-direction:column;padding:16px;font-size:15px;line-height:1.7;text-align:center}
.hong-beat-indicator.wide-content button{margin-top:12px;width:auto;max-width:220px}
/* The timing bar was previously a flex SIBLING of the cue text inside the
   same centered container — since the 90px circle is display:flex with
   justify-content:center, that centers the CUE TEXT AND BAR TOGETHER as a
   group, pushing the cue text visibly off-center (exactly the reported
   displaced-feedback bug), and the bar's own 220px max-width never fit
   inside a 90px circle anyway. Taking it out of the flex flow entirely —
   anchored below the circle via the circle's own position:relative above —
   lets the cue text be the circle's only flex child, genuinely centered. */
.hong-timing-bar{position:absolute;left:50%;bottom:-16px;transform:translateX(-50%);width:100%;max-width:220px;height:6px;background:#2a2216;border-radius:3px;overflow:hidden}
.hong-timing-fill{width:100%;height:100%;background:#e0b66d}
.hong-countdown{font-size:28px;text-align:center;color:#e0c78a}
/* Qi luggage puzzle (v136.2) */
.qi-luggage-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.qi-luggage-item{background:#0a0e12;border:1px solid #3a3226;border-radius:10px;padding:10px;text-align:left;font-size:13px;color:#dbe3e6;cursor:pointer}
.qi-luggage-item.selected{border-color:#e0b66d;background:#2a2216}
/* Fix v136.7: flashback/narrative overlays were stretching full-viewport-width
   on desktop, producing huge empty horizontal space around short centered
   text. Constrain the content column to a readable width. */
.fang-apparition-overlay{flex-direction:column;max-width:430px;left:0;right:0;margin-left:auto;margin-right:auto}
.fang-apparition-overlay>div,.fang-apparition-overlay .hex-result-text{max-width:390px;width:100%}
.fang-apparition-overlay button{max-width:390px;width:auto;display:block;margin:16px auto 0}
