# Estilo

Estilo is the CARLOS suite's shared design system, at
`amadan.net/oficina/estilo.git`. It's a private Go module: pull it with
authenticated Git and `GOPRIVATE=amadan.net/oficina/estilo.git`.

`theme` is Calma, the suite's look (AGENTS.md, "Theme"): `theme.CSS()` is
the suite's theme and `theme.ForApp(slug)` an app's, with its accent from
the colour ring in `theme/apps.go`. `theme.FontHandler` serves Onest, the
typeface; link its `fonts.css` before the theme. `brand` holds the marks,
and `sky` the seeded nebula for the sign-in, the team's home and the front
page — never inside an app.

`savestatus` is a save-status indicator, already adopted by Docs and
Slides. It renders state (saved, saving, retrying, failed) inside a
polite status region for screen readers; callers supply the localized
message text for each state.

`homeconnect` holds templates and data for Home account-connection and
OAuth screens, being adopted by the shared home/connect flow and other
apps. It carries no authentication logic — callers validate the
destination and supply translated labels. The screens run without
scripts.

`base`, `menu` and `chrome` are the shared chrome from the round-2 spec
(`docs/superpowers/specs/2026-09-23-shared-chrome.md` on
`spec/shared-chrome`): link styling; the one floating menu panel and the
document menu bar, with `menu.Shortcut` for platform-correct shortcut
labels; and the top bar, account menu, app switcher, error page and
sign-in pages, with the per-app Appearance preference. Link the three
stylesheets in that order, after `tokens.css`, the theme and
`brand.css`. `brand` serves the app icons from Go. Docs adopted first and
Sheets second, and Sheets' corrections are in: a menu row or bar action
can be a link, a POST (`menu.Item.Action`) or a dialog opened by the
platform's invoker command (`menu.Item.Dialog`); `Bar.Actions` is
`[]chrome.Action`; `<div estilo-shell="fill">` is the full-height layout
(the viewport less the 52px bar); and `chrome.js` closes every member of
the one `estilo-menus` group, menubar menus included, on Escape (in the
capture phase) and an outside click.

Permission and session logic stay app-owned. There is no
shared component gallery yet.

## Building

`make test` is the gate: a module-cache check (`go mod verify`, re-fetching
anything damaged), `go vet`, a `gofmt` check, `go build`, then `go test`. `savestatus`'s own tests run under Node.
