Give every fastext destination a distinct mark; add skip-link, fix aria-label
All checks were successful
Deploy / deploy (push) Successful in 23s

Colours: "if the intent is to have them all different colors than
lets have them all different colors." The locked eight only give five
safe as full text (blue fails contrast, black's invisible on black),
so the other three get their own treatments instead of sharing plain
ink: Watch gets blue as a swatch-only accent (the button cap's colour,
not the label), Activity gets an ordered-dither swatch (the other
legal way to mark something without a ninth colour), and Settings
alone keeps plain ink deliberately, as the one page with no live
status of its own.

Accessibility (items 1 and 3 from the design review, item 2 skipped
per request — the header's download figure stays live and unmuted):
- Added a skip-link, off-screen until focused, jumping past the
  8-item top nav straight to each page's #main-content.
- Renamed the nav's aria-label from "Fastext" (meaningless without
  the visual teletext context) to "Page navigation".
This commit is contained in:
Barely Removable 2026-08-30 09:24:52 -07:00
parent 15936027de
commit 5dd49c505c
4 changed files with 79 additions and 28 deletions

View file

@ -8,6 +8,26 @@
RULER (every bar is --bar-cells wide, no exceptions).
═══════════════════════════════════════════════════════ */
/* ── Skip-link ──────────────────────────────────────────
Off-screen until it receives focus, then it's a plain field row
like any other — a solid colour ground, no border — sitting above
everything else so tabbing past it reaches the header next. */
.skip-link {
position: absolute;
top: -999px;
left: 0;
z-index: 1;
padding: 0.5em 1ch;
background: var(--field);
color: var(--ink);
text-transform: uppercase;
letter-spacing: 0.16em;
}
.skip-link:focus {
top: 0;
outline: none;
}
/* ── Header row ─────────────────────────────────────────
Teletext's top line, unchanged for forty years: the page
number you are on, who is transmitting, and the clock. It
@ -512,8 +532,10 @@ a.tt-row:focus-visible .tt-row-sub { color: var(--tt-black); }
overflow: hidden;
text-overflow: ellipsis;
}
/* The key's colour is carried by a solid cell at its head — the
physical coloured button on the remote. */
/* The key's identity is carried by a cell at its head — the physical
coloured button on the remote. Solid for most; k-blue and k-dither
override its background below, since a flat swatch can't carry
every one of the eight destinations without repeating a colour. */
.fastext a > span, .fastext-here > span {
min-width: 0;
overflow: hidden;
@ -538,6 +560,15 @@ a.tt-row:focus-visible .tt-row-sub { color: var(--tt-black); }
.fastext .k-yellow { color: var(--voice); }
.fastext .k-cyan { color: var(--live); }
.fastext .k-magenta { color: var(--pending); }
/* Blue fails contrast as body text on black, so it marks the swatch
only — the button cap's colour, not the printed label — while the
row's own text stays legible ink. */
.fastext .k-blue::before { background: var(--field); }
.fastext .k-blue:hover, .fastext .k-blue:focus-visible { background: var(--field); }
/* The one other legal way to get a distinct mark out of eight colours
without a ninth: an ordered dither, same mechanism as --dither-mid,
in place of a flat swatch. */
.fastext .k-dither::before { background: var(--dither-mid); }
.fastext a:hover, .fastext a:focus-visible {
background: currentColor;
outline: none;