:root{color-scheme:light;--navy:#0e2941;--blue:#185b83;--yellow:#ffce42;--ink:#183245;--muted:#566a79;--border:#d7e0e7;--bg:#f1f5f8}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Segoe UI,Arial,sans-serif;font-size:16px;line-height:1.5}header{background:var(--navy);color:white;display:flex;align-items:center;justify-content:space-between;padding:22px max(24px,calc((100vw - 1400px)/2));border-bottom:5px solid var(--yellow);gap:20px}.brand{display:flex;gap:14px;align-items:center;color:white;text-decoration:none;font-size:24px;font-weight:650;white-space:nowrap}.brand small{display:block;font-size:12px;letter-spacing:2px;color:#c0d0dc;font-weight:500}.brand-mark{background:var(--yellow);color:var(--navy);font-size:32px;font-weight:900;line-height:48px;width:48px;text-align:center;border-radius:5px}.edition{text-align:right;font-size:13px}.edition span{display:block;color:#b8cbd9;margin-top:3px}.edition b{font-weight:600;letter-spacing:.5px}main{max-width:1450px;margin:auto;padding:30px 24px}.search-panel{background:white;border:1px solid var(--border);border-top:3px solid var(--blue);border-radius:7px;padding:24px 28px;box-shadow:0 3px 12px #14314a05}.eyebrow{font-size:12px;letter-spacing:1.7px;font-weight:750;color:var(--blue)}h1{font-size:28px;margin:4px 0 20px;letter-spacing:-.5px}form{display:grid;grid-template-columns:minmax(220px,2fr) minmax(170px,1.2fr) 120px 120px 150px;gap:16px;align-items:end}label{font-size:14px;font-weight:600;display:block;margin-bottom:6px}input,select,button{font:inherit}input:not([type=checkbox]),select{width:100%;min-height:46px;border:1px solid #adbcc8;border-radius:5px;background:white;padding:9px 12px;color:var(--ink)}input:focus,select:focus,button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #338fc1;outline-offset:3px}button{cursor:pointer;border:0;border-radius:5px;padding:10px 16px;min-height:44px;background:#e6edf3;color:var(--navy);font-weight:650}.primary{background:var(--navy);color:white}.primary:hover{background:#204761}.primary span{padding-left:12px;color:var(--yellow)}.search-hint{font-size:13px;color:var(--muted);margin:10px 0 0}#error{color:#a82932;margin:12px 0 0}.workspace{display:grid;grid-template-columns:minmax(500px,1.15fr) minmax(400px,1fr);gap:22px;margin-top:24px;align-items:start}.board,.journey{background:white;border:1px solid var(--border);border-radius:7px;overflow:hidden}.board-heading{display:flex;justify-content:space-between;gap:15px;align-items:center;padding:22px 24px 16px}h2{font-size:24px;margin:3px 0 0;line-height:1.3;letter-spacing:-.4px}.board-heading p{font-size:14px;margin:5px 0 0;color:var(--muted)}.count{background:#edf3f7;border-radius:20px;padding:5px 12px;font-size:14px;white-space:nowrap}.board-filters{padding:10px 24px;display:flex;gap:20px;flex-wrap:wrap;border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:#f8fafc}.board-filters label{margin:0;display:flex;align-items:center;gap:6px;font-weight:400}.board-filters input{accent-color:var(--blue);width:16px;height:16px}.result{display:grid;grid-template-columns:76px 1fr 72px;gap:12px;padding:16px 20px;border-bottom:1px solid #e5ecf1;text-align:left;width:100%;border-radius:0;background:white;color:var(--ink);font-weight:400;position:relative}.result:hover{background:#f2f7fa}.result.selected{background:#eaf3fa;box-shadow:inset 4px 0 var(--blue)}.time{font-variant-numeric:tabular-nums;font-weight:750;font-size:21px;line-height:1.3}.result small{display:block;font-size:13px;color:var(--muted);font-weight:400;margin-top:3px}.result .destination{font-weight:650;font-size:16px}.result .headcode{text-align:right;font-variant-numeric:tabular-nums;font-weight:650;font-size:14px}.tag{font-size:12px;display:inline-block;padding:2px 6px;background:#eaf0f5;color:#425e71;border-radius:3px;margin:5px 5px 0 0}.tag.warn{background:#fff2d4;color:#795412}.empty{padding:48px 30px;text-align:center;color:var(--muted)}.empty h2,.empty h3{color:var(--ink);margin:5px 0;font-weight:600}.empty p{max-width:380px;margin:12px auto}.journey{position:sticky;top:20px}.journey-empty{padding:90px 30px}.rail-symbol{font-size:48px;color:#7d9cb0}.legend{display:flex;justify-content:center;gap:20px;margin-top:28px;font-size:13px}.legend span{display:flex;gap:7px;align-items:center}.stop-dot,.pass-dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:var(--blue);border:2px solid var(--blue)}.pass-dot{background:white}.journey-head{background:var(--navy);color:white;padding:22px 24px}.journey-head .eyebrow{color:#b8cbd9}.journey-head h2{font-size:22px;margin:8px 0}.journey-head p{margin:5px 0 0;color:#c3d5e2;font-size:14px}.journey-options{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;align-items:center;padding:12px 24px;border-bottom:1px solid var(--border)}.journey-options label{margin:0;font-weight:400}.source-button{background:#edf3f7;min-height:36px;padding:5px 10px;font-size:14px}.journey-note{font-size:13px;color:#795412;background:#fffaec;padding:12px 24px;margin:0}.timeline{list-style:none;margin:0;padding:16px 24px}.timeline li{display:grid;grid-template-columns:20px 1fr auto;gap:10px;position:relative;padding:11px 0}.timeline li:before{content:"";position:absolute;left:5px;top:0;bottom:0;width:2px;background:#c9d9e4}.timeline li:first-child:before{top:22px}.timeline li:last-child:before{bottom:calc(100% - 22px)}.timeline .node{width:12px;height:12px;border:2px solid var(--blue);border-radius:50%;background:var(--blue);margin-top:6px;position:relative;z-index:1}.timeline .passing .node{background:white;border-color:#829aab;width:10px;height:10px;margin-left:1px}.timeline .passing{color:var(--muted);font-size:14px}.timeline .at-station{background:#edf5fa;margin:0 -10px;padding:11px 10px;border-radius:5px}.timeline .at-station:before{left:15px}.timeline .call-times{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}.timeline small{display:block;font-size:12px;color:var(--muted)}.journey-sources{border-top:1px solid var(--border);padding:16px 24px;display:flex;gap:8px;flex-wrap:wrap}.data-notes{font-size:14px;color:var(--muted);margin-top:24px;border:1px solid var(--border);border-radius:5px;background:#f8fafc}.data-notes summary{cursor:pointer;padding:14px 18px;font-weight:600}.data-notes>div{padding:0 18px 10px;max-width:1000px}footer{max-width:1450px;margin:auto;padding:0 24px 25px;display:flex;justify-content:space-between;gap:15px;font-size:12px;color:var(--muted)}dialog{border:0;border-radius:8px;width:min(1100px,95vw);max-height:95vh;padding:0;color:var(--ink)}dialog::backdrop{background:#071c32bb}.dialog-top{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;position:sticky;top:0;background:white;border-bottom:1px solid var(--border)}dialog h2{font-size:20px}dialog p{margin:12px 20px;font-size:14px}.scan-wrap{background:#dce3e9;padding:15px;overflow:auto}.scan-wrap img{display:block;width:100%;height:auto}.load-more{width:100%;border-radius:0;background:#edf3f7}.restriction{font-size:13px;color:#735219;margin-top:5px}.board-caption{font-size:13px;padding:10px 24px;background:#fffaec;color:#735219;border-bottom:1px solid var(--border)}@media(max-width:1100px){form{grid-template-columns:2fr 1.3fr 1fr 1fr}.primary{grid-column:1/-1}.workspace{grid-template-columns:1fr 1fr;gap:16px}.result{grid-template-columns:65px 1fr 55px;padding:14px}.board-heading,.board-filters{padding-left:18px;padding-right:18px}.board-filters{gap:12px}.time{font-size:19px}}@media(max-width:800px){header{padding:18px}.edition{display:none}main{padding:18px 12px}.search-panel{padding:20px}form{grid-template-columns:1fr 1fr}.station-field{grid-column:1/-1}form>div:nth-child(2){grid-column:1/-1}.workspace{grid-template-columns:1fr}.journey{position:static}.journey-empty{padding:40px 20px}footer{flex-direction:column;padding:0 18px 20px}.brand{font-size:22px}h1{font-size:24px}}@media(prefers-reduced-motion:no-preference){button{transition:background .15s}html{scroll-behavior:smooth}}



[hidden]{display:none!important}.quality-banner{padding:12px 18px;background:#fff6db;border:1px solid #eddda9;border-radius:8px;font-size:13px;line-height:1.55;margin:0 0 24px}.quality-banner b{margin-right:6px}.uncertain-time{color:#936622}.uncertain-time::after{content:" *"}.recorded-label{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#647483}


.recorded-label{display:block;margin:4px 0 3px;font-size:10px}

.scan-page{position:relative}.scan-actions{padding:0 20px 12px;display:flex;gap:8px}.scan-actions button{font-size:13px;min-height:32px}.scan-page #source-highlight{position:absolute;background:#ffce4226;border:2px solid #c99100;pointer-events:none}

.result{grid-template-columns:76px 1fr 98px}.result .southern-headcode{font-size:11px;line-height:1.3;color:#526a7b}.southern-headcode b{display:block;font-size:21px;color:#174f70;font-weight:750}.headcode-badge{display:inline-flex;gap:10px;align-items:center;margin-top:12px;padding:5px 12px;border:1px solid #688196;border-radius:5px;font-size:14px;color:#d1e0e9}.headcode-badge strong{font-size:24px;color:#ffce42;line-height:1.2}@media(max-width:1100px){.result{grid-template-columns:64px 1fr 82px;gap:9px}}

.southern-headcode b.missing-code{font-size:12px;font-weight:500;padding-top:3px;overflow-wrap:anywhere}

/* Passing trains use softer text while retaining readable contrast. */
.result.passing,.result.passing .time,.result.passing .destination,.result.passing .running-code,.result.passing .southern-headcode b{color:#667887;font-weight:400}.result.passing small,.result.passing .recorded-label{color:#667887}.result.passing.selected{background:#edf3f7}

/* Movement colours retain text labels, including when a train both arrives and departs. */
.movement-departure,.result.departure .time,.result.departure .time>small{color:#185b83}
.movement-arrival,.result.arrival .time,.result.arrival .time>small,.result .time>small.movement-arrival{color:#267044}
.movement-passing,.result.passing .time,.result.passing .time>small{color:#667887}
.movement-legend{display:flex;flex-wrap:wrap;gap:16px;padding:10px 24px;font-size:12px}
.movement-legend.legend{padding:0;gap:14px}
.timeline .call-times{display:flex;justify-content:flex-end;align-items:start;gap:12px}
.timeline .call-times small{color:inherit}
.timeline .arrival .node{background:#267044;border-color:#267044}
.association-note{grid-column:2/-1;background:#eef5f8;border-left:3px solid #5183a0;border-radius:3px;padding:10px 12px;font-size:13px;color:#27475c;line-height:1.6}
.association-note strong{display:block;color:#153a53;margin-bottom:3px}
.train-link{display:inline;padding:0 3px;min-height:0;background:transparent;color:#185b83;text-decoration:underline;font-weight:700;border-radius:2px}
.train-link:hover{background:#dcebf3}.association-tag{color:#315b70;background:#edf5f8}
.result.arrival.selected{box-shadow:inset 4px 0 #267044;background:#f0f7f2}

/* Strong movement colours, accompanied by text labels. */
.result.departure {border-left:6px solid #0766b5;background:#edf6ff}
.result.arrival {border-left:6px solid #168144;background:#e8f7ed}
.result.passing {border-left:6px solid #8752ac;background:#f4edf9}
.result.departure .time,.movement-departure {color:#075d9f!important}
.result.arrival .time,.movement-arrival {color:#126a36!important}
.result.passing .time,.movement-passing {color:#744092!important}
.result.passing .destination {color:#634578;font-weight:600}
.result .time>small:first-child {display:table;font-weight:700;border-radius:4px;padding:3px 7px;margin:4px 0;background:#d8eaff}
.result.arrival .time>small:first-child {background:#c7ebd3}
.result.passing .time>small:first-child {background:#e7d7f1}
.result.selected {outline:2px solid #193f5c;outline-offset:-2px;box-shadow:inset 0 0 0 1px white}
.timeline li.arrival .node {background:#168144;border-color:#168144}
.timeline li.passing .node {border-color:#8752ac}
.board-filters {flex-wrap:wrap;gap:12px}
.board-filters label:has(#show-calls){color:#075d9f;font-weight:700}
.board-filters label:has(#show-arrivals){color:#126a36;font-weight:700}
.board-filters label:has(#show-passes){color:#744092;font-weight:700}
#show-calls {accent-color:#0766b5} #show-arrivals {accent-color:#168144} #show-passes {accent-color:#8752ac}
.passenger-tag,.passenger-note {color:#175b4d;background:#e3f3eb}
.passenger-note {margin:0;padding:14px 24px;font-size:13px;line-height:1.6}


header .brand{white-space:normal}header .brand-mark{flex-shrink:0}

.line-code{display:inline-block;padding:2px 7px;border:1px solid #658299;border-radius:4px;background:#eef4fa;color:#12354d;font-size:12px;font-weight:750;letter-spacing:.04em}.headcode .line-code{margin-top:5px}

/* ECS has a separate service colour; movement words and hollow passing dots remain. */
.movement-ecs{color:#9a4400;font-weight:700}
.result.ecs{background:#fff0dc;border-left:5px solid #c45b00}
.result.ecs:hover{background:#ffe1b9}
.result.ecs.selected{background:#ffdfb3;outline-color:#884000}
.result.ecs .time,.result.ecs .destination,.result.ecs .running-code,.result.ecs .headcode b{color:#934000}
.result.ecs .time>small{color:#934000;background:#ffddb0}
.ecs-tag{background:#ffcf91;color:#703000;font-weight:700}
.journey-head.ecs-head{background:#793600;border-bottom:4px solid #e98921}
.journey-head.ecs-head .eyebrow,.journey-head.ecs-head p{color:#ffe7cd}
.ecs-timeline .node,.ecs-timeline li.arrival .node{background:#bb5500;border-color:#bb5500}
.ecs-timeline li.passing .node{background:white;border-color:#bb5500}
.ecs-timeline .call-times>span,.ecs-timeline .call-times small{color:#934000}
.ecs-timeline .at-station{background:#fff0dc}
.board-filters label:has(#show-ecs){color:#934000;font-weight:700}
#show-ecs{accent-color:#c45b00}
