diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 1efb3ff2..64de850c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -280,6 +280,17 @@ the snapshot copy, and line endings are fixed by `.gitattributes`. So
regenerating it on an unchanged checkout should produce no diff at all, on any
platform.
+**Known exception:** a change that touches global CSS (anything that changes
+Tailwind's output, not just adds an already-used utility class) can rebuild
+with a different content hash on Windows than on Linux CI, even with
+byte-identical source and zero actual style changes — a platform-dependent
+1-ULP rounding difference in a generated color fallback has been observed
+(`UPD-019` in `UPDATES-NEEDED.md`). If `npm run check:snapshot` is clean
+locally on Windows but CI still reports drift after a CSS-touching change,
+don't keep re-running the Windows build: trigger `workflow_dispatch` on the
+branch, download the `static-site-linux` artifact CI uploads on that failure,
+and commit that snapshot in place of the local one.
+
That makes drift easy to check. From a clean tree:
```powershell
diff --git a/UPDATES-NEEDED.md b/UPDATES-NEEDED.md
index aa10c1f6..ca53b978 100644
--- a/UPDATES-NEEDED.md
+++ b/UPDATES-NEEDED.md
@@ -460,6 +460,53 @@ both Windows and Linux, or the investigation concludes with a documented
reason it isn't reliable enough to use, so the next person does not repeat
this same multi-round-trip experiment from scratch.
+### UPD-019 - Tailwind's generated `lab()` fallback colors differ by platform
+
+**Priority:** Low
+
+While regenerating `static-site/` on Windows for an unrelated, CSS-free footer
+change (a new social link plus a copy edit — no new Tailwind utility was
+introduced), the resulting global stylesheet chunk hashed differently than the
+one CI produced from the identical commit. Diffing the two byte-for-byte
+found exactly one differing value, four decimal places into a generated
+`lab()` fallback: `--color-rose-500: lab(56.101% 79.4328 31.4532)` on Linux
+vs. `lab(56.101% 79.4329 31.4532)` on Windows — a 1-in-100,000 rounding
+difference in the sRGB→Lab conversion Tailwind v4/Lightning CSS performs for
+wide-gamut color fallbacks. `--color-rose-500` is not used anywhere in this
+codebase; this would affect any Tailwind v4 default-palette color whose
+conversion happens to land near a rounding boundary.
+
+Because Next.js names CSS chunks after a content hash, this single-ULP
+difference was enough to rename the whole shared stylesheet, which in turn
+touched every page's HTML (new `` href) and RSC payload (new chunk
+reference) — a large, misleading diff for a change that did not touch styles
+at all. Likely root cause: a platform-dependent floating-point library
+(libm/CRT) used by Lightning CSS's Rust color-math, same family of issue as
+UPD-004 and UPD-018, but in the opposite direction — content byte-identical
+except for one rounded value, rather than a path-shape or scan-visibility
+difference.
+
+**Workaround used:** rather than committing the Windows-built snapshot,
+triggered `workflow_dispatch` on the branch, downloaded the `static-site-linux`
+artifact CI uploads on failure, and committed that in place of the local
+build. Reliable, but it only works because that artifact-upload step
+(added for UPD-018's investigation) already exists, and it costs a CI
+round trip per snapshot regeneration on Windows.
+
+**Proposed update:** Confirm whether pinning `@tailwindcss/oxide-win32-*` /
+`-linux-*` to matching Lightning CSS versions removes the discrepancy, or
+whether it is inherent to the two platforms' floating-point math. If
+inherent, consider whether Tailwind's generated color fallbacks can be
+rounded to fewer decimal places (reducing the chance any platform's rounding
+crosses a boundary), or accept that any Windows-built snapshot touching
+global CSS must be verified against a Linux CI artifact before committing,
+and say so in `CONTRIBUTING.md` section 4.
+
+**Acceptance:** A snapshot regenerated on Windows with no real style changes
+produces the same CSS chunk hash as one regenerated on Linux, or the
+Windows→Linux-artifact workaround above is written into `CONTRIBUTING.md` as
+the documented procedure.
+
### UPD-017 - Decide how UI symbols are drawn
**Priority:** Medium — **done.**
diff --git a/src/components/SiteFooter.tsx b/src/components/SiteFooter.tsx
index 19fd8c77..afa80fdf 100644
--- a/src/components/SiteFooter.tsx
+++ b/src/components/SiteFooter.tsx
@@ -11,6 +11,25 @@ function GitHubIcon({ className }: IconProps) {
);
}
+function LumaIcon({ className }: IconProps) {
+ return (
+
+ );
+}
+
function InstagramIcon({ className }: IconProps) {
return (