Documentation

Template Docs

Everything in the components library, explained. Copy/paste props, see small demos, and jump to the full /components-library page for live previews.

Utilities

Typography classes
.heading--xl, .heading--l, .heading, .heading--s
.subheading--l, .subheading, .subheading--s
.eyebrow
.body--xl, .body--l, .body, .body--s, .body--xs
Color utilities
Backgrounds: .bg-primary, .bg-secondary, .bg-dark, .bg-light, .bg-accent, .bg-white, .bg-off-white
Text: .text-primary, .text-secondary, .text-dark, .text-light, .text-accent, .text-white, .text-off-white
Buttons
Use .button + size + theme. Sizes: .btn--s, .btn, .btn--l.
Themes: .btn-primary, .btn-secondary, .btn-primary--outline, .btn-secondary--outline.
Layout
.container centers content with max-width.
.row + .col builds grids.
.box is a padded surface for component content.
Responsive mixins available in SCSS: @include mobile { ... } and @include desktop { ... }.

Hero

Full-bleed hero with image or video background.
Props
PropTypeDefaultNotes
bgType'image' | 'video''image'Select background type.
imageUrlstring-Required for bgType="image".
imageAltstring-Alt text for image background.
videoSrcstring-Local MP4 recommended; autoplay/muted/loop/playsInline handled in component.
videoPosterstring-Poster image for video.
overlaybooleanfalseAdds a dark overlay for contrast.
overlayOpacitynumber (0–1)0.35Overlay strength.
overlinestring-Small text above heading.
headingstring-Main heading text.
bodystring-Supporting copy.
button{ label, link, theme, size }-Primary CTA.
align'left' | 'center' | 'right''left'Text/content alignment.
Minimal Demo
Demo
Docs

All components, one template

Swap tokens, ship fast.

Components

MediaBlock

Split layout with image/video on one side and text/buttons on the other.
Props
PropTypeDefaultNotes
imageUrlstring-Media image URL.
imageAltstring-Alt text (if implemented in your component).
eyebrowstring-Small label above heading.
headingstring-Section heading.
bodystring-Copy text.
isReversedbooleanfalseSwap media/text sides.
buttonsArray<{label, link, theme, size?}>[]CTA buttons.
Minimal Demo
Media left, text right
Block

Media left, text right

Toggle isReversed for the other side.

VideoBlock

Lightweight YouTube embed with optional custom thumbnail.
Props
PropTypeDefaultNotes
youTubeUrlstring-Full YouTube URL.
thumbnailUrlstringautoOptional explicit thumbnail.
playIconUrlstringbuilt-inOptional custom play icon.
Minimal Demo

Waypoint

IntersectionObserver wrapper. Adds/removes classes and triggers callbacks as its child enters/leaves the viewport. Useful for color swaps, counters, lazy mounting, sticky CTAs, progress dots, etc.
Props
PropTypeDefaultNotes
thresholdnumber (0–1)0.5Percent of target visible to trigger.
activeClassstring''Class added when intersecting.
inactiveClassstring''Class added when not intersecting.
onEnter() => void-Callback when entering.
onExit() => void-Callback when leaving.
Pattern
<Waypoint
  threshold={0.75}
  activeClass="bg-white"
  inactiveClass="bg-off-white"
  onEnter={() => console.log('entered')}
  onExit={() => console.log('left')}
>
  <div className="box bg-off-white">
    {/* content to color-swap / animate */}
  </div>
</Waypoint>

Modals

TextModal and VideoModal share the same trigger/close API.
TextModal Props
PropTypeDefaultNotes
triggerLabelstring'Open'Button text.
triggerThemestring'btn-primary'Button theme class.
triggerSizestring'btn'Button size class.
titlestring-Modal title.
bodystring-Modal content text.
closeLabelstring'Close'Close button text.
closeThemestring'btn-primary'Close button theme.
closeSizestring'btn--s'Close button size.
TextModal Demo
VideoModal Demo

FAQ

Accordion with single-open or multi-open modes.
Props
PropTypeDefaultNotes
allowMultiplebooleanfalseAllow multiple items open simultaneously.
defaultOpennumber[][]Indices to open initially.
itemsArray<{question, answer}>[]FAQ content.

Yes—client work and personal projects are fine.

See the components library at /components-library.

Card

Single content card with image, text, and CTA.
Props
PropTypeDefaultNotes
imageUrlstring-Card image.
eyebrowstring-Small label.
headingstring-Card title.
bodystring-Description.
button{ label, href, theme, size }-CTA.
Guide

Design tokens

CardRow (slider)

Horizontal slider. Display 3-up, slide by N, with optional dots.
Props
PropTypeDefaultNotes
itemsArray<CardProps>[]Cards to render.
perPagenumber3Cards visible at once.
slideBynumber3Cards to move per slide.
showDotsbooleanfalseEnable pagination dots.
buttonThemeOverridestringundefinedForce a single button theme for all cards.
Guide

Styling

Case

Perf wins

Blog

Tokens

CardGrid

Responsive grid with initial/step/max and an optional Load More.
Props
PropTypeDefaultNotes
itemsArray<CardProps>[]Cards to render.
initialnumber6Cards shown initially.
stepnumber3Cards added per click.
maxnumberInfinityHard cap on items shown.
showLoadMorebooleantrueToggle the Load More button.
align'left' | 'center''left'Grid alignment.
buttonThemeOverridestringundefinedForce a single button theme for all cards.
Release

v1.0

Guide

Theming

Case

Perf