Decide whether the brand indigo is the right brand, now that it can be seen #295

Closed
opened 2026-09-20 17:39:43 +00:00 by tiagoagueda · 1 comment
Owner

Observation

Split out of #292, which asked the question and said it should be decided rather than
inherited:

Whether the brand indigo is the right brand. It is described as "sober enough for
something you use while job hunting"
, which is a real argument and worth re-examining
deliberately rather than by accident.

#292's structural work is done and none of it settles this. The scale is ten steps of
oklch(… 275) in assets/css/app.css, it has never been chosen against an alternative,
and the sentence above is the whole of the reasoning on record.

Why it is worth asking now rather than never

Two things changed that did not exist when the colour was picked.

There is somewhere to look. Server settings → Design draws both scales, the semantic
names and every component that spends them, in either theme, on one page. Comparing two
candidate hues is now editing one @theme block and reloading a page, rather than
imagining it across 184 templates.

There is a reason to spend more of it. The interface is 89% grey by utility count --
1,430 ink against 130 brand -- and the remaining part of #292 is to spend colour on
structure rather than only on alarms. Widening the brand's job is a poor moment to
discover the brand is wrong.

What deciding actually requires

  • A second candidate, or the deliberate conclusion that indigo stays. "It was never
    compared" is answered as well by comparing and keeping it.
  • The contrast arithmetic, recomputed. tests/test_contrast.py reads the @theme
    block positionally and understands only literal oklch(L C H). A new hue keeps the test
    honest only if the tokens keep that shape; the ratios it holds -- the field boundary at
    3:1 against the field and the page, the focus ring opaque -- are not negotiable in either
    theme.
  • --color-primary and --color-ring follow the scale, so a change moves every button,
    every focus ring and every link. That is the point, and it is also why it is one commit
    and not a gradual drift.
  • A dark theme is not a lighter one. The scale is used at 600 in the light theme and
    around 400 in the dark; a hue that reads well at one lightness is not automatically
    right at the other.

Not in this

Spending more colour on structure -- section accents, the funnel, the report's chart -- is
#292's own remaining item and does not wait for this. The tag palette belongs to #285.

Classification

Enhancement, and a question before it is a change. Nothing is broken; the colour is
conformant and unexamined.

## Observation Split out of #292, which asked the question and said it should be decided rather than inherited: > **Whether the brand indigo is the right brand.** It is described as *"sober enough for > something you use while job hunting"*, which is a real argument and worth re-examining > deliberately rather than by accident. #292's structural work is done and none of it settles this. The scale is ten steps of `oklch(… 275)` in `assets/css/app.css`, it has never been chosen against an alternative, and the sentence above is the whole of the reasoning on record. ## Why it is worth asking now rather than never Two things changed that did not exist when the colour was picked. **There is somewhere to look.** *Server settings → Design* draws both scales, the semantic names and every component that spends them, in either theme, on one page. Comparing two candidate hues is now editing one `@theme` block and reloading a page, rather than imagining it across 184 templates. **There is a reason to spend more of it.** The interface is 89% grey by utility count -- 1,430 `ink` against 130 `brand` -- and the remaining part of #292 is to spend colour on structure rather than only on alarms. Widening the brand's job is a poor moment to discover the brand is wrong. ## What deciding actually requires - **A second candidate, or the deliberate conclusion that indigo stays.** "It was never compared" is answered as well by comparing and keeping it. - **The contrast arithmetic, recomputed.** `tests/test_contrast.py` reads the `@theme` block positionally and understands only literal `oklch(L C H)`. A new hue keeps the test honest only if the tokens keep that shape; the ratios it holds -- the field boundary at 3:1 against the field and the page, the focus ring opaque -- are not negotiable in either theme. - **`--color-primary` and `--color-ring` follow the scale**, so a change moves every button, every focus ring and every link. That is the point, and it is also why it is one commit and not a gradual drift. - **A dark theme is not a lighter one.** The scale is used at `600` in the light theme and around `400` in the dark; a hue that reads well at one lightness is not automatically right at the other. ## Not in this Spending more colour on structure -- section accents, the funnel, the report's chart -- is #292's own remaining item and does not wait for this. The tag palette belongs to #285. ## Classification Enhancement, and a question before it is a change. Nothing is broken; the colour is conformant and unexamined.
tiagoagueda added this to the 0.5.0 milestone 2026-09-20 17:39:45 +00:00
Author
Owner

Decision: blue 250.

All three candidates were looked at before deciding, not just computed: indigo 275, blue 250 and teal 200 were each rendered in the design gallery in both themes, with the contrast arithmetic recomputed for every step. The ratios shift only fractionally, and nothing falls under the 3:1 UI floor:

  • white on brand-600: 5.14 / 4.89 / 4.46
  • the brand-500 ring on white: 3.82 / 3.65 / 3.36
  • the brand-500 ring on ink-950: 3.66 / 3.50 / 3.22

So the hue is chosen on appearance, and the blue reads as a distinct identity. One accepted trade-off: the brand and the ink neutrals now share the 250 hue axis, so the brand can read as a saturated grey in flat areas.

Landed on main as b5c9e8a60 (full suite green: 8613 passed, 63 skipped, 1 xfailed): the token swap in the source and compiled stylesheets, the gallery note, and the re-extracted catalogues, with the renamed note filled as a draft in fr-fr, pt-pt and pt-br. The wiki follows as 5e7ec4a.

Decision: **blue 250**. All three candidates were looked at before deciding, not just computed: indigo 275, blue 250 and teal 200 were each rendered in the design gallery in both themes, with the contrast arithmetic recomputed for every step. The ratios shift only fractionally, and nothing falls under the 3:1 UI floor: - white on brand-600: 5.14 / 4.89 / 4.46 - the brand-500 ring on white: 3.82 / 3.65 / 3.36 - the brand-500 ring on ink-950: 3.66 / 3.50 / 3.22 So the hue is chosen on appearance, and the blue reads as a distinct identity. One accepted trade-off: the brand and the ink neutrals now share the 250 hue axis, so the brand can read as a saturated grey in flat areas. Landed on `main` as `b5c9e8a60` (full suite green: 8613 passed, 63 skipped, 1 xfailed): the token swap in the source and compiled stylesheets, the gallery note, and the re-extracted catalogues, with the renamed note filled as a draft in fr-fr, pt-pt and pt-br. The wiki follows as `5e7ec4a`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Postulo/postulo#295
No description provided.