:root{color-scheme:dark;--bg:#151e1c;--fg:#eeeade;--muted:#9ca89f;--accent:#efd4a2;--red:#c83848;--line:#354039;font-family:Inter,"PingFang SC","Microsoft YaHei",sans-serif;font-synthesis:none}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 65% 0,#2b3630 0,transparent 60%),var(--bg);color:var(--fg);font-size:14px}button,select,input{font:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:default;opacity:.35}button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:5px}button{transition:background .2s,transform .2s}button:active:not(:disabled){transform:translateY(1px)}[hidden]{display:none!important}a{color:inherit;text-decoration:none}.topbar{height:87px;max-width:1480px;margin:auto;padding:0 44px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #e7e9cf12}.brand{display:flex;align-items:center;gap:10px;font-size:18px;letter-spacing:2px;font-weight:600}.brand small{display:block;font-size:9px;font-weight:400;letter-spacing:3px;margin-top:3px;color:var(--muted)}.brand-mark{width:35px;height:35px;border:1px solid #c0b99b80;display:grid;place-items:center;border-radius:50%;color:var(--accent);font-family:serif;font-size:21px}.top-actions{display:flex;gap:26px}.quiet{border:0;background:transparent;color:var(--fg);padding:10px 0;font-size:13px}.quiet:hover{color:var(--accent)}main{max-width:1480px;margin:auto;padding:0 44px}.intro{display:flex;justify-content:space-between;align-items:center;padding:38px 0 30px}.eyebrow{font-size:12px;letter-spacing:2px;margin:0 0 18px;color:#bbc2b7;display:flex;align-items:center;gap:10px}.line-badge{background:var(--red);color:#fff;display:grid;place-items:center;border-radius:3px;width:21px;height:21px;letter-spacing:0;font-size:14px}h1{font-size:clamp(28px,3vw,43px);font-weight:500;letter-spacing:2px;margin:0 0 11px}h1 em{font-style:normal;color:var(--accent)}.title-dot{color:#68766a}.intro-sub{font-size:12px;letter-spacing:1px;color:var(--muted);margin:0}.destination{text-align:right;padding-right:3px;display:flex;flex-direction:column;gap:5px}.destination>span{font-size:11px;color:var(--muted);letter-spacing:2px}.destination strong{font-size:24px;font-weight:500;letter-spacing:4px}.destination small{font-size:9px;letter-spacing:2px;color:#b9bea9}.simulator{background:#101614;border:1px solid #3d473b;border-radius:9px;overflow:hidden;box-shadow:0 25px 60px #0003}.stage-label{display:flex;justify-content:space-between;padding:13px 20px;color:#afb8ab;font-size:10px;letter-spacing:2px}.live-dot{display:inline-block;width:5px;height:5px;border-radius:50%;background:#b4d48d;box-shadow:0 0 8px #aad97670;margin-right:4px}.carriage{position:relative;overflow:hidden;color:#31362e;background:linear-gradient(100deg,#b7b8ad,#e8e6dc 20%,#dcdcd2 70%,#b9bbaf);padding:0 24px;box-shadow:inset 0 0 16px #3f46394d}.ceiling{height:55px;margin:0 -24px;position:relative;background:linear-gradient(#9ea59a,#c7cbbf 70%,#777f73)}.handrail{position:absolute;height:15px;left:0;right:0;top:7px;background:linear-gradient(#777f79,#f1f3e8 27%,#a1a89d 45%,#667263 67%,#d4d9c9);box-shadow:0 4px 5px #303b3466}.vent{position:absolute;left:0;right:0;bottom:3px;height:19px;background:repeating-linear-gradient(#9ca597 0,#9ca597 1px,#d3d6c9 1px,#d3d6c9 4px);border-bottom:2px solid #737c6c}.tube-light{height:18px;max-width:900px;width:78%;margin:14px auto 18px;border-radius:5px;background:#fffff3;box-shadow:0 0 9px #ffffe9,0 0 28px #ffffdaaa;border:1px solid #eff2da}.fascia{position:relative;border-radius:4px 4px 30px 30px;padding:6px 9px 0;background:linear-gradient(#cecec0,#eeece0 85%,#b1b5a6);box-shadow:0 5px 7px #737b6266}.map-frame{position:relative;border:1px solid #9da58c;border-radius:3px;background:linear-gradient(108deg,#eeeee1,#f8f7e9 50%,#e2e6d5);box-shadow:inset 0 0 16px #aeb99e44,0 1px 1px #fff9;padding:5px 20px 0}.map-frame:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(105deg,transparent 0,transparent 30%,#fff4 46%,transparent 49%,#fff1 75%,transparent 80%)}.map-scroll{overflow-x:auto;scrollbar-width:thin;scrollbar-color:#a9af98 transparent;scroll-behavior:smooth}.map-scroll svg{display:block;width:100%;min-width:1120px;height:auto}.screw{position:absolute;top:47%;width:7px;height:7px;border-radius:50%;background:linear-gradient(70deg,#8c9282,#d3d7c5,#8f9582);box-shadow:0 0 1px #4d5949;z-index:2}.screw:after{content:"";height:1px;width:5px;background:#6f7865;position:absolute;left:1px;top:3px;transform:rotate(-30deg)}.screw.left{left:6px}.screw.right{right:6px}.fascia-bottom{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;color:#747b68;font-size:9px;letter-spacing:1px}.door-indicator{display:flex;gap:7px;align-items:center;font-size:11px;color:#444f37}.door-indicator>span:first-child{width:5px;height:5px;background:#8a9080;border-radius:50%;box-shadow:inset 0 0 2px #4b573b}.door-indicator>span:first-child.on{background:#b4f14a;box-shadow:0 0 6px #87bc2b}.door-glyph{font-size:16px;letter-spacing:3px;margin-left:8px}.digital-area{display:flex;gap:20px;align-items:center;max-width:690px;margin:12px auto 13px}.speaker-grille{width:36px;height:28px;background:radial-gradient(circle,#687360 1px,transparent 1.5px);background-size:5px 5px;flex-shrink:0;opacity:.65}.led-display{background:#101b13;border:3px solid #8f9882;border-radius:4px;height:52px;box-shadow:inset 0 2px 7px #0009,0 1px 1px #fff7;position:relative;flex:1;overflow:hidden;display:flex;align-items:center;justify-content:center;padding:0 10px;min-width:0}.led-display:after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle,transparent 0,transparent 1.1px,#0d160eb0 1.4px);background-size:3px 3px;opacity:.6}.led-copy{font-family:"PingFang SC",monospace;font-size:24px;color:#f59c41;font-weight:500;letter-spacing:4px;text-shadow:0 0 4px #f59c4170;white-space:nowrap}.led-copy.english{font-size:17px;letter-spacing:2px}.door-scene{position:relative;max-width:720px;height:172px;margin:0 auto;background:#8a9280;overflow:hidden;border:6px solid #b3b9a8;border-bottom:0;border-radius:8px 8px 0 0;box-shadow:0 0 0 1px #909a85,0 -2px 2px #fff5}.door-warning{position:absolute;top:0;left:0;right:0;height:15px;text-align:center;background:repeating-linear-gradient(45deg,#d9b853 0,#d9b853 12px,#383d2d 12px,#383d2d 24px);color:#242c22;font-size:8px;z-index:4}.door-warning:before{content:"";position:absolute;inset:0 25%;background:#d9b853;z-index:-1}.door-warning span{font-size:7px;margin-left:7px}.platform{position:absolute;inset:15px 0 0;background:linear-gradient(#596562,#32423e 48%,#6d7971 49%,#8f9991 66%,#636f68);transition:filter 1s}.platform-sign{display:flex;align-items:center;gap:14px;position:absolute;top:18px;left:0;right:0;padding:10px 24px;border-bottom:7px solid #bd3847;background:#e3e6d8;color:#38443b;box-shadow:0 1px 4px #1114;white-space:nowrap}.platform-sign #platform-name{font-size:21px;font-weight:500}.platform-sign small{font-size:9px;letter-spacing:2px}.platform-sign b{margin-left:auto;font-size:26px;font-weight:400}.platform-line{width:20px;height:24px;background:#c63848;color:#fff;text-align:center;padding-top:4px}.platform-columns{position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0,transparent 123px,#263b3160 123px,#263b3160 132px);pointer-events:none}.platform-edge{position:absolute;bottom:8px;height:6px;left:0;right:0;background:repeating-linear-gradient(90deg,#c9b65f 0,#c9b65f 3px,#a2954e 3px,#a2954e 4px)}.sliding-door{position:absolute;top:15px;bottom:0;width:50%;background:linear-gradient(95deg,#9ca797,#c8cec0 5%,#e0e1d4 47%,#b3beaa 93%,#7e8b77);border:1px solid #8b9981;transition:transform 1.8s cubic-bezier(.45,0,.2,1);z-index:2;box-shadow:0 0 4px #23342180}.door-left{left:0;border-right:3px solid #5c6d54}.door-right{right:0;border-left:3px solid #5c6d54}.window{position:absolute;top:20px;bottom:23px;left:17px;right:17px;border:4px solid #89987e;border-radius:8px;background:linear-gradient(110deg,#233a31dc,#3a4d43c9);box-shadow:inset 0 0 12px #101d17}.reflection{position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,#dce3cf14 31%,#dce3cf14 33%,transparent 34%,transparent 50%,#e4edcf19 51%,transparent 70%)}.door-handle{position:absolute;top:25px;bottom:10px;width:4px;background:linear-gradient(90deg,#627459,#f0f2dd,#8b9c7d);border-radius:4px}.door-left .door-handle{right:8px}.door-right .door-handle{left:8px}.sliding-door small{position:absolute;bottom:7px;left:0;right:0;font-size:8px;text-align:center;color:#77866c;letter-spacing:2px}.door-jamb{position:absolute;top:0;bottom:0;width:11px;background:linear-gradient(90deg,#a0ad93,#e2e7d3,#a6b298);z-index:3}.jamb-left{left:0}.jamb-right{right:0}.doors-open .door-left{transform:translateX(-100%)}.doors-open .door-right{transform:translateX(100%)}.platform,.in-motion .platform{filter:blur(var(--motion-blur,0px)) brightness(calc(.82 + var(--station-light,1)*.35))}.in-motion .platform-columns{animation:platform-pass 2.6s linear infinite}.stage-bottom{display:flex;justify-content:space-between;padding:14px 20px;font-size:10px;color:#a1ad9d}.light-key{display:flex;gap:20px}.light-key>span{display:flex;align-items:center;gap:6px}.light-key i{width:5px;height:5px;border-radius:50%;box-shadow:0 0 5px currentColor}.past{color:#f47d5a;background:currentColor}.future{color:#b5d771;background:currentColor}.upcoming{color:#e5c777;background:currentColor}.scroll-hint{display:none}.console{margin-top:20px;background:#1d2823;border:1px solid #38443a;border-radius:8px;padding:22px 23px 13px}.journey-row{display:flex;align-items:center;justify-content:space-between;gap:25px;padding-bottom:23px;border-bottom:1px solid #dae0cb13}.station-summary{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.small-label{font-size:10px;color:var(--muted);letter-spacing:1px}.station-summary strong{font-weight:500;font-size:17px}.journey-arrow{font-size:20px;color:#7b8b78;margin:0 5px}.trip-progress{width:175px;flex-shrink:0;display:flex;flex-direction:column;gap:7px}.progress-track{height:3px;background:#ffffff12;overflow:hidden}.progress-track span{height:100%;display:block;background:#d8bc87;transition:width .3s}.trip-progress>span{font-size:9px;color:var(--muted);text-align:right;letter-spacing:.5px}.controls-row{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:20px 0}.primary-controls,.secondary-controls{display:flex;align-items:center;gap:10px}.primary,.secondary,.square,.settings-button,.station-select select{height:43px;border-radius:4px;font-size:12px;border:1px solid #53604c;background:transparent;color:var(--fg);padding:0 17px}.primary{display:flex;align-items:center;justify-content:space-between;gap:31px;background:var(--accent);border-color:var(--accent);color:#273023;font-weight:600;min-width:137px}.primary:hover{background:#f8e3bb}.secondary:hover,.square:hover,.settings-button:hover{background:#cfd9bc12}.square{width:43px;padding:0}.secondary[aria-pressed=true]{background:#b5d39018;color:#dce9be;border-color:#94a57c}.secondary-controls{gap:20px}.station-select select{width:134px;background:#1d2823;border-color:#52604a;padding:0 8px;font-size:12px}.settings-button{height:35px;border:0;padding:0;font-size:11px;color:var(--muted)}.settings-button span{margin-left:7px}.console-foot{border-top:1px solid #dae0cb13;padding-top:12px;display:flex;justify-content:space-between;font-size:10px;color:#8d9d8b}kbd{font:inherit;background:#111c14;color:#a9b6a0;border-radius:3px;padding:2px 5px;margin:0 3px}.settings{border-top:1px solid #dae0cb13;padding:23px 0;display:grid;grid-template-columns:1fr 1fr 1fr;gap:35px}.settings label:not(.audio-options label){display:flex;justify-content:space-between;color:#ced6c3;font-size:11px}.settings output{color:#afbd9e}.settings input[type=range]{width:100%;accent-color:var(--accent);height:30px}.settings small,.sound-info p{font-size:10px;color:#9cae96;line-height:1.8;margin:6px 0 0}.audio-options{display:flex;justify-content:space-between;align-items:center;font-size:10px;color:#b8c7ae;gap:10px}.audio-options label{display:flex;align-items:center;gap:5px}.audio-options input{accent-color:var(--accent)}.text-button{border:0;background:transparent;color:#a8b69e;font-size:10px;padding:0;cursor:pointer}.text-button:hover{color:var(--accent)}footer{display:flex;justify-content:space-between;padding:26px 0 35px;color:#7e917d;font-size:10px;letter-spacing:.6px}.about{font-size:12px;color:#acbca4;line-height:1.9;max-width:780px;padding-bottom:30px}.about a{text-decoration:underline;text-underline-offset:4px;color:var(--accent)}.toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:#e9ddc4;color:#263122;box-shadow:0 6px 30px #0007;border-radius:5px;padding:12px 18px;z-index:100;max-width:90%;font-size:12px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.immersive-controls{display:none}.is-immersive .topbar,.is-immersive .intro,.is-immersive .console,.is-immersive footer,.is-immersive .about{display:none!important}.is-immersive main{max-width:none;padding:0}.is-immersive .simulator{min-height:100svh;border:0;border-radius:0;display:flex;flex-direction:column;justify-content:center}.is-immersive .carriage{padding-bottom:0}.is-immersive .map-scroll svg{min-width:1440px}.is-immersive .door-scene{height:clamp(190px,26vh,340px);max-width:900px}.is-immersive .immersive-controls{display:flex;justify-content:center;gap:20px;padding:25px}.immersive-controls button{border:1px solid #6b775e;border-radius:4px;background:#1d2823;color:var(--fg);padding:10px 20px}.led-bulb.next{animation:bulb-blink .8s steps(1,end) infinite}.led-halo.next{animation:halo-blink .8s steps(1,end) infinite}.train-cue{animation:train-cue 1.7s linear infinite}.route-hit{cursor:pointer}.route-hit:hover .station-name{fill:#b32b3e}.route-hit:focus-visible{outline:none}.route-hit:focus-visible .station-focus{stroke:#8e4d19;stroke-width:2;fill:#e9cb7720}.station-focus{fill:transparent;stroke:transparent}.route-map-text{font-family:"PingFang SC","Microsoft YaHei",sans-serif}.station-name{fill:#323e29;font-size:19px;font-weight:500}.station-english{fill:#606b4d;font-family:Arial,sans-serif;font-size:10px;letter-spacing:.25px}.map-heading{fill:#697156;font-size:12px}.selected-name{fill:#b52b3b}.station-position{fill:#996b23;font-size:11px;letter-spacing:1px}@keyframes bulb-blink{50%{fill:#8d8a43;filter:none}}@keyframes halo-blink{50%{opacity:0}}@keyframes train-cue{0%{opacity:.1;transform:translateX(-8px)}50%{opacity:1}100%{opacity:.1;transform:translateX(8px)}}@keyframes platform-pass{from{transform:translateX(0)}to{transform:translateX(-132px)}}
.transfer-audio-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding-top:15px;flex-wrap:wrap}.transfer-summary{display:flex;align-items:center;gap:9px;min-height:24px}.transfer-badge{font-size:11px;border-radius:3px;background:var(--transfer-color);padding:4px 8px;color:#fffdf0}.no-transfer{font-size:11px;color:#a3b29c}.voice-opt{font-size:11px;color:#c2ceb5;margin-bottom:10px}.voice-opt>label{justify-content:flex-start!important;gap:6px;align-items:center}.voice-opt input{accent-color:var(--accent)}.console-sound{color:var(--accent);background:#d7bf8c0c;border:1px solid #7b806052;border-radius:4px;padding:9px 12px;font-size:11px}.floating-sound{position:fixed;right:22px;bottom:22px;z-index:80;background:#e8d8b7;color:#263024;border:1px solid #f2e5cb;border-radius:9px;padding:12px 14px;box-shadow:0 5px 24px #0006;display:flex;gap:12px;align-items:center;min-height:59px}.floating-sound strong{display:block;font-size:12px;font-weight:600;text-align:left;letter-spacing:1px}.floating-sound small{display:block;font-size:10px;color:#596149;margin-top:4px}.sound-icon{font-size:25px}.sound-switch{width:29px;height:17px;border-radius:12px;background:#929780;position:relative;margin-left:4px}.sound-switch i{position:absolute;left:3px;top:3px;width:11px;height:11px;border-radius:50%;background:#f6f1df;transition:transform .2s}.floating-sound[aria-pressed=true] .sound-switch{background:#477039}.floating-sound[aria-pressed=true] .sound-switch i{transform:translateX(12px)}footer{padding-bottom:100px}.toast{bottom:97px}.topbar{position:relative;z-index:5}@media(max-width:720px){.floating-sound{right:12px;bottom:12px;padding:10px 12px;min-height:54px;gap:9px}.floating-sound strong{font-size:11px}.floating-sound small{font-size:9px}.sound-icon{font-size:20px}footer{padding-bottom:90px}.transfer-audio-row{gap:10px}.console-sound{padding:10px 11px;font-size:10px}.transfer-summary{gap:7px}.transfer-badge{font-size:10px}.toast{bottom:83px}}
.sample-buttons{display:flex;gap:8px;margin:12px 0}.sample-buttons .secondary{height:34px;font-size:10px;padding:0 10px}
.playback-mode{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:16px}.playback-mode label{display:flex;align-items:center;gap:12px;font-size:11px;color:#c2ceb5}.playback-mode select{max-width:100%;min-width:0;background:#18231d;border:1px solid #53604c;color:#e5e8d8;border-radius:4px;padding:9px 10px;font-size:11px}.playback-mode>span,.immersive-clock{font-family:monospace;font-variant-numeric:tabular-nums;letter-spacing:1px;color:var(--accent);font-size:12px}.video-timeline{border-bottom:1px solid #dae0cb13;margin-bottom:20px;padding-bottom:17px}.video-timeline>input{width:100%;accent-color:var(--accent);height:24px;margin:0}.timeline-caption{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:7px;font-size:10px;color:#b5c2aa}.video-stops{margin-top:15px;font-size:10px;color:#9cab95}.video-stops summary{cursor:pointer;width:fit-content;padding:5px 0}.video-stops p{line-height:1.8;margin:12px 0 0}.video-stops ol{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;padding:0;margin:12px 0}.video-stops button{width:100%;text-align:left;border:1px solid #4c584530;border-radius:3px;background:#121f1640;color:#bbc9af;padding:9px;font-size:10px;white-space:nowrap}.video-stops button:hover{background:#e8d8b714}.is-immersive .immersive-controls{position:fixed;z-index:75;bottom:92px;left:50%;transform:translateX(-50%);max-width:calc(100% - 24px);width:max-content;gap:10px;align-items:center;flex-wrap:wrap;padding:12px;background:#142018f2;border:1px solid #67725a;border-radius:8px;box-shadow:0 5px 30px #0005}.immersive-controls #immersive-auto[aria-pressed=true]{background:#d2bd8c;color:#253121;border-color:#e8d8b7}.immersive-controls button{font-size:11px;padding:10px 12px}.immersive-clock{padding:3px 4px;white-space:nowrap}
@media(max-width:720px){.playback-mode{gap:10px}.playback-mode label{width:100%;justify-content:space-between}.playback-mode select{font-size:11px;width:235px}.playback-mode>span{margin-left:auto}.video-stops ol{grid-template-columns:repeat(2,minmax(0,1fr))}.video-stops button{padding:10px 6px;font-size:10px}.timeline-caption{font-size:9px;align-items:flex-start}.timeline-caption .text-button{font-size:9px;white-space:nowrap}.is-immersive .immersive-controls{bottom:80px;gap:8px}.immersive-clock{width:100%;text-align:center}.immersive-controls button{font-size:10px;padding:10px}.video-timeline{margin-bottom:17px}}
.video-stops ol{grid-template-columns:repeat(2,minmax(0,1fr))}.video-stops button{white-space:normal;line-height:1.6;font-variant-numeric:tabular-nums}@media(max-width:720px){.video-stops ol{grid-template-columns:1fr}}
.is-paused .sliding-door{transition:none}.immersive-door-time{width:100%;text-align:center;font-size:11px;color:#e8d8b7;line-height:1.6}.sliding-door{transition-delay:0s}
@media(min-width:1300px){.map-scroll svg{min-width:0}}
@media(max-width:1140px){.controls-row{flex-wrap:wrap}.secondary-controls{margin-left:auto}.journey-row{gap:15px}.station-summary{gap:9px}.map-scroll svg{min-width:1160px}.scroll-hint{display:inline}.simulation-tag{display:none}}
@media(max-width:720px){.topbar{padding:0 20px;height:72px}.top-actions{gap:19px}.top-actions .quiet{font-size:12px}main{padding:0 16px}.intro{padding:29px 4px 24px}.eyebrow{font-size:10px;letter-spacing:1px;margin-bottom:14px}h1{font-size:27px;letter-spacing:1px}.intro-sub{font-size:10px;letter-spacing:0}.destination strong{font-size:18px;letter-spacing:2px}.destination>span{font-size:9px;letter-spacing:1px}.destination small{font-size:8px;letter-spacing:1px}.carriage{padding:0 9px}.fascia{padding:5px 4px 0}.map-frame{padding:3px 12px 0}.ceiling{margin:0 -9px;height:45px}.tube-light{margin:12px auto 15px;height:14px;width:88%}.map-scroll svg{min-width:1080px}.fascia-bottom{padding:9px 8px}.door-scene{height:146px}.digital-area{gap:10px;margin:10px 6px 12px}.speaker-grille{width:19px}.led-display{height:45px}.led-copy{font-size:20px;letter-spacing:2px}.led-copy.english{font-size:13px;letter-spacing:1px}.stage-label{padding:12px 13px;letter-spacing:1px;font-size:9px}.stage-label>span:last-child{font-size:8px}.stage-bottom{padding:13px 12px;font-size:9px;gap:10px;flex-wrap:wrap}.light-key{gap:12px}.scroll-hint{margin-left:auto;font-size:8px}.console{padding:18px 15px 13px;margin-top:15px}.journey-row{flex-direction:column;align-items:stretch;padding-bottom:17px;gap:14px}.station-summary{gap:9px}.station-summary strong{font-size:15px}.small-label{font-size:9px}.trip-progress{width:100%;gap:6px}.trip-progress>span{font-size:8px}.controls-row{padding:16px 0;gap:15px}.primary-controls{width:100%;gap:7px}.primary,.secondary,.square{height:43px;font-size:11px;padding:0 12px}.primary{min-width:100px;flex:1;gap:10px}.square{width:37px;flex-shrink:0;padding:0}.secondary-controls{width:100%;justify-content:space-between;gap:15px}.station-select{flex:1}.station-select select{height:38px;width:100%;font-size:12px}.settings-button{min-width:45px}.console-foot{font-size:9px}.console-foot>span:last-child{display:none}.settings{grid-template-columns:1fr;gap:20px;padding:20px 0}.settings label:not(.audio-options label){font-size:12px}.settings small,.sound-info p{font-size:11px}.settings input[type=range]{height:36px}.audio-options,.text-button{font-size:11px}.platform-sign{padding:10px 12px;gap:10px}.platform-sign #platform-name{font-size:17px}.platform-sign small{font-size:8px;letter-spacing:1px}footer{font-size:9px;padding:23px 3px;gap:15px}.door-warning span{display:none}.door-warning:before{inset:0 30%}.vehicle-code{font-size:8px}.is-immersive .map-scroll svg{min-width:1300px}.is-immersive .carriage{padding-top:10px}.is-immersive .stage-label{padding:20px}.is-immersive .door-scene{height:210px}.is-immersive .stage-bottom{padding:16px}.about{font-size:11px}.top-actions .quiet{min-height:44px}.route-hit{touch-action:pan-x}}
@media(max-width:370px){.destination{display:none}.top-actions{gap:12px}.top-actions span{font-size:10px}.brand{font-size:16px}.primary-controls{flex-wrap:wrap}.primary{min-width:95px}.primary-controls .secondary{flex:1}h1{font-size:26px}.door-indicator{font-size:9px}.vehicle-code{font-size:7px}.stage-label>span:last-child{display:none}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}

.video-stops button{display:grid;gap:4px;padding:12px 13px}.video-stops button strong{font-size:12px;font-weight:500;color:#e4e5d2}.video-stops button>span{font-size:11px;color:#c8d4b9}.video-stops button small{font-size:10px;color:#8d9e84;line-height:1.7}.timetable-links a{color:#d8c595;text-decoration:underline;text-underline-offset:3px}

.timeline-origin{font-size:11px;color:#d5c7a4;margin:5px 0 12px;line-height:1.7;font-variant-numeric:tabular-nums}

/* Continuous, full-size LED text; duplicate copies meet at the loop boundary. */
.led-display{justify-content:flex-start;padding:0}.led-track{display:flex;align-items:center;width:max-content;flex:none;will-change:transform}.led-copy{display:block;flex:none;padding:0 76px 0 0;white-space:nowrap;font-size:24px;letter-spacing:3px;line-height:1.3}.led-display:after{z-index:2}
/* One fixed exterior is visible through both windows and the opening itself. */
.outside-world{position:absolute;inset:15px 0 0;overflow:hidden;background:linear-gradient(#111c20,#263737 55%,#101a1c);filter:brightness(calc(.82 + var(--station-light,1)*.35));pointer-events:none}
.outside-world i{display:block;position:absolute;pointer-events:none;will-change:background-position}
.tunnel-ribs{inset:0;background:repeating-linear-gradient(90deg,transparent 0 142px,#7a8f8645 143px,#243732 151px,#0b1618 155px,transparent 158px);background-size:316px 100%;animation:tunnel-pan .18s linear infinite;animation-direction:var(--travel-direction,normal);filter:blur(var(--motion-blur,0px))}
.tunnel-ribs:after{content:"";position:absolute;inset:0;background:linear-gradient(transparent 47%,#70867b50 48%,#111e1e 50%,transparent 52%,transparent 69%,#80928936 70%,transparent 73%)}
.tunnel-lamps{left:0;right:0;top:23%;height:5px;background:linear-gradient(90deg,transparent 0 310px,#b9d4bb 312px,#e4efc9 318px,transparent calc(320px + var(--lamp-length,22px)));background-size:480px 100%;animation:lamps-pan .22s linear infinite;animation-direction:var(--travel-direction,normal);filter:blur(calc(.2px + var(--motion-blur,0px)*.65))}
.track-sleepers{left:0;right:0;bottom:0;height:22%;background:linear-gradient(110deg,#091416 0 39px,#687b7145 40px 45px,#172323 46px 125px,#657c6a4d 126px 133px,#101e1d 134px 225px,#83927f4a 226px 231px,#162423 232px 333px,#5c746b4a 334px 340px,#101d1d 341px 438px,#60766b45 439px 445px,#152323 446px 480px);background-size:480px 100%;opacity:.65;animation:track-pan .16s linear infinite;animation-direction:var(--travel-direction,normal);filter:blur(var(--motion-blur,0px))}
.window-light{inset:0;background:linear-gradient(100deg,transparent 10%,#d0e4c524 48%,transparent 80%);mix-blend-mode:screen;opacity:.14;animation:none}
.outside-world .platform{inset:0;background:linear-gradient(#e0e9db 0 17%,#b1bfb3 18% 64%,#76877b 65%,#a7b4a5 100%);transform:translateX(var(--platform-offset,0%));filter:none;will-change:transform}
.outside-world .platform-sign{top:22%;padding:6px 12px;gap:10px;border-bottom:5px solid #b82e43;background:#e7ecdc;color:#344a3e;line-height:1.2;box-shadow:0 2px 8px #445b4450;z-index:1}
.outside-world .platform-sign #platform-name{font-size:16px}.outside-world .platform-sign small{font-size:9px}
.outside-world .platform-sign b{font-size:22px}.outside-world .platform-line{width:auto;height:auto;padding:3px 5px;font-size:12px}
.outside-world .platform-columns{background:repeating-linear-gradient(90deg,transparent 0 190px,#c3cdbf 191px 212px,#7e9387 213px 221px,transparent 222px 320px);animation:none;z-index:0}
.outside-world .platform-edge{bottom:0;height:24%;border-top:3px solid #e2cf78;background:linear-gradient(#718775,#a5b6a1 25%,#596e5e 27%,#728c78)}
.sliding-door{background:none;border:0;box-shadow:none}
.sliding-door:before{content:"";position:absolute;inset:0;background:linear-gradient(95deg,#9ca797,#c8cec0 5%,#e0e1d4 47%,#b3beaa 93%,#7e8b77);clip-path:polygon(evenodd,0 0,100% 0,100% 100%,0 100%,0 0,17px 20px,17px calc(100% - 23px),calc(100% - 17px) calc(100% - 23px),calc(100% - 17px) 20px,17px 20px)}
.sliding-door:after{content:"";position:absolute;top:0;bottom:0;width:3px;background:#5c6d54}.door-left:after{right:0}.door-right:after{left:0}
.window{background:#11251a08;overflow:hidden;isolation:auto;z-index:1;box-shadow:inset 0 0 9px #10251a33}
.reflection{z-index:2;background:linear-gradient(100deg,transparent 28%,#e5ecd719 31%,#e5ecd719 33%,transparent 35%,transparent 50%,#e4edcf20 52%,transparent 72%);box-shadow:inset 0 0 12px #10251a33;pointer-events:none}
.is-paused .outside-world i,.door-scene:not(.is-moving) .outside-world i{animation-play-state:paused}
@keyframes tunnel-pan{to{background-position-x:-316px}}@keyframes lamps-pan{to{background-position-x:-480px}}@keyframes track-pan{to{background-position-x:-480px}}@keyframes window-light{0%,70%,100%{opacity:.1}25%{opacity:.8}}
@media(max-width:720px){.led-copy{font-size:20px;letter-spacing:2px;padding-right:58px}.outside-world .platform-sign{gap:6px;padding:6px 9px}.outside-world .platform-sign #platform-name{font-size:14px}.outside-world .platform-sign small{font-size:7px}}
@media(min-width:1300px){.is-immersive .outside-world .platform-sign{padding:10px 18px;gap:14px}.is-immersive .outside-world .platform-sign #platform-name{font-size:20px}.is-immersive .outside-world .platform-sign small{font-size:11px}}
@media(prefers-reduced-motion:reduce){.outside-world i{animation:none!important}.outside-world .platform{transition:none!important}.led-track{will-change:auto}}

.sound-info>small{display:block}.sound-info>.small-label{display:block;margin-top:14px}

/* The station wall extends beyond the view: shaded portal ends and light falloff
   pass the doorway instead of exposing the rectangular edge of a second image. */
.outside-world{--station-blend:clamp(100px,12vw,180px)}
.outside-world .platform{left:calc(0px - var(--station-blend));right:calc(0px - var(--station-blend));-webkit-mask-image:linear-gradient(90deg,transparent,#000 var(--station-blend),#000 calc(100% - var(--station-blend)),transparent);mask-image:linear-gradient(90deg,transparent,#000 var(--station-blend),#000 calc(100% - var(--station-blend)),transparent)}
.outside-world .platform:before,.outside-world .platform:after{content:"";position:absolute;top:0;bottom:0;width:var(--station-blend);z-index:2;pointer-events:none}
.outside-world .platform:before{left:0;background:linear-gradient(90deg,#0e1b19 0%,#233730e0 28%,#62776ab0 68%,#b1c1a946 94%,transparent)}
.outside-world .platform:after{right:0;background:linear-gradient(270deg,#0e1b19 0%,#233730e0 28%,#62776ab0 68%,#b1c1a946 94%,transparent)}
.outside-world .platform-sign{left:var(--station-blend);right:var(--station-blend)}
.outside-world .platform-sign .platform-direction{font-size:14px;letter-spacing:1px;flex-shrink:0;font-weight:500}
.outside-world .platform-edge{box-shadow:0 -5px 24px #e5e6b92e}
.tunnel-near{inset:0;background:linear-gradient(90deg,transparent 0 180px,#6b87776b 188px,#263f354f 204px,#081211cc 225px,transparent 245px 780px);background-size:780px 100%;animation:near-pan .3s linear infinite;animation-direction:var(--travel-direction,normal);filter:blur(calc(1px + var(--motion-blur,0px)))}
@keyframes near-pan{to{background-position-x:-780px}}
@media(max-width:720px){.outside-world .platform-sign small{display:none}.outside-world .platform-sign .platform-direction{font-size:12px;letter-spacing:0}}

/* Fixed amber assembly above the hazard strip, separate from the route LEDs. */
.door-scene{height:187px}
.door-warning{top:15px}
.sliding-door{top:30px}
.outside-world{inset:30px 0 0;filter:none;background:#152020}
.door-scene.is-closing .sliding-door{transition-duration:3s}
.door-beacon{position:absolute;left:50%;top:1px;transform:translateX(-50%);width:42px;height:12px;padding:2px 8px;border:1px solid #7b8674;border-radius:4px;background:linear-gradient(#b3bbaa,#87947f);box-shadow:0 1px 2px #16281970;z-index:6}
.door-beacon:before,.door-beacon:after{content:"";position:absolute;top:4px;width:2px;height:2px;border-radius:50%;background:#5f6e59}
.door-beacon:before{left:3px}.door-beacon:after{right:3px}
.door-beacon span{display:block;height:6px;border-radius:3px;background:repeating-linear-gradient(90deg,#70501c 0 2px,#8c6826 2px 3px);box-shadow:inset 0 1px 2px #302913}
.door-beacon.lit span{background:repeating-linear-gradient(90deg,#ffcf45 0 2px,#ffea83 2px 3px);box-shadow:0 0 4px #ffd25b,0 0 12px #ffb923b0,inset 0 1px 1px #fff3b2}
.is-paused .door-scene.is-closing .sliding-door{transition:none}
.is-paused .door-scene.is-active-closing .sliding-door{transition:transform 3s cubic-bezier(.45,0,.2,1)}
.daylight-world,.tunnel-shell{position:absolute;inset:0;overflow:hidden}
.daylight-world{background:linear-gradient(#b0c7c8,#d3ded4 58%,#b6bea3 65%,#7a9472 100%)}
.tunnel-shell{background:linear-gradient(#111c20,#263737 55%,#101a1c);opacity:calc(1 - var(--daylight,0));filter:brightness(calc(.82 + var(--station-light,1)*.35));will-change:opacity;transition:opacity .2s linear}
.daylight-world:after{content:"";position:absolute;inset:0;background:linear-gradient(#f2eccc26,transparent 65%,#354f4114);pointer-events:none}
.daylight-world i{inset:0;background-repeat:repeat-x;background-size:var(--scenery-width,1320px) var(--scenery-height,220px);background-position-y:bottom;animation:scenery-pan 8s linear infinite;animation-direction:var(--travel-direction,normal)}
.scenery-hills{background-image:url('scenery/hills.svg?v=16');animation-duration:40s!important;opacity:var(--hills,1)}
.scenery-apartments{background-image:url('scenery/apartments.svg?v=16');animation-duration:8s!important;opacity:var(--residential,1);transform:translateY(calc(var(--elevation,0)*9%))}
.scenery-campus{background-image:url('scenery/campus.svg?v=16');animation-duration:6s!important;opacity:var(--campus,0);transform:translateY(calc(var(--elevation,0)*6%))}

.scenery-railway{background-image:url('scenery/railway.svg?v=16');animation-duration:1.4s!important;opacity:var(--railway,0)}
.scenery-trees{background-image:url('scenery/trees.svg?v=16');animation-duration:1.7s!important;filter:blur(calc(var(--motion-blur,0px)*.4));transform:translateY(calc(var(--elevation,0)*11%))}

.scenery-poles{background-image:url('scenery/poles.svg?v=16');animation-duration:1.1s!important;filter:blur(calc(var(--motion-blur,0px)*.6))}
.window-light{opacity:calc(.1 + var(--daylight,0)*.09)}
.outside-world .platform-roof{position:absolute;inset:0 0 auto;height:18%;background:linear-gradient(#788d82,#e0e4d3 65%,#778e80 68%,#b4c2af);box-shadow:0 4px 9px #233e3550;z-index:1}
.outside-world .platform[data-structure="ground"],.outside-world .platform[data-structure="elevated"]{background:linear-gradient(transparent 0 68%,#d1d5c2 69%,#adb7a5 100%)}
.outside-world .platform[data-structure="ground"]:before,.outside-world .platform[data-structure="elevated"]:before{background:linear-gradient(90deg,transparent,#aab9a15c 65%,transparent)}
.outside-world .platform[data-structure="ground"]:after,.outside-world .platform[data-structure="elevated"]:after{background:linear-gradient(270deg,transparent,#aab9a15c 65%,transparent)}
.outside-world .platform[data-structure="elevated"] .platform-columns,.outside-world .platform[data-structure="ground"] .platform-columns{background:repeating-linear-gradient(90deg,transparent 0 190px,#d7decd 191px 208px,#8d9e8e 209px 219px,transparent 220px 320px)}
.outside-world .platform[data-structure="ground"] .platform-roof{height:23%;background:repeating-linear-gradient(90deg,#879d90 0 3px,#c5cfbb 4px 46px,#8e9f8b 47px 48px)}
@keyframes scenery-pan{to{background-position-x:calc(0px - var(--scenery-width,1320px))}}
@media(max-width:720px){.door-scene{height:161px}}
.is-immersive .door-scene{height:clamp(205px,28vh,355px)}
@media(max-width:720px){.is-immersive .door-scene{height:225px}}
@media(prefers-reduced-motion:reduce){.daylight-world i{animation:none!important}.tunnel-shell{transition:none}}

/* A coherent neighborhood plane: buildings, trees, roofs and roads keep the
   same position and speed. Only genuinely distant hills and trackside fixtures
   use separate depths. All urban assets have a shared y=324 ground anchor. */
.outside-world i{animation:none!important}
.outside-world .platform{transform:translateX(var(--platform-offset-px,0px))}
.scenery-hills{background-position-x:calc(var(--world-offset,0px)*.035)}
.scenery-apartments,.scenery-campus,.scenery-trees,.scenery-neighborhood,
.scenery-campus-details,.scenery-rooftops,.scenery-streets,.scenery-lights,.scenery-street-lamps{
 background-position-x:var(--neighborhood-offset,0px);
 transform:none;
 background-position-y:var(--neighborhood-top,0px)!important;
}
.scenery-railway,.scenery-railway-details{background-position-x:var(--world-offset,0px)}
.scenery-poles,.tunnel-ribs,.tunnel-lamps,.tunnel-near,.track-sleepers{background-position-x:var(--world-offset,0px)}
.outside-world .platform[data-structure="ground"] .platform-sign,.outside-world .platform[data-structure="elevated"] .platform-sign{top:9%;padding:3px 12px;border-bottom-width:3px;background:#e7ecdcf0}
.outside-world .platform[data-structure="ground"] .platform-roof,.outside-world .platform[data-structure="elevated"] .platform-roof{height:10%}
.is-paused .tunnel-shell{transition:none}
@media(prefers-reduced-motion:reduce){.outside-world i{background-position-x:0px!important}}

/* Solid tunnel boundaries: scenery is occluded by geometry, never cross-faded. */
.tunnel-shell{opacity:1;transition:none;will-change:clip-path;clip-path:inset(0 var(--tunnel-right,0px) 0 var(--tunnel-left,0px))}
.portal-edge{position:absolute;top:0;bottom:0;left:calc(var(--portal-edge,0px) - 8px);width:16px;background:linear-gradient(90deg,#2d3833 0 4px,#91998b 4px 7px,#697969 7px 12px,#26362f 12px);z-index:1}
[data-portal-edge="hidden"] .portal-edge{display:none}
.window-light{opacity:.12}
.outside-world .platform{mask-image:none;-webkit-mask-image:none}
.outside-world .platform:before,.outside-world .platform:after{width:18px;background:linear-gradient(90deg,#869783 0 4px,#d3d7c9 4px 12px,#72836f 12px)}
.outside-world .platform[data-structure="ground"]:before,.outside-world .platform[data-structure="elevated"]:before,.outside-world .platform[data-structure="ground"]:after,.outside-world .platform[data-structure="elevated"]:after{background:linear-gradient(90deg,#8d9e8a 0 4px,#d6decd 4px 13px,#7c917c 13px)}
/* Station screen doors belong to the platform; no glass railing travels along
   the open railway. A low opaque track bed is kept below the window sill. */
.platform-safety-glass{position:absolute;left:0;right:0;bottom:20%;height:32%;border-top:2px solid #c6cfb7;background:repeating-linear-gradient(90deg,#bad1c022 0 94px,#7c9386 94px 98px,#d6dec9 98px 100px);z-index:2}
.platform-safety-glass:after{content:"";position:absolute;left:0;right:0;bottom:8px;height:3px;background:#c1ccba}
.scenery-embankment{height:7%!important;top:auto!important;bottom:-1%!important;background:repeating-linear-gradient(90deg,#758078 0 80px,#98a095 81px 88px,#697a6b 89px 175px);border-top:3px solid #bac4af;background-size:175px 100%!important;background-position-x:var(--world-offset,0px)}
/* A lower common ground anchor reveals rooftops from the elevated eye point,
   while ground sections show the nearby neighborhood at eye height. The SVG
   terrain extends beneath each building; no layer is independently lifted. */
.scenery-apartments{opacity:1}
.scenery-trees{filter:blur(calc(var(--motion-blur,0px)*.15))}
.scenery-streets{background-image:url('scenery/streets.svg?v=16');background-size:var(--scenery-width,1320px) var(--scenery-height,220px)!important}
.scenery-neighborhood{background-image:url('scenery/mixed-neighborhood.svg?v=16')}
.scenery-campus-details{background-image:url('scenery/campus-details.svg?v=16');opacity:var(--campus,0)}
.scenery-railway-details{background-image:url('scenery/railway-details.svg?v=16');opacity:var(--railway,0)}
.scenery-rooftops{background-image:url('scenery/rooftops.svg?v=16');visibility:hidden}
[data-view-height="elevated"] .scenery-rooftops,[data-view-height="ramp"] .scenery-rooftops{visibility:visible}
.daylight-world{background:linear-gradient(#a6c6ce,#d5e0d6 51%,#afc198 70%,#899b73)}

/* The selected scene clock shades surfaces, while emissive windows remain bright.
   Each light overlay follows its matching building in both position and scale. */
.daylight-world{background:linear-gradient(var(--sky-top,#a6c6ce),var(--sky-horizon,#d5e0d6) 55%,var(--terrain-color,#afc198) 100%)}
.daylight-world:before{content:"";position:absolute;inset:0;opacity:var(--night,0);background:radial-gradient(circle at 72% 11%,#fff0c8 0 3px,transparent 4px),radial-gradient(circle at 15% 9%,#c6d6e0 0 .7px,transparent 1px),radial-gradient(circle at 38% 17%,#c6d6e0 0 .7px,transparent 1px),radial-gradient(circle at 87% 22%,#c6d6e0 0 .7px,transparent 1px)}
.daylight-world:after{opacity:var(--exterior-brightness,1)}
.daylight-world i:not(.scenery-lights){filter:brightness(var(--exterior-brightness,1)) saturate(var(--exterior-saturation,1))}
.daylight-world i.scenery-trees{filter:brightness(var(--exterior-brightness,1)) saturate(var(--exterior-saturation,1)) blur(calc(var(--motion-blur,0px)*.15))}
.daylight-world .scenery-lights{opacity:var(--night,0);filter:drop-shadow(0 0 1px #ffd29670)}
.route-city,.route-city-lights{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.route-city{filter:brightness(var(--exterior-brightness,1)) saturate(var(--exterior-saturation,1))}
.route-city-lights{opacity:var(--night,0);filter:drop-shadow(0 0 1px #ffd29670)}
.scenery-previews{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:18px;font-size:11px;color:#aebda7}.scenery-previews>span{margin-right:4px}.scenery-previews button{border:1px solid #52674f;background:#18251e;color:#d6dfc8;border-radius:4px;padding:7px 10px;font-size:11px}.scenery-previews button:hover{background:#2c3a2c}
.light-apartments{background-image:url('scenery/lights-apartments.svg?v=16')}
.light-campus{background-image:url('scenery/lights-campus.svg?v=16');opacity:calc(var(--night,0)*var(--campus,0))!important}
.light-mixed-neighborhood{background-image:url('scenery/lights-mixed-neighborhood.svg?v=16')}
.light-campus-details{background-image:url('scenery/lights-campus-details.svg?v=16');opacity:calc(var(--night,0)*var(--campus,0))!important}
.light-rooftops{background-image:url('scenery/lights-rooftops.svg?v=16');visibility:hidden}
[data-view-height="elevated"] .light-rooftops,[data-view-height="ramp"] .light-rooftops{visibility:visible}
.scenery-street-lamps{background-image:url('scenery/street-lamps.svg?v=16')}
.light-street-lamps{background-image:url('scenery/lights-street-lamps.svg?v=16')}
.outside-world .platform-roof:after{content:"";position:absolute;bottom:8%;left:5%;right:5%;height:3px;background:#fffce8;box-shadow:0 0 5px #fff7d6,0 6px 15px #ffeab170}
.outside-world .platform[data-structure="ground"],.outside-world .platform[data-structure="elevated"]{background:linear-gradient(transparent 0 68%,var(--terrain-color,#d1d5c2) 69%,#819188 100%)}
.outside-world .platform[data-structure="ground"] .platform-sign,.outside-world .platform[data-structure="elevated"] .platform-sign{background:#eef1dc;box-shadow:0 0 calc(var(--night,0)*12px) #fff5bd55}
.scene-time-panel{display:flex;align-items:center;gap:14px 24px;flex-wrap:wrap;padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid #dae0cb20}
.scene-time-entry{display:flex;align-items:center;gap:11px}.scene-time-entry label,.immersive-time{font-size:12px;color:#d7dfcb}.scene-time-entry>span{font-size:11px;color:var(--accent);min-width:24px}
.scene-time-entry input,.immersive-time input{font:14px ui-monospace,monospace;color:#eee6cf;background:#17231e;border:1px solid #67735b;padding:9px;border-radius:5px;min-width:110px;color-scheme:dark}
.time-presets{display:flex;gap:6px}.time-presets button{border:1px solid #667359;background:transparent;color:#c4d1b6;border-radius:5px;padding:8px 13px;font-size:11px}.time-presets button[aria-pressed="true"]{background:#d7c496;color:#253222;border-color:#e7d5a9}.scene-time-panel p{font-size:10px;color:#95a38f;margin:0 0 0 auto}
.immersive-time{display:flex;align-items:center;gap:8px;white-space:nowrap}.immersive-time input{min-width:98px;padding:7px;font-size:12px}
@media(max-width:720px){.scene-time-panel{gap:12px}.scene-time-panel p{width:100%;margin:0}.time-presets button{padding:8px 10px}.scene-time-entry{gap:8px}.scene-time-entry input{min-width:105px}}
/* A long station strip passes one fixed train doorway. Each bay retains its
   own station band, pillars, screen-door frames and overhead wayfinding. */
.outside-world .platform{left:calc(0px - var(--platform-half-span,3200px));right:calc(0px - var(--platform-half-span,3200px));overflow:hidden;background:#c4cdc5;filter:none;contain:paint}
.outside-world .platform[data-enclosure="open"]{background:transparent}
.platform-bays{position:absolute;left:50%;top:0;bottom:0;display:flex;width:max-content;transform:translateX(-50%)}
.platform-bay{position:relative;flex:0 0 var(--platform-bay-width,1008px);width:var(--platform-bay-width,1008px);height:100%;overflow:hidden}
.platform-backdrop{position:absolute;inset:13% 0 13%;background:repeating-linear-gradient(0deg,transparent 0 24px,#768d8025 24px 25px),repeating-linear-gradient(90deg,var(--platform-wall,#d0d6ce) 0 97px,#b7c2b7 98px 99px);box-shadow:inset 0 8px 20px #334d3e25}
[data-enclosure="open"] .platform-backdrop{background:none;box-shadow:none}
.platform-station-band{position:absolute;top:27%;height:20%;left:0;right:0;display:flex;align-items:center;gap:.4em;padding-left:24%;padding-right:9%;background:#eff0e2;border-top:1px solid #b8344b;border-bottom:2px solid #b8344b;color:#293e3a;z-index:3;white-space:nowrap;box-shadow:0 1px 3px #293f3533;font-size:clamp(8px,calc(var(--platform-height,157px)*.074),24px);line-height:1}
.platform-route-number{display:grid;place-items:center;background:#b92b48;color:#fff4e3;min-width:1.2em;height:1.7em;font:500 .95em/1 Arial,sans-serif}
.platform-station-title{display:flex;flex-direction:column;align-items:flex-start;gap:1px;min-width:0}.platform-name{font-weight:600;line-height:1.12}.platform-en{font:400 .46em/1.16 Arial,sans-serif;letter-spacing:.3px}
.platform-bound{position:absolute;right:23%;top:50%;transform:translateY(-50%);display:block;margin:0;font-size:.66em;line-height:1.12;font-weight:600}.platform-bound>small{display:block;font:400 .55em/1.15 Arial,sans-serif;letter-spacing:.3px;margin-top:1px;text-align:right}
.platform-bay[data-signed="false"] .platform-station-band>span{visibility:hidden}
.platform-guide{position:absolute;top:6%;left:51%;height:18%;display:flex;align-items:center;gap:9px;background:#123248;color:#f4f3e5;border:1px solid #5e747c;box-shadow:0 2px 3px #0b202644;padding:3px 12px;z-index:5;white-space:nowrap;font-size:clamp(11px,calc(var(--platform-height,157px)*.09),25px)}
.platform-guide:before,.platform-guide:after{content:"";position:absolute;bottom:100%;height:16px;width:2px;background:#687974}.platform-guide:before{left:15%}.platform-guide:after{right:15%}
.guide-arrow{font-size:1.65em;line-height:1}.guide-copy{line-height:1.05}.guide-copy small,.platform-transfer-line small{display:block;font:400 .46em Arial,sans-serif;margin-top:2px}
.platform-transfer-badges{display:flex;align-items:center;gap:8px}.platform-transfer-line{display:flex;align-items:center;gap:5px}.platform-transfer-line>b{font:600 1.1em Arial,sans-serif;padding:.15em .3em;border:1px solid #ffffff40;border-radius:2px;color:#fff7dc;min-width:1.4em;text-align:center}.platform-transfer-line>span{font-size:.78em}
[data-structure="ground"] .platform-guide{background:#eef1e4;color:#203a48;border-color:#b8c5b6}
.platform-exit{position:absolute;top:7%;left:22%;padding:3px 11px;background:#e3eadb;border:1px solid #b2c3b1;color:#306553;font-size:clamp(10px,calc(var(--platform-height,157px)*.08),22px);z-index:4;white-space:nowrap}.platform-exit small{font:.55em Arial,sans-serif}
.platform-column{position:absolute;left:var(--platform-column-position,16%);top:4%;bottom:8%;width:2.7%;background:linear-gradient(90deg,#a2b2a6,#d8dfd0 32%,#c1cdbf 82%,#81968a);box-shadow:3px 0 5px #354e3a28;z-index:4}
[data-column="round"] .platform-column{border-radius:30%;background:linear-gradient(90deg,#829b8a,#d8dfcf 36%,#bdcbb9 75%,#7b9480)}
[data-column="slanted"] .platform-column{transform:skewX(-13deg);background:linear-gradient(90deg,#64786d,#9caea1,#4d655a)}
.platform-roof-beam{position:absolute;top:3%;left:0;right:0;height:5%;background:linear-gradient(#677d71,#bcc7b5 35%,#879d8b 65%,#607567);box-shadow:0 3px 6px #344d3d30;z-index:2}
.platform-ceiling-light{position:absolute;top:12%;left:29%;width:56%;height:2%;min-height:2px;background:#ffffe9;box-shadow:0 0 3px #ffffe0,0 4px 10px #fff2c167;z-index:3}
.outside-world .platform-roof{height:16%!important;background:repeating-linear-gradient(90deg,#6c8176 0 3px,#bac5b5 4px 16px,#859b89 17px 18px);z-index:2}
[data-roof="arch"] .platform-roof-beam{height:14%;top:-7%;border-radius:50%;border-bottom:4px solid #779082;background:#b8c7b7}
[data-roof="steel"] .platform-roof{background:repeating-linear-gradient(90deg,#50675a 0 8px,#adbbac 9px 74px,#728a7a 75px 83px)}
.platform-bench{position:absolute;bottom:17%;left:66%;width:17%;height:8%;border-radius:3px;border-top:3px solid #d9dfd0;background:linear-gradient(#9eafa0,#d0d7c5 55%,#748d79);box-shadow:0 3px 2px #465e4944;z-index:2}.platform-bench:before,.platform-bench:after{content:"";position:absolute;top:100%;height:6px;width:3px;background:#5f7867}.platform-bench:before{left:14%}.platform-bench:after{right:14%}
.platform-wall-panel{position:absolute;left:36%;top:47%;width:11%;height:29%;border:3px solid #b0c1b0;background:linear-gradient(140deg,#566d63,#a9bba3);display:flex;flex-direction:column;align-items:center;justify-content:center;color:#edf1dc;font-size:clamp(8px,calc(var(--platform-height,157px)*.055),15px);letter-spacing:2px;z-index:0}.platform-wall-panel small{font-size:.55em;margin-top:4px}
.platform-wall-panel[data-poster="1"]{background:linear-gradient(150deg,#385966,#708e8e);border-color:#aebcc0}.platform-wall-panel[data-poster="2"]{background:linear-gradient(140deg,#796e54,#a69d80);border-color:#cbc8b5}
.platform-wall-map{position:absolute;left:45%;top:50%;width:16%;height:26%;padding:3px 5px;border:2px solid #9daca3;background:#e3e7da;color:#425b4e;font-size:clamp(6px,calc(var(--platform-height,157px)*.034),10px);z-index:0;display:flex;flex-direction:column;justify-content:space-around;overflow:hidden}
.platform-wall-map>i{position:relative;display:block;height:15%;width:100%;border-bottom:2px solid #b8344b;transform:rotate(-7deg);background:repeating-linear-gradient(90deg,transparent 0 15%,#779d91 16% 17%,transparent 18% 33%)}.platform-wall-map>small{font-size:.6em;white-space:nowrap}
[data-enclosure="open"] .platform-wall-panel,[data-enclosure="open"] .platform-wall-map{display:none}
.platform-floor{position:absolute;left:0;right:0;bottom:0;height:17%;background:repeating-linear-gradient(90deg,#a9b7aa 0 88px,#82998b 89px 90px),linear-gradient(#aab9aa,#6a8370);background-position:center;box-shadow:inset 0 1px 4px #e1e6cf;z-index:5}
.outside-world .platform-edge{z-index:6;height:8%;border-top:2px solid #dbc66d;background:linear-gradient(#d1c17c 0 2px,#7d9783 3px,#526c5c)}
@media(max-width:720px){.platform-guide{gap:5px;padding:3px 7px}.platform-bound{font-size:.64em}}
/* Ceiling remains behind the suspended wayfinding signs. */
.platform-bays{z-index:1}.outside-world .platform-roof{z-index:0}
/* Sparse information bays and several restrained material families keep the
   station from looking like one copied doorway kit. Geometry stays shared. */
.platform-bay[data-light="1"] .platform-ceiling-light{left:21%;width:43%}
.platform-bay[data-light="2"] .platform-ceiling-light{left:39%;width:49%}
.platform-bay[data-bench-side="1"] .platform-bench{left:33%}
[data-finish="modern"]{--platform-wall:#dbe0d9}
[data-finish="modern"] .platform-backdrop{background:repeating-linear-gradient(90deg,#dce1db 0 155px,#a3b1a9 156px 158px);border-top:7px solid #b8c7be}
[data-finish="modern"] .platform-column{background:linear-gradient(90deg,#96a8a0,#e0e6dc 30%,#c0cdc2 88%,#7e9689)}
[data-finish="stone"]{--platform-wall:#cec9bc}
[data-finish="stone"] .platform-backdrop{background:repeating-linear-gradient(0deg,transparent 0 46px,#aaa793 47px 48px),repeating-linear-gradient(90deg,#d0cbbb 0 138px,#bcb8a6 139px 140px)}
[data-finish="stone"] .platform-column{background:linear-gradient(90deg,#a7a493,#dfdccb 30%,#bcbdaa 87%,#8e9c89)}
.outside-world [data-finish="slatted"] .platform-roof{background:repeating-linear-gradient(90deg,#47544e 0 5px,#aeb7aa 6px 10px,#64776a 11px 13px)}
[data-finish="slatted"] .platform-backdrop{background:repeating-linear-gradient(90deg,#c1ccc1 0 200px,#8c9d91 201px 205px)}
[data-finish="hall"] .platform-backdrop{background:repeating-linear-gradient(90deg,#c9d5c8 0 70px,#95aa9a 71px 73px);border-top:9px solid #6c8275}
[data-finish="canopy"] .platform-roof-beam{border-bottom-color:#789b96}
[data-finish="steel"] .platform-bench{background:linear-gradient(#7d928c,#c2ccc2 50%,#677e73)}
/* Trains occupy their track, behind solid portals and platform furniture. */
.passing-train{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.waiting-train{position:absolute;top:0;pointer-events:none;z-index:0}
.platform-bay[data-column-visible="false"] .platform-column{display:none}
.platform-station-band{padding-left:6%;padding-right:4%;font-size:clamp(6px,calc(var(--platform-bay-width,400px)*.038),23px)}
.platform-bound{right:5%;font-size:.6em}
.platform-guide{left:46%;font-size:clamp(7px,calc(var(--platform-bay-width,400px)*.032),21px);gap:4px;padding:3px 6px}
.platform-exit{left:9%;font-size:clamp(7px,calc(var(--platform-bay-width,400px)*.035),21px)}
.platform-ad{position:absolute;left:29%;top:48%;width:19%;height:31%;object-fit:fill;border:2px solid #a9b5ab;background:#fff0d2;box-shadow:0 0 3px #ffefd590,inset 0 0 2px #fff;z-index:1}
.platform-ad-secondary{left:77%;top:49%;width:17%;height:29%}
.platform-ad-banner{position:absolute;left:30%;top:18%;width:43%;height:7%;object-fit:fill;border:1px solid #829889;box-shadow:0 0 3px #e6ffe450;z-index:2}
.platform-ad[hidden],.platform-ad-banner[hidden]{display:none}
.crowd-control{display:flex;gap:8px;align-items:center;font-size:12px;margin-left:auto}
.crowd-control select{background:#18251e;color:#d6dfc8;border:1px solid #52674f;border-radius:4px;padding:6px}
.platform-far-floor{position:absolute;left:0;right:0;top:69%;height:17%;background:repeating-linear-gradient(90deg,transparent 0 109px,#a0ada344 110px 111px),linear-gradient(#adb9af,#c7cfc1 8%,#b7c3b3 65%,#98ad9d);border-top:3px solid #b1b9a3;box-shadow:0 -2px 0 #d3c488;z-index:0}
.platform-ad{z-index:1}.platform-station-band{z-index:3}
.near-platform-gates{position:absolute;left:50%;top:0;bottom:0;width:max-content;display:flex;transform:translateX(-50%);z-index:8}
.near-gate-bay{position:relative;width:var(--near-gate-bay-width,1296px);flex:0 0 var(--near-gate-bay-width,1296px);height:100%}
.near-gate-opening{position:absolute;top:0;bottom:0;left:22.222%;right:22.222%;overflow:hidden}
.near-gate-fixed,.near-gate-leaf{position:absolute;top:0;bottom:0;border:3px solid #353e3d;background:linear-gradient(110deg,#c9dfce0b,#e5f0dd13 49%,#7a9b8713);box-shadow:inset 1px 0 #a6b2a6}
.near-gate-fixed{width:22.222%}.near-gate-fixed.left{left:0}.near-gate-fixed.right{right:0}
.near-gate-leaf{width:50%;transition:transform 1.3s cubic-bezier(.35,0,.2,1)}
.near-gate-leaf.left{left:0}.near-gate-leaf.right{right:0}
.near-gate-leaf:before,.near-gate-fixed:before{content:"";position:absolute;left:0;right:0;bottom:0;height:17%;background:linear-gradient(100deg,#a2aaa0,#d1d5c8,#a7b0a3);border-top:2px solid #545f53}
[data-screen="half"] .near-platform-gates{top:48%}
[data-screen="half"] .near-gate-leaf:before,[data-screen="half"] .near-gate-fixed:before{height:30%}
.platform[data-near-open="true"] .near-gate-leaf.left{transform:translateX(-100%)}
.platform[data-near-open="true"] .near-gate-leaf.right{transform:translateX(100%)}
/* Wall-mounted photographic lightboxes indoors; small adhesive panels on
   the fixed safety-door glazing outdoors. Nothing stands in mid-air. */
.platform-ad{left:8%;top:43%;width:84%;height:auto;aspect-ratio:2;max-height:34%;object-fit:fill;border:2px solid #334442;background:#fff9df;box-shadow:0 0 3px #f7f4d76b,2px 2px 2px #2b3f3640;z-index:1}
.platform-gate-ad{position:absolute;left:8%;top:35%;width:84%;height:auto;aspect-ratio:2;object-fit:fill;border:1px solid #c2cab8;z-index:1}
[data-enclosure="open"] .platform-ad{display:none}
[data-enclosure="enclosed"] .platform-gate-ad{display:none}
.platform-ad[hidden],.platform-gate-ad[hidden]{display:none}
.platform-station-band{top:17%;height:16%;border-bottom-width:2px;background:#e9ede2}
.platform-backdrop{inset:13% 0 13%}
.platform-ad,.platform-gate-ad{overflow:hidden;display:block}
.platform-ad img,.platform-gate-ad img{position:absolute;width:200%;height:300%;max-width:none;left:var(--ad-x,0%);top:var(--ad-y,0%)}
[data-enclosure="open"] .platform-ad,[data-enclosure="enclosed"] .platform-gate-ad,.platform-ad[hidden],.platform-gate-ad[hidden]{display:none}

/* Opposite doors share the illustrated train's measured geometry. A single
   rail and one seam per opening replace the overlapping decorative frames. */
.far-platform-gates{position:absolute;left:0;right:0;top:var(--far-gate-top,24%);bottom:var(--far-platform-bottom,31%);z-index:2;pointer-events:none}

.far-gate-bay{position:absolute;top:0;bottom:0}
.far-gate-fixed,.far-gate-leaf{position:absolute;top:0;bottom:0;border-top:2px solid #4d6059;border-bottom:2px solid #576b61;background:linear-gradient(105deg,#bfd7ca0c,#dbe9d31c 65%,#879f9310);box-shadow:none}
.far-gate-fixed.left{left:0;width:var(--gate-opening-left);border-left:1px solid #52675c;border-right:1px solid #52675c}
.far-gate-fixed.right{left:calc(var(--gate-opening-left) + var(--gate-opening-width));right:0;border-left:1px solid #52675c}
.far-gate-opening{position:absolute;top:0;bottom:0;left:var(--gate-opening-left);width:var(--gate-opening-width);overflow:hidden}
.far-gate-leaf{width:50%;will-change:transform}
.far-gate-leaf.left{left:0;border-right:1px solid #51645b;transform:translateX(calc(var(--far-door-progress,0)* -100%))}
.far-gate-leaf.right{right:0;transform:translateX(calc(var(--far-door-progress,0)*100%))}
.far-gate-leaf.left:after{content:"";position:absolute;right:0;top:0;bottom:0;width:2px;background:repeating-linear-gradient(#d2be62 0 6px,#45564b 6px 12px)}
.far-gate-fixed:before,.far-gate-leaf:before{content:"";position:absolute;bottom:0;left:0;right:0;height:17%;background:linear-gradient(100deg,#9ba99e,#c8d0c1 48%,#a2b1a4);border-top:1px solid #7d9183}
[data-screen="half"] .far-gate-fixed:before,[data-screen="half"] .far-gate-leaf:before{height:28%}
.far-gate-fixed .platform-gate-ad{left:auto;right:12%;width:min(65px,65%);top:24%;border:0;box-shadow:none}
/* Near-side gates are larger and lighter, so the two track edges read as
   separate depths rather than two black fences pasted on top of each other. */
.near-gate-fixed,.near-gate-leaf{border-width:2px;border-color:#8d9a91;box-shadow:none;background:linear-gradient(110deg,#d4e3cd06,#e5f0dd0a)}
.near-gate-leaf.left{border-right-width:1px}.near-gate-leaf.right{border-left:0}
[data-screen="half"] .near-platform-gates{top:42%}

/* Overhead names sit in front of the safety-door header. Avoid a stacking
   context on the furniture strip that would put every sign behind the glass. */
.platform-bays{z-index:auto;transform:none;left:calc(50% - var(--platform-bay-width,400px)*17.5 - var(--platform-info-offset,0px))}
.platform-station-band{padding-left:calc(var(--platform-column-position,16%) + 6%)}
.far-gate-fixed.left{border-left:0}
.far-platform-wall-ads{position:absolute;inset:0;z-index:1;pointer-events:none}
.platform-wall-lightbox{position:absolute;overflow:hidden;border:1px solid #647168;background:#fff3ce;box-shadow:0 0 2px #fff1bd50}
.platform-wall-lightbox img{position:absolute;width:200%;height:300%;max-width:none;left:var(--ad-x,0%);top:var(--ad-y,0%)}
[data-enclosure="open"] .far-platform-wall-ads{display:none}

/* Dark track-side wall behind underground opposite doors. Platform names,
   columns and the platform floor retain their own station lighting. The
   wall is behind the train canvas, so a berthed train is never painted over. */
.outside-world .platform[data-structure="underground"]{background:#030608}
[data-structure="underground"] .platform-backdrop{background:none;border:0;box-shadow:none}
[data-structure="underground"] .platform-wall-lightbox{border-color:#637373;background:#fff7df;box-shadow:0 0 2px #fff8dd,0 0 8px #fff1b940}
[data-structure="underground"] .platform-wall-lightbox img{filter:brightness(1.22) saturate(1.06)}
[data-structure="underground"] .far-gate-fixed,[data-structure="underground"] .far-gate-leaf{background:linear-gradient(105deg,#b6cacc03,#e1e9e407 65%,#81989703)}
.platform[data-opposing-train="true"] .far-platform-wall-ads{visibility:hidden}

/* One explicit gesture starts the complete recorded journey and audio. */
.recording-launch{display:flex;align-items:center;flex-wrap:wrap;gap:10px 16px;margin-top:20px}.recording-start{border:1px solid #efd4a2;border-radius:5px;padding:11px 20px;background:#efd4a2;color:#26362b;font-size:13px;font-weight:600}.recording-launch>span{font-size:11px;color:#b6c5af}.recording-download{display:inline-block;margin-left:12px;color:#e7d3a6;text-decoration:underline;text-underline-offset:3px}.recording-start:hover{background:#f9e3bd}@media(max-width:720px){.recording-launch{align-items:flex-start;flex-direction:column}.recording-start{padding:11px 15px}.recording-download{margin-left:0;margin-top:5px;display:block}}

/* Timed door closure follows the same three-second clock as its acoustics. */
.door-scene[data-timed-closing="true"] .door-left,.door-scene[data-timed-closing="true"] .near-gate-leaf.left{transform:translateX(var(--door-left-shift));transition:none}
.door-scene[data-timed-closing="true"] .door-right,.door-scene[data-timed-closing="true"] .near-gate-leaf.right{transform:translateX(var(--door-right-shift));transition:none}
.is-paused .door-scene[data-timed-closing="true"] .sliding-door,.door-scene[data-timed-closing="true"].is-closing .sliding-door{transition:none}

/* Full-size passenger information is independent of compressed door bays. */
.platform-station-band{top:18%;height:24%;padding:0;z-index:3}
.platform-info-row{position:absolute;inset:0;z-index:5;pointer-events:none}
.platform-station-info{position:absolute;left:calc(50% + var(--sign-index)*var(--platform-sign-spacing,1116px));top:18%;height:24%;width:var(--platform-sign-width,662px);transform:translateX(-50%);display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;column-gap:.4em;padding:0 calc(var(--platform-sign-width,662px)*.02);white-space:nowrap;color:#213b36;font-size:clamp(18px,calc(var(--platform-height,151px)*.115),48px);line-height:1}
.platform-station-info .platform-name{font-size:1em;font-weight:650;line-height:1.08}
.platform-station-info .platform-en{font-size:max(9px,.54em);line-height:1.12;letter-spacing:.35px}
.platform-station-info .platform-bound{position:static;transform:none;justify-self:end;font-size:max(13px,.72em);line-height:1.12}
.platform-station-info .platform-bound>small{font-size:max(8px,.52em);line-height:1.12;margin-top:2px}
.platform-guide{top:1%;height:auto;min-height:12%;font-size:clamp(12px,calc(var(--platform-height,151px)*.075),26px)}
.platform-exit{top:2%;font-size:clamp(12px,calc(var(--platform-height,151px)*.075),26px)}
/* Underground safety doors reach the ceiling; open elevated gates stay low. */
.platform[data-screen="full"] .far-platform-gates:after,.platform[data-screen="full"] .near-platform-gates:after{content:"";position:absolute;left:0;right:0;top:0;height:4%;min-height:5px;background:linear-gradient(#53635c,#a3b1a7 40%,#697d71);border-bottom:2px solid #394c43;pointer-events:none}
.platform[data-screen="full"] .near-gate-fixed,.platform[data-screen="full"] .near-gate-leaf{border-color:#6d8073;background:linear-gradient(110deg,#c9dfce0b,#e5f0dd13 49%,#7a9b8713)}
/* The station name belongs on the door header, above the opposing windows. */
.platform-station-band{top:1%;height:max(22%,34px)}
.platform-station-info{top:1%;height:max(22%,34px);font-size:clamp(18px,calc(var(--platform-height,151px)*.095),42px);grid-template-columns:auto minmax(0,1fr) auto auto}
.platform-info-transfer{display:flex;align-items:center;gap:.28em;padding-right:.6em;font-size:max(12px,.65em)}
.platform-info-transfer>span{line-height:1.1}.platform-info-transfer small{display:block;font:400 max(8px,.52em)/1.15 Arial,sans-serif}
.platform-info-transfer>b{font:600 1em/1.2 Arial,sans-serif;min-width:1.35em;padding:.12em .25em;text-align:center;color:#fff;border-radius:2px}
.platform-bay .platform-guide,.platform-bay .platform-exit,.platform-bay .platform-bench{display:none}
@media(max-width:720px){.platform-station-info{font-size:clamp(16px,calc(var(--platform-height,151px)*.095),30px);column-gap:.3em}.platform-info-transfer{padding-right:.25em}}
/* Keep bilingual lettering below the foreground door header. */
.platform-station-band,.platform-station-info{top:6%;height:max(20%,34px)}

/* Station-specific B/C families. Lighting sits above the information fascia;
   the fascia and its bilingual lettering share a single containing band. */
.platform{--gate-frame:#6c7d76;--gate-highlight:#c2ccc3;--gate-sill:#adb9ae;--header-paper:#e9ede2;--header-ink:#213b36;--header-top:6%;--header-height:max(20%,34px)}
.platform-bay .platform-station-band{display:none}
.platform-header{position:absolute;left:0;right:0;top:var(--header-top);height:var(--header-height);background:var(--header-paper);border-top:1px solid #bc3549;border-bottom:2px solid #bc3549;box-shadow:0 2px 3px #0005;z-index:3;pointer-events:none}
.platform-station-info{top:var(--header-top);height:var(--header-height);color:var(--header-ink);overflow:hidden;padding-block:1px}
.platform-station-info .platform-station-title{overflow:hidden}
.platform-station-info .platform-name,.platform-station-info .platform-en{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.platform-light-ribbon{position:absolute;left:0;right:0;top:2%;height:1.3%;min-height:2px;background:#ffffed;box-shadow:0 0 3px #fffbd0,0 3px 8px #fff9cb55;z-index:4;pointer-events:none}
.platform-ceiling-light{display:none}
.platform[data-theme="modern"]{--gate-frame:#667078;--gate-highlight:#d5dbe0;--gate-sill:#bdc5c9;--header-paper:#e5e9eb;--header-ink:#283b42}
.platform[data-theme="classic"]{--gate-frame:#262f31;--gate-highlight:#89938f;--gate-sill:#252e2e;--header-paper:#efeee4;--header-ink:#233c38}
.platform[data-theme="modern"] .platform-roof{background:repeating-linear-gradient(90deg,#7d888f 0 2px,#c1c8cc 3px 19px,#68757d 20px 22px);box-shadow:0 3px 5px #0005}
.platform[data-theme="modern"] .platform-roof-beam{background:linear-gradient(#78848c,#c2cbd1 40%,#737f87);height:3%;top:0}
.platform[data-theme="modern"] .platform-light-ribbon{background:#f2fcff;box-shadow:0 0 3px #e9f8ff,0 4px 10px #d8edff60}
.platform[data-theme="classic"] .platform-roof{background:repeating-linear-gradient(0deg,#1c2528 0 2px,#596562 3px 4px,#2c3738 5px 7px);box-shadow:0 2px 5px #0009}
.platform[data-theme="classic"] .platform-roof-beam{background:#2b3636;top:0;height:2%;box-shadow:none}
.platform[data-theme="classic"] .platform-light-ribbon{background:repeating-linear-gradient(90deg,#fffde3 0 145px,#313c3c 146px 190px);box-shadow:0 2px 5px #fff8cc44}
.platform[data-theme="classic"][data-finish="stone"] .platform-column{background:linear-gradient(90deg,#a7a395,#d2d0c2 35%,#b5b5a8 86%,#777f74)}
.platform[data-theme="modern"] .platform-column{background:linear-gradient(90deg,#8b969e,#e1e7e9 35%,#b7c2c8 84%,#6f7e86)}
.platform[data-theme="classic"] .platform-column{background:linear-gradient(90deg,#7e8a85,#d1d7cd 35%,#a9b5ab 82%,#6c7b74)}
.platform[data-theme="classic"] .platform-far-floor{background:repeating-linear-gradient(90deg,transparent 0 109px,#c2c6bb33 110px 111px),linear-gradient(#a2aca3,#c2c8bc 8%,#aeb9ad 65%,#86988b)}
.platform[data-theme="modern"] .platform-far-floor{background:repeating-linear-gradient(90deg,transparent 0 119px,#939fa744 120px 121px),linear-gradient(#a8b2b8,#d0d7d8 9%,#b4bfc1 68%,#899b9c)}
/* The stationary frame, sliding leaves and lower panels use the same family.
   One frame at each opening; no second decorative fence across the glazing. */
.platform[data-screen="full"] .far-gate-fixed,.platform[data-screen="full"] .far-gate-leaf{border-top:0;border-bottom:2px solid var(--gate-frame);background:linear-gradient(115deg,#dbeaf003,#dbeaf00a 55%,transparent);box-shadow:inset 1px 0 #d5e2df18}
.platform[data-screen="full"] .far-gate-fixed.left{border-right:3px solid var(--gate-frame)}
.platform[data-screen="full"] .far-gate-fixed.right{border-left:3px solid var(--gate-frame)}
.platform[data-screen="full"] .far-gate-leaf.left{border-right:1px solid var(--gate-frame)}
.platform[data-screen="full"] .far-gate-leaf.left:after{width:2px;top:35%;bottom:22%;background:repeating-linear-gradient(#ddc863 0 5px,#303a38 5px 10px)}
.platform[data-screen="full"] .far-gate-fixed:before,.platform[data-screen="full"] .far-gate-leaf:before{height:18%;background:linear-gradient(100deg,var(--gate-sill),var(--gate-highlight) 48%,var(--gate-sill));border-top:2px solid var(--gate-frame)}
.platform[data-theme="classic"] .far-gate-fixed:before,.platform[data-theme="classic"] .far-gate-leaf:before{height:21%;background:repeating-linear-gradient(0deg,#202a2b 0 2px,#53615e 2px 3px,#2a3433 3px 5px);border-top:2px solid #1b2526}
.platform[data-screen="full"] .far-platform-gates:after,.platform[data-screen="full"] .near-platform-gates:after{background:linear-gradient(var(--gate-frame),var(--gate-highlight) 40%,var(--gate-frame));height:4%;border-bottom-color:var(--gate-frame)}
.platform[data-screen="full"] .near-gate-fixed,.platform[data-screen="full"] .near-gate-leaf{border-color:var(--gate-frame);background:linear-gradient(115deg,#d8e8e804,#e1ece707 55%,transparent);box-shadow:inset 1px 0 #e7eddf33}
.platform[data-screen="full"] .near-gate-fixed:before,.platform[data-screen="full"] .near-gate-leaf:before{height:15%;background:linear-gradient(100deg,var(--gate-sill),var(--gate-highlight) 50%,var(--gate-sill));border-top-color:var(--gate-frame)}
.platform[data-theme="classic"] .near-gate-fixed:before,.platform[data-theme="classic"] .near-gate-leaf:before{background:repeating-linear-gradient(0deg,#273231 0 3px,#52605b 3px 4px,#33403b 4px 6px)}
.platform[data-theme="modern"] .platform-wall-lightbox{border:2px solid #7f8b91;box-shadow:0 0 3px #fffcef,0 0 12px #e1f2ff55}
.platform[data-theme="classic"] .platform-wall-lightbox{border:2px solid #505e5b;box-shadow:0 0 3px #fff5cd,0 0 10px #ffedb754}
.platform[data-theme="daylight"] .platform-light-ribbon,.platform[data-theme="open"] .platform-light-ribbon{background:#fffde9;box-shadow:0 0 3px #fffbd0,0 3px 7px #fff9cb44}
@media(max-width:720px){.platform-station-info .platform-bound>small{font-size:8px}.platform-info-transfer{font-size:11px}}
/* A single overhead fascia occludes the structural uprights behind it. */
.platform-header{z-index:5}.platform-info-row{z-index:6}.platform-light-ribbon{z-index:7}

/* Signs occupy the shared open/closed sightline. They never move vertically
   with our doors, and the opposite direction band contains no wayfinding. */
.platform{--header-top:24px;--header-height:32px;--station-font:16px}
.platform-station-info{grid-template-columns:auto minmax(0,1fr) auto;font-family:"PingFang SC","Microsoft YaHei",sans-serif;font-size:var(--station-font);column-gap:.48em;padding-inline:calc(var(--platform-sign-width,662px)*.018)}
.platform-station-info .platform-name{font-weight:500;line-height:1.12;letter-spacing:.045em}
.platform-station-info .platform-en{font-family:Arial,sans-serif;font-size:max(8px,.46em);font-weight:400;letter-spacing:.045em;line-height:1.2}
.platform-station-info .platform-route-number{height:1.55em;min-width:1.08em;font-weight:400;font-size:.88em}
.platform-station-info .platform-bound{font-size:max(11px,.58em);font-weight:500;letter-spacing:.035em}
.platform-station-info .platform-bound>small{font-size:max(7px,.57em);letter-spacing:.01em;font-weight:400;line-height:1.2}
.platform-near-wayfinding{position:absolute;inset:0;z-index:9;pointer-events:none}
.platform-near-guide{position:absolute;top:0;left:calc(50% + var(--sign-index)*var(--platform-sign-spacing,1116px) + var(--platform-sign-width,662px)*.18);transform:translateX(-50%);display:flex;align-items:center;gap:.4em;height:22px;padding:1px .8em;background:#172c32;border:1px solid #788c8a;box-shadow:0 2px 2px #0005;color:#f0f1e5;font-size:11px;white-space:nowrap}
.platform-near-guide:before,.platform-near-guide:after{content:"";position:absolute;bottom:100%;height:12px;width:2px;background:#76847d}.platform-near-guide:before{left:15%}.platform-near-guide:after{right:15%}
.platform-near-guide .guide-arrow{font-size:1.5em}.platform-near-guide .guide-copy{font-weight:500}.platform-near-guide .guide-copy small{font-size:.55em;line-height:1.1;margin-top:1px}.platform-near-guide .platform-transfer-line{gap:.3em}.platform-near-guide .platform-transfer-line>b{border:0;border-radius:1px;font-weight:500;font-size:.95em}

/* A canopy, end post, safety gates and floor finish at separate physical
   positions. No opacity fade and no printed names cut at a station end. */
.outside-world .platform:before,.outside-world .platform:after{display:none}
.platform-header,.platform-light-ribbon{left:var(--station-end-clearance,120px);right:var(--station-end-clearance,120px)}
.outside-world .platform-roof{left:calc(var(--station-end-clearance,120px)*.65);right:calc(var(--station-end-clearance,120px)*.65)}
.platform-bays{clip-path:inset(0 calc(var(--station-end-clearance,120px)*.65))}
.far-platform-gates,.far-platform-wall-ads{clip-path:inset(0 var(--station-end-clearance,120px))}
.near-platform-gates{clip-path:inset(0 calc(var(--station-end-clearance,120px)*.3))}
.platform-end-zone{position:absolute;top:0;bottom:0;width:var(--station-end-clearance,120px);z-index:7;pointer-events:none}
.platform-end-zone.start{left:0}.platform-end-zone.end{right:0;transform:scaleX(-1)}
.platform-end-post{position:absolute;right:0;top:0;bottom:15%;width:max(5px,calc(var(--platform-height,151px)*.035));background:linear-gradient(90deg,#75857c,#c7cec2 40%,#8d9b8f);box-shadow:2px 0 2px #0003}
.platform-end-rail{position:absolute;left:16%;right:0;top:55%;height:24%;border-top:2px solid #9eaaa0;border-bottom:2px solid #7f9087;background:repeating-linear-gradient(90deg,transparent 0 25px,#8b9b91 26px 28px);transform:skewY(-9deg);transform-origin:right}
.platform[data-structure="underground"] .platform-end-zone{background:linear-gradient(90deg,#060a0b 0 33%,#233031 33% 39%,#0b1214 39% 69%,#364240 69% 72%,#151f20 72% 100%)}
.platform[data-structure="underground"] .platform-end-rail{display:none}
@media(max-width:720px){.platform-station-info{font-size:16px;column-gap:.35em}.platform-station-info .platform-bound{font-size:10px}.platform-station-info .platform-bound>small{font-size:7px}}

/* Shallow solid faces establish depth without changing the scene's camera,
   travel coordinates, door bounds or animation clocks. */
.platform-header{background:linear-gradient(#f7f6eb33,transparent 22%),var(--header-paper);box-shadow:0 2px 0 #7e8a81,0 4px 3px #15262255}
.platform-header:after{content:"";position:absolute;left:0;right:0;top:100%;height:3px;background:#657269;transform:skewX(-24deg);transform-origin:top}
.platform-column{width:clamp(6px,calc(var(--platform-height,151px)*.035),12px);box-shadow:2px 0 0 #475b5060,4px 1px 5px #1e352c2b}
.platform-column:after{content:"";position:absolute;left:-25%;right:-25%;bottom:0;height:5%;background:linear-gradient(#a3b0a5,#677d70);border-top:1px solid #d6ddd0;box-shadow:3px 2px 3px #162c2750}
.outside-world .platform-roof{box-shadow:0 2px 0 #5d7066,0 5px 5px #172b2545}
.platform-far-floor:before{content:"";position:absolute;inset:0;background:linear-gradient(#23352c27,transparent 35%,#ebead620);pointer-events:none}
.platform-far-floor:after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(107deg,transparent 0 108px,#5c74652b 109px 110px,transparent 111px 220px);pointer-events:none}
.far-gate-fixed,.far-gate-leaf{box-shadow:inset 1px 0 #deebe233,inset -1px 0 #263d3a33}
.near-gate-fixed,.near-gate-leaf{box-shadow:inset 1px 0 #e5ecde77,1px 0 1px #1c30263b;background:linear-gradient(110deg,transparent 12%,#dcecdf08 35%,transparent 37%,transparent 76%,#f1f5e60b 77%,transparent 80%)}
.platform-end-post{box-shadow:3px 0 0 #5a6b605c,5px 1px 4px #243f3245}
.platform-end-zone:before{content:"";position:absolute;left:65%;right:-3px;top:0;height:8%;background:linear-gradient(#9caba0,#647b6d);clip-path:polygon(0 0,100% 0,100% 100%,10% 65%)}
.platform-bay .platform-column{display:none}
.platform-supports{position:absolute;inset:0;z-index:4;pointer-events:none;clip-path:inset(0 var(--station-end-clearance,120px))}
.platform-supports .platform-column{top:0;bottom:15%;transform:none}
[data-column="steel"] .platform-supports .platform-column{background:linear-gradient(90deg,#344d4d 0 18%,#637c79 19% 79%,#29423f 80%);border-left:1px solid #9aaea0;border-right:1px solid #203c39}
[data-column="steel"] .platform-supports .platform-column:before{content:"";position:absolute;top:0;left:-65%;width:230%;height:9%;background:#49635e;clip-path:polygon(0 0,100% 0,66% 100%,34% 100%)}

/* Line 2 Youfangqiao is an enclosed ground-level hall with dark full-height
   doors and louvred lower panels. The track wall sits behind the train canvas;
   an opaque per-bay hall backdrop must not paint over a berthed train. */
.outside-world .platform[data-gate-style="oil-louver"]{background:#080d0f;--gate-frame:#252d30;--gate-highlight:#8e9893;--gate-sill:#26302f}
.platform[data-gate-style="oil-louver"] .platform-backdrop{background:none;border:0;box-shadow:none}
.platform[data-gate-style="oil-louver"] .far-gate-fixed:before,.platform[data-gate-style="oil-louver"] .far-gate-leaf:before{height:21%;background:repeating-linear-gradient(0deg,#202829 0 2px,#53605c 2px 3px,#2a3432 3px 5px);border-top:2px solid #1b2526}
.platform[data-gate-style="oil-louver"] .near-gate-fixed:before,.platform[data-gate-style="oil-louver"] .near-gate-leaf:before{background:repeating-linear-gradient(0deg,#27302e 0 3px,#52605a 3px 4px,#33403a 4px 6px)}
.platform[data-gate-style="oil-louver"] .platform-wall-lightbox{border:2px solid #566360;box-shadow:0 0 3px #fff7dd,0 0 8px #fff0c344}

/* Clip architecture and its track wall, not the complete opposing consist.
   Its viewport-sized canvas cancels the parent translation. Only our window,
   a real tunnel/hall wall, or the physical cab end may cut the visible train. */
.outside-world .platform{overflow:visible;contain:none;background:none!important}
.platform-track-wall{position:absolute;inset:0;z-index:0;background:#c4cdc5}
.platform[data-enclosure="open"] .platform-track-wall{background:transparent}
.platform[data-structure="underground"] .platform-track-wall,.platform[data-gate-style="oil-louver"] .platform-track-wall{background:#080d0f}
.platform-architecture{position:absolute;inset:0;overflow:hidden;contain:paint;z-index:2}
.waiting-train{z-index:1}
.platform-architecture .platform-backdrop{background:none!important;border:0!important;box-shadow:none!important}

/* Red dot-matrix pages during travel. Door and station messages retain their
   existing continuous marquee layout. */
.led-copy{color:#ff392e;text-shadow:0 0 3px #ff291a70}
.led-display[data-mode="pages"]{justify-content:center}
.led-display[data-mode="pages"] .led-track{width:100%;max-width:100%;justify-content:center;transform:none!important;will-change:auto}
.led-display[data-mode="pages"] .led-copy{padding:0;text-align:center}
.led-display[data-mode="pages"] .led-copy.english{font-size:24px;letter-spacing:2px}
.led-display[data-mode="pages"] .led-copy[aria-hidden="true"]{display:none}
@media(max-width:720px){.led-display[data-mode="pages"] .led-copy.english{font-size:20px;letter-spacing:1px}}

/* Commuters stand between the two track edges: in front of the far gates,
   behind columns, fascia, the near gates and our own sliding doors. */
.platform-passengers{position:absolute;left:0;top:0;z-index:3;pointer-events:none;will-change:transform}
