From ee4801fb429c19897586495eeeb34843fa88c766 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 3 Nov 2026 20:09:50 +0000 Subject: [PATCH 1/3] Build the redesigned About page About gets the home's intro (label, title, text and the topic map at the same place), then one part per island of the map: the heading under the intro text, staying in view while its part is read, and the text under the map in Newsreader 20px/32px (18px/29px on phones). Below 1120px the parts are one column of up to 720px. The map's dots link to the parts. The Person JSON-LD is kept, and the page drops the legacy class. Going from Home to About moves the map without drawing it again: Layout now renders Astro's ClientRouter on the pages with the intro map (introMap, on by default without the text column), held to Home and About. TopicMap carries its canvas over to the next page's map and Background keeps its element; links to any other page load in full, as before, and nothing is prefetched. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013MdjUerTCBDeF5DG9puDd2 --- astro.config.mjs | 1 + src/components/Background.astro | 13 ++- src/components/IntroRouter.astro | 33 +++++++ src/components/TopicMap.astro | 35 +++++-- src/layouts/Layout.astro | 10 +- src/pages/about.astro | 157 ++++++++++++++++++++++++++++--- 6 files changed, 225 insertions(+), 24 deletions(-) create mode 100644 src/components/IntroRouter.astro diff --git a/astro.config.mjs b/astro.config.mjs index 3182e6d..5e7c3d5 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -43,6 +43,7 @@ export default defineConfig({ output: 'static', compressHTML: true, // Astro 7 defaults to 'jsx', which drops whitespace between inline elements trailingSlash: 'always', // Pages live at /page/; dist/_redirects sends /page there with a 301 + prefetch: false, // The ClientRouter on Home and About (IntroRouter.astro) would otherwise prefetch every link hovered vite: { resolve: { preserveSymlinks: true diff --git a/src/components/Background.astro b/src/components/Background.astro index 38792f8..e369134 100644 --- a/src/components/Background.astro +++ b/src/components/Background.astro @@ -6,15 +6,24 @@ // The pattern alone makes way, so the paper keeps going: around the topic map (TopicMap.astro), clear inside the // ellipse that fits the map's box and back to full strength at 1.55 times that size; on a page with the centred 720px // text column (textColumn), behind a band as wide as the column, fading out between 16px and 112px on each side. +// +// With `persist`, going between two pages with the map without a full page load (Layout's introMap: Home and About), +// the router keeps this element as it is drawn, and its hole moves to the next page's map. A page with the text column +// has its own mask, so it never shares the element. interface Props { /** The page has the centred 720px text column of articles: the pattern is cleared behind it. */ textColumn?: boolean; + /** Keep the element, as drawn, when the router (IntroRouter.astro) goes to another page that keeps it. */ + persist?: boolean; } -const { textColumn = false } = Astro.props; +const { textColumn = false, persist = false } = Astro.props; +// The attribute that transition:persist sets. The directive itself would also add Astro's view transition styles to +// every page with the background, the 404 page and /documents/ included, which never use the router. +const keep = persist && !textColumn ? 'page-background' : undefined; --- -