body.weatherDeterministicMobile .forecastConsoleSection{padding-top:8px;padding-bottom:18px}
body.weatherDeterministicMobile .forecastConsole{display:grid;gap:12px}
body.weatherDeterministicMobile .forecastConsoleHero{display:grid;gap:10px;padding:8px 0 0}
body.weatherDeterministicMobile .forecastConsoleHeroMain{display:grid;gap:10px}
body.weatherDeterministicMobile .forecastConsoleTitle{margin:0;font-size:clamp(1.55rem,8vw,3.35rem);line-height:.94;letter-spacing:-.05em;color:#0f2340;max-width:10ch}
body.weatherDeterministicMobile .forecastConsoleLead{margin:0;max-width:30ch;font-size:1rem;line-height:1.45;color:#334e68}
body.weatherDeterministicMobile .forecastConsoleQuickActions{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:8px}
body.weatherDeterministicMobile .forecastConsoleQuickActions .btn{min-height:52px;border-radius:18px;padding:0 16px;font-size:1rem;font-weight:800}
body.weatherDeterministicMobile .forecastHeroSnapshot{display:grid;gap:12px;padding:14px;border-radius:24px;background:linear-gradient(180deg,#0f3f72,#114980 54%,#eef6ff 54%,#f8fbff 100%);box-shadow:0 18px 36px rgba(9,27,44,.16);border:1px solid rgba(12,44,76,.08);overflow:hidden}
body.weatherDeterministicMobile .forecastHeroSnapshot.tone-good{background:linear-gradient(180deg,#0f3f72,#11558c 54%,#effdf8 54%,#fbfffd 100%)}
body.weatherDeterministicMobile .forecastHeroSnapshot.tone-mid{background:linear-gradient(180deg,#0f3f72,#1b4f82 54%,#fff8eb 54%,#fffdfa 100%)}
body.weatherDeterministicMobile .forecastHeroSnapshotTop{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;color:#fff}
body.weatherDeterministicMobile .forecastHeroSnapshotTop small{display:block;font-size:.72rem;line-height:1;color:rgba(255,255,255,.78);text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px}
body.weatherDeterministicMobile .forecastHeroSnapshotTop strong{display:block;font-size:2rem;line-height:1;letter-spacing:-.04em}
body.weatherDeterministicMobile .forecastHeroSnapshotTop span{display:block;font-size:.82rem;line-height:1.3;color:rgba(255,255,255,.86);margin-top:6px}
body.weatherDeterministicMobile .forecastHeroBadge{display:grid;justify-items:end;gap:4px;min-width:88px;padding:10px 12px;border-radius:18px;background:rgba(255,255,255,.14);backdrop-filter:blur(8px)}
body.weatherDeterministicMobile .forecastHeroBadge b{font-size:1rem;line-height:1;color:#fff}
body.weatherDeterministicMobile .forecastHeroBadge span{font-size:.68rem;line-height:1;color:rgba(255,255,255,.74);text-transform:uppercase;letter-spacing:.08em;margin:0}
body.weatherDeterministicMobile .forecastHeroSnapshotMiddle{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
body.weatherDeterministicMobile .forecastHeroMetric{display:grid;gap:4px;padding:10px 12px;border-radius:16px;background:#fff;border:1px solid rgba(15,34,51,.06)}
body.weatherDeterministicMobile .forecastHeroMetric span{font-size:.68rem;line-height:1;color:#6b7d90;text-transform:uppercase;letter-spacing:.08em}
body.weatherDeterministicMobile .forecastHeroMetric strong{font-size:.92rem;line-height:1.1;color:#17395b}
body.weatherDeterministicMobile .forecastHeroSnapshotBottom{display:grid;gap:10px}
body.weatherDeterministicMobile .forecastHeroSnapshotBottom p{margin:0;padding:12px;border-radius:18px;background:#fff;color:#17395b;font-size:.9rem;line-height:1.35;border:1px solid rgba(15,34,51,.06)}
body.weatherDeterministicMobile .forecastHeroDays{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
body.weatherDeterministicMobile .forecastHeroDays span{display:grid;gap:4px;justify-items:center;padding:10px 8px;border-radius:16px;background:#fff;border:1px solid rgba(15,34,51,.06);font-size:.72rem;color:#17395b;font-weight:700}
body.weatherDeterministicMobile .forecastHeroDays span b{font-size:.88rem;line-height:1.05}
body.weatherDeterministicMobile .forecastHeroDays span.tone-good{background:#effdf8;color:#0f766e}
body.weatherDeterministicMobile .forecastHeroDays span.tone-mid{background:#fff8eb;color:#b45309}
body.weatherDeterministicMobile .forecastHeroDays span.tone-soft{background:#f3f7fc;color:#47627e}

body.weatherDeterministicMobile .forecastSuperContainer{display:grid;gap:12px;padding:12px;border-radius:28px;background:linear-gradient(180deg,#fdfefe,#f2f7fb);border:1px solid rgba(15,34,51,.08);box-shadow:0 12px 32px rgba(11,31,43,.06)}
body.weatherDeterministicMobile .forecastToolbar{display:grid;gap:12px}
body.weatherDeterministicMobile .forecastToolbarSelects{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
body.weatherDeterministicMobile .forecastToolbarSelects label{display:grid;gap:6px}
body.weatherDeterministicMobile .forecastToolbarSelects span{font-size:.68rem;line-height:1;color:#667b91;text-transform:uppercase;letter-spacing:.08em;padding-inline:2px}
body.weatherDeterministicMobile .forecastToolbarSelects select{width:100%;min-height:46px;padding:0 14px;border-radius:16px;border:1px solid rgba(15,34,51,.10);background:#fff;color:#17395b;font-weight:800;appearance:none;background-image:linear-gradient(45deg,transparent 50%,#17395b 50%),linear-gradient(135deg,#17395b 50%,transparent 50%);background-position:calc(100% - 19px) 20px,calc(100% - 13px) 20px;background-size:6px 6px,6px 6px;background-repeat:no-repeat;box-shadow:0 8px 22px rgba(11,31,43,.04)}
body.weatherDeterministicMobile .forecastTabs{display:flex;gap:8px;overflow:auto hidden;padding-bottom:4px;scrollbar-width:none}
body.weatherDeterministicMobile .forecastTabs::-webkit-scrollbar{display:none}
body.weatherDeterministicMobile .forecastTabs button{flex:0 0 auto;min-height:40px;padding:0 14px;border-radius:999px;border:1px solid rgba(15,34,51,.08);background:#fff;color:#5c7287;font-size:.82rem;font-weight:800}
body.weatherDeterministicMobile .forecastTabs button.is-active{background:#17395b;color:#fff;border-color:#17395b;box-shadow:0 6px 18px rgba(23,57,91,.18)}

body.weatherDeterministicMobile .forecastSummaryStrip{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
body.weatherDeterministicMobile .forecastSummaryCard{display:grid;gap:4px;padding:12px;border-radius:18px;background:#fff;border:1px solid rgba(15,34,51,.08);box-shadow:0 8px 22px rgba(11,31,43,.04);min-height:88px;align-content:start}
body.weatherDeterministicMobile .forecastSummaryCard small{font-size:.64rem;line-height:1;color:#6b7d90;text-transform:uppercase;letter-spacing:.08em}
body.weatherDeterministicMobile .forecastSummaryCard strong{font-size:1rem;line-height:1.08;color:#17395b}
body.weatherDeterministicMobile .forecastSummaryCard span{font-size:.76rem;line-height:1.3;color:#587086}
body.weatherDeterministicMobile .forecastSummaryCard:last-child{grid-column:1/-1}

body.weatherDeterministicMobile .forecastChartsDeck{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
body.weatherDeterministicMobile .forecastVisualCard,
body.weatherDeterministicMobile .forecastConsoleCard{display:grid;gap:10px;padding:12px;border-radius:20px;background:#fff;border:1px solid rgba(15,34,51,.08);box-shadow:0 8px 22px rgba(11,31,43,.04)}
body.weatherDeterministicMobile .forecastVisualHead,
body.weatherDeterministicMobile .forecastConsoleCardHead{display:flex;align-items:center;justify-content:space-between;gap:8px}
body.weatherDeterministicMobile .forecastVisualHead b,
body.weatherDeterministicMobile .forecastConsoleCardHead b{font-size:.73rem;line-height:1;color:#667b91;text-transform:uppercase;letter-spacing:.08em}
body.weatherDeterministicMobile .forecastVisualHead small,
body.weatherDeterministicMobile .forecastConsoleCardHead small{font-size:.72rem;line-height:1.2;color:#587086;text-align:right}
body.weatherDeterministicMobile .forecastMiniChart{height:86px;min-height:86px}
body.weatherDeterministicMobile .forecastMiniChart--tide{height:70px;min-height:70px}
body.weatherDeterministicMobile .forecastFallbackChart{display:flex;align-items:flex-end;gap:4px;height:64px}
body.weatherDeterministicMobile .forecastFallbackChart span{flex:1;border-radius:6px 6px 2px 2px;opacity:.9}

body.weatherDeterministicMobile .forecastPaneWrap{display:grid}
body.weatherDeterministicMobile .forecastPane{display:grid;gap:10px}
body.weatherDeterministicMobile .forecastPane[hidden]{display:none!important}
body.weatherDeterministicMobile .forecastPaneGrid{display:grid;gap:10px}
body.weatherDeterministicMobile .forecastMetricRows{display:grid;gap:8px}
body.weatherDeterministicMobile .forecastMetricRow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;padding-bottom:8px;border-bottom:1px solid rgba(15,34,51,.06)}
body.weatherDeterministicMobile .forecastMetricRow:last-child{border-bottom:0;padding-bottom:0}
body.weatherDeterministicMobile .forecastMetricRow small{font-size:.74rem;color:#6b7d90}
body.weatherDeterministicMobile .forecastMetricRow strong{font-size:.9rem;color:#17395b;text-align:right}
body.weatherDeterministicMobile .forecastMetricRow span{grid-column:1/-1;font-size:.72rem;color:#587086}

body.weatherDeterministicMobile .forecastTideStats{display:grid;gap:8px}
body.weatherDeterministicMobile .forecastTideStats article{display:grid;gap:2px;padding:10px;border-radius:14px;background:#f7fbff;border:1px solid rgba(15,34,51,.06)}
body.weatherDeterministicMobile .forecastTideStats small{font-size:.66rem;color:#6b7d90;text-transform:uppercase;letter-spacing:.08em}
body.weatherDeterministicMobile .forecastTideStats strong{font-size:.86rem;color:#17395b}
body.weatherDeterministicMobile .forecastTideStats span{font-size:.72rem;color:#587086}
body.weatherDeterministicMobile .forecastEmptyLine{font-size:.8rem;color:#6b7d90}

body.weatherDeterministicMobile .forecastMapCard{overflow:hidden}
body.weatherDeterministicMobile .forecastSpotMap{height:220px;border-radius:18px;overflow:hidden;background:#eef5fb}
body.weatherDeterministicMobile .forecastMapFallback{display:grid;gap:6px;padding:8px}
body.weatherDeterministicMobile .forecastMapFallback span{display:block;padding:9px 10px;border-radius:12px;background:#f4f8fb;color:#17395b;font-size:.8rem;font-weight:700}
body.weatherDeterministicMobile .forecastMapFallback span.is-active{background:#17395b;color:#fff}
body.weatherDeterministicMobile .forecastMapMarker{width:34px;height:34px;border-radius:999px;background:#17395b;color:#fff;border:2px solid #fff;box-shadow:0 6px 18px rgba(11,31,43,.18);display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:800}
body.weatherDeterministicMobile .forecastMapMarker.is-active{background:#0ea5a4}

body.weatherDeterministicMobile .forecastWindowCards,
body.weatherDeterministicMobile .forecastDayCards,
body.weatherDeterministicMobile .forecastCompareCards{display:grid;gap:8px}
body.weatherDeterministicMobile .forecastWindowCard,
body.weatherDeterministicMobile .forecastDayCard,
body.weatherDeterministicMobile .forecastCompareCard{display:grid;gap:6px;padding:12px;border-radius:16px;background:#f7fbff;border:1px solid rgba(15,34,51,.06)}
body.weatherDeterministicMobile .forecastWindowCard.tone-good,
body.weatherDeterministicMobile .forecastDayCard.tone-good,
body.weatherDeterministicMobile .forecastCompareCard.tone-good{border-color:rgba(14,165,164,.24);background:linear-gradient(180deg,#f6fffd,#f1fffd)}
body.weatherDeterministicMobile .forecastWindowCard.tone-mid,
body.weatherDeterministicMobile .forecastDayCard.tone-mid,
body.weatherDeterministicMobile .forecastCompareCard.tone-mid{border-color:rgba(245,158,11,.22);background:linear-gradient(180deg,#fffdf7,#fff9ed)}
body.weatherDeterministicMobile .forecastWindowCard.tone-soft,
body.weatherDeterministicMobile .forecastDayCard.tone-soft,
body.weatherDeterministicMobile .forecastCompareCard.tone-soft{border-color:rgba(96,165,250,.16);background:linear-gradient(180deg,#fbfdff,#f5f8fc)}
body.weatherDeterministicMobile .forecastWindowCard>div,
body.weatherDeterministicMobile .forecastDayCardTop,
body.weatherDeterministicMobile .forecastCompareCardTop{display:flex;align-items:center;justify-content:space-between;gap:8px}
body.weatherDeterministicMobile .forecastWindowCard strong,
body.weatherDeterministicMobile .forecastDayCard strong,
body.weatherDeterministicMobile .forecastCompareCard strong{font-size:.9rem;color:#17395b;line-height:1.08}
body.weatherDeterministicMobile .forecastWindowCard b,
body.weatherDeterministicMobile .forecastDayCard b,
body.weatherDeterministicMobile .forecastCompareCard b{font-size:.84rem;color:#17395b}
body.weatherDeterministicMobile .forecastWindowCard span,
body.weatherDeterministicMobile .forecastWindowCard small,
body.weatherDeterministicMobile .forecastDayRows span,
body.weatherDeterministicMobile .forecastDayCard small,
body.weatherDeterministicMobile .forecastCompareMeta span{font-size:.74rem;line-height:1.26;color:#587086}
body.weatherDeterministicMobile .forecastDayRows,
body.weatherDeterministicMobile .forecastCompareMeta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
body.weatherDeterministicMobile .forecastCompareCard.is-active{outline:2px solid rgba(14,165,164,.28)}
body.weatherDeterministicMobile .forecastInlineSelect{justify-self:start;min-height:34px;padding:0 12px;border-radius:999px;background:#17395b;color:#fff;border:0;font-size:.76rem;font-weight:800}

body.weatherDeterministicMobile .forecastAdviceCard{display:grid;gap:4px;padding:10px 12px;border-radius:15px;background:#f7fbff;border:1px solid rgba(15,34,51,.06)}
body.weatherDeterministicMobile .forecastAdviceCard strong{font-size:.92rem;color:#17395b}
body.weatherDeterministicMobile .forecastAdviceCard span{font-size:.76rem;color:#587086}
body.weatherDeterministicMobile .forecastBestHoursStrip{display:flex;gap:6px;overflow:auto hidden;padding-bottom:2px;scrollbar-width:none}
body.weatherDeterministicMobile .forecastBestHoursStrip::-webkit-scrollbar{display:none}
body.weatherDeterministicMobile .forecastHourChip{flex:0 0 auto;display:inline-flex;align-items:center;min-height:30px;padding:0 10px;border-radius:999px;background:#eef5fb;color:#17395b;font-size:.75rem;font-weight:700}
body.weatherDeterministicMobile .forecastHourChip.tone-good{background:#eafaf8;color:#0f766e}
body.weatherDeterministicMobile .forecastHourChip.tone-mid{background:#fff7e9;color:#b45309}

body.weatherDeterministicMobile .forecastPlanCards{display:grid;gap:8px}
body.weatherDeterministicMobile .forecastPlanCards a{display:grid;gap:4px;padding:11px 12px;border-radius:16px;background:#f7fbff;border:1px solid rgba(15,34,51,.06);text-decoration:none;color:#17395b}
body.weatherDeterministicMobile .forecastPlanCards strong{font-size:.88rem;line-height:1.06}
body.weatherDeterministicMobile .forecastPlanCards span{font-size:.75rem;line-height:1.26;color:#587086}
body.weatherDeterministicMobile .forecastPaneActions{display:flex;gap:8px;flex-wrap:wrap}
body.weatherDeterministicMobile .forecastPaneActions .btn{min-height:40px;padding:0 12px;border-radius:14px;font-size:.82rem}

body.weatherDeterministicMobile .forecastSheet{padding:0;border:0;background:transparent;max-width:none;width:100%;height:100%}
body.weatherDeterministicMobile .forecastSheet::backdrop{background:rgba(7,20,34,.45);backdrop-filter:blur(3px)}
body.weatherDeterministicMobile .forecastSheetBack{position:fixed;inset:0;margin:0;padding:0;border:0;background:transparent}
body.weatherDeterministicMobile .forecastSheetBack button{position:absolute;inset:0;background:transparent;border:0}
body.weatherDeterministicMobile .forecastSheetPanel{position:fixed;left:0;right:0;bottom:0;display:grid;gap:10px;max-height:84vh;padding:14px 14px calc(env(safe-area-inset-bottom) + 14px);border-radius:24px 24px 0 0;background:#fff;box-shadow:0 -12px 36px rgba(11,31,43,.18)}
body.weatherDeterministicMobile .forecastSheetHead{display:flex;align-items:center;justify-content:space-between;gap:8px}
body.weatherDeterministicMobile .forecastSheetHead strong{font-size:.94rem;color:#17395b}
body.weatherDeterministicMobile .forecastSheetHead button{width:38px;height:38px;border-radius:999px;border:1px solid rgba(15,34,51,.08);background:#f4f8fb;color:#17395b;font-size:1.4rem;line-height:1}
body.weatherDeterministicMobile .forecastSheetBody{overflow:auto;max-height:calc(84vh - 58px)}
body.weatherDeterministicMobile .forecastScrollTable{overflow:auto}
body.weatherDeterministicMobile .forecastDataTable{width:100%;border-collapse:separate;border-spacing:0 6px;min-width:520px}
body.weatherDeterministicMobile .forecastDataTable th{font-size:.7rem;color:#6b7d90;text-align:left;padding:0 8px 4px;text-transform:uppercase;letter-spacing:.08em}
body.weatherDeterministicMobile .forecastDataTable td{padding:10px 8px;background:#f7fbff;border-top:1px solid rgba(15,34,51,.06);border-bottom:1px solid rgba(15,34,51,.06);font-size:.78rem;color:#17395b}
body.weatherDeterministicMobile .forecastDataTable tr td:first-child{border-left:1px solid rgba(15,34,51,.06);border-radius:12px 0 0 12px}
body.weatherDeterministicMobile .forecastDataTable tr td:last-child{border-right:1px solid rgba(15,34,51,.06);border-radius:0 12px 12px 0}

body.weatherDeterministicMobile .forecastHelpGrid{display:grid;gap:8px}
body.weatherDeterministicMobile .forecastHelpGrid .btn{min-height:44px;border-radius:16px}
body.weatherDeterministicMobile .forecastConsoleLoading .forecastSuperContainer{opacity:.85}

@media (min-width:981px){
  body.weatherPage .forecastConsoleTitle{max-width:12ch;font-size:clamp(2rem,4vw,4rem)}
  body.weatherPage .forecastConsoleLead{font-size:1.05rem}
  body.weatherPage .forecastHeroSnapshot{grid-template-columns:1.15fr .95fr;align-items:start}
  body.weatherPage .forecastHeroSnapshotTop{grid-column:1/2}
  body.weatherPage .forecastHeroSnapshotMiddle{grid-column:1/2;grid-template-columns:repeat(4,minmax(0,1fr))}
  body.weatherPage .forecastHeroSnapshotBottom{grid-column:2/3;grid-row:1/3;align-self:stretch}
  body.weatherPage .forecastHeroDays{grid-template-columns:repeat(2,minmax(0,1fr))}
  body.weatherPage .forecastSummaryStrip{grid-template-columns:repeat(5,minmax(0,1fr))}
  body.weatherPage .forecastSummaryCard:last-child{grid-column:auto}
  body.weatherPage .forecastChartsDeck{grid-template-columns:repeat(4,minmax(0,1fr))}
  body.weatherPage .forecastPaneGrid--overview{grid-template-columns:1.15fr .95fr 1.2fr}
  body.weatherPage .forecastToolbarSelects{grid-template-columns:repeat(4,minmax(0,1fr))}
}

body.weatherDeterministicMobile .nextSteps,
body.weatherDeterministicMobile #nextSteps{display:none!important}

body.weatherDeterministicMobile .forecastConsoleSection{padding-bottom:calc(env(safe-area-inset-bottom) + 118px)}
body.weatherDeterministicMobile .forecastToolbar{position:sticky;top:72px;z-index:18;padding:10px 0 2px;background:linear-gradient(180deg,rgba(248,250,252,.96),rgba(248,250,252,.9));backdrop-filter:blur(10px)}
body.weatherDeterministicMobile .forecastControlIntro{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:18px;background:linear-gradient(135deg,#17395b,#234f79);color:#fff;box-shadow:0 10px 24px rgba(11,31,43,.16)}
body.weatherDeterministicMobile .forecastControlIntro strong{font-size:.92rem;line-height:1.05;font-weight:800;color:#fff}
body.weatherDeterministicMobile .forecastControlIntro span{font-size:.74rem;line-height:1.35;color:rgba(255,255,255,.82);text-align:right}
body.weatherDeterministicMobile .forecastToolbarSelects label{padding:10px 12px;border-radius:18px;background:#f7fbff;border:1px solid rgba(15,34,51,.08);box-shadow:0 8px 22px rgba(11,31,43,.04)}
body.weatherDeterministicMobile .forecastToolbarSelects select{min-height:38px;padding:0 30px 0 0;border-radius:0;border:0;background-color:transparent;box-shadow:none;font-size:1rem}
body.weatherDeterministicMobile .forecastToolbarSelects span{padding-inline:0}
body.weatherDeterministicMobile .forecastDecisionCard{border:0;text-align:left;cursor:pointer;position:relative;transition:transform .18s ease, box-shadow .18s ease,border-color .18s ease}
body.weatherDeterministicMobile .forecastDecisionCard:active{transform:translateY(1px)}
body.weatherDeterministicMobile .forecastDecisionCard i{margin-top:auto;font-style:normal;font-size:.7rem;line-height:1;color:#17395b;font-weight:800;opacity:.7}
body.weatherDeterministicMobile .forecastDecisionCard::after{content:'';position:absolute;inset:0;border-radius:inherit;border:1px solid rgba(23,57,91,.04);pointer-events:none}
body.weatherDeterministicMobile .forecastDecisionCard:hover,body.weatherDeterministicMobile .forecastDecisionCard:focus-visible{box-shadow:0 12px 28px rgba(11,31,43,.1);transform:translateY(-1px)}
body.weatherDeterministicMobile .forecastDecisionCard#fcCardTripAdvice{background:linear-gradient(180deg,#fff,#f7fbff)}
body.weatherDeterministicMobile .forecastWindowCard.is-broad{background:linear-gradient(180deg,#f8fbff,#f3f9ff)}
body.weatherDeterministicMobile .forecastWindowCard.is-broad small{font-weight:700}
body.weatherDeterministicMobile .forecastCompareCard{cursor:pointer}
body.weatherDeterministicMobile .forecastPane{scroll-margin-top:140px}
@media (min-width:981px){
  body.weatherPage .forecastToolbar{top:88px}
  body.weatherPage .forecastControlIntro{align-items:center}
}

body.weatherDeterministicMobile .forecastTabs button,body.weatherDeterministicMobile .forecastDecisionCard,body.weatherDeterministicMobile .forecastInlineSelect{appearance:none;-webkit-appearance:none;font:inherit}

body.weatherDeterministicMobile .forecastStatusStrip{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
body.weatherDeterministicMobile .forecastStatusPill{display:grid;gap:4px;padding:10px 12px;border-radius:16px;background:#f4f9fd;border:1px solid rgba(15,34,51,.08);box-shadow:0 8px 20px rgba(11,31,43,.04)}
body.weatherDeterministicMobile .forecastStatusPill small{font-size:.62rem;line-height:1;color:#6b7d90;text-transform:uppercase;letter-spacing:.08em}
body.weatherDeterministicMobile .forecastStatusPill strong{font-size:.84rem;line-height:1.15;color:#17395b}
body.weatherDeterministicMobile .forecastSpotBoard{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
body.weatherDeterministicMobile .forecastSpotBoardItem{display:grid;gap:4px;padding:12px;border-radius:18px;border:1px solid rgba(15,34,51,.08);background:#fff;text-align:left;box-shadow:0 8px 22px rgba(11,31,43,.04);appearance:none;-webkit-appearance:none;font:inherit;color:#17395b}
body.weatherDeterministicMobile .forecastSpotBoardItem span{font-size:.84rem;font-weight:800;line-height:1.08}
body.weatherDeterministicMobile .forecastSpotBoardItem b{font-size:.78rem;line-height:1.1}
body.weatherDeterministicMobile .forecastSpotBoardItem small{font-size:.72rem;line-height:1.24;color:#587086}
body.weatherDeterministicMobile .forecastSpotBoardItem.is-active{outline:2px solid rgba(14,165,164,.26)}
body.weatherDeterministicMobile .forecastSpotBoardItem.tone-good{background:linear-gradient(180deg,#f4fffb,#ecfdf7)}
body.weatherDeterministicMobile .forecastSpotBoardItem.tone-mid{background:linear-gradient(180deg,#fffdf7,#fff8ec)}
body.weatherDeterministicMobile .forecastSpotBoardItem.tone-soft{background:linear-gradient(180deg,#fbfdff,#f5f8fc)}
body.weatherDeterministicMobile .forecastSparkSvg{display:block;width:100%;height:100%}
body.weatherDeterministicMobile .forecastSparkSvg text{font-size:9px;fill:#6b7b90;letter-spacing:.02em}
body.weatherDeterministicMobile .forecastSparkLine{vector-effect:non-scaling-stroke}
body.weatherDeterministicMobile .forecastSparkSvg circle{filter:drop-shadow(0 1px 1px rgba(15,34,51,.12))}
@media (min-width:981px){
  body.weatherPage .forecastStatusStrip{grid-template-columns:repeat(4,minmax(0,1fr))}
  body.weatherPage .forecastSpotBoard{grid-template-columns:repeat(4,minmax(0,1fr))}
}


/* Phase 81.7 freshness + premium finish */
body.weatherDeterministicMobile .forecastControlIntro{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:flex-start}
body.weatherDeterministicMobile .forecastControlIntro strong{display:block;min-width:0}
body.weatherDeterministicMobile .forecastControlIntro span{max-width:16ch;white-space:normal;overflow-wrap:anywhere}
body.weatherDeterministicMobile .forecastToolbarSelects{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
body.weatherDeterministicMobile .forecastToolbarSelects label{min-width:0}
body.weatherDeterministicMobile .forecastToolbarSelects select{width:100%;min-width:0;font-size:.94rem;font-weight:800;line-height:1.15;text-overflow:ellipsis}
body.weatherDeterministicMobile .forecastFreshnessStrip{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:10px 12px;border-radius:16px;border:1px solid rgba(15,34,51,.08);background:#fff;box-shadow:0 8px 22px rgba(11,31,43,.04)}
body.weatherDeterministicMobile .forecastFreshnessStrip strong{font-size:.82rem;line-height:1.08;color:#17395b}
body.weatherDeterministicMobile .forecastFreshnessStrip span{font-size:.72rem;line-height:1.32;color:#587086;text-align:right}
body.weatherDeterministicMobile .forecastFreshnessStrip.tone-live{background:linear-gradient(180deg,#f7fbff,#ffffff)}
body.weatherDeterministicMobile .forecastFreshnessStrip.tone-snapshot{background:linear-gradient(180deg,#fffaf0,#ffffff)}
body.weatherDeterministicMobile .forecastFreshnessStrip.tone-delayed{background:linear-gradient(180deg,#fff4f4,#ffffff)}
body.weatherDeterministicMobile .forecastIsSnapshot .forecastHeroSnapshot{box-shadow:0 14px 34px rgba(180,83,9,.10)}
body.weatherDeterministicMobile .forecastIsDelayed .forecastHeroSnapshot{box-shadow:0 14px 34px rgba(185,28,28,.10)}
body.weatherDeterministicMobile .forecastStatusPill strong{min-height:2.2em;display:flex;align-items:flex-start}
body.weatherDeterministicMobile .forecastSummaryStrip{align-items:stretch}
body.weatherDeterministicMobile .forecastSummaryCard{min-height:126px;box-shadow:0 10px 24px rgba(11,31,43,.05)}
body.weatherDeterministicMobile .forecastSummaryCard strong{font-size:1rem;line-height:1.02}
body.weatherDeterministicMobile .forecastSummaryCard span{font-size:.8rem;line-height:1.28}
body.weatherDeterministicMobile .forecastConsoleCard{box-shadow:0 10px 24px rgba(11,31,43,.05)}
body.weatherDeterministicMobile .forecastTidePanel.is-compact .forecastTideCard{display:block}
body.weatherDeterministicMobile .forecastTidePanel.is-compact .forecastEmptyLine{min-height:auto;padding:10px 0 0;font-size:.76rem;line-height:1.45;color:#587086}
body.weatherDeterministicMobile .forecastTidePanel.is-compact .forecastConsoleCardHead small{max-width:18ch;text-align:right}
body.weatherDeterministicMobile .forecastWindowCard,.forecastDayCard,.forecastCompareCard{box-shadow:0 8px 22px rgba(11,31,43,.04)}
body.weatherDeterministicMobile .forecastWindowCard strong,body.weatherDeterministicMobile .forecastDayCard strong,body.weatherDeterministicMobile .forecastCompareCard strong{letter-spacing:-.01em}
body.weatherDeterministicMobile .forecastSpotBoardItem{min-height:92px}
@media (max-width:420px){
  body.weatherDeterministicMobile .forecastControlIntro{grid-template-columns:1fr}
  body.weatherDeterministicMobile .forecastControlIntro span{text-align:left;max-width:none}
  body.weatherDeterministicMobile .forecastToolbarSelects{grid-template-columns:1fr 1fr}
  body.weatherDeterministicMobile .forecastSummaryCard{min-height:118px}
}

body.weatherDeterministicMobile .forecastFreshnessMain{display:grid;gap:4px;min-width:0}
body.weatherDeterministicMobile .forecastRefreshButton{flex:0 0 auto;min-height:38px;padding:0 14px;border-radius:999px;border:1px solid rgba(15,34,51,.12);background:#f7fbff;color:#17395b;font-size:.78rem;font-weight:800;box-shadow:0 8px 22px rgba(11,31,43,.04)}
body.weatherDeterministicMobile .forecastRefreshButton.is-busy{opacity:.7}
body.weatherDeterministicMobile .forecastSourceLine{margin-top:8px;padding:0 2px;font-size:.72rem;line-height:1.35;color:#587086}
@media (max-width:640px){body.weatherDeterministicMobile .forecastFreshnessStrip{align-items:center}body.weatherDeterministicMobile .forecastRefreshButton{min-height:34px;padding:0 12px}}


/* Phase 81.9 compact console + route parity */
body.weatherDeterministicMobile .forecastSuperContainer{gap:10px;padding:10px;border-radius:24px}
body.weatherDeterministicMobile .forecastToolbar{gap:10px;top:68px}
body.weatherDeterministicMobile .forecastControlIntro{padding:10px 12px;border-radius:16px}
body.weatherDeterministicMobile .forecastToolbarSelects{gap:8px}
body.weatherDeterministicMobile .forecastToolbarSelects label{padding:8px 10px;border-radius:16px}
body.weatherDeterministicMobile .forecastToolbarSelects select{font-size:.92rem;min-height:34px}
body.weatherDeterministicMobile .forecastTabs{gap:6px;padding-bottom:2px}
body.weatherDeterministicMobile .forecastTabs button{min-height:36px;padding:0 12px;font-size:.78rem}
body.weatherDeterministicMobile .forecastStatusStrip{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity}
body.weatherDeterministicMobile .forecastStatusStrip::-webkit-scrollbar{display:none}
body.weatherDeterministicMobile .forecastStatusPill{flex:0 0 160px;padding:9px 11px;border-radius:14px;scroll-snap-align:start}
body.weatherDeterministicMobile .forecastStatusPill strong{min-height:auto;font-size:.8rem}
body.weatherDeterministicMobile .forecastFreshnessStrip{padding:9px 11px;border-radius:14px}
body.weatherDeterministicMobile .forecastFreshnessStrip strong{font-size:.78rem}
body.weatherDeterministicMobile .forecastFreshnessStrip span{font-size:.7rem}
body.weatherDeterministicMobile .forecastSourceLine{margin-top:2px;font-size:.68rem;line-height:1.28}
body.weatherDeterministicMobile .forecastSummaryStrip{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity}
body.weatherDeterministicMobile .forecastSummaryStrip::-webkit-scrollbar{display:none}
body.weatherDeterministicMobile .forecastSummaryCard{flex:0 0 min(74vw,252px);min-height:104px;padding:11px;border-radius:16px;scroll-snap-align:start}
body.weatherDeterministicMobile .forecastSummaryCard:last-child{grid-column:auto}
body.weatherDeterministicMobile .forecastSummaryCard strong{font-size:.96rem}
body.weatherDeterministicMobile .forecastSummaryCard span{font-size:.76rem}
body.weatherDeterministicMobile .forecastChartsDeck--overview{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:2px}
body.weatherDeterministicMobile .forecastVisualCard,body.weatherDeterministicMobile .forecastConsoleCard{padding:11px;border-radius:18px}
body.weatherDeterministicMobile .forecastMiniChart{height:72px;min-height:72px}
body.weatherDeterministicMobile .forecastMiniChart--tide{height:62px;min-height:62px}
body.weatherDeterministicMobile .forecastPaneGrid{gap:8px}
body.weatherDeterministicMobile .forecastWindowCards,body.weatherDeterministicMobile .forecastCompareCards{gap:8px}
body.weatherDeterministicMobile .forecastWindowCard,body.weatherDeterministicMobile .forecastCompareCard,body.weatherDeterministicMobile .forecastDayCard{padding:10px 11px;border-radius:16px}
body.weatherDeterministicMobile .forecastPaneActions{margin-top:0}
body.weatherDeterministicMobile .forecastPlanCards{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
body.weatherDeterministicMobile .forecastPlanCards a{min-height:88px;align-content:start}
body.weatherDeterministicMobile .forecastSpotBoard{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
body.weatherDeterministicMobile .forecastSpotBoardItem{min-height:84px;padding:10px 11px;border-radius:16px}
@media (min-width:981px){
  body.weatherPage .forecastStatusStrip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:visible;padding-bottom:0}
  body.weatherPage .forecastStatusPill{flex:initial}
  body.weatherPage .forecastSummaryStrip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));overflow:visible;padding-bottom:0}
  body.weatherPage .forecastSummaryCard{flex:initial;min-height:110px}
  body.weatherPage .forecastPlanCards{grid-template-columns:repeat(4,minmax(0,1fr))}
}

/* Phase 81.10 weather control compression */
body.weatherDeterministicMobile .forecastCompactBar{display:none}
body.weatherDeterministicMobile .forecastAccordion{border:1px solid rgba(15,34,51,.08);border-radius:18px;background:#fff;box-shadow:0 10px 24px rgba(11,31,43,.05);overflow:hidden}
body.weatherDeterministicMobile .forecastAccordion summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;cursor:pointer;font-weight:800;color:#17395b}
body.weatherDeterministicMobile .forecastAccordion summary::-webkit-details-marker{display:none}
body.weatherDeterministicMobile .forecastAccordion summary span{font-size:.9rem;line-height:1.1}
body.weatherDeterministicMobile .forecastAccordion summary small{font-size:.72rem;line-height:1.3;color:#587086;text-align:right}
body.weatherDeterministicMobile .forecastAccordion summary::after{content:'+';flex:0 0 auto;width:24px;height:24px;display:grid;place-items:center;border-radius:999px;background:#f4f8fb;color:#17395b;font-size:1rem}
body.weatherDeterministicMobile .forecastAccordion[open] summary::after{content:'−'}
body.weatherDeterministicMobile .forecastAccordionBody{padding:0 10px 10px;display:grid;gap:8px}
body.weatherDeterministicMobile .forecastAccordionBody .forecastMapCard{padding:10px 11px}
body.weatherDeterministicMobile .forecastAccordionBody .forecastChartsDeck--overview{margin-top:0}
@media (max-width:980px){
  body.weatherDeterministicMobile .forecastCompactBar{display:grid;grid-template-columns:auto 1fr;gap:8px;align-items:center}
  body.weatherDeterministicMobile .forecastCompactToggle{min-height:38px;padding:0 14px;border:1px solid rgba(15,34,51,.12);border-radius:999px;background:#f7fbff;color:#17395b;font-size:.78rem;font-weight:800;box-shadow:0 8px 22px rgba(11,31,43,.04)}
  body.weatherDeterministicMobile .forecastCompactMeta{min-width:0;padding:9px 11px;border:1px solid rgba(15,34,51,.08);border-radius:14px;background:#fff;color:#587086;font-size:.72rem;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  body.weatherDeterministicMobile .forecastToolbar{position:sticky;top:68px;z-index:18}
  body.weatherDeterministicMobile .forecastToolbarSelects{display:none}
  body.weatherDeterministicMobile .forecastToolbar.is-tune-open .forecastToolbarSelects{display:grid}
  body.weatherDeterministicMobile .forecastToolbar.is-tune-open .forecastTabs{margin-top:2px}
  body.weatherDeterministicMobile .forecastControlIntro{display:none}
  body.weatherDeterministicMobile .forecastPaneGrid--overview{grid-template-columns:1fr}
  body.weatherDeterministicMobile .forecastTidePanel{order:2}
}
@media (min-width:981px){
  body.weatherPage .forecastAccordion{display:block;border:none;box-shadow:none;background:transparent;overflow:visible}
  body.weatherPage .forecastAccordion summary{display:none}
  body.weatherPage .forecastAccordionBody{padding:0;gap:10px}
  body.weatherPage .forecastCompactBar{display:none}
}

body.weatherDeterministicMobile .forecastSheet[hidden],
body.weatherDeterministicMobile .forecastSheet:not([open]){display:none !important}
body.weatherDeterministicMobile .forecastSheet[aria-hidden="true"]{pointer-events:none}

body.weatherDeterministicMobile.forecastSheetOpen{overflow:hidden}
body.weatherDeterministicMobile .forecastSheet[hidden]{display:none !important}
body.weatherDeterministicMobile .forecastSheet{position:fixed;inset:0;z-index:1000}

body.weatherDeterministicMobile .forecastPane[data-pane-view="compare"] .forecastPaneGrid{gap:10px}
body.weatherDeterministicMobile .forecastConsoleCard--spotboard{order:-1}
body.weatherDeterministicMobile .forecastPane[data-pane-view="compare"] .forecastCompareCards{grid-template-columns:1fr}
@media (min-width: 720px){body.weatherPage .forecastPane[data-pane-view="compare"] .forecastCompareCards{grid-template-columns:repeat(3,minmax(0,1fr));}}

/* Phase 82.2 weather spacing cleanup */
body.weatherDeterministicMobile .forecastHeroMetric span,
body.weatherDeterministicMobile .forecastHeroMetric strong,
body.weatherDeterministicMobile .forecastStatusPill small,
body.weatherDeterministicMobile .forecastStatusPill strong,
body.weatherDeterministicMobile .forecastSummaryCard small,
body.weatherDeterministicMobile .forecastSummaryCard strong,
body.weatherDeterministicMobile .forecastSummaryCard span,
body.weatherDeterministicMobile .forecastSummaryCard i,
body.weatherDeterministicMobile .forecastConsoleCardHead b,
body.weatherDeterministicMobile .forecastConsoleCardHead small,
body.weatherDeterministicMobile .forecastSpotBoardItem span,
body.weatherDeterministicMobile .forecastSpotBoardItem b,
body.weatherDeterministicMobile .forecastSpotBoardItem small,
body.weatherDeterministicMobile .forecastPlanCards a strong,
body.weatherDeterministicMobile .forecastPlanCards a span,
body.weatherDeterministicMobile .forecastCompareMeta span,
body.weatherDeterministicMobile .forecastWindowCard strong,
body.weatherDeterministicMobile .forecastWindowCard span,
body.weatherDeterministicMobile .forecastWindowCard small,
body.weatherDeterministicMobile .forecastDayCard strong,
body.weatherDeterministicMobile .forecastDayCard small{display:block}

body.weatherDeterministicMobile .forecastHeroMetric{gap:6px}
body.weatherDeterministicMobile .forecastHeroMetric span{margin:0 0 1px}
body.weatherDeterministicMobile .forecastStatusPill{gap:6px}
body.weatherDeterministicMobile .forecastStatusPill strong{line-height:1.22}
body.weatherDeterministicMobile .forecastSummaryCard{gap:6px}
body.weatherDeterministicMobile .forecastSummaryCard small{line-height:1.18;margin:0}
body.weatherDeterministicMobile .forecastSummaryCard strong{line-height:1.12;margin:0}
body.weatherDeterministicMobile .forecastSummaryCard span{line-height:1.34}
body.weatherDeterministicMobile .forecastSummaryCard i{padding-top:2px}
body.weatherDeterministicMobile .forecastConsoleCardHead{gap:12px}
body.weatherDeterministicMobile .forecastConsoleCardHead small{max-width:18ch;line-height:1.3}
body.weatherDeterministicMobile .forecastSpotBoardItem{gap:6px}
body.weatherDeterministicMobile .forecastSpotBoardItem b{line-height:1.18}
body.weatherDeterministicMobile .forecastSpotBoardItem small{line-height:1.32}
body.weatherDeterministicMobile .forecastWindowCard>div,
body.weatherDeterministicMobile .forecastDayCardTop,
body.weatherDeterministicMobile .forecastCompareCardTop{gap:10px}
body.weatherDeterministicMobile .forecastWindowCard strong,
body.weatherDeterministicMobile .forecastDayCard strong,
body.weatherDeterministicMobile .forecastCompareCard strong{line-height:1.14}
body.weatherDeterministicMobile .forecastWindowCard small,
body.weatherDeterministicMobile .forecastDayCard small,
body.weatherDeterministicMobile .forecastCompareMeta span{line-height:1.34}
body.weatherDeterministicMobile .forecastCompareMeta{gap:8px 10px}
body.weatherDeterministicMobile .forecastPlanCards a{gap:6px}
body.weatherDeterministicMobile .forecastPlanCards a strong{line-height:1.14}
body.weatherDeterministicMobile .forecastPlanCards a span{line-height:1.34}
body.weatherDeterministicMobile .forecastToolbarSelects label{gap:8px}
body.weatherDeterministicMobile .forecastToolbarSelects span{display:block;line-height:1.18}
body.weatherDeterministicMobile .forecastControlIntro{row-gap:6px}

@media (min-width:981px){
  body.weatherPage .forecastSummaryCard{gap:8px}
  body.weatherPage .forecastStatusPill{gap:8px}
  body.weatherPage .forecastPlanCards a{gap:8px}
  body.weatherPage .forecastCompareMeta{gap:8px 14px}
}
