Apply v3 design review: hero CTA hierarchy, mobile responsiveness, type scale, sponsor strip

- Move donate button under H1 in reading path (was orphaned bottom-right, hidden on mobile)
- Hero height 63→70vh; responsive padding via CSS (88px/24px mobile, 96px/48px desktop)
- Type scale: eyebrow 12px/0.25em → 13px/0.2em; H1 margins snapped to 8px grid; blockquote 16px/1.6
- CTA cards on mobile: 200→280px height; force .cta-sub/.cta-more visible (were hover-only)
- Video body text capped at 620px (~65ch, was 680px/~85ch)
- Sponsors demoted to compact strip — removed large serif heading that outweighed CTAs
- Footer quick links: min-height 44px tap targets on mobile

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Calum Muir 2026-06-12 10:18:24 +00:00
parent a319016dbb
commit ade2c3da30
2 changed files with 36 additions and 31 deletions

View file

@ -50,11 +50,11 @@ const year = new Date().getFullYear();
Quick links Quick links
</p> </p>
<nav> <nav>
<ul class="flex flex-col gap-2.5"> <ul class="flex flex-col">
{quickLinks.map((link) => ( {quickLinks.map((link) => (
<li> <li>
<a <a
class="[font-family:'Public_Sans',sans-serif] font-semibold text-sm text-black/70 hover:underline" class="[font-family:'Public_Sans',sans-serif] font-semibold text-sm text-black/70 hover:underline flex items-center min-h-[44px]"
href={link.href} href={link.href}
> >
{link.label} {link.label}

View file

@ -104,7 +104,9 @@ const sponsors = cms?.sponsors?.length ? cms.sponsors : DEFAULTS.sponsor
@media (max-width: 767px) { @media (max-width: 767px) {
.cta-editorial { flex-direction: column; height: auto; } .cta-editorial { flex-direction: column; height: auto; }
.cta-card { flex: none; height: 200px; } .cta-card { flex: none; height: 280px; }
.cta-sub { opacity: 1 !important; }
.cta-more { opacity: 1 !important; }
} }
.video-embed { .video-embed {
@ -149,7 +151,14 @@ const sponsors = cms?.sponsors?.length ? cms.sponsors : DEFAULTS.sponsor
@media (max-width: 767px) { @media (max-width: 767px) {
.scroll-indicator { display: none; } .scroll-indicator { display: none; }
.hero-donate { display: none; } }
/* Hero content padding: clear the fixed nav */
#hero-content {
padding: 96px 48px 48px;
}
@media (max-width: 767px) {
#hero-content { padding: 88px 24px 32px; }
} }
/* ── Donate modal ── */ /* ── Donate modal ── */
@ -218,7 +227,7 @@ const sponsors = cms?.sponsors?.length ? cms.sponsors : DEFAULTS.sponsor
<main class="w-full"> <main class="w-full">
<!-- ── HERO ── --> <!-- ── HERO ── -->
<section class="relative w-full overflow-hidden" style="min-height: 63vh;"> <section class="relative w-full overflow-hidden" style="min-height: 70vh;">
<img <img
class="absolute inset-0 h-full w-full object-cover" class="absolute inset-0 h-full w-full object-cover"
style="object-position: 50% 38%;" style="object-position: 50% 38%;"
@ -235,18 +244,30 @@ const sponsors = cms?.sponsors?.length ? cms.sponsors : DEFAULTS.sponsor
<!-- Hero content --> <!-- Hero content -->
<div <div
id="hero-content"
class="relative flex flex-col" class="relative flex flex-col"
style="min-height: 63vh; padding: 120px 28px 72px;" style="min-height: 70vh;"
> >
<!-- Headline block --> <!-- Headline block -->
<div class="anim-fade-up" style="max-width: 640px; margin-top: 16px;"> <div class="anim-fade-up" style="max-width: 640px; margin-top: 8px;">
<p style="font-family: 'Public Sans', sans-serif; font-weight: 700; font-size: 12px; letter-spacing: 0.25em; text-transform: uppercase; color: rgba(255,255,255,0.75);"> <p style="font-family: 'Public Sans', sans-serif; font-weight: 700; font-size: 13px; letter-spacing: 0.2em; text-transform: uppercase; color: rgba(255,255,255,0.75);">
Highland Group RDA · Since 1975 Highland Group RDA · Since 1975
</p> </p>
<div style="margin-top: 14px; width: 48px; height: 2px; background: #7DA371;" /> <div style="margin-top: 16px; width: 48px; height: 2px; background: #7DA371;" />
<h1 style="margin-top: 18px; font-family: 'Merriweather', serif; font-weight: 900; font-size: clamp(34px, 5vw, 62px); color: #F6F1E8; line-height: 1.12;"> <h1 style="margin-top: 16px; font-family: 'Merriweather', serif; font-weight: 900; font-size: clamp(31px, 5.5vw, 61px); color: #F6F1E8; line-height: 1.1;">
{heroHeadline} {heroHeadline}
</h1> </h1>
<div style="margin-top: 32px;">
<button
onclick="openDonateModal()"
style="display: inline-flex; align-items: center; gap: 10px; background: #f5d445; color: #000; border: none; border-radius: 9999px; padding: 16px 28px; font-family: 'Public Sans', sans-serif; font-weight: 800; font-size: 13px; letter-spacing: 0.08em; text-transform: uppercase; cursor: pointer; white-space: nowrap; box-shadow: 0 4px 18px rgba(0,0,0,0.32); transition: background 0.18s ease;"
onmouseover="this.style.background='#e8c933'" onmouseout="this.style.background='#f5d445'"
aria-label="Open donation form"
>
Donate
<svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 8h10M9 4l4 4-4 4"/></svg>
</button>
</div>
</div> </div>
<!-- Mission blockquote --> <!-- Mission blockquote -->
@ -255,24 +276,12 @@ const sponsors = cms?.sponsors?.length ? cms.sponsors : DEFAULTS.sponsor
style="margin-top: auto; max-width: 500px; background: rgba(0,0,0,0.48); backdrop-filter: blur(6px); border-radius: 7px; padding: 22px 26px;" style="margin-top: auto; max-width: 500px; background: rgba(0,0,0,0.48); backdrop-filter: blur(6px); border-radius: 7px; padding: 22px 26px;"
> >
<div style="width: 32px; height: 3px; background: #7DA371; margin-bottom: 14px;" /> <div style="width: 32px; height: 3px; background: #7DA371; margin-bottom: 14px;" />
<blockquote style="font-family: 'Merriweather', serif; font-weight: 700; font-style: italic; font-size: clamp(15px, 1.5vw, 18px); color: #F6F1E8; line-height: 1.55; margin: 0;"> <blockquote style="font-family: 'Merriweather', serif; font-weight: 700; font-style: italic; font-size: 16px; color: #F6F1E8; line-height: 1.6; margin: 0;">
{heroMission} {heroMission}
</blockquote> </blockquote>
</div> </div>
</div> </div>
<!-- Donate button (absolute, hidden on mobile) -->
<button
onclick="openDonateModal()"
class="absolute hero-donate"
style="bottom: 40px; right: 28px; display: inline-flex; align-items: center; gap: 10px; background: #7DA371; color: #fff; border: none; border-radius: 9999px; padding: 16px 28px; font-family: 'Public Sans', sans-serif; font-weight: 800; font-size: 13px; letter-spacing: 0.08em; text-transform: uppercase; cursor: pointer; white-space: nowrap; box-shadow: 0 4px 18px rgba(0,0,0,0.32); transition: background 0.18s ease;"
onmouseover="this.style.background='#5a7d55'" onmouseout="this.style.background='#7DA371'"
aria-label="Open donation form"
>
Donate
<svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 8h10M9 4l4 4-4 4"/></svg>
</button>
<!-- Scroll indicator (absolute, hidden on mobile) --> <!-- Scroll indicator (absolute, hidden on mobile) -->
<div <div
class="scroll-indicator absolute" class="scroll-indicator absolute"
@ -288,13 +297,13 @@ const sponsors = cms?.sponsors?.length ? cms.sponsors : DEFAULTS.sponsor
<!-- ── VIDEO ── --> <!-- ── VIDEO ── -->
<section style="background: #1e2e1a; padding: clamp(48px, 8vw, 80px) clamp(24px, 5vw, 56px);"> <section style="background: #1e2e1a; padding: clamp(48px, 8vw, 80px) clamp(24px, 5vw, 56px);">
<div style="max-width: 960px; margin: 0 auto;"> <div style="max-width: 960px; margin: 0 auto;">
<p style="font-family: 'Public Sans', sans-serif; font-weight: 700; font-size: 12px; letter-spacing: 0.25em; text-transform: uppercase; color: #7DA371; margin-bottom: 12px;"> <p style="font-family: 'Public Sans', sans-serif; font-weight: 700; font-size: 13px; letter-spacing: 0.2em; text-transform: uppercase; color: #7DA371; margin-bottom: 16px;">
Our Story Our Story
</p> </p>
<h2 style="font-family: 'Merriweather', serif; font-weight: 700; font-size: clamp(24px, 3vw, 38px); color: #F6F1E8; margin-bottom: 20px; line-height: 1.2; max-width: 600px;"> <h2 style="font-family: 'Merriweather', serif; font-weight: 700; font-size: clamp(24px, 3vw, 38px); color: #F6F1E8; margin-bottom: 20px; line-height: 1.2; max-width: 600px;">
{videoHeading} {videoHeading}
</h2> </h2>
<p style="font-family: 'Public Sans', sans-serif; font-weight: 600; font-size: 16px; color: rgba(246,241,232,0.75); line-height: 1.65; max-width: 680px; margin-bottom: 40px;"> <p style="font-family: 'Public Sans', sans-serif; font-weight: 600; font-size: 16px; color: rgba(246,241,232,0.75); line-height: 1.6; max-width: 620px; margin-bottom: 40px;">
{videoBody} {videoBody}
</p> </p>
<div class="video-embed" style="max-width: 860px; margin: 0 auto; box-shadow: 0 20px 60px rgba(0,0,0,0.5);"> <div class="video-embed" style="max-width: 860px; margin: 0 auto; box-shadow: 0 20px 60px rgba(0,0,0,0.5);">
@ -365,16 +374,12 @@ const sponsors = cms?.sponsors?.length ? cms.sponsors : DEFAULTS.sponsor
<!-- ── SPONSORS ── --> <!-- ── SPONSORS ── -->
<section style="background: #1e2e1a; padding: clamp(48px, 8vw, 72px) clamp(24px, 5vw, 56px);"> <section style="background: #1e2e1a; padding: clamp(48px, 8vw, 72px) clamp(24px, 5vw, 56px);">
<div style="max-width: 1100px; margin: 0 auto;"> <div style="max-width: 1100px; margin: 0 auto;">
<p style="font-family: 'Public Sans', sans-serif; font-weight: 700; font-size: 11px; letter-spacing: 0.25em; text-transform: uppercase; color: #7DA371; text-align: center; margin-bottom: 10px;"> <p style="font-family: 'Public Sans', sans-serif; font-weight: 700; font-size: 13px; letter-spacing: 0.2em; text-transform: uppercase; color: #7DA371; text-align: center; margin-bottom: 32px;">
Supporters &amp; Sponsors Supporters &amp; Sponsors
</p> </p>
<div style="width: 36px; height: 2px; background: #7DA371; margin: 0 auto 32px;" />
<p style="font-family: 'Merriweather', serif; font-weight: 700; font-size: clamp(20px, 2.5vw, 30px); color: #F6F1E8; text-align: center; margin-bottom: 48px; line-height: 1.2;">
{sponsorHeading}
</p>
<!-- Current sponsors --> <!-- Current sponsors -->
<div style="display: flex; flex-wrap: wrap; gap: 40px; justify-content: center; align-items: center; margin-bottom: 64px;"> <div style="display: flex; flex-wrap: wrap; gap: 32px; justify-content: center; align-items: center; margin-bottom: 48px;">
{sponsors.map((s) => ( {sponsors.map((s) => (
<div class="sponsor-logo"> <div class="sponsor-logo">
{s.url {s.url