*{box-sizing:border-box}html{scroll-behavior:smooth}body{font-variant-numeric:tabular-nums}a{color:var(--accent);text-underline-offset:3px}button,input,select{font:inherit;color:var(--ink)}button,a,select{touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:default}button,input,select{border:1px solid var(--line);border-radius:5px;background:var(--surface);padding:7px 12px}button:hover,a:hover{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}h1,h2,p{margin:0}h1,h2{text-wrap:balance;font-weight:600}h1{font-size:26px;line-height:1.3}h2{font-size:20px;line-height:1.35}.block-title h2{font-size:13px;line-height:1.6}p+p{margin-top:12px}.page{width:100%;max-width:1252px;padding:32px var(--gutter) 40px;margin:auto}header{display:flex;align-items:center;justify-content:space-between;gap:24px;border-bottom:1px solid var(--line);padding:0 0 20px}.brand{display:flex;align-items:center;gap:10px;font-size:20px;line-height:1.3;font-weight:600;color:var(--ink);text-decoration:none}.brand img{height:1.2em;width:1.2em;flex:none;transform:translateY(.03em)}.meta{font-size:12px;color:var(--muted);line-height:1.5}.muted{color:var(--muted)}.mono{font-family:var(--mono)}main{padding-top:24px;outline:none}.figures{display:grid;gap:24px}.chart-card{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:20px;min-width:0}.block-title{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:8px;margin-bottom:16px}.block-title .meta{font-weight:400}.chart-card svg{display:block;width:100%;height:auto;overflow:visible}.grid{stroke:var(--line-soft);stroke-width:1}.axis{fill:var(--muted);font-size:11px;font-family:var(--mono)}.legend{display:flex;align-items:center;gap:8px 16px;flex-wrap:wrap;color:var(--muted);font-size:12px;margin-top:12px}.swatch{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px;background:var(--ontime)}.swatch.tick{width:2px;height:12px;margin:0 8px 0 4px;border-radius:0;background:var(--ink);vertical-align:-2px}.train-number{font:500 13px var(--mono)}.route{min-width:120px}.route .meta{display:block}.big{font-size:18px;font-weight:600;white-space:nowrap}.day-strip{display:flex;gap:2px;min-width:160px}.day-cell{height:20px;width:6px;min-width:4px;flex:1;border-radius:2px;position:relative}.hatch{background:var(--hatch);border:1px solid var(--line)}.changed{border-left:2px solid var(--ink)}.search{max-width:260px;width:100%;font-size:13px}.train-lead{display:flex;align-items:flex-start;gap:14px;min-width:0}.back-btn{flex:none;display:inline-flex;align-items:center;justify-content:center;width:26.4px;height:26.4px;margin-top:4.6px;border:1px solid var(--line);border-radius:50%;background:var(--surface);color:var(--muted)}.back-btn:hover{color:var(--accent);border-color:var(--accent)}.back-link{font-size:13px;display:inline-block;margin-bottom:12px}.train-intro{margin-bottom:24px}.train-intro h1{margin-bottom:8px}.train-intro .train-number{font-size:26px}.train-days{min-width:0;flex-wrap:wrap}.train-days .day-strip{width:100%;min-width:0;gap:3px}.strip-dates{display:flex;justify-content:space-between;margin-top:8px}.empty{padding:24px 0;display:grid;gap:16px}.empty h2{font-size:20px}.skeleton{height:300px;border-radius:8px;background:linear-gradient(90deg,var(--row-alt),var(--surface),var(--row-alt));background-size:200% 100%;animation:shimmer 1.5s infinite}footer{margin-top:48px;padding-top:20px;border-top:1px solid var(--line);color:var(--muted);font-size:12px;display:grid;gap:8px}#tooltip{position:fixed;z-index:20;pointer-events:none;background:var(--ink);color:var(--canvas);font-size:12px;line-height:1.5;padding:7px 9px;border-radius:5px;max-width:min(300px,calc(100vw - 24px));white-space:pre-line;box-shadow:0 4px 16px #1b1c1e20}#tooltip::first-line{font-weight:600}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.skip{position:absolute;top:-100px;left:16px;z-index:100;background:var(--surface);padding:8px 16px}.skip:focus{top:8px}@keyframes shimmer{to{background-position:-200% 0}}
@media(max-width:900px){header{align-items:flex-start}.figures{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 24px}.chart-card{padding:16px}}
@media(max-width:560px){.page{padding-top:24px}header{flex-direction:column;gap:12px;padding-bottom:16px}.big{font-size:16px}.route{min-width:90px}.search{max-width:100%}.chart-card{padding:14px}.train-intro h1{font-size:23px}.train-intro .train-number{font-size:23px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}.uncollected{background:none;border:1px solid var(--line)}.swap{height:38px;min-width:38px;font-size:21px;line-height:1;padding:4px 8px}@media(max-width:560px){.page{padding-top:18px}header{flex-direction:row;align-items:center;gap:8px;padding-bottom:12px}main{padding-top:18px}}.brand{padding:2px 0}.train-days-title{margin:28px 0 10px}.train-days .day-strip{width:100%;min-width:0;gap:3px}.train-days .day-cell{height:28px}
.day-strip.has-active .day-cell:not(.on){opacity:.45}
@media(max-width:560px){.train-days .day-cell{height:22px}}/* Train page: stat row and route rail, one dot per recorded day at each stop. */
.train-head{display:flex;justify-content:space-between;align-items:center;gap:16px}.train-glyph{flex:none}.glyph-land{fill:var(--line-soft)}.glyph-route{fill:none;stroke:var(--ink);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.glyph-end{fill:var(--ink)}.train-head .meta{font-size:14px}.train-stats{margin-top:6px}.train-stats b{font-weight:600;color:var(--ink)}.rail{padding-top:14px;position:relative}.rail-run{position:absolute;left:0;top:0;z-index:0;pointer-events:none;overflow:visible}.rail-run path{fill:none;stroke:var(--ink);stroke-width:1.2;stroke-dasharray:3 3;stroke-linecap:round;stroke-linejoin:round;opacity:.6}.rail-row{display:grid;grid-template-columns:48px minmax(120px,1.1fr) minmax(200px,3.4fr) 44px;gap:0 12px;align-items:center}.rail-row{min-height:32px;border-bottom:1px solid var(--line-soft);font-size:13px}.rail-row:last-of-type{border-bottom:0}.rail-row:hover,.rail-row:focus-visible{background:var(--accent-soft)}.rail-stop{display:flex;align-items:center;gap:8px;min-width:0}.chart-card svg.rail-node{flex:none;width:14px;height:32px}.rail-node path{stroke:var(--line);stroke-width:3;fill:none}.rail-node circle{fill:var(--faint);stroke:var(--surface);stroke-width:2}.rail-track{position:relative;height:32px}.rail-track::before{content:"";position:absolute;left:0;right:0;top:50%;border-top:1px solid var(--line-soft)}.rail-origin::before{display:none}.rail-limit{position:absolute;top:4px;bottom:4px;border-left:1px dashed var(--line)}.rail-dot{position:absolute;width:4.5px;height:4.5px;margin:-2.25px 0 0 -2.25px;border-radius:50%;background:var(--ontime-mark)}.rail.has-hl .rail-dot:not(.hl){opacity:.6}.rail-dot.hl{z-index:1;transform:scale(1.3);box-shadow:0 0 0 1.5px var(--surface);background:color-mix(in srgb,var(--ontime-mark) 62%,#04402e)}.rail-dot.hl.late{background:color-mix(in srgb,var(--d3) 68%,#6a1e06)}.rail-dot.late{background:var(--d3)}.rail-label{position:absolute;top:-13px;transform:translateX(-50%);font-size:12px;color:var(--muted);white-space:nowrap}.rail-time{font-family:var(--mono);font-size:12px;color:var(--muted);white-space:nowrap}.rail-time sup{font-size:9px;margin-left:1px}.rail-share{text-align:right;font-weight:500}.rail-share{position:relative;align-self:stretch;display:flex;align-items:center;justify-content:flex-end}footer p+p{margin-top:0}.rail-share-label{position:absolute;right:0;top:-13px;font-size:12px;font-weight:400;color:var(--muted);white-space:nowrap}.rail-key{background:var(--ontime-mark);border-radius:50%}.rail-key.late{background:var(--d3)}
@media(max-width:560px){.train-glyph{display:none}.rail-row{grid-template-columns:38px minmax(0,1.15fr) minmax(88px,1fr) 32px;gap:0 6px;font-size:12px}.rail-stop{gap:5px}}.dot-field{margin-bottom:8px}.dot-field canvas{display:block;width:100%;cursor:crosshair}.dot-read{min-height:21px;margin-top:8px}/* Start page (index.html): one row per period. */
.period{display:grid;grid-template-columns:230px minmax(0,320px) minmax(0,1fr);gap:36px;align-items:start;padding:32px 0;border-top:1px solid var(--line)}.period:first-of-type{border-top:0;padding-top:0}.period .eyebrow{font-size:13px;color:var(--muted);margin-bottom:12px}.period .hero{font-size:64px;font-weight:600;line-height:1;letter-spacing:-.02em}.period h2{font-size:20px;line-height:1.35;font-weight:500;margin-top:34px}.period .sub{font-size:14px;line-height:1.55;color:var(--muted);margin-top:8px}.period .p-vis{margin-top:34px}.period .dot-field{margin:0}.bars-wrap{position:relative;padding-left:38px}.axis-label{position:absolute;left:0;font-size:12px;line-height:1;color:var(--muted);transform:translateY(50%)}.bars-wrap::before{content:"";position:absolute;left:38px;right:0;top:0;border-top:1px solid var(--line-soft)}.bars{display:flex;height:130px;border-bottom:1px solid var(--line)}.bars .col{flex:1;max-width:31px;height:100%;display:flex;align-items:flex-end;padding:0 1.5px}.bars .col i{display:block;width:100%;border-radius:2px 2px 0 0}.bars .col i:not(.uncollected){background:var(--ontime)}.bars .uncollected{border-radius:2px}.bars.has-active .col:not(.on) i{opacity:.45}.bar-dates{display:flex;justify-content:space-between;margin:6px 0 0 38px}
@media(max-width:900px){.period{grid-template-columns:1fr;gap:10px;padding:28px 0}.period h2,.period .p-vis{margin-top:0}.period .p-vis{margin-top:14px}}
@media(max-width:560px){.period .hero{font-size:48px}}#bar-read{min-height:21px}
@media(max-width:560px){#bar-read{min-height:42px}}

/* Day page: how late stops were, and the biggest delays. */
.day-cards{display:grid;gap:16px}.day-bar{display:flex;height:28px;gap:2px}.day-bar .seg{display:block;border-radius:2px;min-width:3px}.day-bar-legend b{font-weight:600;color:var(--ink)}.day-bar-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:12px;font-size:13px;color:var(--muted)}.day-bar-legend span{display:inline-flex;align-items:center;gap:6px}
.day-table{width:100%;border-collapse:collapse;font-size:13px}.day-table th{padding:0 12px 8px 0;border-bottom:1px solid var(--line);font-size:12px;font-weight:400;color:var(--muted);text-align:left}.day-table td{padding:9px 12px 9px 0;border-bottom:1px solid var(--line-soft)}.day-table tr:last-child td{border-bottom:0}.day-table .r{padding-right:0;text-align:right}.delay-chip{font:500 12px var(--mono);white-space:nowrap}.delay-chip i{display:inline-block;width:8px;height:8px;margin-right:6px;border-radius:50%}.day-table td.reported{font-weight:500}.day-table sup{font-size:9px;color:var(--muted)}
@media(max-width:760px){.day-table th,.day-table td{padding-right:8px}.day-table th.r,.day-table td.r{padding-right:0}.narrow-hide{display:none}}
.bars .col.link{cursor:pointer}
.day-table .run-time{font-size:12px;color:var(--muted)}
/* On phones the route and place move under the train, and the other cells line up with the train line. */
.row-sub{display:none}
@media(max-width:760px){.day-table td{vertical-align:top}.day-table td.nw{white-space:nowrap}.row-sub{display:block;margin-top:1px;font-size:11px;line-height:1.4;color:var(--muted)}}
/* The month page's bars share the full width of the card instead of stopping at the front page's 31 pixels. */
.bars.fill .col{max-width:none}
