deckhearth/lib
varutasu dd5ddce7cf
feat(design-system): sub-convoy #1 — corner-ember gradient + dark default (#102)
Operator shared two design mockups (2026-06-04) after PRs #95-#101
landed the Liquid Glass foundation but reported "not seeing very
many changes." Read the mockups; opened umbrella convoy
.convoys/redesign-v2-from-mockups.md with 8 sub-convoys. This PR
ships sub-convoy #1: the gradient finally reads at mockup intensity.

Three changes:

1. Dark theme base shifted from warm-charcoal (#1a0f0a) to deep
   cool-navy (#0d0e1a). The prior brown base made ember-orange and
   purple-magenta corner pools read as "muddy" against a warm-on-warm
   palette. Cool-navy gives those corners somewhere to be vivid.
   Glass surfaces (dark) re-baselined from rgba(26,15,10,X) to
   rgba(20,22,42,X) so glass-on-dark blends without color shift.
   --bg-secondary-dark and --bg-tertiary-dark follow.

2. Body gradient boosted ~50% across the board. Light: 42% amber
   bottom-left (was 28%), 30% bottom-right (was 18%), 24% gold top-
   right (was 16%). Dark: 55% ember-red bottom-left (was 32%), 36%
   bottom-right (was 18%), 26% PURPLE-MAGENTA top-right (was 14%
   purple — operator mockup shows magenta as the dark-variant's
   cosmic accent, replacing the prior subtle purple).

3. Default theme flipped to dark. lib/theme-context.js's
   readThemeFromStorage now defaults to 'dark' instead of 'light' for
   first-time visitors (no stored preference). Operator decision from
   the umbrella convoy's § 7 — the mockup's dark variant is the
   visually-defining read, and the light theme remains fully supported
   via the sidebar toggle.

Why these specific values:

- 42% / 55% radial alphas land in the visible-but-not-garish zone.
  Earlier 8% (PR #100) and 28% (PR #101) read as imperceptible-then-
  faint. AA contrast vs --text-primary measured in the corner
  bleeds: 5.2:1 light, 7.8:1 dark — well above 4.5 AA threshold.
- Ember-red (255,75,30) for the dark bottom-left is the operator
  mockup's signature corner. Pure ember-orange read too "Halloween"
  against deep navy; the red shift toward fire/coal is what makes it
  feel like a hearth.
- Purple-magenta (168,85,247) top-right preserves the TCG brand
  energy from the mockup. Was vanilla purple (124,58,237) in PR
  #100/101 — the mockup is unmistakably toward magenta.

Tests:
- npm run build: green
- npm run lint: clean (1 pre-existing unused-disable warning)
- npm run test:run: 104/104 (no test asserts theme default or
  gradient alphas, so the flip is safe)

Acceptance per umbrella convoy: side-by-side comparison against the
two reference mockups now shows recognizably the same corner-ember
treatment in BOTH themes. Next: sub-convoy #2 (sidebar active-pill +
gradient wordmark) lands in a separate PR.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 10:48:49 -05:00
..
card-import Normalize collector numbers in catalog match and harden scanner adds. (#53) 2026-05-28 14:45:55 -05:00
flags bootstrap: agent pipeline v0.5.0 + ship-readiness review 2026-05-23 02:31:26 -05:00
auth-secret.js fix(auth): centralize JWT secret + 24h TTL (Brief 1 of fix-auth-bypass) 2026-05-23 10:40:50 -05:00
card-catalog-match.js Normalize collector numbers in catalog match and harden scanner adds. (#53) 2026-05-28 14:45:55 -05:00
card-number-utils.js Normalize collector numbers in catalog match and harden scanner adds. (#53) 2026-05-28 14:45:55 -05:00
card-text-match.js fix(scanner): Layer-1 SQL, printing picker, and rate-limit storm (#39) 2026-05-27 13:10:46 -05:00
collection-cards-csv.js Extract collection CSV export helper (Brief 1). (#80) 2026-06-03 16:53:01 -05:00
collection-tag-input.js Extract CollectionsCreateModal and tag helpers (Brief 1). (#82) 2026-06-03 16:53:08 -05:00
collection-vocabulary.js Vocabulary cleanup follow-up (#55) 2026-05-29 10:01:03 -05:00
deck-builder-stats.js refactor(deck-builder): extract stats lib and stats bar (Brief 1) (#89) 2026-06-03 17:24:40 -05:00
mana-symbols.js Major Scanner Improvements 2025-07-29 14:19:48 -05:00
ocr-worker.js feat(scanner): AI Gateway vision + Layer-1 Tesseract/pg_trgm OCR (#38) 2026-05-27 12:59:59 -05:00
permission-middleware.js refactor(auth): add withAdmin() wrapper for admin API routes. (#68) 2026-06-02 12:42:22 -05:00
rate-limit.js fix(security): stop leaking Gemini API key to browsers (#34) 2026-05-27 08:41:48 -05:00
scan-capture-upload.js refactor(scanner): extract disambiguation dialog and upload helpers. (#67) 2026-06-02 11:01:32 -05:00
scan-vision.js fix(scanner): catalog gap review path + not-listed disambiguation (#40) 2026-05-27 13:42:51 -05:00
scanner-card-detection.js refactor(scanner): extract camera lifecycle hook (Brief 4) (#71) 2026-06-02 15:44:56 -05:00
scanner-card-identify.js refactor(scanner): extract card identification pipeline (Brief 3) (#70) 2026-06-02 15:34:13 -05:00
scanner-route-api.js refactor(scanner): extract session and route API libs (page Brief 1) (#74) 2026-06-02 16:15:27 -05:00
scanner-session.js refactor(scanner): extract session and route API libs (page Brief 1) (#74) 2026-06-02 16:15:27 -05:00
slug-utils.js 🔗 Implement Collection Slug URLs 2025-07-26 22:06:52 -05:00
theme-context.js feat(design-system): sub-convoy #1 — corner-ember gradient + dark default (#102) 2026-06-04 10:48:49 -05:00
use-auth.js fix(lint): clear lib/config baseline and make CI lint blocking. (#63) 2026-06-02 01:03:42 -05:00
use-camera-scanner.js refactor(scanner): extract camera lifecycle hook (Brief 4) (#71) 2026-06-02 15:44:56 -05:00
use-card-detail.js refactor(card): useCardDetail + CardDetailView (Brief 3) (#86) 2026-06-03 17:10:13 -05:00
use-card-editor.js refactor(card-editor): useCardEditor + CardEditorView (Brief 3) (#94) 2026-06-03 18:18:31 -05:00
use-cards-page.js Extract AuthenticatedCards into hook + view (cards Brief 3). (#79) 2026-06-03 12:49:25 -05:00
use-collection-view.js refactor(collection): useCollectionView + view (Brief 3) (#88) 2026-06-03 17:10:20 -05:00
use-collections-page.js refactor(collections): useCollectionsPage + view (Brief 3) (#87) 2026-06-03 17:10:17 -05:00
use-deck-builder.js refactor(deck-builder): useDeckBuilder + DeckBuilderView (Brief 3) (#93) 2026-06-03 18:18:28 -05:00
use-focus-trap.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
use-scanner-identification.js refactor(scanner): extract identification hook (Brief 5) (#72) 2026-06-02 15:59:03 -05:00
use-scanner-queue.js refactor(scanner): extract useScannerQueue hook (page Brief 2) (#75) 2026-06-02 21:28:24 -05:00