*,:before,:after{box-sizing:border-box;margin:0;padding:0}[hidden]{display:none!important}button,select,input,a,[role=button]{touch-action:manipulation}:root{--bg-dark:#111;--bg-mid:#1a1a1a;--bg-panel:#222;--bg-header:#2a2a2a;--border:#3a3a3a;--text-main:#d8d8d8;--text-dim:#888;--text-faint:#555;--green:#3db868;--red:#c20;--amber:#e08800;--blue:#48c;--tc-clear:#3db868;--tc-occupied:#c20;--tc-failed:#ff8c00;--tc-none:#666;--locking-colour:#c20;--auto-locking-colour:#f80}body{background:var(--bg-dark);color:var(--text-main);flex-direction:column;height:100vh;font-family:Courier New,Courier,monospace;display:flex;overflow:hidden}#app{flex-direction:column;height:100vh;display:flex;overflow:hidden}#app-header{background:var(--bg-header);border-bottom:2px solid #444;flex-shrink:0;justify-content:flex-start;align-items:center;gap:16px;padding:7px 14px;display:flex}#box-selector{color:var(--text-main);cursor:pointer;background:#333;border:1px solid #555;border-radius:3px;flex-shrink:0;max-width:340px;padding:4px 8px;font-family:Courier New,Courier,monospace;font-size:12px;font-weight:700}#box-selector:focus{border-color:#888;outline:1px solid #888}#box-status{color:var(--green);letter-spacing:1px;font-size:12px;font-weight:700}#box-status.switched-out{color:var(--red)}#app-body{flex-direction:column;flex:1;display:flex;overflow:hidden}#app-main{flex:1;min-height:0;display:flex;overflow:hidden auto}#app-center{flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden auto}#track-panel[data-bg=image]{background:0 0!important}#track-panel[data-bg=image]:before{content:"";background-image:var(--panel-bg-img);filter:blur(3px);z-index:0;background-position:50%;background-repeat:no-repeat;background-size:cover;position:absolute;inset:0}#track-panel{background:linear-gradient(90deg,#00000073 0%,#0000001a 7%,#0000 18% 82%,#0000001a 93%,#00000073 100%),linear-gradient(#0000008c 0%,#0000000d 6%,#0000 12%),linear-gradient(90deg,#0000 calc(33% - 5px),#1a2414 calc(33% - 5px),#2e3c22 33%,#1a2414 calc(33% + 5px),#0000 calc(33% + 5px)),linear-gradient(90deg,#0000 calc(67% - 5px),#1a2414 calc(67% - 5px),#2e3c22 67%,#1a2414 calc(67% + 5px),#0000 calc(67% + 5px)),linear-gradient(#0000 calc(42% - 4px),#1a2414 calc(42% - 4px),#2e3c22 42%,#1a2414 calc(42% + 4px),#0000 calc(42% + 4px)),radial-gradient(28% 10% at 22% 22%,#fff9 0%,#0000 100%),radial-gradient(18% 7% at 55% 15%,#ffffff80 0%,#0000 100%),radial-gradient(22% 8% at 80% 28%,#ffffff73 0%,#0000 100%),radial-gradient(14% 5% at 42% 32%,#ffffff4d 0%,#0000 100%),radial-gradient(10% 4% at 68% 38%,#ffffff40 0%,#0000 100%),radial-gradient(100% 25% at 50% 60%,#d2e1c3a6 0%,#0000 70%),linear-gradient(#1b3d72 0%,#2e5fa8 12%,#5590d8 32%,#88baea 50%,#b8d8f2 58%,#cce0c0 63%,#7aaa44 68%,#5a8a30 76%,#3a6020 86%,#1e3c10 100%);border-bottom:3px solid #1e0c04;flex-shrink:0;padding:18px 0 4px;position:relative}#track-diagram-wrap{z-index:1;scrollbar-width:none;max-width:100%;display:block;position:relative;overflow:auto hidden}#track-diagram-wrap::-webkit-scrollbar{display:none}#track-diagram{background:var(--bg-dark);margin:0 auto;display:block}#diagram-notice{color:#e8d8b8;text-align:left;z-index:1;text-shadow:0 1px 3px #000000d9;padding:3px 16px 2px;font-family:monospace;font-size:10px;font-weight:700;display:block;position:relative}#panel{flex-direction:column;flex-shrink:0;display:flex}.panel-row{flex-wrap:wrap;align-items:flex-start;gap:8px;padding:4px 0 0;display:flex}.panel-block{flex-shrink:0}.panel-row--collapsible{flex-flow:row;align-items:stretch;gap:0;padding:0}.panel-row-header{background:var(--bg-header);border-right:1px solid var(--border);-webkit-user-select:none;user-select:none;cursor:pointer;flex-direction:column;flex-shrink:0;justify-content:space-between;align-items:center;width:18px;min-width:18px;padding:4px 0;display:flex}.panel-row-header:hover{background:var(--bg-hover,var(--bg-header))}.panel-row-header-label{text-transform:uppercase;color:var(--text-dim);letter-spacing:.08em;writing-mode:vertical-rl;text-overflow:ellipsis;white-space:nowrap;flex:1;max-height:120px;font-size:8px;overflow:hidden;transform:rotate(180deg)}.panel-row-collapser-btn{color:var(--text-dim);cursor:pointer;text-align:center;background:0 0;border:none;width:100%;padding:0;font-family:inherit;font-size:9px;line-height:1}.panel-row-collapser-btn:hover{color:var(--text-main)}.panel-row-body{flex-wrap:wrap;flex:1;align-items:flex-start;gap:8px;min-width:0;padding:4px 0 4px 6px;display:flex}.panel-row--collapsed .panel-row-body{cursor:pointer;flex-wrap:nowrap;align-items:stretch;gap:0;max-height:none;padding:0;display:flex;overflow:hidden}.panel-row--collapsed .panel-row-body>:not(.panel-block),.panel-block-mini,.panel-row--collapsed .panel-block-full{display:none}.panel-row--collapsed .panel-block-mini{align-items:center;min-width:0;display:flex}.mini-widget{height:36px;color:var(--text-dim);white-space:nowrap;border-right:1px solid var(--border);flex-shrink:0;align-items:center;gap:4px;padding:0 7px;font-family:Courier New,Courier,monospace;font-size:9px;display:flex}.mini-dot{background:#444;border-radius:50%;flex-shrink:0;width:7px;height:7px}.mini-dot[data-state=occupied],.mini-dot[data-state=on]{background:#c20}.mini-dot[data-state=wrong]{background:#e08800}.mini-dot[data-state=clear],.mini-dot[data-state=off],.mini-dot[data-state=in]{background:#3db868}.mini-dot[data-state=out]{background:#555}.mini-dot[data-state=holding]{background:#48c}.mini-dot[data-state=active]{background:#e08800}.mini-dot[data-state=ringing]{background:#e08800;animation:.6s infinite alternate highlight-pulse}.mini-label{text-transform:uppercase;letter-spacing:.03em;text-overflow:ellipsis;max-width:90px;font-size:9px;overflow:hidden}.mini-badge{letter-spacing:.05em;color:#777;background:#2a2a2a;border-radius:2px;flex-shrink:0;padding:1px 4px;font-size:8px;font-weight:700}.mini-badge.is-in{color:#3db868;background:#1a3a1a}.mini-badge.is-out{color:#777;background:#2a2a2a}.mini-badge.is-nskt{color:#e08800;background:#3a2a00}.mini-badge.is-active{color:#c44;background:#3a0a0a}.mini-badge.is-on{color:#3db868;background:#1a3a1a}.mini-badge.is-off{color:#777;background:#2a2a2a}.mini-badge.is-wrong{color:#e08800;background:#3a2a00}.mini-badge.is-received{color:#48c;background:#1a2a3a}.mini-badge.is-clear{color:#3db868;background:#1a3a1a}.mini-badge.is-occupied{color:#c44;background:#3a0a0a}.mini-dot[data-state=deflected-left],.mini-dot[data-state=deflected-right],.mini-dot[data-state=treadle-active]{background:#c70}.mini-dot[data-state=item]{background:#e08800}.mini-tokens{align-items:center;gap:3px;display:flex}.mini-tokens .mini-dot{background:#2a2a2a;border:1px solid #555;width:6px;height:6px}.mini-tokens .mini-dot.filled{background:#c90;border-color:#c90}.mini-phone-icon{color:var(--text-dim);font-size:13px;line-height:1}.mini-widget.is-ringing .mini-phone-icon{color:#e08800;animation:.5s infinite alternate highlight-pulse}.mini-widget--telephone{cursor:pointer}.mini-widget--telephone:hover{background:#ffffff0a}.mini-bell-btn.bell-button{min-width:unset;height:20px;padding:2px 6px}.mini-widget--clock{gap:5px}.mini-clock-icon{font-size:12px;line-height:1}.mini-clock-time{color:var(--text-main);letter-spacing:.08em;font-family:Courier New,Courier,monospace;font-size:13px;font-weight:700}.lever-frame-mini-label{text-transform:uppercase;letter-spacing:.08em;color:var(--text-dim);border:1px solid var(--border);white-space:nowrap;border-radius:2px;padding:2px 8px;font-size:9px;font-weight:700}[data-theme=light] .mini-dot[data-state=clear],[data-theme=light] .mini-dot[data-state=off]{background:#2a8a48}[data-theme=light] .mini-dot[data-state=out]{background:#aaa}[data-theme=light] .mini-badge{color:#666;background:#e0e0e0}[data-theme=light] .mini-badge.is-in{color:#2a6a2a;background:#c8e8c8}[data-theme=light] .mini-widget{border-right-color:var(--border)}.instrument-group{flex-wrap:wrap;align-items:stretch;gap:8px;display:flex}.instrument-group-label{color:var(--text-faint);text-transform:uppercase;letter-spacing:1px;align-self:center;font-size:9px}.token-instrument{background:var(--bg-panel);border:2px solid var(--border);cursor:pointer;border-radius:3px;flex-direction:column;align-items:center;min-width:130px;padding:5px 10px;transition:border-color .15s;display:flex}.token-instrument:hover{border-color:#666}.etb-nskt-stamp{letter-spacing:3px;color:#dc3c3cd9;pointer-events:none;text-shadow:1px 1px 3px #0009;border:2px solid #dc3c3c8c;border-radius:2px;justify-content:center;align-items:center;font-size:18px;font-weight:900;display:flex;position:absolute;inset:0;transform:rotate(-15deg)}.token-instrument.inoperable{opacity:.45;cursor:default}.token-name{color:var(--text-dim);text-align:center;margin-bottom:3px;font-size:9px}.token-state{letter-spacing:1px;font-size:13px;font-weight:700}.token-state.normalFree{color:var(--green)}.token-state.tokenOut{color:var(--amber)}.token-state.NSKT{color:#e06060}.token-state.failed{color:var(--red)}.signalman-holding{background:#0e0e0e;border:2px solid #2a2a2a;border-radius:6px;flex-direction:column;align-items:center;gap:4px;width:121px;padding:6px 10px 8px;transition:border-color .2s;display:flex}.signalman-holding.holding{border-color:#3a2e1a}.signalman-holding.vertical{width:94px}.signalman-holding-label{color:var(--text-faint);text-transform:uppercase;letter-spacing:.8px;text-align:center;font-size:9px}.signalman-holding svg{display:block}.signalman-item{justify-content:center;align-items:center;width:101px;height:52px;font-size:38px;line-height:1;display:flex}.signalman-item.vertical{width:52px;height:101px}.signalman-holding-btn{color:#888;cursor:pointer;text-align:center;background:#1a1a1a;border:1px solid #333;border-radius:2px;width:100%;padding:3px 6px;font-size:9px;line-height:1.4}.signalman-holding-btn:hover{color:var(--text-main);background:#2a2a2a;border-color:#555}.etb-token-discs{flex-direction:row;justify-content:space-between;align-items:center;gap:4px;min-height:18px;margin:4px 0;display:flex}.etb-no-token{color:var(--text-dim);font-size:10px;font-style:italic}.etb-btn-row{flex-direction:row;justify-content:space-between;gap:4px;margin:3px 0;display:flex}.etb-operate-btn{color:#ccc;cursor:pointer;background:#333;border:1px solid #555;border-radius:2px;padding:3px 7px;font-size:10px}.etb-operate-btn:hover{color:#fff;background:#444}.etb-operate-btn:disabled{color:#555;cursor:not-allowed;background:#222;border-color:#333}.etb-instrument{background:#111;border:2px solid #2a2a2a;border-radius:65px 65px 0 0;flex-direction:column;align-items:stretch;width:130px;display:flex;position:relative;overflow:hidden}.etb-instrument.inoperable{opacity:.45;cursor:default}.etb-top-section{position:relative}.etb-body{background:#1a1a1a;flex-direction:column;gap:4px;padding:0 8px 6px;display:flex}.etb-section-label{color:#f0e0b0;letter-spacing:.8px;text-align:center;word-break:break-word;background:#5e0e0e;min-height:44px;margin:0 -8px 4px;padding:12px 12px 8px;font-size:9px;font-weight:700;line-height:1.3;position:relative;overflow:hidden}.etb-mode-label{text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);text-align:center;margin:0 0 1px;padding:0 6px;font-size:10px}.etb-slots{flex-direction:row;justify-content:center;gap:5px;margin:2px 0;display:flex}.etb-slot{background:#222;border:1px solid #3a3a3a;border-radius:2px;width:18px;height:30px}.etb-slot.filled{background:#c49a28;border-color:#8a6a18;box-shadow:inset 0 1px 3px #fff3}.block-switch-widget{cursor:pointer;flex-direction:column;align-items:center;gap:3px;display:flex}.block-switch-widget:hover svg{filter:brightness(1.08)}.block-switch-widget.highlighted,.etb-instrument.highlighted{animation:.9s ease-in-out infinite highlight-pulse}.block-switch-label{color:var(--text-dim);text-align:center;text-transform:uppercase;letter-spacing:.5px;font-size:8px}.block-switch-lever{transform-box:view-box;transform-origin:26px 52px}.block-switch-lever.at-in{transform:rotate(0)}.block-switch-lever.at-out{transform:rotate(-90deg)}.block-switch-lever.in-to-out{animation:.4s cubic-bezier(.4,0,.2,1) forwards block-switch-in-to-out}.block-switch-lever.out-to-in{animation:.4s cubic-bezier(.4,0,.2,1) forwards block-switch-out-to-in}@keyframes block-switch-in-to-out{0%{transform:rotate(0)}to{transform:rotate(-90deg)}}@keyframes block-switch-out-to-in{0%{transform:rotate(-90deg)}to{transform:rotate(0)}}.block-bell{border:1px solid #444;border-radius:3px;flex-direction:column;gap:4px;min-width:100px;padding:5px 7px;display:flex}.block-bell-name{color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;font-size:9px}.block-bell-received{color:var(--text-faint);align-items:center;gap:5px;font-size:11px;display:flex}.block-bell-received .bell-progress:not(:empty)~span{display:none}.block-bell-received .bell-progress{font-size:inherit;letter-spacing:normal;flex:0 auto}.block-bell-received .bell-cancel-btn{margin-left:auto}.block-bell-received.has-code{color:var(--amber);font-weight:700}.bell-clear-btn{color:inherit;cursor:pointer;opacity:.8;background:0 0;border:1px solid;border-radius:2px;padding:0 4px;font-family:Courier New,Courier,monospace;font-size:9px}.bell-clear-btn:hover{opacity:1}.bell-input-row{flex-direction:row;justify-content:space-between;align-items:center;gap:6px;padding:0 10px 2px;display:flex}.bell-icon{color:#b89830;transform-origin:50% 4%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:flex}.bell-icon svg{width:100%;height:100%}@keyframes bell-super-pulse{0%,to{filter:drop-shadow(0 0 2px #ffdc0040)}50%{filter:drop-shadow(0 0 10px #ffdc00f2)drop-shadow(0 0 5px #ffffa0a6)}}[data-theme=light] .bell-icon.bell-super-pulse{animation:.28s ease-out bell-rattle,.9s ease-in-out 4 bell-super-pulse-light}@keyframes bell-super-pulse-light{0%,to{filter:drop-shadow(0 0 2px #8c500059)}50%{filter:drop-shadow(0 0 10px #8c5000e6)drop-shadow(0 0 5px #c8780099)}}@keyframes bell-rattle{0%{transform:rotate(0)}12%{transform:rotate(-18deg)}26%{transform:rotate(18deg)}40%{transform:rotate(-13deg)}54%{transform:rotate(13deg)}68%{transform:rotate(-7deg)}82%{transform:rotate(5deg)}to{transform:rotate(0)}}.bell-icon.bell-rattle{animation:.28s ease-out bell-rattle}.bell-icon.bell-super-pulse{animation:.28s ease-out bell-rattle,.9s ease-in-out 4 bell-super-pulse}.bell-button{cursor:pointer;color:#0000;background:radial-gradient(circle at 42% 36%,#b4642859 0%,#0000 55%),radial-gradient(circle,#7a3e18 0%,#4e2209 55%,#2a1005 100%);border:2px solid #150806;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;font-size:0;transition:box-shadow 80ms;display:flex;position:relative;box-shadow:0 4px 10px #000000bf,inset 0 1px #b4642840,inset 0 -3px 5px #0000008c}.bell-button:before{content:"";background:radial-gradient(circle at 38% 30%,#f8e878,#d4a015 38%,#a87010 68%,#6a4800 100%);border:1px solid #5a3200b3;border-radius:50%;width:24px;height:24px;transition:transform 80ms,box-shadow 80ms,background 80ms;position:absolute;box-shadow:0 2px 5px #000000a6,inset 0 1px 3px #fff8a0a6,inset 0 -2px 4px #00000073}.bell-button:hover:before{background:radial-gradient(circle at 38% 30%,#fff098,#e8b820 38%,#c09020 68%,#7a5800 100%);box-shadow:0 2px 7px #00000080,inset 0 1px 3px #fffcb4b3,inset 0 -2px 4px #00000059}.bell-button:active:before,.bell-button.bell-held:before{background:radial-gradient(circle at 42% 40%,#f0d860,#c09010 40%,#906008 68%,#5a3c00 100%);transform:translateY(2px)scale(.97);box-shadow:0 1px 2px #0009,inset 0 2px 4px #0006,inset 0 -1px 2px #ffdc5033}.bell-button.bell-flash:before{background:radial-gradient(circle at 38% 30%,#ffffc0,#f8e040 35%,#d8a828 65%,#906008 100%);box-shadow:0 0 10px #f0c828cc,0 2px 4px #00000080,inset 0 1px 3px #ffffc8cc}.bell-progress{color:var(--amber);letter-spacing:2px;flex:1;min-height:16px;font-size:13px}.bell-cancel-btn{color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #555;border-radius:2px;flex-shrink:0;padding:1px 5px;font-size:10px}.bell-cancel-btn:hover{border-color:var(--red);color:var(--red)}.needle-gauge-widget{background:var(--bg-panel);border:1px solid var(--border);border-radius:3px;flex-direction:column;align-items:center;gap:3px;padding:4px;display:flex}.needle-gauge-label{color:var(--text-dim);text-align:center;font-size:8px;line-height:1.2}.needle-gauge-needle{transform-box:view-box;transform-origin:37px 37px;transform:rotate(var(--ng-rest,180deg));transition:transform .25s ease-out}.needle-gauge-needle.deflected-right{animation:needle-swing-right var(--ng-swing,.6s) linear 1 forwards, needle-judder-right var(--ng-judder,1.1s) ease-in-out var(--ng-swing,.6s) infinite;transition:none}.needle-gauge-needle.deflected-left{animation:needle-swing-left var(--ng-swing,.6s) linear 1 forwards, needle-judder-left var(--ng-judder,1.1s) ease-in-out var(--ng-swing,.6s) infinite;transition:none}.needle-gauge-needle.returning-right{animation:needle-return-right var(--ng-swing,.6s) linear 1 forwards;transition:none}.needle-gauge-needle.returning-left{animation:needle-return-left var(--ng-swing,.6s) linear 1 forwards;transition:none}.needle-gauge-needle.at-deflected-right{animation:needle-judder-right var(--ng-judder,1.1s) ease-in-out 0s infinite}.needle-gauge-needle.at-deflected-left{animation:needle-judder-left var(--ng-judder,1.1s) ease-in-out 0s infinite}@keyframes needle-swing-right{0%{transform:rotate(var(--ng-rest,180deg))}58%{transform:rotate(122deg)}76%{transform:rotate(134deg)}90%{transform:rotate(127deg)}to{transform:rotate(130deg)}}@keyframes needle-swing-left{0%{transform:rotate(var(--ng-rest,180deg))}58%{transform:rotate(238deg)}76%{transform:rotate(226deg)}90%{transform:rotate(233deg)}to{transform:rotate(230deg)}}@keyframes needle-judder-right{0%{transform:rotate(130deg)}15%{transform:rotate(124deg)}30%{transform:rotate(135deg)}45%{transform:rotate(127deg)}60%{transform:rotate(133deg)}75%{transform:rotate(126deg)}90%{transform:rotate(131deg)}to{transform:rotate(128deg)}}@keyframes needle-judder-left{0%{transform:rotate(230deg)}15%{transform:rotate(236deg)}30%{transform:rotate(225deg)}45%{transform:rotate(233deg)}60%{transform:rotate(227deg)}75%{transform:rotate(234deg)}90%{transform:rotate(229deg)}to{transform:rotate(232deg)}}@keyframes needle-return-right{0%{transform:rotate(130deg)}58%{transform:rotate(calc(var(--ng-rest,180deg) + 8deg))}76%{transform:rotate(calc(var(--ng-rest,180deg) - 4deg))}90%{transform:rotate(calc(var(--ng-rest,180deg) + 2deg))}to{transform:rotate(var(--ng-rest,180deg))}}@keyframes needle-return-left{0%{transform:rotate(230deg)}58%{transform:rotate(calc(var(--ng-rest,180deg) - 8deg))}76%{transform:rotate(calc(var(--ng-rest,180deg) + 4deg))}90%{transform:rotate(calc(var(--ng-rest,180deg) - 2deg))}to{transform:rotate(var(--ng-rest,180deg))}}.needle-gauge-needle.treadle-activating{animation:treadle-swing-active var(--ng-swing,.6s) linear 1 forwards, treadle-judder-active var(--ng-judder,1.1s) ease-in-out var(--ng-swing,.6s) infinite;transition:none}.needle-gauge-needle.treadle-returning{animation:treadle-swing-return var(--ng-swing,.6s) linear 1 forwards;transition:none}.needle-gauge-needle.at-treadle-active{animation:treadle-judder-active var(--ng-judder,1.1s) ease-in-out 0s infinite}@keyframes treadle-swing-active{0%{transform:rotate(240deg)}58%{transform:rotate(112deg)}76%{transform:rotate(124deg)}90%{transform:rotate(117deg)}to{transform:rotate(120deg)}}@keyframes treadle-judder-active{0%{transform:rotate(120deg)}15%{transform:rotate(114deg)}30%{transform:rotate(125deg)}45%{transform:rotate(117deg)}60%{transform:rotate(123deg)}75%{transform:rotate(116deg)}90%{transform:rotate(121deg)}to{transform:rotate(118deg)}}@keyframes treadle-swing-return{0%{transform:rotate(120deg)}58%{transform:rotate(248deg)}76%{transform:rotate(236deg)}90%{transform:rotate(242deg)}to{transform:rotate(240deg)}}.signal-repeater-widget{background:var(--bg-panel);border:1px solid var(--border);border-radius:3px;flex-direction:column;align-items:center;gap:3px;padding:4px;display:flex}.signal-repeater-needle{transform-box:view-box;transform-origin:37px 37px;transform:rotate(180deg)}.signal-repeater-needle.off-to-on{animation:repeater-off-to-on var(--sr-swing,.65s) linear 1 forwards, repeater-judder-on var(--sr-judder,1.6s) ease-in-out var(--sr-swing,.65s) infinite}.signal-repeater-needle.on-to-off{animation:repeater-on-to-off var(--sr-swing,.65s) linear 1 forwards, repeater-judder-off var(--sr-judder,1.6s) ease-in-out var(--sr-swing,.65s) infinite}.signal-repeater-needle.wrong-to-on{animation:repeater-wrong-to-on var(--sr-swing,.65s) linear 1 forwards, repeater-judder-on var(--sr-judder,1.6s) ease-in-out var(--sr-swing,.65s) infinite}.signal-repeater-needle.wrong-to-off{animation:repeater-wrong-to-off var(--sr-swing,.65s) linear 1 forwards, repeater-judder-off var(--sr-judder,1.6s) ease-in-out var(--sr-swing,.65s) infinite}.signal-repeater-needle.on-to-wrong{animation:repeater-on-to-wrong var(--sr-swing,.65s) linear 1 forwards, repeater-judder-wrong-neg var(--sr-judder,1.6s) ease-in-out var(--sr-swing,.65s) infinite}.signal-repeater-needle.off-to-wrong{animation:repeater-off-to-wrong var(--sr-swing,.65s) linear 1 forwards, repeater-judder-wrong var(--sr-judder,1.6s) ease-in-out var(--sr-swing,.65s) infinite}.signal-repeater-needle.at-wrong{animation:repeater-judder-wrong var(--sr-judder,1.6s) ease-in-out .15s infinite}.signal-repeater-needle.at-on{animation:repeater-judder-on var(--sr-judder,1.6s) ease-in-out 0s infinite}.signal-repeater-needle.at-off{animation:repeater-judder-off var(--sr-judder,1.6s) ease-in-out 0s infinite}@keyframes repeater-off-to-on{0%{transform:rotate(110deg)}45%{transform:rotate(180deg)}76%{transform:rotate(258deg)}90%{transform:rotate(253deg)}to{transform:rotate(250deg)}}@keyframes repeater-on-to-off{0%{transform:rotate(250deg)}45%{transform:rotate(180deg)}76%{transform:rotate(118deg)}90%{transform:rotate(113deg)}to{transform:rotate(110deg)}}@keyframes repeater-wrong-to-on{0%{transform:rotate(180deg)}76%{transform:rotate(258deg)}90%{transform:rotate(253deg)}to{transform:rotate(250deg)}}@keyframes repeater-wrong-to-off{0%{transform:rotate(180deg)}76%{transform:rotate(118deg)}90%{transform:rotate(113deg)}to{transform:rotate(110deg)}}@keyframes repeater-on-to-wrong{0%{transform:rotate(-110deg)}76%{transform:rotate(-186deg)}90%{transform:rotate(-178deg)}to{transform:rotate(-180deg)}}@keyframes repeater-off-to-wrong{0%{transform:rotate(110deg)}76%{transform:rotate(186deg)}90%{transform:rotate(178deg)}to{transform:rotate(180deg)}}@keyframes repeater-judder-on{0%{transform:rotate(250deg)}15%{transform:rotate(247.5deg)}30%{transform:rotate(252deg)}50%{transform:rotate(249deg)}70%{transform:rotate(250.5deg)}85%{transform:rotate(248.5deg)}to{transform:rotate(250deg)}}@keyframes repeater-judder-off{0%{transform:rotate(110deg)}15%{transform:rotate(112.5deg)}30%{transform:rotate(108deg)}50%{transform:rotate(111deg)}70%{transform:rotate(109.5deg)}85%{transform:rotate(111.5deg)}to{transform:rotate(110deg)}}@keyframes repeater-judder-wrong{0%{transform:rotate(180deg)}15%{transform:rotate(182deg)}30%{transform:rotate(178deg)}50%{transform:rotate(181deg)}70%{transform:rotate(179deg)}85%{transform:rotate(181deg)}to{transform:rotate(180deg)}}@keyframes repeater-judder-wrong-neg{0%{transform:rotate(-180deg)}15%{transform:rotate(-182deg)}30%{transform:rotate(-178deg)}50%{transform:rotate(-181deg)}70%{transform:rotate(-179deg)}85%{transform:rotate(-181deg)}to{transform:rotate(-180deg)}}.bar-gauge-widget{background:var(--bg-panel);border:1px solid var(--border);border-radius:3px;flex-direction:column;align-items:center;gap:3px;padding:4px;display:flex}.bar-gauge-bar{transform-box:view-box;transform-origin:37px 37px}.bar-gauge-bar.at-occupied{transform:rotate(0)}.bar-gauge-bar.at-clear{transform:rotate(-45deg)}.bar-gauge-bar.occupied-to-clear{animation:bar-occupied-to-clear var(--bg-swing,.5s) linear 1 forwards}.bar-gauge-bar.clear-to-occupied{animation:bar-clear-to-occupied var(--bg-swing,.5s) linear 1 forwards}@keyframes bar-occupied-to-clear{0%{transform:rotate(0)}76%{transform:rotate(-50deg)}90%{transform:rotate(-43deg)}to{transform:rotate(-45deg)}}@keyframes bar-clear-to-occupied{0%{transform:rotate(-45deg)}76%{transform:rotate(5deg)}90%{transform:rotate(-2deg)}to{transform:rotate(0)}}.telephone-widget{cursor:default;-webkit-user-select:none;user-select:none;flex-direction:column;align-items:center;gap:2px;display:flex}.telephone-widget.is-ringing{cursor:pointer}.tel-svg{display:block}.tel-receiver{transform-box:fill-box;transform-origin:50%}.telephone-widget.is-ringing .tel-receiver{animation:.45s ease-in-out infinite receiver-rattle}@keyframes receiver-rattle{0%{transform:translateY(0)rotate(0)}20%{transform:translateY(-4px)rotate(-9deg)}55%{transform:translateY(-4px)rotate(9deg)}85%{transform:translateY(-2px)rotate(-5deg)}to{transform:translateY(0)rotate(0)}}.tel-label{color:#b0ac9e;text-align:center;letter-spacing:.03em;font-size:9px}.telephone-widget.is-ringing .tel-label{color:#e8c040}[data-theme=light] .tel-label{color:#555}[data-theme=light] .telephone-widget.is-ringing .tel-label{color:#a06000}.dummy-widget{justify-content:center;align-items:center;line-height:0;display:flex}.sim-control-widget{background:var(--bg-panel);border:1px solid var(--border);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:3px;flex-direction:column;align-items:center;gap:4px;min-width:48px;padding:5px 6px;display:flex}.scs-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;text-align:center;font-size:8px;line-height:1.2}.scs-plate{background:#d8d4c8;border:2px solid #b0ac9e;border-radius:4px;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:3px;width:34px;min-height:56px;padding:8px 0;display:flex;position:relative;box-shadow:0 2px 5px #00000080,inset 0 1px #fff9,inset 0 -1px #0000001a}.scs-pos{letter-spacing:1px;font-family:Courier New,Courier,monospace;font-size:7px;font-weight:700;transition:color .15s,opacity .15s}.scs-pos-on{color:#b0ac9e;opacity:.4}.scs-pos-off{color:#5a5650;opacity:1}.sim-control-widget.active .scs-pos-on{color:#3a9a3a;opacity:1}.sim-control-widget.active .scs-pos-off{color:#b0ac9e;opacity:.4}.scs-rocker{transform-origin:50%;background:linear-gradient(#c8c4b8 0%,#e0dcd0 40%,#c0bcb0 100%);border:1px solid #a09c90;border-radius:3px;width:20px;height:38px;transition:transform .12s,box-shadow .12s;transform:perspective(80px)rotateX(12deg);box-shadow:0 3px #909088,inset 0 2px 3px #0003,inset 0 -1px #ffffff80}.sim-control-widget.active .scs-rocker{transform:perspective(80px)rotateX(-12deg);box-shadow:0 -3px #909088,inset 0 -2px 3px #00000026,inset 0 1px #fffc}.crossing-instrument{background:var(--bg-panel);border:1px solid var(--border);cursor:pointer;border-radius:3px;flex-direction:column;align-items:center;min-width:100px;padding:5px 10px;transition:border-color .15s;display:flex}.crossing-instrument:hover{border-color:#666}.crossing-name{color:var(--text-faint);text-align:center;margin-bottom:3px;font-size:9px}.crossing-barriers{letter-spacing:1px;font-size:12px;font-weight:700}.crossing-barriers.up{color:var(--green)}.crossing-barriers.down{color:var(--amber)}.crossing-barriers.inMotion{color:#fff;animation:.6s ease-in-out infinite alternate blink}.crossing-barriers.failed{color:var(--red)}.crossing-mode{color:var(--text-faint);margin-top:2px;font-size:9px}.lever-frames-row{flex-flow:row;align-items:flex-start;gap:8px;display:flex}#lever-frame-wrap,.lever-frame-wrap{background:#282828;border:2px solid #444;flex-shrink:0;align-self:flex-start;padding:8px 32px 6px;position:relative;overflow:auto hidden}#panel-shelf,.panel-shelf{border-bottom:1px solid #383838;align-items:flex-end;gap:5px;margin-bottom:6px;padding-bottom:6px;display:flex}.panel-shelf-slot{flex-shrink:0;justify-content:center;align-items:flex-end;width:19px;display:flex}.panel-shelf-item{cursor:default;flex-direction:column;align-items:center;gap:2px;display:flex}.panel-shelf-item--clickable{cursor:pointer}.panel-shelf-item--clickable:hover .panel-shelf-dot{filter:brightness(1.25)}.panel-shelf-dot{border:1px solid #0006;border-radius:50%;flex-shrink:0;width:13px;height:13px;box-shadow:inset 0 0 4px #00000080}@keyframes panel-shelf-blink{0%{opacity:1}to{opacity:.25}}.panel-shelf-dot--blink{animation:.6s ease-in-out infinite alternate panel-shelf-blink}.panel-shelf-label{color:var(--text-dim);white-space:nowrap;text-align:center;font-family:monospace;font-size:7px;line-height:1;position:relative}.panel-shelf-btn-circle{cursor:pointer;background:#333;border:2px solid #888;border-radius:50%;flex-shrink:0;width:13px;height:13px;padding:0;display:block;box-shadow:0 1px 3px #000000b3,inset 0 1px 1px #ffffff14}.panel-shelf-btn-circle:hover:not(:disabled):not(.panel-shelf-btn-circle--locked){background:#4a4a4a;border-color:#bbb;box-shadow:0 1px 4px #000c,inset 0 1px 2px #ffffff1f}.panel-shelf-btn-circle:active:not(:disabled):not(.panel-shelf-btn-circle--locked){background:#222;box-shadow:inset 0 2px 3px #0009}.panel-shelf-btn-circle:disabled{opacity:.35;cursor:default}.panel-shelf-btn-circle--locked{opacity:.4;cursor:pointer;border-color:#c20}.panel-shelf-btn-circle--confirmed{border-color:#3db868;box-shadow:0 0 4px #3db86880,inset 0 1px 1px #ffffff14}#lever-frame,.lever-frame{align-items:flex-start;gap:5px;min-height:130px;padding-bottom:2px;display:flex}#app-footer{color:#aaa;pointer-events:none;z-index:10;font-family:monospace;font-size:9px;position:fixed;bottom:6px;right:10px}#app-footer a{color:#aaa;pointer-events:all;text-decoration:none}#app-footer a:hover{color:#fff}#lever-frame-notice,.lever-frame-notice{color:#aaa;padding:2px 0 4px;font-family:monospace;font-size:10px}#lever-frame-notice:empty,.lever-frame-notice:empty{display:none}#lever-frame-help-btn{color:#fff;cursor:pointer;background:#1a5fa0;border:1px solid #2a6db5;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;padding:0;font-family:monospace;font-size:10px;line-height:1;display:flex;position:absolute;top:6px;right:8px}#lever-frame-help-btn:hover{background:#2272c3;border-color:#4a8fd0}.lever-legend{height:110px;color:var(--text-faint);text-align:right;white-space:nowrap;flex-direction:column;flex-shrink:0;justify-content:space-between;align-self:flex-start;gap:0;padding:6px 6px 2px 0;font-size:9px;line-height:1;display:flex}.lever-slot{flex-direction:column;flex-shrink:0;align-items:center;width:19px;display:flex}.lever-body{cursor:grab;touch-action:none;width:19px;height:110px;position:relative}.lever-rail{background:#3a3a3a;border-radius:2px;width:4px;position:absolute;top:10px;bottom:10px;left:50%;transform:translate(-50%)}.lever-grip{z-index:1;border-radius:3px;width:14px;height:30px;transition:top .2s;position:absolute;left:50%;transform:translate(-50%)}.lever-grip.normal{top:6px}.lever-grip.reverse{top:74px}.lever-body:hover .lever-grip{filter:brightness(1.3)}.lever-body.locked .lever-grip{outline:2px solid var(--locking-colour);outline-offset:2px}.lever-body.auto-locked .lever-grip{outline:2px solid var(--auto-locking-colour);outline-offset:2px}.lever-grip.has-reminder:after{content:"STOP";background:var(--red);color:#000;border-radius:2px;justify-content:center;align-items:center;width:18px;height:9px;margin-top:7px;font-family:Courier New,Courier,monospace;font-size:5px;font-weight:700;display:flex;position:absolute;top:100%;left:50%;transform:translate(-50%)}.lever-grip.reverse.has-reminder:after{margin-top:0;margin-bottom:7px;top:auto;bottom:100%}.lever-base{background:#4a4a4a;border-radius:2px;width:15px;height:8px}.lever-number{color:var(--text-dim);text-align:center;margin-top:4px;font-size:12px;font-weight:700;line-height:1}.lever-colour-red{background:#c20}.lever-colour-redWhite{background:repeating-linear-gradient(#c20 0 14px,#e8e8e8 14px 24px,#c20 24px)}.lever-colour-yellow{background:#c8a000}.lever-colour-black{background:#202020;border:1px solid #555}.lever-colour-blue{background:#1a4a9a}.lever-colour-brown{background:#7a4020}.lever-colour-brownBlue{background:linear-gradient(90deg,#7a4020 50%,#1a4a9a 50%)}.lever-colour-blueBrown{background:linear-gradient(#1a4a9a 50%,#7a4020 50%)}.lever-colour-blackBlue{background:linear-gradient(#1a4a9a 50%,#202020 50%)}.lever-colour-white{background:#e0e0e0;border:1px solid #888}#status-panel{background:var(--bg-mid);flex-direction:column;padding:8px 10px;display:flex;overflow:hidden}#status-title{text-transform:uppercase;letter-spacing:1px;color:var(--text-faint);flex-shrink:0;align-items:center;margin-bottom:6px;font-size:10px;display:flex}#status-title-text{flex:1}#status-dock-controls{gap:2px;margin-left:4px;display:flex}.dock-btn{color:var(--text-faint);cursor:pointer;opacity:.5;background:0 0;border:1px solid #0000;border-radius:2px;padding:0 3px;font-size:11px;line-height:1.4}.dock-btn:hover,.dock-btn.active{opacity:1;border-color:var(--border);color:var(--text-dim)}#app-body[data-status-dock=bottom] #app-main{flex-direction:column}#app-body[data-status-dock=bottom] #app-center{flex-shrink:0}#app-body[data-status-dock=bottom] #status-panel{flex:1;min-height:60px}#app-body[data-status-dock=left] #app-main{flex-direction:row}#app-body[data-status-dock=left] #app-center{flex:1}#app-body[data-status-dock=left] #status-panel{border-right:1px solid var(--border);flex:0 0 240px;order:-1}#app-body[data-status-dock=right] #app-main{flex-direction:row}#app-body[data-status-dock=right] #app-center{flex:1}#app-body[data-status-dock=right] #status-panel{border-left:1px solid var(--border);flex:0 0 240px}#app-body[data-status-dock=float] #app-main{flex-direction:column}#app-body[data-status-dock=float] #app-center{flex:1}#app-body[data-status-dock=float] #status-panel{z-index:500;border:1px solid var(--border);border-radius:4px;width:280px;height:300px;position:fixed;box-shadow:0 4px 16px #00000080}#app-body[data-status-dock=float] #status-title{cursor:move;-webkit-user-select:none;user-select:none}#status-body{flex:1;font-size:11px;line-height:1.5;overflow-y:auto}.status-entry{white-space:pre-wrap;word-break:break-word;border-left:3px solid #0000;border-radius:2px;margin-bottom:2px;padding:2px 6px}.status-entry.ok{border-left-color:var(--green);color:var(--green)}.status-entry.refused{border-left-color:var(--red);color:#e87070}.status-entry.event{border-left-color:var(--amber);color:var(--amber)}.status-entry.warn{border-left-color:var(--amber);color:var(--text-dim)}.status-entry.info{color:#4a9eda;border-left-color:#4a9eda}.status-entry.token{color:#b07ee8;border-left-color:#b07ee8}.status-entry.train{color:#fff;border-left-color:#ccc}.ctx-menu{z-index:1000;background:#333;border:1px solid #666;border-radius:4px;min-width:160px;padding:4px 0;font-family:Courier New,Courier,monospace;font-size:12px;position:fixed;box-shadow:0 4px 16px #000000b3}.ctx-menu-item{cursor:pointer;color:var(--text-main);white-space:nowrap;padding:6px 14px}.ctx-menu-item:hover{background:#4a4a4a}.ctx-menu-item.separator{border-top:1px solid #444;margin-top:3px;padding-top:9px}.ctx-menu-item.disabled{color:var(--text-faint);cursor:default}.ctx-menu-item.disabled:hover{background:0 0}#train-controls{align-items:center;gap:6px;display:flex}#spawn-select{color:var(--text-main);cursor:pointer;background:#333;border:1px solid #555;border-radius:3px;padding:3px 6px;font-family:Courier New,Courier,monospace;font-size:11px}#spawn-button{color:var(--green);cursor:pointer;white-space:nowrap;background:#2a3a2a;border:1px solid #3a5a3a;border-radius:3px;padding:3px 10px;font-family:Courier New,Courier,monospace;font-size:11px}#spawn-button:hover{border-color:var(--green);background:#3a4a3a}#spawn-button:disabled{color:#555;cursor:not-allowed;background:#1e1e1e;border-color:#333}#coach-count{color:#ccc;text-align:center;appearance:textfield;background:#1e1e1e;border:1px solid #444;border-radius:3px;width:36px;padding:3px 4px;font-family:Courier New,Courier,monospace;font-size:11px}#coach-count::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}#coach-count::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}#coach-count-label,#formation-label{color:var(--text-faint);white-space:nowrap;font-family:Courier New,Courier,monospace;font-size:11px}#formation-select{color:var(--text-main);cursor:pointer;background:#333;border:1px solid #555;border-radius:3px;padding:3px 6px;font-family:Courier New,Courier,monospace;font-size:11px}#despawn-button{color:#c66;cursor:pointer;white-space:nowrap;background:#3a2a2a;border:1px solid #5a3a3a;border-radius:3px;padding:3px 10px;font-family:Courier New,Courier,monospace;font-size:11px}#despawn-button:hover{background:#4a2a2a;border-color:#c66}#send-train-button{color:#79c;cursor:pointer;white-space:nowrap;background:#2a2e3a;border:1px solid #3a4a5a;border-radius:3px;min-width:calc(15ch + 22px);padding:3px 10px;font-family:Courier New,Courier,monospace;font-size:11px}#send-train-button:hover{background:#323a4a;border-color:#79c}#send-train-button:disabled{color:#555;cursor:not-allowed;background:#1e1e1e;border-color:#333}#train-status-panel{background:var(--bg-dark);border-bottom:1px solid var(--border);flex-direction:row;flex-shrink:0;align-items:stretch;display:flex}#header-scenario{flex-direction:row;flex-shrink:0;align-items:center;gap:4px;display:flex}#start-scenario-btn{color:#89c;cursor:pointer;white-space:nowrap;background:#2a2a3a;border:1px solid #4a4a6a;border-radius:3px;padding:3px 10px;font-family:Courier New,Courier,monospace;font-size:11px}#start-scenario-btn:hover{background:#335;border-color:#89c}#view-timetable-btn{color:#89c;cursor:pointer;white-space:nowrap;background:#2a2a3a;border:1px solid #4a4a6a;border-radius:3px;padding:3px 10px;font-family:Courier New,Courier,monospace;font-size:11px}#view-timetable-btn:hover{background:#335;border-color:#89c}#start-scenario-btn:disabled{color:#555;cursor:not-allowed;background:#1e1e1e;border-color:#333}#start-scenario-btn.is-cancel{color:#c88;background:#3a2a2a;border-color:#7a4444}#start-scenario-btn.is-cancel:hover{background:#4a2a2a;border-color:#c66}#scenario-split-btn{align-items:stretch;font-family:Courier New,Courier,monospace;display:flex}#scenario-run-btn{color:#89c;cursor:pointer;white-space:nowrap;background:#2a2a3a;border:1px solid #4a4a6a;border-right:none;border-radius:3px 0 0 3px;padding:3px 10px;font-family:inherit;font-size:11px}#scenario-run-btn:hover{background:#335;border-color:#89c}#scenario-pick-btn{color:#89c;cursor:pointer;background:#2a2a3a;border:1px solid #4a4a6a;border-radius:0 3px 3px 0;padding:3px 6px;font-size:10px}#scenario-pick-btn:hover{background:#335;border-color:#89c}#scenario-popover{color:#89c;background:#1e1e2e;border:1px solid #4a4a6a;border-radius:4px;min-width:220px;margin:0;padding:4px 0;font-family:Courier New,Courier,monospace;font-size:11px;list-style:none;position:fixed;box-shadow:0 4px 12px #00000080}#scenario-popover li{cursor:pointer;white-space:nowrap;padding:5px 12px}#scenario-popover li:hover{background:#335}#scenario-popover li[aria-selected=true]{color:#abe}[data-theme=light] #scenario-run-btn{color:#336;background:#eaeaf8;border-color:#aab}[data-theme=light] #scenario-run-btn:hover{background:#dde;border-color:#336}[data-theme=light] #scenario-pick-btn{color:#336;background:#eaeaf8;border-color:#aab}[data-theme=light] #scenario-pick-btn:hover{background:#dde;border-color:#336}[data-theme=light] #scenario-popover{color:#336;background:#f5f5fa;border-color:#aab;box-shadow:0 4px 12px #00000026}[data-theme=light] #scenario-popover li:hover{background:#dde}#train-panel-body{flex-direction:column;flex:1;gap:2px;min-width:0;padding:4px 10px;display:flex}.train-grid-row{grid-template-columns:36px 52px 72px 1fr 58px 68px 118px 52px 78px 68px;align-items:center;gap:4px;font-family:Courier New,Courier,monospace;font-size:11px;display:grid}#train-status-header{color:#667;text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid #2a2a3a;margin-bottom:1px;padding-bottom:3px;font-size:10px;display:none}#train-status-header span{padding:0 2px}.train-status-row{color:var(--text-main)}.train-col-dir,.train-col-num,.train-col-tc,.train-col-detail{color:#bbb;text-overflow:ellipsis;white-space:nowrap;padding:0 2px;overflow:hidden}.train-col-detail{color:#999}.token-wait-pulse{animation:.9s ease-in-out infinite highlight-pulse}[data-theme=light] .token-wait-pulse{animation:.9s ease-in-out infinite highlight-pulse-light}.train-status-token{text-align:center;color:#888;white-space:nowrap}.train-status-row button{cursor:pointer;white-space:nowrap;color:#abd;background:#2a2a3a;border:1px solid #3a3a5a;border-radius:3px;width:100%;padding:2px 4px;font-family:Courier New,Courier,monospace;font-size:11px}.train-status-row button:hover:not(:disabled){background:#3a3a4a;border-color:#abd}.train-status-row button:disabled{opacity:.35;cursor:default}.btn-uncouple:disabled{opacity:.4;cursor:not-allowed}.btn-remove-train{color:#c66!important;background:#3a2a2a!important;border-color:#5a3a3a!important}.btn-remove-train:hover:not(:disabled){background:#4a2a2a!important;border-color:#c66!important}@keyframes blink{0%{opacity:.4}to{opacity:1}}@keyframes highlight-pulse{0%,to{box-shadow:0 0 4px 3px #ffdc004d}50%{box-shadow:0 0 14px 7px #ffdc00d9}}.lever-grip.highlighted,.panel-shelf-btn-circle.highlighted,.sim-control-widget.highlighted,#spawn-button.highlighted,#settings-btn.highlighted{animation:.9s ease-in-out infinite highlight-pulse}@keyframes svg-highlight-pulse{0%,to{filter:drop-shadow(0 0 2px #ffdc0033)brightness()}50%{filter:drop-shadow(0 0 10px #ffdc00)drop-shadow(0 0 4px #fff9)brightness(1.4)}}.svg-highlighted{animation:.9s ease-in-out infinite svg-highlight-pulse}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-dark)}::-webkit-scrollbar-thumb{background:#444;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#666}#notice-overlay{z-index:900;background:#e4e4e4;border:2px solid #888;border-radius:6px;flex-direction:column;width:420px;max-width:90vw;font-family:Courier New,Courier,monospace;display:flex;position:fixed;top:100px;left:50%;overflow:hidden;transform:translate(-50%);box-shadow:0 8px 32px #0000008c}#notice-overlay.notice-hidden{display:none}#notice-overlay.notice-dragging{transform:none}#notice-drag-handle{color:#eee;cursor:move;-webkit-user-select:none;user-select:none;letter-spacing:.5px;text-transform:uppercase;background:#555;flex-shrink:0;align-items:center;gap:8px;padding:8px 12px;font-size:12px;font-weight:700;display:flex}#notice-icon{font-size:16px;line-height:1}#notice-title{flex:1}#notice-close{color:#ccc;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:3px;padding:1px 5px;font-size:13px;line-height:1}#notice-close:hover{color:#fff;background:#ffffff26;border-color:#ffffff4d}#notice-body{color:#222;word-break:break-word;max-height:60vh;padding:16px;font-size:13px;line-height:1.6;overflow-y:auto}#notice-body p{margin:0 0 10px}#notice-body p:last-of-type{margin-bottom:0}.notice-btn-row{flex-wrap:wrap;gap:8px;margin-top:14px;display:flex}.notice-action-btn{color:#eee;cursor:pointer;background:#333;border:1px solid #888;border-radius:3px;padding:6px 14px;font-family:Courier New,Courier,monospace;font-size:12px}.notice-action-btn:hover{background:#444;border-color:#bbb}.notice-inline-link{color:#6ab0e8;cursor:pointer;font-style:italic;text-decoration:underline}[data-theme=light] #notice-drag-handle{background:#444}#naughty-panel{z-index:899;background:#1c1008;border:2px solid #8b3a00;border-radius:6px;flex-direction:column;width:380px;max-width:90vw;font-family:Courier New,Courier,monospace;display:flex;position:fixed;top:80px;right:20px;overflow:hidden;box-shadow:0 8px 32px #000000a6}#naughty-panel.naughty-hidden{display:none}#naughty-panel.naughty-dragging{right:auto}#naughty-drag-handle{color:#f5c090;cursor:move;-webkit-user-select:none;user-select:none;letter-spacing:.5px;text-transform:uppercase;background:#7a2200;flex-shrink:0;align-items:center;gap:8px;padding:7px 12px;font-size:11px;font-weight:700;display:flex}#naughty-icon{font-size:14px;line-height:1}#naughty-title{flex:1}#naughty-close{color:#c86;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:3px;padding:1px 5px;font-size:13px;line-height:1}#naughty-close:hover{color:#fff;background:#ffffff26;border-color:#ffc89666}#naughty-list{scrollbar-width:thin;scrollbar-color:#5a2200 #1c1008;height:155px;padding:4px 0;overflow-y:auto}#naughty-list::-webkit-scrollbar{width:6px}#naughty-list::-webkit-scrollbar-track{background:#1c1008}#naughty-list::-webkit-scrollbar-thumb{background:#5a2200;border-radius:3px}.naughty-item{border-bottom:1px solid #2e1500;align-items:baseline;gap:8px;padding:5px 10px;line-height:1.4;display:flex}.naughty-item:last-child{border-bottom:none}.naughty-time{color:#864;white-space:nowrap;flex-shrink:0;font-family:Courier New,Courier,monospace;font-size:10px}.naughty-text{color:#f0c080;word-break:break-word;font-size:12px}[data-theme=light] #naughty-panel{background:#fff5ee;border-color:#c04000}[data-theme=light] #naughty-drag-handle{color:#fff;background:#c04000}[data-theme=light] #naughty-close{color:#f96}[data-theme=light] #naughty-close:hover{color:#fff}[data-theme=light] #naughty-list{scrollbar-color:#c04000 #fff5ee}[data-theme=light] .naughty-item{border-bottom-color:#f0d0c0}[data-theme=light] .naughty-time{color:#b07050}[data-theme=light] .naughty-text{color:#6a2000}.header-btn{color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #555;border-radius:3px;flex-shrink:0;padding:3px 8px;font-family:Courier New,Courier,monospace;font-size:11px}.header-btn:hover{color:var(--text);border-color:#888}#header-right{align-items:center;gap:10px;margin-left:auto;display:flex}#settings-btn{color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:3px;flex-shrink:0;padding:1px 5px;font-size:16px;line-height:1}#settings-btn:hover{color:var(--text-main);border-color:var(--border)}#visual-help-btn{cursor:pointer;background:0 0;border:none;flex-shrink:0;align-items:center;gap:5px;padding:0;display:flex}.vhb-label{color:var(--text-dim);font-size:11px;line-height:1}.vhb-track{background:#555;border-radius:9px;flex-shrink:0;width:32px;height:18px;transition:background .2s;position:relative}.vhb-thumb{background:#aaa;border-radius:50%;width:14px;height:14px;transition:left .2s,background .2s;position:absolute;top:2px;left:2px}#visual-help-btn.active .vhb-track{background:#2a6a2a}#visual-help-btn.active .vhb-thumb{background:#8ddb8d;left:16px}[data-theme=light] #visual-help-btn.active .vhb-track{background:#3a8a3a}[data-theme=light] #visual-help-btn.active .vhb-thumb{background:#fff}#settings-panel{background:var(--bg-header);border-left:1px solid var(--border);z-index:200;flex-direction:column;width:260px;height:100vh;font-family:Courier New,Courier,monospace;transition:right .2s;display:flex;position:fixed;top:0;right:-280px;box-shadow:-4px 0 20px #00000080}#settings-panel.open{right:0}.settings-header{border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;padding:9px 12px;display:flex}.settings-title{letter-spacing:1.5px;color:var(--text-faint);font-size:10px;font-weight:700}#settings-close{color:var(--text-dim);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-family:inherit;font-size:12px;line-height:1}#settings-close:hover{color:var(--text-main)}.settings-body{flex-direction:column;flex:1;gap:16px;padding:14px 12px;display:flex;overflow-y:auto}.settings-row{justify-content:space-between;align-items:center;gap:10px;display:flex}.settings-row--check{cursor:pointer;justify-content:flex-start;align-items:flex-start;gap:8px}.settings-row-label{color:var(--text-main);font-size:11px;line-height:1.4}.settings-row--check .settings-row-label{color:var(--text-dim);font-size:10px;line-height:1.4}.settings-action-btn{color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #444;border-radius:2px;padding:3px 8px;font-family:Courier New,Courier,monospace;font-size:10px}.settings-action-btn:hover{border-color:var(--amber);color:var(--amber)}.settings-action-btn--danger{color:#a44;border-color:#622}.settings-action-btn--danger:hover{color:#f66;border-color:#c44}.settings-action-link{text-decoration:none;display:inline-block}.settings-section-title{letter-spacing:1px;text-transform:uppercase;color:var(--text-faint);border-top:1px solid var(--border);margin-top:2px;padding-top:12px;font-size:9px;font-weight:700}.settings-row--check input[type=checkbox]{accent-color:var(--green);cursor:pointer;flex-shrink:0;width:13px;height:13px;margin-top:2px}#theme-toggle,#view-mode{color:var(--text-dim);border:1px solid var(--border);cursor:pointer;letter-spacing:.5px;background:0 0;border-radius:3px;flex-shrink:0;padding:2px 7px;font-family:Courier New,Courier,monospace;font-size:10px}#theme-toggle:hover,#view-mode:hover{color:var(--text-main);border-color:var(--text-dim)}#dev-highlight-random{color:var(--text-dim);border:1px solid var(--border);cursor:pointer;letter-spacing:.5px;background:0 0;border-radius:3px;padding:2px 7px;font-family:Courier New,Courier,monospace;font-size:10px}#dev-highlight-random:hover{color:var(--text-main);border-color:var(--text-dim)}.settings-dev-info{color:#ffdc00cc;min-height:14px;font-size:9px;font-style:italic;line-height:1.4}.zoom-controls{align-items:center;gap:4px;display:flex}.zoom-btn{color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:3px;flex-shrink:0;padding:2px 6px;font-family:Courier New,Courier,monospace;font-size:15px;font-weight:700;line-height:1}.zoom-btn:hover{color:var(--text-main);border-color:var(--border)}.zoom-btn:disabled{opacity:.3;cursor:default}#zoom-label{text-align:center;min-width:34px;color:var(--text-dim);cursor:pointer;font-family:Courier New,Courier,monospace;font-size:11px}#zoom-label:hover{color:var(--text-main)}[data-theme=light]{--bg-dark:#f0ede8;--bg-mid:#e8e4df;--bg-panel:#dedad5;--bg-header:#d0cbc5;--border:#b0a898;--text-main:#1a1614;--text-dim:#5a504a;--text-faint:#8a807a;--green:#2a8a48;--amber:#c07800;--blue:#26a;--tc-clear:#2a8a48;--tc-none:#909090}[data-theme=light] #settings-panel{box-shadow:-4px 0 20px #0000001f}[data-theme=light] #app-header{border-bottom-color:var(--border)}[data-theme=light] #box-selector{background:var(--bg-panel);border-color:var(--border)}[data-theme=light] #box-selector:focus{outline-color:var(--text-dim);border-color:var(--text-dim)}[data-theme=light] #lever-frame-wrap,[data-theme=light] .lever-frame-wrap{background:var(--bg-panel);border-color:var(--border)}[data-theme=light] #panel-shelf,[data-theme=light] .panel-shelf{border-bottom-color:var(--border)}[data-theme=light] .token-instrument:hover,[data-theme=light] .crossing-instrument:hover{border-color:var(--text-faint)}[data-theme=light] .crossing-barriers.inMotion{color:var(--text-main)}[data-theme=light] .panel-shelf-btn-circle{background:var(--bg-panel);border-color:var(--text-dim);box-shadow:0 1px 3px #0000001f,inset 0 1px 1px #fff9}[data-theme=light] .panel-shelf-btn-circle:hover:not(:disabled):not(.panel-shelf-btn-circle--locked){background:var(--bg-header);border-color:var(--text-main);box-shadow:0 1px 4px #00000026,inset 0 1px 2px #ffffff80}[data-theme=light] .panel-shelf-btn-circle:active:not(:disabled):not(.panel-shelf-btn-circle--locked){background:var(--bg-mid);box-shadow:inset 0 2px 3px #0000001f}[data-theme=light] .ctx-menu{background:var(--bg-panel);border-color:var(--border);box-shadow:0 4px 16px #00000026}[data-theme=light] .ctx-menu-item:hover{background:var(--bg-header)}[data-theme=light] .ctx-menu-item.separator{border-top-color:var(--border)}[data-theme=light] #spawn-select,[data-theme=light] #formation-select{background:var(--bg-panel);border-color:var(--border)}[data-theme=light] #spawn-button{color:var(--green);background:#e8f4ec;border-color:#aad8bc}[data-theme=light] #spawn-button:hover{border-color:var(--green);background:#d8eee0}[data-theme=light] #spawn-button:disabled{background:var(--bg-mid);color:var(--text-faint);border-color:var(--border)}[data-theme=light] #despawn-button{color:var(--red);background:#f4e8e8;border-color:#d8aaaa}[data-theme=light] #despawn-button:hover{border-color:var(--red);background:#eedada}[data-theme=light] #send-train-button{color:#36a;background:#e8eef4;border-color:#abd}[data-theme=light] #send-train-button:hover{background:#dae4f0;border-color:#36a}[data-theme=light] #send-train-button:disabled{background:var(--bg-mid);color:var(--text-faint);border-color:var(--border)}[data-theme=light] #start-scenario-btn,[data-theme=light] #view-timetable-btn{color:#336;background:#eaeaf8;border-color:#aab}[data-theme=light] #view-timetable-btn:hover,[data-theme=light] #start-scenario-btn:hover{background:#dde;border-color:#336}[data-theme=light] #start-scenario-btn:disabled{background:var(--bg-mid);color:var(--text-faint);border-color:var(--border)}[data-theme=light] #start-scenario-btn.is-cancel{color:#933;background:#f8eaea;border-color:#c99}[data-theme=light] #train-status-header{color:var(--text-faint);border-color:var(--border)}[data-theme=light] .train-col-dir,[data-theme=light] .train-col-num,[data-theme=light] .train-col-tc,[data-theme=light] .train-col-detail{color:var(--text-dim)}[data-theme=light] .train-status-row button{background:var(--bg-panel);color:var(--blue);border-color:var(--border)}[data-theme=light] .train-status-row button:hover:not(:disabled){background:var(--bg-header);border-color:var(--blue)}[data-theme=light] .btn-remove-train{color:var(--red)!important;background:#f4e8e8!important;border-color:#d8aaaa!important}[data-theme=light] .btn-remove-train:hover:not(:disabled){border-color:var(--red)!important;background:#eedada!important}[data-theme=light] .status-entry.refused{color:#b02020}[data-theme=light] .status-entry.train{color:#111;border-left-color:#444}[data-theme=light] #app-footer,[data-theme=light] #app-footer a{color:var(--text-faint)}[data-theme=light] #app-footer a:hover{color:var(--text-main)}[data-theme=light] #diagram-notice,[data-theme=light] #lever-frame-notice,[data-theme=light] .lever-frame-notice{color:var(--text-dim)}[data-theme=light] #lever-frame-help-btn:hover{background:#2272c3}[data-theme=light] ::-webkit-scrollbar-thumb{background:var(--border)}[data-theme=light] ::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}[data-theme=light] .lever-grip.highlighted,[data-theme=light] .panel-shelf-btn-circle.highlighted,[data-theme=light] .sim-control-widget.highlighted,[data-theme=light] .block-switch-widget.highlighted,[data-theme=light] .etb-instrument.highlighted,[data-theme=light] #spawn-button.highlighted,[data-theme=light] #settings-btn.highlighted{animation:.9s ease-in-out infinite highlight-pulse-light}@keyframes highlight-pulse-light{0%,to{box-shadow:0 0 4px 3px #8c500059}50%{box-shadow:0 0 14px 7px #8c5000d9}}[data-theme=light] .signalman-holding{background:#f5f0e8;border-color:#b8a888}[data-theme=light] .signalman-holding.holding{border-color:#8a7040}[data-theme=light] .signalman-holding-btn{color:#555;background:#e8e2d6;border-color:#b8a888}[data-theme=light] .signalman-holding-btn:hover{color:#111;background:#d8d0c0;border-color:#8a7040}[data-theme=light] .etb-instrument{background:#e8e2d6;border-color:#b8a888}[data-theme=light] .etb-body{background:#f5f0e8}[data-theme=light] .etb-section-label{color:#f5e8c0;background:#7a1515}[data-theme=light] .etb-slot{background:#ccc5b8;border-color:#a09080}[data-theme=light] .etb-operate-btn{color:#333;background:#e8e2d6;border-color:#b0a090}[data-theme=light] .etb-operate-btn:hover{color:#111;background:#d8d0c0}[data-theme=light] .etb-operate-btn:disabled{color:#aaa;background:#ede9e2;border-color:#ccc5b8}[data-theme=light] .flip-clock-widget{background:#3d3830;border-color:#2a251e;box-shadow:0 2px 6px #00000040,inset 0 1px #ffffff12}.flip-clock-widget{background:#232020;border:1px solid #111;border-radius:6px;flex-direction:column;align-items:center;gap:4px;padding:8px 10px 6px;display:flex;box-shadow:0 2px 6px #0000008c,inset 0 1px #ffffff0d}.flip-clock{align-items:center;gap:3px;display:flex}.fc-digit{perspective:180px;width:30px;height:50px;position:relative}.fc-digit:after{content:"";z-index:3;pointer-events:none;background:#050202;height:2px;position:absolute;top:calc(50% - 1px);left:0;right:0;transform:translateY(-50%)}.fc-top,.fc-btm,.fc-flap-top,.fc-flap-btm{background:#161212;justify-content:center;width:100%;display:flex;position:absolute;left:0;overflow:hidden}.fc-top{border-bottom:1px solid #0a0808;border-radius:3px 3px 0 0;align-items:flex-start;height:25px;top:0;box-shadow:0 1px #000}.fc-top span{color:#f0dfa0;text-shadow:0 0 8px #f0c85066;-webkit-user-select:none;user-select:none;height:50px;font:700 36px/50px Courier New,Lucida Console,monospace;display:block}.fc-btm{border-radius:0 0 3px 3px;align-items:flex-end;height:25px;bottom:0}.fc-btm span{color:#f0dfa0;text-shadow:0 0 8px #f0c85066;-webkit-user-select:none;user-select:none;height:50px;font:700 36px/50px Courier New,Lucida Console,monospace;display:block}.fc-flap-top{transform-origin:50% 100%;z-index:2;border-radius:3px 3px 0 0;align-items:flex-start;height:25px;top:0}.fc-flap-top span{color:#f0dfa0;text-shadow:0 0 8px #f0c85066;-webkit-user-select:none;user-select:none;height:50px;font:700 36px/50px Courier New,Lucida Console,monospace;display:block}.fc-flap-btm{transform-origin:50% 0;z-index:2;border-radius:0 0 3px 3px;align-items:flex-end;height:25px;bottom:0;transform:rotateX(90deg)}.fc-flap-btm span{color:#f0dfa0;text-shadow:0 0 8px #f0c85066;-webkit-user-select:none;user-select:none;height:50px;font:700 36px/50px Courier New,Lucida Console,monospace;display:block}@keyframes fc-fold-away{0%{transform:rotateX(0)}to{transform:rotateX(-90deg)}}@keyframes fc-unfold{0%{transform:rotateX(90deg)}to{transform:rotateX(0)}}.fc-flap-top.fc-flap-top-anim{animation:.22s ease-in forwards fc-fold-away}.fc-flap-btm.fc-flap-btm-anim{animation:.18s ease-out .18s forwards fc-unfold}.fc-sep{color:#c8b060;text-shadow:0 0 6px #c8a03c80;-webkit-user-select:none;user-select:none;margin-top:-6px;padding:0 1px;font:700 32px/1 Courier New,monospace}.flip-clock-label{color:#7a6a40;letter-spacing:2px;text-transform:uppercase;font:600 9px/1 Tahoma,sans-serif}.axle-counter-widget{flex-direction:column;align-items:center;gap:4px;display:flex}.ac-reset-btn{letter-spacing:1px;text-transform:uppercase;color:#7a6a40;cursor:pointer;background:0 0;border:1px solid #5a4a30;border-radius:3px;padding:2px 6px;font:600 8px/1 Tahoma,sans-serif;transition:background .15s}.ac-reset-btn:hover{background:#7a6a4033}[data-theme=light] .ac-reset-btn{color:#5a3a10;border-color:#a07040}[data-theme=light] .ac-reset-btn:hover{background:#a0704026}@media (width<=600px){#notice-overlay{width:92vw;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;top:40px}#notice-body{padding:20px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:16px;font-weight:500;line-height:1.7}#notice-body p{margin-bottom:14px}.notice-action-btn{width:100%;padding:10px 20px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:15px}}.tt-widget{cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #0000;border-radius:3px;flex-shrink:0;transition:border-color .15s;display:inline-block}.tt-widget:hover{border-color:#aaa}.tt-widget-img{width:auto;max-height:80px;display:block}.tt-modal-overlay{z-index:1200;background:#000000b3;justify-content:center;align-items:flex-start;padding:24px 16px;display:flex;position:fixed;inset:0;overflow-y:auto}.tt-modal-panel{background:var(--bg-panel,#1c1c1c);border:1px solid #555;border-radius:5px;width:100%;max-width:780px;padding:0 0 16px;font-family:Courier New,Courier,monospace;box-shadow:0 8px 40px #000c}.tt-modal-header{justify-content:space-between;align-items:flex-start;margin-bottom:12px;padding:12px 16px 10px;display:flex}.tt-modal-title{color:var(--text-main);letter-spacing:.5px;font-size:13px;font-weight:700}.tt-modal-ref{color:#888;margin-top:3px;font-size:10px;font-weight:400}.tt-modal-close{color:#aaa;cursor:pointer;background:0 0;border:1px solid #555;border-radius:3px;flex-shrink:0;padding:2px 8px;font-size:14px;line-height:1.4}.tt-modal-close:hover{color:#fff;background:#333}.tt-section{padding:0 16px 12px}.tt-section-title{color:#888;letter-spacing:1px;text-transform:uppercase;border-bottom:1px solid #333;margin-bottom:8px;padding-bottom:4px;font-size:10px;font-weight:700}.tt-table{border-collapse:collapse;width:100%;font-size:11px}.tt-th-loc{text-align:left;color:#888;text-transform:uppercase;border-bottom:1px solid #444;border-right:2px solid #555;width:160px;padding:4px 8px 4px 0;font-size:9px}.tt-th-loc.tt-th-sub{color:#666;border-bottom:none;padding-top:1px;padding-bottom:1px}.tt-th-train{text-align:center;min-width:52px;color:var(--text-main);letter-spacing:.5px;border-bottom:2px solid #555;border-left:1px solid #2a2a2a;border-right:1px solid #2a2a2a;padding:5px 6px 4px;font-size:12px;font-weight:700}.tt-th-train.tt-th-sub{color:#888;border-bottom:none;padding-top:1px;padding-bottom:1px;font-size:9px;font-weight:400}thead tr:last-child .tt-th-train.tt-th-sub,.tt-section-end .tt-th-train{border-bottom:2px solid #555;padding-bottom:4px}thead tr:first-child th{border-top:3px solid #555}.tt-row-notes td{border-bottom:3px solid #555}.tt-row-active td{background:0 0}.tt-row-empty td{opacity:.35}.tt-td-loc{white-space:nowrap;border-bottom:1px solid #2a2a2a;border-right:2px solid #555;padding:3px 8px 3px 0}.tt-loc-name{color:var(--text-main)}.tt-loc-detail{color:#888;font-size:10px}.tt-td-time{text-align:center;vertical-align:middle;color:var(--text-main);font-variant-numeric:tabular-nums;border-bottom:1px solid #2a2a2a;border-left:1px solid #2a2a2a;border-right:1px solid #2a2a2a;padding:2px 4px}.tt-td-time--empty{color:#333}.tt-notes-section{border-top:1px solid #333;margin:8px 16px 0;padding-top:8px}.tt-notes-title{text-transform:uppercase;letter-spacing:1px;color:#888;margin-bottom:5px;font-size:9px}.tt-note-row{gap:8px;margin-bottom:3px;font-size:10px;display:flex}.tt-note-code{color:#c80;min-width:20px;font-weight:700}.tt-note-text{color:#aaa}[data-theme=light] .tt-widget:hover{border-color:#555}[data-theme=light] .tt-modal-panel{background:#f5f5f5;border-color:#ccc}[data-theme=light] .tt-modal-close{color:#555;border-color:#ccc}[data-theme=light] .tt-modal-close:hover{color:#000;background:#ddd}[data-theme=light] .tt-section-title{color:#555;border-bottom-color:#ddd}[data-theme=light] .tt-th-loc{color:#555;border-bottom-color:#ccc;border-right-color:#aaa}[data-theme=light] .tt-th-train{border-bottom-color:#aaa}[data-theme=light] .tt-td-loc{border-bottom-color:#e0e0e0;border-right-color:#aaa}[data-theme=light] .tt-td-time{border-bottom-color:#e0e0e0;border-left-color:#e0e0e0;border-right-color:#e0e0e0}[data-theme=light] .tt-th-train{border-left-color:#e0e0e0;border-right-color:#e0e0e0}[data-theme=light] .tt-td-time--empty{color:#bbb}[data-theme=light] .tt-notes-section{border-top-color:#ddd}[data-theme=light] .tt-note-text{color:#555}
