Skip to content

docs(brand): capture owl-os as the fifth surface, and the control layer across all five - #20

Merged
Babissimo merged 3 commits into
mainfrom
worktree-docs+owl-os-brand-surface
Sep 10, 2026
Merged

Babissimo merged 3 commits into
mainfrom
worktree-docs+owl-os-brand-surface

Conversation

@Babissimo

Copy link
Copy Markdown
Contributor

What

Adds owl-os (the node's own web UI, at owl.local) to the brand guide as a fifth surface, then deepens §6 from a nine-bullet sketch into a survey of the component and control layer across all five.

Three commits, each readable on its own:

  1. docs(brand): capture owl-os as the fifth surface — a sixth column in every table, an .owl-os block in tokens.css, a fifth panel in preview.html.
  2. docs(brand): capture the component and control layer across all five surfaces — §6 restructured around control families.
  3. docs(brand): render the control layer in preview.html — the controls block, so the page shows what §6 describes.

Why owl-os was missed

The repository boundary hides it. The UI is authored in retina-gui but shipped by owl-os, which clones it at a pinned tag into the SD-card image and brands it OWL-OS. An audit starting from owl-os finds Ansible and no CSS. retnode.com is the same app on the same port, so there was nothing separate to capture there either; §Intro now records both facts.

Style is read from retina-gui main, not the pinned tag, since the guide records how the surfaces look rather than what a given image shipped. §10 records the gap.

Corrections, not just additions

Auditing all five against source found three §6 entries that were wrong:

  • The nav entry described a fixed top bar with a hamburger. That is the marketing sites. dash runs a 250px sidebar and a 56px header.
  • The card entry credited dash with retina's 1px-gap-over-a-tinted-ground grid. dash uses a real 16px gap with per-card borders.
  • The badge entry described one 12px tinted pill. There are at least seven shapes across the five surfaces.

§5's claim that no surface honours prefers-reduced-motion is also corrected: owl-os's flight-path simulator does, and is the only thing in the estate that checks.

Findings recorded in §10

Recorded, not filed, in keeping with that section's remit:

  • owl and retina have no form controls, no tables and no :focus rule between them. dash's stylesheet has no input, select or textarea selector at all, so its controls are inline per call site and have split into three incompatible text-input variants.
  • dash colours its error banners var(--accent-warning, #c0392b) and never defines --accent-warning, so both always render a red found nowhere else in the palette.
  • owl-os's calibration spinner carries Bootstrap's .text-primary, which its override block misses, so it renders #0d6efd rather than the surface accent.
  • dash's sidebar is display: none under 768px with no replacement, so navigation is unreachable on a phone. Worth confirming against real usage before treating it as intentional.
  • Only owl-os can express elevation. Any component that raises one layer above another flattens on the other four, because --surface and --canvas-sunk sit within 1.2:1 on all of them.

Verification

preview.html was rendered and checked in a browser, not assumed: all five columns resolve their own tokens, the map inverts correctly, owl-os keeps its OKLCH values through, no console errors. The load-bearing audit claims (no forms and no :focus on the marketing sites, dash's missing selectors and undefined property, the dead-CSS blocks, the map's radius spread) were each verified against origin/main directly.

🤖 Generated with Claude Code

Babissimo and others added 3 commits September 10, 2026 13:28
The brand guide described four surfaces and missed the one an actual
customer touches most: the web UI served off the node itself, at
owl.local. It is easy to overlook because the repository boundary hides
it. The UI is authored in retina-gui, but it is owl-os that clones it at
a pinned tag into the SD-card image and brands it OWL-OS, so an audit
that starts from owl-os finds Ansible and no CSS, and concludes there is
nothing to capture.

There is a good deal to capture. owl-os is the only surface authored in
OKLCH, the only one with a real elevation scale, the only one on a CSS
framework, and the only one that defines no keyframes at all. It is also
the only place in the estate where anything checks
prefers-reduced-motion before it animates, which corrects a claim §5 made
about all four of the others.

Read from retina-gui main rather than the pinned tag, since the guide
records how the surfaces look rather than what a given image shipped;
§10 records the gap so nobody assumes a field node has a component
described here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…surfaces

§6 was a nine-bullet sketch that mostly described the two marketing sites and
then generalised. Audited against the source of all five surfaces, three of its
entries were wrong rather than merely thin: dash has a 250px sidebar, not the
fixed top bar with a hamburger; dash's card grids use a real 16px gap, not the
1px-gap-over-a-tinted-ground trick that is retina's; and the "badges are a 12px
tinted pill with a dot" line describes one surface's take on a component that
exists in at least seven shapes.

Restructured around control families rather than a flat list, because the useful
question turned out to be which surfaces have a given control at all. The answer
is lopsided: owl and retina have no form controls, no tables and no :focus rule
between them, so the entire control story belongs to dash, map and owl-os, and
only owl-os defines an input, a select and a switch once and reuses them.

Four findings that look like defects rather than divergence are recorded in §10:
dash colours its error banners with an undefined custom property and so always
renders a red found nowhere else; owl-os's calibration spinner carries a
Bootstrap class its override block misses, so it renders Bootstrap blue; dash's
sidebar vanishes under 768px with nothing in its place; and dash confirms
destructive actions with window.confirm(). Recorded, not filed, in keeping with
the section's remit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The components §6 now documents were prose only: preview.html still showed a
button, a card, fact rows and swatches, which is what it showed before any of
the control work. Adds a controls block to all five columns covering the things
that were missing, a text field with its help line, an invalid field with its
error, a select, a switch and a segmented control.

owl and retina ship no form controls at all, so their columns label the block as
tokens-only rather than pretending otherwise. Rendering it in all five is still
worth it: the point of this page is that one set of markup, driven only by the
surface class, should come out looking like each surface.

Building it surfaced something the audit could not. The raised-pill segmented
control reads from the step between --surface and --canvas-sunk, and those two
sit within 1.2:1 on owl, retina, dash and map: only owl-os separates them, with
a shadow scale the other four do not have. The pill was invisible on four
columns until it got a token-driven hairline. Recorded in §6 and §10, since it
generalises to any component that works by raising one layer above another.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Babissimo
Babissimo merged commit 51f4a09 into main Sep 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant