@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@500;600;700;800;900&family=DM+Sans:wght@400;500;600;700&display=swap');
:root{--bg:#081921;--panel:#0d2731;--line:#274650;--muted:#98b0b5;--text:#edf4ef;--lime:#e8de8b;--green:#73d9aa}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font-family:'DM Sans',sans-serif}button{font:inherit;cursor:pointer}.hidden{display:none!important}.topbar{height:68px;position:relative;z-index:1000;display:flex;align-items:center;justify-content:space-between;padding:0 27px;background:#06141b;border-bottom:1px solid #29414a}.brand{display:flex;align-items:center;gap:11px}.brand-icon{font-size:40px;color:#c8d5af;line-height:1}.brand b{font-family:'Barlow Condensed';font-size:27px;letter-spacing:1px}.accent{color:#ddd38a}.brand small{display:block;font-size:9px;letter-spacing:2.2px;color:#89a7ae;margin-top:-1px}.header-right{display:flex;align-items:center;gap:16px}.status{font-size:10px;letter-spacing:1px;color:#a2b9bb;display:flex;align-items:center;gap:8px}.status i{width:7px;height:7px;border-radius:50%;background:#82d1a6;box-shadow:0 0 10px #82d1a680}.icon-btn{background:transparent;border:1px solid #38545a;color:white;border-radius:7px;padding:5px 12px;font-size:24px}.shell{display:grid;grid-template-columns:355px minmax(0,1fr)}.sidebar{height:calc(100vh - 68px);overflow:auto;position:sticky;top:0;padding:28px 23px 24px;background:#0b222a;border-right:1px solid #304852;scrollbar-width:thin}.eyebrow{font-size:10px;letter-spacing:1.7px;color:#cfc993;font-weight:800}.sidebar h1{font-family:'Barlow Condensed';font-size:65px;line-height:.9;letter-spacing:.5px;margin:17px 0 15px;text-transform:uppercase}.sidebar h1 em{font-style:normal;color:#d5ce91}.subtext{color:#adc0c2;font-size:12px;line-height:1.7;max-width:280px}.stat-strip{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;border-block:1px solid var(--line);padding:17px 0;margin-top:20px}.stat-strip small,.rank-title small{display:block;color:#8ba4a9;font-size:9px;letter-spacing:1px}.stat-strip strong{font-family:'Barlow Condensed';font-size:24px;display:block;margin-top:4px;text-transform:uppercase}.rank-title{display:flex;align-items:end;justify-content:space-between;margin:24px 0 13px}.rank-title span{font-family:'Barlow Condensed';font-weight:800;letter-spacing:1px;font-size:21px}.station-list{display:flex;flex-direction:column;gap:5px}.station-item{border:1px solid #28454d;background:#132e37;color:#ebf5f4;border-radius:8px;padding:10px 12px;display:flex;align-items:center;text-align:left;justify-content:space-between;transition:.2s}.station-item:hover,.station-item.active{border-color:#d4d09b;background:#233b3d}.station-item .town{font-weight:700;font-size:13px}.station-item .state{font-size:10px;color:#95afb4;margin-left:7px}.station-item small{display:block;font-size:10px;color:#98b1b6;margin-top:3px}.score-pill{min-width:42px;text-align:center;padding:7px 5px;border-radius:7px;background:#28474c;color:#c2d1d4;font-family:'Barlow Condensed';font-size:20px;font-weight:800}.score-pill.great{background:#1b5945;color:#8af0bb}.score-pill.ok{background:#55502c;color:#f5dd8d}.score-pill.no{background:#4b3b3b;color:#f0b1a6}.side-note{border-top:1px solid var(--line);padding-top:17px;margin-top:23px;color:#9eb4b7;font-size:11px;line-height:1.7}footer{color:#7d9a9d;margin:15px 0;font-size:9px;line-height:1.6}.story{height:2700px;position:relative}.sticky-map{position:sticky;top:0;height:100vh;overflow:hidden;background:#153a48}#map{position:absolute;inset:0;z-index:1;background:#2c6572;filter:saturate(.82) contrast(1.05)}.leaflet-container{background:#2d6b7b}.map-scrim{pointer-events:none;position:absolute;inset:0;z-index:400;background:linear-gradient(90deg,rgba(3,21,30,.18),transparent 45%),linear-gradient(to bottom,rgba(3,22,29,.80),transparent 31%,transparent 64%,rgba(3,22,29,.53))}.map-head{position:absolute;top:22px;left:24px;z-index:490;text-shadow:0 1px 12px #10232b}.live-pill{display:inline-block;border:1px solid #b9ccae7a;background:#09232aaa;font-weight:700;font-size:10px;letter-spacing:1.5px;border-radius:4px;padding:8px 10px;color:#d5e5b7}.map-headline{font-family:'Barlow Condensed';font-size:39px;font-weight:900;margin-top:9px;letter-spacing:1px}.map-headline span{color:#e0d58f;margin:0 8px}.map-sub{font-size:12px;color:#cadddd}.map-legend{position:absolute;z-index:490;left:20px;bottom:20px;background:#0c242add;padding:12px;border:1px solid #53777b;border-radius:8px;display:flex;flex-wrap:wrap;gap:15px;font-size:10px}.dot{display:inline-block;width:8px;height:8px;margin-right:5px;border-radius:50%;background:#abbaba}.dot.great{background:#6de2a4}.dot.ok{background:#ead179}.dot.no{background:#dca8a0}.north-btn{position:absolute;z-index:490;right:17px;bottom:18px;background:#0c2931e9;color:white;border:1px solid #658080;border-radius:7px;padding:12px;font-size:10px;letter-spacing:1px;font-weight:800}.scroll-space{height:1800px;pointer-events:none}.scroll-cue{position:absolute;top:700px;left:50%;z-index:450;background:#0d232ad9;padding:9px 14px;border-radius:7px;font-size:10px;letter-spacing:2px;animation:blink 4s infinite}.fish-layer{position:absolute;z-index:405;pointer-events:none;right:22%;top:30%;color:#e7f6e2b3;text-shadow:0 0 12px #154151;font-size:24px;display:none}.fish-layer span{display:block;margin:20px;animation:swim 5s infinite alternate}.fish-layer span:nth-child(2){animation-delay:2s;margin-left:38px}.fish-layer span:nth-child(3){animation-delay:1s}@keyframes swim{from{transform:translate(0,-4px)}to{transform:translate(-12px,23px)}}@keyframes blink{50%{opacity:.35}}.map-pin{min-width:118px;background:#0d2b34ed;border:1px solid #8ca7a8;border-radius:7px;padding:5px 8px;color:white;box-shadow:0 4px 15px #0008;display:flex;align-items:center;gap:6px;font:700 11px 'DM Sans'}.map-pin b{font:800 17px 'Barlow Condensed';color:#cfe5cd}.map-pin.great{border-color:#6de2a4}.map-pin.ok{border-color:#ead179}.map-pin.no{border-color:#dca8a0}.map-pin.selected{outline:2px solid #e1de9e}.leaflet-div-icon{background:none;border:none}.station-card{position:fixed;z-index:1200;right:23px;top:100px;width:360px;max-height:calc(100vh - 118px);overflow:auto;border:1px solid #6c8a87;border-radius:14px;background:#0a232ced;box-shadow:0 18px 70px #000b;padding:19px;backdrop-filter:blur(15px)}.card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.card-top h2{font:800 29px 'Barlow Condensed';margin:4px 0 12px;text-transform:uppercase}.card-score{text-align:center}.card-score strong{font:800 35px 'Barlow Condensed';color:#a0e6bb;display:block}.card-score small{font-size:8px;letter-spacing:1px;color:#a5b8bc}.card-top button{border:0;background:#28434a;color:white;font-size:24px;border-radius:6px;width:32px;height:32px}.metrics{display:grid;grid-template-columns:1fr 1fr;gap:8px}.metrics>div{background:#19333c;border:1px solid #2f5058;border-radius:8px;padding:12px}.metrics small,.tide-row small{display:block;font-size:9px;letter-spacing:1px;color:#a7bcbd}.metrics strong{display:block;font:700 23px 'Barlow Condensed';margin:5px 0}.metrics span,.tide-row span{display:block;font-size:10px;color:#9cbbbd}.tide-row{background:#152e38;border:1px solid #34535a;border-radius:9px;margin-top:9px;padding:12px;display:flex;flex-direction:column;gap:12px}.tide-container{display:flex;align-items:center;gap:13px}.tide-gauge{height:52px;width:22px;border:1px solid #7b9b9f;border-radius:4px;overflow:hidden;display:flex;align-items:end;flex-shrink:0}.tide-gauge>div{background:#68a9bd;width:100%;height:0;transition:height 1s}.tide-container strong,.window strong{display:block;font:700 19px 'Barlow Condensed';margin:4px 0}.window{border-top:1px solid #34535a;padding-top:9px}.data-note{font-size:10px;line-height:1.5;color:#aec3c4;margin:12px 0 0}.paygate{position:fixed;inset:0;z-index:3000;display:grid;place-items:center;background:#071720f5;padding:20px}.paybox{background:#112c34;border:1px solid #47636b;border-radius:18px;max-width:420px;padding:35px;text-align:center}.paylogo{font-size:65px;color:#e3d995}.paybox .seo-modal-heading{font:900 43px 'Barlow Condensed';margin:10px 0}.paybox p{font-size:14px;color:#b3c6c7;line-height:1.7}.price{font:800 52px 'Barlow Condensed';margin:25px 0;color:#e9dda2}.price span{font:500 13px 'DM Sans';color:#bdcccb;display:block}.paybox button{background:#ddd18b;border:0;color:#09232b;padding:15px 22px;border-radius:7px;font-weight:900;width:100%}.paybox small{color:#99afaf;display:block;line-height:1.6;margin-top:17px}.pay-message{margin-top:12px;color:#e8bbad;font-size:12px}
@media(max-width:850px){.topbar{padding:0 12px;height:62px}.brand b{font-size:23px}.brand small{font-size:8px;letter-spacing:1px}.header-right .status{display:none}.shell{display:block}.sidebar{position:relative;height:auto;overflow:visible;padding:19px 17px 12px}.sidebar h1{font-size:50px}.sidebar h1 br{display:none}.sidebar .subtext{margin:10px 0}.stat-strip{margin:10px 0}.station-list{display:grid;grid-template-columns:1fr 1fr;max-height:220px;overflow:auto}.station-item{padding:8px}.station-item .town{font-size:11px}.rank-title{margin:10px 0}.side-note,footer{display:none}.story{height:2250px}.sticky-map{height:calc(100dvh - 0px)}.map-head{top:17px;left:12px}.map-headline{font-size:27px}.map-sub{font-size:10px}.map-legend{left:10px;bottom:10px;right:10px;font-size:9px;padding:8px}.north-btn{right:10px;bottom:59px;padding:9px;font-size:9px}.station-card{right:0;left:0;top:auto;bottom:0;width:100%;max-height:71dvh;border-radius:18px 18px 0 0;padding:14px 17px 19px}.card-top h2{font-size:25px}.metrics strong{font-size:21px}.tide-row{margin-top:6px}.fish-layer{right:14%}}

/* Real coastline legibility improvements */
#map{filter:none} .map-scrim{background:linear-gradient(to bottom,rgba(3,22,29,.70),transparent 23%,transparent 77%,rgba(3,22,29,.28))}
.map-pin{min-width:0;max-width:128px;font-size:10px;padding:4px 6px;background:#07212be8;border-radius:18px}.map-pin b{font-size:15px}
@media(max-width:850px){.map-pin{font-size:9px;padding:3px 5px;max-width:100px}.map-pin b{font-size:13px}.pin-icon{margin-left:-15px!important}.map-headline{font-size:24px}.map-legend{bottom:8px}}

/* Clean-map version: fixed map, scrollable town list, no page-driven map movement */
html,body{height:100%;overflow:hidden} .shell{height:calc(100dvh - 68px);grid-template-columns:300px minmax(0,1fr)}
.sidebar{height:100%;position:relative;top:auto;padding:18px 17px 15px;overflow-y:auto}
.sidebar h1{font-size:42px;line-height:.95;margin:12px 0 8px}.subtext{font-size:11px;line-height:1.4}
.stat-strip{margin-top:12px;padding:11px 0}.stat-strip strong{font-size:20px}
.rank-title{margin:14px 0 9px}.station-item{padding:7px 10px}.station-list{gap:4px}.station-item .town{font-size:12px}
.story{height:100%;min-height:0}.sticky-map{position:relative;height:100%;top:auto;overflow:hidden}
#map{background:#c7dbe1;filter:none}.leaflet-container{background:#c7dbe1}
.map-scrim{background:linear-gradient(to bottom,rgba(2,24,35,.55),transparent 13%);pointer-events:none}
.map-head{top:13px;left:14px;pointer-events:none}.live-pill{padding:6px 8px;font-size:10px}.map-sub{font-size:11px;margin-top:5px}
.map-headline{display:none}.fish-layer,.scroll-space,.scroll-cue{display:none!important}
.map-legend{left:12px;bottom:12px;padding:8px;gap:9px;background:#112a35db}
.coast-controls{position:absolute;right:12px;top:14px;z-index:490;display:flex;gap:7px}
.coast-controls button{background:#0b2834ed;border:1px solid #78939e;border-radius:8px;color:white;padding:10px 14px;font-weight:800;font-size:11px}
.map-pin{min-width:0;max-width:120px;border-radius:20px;padding:4px 8px;font-size:10px;white-space:nowrap}
.map-pin b{font-size:14px}.station-card{right:15px;top:78px;width:340px;max-height:calc(100dvh - 100px)}
@media(max-width:850px){html,body{overflow:auto}.topbar{height:60px}.shell{height:auto;display:flex;flex-direction:column}.sidebar{height:auto;overflow:visible;padding:14px 13px 10px}.sidebar .eyebrow,.sidebar .subtext{display:none}.sidebar h1{font-size:29px;margin:0 0 8px}.stat-strip{margin:5px 0;padding:6px 0}.stat-strip strong{font-size:17px}.rank-title{margin:9px 0 7px}.station-list{display:flex;flex-direction:row;overflow-x:auto;overflow-y:hidden;max-height:none;gap:6px;padding-bottom:7px}.station-item{min-width:137px;flex-shrink:0}.station-item .town{font-size:11px}.station-item .state,.station-item small{font-size:9px}.story{height:calc(100dvh - 245px);min-height:350px}.sticky-map{height:100%}.map-head{top:9px;left:10px}.live-pill{font-size:9px}.map-sub{font-size:9px}.coast-controls{top:56px;right:10px}.coast-controls button{padding:9px;font-size:10px}.map-legend{bottom:8px;left:8px;right:auto;max-width:245px;gap:5px}.station-card{position:fixed;bottom:0;top:auto;width:100%;max-height:68dvh;right:0}.pin-icon{margin-left:0!important}}

/* Tile-free geographic vector map: no CDN tiles, API keys or individual images. */
#map{position:absolute;inset:0;overflow:hidden;background:#134457!important}#coastSVG{width:100%;height:100%;display:block;transition:transform .55s ease;transform-origin:var(--focus-x,50%) var(--focus-y,50%)}#map.focused #coastSVG{transform:scale(1.42)}.geo-pin.selected circle{stroke:#fff;stroke-width:3}.geo-pin:hover rect{fill:#1a5a60}.coast-controls{z-index:800}.map-scrim{pointer-events:none}.map-headline{display:none}.map-legend{max-width:280px}.story,.sticky-map{overflow:hidden}

/* Oceanfront identity and fishermen's geographic ordering */
#map{background:#103f55!important}
#coastSVG{filter:drop-shadow(0 0 7px rgba(48,135,144,.12))}
.station-list{scrollbar-color:#56898d #0a252f}
.rank-title span{color:#d6e5df;letter-spacing:1.3px}
.station-item{border-left:3px solid #357b8b}
.station-item.active{border-left-color:#f0d78c}
.map-head .live-pill{background:#072735e8;border-color:#75abbb;color:#d1ebed}
.map-legend{background:#082938e6;border-color:#5d8998}
@media(max-width:850px){.rank-title small{font-size:10px}}

/* Cohesive coastwide at-a-glance overlays */
.moon-widget{display:flex;align-items:center;gap:9px;padding:6px 11px;background:#0c3040;border:1px solid #447986;border-radius:12px;min-width:189px}
.moon-widget svg{flex:none;filter:drop-shadow(0 0 8px #d4dfa01f)}
.moon-widget span{display:flex;flex-direction:column;line-height:1.35}.moon-widget strong{font-size:11px;color:#f2e8ca}.moon-widget small{font-size:10px;color:#9cbdc7}
.wind-key{display:inline-block;background:#0a2a36e6;border:1px solid #347c89;border-radius:8px;padding:5px 8px;margin-top:6px;font-size:10px;color:#b9e5e9}
.wind-symbol{pointer-events:none;opacity:.92}.wind-flag{transform-origin:center;transform-box:fill-box;filter:drop-shadow(0 0 3px rgba(255,96,96,.3))}.flag-cloth{animation:flag-wave 1.9s ease-in-out infinite;transform-origin:-9px -7px;transform-box:fill-box}.wind-calm{opacity:.92}
@keyframes flag-wave{0%{transform:skewY(0deg) translateY(0)}25%{transform:skewY(-5deg) translateY(-.4px)}50%{transform:skewY(3deg) translateY(.5px)}75%{transform:skewY(-3deg) translateY(-.3px)}100%{transform:skewY(0deg) translateY(0)}}
@media(max-width:850px){.moon-widget{min-width:0;padding:4px 6px;gap:4px}.moon-widget svg{width:36px;height:36px}.moon-widget strong{max-width:92px;font-size:9px}.moon-widget small{font-size:8px}.wind-key{font-size:9px}.wind-symbol{opacity:.85}}
@media(prefers-reduced-motion:reduce){.flag-cloth{animation:none}}

/* Migration forecast: a standalone, responsive research module */
.forecast-section{position:relative;z-index:2;background:#0b2430;color:#eff7f4;padding:26px clamp(16px,3vw,42px) 35px;border-top:1px solid #477a80;font-family:system-ui,sans-serif}.forecast-section *{box-sizing:border-box}.forecast-intro{display:flex;justify-content:space-between;gap:14px;align-items:center}.forecast-intro h2{font-size:clamp(23px,3vw,36px);margin:4px 0}.forecast-intro p{max-width:620px;font-size:13px;color:#a3c1c8;line-height:1.55;margin:0}.forecast-anchor{min-width:125px;text-align:center;padding:12px;background:#163947;border:1px solid #457985;border-radius:12px}.forecast-anchor strong{color:#7cdec0;font-size:27px;display:block}.forecast-anchor small{font-size:9px;letter-spacing:.06em;color:#b9d3d6}.forecast-top{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:20px}.forecast-temp{background:#123542;border:1px solid #315a67;border-radius:10px;padding:12px}.forecast-temp label,.forecast-controls label{font-size:10px;letter-spacing:.08em;color:#b3d7dd;font-weight:700;display:block}.forecast-temp label span{opacity:.6}.forecast-temp input{display:block;width:100%;margin:10px 0 6px;padding:9px;background:#092631;border:1px solid #56828b;color:#fff;border-radius:7px;font-size:22px;font-weight:700}.forecast-temp small,.forecast-controls small{color:#91acb5;font-size:10px;line-height:1.4;display:block}.forecast-note{font-size:11px;color:#a8c5cb;line-height:1.5}.forecast-bars{margin:18px 0;padding:14px;background:#102d3a;border-radius:12px;display:grid;gap:12px}.fbar{display:grid;grid-template-columns:minmax(90px,155px) 1fr 55px;gap:10px;align-items:center;font-size:12px}.ftrack{height:12px;background:#274a58;border-radius:9px;overflow:hidden}.ffill{height:100%;background:linear-gradient(90deg,#55b0c7,#77d8b2);border-radius:9px;min-width:0}.fbar strong{text-align:right}.forecast-controls{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:15px 0;border-top:1px solid #355765}.forecast-controls input,.forecast-controls select{margin:8px 0;width:100%;color:#fff;color-scheme:dark;background:#153947;border:1px solid #557c88;border-radius:7px;padding:10px;font-size:13px}.forecast-arrivals{display:grid;grid-template-columns:1fr 1fr;gap:12px}.forecast-arrival{background:#173a47;border:1px solid #3b6270;border-radius:11px;padding:14px;display:grid;gap:5px}.forecast-arrival span{color:#9dc0ca;font-size:10px;letter-spacing:.08em}.forecast-arrival strong{font-size:clamp(15px,2vw,23px)}.forecast-arrival small{font-size:10px;color:#aec4ca}.forecast-alert{margin-top:12px;border-left:3px solid #e4c57b;background:#223943;padding:12px;font-size:12px;line-height:1.5}.forecast-disclaimer{margin-top:14px;color:#8baeb7;font-size:10px;line-height:1.6}@media(max-width:640px){.forecast-section{padding:20px 14px 32px}.forecast-intro{align-items:flex-start}.forecast-anchor{min-width:98px}.forecast-anchor strong{font-size:20px}.forecast-top{grid-template-columns:1fr;gap:8px}.forecast-temp{display:grid;grid-template-columns:1fr 100px;align-items:center;gap:5px 8px}.forecast-temp label{grid-column:1}.forecast-temp input{grid-column:2;grid-row:1/3;margin:0;font-size:18px}.forecast-temp small{grid-column:1}.forecast-controls{grid-template-columns:1fr}.forecast-arrivals{grid-template-columns:1fr}.fbar{grid-template-columns:90px 1fr 48px;font-size:11px}}

.temperature-jump{display:flex;flex-direction:column;gap:4px;background:#174354;border:1px solid #67b5b4;border-radius:10px;padding:12px;margin:12px 0;color:#dbfaf4;text-decoration:none;font-size:12px;font-weight:750}.temperature-jump span{font-weight:500;color:#8ed6d3;font-size:11px}.auto-feed-status{margin-top:12px;padding:10px 12px;background:#184553;border-radius:7px;color:#c1e4e5;font-size:12px}.forecast-temp input[readonly],#triggerDate[readonly]{opacity:1;cursor:default}.forecast-section{scroll-margin-top:12px}

/* 2026-10-09: town conditions | ocean map | migration temperatures */
@media (min-width: 851px) {
 .shell {display:grid!important;grid-template-columns: minmax(245px,300px) minmax(340px,1fr) minmax(315px,365px)!important;gap:0!important;align-items:stretch;height:calc(100dvh - 68px);min-height:540px;overflow:hidden}
 .shell>.sidebar {grid-column:1;grid-row:1;height:100%!important;min-width:0;overflow-y:auto;position:relative!important;top:auto!important;padding:17px 13px!important;border-right:1px solid #3e6170}
 .shell>.story {grid-column:2;grid-row:1;height:100%!important;min-height:0!important;min-width:0;margin:0!important;border:0}
 .shell>.story>.sticky-map {height:100%!important;width:100%;overflow:hidden;position:relative!important;top:0!important}
 .shell>.story #map {inset:0!important;width:100%!important;height:100%!important}
 .shell>.story #coastSVG {width:100%;height:100%;object-fit:cover}
 .shell>.forecast-section {grid-column:3;grid-row:1;min-height:0;min-width:0;height:100%;overflow-y:auto;padding:16px 15px 26px;border-top:none;border-left:1px solid #4b6d77;scroll-margin-top:0}
 .shell>.forecast-section .forecast-intro{align-items:start}
 .shell>.forecast-section .forecast-intro p{font-size:11px}
 .shell>.forecast-section .forecast-anchor{min-width:98px;padding:8px}
 .shell>.forecast-section .forecast-anchor strong{font-size:21px}
 .shell>.forecast-section .forecast-top{grid-template-columns:1fr;gap:7px;margin-top:11px}
 .shell>.forecast-section .forecast-temp{padding:9px;display:grid;grid-template-columns:1fr 86px;align-items:center;gap:3px 8px}
 .shell>.forecast-section .forecast-temp label{grid-column:1;grid-row:1}
 .shell>.forecast-section .forecast-temp input{grid-column:2;grid-row:1/3;margin:0;font-size:18px;padding:7px}
 .shell>.forecast-section .forecast-temp small{grid-column:1;grid-row:2}
 .shell>.forecast-section .forecast-controls,.shell>.forecast-section .forecast-arrivals{grid-template-columns:1fr;gap:8px}
 .shell>.forecast-section .forecast-arrival{padding:10px}
 .shell>.forecast-section .forecast-arrival strong{font-size:19px}
 .shell>.forecast-section .fbar{grid-template-columns:80px 1fr 45px;gap:7px;font-size:10px}
 .shell>.forecast-section .forecast-bars{padding:10px}
 .shell>.sidebar .temperature-jump{display:none!important}
 .shell>.sidebar h1{font-size:38px}
 .shell>.sidebar .station-list{display:flex;flex-direction:column;max-height:none;overflow:visible}
 .shell>.sidebar .rank-title{margin:12px 0 8px}
 .station-card {right:min(375px,28vw)!important;max-width:360px}
}
@media (min-width:851px) and (max-width:1150px){
 .shell{grid-template-columns:245px minmax(275px,1fr) 305px!important}
 .shell>.forecast-section{padding:12px}
 .shell>.sidebar .station-item{padding:8px}
 .map-head{left:10px}
 .map-legend{left:8px;right:8px;gap:6px}
 .station-card{right:309px!important;width:300px}
}
@media (max-width:850px){
 .shell{display:flex!important;flex-direction:column!important;height:auto!important;overflow:visible!important}
 .shell>.sidebar{order:1!important;width:100%}
 .shell>.story{order:2!important;width:100%;min-height:400px}
 .shell>.forecast-section{order:3!important;width:100%;margin:0!important;padding:19px 14px 30px!important;border-top:1px solid #416c7a!important;border-left:none!important}
 .shell>.forecast-section .forecast-top{grid-template-columns:1fr}
 .temperature-jump{display:none!important}
}

/* Navigating a town must never cover the North/South controls. */
.shell>.sidebar .station-card{position:relative!important;top:auto!important;right:auto!important;bottom:auto!important;left:auto!important;width:100%!important;max-width:none!important;max-height:none!important;overflow:visible!important;z-index:1!important;padding:12px!important;margin:12px 0!important;box-shadow:none!important;border-radius:10px!important;backdrop-filter:none!important}
.shell>.sidebar .station-card .card-top h2{font-size:23px!important}
.shell>.sidebar .station-card .metrics>div{padding:8px!important}
.shell>.sidebar .station-card .metrics strong{font-size:18px!important}
.coast-controls{position:absolute!important;right:12px!important;top:70px!important;bottom:auto!important;z-index:1200!important;display:flex!important;gap:8px}
.coast-controls button{min-height:44px;white-space:nowrap}
.map-head{max-width:55%!important;pointer-events:none}
@media(max-width:850px){.shell>.sidebar .station-card{margin:8px 0!important;padding:10px!important}.coast-controls{top:65px!important;right:8px!important}.coast-controls button{padding:10px!important}.map-head{max-width:58%!important}}

/* Mobile-first navigation: eliminate redundant north/south controls. */
.coast-controls{display:none!important}
/* Moon graphic and header should remain fully visible on narrow screens. */
.topbar{overflow:visible!important}
.moon-widget{min-height:54px;flex-shrink:0;align-items:center!important}
.moon-widget strong{display:block!important;font-size:11px!important;line-height:1.3!important;white-space:nowrap}
.moon-widget svg{flex:none}
.fixed-pace{display:block;font-size:23px;font-weight:800;color:#eaf9fa;margin-top:7px}
@media(max-width:600px){
 .topbar{height:auto!important;min-height:70px!important;align-items:center!important;padding-top:9px!important;padding-bottom:9px!important}
 .header-right{min-width:0!important}
 .moon-widget{min-width:0!important;gap:5px!important}
 .moon-widget svg{width:42px!important;height:42px!important}
 .moon-widget #nextFull{display:none!important}
 .moon-widget strong{font-size:10px!important}
}

/* Hide legacy refresh header control and prevent mobile header overflow. */
#refreshBtn{display:none!important}
.topbar,.header-right{min-width:0}
@media(max-width:600px){.brand{min-width:0}.brand b{font-size:clamp(16px,5vw,23px)}.topbar{width:100%;max-width:100vw}.header-right{gap:4px!important}.moon-widget{max-width:155px}}
.install-app-btn{margin-top:12px!important;background:#254a54!important;color:#f7f7f2!important;border:1px solid #688c92!important}
.install-app-btn[hidden],.install-help[hidden]{display:none!important}
.install-help{margin:9px 0 0!important;font-size:11px!important;color:#b5c8cc!important;line-height:1.5!important}

/* Compact and legible score labels, mobile-first. */
.score-help{display:flex;flex-wrap:wrap;align-items:center;gap:5px 9px;margin:0 0 11px;padding:9px 10px;border:1px solid #31545d;border-radius:9px;background:#112d36;font-size:10px;line-height:1.4;color:#c8dddf}
.score-help strong{color:#e3eacb;font-size:11px;width:100%}
.score-help>span{flex:1;min-width:155px}
.score-help button{border:1px solid #60858a;background:#183c45;color:#e9f2e5;border-radius:6px;font-size:10px;padding:5px 7px}
.score-help #scoreHelpDetail{width:100%;padding-top:7px;border-top:1px solid #35545b}
.score-help #scoreHelpDetail[hidden]{display:none}
.score-pill{min-width:70px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:6px 5px;line-height:1.1}
.score-pill .score-value{font-size:18px;white-space:nowrap}
.score-pill .score-word{font:700 8px 'DM Sans',sans-serif;letter-spacing:.4px;white-space:nowrap}
.card-score strong{font-size:29px!important}
@media(max-width:850px){.score-help{margin-bottom:7px;padding:7px}.score-pill{min-width:63px}.score-pill .score-value{font-size:16px}.score-pill .score-word{font-size:7px}}

.restore-purchase{margin-top:16px;padding:12px;border:1px solid #5d8b90;border-radius:10px}.restore-purchase p{font-size:13px}.restore-purchase input{width:100%;padding:10px;margin-bottom:8px;background:#fff;color:#111;border-radius:6px}.restore-purchase button,#copyRecoveryBtn{padding:11px;border:1px solid #559aaf;border-radius:6px;background:#09364a;color:#fff;font-weight:bold;cursor:pointer}#copyRecoveryBtn{font-size:11px}

.restore-purchase input{width:100%;padding:11px 12px;margin:5px 0;background:#071d25;color:#fff;border:1px solid #557880;border-radius:6px}.restore-purchase button{margin-top:7px;padding:11px 10px}.restore-purchase{max-height:38vh;overflow:auto;margin-top:12px;border-top:1px solid #42606b;padding-top:12px}


/* Animated striped-bass schools */
.fish-layer{display:block!important;position:absolute;inset:0;z-index:405;pointer-events:none;overflow:hidden}
.fish-school{position:absolute;transform:translate(-50%,-50%);opacity:var(--school-opacity,.78);filter:drop-shadow(0 2px 8px rgba(5,24,31,.48))}
.fish-school[data-level="1"]{opacity:.42}
.fish-school[data-level="2"]{opacity:.56}
.fish-school[data-level="3"]{opacity:.7}
.fish-school[data-level="4"]{opacity:.82}
.fish-school .striper-fish{display:block;width:calc(18px * var(--fish-scale,1));height:auto;overflow:visible;animation:swim-run var(--duration,7.8s) ease-in-out infinite;transform-origin:center center}
.fish-school .striper-fish + .striper-fish{margin-top:3px}
.fish-school .striper-fish:nth-child(2){margin-left:10px;animation-delay:-1.7s}
.fish-school .striper-fish:nth-child(3){margin-left:3px;animation-delay:-3.1s}
.fish-school .striper-fish:nth-child(4){margin-left:13px;animation-delay:-4.2s}
.striper-fish .fish-body{fill:#d9ebe8;fill-opacity:.95}
.striper-fish .fish-back{fill:#b8d2cf;fill-opacity:.85}
.striper-fish .fish-stripe{stroke:#7d9f9d;stroke-width:1.8;stroke-linecap:round;opacity:.82}
.striper-fish .fish-eye{fill:#16333d}
.striper-fish .fish-fin{fill:#bdd8d4;fill-opacity:.85}
@keyframes swim-run{0%{transform:translate(0,0) rotate(7deg)}45%{transform:translate(-10px,9px) rotate(10deg)}100%{transform:translate(-19px,21px) rotate(13deg)}}
@media(max-width:850px){
  .fish-school .striper-fish{width:calc(14px * var(--fish-scale,1))}
  .fish-school[data-level="1"]{opacity:.34}
  .fish-school[data-level="4"]{opacity:.72}
}

/* Fish visibility correction: clear silhouettes above ocean map, away from labels. */
.fish-layer{display:block!important;visibility:visible!important;opacity:1!important;z-index:470!important;isolation:isolate}
.fish-school{z-index:1;filter:drop-shadow(0 0 5px #061d2e) drop-shadow(0 1px 2px #06202b);opacity:1!important}
.fish-school .striper-fish{width:calc(37px * var(--fish-scale,1));min-height:15px}
.striper-fish .fish-body{fill:#effbf0;fill-opacity:1}
.striper-fish .fish-back{fill:#cadbd4;fill-opacity:1}
.striper-fish .fish-stripe{stroke:#5d8285;opacity:1}
@media(max-width:850px){.fish-school .striper-fish{width:calc(27px * var(--fish-scale,1))}}
@media(prefers-reduced-motion:reduce){.fish-school .striper-fish{animation:none!important}}


/* Stationary migration fish markers tied to the 50–55°F band */
.fish-layer{display:block!important;position:absolute;inset:0;z-index:470!important;pointer-events:none;overflow:hidden;isolation:isolate}
.fish-marker{position:absolute;transform:translate(-50%,-50%);filter:drop-shadow(0 1px 4px rgba(4,23,31,.48));opacity:.92}
.fish-marker .striper-fish{display:block;width:34px;height:auto;overflow:visible;transform-origin:center center;animation:fish-bob 5.8s ease-in-out infinite}
.fish-marker:nth-child(2) .striper-fish{animation-delay:-1.1s}
.fish-marker:nth-child(3) .striper-fish{animation-delay:-2.8s}
.fish-marker:nth-child(4) .striper-fish{animation-delay:-1.9s}
.fish-marker:nth-child(5) .striper-fish{animation-delay:-3.7s}
.fish-marker .fish-body{fill:#eef7f3;fill-opacity:.98}
.fish-marker .fish-back{fill:#cad9d5;fill-opacity:.98}
.fish-marker .fish-stripe{stroke:#58797d;stroke-width:1.8;stroke-linecap:round;opacity:.96}
.fish-marker .fish-eye{fill:#17343d}
.fish-marker .fish-fin{fill:#c2d7d3;fill-opacity:.95}
@keyframes fish-bob{0%{transform:translateY(0) rotate(6deg)}50%{transform:translateY(-3px) rotate(7.5deg)}100%{transform:translateY(0) rotate(6deg)}}
@media(max-width:850px){.fish-marker .striper-fish{width:27px}}
@media(prefers-reduced-motion:reduce){.fish-marker .striper-fish{animation:none!important}}


/* Free preview / paid unlock UI */
.preview-bar{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin:12px 0 8px;padding:10px 11px;border:1px solid #52757d;border-radius:10px;background:#15333bdc}
.preview-bar strong{display:block;font:800 11px 'DM Sans',sans-serif;letter-spacing:.08em;color:#f0dd8e}
.preview-bar span{display:block;margin-top:4px;font-size:11px;line-height:1.45;color:#c2d3d4}
.preview-bar button,.premium-note button{flex-shrink:0;background:#e1d188;color:#09242b;border:0;border-radius:8px;padding:10px 12px;font-weight:900;font-size:10px;letter-spacing:.04em}
.premium-note{margin-top:8px;border:1px solid #3d5d64;background:#102a33;border-radius:10px;padding:11px 12px}
.premium-note strong{display:block;font-size:10px;letter-spacing:.09em;color:#f0dd8e}
.premium-note span{display:block;margin:4px 0 10px;font-size:11px;line-height:1.45;color:#b8cdcf}
.station-item.preview-locked .score-pill{background:#2f4146;color:#e7d691}
.station-item.preview-locked .score-value{font-size:14px}
.station-item.preview-locked .score-word{font-size:8px}
.metric-locked strong,.metric-locked span,.metric-locked small{color:#8fa6ab!important}
.metric-locked strong{letter-spacing:.03em}
.locked-panel{opacity:.7}
.paygate{backdrop-filter:blur(4px)}
.paybox{position:relative}
.gate-close{position:absolute;top:10px;right:10px;width:34px;height:34px;border-radius:8px;border:1px solid #587079;background:#17343d;color:#fff;font-size:24px;line-height:1;padding:0}
@media(max-width:850px){
 .preview-bar{margin:8px 0;padding:9px;display:grid;grid-template-columns:1fr;gap:8px}
 .preview-bar button,.premium-note button{width:100%}
 .premium-note{padding:10px}
}

/* Payment popup: let customers reach restore-purchase controls on every screen. */
#gate.paygate{overflow-y:auto!important;overflow-x:hidden;overscroll-behavior:contain;align-items:safe center;justify-items:center;padding:16px!important;-webkit-overflow-scrolling:touch}
#gate .paybox{width:min(100%,440px);max-width:440px;max-height:calc(100dvh - 32px);overflow-y:auto!important;overflow-x:hidden;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:22px 22px 26px!important;margin:auto;scrollbar-width:thin}
#gate .paybox .paylogo{font-size:40px}
#gate .paybox .seo-modal-heading{font-size:clamp(28px,4vh,38px);margin:6px 0}
#gate .paybox .price{font-size:42px;margin:12px 0}
#gate .restore-purchase{max-height:none!important;overflow:visible!important}
#gate .paybox .gate-close{position:sticky;float:right;top:0;right:0;z-index:5;flex-shrink:0;background:#17343d!important;color:#fff!important;width:36px;height:36px;padding:0!important}
@media(max-height:580px){#gate .paybox{padding:14px!important}#gate .paybox .paylogo{font-size:30px}#gate .paybox .price{font-size:33px;margin:7px 0}}

/* Public contact: visible in both desktop sidebar and mobile preview. */
.support-contact{margin:12px 0;padding:12px 11px;border:1px solid #426873;border-radius:9px;background:#112b35;color:#c9dcdd;font-size:11px;line-height:1.6}
.support-contact a{color:#f1df9b;text-decoration:underline;text-underline-offset:2px;overflow-wrap:anywhere}
@media(max-width:850px){.support-contact{margin:8px 0 10px;padding:9px 10px;font-size:11px}}

.pay-title{font-weight:900;font-size:clamp(1.4rem,3vw,2rem);line-height:1.2;margin:0 0 14px}
.seo-intro{font-size:.89rem;line-height:1.55;margin:14px 0;color:#c6d9d9}.seo-intro a{color:#7fddd9;text-decoration:underline}

.seo-resource{margin:8px 0;font-size:11px}.seo-resource a{color:#9dcad0;text-decoration:underline}

/* Add app access is on the homepage, independent of the Stripe modal. */
.homepage-install{margin:12px 0 14px;max-width:350px}
.homepage-install .install-app-btn{display:block;width:100%;padding:11px 15px;border-radius:8px;font-weight:800;letter-spacing:.5px;min-height:42px}
.homepage-install .install-help{padding:7px 1px 0}
@media(max-width:850px){.homepage-install{margin:7px 0 10px;max-width:none}.homepage-install .install-app-btn{padding:9px 13px;min-height:40px}}

/* Small SEO guide links below the station list; does not affect live readings. */
.fishing-guides{margin:12px 0 10px;padding:13px 12px;border:1px solid #345762;border-radius:9px;background:#102a34}
.fishing-guides h2{font-family:'Barlow Condensed',sans-serif;font-size:20px;letter-spacing:.6px;text-transform:uppercase;margin:0 0 8px;color:#e7e0a7}
.fishing-guides a{display:flex;justify-content:space-between;gap:10px;color:#c2e4e6;text-decoration:none;font-size:12px;line-height:1.5;padding:8px 2px;border-top:1px solid #294a53}
.fishing-guides a:hover,.fishing-guides a:focus-visible{color:#fff0aa;text-decoration:underline}
.fishing-guides a span{color:#dfd594;flex-shrink:0}

/* Quiet bottom-of-sidebar resources: let the map stay the focus. */
.sidebar .fishing-guides{margin:14px 0 0!important;padding:12px 0 0!important;border:0!important;border-top:1px solid #345762!important;border-radius:0!important;background:transparent!important}
.sidebar .fishing-guides h2{font-family:'DM Sans',sans-serif!important;font-size:11px!important;letter-spacing:.8px!important;margin:0 0 5px!important;color:#9db9bb!important}
.sidebar .fishing-guides a{display:block!important;border:0!important;padding:4px 0!important;font-size:11px!important;color:#accad0!important}
.sidebar .fishing-guides a span{display:none!important}
.sidebar .support-contact{margin:6px 0 0!important;padding:8px 0 0!important;border:0!important;border-radius:0!important;background:transparent!important;font-size:10px!important;color:#8da7ad!important}
.sidebar .support-contact a{color:#c5d4d1!important}

/* Quiet footer BELOW the entire map and migration forecast, not in sidebar. */
.site-bottom-links{clear:both;position:relative;display:block;margin:0;padding:18px clamp(16px,3vw,42px) 24px;background:#091d25;border-top:1px solid #27414b;color:#91adb3;text-align:center;z-index:1}
.site-bottom-links .fishing-guides{display:block;margin:0 auto;padding:0;border:0;background:transparent;max-width:760px}
.site-bottom-links .fishing-guides h2{font:600 11px 'DM Sans',sans-serif;letter-spacing:.8px;color:#9db9bb;margin:0 0 8px}
.site-bottom-links .fishing-guides a{display:inline-block;border:0;padding:3px 9px;color:#b3cbd0;font-size:11px}
.site-bottom-links .fishing-guides a span{display:none}
.site-bottom-links .support-contact{margin:10px auto 0;padding:10px 0 0;max-width:760px;border:0;border-top:1px solid #27414b;border-radius:0;background:transparent;font-size:10px;color:#90a8af}
.site-bottom-links .support-contact a{color:#c6d7d9}
@media(max-width:600px){.site-bottom-links{padding:15px 12px 22px}.site-bottom-links .fishing-guides a{display:block;padding:4px 0}}

/* VIP access is tucked inside the existing payment modal. */
.vip-redeem{margin:13px 0;padding:9px 0;border-top:1px solid #416373;border-bottom:1px solid #416373}.vip-redeem>button{background:none;color:#acd3d9;border:0;text-decoration:underline;cursor:pointer;font:inherit;font-size:12px}.vip-redeem>div{display:flex;flex-direction:column;gap:8px;margin:10px 0}.vip-redeem input{width:100%;box-sizing:border-box;padding:10px;border-radius:5px;border:1px solid #547783;background:#102c3a;color:#fff}.vip-redeem>div button{padding:10px;border:0;border-radius:5px;font-weight:700;background:#d8bb7d;color:#152935;cursor:pointer}.vip-redeem [hidden]{display:none!important}

/* Lightweight town-card beach cams, below the original data and never on top of the map. */
.beachcam[hidden]{display:none!important}
.beachcam{padding:12px 14px;margin:12px 0 3px;border:1px solid rgba(132,194,208,.34);border-radius:12px;background:#072a36;color:#e4f8fb}
.beachcam-header{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px;font-size:12px;letter-spacing:.03em}
.beachcam-header span{font-size:11px;color:#a0c9d0}
#beachCamPlayer iframe{display:block;width:100%;aspect-ratio:16/9;height:auto;border:0;border-radius:7px;background:#051d25}
#beachCamPlayer p,#beachCamPlayer small{display:block;color:#b9d5da;font-size:12px;margin:8px 0;line-height:1.5}
#beachCamLink{display:inline-block;color:#a8e8ea;font-size:12px;font-weight:700;text-decoration:underline;margin-top:10px}
.beachcam-note{font-size:11px;line-height:1.4;color:#aecbd0;margin:9px 0 0}

/* Town navigation clarity: only list controls and hint, map stays unchanged */
.station-list .station-item{min-height:67px;padding:12px 13px;cursor:pointer;transition:border-color .15s ease,background .15s ease}
.station-list .station-item .town{font-size:15px;font-weight:800;line-height:1.25;letter-spacing:.12px}
.station-list .station-item.active{background:#1a4b54;border-left:5px solid #ffe09c;box-shadow:inset 0 0 0 1px rgba(255,224,156,.25)}
.station-list .station-item:focus-visible{outline:3px solid #f0d78c;outline-offset:2px}
.map-head .map-sub{font-size:15px;font-weight:800;letter-spacing:.7px;color:#fff0b0;text-shadow:0 1px 5px #052635}
@media(max-width:850px){.station-list .station-item{min-height:70px;padding:13px}.station-list .station-item .town{font-size:16px}.map-head .map-sub{font-size:13px;letter-spacing:.25px}}

/* Interactive coastal conditions map — additive UI, preserves existing coastline. */
.map-mode-control{display:flex;flex-wrap:wrap;gap:5px;margin-top:9px;pointer-events:auto;max-width:390px}
.map-mode-control button{cursor:pointer;border:1px solid #7194a0;background:#092a37e8;color:#d7eaed;border-radius:5px;padding:7px 9px;font-size:10px;font-weight:800}
.map-mode-control button[aria-pressed="true"]{background:#c6e4d8;color:#102f38;border-color:#ddfff1}
.run-progress{position:absolute;z-index:490;right:12px;bottom:14px;width:min(325px,42%);padding:11px 13px;border:1px solid #56818c;border-radius:9px;background:#082735ed;color:#e7f4ef}
.run-progress-heading{display:flex;justify-content:space-between;gap:10px;font-size:10px;align-items:center}
.run-progress-heading span{color:#f1dfaa;text-align:right}
.run-track{height:6px;border-radius:8px;background:#3f6270;margin:8px 0;overflow:hidden}
.run-track-fill{height:100%;width:0;background:#76dbb0;transition:width .8s ease;border-radius:8px}
.run-progress small{display:block;color:#b9d0d4;font-size:10px;line-height:1.3}
.map-legend{bottom:14px;max-width:300px}
.geo-pin:focus-visible{outline:3px solid #f2db8e;outline-offset:3px}
@media(max-width:850px){.map-mode-control{max-width:95vw;gap:4px;margin-top:6px}.map-mode-control button{font-size:9px;padding:6px}.run-progress{left:8px;right:8px;bottom:45px;width:auto;padding:7px 10px}.run-progress-heading{font-size:9px}.run-progress small{font-size:9px}.map-legend{bottom:4px;max-width:none}}

/* Clear, readable general conditions indicators for free visitors. */
.preview-locked .score-pill{min-width:73px}.preview-locked .score-pill .score-word{font-size:9px;letter-spacing:.3px}.preview-locked .score-pill .score-value{font-size:17px}.score-pill.unknown{background:#28474c;color:#b4c2c5}

/* Historical NOAA temperature and tide-polish panels */

/* Beach conditions image-sharing action */
.share-conditions-wrap{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:4px 0 15px}.share-conditions-btn{background:#154957;border:1px solid #73b3ba;color:#f1f8f3;border-radius:7px;padding:9px 13px;font-size:11px;font-weight:800;letter-spacing:.35px}.share-conditions-btn:hover{background:#1b5869}.share-conditions-btn:disabled{opacity:.5;cursor:wait}#shareConditionsStatus{color:#b7ced0;font-size:10px}

/* Independent fishing and migration readouts; preserve existing map and station layout. */
.card-top{flex-wrap:wrap}.card-fishing{min-width:125px;max-width:175px}.card-fishing strong{color:#e8d78f}.card-fishing span{display:block;font-size:9px;line-height:1.3;color:#a9bdbd;margin-top:4px}.dual-sidebar{display:flex;flex-direction:column;align-items:center;gap:3px}.fishing-mini{font-size:9px;line-height:1.2;color:#e9d896;white-space:nowrap}.station-item{gap:7px}.station-item>.dual-sidebar{flex-shrink:0}

/* Optional fishing species layers: inside card, never covering primary migration */
.species-outlooks{margin:12px 0;padding:12px;background:#102e38;border:1px solid #477480;border-radius:10px}.species-outlooks>strong{font-size:11px;letter-spacing:1px;color:#b9dfcd}.species-outlooks p{font-size:12px;margin:9px 0;line-height:1.4}.species-outlooks small{color:#9db9be;font-size:10px;line-height:1.5;display:block}.species-buttons{display:flex;flex-wrap:wrap;gap:6px}.species-buttons button{border:1px solid #587d84;background:#173b45;color:#dcefeb;padding:7px 9px;border-radius:5px;font-size:11px}.species-buttons button[aria-pressed="true"]{background:#a8d8be;color:#0c2b30;border-color:#b8eccd;font-weight:700}

/* Four concise numerical species ratings, secondary to striper content and beach cam. */
.species-outlooks{margin:12px 0;padding:12px 10px;background:#102e38;border:1px solid #477480;border-radius:10px}
.species-outlooks>strong{display:block;margin-bottom:9px;font-size:11px;letter-spacing:1px;color:#b9dfcd}
.species-score-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
.species-score-tile{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;padding:9px 3px;background:#173b45;border:1px solid #385e68;border-radius:7px;text-align:center}
.species-score-name{font-size:11px;color:#dcefeb}
.species-score-value{display:block;margin-top:5px;font-size:clamp(14px,3.5vw,19px);font-weight:800;white-space:nowrap;color:#e7f8d9;font-variant-numeric:tabular-nums}
.species-outlooks .species-compact-note{margin:7px 0 0;font-size:10px;line-height:1.25;color:#9db9be}
.species-outlooks .species-compact-note:empty{display:none}

/* Automatic Boston trigger status: display only, never a date-entry control. */
.trigger-heading{display:block;font-size:.72rem;letter-spacing:.08em;font-weight:700;color:#bfd5d2;margin-bottom:.45rem}.trigger-result{display:block;font-size:1.16rem;color:#e8d181;font-variant-numeric:tabular-nums}

/* Homepage simplification — safely preserve DOM ids and map renderers.
   The station list and score-help remain in the DOM for existing app.js code,
   but are no longer visible in valuable homepage space. */
.sidebar > .score-help, .sidebar > .station-list, .sidebar > .side-note {display:none!important}
/* Improve label legibility without changing pin positions or collision layout. */
#geoPins .geo-pin rect {stroke-width:2.2;paint-order:stroke fill}
#geoPins .geo-pin text {paint-order:stroke;stroke:rgba(2,25,33,.45);stroke-width:.45px}
#geoPins .geo-pin {cursor:pointer}
@media(max-width:850px){.map-head .map-sub{font-size:14px;font-weight:800;max-width:260px;line-height:1.25}.sidebar .rank-title{margin-bottom:4px}}

/* Show the selected town immediately after a map tap, without moving the map pins. */
#stationCard{scroll-margin-top:12px}
#stationCard.town-selected-flash{animation:town-selected-glow 1.6s ease-out}
@keyframes town-selected-glow{0%{outline:3px solid #e8de8b;box-shadow:0 0 0 6px rgba(232,222,139,.3)}100%{outline:3px solid transparent;box-shadow:none}}
@media(prefers-reduced-motion:reduce){#stationCard.town-selected-flash{animation:none;outline:2px solid #e8de8b}}

/* Purchase recovery stays accessible but does not overlay the map. */
.purchase-access{margin:16px auto;max-width:560px;padding:0 12px;font-size:13px}
.purchase-access details{border:1px solid #567c87;border-radius:10px;padding:12px;background:#0b2e3b;color:#e1edf0}
.purchase-access summary{cursor:pointer;font-weight:700}
.purchase-access p{margin:9px 0;font-size:12px}
.purchase-access-note{opacity:.8}

/* Private customer feedback, only in site footer */
.site-bottom-links .support-contact{width:min(100%,560px);margin:18px auto;color:#d8e8eb}
.support-contact details{border:1px solid #567c87;border-radius:10px;padding:13px 16px;background:#0b2e3b}
.support-contact summary{cursor:pointer;font-weight:700}
.support-contact p{line-height:1.5}
#feedbackForm{display:grid;gap:8px;margin-top:12px;text-align:left}
#feedbackForm label{font-size:13px;font-weight:700}
#feedbackForm input,#feedbackForm textarea{width:100%;box-sizing:border-box;padding:10px;border-radius:7px;border:1px solid #7a9ca5;background:#fafcfb;color:#112c34;font:inherit}
#feedbackForm button{min-height:44px;border-radius:7px;cursor:pointer;font-weight:800;background:#e7d8a2;color:#152f37}
#fbStatus{font-size:13px;min-height:18px;margin:4px 0 0}
.fb-honeypot{position:absolute!important;left:-10000px!important;width:1px;height:1px;overflow:hidden}
/* Six compact species ratings, including seasonal Albies and Bones. */
.species-score-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.species-score-value{white-space:normal;overflow-wrap:break-word;line-height:1.15}

/* VIP recovery: make existing-code activation obvious on installed iPhones */
.preview-vip-btn{margin-top:6px;background:#173a42!important;color:#f2e7ac!important;border:1px solid #b8a86c!important;padding:9px 12px!important;white-space:normal}
.vip-help{font-size:12px!important;color:#f4e5ad!important;margin:14px 0 4px!important}
#payMessage{min-height:18px;overflow-wrap:anywhere}

.sound-heading{padding:14px 12px 8px;color:#90e1d5;font-size:11px;letter-spacing:.08em;font-weight:800;border-top:1px solid #557578;margin-top:12px}

/* Long Island Sound pins: cyan outlines distinguish regional Sound reference data. */
.geo-pin.sound-pin circle{stroke:#bdeeff;stroke-width:2.5}
.geo-pin.sound-pin rect{stroke-dasharray:5 2}

/* NJ coastline readability fix, Oct 2026: status panel never obscures Cape May. */
@media (max-width:850px){
 .shell>.story#mapStory{height:auto!important;min-height:0!important;overflow:visible!important;display:block!important}
 .shell>.story#mapStory>.sticky-map{height:auto!important;min-height:0!important;overflow:visible!important;position:relative!important;display:block!important}
 .shell>.story#mapStory #map{position:relative!important;inset:auto!important;width:100%!important;height:clamp(620px,160vw,800px)!important;overflow:hidden!important}
 .shell>.story#mapStory .run-progress{position:relative!important;left:auto!important;right:auto!important;bottom:auto!important;width:auto!important;max-width:none!important;margin:0!important;border-radius:0!important;padding:13px 15px!important;z-index:2!important}
}

/* 2026-10-12: Compact mobile coastline layout. Keep the SVG's genuine 1000:700
   aspect ratio instead of putting it inside a tall, letterboxed map frame. */
@media (max-width:850px){
 .shell>.story#mapStory{height:auto!important;min-height:0!important;overflow:visible!important}
 .shell>.story#mapStory>.sticky-map{
   display:flex!important;flex-direction:column!important;align-items:stretch!important;
   height:auto!important;min-height:0!important;overflow:visible!important;position:relative!important
 }
 .shell>.story#mapStory .map-head{
   position:relative!important;order:0!important;inset:auto!important;left:auto!important;top:auto!important;
   width:100%!important;max-width:100%!important;z-index:3!important;
   padding:10px 13px 8px!important;background:#103846!important;text-shadow:none!important
 }
 .shell>.story#mapStory .map-head .live-pill{font-size:10px!important;line-height:1.25!important}
 .shell>.story#mapStory .map-head .map-sub{font-size:14px!important;line-height:1.3!important;margin-top:6px!important}
 .shell>.story#mapStory #map{
   position:relative!important;order:1!important;inset:auto!important;display:block!important;
   flex:none!important;width:100%!important;height:auto!important;aspect-ratio:10/7!important;
   min-height:0!important;overflow:hidden!important
 }
 .shell>.story#mapStory #coastSVG{display:block!important;width:100%!important;height:100%!important}
 .shell>.story#mapStory .map-scrim{display:none!important}
 .shell>.story#mapStory .fish-layer{display:none!important}
 .shell>.story#mapStory .run-progress{
   position:relative!important;order:2!important;inset:auto!important;left:auto!important;right:auto!important;bottom:auto!important;
   width:auto!important;max-width:none!important;margin:8px 8px 10px!important;
   border-radius:9px!important;padding:12px 14px!important;z-index:2!important
 }
}

/* Premium migration research: locked by default, shown only after verified access. */
.premium-forecast-content{display:none!important}
body.migration-premium-unlocked .premium-forecast-content{display:block!important}
body.migration-premium-unlocked .forecast-paywall{display:none!important}
.forecast-paywall{margin:12px 0 22px;padding:22px;border:1px solid rgba(224,194,123,.5);border-radius:14px;background:rgba(8,33,46,.94);color:#f0f3e7;display:flex;flex-direction:column;gap:12px;align-items:flex-start}
.forecast-paywall strong{font-size:1.17rem;color:#e9d38c}
.forecast-paywall p{margin:0;line-height:1.5}
.forecast-paywall small{opacity:.84;line-height:1.5}
.forecast-paywall button{padding:12px 16px;border:0;border-radius:9px;background:#ead58a;color:#0a2635;font-weight:800;cursor:pointer}

#transferAccessText{display:block;width:100%;max-width:100%;box-sizing:border-box;font-size:12px;overflow-wrap:anywhere;margin:8px 0;padding:10px;border-radius:8px;}
#transferAccessText[hidden]{display:none;}
#copyAccessStatus{min-height:1.25em;}

/* Striper Tracker UX Update 1 — visual polish only (2026-10-14).
   Preserves map pin geometry/labels, station positions, payment and all JS behavior. */
:root{--ux-gold:#e8de8b;--ux-gold-focus:#f0d78c;--ux-muted:#a9c0c4;--ux-green:#73d9aa}

/* NOAA information cards: readable on phones in daylight. */
.station-card .metrics small,.station-card .tide-row small{
  font-size:11px;line-height:1.35;letter-spacing:.035em;color:#bdd0d2;
}
.station-card .metrics span,.station-card .tide-row span{
  font-size:12px;line-height:1.4;color:#b8cdd0;
}
.station-card .card-score small{font-size:11px;line-height:1.3}
.station-card .card-fishing span,.station-card .data-note{font-size:12px;line-height:1.5}
.station-card .metrics strong{font-variant-numeric:tabular-nums}
.station-card .tide-row strong{font-variant-numeric:tabular-nums}

/* Active station is distinct from hover; do not adjust map pin sizes or anchors. */
.station-list .station-item.active{
  border-left-color:var(--ux-gold-focus);
  box-shadow:inset 0 0 0 1px rgba(240,215,140,.36),0 0 0 1px rgba(240,215,140,.08);
}
.station-list .station-item.active .town{color:#fff3c5}
.map-pin.selected{outline:2px solid var(--ux-gold-focus);outline-offset:1px}

/* Keyboard navigation: visible focus on dark ocean backgrounds. */
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[role="button"]:focus-visible{
  outline:2px solid var(--ux-gold-focus);outline-offset:3px;
}

/* One clear color treatment for the main purchase buttons; no layout changes. */
.forecast-paywall button,.paybox button,.preview-bar button,.premium-note button{
  background:var(--ux-gold);color:#081921;
  transition:background-color .15s ease;
}
.forecast-paywall button:hover,.paybox button:hover,.preview-bar button:hover,.premium-note button:hover{
  background:#f2e8a0;
}

/* Remove excessive gold from minor navigational eyebrow text, keep buy/selection gold. */
.sidebar .eyebrow{color:var(--ux-muted)}

@media(max-width:850px){
  .station-card .metrics small,.station-card .tide-row small{font-size:11px}
  .station-card .metrics span,.station-card .tide-row span{font-size:12px}
  .station-card .card-score small{font-size:11px}
  .station-card .data-note{font-size:12px}
  /* Scores remain in existing positions; increase micro-label legibility. */
  .score-pill .score-word{font-size:10px;line-height:1.15}
  .preview-locked .score-pill .score-word{font-size:10px}
}
@media(prefers-reduced-motion:reduce){
  .scroll-cue{animation:none!important}
  .forecast-paywall button,.paybox button,.preview-bar button,.premium-note button{transition:none}
}

/* UX Update 2 — phone-first coastline readability, 2026-10-14.
   On mobile the 1000:700 SVG is rendered at 2x the former width; the map itself
   is now 2x as tall. This scales coastline, pin text, dots and touch targets
   together without distorting geography or changing any coordinates.
   The user can swipe horizontally to inspect the enlarged coastline. */
@media (max-width:850px){
  .shell>.story#mapStory #map{
    width:100%!important;
    height:140vw!important;
    max-height:none!important;
    aspect-ratio:auto!important;
    overflow-x:auto!important;
    overflow-y:hidden!important;
    overscroll-behavior-x:contain;
    -webkit-overflow-scrolling:touch;
    touch-action:pan-x pan-y;
    scrollbar-width:thin;
    scrollbar-color:#7fa6a7 #0a2937;
  }
  .shell>.story#mapStory #coastSVG{
    width:200%!important;
    min-width:200%!important;
    max-width:none!important;
    height:100%!important;
    aspect-ratio:10/7!important;
    flex:none!important;
    transform:none!important;
    transition:none!important;
  }
  .shell>.story#mapStory #map.focused #coastSVG{transform:none!important}
  .shell>.story#mapStory .map-head::after{
    content:'← Scroll left to see more towns';
    display:block;
    margin-top:6px;
    font-size:12px;
    font-weight:700;
    color:#e7deab;
    letter-spacing:.01em;
  }
  /* Larger readings; do not restructure functional data or touch its API. */
  .shell>.sidebar .station-card .metrics strong{
    font-size:25px!important;
    line-height:1.12!important;
  }
  .station-card .metrics strong{font-size:25px!important;line-height:1.12}
  .station-card .tide-container strong,.station-card .window strong{font-size:23px!important}
  .station-card .metrics small,.station-card .tide-row small{font-size:12px!important}
  .station-card .metrics span,.station-card .tide-row span{font-size:13px!important}
  .station-card .metrics>div{padding:14px 12px!important}
  .shell>.sidebar .station-card .metrics>div{padding:14px 12px!important}
  .station-card .card-score strong{font-size:40px!important}
  .station-card .card-score small{font-size:12px!important}
  .station-card .data-note{font-size:12px!important;line-height:1.5}
}


/* UX UPDATE 3: clearer condition cards + cleaner premium purchase layout */
.data-freshness{margin:0 0 12px;padding:9px 11px;border:1px solid #315560;border-radius:10px;background:#112e38;color:#d6e4e5;font-size:11px;line-height:1.45}
.station-card .metrics{gap:10px;margin-top:2px}
.station-card .metrics>div{padding:15px 14px;border-radius:12px;background:#173742;border-color:#38606a;box-shadow:inset 0 1px 0 rgba(255,255,255,.03)}
.station-card .metrics strong{font-size:27px!important;line-height:1.05}
.station-card .metrics small{font-size:11px!important;letter-spacing:.11em;text-transform:uppercase;color:#c4d6d8}
.station-card .metrics span{font-size:12px!important;line-height:1.35;color:#acc2c5}
.station-card .card-score{padding:8px 10px;border:1px solid #345760;border-radius:12px;background:#112f38;min-width:102px}
.station-card .card-score strong{font-size:42px!important;line-height:.95}
.station-card .card-score small{font-size:10px!important;line-height:1.35;letter-spacing:.09em}
.station-card .card-fishing{min-width:145px;max-width:190px}
.tide-row{margin-top:12px;padding:14px;border-radius:12px;background:#14323c}
.share-conditions-wrap{margin:2px 0 10px}
.share-conditions-btn{padding:10px 14px;border-radius:9px}
.preview-bar{border-radius:12px;padding:12px 13px}
.preview-bar span{font-size:11px;line-height:1.5}
.premium-note{margin-top:12px;padding:13px;border-radius:12px;background:#102a33;border-color:#496770}
.premium-note strong{font-size:11px}
.premium-note span{font-size:12px;line-height:1.5}
#gate .paybox{padding:26px 24px 28px!important}
#gate .paybox .pay-lead{font-size:14px;line-height:1.65;color:#d0dddd;margin:10px 0 8px}
#gate .paybox .price{margin:14px 0 10px}
#gate .paybox button{border-radius:9px}
.pay-feature-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:14px 0 10px}
.pay-feature-grid>div{padding:11px 10px;border:1px solid #426770;border-radius:11px;background:#0d2530;text-align:left}
.pay-feature-grid strong{display:block;font-size:11px;letter-spacing:.09em;color:#eddc93;margin-bottom:4px}
.pay-feature-grid span{display:block;font-size:12px;line-height:1.4;color:#c2d2d4}
.restore-purchase{margin-top:14px;padding:14px;border:1px solid #4c6f79;border-radius:12px;background:#0c232b}
.restore-purchase p{font-size:12px;line-height:1.55;margin:8px 0}
.restore-highlight{color:#f0dd8e}
.restore-primary{padding:10px;border:1px solid #3a5e68;border-radius:10px;background:#102b35;margin:10px 0 12px}
.restore-details{margin-top:8px;border-top:1px solid #355660;padding-top:8px}
.restore-details summary{cursor:pointer;font-weight:700;color:#dbe8e9;margin-bottom:8px}
.restore-purchase input{margin:6px 0}
.restore-purchase button{border-radius:8px}
.purchase-access details,.support-contact details{border-radius:12px}
.purchase-access summary,.support-contact summary{font-weight:800}
.purchase-access p{font-size:12px;line-height:1.55}
.station-card .window strong{font-size:22px!important}
.station-card .window span{font-size:12px!important}
.station-card .data-note{margin-top:12px;font-size:12px!important;line-height:1.55;color:#c0d2d4}
.card-top{gap:10px}
.card-top h2{margin-bottom:8px}
@media(max-width:850px){
  .data-freshness{font-size:12px;padding:10px 11px}
  .station-card .metrics{grid-template-columns:1fr 1fr;gap:9px}
  .station-card .metrics>div{padding:14px 12px!important}
  .station-card .metrics strong{font-size:25px!important}
  .station-card .card-score{min-width:98px;padding:8px 8px}
  .station-card .card-fishing{min-width:132px;max-width:none}
  .pay-feature-grid{grid-template-columns:1fr}
  .restore-purchase{padding:12px}
}

/* Next tide callouts — Update 28 */
.next-tides{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:7px}
.next-tide{background:#193e49;border:1px solid #4f7380;border-radius:10px;padding:12px 10px;min-width:0}
.next-tide small{display:block;font-size:11px!important;font-weight:700;letter-spacing:.04em;color:#d0e2e2}
.next-tide strong{display:block!important;font:800 24px 'Barlow Condensed',sans-serif!important;color:#edf4ef;margin:6px 0 0!important;line-height:1.1}
.next-tide.high{border-color:#4d8475}.next-tide.low{border-color:#807853}
.next-tides-note{display:block;font-size:11px!important;color:#c0d4d5;margin:0 0 11px;line-height:1.35}
@media(max-width:380px){.next-tide strong{font-size:21px!important}.next-tide{padding:10px 8px}}

/* Town picker hotfix: mobile sheet must never get buried in the long document. */
@media(max-width:850px){
  .shell>.sidebar #stationCard.station-card:not(.hidden){
    position:fixed!important;
    inset:auto 0 0 0!important;
    top:auto!important;right:0!important;bottom:0!important;left:0!important;
    width:100%!important;max-width:none!important;
    height:auto!important;max-height:min(78dvh,760px)!important;
    overflow-y:auto!important;overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch;
    z-index:2800!important;
    padding:16px 15px calc(20px + env(safe-area-inset-bottom,0px))!important;
    margin:0!important;
    border-radius:18px 18px 0 0!important;
    background:#0a232c!important;
    box-shadow:0 -12px 65px rgba(0,0,0,.82)!important;
    border:2px solid #79a9a2!important;
  }
  #stationCard .card-top{padding-right:48px;position:relative}
  #stationCard #closeCard{
    display:flex!important;align-items:center;justify-content:center;
    position:absolute!important;top:0;right:0;
    z-index:3000!important;
    height:44px!important;width:44px!important;min-height:44px!important;min-width:44px!important;
    font-size:31px!important;line-height:1!important;font-weight:800!important;
    color:#fff!important;background:#b63e39!important;
    border:2px solid #fff!important;border-radius:50%!important;
    box-shadow:0 3px 18px #000b!important;opacity:1!important;
  }
}

/* Four-measurement species panel, preserving the 27-town map and town cards. */
.species-selector{display:flex;gap:7px;overflow-x:auto;padding:5px 0 11px;scrollbar-width:thin}
.species-selector .species-choice{flex:0 0 auto;background:#163d48;border:1px solid #537780;color:#e3f1ee;border-radius:9px;padding:10px 12px;min-height:42px;font-size:12px;font-weight:700}
.species-selector .species-choice[aria-pressed="true"]{background:#e8de8b;color:#081921;border-color:#e8de8b}
.species-measurements{display:grid;gap:7px}
.species-measure-row{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#173944;padding:12px 11px;border:1px solid #42646c;border-radius:9px}
.species-measure-row span{font-size:12px;color:#e6efef;font-weight:600}
.species-measure-row strong{font-size:13px;color:#9ee2ba;text-align:right;max-width:48%}
.species-outlooks .species-compact-note{font-size:11px;line-height:1.5;margin-top:11px;color:#b5cbd0}
@media(max-width:850px){.species-selector .species-choice{font-size:12px;min-height:44px}.species-measure-row{padding:14px 10px}.species-measure-row span,.species-measure-row strong{font-size:12px}}

/* Fish Species Outlook beta notice — isolated visual-only addition. */
.species-outlooks .species-beta-notice {
  display: block; margin: 10px 0 12px; padding: 11px 13px;
  border: 1px solid #d6af64; border-radius: 9px;
  background: #fff1cf; color: #4f350d; font-size: 14px;
  line-height: 1.45; font-weight: 500;
}
.species-outlooks .species-beta-notice b { font-weight: 800; letter-spacing: .05em; }

/* Readable town migration status labels */
.station-card .card-score strong{font-size:23px!important;line-height:1.05;max-width:175px;overflow-wrap:break-word;text-wrap:balance}
.station-item .score-word{white-space:normal;text-align:center;max-width:85px;line-height:1.2}

/* Fall run V2 methodology and one-time research notice */
.method-section{box-sizing:border-box;padding:18px clamp(14px,3vw,38px);background:#071f2c;color:#e3f4f4;border-top:1px solid #42717a}
.method-details{max-width:1150px;margin:0 auto;border:1px solid #467786;border-radius:13px;background:#0b303f;overflow:hidden}
.method-details>summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;padding:16px 20px;gap:16px;color:#edfaf6}
.method-details>summary::-webkit-details-marker{display:none}
.method-details summary strong{display:block;font-size:20px;letter-spacing:.065em}
.method-details summary small{display:block;color:#bbd2da;font-size:13px;margin-top:5px}
.method-chevron{font-size:26px;transition:transform .2s}.method-details[open] .method-chevron{transform:rotate(180deg)}
.method-body{padding:4px 20px 22px;border-top:1px solid #3e6874}.method-body>p{line-height:1.6}
.method-flow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:16px 0}
.method-stage{display:flex;gap:12px;padding:14px;background:#12404f;border:1px solid #3b6a78;border-radius:11px}
.method-num{display:grid;place-items:center;flex:0 0 33px;height:33px;border-radius:50%;background:#246a72;color:#fff;font-weight:800;font-size:12px}
.method-stage strong{color:#f1e4af;letter-spacing:.03em;font-size:13px}.method-stage p{font-size:13px;color:#d0e3e6;line-height:1.5;margin:7px 0 0}
.method-foot{font-size:12px;color:#c1d4dc}
.research-announcement:not([hidden]){position:fixed;inset:0;z-index:999999;background:rgba(0,13,22,.8);display:flex;align-items:center;justify-content:center;padding:18px;box-sizing:border-box}
.research-dialog{position:relative;box-sizing:border-box;width:min(580px,100%);max-height:min(90vh,780px);overflow:auto;overscroll-behavior:contain;padding:24px 27px;background:#f5f8f6;color:#102d36;border-radius:18px;box-shadow:0 15px 70px rgba(0,0,0,.5)}
.research-close{position:absolute;right:13px;top:9px;font-size:30px;line-height:1;background:none;border:0;color:#23414d;cursor:pointer;padding:8px 12px}
.research-eyebrow{font-size:10px;letter-spacing:.1em;color:#427078;font-weight:800;padding-right:38px}
.research-dialog h2{font-size:clamp(22px,5vw,30px);margin:13px 0;color:#093b43;line-height:1.15}
.research-dialog p{font-size:14px;line-height:1.6}.research-dialog ul{padding-left:22px;margin:15px 0}
.research-dialog li{font-size:13px;line-height:1.52;margin:0 0 9px}
.research-dialog .research-small{font-size:12px;color:#42616c}
.research-done{display:block;width:100%;border:0;border-radius:10px;background:#08766a;color:#fff;padding:14px;font-size:14px;font-weight:800;cursor:pointer}
@media(max-width:680px){.method-flow{grid-template-columns:1fr}.method-details>summary{padding:14px}.method-body{padding:4px 14px 16px}.research-dialog{padding:22px 17px}.research-dialog li{font-size:12.5px}}

/* Town fall-run progress: uses the same migration model as the map status. */
.town-run-progress{margin:8px 0 5px;min-width:110px}
.town-run-progress-head{display:flex;justify-content:space-between;align-items:center;gap:6px;font:700 9px 'DM Sans',sans-serif;letter-spacing:.45px;color:#cbd9cd}
.town-run-progress-head b{font-size:11px;color:#a0e6bb}
.town-run-track{height:8px;border-radius:10px;background:#29454b;margin-top:5px;overflow:hidden}
.town-run-track>div{height:100%;width:0;background:#73d9aa;border-radius:10px;transition:width .7s ease}

/* Approved visual-only index card edit: match FALL RUN status typography. */
.station-card .card-fishing .striper-index-heading{display:block;font:800 23px/1.05 'Barlow Condensed',sans-serif!important;letter-spacing:0!important;color:#e8d78f;max-width:175px;margin:6px auto 0;overflow-wrap:break-word;text-wrap:balance}

/* Presentation-only refresh: uses existing migrationScore and run progress percentages. */
.town-run-track{height:12px!important;border-radius:999px!important;overflow:hidden;box-shadow:inset 0 1px 5px #0007;border:1px solid #547583!important}
#townRunFill{height:100%;border-radius:999px;background:linear-gradient(90deg,#70b8d0,#8deac3)!important;box-shadow:0 0 10px #6cdeb355;transition:width .5s ease}
.town-run-progress-head span{font-weight:800;letter-spacing:.075em}
.migration-dial{--dial-progress:0%;width:98px;height:98px;margin:10px auto 3px;display:grid;place-items:center;border-radius:50%;background:conic-gradient(from 220deg,#71d9ab 0 var(--dial-progress),#284956 var(--dial-progress) 78%,transparent 78% 100%);position:relative;box-shadow:0 3px 15px #0004}
.migration-dial::after{content:"";position:absolute;inset:12px;background:#0c2a43;border-radius:50%}
.migration-dial-center{position:relative;z-index:1;font-family:'Barlow Condensed',sans-serif;color:#e3f2ec;font-size:21px;font-weight:800}
.migration-dial-center b{font:inherit}
.station-card .migration-dial-caption{font-size:9px!important;letter-spacing:.09em;color:#a3c5c9}
@media(max-width:430px){.migration-dial{width:84px;height:84px}.migration-dial::after{inset:10px}}

/* Migration outlook speedometer: independent row, outside cramped heading. */
#stationCard .migration-gauge-panel{display:flex!important;flex-direction:column;align-items:center;justify-content:center;clear:both;width:100%;margin:12px 0 14px;padding:14px 10px 17px;border:1px solid #4b7378;border-radius:12px;background:#102e39;min-height:160px}
#stationCard .migration-gauge-title{font:800 15px/1.2 'Barlow Condensed',sans-serif;letter-spacing:.13em;color:#e8d78f;margin-bottom:7px}
#stationCard .migration-gauge-panel .migration-dial{display:grid!important;place-items:center!important;visibility:visible!important;opacity:1!important;flex:none;width:116px!important;height:116px!important;margin:0!important;--dial-progress:0%;background:conic-gradient(from 220deg,#73d9aa 0 var(--dial-progress),#284956 var(--dial-progress) 78%,transparent 78% 100%);border-radius:50%;position:relative}
#stationCard .migration-gauge-panel .migration-dial::after{inset:14px}
#stationCard .migration-gauge-panel .migration-dial-center{position:relative;z-index:2;font:800 29px/1 'Barlow Condensed',sans-serif;color:#edf4ef}
#stationCard .migration-gauge-panel .migration-dial-center small{display:none}
@media(max-width:850px){#stationCard .migration-gauge-panel{min-height:146px;margin-top:10px;padding:10px 8px 12px}#stationCard .migration-gauge-panel .migration-dial{width:105px!important;height:105px!important}}

/* Migration Outlook: approved semicircular needle speedometer. */
#stationCard .migration-gauge-panel{display:flex!important;flex-direction:column;align-items:center;width:100%;margin:12px 0 14px;padding:12px 10px 8px;min-height:0;border:1px solid #436b75;border-radius:12px;background:#102e39;visibility:visible!important}
#stationCard .migration-gauge-title{font:800 15px 'Barlow Condensed',sans-serif;letter-spacing:.12em;color:#e8d78f;margin-bottom:0}
#stationCard .migration-speedometer{display:block;position:relative;width:min(100%,240px);height:167px;visibility:visible!important;opacity:1!important}
#stationCard .migration-speedometer svg{display:block;width:100%;height:142px;overflow:visible}
#stationCard .migration-speed-track{fill:none;stroke:#34545e;stroke-width:14;stroke-linecap:round}
#stationCard .migration-speed-active{fill:none;stroke:#2786a6;stroke-width:14;stroke-linecap:round;transition:stroke-dasharray .45s ease}
#stationCard .migration-speed-needle{stroke:#e6f2f0;stroke-width:4;stroke-linecap:round;transition:transform .45s ease}
#stationCard .migration-speed-readout{position:absolute;left:0;right:0;top:91px;text-align:center;font:800 23px 'Barlow Condensed',sans-serif;color:#e6f2f0}
#stationCard .migration-speed-limits{position:absolute;left:13px;right:13px;top:133px;display:flex;justify-content:space-between;color:#aec7cf;font:700 12px 'DM Sans',sans-serif}
@media(max-width:850px){#stationCard .migration-gauge-panel{padding:10px 8px 5px}#stationCard .migration-speedometer{height:167px}}

/* Approved town-card indicator descriptions; layout only */
#stationCard .striper-score-explainer{margin:6px 0 0;color:#b8d0ce;font-size:11px;line-height:1.35;font-weight:400;letter-spacing:0;text-align:center;max-width:220px}
#stationCard .migration-outlook-explainer{margin:7px auto 0;color:#b8d0ce;font-size:12px;line-height:1.5;font-weight:400;letter-spacing:0;max-width:320px;text-align:center}

/* Homepage order: main fall-run tracker first, methodology directly after it. */
@media (min-width:851px) { html, body { overflow-y:auto!important; } }

/* Town-page palette alignment — purely cosmetic. */
#stationCard .migration-gauge-panel {background:#102c45!important;border-color:#6483a1!important;}
#stationCard .card-fishing {background:#102c45!important;border-color:#6483a1!important;}
#stationCard .beachcam {background:#102c45!important;border-color:#6483a1!important;}
#stationCard .species-outlooks {background:#102c45!important;border-color:#6483a1!important;}

/* Calibrated 24-hour forecast */
.st-daily-timelines{margin:15px 0 5px;padding:13px;background:rgba(6,27,37,.65);border:1px solid rgba(149,204,218,.24);border-radius:12px;color:#eef7f7}
.st-daily-title{font-size:15px;font-weight:800;margin-bottom:10px}
.st-block{margin-bottom:16px}
.st-block-head{display:flex;justify-content:space-between;gap:12px;font-size:13px;font-weight:700;margin:10px 0 8px}
.st-tiles{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:3px}
.st-tile{text-align:center;min-width:0;padding:4px 0;border-radius:4px;background:#3e4851;outline:1px solid rgba(255,255,255,.12)}
.st-tile strong{font-size:clamp(9px,1.4vw,13px);line-height:1.4;color:white;display:block}
.st-tile small{font-size:clamp(7px,1.2vw,10px);color:white;display:block;opacity:.9}
.st-tile.st-now{outline:2px solid white;outline-offset:1px}
.st-daily-note{font-size:11px;color:#c6dce0;margin-top:6px}

/* 2026-10-19 staging: score bar beneath each existing daily period score */
.fishing-v2-card .st-period-scorebar{display:block;position:relative;width:100%;height:8px;background:#364a50;border-radius:999px;overflow:hidden;margin:7px auto 5px;max-width:138px;border:1px solid rgba(255,255,255,.14)}
.fishing-v2-card .st-period-scorebar>span{display:block;height:100%;width:0%;border-radius:999px;transition:width .35s ease}

/* Staging: fisherman-friendly time tiles, six across on phones. */
.st-tiles{grid-template-columns:repeat(6,minmax(0,1fr));gap:7px}
.st-tile{min-height:55px;padding:7px 2px;display:flex;flex-direction:column;justify-content:center;gap:3px;border-radius:7px}
.st-tile strong{font-size:clamp(16px,3.2vw,22px);font-weight:850}
.st-tile small{font-size:clamp(10px,1.9vw,12px);font-weight:750;opacity:1;white-space:nowrap}
@media(min-width:900px){.st-tiles{grid-template-columns:repeat(12,minmax(0,1fr));gap:5px}}

/* Staging-only unrestricted visual QA: no checkout, VIP or recovery controls. */
body.staging-open-preview #gate,body.staging-open-preview #previewBar,body.staging-open-preview #premiumNote,body.staging-open-preview #accessRecovery,body.staging-open-preview .forecast-paywall{display:none!important;}

/* Clear Apple installation steps displayed in-page (not as a blocked popup). */
.homepage-install .install-help:not([hidden]){display:block;margin-top:9px;padding:12px 14px;border:1px solid rgba(125,145,159,.45);border-radius:9px;line-height:1.5;background:rgba(95,120,135,.13);font-size:14px}
.homepage-install .install-help ol{padding-left:22px;margin:8px 0 0}
.homepage-install .install-help li{margin:6px 0}

/* Approved upper-right free guide promotion */
.attack-header-promo{display:flex;flex-direction:column;gap:3px;max-width:350px;padding:9px 12px;border:1px solid rgba(112,184,202,.5);border-radius:10px;text-decoration:none;color:#e8f5f5;background:rgba(10,44,59,.9);line-height:1.25}
.attack-header-promo .attack-kicker{font-size:11px;font-weight:800;letter-spacing:.07em;color:#bde5e3}
.attack-header-promo strong{font-size:14px;color:#fff}
.attack-header-promo span:not(.attack-kicker){font-size:12px}
.attack-header-promo small{font-size:10px;font-weight:700;color:#a8e8bd;margin-top:3px}
.attack-header-promo:hover{border-color:#b8ecec;background:#12475e}
@media(max-width:600px){.attack-header-promo{max-width:100%;padding:9px 10px}.attack-header-promo strong{font-size:13px}}


/* Mobile fix: stack brand and Attack Pack promo so the promo never covers the logo. */
@media (max-width: 760px){
  .topbar{
    display:flex!important;
    flex-direction:column!important;
    align-items:stretch!important;
    gap:10px!important;
    padding-top:10px!important;
    padding-bottom:10px!important;
    height:auto!important;
    min-height:0!important;
  }
  .brand{
    width:100%!important;
    min-width:0!important;
  }
  .brand span{
    min-width:0!important;
  }
  .header-right{
    width:100%!important;
    display:flex!important;
    justify-content:flex-start!important;
    align-items:stretch!important;
    gap:8px!important;
  }
  .attack-header-promo{
    width:100%!important;
    max-width:none!important;
    margin:0!important;
  }
}
@media (max-width: 520px){
  .brand b{font-size:clamp(20px,7vw,26px)!important}
  .brand small{font-size:10px!important;letter-spacing:1.4px!important}
  .attack-header-promo{padding:10px 12px!important}
  .attack-header-promo strong{font-size:13px!important}
  .attack-header-promo span:not(.attack-kicker){font-size:12px!important}
  .attack-header-promo small{font-size:10px!important}
}

/* Approved Attack Pack badge: natural height, proportional logo at upper right. */
.topbar{height:auto!important;min-height:68px;padding-top:12px;padding-bottom:12px}
.attack-header-promo{display:grid;grid-template-columns:minmax(0,1fr) 150px;align-items:center;gap:12px;max-width:480px;min-width:0}
.attack-promo-copy{display:flex;flex-direction:column;gap:5px;min-width:0}
.attack-pack-logo{display:block;width:150px;max-width:100%;height:auto;aspect-ratio:1;object-fit:contain;border-radius:50%}
@media(max-width:760px){.attack-header-promo{grid-template-columns:minmax(0,1fr) clamp(104px,30vw,150px);gap:10px}.attack-pack-logo{width:100%}}
@media(max-width:360px){.attack-header-promo{grid-template-columns:minmax(0,1fr) 96px;gap:8px}}

/* Approved phone map instruction, positioned above the existing Massachusetts label. */
#coastSVG .map-town-instruction{display:none}
@media(max-width:850px){
  #coastSVG .map-town-instruction{display:block;paint-order:stroke;stroke:#103846;stroke-width:1px;stroke-linejoin:round}
  .shell>.story#mapStory .map-head .map-sub{display:none!important}
}
/* Homepage report links: white in every state, scoped to the three links in #weekly-report-navigation. */
#weekly-report-navigation a,#weekly-report-navigation a:link,#weekly-report-navigation a:visited,#weekly-report-navigation a:hover,#weekly-report-navigation a:focus,#weekly-report-navigation a:active{color:#FFFFFF}
#weekly-report-navigation a:focus-visible{color:#FFFFFF;outline:3px solid #eac46e;outline-offset:3px}
