⛈️ Storm Watch

{#if storm.updatedAt} Updated {clock(new Date(storm.updatedAt).toISOString())} {:else if storm.loading} Checking watches, outlook and reports… {:else} Watches, severe-weather outlook and recent reports {/if}

{#if storm.error}
{storm.error}
{/if}
⚠️ Active alerts {#if alerts.length}{alerts.length}{/if}
{#if alerts.length} {:else if storm.loading && !storm.updatedAt}
Checking for active alerts…
{:else}
✅ No active watches, warnings or advisories
{/if}
🌪️ Severe-weather outlook
{#if outlook}
{#each [['day1', 'Today'], ['day2', 'Tomorrow'], ['day3', 'Day 3']] as [key, label] (key)} {@const r = outlookDay(key)} {#if r}
{label} {r.short} {r.label}
{/if} {/each}
{#if (outlook.probabilities?.tornado || outlook.probabilities?.wind || outlook.probabilities?.hail)}
🌪️ {outlook.probabilities.tornado}% tornado
💨 {outlook.probabilities.wind}% wind
🧊 {outlook.probabilities.hail}% hail
Day 1 probability of severe weather within 25 miles of this point.
{:else if outlook.day1.key === 'NONE'}
No severe-weather area covers this location right now.
{/if} {#if issuedLabel}
SPC Day 1 outlook issued {issuedLabel} · updates ~4× daily
{/if} {:else if !storm.hasUsCoverage}
SPC outlooks cover the United States only.
{:else if storm.loading}
Loading outlook…
{:else}
Outlook unavailable right now.
{/if}
📍 Recent reports {#if reports.length}{reports.length}{/if}
{#if reports.length}
Past 24 hours within {distance(160)} · nearest first
{#if reports.length > maxReports}
+{reports.length - maxReports} more reports nearby
{/if} {:else if !storm.hasUsCoverage}
Local Storm Reports cover the United States only.
{:else if storm.loading && !storm.updatedAt}
Loading recent reports…
{:else}
✅ No storm reports within {distance(160)} in the last 24 hours
{/if}
Reports: NWS Local Storm Reports via Iowa Environmental Mesonet · Outlook: NOAA Storm Prediction Center