A personal website builder for the Atmosphere

Per-site favicons, sorted career records, and disclosure fixes master

Every page served the SvelteKit scaffold's Svelte-logo favicon from the root layout. Rendered sites now set their own icon — the site record's icon blob, falling back to the profile avatar, served through /blob — and app pages get an airmail-striped icon in the theme's palette. The root layout only emits the app icon when no site is being rendered. Career records rendered in raw PDS record order; reverse-chronology was insertion-order luck. The sifa adapter now sorts positions and education newest-first by a key extracted from the formless date strings, undated entries last. The theme's year helpers moved to date-format.ts and match the first 4-digit year instead of slicing, so "Aug 2019" renders as "2019" rather than "Aug ". The career-summary disclosure hid its own summary once opened, which made it impossible to collapse and dropped keyboard focus onto a hidden node. The summary now stays visible and swaps its label between More and Less. Also: the contact address shows as visible text in the footer, so the mailto affordances have a fallback on machines with no mail client; the banner carries a srcset with a new 768 blob width (and the postcard variant requests 768); og:image points at the /blob route as an absolute URL instead of hotlinking the PDS; and site pages declare color-scheme and per-scheme theme-color. 10 new unit tests (188 in web). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>