// After:
```
[VERIFIED: src/pages/DashboardPage.tsx lines 186, 207]
---
## State of the Art
| Old Approach | Current Approach | When Changed | Impact |
|--------------|------------------|--------------|--------|
| Separate `--color-chart-*` variables | Reference `--color-*-fill` directly | This phase | Eliminates color duplication; single source of truth per category |
| `--radius: 0.625rem` | `--radius: 0` | This phase | All shadcn components become sharp-cornered |
| Fill chroma 0.18-0.20 | Fill chroma 0.22+ | This phase | Visually saturated pastels that read as colorful, not grey |
| `gap-6` / `space-y-6` sections | `gap-8` / `space-y-8` | This phase | More generous breathing room between content sections |
---
## Assumptions Log
| # | Claim | Section | Risk if Wrong |
|---|-------|---------|---------------|
| A1 | Sonner toast `--border-radius: var(--radius)` inline style in sonner.tsx will propagate `--radius: 0` correctly without additional CSS override | Pitfall 3 / Pattern 2 | If wrong, toasts remain rounded; mitigation: add `[data-sonner-toast] { border-radius: 0 !important }` as CSS override |
| A2 | CSS `rx: 0; ry: 0` on `.recharts-rectangle` overrides SVG presentation attributes cross-browser | Pitfall 2 | If wrong, bars may still show rounding in some browsers; mitigation: change `radius` prop to 0 on `` (reliable) |
| A3 | No `--color-chart-*` references exist in any TSX file (confirmed by grep returning zero results) | Don't Hand-Roll | LOW risk — grep confirmed no TSX references |
---
## Open Questions
1. **Sonner version 2.x selector name for border-radius override**
- What we know: Sonner 2.0.7 is installed; `[data-sonner-toast]` is the conventional selector from v1/v2
- What's unclear: Whether v2.x changed the data attribute name on the toast wrapper
- Recommendation: Verify in browser devtools after `--radius: 0` change; if toasts remain rounded, inspect the DOM element for the correct attribute selector
2. **`space-y-6` vs `gap-6` on TemplatePage and BudgetDetailPage**
- What we know: These pages use `space-y-6` for section stacking (not `gap-*` which requires flex/grid parent)
- What's unclear: Whether changing `space-y-6` → `space-y-8` alone is sufficient or whether the wrapping flex container also needs `gap-8`
- Recommendation: Apply `space-y-8` where currently `space-y-6`; apply `gap-8` where currently `gap-6` in flex/grid containers — both changes are needed depending on context
---
## Environment Availability
Step 2.6: SKIPPED — Phase 5 is purely CSS/TSX file edits with no external dependencies, database changes, or CLI tools beyond the existing Vite dev server.
---
## Validation Architecture
### Test Framework
| Property | Value |
|----------|-------|
| Framework | None detected — no jest.config.*, vitest.config.*, pytest.ini found |
| Config file | None — Wave 0 gap |
| Quick run command | `npm run build` (TypeScript compile check) |
| Full suite command | Manual visual pass across 9 pages in browser |
### Phase Requirements → Test Map
| Req ID | Behavior | Test Type | Automated Command | File Exists? |
|--------|----------|-----------|-------------------|-------------|
| DS-01 | No rounded corners visible anywhere | Manual (visual) | `npm run build` (compile check only) | N/A — visual |
| DS-02 | Category fills visibly colorful, not washed out | Manual (visual) | `npm run build` | N/A — visual |
| DS-03 | Generous whitespace, no visual crowding | Manual (visual) | `npm run build` | N/A — visual |
### Sampling Rate
- **Per task commit:** `npm run build` — confirms no TypeScript errors
- **Per wave merge:** `npm run build` + manual browser check of affected pages
- **Phase gate:** Full 9-page visual pass per the UI-SPEC checklist before `/gsd-verify-work`
### Wave 0 Gaps
- [ ] No unit/integration test infrastructure exists — this phase is purely visual; manual browser verification is the acceptance gate
- [ ] Consider running `npm run lint` as a secondary automated check
---
## Security Domain
Security enforcement: not applicable. Phase 5 introduces zero new features, endpoints, authentication flows, user input handling, or data access. No ASVS categories apply. This is a pure CSS token and spacing change.
---
## Sources
### Primary (HIGH confidence)
- `src/index.css` (codebase) — Full token inventory, current `--radius` value, all OKLCH color values, `--color-chart-*` variables
- `src/components/ui/` (codebase) — shadcn component source confirming `rounded-*` class usage, `sonner.tsx` Toaster inline style wiring
- `src/components/dashboard/charts/` (codebase) — Recharts `Bar` radius prop values, ChartConfig objects, Cell fill patterns
- `src/pages/` (codebase) — All 9 pages audited for `gap-*`, `space-y-*`, `rounded-*` classes
- `05-UI-SPEC.md` (project planning) — Confirmed post-rework color values, spacing targets, component inventory
### Secondary (MEDIUM confidence)
- Tailwind CSS 4 `@theme inline` documentation — `rounded-md` etc. derive from `--radius` token; `rounded-full` does not
### Tertiary (LOW confidence — A1, A2 in assumptions log)
- Sonner 2.x data attribute selector name (`[data-sonner-toast]`) — based on conventional usage; verify in browser
- Recharts CSS `rx`/`ry` override cross-browser behavior — recommend prop change as primary approach
---
## Metadata
**Confidence breakdown:**
- Token edit scope (index.css): HIGH — full file read, all variables inventoried
- Hardcoded rounded-* inventory: HIGH — exhaustive grep of src/pages + src/components
- Spacing upgrade targets: HIGH — grep confirmed current class values in all 9 pages
- Third-party overrides (Recharts, Sonner): MEDIUM — prop-based fix is reliable; CSS override selector needs browser verification
- Color OKLCH values: HIGH — values provided in CONTEXT.md and UI-SPEC.md
**Research date:** 2026-04-20
**Valid until:** 2026-05-20 (stable stack — Tailwind 4, Recharts 2.15, Sonner 2.x)