Give Activity a genuine ninth colour: --tt-orange
All checks were successful
Deploy / deploy (push) Successful in 24s

Requested directly: "can we make activity orange". The locked eight
palette had already run out at six legible text colours (Watch's blue
was the last one, and it's already a contrast exception); a dithered
swatch alone read as unfinished, and dithering the word itself
rendered as illegible static — tried and reverted this session.

--tt-orange (#ff8000) is defined in base.css right after the locked
eight, clearly marked as a deliberate, acknowledged one-off exception
to "eight colours, no ninth" rather than a secretly-smuggled-in tint.
Same flat text+swatch treatment as every other fastext key. Updated
CLAUDE.md's discipline 1 and DESIGN.md's Locked Eight Rule to name the
exception explicitly, so it reads as a documented decision next time
someone audits the palette, not a bug.
This commit is contained in:
Barely Removable 2026-08-30 09:52:19 -07:00
parent 9fba4f210e
commit 517559a460
5 changed files with 55 additions and 39 deletions

32
app.py
View file

@ -1304,20 +1304,22 @@ def service_urls():
# Every destination, for the top of every page but the index, each
# with its own distinct treatment. Order matches nav_items. Six of the
# eight get a flat colour, text and swatch both: the four with a real
# keyboard shortcut (r/g/y/c), plus magenta for Requests (the same
# --pending magenta a request already shows once approved elsewhere —
# Requests IS "waiting on a human") and blue for Watch. Blue is ~2.4:1
# contrast on black, well under the 4.5:1 every other body text here
# clears — a known, deliberate exception, not an oversight; it's set
# this way because coloured-icon-only for Watch read as unfinished
# next to six fully-coloured neighbours. Activity gets an ordered
# dither swatch instead of a flat colour, the one other legal way to
# get a distinct mark out of this palette without smuggling in a ninth
# hue. Settings alone keeps plain ink — deliberately, as the one page
# with no live status of its own, so it's the one that gets no colour
# rather than an arbitrary leftover.
# with its own distinct colour. Order matches nav_items. The four
# with a real keyboard shortcut (r/g/y/c) keep their original colours;
# Requests gets magenta (the same --pending magenta a request already
# shows once approved elsewhere — Requests IS "waiting on a human");
# Watch gets blue, ~2.4:1 contrast on black versus the 4.5:1 every
# other body text here clears — a known, deliberate exception, kept
# anyway because a swatch-only accent read as unfinished next to six
# fully-coloured neighbours. That's every colour the locked eight
# palette has to give (black's invisible on black); Activity's colour,
# --tt-orange, is a genuine ninth on top of it — a dithered swatch
# alone read as unfinished, and dithering the word itself renders
# illegible, so it's a deliberate, acknowledged break from "eight
# colours, no ninth" rather than a fix that stays inside it. Settings
# alone keeps plain ink — deliberately, as the one page with no live
# status of its own, so it's the one that gets no colour rather than
# an arbitrary leftover.
FULL_FASTEXT = [
("k-red", "r", "100", "Index", "/"),
("k-blue", "", "101", "Watch", "/watch"),
@ -1325,7 +1327,7 @@ FULL_FASTEXT = [
("k-yellow", "y", "103", "Discover", "/discover"),
("k-magenta", "", "104", "Requests", "/requests"),
("k-cyan", "c", "105", "System", "/system"),
("k-dither", "", "106", "Activity", "/activity"),
("k-orange", "", "106", "Activity", "/activity"),
("", "", "900", "Settings", "/settings"),
]