feat(ui): add month view with income entry and post table

Negative remaining balances are shown in a warning treatment; nothing
blocks going over budget.

Applies the Tasks 18-23 design contract: --paper/--ink/--rule/--accent/
--surplus/--overspend tokens and the three type-role font variables in
src/index.css, --font-money on every money figure, and the carry meter
(a 3px hard-stopped gradient beneath each PostTable row) encoding
carried-in surplus, allocation track, spend fill and overrun.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Lucas WintherandClaude Opus 5 committed 2026-09-01 20:35:35 +02:00
1 parent ccb97818d7
commit dd612565cb
16 files changed
+914 -75

No files matched your search

+48
View File
@@ -1,5 +1,25 @@
@import "../styles/globals.css";
/*
* Design contract tokens (Tasks 18-23).
* See .superpowers/sdd/2026-09-01-budget-app/design-contract.md
*
* Deliberately unlayered (not inside @layer base) so it wins the cascade
* over the shadcn defaults imported above, which are also unlayered.
*/
:root {
--paper: #f2f4f6; /* cool statement-paper ground, NOT cream */
--ink: #16212b; /* ink navy, primary text */
--rule: #d8dee4; /* hairlines, table borders */
--accent: #0f6e63; /* muted teal: links, primary actions, spend fill */
--surplus: #2f6f4e; /* carried-forward surplus */
--overspend: #a6402b; /* ochre-red: negative balances only */
--font-display: ui-sans-serif, "Segoe UI Variable Display", system-ui, sans-serif;
--font-body: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--font-money: ui-monospace, "SF Mono", "Cascadia Mono", "Roboto Mono", monospace;
}
@layer base {
:root {
@apply font-sans;
@@ -7,6 +27,34 @@
body {
@apply grid place-items-center min-w-[320px] min-h-screen relative m-0 bg-background text-foreground;
font-family: var(--font-body);
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: var(--font-display);
font-weight: 650;
letter-spacing: -0.02em;
}
}
@layer utilities {
/* Applied to every money figure: mono face, tabular digits. */
.font-money {
font-family: var(--font-money);
font-variant-numeric: tabular-nums;
}
.text-overspend {
color: var(--overspend);
}
.text-surplus {
color: var(--surplus);
}
}