@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap');
:root{font-family:'DM Sans',sans-serif;color:#163b37;background:#f4f7f6;font-synthesis:none;--green:#123c37;--lime:#d8f175;--muted:#647771;--line:#dce5e1}*{box-sizing:border-box}body{margin:0}button,input{font:inherit}button,a,input{touch-action:manipulation}button{cursor:pointer}a{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #467eda;outline-offset:4px}.topbar{height:94px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 max(5vw,20px);background:white}.brand{text-decoration:none;display:flex;align-items:center;gap:12px;letter-spacing:.16em;font-size:14px;font-weight:800;line-height:1.3}.brand-sub{display:block;font-size:12px;letter-spacing:.25em;font-weight:500;margin-top:4px}.brand-icon{display:grid;place-items:center;width:44px;height:44px;border-radius:12px;background:var(--green);color:var(--lime);font-size:30px;letter-spacing:0}.private-label{font-size:14px;color:var(--muted)}main{max-width:1320px;padding:40px 40px 0;margin:0 auto}.heading{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:30px}.eyebrow{letter-spacing:.13em;font-size:12px;font-weight:700;margin:0 0 9px;color:var(--muted)}h1,h2,h3,p{margin-top:0}h1{font-family:Manrope,sans-serif;font-size:clamp(30px,3.4vw,44px);letter-spacing:-.055em;line-height:1.2;margin-bottom:0;font-weight:800}h2{font-family:Manrope,sans-serif;font-size:21px;letter-spacing:-.035em;margin-bottom:0}.preview-badge{font-size:13px;max-width:260px;border:1px solid #dfd5af;border-radius:100px;padding:10px 15px;background:#fff9e6;color:#765b10}.route-panel{background:var(--green);color:white;border-radius:22px;padding:25px 30px 28px;margin-bottom:36px;overflow:hidden}.section-top{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:22px}.route-panel .muted{color:#b5ccc5;font-size:13px}.route-panel h2{font-size:18px}.route-diagram{position:relative}.direction{display:flex;justify-content:space-between;color:#bdcec9;font-size:13px;margin-bottom:14px}.rail{height:8px;position:absolute;background:repeating-linear-gradient(90deg,#7e9d92 0px,#7e9d92 6px,transparent 6px,transparent 14px);border-top:1px solid #73998c;border-bottom:1px solid #73998c;top:65px;left:0;right:0}.spots{display:grid;grid-template-columns:1.3fr 1.3fr .7fr 1.1fr;position:relative;gap:14px}.spot{display:flex;flex-direction:column;align-items:center;border:0;background:transparent;color:white;border-radius:12px;padding:0 3px 8px;min-width:0}.spot-note{font-size:11px;letter-spacing:.1em;color:var(--lime);height:23px}.spot-pin{display:grid;place-items:center;background:var(--green);border:2px solid #86a59b;width:35px;height:35px;border-radius:50%;margin-bottom:15px;font-size:14px;font-weight:700;box-shadow:0 0 0 6px var(--green)}.spot.selected .spot-pin{color:var(--green);background:var(--lime);border-color:var(--lime)}.spot.selected strong{color:var(--lime)}.spot strong{font-size:15px;margin-bottom:4px}.spot>span:last-child{font-size:12px;color:#bdd0c9;text-align:center}.spot:hover{background:#ffffff0b}.station{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding-top:27px}.station-symbol{background:var(--green);line-height:27px;padding:0 8px;color:#c5d6cf;margin-bottom:16px}.station strong{font-size:13px;white-space:nowrap}.station>span:last-child{font-size:12px;color:#bdd0c9;margin-top:4px}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:32px}.switch-label{display:flex;align-items:center;gap:8px;font-size:13px;white-space:nowrap;cursor:pointer}.switch-label input{width:17px;height:17px;accent-color:var(--green)}.notice{display:flex;align-items:flex-start;gap:12px;padding:16px 18px;border:1px solid #e5dab7;background:#fff9e9;border-radius:12px;font-size:14px;line-height:1.5;color:#705710;margin-bottom:20px}.notice>span{font-size:20px;line-height:1.1}.notice strong{font-weight:600}.notice p{margin:4px 0 0;color:#7c6c44;font-size:13px}.filters{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:20px}.filters button{border:1px solid var(--line);background:transparent;padding:9px 16px;border-radius:24px;color:#526961;font-size:14px}.filters button.active{background:var(--green);color:white;border-color:var(--green)}.train-card{border:1px solid var(--line);background:white;border-radius:16px;padding:20px;margin-bottom:12px}.train-row{display:flex;gap:16px;align-items:center}.train-icon{display:grid;place-items:center;width:46px;height:46px;flex-shrink:0;border-radius:13px;font-size:23px;background:#e9f0fb}.train-icon.freight{background:#edf3d8}.train-icon.steam{background:#f1e9df}.train-card h3{font-size:17px;font-weight:700;letter-spacing:-.02em;margin:0 0 5px}.train-meta{font-size:13px;color:var(--muted);margin:0;line-height:1.4}.train-time{margin-left:auto;text-align:right;min-width:72px}.train-time strong{font-family:Manrope,sans-serif;font-size:26px;letter-spacing:-.04em;font-variant-numeric:tabular-nums}.train-time span{display:block;font-size:12px;color:var(--muted);margin-top:3px}.train-detail{margin-top:17px;padding-top:14px;border-top:1px solid #edf1ef;display:flex;align-items:center;justify-content:space-between;gap:12px}.type-badge{font-size:12px;padding:5px 8px;background:#f2f5f3;border-radius:5px;color:#61706a}.leave{font-size:13px;font-weight:500;text-align:right}.leave b{color:#31570c}.fineprint{font-size:12px;line-height:1.65;color:var(--muted);margin:14px 0 0}.walk-panel{background:white;border:1px solid var(--line);border-radius:18px;padding:25px}.small-tag{display:inline-block;font-size:11px;letter-spacing:.12em;color:#537527;background:#edf5d6;padding:6px 9px;border-radius:5px;margin-bottom:15px}.walk-panel h2{font-size:24px;margin-bottom:9px}.walk-panel p{font-size:14px;line-height:1.6;color:var(--muted);margin-bottom:0}.rule{height:1px;background:var(--line);margin:23px 0}.walk-panel label{font-size:14px;font-weight:500;display:block;margin-bottom:9px}.number-field{display:flex;border:1px solid #cfdad5;border-radius:9px;align-items:center;margin-bottom:19px;padding:10px 13px;gap:10px}.number-field input{width:70px;min-width:0;border:none;background:transparent;color:var(--green);font-weight:700;font-size:19px}.number-field span{color:var(--muted);font-size:13px}.walk-panel .input-help{font-size:13px}.walk-footer{font-size:12px;line-height:1.4;color:#6b7d75;margin:20px -25px -25px;padding:15px 25px;border-top:1px solid var(--line);background:#fbfcfb;border-radius:0 0 18px 18px}.sources{padding:26px 3px}.sources h2{font-size:17px;margin-bottom:12px}.sources>p{font-size:14px;color:var(--muted);line-height:1.6}.sources>a{font-size:13px;display:flex;align-items:center;justify-content:space-between;padding:13px 0;text-decoration:none;border-bottom:1px solid var(--line);gap:10px}.sources>a:hover{text-decoration:underline}.sources>p.fineprint{font-size:12px}.empty{padding:35px 25px;border:1px dashed #bdccc5;border-radius:16px;text-align:center;background:white}.empty h3{font-size:19px;margin:0 0 12px}.empty p{font-size:14px;line-height:1.7;color:var(--muted);margin:0}.empty a{font-weight:700}footer{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding:26px 0;margin-top:36px;gap:15px;font-size:12px;color:var(--muted)}footer span:first-child{letter-spacing:.12em;font-weight:700}[hidden]{display:none!important}@media(max-width:950px){main{padding:30px 22px 0}.workspace{grid-template-columns:minmax(0,1fr) 280px;gap:20px}.route-panel{padding:24px 18px}.heading{align-items:flex-start}.preview-badge{max-width:200px}.train-card{padding:16px}.train-row{gap:10px}.section-top{flex-wrap:wrap;gap:12px}.spot strong{font-size:14px}.spots{grid-template-columns:1fr 1fr .65fr 1fr;gap:4px}.spot>span:last-child{max-width:150px}}@media(max-width:700px){.topbar{height:77px}.private-label{display:none}.heading{display:block;margin-bottom:24px}.preview-badge{display:inline-block;max-width:none;margin-top:17px;font-size:12px}.route-panel{padding:20px 14px;margin-bottom:27px;border-radius:16px}.route-panel .section-top{margin-bottom:20px}.route-panel .muted{font-size:12px}.direction{font-size:11px;gap:22px}.direction span:last-child{text-align:right}.spots{grid-template-columns:1fr 1fr .65fr 1fr}.spot-note{font-size:9px;letter-spacing:0}.spot strong{font-size:12px;line-height:1.4}.spot>span:last-child{font-size:11px;line-height:1.4}.station strong{font-size:11px;white-space:normal;text-align:center}.station>span:last-child{font-size:11px}.spot-pin{width:29px;height:29px;margin-bottom:13px}.station{padding-top:23px}.station-symbol{margin-bottom:13px}.rail{top:62px}.workspace{display:flex;flex-direction:column;gap:24px}.trains h2{font-size:22px}aside{display:grid;grid-template-columns:1fr;gap:0}.train-icon{height:40px;width:40px}.train-card h3{font-size:16px}.train-time strong{font-size:23px}.train-time{min-width:61px}.train-meta{font-size:12px}.train-detail{align-items:flex-start}.leave{font-size:12px}.type-badge{font-size:11px}.notice{font-size:13px;padding:14px}.filters button{font-size:13px;padding:8px 13px}.walk-panel{padding:22px}.walk-footer{margin:20px -22px -22px;padding:14px 22px}footer{flex-direction:column;margin-top:10px}main{padding:25px 16px 0}}@media(prefers-reduced-motion:no-preference){button{transition:background .15s,color .15s}}
.preview-badge.connected{background:#e6f1d9;border-color:#c4dcae;color:#31531f}.board-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:17px;font-size:14px}.board-controls>label:first-child{display:flex;align-items:center;gap:8px}.board-controls input[type=date]{padding:8px;border:1px solid #cfdad5;border-radius:8px;background:white;color:var(--green);font:inherit;max-width:170px}.refresh-button{border:1px solid #cfdad5;padding:9px 14px;border-radius:9px;background:white;color:var(--green);font-size:14px}.refresh-button:disabled{cursor:wait;opacity:.6}.route-text{font-size:14px;line-height:1.6;margin:16px 0 6px;color:#34574c}.cargo-detail{font-size:13px;line-height:1.5;color:#607268;margin:10px 0 0}.working-link{display:inline-block;font-size:13px;text-decoration:none;margin-top:14px;color:#375f4e}.working-link:hover{text-decoration:underline}.train-copy{min-width:0}.train-card.cancelled{background:#f6f6f4}.cancelled .train-time strong{text-decoration:line-through;color:#8b5a48}.type-badge.conditional{background:#fff2d4;color:#775c20}.train-icon.special{background:#f3e9dc}.walk-panel .bridge-allowance{font-size:12px;color:#627365;margin:0 0 14px}.live-notice{background:#eef4f0;border-color:#d7e3da;color:#2c5040}.live-notice p{color:#526b5d}.train-detail{align-items:flex-start}.type-badge{max-width:55%;line-height:1.5}.leave{max-width:48%;line-height:1.5}@media(max-width:700px){.board-controls{gap:10px}.board-controls .switch-label{width:100%}.train-time span{max-width:80px}.route-text{font-size:13px}}
#map{height:410px;border-radius:12px;background:#e2e9e4;color:#163b37;z-index:0;margin:16px 0}.map-tools{position:relative;max-width:540px}.map-tools label{display:block;font-size:14px;margin-bottom:8px}.map-tools input{width:100%;padding:12px 14px;border-radius:9px;border:1px solid #cfdad5;background:white;color:#123c37;font-size:16px}#search-results:not(:empty){position:absolute;top:100%;left:0;right:0;z-index:1001;border-radius:8px;box-shadow:0 8px 30px #0003;background:white;color:#123c37;padding:8px}#search-results button{display:block;width:100%;text-align:left;background:white;color:#123c37;border:0;padding:10px;font-size:16px}#search-results button:hover{background:#edf5d6}#location-status,.map-help,#station-note{font-size:14px;line-height:1.5;margin:14px 0 0}.map-help,#station-note{color:#c8ded6}.map-actions{display:flex;gap:10px;flex-wrap:wrap}#board-station{font:inherit;width:100%;max-width:520px;margin-top:8px;padding:12px;border-radius:8px;border:1px solid #cfdad5;color:#123c37;background:white}.route-panel>label{display:block;font-size:14px;margin-top:20px}.custom-pin span{display:grid;place-items:center;width:32px;height:32px;border:3px solid white;border-radius:50%;background:#123c37;color:white;font-size:14px;font-weight:bold;box-shadow:0 1px 8px #0006}.custom-pin.start span{background:#2370b7}.credits{padding:0 0 24px}.workspace{grid-template-columns:320px minmax(0,1fr)}aside{grid-column:1;grid-row:1}.trains{grid-column:2;grid-row:1}.train-meta,.cargo-detail,.working-link,.leave,.notice p,.sources>a{font-size:14px}.route-panel .section-top{margin-bottom:16px}@media(max-width:700px){#map{height:350px}.workspace{display:flex;flex-direction:column}aside{order:0}.trains{order:1}.sources{padding:20px 3px}.route-panel{padding:20px 14px}.map-actions button{flex:1;font-size:14px}.train-row{flex-wrap:wrap}.train-time{margin-left:auto}}
