Scaffold CommiTea: yarn workspaces, Electron shell, core label schema, design system

- apps/desktop: electron-vite + React + Tailwind mapped onto design tokens
  (preflight off; tokens/base.css owns the reset); boots to a Reginald
  placeholder proving fonts/tokens/core wiring
- packages/core: pure TS; gitea label schema (est/*, p/*, deadline/hard)
  with pessimistic conflict resolution + 15 unit tests
- docs/design: full design handoff (tokens, 16 component contracts,
  interactive 14-screen prototype, Reginald voice rules)
- docs/PLAN.md: product plan (purity rule, pm-state repo, deterministic
  scheduler + Monte Carlo, directive log)
- Deliberate deviation from novelpad stack: no ElectricSQL/PGlite — local
  store is a rebuildable cache over gitea REST/webhooks (better-sqlite3
  in main process, arriving in P1)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Christian LeDoux
2026-07-07 20:42:46 -04:00
commit 7a5cacc54c
268 changed files with 15766 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
/* CommiTea typography tokens.
Voices: Display serif (headlines, big numerals) · Reginald's voice (Caslon Text, upright)
· Body sans (UI) · Mono (data: labels, estimates, dates, ids). */
:root {
--font-serif-display: 'Libre Caslon Display', 'Libre Caslon Text', Georgia, serif;
--font-serif-text: 'Libre Caslon Text', Georgia, serif;
--font-sans: 'Instrument Sans', -apple-system, 'Segoe UI', sans-serif;
--font-mono: 'IBM Plex Mono', ui-monospace, 'SF Mono', monospace;
/* type scale */
--text-hero: 400 48px/1.08 var(--font-serif-display); /* big forecast numerals */
--text-display: 400 34px/1.15 var(--font-serif-display); /* page titles */
--text-title: 400 24px/1.2 var(--font-serif-display); /* card titles */
--text-agent: 400 16px/1.55 var(--font-serif-text); /* Reginald speaks — serif, upright */
--text-agent-lg: 400 20px/1.5 var(--font-serif-text);
--text-body: 400 14px/1.5 var(--font-sans);
--text-body-strong: 600 14px/1.5 var(--font-sans);
--text-small: 400 13px/1.45 var(--font-sans);
--text-caption: 400 12px/1.4 var(--font-sans);
--text-data: 400 13px/1.4 var(--font-mono); /* dates, counts */
--text-label: 500 11.5px/1 var(--font-mono); /* chips: est/2d, p/1 */
--text-overline: 600 11px/1.2 var(--font-sans); /* + letter-spacing-wide */
/* tracking */
--letter-spacing-wide: 0.08em; /* overlines, uppercase */
--letter-spacing-label: 0.02em; /* mono chips */
/* weights (sans is variable 400700) */
--weight-regular: 400;
--weight-medium: 500;
--weight-semibold: 600;
--weight-bold: 700;
}