| 1 | # Oficina icon set |
| 2 | |
| 3 | Calma's marks, chosen by Paul on 2026-09-29 (AGENTS.md, decisions table, |
| 4 | row 8). This directory is the source for the suite's brand artwork. |
| 5 | |
| 6 | - **Oficina** is the Fanned mark: a sweep through every app's colour from |
| 7 | one corner, behind two white windows. |
| 8 | - **Each app** is its own colour on Calma's ring, a vertical gradient of |
| 9 | that one hue with a soft glow of lighter shades behind its glyph. The |
| 10 | glow is seeded by the app's id, so no two are the same shape. |
| 11 | |
| 12 | The colours are the theme's: `icons.json` carries each app's hue, and |
| 13 | `brand_test` fails unless they equal the ring in `theme/apps.go`. The |
| 14 | glyphs are drawn on a 100-unit grid in `icons.json`, with `{strong}` |
| 15 | where the app's deep tone goes. They are original drawings, not Lucide. |
| 16 | |
| 17 | Every icon comes in three shapes: |
| 18 | |
| 19 | | Directory | Shape | Used for | |
| 20 | | --- | --- | --- | |
| 21 | | `svg/` | Calma's squircle, transparent corners | the web icon, the app switcher, the launcher | |
| 22 | | `square/` | full bleed, opaque | the Apple touch icon; the iPhone app icon (iOS masks it) | |
| 23 | | `mac/` | the squircle on Apple's grid (824 of 1024), with its shadow | the Mac app icon | |
| 24 | |
| 25 | `png/` holds 16, 32, 48, 192, 512 and 1024-pixel exports of the web icon |
| 26 | and a 180-pixel Apple touch icon. For each app with a native client |
| 27 | (`NATIVE` in `generate.mjs`), `native/<id>/` holds `ios-1024.png` (no |
| 28 | alpha channel), `macos-1024.png` and the Finder's `AppIcon.icns`. |
| 29 | `preview.png` shows the family on light and dark at 120, 48, 32 and 16px. |
| 30 | |
| 31 | Regenerate from the Estilo repository root: |
| 32 | |
| 33 | ```sh |
| 34 | node brand/generate.mjs --render |
| 35 | ``` |
| 36 | |
| 37 | Rendering uses Playwright and Chromium, and macOS's `iconutil` for the |
| 38 | `.icns`. Set `OFICINA_PLAYWRIGHT` to an installed Playwright module's |
| 39 | absolute entry-point path when it is not installed here; optionally set |
| 40 | `OFICINA_CHROMIUM` to a Chromium executable. Omit `--render` to regenerate |
| 41 | the SVGs only, without a browser. No network is needed. |
| 42 | |
| 43 | Copy or verify a consumer from any directory: |
| 44 | |
| 45 | ```sh |
| 46 | python3 brand/distribute.py home /path/to/home |
| 47 | python3 brand/distribute.py calls /path/to/meet --check |
| 48 | ``` |
| 49 | |
| 50 | The app argument is one of home, docs, sheets, slides, calendar, calls, |
| 51 | memoria or fichas. Home receives every app's listing icon, Mail and Files |
| 52 | included. Calls, Docs, Sheets, Calendar and Memoria also receive their |
| 53 | native icons: the iPhone PNG, and the Mac's PNG (Calls) or `.icns`. Docs |
| 54 | keeps its web assets outside the editor build directory. Run `--check` for |
| 55 | every consumer after changing artwork, and rebuild and sign the native |
| 56 | apps: replacing repository files does not update an installed app. |
| 57 | |
| 58 | `LICENSE.lucide` is still distributed: the shared chrome's interface icons |
| 59 | are Lucide's, and each app's credits page names it. |
| 60 | |