Tailwind v4 does not derive --radius-xs through --radius-3xl from --radius.
The named scale is independent, so Cards (rounded-xl), Buttons (rounded-md),
etc. retained non-zero border-radius despite --radius: 0. Adding all scale
tokens as 0 ensures complete sharp-corner cascade.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- DashboardPage: space-y-6->space-y-8, gap-6->gap-8 in chart grid
- BudgetListPage: remove rounded-md from template toggle row
- BudgetDetailPage: remove rounded-sm/md from skeleton and group headings, rounded-md from summary box, rounded-full from category dot
- TemplatePage: remove rounded-sm/full/md from skeleton and group headings and category dot; gap-6->gap-8, space-y-6->space-y-8
- CategoriesPage: remove rounded-sm/full/md from skeleton and group headings; space-y-6->space-y-8
- QuickAddPage: remove rounded-full/md from skeleton items
- SettingsPage: space-y-4->space-y-6 in CardContent (skeleton and live)
- SpendBarChart: set radius={0} on both Bar elements (was radius={4})
- IncomeBarChart: set radius={0} on both Bar elements (was radius={[4,4,0,0]})
- ExpenseDonutChart: remove rounded-full from legend color dot className
- Set --radius: 0 for sharp-cornered design system cascade
- Warm background chroma from 0.005 to 0.01
- Delete --color-chart-1 through --color-chart-5 (redundant with fill vars)
- Raise fill chroma to 0.22+ for vibrant pastel category colors
- Add .recharts-rectangle and [data-sonner-toast] radius overrides
- Replace TierBadge and tier column with cleaner per-category grouping display
- Rewrite DifferenceCell with direction-aware diff logic (spending types: over when actual > budgeted; income/saving/investment: over when actual < budgeted)
- Replace text-green-600/text-red-600 with text-on-budget/text-over-budget semantic tokens
- Replace dot+h2 group headers with left-border accent headers matching dashboard style
- Fix headingLabel to use i18n.language via Intl.DateTimeFormat instead of hardcoded 'en'
- Wrap page in PageShell with locale-aware title and Add Item action button
- Add back-link as first child of PageShell with -mt-4 compensation
- Replace null loading state with PageShell + Skeleton groups
- Update group footer total label to use budgets.total i18n interpolation key
- Replace hardcoded MONTHS array with Intl.DateTimeFormat locale-aware monthItems useMemo
- Update budgetLabel helper to accept locale parameter and use Intl.DateTimeFormat
- Replace null loading state with PageShell + Skeleton rows
- Replace manual header with PageShell title and action prop
- Replace hardcoded 'Month'/'Year' Labels with t('budgets.month')/t('budgets.year')
- Add month/year/total keys to en.json and de.json budgets namespace
- CategoriesPage: adopt PageShell for header with title and Add Category button
- CategoriesPage: replace return null with skeleton loading state
- CategoriesPage: upgrade dot group headers to left-border accent style
- TemplatePage: mirror PageShell layout (flex-col gap-6) for inline-editable header
- TemplatePage: replace return null with skeleton loading state
- TemplatePage: upgrade dot group headers to left-border accent style
- TemplateName h1: add tracking-tight to match PageShell h1 style
- LoginPage and RegisterPage redesigned with muted bg, card accent, logo, subtitle
- Google and GitHub SVG provider icons added to OAuth buttons
- auth.loginSubtitle and auth.registerSubtitle keys in en.json and de.json
- STATE.md updated with position, decisions, metrics
- ROADMAP.md updated with Phase 4 progress (1/3 plans complete)
- Change background from bg-background to bg-muted/60
- Add border-t-4 border-t-primary shadow-lg card accent
- Add favicon.svg logo above CardTitle
- Add auth.registerSubtitle below title
- Add pb-4 to CardHeader for consistent spacing with LoginPage
- Change background from bg-background to bg-muted/60
- Add border-t-4 border-t-primary shadow-lg card accent
- Add favicon.svg logo above CardTitle
- Add auth.loginSubtitle below title
- Add Google SVG icon and GitHub SVG icon to OAuth buttons
- Add gap-2 to OAuth button className for icon/text spacing
- Add auth.loginSubtitle and auth.registerSubtitle to en.json and de.json
- Add CATEGORY_TYPES_ALL constant and isOverBudget direction-aware helper
- Derive groupedSections via useMemo (filters empty groups, computes totals)
- Initialize openSections state with smart defaults (over-budget expanded)
- State resets on month navigation via key={budgetId} on DashboardContent
- Insert CollapsibleSections between chart grid and QuickAdd
- Add skeleton placeholders for collapsible sections area in DashboardSkeleton
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>