# Plan: CSS migration — Tailwind + DaisyUI to modern hand-written CSS Status: Complete (all phases 0-8). Admin CSS semantic refactor in progress — see PROGRESS.md. ## Overview Replace Tailwind CSS v4 and DaisyUI with a modern, layered CSS system using `@layer`, native nesting, container queries, `oklch()`, `@property`, and other 2024+ CSS features. Zero framework dependencies. Smaller output. Full cascade control. ## Final state (post Phase 7) | Bundle | Minified | Gzipped | Contents | |--------|----------|---------|----------| | `shop.css` | 54.1 KB | 9.8 KB | Hand-written component CSS + three-layer theme | | `admin.css` | 90.8 KB | 17.8 KB | Utility CSS + themes + heroicon data URIs | | `app.js` | 139.2 KB | 42.9 KB | LiveView + hooks | Zero framework dependencies. No Tailwind, no DaisyUI, no PostCSS plugins. Three esbuild profiles handle all asset builds. Three root layouts isolate CSS: - `shop_root.html.heex` loads `shop.css` - `root.html.heex` loads `admin.css` (auth pages) - `admin_root.html.heex` loads both `admin.css` + `shop.css` ## Pre-migration state (for reference) | Bundle | Compiled | Contents | |--------|----------|----------| | `app-shop.css` | **53 KB** | Tailwind v4 (no DaisyUI) + three-layer theme | | `app.css` | **212 KB** | Tailwind v4 + DaisyUI + three-layer theme | 281 `style=` attributes across 10 files. All removed in Phases 2-4. **Three-layer theme system** (1,130 lines) preserved throughout: - Primitives (94 lines): `:root` tokens - Attributes (717 lines): `.themed` + `data-*` selectors - Semantic (319 lines): aliases, accessibility, component styles **CSSGenerator** (Elixir): generates inline `