# Oficina icon set

Calma's marks, chosen by Paul on 2026-09-29 (AGENTS.md, decisions table,
row 8). This directory is the source for the suite's brand artwork.

- **Oficina** is the Fanned mark: a sweep through every app's colour from
  one corner, behind two white windows.
- **Each app** is its own colour on Calma's ring, a vertical gradient of
  that one hue with a soft glow of lighter shades behind its glyph. The
  glow is seeded by the app's id, so no two are the same shape.

The colours are the theme's: `icons.json` carries each app's hue, and
`brand_test` fails unless they equal the ring in `theme/apps.go`. The
glyphs are drawn on a 100-unit grid in `icons.json`, with `{strong}`
where the app's deep tone goes. They are original drawings, not Lucide.

Every icon comes in three shapes:

| Directory | Shape | Used for |
| --- | --- | --- |
| `svg/` | Calma's squircle, transparent corners | the web icon, the app switcher, the launcher |
| `square/` | full bleed, opaque | the Apple touch icon; the iPhone app icon (iOS masks it) |
| `mac/` | the squircle on Apple's grid (824 of 1024), with its shadow | the Mac app icon |

`png/` holds 16, 32, 48, 192, 512 and 1024-pixel exports of the web icon
and a 180-pixel Apple touch icon. For each app with a native client
(`NATIVE` in `generate.mjs`), `native/<id>/` holds `ios-1024.png` (no
alpha channel), `macos-1024.png` and the Finder's `AppIcon.icns`.
`preview.png` shows the family on light and dark at 120, 48, 32 and 16px.

Regenerate from the Estilo repository root:

```sh
node brand/generate.mjs --render
```

Rendering uses Playwright and Chromium, and macOS's `iconutil` for the
`.icns`. Set `OFICINA_PLAYWRIGHT` to an installed Playwright module's
absolute entry-point path when it is not installed here; optionally set
`OFICINA_CHROMIUM` to a Chromium executable. Omit `--render` to regenerate
the SVGs only, without a browser. No network is needed.

Copy or verify a consumer from any directory:

```sh
python3 brand/distribute.py home /path/to/home
python3 brand/distribute.py calls /path/to/meet --check
```

The app argument is one of home, docs, sheets, slides, calendar, calls,
memoria or fichas. Home receives every app's listing icon, Mail and Files
included. Calls, Docs, Sheets, Calendar and Memoria also receive their
native icons: the iPhone PNG, and the Mac's PNG (Calls) or `.icns`. Docs
keeps its web assets outside the editor build directory. Run `--check` for
every consumer after changing artwork, and rebuild and sign the native
apps: replacing repository files does not update an installed app.

`LICENSE.lucide` is still distributed: the shared chrome's interface icons
are Lucide's, and each app's credits page names it.
