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,137 @@
/* CommiTea color system — "Green tea service"
Cool porcelain surfaces, slate-green ink, jade accent (from the cup itself).
Light is default (morning service). Dark scope: [data-theme="dark"] (evening service). */
:root {
/* ---- base: porcelain (cool green-white surfaces) ---- */
--paper-0: #F0F4F0; /* app background */
--paper-1: #FAFCF9; /* raised card */
--paper-2: #E4EBE4; /* inset wells, rails */
--paper-3: #D7E1D8; /* pressed / deep inset */
/* ---- base: ink (slate-green text scale) ---- */
--ink-1: #1D2522; /* primary text */
--ink-2: #51605A; /* secondary text */
--ink-3: #84928B; /* muted / placeholder */
--ink-inverse: #EFF5F0;
/* ---- base: lines ---- */
--line-1: #D7DFD7; /* hairline */
--line-2: #BACBBE; /* strong rule */
/* ---- base: spruce (brand green — the logo's slate-teal) ---- */
--spruce-9: #16322A;
--spruce-8: #1D4238;
--spruce-7: #275546; /* brand anchor */
--spruce-6: #3A7260;
--spruce-5: #57937C;
--spruce-3: #A3CFBB;
--spruce-2: #CDE5D7;
--spruce-1: #E3F0E8;
/* ---- base: jade (mint accent — the tea itself) ---- */
--jade-7: #2E7A57;
--jade-6: #46996F;
--jade-5: #66B389;
--jade-3: #A8DDBE;
--jade-1: #E0F4E7;
/* ---- semantic: surfaces & text ---- */
--surface-app: var(--paper-0);
--surface-card: var(--paper-1);
--surface-inset: var(--paper-2);
--surface-raised: var(--paper-1);
--text-body: var(--ink-1);
--text-secondary: var(--ink-2);
--text-muted: var(--ink-3);
--text-on-accent: var(--ink-inverse);
--border-hairline: var(--line-1);
--border-strong: var(--line-2);
/* ---- semantic: interactive ---- */
--accent: var(--spruce-7);
--accent-hover: #1F4A3C;
--accent-pressed: #173B30;
--accent-tint: var(--spruce-1);
--accent-text: var(--spruce-7);
--jade: var(--jade-6);
--jade-tint: var(--jade-1);
--focus-ring: #57937C;
/* ---- semantic: status ---- */
--ok: #2F7D53;
--ok-tint: #DFEEE3;
--warn: #96772A;
--warn-tint: #EFE9D2;
--danger: #A84632;
--danger-tint: #F2E0DA;
--info: #43758F;
--info-tint: #DFE9EC;
/* ---- domain: label chips (gitea label sets) ---- */
--label-est-bg: var(--paper-2);
--label-est-text: var(--ink-2);
--label-p1: #A84632;
--label-p2: #96772A;
--label-p3: #43758F;
--label-p4: #84928B;
--label-hard: #A84632;
/* ---- domain: forecast ---- */
--cone-fill: rgba(102, 179, 137, 0.18);
--cone-line: #46996F;
--cone-actual: var(--ink-1);
}
[data-theme="dark"] {
/* evening service */
--paper-0: #121C18;
--paper-1: #182420;
--paper-2: #1F2E28;
--paper-3: #283A32;
--ink-1: #E4EEE7;
--ink-2: #9FB2A8;
--ink-3: #66796F;
--ink-inverse: #EFF5F0;
--line-1: #263630;
--line-2: #35493F;
--spruce-1: #1E332B;
--spruce-2: #27443A;
--spruce-3: #3A6353;
--jade-1: #1F3A2E;
--jade-3: #35624A;
--accent: #3A7260;
--accent-hover: #448069;
--accent-pressed: #315F51;
--accent-tint: #1E332B;
--accent-text: #8CC7AC;
--jade: #6FC694;
--jade-tint: #1F3A2E;
--focus-ring: #57937C;
--ok: #74B992;
--ok-tint: #1F3529;
--warn: #C0A45B;
--warn-tint: #33301F;
--danger: #C77B62;
--danger-tint: #392823;
--info: #7FA6BC;
--info-tint: #223038;
--label-est-bg: var(--paper-3);
--label-est-text: var(--ink-2);
--label-p1: #C77B62;
--label-p2: #C0A45B;
--label-p3: #7FA6BC;
--label-p4: #66796F;
--label-hard: #C77B62;
--cone-fill: rgba(111, 198, 148, 0.14);
--cone-line: #6FC694;
--cone-actual: #E4EEE7;
}