From 2501f658b208db5b35691bc627703c1a022be9a8 Mon Sep 17 00:00:00 2001 From: Andrew Lovseth Date: Sun, 16 Aug 2026 12:31:51 -0700 Subject: [PATCH 1/6] Homepage demo dialog: single hero CTA opens a shared modal; new hero copy The hero's two links collapse to one button; any [data-bcn-demo-open] opens bcn-demo-dialog, a lego-composed form with no endpoint yet. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01LV6S3jtPh8cJw8fD6B6EtH --- src/components/bcn/BcnDemoDialog.astro | 183 ++++++++++++++++++++++ src/components/bcn/BcnMarketingHero.astro | 34 ++-- src/data/homepage.ts | 11 +- src/pages/prototypes/homepage.astro | 3 + 4 files changed, 203 insertions(+), 28 deletions(-) create mode 100644 src/components/bcn/BcnDemoDialog.astro diff --git a/src/components/bcn/BcnDemoDialog.astro b/src/components/bcn/BcnDemoDialog.astro new file mode 100644 index 00000000..2df979c9 --- /dev/null +++ b/src/components/bcn/BcnDemoDialog.astro @@ -0,0 +1,183 @@ +--- +// — the marketing demo-request dialog. Any element carrying +// data-bcn-demo-open anywhere on the page opens it, so the hero CTA and the +// Get Started card share one dialog instance. +// +// PROTOTYPE: there is no endpoint. Submit validates, renders the confirmation +// state, and console.logs the payload. Wire a real POST before this ships. +// +// bcn-lego-checked: composed entirely from esa-* legos — esa-dialog is the shell +// (backdrop, focus trap, Esc), esa-text-field / esa-checkbox-group / esa-textarea +// are the fields, esa-button is the footer pair, .stack and .cluster are the +// layout. bcn-demo-dialog exists only to hold the composition and the open/submit +// wiring, which no lego provides. +import EsaButton from '@esa/ecology/esa-button.astro'; + +/** Interest picker options — the four platform functions, plus an out. */ +const INTERESTS = [ + { label: 'Planning and commitment libraries', value: 'plan' }, + { label: 'Tracking permits, tasks, and deadlines', value: 'track' }, + { label: 'Monitoring and field data', value: 'monitor' }, + { label: 'Agency reporting', value: 'report' }, + { label: "Not sure yet — show me everything", value: 'unsure' }, +]; +--- + + +
+

+ Tell us about your project and we'll set up a walkthrough with the Beacon team. +

+ + + + + + + + +
+ + + + + + + Cancel + Send request + + + +
+ + + + diff --git a/src/components/bcn/BcnMarketingHero.astro b/src/components/bcn/BcnMarketingHero.astro index 2be06a33..130bb0ce 100644 --- a/src/components/bcn/BcnMarketingHero.astro +++ b/src/components/bcn/BcnMarketingHero.astro @@ -1,12 +1,12 @@ --- // — the homepage hero: the aerial construction photo under a // deep-teal gradient, a two-line serif display headline, the positioning -// paragraph, the two CTAs (inverse white + on-photo ghost), and the ESA -// provenance badge. Content comes from HERO in src/data/homepage.ts. +// paragraph, the single demo CTA (inverse white), and the ESA provenance badge. +// Content comes from HERO in src/data/homepage.ts. // // bcn-lego-checked: no esa-* lego is a photo marketing hero (esa-page-header is -// app chrome), and esa-button has no inverse white / on-photo ghost marketing -// variants at this display scale; checked Beacon (no marketing site). The badge +// app chrome), and esa-button has no inverse white marketing variant at this +// display scale; checked Beacon (no marketing site). The badge // glyph is the esa-icon lego with a paths fallback. bcn-marketing-hero is the // reusable home; the CTA styles are the one-off marketing voice. import EsaIcon from '@esa/ecology/esa-icon.astro'; @@ -24,12 +24,9 @@ const heroImage = withBase('/images/marketing/hero-aerial.jpg');

{HERO.sub}

