From 436f0d40739dcd20861ff10634ef9408389c0de4 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 14 Sep 2026 17:12:07 +0000 Subject: [PATCH 1/4] Close every page on a gradient band instead of a pair MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each of these surfaces carried two closing CTAs saying the same thing: a flat block for anything below `glitch` — 1024px with a fine pointer — and the LetterGlitch band above it, because a canvas cannot run on the smaller screens. Visitors on a phone got the plainer of the two, and the home page is where somebody decides whether to fork this theme. The new band is a brand-500 to brand-900 gradient with a grid over it, and it has no width or pointer gate, so one block now serves every screen and the duplicate is gone. It closes the home, about and services pages, the projects index and its paginated routes, every project page, and every blog surface including single posts. The light stop sits at -16%, outside the box, so the band opens an eighth of the way down the ramp rather than at full brand-500. That is a legibility fix for the narrow case: a phone renders the band short with the content nearly filling it, which puts the description in the brightest part of the gradient where a desktop's taller band puts it in the middle. The badge goes. It belonged to the flat block, and on a saturated field a brand-tinted pill on brand ground is close to invisible. Measured at the top line of each element — the lightest ground its text touches — across all twelve colour themes, both colour modes, at 412px and 1440px: the description holds 4.58:1 at worst against the 4.5 body text needs, and the heading 4.14:1 against the 3:1 large text needs. Dropping the canvas from the home page takes React with it: desktop JavaScript there falls from 199.8 kB to 7.3 kB. Phones were already paying nothing, since the island never hydrated below the breakpoint. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01BwJB1u6U3vdEZ9LrHRebST --- src/components/pages/views/AboutView.astro | 25 +-- src/components/pages/views/HomeView.astro | 31 +--- src/components/pages/views/ServicesView.astro | 31 +--- src/components/patterns/CtaBand.astro | 156 ++++++++++++++++++ .../projects/views/ProjectsIndexView.astro | 31 +--- .../projects/views/ProjectsPageView.astro | 31 +--- src/layouts/ProjectLayout.astro | 32 +--- 7 files changed, 174 insertions(+), 163 deletions(-) create mode 100644 src/components/patterns/CtaBand.astro diff --git a/src/components/pages/views/AboutView.astro b/src/components/pages/views/AboutView.astro index 8b77c0db7..da5fe4b20 100644 --- a/src/components/pages/views/AboutView.astro +++ b/src/components/pages/views/AboutView.astro @@ -21,7 +21,7 @@ import { Hero } from '@/components/hero'; import ProjectImageSVG from '@/components/projects/ProjectImageSVG.astro'; import TypingEffect from '@/components/ui/TypingEffect.astro'; import TechStack from '@/components/landing/TechStack.astro'; -import LetterGlitchBand from '@/components/patterns/LetterGlitchBand.astro'; +import CtaBand from '@/components/patterns/CtaBand.astro'; import { t, tData, defaultLocale } from '@/i18n'; interface Props { @@ -286,26 +286,7 @@ const cta = tData<{ badge: string; heading: string; description: string; button:
- -
- - - {cta.badge} - -

- {cta.heading} -

-

- {cta.description} -

- -
- - - +

{cta.heading}

@@ -316,7 +297,7 @@ const cta = tData<{ badge: string; heading: string; description: string; button: {cta.button} -
+
diff --git a/src/components/pages/views/HomeView.astro b/src/components/pages/views/HomeView.astro index e1cf21a86..1c87392f4 100644 --- a/src/components/pages/views/HomeView.astro +++ b/src/components/pages/views/HomeView.astro @@ -18,7 +18,7 @@ import Card from '@/components/ui/data-display/Card/Card.astro'; import ProofTile from '@/components/ui/data-display/ProofTile/ProofTile.astro'; import Icon from '@/components/ui/primitives/Icon/Icon.astro'; import BlogCard from '@/components/blog/BlogCard.astro'; -import LetterGlitchBand from '@/components/patterns/LetterGlitchBand.astro'; +import CtaBand from '@/components/patterns/CtaBand.astro'; import StackMarquee from '@/components/landing/StackMarquee.astro'; import { getCollection } from 'astro:content'; import siteConfig from '@/config/site.config'; @@ -474,32 +474,7 @@ const basedInDisplay = `${city ?? 'Your City'}${country ? `, ${country}` : ''}`;
- -
- - - {cta.badge} - -

- {cta.heading} -

-

- {cta.description} -

-
- - -
-
- - - +

{cta.heading}

@@ -516,7 +491,7 @@ const basedInDisplay = `${city ?? 'Your City'}${country ? `, ${country}` : ''}`; -
+