Commit graph

133 commits

Author SHA1 Message Date
Calum Muir
a1ef14aaeb Remove JustGiving button from About page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 10:46:24 +00:00
Calum Muir
e9c0904bee Fix CTA cards on mobile: touch triggers :hover which overrides flex:none causing layout shift
On touchscreens, tapping a card fires :hover which changed flex from none to 1.3,
expanding the card mid-tap and shifting subsequent cards up — so the touch-up
registered on the wrong card. Fix: flex: none !important + transition: none on mobile.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 10:37:54 +00:00
Calum Muir
4a93c7efca Fix scroll indicator showing on mobile — inline display:flex overrode media query
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 10:35:13 +00:00
Calum Muir
bab33e0f65 Fix mission blockquote overlapping donate button on mobile
margin-top: auto collapses to 0 when the headline block fills the hero height
(e.g. long H1 word-wrap on small phones). Replace inline auto with .hero-mission
class: auto on desktop, clamp(40px, 6vh, 80px) on mobile for a guaranteed gap.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 10:33:27 +00:00
Calum Muir
62b845f1b5 Fix CTA cards on mobile: always show 3, correct hrefs, fix overflow clipping
- ctaCards now merges Sanity data per-slot over defaults instead of all-or-nothing;
  a partially-filled CMS (e.g. 2 cards) no longer hides the third card, and an
  empty href in Sanity falls back to the correct default route
- Add overflow: visible to .cta-editorial on mobile so the third card isn't clipped
  by the desktop overflow: hidden that wasn't being overridden
