feat(design-system): hearth body gradient + glass page header strips #100
No reviewers
Labels
No labels
agent-context-drift
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: rstillwell/deckhearth#100
Loading…
Reference in a new issue
No description provided.
Delete branch "hearth-bg-and-page-header-glass"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why this exists
You reported on /my-cards (local dev build) that "nothing has changed" after PRs #97 / #98 / #99. CDP diagnostic on both the production page and your local build found the actual reasons the design vibe still felt flat:
Body bg is a flat warm-white (#fefcf8). Glass surfaces sitting on a same-hue solid have nothing to blur. The backdrop-filter renders correctly but produces no visible distortion — the panel reads as a 68%-alpha rectangle over a 100%-identical-color background, which is visually indistinguishable from a solid card. The reason the "glass" looked like a flat panel was never the panel CSS — it was the canvas underneath.
Pages with populated data have zero
.glass-panelelements after #97's sweep. Your /my-cards (2 cards) renders no glass at all because the one panel I migrated was the empty-state CTA, which never appears when you have cards. /dashboard had 5 glass surfaces but its visible page header strip stayed flat per my earlier (wrong) "page headers stay solid" call. That call was right only if there's a topbar to stack against — this layout has a sidebar, so the page header strip is the only horizontal chrome and absolutely should be glass.What this PR does
A. Hearth gradient on body
A soft warm wash that gives glass surfaces a real substrate to blur and distort. Two radial glows + one vertical gradient, all
background-attachment: fixedso scrolling content slides OVER the gradient (the parallax that makes glass feel real):```css
body {
background-image:
radial-gradient(ellipse 80% 60% at 15% 100%,
rgba(255,128,0,0.08) 0%, rgba(255,128,0,0.02) 40%, transparent 70%),
radial-gradient(ellipse 60% 50% at 85% 0%,
rgba(255,171,64,0.06) 0%, transparent 60%),
linear-gradient(180deg, rgba(254,252,248,1) 0%, rgba(252,246,235,1) 100%);
background-attachment: fixed;
}
```
Dark theme uses purple instead of gold for the second radial. All alphas low (8% / 6% in light; 16% / 8% in dark) — readable, not garish.
B.
.page-header-glassutility + sweepNew utility for the recurring "page header strip" pattern. Higher tint than
.glass-panel(the strip spans full content width and needs more visual weight), same blur + rim-light + a 1px shadow as the bottom separator:```css
.page-header-glass {
background: var(--glass-surface-high);
backdrop-filter: blur(20px) saturate(180%);
box-shadow: var(--rim-light-inner), 0 1px 0 var(--border);
}
```
Mechanically swept to 6 page header strips:
pages/my-cards.jspages/dashboard.jspages/community/collections.jscomponents/CardsPageView.js(used by/cards)components/CollectionsPageView.js(used by/collections)components/CollectionPageView.js(used by/collection/[id])Expected visual outcome
On every authenticated page, you'll now see:
.glass-panelsurfaces (#97's 18 cards) now actually look like glass because they have a non-uniform substrate to distortTests
npm run build— green, compiled CSS verified (background, backdrop-filter both prefixed + unprefixed, chained box-shadow all present)npm run lint— cleannpm run test:run— 104/104 vitest passTest plan
Made with Cursor
The latest updates on your projects. Learn more about Vercel for GitHub.
Pipeline Health
Build + CI gates
Build runs on Vercel; this CI runs lint and schema-map drift only (no duplicate build).
Role reports
See individual comments above for details. This rollup updates automatically.
Visual Diff
Screenshots and diffs uploaded as artifacts: view run
If intentional changes: update snapshots locally with
npx playwright test --project=visual --update-snapshotsand commit.