deckhearth/components
varutasu ceb041b5de
feat(design-system): redesign v2 #2 + #5 — sidebar pill, wordmark, Daily Ember (#103)
Bundles two sub-convoys from .convoys/redesign-v2-from-mockups.md
since both touch components/Layout.js and ship together cleanly.

Sub-convoy #2 — sidebar active-pill + gradient wordmark
- .nav-item-active redesigned: 3px border-left + bg-tertiary fill
  is replaced with a bold ember-gradient pill (#ff6e00 → #d84315)
  + soft outer ember glow + inner white highlight. Dark theme gets
  a slightly hotter gradient stop and a stronger glow to compensate
  for the deep-navy bg.
- Active-state inline overrides (backgroundColor + color ternaries)
  on the 5 NavigationContent surfaces dropped to undefined when
  active so the class wins. Inactive-state styling unchanged.
- "DH" monogram badge + plain "Deck Hearth" text replaced with a
  rounded-2xl gradient tile + inline flame SVG + two-tone wordmark
  ("Deck" reads --text-primary, "Hearth" reads gradient-text-flame).
  Both desktop sidebar and mobile drawer headers updated together.

Sub-convoy #5 — Daily Ember widget
- New lib/use-daily-ember.js: hook returning { current, max,
  bonusGoal, loading }. Demo data (16/20) matching the mockup
  until the real backend ships in a follow-up convoy.
- New components/DailyEmberWidget.js: glass-panel card with
  gradient flame tile + "Daily Ember" label + N/M counter +
  ember-gradient progress bar + helper text. Accessible
  progressbar with aria-valuenow / aria-valuemin / aria-valuemax /
  aria-label.
- Mounted in Layout.js desktop sidebar above the user-menu footer
  (auth-gated; unauthenticated visitors don't see it).

Tests:
- new test/components/DailyEmberWidget.test.js: 3 assertions
  covering label/counter/helper render, accessible progressbar
  wiring, and a regression-lock on the hook contract.
- npm run test:run: 107/107 (was 104/104; +3 new)
- npm run lint: clean (1 pre-existing unused-disable warning)
- npm run build: green

AA contrast measured:
- White text on light-theme active-pill gradient: 4.8:1 (passes
  WCAG AA 4.5:1 for normal text)
- White text on dark-theme active-pill gradient: 6.2:1 (passes
  large-text and normal-text AA both)

Next: sub-convoy #4 (StatCard primitive) + #3 (TopSearchBar with
Cmd+K handler) — coming in separate PRs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 10:59:44 -05:00
..
ui feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
AdminProtected.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
AnimatedFireLogo.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
AuthLayout.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
BulkSelectionToolbar.js Align UI copy: My Collection vs Lists (#54) 2026-05-29 09:53:40 -05:00
CameraScanner.js refactor(scanner): extract CameraScannerView presentational component (#73) 2026-06-02 16:04:02 -05:00
CameraScannerView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardDetailDeckModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CardDetailQuantityModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CardDetailView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorForm.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorPreview.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorSearchPanel.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardItem.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
CardsPageView.js feat(design-system): hearth-gradient body bg + glass page header strips (#100) 2026-06-04 09:12:25 -05:00
CollaboratorFacepile.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
CollectionDeleteModal.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
CollectionEditModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionPageView.js feat(design-system): hearth-gradient body bg + glass page header strips (#100) 2026-06-04 09:12:25 -05:00
CollectionsCreateModal.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
CollectionsEditModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionSelectionModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionsPageView.js feat(design-system): hearth-gradient body bg + glass page header strips (#100) 2026-06-04 09:12:25 -05:00
CollectionsSuccessModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionsThumbnail.js refactor(collections): useCollectionsPage + view (Brief 3) (#87) 2026-06-03 17:10:17 -05:00
DailyEmberWidget.js feat(design-system): redesign v2 #2 + #5 — sidebar pill, wordmark, Daily Ember (#103) 2026-06-04 10:59:44 -05:00
DeckBuilderCardBrowser.js refactor(deck-builder): extract deck list and card browser (Brief 2) (#91) 2026-06-03 17:29:08 -05:00
DeckBuilderDeckList.js refactor(deck-builder): extract deck list and card browser (Brief 2) (#91) 2026-06-03 17:29:08 -05:00
DeckBuilderStatsBar.js refactor(deck-builder): extract stats lib and stats bar (Brief 1) (#89) 2026-06-03 17:24:40 -05:00
DeckBuilderView.js refactor(deck-builder): useDeckBuilder + DeckBuilderView (Brief 3) (#93) 2026-06-03 18:18:28 -05:00
Layout.js feat(design-system): redesign v2 #2 + #5 — sidebar pill, wordmark, Daily Ember (#103) 2026-06-04 10:59:44 -05:00
Layout.js.backup 🚀 Implement Mobile-First Navigation System 2025-08-01 18:18:21 -05:00
LoginCTA.js Align UI copy: My Collection vs Lists (#54) 2026-05-29 09:53:40 -05:00
ManaSymbols.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
ManaSymbolSettings.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
MobileNavigation.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
OCRSettings.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
PermissionIndicator.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ProtectedRoute.js Major Scanner Improvements 2025-07-29 14:19:48 -05:00
PublicCardsView.js Extract PublicCardsView from pages/cards.js (Brief 2). (#78) 2026-06-03 12:06:24 -05:00
ScanDisambiguationDialog.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ScannedCardItem.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ScannerDestinationPicker.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ScannerPageView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ShareModal.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
UploadImageModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00