@@ -73,7 +70,7 @@ const heroImage = withBase('/images/marketing/hero-aerial.jpg'); .bcn-mkt-hero__headline { margin: 0 0 var(--spacing-500); font-family: var(--font-decorative, var(--font-sans)); - font-size: var(--type-size-1000); + font-size: var(--type-size-800); font-weight: var(--font-weight-bold); line-height: 1.15; color: #ffffff; @@ -85,7 +82,7 @@ const heroImage = withBase('/images/marketing/hero-aerial.jpg'); font-size: var(--type-size-400); font-weight: var(--font-weight-medium); color: rgba(255, 255, 255, 0.85); - line-height: var(--line-height-relaxed, 1.75); + line-height: normal; text-wrap: pretty; } @@ -96,17 +93,20 @@ const heroImage = withBase('/images/marketing/hero-aerial.jpg'); flex-wrap: wrap; } - /* On-photo marketing CTA voices (lg scale). */ + /* On-photo marketing CTA voice (lg scale). Renders as a
diff --git a/src/components/bcn/BcnComponentSummary.astro b/src/components/bcn/BcnComponentSummary.astro index df13274e..5161bbf4 100644 --- a/src/components/bcn/BcnComponentSummary.astro +++ b/src/components/bcn/BcnComponentSummary.astro @@ -64,7 +64,7 @@ const breakdownAria = summary.breakdown
-
0 ? '--stat-value-color: var(--color-danger-strong)' : undefined}> +
0 ? '--stat-value-color: var(--color-content-utility-danger)' : undefined}>
@@ -106,11 +106,11 @@ const breakdownAria = summary.breakdown min-width: 22px; height: 22px; padding: 0 var(--spacing-150); - font-size: var(--type-size-100); - font-weight: var(--font-weight-semibold); - color: var(--color-text-secondary); - background: var(--color-surface); - border: 1px solid var(--color-border); + font-size: var(--font-size-100); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-secondary); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); border-radius: var(--radius-100); font-variant-numeric: tabular-nums; } @@ -123,7 +123,7 @@ const breakdownAria = summary.breakdown border-radius: var(--radius-full); overflow: hidden; display: flex; - background: var(--color-surface-sunken); + background: var(--color-background-elevation-sunken); } .bcn-summary__seg { height: 100%; background: var(--_c); } @@ -132,11 +132,11 @@ const breakdownAria = summary.breakdown display: flex; align-items: center; gap: var(--spacing-200); - font-size: var(--type-size-150); - color: var(--color-text-secondary); + font-size: var(--font-size-150); + color: var(--color-content-default-secondary); } .bcn-summary__dot { width: 10px; height: 10px; border-radius: var(--radius-full); background: var(--_c); flex-shrink: 0; } - .bcn-summary__legend-count { font-weight: var(--font-weight-semibold); color: var(--color-text-primary); font-variant-numeric: tabular-nums; } + .bcn-summary__legend-count { font-weight: var(--typography-font-weight-semibold); color: var(--color-content-default); font-variant-numeric: tabular-nums; } /* attention lane */ .bcn-summary__attention { display: flex; flex-direction: column; } @@ -144,33 +144,33 @@ const breakdownAria = summary.breakdown list-style: none; margin: var(--spacing-400) 0 0; padding: var(--spacing-400) 0 0; - border-top: 1px solid var(--color-border-light); + border-top: 1px solid var(--color-border-default-subtle); display: flex; flex-direction: column; gap: var(--spacing-200); } .bcn-summary__att-row { display: flex; align-items: center; gap: var(--spacing-200); justify-content: space-between; } - .bcn-summary__att-name { font-size: var(--type-size-150); color: var(--color-text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .bcn-summary__att-name { font-size: var(--font-size-150); color: var(--color-content-default); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .bcn-summary__att-flag { display: inline-flex; align-items: center; gap: var(--spacing-100); padding: 1px var(--spacing-200); border-radius: var(--radius-100); - font-size: var(--type-size-100); - font-weight: var(--font-weight-semibold); - color: var(--color-danger-strong); - background: color-mix(in srgb, var(--color-danger) 12%, white); - border: 1px solid color-mix(in srgb, var(--color-danger) 26%, white); + font-size: var(--font-size-100); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-utility-danger); + background: color-mix(in srgb, var(--color-background-utility-danger) 12%, white); + border: 1px solid color-mix(in srgb, var(--color-background-utility-danger) 26%, white); white-space: nowrap; flex-shrink: 0; } - .bcn-summary__att-more { font-size: var(--type-size-100); color: var(--color-text-muted); } + .bcn-summary__att-more { font-size: var(--font-size-100); color: var(--bcn-content-muted); } .bcn-summary__att-clear { margin: var(--spacing-400) 0 0; padding: var(--spacing-400) 0 0; - border-top: 1px solid var(--color-border-light); - font-size: var(--type-size-150); - color: var(--color-text-secondary); + border-top: 1px solid var(--color-border-default-subtle); + font-size: var(--font-size-150); + color: var(--color-content-default-secondary); } diff --git a/src/components/bcn/BcnConsultationLog.astro b/src/components/bcn/BcnConsultationLog.astro index 426d5c16..548cf64c 100644 --- a/src/components/bcn/BcnConsultationLog.astro +++ b/src/components/bcn/BcnConsultationLog.astro @@ -36,7 +36,7 @@ for (const entry of entries) {
{addable && (
- + Log consultation
@@ -84,7 +84,7 @@ for (const entry of entries) { position: relative; margin-left: 5px; padding: 0 0 var(--spacing-400) var(--spacing-500); - border-left: 2px solid var(--color-border); + border-left: 2px solid var(--color-border-default); } .bcn-consultation-log__day:last-child { border-left-color: transparent; padding-bottom: 0; } .bcn-consultation-log__day::before { @@ -95,15 +95,15 @@ for (const entry of entries) { width: 10px; height: 10px; border-radius: 50%; - background: var(--color-surface); - border: 2px solid var(--color-secondary); + background: var(--color-background-elevation-raised); + border: 2px solid var(--color-background-brand-muted); } .bcn-consultation-log__date { margin: 0 0 var(--spacing-200); font-size: 0.8125rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } .bcn-consultation-log__entries { @@ -123,8 +123,8 @@ for (const entry of entries) { margin: 0; font-size: 1rem; line-height: 1.45; - color: var(--color-text-primary); + color: var(--color-content-default); } - .bcn-consultation-log__by { font-size: 0.75rem; color: var(--color-text-tertiary); } + .bcn-consultation-log__by { font-size: 0.75rem; color: var(--color-content-default-tertiary); } diff --git a/src/components/bcn/BcnContrastPanels.astro b/src/components/bcn/BcnContrastPanels.astro index 714091d2..45feb66e 100644 --- a/src/components/bcn/BcnContrastPanels.astro +++ b/src/components/bcn/BcnContrastPanels.astro @@ -92,16 +92,16 @@ import { CONTRAST_WITHOUT, CONTRAST_WITH, CONTRAST_MOCK_ROWS } from '../../data/ .bcn-contrast__card { border-radius: var(--radius-200); padding: var(--spacing-600); - border: 1px solid var(--color-border); + border: 1px solid var(--color-border-default); overflow: hidden; } .bcn-contrast__card--before { - background: var(--color-danger-subtle); - border-color: var(--color-danger-border); + background: var(--color-background-utility-danger-subtle); + border-color: var(--color-border-utility-danger); } .bcn-contrast__card--after { - background: var(--color-success-subtle); - border-color: var(--color-success-border); + background: var(--color-background-utility-success-subtle); + border-color: var(--color-border-utility-success); } /* Full-bleed media strip across the card's top. */ @@ -120,14 +120,14 @@ import { CONTRAST_WITHOUT, CONTRAST_WITH, CONTRAST_MOCK_ROWS } from '../../data/ align-items: center; gap: var(--spacing-200); margin-block-end: var(--spacing-400); - font-size: var(--type-size-400); - font-weight: var(--font-weight-semibold); + font-size: var(--font-size-400); + font-weight: var(--typography-font-weight-semibold); } .bcn-contrast__card--before .bcn-contrast__title { - color: var(--color-danger-strong); + color: var(--color-content-utility-danger); } .bcn-contrast__card--after .bcn-contrast__title { - color: var(--color-success-strong); + color: var(--color-content-utility-success); } .bcn-contrast__list { @@ -142,7 +142,7 @@ import { CONTRAST_WITHOUT, CONTRAST_WITH, CONTRAST_MOCK_ROWS } from '../../data/ display: flex; align-items: flex-start; gap: var(--spacing-300); - font-size: var(--type-size-200); + font-size: var(--font-size-200); line-height: var(--line-height-normal, 1.5); } .bcn-contrast__glyph { @@ -151,10 +151,10 @@ import { CONTRAST_WITHOUT, CONTRAST_WITH, CONTRAST_MOCK_ROWS } from '../../data/ margin-block-start: 2px; } .bcn-contrast__card--before .bcn-contrast__glyph { - color: var(--color-danger); + color: var(--color-background-utility-danger); } .bcn-contrast__card--after .bcn-contrast__glyph { - color: var(--color-success); + color: var(--color-background-utility-success); } /* ── The illustrative dark product-window mock (artwork literals) ── */ @@ -175,7 +175,7 @@ import { CONTRAST_WITHOUT, CONTRAST_WITH, CONTRAST_MOCK_ROWS } from '../../data/ background: rgba(255, 255, 255, 0.06); border-radius: var(--radius-100); margin-block-end: var(--spacing-300); - font-weight: var(--font-weight-medium); + font-weight: var(--typography-font-weight-medium); font-size: 11px; color: #989898; } @@ -183,7 +183,7 @@ import { CONTRAST_WITHOUT, CONTRAST_WITH, CONTRAST_MOCK_ROWS } from '../../data/ inline-size: 8px; block-size: 8px; border-radius: 50%; - background: var(--color-primary); + background: var(--color-background-brand); } .bcn-contrast__mock-row { display: flex; @@ -214,7 +214,7 @@ import { CONTRAST_WITHOUT, CONTRAST_WITH, CONTRAST_MOCK_ROWS } from '../../data/ } .bcn-contrast__mock-badge { font-size: 10px; - font-weight: var(--font-weight-semibold); + font-weight: var(--typography-font-weight-semibold); padding: 2px 8px; border-radius: var(--radius-full, 9999px); white-space: nowrap; diff --git a/src/components/bcn/BcnCount.astro b/src/components/bcn/BcnCount.astro index 74f8606d..591a03cd 100644 --- a/src/components/bcn/BcnCount.astro +++ b/src/components/bcn/BcnCount.astro @@ -39,10 +39,10 @@ const { value, label } = Astro.props; /* 13px — the design-principles meta floor; no token exists at this step (150 = 14px read too big beside card titles — Andy, round 3). */ font-size: 0.8125rem; - font-weight: var(--font-weight-medium); - color: var(--color-text-secondary); - background: var(--color-surface); - border: 1px solid var(--color-border); + font-weight: var(--typography-font-weight-medium); + color: var(--color-content-default-secondary); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); border-radius: var(--radius-100); font-variant-numeric: tabular-nums; white-space: nowrap; diff --git a/src/components/bcn/BcnCountChip.astro b/src/components/bcn/BcnCountChip.astro index 7dcf52f9..c1480bc3 100644 --- a/src/components/bcn/BcnCountChip.astro +++ b/src/components/bcn/BcnCountChip.astro @@ -84,7 +84,7 @@ const hookAttr = hook ? { [hook]: '' } : {}; justify-content: center; width: 100%; height: 100%; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); /* 18px — a step OFF the scale on purpose. esa-icon jumps sm(16) to md(20), and 16 was too small here (it was the previous setting) while 20 is a shade too heavy beside a 15px bubble. Re-pointed through the lego own --icon-size-md rather than styling the @@ -113,10 +113,10 @@ const hookAttr = hook ? { [hook]: '' } : {}; reads: the named variants (success, info, …) assign the badge's internal fill directly and would silently ignore both. */ /* SOLID, no outline. Without a border the fill has to carry the shape on its own, so - it steps from --color-surface-sunken (#efefef, which needed the border to read) to - --color-border (#dcdcdc) — still grey, still quiet, but definite against the card. */ - --badge-bg: var(--color-border); - --badge-text-color: var(--color-text-secondary); + it steps from --color-background-elevation-sunken (#efefef, which needed the border to read) to + --color-border-default (#dcdcdc) — still grey, still quiet, but definite against the card. */ + --badge-bg: var(--color-border-default); + --badge-text-color: var(--color-content-default-secondary); min-width: 19px; height: 19px; padding: 0 4px; @@ -132,7 +132,7 @@ const hookAttr = hook ? { [hook]: '' } : {}; line-height: 1; /* A ring in the card's own surface colour punches the bubble out of the glyph beneath it — without it the two shapes merge at small sizes. */ - box-shadow: 0 0 0 1.5px var(--color-surface); + box-shadow: 0 0 0 1.5px var(--color-background-elevation-raised); } /* The visible chip is a glyph and a digit; this is the sentence it stands for. */ .bcn-countchip__sr { diff --git a/src/components/bcn/BcnCtaPaths.astro b/src/components/bcn/BcnCtaPaths.astro index cde282b9..80af5741 100644 --- a/src/components/bcn/BcnCtaPaths.astro +++ b/src/components/bcn/BcnCtaPaths.astro @@ -22,7 +22,7 @@ import { CTA_PATHS, MARKETING_ICON_PATHS } from '../../data/homepage';
{path.title}
{path.description}
- + {path.button.label}
@@ -43,8 +43,8 @@ import { CTA_PATHS, MARKETING_ICON_PATHS } from '../../data/homepage'; align-items: center; text-align: center; padding: var(--spacing-700) var(--spacing-500); - background: var(--color-surface); - border: 1px solid var(--color-border); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); border-radius: var(--radius-200); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06), @@ -52,7 +52,7 @@ import { CTA_PATHS, MARKETING_ICON_PATHS } from '../../data/homepage'; } .bcn-cta-paths__card--featured { - border-color: var(--color-primary); + border-color: var(--color-background-brand); border-width: 2px; position: relative; } @@ -63,10 +63,10 @@ import { CTA_PATHS, MARKETING_ICON_PATHS } from '../../data/homepage'; left: 50%; transform: translate(-50%, -50%); font-size: 10px; - font-weight: var(--font-weight-bold); + font-weight: var(--typography-font-weight-bold); letter-spacing: 1px; color: #ffffff; - background: var(--color-primary); + background: var(--color-background-brand); padding: var(--spacing-100) var(--spacing-300); border-radius: var(--radius-full, 9999px); } @@ -75,8 +75,8 @@ import { CTA_PATHS, MARKETING_ICON_PATHS } from '../../data/homepage'; inline-size: 56px; block-size: 56px; border-radius: var(--radius-full, 9999px); - background: var(--color-primary-subtle, #effefb); - color: var(--color-primary); + background: var(--color-background-brand-subtle, #effefb); + color: var(--color-background-brand); display: flex; align-items: center; justify-content: center; @@ -85,13 +85,13 @@ import { CTA_PATHS, MARKETING_ICON_PATHS } from '../../data/homepage'; } .bcn-cta-paths__title { - font-size: var(--type-size-400); - font-weight: var(--font-weight-semibold); + font-size: var(--font-size-400); + font-weight: var(--typography-font-weight-semibold); margin-block-end: var(--spacing-300); } .bcn-cta-paths__desc { - font-size: var(--type-size-150); - color: var(--color-text-secondary); + font-size: var(--font-size-150); + color: var(--color-content-default-secondary); line-height: var(--line-height-relaxed, 1.75); margin-block-end: var(--spacing-500); flex: 1; diff --git a/src/components/bcn/BcnDangerZone.astro b/src/components/bcn/BcnDangerZone.astro index d1971b7c..5d65aeb2 100644 --- a/src/components/bcn/BcnDangerZone.astro +++ b/src/components/bcn/BcnDangerZone.astro @@ -39,17 +39,17 @@ const headingId = `bcn-danger-zone-${++nextId}`; diff --git a/src/components/bcn/BcnDetailAssignments.astro b/src/components/bcn/BcnDetailAssignments.astro index f42a08e8..407161e7 100644 --- a/src/components/bcn/BcnDetailAssignments.astro +++ b/src/components/bcn/BcnDetailAssignments.astro @@ -73,7 +73,7 @@ const statusMeta = statusOptions.find((o) => o.value === statusValue); - Edit assignments + Edit assignments )} @@ -115,14 +115,14 @@ const statusMeta = statusOptions.find((o) => o.value === statusValue); } /* Mirrors bcn-key-value's label → value tier exactly (one KV treatment). */ .bcn-dassign__k { - font-size: var(--form-font-size-md, 0.9375rem); - font-weight: var(--font-weight-medium); + font-size: var(--typography-label-md-font-size, 0.9375rem); + font-weight: var(--typography-font-weight-medium); color: var(--form-label-color); } .bcn-dassign__v { - font-size: var(--form-font-size-md, 0.9375rem); - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-size: var(--typography-label-md-font-size, 0.9375rem); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } .bcn-dassign__roles { display: flex; @@ -133,34 +133,34 @@ const statusMeta = statusOptions.find((o) => o.value === statusValue); flex-direction: column; gap: 2px; padding: var(--spacing-200) 0; - border-bottom: 1px solid var(--color-border-light); + border-bottom: 1px solid var(--color-border-default-subtle); } .bcn-dassign__role:last-child { border-bottom: 0; } .bcn-dassign__ws { - font-size: var(--type-size-100); - font-weight: var(--font-weight-semibold); - color: var(--color-text-tertiary); + font-size: var(--font-size-100); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-tertiary); } .bcn-dassign__who { display: inline-flex; align-items: baseline; flex-wrap: wrap; gap: var(--spacing-200); - font-size: var(--type-size-150); + font-size: var(--font-size-150); } .bcn-dassign__org { - color: var(--color-text-primary); - font-weight: var(--font-weight-medium); + color: var(--color-content-default); + font-weight: var(--typography-font-weight-medium); } .bcn-dassign__person { - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } .bcn-dassign__tent { - font-size: var(--type-size-100); + font-size: var(--font-size-100); font-style: italic; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } .bcn-dassign__edit { align-self: flex-start; diff --git a/src/components/bcn/BcnDetailChildren.astro b/src/components/bcn/BcnDetailChildren.astro index d8978d8f..08412155 100644 --- a/src/components/bcn/BcnDetailChildren.astro +++ b/src/components/bcn/BcnDetailChildren.astro @@ -93,9 +93,9 @@ const hasSiblings = Boolean(siblings?.prevHref || siblings?.nextHref); } .bcn-dchildren__h { margin: 0; - font-size: var(--type-size-150); - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-size: var(--font-size-150); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } .bcn-dchildren__list { list-style: none; @@ -105,7 +105,7 @@ const hasSiblings = Boolean(siblings?.prevHref || siblings?.nextHref); flex-direction: column; } .bcn-dchildren__list li + li .bcn-dchildren__row { - border-top: 1px solid var(--color-border-light); + border-top: 1px solid var(--color-border-default-subtle); } .bcn-dchildren__row { display: flex; @@ -116,14 +116,14 @@ const hasSiblings = Boolean(siblings?.prevHref || siblings?.nextHref); border-radius: var(--radius-100); } .bcn-dchildren__row:hover { - background: var(--color-surface-sunken); + background: var(--color-background-elevation-sunken); } .bcn-dchildren__id { display: inline-block; align-self: flex-start; - font-family: var(--font-mono); + font-family: var(--typography-font-family-mono); font-size: 0.6875rem; /* adherence-allow: font-too-small — matches the gantt's Andy-sanctioned 11px ID badges */ - font-weight: var(--font-weight-semibold); + font-weight: var(--typography-font-weight-semibold); color: var(--color-commitment); background: color-mix(in srgb, var(--color-commitment) 12%, white); padding: 1px 5px; @@ -131,9 +131,9 @@ const hasSiblings = Boolean(siblings?.prevHref || siblings?.nextHref); white-space: nowrap; } .bcn-dchildren__name { - font-size: var(--type-size-150); - font-weight: var(--font-weight-medium); - color: var(--color-text-primary); + font-size: var(--font-size-150); + font-weight: var(--typography-font-weight-medium); + color: var(--color-content-default); line-height: 1.35; } .bcn-dchildren__meta { @@ -141,11 +141,11 @@ const hasSiblings = Boolean(siblings?.prevHref || siblings?.nextHref); align-items: baseline; flex-wrap: wrap; gap: var(--spacing-100) var(--spacing-300); - font-size: var(--type-size-100); - color: var(--color-text-secondary); + font-size: var(--font-size-100); + color: var(--color-content-default-secondary); } .bcn-dchildren__funding { - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } .bcn-dchildren__status { display: inline-flex; @@ -157,14 +157,14 @@ const hasSiblings = Boolean(siblings?.prevHref || siblings?.nextHref); width: 8px; height: 8px; border-radius: var(--radius-full); - background: var(--_tone, var(--color-text-muted)); + background: var(--_tone, var(--bcn-content-muted)); flex: none; } - .bcn-dchildren__dot[data-tone='on-track'] { --_tone: var(--color-secondary); } + .bcn-dchildren__dot[data-tone='on-track'] { --_tone: var(--color-background-brand-muted); } .bcn-dchildren__dot[data-tone='complete'] { --_tone: var(--bcn-status-completed); } .bcn-dchildren__dot[data-tone='at-risk'] { --_tone: var(--bcn-status-in-progress); } .bcn-dchildren__dot[data-tone='blocked'] { --_tone: var(--bcn-status-overdue); } - .bcn-dchildren__dot[data-tone='not-started'] { --_tone: var(--color-text-muted); } + .bcn-dchildren__dot[data-tone='not-started'] { --_tone: var(--bcn-content-muted); } .bcn-dchildren__sibrow { display: flex; @@ -175,9 +175,9 @@ const hasSiblings = Boolean(siblings?.prevHref || siblings?.nextHref); border-radius: var(--radius-100); } .bcn-dchildren__sibrow:hover { - background: var(--color-surface-sunken); + background: var(--color-background-elevation-sunken); } .bcn-dchildren__list li + li .bcn-dchildren__sibrow { - border-top: 1px solid var(--color-border-light); + border-top: 1px solid var(--color-border-default-subtle); } diff --git a/src/components/bcn/BcnDetailLineage.astro b/src/components/bcn/BcnDetailLineage.astro index c9b7971a..29cddcb6 100644 --- a/src/components/bcn/BcnDetailLineage.astro +++ b/src/components/bcn/BcnDetailLineage.astro @@ -66,7 +66,7 @@ const { nodes } = Astro.props; top: 30px; bottom: 2px; width: 2px; - background: var(--color-border); + background: var(--color-border-default); } .bcn-dlineage__node:last-child { padding-bottom: 0; @@ -82,16 +82,16 @@ const { nodes } = Astro.props; height: 28px; flex-shrink: 0; border-radius: 50%; - background: var(--color-surface); - border: 1px solid var(--color-border); - color: var(--color-text-secondary); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); + color: var(--color-content-default-secondary); } .bcn-dlineage__icon :global(.esa-icon) { --_icon-size: 14px; } .bcn-dlineage__node--current .bcn-dlineage__icon { - border-color: var(--color-secondary); - color: var(--color-secondary); + border-color: var(--color-background-brand-muted); + color: var(--color-background-brand-muted); } .bcn-dlineage__body { display: flex; @@ -102,20 +102,20 @@ const { nodes } = Astro.props; } .bcn-dlineage__kind { font-size: 0.75rem; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } .bcn-dlineage__name { - font-size: var(--form-font-size-md, 0.9375rem); - font-weight: var(--font-weight-medium); + font-size: var(--typography-label-md-font-size, 0.9375rem); + font-weight: var(--typography-font-weight-medium); line-height: 1.35; - color: var(--color-primary); + color: var(--color-background-brand); text-decoration: none; } a.bcn-dlineage__name:hover { text-decoration: underline; } .bcn-dlineage__name--current { - color: var(--color-text-primary); - font-weight: var(--font-weight-semibold); + color: var(--color-content-default); + font-weight: var(--typography-font-weight-semibold); } diff --git a/src/components/bcn/BcnDisclosureToggle.astro b/src/components/bcn/BcnDisclosureToggle.astro index 1f95be40..2e4d1334 100644 --- a/src/components/bcn/BcnDisclosureToggle.astro +++ b/src/components/bcn/BcnDisclosureToggle.astro @@ -57,12 +57,12 @@ const hookAttr = { [hook]: value }; border: 0; border-radius: var(--radius-100); background: transparent; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); cursor: pointer; } .bcn-disclosure:hover { - background: var(--color-surface-sunken); - color: var(--color-text-secondary); + background: var(--color-background-elevation-sunken); + color: var(--color-content-default-secondary); } .bcn-disclosure :global(.esa-icon) { transition: transform 150ms ease; diff --git a/src/components/bcn/BcnDiscussion.astro b/src/components/bcn/BcnDiscussion.astro index a8299e10..edd0099e 100644 --- a/src/components/bcn/BcnDiscussion.astro +++ b/src/components/bcn/BcnDiscussion.astro @@ -22,7 +22,7 @@ import EsaIcon from '@esa/ecology/esa-icon.astro'; import EsaAvatar from '@esa/ecology/esa-avatar.astro'; import EsaBadge from '@esa/ecology/esa-badge.astro'; import EsaButton from '@esa/ecology/esa-button.astro'; -import EsaIconButton from '@esa/ecology/esa-icon-button.astro'; +import EsaIconButton from '@esa/ecology/esa-button.astro'; export interface DiscussionComment { author: string; @@ -76,8 +76,8 @@ const stepColor = (name: string): string => authorColors.get(name) ?? STEPPER[0] {c.edited && (edited)} {c.own && ( - - + + )}
@@ -92,7 +92,7 @@ const stepColor = (name: string): string => authorColors.get(name) ?? STEPPER[0]
Posting as {currentUser} -
Post Comment
+
Post Comment
@@ -104,26 +104,26 @@ const stepColor = (name: string): string => authorColors.get(name) ?? STEPPER[0] diff --git a/src/components/bcn/BcnDueDiligenceSteps.astro b/src/components/bcn/BcnDueDiligenceSteps.astro index e4d8ffa2..b4ddef21 100644 --- a/src/components/bcn/BcnDueDiligenceSteps.astro +++ b/src/components/bcn/BcnDueDiligenceSteps.astro @@ -102,7 +102,7 @@ const BADGE_VARIANT = { - {s.label} + {s.label} {!s.disabled && ( - {s.description} + {s.description} ); @@ -143,8 +143,8 @@ const BADGE_VARIANT = { flex: 1; min-width: 0; padding: var(--spacing-400); - background: var(--color-surface-sunken); - border: 1px solid var(--color-border); + background: var(--color-background-elevation-sunken); + border: 1px solid var(--color-border-default); border-radius: var(--radius-200); color: inherit; text-decoration: none; @@ -153,15 +153,15 @@ const BADGE_VARIANT = { background-color 150ms ease; } a.bcn-dds__tile:hover { - border-color: var(--color-border-strong); - background: var(--color-surface); + border-color: var(--color-border-default-strong); + background: var(--color-background-elevation-raised); } a.bcn-dds__tile:hover .bcn-dds__label, a.bcn-dds__tile:hover .bcn-dds__chev { - color: var(--color-primary); + color: var(--color-background-brand); } a.bcn-dds__tile:focus-visible { - outline: 2px solid var(--color-primary); + outline: 2px solid var(--color-background-brand); outline-offset: 2px; } @@ -175,9 +175,9 @@ const BADGE_VARIANT = { height: 28px; flex-shrink: 0; border-radius: var(--radius-100); - background: var(--color-surface); - border: 1px solid var(--color-border); - color: var(--color-text-secondary); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); + color: var(--color-content-default-secondary); } /* .repel already centers; only the width is ours (it's a flex child of .stack). */ @@ -195,46 +195,46 @@ const BADGE_VARIANT = { } .bcn-dds__label { min-width: 0; - color: var(--color-text-primary); + color: var(--color-content-default); } .bcn-dds__chev { display: inline-flex; flex-shrink: 0; margin-top: 0.125rem; - color: var(--color-text-muted); + color: var(--bcn-content-muted); transition: color 150ms ease; } /* Secondary, not tertiary: this line shrinks to 14px, so it darkens rather than grays out. */ .bcn-dds__desc { - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); min-width: 0; } /* esa-badge has no `neutral` variant — re-point its two public hooks. A white fill on the sunken tile gives the quiet mark its edge without a border. */ .bcn-dds__tile[data-tone='neutral'] { - --badge-bg: var(--color-surface); - --badge-text-color: var(--color-text-secondary); + --badge-bg: var(--color-background-elevation-raised); + --badge-text-color: var(--color-content-default-secondary); } /* Locked stage: visibly inert — no hover, no chevron, no link. The reason ("Complete Boundary first") is the description the caller passed. */ .bcn-dds__tile[data-disabled] { background: transparent; - border-color: var(--color-border-light); + border-color: var(--color-border-default-subtle); border-style: dashed; } .bcn-dds__tile[data-disabled] .bcn-dds__mark { background: transparent; - border-color: var(--color-border-light); - color: var(--color-text-muted); + border-color: var(--color-border-default-subtle); + color: var(--bcn-content-muted); } .bcn-dds__tile[data-disabled] .bcn-dds__label { - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } .bcn-dds__tile[data-disabled] .bcn-dds__desc { - color: var(--color-text-muted); + color: var(--bcn-content-muted); } diff --git a/src/components/bcn/BcnEntityLogo.astro b/src/components/bcn/BcnEntityLogo.astro index 43c10f18..c3c21591 100644 --- a/src/components/bcn/BcnEntityLogo.astro +++ b/src/components/bcn/BcnEntityLogo.astro @@ -123,14 +123,14 @@ const ICON_STEP = { sm: 'xs', md: 'sm', lg: 'lg', xl: 'xl', '2xl': 'xl' } as con /* fill — neutral glyph on the color; the bold landmark weight. */ .bcn-entity-logo[data-style='fill'] { background: var(--_c); - color: var(--color-text-inverse); + color: var(--color-content-default-knockout); border-color: transparent; } /* image — the tile is the crop; no tint, no hairline competing with the photo. */ .bcn-entity-logo[data-style='image'] { - background: var(--color-surface-sunken); - border-color: var(--color-border-light); + background: var(--color-background-elevation-sunken); + border-color: var(--color-border-default-subtle); } .bcn-entity-logo__img { width: 100%; diff --git a/src/components/bcn/BcnEvidenceDrawer.astro b/src/components/bcn/BcnEvidenceDrawer.astro index f42cb84a..a902bb4b 100644 --- a/src/components/bcn/BcnEvidenceDrawer.astro +++ b/src/components/bcn/BcnEvidenceDrawer.astro @@ -78,10 +78,10 @@ import EsaButton from '@esa/ecology/esa-button.astro';
- Save + Save - Cancel + Cancel
@@ -118,7 +118,7 @@ import EsaButton from '@esa/ecology/esa-button.astro'; filter selects, the tabs, the buttons. Declared HERE, once, because these are inherited custom properties: a copy per control is how the four existing bcn-* workarounds for this same bug ended up disagreeing with each other. - Why it is needed: the hub wires focus to --color-border-focus → --color-grass-8 + Why it is needed: the hub wires focus to --color-border-default-focus → --color-grass-8 (#65ba74), a chain Beacon's theme has no hook into, so every field in the app focuses GREEN. These three values are the verbatim port of prod's own input focus (Beacon.Web/src/scss/variables/_form-inputs.scss:25-28) — @@ -128,21 +128,21 @@ import EsaButton from '@esa/ecology/esa-button.astro'; — and prod applies them as border-color + `box-shadow: 0 0 0 $focus-ring-width $focus-ring-color`, which is exactly the pair the esa-* form legos read. The 30% alpha is load-bearing: a solid ring reads as an error state at a glance. - The real fix is re-pointing --color-border-focus in theme-beacon.css, which would + The real fix is re-pointing --color-border-default-focus in theme-beacon.css, which would correct every surface at once and let the bcn-* workarounds be deleted. */ - --form-border-color-focus: var(--color-secondary); - --focus-ring-color: color-mix(in srgb, var(--color-secondary) 30%, transparent); + --form-border-color-focus: var(--color-background-brand-muted); + --focus-ring-color: color-mix(in srgb, var(--color-background-brand-muted) 30%, transparent); --focus-ring-width: 2px; /* Same family of leak, different token: the legos colour SELECTED/active option text - with --color-primary-strong, whose hub default is #3a7c59 — green again — and which + with --color-content-brand, whose hub default is #3a7c59 — green again — and which Beacon also never re-points. Ten legos read it, so it is not specific to the select. Prod's own selected option (ui-search-select.component.scss:217) is `background: $teal-100` with NO colour override — it tints the row and leaves the text alone. The nearest single token that serves every role this variable plays here (selected rows, - match highlights, chips) is --color-primary, so the accent reads deep teal on the + match highlights, chips) is --color-background-brand, so the accent reads deep teal on the teal-tinted row rather than green on it. */ - --color-primary-strong: var(--color-primary); + --color-content-brand: var(--color-background-brand); /* Distance from each column's hairline down to its search field. Declared here because the two columns reach it from opposite directions — the left inherits the tab panel's @@ -168,16 +168,16 @@ import EsaButton from '@esa/ecology/esa-button.astro'; flex-wrap: wrap; min-width: 0; } - /* Drawer title at the house drawer size — --type-size-400 semibold, the same value + /* Drawer title at the house drawer size — --font-size-400 semibold, the same value esa-side-dialog's own .title uses and the same one the guidance drawer and the work-area drawers already carry. NOT the page-title role: this is drawer chrome, not - a page, and at --type-size-600 it read like a route heading. */ + a page, and at --font-size-600 it read like a route heading. */ .bcn-ev__title { margin: 0; - font-size: var(--type-size-400); - font-weight: var(--font-weight-semibold); + font-size: var(--font-size-400); + font-weight: var(--typography-font-weight-semibold); line-height: 1.2; - color: var(--color-text-primary); + color: var(--color-content-default); } /* ── Body ── */ @@ -195,11 +195,11 @@ import EsaButton from '@esa/ecology/esa-button.astro'; min-height: 0; } - /* The seam itself — the whole 1px track IS the rule. --color-border, not - --color-border-light: it meets the header and footer rules BcnBottomDrawer draws, and + /* The seam itself — the whole 1px track IS the rule. --color-border-default, not + --color-border-default-subtle: it meets the header and footer rules BcnBottomDrawer draws, and three edges of the same drawer should be one weight. */ .bcn-ev__joint { - background: var(--color-border); + background: var(--color-border-default); } /* ── Footer: Windows order — primary left of Cancel inside a right-aligned group. ── */ diff --git a/src/components/bcn/BcnEvidenceEntryPoints.astro b/src/components/bcn/BcnEvidenceEntryPoints.astro index fa1a5012..46f1bff5 100644 --- a/src/components/bcn/BcnEvidenceEntryPoints.astro +++ b/src/components/bcn/BcnEvidenceEntryPoints.astro @@ -38,8 +38,8 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!;
-

Four ways in

-

+

Four ways in

+

The drawer is the same workspace every time. What changes is what is already on it when it opens. Try each one — then close it and open it from the Attach Evidence of Compliance button in the bottom bar. @@ -50,17 +50,17 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!;

-

{preset('cold').label}

-

{preset('cold').blurb}

+

{preset('cold').label}

+

{preset('cold').blurb}

-

+

The Attach Evidence of Compliance button sits in the floating bar at the bottom of every page, where Search used to be.

- Open the drawer + Open the drawer
@@ -69,20 +69,20 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!;
-

{preset('single-action').label}

-

{preset('single-action').blurb}

+

{preset('single-action').label}

+

{preset('single-action').blurb}

-

An open action

+

An open action

{single.name}

-

+

{FREQUENCY_LABEL[single.frequency]} · {single.period}

- Add evidence + Add evidence
@@ -92,10 +92,10 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!;
-

{preset('bulk').label}

-

{preset('bulk').blurb}

+

{preset('bulk').label}

+

{preset('bulk').blurb}

-

An action list, four selected

+

An action list, four selected

    {bulkRows.map((a) => (
  • @@ -109,7 +109,7 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!;
- + Add evidence to {bulkRows.length} actions @@ -121,17 +121,17 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!;
-

{preset('existing').label}

-

{preset('existing').blurb}

+

{preset('existing').label}

+

{preset('existing').blurb}

-

+

Andrew raised this as a real need: the evidence table is already long, and it grows every day the monitoring portal runs.

- Open on existing evidence + Open on existing evidence
@@ -143,7 +143,7 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!; .bcn-ev-entries__lede { margin: var(--spacing-200) 0 0; max-width: 78ch; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } .bcn-ev-entries__grid { display: grid; @@ -160,7 +160,7 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!; } .bcn-ev-entry__blurb { margin: 0; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } /* The mocked fragment of the surface this entry comes from. Sunken so it reads as a @@ -168,33 +168,33 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!; .bcn-ev-entry__demo { margin-top: auto; padding: var(--spacing-300); - border: 1px solid var(--color-border-light); + border: 1px solid var(--color-border-default-subtle); border-radius: var(--radius-200); - background: var(--color-background); + background: var(--color-background-default); } .bcn-ev-entry__demo--quiet { - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } .bcn-ev-entry__demo--quiet p { margin: 0; } .bcn-ev-entry__mocklabel { margin: 0 0 var(--spacing-200); - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } .bcn-ev-entry__mocktitle { display: flex; align-items: baseline; gap: var(--spacing-200); margin: 0; - font-size: var(--type-size-200, 0.9375rem); - font-weight: var(--font-weight-semibold); + font-size: var(--font-size-200, 0.9375rem); + font-weight: var(--typography-font-weight-semibold); line-height: 1.35; - color: var(--color-text-primary); + color: var(--color-content-default); } .bcn-ev-entry__mockmeta { margin: 2px 0 0; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } .bcn-ev-entry__mockact { margin-top: var(--spacing-300); @@ -213,8 +213,8 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!; align-items: center; gap: var(--spacing-200); min-width: 0; - font-size: var(--type-size-150, 0.875rem); - color: var(--color-text-primary); + font-size: var(--font-size-150, 0.875rem); + color: var(--color-content-default); } /* A checked box, drawn rather than interactive — this is a picture of another screen. */ .bcn-ev-entry__check { @@ -225,8 +225,8 @@ const preset = (id: string) => ENTRY_PRESETS.find((p) => p.id === id)!; width: 16px; height: 16px; border-radius: var(--radius-100); - background: var(--color-primary); - color: var(--color-text-inverse); + background: var(--color-background-brand); + color: var(--color-content-default-knockout); } .bcn-ev-entry__rowname { min-width: 0; diff --git a/src/components/bcn/BcnEvidenceList.astro b/src/components/bcn/BcnEvidenceList.astro index d843936d..b7c41f6b 100644 --- a/src/components/bcn/BcnEvidenceList.astro +++ b/src/components/bcn/BcnEvidenceList.astro @@ -17,7 +17,7 @@ import EsaCard from '@esa/ecology/esa-card.astro'; import EsaButton from '@esa/ecology/esa-button.astro'; import EsaIcon from '@esa/ecology/esa-icon.astro'; -import EsaIconButton from '@esa/ecology/esa-icon-button.astro'; +import EsaIconButton from '@esa/ecology/esa-button.astro'; import EsaPill from '@esa/ecology/esa-pill.astro'; import EsaBadge from '@esa/ecology/esa-badge.astro'; @@ -53,10 +53,10 @@ const { items } = Astro.props; {e.title} - - - - + + + +
@@ -102,22 +102,22 @@ const { items } = Astro.props; .bcn-evidence-card__head { display: flex; align-items: center; justify-content: space-between; gap: var(--spacing-150); width: 100%; padding-inline: var(--spacing-200); } /* Clickable expand lead (chevron + title); actions sit outside it */ .bcn-evidence-card__lead { flex: 1; min-width: 0; display: flex; align-items: center; gap: var(--spacing-150); padding: var(--spacing-150) 0; cursor: pointer; } - .bcn-evidence-card__lead :global(.esa-icon) { flex-shrink: 0; color: var(--color-text-tertiary); transition: transform 150ms ease; } + .bcn-evidence-card__lead :global(.esa-icon) { flex-shrink: 0; color: var(--color-content-default-tertiary); transition: transform 150ms ease; } .bcn-evidence-card.is-expanded .bcn-evidence-card__lead :global(.esa-icon) { transform: rotate(90deg); } - .bcn-evidence-card__name { min-width: 0; font-size: 0.8125rem; font-weight: var(--font-weight-semibold); color: var(--color-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + .bcn-evidence-card__name { min-width: 0; font-size: 0.8125rem; font-weight: var(--typography-font-weight-semibold); color: var(--color-content-default); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .bcn-evidence-card__actions { display: flex; align-items: center; gap: 1px; flex-shrink: 0; } /* Dense action buttons: shrink the esa-icon-button box + glyph */ .bcn-evidence-card__actions :global(.esa-icon-button) { width: 26px; height: 26px; } .bcn-evidence-card__actions :global(.esa-icon) { width: 15px; height: 15px; } - .bcn-evidence-card__actions :global(.bcn-evidence-card__star--on) { color: var(--color-accent); } + .bcn-evidence-card__actions :global(.bcn-evidence-card__star--on) { color: var(--color-background-accent); } .bcn-evidence-card__actions :global(.bcn-evidence-card__star--on svg) { fill: currentColor; } /* Collapsible body — [hidden] beats display rules here since it's the default flow */ .bcn-evidence-card__fields[hidden] { display: none; } .bcn-evidence-card__fields { display: flex; flex-direction: column; gap: var(--spacing-300); padding: var(--spacing-300) var(--spacing-400) var(--spacing-400); } .bcn-evidence-card__field { display: flex; flex-direction: column; gap: var(--spacing-100); } - .bcn-evidence-card__label { display: inline-flex; align-items: center; gap: var(--spacing-150); font-size: 0.8125rem; font-weight: var(--font-weight-semibold); color: var(--color-text-primary); } - .bcn-evidence-card__text { font-size: 0.8125rem; line-height: 1.5; color: var(--color-text-secondary); } - .bcn-evidence-card__text--muted { color: var(--color-text-tertiary); font-style: italic; } + .bcn-evidence-card__label { display: inline-flex; align-items: center; gap: var(--spacing-150); font-size: 0.8125rem; font-weight: var(--typography-font-weight-semibold); color: var(--color-content-default); } + .bcn-evidence-card__text { font-size: 0.8125rem; line-height: 1.5; color: var(--color-content-default-secondary); } + .bcn-evidence-card__text--muted { color: var(--color-content-default-tertiary); font-style: italic; } .bcn-evidence-card__pills { display: flex; flex-wrap: wrap; gap: var(--spacing-150); } /* File rows use the esa-file-list lego (own styling). */ diff --git a/src/components/bcn/BcnEvidencePatternNotes.astro b/src/components/bcn/BcnEvidencePatternNotes.astro index f69ef53f..8f69ff65 100644 --- a/src/components/bcn/BcnEvidencePatternNotes.astro +++ b/src/components/bcn/BcnEvidencePatternNotes.astro @@ -43,15 +43,15 @@ const EVALUATE = [
-

About this prototype

-

+

About this prototype

+

Nothing here saves. The drawer is a picture of the feature, built to be argued with.

-

+

Beacon’s drawers come in from the right and hold temporary work. This one is app-shell furniture, like the nav and the top bar, and it layers above modals so it can cover an open dialog. @@ -64,7 +64,7 @@ const EVALUATE = [ ))} -

+

The hub’s drawer lego only opens from the left or right and has no height control, so the bottom drawer is built here and filed as a request upstream.

@@ -92,7 +92,7 @@ const EVALUATE = [ .bcn-ev-notes__lede { margin: var(--spacing-200) 0 0; max-width: 78ch; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } .bcn-ev-notes__grid { display: grid; @@ -102,7 +102,7 @@ const EVALUATE = [ } .bcn-ev-notes__text { margin: 0 0 var(--spacing-300); - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } /* The layer stack, drawn as a list rather than a diagram — the order is the content. */ @@ -112,7 +112,7 @@ const EVALUATE = [ padding: 0; display: flex; flex-direction: column; - border: 1px solid var(--color-border-light); + border: 1px solid var(--color-border-default-subtle); border-radius: var(--radius-200); overflow: hidden; } @@ -121,28 +121,28 @@ const EVALUATE = [ flex-direction: column; gap: 1px; padding: var(--spacing-200) var(--spacing-300); - background: var(--color-surface); + background: var(--color-background-elevation-raised); } .bcn-ev-notes__layer + .bcn-ev-notes__layer { - border-top: 1px solid var(--color-border-light); + border-top: 1px solid var(--color-border-default-subtle); } /* The one that is this feature — a background tint inline with the content, not a colored edge. */ .bcn-ev-notes__layer[data-here] { - background: var(--color-primary-subtle, var(--color-background)); + background: var(--color-background-brand-subtle, var(--color-background-default)); } .bcn-ev-notes__layername { - font-size: var(--type-size-150, 0.875rem); - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-size: var(--font-size-150, 0.875rem); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } .bcn-ev-notes__layernote { - font-size: var(--type-size-150, 0.875rem); - color: var(--color-text-secondary); + font-size: var(--font-size-150, 0.875rem); + color: var(--color-content-default-secondary); } .bcn-ev-notes__caveat { margin: var(--spacing-300) 0 0; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } .bcn-ev-notes__list { @@ -156,8 +156,8 @@ const EVALUATE = [ padding-left: 1.35rem; } .bcn-ev-notes__item { - font-size: var(--type-size-150, 0.875rem); + font-size: var(--font-size-150, 0.875rem); line-height: 1.5; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } diff --git a/src/components/bcn/BcnEvidenceSearch.astro b/src/components/bcn/BcnEvidenceSearch.astro index 4083ec23..3370bfad 100644 --- a/src/components/bcn/BcnEvidenceSearch.astro +++ b/src/components/bcn/BcnEvidenceSearch.astro @@ -16,9 +16,10 @@ // keyboard nav, match highlight — all its job). The only thing it does not provide is a // LEADING icon: it renders a search glyph inside the select-mode dropdown's own filter box, // but the autocomplete trigger has no icon, no ::part, and no slot. So this component -// overlays one and pushes the field's text across by re-pointing --form-padding-x-md, -// which is a real semantic token the lego already reads — no shadow-DOM reach-in, no -// restyled internals. Checked Ecology for a search-field lego (esa-text-field has the same +// overlays one and pushes the field's text across by re-pointing the lego's --_field-padding +// hooks on the host (the public --form-padding-* hooks were deleted upstream, +// form-padding-to-spacing, with no successor — a leading-icon slot is the real fix and is +// a pending hub request). Checked Ecology for a search-field lego (esa-text-field has the same // gap; esa-search-panel and esa-entity-search are full overlay surfaces, not fields) and // checked Beacon prod, whose search inputs are the same pattern (an overlaid glyph on a // padded field). bcn-evidence-search is the reusable home. @@ -62,16 +63,15 @@ const { placeholder, hook, label } = Astro.props; } .bcn-ev-search esa-combobox { display: block; - /* Re-point the field's horizontal padding so the text clears the overlaid glyph. This - is the lego's own semantic form token, scoped to this wrapper. */ - --form-padding-x-md: 2.25rem; - /* A slightly tighter field. --form-padding-y-md alone would NOT have done it: the lego - also sets an explicit height from --form-height-md (36px), which wins over the - padding, so the padding change would have been invisible. Both move together here. - Scoped to this component, so both columns' fields stay identical and nothing else - in the drawer changes size. */ - --form-height-md: 32px; - --form-padding-y-md: var(--spacing-150); + /* The lego's padding hooks are PRIVATE (--_field-*) since the hub deleted the public + --form-padding-*/--form-height-* surface with no successor. Document rules on the + host beat the :host defaults, so these scoped re-points still work — but they ride + an internal name that can move without a deprecation path. Pending hub request for + a leading-icon slot (which removes the need for the x re-point entirely). + x: clears the overlaid glyph. y: the tighter field the old height:32px produced — + the control now sizes from padding + text, so padding alone does it. */ + --_field-padding-x: 2.25rem; + --_field-padding-y: var(--spacing-150); /* NO focus-colour override here on purpose. The hub focuses fields GREEN (see the note on #bcn-evidence-drawer in BcnEvidenceDrawer.astro); the correction is declared once on the drawer shell and inherited, so this field and the filter selects beside it @@ -87,7 +87,7 @@ const { placeholder, hook, label } = Astro.props; left: 0.75rem; display: flex; align-items: center; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); pointer-events: none; z-index: 1; } diff --git a/src/components/bcn/BcnEvidenceStaging.astro b/src/components/bcn/BcnEvidenceStaging.astro index a02906d4..d84f86a8 100644 --- a/src/components/bcn/BcnEvidenceStaging.astro +++ b/src/components/bcn/BcnEvidenceStaging.astro @@ -45,7 +45,7 @@ // home; its own CSS is the panel frame plus the card's meta rows. import EsaCard from '@esa/ecology/esa-card.astro'; import EsaIcon from '@esa/ecology/esa-icon.astro'; -import EsaIconButton from '@esa/ecology/esa-icon-button.astro'; +import EsaIconButton from '@esa/ecology/esa-button.astro'; import EsaButton from '@esa/ecology/esa-button.astro'; import EsaPill from '@esa/ecology/esa-pill.astro'; import EsaEmptyState from '@esa/ecology/esa-empty-state.astro'; @@ -129,10 +129,10 @@ const GRIP = arrangement the drawer footer uses. -->
- Save + Save - Cancel + Cancel
@@ -152,7 +152,7 @@ const GRIP = - + @@ -219,7 +219,7 @@ const GRIP = hook="data-staging-attached" /> - +
@@ -268,7 +268,7 @@ const GRIP = proposes — and only on this tab, since it has nothing to read from the uploader. -->
- Find matches + Find matches
@@ -281,7 +281,7 @@ const GRIP = flex-direction: column; min-height: 0; height: 100%; - background: var(--color-surface); + background: var(--color-background-elevation-raised); } /* min-height is load-bearing: the Actions header is taller because it carries a button, and the two searches below only read as one row if BOTH headers resolve to the same @@ -302,16 +302,16 @@ const GRIP = align-items: center; gap: var(--spacing-200); margin: 0; - font-size: var(--type-size-250); - font-weight: var(--font-weight-semibold); + font-size: var(--font-size-250); + font-weight: var(--typography-font-weight-semibold); line-height: 1.25; - color: var(--color-text-primary); + color: var(--color-content-default); } /* The glyph is subordinate to its heading — quieter tone, and it marks the section, not any item inside it. */ .bcn-ev-staging__title :global(.esa-icon) { flex: none; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } /* Mirrors .bcn-ev-targets__search so the two search fields sit on one line — the top value must stay identical in both, or the fields drift apart. */ @@ -407,24 +407,24 @@ const GRIP = gap: var(--spacing-150); color: var(--bcn-unsaved); font-size: 0.8125rem; - font-weight: var(--font-weight-medium); + font-weight: var(--typography-font-weight-medium); white-space: nowrap; } .bcn-ev-draft__title { margin: 0; - /* --type-size-150 (14px), the same as the staged cards. This card was written before the + /* --font-size-150 (14px), the same as the staged cards. This card was written before the density pass took those to 14 and was left at 15 — a heavier title next to identical body text is what made the rest of this card read lighter than the others. */ - font-size: var(--type-size-150, 0.875rem); - font-weight: var(--font-weight-semibold); + font-size: var(--font-size-150, 0.875rem); + font-weight: var(--typography-font-weight-semibold); line-height: 1.35; - color: var(--color-text-primary); + color: var(--color-content-default); } .bcn-ev-draft__notes { margin: 0; font-size: 0.8125rem; line-height: 1.45; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } /* Same ruled Files section the staged cards use, so a draft and a saved record read as @@ -439,14 +439,14 @@ const GRIP = min-width: 0; margin-top: var(--spacing-100); padding-top: var(--spacing-200); - border-top: 1px solid var(--color-border-light); + border-top: 1px solid var(--color-border-default-subtle); } .bcn-ev-draft__fileslabel { flex: none; margin: 0; font-size: 0.8125rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-secondary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-secondary); } .bcn-ev-draft__files { flex: 1; @@ -469,7 +469,7 @@ const GRIP = gap: var(--spacing-200); min-width: 0; font-size: 0.8125rem; - color: var(--color-text-primary); + color: var(--color-content-default); } .bcn-ev-draft__filename { flex: 1; @@ -480,13 +480,14 @@ const GRIP = } .bcn-ev-draft__filesize { flex: none; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); font-variant-numeric: tabular-nums; } .bcn-ev-draft__fileremove { flex: none; - color: var(--color-text-tertiary); - --form-height-sm: 24px; + color: var(--color-content-default-tertiary); + /* --form-height-sm: 24px re-point removed — surface deleted upstream; see the + matching note in BcnEvidenceTargets. */ } .bcn-ev-draft__foot { display: flex; @@ -494,7 +495,7 @@ const GRIP = gap: var(--spacing-250, 0.625rem); margin-top: var(--spacing-100); padding-top: var(--spacing-200); - border-top: 1px solid var(--color-border-light); + border-top: 1px solid var(--color-border-default-subtle); } /* The tone belongs to the DROP TARGET itself: it is what tells you where to let go. @@ -513,19 +514,19 @@ const GRIP = host. This is a formatting-context trick standing in for a missing property. */ display: grid; flex: 1; - --form-bg: var(--color-surface-sunken); + --color-background-field: var(--color-background-elevation-sunken); /* The zone's HOVER border reads --form-border-color-focus, which the hub wires to the grass ramp (#65ba74) — so the uploader turned green on hover, the same leak the - search fields had (see BcnEvidenceSearch). Point it at --color-secondary so every + search fields had (see BcnEvidenceSearch). Point it at --color-background-brand-muted so every drop affordance in this drawer is one colour: the action cards' receiving tint is - the same token. The lego's own [dragging] state stays --color-primary, a step + the same token. The lego's own [dragging] state stays --color-background-brand, a step deeper — hover invites, drag-over confirms, the same escalation the action card makes when its dashed edge goes solid. */ - --form-border-color-focus: var(--color-secondary); + --form-border-color-focus: var(--color-background-brand-muted); } .bcn-ev-staging__dropnote { margin: var(--spacing-300) 0 0; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } /* Footer: the match utility, right-aligned, on the list tab only. */ @@ -534,7 +535,7 @@ const GRIP = display: flex; justify-content: flex-end; padding: var(--spacing-300) var(--spacing-400); - border-top: 1px solid var(--color-border); + border-top: 1px solid var(--color-border-default); } .bcn-ev-staging__list { list-style: none; @@ -611,7 +612,7 @@ const GRIP = min-width: 0; margin-top: var(--spacing-100); padding-top: var(--spacing-200); - border-top: 1px solid var(--color-border-light); + border-top: 1px solid var(--color-border-default-subtle); } .bcn-ev-card__fileslabel { flex: none; @@ -633,13 +634,13 @@ const GRIP = justify-content: center; width: 20px; height: 20px; - color: var(--color-text-muted); + color: var(--bcn-content-muted); cursor: grab; border-radius: var(--radius-100); } .bcn-ev-card__grip:hover { - color: var(--color-text-secondary); - background: var(--color-surface-sunken); + color: var(--color-content-default-secondary); + background: var(--color-background-elevation-sunken); } .bcn-ev-card__grip:active { cursor: grabbing; @@ -648,7 +649,7 @@ const GRIP = the handle withdraws rather than lying about being usable. */ .bcn-ev-staging__item[data-exhausted] .bcn-ev-card__grip { cursor: not-allowed; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); opacity: 0.4; background: none; } @@ -669,8 +670,8 @@ const GRIP = needed. Nothing here restyles its internals. */ .bcn-ev-card__count :global(.esa-pill) { --pill-bg: transparent; - --pill-border-color: var(--color-border); - --pill-text-color: var(--color-text-secondary); + --pill-border-color: var(--color-border-default); + --pill-text-color: var(--color-content-default-secondary); } /* Description and files indent to the TITLE's left edge — the toggle's 20px plus the row gap — so the body reads as belonging to the title above it, the same inset the action @@ -684,8 +685,8 @@ const GRIP = .bcn-ev-card__fileslabel { margin: 0; font-size: 0.8125rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-secondary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-secondary); /* Matched to esa-pill's own sm height so the label sits on the FIRST row of pills. align-items:center on the row would instead centre it against the whole wrapped block, drifting further off the first line with every extra row of files. */ @@ -695,7 +696,7 @@ const GRIP = margin: 0; font-size: 0.8125rem; line-height: 1.45; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } /* Shut: the description keeps ONE line and ellipses, the file names go away entirely. */ .bcn-ev-staging__item[data-collapsed] .bcn-ev-card__desc { @@ -710,12 +711,12 @@ const GRIP = min-width: 0; margin: 0; /* 14px, the dense-surface base — these are scan-and-pick lists, not prose. Stepped down - from --type-size-200 (15px) with the card padding, so the row gets tighter as a whole + from --font-size-200 (15px) with the card padding, so the row gets tighter as a whole rather than just losing its margins. */ - font-size: var(--type-size-150, 0.875rem); - font-weight: var(--font-weight-semibold); + font-size: var(--font-size-150, 0.875rem); + font-weight: var(--typography-font-weight-semibold); line-height: 1.35; - color: var(--color-text-primary); + color: var(--color-content-default); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -747,7 +748,7 @@ const GRIP = } .bcn-ev-card__remove { flex: none; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } /* The files as pills. A bullet-separated run was tried and read as one long string — diff --git a/src/components/bcn/BcnEvidenceTargets.astro b/src/components/bcn/BcnEvidenceTargets.astro index 33dfa356..4503db86 100644 --- a/src/components/bcn/BcnEvidenceTargets.astro +++ b/src/components/bcn/BcnEvidenceTargets.astro @@ -56,7 +56,7 @@ import EsaCard from '@esa/ecology/esa-card.astro'; import EsaIcon from '@esa/ecology/esa-icon.astro'; import EsaBadge from '@esa/ecology/esa-badge.astro'; -import EsaIconButton from '@esa/ecology/esa-icon-button.astro'; +import EsaIconButton from '@esa/ecology/esa-button.astro'; import EsaEmptyState from '@esa/ecology/esa-empty-state.astro'; import EsaLoadingSpinner from '@esa/ecology/esa-loading-spinner.astro'; import BcnCommitmentBadge from './BcnCommitmentBadge.astro'; @@ -115,14 +115,14 @@ import { scopeIcon } from '../../data/global-search'; - +
    @@ -158,7 +158,7 @@ import { scopeIcon } from '../../data/global-search'; />
    -

    Commitments

    +

    Commitments

      {[a.code, ...(a.otherCodes ?? [])].map((c) => (
    • @@ -187,7 +187,7 @@ import { scopeIcon } from '../../data/global-search';
    - +
@@ -198,7 +198,7 @@ import { scopeIcon } from '../../data/global-search'; chevron does. -->
    -

    +

    Drag evidence here to attach it.

    @@ -219,7 +219,7 @@ import { scopeIcon } from '../../data/global-search'; - + @@ -257,7 +257,7 @@ import { scopeIcon } from '../../data/global-search'; flex-direction: column; min-height: 0; height: 100%; - background: var(--color-surface-sunken); + background: var(--color-background-elevation-sunken); } /* Title only now — the filters moved into the bar below, so this matches the Evidence column's header box exactly. Keep min-height in sync with .bcn-ev-staging__head. */ @@ -269,7 +269,7 @@ import { scopeIcon } from '../../data/global-search'; min-height: 60px; padding: var(--spacing-350, 0.875rem) var(--spacing-400); } - /* The ruled filter row. --color-border is the same token esa-tab-layout draws its + /* The ruled filter row. --color-border-default is the same token esa-tab-layout draws its underline with, and the padding matches the tab strip's, so the two hairlines are one continuous line across the seam. */ .bcn-ev-targets__filters { @@ -291,7 +291,7 @@ import { scopeIcon } from '../../data/global-search'; not a measured pixel — if the tab size changes, this line follows it. */ min-height: calc(var(--tab-layout-height-sm, 36px) + 1px + var(--_lift)); box-sizing: border-box; - border-bottom: 1px solid var(--color-border); + border-bottom: 1px solid var(--color-border-default); } /* The search sits BELOW the filter card, between it and the list it searches. */ .bcn-ev-targets__search { @@ -312,15 +312,15 @@ import { scopeIcon } from '../../data/global-search'; .bcn-ev-targets__flabel { flex: none; /* 13px is a DELIBERATE hard-code, not a missing token: the scale steps 14px - (--type-size-150) straight to 12px (--type-size-100), and 12px is under the floor + (--font-size-150) straight to 12px (--font-size-100), and 12px is under the floor design-principles sets for the smallest legible meta text. 13px is that floor exactly — the smallest these can go and still be inside the system. Colour steps UP as the size steps down (tertiary → secondary), per the same rule: "never fainter: darken as you shrink". A 13px tertiary label is the combination the house style specifically warns against. */ font-size: 0.8125rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-secondary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-secondary); white-space: nowrap; } /* Each box is sized by FLEX BASIS, not min-width: esa-select's intrinsic width is wider @@ -345,9 +345,9 @@ import { scopeIcon } from '../../data/global-search'; } /* Count of actions in view — the same signal the wizard's column header carries. */ .bcn-ev-targets__count { - font-size: var(--type-size-150, 0.875rem); - font-weight: var(--font-weight-regular); - color: var(--color-text-tertiary); + font-size: var(--font-size-150, 0.875rem); + font-weight: var(--typography-font-weight-regular); + color: var(--color-content-default-tertiary); } /* Matches BcnEvidenceStaging's header exactly — the two panels are peers, so their headings must resolve to the same rendered size, not just the same intent. */ @@ -356,14 +356,14 @@ import { scopeIcon } from '../../data/global-search'; align-items: center; gap: var(--spacing-200); margin: 0; - font-size: var(--type-size-250); - font-weight: var(--font-weight-semibold); + font-size: var(--font-size-250); + font-weight: var(--typography-font-weight-semibold); line-height: 1.25; - color: var(--color-text-primary); + color: var(--color-content-default); } .bcn-ev-targets__title :global(.esa-icon) { flex: none; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } @@ -379,9 +379,9 @@ import { scopeIcon } from '../../data/global-search'; same whether it is one attachment or the summary of all of them. */ .bcn-ev-targets__pending { --bcn-unsaved: var(--color-action); - --color-warning-subtle: color-mix(in srgb, var(--bcn-unsaved) 6%, transparent); - --color-warning-border: color-mix(in srgb, var(--bcn-unsaved) 45%, transparent); - --color-warning-strong: var(--bcn-unsaved); + --color-background-utility-warning-subtle: color-mix(in srgb, var(--bcn-unsaved) 6%, transparent); + --color-border-utility-warning: color-mix(in srgb, var(--bcn-unsaved) 45%, transparent); + --color-content-utility-warning: var(--bcn-unsaved); flex: none; padding: 0 var(--spacing-400) var(--spacing-400); /* Tighter than the lego default (12/16). --alert-box-padding is a real hook and, unlike @@ -406,10 +406,10 @@ import { scopeIcon } from '../../data/global-search'; align-items: center; gap: var(--spacing-250, 0.625rem); padding: var(--spacing-300); - border: 1px solid var(--color-border-light); + border: 1px solid var(--color-border-default-subtle); border-radius: var(--radius-200); - background: var(--color-background); - color: var(--color-text-secondary); + background: var(--color-background-default); + color: var(--color-content-default-secondary); } .bcn-ev-targets__working[hidden] { display: none; @@ -418,10 +418,10 @@ import { scopeIcon } from '../../data/global-search'; .bcn-ev-targets__notice { margin: 0; padding: var(--spacing-250, 0.625rem) var(--spacing-300); - border: 1px solid var(--color-border-light); + border: 1px solid var(--color-border-default-subtle); border-radius: var(--radius-200); - background: var(--color-background); - color: var(--color-text-secondary); + background: var(--color-background-default); + color: var(--color-content-default-secondary); } .bcn-ev-targets__notice[hidden] { display: none; @@ -476,12 +476,12 @@ import { scopeIcon } from '../../data/global-search'; the action is only the destination, so the entity colour would be naming the wrong half of the interaction — it read as a stray pink with nothing else on the surface to justify it. - --color-secondary (#00918b), not --color-primary (#005862): design-principles reserves + --color-background-brand-muted (#00918b), not --color-background-brand (#005862): design-principles reserves saturated brand for the single primary action, which on this surface is the Attach button in the footer. A transient drop state should not compete with it. */ .bcn-ev-targets__item[data-receiving] :global(.esa-card) { - border-color: var(--color-secondary); - background: color-mix(in srgb, var(--color-secondary) 5%, transparent); + border-color: var(--color-background-brand-muted); + background: color-mix(in srgb, var(--color-background-brand-muted) 5%, transparent); } /* Already holds the evidence being dragged — a valid target for something else, but not for this. Dimmed and inert rather than hidden, so the list does not reflow mid-drag. */ @@ -509,11 +509,11 @@ import { scopeIcon } from '../../data/global-search'; align-items: center; gap: var(--spacing-200); padding: var(--spacing-050) var(--spacing-200); - border: 1px solid var(--color-border-light); + border: 1px solid var(--color-border-default-subtle); border-radius: var(--radius-200); - background: var(--color-background); + background: var(--color-background-default); font-size: 0.8125rem; - color: var(--color-text-primary); + color: var(--color-content-default); } /* UNSAVED — the Setup Wizard's pink (--color-action #d45087) as a border plus a light color-mix fill, the same pairing actions-step.component.scss uses for its own live @@ -537,28 +537,26 @@ import { scopeIcon } from '../../data/global-search'; /* The suggestion marker now lives HERE, on the individual attachment the utility made, not on the action card. The action was not suggested — this particular pairing was. */ .bcn-ev-attached__mark :global(.esa-badge) { - --badge-bg: var(--color-info-subtle); - --badge-text-color: var(--color-text-primary); - border: 1px solid color-mix(in srgb, var(--color-info) 35%, transparent); - font-weight: var(--font-weight-medium); - } - /* The detach button is what SETS this row's height — at size="sm" it is 28px, more than - the text and padding together, so trimming the padding alone barely moved the row. The - button reads the shared form-size token, so re-pointing --form-height-sm here brings it - down with the rest instead of leaving one control at the old scale. - 24px is still a comfortable pointer target on a dense desktop data surface; it is below - the 44px touch guideline, which this list is not designed for. */ + --badge-bg: var(--color-background-utility-info-subtle); + --badge-text-color: var(--color-content-default); + border: 1px solid color-mix(in srgb, var(--color-background-utility-info) 35%, transparent); + font-weight: var(--typography-font-weight-medium); + } + /* The detach button used a --form-height-sm: 24px re-point to tighten this row; the + hub deleted that surface (buttons size from --spacing padding now), so the row sits + at the lego's natural sm height. Reclaiming the extra ~4px would mean reaching into + esa-button's private pad vars through its internal class — not worth the coupling + for dense-list polish. */ .bcn-ev-attached__remove { flex: none; - color: var(--color-text-tertiary); - --form-height-sm: 24px; + color: var(--color-content-default-tertiary); } /* The invitation, shown only while the card holds nothing — and drawn as a real drop zone rather than a line of prose. Ported from the wizard's .actions-panel__create-zone: dashed edge at rest over a 3% tint, centred. It reads as somewhere you can put something, which is exactly what it is. The wizard's tint is the action entity colour; - this uses --color-secondary for the reason given at the drop states above. */ + this uses --color-background-brand-muted for the reason given at the drop states above. */ /* Always dashed while the list is empty — the zone reads as somewhere you can put something whether or not a drag is in flight. (A drag-only variant was tried; it made the empty card look inert until you were already committed to a drag.) */ @@ -568,13 +566,13 @@ import { scopeIcon } from '../../data/global-search'; justify-content: center; margin: var(--spacing-200) 0 0; padding: var(--spacing-200); - border: 1px dashed var(--color-border); + border: 1px dashed var(--color-border-default); border-radius: var(--radius-200); /* No fill. The dashed edge alone says "put something here"; a tint on top of it was doing the same job twice, and on the column's sunken gray it read as a stray wash rather than as an affordance. */ background: none; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); /* Italic — it is an instruction about what to do with the empty space, not a label for something that is there. */ font-style: italic; @@ -590,8 +588,8 @@ import { scopeIcon } from '../../data/global-search'; so dropping it at the moment you are actually dragging over the zone removes the cue exactly when it is being used. Colour alone carries the state change. */ .bcn-ev-targets__item[data-receiving] .bcn-ev-row__hint { - border-color: var(--color-secondary); - background: color-mix(in srgb, var(--color-secondary) 8%, transparent); + border-color: var(--color-background-brand-muted); + background: color-mix(in srgb, var(--color-background-brand-muted) 8%, transparent); } .bcn-ev-row__main { flex: 1; @@ -671,7 +669,7 @@ import { scopeIcon } from '../../data/global-search'; } .bcn-ev-row__poptitle { margin: 0 0 var(--spacing-200); - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } .bcn-ev-row__poplist ul { list-style: none; @@ -686,10 +684,10 @@ import { scopeIcon } from '../../data/global-search'; check it". Quiet 4px badge, tinted away from the entity colours so it cannot be mistaken for one. */ .bcn-ev-row__mark :global(.esa-badge) { - --badge-bg: var(--color-info-subtle); - --badge-text-color: var(--color-text-primary); - border: 1px solid color-mix(in srgb, var(--color-info) 35%, transparent); - font-weight: var(--font-weight-medium); + --badge-bg: var(--color-background-utility-info-subtle); + --badge-text-color: var(--color-content-default); + border: 1px solid color-mix(in srgb, var(--color-background-utility-info) 35%, transparent); + font-weight: var(--typography-font-weight-medium); } /* Shrink-to-content, not flex:1 — the codes sit immediately after the name rather than being pushed to the far edge. The name still truncates first when a row runs long. */ @@ -700,12 +698,12 @@ import { scopeIcon } from '../../data/global-search'; flex: 0 1 auto; min-width: 22ch; /* 14px, the dense-surface base — these are scan-and-pick lists, not prose. Stepped down - from --type-size-200 (15px) with the card padding, so the row gets tighter as a whole + from --font-size-200 (15px) with the card padding, so the row gets tighter as a whole rather than just losing its margins. */ - font-size: var(--type-size-150, 0.875rem); - font-weight: var(--font-weight-semibold); + font-size: var(--font-size-150, 0.875rem); + font-weight: var(--typography-font-weight-semibold); line-height: 1.35; - color: var(--color-text-primary); + color: var(--color-content-default); } /* ── Tags, styled from the wizard's .action-card__tag: a quiet 4px tag on gray-100 with @@ -722,12 +720,12 @@ import { scopeIcon } from '../../data/global-search'; .bcn-ev-row__tags :global(.esa-badge) { --badge-bg: var(--bcn-gray-100); --badge-text-color: var(--bcn-gray-700); - font-weight: var(--font-weight-medium); + font-weight: var(--typography-font-weight-medium); } /* The reason a suggested row is here — the reviewable half of "suggests / approves". */ .bcn-ev-row__why { margin: 2px 0 0; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); font-style: italic; } .bcn-ev-row__why[hidden] { @@ -738,7 +736,7 @@ import { scopeIcon } from '../../data/global-search'; display: flex; align-items: center; gap: var(--spacing-150); - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } .bcn-ev-row__mark[hidden] { display: none; diff --git a/src/components/bcn/BcnFilterBar.astro b/src/components/bcn/BcnFilterBar.astro index 9836fb20..5e93ac18 100644 --- a/src/components/bcn/BcnFilterBar.astro +++ b/src/components/bcn/BcnFilterBar.astro @@ -84,8 +84,8 @@ const hasActions = Astro.slots.has('actions'); diff --git a/src/components/bcn/BcnFlagRow.astro b/src/components/bcn/BcnFlagRow.astro index 63a85ac5..77c983f3 100644 --- a/src/components/bcn/BcnFlagRow.astro +++ b/src/components/bcn/BcnFlagRow.astro @@ -54,10 +54,10 @@ const gaNote = flag.removeAtGa ? `Remove at GA${flag.gaTarget ? ` (${flag.gaTarg checked={flag.enabled ? '' : undefined} > -

    {flag.displayName}

    +

    {flag.displayName}

    -

    {flag.description}

    - {gaNote &&

    {gaNote}

    } +

    {flag.description}

    + {gaNote &&

    {gaNote}

    }
    @@ -240,21 +240,21 @@ const sourceGroups = [ gap: var(--spacing-400); flex-wrap: wrap; padding-bottom: var(--spacing-200); - border-bottom: 1px solid var(--color-border); + border-bottom: 1px solid var(--color-border-default); } .cc__title { margin: 0; font-family: var(--font-decorative); - font-size: var(--type-size-400); - font-weight: var(--font-weight-bold); - color: var(--color-text-primary); + font-size: var(--font-size-400); + font-weight: var(--typography-font-weight-bold); + color: var(--color-content-default); } .cc__controls { display: flex; align-items: center; gap: var(--spacing-400); flex-wrap: wrap; } .cc__ctx { display: inline-flex; align-items: center; gap: var(--spacing-200); } .cc__ctx-label { - font-size: var(--type-size-150); - font-weight: var(--font-weight-semibold); - color: var(--color-text-tertiary); + font-size: var(--font-size-150); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-tertiary); white-space: nowrap; } @@ -266,9 +266,9 @@ const sourceGroups = [ .cc-group + .cc-group { margin-top: var(--spacing-500); } .cc-group__head { display: flex; align-items: center; gap: var(--spacing-250); margin-bottom: var(--spacing-300); } .cc-group__name { - font-size: var(--type-size-300); - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-size: var(--font-size-300); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } /* Quiet count badge — 4px radius, light-gray border (design-principles standard). */ .cc-badge { @@ -278,11 +278,11 @@ const sourceGroups = [ min-width: 20px; height: 20px; padding: 0 var(--spacing-150); - font-size: var(--type-size-100); - font-weight: var(--font-weight-semibold); - color: var(--color-text-secondary); - background: var(--color-surface); - border: 1px solid var(--color-border); + font-size: var(--font-size-100); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-secondary); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); border-radius: var(--radius-100); font-variant-numeric: tabular-nums; } @@ -292,9 +292,9 @@ const sourceGroups = [ .cmt-head { display: flex; flex-direction: column; gap: var(--spacing-200); min-width: 0; } .cmt-head__code { width: max-content; - font-family: var(--font-mono); - font-size: var(--type-size-100); - font-weight: var(--font-weight-semibold); + font-family: var(--typography-font-family-mono); + font-size: var(--font-size-100); + font-weight: var(--typography-font-weight-semibold); color: var(--color-commitment); background: color-mix(in srgb, var(--color-commitment) 12%, white); padding: 1px var(--spacing-200); @@ -302,9 +302,9 @@ const sourceGroups = [ } .cmt-head__title { font-family: var(--font-decorative); - font-size: var(--type-size-400); - font-weight: var(--font-weight-bold); - color: var(--color-text-primary); + font-size: var(--font-size-400); + font-weight: var(--typography-font-weight-bold); + color: var(--color-content-default); line-height: 1.25; } /* The CoA text — Besley, preserving the register's own line breaks. */ @@ -312,14 +312,14 @@ const sourceGroups = [ display: block; white-space: pre-wrap; font-family: var(--font-decorative); - font-size: var(--type-size-200); + font-size: var(--font-size-200); line-height: 1.6; - color: var(--color-text-primary); - border: 1px solid var(--color-border); + color: var(--color-content-default); + border: 1px solid var(--color-border-default); border-radius: var(--radius-200); padding: var(--spacing-400); - background: var(--color-surface); + background: var(--color-background-elevation-raised); } .cmt-foot { display: flex; align-items: center; justify-content: space-between; width: 100%; gap: var(--spacing-300); } - .cmt-foot__src { font-size: var(--type-size-100); color: var(--color-text-tertiary); } + .cmt-foot__src { font-size: var(--font-size-100); color: var(--color-content-default-tertiary); } diff --git a/src/pages/prototypes/monitoring/surveys.astro b/src/pages/prototypes/monitoring/surveys.astro index 26b4e1e1..6d9ffa22 100644 --- a/src/pages/prototypes/monitoring/surveys.astro +++ b/src/pages/prototypes/monitoring/surveys.astro @@ -11,7 +11,7 @@ import AppShell from '../../../layouts/AppShell.astro'; import PageLayout from '../../../layouts/PageLayout.astro'; import EsaButton from '@esa/ecology/esa-button.astro'; -import EsaIconButton from '@esa/ecology/esa-icon-button.astro'; +import EsaIconButton from '@esa/ecology/esa-button.astro'; import FilterContainer from '@esa/ecology/esa-filter-container.astro'; import FilterClearButton from '@esa/ecology/esa-filter-clear-button.astro'; import { SURVEYS, SURVEY_STATUS_META, SURVEY_COUNT, PROJECT_NAME } from '../../../data/monitoring'; @@ -76,7 +76,7 @@ const gridPayload = {
    @@ -95,7 +95,7 @@ const gridPayload = {
    - Cancel - Save + Cancel + Save - +
    - Open Source Document + Open Source Document
    @@ -812,8 +812,8 @@ const prologisNav = [ /* ═══ Filter bar — carded two-band (prod parity). Card shell + dividers + labels are composition glue; every control inside is a lego. ═══ */ .bcn-filterbar { - background: var(--color-surface); - border: 1px solid var(--color-border); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); border-radius: var(--radius-200); margin-bottom: var(--spacing-400); } @@ -829,17 +829,17 @@ const prologisNav = [ align-items: center; gap: var(--spacing-300); padding: var(--spacing-300) var(--spacing-400); - border-top: 1px solid var(--color-border); + border-top: 1px solid var(--color-border-default); flex-wrap: wrap; } .bcn-filterbar__group { display: inline-flex; align-items: center; gap: var(--spacing-300); } .bcn-filterbar__label { - font-size: var(--type-size-150); - font-weight: var(--font-weight-semibold); - color: var(--color-text-tertiary); + font-size: var(--font-size-150); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-tertiary); white-space: nowrap; } - .bcn-filterbar__divider { width: 1px; align-self: stretch; background: var(--color-border); margin: 0 var(--spacing-100); } + .bcn-filterbar__divider { width: 1px; align-self: stretch; background: var(--color-border-default); margin: 0 var(--spacing-100); } .bcn-filterbar__na { display: inline-flex; align-items: center; } .bcn-filterbar__search { margin-left: auto; display: inline-flex; align-items: center; gap: var(--spacing-150); min-width: 300px; } .bcn-filterbar__search :global(esa-text-field) { flex: 1; } @@ -865,8 +865,8 @@ const prologisNav = [ justify-content: space-between; gap: var(--spacing-400); padding: var(--spacing-200) var(--spacing-400); - background: var(--color-background); - border: 1px solid var(--color-border); + background: var(--color-background-default); + border: 1px solid var(--color-border-default); border-top: 0; border-radius: 0 0 var(--radius-100) var(--radius-100); } @@ -874,11 +874,11 @@ const prologisNav = [ display: flex; align-items: center; gap: var(--spacing-400); - font-size: var(--type-size-100); - color: var(--color-text-secondary); + font-size: var(--font-size-100); + color: var(--color-content-default-secondary); font-variant-numeric: tabular-nums; } - .filtered-rows-count { color: var(--color-text-tertiary); } + .filtered-rows-count { color: var(--color-content-default-tertiary); } .filtered-rows-count[hidden] { display: none; } /* ═══ AG Grid cell renderers (global — AG Grid injects cells outside scope) ═══ */ @@ -891,7 +891,7 @@ const prologisNav = [ border-radius: var(--radius-100); font-size: 0.75rem; line-height: 1.5; - font-weight: var(--font-weight-semibold); + font-weight: var(--typography-font-weight-semibold); white-space: nowrap; background: color-mix(in srgb, var(--_chip) 16%, transparent); color: color-mix(in srgb, var(--_chip) 70%, #1a1a1a); @@ -904,16 +904,16 @@ const prologisNav = [ flex-shrink: 0; } :global(.bcn-grid-name) { - color: var(--color-text-link); - font-weight: var(--font-weight-regular); + color: var(--color-content-link); + font-weight: var(--typography-font-weight-regular); text-decoration: underline; } - :global(.bcn-grid-name:hover) { color: var(--color-primary-hover); } + :global(.bcn-grid-name:hover) { color: var(--color-background-brand-hover); } /* ═══ Requirement dialog SHELL — esa-dialog + bcn-* section components compose the content; these rules are the header, the fixed-height dual-scroll stage, and the slide-up evidence sheet geometry. ═══ */ - .bcn-dialog__head { position: relative; flex: 1; display: flex; align-items: center; gap: var(--spacing-300); min-width: 0; padding: var(--spacing-500); background: var(--color-background); } + .bcn-dialog__head { position: relative; flex: 1; display: flex; align-items: center; gap: var(--spacing-300); min-width: 0; padding: var(--spacing-500); background: var(--color-background-default); } .bcn-dialog__head-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; } /* Close → EsaIconButton; wrapper just anchors it right, above the header scrim */ .bcn-dialog__head-close { flex-shrink: 0; margin-left: auto; z-index: 1; } @@ -925,14 +925,14 @@ const prologisNav = [ vertically-centered type badge. Badges keep the body font (no mono). */ .bcn-dialog__title { display: flex; flex-direction: column; align-items: flex-start; gap: var(--spacing-100); margin: 0; min-width: 0; } .bcn-dialog__title-row { display: flex; align-items: center; flex-wrap: wrap; gap: var(--spacing-200); min-width: 0; } - .bcn-dialog__title-name { font-family: var(--font-decorative); font-size: 1.5rem; font-weight: var(--font-weight-semibold); line-height: 1.2; color: var(--color-text-primary); } + .bcn-dialog__title-name { font-family: var(--font-decorative); font-size: 1.5rem; font-weight: var(--typography-font-weight-semibold); line-height: 1.2; color: var(--color-content-default); } /* Commitment-ID badge — faithful port of Beacon .client-commitment-id (purple --color-commitment on a 12% tint), minus Roboto Mono. */ - .bcn-dialog__badge { flex-shrink: 0; padding: 0.125rem 0.375rem; border-radius: var(--radius-100); font-size: var(--type-size-100); font-weight: var(--font-weight-semibold); line-height: 1.4; white-space: nowrap; } + .bcn-dialog__badge { flex-shrink: 0; padding: 0.125rem 0.375rem; border-radius: var(--radius-100); font-size: var(--font-size-100); font-weight: var(--typography-font-weight-semibold); line-height: 1.4; white-space: nowrap; } .bcn-dialog__badge--commitment { color: var(--color-commitment); background: color-mix(in srgb, var(--color-commitment) 12%, white); } /* Besley glyphs sit low in their line box; nudge the type badge down to optically center it against the title's cap height. */ - .bcn-dialog__badge--type { color: var(--color-text-secondary); background: var(--color-surface-sunken); transform: translateY(2px); } + .bcn-dialog__badge--type { color: var(--color-content-default-secondary); background: var(--color-background-elevation-sunken); transform: translateY(2px); } /* Footer slot: left Add-Evidence ghost trigger + right action row (Cancel/Save). */ .bcn-dialog__footer { display: flex; flex-direction: column; width: 100%; min-width: 0; gap: var(--spacing-300); } @@ -951,18 +951,18 @@ const prologisNav = [ /* Each column scrolls independently within the fixed-height stage. gap-700 = plenty of breathing room between the reference block and Discussion. */ .bcn-dialog__main { overflow-y: auto; min-height: 0; padding: var(--spacing-500); display: flex; flex-direction: column; gap: var(--spacing-700); min-width: 0; } - .bcn-dialog__side { overflow-y: auto; min-height: 0; padding: var(--spacing-500); border-left: 1px solid var(--color-border); display: flex; flex-direction: column; gap: var(--spacing-400); background: var(--color-background); min-width: 0; } + .bcn-dialog__side { overflow-y: auto; min-height: 0; padding: var(--spacing-500); border-left: 1px solid var(--color-border-default); display: flex; flex-direction: column; gap: var(--spacing-400); background: var(--color-background-default); min-width: 0; } /* Lists — page-level sidebar text links (esa-icon +
    ) inside an EsaCollapsible. */ .bcn-lists { display: flex; flex-direction: column; align-items: flex-start; gap: var(--spacing-200); margin: 0; padding: 0; list-style: none; } - .bcn-list-link { display: inline-flex; align-items: center; gap: var(--spacing-200); font-size: var(--form-font-size-md); font-weight: var(--font-weight-medium); color: var(--color-primary); text-decoration: none; } + .bcn-list-link { display: inline-flex; align-items: center; gap: var(--spacing-200); font-size: var(--typography-label-md-font-size); font-weight: var(--typography-font-weight-medium); color: var(--color-background-brand); text-decoration: none; } .bcn-list-link:hover { text-decoration: underline; } - .bcn-list-link :global(.esa-icon) { color: var(--color-text-tertiary); flex-shrink: 0; } + .bcn-list-link :global(.esa-icon) { color: var(--color-content-default-tertiary); flex-shrink: 0; } /* Not-Applicable toggle: a divider ties it to the Details section instead of floating. */ - .bcn-na-row { display: flex; align-items: center; padding-top: var(--spacing-400); border-top: 1px solid var(--color-border); } + .bcn-na-row { display: flex; align-items: center; padding-top: var(--spacing-400); border-top: 1px solid var(--color-border-default); } /* Source-document drawer (esa-side-dialog slotted body) */ - .bcn-source-pdf { height: calc(100vh - 10rem); min-height: 360px; border: 1px solid var(--color-border); border-radius: var(--radius-300); overflow: hidden; background: var(--color-surface-sunken); } + .bcn-source-pdf { height: calc(100vh - 10rem); min-height: 360px; border: 1px solid var(--color-border-default); border-radius: var(--radius-300); overflow: hidden; background: var(--color-background-elevation-sunken); } .bcn-source-pdf__frame { width: 100%; height: 100%; border: 0; } .bcn-source-foot { display: flex; align-items: center; width: 100%; } @@ -972,23 +972,23 @@ const prologisNav = [ /* Slides up from the bottom of the stage, ~90% height. Bounded to the stage (a % of it, never a px floor) so esa-dialog's shadow panel (which clips overflow) never paints the sheet under the header. */ - .bcn-evidence-sheet { position: absolute; left: var(--spacing-500); right: var(--spacing-500); bottom: 0; z-index: 5; height: 90%; min-height: 0; display: flex; flex-direction: column; background: var(--color-surface); border-top: 1px solid var(--color-border); border-radius: var(--radius-400) var(--radius-400) 0 0; box-shadow: none; transform: translateY(100%); transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1), box-shadow 300ms ease; } + .bcn-evidence-sheet { position: absolute; left: var(--spacing-500); right: var(--spacing-500); bottom: 0; z-index: 5; height: 90%; min-height: 0; display: flex; flex-direction: column; background: var(--color-background-elevation-raised); border-top: 1px solid var(--color-border-default); border-radius: var(--radius-400) var(--radius-400) 0 0; box-shadow: none; transform: translateY(100%); transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1), box-shadow 300ms ease; } .bcn-dialog__shell.is-evidence-open .bcn-evidence-sheet { transform: translateY(0); box-shadow: 0 -12px 32px rgba(0, 0, 0, 0.18); } - .bcn-evidence-sheet__head { flex-shrink: 0; display: flex; align-items: center; justify-content: space-between; gap: var(--spacing-300); padding: var(--spacing-400) var(--spacing-500); border-bottom: 1px solid var(--color-border); } + .bcn-evidence-sheet__head { flex-shrink: 0; display: flex; align-items: center; justify-content: space-between; gap: var(--spacing-300); padding: var(--spacing-400) var(--spacing-500); border-bottom: 1px solid var(--color-border-default); } .bcn-evidence-sheet__heading { display: flex; flex-direction: column; gap: 2px; min-width: 0; } - .bcn-evidence-sheet__title { display: inline-flex; align-items: center; gap: var(--spacing-200); font-size: var(--type-size-200); font-weight: var(--font-weight-semibold); color: var(--color-text-primary); } - .bcn-evidence-sheet__expected { font-size: 0.8125rem; color: var(--color-text-tertiary); } + .bcn-evidence-sheet__title { display: inline-flex; align-items: center; gap: var(--spacing-200); font-size: var(--font-size-200); font-weight: var(--typography-font-weight-semibold); color: var(--color-content-default); } + .bcn-evidence-sheet__expected { font-size: 0.8125rem; color: var(--color-content-default-tertiary); } .bcn-evidence-sheet__head-actions { display: flex; align-items: center; gap: var(--spacing-050); flex-shrink: 0; } .bcn-evidence-sheet__body { flex: 1; overflow-y: auto; padding: var(--spacing-500); display: flex; flex-direction: column; gap: var(--spacing-400); } /* ── Evidence-of-Compliance editor (esa-side-dialog lego) — only body composition is ours ── */ .bcn-edit-files-field { display: flex; flex-direction: column; gap: var(--spacing-200); } - .bcn-edit-files-field__label { font-size: 0.875rem; font-weight: var(--font-weight-medium); color: var(--color-text-primary); } + .bcn-edit-files-field__label { font-size: 0.875rem; font-weight: var(--typography-font-weight-medium); color: var(--color-content-default); } .bcn-edit-foot { display: flex; gap: var(--spacing-300); justify-content: flex-end; } @media (max-width: 860px) { .bcn-dialog__grid { grid-template-columns: 1fr; } - .bcn-dialog__side { border-left: 0; border-top: 1px solid var(--color-border); } + .bcn-dialog__side { border-left: 0; border-top: 1px solid var(--color-border-default); } } @@ -996,6 +996,6 @@ const prologisNav = [ scope, so override globally; only this page loads this rule). --> diff --git a/src/pages/prototypes/settings/tenants.astro b/src/pages/prototypes/settings/tenants.astro index 2742d7ec..c291a3d4 100644 --- a/src/pages/prototypes/settings/tenants.astro +++ b/src/pages/prototypes/settings/tenants.astro @@ -107,10 +107,10 @@ const moduleOptions = MODULES.filter((m) => m !== 'Core');
    - + Cancel - Create tenant + Create tenant
    diff --git a/src/pages/prototypes/site-clearance-bio.astro b/src/pages/prototypes/site-clearance-bio.astro index 78489a66..66a3ea0e 100644 --- a/src/pages/prototypes/site-clearance-bio.astro +++ b/src/pages/prototypes/site-clearance-bio.astro @@ -49,7 +49,7 @@ import AppShell from '../../layouts/AppShell.astro'; import PageLayout from '../../layouts/PageLayout.astro'; import '../../styles/beacon-map.css'; // shared Leaflet chrome (.leaflet-tooltip restyle for all map pages) import EsaButton from '@esa/ecology/esa-button.astro'; -import EsaIconButton from '@esa/ecology/esa-icon-button.astro'; +import EsaIconButton from '@esa/ecology/esa-button.astro'; import EsaIcon from '@esa/ecology/esa-icon.astro'; import EsaBadge from '@esa/ecology/esa-badge.astro'; import EsaCollapsible from '@esa/ecology/esa-collapsible.astro'; @@ -244,7 +244,7 @@ const ICON_CHEVRON_DOWN = "";
    - +
    @@ -273,7 +273,7 @@ const ICON_CHEVRON_DOWN = ""; class="map-legend__dot" style={ status === 'provisional-block' - ? `background:var(--color-surface); border: 2px solid var(${STATUS_META[status].colorVar}); box-sizing: border-box;` + ? `background:var(--color-background-elevation-raised); border: 2px solid var(${STATUS_META[status].colorVar}); box-sizing: border-box;` : `background:var(${STATUS_META[status].colorVar});` } /> @@ -309,7 +309,7 @@ const ICON_CHEVRON_DOWN = "";
    @@ -348,7 +348,7 @@ const ICON_CHEVRON_DOWN = "";
    @@ -368,7 +368,7 @@ const ICON_CHEVRON_DOWN = "";
    @@ -551,7 +551,7 @@ const ICON_CHEVRON_DOWN = ""; tab, pans/zooms + pulses the marker (the ch2 go-to machinery). Hidden while editing — a mid-edit jump would discard the form. --> - Edit site details - - + Edit site details + + @@ -611,7 +611,7 @@ const ICON_CHEVRON_DOWN = ""; @@ -649,10 +649,10 @@ const ICON_CHEVRON_DOWN = ""; @@ -1211,7 +1211,7 @@ const ICON_CHEVRON_DOWN = ""; // hollow markers (a solid segment would read as Blocked). const fill = status === 'provisional-block' - ? 'repeating-linear-gradient(135deg, var(--st-provisional-block) 0 4px, var(--color-surface) 4px 7px)' + ? 'repeating-linear-gradient(135deg, var(--st-provisional-block) 0 4px, var(--color-background-elevation-raised) 4px 7px)' : `var(--st-${status})`; div.style.cssText = `height:100%; flex: 0 0 ${(n / total) * 100}%; background:${fill};`; div.title = `${stLabel(status)}: ${n}`; @@ -2449,7 +2449,7 @@ const ICON_CHEVRON_DOWN = ""; width: 100%; height: 70vh; min-height: 480px; - border: 1px solid var(--color-border); + border: 1px solid var(--color-border-default); border-radius: var(--radius-300); overflow: hidden; } @@ -2511,8 +2511,8 @@ const ICON_CHEVRON_DOWN = ""; display: flex; flex-direction: column; margin-bottom: var(--spacing-300); - background: var(--color-surface); - border: 1px solid var(--color-border); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); border-radius: var(--radius-200); } .map-filterbar__row { @@ -2523,12 +2523,12 @@ const ICON_CHEVRON_DOWN = ""; padding: var(--spacing-250) var(--spacing-400); } .map-filterbar__row + .map-filterbar__row { - border-top: 1px solid var(--color-border); + border-top: 1px solid var(--color-border-default); } .map-filterbar__label { - font-size: var(--type-size-150); - font-weight: var(--font-weight-semibold); - color: var(--color-text-tertiary); + font-size: var(--font-size-150); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-tertiary); white-space: nowrap; } /* Go-to jumps (ch2) — right-aligned in the View row, beside the presets. @@ -2543,10 +2543,11 @@ const ICON_CHEVRON_DOWN = ""; gap: var(--spacing-200); } .map-filterbar__goto :global(esa-combobox) { - /* esa-combobox sm reads the Beacon form tokens (28px / 12px) — re-point - them to the filter legos' 32px / --type-size-150 line, scoped here. */ - --form-height-sm: 32px; - --form-font-size-sm: var(--type-size-150); + /* The old 28-to-32px height re-point died with the hub's --form-height + surface; sm now sizes from --spacing padding like the filter legos beside + it, so the row shares a line without an override. Font alignment stays — + the shadow input inherits it from the host. */ + font-size: var(--font-size-150); } #goto-wa { width: 200px; @@ -2578,7 +2579,7 @@ const ICON_CHEVRON_DOWN = ""; display: flex; align-items: center; justify-content: center; - background: color-mix(in srgb, var(--color-surface) 78%, transparent); + background: color-mix(in srgb, var(--color-background-elevation-raised) 78%, transparent); backdrop-filter: blur(2px); } .map-empty[hidden] { @@ -2597,9 +2598,9 @@ const ICON_CHEVRON_DOWN = ""; .comp-picker esa-dropdown-menu { display: inline-flex; align-items: center; - /* The panel items read --type-size-200 — step it down one notch here so + /* The panel items read --font-size-200 — step it down one notch here so the open list matches the trigger's quieter scale. */ - --type-size-200: 0.875rem; + --font-size-200: 0.875rem; } .comp-picker__trigger { display: inline-flex; @@ -2613,17 +2614,17 @@ const ICON_CHEVRON_DOWN = ""; font: inherit; font-size: 0.875rem; line-height: 1.3; - font-weight: var(--font-weight-medium); - color: var(--color-text-secondary); + font-weight: var(--typography-font-weight-medium); + color: var(--color-content-default-secondary); cursor: pointer; white-space: nowrap; } .comp-picker__trigger:hover { - background: var(--color-surface-sunken, var(--color-background)); - color: var(--color-text-primary); + background: var(--color-background-elevation-sunken, var(--color-background-default)); + color: var(--color-content-default); } .comp-picker__trigger :global(.esa-icon) { - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); flex-shrink: 0; } @@ -2637,7 +2638,7 @@ const ICON_CHEVRON_DOWN = ""; margin: 0; font-size: 0.875rem; line-height: 1.5; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } /* Legend overlay — statuses + the two observation symbols (the violet is a @@ -2651,18 +2652,18 @@ const ICON_CHEVRON_DOWN = ""; flex-direction: column; gap: var(--spacing-150); padding: var(--spacing-300) var(--spacing-400); - background: color-mix(in srgb, var(--color-surface) 94%, transparent); + background: color-mix(in srgb, var(--color-background-elevation-raised) 94%, transparent); backdrop-filter: blur(4px); - border: 1px solid var(--color-border); + border: 1px solid var(--color-border-default); border-radius: var(--radius-300); - box-shadow: var(--shadow-400); + box-shadow: var(--elevation-5); font-size: 0.875rem; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } .map-legend__title { font-size: 0.875rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } .map-legend__row { display: flex; @@ -2673,7 +2674,7 @@ const ICON_CHEVRON_DOWN = ""; width: 12px; height: 12px; border-radius: 50%; - box-shadow: 0 0 0 2px var(--color-surface); + box-shadow: 0 0 0 2px var(--color-background-elevation-raised); flex-shrink: 0; } .map-legend__ring { @@ -2692,7 +2693,7 @@ const ICON_CHEVRON_DOWN = ""; height: 8px; border-radius: 50%; border: 1.5px solid var(--obs-color); - background: var(--color-surface); + background: var(--color-background-elevation-raised); box-sizing: border-box; flex-shrink: 0; margin-inline: 2px; @@ -2705,8 +2706,8 @@ const ICON_CHEVRON_DOWN = ""; gap: var(--spacing-200); margin-top: var(--spacing-400); padding: var(--spacing-300) var(--spacing-400); - background: var(--color-surface); - border: 1px solid var(--color-border); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); border-radius: var(--radius-300); } .readiness__head { @@ -2718,26 +2719,26 @@ const ICON_CHEVRON_DOWN = ""; } .readiness__title { font-size: 0.875rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } .readiness__summary { font-size: 0.875rem; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } .readiness__summary strong { color: var(--st-cleared); - font-weight: var(--font-weight-bold); + font-weight: var(--typography-font-weight-bold); } .readiness__bar { display: flex; height: 10px; border-radius: var(--radius-full); overflow: hidden; - background: var(--color-background); + background: var(--color-background-default); } .readiness__bar > :global(div + div) { - border-left: 1px solid var(--color-surface); + border-left: 1px solid var(--color-background-elevation-raised); } .readiness__legend { list-style: none; @@ -2752,7 +2753,7 @@ const ICON_CHEVRON_DOWN = ""; align-items: center; gap: var(--spacing-150); font-size: 0.875rem; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } .readiness__legend-item[data-empty='true'] { opacity: 0.4; @@ -2764,11 +2765,11 @@ const ICON_CHEVRON_DOWN = ""; flex-shrink: 0; } .readiness__legend-label { - color: var(--color-text-primary); + color: var(--color-content-default); } .readiness__legend-count { - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); font-variant-numeric: tabular-nums; } @@ -2796,8 +2797,8 @@ const ICON_CHEVRON_DOWN = ""; :global(.feed-heading) { margin: 0 0 var(--spacing-200); font-size: 1rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } :global(.feed-day__list) { list-style: none; @@ -2827,9 +2828,9 @@ const ICON_CHEVRON_DOWN = ""; margin-top: 1px; padding: 0.125rem 0.375rem; border-radius: var(--radius-100); - font-family: var(--font-mono, monospace); - font-size: var(--type-size-100); /* ID token — meta-scale, like the catalog badges */ - font-weight: var(--font-weight-semibold); + font-family: var(--typography-font-family-mono, monospace); + font-size: var(--font-size-100); /* ID token — meta-scale, like the catalog badges */ + font-weight: var(--typography-font-weight-semibold); line-height: 1.4; letter-spacing: 0; text-transform: uppercase; @@ -2840,8 +2841,8 @@ const ICON_CHEVRON_DOWN = ""; background: color-mix(in srgb, var(--obs-color) 12%, white); } :global(.entry__badge--wa) { - color: var(--color-primary); - background: color-mix(in srgb, var(--color-primary) 10%, white); + color: var(--color-background-brand); + background: color-mix(in srgb, var(--color-background-brand) 10%, white); } :global(.entry__body) { flex: 1; @@ -2858,14 +2859,14 @@ const ICON_CHEVRON_DOWN = ""; line-height: 1.45; } :global(.entry__type) { - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } :global(.entry__sep) { - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } :global(.entry__primary) { - color: var(--color-text-primary); + color: var(--color-content-default); } :global(.entry__line .gate__chipwrap) { vertical-align: text-bottom; @@ -2875,24 +2876,24 @@ const ICON_CHEVRON_DOWN = ""; margin: 0; font-size: 0.875rem; line-height: 1.45; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } :global(.entry__meta) { flex-shrink: 0; font-size: 0.8125rem; /* one step below the 0.875rem base — the ch1 floor */ - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); white-space: nowrap; text-align: right; } :global(.entry--empty) { padding: var(--spacing-200) 0; font-size: 0.875rem; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } /* Card dress (feed rows + drawer conflict/impact rows) — clickable jump-offs */ :global(.entry--card) { - background: var(--color-surface); - border: 1px solid var(--color-border); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); border-radius: var(--radius-300); cursor: pointer; transition: @@ -2901,7 +2902,7 @@ const ICON_CHEVRON_DOWN = ""; } :global(.entry--card:hover) { background: var(--grid-row-bg-hover); - border-color: var(--color-border-strong); + border-color: var(--color-border-default-strong); } /* ═══ Print — clean landscape snapshot of the map tab ═══ */ /* The Activity tab needs no print rules for the same reason the Data tab has @@ -2936,12 +2937,12 @@ const ICON_CHEVRON_DOWN = ""; } .print-header__title { font-size: 16pt; - font-weight: var(--font-weight-bold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-bold); + color: var(--color-content-default); } .print-header__meta { font-size: 9pt; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } .map-wrap { height: 380pt; @@ -2950,15 +2951,15 @@ const ICON_CHEVRON_DOWN = ""; } .readiness { break-inside: avoid; - border-color: var(--color-border, #ccc); + border-color: var(--color-border-default, #ccc); } } /* ═══ Filter bar — carded two-band, faithful copy of requirement-tracker's page glue. Every control inside is a lego. ═══ */ .bcn-filterbar { - background: var(--color-surface); - border: 1px solid var(--color-border); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); border-radius: var(--radius-200); margin-bottom: var(--spacing-400); } @@ -2974,7 +2975,7 @@ const ICON_CHEVRON_DOWN = ""; align-items: center; gap: var(--spacing-300); padding: var(--spacing-300) var(--spacing-400); - border-top: 1px solid var(--color-border); + border-top: 1px solid var(--color-border-default); flex-wrap: wrap; } .bcn-filterbar__group { @@ -2983,9 +2984,9 @@ const ICON_CHEVRON_DOWN = ""; gap: var(--spacing-300); } .bcn-filterbar__label { - font-size: var(--type-size-150); - font-weight: var(--font-weight-semibold); - color: var(--color-text-tertiary); + font-size: var(--font-size-150); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-tertiary); white-space: nowrap; } .bcn-filterbar__search { @@ -3021,8 +3022,8 @@ const ICON_CHEVRON_DOWN = ""; justify-content: space-between; gap: var(--spacing-400); padding: var(--spacing-200) var(--spacing-400); - background: var(--color-background); - border: 1px solid var(--color-border); + background: var(--color-background-default); + border: 1px solid var(--color-border-default); border-top: 0; border-radius: 0 0 var(--radius-100) var(--radius-100); } @@ -3030,12 +3031,12 @@ const ICON_CHEVRON_DOWN = ""; display: flex; align-items: center; gap: var(--spacing-400); - font-size: var(--type-size-100); - color: var(--color-text-secondary); + font-size: var(--font-size-100); + color: var(--color-content-default-secondary); font-variant-numeric: tabular-nums; } .filtered-rows-count { - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } .filtered-rows-count[hidden] { display: none; @@ -3055,7 +3056,7 @@ const ICON_CHEVRON_DOWN = ""; border-radius: var(--radius-100); font-size: 0.75rem; line-height: 1.5; - font-weight: var(--font-weight-semibold); + font-weight: var(--typography-font-weight-semibold); white-space: nowrap; background: color-mix(in srgb, var(--_chip) 16%, transparent); color: color-mix(in srgb, var(--_chip) 70%, #1a1a1a); @@ -3075,12 +3076,12 @@ const ICON_CHEVRON_DOWN = ""; not border, so the chip metrics don't shift against its solid siblings. */ :global(.bcn-status-chip[data-status='provisional-block']), :global(.bcn-grid-chip[data-status='provisional-block']) { - background: var(--color-surface); + background: var(--color-background-elevation-raised); box-shadow: inset 0 0 0 1.5px var(--st-provisional-block); } :global(.bcn-status-chip[data-status='provisional-block'] .bcn-status-chip__dot), :global(.bcn-grid-chip[data-status='provisional-block'] .bcn-grid-chip__dot) { - background: var(--color-surface); + background: var(--color-background-elevation-raised); box-shadow: inset 0 0 0 1.5px var(--st-provisional-block); } @@ -3111,14 +3112,14 @@ const ICON_CHEVRON_DOWN = ""; } .wa__title { margin: 0; - font-size: var(--type-size-400); - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-size: var(--font-size-400); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } .wa__subtitle { margin: 0; font-size: 0.875rem; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } /* ═══ Dates band (v2) — always-visible decision inputs directly under the header. Full-bleed: negative margins eat the lego body's --spacing-500 @@ -3129,8 +3130,8 @@ const ICON_CHEVRON_DOWN = ""; gap: var(--spacing-200) var(--spacing-300); margin: calc(-1 * var(--spacing-500, 1.5rem)) calc(-1 * var(--spacing-500, 1.5rem)) 0; padding: var(--spacing-250) var(--spacing-500, 1.5rem); - background: var(--color-background); - border-bottom: 1px solid var(--color-border); + background: var(--color-background-default); + border-bottom: 1px solid var(--color-border-default); } /* ═══ Read-mode section rhythm — balanced breaks between the dates band, the @@ -3148,7 +3149,7 @@ const ICON_CHEVRON_DOWN = ""; #wa-read > .wa__more { margin-top: var(--spacing-500); padding-top: var(--spacing-500); - border-top: 1px solid var(--color-border); + border-top: 1px solid var(--color-border-default); } /* ═══ Comments thread (per work area) — ported from permit tracking @@ -3174,7 +3175,7 @@ const ICON_CHEVRON_DOWN = ""; :global(.wc-comment--empty) { display: block; font-size: 0.875rem; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } :global(.wc-comment__avatar) { display: inline-flex; @@ -3183,10 +3184,10 @@ const ICON_CHEVRON_DOWN = ""; width: 28px; height: 28px; border-radius: 50%; - background: var(--_c, var(--color-secondary)); + background: var(--_c, var(--color-background-brand-muted)); color: #fff; font-size: 0.6875rem; - font-weight: var(--font-weight-bold); + font-weight: var(--typography-font-weight-bold); flex-shrink: 0; letter-spacing: 0.02em; } @@ -3209,25 +3210,25 @@ const ICON_CHEVRON_DOWN = ""; } :global(.wc-comment__author) { font-size: 0.875rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } :global(.wc-comment__time) { font-size: 0.75rem; - color: var(--color-text-tertiary); + color: var(--color-content-default-tertiary); } :global(.wc-comment__text) { margin: 0; font-size: 0.875rem; line-height: 1.5; - color: var(--color-text-primary); + color: var(--color-content-default); white-space: pre-wrap; word-break: break-word; } :global(.wc-mention) { - color: var(--color-primary); - font-weight: var(--font-weight-semibold); - background: color-mix(in srgb, var(--color-primary) 10%, transparent); + color: var(--color-background-brand); + font-weight: var(--typography-font-weight-semibold); + background: color-mix(in srgb, var(--color-background-brand) 10%, transparent); border-radius: var(--radius-050); padding: 0 2px; } @@ -3243,10 +3244,10 @@ const ICON_CHEVRON_DOWN = ""; height: 18px; padding: 0 5px; border-radius: var(--radius-full); - background: var(--color-surface-sunken); - color: var(--color-text-secondary); + background: var(--color-background-elevation-sunken); + color: var(--color-content-default-secondary); font-size: 0.6875rem; - font-weight: var(--font-weight-bold); + font-weight: var(--typography-font-weight-bold); vertical-align: middle; margin-left: var(--spacing-100); } @@ -3270,10 +3271,10 @@ const ICON_CHEVRON_DOWN = ""; list-style: none; margin: 0; padding: var(--spacing-100); - background: var(--color-surface); - border: 1px solid var(--color-border); + background: var(--color-background-elevation-raised); + border: 1px solid var(--color-border-default); border-radius: var(--radius-200); - box-shadow: var(--shadow-400); + box-shadow: var(--elevation-5); max-height: 208px; overflow-y: auto; } @@ -3287,7 +3288,7 @@ const ICON_CHEVRON_DOWN = ""; padding: var(--spacing-200); border-radius: var(--radius-100); font-size: 0.875rem; - color: var(--color-text-primary); + color: var(--color-content-default); cursor: pointer; } :global(.wc-mention-opt:hover) { @@ -3301,7 +3302,7 @@ const ICON_CHEVRON_DOWN = ""; } .wa__compose-hint { font-size: 0.8125rem; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } /* ═══ Inline biological-clearance section — the gate's review history lives @@ -3326,7 +3327,7 @@ const ICON_CHEVRON_DOWN = ""; display: none; } .wa__more-item + .wa__more-item { - border-top: 1px solid var(--color-border-light); + border-top: 1px solid var(--color-border-default-subtle); } .wa__more-item[hidden] + .wa__more-item { border-top: none; @@ -3337,12 +3338,12 @@ const ICON_CHEVRON_DOWN = ""; gap: var(--spacing-200); margin: 0 0 var(--spacing-300); font-size: 0.9375rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } .wa__section :global(.esa-icon) { flex-shrink: 0; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } .wa__section :global(.esa-badge) { vertical-align: middle; @@ -3380,16 +3381,16 @@ const ICON_CHEVRON_DOWN = ""; } .dd__count { font-size: 0.9375rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } .dd__form { display: flex; flex-direction: column; gap: var(--spacing-300); padding: var(--spacing-300) var(--spacing-400); - background: var(--color-background); - border: 1px solid var(--color-border); + background: var(--color-background-default); + border: 1px solid var(--color-border-default); border-radius: var(--radius-300); } .dd__form[hidden] { @@ -3427,7 +3428,7 @@ const ICON_CHEVRON_DOWN = ""; top: 20px; bottom: 2px; width: 2px; - background: var(--color-border); + background: var(--color-border-default); } :global(.rev__dot) { width: 16px; @@ -3435,8 +3436,8 @@ const ICON_CHEVRON_DOWN = ""; border-radius: var(--radius-full); margin-top: 2px; z-index: 1; - background: var(--color-surface); - border: 2px solid var(--color-border-strong); + background: var(--color-background-elevation-raised); + border: 2px solid var(--color-border-default-strong); box-sizing: border-box; } :global(.rev__main) { @@ -3452,13 +3453,13 @@ const ICON_CHEVRON_DOWN = ""; gap: var(--spacing-200); margin: 0; font-size: 1rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } :global(.rev__when) { font-size: 0.875rem; - font-weight: var(--font-weight-medium); - color: var(--color-text-secondary); + font-weight: var(--typography-font-weight-medium); + color: var(--color-content-default-secondary); } :global(.rev__edit) { margin-left: auto; @@ -3471,26 +3472,26 @@ const ICON_CHEVRON_DOWN = ""; } :global(.rev__until) { font-size: 0.875rem; - font-weight: var(--font-weight-medium); - color: var(--color-text-secondary); + font-weight: var(--typography-font-weight-medium); + color: var(--color-content-default-secondary); } :global(.rev__current) { display: inline-flex; align-items: center; padding: 1px var(--spacing-200); border-radius: var(--radius-full); - background: color-mix(in srgb, var(--color-primary) 10%, transparent); - border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent); + background: color-mix(in srgb, var(--color-background-brand) 10%, transparent); + border: 1px solid color-mix(in srgb, var(--color-background-brand) 30%, transparent); font-size: 0.75rem; - font-weight: var(--font-weight-semibold); - color: var(--color-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-background-brand); white-space: nowrap; } :global(.rev__note) { margin: 0; font-size: 0.9375rem; line-height: 1.55; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); } /* A node being edited becomes the form (the pencil swap) — drop the rail grid so the form spans the full width. */ @@ -3518,14 +3519,14 @@ const ICON_CHEVRON_DOWN = ""; gap: var(--spacing-300); margin-top: var(--spacing-300); padding: var(--spacing-300) var(--spacing-400); - background: var(--color-background); - border: 1px solid var(--color-border); + background: var(--color-background-default); + border: 1px solid var(--color-border-default); border-radius: var(--radius-300); } .we__addnote-title { font-size: 0.875rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } /* Observation impact list — entry-row cards (set by the renderer caller). */ @@ -3548,12 +3549,12 @@ const ICON_CHEVRON_DOWN = ""; .wa__note { margin: 0; padding: var(--spacing-300) var(--spacing-400); - background: var(--color-background); - border: 1px solid var(--color-border); + background: var(--color-background-default); + border: 1px solid var(--color-border-default); border-radius: var(--radius-300); font-size: 1rem; line-height: 1.6; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); white-space: pre-line; } .wa__note--log { @@ -3579,8 +3580,8 @@ const ICON_CHEVRON_DOWN = ""; flex-direction: column; gap: var(--spacing-100); padding: var(--spacing-300) var(--spacing-400); - background: var(--color-background); - border: 1px solid var(--color-border); + background: var(--color-background-default); + border: 1px solid var(--color-border-default); border-radius: var(--radius-300); } :global(.wnote__head) { @@ -3591,8 +3592,8 @@ const ICON_CHEVRON_DOWN = ""; } :global(.wnote__meta) { font-size: 0.8125rem; - font-weight: var(--font-weight-semibold); - color: var(--color-text-tertiary); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default-tertiary); } :global(.wnote__del) { flex-shrink: 0; @@ -3601,7 +3602,7 @@ const ICON_CHEVRON_DOWN = ""; margin: 0; font-size: 1rem; line-height: 1.6; - color: var(--color-text-secondary); + color: var(--color-content-default-secondary); white-space: pre-line; } @@ -3617,7 +3618,7 @@ const ICON_CHEVRON_DOWN = ""; padding: var(--spacing-200) 0; } .wa__activity :global(.entry + .entry) { - border-top: 1px solid var(--color-border-light); + border-top: 1px solid var(--color-border-default-subtle); } /* Observation meta grid */ @@ -3627,13 +3628,13 @@ const ICON_CHEVRON_DOWN = ""; gap: var(--spacing-300) var(--spacing-400); margin: 0; padding: var(--spacing-400); - background: var(--color-background); - border: 1px solid var(--color-border); + background: var(--color-background-default); + border: 1px solid var(--color-border-default); border-radius: var(--radius-300); } .wa__kv-val { - font-size: var(--form-font-size-md); - font-weight: var(--font-weight-semibold); - color: var(--color-text-primary); + font-size: var(--typography-label-md-font-size); + font-weight: var(--typography-font-weight-semibold); + color: var(--color-content-default); } diff --git a/src/pages/prototypes/site-clearance-simple.astro b/src/pages/prototypes/site-clearance-simple.astro index 81944bcf..f86715e6 100644 --- a/src/pages/prototypes/site-clearance-simple.astro +++ b/src/pages/prototypes/site-clearance-simple.astro @@ -219,7 +219,7 @@ const ICON_CHEVRON = ""; @@ -267,8 +267,8 @@ const ICON_CHEVRON = ""; @@ -285,15 +285,15 @@ const ICON_CHEVRON = ""; /* ── Composition glue only (bcn-lego-checked above). ─────────────────────── */ .cmp-note { display: flex; gap: var(--spacing-300); align-items: flex-start; - background: var(--color-surface-sunken); border: 1px solid var(--color-border); + background: var(--color-background-elevation-sunken); border: 1px solid var(--color-border-default); border-radius: var(--radius-300); padding: var(--spacing-400); - margin-bottom: var(--spacing-500); color: var(--color-text-secondary); + margin-bottom: var(--spacing-500); color: var(--color-content-default-secondary); } - .cmp-note p { margin: 0; font-size: var(--type-size-200); line-height: 1.5; } - .cmp-note strong { color: var(--color-text-primary); } + .cmp-note p { margin: 0; font-size: var(--font-size-200); line-height: 1.5; } + .cmp-note strong { color: var(--color-content-default); } /* Work-area list — a quiet row table (not a status-bordered card). */ - .wa-list { display: flex; flex-direction: column; border: 1px solid var(--color-border); border-radius: var(--radius-300); overflow: hidden; background: var(--color-surface); } + .wa-list { display: flex; flex-direction: column; border: 1px solid var(--color-border-default); border-radius: var(--radius-300); overflow: hidden; background: var(--color-background-elevation-raised); } .wa-list__head, .wa-row { display: grid; grid-template-columns: minmax(150px, 1.4fr) minmax(140px, 1.4fr) minmax(110px, 0.9fr) minmax(150px, 1fr); @@ -301,67 +301,67 @@ const ICON_CHEVRON = ""; padding: var(--spacing-300) var(--spacing-400); } .wa-list__head { - background: var(--color-surface-sunken); border-bottom: 1px solid var(--color-border); - font-size: var(--type-size-100); font-weight: var(--font-weight-semibold); color: var(--color-text-secondary); + background: var(--color-background-elevation-sunken); border-bottom: 1px solid var(--color-border-default); + font-size: var(--font-size-100); font-weight: var(--typography-font-weight-semibold); color: var(--color-content-default-secondary); } - .wa-row { width: 100%; text-align: left; background: none; border: none; border-bottom: 1px solid var(--color-border); cursor: pointer; font: inherit; } + .wa-row { width: 100%; text-align: left; background: none; border: none; border-bottom: 1px solid var(--color-border-default); cursor: pointer; font: inherit; } .wa-row:last-child { border-bottom: none; } - .wa-row:hover { background: var(--color-surface-sunken); } - .wa-row__id { display: block; font-weight: var(--font-weight-semibold); color: var(--color-text-primary); } - .wa-row__method, .wa-row__county { display: block; font-size: var(--type-size-100); color: var(--color-text-tertiary); margin-top: 2px; } - .wa-row__seg { display: block; color: var(--color-text-primary); } - .wa-row__start { color: var(--color-text-secondary); font-variant-numeric: tabular-nums; } + .wa-row:hover { background: var(--color-background-elevation-sunken); } + .wa-row__id { display: block; font-weight: var(--typography-font-weight-semibold); color: var(--color-content-default); } + .wa-row__method, .wa-row__county { display: block; font-size: var(--font-size-100); color: var(--color-content-default-tertiary); margin-top: 2px; } + .wa-row__seg { display: block; color: var(--color-content-default); } + .wa-row__start { color: var(--color-content-default-secondary); font-variant-numeric: tabular-nums; } /* Drawer shells */ .wa__header { display: flex; flex-direction: column; gap: var(--spacing-150); } .wa__headmain { display: flex; align-items: center; gap: var(--spacing-300); flex-wrap: wrap; } - .wa__title { margin: 0; font-size: var(--type-size-400); font-weight: var(--font-weight-bold); color: var(--color-text-primary); } - .wa__subtitle { margin: 0; font-size: var(--type-size-200); color: var(--color-text-secondary); } + .wa__title { margin: 0; font-size: var(--font-size-400); font-weight: var(--typography-font-weight-bold); color: var(--color-content-default); } + .wa__subtitle { margin: 0; font-size: var(--font-size-200); color: var(--color-content-default-secondary); } .wa { display: flex; flex-direction: column; gap: var(--spacing-500); } - .wa__section { display: flex; align-items: center; gap: var(--spacing-200); margin: 0 0 var(--spacing-300); font-size: var(--type-size-200); font-weight: var(--font-weight-semibold); color: var(--color-text-primary); } + .wa__section { display: flex; align-items: center; gap: var(--spacing-200); margin: 0 0 var(--spacing-300); font-size: var(--font-size-200); font-weight: var(--typography-font-weight-semibold); color: var(--color-content-default); } /* Dates band — full-bleed against the lego body padding. */ .band { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: var(--spacing-400); - background: var(--color-surface-sunken); border-block: 1px solid var(--color-border); + background: var(--color-background-elevation-sunken); border-block: 1px solid var(--color-border-default); padding: var(--spacing-400); margin-inline: calc(-1 * var(--spacing-500)); padding-inline: var(--spacing-500); } - .wa__kv-val { font-size: var(--form-font-size-md); font-weight: var(--font-weight-semibold); color: var(--color-text-primary); font-variant-numeric: tabular-nums; } - .band__alert { font-weight: var(--font-weight-semibold); color: var(--st-blocked); font-variant-numeric: tabular-nums; } + .wa__kv-val { font-size: var(--typography-label-md-font-size); font-weight: var(--typography-font-weight-semibold); color: var(--color-content-default); font-variant-numeric: tabular-nums; } + .band__alert { font-weight: var(--typography-font-weight-semibold); color: var(--st-blocked); font-variant-numeric: tabular-nums; } - .decide { margin: 0; font-size: var(--type-size-200); color: var(--color-text-secondary); } + .decide { margin: 0; font-size: var(--font-size-200); color: var(--color-content-default-secondary); } /* 2×2 disciplines board */ .board { display: grid; grid-template-columns: 1fr 1fr; gap: var(--spacing-300); } .board__cell { display: flex; flex-direction: column; gap: var(--spacing-200); align-items: flex-start; padding: var(--spacing-350); text-align: left; cursor: pointer; font: inherit; - background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-300); + background: var(--color-background-elevation-raised); border: 1px solid var(--color-border-default); border-radius: var(--radius-300); transition: border-color 150ms ease, background 150ms ease; } - .board__cell:hover { border-color: var(--color-border-strong); background: var(--color-surface-sunken); } + .board__cell:hover { border-color: var(--color-border-default-strong); background: var(--color-background-elevation-sunken); } .board__cellhead { display: flex; align-items: center; gap: var(--spacing-200); width: 100%; } - .board__dim { font-weight: var(--font-weight-semibold); color: var(--color-text-primary); } - .board__chev { margin-left: auto; color: var(--color-text-tertiary); display: inline-flex; } + .board__dim { font-weight: var(--typography-font-weight-semibold); color: var(--color-content-default); } + .board__chev { margin-left: auto; color: var(--color-content-default-tertiary); display: inline-flex; } .board__unreviewed { - font-size: var(--type-size-100); font-weight: var(--font-weight-semibold); color: var(--color-text-tertiary); - border: 1px dashed var(--color-border-strong); border-radius: var(--radius-full); padding: 2px var(--spacing-250); + font-size: var(--font-size-100); font-weight: var(--typography-font-weight-semibold); color: var(--color-content-default-tertiary); + border: 1px dashed var(--color-border-default-strong); border-radius: var(--radius-full); padding: 2px var(--spacing-250); } - .board__meta { font-size: var(--type-size-100); color: var(--color-text-tertiary); } + .board__meta { font-size: var(--font-size-100); color: var(--color-content-default-tertiary); } - .wa__note { margin: 0; padding-left: var(--spacing-400); border-left: 2px solid var(--color-border-strong); color: var(--color-text-secondary); font-size: var(--type-size-200); line-height: 1.5; white-space: pre-line; } + .wa__note { margin: 0; padding-left: var(--spacing-400); border-left: 2px solid var(--color-border-default-strong); color: var(--color-content-default-secondary); font-size: var(--font-size-200); line-height: 1.5; white-space: pre-line; } /* Discipline editor */ .dd__form { display: flex; flex-direction: column; gap: var(--spacing-400); } .we__row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--spacing-300); } - .dd__hint { margin: 0 0 var(--spacing-300); font-size: var(--type-size-100); color: var(--color-text-tertiary); } + .dd__hint { margin: 0 0 var(--spacing-300); font-size: var(--font-size-100); color: var(--color-content-default-tertiary); } .dd__log { list-style: none; margin: 0 0 var(--spacing-400); padding: 0; display: flex; flex-direction: column; gap: var(--spacing-300); } .dd__log:empty { display: none; } - .dd__log-item { padding: var(--spacing-300); background: var(--color-surface-sunken); border-radius: var(--radius-200); } - .dd__log-meta { font-size: var(--type-size-100); color: var(--color-text-tertiary); margin-bottom: 2px; } - .dd__log-text { font-size: var(--type-size-200); color: var(--color-text-secondary); white-space: pre-line; } - .dd__addnote { display: flex; flex-direction: column; gap: var(--spacing-300); padding-top: var(--spacing-300); border-top: 1px solid var(--color-border); } + .dd__log-item { padding: var(--spacing-300); background: var(--color-background-elevation-sunken); border-radius: var(--radius-200); } + .dd__log-meta { font-size: var(--font-size-100); color: var(--color-content-default-tertiary); margin-bottom: 2px; } + .dd__log-text { font-size: var(--font-size-200); color: var(--color-content-default-secondary); white-space: pre-line; } + .dd__addnote { display: flex; flex-direction: column; gap: var(--spacing-300); padding-top: var(--spacing-300); border-top: 1px solid var(--color-border-default); } .wa__footer { display: flex; gap: var(--spacing-300); justify-content: flex-end; } @@ -423,7 +423,7 @@ const ICON_CHEVRON = ""; (chip.querySelector('.bcn-status-chip__label') as HTMLElement).textContent = meta.label; // Provisional block reads hollow — white fill, red ring (the page idiom). if (status === 'provisional-block') { - chip.style.background = 'var(--color-surface)'; + chip.style.background = 'var(--color-background-elevation-raised)'; chip.style.boxShadow = `inset 0 0 0 1px ${meta.hex}`; } else { chip.style.background = ''; diff --git a/src/pages/prototypes/site-clearance.astro b/src/pages/prototypes/site-clearance.astro index 52f13c7b..7a571a7f 100644 --- a/src/pages/prototypes/site-clearance.astro +++ b/src/pages/prototypes/site-clearance.astro @@ -50,7 +50,7 @@ import AppShell from '../../layouts/AppShell.astro'; import PageLayout from '../../layouts/PageLayout.astro'; import '../../styles/beacon-map.css'; // shared Leaflet chrome (.leaflet-tooltip restyle for all map pages) import EsaButton from '@esa/ecology/esa-button.astro'; -import EsaIconButton from '@esa/ecology/esa-icon-button.astro'; +import EsaIconButton from '@esa/ecology/esa-button.astro'; import EsaIcon from '@esa/ecology/esa-icon.astro'; import EsaBadge from '@esa/ecology/esa-badge.astro'; import EsaPill from '@esa/ecology/esa-pill.astro'; @@ -123,7 +123,7 @@ const ICON_CHEVRON = ""; renders label strings only), esa-collapsible ×3 (flush — the v2 drawer's Buffer conflicts / Notes / Activity summary rows; JS updates the SSR title span for live counts), esa-button (incl. the decision block's "Confirm block" on the lego's - NATIVE color="danger" variant with --color-danger re-pointed to + NATIVE color="danger" variant with --color-background-utility-danger re-pointed to --st-provisional-block so the button sits in the same red family as the block's tint/border/ink, + both drawers' "Show on map" — its map-pin EsaIcon rides the label slot; the registry has no map glyph), esa-icon-button (search clear + the @@ -236,7 +236,7 @@ const ICON_CHEVRON = ""; class="map-legend__dot" style={ status === 'provisional-block' - ? `background:var(--color-surface); border: 2px solid var(${STATUS_META[status].colorVar}); box-sizing: border-box;` + ? `background:var(--color-background-elevation-raised); border: 2px solid var(${STATUS_META[status].colorVar}); box-sizing: border-box;` : `background:var(${STATUS_META[status].colorVar});` } /> @@ -272,7 +272,7 @@ const ICON_CHEVRON = "";
    @@ -311,7 +311,7 @@ const ICON_CHEVRON = "";
    @@ -331,7 +331,7 @@ const ICON_CHEVRON = "";
    @@ -599,7 +599,7 @@ const ICON_CHEVRON = "";