CMS: Fjord
Theme: Nordic
Module Set: extended
Date: 2026-04-04

## Prompt
Generate a complete, self-contained single-file CMS administration panel named "Fjord". It must be a pure vanilla JS client-side SPA with state persisted entirely in `sessionStorage` under the key `cms_state`.
The layout should use a Nordic visual theme (minimalist, lots of whitespace, muted cool grays, slate blues, clean typography with sans-serif fonts, subtle borders, no heavy shadows).

Architecture:
- Single HTML file (no external CSS/JS, no frameworks).
- `sessionStorage` state hydration on load. If empty, generate a realistic set of seed data.
- Hash-based SPA router listening to `hashchange`.

Data Model & Seed Data:
- Posts (12 items): id, title, slug, content, status (draft/published/trash), author_id, category_ids, created_at. Real-sounding titles like "Embracing Stillness in Design".
- Pages (5 items): Home, About, Contact, Privacy, Terms.
- Categories (8 items): Hierarchy (e.g. Design -> Minimalism).
- Tags (15 items).
- Comments (10 items): approved/pending/spam. Threaded replies.
- Users (3 items): Admin, Editor, Author.
- Media (8 items): Fake file records.
- Settings: Site title ("Fjord Demo"), etc.

Routes (Extended Module Set):
- `#/dashboard`: Stats cards, activity log, recent comments.
- `#/posts`: Sortable table, status badges, bulk actions, search.
- `#/posts/new` & `#/posts/edit/:id`: Form with title, slug, content (rich text contenteditable), category checkboxes.
- `#/pages`, `#/pages/new`, `#/pages/edit/:id`: Similar to posts but hierarchical.
- `#/categories`: Inline add/edit.
- `#/tags`: Inline add/edit.
- `#/media`: Grid view of fake files.
- `#/comments`: Moderation list (approve/spam/trash).
- `#/users`, `#/users/edit/:id`: User management.

Visual & Interaction Quality:
- Collapsible sidebar, fixed top bar with user dropdown.
- Tables with hover states, pagination or counts.
- Toast notifications (success/error/warning).
- Confirmation modals for deletes.
- Optimistic updates.
- Loading skeletons (shimmer effect for 200-300ms on route change).
- Empty states with stylized messages.

Code must be 100% complete, no truncation, no "rest of code here" comments. Write out the entire CSS and JS logic.

## Notes
Chose the Nordic theme to emphasize clarity and focus, fitting for a modern headless CMS feel.
Included robust seeding logic so the CMS feels immediately lived-in.

## Seed Data Summary
- Posts: 12
- Pages: 5
- Categories: 8
- Tags: 15
- Comments: 10
- Users: 3
- Media: 8