@font-face{font-family:Wallpoet;src:url(/assets/wallpoet-DCzgUuK2.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:Rubik Glitch;src:url(/assets/rubik-glitch-D_xnOHSU.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:VT323;src:url(/assets/vt323-D0VnvwZ9.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:Orbitron;src:url(/assets/orbitron-4jsRXGGJ.woff2) format("woff2");font-weight:700;font-display:swap}@font-face{font-family:Monofett;src:url(/assets/monofett-CGUqjc2p.woff2) format("woff2");font-weight:400;font-display:swap}:root{--bg: #04060b;--bg2: #0a0e1a;--cyan: #5fc4cd;--cyan-hot: #3af5ff;--magenta: #cf62c2;--violet: #8b78cf;--blue: #5c7bd6;--amber: #dca94f;--text: #c2dcef;--dim: #566f7d;--mono: "SF Mono", ui-monospace, "Cascadia Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;background:var(--bg);color:var(--text);font-family:var(--mono);overflow:hidden}.display{position:relative;width:100vw;height:100vh;background:radial-gradient(ellipse 120% 90% at 50% 30%,#0a1120 0%,var(--bg) 70%);display:flex;flex-direction:column;cursor:none;transition:filter .4s ease}.display.announcing{animation:announce-pulse .9s ease-out 3}.display.cursor-active,.display.cursor-active *{cursor:default}@keyframes announce-pulse{0%{filter:brightness(1) saturate(1)}12%{filter:brightness(1.26) saturate(1.2) hue-rotate(-5deg)}40%{filter:brightness(1.05) saturate(1.06)}to{filter:brightness(1) saturate(1)}}.corridor-canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.scanlines{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;pointer-events:none;background:repeating-linear-gradient(to bottom,transparent 0px,transparent 2px,rgba(0,0,0,var(--fx-scan, .32)) 3px,rgba(0,0,0,var(--fx-scan, .32)) 4px);mix-blend-mode:multiply}.crt-band{position:absolute;left:0;right:0;height:14vh;pointer-events:none;opacity:var(--fx-band-opacity, .06);background:linear-gradient(to bottom,transparent,rgba(207,233,255,.6) 50%,transparent);animation:crt-roll var(--fx-band-period, 8s) linear infinite}@keyframes crt-roll{0%{top:-16vh}to{top:102vh}}.display.jittery{animation:frame-jitter 7s steps(1) infinite}@keyframes frame-jitter{0%,96.6%,to{transform:none}96.8%{transform:translate(1.5px,-1px)}97.1%{transform:translate(-1px,.5px)}97.4%{transform:none}98.3%{transform:translate(-2px) skew(.3deg)}98.5%{transform:none}}.lowres .scanlines{display:none}.vignette{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:radial-gradient(ellipse 55% 42% at 20% 16%,rgba(120,145,165,.04),transparent 62%),radial-gradient(ellipse 118% 112% at 50% 47%,transparent 46%,rgba(0,0,3,.9) 100%)}.grunge-canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:5;pointer-events:none;mix-blend-mode:multiply;image-rendering:pixelated;opacity:.92}.topbar{position:relative;z-index:3;display:flex;justify-content:space-between;align-items:flex-start;padding:22px 30px 0}.brand{font-size:26px;letter-spacing:.35em;color:#7fd4dd;text-shadow:0 0 9px rgba(58,245,255,.38);animation:flicker 7s infinite}.sub{margin-top:6px;font-size:11px;letter-spacing:.28em;color:var(--dim)}.top-right{display:flex;gap:10px;align-items:center}.clock{font-size:22px;color:var(--text);letter-spacing:.15em;text-shadow:0 0 10px rgba(207,233,255,.4)}.chip{font-size:10px;letter-spacing:.2em;padding:4px 9px;border:1px solid var(--dim);color:var(--dim);background:#04060b99}.chip.ok{border-color:var(--cyan);color:var(--cyan);box-shadow:0 0 8px #3af5ff40}.chip.bad{border-color:var(--magenta);color:var(--magenta);animation:flicker 1.7s infinite}.chip.warn{border-color:var(--amber);color:var(--amber)}.chip.mode{border-color:var(--violet);color:var(--violet)}.stage{position:relative;z-index:2;flex:1;display:flex;align-items:flex-start;justify-content:center;padding-top:6vh;text-align:center}.event-panel{max-width:78vw}.event-panel,.idle-panel{animation:panel-in .7s cubic-bezier(.2,.9,.3,1)}@keyframes panel-in{0%{opacity:0;transform:translate(calc(var(--fly, -1) * 16vw)) scale(.98);filter:blur(7px)}to{opacity:1;transform:none;filter:none}}.event-panel.departing{opacity:0;transform:translate(calc(var(--fly, -1) * -26vw));filter:blur(9px);transition:opacity 1.6s ease-in,transform 1.6s ease-in,filter 1.6s ease-in}.event-kicker{font-size:13px;letter-spacing:.5em;color:#9a86d8;text-shadow:0 0 7px rgba(139,92,255,.3);margin-bottom:2vh;animation:flicker 3.5s infinite}.field-label{font-family:var(--mono);font-size:clamp(9px,.78vw,13px);letter-spacing:.42em;text-transform:uppercase;margin-bottom:.9vh}.label-vessel{color:var(--violet)}.label-dest{color:var(--dim)}.registry-badge{font-family:var(--mono);font-size:clamp(10px,.85vw,14px);letter-spacing:.3em;color:var(--dim);margin-bottom:1vh}.vessel-block{display:inline-block;max-width:86vw;padding:1.6vh 2.6vw;overflow:hidden;border:1px solid rgba(58,245,255,.2);background:radial-gradient(ellipse 70% 55% at 28% 18%,rgba(0,0,0,.4),transparent 65%),linear-gradient(180deg,#3af5ff09,#04060b8c);box-shadow:inset 0 0 60px #0000008c,inset 0 0 24px #3af5ff08,0 0 18px #04060bb3;clip-path:polygon(0 9px,9px 0,calc(100% - 9px) 0,100% 9px,100% calc(100% - 9px),calc(100% - 9px) 100%,9px 100%,0 calc(100% - 9px))}.train-name{margin:0;font-family:var(--name-font, var(--mono));font-weight:var(--name-weight, 600);font-size:var(--name-size, 3.9vw);line-height:1.02;letter-spacing:var(--name-tracking, .06em);color:var(--name-color, #fff);text-transform:var(--name-case, uppercase);white-space:nowrap;text-shadow:var(--name-glow, 0 0 12px rgba(58, 245, 255, .34), 0 0 44px rgba(139, 92, 255, .2))}.event-name{white-space:normal;text-wrap:balance}.display[data-name-style=mono] .train-name{--name-font: var(--mono);--name-weight: 600}.display[data-name-style=wallpoet] .train-name{--name-font: "Wallpoet", var(--mono);--name-weight: 400;--name-tracking: .03em}.display[data-name-style=glitch] .train-name{--name-font: "Rubik Glitch", var(--mono);--name-weight: 400;--name-tracking: .01em;--name-glow: 0 0 10px rgba(255, 61, 240, .35), 0 0 30px rgba(58, 245, 255, .2)}.display[data-name-style=terminal] .train-name{--name-font: "VT323", var(--mono);--name-weight: 400;--name-tracking: .02em;--name-glow: 0 0 6px rgba(58, 245, 255, .7), 0 0 22px rgba(58, 245, 255, .35)}.display[data-name-style=stencil] .train-name{--name-font: "Monofett", var(--mono);--name-weight: 400;--name-tracking: .005em}.display[data-name-style=orbit] .train-name{--name-font: "Orbitron", var(--mono);--name-weight: 700;--name-tracking: .08em}.display[data-name-style=custom] .train-name{--name-font: var(--custom-name-font), var(--mono);--name-weight: 400}.dest-block{margin-top:2.2vh}.dest-line{font-size:clamp(15px,1.6vw,26px);letter-spacing:.12em;color:var(--magenta);text-transform:none;text-shadow:0 0 9px rgba(255,61,240,.3)}.dest-arrow{color:var(--magenta);opacity:.8;margin-right:.45em}.dir-tag.inline{display:inline;margin-left:1.1em;font-size:.6em;letter-spacing:.24em;color:var(--amber)}.line-chip{display:inline-block;padding:0 .5em;border-radius:3px;border:1px solid var(--dim);color:var(--dim);font-weight:700;letter-spacing:.05em;text-shadow:0 1px 1px rgba(0,0,0,.4)}.line-chip.none{border-color:var(--dim);color:var(--dim);font-weight:400}.event-facts{margin-top:2.2vh;display:flex;gap:26px;justify-content:center;font-size:16px;letter-spacing:.18em}.fact{color:var(--cyan)}.fact.dir{color:var(--amber)}.fact.dest{color:var(--magenta);text-shadow:0 0 12px rgba(255,61,240,.4)}.real-ref{margin-top:1.6vh;font-size:12px;letter-spacing:.22em;color:var(--dim);text-transform:uppercase}.real-ref-inline{color:var(--dim);font-size:.85em}.inbound-name{--name-glow: 0 0 11px rgba(58, 245, 255, .3), 0 0 38px rgba(139, 92, 255, .18)}.event-text{margin:2.6vh auto 0;max-width:58vw;font-size:15px;line-height:1.75;color:#cfe9ffd9;letter-spacing:.04em;background:#04060b9e;border:1px solid rgba(58,245,255,.12);padding:10px 22px}.inbound-line{font-size:3vw;margin:0;color:var(--cyan);letter-spacing:.1em}.countdown{margin-top:2.2vh;font-size:3.1vw;color:#e8f4ff;letter-spacing:.08em;text-shadow:0 0 13px rgba(58,245,255,.4)}.dir-tag{display:block;margin-top:1.4vh;font-size:15px;letter-spacing:.3em;color:var(--amber)}.idle-panel{margin-top:6vh}.idle-phrase{font-size:1.7vw;letter-spacing:.42em;color:#cfe9ffbf;animation:breathe 4.5s ease-in-out infinite}.idle-next{margin-top:3vh;font-size:13px;letter-spacing:.2em;color:var(--dim)}@keyframes breathe{0%,to{opacity:.55}50%{opacity:1}}@keyframes flicker{0%,91%,94%,to{opacity:1}92%{opacity:.45}93%{opacity:.85}96%{opacity:.6}97%{opacity:1}}.bottombar{position:relative;z-index:3;display:flex;justify-content:space-between;align-items:flex-end;padding:0 30px 9vh}.transmissions{min-width:320px}.panel-title{font-size:10px;letter-spacing:.35em;color:var(--dim);margin-bottom:8px}.tx-line{display:flex;gap:14px;font-size:12px;padding:2px 0;color:#cfe9ffbf}.tx-time{color:var(--dim)}.tx-name{color:var(--text)}.tx-route{color:var(--dim)}.bottom-right{display:flex;flex-direction:column;align-items:flex-end;gap:10px}.departures{min-width:380px;text-align:left}.dep-line{display:flex;gap:10px;align-items:baseline;font-size:12px;padding:2px 0}.dep-name{color:var(--text);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:260px}.dep-route{color:var(--dim);font-size:10px}.dep-eta{color:var(--cyan);min-width:72px;text-align:right}.debug-strip{font-size:11px;color:var(--dim);background:#04060bb3;border:1px solid rgba(90,122,138,.4);padding:6px 10px;max-width:46vw}.blurt-overlay{position:absolute;top:24vh;left:0;right:0;z-index:8;text-align:center;pointer-events:none;animation:blurt-in .25s steps(3),breathe 1.4s ease-in-out infinite}@keyframes blurt-in{0%{transform:translate(-14px) skew(3deg);opacity:0}50%{transform:translate(9px) skew(-2deg);opacity:1}to{transform:none}}.blurt-kicker{font-size:11px;letter-spacing:.5em;color:var(--amber);margin-bottom:1.6vh;animation:flicker .9s infinite}.blurt-text{font-size:2vw;letter-spacing:.12em;color:#fff;text-transform:uppercase;text-shadow:0 0 22px rgba(255,176,46,.5)}.blurt-footnote{margin-top:1.6vh;font-size:10px;letter-spacing:.3em;color:var(--dim)}.guest-overlay{position:absolute;left:50%;bottom:15vh;transform:translate(-50%);z-index:8;max-width:70vw;text-align:center;pointer-events:none;padding:14px 28px;background:#04060bbd;border:1px solid rgba(139,92,255,.5);box-shadow:0 0 30px #8b5cff33,inset 0 0 30px #8b5cff0f;animation:guest-in .4s ease-out}@keyframes guest-in{0%{opacity:0;transform:translate(-50%,14px)}to{opacity:1;transform:translate(-50%)}}.guest-kicker{font-size:11px;letter-spacing:.45em;color:var(--violet);text-transform:uppercase;margin-bottom:1.2vh;animation:flicker 2.6s infinite}.guest-text{font-size:1.5vw;letter-spacing:.05em;color:#eaf6ff;line-height:1.4;text-shadow:0 0 16px rgba(139,92,255,.4)}.guest-footnote{margin-top:1.2vh;font-size:10px;letter-spacing:.3em;color:var(--dim);text-transform:uppercase}.arm-audio{position:absolute;right:26px;bottom:26px;z-index:10;background:#ffb02e1f;border:1px solid var(--amber);color:var(--amber);font-family:var(--mono);letter-spacing:.2em;padding:12px 18px;cursor:pointer}.glitch{position:relative;display:inline-block}.glitch:before,.glitch:after{content:attr(data-text);position:absolute;top:0;right:0;bottom:0;left:0;opacity:.55;pointer-events:none}.glitch:before{transform:translate(calc(var(--fx-chroma, 1.5px) * -1));color:#ff3df0b3;clip-path:inset(12% 0 58% 0)}.glitch:after{transform:translate(var(--fx-chroma, 1.5px));color:#3af5ffb3;clip-path:inset(55% 0 8% 0)}.lowres .glitch:before,.lowres .glitch:after{display:none}.admin{height:100vh;overflow-y:auto;padding:22px 26px 60px;background:linear-gradient(180deg,var(--bg2) 0%,var(--bg) 40%);cursor:default}.admin h1{font-size:17px;letter-spacing:.3em;color:var(--cyan);margin:0 0 6px}.admin-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:18px}.admin-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:16px}.card{border:1px solid rgba(90,122,138,.35);background:#0a0e1abf;padding:14px 16px 18px}.card.wide{grid-column:1 / -1}.card h2{font-size:12px;letter-spacing:.25em;color:var(--magenta);margin:0 0 12px}.card h3{font-size:11px;letter-spacing:.2em;color:var(--violet);margin:14px 0 6px}.card table{width:100%;border-collapse:collapse;font-size:12px}.card td,.card th{padding:3px 8px 3px 0;text-align:left;vertical-align:top}.card th{color:var(--dim);font-weight:400;letter-spacing:.1em;font-size:10px}.card table.list tr{border-top:1px solid rgba(90,122,138,.15)}label{display:block;font-size:12px;margin:10px 0;color:var(--text)}label.row{display:flex;gap:8px;align-items:center}input[type=range]{width:100%;accent-color:var(--cyan)}input[type=number],input[type=text],select{background:var(--bg);border:1px solid rgba(90,122,138,.5);color:var(--text);font-family:var(--mono);padding:5px 8px;width:auto}.wide-input{width:100%}.nowrap{white-space:nowrap}.filebtn{display:inline-block;background:#3af5ff14;border:1px solid var(--cyan);color:var(--cyan);font-size:11px;letter-spacing:.15em;padding:8px 12px;margin:0;cursor:pointer;width:auto}.filebtn:hover{background:#3af5ff33}.clips{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.clip-chip{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:11px;color:var(--text);border:1px solid rgba(90,122,138,.4);background:#04060b80;padding:3px 4px 3px 9px}.clip-chip .x{border:0;background:none;color:var(--magenta);cursor:pointer;font-size:14px;padding:0 4px;line-height:1}.clip-chip .x:hover{color:#fff}button{background:#3af5ff14;border:1px solid var(--cyan);color:var(--cyan);font-family:var(--mono);font-size:11px;letter-spacing:.15em;padding:8px 12px;cursor:pointer}button:hover{background:#3af5ff33}button:disabled{opacity:.35;cursor:default}button.big{width:100%;font-size:15px;padding:16px;border-color:var(--magenta);color:var(--magenta);background:#ff3df014;margin:8px 0 12px}button.big:hover{background:#ff3df038}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:8px 0}.dim{color:var(--dim)}.mono{font-size:11px;line-height:1.7}.conf{font-size:10px;padding:2px 6px;border:1px solid currentColor;letter-spacing:.08em}.conf-LIVE_POSITION{color:var(--cyan)}.conf-SHAPE_INTERPOLATED{color:#6f77ff}.conf-STATION_FALLBACK{color:var(--amber)}.conf-SCHEDULED{color:var(--dim)}.conf-DEMO{color:var(--violet)}
