From 69cf460afeff9cb841094a37ae5e7db7a491fe89 Mon Sep 17 00:00:00 2001 From: jakeross Date: Wed, 5 Aug 2026 15:18:17 -0700 Subject: [PATCH] Re-land the ocotillo favicon as its own change The favicon work rode into staging alongside unrelated changes and was rolled back on fix/revert-ocotillo-favicon. This restores it on a branch that carries nothing else, so the Ocotillo rebranding lands as one reviewable change. Restores the ocotillo mark and its formats -- favicon.svg as the source of truth, favicon.ico with 16/32/48, apple-touch-icon.png at 180x180, and favicon.png as the 48x48 fallback -- with the index.html head links and the FRONTEND.md section documenting how the rasters are regenerated. The mark is painted from palette values only: field brand-950, stems sand-100, blooms bloom-500. Co-Authored-By: Claude Opus 5 --- FRONTEND.md | 24 ++++++++++++++++++++++++ index.html | 4 +++- public/apple-touch-icon.png | Bin 0 -> 5428 bytes public/favicon.ico | Bin 0 -> 3580 bytes public/favicon.png | Bin 1617 -> 1763 bytes public/favicon.svg | 13 +++++++++++++ 6 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon.ico create mode 100644 public/favicon.svg diff --git a/FRONTEND.md b/FRONTEND.md index 3c6083e5..c31960f0 100644 --- a/FRONTEND.md +++ b/FRONTEND.md @@ -475,6 +475,30 @@ The matching CSS variables are `--bloom` and `--sand` (utilities `bg-bloom`, once in `:root` with no `.dark` override, because a logo does not change colour with the theme. +### The favicon + +The favicon is the one place the whole palette appears at once, and it is built +from palette values only: + +| Part | Token | Hex | +| --- | --- | --- | +| Field | `brand[950]` | `#0d273c` | +| Stems | `sand[100]` | `#f2e9d2` | +| Blooms | `bloom[500]` | `#e2552e` | + +`public/favicon.svg` is the source of truth. The rasters are generated from it, +so **edit the SVG and regenerate** rather than touching the PNGs: + +```bash +cd public +rsvg-convert -w 180 -h 180 -b '#0d273c' favicon.svg -o apple-touch-icon.png +rsvg-convert -w 48 -h 48 favicon.svg -o favicon.png +``` + +`favicon.ico` bundles 16/32/48 in one container. There is no ImageMagick in this +project, so it is assembled by hand — see the commit that introduced it for the +script. + ### Contrast The brand ramp is chosen so every primary-on-surface pairing clears WCAG AA diff --git a/index.html b/index.html index 54661045..fdc2d9d7 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,9 @@ - + + + diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..68ec50194e2a1cc106d1d7e649c21e3c0482e21b GIT binary patch literal 5428 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 diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 00000000..80dcfd86 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file