Rotated -45 degrees about the icon's centre. Negative because SVG's y axis points down, so
a positive angle would have dropped the right band instead of lifting it.
The transform sits on the group rather than on the individual shapes. The two circles and
the arc that redraws the upper crossing are all still authored on the horizontal axis and
rotate together, so the interlock geometry did not have to be recomputed and the bands
still alternate -- one over at the first crossing, the other over at the second.
Re-checked the maskable safe zone, because the bounds recorded for the horizontal artwork
no longer describe it: the box is now 102.9-409.1 on both axes, not x 88-424 and y 139-373.
The circular crop needed no arithmetic at all -- the farthest painted point stays 168 from
the centre (the 51 centre offset plus radius 104 plus half the 26 stroke), inside the 204.8
safe radius, since rotating about that same centre cannot change any point's distance
from it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The event is a wedding, so the camera icon becomes two interlocking bands. Drawn rather
than sourced: at 16px in a tab anything finer than the stroke turns to smudge, which is
why the camera it replaces was three shapes and no more. White on #8a6a2b, the event's
own theme_primary, so the icon, the site and the PWA chrome finally agree -- the
manifest's theme_color was still the #2563eb from the camera branding.
The rings span x 88-424 and y 139-373 including stroke, inside the centre-80% safe zone,
so an Android circle crop cannot clip them.
Also removes a second, competing icon declaration. `+layout.svelte` imported
`$lib/assets/favicon.svg` -- the orange Svelte logo from the project skeleton, which Vite
inlined as a data URI into the layout bundle -- and applied it via `<svelte:head>`. Which
of the two won was left to the browser: the link in app.html is parsed from the initial
HTML, this one is added at hydration, and Chrome keeps the former. So the skeleton logo
did not usually show, but nothing guaranteed that, and `ssr = false` means the branded
link is the only one present at first paint anyway. app.html is now the single source and
the skeleton asset is gone.
Reskin the whole app via design tokens in tailwind-theme.css (remapped
color ramps) plus a define-once component layer in lib/styles/components.css
(.btn, .card, .input, .chip, .badge, .sheet, …). Buttons are muted/outlined
gold rather than flat fills. Self-host Inter + Fraunces (woff2) under the
existing font-src 'self' CSP. Restyle the shared components and the account,
admin, host, join, recover and upload screens against the new tokens.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>