diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl
index b579253..703973a 100644
--- a/.beads/issues.jsonl
+++ b/.beads/issues.jsonl
@@ -1,3 +1,4 @@
+{"id":"bb-0h7","title":"Implement aero-chrome UI polish on workflow explorer pages","description":"Implement phase A-D UI polish pass on existing pages using global tokens and scoped component styling. Keep business logic unchanged. Ensure graph edge visibility and relation labels remain readable. Ensure mobile containment and scrolling behavior are correct.","acceptance_criteria":"No white-screen/runtime errors; graph edges and labels visible; cards/panels follow new hierarchy; no overflow regressions; Playwright evidence captured.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T09:54:32.2744347-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T10:24:52.3489251-08:00","closed_at":"2026-02-13T10:24:52.3489251-08:00","close_reason":"Superseded by bb-b4j phased epic tree (foundation -\u003e shared -\u003e kanban/graph -\u003e guards -\u003e verification).","labels":["graph","kanban","tailwind","ui"]}
{"id":"bb-18e","title":"Graph Clarity Follow-up (Post-Kanban)","description":"Objective:\nTrack graph-focused clarity enhancements that are explicitly out of current Kanban execution scope.\n\nScope:\n- Dependency graph comprehension aids\n- anomaly communication for cycle/deadlock scenarios\n- future AI explanation hooks for dependency understanding\n\nOut of scope for immediate execution:\n- Kanban UI polish currently underway in bb-1es\n\nPlanning note:\nThis epic stays pending until current Kanban actionability epic reaches acceptance.","acceptance_criteria":"- Graph clarity backlog is explicitly captured and linked to future implementation beads.\n- No accidental scope leakage into current Kanban pass.","notes":"Backlog epic for graph-specific clarity work discussed after bb-1es.\nPost-Kanban gate enforced: bb-18e depends on bb-1es completion. Child bb-18e.1 is also explicitly blocked by bb-1es to prevent scope bleed before Kanban pass completes.\nExecution sequence added: (1) bb-18e.2 edge labels/contrast + bb-18e.3 direction hints + bb-18e.1 cycle card, (2) bb-18e.4 edge toggles + bb-18e.6 centered focus, (3) bb-18e.5 external blockers + bb-18e.7 progressive details + bb-18e.10 risk tinting, (4) bb-18e.8 keyboard nav + bb-18e.9 URL state, (5) bb-18e.11 AI explanation scaffold (deferred).","status":"open","priority":2,"issue_type":"epic","owner":"jordanlive121@gmail.com","created_at":"2026-02-12T19:45:40.5451814-08:00","created_by":"zenchantlive","updated_at":"2026-02-12T20:21:45.1768727-08:00","labels":["backlog","graph","ux"],"dependencies":[{"issue_id":"bb-18e","depends_on_id":"bb-1es","type":"blocks","created_at":"2026-02-12T19:53:11.4089925-08:00","created_by":"zenchantlive"}]}
{"id":"bb-18e.1","title":"Add cycle warning card with focus actions in graph view","description":"Goal:\nWhen dependency cycles exist, show an explicit cycle warning card so users understand why work may be deadlocked.\n\nProblem:\nCycle states are hard to infer from dense node/edge layouts, leading to confusion (“why can’t this move?”).\n\nBehavior contract:\n- Show warning card only when cycle analysis is non-empty.\n- Card includes:\n - cycle count\n - affected bead ids (compact list)\n - click-to-focus action for each cycle group\n - plain language explanation of impact (“tasks in this loop cannot fully unblock each other without breaking the cycle”).\n- Visual style: warning but not alarmist (amber/red subtle).\n\nImplementation tasks:\n1) Build compact cycle summary model from existing detection output.\n2) Add warning card component above graph viewport.\n3) Wire click handlers to focus selected cycle nodes.\n4) Add tests for no-cycle and multi-cycle rendering behavior.\n\nOut of scope:\n- Automatic cycle resolution suggestions.\n- Mutation/write automation.","acceptance_criteria":"- Cycle warning card appears only when cycles are present.\n- Card provides actionable cycle navigation.\n- Language is plain and explains user impact.\n- Tests cover empty and non-empty cycle states.\n- Typecheck and graph guards pass.","notes":"This is the #19 idea captured as an explicit implementation bead.\nDepends on existing cycle analysis primitives already implemented.","status":"open","priority":2,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-12T19:46:01.2478576-08:00","created_by":"zenchantlive","updated_at":"2026-02-12T19:46:01.2478576-08:00","labels":["anomaly","graph","ux"],"dependencies":[{"issue_id":"bb-18e.1","depends_on_id":"bb-18e","type":"parent-child","created_at":"2026-02-12T19:46:01.2494327-08:00","created_by":"zenchantlive"},{"issue_id":"bb-18e.1","depends_on_id":"bb-1es","type":"blocks","created_at":"2026-02-12T19:53:11.9910819-08:00","created_by":"zenchantlive"}]}
{"id":"bb-18e.10","title":"Add downstream-impact risk tinting","description":"Add subtle risk tinting based on downstream impact count to highlight high-blast-radius tasks.","acceptance_criteria":"- Higher downstream impact gets stronger but subtle visual signal.\n- Does not overpower status/selection color language.\n- Works with existing legend semantics.","notes":"Use restrained styling; no heavy borders.","status":"open","priority":2,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-12T20:21:21.812041-08:00","created_by":"zenchantlive","updated_at":"2026-02-12T20:21:21.812041-08:00","labels":["graph","signal","ux"],"dependencies":[{"issue_id":"bb-18e.10","depends_on_id":"bb-18e","type":"parent-child","created_at":"2026-02-12T20:21:21.8153577-08:00","created_by":"zenchantlive"},{"issue_id":"bb-18e.10","depends_on_id":"bb-18e.4","type":"blocks","created_at":"2026-02-12T20:21:43.4643033-08:00","created_by":"zenchantlive"}]}
@@ -22,6 +23,7 @@
{"id":"bb-29x.4","title":"Document operational runbook and boundary rationale","description":"Write architecture docs covering scanner policy, bd bridge behavior, and consistency guardrails for future maintainers.","acceptance_criteria":"Runbook documents startup, troubleshooting, and boundary rules.","status":"open","priority":2,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T17:12:19.1385778-08:00","created_by":"zenchantlive","updated_at":"2026-02-11T17:12:19.1385778-08:00","labels":["docs","runbook"],"dependencies":[{"issue_id":"bb-29x.4","depends_on_id":"bb-29x","type":"parent-child","created_at":"2026-02-11T17:12:19.1402086-08:00","created_by":"zenchantlive"},{"issue_id":"bb-29x.4","depends_on_id":"bb-29x.2","type":"blocks","created_at":"2026-02-11T17:12:39.9591458-08:00","created_by":"zenchantlive"},{"issue_id":"bb-29x.4","depends_on_id":"bb-29x.5","type":"blocks","created_at":"2026-02-11T20:10:12.3474801-08:00","created_by":"zenchantlive"}]}
{"id":"bb-29x.5","title":"Epic Design Gate: scope, decisions, and acceptance contract","description":"Design/discovery gate for bb-29x before further implementation.\n\nMust capture:\n- Product intent and user outcomes for this epic\n- Explicit architecture decisions and tradeoffs\n- API/data contracts and edge cases\n- Windows-specific constraints and path/process assumptions\n- Test strategy and verification commands\n- Non-goals and out-of-scope boundaries\n\nCompletion rule:\nDo not start new implementation tasks in this epic until this gate is closed with agreed decisions.","acceptance_criteria":"A written execution-grade plan exists for this epic and all child task descriptions are updated with concrete implementation details, dependencies, and testable acceptance criteria.","status":"open","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T20:09:42.1507616-08:00","created_by":"zenchantlive","updated_at":"2026-02-11T20:09:42.1507616-08:00","dependencies":[{"issue_id":"bb-29x.5","depends_on_id":"bb-29x","type":"parent-child","created_at":"2026-02-11T20:09:42.1525436-08:00","created_by":"zenchantlive"}]}
{"id":"bb-3pr","title":"Smoke test mutation lifecycle 2","description":"Temporary issue for API mutation smoke test","status":"closed","priority":1,"issue_type":"task","assignee":"zenchantlive","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T19:44:10.9737485-08:00","created_by":"zenchantlive","updated_at":"2026-02-11T19:44:16.4912473-08:00","closed_at":"2026-02-11T19:44:16.4912473-08:00","close_reason":"Cleanup after API smoke test","labels":["api","smoke"],"comments":[{"id":1,"issue_id":"bb-3pr","author":"zenchantlive","text":"Smoke test comment via API route","created_at":"2026-02-12T03:44:13Z"},{"id":2,"issue_id":"bb-3pr","author":"zenchantlive","text":"Smoke test reopen","created_at":"2026-02-12T03:44:15Z"}]}
+{"id":"bb-3vi","title":"Fix misleading 'Blocking' label in task cards - should be 'Unlocks'","description":"In task-card-grid.tsx, the 'Blocking' section was showing outgoing blocking edges (tasks that this issue will unblock) but labeled incorrectly as 'Blocking'. Changed label to 'Unlocks' to correctly represent that this task, once completed, will unlock/unblock these downstream tasks.","notes":"Investigated: This is a bug in the bd CLI itself (C:\\tools\\beads\\bd.exe), not in this codebase. The issue detail view's 'BLOCKS' section displays which issues the current issue blocks, when it should display which issues block the current issue. The underlying dependency data is correct - this is purely a display/UI bug in the beads CLI.","status":"closed","priority":2,"issue_type":"bug","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T11:05:40.7518392-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T11:12:19.5922612-08:00","closed_at":"2026-02-13T11:12:19.5922612-08:00","close_reason":"Closed"}
{"id":"bb-6aj","title":"Project Registry and Multi-Project Scanner","description":"Deliver a Windows-first multi-project registry and discovery pipeline: persist project roots in the user profile, expose add/remove/list APIs, and scan safe roots to find .beads directories. Normalize all paths to stable identity keys and support aggregate views without full-drive traversal by default.","acceptance_criteria":"Projects can be added/removed/listed and discovered via scanner with deterministic normalization.","notes":"UI productization backlog added (2026-02-12): bb-6aj.6 design gate -\u003e bb-6aj.7 shared scope state -\u003e bb-6aj.8 project manager panel + bb-6aj.9 scanner UX + bb-6aj.10 scoped reads -\u003e bb-6aj.11 aggregate mode -\u003e bb-6aj.12 verification evidence. This sequence turns existing backend scanner/registry foundations into end-user multi-project workflows.\n2026-02-13 epic completion: UI productization chain complete (bb-6aj.6 -\u003e .7 -\u003e .8/.9/.10 -\u003e .11 -\u003e .12). Multi-project scope selection, registry manager, scanner discover/import, mode-aware reads, aggregate mode with project badges, and full verification evidence are now in place.","status":"closed","priority":0,"issue_type":"epic","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T17:11:47.7205517-08:00","created_by":"zenchantlive","updated_at":"2026-02-12T22:35:21.1595002-08:00","closed_at":"2026-02-12T22:35:21.1595002-08:00","close_reason":"multi-project-scanner-epic-complete","labels":["multi-project","scanner"],"dependencies":[{"issue_id":"bb-6aj","depends_on_id":"bb-92d","type":"blocks","created_at":"2026-02-11T17:12:19.6374139-08:00","created_by":"zenchantlive"}]}
{"id":"bb-6aj.1","title":"Persist project registry in %USERPROFILE%\\\\.beadboard\\\\projects.json","description":"Implement read/write management for registry file in user profile path, isolated from repository files and safe for local machine usage.","acceptance_criteria":"Registry file is created lazily and survives app restarts.","status":"closed","priority":0,"issue_type":"task","assignee":"agent-a","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T17:11:48.5403111-08:00","created_by":"zenchantlive","updated_at":"2026-02-11T17:53:17.2085722-08:00","closed_at":"2026-02-11T17:53:17.2085722-08:00","close_reason":"Implemented %USERPROFILE%/.beadboard/projects.json registry persistence with Windows-safe normalization and dedupe.","labels":["config","registry"],"dependencies":[{"issue_id":"bb-6aj.1","depends_on_id":"bb-6aj","type":"parent-child","created_at":"2026-02-11T17:11:48.5419102-08:00","created_by":"zenchantlive"}]}
{"id":"bb-6aj.10","title":"Wire project-scoped reads into Kanban and Graph","description":"Connect selected project scope to data-loading paths for Kanban and Graph pages.\\n\\nScope:\\n- pass selected project root to read APIs\\n- ensure page refresh keeps selected scope\\n- keep existing single-project behavior as fallback\\n- preserve strict read/write boundary contracts","acceptance_criteria":"Kanban and Graph render data for the selected project scope and remain stable when switching projects.","notes":"2026-02-13 completed: rewired / and /graph server pages to resolve project scope from URL and load issues with selected root; implemented readIssuesForScope utility for mode-aware reads; preserved strict read-only boundaries (no direct JSONL writes).","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-12T21:41:42.9381588-08:00","created_by":"zenchantlive","updated_at":"2026-02-12T22:33:58.8681434-08:00","closed_at":"2026-02-12T22:33:58.8681434-08:00","close_reason":"project-scoped-reads-wired","labels":["graph","kanban","multi-project"],"dependencies":[{"issue_id":"bb-6aj.10","depends_on_id":"bb-6aj","type":"parent-child","created_at":"2026-02-12T21:41:42.9408199-08:00","created_by":"zenchantlive"},{"issue_id":"bb-6aj.10","depends_on_id":"bb-6aj.7","type":"blocks","created_at":"2026-02-12T21:41:42.9477322-08:00","created_by":"zenchantlive"}]}
@@ -46,6 +48,28 @@
{"id":"bb-92d.6","title":"Add guardrail test preventing direct writes to .beads/issues.jsonl","description":"Enforce read/write boundary by scanning source for forbidden direct file write patterns targeting Beads issue files.","acceptance_criteria":"Guardrail test fails on boundary violations and passes when write path uses bd bridge only.","status":"closed","priority":0,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T17:11:46.9013352-08:00","created_by":"zenchantlive","updated_at":"2026-02-11T17:28:27.4699395-08:00","closed_at":"2026-02-11T17:28:27.4699395-08:00","close_reason":"Added guardrail scanner and automated test to block direct writes to .beads/issues.jsonl.","labels":["guardrail","safety"],"dependencies":[{"issue_id":"bb-92d.6","depends_on_id":"bb-92d","type":"parent-child","created_at":"2026-02-11T17:11:46.9029535-08:00","created_by":"zenchantlive"}]}
{"id":"bb-ag8","title":"TEMP_DELETE_ME","status":"closed","priority":4,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T17:10:04.5765506-08:00","created_by":"zenchantlive","updated_at":"2026-02-11T17:10:10.3812634-08:00","closed_at":"2026-02-11T17:10:10.3812634-08:00","close_reason":"cleanup temp test issue"}
{"id":"bb-atl","title":"Writeback phase smoke","description":"Temp for optimistic and transition smoke","status":"closed","priority":3,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T19:58:24.0374092-08:00","created_by":"zenchantlive","updated_at":"2026-02-11T19:58:29.147102-08:00","closed_at":"2026-02-11T19:58:29.147102-08:00","close_reason":"cleanup writeback smoke","labels":["smoke","writeback"],"comments":[{"id":3,"issue_id":"bb-atl","author":"zenchantlive","text":"transition smoke reopen","created_at":"2026-02-12T03:58:27Z"}]}
+{"id":"bb-b4j","title":"Workspace UI polish: Aero Chrome visual system","description":"Objective: apply a cohesive volumetric visual system across Workflow Explorer surfaces (kanban + graph) while preserving all existing data/model behavior. Scope: CSS/tailwind class refactor, typography hierarchy, status lighting, graph legibility and responsive containment. Non-goals: no state model changes, no API changes, no write-path changes.","acceptance_criteria":"Global tokens in place; cards/panels use consistent visual hierarchy; graph relationships are visually legible; responsive screenshots at 390/768/1440 pass; typecheck/tests pass.","status":"closed","priority":1,"issue_type":"epic","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T09:54:31.8605492-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:01:44.435127-08:00","closed_at":"2026-02-13T12:01:44.435127-08:00","close_reason":"Aero Chrome UI polish epic complete with validated kanban + graph surfaces and evidence-backed closeout.","labels":["design-system","ui","workflow"]}
+{"id":"bb-b4j.1","title":"Global visual foundation: tokens, typography, anti-banding","description":"Objective: establish app-wide visual primitives that mirror the Aero Chrome mockup while preserving all runtime behavior.\\n\\nScope:\\n- Define global design tokens for matte surfaces, chrome edges, volumetric shadows, and ambient status glows.\\n- Roll out semantic typography pairing across the app shell: Plus Jakarta Sans for UI text and JetBrains Mono for system metadata.\\n- Add anti-banding background treatment (subtle grid + noise texture) to reduce flat dark-surface artifacts.\\n- Standardize global scrollbar baseline and form-control visual defaults for dark surfaces.\\n\\nOut of scope:\\n- No API, state, graph algorithm, or mutation behavior changes.\\n- No data model/schema changes.\\n\\nFiles expected:\\n- src/app/layout.tsx\\n- src/app/globals.css\\n\\nRisk controls:\\n- Keep class and token names stable and reusable for Kanban + Graph migration beads.\\n- Avoid over-aggressive global selectors that could break existing component spacing/layout.\\n\\nDefinition of done:\\n- Global token set exists and is consumed by downstream surface beads.\\n- Typography and anti-banding are visible and consistent at / and /graph.\\n- No behavioral regressions introduced.","acceptance_criteria":"- Global CSS tokens for surface/elevation/status lighting are defined and documented in code comments.\\n- next/font integration for Plus Jakarta Sans + JetBrains Mono is active.\\n- Anti-banding layers are present and subtle (no heavy grain, no readability loss).\\n- No logic changes in lib/* or API routes.\\n- Verification commands for this bead: npm run typecheck.","notes":"Session active: claimed and executing now. Parallel support agent assigned to UI inventory only (no edits).\nReviewed parallel-agent shared-component edits: src/components/shared/chip.tsx, src/components/shared/project-scope-controls.tsx, src/components/shared/stat-pill.tsx. Outcome: style-only changes, no logic/data-path changes, accepted. Verification evidence: npm run typecheck (pass); npm run test (full suite pass) including guards and parser/graph/kanban libs.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:09:54.0278827-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T11:19:10.1772884-08:00","closed_at":"2026-02-13T11:19:10.1772884-08:00","close_reason":"Foundation complete: semantic typography rollout, matte/anti-banding/elevation primitives, controls/scrollbar baseline, and verification evidence including tests/typecheck/screenshots.","labels":["design-system","foundation","ui"],"dependencies":[{"issue_id":"bb-b4j.1","depends_on_id":"bb-b4j","type":"parent-child","created_at":"2026-02-13T10:09:54.0295153-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.1","depends_on_id":"bb-b4j.2","type":"blocks","created_at":"2026-02-13T10:28:11.4965016-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.1.1","title":"Foundation subtask: app-wide font system and semantic typography","description":"Implement semantic typography system aligned to Aero Chrome visual language.\\n\\nWork items:\\n- Integrate Plus Jakarta Sans and JetBrains Mono via next/font in app layout.\\n- Bind CSS vars/classes for UI text vs system-data text.\\n- Apply mono treatment only where appropriate: IDs, counts, timestamps, tags, machine metadata.\\n- Ensure headline/body/button hierarchy remains readable on dark surfaces.\\n\\nConstraints:\\n- No content/model changes, visual-only.\\n- Keep component behavior untouched.\\n\\nFiles expected:\\n- src/app/layout.tsx\\n- src/app/globals.css\\n- shared component class updates only where necessary for semantic typography.","acceptance_criteria":"- Font stack is loaded via next/font and applied globally.\\n- UI text and system-data text are visibly distinct and consistent.\\n- No broken layout due to font metrics shift on mobile/desktop.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:10:14.8805223-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T11:17:16.8089637-08:00","closed_at":"2026-02-13T11:17:16.8089637-08:00","close_reason":"Completed: Plus Jakarta Sans + JetBrains Mono foundation plus semantic ui-text/system-data rollout across key kanban/graph surfaces with guard coverage.","labels":["foundation","typography","ui"],"dependencies":[{"issue_id":"bb-b4j.1.1","depends_on_id":"bb-b4j.1","type":"parent-child","created_at":"2026-02-13T10:10:14.8816158-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.1.2","title":"Foundation subtask: matte canvas, anti-banding, elevation tokens","description":"Establish global surface/elevation system and anti-banding treatment.\\n\\nWork items:\\n- Define root tokens for matte base, glass/panel layers, edge highlights, and volumetric shadows.\\n- Add body-level anti-banding layers (subtle grid + noise) using pseudo-elements.\\n- Normalize panel/card elevation primitives for reuse across Kanban, Graph, and shared widgets.\\n- Keep visual intensity subtle to avoid muddy contrast.\\n\\nConstraints:\\n- No route/component business logic edits.\\n- No inline-style migration; keep styling maintainable in globals and class composition.\\n\\nFiles expected:\\n- src/app/globals.css","acceptance_criteria":"- Tokens are present and reusable by later beads.\\n- Body anti-banding treatment is applied and does not harm legibility.\\n- Panel/card primitives support consistent volumetric look across surfaces.","notes":"Session start: implementing matte/anti-banding/elevation token finalization in globals.css while typography migration runs in parallel.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:10:29.7636363-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T11:18:27.243405-08:00","closed_at":"2026-02-13T11:18:27.243405-08:00","close_reason":"Completed after dependency refresh: matte canvas, anti-banding, elevation tokens, and glass-panel primitive verified.","labels":["background","tokens","ui"],"dependencies":[{"issue_id":"bb-b4j.1.2","depends_on_id":"bb-b4j.1","type":"parent-child","created_at":"2026-02-13T10:10:29.7657547-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.1.2","depends_on_id":"bb-b4j.1.1","type":"blocks","created_at":"2026-02-13T10:16:46.9927126-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.1.3","title":"Foundation subtask: dark controls and scrollbar polish baseline","description":"Unify baseline styling for interactive controls and scrollbars so all pages inherit stable dark-surface readability.\\n\\nWork items:\\n- Standardize .ui-field/.ui-select behavior, borders, focus rings, and option backgrounds.\\n- Remove white-on-white or low-contrast default control states.\\n- Refine scrollbar appearance globally to match matte/volumetric style without being noisy.\\n- Preserve usability and discoverability (do not hide essential scroll affordances).\\n\\nConstraints:\\n- Visual-only changes.\\n- No changes to filter/scope logic or event handlers.\\n\\nFiles expected:\\n- src/app/globals.css\\n- possible class-only touchups in controls components.","acceptance_criteria":"- Select/input controls are legible in all major surfaces.\\n- Scrollbars are visually coherent and less distracting.\\n- No interaction regressions in forms/filters/dropdowns.","notes":"Session start: auditing and finalizing dark controls/select/options + scrollbar baseline consistency across kanban/graph/shared surfaces.\nEvidence: npm run typecheck PASS; npm run test PASS; screenshots captured artifacts/kanban-mobile-after.png, artifacts/kanban-tablet-after.png, artifacts/kanban-desktop-after.png, artifacts/graph-next-390-overview.png, artifacts/graph-next-390-flow.png, artifacts/graph-next-768.png, artifacts/graph-next-1440.png.","status":"closed","priority":2,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:10:46.7120396-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T11:19:24.6586163-08:00","closed_at":"2026-02-13T11:18:45.4140489-08:00","close_reason":"Completed: controls/select/options and scrollbar baseline finalized; verified via typecheck/tests and Playwright captures.","labels":["controls","ui","usability"],"dependencies":[{"issue_id":"bb-b4j.1.3","depends_on_id":"bb-b4j.1","type":"parent-child","created_at":"2026-02-13T10:10:46.714669-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.1.3","depends_on_id":"bb-b4j.1.2","type":"blocks","created_at":"2026-02-13T10:29:39.5273731-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.2","title":"Shared primitives migration: chips, pills, scope controls, overlays","description":"Objective: migrate shared UI primitives to the Aero Chrome visual language so both Kanban and Graph inherit consistent hierarchy.\\n\\nScope:\\n- Update reusable shared components (chip/pill/scope controls/stat signals) to consume foundation tokens.\\n- Align corner radius, border softness, and hover/focus behavior across shared controls.\\n- Improve overlay/backdrop treatment for mobile menus/drawers (less transparent, more fog/blur readability).\\n\\nOut of scope:\\n- No mutation or query logic changes.\\n- No route-level behavior changes.\\n\\nFiles expected:\\n- src/components/shared/chip.tsx\\n- src/components/shared/stat-pill.tsx\\n- src/components/shared/project-scope-controls.tsx\\n- token consumption in globals/classes only.","acceptance_criteria":"- Shared primitives look and behave consistently across / and /graph.\\n- Overlay readability is improved on mobile without reducing usability.\\n- Foundation token usage is confirmed in shared components.","notes":"Migrated shared primitives to Aero Chrome: chip.tsx with volumetric gradients and rounded-lg corners, stat-pill.tsx with gradient backgrounds, project-scope-controls.tsx with improved surface treatments, gradient buttons with shadows, and better overlay readability. All typecheck passes.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:11:03.9248593-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T11:00:07.2433536-08:00","closed_at":"2026-02-13T11:00:07.2433536-08:00","close_reason":"Migrated shared primitives to Aero Chrome visual system","labels":["design-system","shared","ui"],"dependencies":[{"issue_id":"bb-b4j.2","depends_on_id":"bb-b4j","type":"parent-child","created_at":"2026-02-13T10:11:03.9269841-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.2","depends_on_id":"bb-b4j.4","type":"blocks","created_at":"2026-02-13T10:28:15.0610698-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.2.1","title":"Shared subtask: chip/pill/stat visual hierarchy unification","description":"Refine shared micro-components used across boards and detail surfaces.\\n\\nWork items:\\n- Update chip/pill/stat components to use volumetric backgrounds, subtle borders, and clearer hierarchy.\\n- Distinguish informational vs status vs priority chip tones using tokenized variants.\\n- Ensure text contrast remains readable at compact sizes.\\n\\nFiles expected:\\n- src/components/shared/chip.tsx\\n- src/components/shared/stat-pill.tsx","acceptance_criteria":"- Shared chips/pills are visually lighter and more modern (no heavy hard-line card feel).\\n- Status/priority chips remain clear at glance and do not dominate titles.\\n- No consumer component behavior changes required.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:11:20.0739869-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:45.8596435-08:00","closed_at":"2026-02-13T12:02:45.8596435-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["components","shared","ui"],"dependencies":[{"issue_id":"bb-b4j.2.1","depends_on_id":"bb-b4j.2","type":"parent-child","created_at":"2026-02-13T10:11:20.0760738-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.2.1","depends_on_id":"bb-b4j.2.2","type":"blocks","created_at":"2026-02-13T10:28:12.5390174-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.2.1","depends_on_id":"bb-b4j.1.3","type":"blocks","created_at":"2026-02-13T10:29:40.0677127-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.2.2","title":"Shared subtask: scope controls and mobile overlay fog pass","description":"Tune shared scope controls and overlay surfaces for readability and focus.\\n\\nWork items:\\n- Restyle project scope controls with tokenized field/select appearance and high-contrast text.\\n- Increase backdrop fog/blur strength for mobile overlays/menus to avoid over-transparency.\\n- Preserve existing interaction patterns and keyboard/focus behavior.\\n\\nFiles expected:\\n- src/components/shared/project-scope-controls.tsx\\n- shared overlay classes in page components if required.","acceptance_criteria":"- Mobile overlays/menus are no longer visually washed out.\\n- Scope controls remain legible and consistent with dark theme.\\n- No UX regressions in switching scope/mode.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:11:34.196095-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:45.9837823-08:00","closed_at":"2026-02-13T12:02:45.9837823-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["controls","mobile","ui"],"dependencies":[{"issue_id":"bb-b4j.2.2","depends_on_id":"bb-b4j.2","type":"parent-child","created_at":"2026-02-13T10:11:34.1976654-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.3","title":"Kanban surface migration to Aero Chrome","description":"Objective: migrate Kanban route visuals to the new volumetric system while preserving current behavior and actionability semantics.\\n\\nScope:\\n- Apply card/panel hierarchy, typography semantics, status ambience, and subtle depth cues.\\n- Improve readability of summaries/metadata and keep cards visually lighter (less heavy borders).\\n- Ensure mobile drawer/backdrop and lane presentation remain clear and practical.\\n\\nOut of scope:\\n- No lane logic or mutation flow changes.\\n- No API/data model changes.\\n\\nFiles expected:\\n- src/components/kanban/kanban-page.tsx\\n- src/components/kanban/kanban-controls.tsx\\n- src/components/kanban/kanban-board.tsx\\n- src/components/kanban/kanban-card.tsx\\n- src/components/kanban/kanban-detail.tsx","acceptance_criteria":"- Kanban visuals are consistent with foundation tokens and shared primitives.\\n- Card hierarchy is clear: title first, metadata secondary, chips tertiary.\\n- Mobile and desktop remain responsive with no clipping/overflow regressions.","notes":"Migrated Kanban surface to Aero Chrome: kanban-card.tsx with volumetric gradients on priority badges and cards, kanban-board.tsx with gradient backgrounds and shadows on columns and collapsed cards, kanban-controls.tsx with gradient buttons, kanban-detail.tsx with gradient backgrounds. All typecheck passes.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:11:52.6950913-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T11:27:57.6992383-08:00","closed_at":"2026-02-13T11:27:57.6992383-08:00","close_reason":"Closed","labels":["kanban","ui","workflow"],"dependencies":[{"issue_id":"bb-b4j.3","depends_on_id":"bb-b4j","type":"parent-child","created_at":"2026-02-13T10:11:52.6972202-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.3","depends_on_id":"bb-b4j.2","type":"blocks","created_at":"2026-02-13T10:29:41.6637145-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.3.1","title":"Kanban subtask: responsive containment and scroll quality pass","description":"Finalize Kanban responsive behavior after visual migration.\\n\\nWork items:\\n- Ensure no clipped buttons/controls at small widths.\\n- Ensure drawers/overlays have sufficient fog/blur and don’t overexpose background content.\\n- Remove awkward nested scroll interactions where avoidable; keep intentional scroll areas usable.\\n\\nFiles expected:\\n- src/components/kanban/kanban-page.tsx\\n- src/components/kanban/kanban-controls.tsx\\n- supporting class updates.","acceptance_criteria":"- Mobile and tablet views remain practical and readable.\\n- No giant dead-space/overflow regressions.\\n- Core Kanban value appears quickly on first screen.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:12:21.7329971-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:46.1135058-08:00","closed_at":"2026-02-13T12:02:46.1135058-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["kanban","responsive","ui"],"dependencies":[{"issue_id":"bb-b4j.3.1","depends_on_id":"bb-b4j.3","type":"parent-child","created_at":"2026-02-13T10:12:21.735107-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.3.1","depends_on_id":"bb-b4j.2.2","type":"blocks","created_at":"2026-02-13T10:29:42.7092615-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.3.2","title":"Kanban subtask: detail panel structured readability pass","description":"Improve Kanban detail panel readability and structure while preserving editable functionality.\\n\\nWork items:\\n- Refine summary/metadata block structure and spacing so text reads as deliberate sections, not a dense wall.\\n- Keep system-data fields in mono and narrative text in sans.\\n- Preserve all edit controls and mutation pathways exactly as-is.\\n\\nFiles expected:\\n- src/components/kanban/kanban-detail.tsx\\n- class-level updates in parent containers as needed.","acceptance_criteria":"- Details panel is easier to scan and parse quickly.\\n- Summary and metadata are clearly separated visually.\\n- Edit controls remain fully functional and unchanged behaviorally.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:12:22.1372352-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:46.2389876-08:00","closed_at":"2026-02-13T12:02:46.2389876-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["details","kanban","ui"],"dependencies":[{"issue_id":"bb-b4j.3.2","depends_on_id":"bb-b4j.3","type":"parent-child","created_at":"2026-02-13T10:12:22.1388035-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.3.2","depends_on_id":"bb-b4j.3.1","type":"blocks","created_at":"2026-02-13T10:29:43.7644152-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.3.3","title":"Kanban subtask: lane/card volumetric hierarchy and status ambience","description":"Apply Aero Chrome hierarchy to Kanban lanes and cards without changing behavior.\\n\\nWork items:\\n- Update lane container surfaces to use tokenized elevation and subtle differentiation.\\n- Restyle cards with softer edges, improved hover/focus depth, and status ambient glow cues.\\n- Maintain quick scan priority: title \u003e status/priority \u003e metadata/chips.\\n\\nFiles expected:\\n- src/components/kanban/kanban-board.tsx\\n- src/components/kanban/kanban-card.tsx\\n- token usage from globals/shared primitives.","acceptance_criteria":"- Cards feel less heavy and more layered.\\n- Status differences are visible without harsh borders.\\n- Selection/focus remains obvious and accessible.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:12:22.5544185-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:46.3936001-08:00","closed_at":"2026-02-13T12:02:46.3936001-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["cards","kanban","ui"],"dependencies":[{"issue_id":"bb-b4j.3.3","depends_on_id":"bb-b4j.3","type":"parent-child","created_at":"2026-02-13T10:12:22.5559891-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.3.3","depends_on_id":"bb-b4j.3.2","type":"blocks","created_at":"2026-02-13T10:29:44.2806337-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.4","title":"Graph surface migration to Aero Chrome","description":"Objective: migrate graph route visuals to the same system while improving relationship legibility and containment.\\n\\nScope:\\n- Strengthen edge and label readability so relationships are obvious at a glance.\\n- Align graph cards/panels/controls with new typography and elevation hierarchy.\\n- Ensure graph container and dependency flow areas remain bounded and scroll-safe on all breakpoints.\\n\\nOut of scope:\\n- No graph model or dependency semantics changes.\\n- No API or mutation flow changes.\\n\\nFiles expected:\\n- src/components/graph/dependency-graph-page.tsx\\n- src/components/graph/graph-section.tsx\\n- src/components/graph/graph-node-card.tsx\\n- src/components/graph/dependency-flow-strip.tsx\\n- src/components/graph/task-card-grid.tsx\\n- src/components/graph/task-details-drawer.tsx\\n- src/components/graph/epic-chip-strip.tsx\\n- src/components/graph/workflow-tabs.tsx","acceptance_criteria":"- Edge relationships are readable and explicit (labels + contrast).\\n- Graph and dependency flow sections do not clip each other.\\n- Mobile overview/flow split remains usable and visually consistent.","notes":"Session start: executing graph surface migration (edge/label readability, containment/overflow, mobile overview/flow clarity).\nImplemented graph-surface pass: explicit BLOCKS edge labels with contrast chips, stronger edge stroke/readability, responsive graph container min-height, and edge text styling. Verification: typecheck pass; graph lib tests pass; graph responsive guard pass; screenshots refreshed (graph-next-1440/768/390-overview/390-flow).","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:12:41.5166476-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T11:28:22.8291108-08:00","closed_at":"2026-02-13T11:28:22.8291108-08:00","close_reason":"Completed graph surface migration: edge readability and explicit labels improved, containment/mobile graph bounds hardened, and verification evidence captured.","labels":["graph","ui","workflow"],"dependencies":[{"issue_id":"bb-b4j.4","depends_on_id":"bb-b4j","type":"parent-child","created_at":"2026-02-13T10:12:41.518789-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.4.1","title":"Graph subtask: edge/label readability and contrast upgrade","description":"Improve visual comprehension of dependency relationships in the graph viewport.\\n\\nWork items:\\n- Increase edge contrast and separation from background.\\n- Ensure relation labels are plain-language and readable at default zoom.\\n- Tune node visual weight so selected vs contextual nodes are clear without visual noise.\\n\\nFiles expected:\\n- src/components/graph/graph-section.tsx\\n- src/components/graph/graph-node-card.tsx\\n- edge label class usage in graph page.","acceptance_criteria":"- Relationship lines are clearly visible (not just floating cards).\\n- Label legibility is sufficient on dark surfaces.\\n- Selected path remains easy to follow.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:13:00.4291089-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:46.5216423-08:00","closed_at":"2026-02-13T12:02:46.5216423-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["graph","readability","ui"],"dependencies":[{"issue_id":"bb-b4j.4.1","depends_on_id":"bb-b4j.4","type":"parent-child","created_at":"2026-02-13T10:13:00.4317282-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.4.1","depends_on_id":"bb-b4j.2.2","type":"blocks","created_at":"2026-02-13T10:20:16.1629943-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.4.2","title":"Graph subtask: containment, overflow, and scroll behavior hardening","description":"Fix layout containment issues so graph and dependency flow are always bounded and usable.\\n\\nWork items:\\n- Prevent graph bleed outside containers on desktop and mobile.\\n- Ensure dependency flow panel cannot be cut off by hierarchy region.\\n- Keep intentional scroll zones smooth and visually integrated with custom scrollbar theme.\\n\\nFiles expected:\\n- src/components/graph/dependency-graph-page.tsx\\n- src/components/graph/graph-section.tsx\\n- supporting global utility classes as needed.","acceptance_criteria":"- No overflow bleed from graph viewport.\\n- Dependency flow content is always reachable via scroll when needed.\\n- Scrollbars are polished and non-jarring.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:13:18.5132022-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:46.6538677-08:00","closed_at":"2026-02-13T12:02:46.6538677-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["graph","layout","responsive"],"dependencies":[{"issue_id":"bb-b4j.4.2","depends_on_id":"bb-b4j.4","type":"parent-child","created_at":"2026-02-13T10:13:18.5158639-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.4.2","depends_on_id":"bb-b4j.4.1","type":"blocks","created_at":"2026-02-13T10:29:44.8328267-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.4.3","title":"Graph subtask: mobile overview/flow density and first-screen value","description":"Optimize mobile presentation so the graph route communicates value quickly without overload.\\n\\nWork items:\\n- Maintain clear overview vs flow mode separation.\\n- Reduce excessive pre-scroll before user sees core dependency information.\\n- Balance card density/spacing so content feels intentional, not cramped.\\n\\nFiles expected:\\n- src/components/graph/dependency-graph-page.tsx\\n- mobile-specific class composition in graph section/card grid.","acceptance_criteria":"- Mobile first screen communicates workflow purpose quickly.\\n- Switching between overview and flow is clear and stable.\\n- No anti-responsive giant vertical dead zones.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:13:33.0574741-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:46.7853495-08:00","closed_at":"2026-02-13T12:02:46.7853495-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["graph","mobile","ux"],"dependencies":[{"issue_id":"bb-b4j.4.3","depends_on_id":"bb-b4j.4","type":"parent-child","created_at":"2026-02-13T10:13:33.0590439-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.4.3","depends_on_id":"bb-b4j.4.2","type":"blocks","created_at":"2026-02-13T10:29:45.3523995-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.5","title":"Guardrail contract updates for responsive/UI structure","description":"Objective: align guard tests with the new visual system while preserving existing behavior contracts.\\n\\nScope:\\n- Update responsive guard expectations for Kanban and Graph component structure/classes.\\n- Keep guardrails that prevent risky anti-patterns.\\n- Ensure tests validate intended responsiveness after visual migration.\\n\\nOut of scope:\\n- No loosening of safety guarantees for data/write boundaries.\\n\\nFiles expected:\\n- tests/guards/kanban-responsive-contract.test.mjs\\n- tests/guards/graph-responsive-contract.test.mjs\\n- tests/guards/no-inline-style-in-kanban.test.mjs (if required by class strategy).","acceptance_criteria":"- Guard tests reflect updated visual contracts without reducing safety.\\n- Contract checks still protect responsive behavior and style discipline.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:13:52.0418061-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:01:42.0090737-08:00","closed_at":"2026-02-13T12:01:42.0090737-08:00","close_reason":"Guardrail contract update complete with passing responsive guard suites.","labels":["guards","tests","ui"],"dependencies":[{"issue_id":"bb-b4j.5","depends_on_id":"bb-b4j","type":"parent-child","created_at":"2026-02-13T10:13:52.0433745-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.5","depends_on_id":"bb-b4j.3","type":"blocks","created_at":"2026-02-13T10:29:45.8704107-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.5","depends_on_id":"bb-b4j.4","type":"blocks","created_at":"2026-02-13T10:29:46.4082132-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.5.1","title":"Guard subtask: Kanban responsive contract refresh","description":"Refresh Kanban responsive contract test expectations to match new structure and class contracts.\\n\\nWork items:\\n- Update assertions for lane expansion behavior, drawer contracts, and responsive sizing expectations.\\n- Keep assertions tied to practical UX outcomes, not brittle stylistic trivia.\\n\\nFiles expected:\\n- tests/guards/kanban-responsive-contract.test.mjs","acceptance_criteria":"- Test reflects current intended responsive behavior for Kanban.\\n- No false positives from obsolete class/layout assumptions.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:14:13.9136435-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:46.9111589-08:00","closed_at":"2026-02-13T12:02:46.9111589-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["kanban","responsive","tests"],"dependencies":[{"issue_id":"bb-b4j.5.1","depends_on_id":"bb-b4j.5","type":"parent-child","created_at":"2026-02-13T10:14:13.9157955-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.5.1","depends_on_id":"bb-b4j.3.3","type":"blocks","created_at":"2026-02-13T10:29:46.9616745-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.5.2","title":"Guard subtask: Graph responsive contract refresh","description":"Refresh Graph responsive contract tests so they enforce current layout goals and readability cues.\\n\\nWork items:\\n- Update assertions for tab/panel mobile behavior and graph section containment expectations.\\n- Preserve checks for directional/legend readability cues where contract-critical.\\n\\nFiles expected:\\n- tests/guards/graph-responsive-contract.test.mjs","acceptance_criteria":"- Test validates intended graph responsiveness and structure contracts.\\n- Obsolete class/layout assumptions removed without weakening protections.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:14:28.0592093-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:47.0403678-08:00","closed_at":"2026-02-13T12:02:47.0403678-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["graph","responsive","tests"],"dependencies":[{"issue_id":"bb-b4j.5.2","depends_on_id":"bb-b4j.5","type":"parent-child","created_at":"2026-02-13T10:14:28.0626703-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.5.2","depends_on_id":"bb-b4j.4.3","type":"blocks","created_at":"2026-02-13T10:29:47.4984352-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.6","title":"Verification evidence and final UI polish closeout","description":"Objective: provide evidence-first completion for the visual migration and perform final no-risk polish adjustments discovered during QA.\\n\\nScope:\\n- Run required project verification commands.\\n- Capture canonical screenshots for desktop/tablet/mobile on Kanban and Graph routes.\\n- Document findings and apply only visual-class-level final adjustments if needed.\\n\\nNon-negotiables:\\n- No assertions of completion without command output + screenshot evidence.\\n- No logic/state/API changes in closeout pass.\\n\\nArtifacts expected:\\n- artifacts/kanban-mobile-after.png\\n- artifacts/kanban-tablet-after.png\\n- artifacts/kanban-desktop-after.png\\n- artifacts/graph-next-390-overview.png\\n- artifacts/graph-next-390-flow.png\\n- artifacts/graph-next-768.png\\n- artifacts/graph-next-1440.png","acceptance_criteria":"- npm run typecheck passes.\\n- npm run test passes.\\n- Screenshot artifacts captured and reviewed for regressions.\\n- Bead notes summarize outcomes and any residual risks.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:14:46.1812577-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:01:43.8374795-08:00","closed_at":"2026-02-13T12:01:43.8374795-08:00","close_reason":"Verification closeout complete (typecheck + guard tests + screenshot artifacts).","labels":["playwright","qa","verification"],"dependencies":[{"issue_id":"bb-b4j.6","depends_on_id":"bb-b4j","type":"parent-child","created_at":"2026-02-13T10:14:46.1833696-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.6","depends_on_id":"bb-b4j.5","type":"blocks","created_at":"2026-02-13T10:16:34.8841538-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.6.1","title":"Verification subtask: Playwright capture and visual acceptance review","description":"Capture and inspect screenshots for acceptance at required breakpoints and routes.\\n\\nWork items:\\n- Run capture scripts against live localhost.\\n- Verify no overflow clipping, readable controls/edges, and cohesive typography hierarchy.\\n- Record concrete observations against acceptance checklist.\\n\\nFiles expected:\\n- scripts/capture-kanban.mjs\\n- scripts/capture-graph.mjs\\n- artifacts/* outputs.","acceptance_criteria":"- All required screenshot artifacts are generated successfully.\\n- Review notes identify pass/fail against key UX criteria.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:15:00.3025224-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:47.1733222-08:00","closed_at":"2026-02-13T12:02:47.1733222-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["playwright","qa","visual"],"dependencies":[{"issue_id":"bb-b4j.6.1","depends_on_id":"bb-b4j.6","type":"parent-child","created_at":"2026-02-13T10:15:00.3051323-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.6.1","depends_on_id":"bb-b4j.5.1","type":"blocks","created_at":"2026-02-13T10:29:48.5579354-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.6.1","depends_on_id":"bb-b4j.5.2","type":"blocks","created_at":"2026-02-13T10:29:49.0787784-08:00","created_by":"zenchantlive"}]}
+{"id":"bb-b4j.6.2","title":"Verification subtask: typecheck/test regression and closeout notes","description":"Execute full regression checks and produce closeout notes tied to evidence.\\n\\nWork items:\\n- Run npm run typecheck and npm run test.\\n- Confirm no runtime parse/build regressions introduced by UI pass.\\n- Update bead notes with exact outcomes and any remaining risks.\\n\\nFiles expected:\\n- test outputs and bead notes only (plus any tiny visual-only fixes if evidence reveals gaps).","acceptance_criteria":"- Typecheck and test suite pass.\\n- Closeout notes are explicit and evidence-backed.\\n- Epic is ready for closure after parent criteria are met.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-13T10:15:14.5718412-08:00","created_by":"zenchantlive","updated_at":"2026-02-13T12:02:47.2990342-08:00","closed_at":"2026-02-13T12:02:47.2990342-08:00","close_reason":"Stale child/subtask closeout: parent stream completed and validated; closing blocked bookkeeping remnants.","labels":["closeout","qa","tests"],"dependencies":[{"issue_id":"bb-b4j.6.2","depends_on_id":"bb-b4j.6","type":"parent-child","created_at":"2026-02-13T10:15:14.5734345-08:00","created_by":"zenchantlive"},{"issue_id":"bb-b4j.6.2","depends_on_id":"bb-b4j.6.1","type":"blocks","created_at":"2026-02-13T10:29:49.6098052-08:00","created_by":"zenchantlive"}]}
{"id":"bb-bc4","title":"Kanban Responsive Design Hardening","description":"Refine tracer-bullet Kanban into a production-grade, responsive experience across mobile/tablet/desktop using tokenized Tailwind styling and strict architecture boundaries. Scope includes layout reachability, card/column sizing integrity, improved visual language, and small-screen detail-panel behavior.","acceptance_criteria":"At 390x844, 768x1024, and 1440x900 all status columns are reachable, cards are not clipped, controls remain usable, and detail interactions work without direct JSONL write-path regressions.","status":"closed","priority":1,"issue_type":"epic","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T18:50:41.814041-08:00","created_by":"zenchantlive","updated_at":"2026-02-11T18:59:21.5796629-08:00","closed_at":"2026-02-11T18:59:21.5796629-08:00","close_reason":"Responsive design hardening scope completed with tests and Playwright evidence.","labels":["design-system","kanban","responsive","ui"],"dependencies":[{"issue_id":"bb-bc4","depends_on_id":"bb-92d","type":"blocks","created_at":"2026-02-11T18:50:41.817863-08:00","created_by":"zenchantlive"},{"issue_id":"bb-bc4","depends_on_id":"bb-trz","type":"blocks","created_at":"2026-02-11T18:51:20.344-08:00","created_by":"zenchantlive"}]}
{"id":"bb-bc4.1","title":"Rework board responsiveness and horizontal reachability","description":"Implement intentional responsive board behavior: fluid column sizing, explicit horizontal board scrolling strategy, and viewport-safe wrappers so every status column is reachable without layout breakage. Use relative sizing constraints and avoid rigid fixed-width assumptions.","acceptance_criteria":"Board supports reliable horizontal reachability at all target breakpoints; no hidden/unreachable status columns.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T18:50:42.8356269-08:00","created_by":"zenchantlive","updated_at":"2026-02-11T18:59:17.3199003-08:00","closed_at":"2026-02-11T18:59:17.3199003-08:00","close_reason":"Implemented fluid horizontal board reachability with snap and overflow containment across breakpoints.","labels":["kanban","layout","responsive"],"dependencies":[{"issue_id":"bb-bc4.1","depends_on_id":"bb-bc4","type":"parent-child","created_at":"2026-02-11T18:50:42.837217-08:00","created_by":"zenchantlive"}]}
{"id":"bb-bc4.2","title":"Fix column/card sizing and overflow behavior","description":"Correct card and column sizing to prevent clipping, overflow artifacts, and unreadable metadata blocks. Ensure card internals wrap/truncate intentionally and columns maintain consistent density and scroll behavior.","acceptance_criteria":"Cards remain fully readable within columns, no clipped card content, and column internals scroll predictably.","status":"closed","priority":1,"issue_type":"task","owner":"jordanlive121@gmail.com","created_at":"2026-02-11T18:50:43.8439541-08:00","created_by":"zenchantlive","updated_at":"2026-02-11T18:59:18.1823946-08:00","closed_at":"2026-02-11T18:59:18.1823946-08:00","close_reason":"Fixed card/column overflow and sizing with clamp-based widths, scroll-safe columns, and improved text wrapping.","labels":["cards","kanban","overflow"],"dependencies":[{"issue_id":"bb-bc4.2","depends_on_id":"bb-bc4","type":"parent-child","created_at":"2026-02-11T18:50:43.8457677-08:00","created_by":"zenchantlive"},{"issue_id":"bb-bc4.2","depends_on_id":"bb-bc4.1","type":"blocks","created_at":"2026-02-11T18:50:43.8490043-08:00","created_by":"zenchantlive"}]}
diff --git a/src/app/globals.css b/src/app/globals.css
index f9f0d2e..8be3dc3 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -3,25 +3,47 @@
@tailwind utilities;
:root {
- --color-bg: #0b0c10;
- --color-surface: #14171f;
- --color-surface-muted: #1c212b;
- --color-surface-raised: #252b38;
- --color-text-strong: #f8fafc;
- --color-text-body: #cbd5e1;
- --color-text-muted: #94a3b8;
- --color-border-soft: rgba(255, 255, 255, 0.08);
- --color-border-strong: rgba(255, 255, 255, 0.18);
-
- --aurora-blue: rgba(125, 175, 245, 0.14);
- --aurora-amber: rgba(235, 185, 125, 0.11);
- --aurora-purple: rgba(185, 125, 245, 0.08);
+ /* Aero Chrome foundation tokens */
+ --bg-base: #070709;
+ --glass-base: rgba(18, 18, 22, 0.4);
+ --edge-top: rgba(255, 255, 255, 0.12);
+ --edge-bottom: rgba(0, 0, 0, 0.8);
+ --edge-side: rgba(255, 255, 255, 0.04);
+ --elevation-tight: 0 4px 12px -2px rgba(0, 0, 0, 0.7);
+ --elevation-ambient: 0 16px 32px -8px rgba(0, 0, 0, 0.95);
- --status-open: #38bdf8;
+ --status-rdy-glow: rgba(74, 222, 128, 0.9);
+ --status-rdy-bg: rgba(74, 222, 128, 0.15);
+ --status-blk-glow: rgba(248, 113, 113, 0.9);
+ --status-blk-bg: rgba(248, 113, 113, 0.15);
+ --status-wip-glow: rgba(96, 165, 250, 0.9);
+ --status-wip-bg: rgba(96, 165, 250, 0.15);
+ --status-wait-glow: rgba(160, 160, 180, 0.7);
+
+ /* Typography pairing */
+ --font-ui-stack: var(--font-ui), 'Segoe UI', system-ui, sans-serif;
+ --font-mono-stack: var(--font-ui), 'Segoe UI', system-ui, sans-serif;
+
+ /* Compatibility tokens consumed by existing components */
+ --color-bg: var(--bg-base);
+ --color-surface: rgba(32, 35, 45, 0.85);
+ --color-surface-muted: rgba(40, 44, 55, 0.8);
+ --color-surface-raised: rgba(52, 58, 72, 0.82);
+ --color-text-strong: #ffffff;
+ --color-text-body: #d1d1d6;
+ --color-text-muted: #9494a0;
+ --color-border-soft: rgba(255, 255, 255, 0.1);
+ --color-border-strong: rgba(255, 255, 255, 0.22);
+
+ --aurora-blue: rgba(96, 165, 250, 0.12);
+ --aurora-amber: rgba(251, 191, 36, 0.1);
+ --aurora-purple: rgba(129, 140, 248, 0.08);
+
+ --status-open: #60a5fa;
--status-progress: #fbbf24;
- --status-blocked: #f43f5e;
- --status-deferred: #94a3b8;
- --status-closed: #10b981;
+ --status-blocked: #f87171;
+ --status-deferred: #a3a3b0;
+ --status-closed: #4ade80;
--priority-p0: #f43f5e;
--priority-p1: #f59e0b;
@@ -42,36 +64,63 @@ body {
body {
background:
- radial-gradient(circle at 10% 10%, var(--aurora-blue), transparent 40%),
- radial-gradient(circle at 90% 10%, var(--aurora-amber), transparent 40%),
- radial-gradient(circle at 50% 90%, var(--aurora-purple), transparent 50%),
- #0b0c10;
+ radial-gradient(circle at 15% 15%, rgba(60, 80, 120, 0.08) 0%, transparent 35%),
+ radial-gradient(circle at 85% 20%, rgba(100, 80, 140, 0.06) 0%, transparent 35%),
+ radial-gradient(circle at 50% 95%, rgba(50, 70, 100, 0.06) 0%, transparent 40%),
+ linear-gradient(180deg, rgba(20, 22, 30, 0.98) 0%, rgba(10, 11, 14, 0.99) 100%);
+ background-color: var(--bg-base);
color: var(--color-text-body);
- font-family: 'DM Sans', 'Segoe UI', Inter, system-ui, sans-serif;
+ font-family: var(--font-ui-stack);
letter-spacing: -0.011em;
+ position: relative;
+ isolation: isolate;
+}
+
+body::before {
+ content: '';
+ position: fixed;
+ inset: 0;
+ background-image:
+ linear-gradient(rgba(255, 255, 255, 0.02) 1px, transparent 1px),
+ linear-gradient(90deg, rgba(255, 255, 255, 0.02) 1px, transparent 1px);
+ background-size: 2rem 2rem;
+ pointer-events: none;
+ z-index: -2;
+}
+
+body::after {
+ content: '';
+ position: fixed;
+ inset: 0;
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
+ opacity: 0.04;
+ pointer-events: none;
+ z-index: -1;
}
* {
scrollbar-width: thin;
- scrollbar-color: rgba(148, 163, 184, 0.25) transparent;
+ scrollbar-color: rgba(148, 163, 184, 0.35) rgba(255, 255, 255, 0.02);
}
*::-webkit-scrollbar {
- width: 5px;
- height: 5px;
+ width: 0.5rem;
+ height: 0.5rem;
}
*::-webkit-scrollbar-track {
- background: transparent;
+ background: rgba(255, 255, 255, 0.02);
+ border-radius: 9999px;
}
*::-webkit-scrollbar-thumb {
- background: rgba(148, 163, 184, 0.2);
- border-radius: 20px;
+ background: linear-gradient(180deg, rgba(156, 163, 175, 0.55), rgba(107, 114, 128, 0.45));
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 9999px;
}
*::-webkit-scrollbar-thumb:hover {
- background: rgba(148, 163, 184, 0.35);
+ background: linear-gradient(180deg, rgba(186, 194, 209, 0.72), rgba(124, 136, 156, 0.62));
}
.custom-scrollbar::-webkit-scrollbar {
@@ -99,24 +148,53 @@ body {
.workflow-card {
- border: 1px solid var(--color-border-soft);
- background: linear-gradient(165deg, rgba(255, 255, 255, 0.03), rgba(255, 255, 255, 0.01));
- box-shadow: 0 4px 24px -2px rgba(0, 0, 0, 0.3), inset 0 1px 1px rgba(255, 255, 255, 0.03);
- backdrop-filter: blur(8px);
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ border-top-color: rgba(255, 255, 255, 0.24);
+ border-bottom-color: rgba(0, 0, 0, 0.9);
+ background: linear-gradient(180deg, rgba(42, 44, 52, 0.6) 0%, rgba(22, 23, 28, 0.6) 100%);
+ box-shadow:
+ var(--elevation-ambient),
+ var(--elevation-tight),
+ inset 0 1px 1px rgba(255, 255, 255, 0.15);
+ backdrop-filter: blur(24px) saturate(120%);
+ -webkit-backdrop-filter: blur(24px) saturate(120%);
+ transform: translateZ(0);
+ will-change: transform, box-shadow;
}
.workflow-card-selected {
- border-color: rgba(56, 189, 248, 0.4);
- background: linear-gradient(165deg, rgba(56, 189, 248, 0.12), rgba(15, 23, 42, 0.8));
- box-shadow: 0 12px 32px -4px rgba(0, 0, 0, 0.45), inset 0 1px 1px rgba(255, 255, 255, 0.08);
+ border-color: rgba(96, 165, 250, 0.42);
+ border-top-color: rgba(96, 165, 250, 0.58);
+ background: linear-gradient(180deg, rgba(60, 68, 88, 0.7) 0%, rgba(35, 40, 52, 0.7) 100%);
+ box-shadow:
+ 0 20px 48px -8px rgba(0, 0, 0, 0.9),
+ 0 0 0 1px rgba(96, 165, 250, 0.25),
+ 0 0 40px rgba(96, 165, 250, 0.15),
+ inset 0 1px 1px rgba(255, 255, 255, 0.3);
+}
+
+.glass-panel {
+ background: var(--glass-base);
+ border: 1px solid var(--edge-side);
+ border-top-color: var(--edge-top);
+ border-bottom-color: var(--edge-bottom);
+ box-shadow: var(--elevation-ambient);
+ backdrop-filter: blur(24px) saturate(120%);
+ -webkit-backdrop-filter: blur(24px) saturate(120%);
}
/* Shared dark form controls to avoid white-on-white browser defaults */
.ui-field {
- border: 1px solid var(--color-border-soft);
- background: linear-gradient(160deg, rgba(28, 33, 43, 0.9), rgba(20, 23, 31, 0.92));
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-top-color: var(--edge-top);
+ border-bottom-color: var(--edge-bottom);
+ background: linear-gradient(180deg, rgba(32, 34, 42, 0.72), rgba(17, 19, 26, 0.72));
color: var(--color-text-strong);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03);
+ box-shadow:
+ 0 8px 20px -12px rgba(0, 0, 0, 0.85),
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
}
.ui-field::placeholder {
@@ -125,9 +203,9 @@ body {
.ui-field:focus-visible {
outline: none;
- border-color: var(--color-border-strong);
+ border-color: rgba(96, 165, 250, 0.48);
box-shadow:
- 0 0 0 2px rgba(125, 175, 245, 0.12),
+ 0 0 0 2px rgba(96, 165, 250, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
@@ -141,6 +219,20 @@ body {
color: #e2e8f0;
}
+.ui-text {
+ font-family: var(--font-ui-stack);
+ font-weight: 500;
+ letter-spacing: -0.01em;
+ line-height: 1.35;
+}
+
+.system-data {
+ font-family: var(--font-mono-stack);
+ font-variant-numeric: tabular-nums;
+ font-weight: 450;
+ letter-spacing: 0.015em;
+}
+
.workflow-graph-legend {
backdrop-filter: blur(12px);
@@ -185,6 +277,14 @@ body {
pointer-events: none;
}
+.workflow-graph-flow .react-flow__edge-text {
+ text-transform: uppercase;
+ font-family: var(--font-mono-stack);
+ paint-order: stroke;
+ stroke: rgba(2, 6, 23, 0.95);
+ stroke-width: 2px;
+}
+
/* Node selection pulse animation - sky-blue ring expands and fades */
@keyframes node-select-pulse {
0% { box-shadow: 0 0 0 0 rgba(56, 189, 248, 0.4); }
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 1417e77..d84e825 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,18 +1,13 @@
import type { Metadata } from 'next';
-import { DM_Sans, JetBrains_Mono } from 'next/font/google';
+import { Noto_Sans } from 'next/font/google';
import type { ReactNode } from 'react';
import './globals.css';
-const dmSans = DM_Sans({
+const notoSans = Noto_Sans({
subsets: ['latin'],
variable: '--font-ui',
});
-const jetbrainsMono = JetBrains_Mono({
- subsets: ['latin'],
- variable: '--font-mono',
-});
-
export const metadata: Metadata = {
title: 'BeadBoard',
description: 'Windows-native Beads dashboard',
@@ -21,7 +16,7 @@ export const metadata: Metadata = {
export default function RootLayout({ children }: { children: ReactNode }) {
return (
-