Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
18b8601
feat(ui): one category-identity registry for card glyphs and accents
claude Aug 17, 2026
a5804cc
fix(factsheets): stop painting content categories in semantic colours
claude Aug 17, 2026
1ddb420
refactor(ui): add the shared card recipe and absorb the two private f…
claude Aug 17, 2026
a16437e
feat(tools): elevate the tool cards and merge the phone/desktop pair
claude Aug 17, 2026
efed8b5
feat(ui): adopt the card recipe and category accents on factsheets, c…
claude Aug 17, 2026
fb143d6
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
2f51481
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
8715aa6
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
383fdb1
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
a2a8e9a
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
e2154d1
feat(dsm): retire the repeated category glyph and adopt the card recipe
claude Aug 17, 2026
2d6e26b
Merge remote-tracking branch 'origin/claude/card-review-optimize-h0pi…
claude Aug 17, 2026
1353a0f
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
ef63982
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
7e29d0f
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
3640200
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
bed1bcf
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
5eda118
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
ca6a21c
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
817f4a6
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
4ea4b26
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 17, 2026
c99d461
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 18, 2026
2fc74c8
fix(dsm): stop shipping the dead category colour palette to the browser
claude Aug 18, 2026
5b7b0b0
Merge remote-tracking branch 'origin/claude/card-review-optimize-h0pi…
claude Aug 18, 2026
a8fe86d
Merge branch 'main' into claude/card-review-optimize-h0pidc
claude Aug 18, 2026
66ec4d0
docs(issues): record the pre-existing Advisory UI mockup failure
claude Aug 18, 2026
1bd091c
Merge branch 'main' into claude/card-review-optimize-h0pidc
claude Aug 18, 2026
4d6bc86
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 18, 2026
380c193
Merge branch 'main' into claude/card-review-optimize-h0pidc
BigSimmo Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": 2,
"id": "3565972b-02c2-4ad8-b899-3fbde0d54725",
"createdOn": "2026-08-18",
"action": "add",
"payload": {
"pri": "P3",
"type": "issue",
"summary": "Advisory UI mockup spec 'phone filter sheet follows the shared local-filter behavior' fails on main",
"detail": "tests/ui-tools-search-mode-mockup.spec.ts:188 fails at line 198 waiting for '2 showing' inside [data-testid=tools-search-filter-sheet] after searching 'Safety' at 390px. Reproduced locally under --project=chromium-mockups on BOTH claude/card-review-optimize-h0pidc and origin/main (dc7e518), so it is pre-existing and NOT caused by the card branch — attribution was checked before any fix was attempted. It surfaced now only because the ui-advisory lane fires on advisory_ui_changed (a mockup surface changed or the flake ledger is non-empty) and had been skipped on every earlier run of that PR. It is non-blocking: ui-advisory carries continue-on-error true and is absent from pr-required's needs list in ci.yml, and verify:ui excludes @mockup via --grep-invert, which is why a 429-pass local run never touched it. Next: open the trace at test-results/ui-tools-search-mode-mocku-b6163-hared-local-filter-behavior-chromium-mockups/trace.zip and decide whether the expected count of 2 is stale against the current tools catalogue or the facet hint genuinely miscounts; the mockup renders the production ToolsSearchResultsPage, so a real miscount would affect /tools too. Stop: do not change the expected number to match observed output without establishing which is correct.",
"source": "session 2026-08-18; PR #2060 Advisory UI run 32090358678; reproduced on origin/main dc7e518",
"issueUlid": "01M09C8ZY74TBHS81EN8DBS9WF"
}
}
94 changes: 94 additions & 0 deletions src/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -806,6 +806,100 @@ body {
overscroll-behavior-x: none;
}

/* Category accent delivery.
------------------------------------------------------------------
A card names its category with `data-category-accent`, and reads the colour
back through --cat-accent / --cat-soft / --cat-border. Three reasons this is
an attribute→variable indirection rather than per-category utility classes:

1. Tailwind's scanner only sees class strings that appear literally in the
source, so `bg-[color:var(--type-${accent}-soft)]` silently produces no
CSS. Every consumer here writes the literal `var(--cat-soft)` instead.
2. Light, dark AND forced-colors come for free: each value aliases an
existing triad that all three themes already remap, so a new category
never needs a fourth declaration site to stay legible in high contrast.
3. It replaces the inline `style={{ backgroundColor: theme.soft }}` the
factsheet cards used, which bypassed the class contract entirely.

Every accent below resolves to a NON-semantic triad. Nothing here may point
at --danger / --warning / --success / --info: those belong to the six-tone
badge system, where the colour is the meaning. A category is not a status.
Held by tests/design-token-contract.test.ts. */
[data-category-accent="document"] {
--cat-accent: var(--type-document);
--cat-soft: var(--type-document-soft);
--cat-border: var(--type-document-border);
}

[data-category-accent="table"] {
--cat-accent: var(--type-table);
--cat-soft: var(--type-table-soft);
--cat-border: var(--type-table-border);
}

[data-category-accent="search"] {
--cat-accent: var(--type-search);
--cat-soft: var(--type-search-soft);
--cat-border: var(--type-search-border);
}

[data-category-accent="source"] {
--cat-accent: var(--type-source);
--cat-soft: var(--type-source-soft);
--cat-border: var(--type-source-border);
}

[data-category-accent="service"] {
--cat-accent: var(--type-service);
--cat-soft: var(--type-service-soft);
--cat-border: var(--type-service-border);
}

[data-category-accent="form"] {
--cat-accent: var(--type-form);
--cat-soft: var(--type-form-soft);
--cat-border: var(--type-form-border);
}

[data-category-accent="purple"] {
--cat-accent: var(--tone-purple);
--cat-soft: var(--tone-purple-soft);
--cat-border: var(--tone-purple-border);
}

[data-category-accent="indigo"] {
--cat-accent: var(--tone-indigo);
--cat-soft: var(--tone-indigo-soft);
--cat-border: var(--tone-indigo-border);
}

[data-category-accent="rose"] {
--cat-accent: var(--tone-rose);
--cat-soft: var(--tone-rose-soft);
--cat-border: var(--tone-rose-border);
}

[data-category-accent="slate"] {
--cat-accent: var(--tone-slate);
--cat-soft: var(--tone-slate-soft);
--cat-border: var(--tone-slate-border);
}

[data-category-accent="clinical"] {
--cat-accent: var(--clinical-accent);
--cat-soft: var(--clinical-accent-soft);
--cat-border: var(--clinical-accent-border);
}

/* Fallback for a surface that opts into the card recipe without naming a
category — the accent collapses to the product accent rather than to an
unresolved variable, so an omitted attribute degrades to today's look. */
:root {
--cat-accent: var(--clinical-accent);
--cat-soft: var(--clinical-accent-soft);
--cat-border: var(--clinical-accent-border);
}

@layer base {
/* Interactive element defaults */
button,
Expand Down
Loading
Loading