⛈️ 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}
{storm.loading ? '⏳' : '↻'}
{#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}
{/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}
{/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}