text-primary
#10233c
--text-primary Default body and headingsInternal — not indexed
This page documents tokens and patterns aligned with the homepage so
new sections stay visually consistent. It is excluded from search via
noindex, nofollow in BaseLayout (/style-guide/).
Defined in src/styles/global.css on :root. Prefer CSS variables, not one-off hex, except where a component bakes a specific value (e.g. hero buttons).
#10233c
--text-primary Default body and headings#fedc06
--color-golden-yellow#ebeef5
--color-lavender#eaf1fb
--color-alice-blue#fffbe6
--color-old-lace#f5f9ff
--color-ghost-white#ffffff
--color-white#1d508d
--color-teal#2751a0
--color-steel-blue#1d65b2
--color-steel-blue-1#2c6eb4
--color-steel-blue-2#6b3fa0
--color-dark-orchid#2e7d4f
--color-dark-slate-gray#c05e1a
--color-fire-brick
Font family sitewide: Montserrat (see global.css).
Homepage section titles and hero copy use the tokens below; long headings use
title case in content (major words capitalised, small words like “and”
lowercased in the middle), matching the homepage JSON style.
--type-hero-title, weight 700, tight letter-spacing
(-0.03em in HeroSection.astro).
--type-section-title, for primary section
titles on coloured or white bands.
--type-card-title or the care-card clamp
in CareServicesSection.astro.
--type-micro, uppercase, wide
letter-spacing (0.1em–0.12em), often steel-blue, as on the shops
section.
We provide free, compassionate care for local families. Body large on a dark overlay
uses --type-body-large.
Supporting our community
Intro and lede: --type-body-large, line-height ~1.55–1.6, colour around
#364861 / #495d78 for secondary text.
No single global token: components pick radii for purpose. Pills and tags use
999px; cards and panels cluster at 12–16px.
6px Default `.btn` corners 8px Swatch chips, small UI 10px Inline samples, type rows 12px Motion demo, soft cards 14px Style guide panels 16px Homepage service cards 999px Pills, tags, primary CTAs, hero row buttons Common patterns from the homepage and inner pages.
--color-lavender for alternating bands;
white for contrast sections (e.g. shops).
1px solid e.g. #d9e3f0,
#dce5f2, or #e5ebf5.
0 6px 16px rgba(19, 47, 82, 0.08).
Homepage sections use a centred container width: min(1200px, 95%) with
margin: 0 auto. Some inner pages (e.g. contact) add horizontal padding:
clamp(1.125rem, 4.2vw, 1.5rem) on the same max-width shell.
This guide uses the same min(1200px, 95%) pattern.
Pill tags on the homepage care grid (CareServicesSection.astro).
For a few pages, headings are normalised with toTitleCase in
src/lib/titleCase.ts (AP-style, small words mid-phrase). Use only for
short labels and headings, not for body copy.
we'd love to hear from you → We'd Love to Hear from You
Sample line in each size.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
Homepage care cards (CareServicesSection.astro) use a text-style CTA: bold
--color-steel-blue, with a yellow bar on the label only
(::after on .card-link-text), and the
arrow outside that underline. The bar animates in on
:hover and :focus-visible.
Expert nursing support in a home-from-home environment, matching real card copy length.
Find Out More
Motion is calm and supportive: short fades with a soft ease-out, modest vertical travel, and
no autoplaying distractions. Always respect prefers-reduced-motion (handled in
CSS and in the scroll script).
Defined on :root in src/styles/global.css. Use these when adding
new animations so timing stays consistent.
--motion-ease-out Primary easing for entrances (cubic-bezier) --motion-duration-reveal Section scroll reveal (opacity + transform) --motion-duration-stagger Card / grid item fade-up after section is visible --motion-duration-hero Hero headline / body / CTA row (HeroSection.astro) --motion-duration-video Video embed emphasis when its section appears --motion-distance Vertical shift for scroll reveals and motion-fade-up --motion-distance-hero Hero line stagger distance --motion-stagger-step Delay step between grid columns (multiples used for nth-child) class="motion-scope" (the homepage also uses page-home for any
legacy hooks).
<section> blocks. These are excluded from scroll reveal so
the hero can use its own treatment:
.hero-section, .contact-hero, .donate-hero,
.shop-hero, .hospice-svc-hero, .archive-hero.
initMotionScrollReveal() from
src/scripts/motion-scroll-reveal.ts (optional selector; default
".motion-scope").
.cards-grid, .impact-grid, .featured-grid, plus
.reach-grid > .main-card and .side-stack > .side-card, and
.video-frame for video blocks.
<div class="motion-scope">
<HeroSection /> <!-- .hero-section: not observed -->
<section>…</section>
</div>
<script>
import { initMotionScrollReveal } from "../scripts/motion-scroll-reveal.ts";
initMotionScrollReveal();
</script>
Apply class="hero-animate" to the hero title, supporting copy, and CTA row in
HeroSection.astro. Keyframes use --motion-duration-hero,
--motion-ease-out, and --motion-distance-hero.
Scroll this panel: sections below use the same classes as the homepage. A second section
includes a .cards-grid to show stagger.
This block uses reveal-on-scroll and is-visible once it
enters the viewport.