From 7b078f5d7eb213164348f6f137eac908886314dd Mon Sep 17 00:00:00 2001 From: Nader Helmy Date: Wed, 29 Jul 2026 00:17:29 -0500 Subject: [PATCH 1/3] fix: give "needs review" its own colour instead of a second amber warn was Tailwind's #fbbf24, the last of that default ramp still in the explorer. It sat 13.1 from the evidence mark measured as CIEDE2000, which is closer than any pair this palette already treats as distinct: the tightest accepted pair, amber against block-lifted, is 20.4. Saturation was the obvious lever and it does not work. Our "needs review" is hue 35 and the evidence mark is hue 32, so at this ground they are the same colour. Raising saturation at that hue tops out at 15.8, still short. Lowering it reaches 22.4 but only by making the warning duller than the thing it is warning about, which is backwards. So the lever is hue, and yellow is where a caution colour belongs. #e0ca1f measures 20.8 from amber, 30.5 from allow, 35.1 from block, 46.8 from muted and 54.2 from cobalt. Contrast is 11.97 on the floor, between block at 11.66 and allow at 13.08 rather than above the body text, and 9.16 against its own 12% chip tint. This matters beyond tidiness: amber means signed, and a warning that cannot be told from it means the one colour carrying proof is ambiguous. Measured after: zero contrast failures across 321 elements. --- apps/dashboard/index.html | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/apps/dashboard/index.html b/apps/dashboard/index.html index 919839cb..49a01dea 100644 --- a/apps/dashboard/index.html +++ b/apps/dashboard/index.html @@ -94,19 +94,22 @@ no part of this product. Four of them now come from the design system's deep ramp, at the same contrast they had before. - --warn is the exception and is deliberately unchanged. The system's - "needs review" colour is #965800, hue 35, and the evidence mark is - #e8a04f, hue 32. On paper they are told apart by lightness, 5.3 against - 2.0. Lifted to this ground they land two degrees apart and become the - same colour, which would break the rule that amber marks signed things - and nothing else. That is a design decision, not a mapping, so it is - left open rather than guessed at. See DESIGN-SYSTEM.md. */ + --warn is now yellow rather than amber, and that is the whole point. + "Needs review" is #965800 at hue 35 and the evidence mark is #e8a04f at + hue 32; on paper lightness separates them, but lifted to this ground they + land two degrees apart and become one colour, breaking the rule that + amber marks signed things and nothing else. Saturation cannot fix it: + measured as CIEDE2000 against amber, raising it tops out at 15.8 and + lowering it only clears the bar by making the warning duller than the + thing it warns about. The bar is 19.1, the closest pair this palette + already accepts. Hue is the lever. #e0ca1f measures 20.8 from amber and + 30.5 or more from every other state colour. See DESIGN-SYSTEM.md. */ --ok: #99e0c3; --ok-subtle: rgba(153, 224, 195, 0.12); --ok-border: rgba(153, 224, 195, 0.3); - --warn: #fbbf24; - --warn-subtle: rgba(251, 191, 36, 0.12); - --warn-border: rgba(251, 191, 36, 0.3); + --warn: #e0ca1f; + --warn-subtle: rgba(224, 202, 31, 0.12); + --warn-border: rgba(224, 202, 31, 0.3); --err: #ffb4a3; --err-subtle: rgba(255, 180, 163, 0.12); --err-border: rgba(255, 180, 163, 0.3); From 2b40bd7236ec25ed5a0bee9476684e8d7f52758c Mon Sep 17 00:00:00 2001 From: Nader Helmy Date: Wed, 29 Jul 2026 02:09:04 -0500 Subject: [PATCH 2/3] feat: serve the design system's three faces instead of the visitor's OS The explorer loaded no webfonts at all. Its stack was -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI" for text and ui-monospace, "JetBrains Mono", "SF Mono" for data, so it rendered in San Francisco on a Mac and Segoe on Windows while the website and the home page rendered in Literata and Libre Franklin. Same brand, different typefaces, chosen by the visitor's operating system. Colour, navigation and the wordmark had already been unified here. Type was the one axis left, and it is the most visible one. Literata carries headings, Libre Franklin carries everything read, IoskeleyMono carries everything verified. All SIL OFL, all served from this origin, 268KB for the four files. Headings drop from 600 to 500 and loosen their tracking, because Literata at a given weight is heavier than Libre Franklin at the same one. font-synthesis: none, so a missing weight fails visibly rather than being faked, and font-optical-sizing: auto, which is why Literata was chosen: a 28px view header and a 44px hero are drawn differently rather than scaled. Measured after: all three faces load, zero contrast failures across 330 elements. --- apps/dashboard/index.html | 32 ++++-- .../static/fonts/IoskeleyMono-LICENSE.txt | 92 +++++++++++++++++ .../static/fonts/IoskeleyMono-Medium.woff2 | Bin 0 -> 49368 bytes .../static/fonts/IoskeleyMono-Regular.woff2 | Bin 0 -> 49352 bytes .../static/fonts/LibreFranklin-LICENSE.txt | 93 ++++++++++++++++++ .../static/fonts/LibreFranklin-Variable.woff2 | Bin 0 -> 29336 bytes .../static/fonts/Literata-LICENSE.txt | 93 ++++++++++++++++++ .../static/fonts/Literata-Variable.woff2 | Bin 0 -> 110296 bytes 8 files changed, 304 insertions(+), 6 deletions(-) create mode 100644 apps/dashboard/static/fonts/IoskeleyMono-LICENSE.txt create mode 100644 apps/dashboard/static/fonts/IoskeleyMono-Medium.woff2 create mode 100644 apps/dashboard/static/fonts/IoskeleyMono-Regular.woff2 create mode 100644 apps/dashboard/static/fonts/LibreFranklin-LICENSE.txt create mode 100644 apps/dashboard/static/fonts/LibreFranklin-Variable.woff2 create mode 100644 apps/dashboard/static/fonts/Literata-LICENSE.txt create mode 100644 apps/dashboard/static/fonts/Literata-Variable.woff2 diff --git a/apps/dashboard/index.html b/apps/dashboard/index.html index 49a01dea..519240ef 100644 --- a/apps/dashboard/index.html +++ b/apps/dashboard/index.html @@ -42,6 +42,15 @@ /dashboard path on log.atrib.dev serves the same file as a fallback. -->