@font-face{font-family:Sora;src:url('assets/fonts/Sora.woff2') format('woff2');font-weight:100 900;font-display:swap}
:root{color-scheme:dark;--paper:#141b1e;--surface:#1b282e;--ink:#e2e3de;--muted:#9bb1b8;--blue:#e2faff;--grey:#3a4b52;--rows:24px 40px 26px 34px 24px;--gutter:90px}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:#0a1013;color:var(--ink);font-family:Sora,Arial,sans-serif;font-variant-numeric:tabular-nums}h1,h2,h3,p{margin:0}button,input{font:inherit}button,a{color:inherit}button{cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid #ffd100;outline-offset:3px}button{background:none;border:0}svg{display:block}[hidden]{display:none!important}.sr-only{position:absolute!important;width:1px!important;height:1px!important;overflow:hidden!important;clip-path:inset(50%);white-space:nowrap}
.weather-screen{background:var(--paper);padding:24px;max-width:1920px;margin:auto}.weather-screen.tv{position:absolute;left:50%;top:50%;width:1920px;height:1080px;max-width:none;margin:0;padding:32px 48px;display:grid;grid-template-rows:112px 634px 178px 42px;gap:16px;transform-origin:center}
.masthead{display:flex;align-items:center;gap:28px;border-bottom:1px solid var(--grey);padding-bottom:12px;min-height:0}.brand{width:300px;height:100px;object-fit:contain;flex-shrink:0;background:#fff;padding:5px}.heading{flex:1;min-width:0}h1{font-size:32px;line-height:1.1;letter-spacing:-1px}.eyebrow{font-size:19px;text-transform:uppercase;letter-spacing:3px;margin-bottom:7px;color:var(--muted)}.location{font-size:21px;color:var(--muted);margin-top:3px}.clock{display:flex;flex-direction:column;align-items:flex-end;gap:3px;position:relative;white-space:nowrap}.time-line{display:flex;align-items:baseline;gap:18px}.time-line strong{font-size:38px;letter-spacing:-2px;line-height:44px}#date{font-size:22px}.moon-reading{display:flex;align-items:center;gap:7px;font-size:20px;color:var(--blue);line-height:26px}.moon-icon{height:24px;width:24px}.moon-reading b{font-weight:500}#fullscreen{font-size:14px;line-height:18px;color:var(--muted);padding:0}
.middle{display:grid;grid-template-columns:430px minmax(0,1fr);gap:24px;min-height:0;min-width:0}.rail{display:grid;grid-template-rows:310px minmax(0,1fr);gap:16px;min-height:0}.current{background:var(--surface);border-radius:12px;padding:20px 24px;position:relative;min-width:0}.metric-label{color:var(--muted);font-size:22px;line-height:28px}.current-direction{position:absolute;top:18px;right:22px;width:38px;height:38px}.current-direction .wind-arrow{width:38px;height:38px}.wind-arrow{width:26px;height:26px;color:var(--blue);flex-shrink:0}.wind-reading{display:flex;align-items:center;gap:8px;height:137px}.wind-cluster{display:flex;align-items:baseline;gap:6px;min-width:0}.wind-summary{display:flex;align-items:baseline;gap:8px;white-space:nowrap}.wind-summary .speed{font-size:126px;font-weight:650;line-height:1;letter-spacing:-5px}.wind-summary .gust{font-size:43px;line-height:1;letter-spacing:-1px}.unit{font-size:22px;color:var(--muted)}.forecast-warning{width:104px;height:104px;flex:0 0 104px;color:#292112}.has-warning .wind-summary .speed{font-size:104px;letter-spacing:-4px}.has-warning .wind-summary .gust{font-size:30px}.has-warning .unit{font-size:20px}.rail-stats{display:grid;grid-template-columns:1.25fr 1fr .75fr;gap:12px;border-top:1px solid var(--grey);padding-top:10px;margin-top:12px;align-items:end}.rail-stats>div{white-space:nowrap;min-width:0}.rail-stats small{display:block;font-size:17px;color:var(--muted);margin-bottom:5px;line-height:22px}.rail-stats strong{display:inline-block;font-size:28px;font-weight:600;line-height:1.2}.rail-stats>div:first-child strong{font-size:52px;color:var(--blue)}.rail-stats em{font-style:normal;font-size:19px}.condition{position:absolute;width:1px;height:1px;clip-path:inset(50%);overflow:hidden}
.hourly,#hours{min-width:0;min-height:0;height:100%}#hours{display:grid;grid-template-rows:repeat(2,minmax(0,1fr));gap:16px}.forecast-day{background:var(--surface);border-radius:12px;min-width:0;min-height:0;padding:6px 22px}.dayheading{height:30px}.dayheading h3{display:flex;align-items:baseline;justify-content:space-between;font-size:25px;line-height:30px;font-weight:650}.day-meta{width:100%}.dayheading h3 span{font-size:22px;color:var(--muted);font-weight:400}.day-count{display:none}.forecast-table{display:flex;min-width:0}.row-labels{display:grid;grid-template-rows:var(--rows);flex:0 0 var(--gutter);font-size:18px;line-height:24px;color:var(--muted)}.row-labels>div{display:flex;align-items:center;white-space:nowrap}.hourgrid{flex:1;min-width:0;display:grid;grid-template-columns:repeat(var(--hour-count,24),minmax(0,1fr))}.hour{display:grid;grid-template-rows:var(--rows);min-width:0;text-align:center}.hour>div{display:flex;align-items:center;justify-content:center;min-width:0;white-space:nowrap}.hour .time{font-size:20px;line-height:24px;color:var(--muted);position:relative}.hour .wind{gap:6px;align-items:baseline;font-weight:650;line-height:40px;letter-spacing:-1px}.hour .speed{font-size:40px}.hour .gust{font-size:20px;line-height:24px;font-weight:500;letter-spacing:-.4px}.hour .wave{font-size:28px;line-height:34px;color:var(--blue)}.hour .rain-air{gap:9px;font-size:20px;line-height:24px;color:var(--muted)}.rain-air .temp{color:var(--ink)}.interval-partial{font-size:13px;color:var(--muted);margin-left:1px}.hour.past{opacity:.45}.hour.single-hour .time{font-size:13px}.hour.single-hour .wind{flex-direction:column;align-items:center;justify-content:center;gap:0;line-height:26px}.hour.single-hour .speed{font-size:28px;line-height:26px}.hour.single-hour .gust{font-size:13px;line-height:14px}.hour.single-hour .rain-air{font-size:13px;gap:2px}.calm{font-size:15px}.missing{display:inline-block;color:var(--muted)}
.tide-panel{height:90px;margin-left:var(--gutter);padding-top:2px;position:relative}.tide-plot{height:88px;position:relative}.tide-plot svg{width:100%;height:100%;overflow:hidden}.tide-guides{stroke:#9bb1b81a;stroke-width:1}.tide-curve{fill:none;stroke:var(--muted);stroke-width:2;vector-effect:non-scaling-stroke}.tide-dots{fill:var(--blue)}.tide-event{position:absolute;left:clamp(90px,var(--event-x),calc(100% - 90px));transform:translateX(-50%);display:flex;align-items:baseline;gap:8px;white-space:nowrap;line-height:26px;height:26px}.tide-event b{font-size:24px;font-weight:600}.tide-event span{font-size:20px;color:var(--muted)}.tide-event.high{top:0}.tide-event.low{bottom:0}.tide-empty{height:88px;display:flex;align-items:center;font-size:18px;color:var(--muted)}.tide-stale:after{content:'Cached';position:absolute;right:0;top:33px;font-size:14px;color:#ffd100;background:var(--surface)}
.fishing-panel{height:28px;margin-left:var(--gutter);position:relative}.fishing-label{display:none}.fishing-track{height:28px;display:grid;grid-template-columns:repeat(var(--hour-count,24),minmax(0,1fr));position:relative}.fishing-hour{min-width:0;height:28px;display:flex;align-items:center;justify-content:center;gap:2px}.fish-icon{width:22px;height:26px;color:var(--blue);flex:0 0 auto}.fish-icon.cod{width:26px}.fishing-hour i{font-style:normal;color:#50636c;font-size:20px}.fishing-message{position:absolute;inset:0;display:flex;align-items:center;font-size:16px;background:var(--surface);color:var(--muted)}
.regional-map{position:relative;min-height:0;min-width:0;border:1px solid var(--grey);border-radius:12px;overflow:hidden;background:#10232b}.map-surface{position:relative;width:100%;height:100%;overflow:hidden;isolation:isolate}.map-surface canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0}.map-surface:before,.map-surface:after{content:'';position:absolute;left:0;right:0;z-index:1;pointer-events:none}.map-surface:before{top:0;height:90px;background:linear-gradient(180deg,#10232bd9,#10232b55 75%,#10232b00)}.map-surface:after{bottom:0;height:104px;background:linear-gradient(0deg,#10232bf0,#10232b99 80%,#10232b00)}.map-top{position:absolute;top:12px;left:14px;right:12px;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:8px}.map-top h2{font-size:22px;line-height:28px;text-shadow:0 1px 3px #071318}#map-motion{width:36px;height:36px;border-radius:50%;border:1px solid #9bb1b866;background:#10232b80;font-size:22px;flex-shrink:0}.map-time-label{position:absolute;top:52px;left:14px;right:40px;z-index:2;font-size:15px;line-height:20px;text-shadow:0 1px 3px #071318}.map-time-label strong{font-weight:500}.map-time-label span{display:none}.map-north{position:absolute;right:14px;top:53px;z-index:2;font-size:16px}.map-bottom{position:absolute;bottom:8px;left:14px;right:14px;z-index:2;text-shadow:0 1px 3px #071318}.map-controls{display:flex;gap:10px;align-items:center;margin-bottom:4px;font-size:13px;line-height:22px}.map-controls button{font-size:13px;border:1px solid #9bb1b866;border-radius:4px;white-space:nowrap;padding:1px 5px;background:#10232b80}.map-controls input{min-width:0;width:100%;accent-color:#e2faff;height:18px}.map-scale{display:flex;justify-content:space-between;position:relative;font-size:14px;padding-top:8px;line-height:19px}.map-scale:before{content:'';position:absolute;left:0;right:0;top:0;height:4px;background:linear-gradient(to right,#294753,#55727c 55%,#806d15 69%,#8a502b 85%,#6e3034)}.map-status{font-size:11px;line-height:15px;white-space:normal;overflow-wrap:anywhere}.map-source{font-size:13px;line-height:17px;white-space:nowrap}.map-source a{text-decoration:none}#map-unavailable{position:absolute;inset:84px 12px 105px;z-index:2;font-size:16px;display:flex;align-items:center;justify-content:center;text-align:center;background:#10232bbd}
.week{min-height:0;min-width:0;position:relative}.sectionhead{display:flex;align-items:baseline;justify-content:space-between;gap:16px;height:28px;line-height:28px;margin-bottom:4px}.sectionhead h2{font-size:22px;line-height:28px}.week-note{font-size:18px;color:var(--muted)}.weekgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:12px}.daycard{min-width:0;border-top:2px solid var(--grey);padding:6px 12px;background:#1b282e80;border-radius:0 0 8px 8px}.date-row{display:flex;justify-content:space-between;gap:4px;line-height:26px;margin-bottom:4px;font-size:22px;white-space:nowrap}.date-row>span:last-child{font-size:18px;color:var(--muted)}.daily-wind{display:flex;align-items:baseline;gap:4px;line-height:40px;font-size:40px;font-weight:650;letter-spacing:-1px;white-space:nowrap}.daily-wind .gust{font-size:24px;font-weight:500}.daily-direction{margin-left:auto;align-self:center}.daily-direction .wind-arrow{height:30px;width:30px}.daily-waves{display:flex;align-items:baseline;gap:5px;font-size:21px;line-height:24px;margin-top:3px;color:var(--muted);white-space:nowrap}.daily-waves strong{font-weight:500;color:var(--blue)}.daily-waves small{font-size:18px}.daily-secondary-strip{display:flex;justify-content:space-between;gap:6px;font-size:18px;line-height:24px;margin-top:3px;color:var(--muted);white-space:nowrap}.daily-secondary .caption{display:none}.daily-temperature{color:var(--blue)}.partial-note{position:absolute;right:0;top:28px;font-size:10px;color:var(--muted);background:var(--paper)}.partial-note:empty{display:none}
footer{display:flex;justify-content:space-between;align-items:center;gap:18px;min-width:0;font-size:14px;line-height:17px;color:var(--muted)}footer a{color:inherit}.fishing-legend{display:flex;align-items:center;gap:12px;white-space:nowrap}.species-key{display:flex;align-items:center;gap:5px}.fishing-legend .fish-icon{height:18px;width:16px}.fishing-legend .cod{width:20px}.method-button{text-decoration:underline;font:inherit;padding:0}.status-stack{display:flex;flex-direction:column;align-items:center;min-width:0}.status-stack>span{white-space:nowrap}.context-note{font-size:12px}.sources{text-align:right;max-width:430px;font-size:12px;line-height:14px}.sources>span:not(:empty){display:block;color:#ffd100}#status.stale{color:#ffd100}
#fishing-method{margin:auto;width:min(840px,calc(100vw - 32px));max-height:calc(100vh - 32px);padding:24px;color:var(--ink);background:var(--paper);border:1px solid var(--muted);overflow:auto;font:16px/1.5 Sora,Arial,sans-serif}#fishing-method::backdrop{background:#000b}.method-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.method-head h2{font-size:22px;line-height:1.3}.method-head button{border:1px solid var(--grey);padding:4px 8px;white-space:nowrap}#fishing-method p{margin:16px 0 0}#fishing-method a{color:inherit}
@media(max-width:1050px){.weather-screen{padding:20px}.masthead{flex-wrap:wrap;gap:16px;margin-bottom:18px}.brand{width:240px;height:90px}.heading{min-width:200px}.clock{width:100%;align-items:flex-start}.time-line{flex-wrap:wrap;gap:12px}.time-line strong{font-size:32px}#date{font-size:18px}.moon-reading{font-size:17px}.middle{display:flex;flex-direction:column;gap:18px}.rail{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:320px;gap:16px}.current{padding:20px}.metric-label{font-size:18px}.current-direction{right:18px}.wind-summary .speed{font-size:104px}.wind-summary .gust{font-size:35px}.forecast-warning{width:88px;height:88px;flex-basis:88px}.has-warning .wind-summary .speed{font-size:88px}.has-warning .wind-summary .gust{font-size:26px}.has-warning .unit{font-size:18px}.rail-stats>div:first-child strong{font-size:44px}.rail-stats small{font-size:14px}.rail-stats strong{font-size:25px}.hourly{height:auto}#hours{height:auto;gap:16px}.forecast-day{overflow-x:auto;padding:10px 16px 14px}.dayheading{min-width:0}.forecast-table{min-width:1200px}.tide-panel,.fishing-panel{min-width:1110px}.hour .speed{font-size:35px}.hour .gust{font-size:18px}.hour .time{font-size:17px}.hour .wave{font-size:25px}.hour .rain-air{font-size:18px}.tide-event b{font-size:22px}.tide-event span{font-size:18px}.fish-icon{width:19px;height:24px}.fish-icon.cod{width:22px}.week{margin-top:18px}.weekgrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.daycard{padding:12px}.sectionhead{height:auto}.week-note{font-size:14px}.daily-wind{font-size:36px}footer{margin-top:20px;align-items:flex-start;flex-wrap:wrap;gap:10px 18px}.status-stack{align-items:flex-start}.sources{text-align:left}.partial-note{position:static;font-size:12px;margin-top:5px}}
@media(max-width:700px){.weather-screen{padding:16px}.brand{width:220px;height:90px}.heading{min-width:0;width:100%;flex:0 0 100%}.masthead{gap:12px}.heading h1{font-size:27px}.eyebrow{font-size:15px;letter-spacing:2px}.location{font-size:16px}.rail{display:flex;flex-direction:column}.current{min-height:310px;padding:18px 20px}.regional-map{height:320px;min-height:320px}.current-direction{right:20px}.wind-summary .speed{font-size:112px}.wind-summary .gust{font-size:38px}.unit{font-size:21px}.has-warning .wind-summary .speed{font-size:88px}.has-warning .wind-summary .gust{font-size:27px}.has-warning .unit{font-size:18px}.forecast-warning{width:88px;height:88px;flex-basis:88px}.wind-reading{height:137px}.rail-stats>div:first-child strong{font-size:46px}.rail-stats strong{font-size:26px}.rail-stats small{font-size:15px}.dayheading h3{font-size:23px}.dayheading h3 span{font-size:18px}.weekgrid{grid-template-columns:repeat(2,minmax(0,1fr))}.sectionhead{align-items:flex-start;gap:6px;flex-direction:column;margin-bottom:8px}.week-note{font-size:13px;line-height:18px}.date-row{font-size:20px}.date-row>span:last-child{font-size:16px}.daily-wind{font-size:34px;line-height:38px}.daily-wind .gust{font-size:21px}.daily-direction .wind-arrow{width:24px;height:24px}.daily-waves{font-size:18px}.daily-waves small{font-size:15px}.daily-secondary-strip{font-size:15px;flex-wrap:wrap;row-gap:0}.fishing-legend{flex-wrap:wrap;gap:8px 12px}.status-stack>span{white-space:normal}.context-note{font-size:12px}}
@media(max-width:360px){.weather-screen{padding:12px}.current{padding:16px}.rail-stats{gap:7px}.rail-stats small{font-size:13px}.rail-stats strong{font-size:24px}.rail-stats>div:first-child strong{font-size:42px}.wind-summary .speed{font-size:104px}.wind-summary .gust{font-size:34px}.has-warning .wind-summary .speed{font-size:76px;letter-spacing:-3px}.has-warning .wind-summary .gust{font-size:23px}.has-warning .unit{font-size:16px}.has-warning .forecast-warning{width:76px;height:76px;flex-basis:76px}.wind-summary{gap:5px}.wind-reading{gap:6px}.wind-cluster{gap:4px}.weekgrid{grid-template-columns:1fr}.time-line{gap:10px}#date{font-size:16px}}

/* Keep a same-size warning beside two-digit wind values on narrow screens. */
@media(max-width:1050px){.has-warning .wind-summary .speed{font-size:80px}.has-warning .wind-summary .gust{font-size:24px}.has-warning .unit{font-size:16px}.has-warning .forecast-warning{width:80px;height:80px;flex-basis:80px}.metric-label{padding-right:38px}}
@media(max-width:360px){.has-warning .wind-summary .speed{font-size:72px}.has-warning .wind-summary .gust{font-size:21px}.has-warning .unit{font-size:15px}.has-warning .forecast-warning{width:72px;height:72px;flex-basis:72px}}
