.forecast-feature{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:2.5rem;align-items:center;border-top:2px solid var(--accent);border-bottom:1px solid var(--line);padding:var(--space-lg) 0 2.5rem}
.forecast-intro .eyebrow{color:var(--accent);margin-bottom:1rem}
.forecast-intro h3{font-size:clamp(2rem,3.2vw,3rem);line-height:1.12;max-width:15ch}
.forecast-intro>p:not(.eyebrow){font-family:var(--display);font-size:1rem;line-height:1.7;color:var(--muted);margin-top:1.2rem}
.forecast-stats{display:flex;flex-wrap:wrap;gap:var(--space-md);margin:1.4rem 0 0;padding:0}
.forecast-stats div{display:flex;flex-direction:column}.forecast-stats dt{font-family:var(--display);font-size:1.75rem;font-weight:700;color:var(--accent)}.forecast-stats dd{margin:0;font:.875rem/1.5 var(--display);color:var(--muted)}
.forecast-tabs{display:flex;flex-wrap:wrap;gap:.25rem;margin-top:.8rem}.forecast-tabs[hidden]{display:none}
.forecast-tabs button{background:transparent;color:var(--muted);font:.875rem/1.4 var(--display);min-height:44px;padding:.6rem .8rem;border:1px solid transparent;border-bottom:2px solid var(--line);cursor:pointer}
.forecast-tabs button[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent);font-weight:bold}
.forecast-tabs button:focus-visible,.forecast-panel:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
.forecast-panel[hidden]{display:none}.forecast-panel figure{margin:0}.forecast-media{display:flex;align-items:center;justify-content:center;background:var(--mat);aspect-ratio:1.55;overflow:hidden;border:1px solid var(--line)}
.forecast-media img{width:100%;height:100%;object-fit:contain}.forecast-media.sponsor{padding:1rem;background:var(--mat);aspect-ratio:.72;max-height:min(78vh,680px);max-width:calc(min(78vh,680px)*.72);margin-inline:auto}.forecast-media.sponsor img{width:auto;max-width:100%;box-shadow:0 4px 18px #0002}.forecast-media.timeline{padding:.65rem;background:var(--mat)}
.forecast-panel figcaption{font:.875rem/1.65 var(--display);color:var(--muted);margin-top:.8rem;min-height:7rem}.forecast-panel figcaption a{display:inline-block;margin-top:.3rem;color:var(--accent)}.forecast-panel .visual-year{display:block;font:700 .8125rem/1.5 var(--display);letter-spacing:.12em;text-transform:uppercase;margin-bottom:.4rem}
.forecast-gallery{min-width:0}.forecast-gallery>div:not([hidden])+div[data-forecast-panel]{margin-top:1rem}
.sponsor-controls{display:flex;align-items:center;justify-content:center;gap:1rem;margin-top:.65rem}.sponsor-controls[hidden]{display:none}.sponsor-controls button{min-height:44px;min-width:44px;padding:.5rem .8rem;border:1px solid var(--line);background:var(--paper);color:var(--accent);font:.875rem/1.4 var(--display);cursor:pointer}.sponsor-controls button:disabled{opacity:.4;cursor:default}.sponsor-controls button:focus-visible{outline:3px solid var(--accent);outline-offset:3px}.sponsor-controls output{font:.875rem/1.4 var(--display);font-variant-numeric:tabular-nums;min-width:4rem;text-align:center;color:var(--ink)}
.forecast-story{max-width:850px;padding-block:3rem 5rem}.forecast-story h1{font-size:clamp(2.6rem,5.8vw,4.9rem);line-height:1.08;letter-spacing:-.05em;margin:var(--space-md) 0}
.forecast-story .story-deck{font:1.125rem/1.7 var(--display);color:var(--muted);margin-bottom:var(--space-md)}.forecast-story h2{font-size:clamp(1.65rem,3vw,2.15rem);margin:2.8rem 0 1rem;line-height:1.25}
.forecast-story p,.forecast-story li{font:1rem/1.8 var(--display);color:var(--muted)}.forecast-story p+p{margin-top:1rem}.forecast-story strong{color:var(--ink)}.forecast-story ul{padding-left:1.3rem}.forecast-story li+li{margin-top:.5rem}
.forecast-story .forecast-gallery{margin:var(--space-lg) 0}.forecast-story .forecast-media{aspect-ratio:1.8}.forecast-story .forecast-panel figcaption{min-height:0}.forecast-story .story-scope{border-left:3px solid var(--accent);padding-left:1rem;margin:1.8rem 0}.forecast-story .source-note{font-size:.875rem;border-top:1px solid var(--line);padding-top:1.2rem;margin-top:3rem}
.forecast-story .table-scroll{overflow-x:auto}.forecast-story table{width:100%;border-collapse:collapse;font:.9375rem/1.6 var(--display);margin:var(--space-md) 0}.forecast-story th,.forecast-story td{text-align:left;padding:.75rem;border-bottom:1px solid var(--line);vertical-align:top}.forecast-story th{color:var(--accent)}
[data-theme=dark] .forecast-intro .button{background:var(--accent);color:var(--paper)}

@media(max-width:800px){.forecast-feature{grid-template-columns:minmax(0,1fr);gap:var(--space-md)}.forecast-intro{grid-row:1}.forecast-intro h3{max-width:22ch}.forecast-panel figcaption{min-height:0}.forecast-story{padding-top:var(--space-lg)}.forecast-story .forecast-media{aspect-ratio:1.4}.forecast-tabs button{padding:.6rem}.forecast-stats{gap:1rem}}
@media(prefers-reduced-motion:reduce){.forecast-feature *{scroll-behavior:auto}}

/* Four project highlights, with room for their labels. */
.forecast-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.3rem 1.5rem}
@media(max-width:400px){.forecast-stats{grid-template-columns:minmax(0,1fr)}}

/* Long-form prose uses the portfolio's EB Garamond body face. */
.forecast-story p,.forecast-story li,.forecast-story .story-deck,.forecast-story .forecast-panel figcaption{font-family:var(--font);font-size:1.25rem;line-height:1.65}
.forecast-story .story-deck{font-size:1.5rem}
.forecast-story .section-label{text-transform:uppercase;font:700 .8rem/1.5 var(--display);letter-spacing:.12em;color:var(--accent);margin-top:2.5rem}
.forecast-story section>.section-label+h2{margin-top:.6rem}
.forecast-story h3{font:600 clamp(1.2rem,2.5vw,1.5rem)/1.35 var(--display);margin:var(--space-lg) 0 .8rem;letter-spacing:-.02em}
.forecast-story .story-slides{margin:var(--space-lg) 0}
.forecast-story .forecast-stats+p{margin-top:1.25rem}
/* The campaign slides are portrait documents. Every other frame rule here is
   landscape, including one inside the 800px block, so this needs the extra
   class to win on specificity rather than relying on order. */
.forecast-story .forecast-media.sponsor{aspect-ratio:.72;max-height:min(78vh,680px);max-width:calc(min(78vh,680px)*.72);margin-inline:auto}
.forecast-story .forecast-media.timeline{aspect-ratio:1.5}
