Files
fusion/packages/dashboard/app/components/CliBinaryInstallBanner.css
gsxdsm 9d1bd393d8 FN-9202: Unify dashboard banner styling
Standardize dashboard notices on a shared, token-driven banner shell.

- Add a reusable Banner primitive with consistent tones, layouts, actions, and dismissal behavior.
- Migrate dashboard notification banners away from bespoke shells and left accent borders.
- Document and test banner styling invariants, including token-only CSS lengths and colors.
- Add a patch changeset for the published dashboard bundle.

Files changed:
 .changeset/fn-9202-banner-style-unification.md     |   7 ++
 docs/dashboard-guide.md                            |   4 +
 .../app/__tests__/banner-style-consistency.test.ts |  25 ++++
 .../app/components/ApprovalNotificationBanner.css  |  10 --
 .../app/components/ApprovalNotificationBanner.tsx  |   5 +-
 packages/dashboard/app/components/Banner.css       |  81 ++++++++++++
 packages/dashboard/app/components/Banner.tsx       |  78 ++++++++++++
 .../app/components/CapacityRiskBanner.css          |  50 +-------
 .../app/components/CapacityRiskBanner.tsx          |  39 +++---
 .../app/components/CliBinaryInstallBanner.css      | 126 ++-----------------
 .../app/components/CliBinaryInstallBanner.tsx      |  14 +--
 .../app/components/DbCorruptionBanner.css          |  18 +--
 .../app/components/DbCorruptionBanner.tsx          |   5 +-
 .../app/components/EngineStatusBanner.css          |  94 ++------------
 .../app/components/EngineStatusBanner.tsx          |  48 +++----
 .../app/components/EngineUnavailableBanner.css     |  42 +------
 .../app/components/EngineUnavailableBanner.tsx     |  21 ++--
 .../app/components/MergeAdvanceNotice.css          | 129 +++----------------
 .../app/components/MergeAdvanceNotice.tsx          |  36 +++---
 .../app/components/MigrationInProgressBanner.css   |  25 ----
 .../app/components/MigrationInProgressBanner.tsx   |  19 +--
 .../app/components/OAuthReloginBanner.css          |  53 +-------
 .../app/components/OAuthReloginBanner.tsx          |  26 +---
 .../app/components/SessionNotificationBanner.css   |  16 +--
 .../app/components/SessionNotificationBanner.tsx   |   5 +-
 .../app/components/SetupWarningBanner.css          | 106 +---------------
 .../app/components/SetupWarningBanner.tsx          |  31 +----
 .../app/components/SqliteMigrationBanner.css       |  40 +-----
 .../app/components/SqliteMigrationBanner.tsx       |  33 ++---
 .../app/components/TaskIdIntegrityBanner.css       |  18 +--
 .../app/components/TaskIdIntegrityBanner.tsx       |   5 +-
 .../dashboard/app/components/TestModeBanner.css    |  18 ---
 .../dashboard/app/components/TestModeBanner.tsx    |  12 +-
 .../app/components/UpdateAvailableBanner.css       | 139 +++------------------
 .../app/components/UpdateAvailableBanner.tsx       |  22 ++--
 .../app/components/__tests__/Banner.test.tsx       |  48 +++++++
 36 files changed, 450 insertions(+), 998 deletions(-)

Fusion-Task-Id: FN-9202

Fusion-Task-Lineage: 14762201-55e5-4124-a897-9667c3a1ab84

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-23 16:00:53 -07:00

14 lines
1.8 KiB
CSS

.cli-binary-banner { margin: var(--space-md) var(--space-lg) 0; }
.cli-binary-banner__body { display: flex; flex: 1; flex-direction: column; gap: var(--space-sm); min-width: 0; }
.cli-binary-banner__title { font-weight: 600; font-size: var(--font-size-sm); color: var(--text); }
.cli-binary-banner__text { font-size: var(--font-size-xs); line-height: 1.5; color: var(--text-muted); }
.cli-binary-banner__text code { background: color-mix(in srgb, var(--text) 6%, transparent); padding: 0 var(--space-sm); border-radius: var(--radius-sm); font-size: 0.92em; }
.cli-binary-banner__actions { display: flex; flex-wrap: wrap; gap: var(--space-sm); margin-top: var(--space-xs); }
.cli-binary-banner__primary, .cli-binary-banner__secondary { cursor: pointer; border-radius: var(--radius-md); padding: var(--space-sm) var(--space-md); font-size: var(--font-size-xs); border: var(--btn-border-width) solid transparent; transition: background var(--transition-fast); }
.cli-binary-banner__primary { background: var(--accent); color: var(--accent-text); }
.cli-binary-banner__primary:hover:not(:disabled) { background: color-mix(in srgb, var(--accent) 88%, var(--text) 12%); }
.cli-binary-banner__primary:disabled { opacity: 0.6; cursor: not-allowed; }
.cli-binary-banner__secondary { background: color-mix(in srgb, var(--text) 4%, transparent); color: var(--text); border-color: color-mix(in srgb, var(--text) 12%, transparent); }
.cli-binary-banner__secondary:hover { background: color-mix(in srgb, var(--text) 8%, transparent); }
.cli-binary-banner__error { margin-top: var(--space-xs); padding: var(--space-sm); background: color-mix(in srgb, var(--color-error) 10%, transparent); border: var(--btn-border-width) solid color-mix(in srgb, var(--color-error) 55%, var(--border)); border-radius: var(--radius-sm); color: var(--color-error); font-size: var(--font-size-xs); line-height: 1.5; }