MotirBuilding in public
MOTIR · moooon
onMotir
You’re viewing a public project. Anyone can view it — no account needed. Sign in to submit, upvote, or comment on requests.View-only — you can’t edit work items
MOTIR-1314

8.17 /dashboard (DashboardsHome) list card has no data-surface — Neumorphism (and glass/aurora) material never reaches it

Done
Description

Type: bug · Parent: Epic 8 (Launch readiness) · Discovered in: manual dogfooding (out-of-band)

Symptom

Under the Neumorphism style (data-style='neumorphism'), the dashboard cards on /dashboard stay FLAT (hard hairline border, no neumorphic mould) — they don't match the style the way other surfaces do.

Root cause (verified against shipped code)

/dashboard (no id) renders DashboardsHome, NOT the widget grid — app/(authed)/dashboard/page.tsx line ~32 (return <DashboardsHome ... />). (The widget WidgetCard, which IS correctly tagged data-surface="card", only renders on /dashboard/[dashboardId] — so it is not the surface seen here.)

DashboardsHome's dashboard-list card container — app/(authed)/dashboard/_components/DashboardsHome.tsx line ~106 — is custom markup with no data-surface: <div className="overflow-hidden rounded-(--radius-card) border border-(--el-border)"> {children} </div>

Surface-MATERIAL styles apply via [data-style='<id>'] [data-surface='<role>'] { … } and only reach surfaces that EMIT data-surface. Neumorphism's card material (app/globals.css line ~1600: [data-style='neumorphism'] [data-surface='card']var(--el-surface) bg + paired soft shadow) therefore never touches this container, so it renders flat. This is the known surface-material coverage gap (content surfaces built on raw markup must be tagged per-card) — the DashboardsHome list card was simply never tagged. Glassmorphism/aurora are missed on it too, for the same reason.

Fix direction

Emit data-surface="card" on the Group list container at DashboardsHome.tsx line ~106 (the visible overflow-hidden rounded-(--radius-card) border div), so the [data-style] [data-surface='card'] material rules reach it. Audit the other untagged dashboard surfaces in the same pass (e.g. DashboardGrid over-cap banner / empty state) and tag the ones that read as cards. Inert under non-material styles.

Resolution

Open — filled by the closing-out subtask.