From 74ad2301508b42bb1e6a3602837b26ff0e2472ef Mon Sep 17 00:00:00 2001 From: Michel de Graaf Date: Sat, 25 Jul 2026 00:40:13 +0200 Subject: [PATCH] fix(website): clear WCAG AA across both themes, and stop the hero shifting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contrast was measured, not eyeballed: 41 foreground/background pairs across both themes and the terminal surface, each against the darkest (light) or lightest (dark) surface it actually sits on. Five failed. Links on manila read 3.64:1 and the footer's "No telemetry. Ever." — a claim the site goes out of its way to make — sat at 2.86:1. The accent needed splitting rather than moving. #c1502e clears 4.5:1 as a button fill behind white but only 3.99:1 as an 11px eyebrow on vinyl, so --accent keeps the brand hue for fills and a new --accent-text carries the readable cut. The terminal gets the same treatment dark emulators give their palettes: alarm and oxide brighten inside .tui-content so "Failed" is legible next to its glyph. Reduced motion no longer nukes everything. A blanket 0.01ms also kills the transitions that answer a click, which is feedback rather than movement; looping and travelling animation stops, the rest caps at 80ms. The TUI already skipped its opening run and still does. The hero reserves its box with aspect-ratio from the first paint. It was prerendered at full unscaled height and collapsed once JS measured, moving everything below it by ~145px. Measured shift is now 0. Also: the webfont loads non-blocking (display=swap meant the first frame never waited for it anyway), footer link groups nest under a heading instead of sitting level with page sections, and eight tokens nothing referenced stop shipping. --- website/index.html | 17 +++- website/src/components/brand/logo.tsx | 7 +- website/src/components/layout/footer.tsx | 8 +- website/src/components/layout/nav.tsx | 2 +- website/src/components/tui/hero-terminal.tsx | 15 +++- website/src/components/ui/command-pill.tsx | 2 +- website/src/components/ui/layout.tsx | 2 +- website/src/components/ui/os-icon.tsx | 2 +- website/src/components/ui/panel.tsx | 2 +- website/src/index.css | 95 ++++++++++++-------- website/src/pages/community.tsx | 2 +- website/src/pages/home.tsx | 8 +- website/src/pages/install.tsx | 2 +- 13 files changed, 107 insertions(+), 57 deletions(-) diff --git a/website/index.html b/website/index.html index c8b37ee..fca9f29 100644 --- a/website/index.html +++ b/website/index.html @@ -28,13 +28,26 @@ + binaries, matching the design system's tokens/fonts.css. OFL 1.1. + + Loaded non-blocking: as a plain stylesheet it sat on the critical + path, so first paint waited on a third-party DNS + TLS + fetch. It + buys nothing there — `display=swap` plus the ui-monospace fallback + means the first frame renders in the fallback either way. --> +