Status: built = its own CSS; variant = a data-* value on another element; composition = existing parts arranged in markup, no new CSS.

Layers

LayerContents
Foundationstokens, surfaces, fonts, reset, base, typography roles, accessibility helpers
Primitivescontainer, grid, stack, cluster, button, button-group, link, icon, media, tag, badge, avatar, divider, label, breadcrumb, pagination, field and form controls, accordion, tabs, prose, table
Componentssection-header, card, feature, quote, stat, logo, meta-list, link-list, social-links, notice, site-header (+ site-nav), site-footer, dropdown, dialog, cookie-banner, carousel, tooltip, code-block, subscribe
Sectionssection, hero, split, media-content, cta, logo-rail, gallery
Patternspage-header, listing, article-layout (+ toc), profile
Templateshome, content, landing, about, services, service, case-studies, case-study, articles, article, contact, team, person, 404
Brief itemSamlaStatus
Headersite-headerbuilt
Primary navigationsite-nav inside site-headerbuilt
Dropdown navigationsite-nav__menu[data-variant="dropdown"]variant
Mega menusite-nav__menu[data-variant="mega"]variant
Mobile navigationsite-header[data-mobile="dropdown / drawer / fullscreen"]variant
Breadcrumbsbreadcrumbbuilt
Footersite-footer[data-layout="simple / columns"]built
Paginationpaginationbuilt

Typography and content

Brief itemSamlaStatus
Headingany h1 to h6 + a text-* rolefoundation
Leadtext-leadfoundation
Rich text, lists, inline links, codeprosebuilt
Blockquoteprose blockquote, or quote[data-variant="rule"]variant
Pull quotequote[data-size="large / display"]variant
Tablestable in table-scroll (also bare tables inside prose)built
Code blockcode-blockbuilt

Actions

Brief itemSamlaStatus
Buttonbutton[data-variant="primary / secondary / text"][data-size]built
Button groupbutton-group[data-stack="mobile"]built
Text linklinkbuilt
Icon linklink[data-variant="arrow / external"], button[data-icon-only]variant

Forms

Brief itemSamlaStatus
Text, email, tel, number, search inputs; textareainput (by type)built
Selectselectbuilt
Checkbox, radiocheckbuilt
Toggleswitchbuilt
File uploadfilebuilt
Form groupfield, fieldset, form-gridbuilt
Validation messagefield__error, form-summary, form[data-validate]built
Searchinput-group + input[type=search] + icon buttoncomposition
Newsletter formsubscribe (field + input-group + note)built
Contact formform + form-grid + fieldscomposition

Content components

Brief itemSamlaStatus
Card, media cardcardbuilt
Article cardcard with meta and optional personcomposition
Case study cardcard with meta and tagscomposition
Profile cardcard with portrait media, meta after titlecomposition
Feature card, feature itemfeature (data-variant, data-size, data-layout)built
Testimonial, quotequotebuilt
Statstat in stat-listbuilt
Tagtag, tag-listbuilt
Badgebadge[data-status], badge[data-variant="pill"]built
Avataravatar, avatar-groupbuilt
Logologo in logo-listbuilt
Iconinline SVG .iconbuilt
Image, videomedia (data-ratio, media__play)built
Contact detailsmeta-list[data-layout="stacked"] + social-linkscomposition
Social linkssocial-linksbuilt

Interactive

Brief itemSamlaStatus
Accordion, disclosureaccordion on native detailsbuilt
Tabstabsbuilt
Modaldialog[data-variant="modal"]built
Drawerdialog[data-variant="drawer"]variant
Carouselcarouselbuilt
Dropdowndropdownbuilt
Tooltiptooltipbuilt
Cookie bannercookie-bannerbuilt
Notice / alertnotice[data-status]built (added)

Sections

Brief itemSamlaStatus
Herohero[data-layout][data-align][data-width][data-surface]built
Intro, rich contentsection + section-header + section__body[data-indent] + prosecomposition
Media + contentmedia-content[data-media]built
Feature gridsection + grid[data-columns] of featurecomposition
Card grid, related contentsection + section-header + grid[data-columns] of cardcomposition
Logo raillogo-railbuilt
Logo gridlogo-list[data-layout="grid"]variant
Statssection + stat-listcomposition
Testimonials, quotessection[data-surface="dark"] + quote[data-size="large"], or carousel of quote panelscomposition
Gallerygallery[data-layout="grid / mosaic"]built
Videosection + media[data-ratio="video"] + media__playcomposition
FAQsection + split + accordioncomposition
CTActa[data-layout="stacked / inline / centered"]built
Newslettercta + subscribecomposition
Contactsection + split + meta-list + formcomposition

Domain patterns

Brief itemSamlaStatus
Services indexpage-header + grid of bordered cards, or feature-list rowscomposition
Service detail contentpage-header[data-layout="split"] + split[data-sticky] + prosecomposition
Case studies indexlisting (filters, card grid, pagination)built
Case study headerpage-header with meta-list facts and cinema mediabuilt
Case study resultsstat-list + quote on a dark sectioncomposition
Team indexlisting or tabs of profile cardscomposition
Person profileprofilebuilt
Article indexlisting with link filters + featured horizontal cardcomposition
Article headerpage-headerbuilt
Article bodyarticle-layout + toc + prosebuilt
Related articlessection + grid of cardscomposition
Events indexlink-list with time metacomposition
Event detailpage-header[data-layout="centered"] + article-layoutcomposition
Careers indexlink-list with location metacomposition
Job detailpage-header[data-layout="split"] with meta and apply action + article-layoutcomposition
Locationsbordered cards with meta-list and map mediacomposition

Deliberately not built

  • Separate card, hero or header components per content type. Variants cover them.
  • Utility classes beyond the type roles.
  • Autoplaying carousels.
  • A JavaScript framework, bundler or build step for the reference implementation (bundling CSS is optional: scripts/build-css.mjs).
  • CMS schemas or content models (out of scope for v1).

Deviations from the design file

  • The design's hero said "Built with Astro". The v1 reference is plain HTML, so the copy says what is true of this implementation.
  • --surface-line-strong on dark is #75736D (3.9:1 on ink) rather than #5C5B57 (2.9:1), so input and secondary button borders meet 3:1.
  • Status colours (positive, warning) and --color-error exist as tokens as the brief asks; the design's rule that errors use the brand colour is kept as the default value (--color-error: #C4331A).

Source: docs/taxonomy.md on GitHub.