- Add pointer-events: none to the gradient overlay div so it can't intercept taps

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 10:29:45 +00:00
Calum Muir
f0a73bb362 Fix hero eyebrow clipping under logo — increase top padding to clear fixed nav
Mobile nav is ~104px tall (80px logo + 24px padding), desktop ~125px.
Set hero content padding to 120px mobile / 144px desktop.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 10:20:56 +00:00
Calum Muir
ade2c3da30 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>
2026-06-12 10:18:24 +00:00
a319016dbb Fix invalid __experimental_actions on homePage schema
'unpublish' is not a valid action — valid values are create/update/delete/publish.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:22:25 +00:00
87182583f8 Wire home page content into Sanity CMS with hardcoded fallbacks
Adds homePage singleton document type (hero headline/mission, video section,
CTA cards, sponsors). Home page fetches from Sanity when configured and
falls back to the existing hardcoded values when not.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:19:45 +00:00
921e03e22e Replace hero images with new photography across all main pages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:13:46 +00:00
a00b337703 Store studio index.html outside dist/client/ to avoid static serving
Astro didn't include the deleted public/studio/index.html in dist/client/
so the SSR route couldn't find it. Now we copy it from the studio build
stage to dist/studio-index.html after the Astro build — accessible to
the SSR route but invisible to the static file middleware.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:01:10 +00:00
7911a32676 Remove studio index.html from static files to force SSR path rewriting
Astro's static middleware was serving public/studio/index.html directly,
bypassing the [...path].ts route that rewrites /static/ to /studio/static/.
Deleting it makes all /studio requests go through the SSR rewrite.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 12:58:01 +00:00
8e2cd0b0d6 Rewrite studio asset paths from /static/ to /studio/static/ at serve time
Sanity v3 basePath only affects the SPA router, not Vite's build output.
The built index.html hardcodes /static/ so we rewrite on the way out.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 12:55:01 +00:00
847952228f Set studio basePath to /studio so assets resolve correctly
Without basePath the built studio references /static/*.js from the domain
root, but files live at /studio/static/*.js causing a blank page.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 12:50:52 +00:00
85495edad4 Switch Docker deps install to npm install to fix npm version mismatch
Lock file was generated with npm 11.x (Node 24 local) but node:20-alpine
has npm 10.x which enforces stricter lock file consistency. Using
npm install avoids the picomatch version conflict on CI.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 12:45:54 +00:00
d82da193f3 Use npm install in studio Docker stage to avoid lock file strictness
npm ci fails on alpine when lock file was generated on a different npm
version. --legacy-peer-deps handles the styled-components peer dep too.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 12:36:46 +00:00
0596e6db47 Fix infinite redirect on /studio by serving index.html directly
[...path] catches /studio itself (empty rest param), causing a redirect
loop. Now reads and returns index.html content for all /studio/* paths;
static assets are still served before this route fires.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 12:27:21 +00:00
9ca50a1da8 Add Sanity Studio served at /studio via Docker multi-stage build
Builds studio/ separately during Docker build and copies output to
public/studio/ so it is served as static files by the Astro Node adapter.
Catch-all route redirects deep studio links back to /studio for SPA routing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 12:18:00 +00:00
fc644510af Add Sanity CMS integration
- Install @sanity/client + @portabletext/to-html
- studio/ — Sanity v3 project with post schema (title, slug, date, category,
  summary, cover image with hotspot, Portable Text body). Run with
  `cd studio && npm install && sanity dev` after setting SANITY_STUDIO_PROJECT_ID.
- src/lib/sanity.ts — typed client, GROQ queries, Portable Text → HTML conversion
- src/lib/news.ts — adds getArticles() / getArticle() async functions that prefer
  Sanity when SANITY_PROJECT_ID is set; fall back to local markdown otherwise
- events/index.astro, events/[slug].astro, events/page/[page].astro — switch to
  async getArticles()/getArticle(); [slug].astro drops getStaticPaths() in favour
  of SSR request-time fetch with redirect-on-not-found
- .env.example — documents SANITY_PROJECT_ID / SANITY_DATASET / SANITY_API_TOKEN

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 11:50:35 +00:00
51fb8c1553 Fix: add is:inline to support-us script so onclick handlers can reach functions
Astro wraps <script> tags as ES modules; inline onclick="fn()" only reaches
window globals. is:inline emits the script verbatim so all functions are global.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 12:40:50 +02:00
a9d72fcde2 Support Us: replace JustGiving donate band + sponsor section with inline widgets
- Donate band → UnifiedDonateWidget: expanding yellow section with one-off/monthly
  mode toggle, 2×2 preset chips with impact text, Gift Aid with address fields,
  pay step (express + card form), done step, and sticky dark-green summary rail
- Sponsor a Pony → SponsorPonyWidget: 4-step flow (idle costs grid → pony picker
  with actual ponies Breagha/Harley/Connolly/Puzzle → tier selector → payment)
- Updated 'Donate' three-ways card to link to #donate instead of JustGiving
- Updated FAQ sponsor payment answer to reflect working widget

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 12:39:31 +02:00
a6255b2318 fix: add missing class to donate overlay div
Without class="donate-overlay" the CSS display:none never applied,
leaving the fixed overlay covering the entire page on load and blocking
all clicks — making the page appear locked.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 12:10:47 +02:00
eb5111aae3 feat: redesign donate modal to match prototype like-for-like
- Cream (#F6F1E8) panel with slide-in/fade animation (no dark header bar)
- Eyebrow + Merriweather 900 title + subtitle header with circular close btn
- Running total dark green chip bar (updates live with mode/amount/Gift Aid)
- Full-label mode toggle: 'One-off donation' / 'Monthly donation', black active
- 2x2 amount chips with large Merriweather amount + impact text, black when selected
- 'Or another amount' inline row (£ prefix + right-aligned number input)
- Gift Aid block: custom visual checkbox, expandable name/address fields
- Pay step: Apple Pay / Google Pay / PayPal express buttons (→ JustGiving),
  'Or pay with card' divider, full card form (email, card, expiry/CVC,
  name, country/postcode), Direct Debit note (monthly only), lock-icon
  Donate button, trust row (Stripe / cancel anytime / Charity SC007357)
- Done step: green checkmark, 'Thank you...' heading, gift summary, close
- Hero button: green pill uppercase 'DONATE →' (matching DonateButton)
- Yellow bar button: black pill uppercase 'DONATE NOW →'

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 12:08:47 +02:00
23c9bacc36 feat: replace JustGiving image buttons with donate modal on homepage
- Add vanilla JS donate modal with one-off/monthly toggle, amount chips,
  custom input, impact text, Gift Aid checkbox, and JustGiving redirect
- Replace hero and yellow CTA bar JustGiving image links with styled
  Donate buttons (heart icon) that open the modal
- Modal closes on overlay click or Escape key

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 11:58:40 +02:00
455abb9411 feat: add horse first-person statements to about page profiles
Replace placeholder one-liners with full first-person quotes from
the 2026 Horse Statements document for Breagha, Harley, Connolly,
Puzzle, and the Minis (Orris, Bru & Sam).

- Section heading updated to 'Meet the horses — In their own words.'
- Cards redesigned: taller photo (220px), green left-border quote
  block in italic Merriweather, details in small caps green text
- Minis added as a group entry with shared card
- Memorial horses (Lady Suede, Wispa) moved to a separate
  'Remembered fondly' subsection with grayscale treatment
- Updated details/ages/breeds to match the document

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 22:36:50 +02:00
c2fa6b1696 chore: switch to Node adapter for server-side rendering
Replace static output with @astrojs/node standalone adapter
so Nixpacks/Coolify can run the site as a Node server.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 17:38:24 +02:00
ea25680363 Redesign forms to multi-step; add sponsor section and content updates
- Rewrite volunteer-application.astro: 5-step multi-step form with
  progress pills, choice cards, per-step validation, review step,
  and fetch-based submission; matches new site design system
- Rewrite participant-application.astro: 5-step multi-step form
  (Participant, Health & support, Activities, Consent, Review);
  retains all original field names; 27 support question checkboxes
  as interactive cards; callout box; guardian section on step 1
- Add volunteer-reference.astro: new non-public 5-step reference form
  (noindex/nofollow); steps: The applicant, Your details, Relationship,
  Assessment, Declaration; posts to /api/volunteer-reference
- Add functions/api/volunteer-reference.ts: Cloudflare Pages Function
  mirroring volunteer-application pattern with Turnstile + Resend
- Add Ffordes sponsor logo to homepage; replace placeholder sponsor
  boxes with full corporate sponsorship section (£750/annum) with
  four benefit cards and CTAs
- Move ffordes_logo.png to public/sponsors/
- Remove all references to 'carriage driving' and 'free sessions'
  across about.astro, index.astro, privacy.astro, support-us.astro,
  and participant-application.astro
- facebook.astro: styled mock-post feed with like toggle, page header
  card, sidebar, and embed note banner

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 17:03:37 +02:00
Calum Muir
7c3e8b5ef0 Tighten gap between Facebook and Instagram icons in desktop nav
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 20:35:03 +00:00
Calum Muir
5fdc7da0fe Add Instagram links alongside Facebook throughout the site
Desktop nav, mobile menu, footer social icons, and contact page
"Follow us" section all now include an Instagram icon linking to
https://www.instagram.com/HighlandGroupRDA.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 20:30:35 +00:00
Calum Muir
db9f9d255a Fix mobile menu not covering viewport when nav is scrolled
backdrop-filter on #site-nav creates a CSS containing block, causing
fixed inset-0 children to be clipped to the nav bar instead of the
viewport. Portal the menu to document.body on init to escape it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 20:22:50 +00:00
Calum Muir
42d91e8a5f Darken Support Us hero overlay for better text readability
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 20:15:47 +00:00
Calum Muir
0f42c8f753 Darken Events hero overlay for better text readability
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 20:15:10 +00:00
Calum Muir
2be7f7949f Revert "Add frosted glass panel to Events hero text block"
This reverts commit 7296b35d9d.
2026-04-30 20:14:31 +00:00
Calum Muir
7296b35d9d Add frosted glass panel to Events hero text block
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 20:14:14 +00:00
Calum Muir
fab0f7fb3d Stack article cards to single column on mobile on Events pages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 20:12:49 +00:00
Calum Muir
e6bc071c80 Update homepage YouTube embed to IX2DGd6m8BU
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 20:08:36 +00:00
Calum Muir
bd7cc70a18 Replace map placeholder on About page with Google Maps embed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 20:01:29 +00:00
Calum Muir
421f6612e0 Also link "how you can support us" to /support-us in intro strip
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:59:24 +00:00
Calum Muir
7255dc330b Reduce intro strip links to just "who we are" → /about
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:58:53 +00:00
Calum Muir
168a6c6b0c Add frosted panel to homepage CTA editorial cards
Matches the same rgba(0,0,0,0.48) backdrop-filter treatment applied
to the Support Us cards for consistent text readability.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:57:50 +00:00
Calum Muir
22215daad3 Link Facebook reference on contact page to /facebook
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:56:43 +00:00
Calum Muir
cf5959b461 Improve readability of Support Us card text with frosted panel
Added semi-opaque dark background (rgba 0,0,0,0.48) with blur(4px)
to the text panel on each editorial card so label, heading, body and
CTA are clearly legible regardless of the underlying image.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:54:21 +00:00
Calum Muir
e37a97a9e1 Rename "News" to "Events" in nav and footer menus
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:52:13 +00:00
Calum Muir
adc4c87703 Give nav bar vertical breathing room when scrolled
Removed fixed sm:h-[108px] height and top-only padding in favour of
symmetric py-3 sm:py-4, so the logo has equal space above and below
inside the dark scrolled bar. Also changed items-start to items-center
for proper vertical alignment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:50:14 +00:00
Calum Muir
22a54a8478 Hide hero donate button and scroll indicator on mobile/tablet
Both absolutely-positioned elements were overlapping on viewports
≤767px. Extended hide breakpoint from 640px to 767px for the scroll
indicator and applied same breakpoint to the donate button. The
JustGiving button remains accessible via the intro strip below.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:47:41 +00:00
Calum Muir
6c0ac2d3e8 Remove quotation marks from mission statement blockquote
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:43:16 +00:00
Calum Muir
1779d62650 Link intro strip phrases to About and Support Us pages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:42:22 +00:00
Calum Muir
a6e1069fb4 Apply v3 redesign to Contact page
Full-width hero, two-column contact section (details + form), styled
radio button enquiry type picker, phone and referral source fields,
Quick Links dark-green card strip, map iframe retained. Form backend
integration (Turnstile + contact-form.js) preserved.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 19:38:29 +00:00
Calum Muir
474da4f3a3 Apply v3 redesign to Support Us page
Rewrites support-us.astro with hero, three-way editorial flex cards
(Donate/Sponsor/Volunteer), yellow donate band, Sponsor a Pony split
panel with cost grid, Volunteering panel with role grid, and a
native <details>/<summary> FAQ section.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 15:16:24 +00:00
Calum Muir
4fc9fb0151 Fix wrangler.jsonc for Cloudflare Workers deployment
- assets.directory: ./dist/public → ./dist (Astro static output goes to
  dist/ directly, not a public subdirectory)
- not_found_handling: single-page-application → 404-page (site is
  pre-rendered static HTML, SPA mode would serve index.html for all 404s
  instead of the proper 404 page)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 15:00:21 +00:00