chore(v0.6): checkpoint foundation — Amber theme, P1 types, P3 config, design docs

Prior-session prep for the v0.6 Project Manager, checkpointed on the
v0.6-projects branch as a clean base for the parallel builders:

- P1 (src/types.ts): ProjectInfo + ProjectSessionRef contracts; Config
  gains projectRoots/projectScanDepth/projectScanTtlMs/projectDirtyCheck.
- P3 (src/config.ts): parseBool + parseProjectRoots helpers; parse the
  4 PROJECT_* env vars with defaults ([homeDir]/4/10000/true).
- UI: public/style.css indigo -> Amber (#e3a64a) accent theme.
- Docs: FEATURE_PROJECT_MANAGER.md (1:N session design), THEME.md,
  docs/mockups/ (final-amber.png is the locked visual).

Typecheck (backend + web) green. No behavior change to runtime code yet;
P2/P4/P5/P6 implement the feature on top of this.
This commit is contained in:
Yaojia Wang
2026-06-30 10:05:40 +02:00
parent f9964a517d
commit dc5d073374
16 changed files with 1073 additions and 23 deletions

View File

@@ -1,22 +1,23 @@
/* Web Terminal — modern dark UI */
:root {
/* palette (design tokens) */
--bg: #0e0f13; /* terminal / deepest surface */
--surface-1: #15161c; /* tab bar, key bar */
--surface-2: #1c1e26; /* tabs, buttons, cards */
--surface-3: #252834; /* hover / active */
/* palette (design tokens) — Amber 琥珀金 theme (warm-neutral base + gold accent) */
--bg: #100f0d; /* terminal / deepest surface — warm near-neutral */
--surface-1: #181613; /* tab bar, key bar */
--surface-2: #1f1c17; /* tabs, buttons, cards */
--surface-3: #2a2620; /* hover / active */
--border: rgba(255, 255, 255, 0.07);
--border-strong: rgba(255, 255, 255, 0.13);
--text: #e7e8ec;
--text-dim: #9aa0ad;
--text-faint: #6b7080;
--accent: #7c8cff; /* indigo */
--accent-2: #9d7cff;
--accent-soft: rgba(124, 140, 255, 0.16);
--green: #46d07f;
--amber: #f5b14c;
--red: #ff6b6b;
--border-strong: rgba(255, 255, 255, 0.14);
--text: #ece9e3;
--text-dim: #a8a299;
--text-faint: #6f6a61;
--accent: #e3a64a; /* amber gold */
--accent-2: #c9892f; /* deeper gold (gradients / hover) */
--accent-soft: rgba(227, 166, 74, 0.15);
--on-accent: #1a1305; /* text/icon color on a gold accent background (contrast) */
--green: #46d07f; /* connection-status: connected */
--amber: #f5b14c; /* connection-status: connecting */
--red: #ff6b6b; /* connection-status: disconnected / error */
--shadow: 0 10px 40px rgba(0, 0, 0, 0.55);
--radius: 9px;
--radius-lg: 14px;
@@ -306,16 +307,16 @@ body {
}
#keybar button.keybar-btn-primary {
background: var(--accent-soft);
color: #cdd4ff;
border-color: rgba(124, 140, 255, 0.4);
color: #f0d49a;
border-color: rgba(227, 166, 74, 0.4);
font-weight: 600;
min-width: 54px;
}
#keybar button.keybar-btn-primary:hover {
background: rgba(124, 140, 255, 0.26);
background: rgba(227, 166, 74, 0.26);
}
#keybar button.keybar-btn-primary .kb-cap {
color: rgba(205, 212, 255, 0.7);
color: rgba(240, 212, 154, 0.7);
}
/* ── Shared: overlays, cards, inputs, buttons ────────────────────── */
@@ -467,7 +468,7 @@ body {
}
.settings-opt.active {
background: var(--accent);
color: #fff;
color: var(--on-accent);
border-color: var(--accent);
}
.settings-size {
@@ -612,7 +613,7 @@ body {
.hist-resume {
flex: none;
background: var(--accent);
color: #fff;
color: var(--on-accent);
border: none;
border-radius: 8px;
padding: 7px 15px;
@@ -692,7 +693,7 @@ body {
}
.launcher-new {
background: var(--accent);
color: #fff;
color: var(--on-accent);
border: none;
border-radius: 8px;
padding: 9px 16px;
@@ -844,7 +845,7 @@ body {
}
.mg-open {
background: var(--accent);
color: #fff;
color: var(--on-accent);
border-radius: 8px;
padding: 7px 13px;
text-decoration: none;