<!-- source-hash: bdbe45fc465896066574c96cffcccb6f -->
Timezone-safe date formatting utilities providing a single source of truth for consistent date display across the application. All functions parse ISO date strings via string splitting to avoid `new Date()` UTC-to-local timezone shifts.

## Key Components

| Export | Output Example | Use Case |
|--------|---------------|----------|
| `formatReleaseDate` | `"November 11, 2025"` | Release dates, long-form display |
| `formatDateShort` | `"Jan 5, 2025"` | Admin cards (waitlist, publication, media, investor, campaign) |
| `formatDateSlashUTC` | `"11/11/2025"` | Product release & customer interview cards |

**Internal helper:** `splitYmd(dateString)` — splits ISO date/datetime strings into `[year, month, day]` without constructing a `Date` object, preventing the off-by-one day bug west of UTC.

## Usage Example

```typescript
import { formatReleaseDate, formatDateShort, formatDateSlashUTC } from './date-formatters'

// ISO date-only string
formatReleaseDate('2025-11-11')      // → "November 11, 2025"
formatDateShort('2025-01-05')        // → "Jan 5, 2025"
formatDateSlashUTC('2025-11-11')     // → "11/11/2025"

// ISO datetime strings also work (time component is ignored)
formatDateShort('2025-06-20T14:30:00Z')  // → "Jun 20, 2025"
```

> **Why not `new Date()`?** Passing `"2025-11-11"` to `new Date()` creates a UTC midnight timestamp. In timezones west of UTC, `.getMonth()` / `.getDate()` resolve to the *previous* day. String splitting eliminates this class of bug entirely.