store: reconcile globals.css with the approved design tokens #45

Closed
opened 2026-08-27 06:35:52 +00:00 by yuris · 0 comments
Owner

Unblocked — #40 is answered. Palette: adopt the design green. Typography: adopt both families. Details below; the reasoning is in #40's decision comment.

Palette (from #40.2)

  • --accent: #b4471f → #2d543c. Re-derive --accent-hover and --accent-soft from the new hue rather than carrying the rust tints across.
  • --ok keeps #2d543c — it already equals the incoming accent, and the design separates availability by chip tint, not hue. Add --warn: #8a5a12 and --off: #8c3a32 for the tri-state chips #47 needs.
  • .stock-badge.is-out must move from --accent to --off. It currently borrows the accent, so a green accent would render "Habis" in the available colour. This is the one repaint that is a correctness bug, not a taste call.
  • Re-check --focus: #1b4d8f still reads as deliberately-not-the-accent against green, and that .category-tile:hover (--accent-soft) has not become indistinguishable from the ready chip.

Typography (from #40.3)

Archivo for display (h1–h4, .price, .brand-name, buttons), IBM Plex Sans for body, replacing Inter in app/layout.tsx. Load via next/font and self-host — do not copy the mockups' <link rel="stylesheet"> to fonts.googleapis.com; this is a static export and that is a render-blocking third-party request on every page. Subset to latin. Keep font-variant-numeric: tabular-nums on prices, and re-verify the retail scale still holds (h1 capped ~2.5rem, line-height 1.15) since Archivo's metrics differ from Inter's.

#33 already built a token system in apps/store/app/globals.css (781 lines, --s1..--s16, radii, --container, --section-y). The approved assets/tokens.css differs in measurable ways that are not decisions and can land regardless:

Token Shipped Design
--container 1180px 1280px
.product-grid minmax(170px, 1fr) minmax(200px, 1fr)
.cards / .list-cards minmax(260px/280px, 1fr) denser, one rule
radii --r-sm/md/lg 8/12/16 --r1/r2/r3 8/12/16 (same values, different names)
section rhythm --section-y --section-gap: 44px, 36px under 1120px

Note the grid figure: the design's minmax(200px, 1fr) is less dense than what shipped at 170px. #33's comment defends the tighter cell deliberately. Widening to 200px is a real regression in items-per-row on desktop — either accept the design's looser cell as reviewed, or keep 170px and record the deviation here. Do not change it silently.

Also in scope, and independent of #40: the mockups' .rail-card .btn--ghost needed a contrast fix (dark green on the dark service band measured ~1.3:1). Check the shipped .service-band for the same defect before copying anything from the mockup's rail.

Acceptance

--container, the grid cells, and the section rhythm match whatever this issue records as the decision; every existing class keeps working with no .tsx changes, same as #33. The accent and font changes are a separate commit gated on #40, so this issue can close without them if #40 rules them out.

**Unblocked — #40 is answered.** Palette: adopt the design green. Typography: adopt both families. Details below; the reasoning is in #40's decision comment. ### Palette (from #40.2) - `--accent`: `#b4471f` → `#2d543c`. Re-derive `--accent-hover` and `--accent-soft` from the new hue rather than carrying the rust tints across. - `--ok` keeps `#2d543c` — it already equals the incoming accent, and the design separates availability by chip tint, not hue. Add `--warn: #8a5a12` and `--off: #8c3a32` for the tri-state chips #47 needs. - **`.stock-badge.is-out` must move from `--accent` to `--off`.** It currently borrows the accent, so a green accent would render "Habis" in the available colour. This is the one repaint that is a correctness bug, not a taste call. - Re-check `--focus: #1b4d8f` still reads as deliberately-not-the-accent against green, and that `.category-tile:hover` (`--accent-soft`) has not become indistinguishable from the ready chip. ### Typography (from #40.3) Archivo for display (`h1–h4`, `.price`, `.brand-name`, buttons), IBM Plex Sans for body, replacing Inter in `app/layout.tsx`. Load via `next/font` and self-host — do **not** copy the mockups' `<link rel="stylesheet">` to `fonts.googleapis.com`; this is a static export and that is a render-blocking third-party request on every page. Subset to latin. Keep `font-variant-numeric: tabular-nums` on prices, and re-verify the retail scale still holds (h1 capped ~2.5rem, line-height 1.15) since Archivo's metrics differ from Inter's. #33 already built a token system in `apps/store/app/globals.css` (781 lines, `--s1..--s16`, radii, `--container`, `--section-y`). The approved `assets/tokens.css` differs in measurable ways that are not decisions and can land regardless: | Token | Shipped | Design | |---|---|---| | `--container` | `1180px` | `1280px` | | `.product-grid` | `minmax(170px, 1fr)` | `minmax(200px, 1fr)` | | `.cards` / `.list-cards` | `minmax(260px/280px, 1fr)` | denser, one rule | | radii | `--r-sm/md/lg` 8/12/16 | `--r1/r2/r3` 8/12/16 (same values, different names) | | section rhythm | `--section-y` | `--section-gap: 44px`, `36px` under 1120px | Note the grid figure: the design's `minmax(200px, 1fr)` is *less* dense than what shipped at `170px`. #33's comment defends the tighter cell deliberately. Widening to 200px is a real regression in items-per-row on desktop — either accept the design's looser cell as reviewed, or keep 170px and record the deviation here. Do not change it silently. Also in scope, and independent of #40: the mockups' `.rail-card .btn--ghost` needed a contrast fix (dark green on the dark service band measured ~1.3:1). Check the shipped `.service-band` for the same defect before copying anything from the mockup's rail. ### Acceptance `--container`, the grid cells, and the section rhythm match whatever this issue records as the decision; every existing class keeps working with no `.tsx` changes, same as #33. The accent and font changes are a separate commit gated on #40, so this issue can close without them if #40 rules them out.
yuris closed this issue 2026-08-27 09:25:59 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
yuris/garage#45
No description provided.