Files
SixFlagsSuperCalendar/components/Legend.tsx
josh e48038c399
Some checks failed
Build and Deploy / Build & Push (push) Failing after 22s
feat: UI redesign with park detail pages and ride status
Visual overhaul:
- Warmer color system with amber accent for Today, better text hierarchy
- Row hover highlighting, sticky column shadow on horizontal scroll
- Closed cells replaced with dot (·) instead of "Closed" text
- Regional grouping (Northeast/Southeast/Midwest/Texas & South/West)
- Two-row header with park count badge and WeekNav on separate lines
- Amber "Today" button in WeekNav when off current week
- Mobile card layout (< 1024px) with 7-day grid per park; table on desktop
- Skeleton loading state via app/loading.tsx

Park detail pages (/park/[id]):
- Month calendar view with ← → navigation via ?month= param
- Live ride status fetched from Six Flags API (cached 1h)
- Ride hours only shown when they differ from park operating hours
- Fallback to nearest upcoming open day when today is dropped by API,
  including cross-month fallback for end-of-month edge case

Data layer:
- Park type gains region field; parks.ts exports groupByRegion()
- db.ts gains getParkMonthData() for single-park month queries
- sixflags.ts gains scrapeRidesForDay() returning RidesFetchResult
  with rides, dataDate, isExact, and parkHoursLabel

Removed: CalendarGrid.tsx, MonthNav.tsx (dead code)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 11:53:06 -04:00

34 lines
1.2 KiB
TypeScript

export function Legend() {
return (
<div style={{
display: "flex",
alignItems: "center",
gap: 16,
fontSize: "0.72rem",
color: "var(--color-text-muted)",
flexShrink: 0,
}}>
<span style={{ display: "flex", alignItems: "center", gap: 5 }}>
<span style={{
display: "inline-block", width: 28, height: 14, borderRadius: 3,
background: "var(--color-open-bg)", border: "1px solid var(--color-open-border)",
}} />
Open
</span>
<span style={{ display: "flex", alignItems: "center", gap: 5 }}>
<span style={{
display: "inline-block", width: 28, height: 14, borderRadius: 3,
background: "var(--color-ph-bg)", border: "1px solid var(--color-ph-border)",
}} />
Passholder
</span>
<span style={{ display: "flex", alignItems: "center", gap: 6 }}>
<span style={{ color: "var(--color-text-dim)" }}>·</span>
<span style={{ color: "var(--color-text-dim)" }}>Closed</span>
<span style={{ color: "var(--color-border)" }}>·</span>
<span style={{ color: "var(--color-text-dim)" }}> no data</span>
</span>
</div>
);
}