04 · Brand Layer
Components
The full UI catalogue — buttons to tables — live and on-brand.
01 — Components
Components
Text fields & inputs
Dark-first: transparent, flat (radius 0), bottom-border only; focus turns the border the signature yellow. For names, emails, passwords, search and numbers.
⌄ Token reference (6)
| Component | Property | Token | Resolved |
|---|---|---|---|
| text-input | backgroundColor | transparent | transparent |
| text-input | textColor | {colors.ink} | #FFFFFF |
| text-input | typography | {typography.body} | {typography.body} |
| text-input | rounded | {rounded.none} | 0px |
| text-input | padding | 0 | 0 |
| text-input | height | 53px | 53px |
| text-input | border | 0 0 1px 0 solid {colors.ink} | 0 0 1px 0 solid #FFFFFF |
| textarea | backgroundColor | transparent | transparent |
| textarea | textColor | {colors.ink} | #FFFFFF |
| textarea | typography | {typography.body} | {typography.body} |
| textarea | rounded | {rounded.none} | 0px |
| textarea | padding | 12px 0 | 12px 0 |
| textarea | height | 120px | 120px |
| textarea | border | 0 0 1px 0 solid {colors.hairline} | 0 0 1px 0 solid rgba(255,255,255,0.12) |
| select | backgroundColor | transparent | transparent |
| select | textColor | {colors.muted} | #FFFFFF |
| select | typography | {typography.label} | {typography.label} |
| select | rounded | {rounded.none} | 0px |
| select | padding | 0 30px 0 0 | 0 30px 0 0 |
| select | height | 53px | 53px |
| select | border | 0 0 1px 0 solid {colors.ink} | 0 0 1px 0 solid #FFFFFF |
| search | backgroundColor | transparent | transparent |
| search | textColor | {colors.ink} | #FFFFFF |
| search | typography | {typography.body} | {typography.body} |
| search | rounded | {rounded.none} | 0px |
| search | height | 53px | 53px |
| search | padding | 0 0 0 32px | 0 0 0 32px |
| search | border | 0 0 1px 0 solid {colors.ink} | 0 0 1px 0 solid #FFFFFF |
| stepper | backgroundColor | transparent | transparent |
| stepper | textColor | {colors.ink} | #FFFFFF |
| stepper | typography | {typography.body} | {typography.body} |
| stepper | rounded | {rounded.none} | 0px |
| stepper | height | 53px | 53px |
| stepper | border | 0 0 1px 0 solid {colors.ink} | 0 0 1px 0 solid #FFFFFF |
| stepper-button | backgroundColor | transparent | transparent |
| stepper-button | textColor | {colors.muted} | #FFFFFF |
| stepper-button | rounded | {rounded.component} | 10px |
| stepper-button | size | 30px | 30px |
| stepper-button | border | 1px solid {colors.hairline} | 1px solid rgba(255,255,255,0.12) |
Selection controls
Checkbox (square) and radio (round) fill with a white mark on select; the toggle's ON track and the slider's filled range are the yellow accent — never red or green. Single-choice, multi-choice, on/off, and ranges.
checkboxradiotoggle / toggle-onslider-track / -fill / -thumb⌄ Token reference (7)
| Component | Property | Token | Resolved |
|---|---|---|---|
| checkbox | backgroundColor | transparent | transparent |
| checkbox | textColor | {colors.ink} | #FFFFFF |
| checkbox | rounded | {rounded.none} | 0px |
| checkbox | size | 30px | 30px |
| checkbox | border | 1px solid {colors.ink} | 1px solid #FFFFFF |
| radio | backgroundColor | transparent | transparent |
| radio | textColor | {colors.ink} | #FFFFFF |
| radio | rounded | {rounded.pill} | 100px |
| radio | size | 30px | 30px |
| radio | border | 1px solid {colors.ink} | 1px solid #FFFFFF |
| toggle | backgroundColor | {colors.hairline} | rgba(255,255,255,0.12) |
| toggle | textColor | {colors.ink} | #FFFFFF |
| toggle | rounded | {rounded.pill} | 100px |
| toggle | width | 52px | 52px |
| toggle | height | 30px | 30px |
| toggle | border | 1px solid {colors.hairline} | 1px solid rgba(255,255,255,0.12) |
| toggle-on | backgroundColor | {colors.primary} | #FFD700 |
| toggle-on | border | 1px solid {colors.primary} | 1px solid #FFD700 |
| slider-fill | backgroundColor | {colors.primary} | #FFD700 |
| slider-fill | rounded | {rounded.pill} | 100px |
| slider-fill | height | 4px | 4px |
| slider-track | backgroundColor | {colors.hairline} | rgba(255,255,255,0.12) |
| slider-track | rounded | {rounded.pill} | 100px |
| slider-track | height | 4px | 4px |
| slider-thumb | backgroundColor | {colors.ink} | #FFFFFF |
| slider-thumb | rounded | {rounded.pill} | 100px |
| slider-thumb | size | 18px | 18px |
| slider-thumb | border | 1px solid {colors.canvas} | 1px solid #1A1A1A |
Menus, modals & tooltips
Raised surfaces over the canvas — a dropdown menu, a dialog on a dimmed scrim, and the inverted (black-on-white) tooltip for high contrast on dark content.
menu / menu-itemtooltipmodal⌄ Token reference (4)
| Component | Property | Token | Resolved |
|---|---|---|---|
| menu | backgroundColor | {colors.surface-raised} | rgba(255,255,255,0.04) |
| menu | textColor | {colors.ink} | #FFFFFF |
| menu | rounded | {rounded.component} | 10px |
| menu | padding | 8px | 8px |
| menu | border | 1px solid {colors.hairline} | 1px solid rgba(255,255,255,0.12) |
| menu-item | backgroundColor | transparent | transparent |
| menu-item | textColor | {colors.body} | #FFFFFF |
| menu-item | typography | {typography.body} | {typography.body} |
| menu-item | rounded | {rounded.component} | 10px |
| menu-item | padding | 10px 14px | 10px 14px |
| modal | backgroundColor | {colors.surface-raised} | rgba(255,255,255,0.04) |
| modal | textColor | {colors.ink} | #FFFFFF |
| modal | rounded | {rounded.card} | 20px |
| modal | padding | 32px | 32px |
| modal | border | 1px solid {colors.hairline} | 1px solid rgba(255,255,255,0.12) |
| tooltip | backgroundColor | {colors.ink} | #FFFFFF |
| tooltip | textColor | {colors.on-light} | #1A1A1A |
| tooltip | typography | {typography.badge} | {typography.badge} |
| tooltip | rounded | {rounded.component} | 10px |
| tooltip | padding | 6px 10px | 6px 10px |
Accordion & FAQ
Replicated from galton.sk: a stack of rows divided by hairlines, each a question with a chevron that rotates 180° on open. Single-open — opening one closes the rest. For FAQs, long-form Q&A and progressive disclosure of dense content.
Progressive disclosure — FAQs, long-form Q&A, and dense reference content that would otherwise wall off the page. Rows are divided by hairlines, with the question in Galton Light.
Single-open by default, exactly like galton.sk: opening one row closes the rest, so the reader always has one answer in focus. The chevron rotates 180° and tints to the yellow accent when open.
Yes — each header is a real <button> with aria-expanded and aria-controls, keyboard-focusable, with a smooth height animation. (The original theme shipped no ARIA — this is the on-brand, accessible version.)
⌄ Token reference (1)
| Component | Property | Token | Resolved |
|---|---|---|---|
| accordion | backgroundColor | transparent | transparent |
| accordion | textColor | {colors.ink} | #FFFFFF |
| accordion | typography | {typography.subhead} | {typography.subhead} |
| accordion | rounded | {rounded.none} | 0px |
| accordion | padding | 24px 0 | 24px 0 |
| accordion | border | 0 0 1px 0 solid {colors.hairline} | 0 0 1px 0 solid rgba(255,255,255,0.12) |
Alerts, progress & badges
System feedback: success / info / warning / error. Alerts are neutral surfaces with a 3px status rule + icon — the status hue is never a fill. Progress fills in the yellow accent.
Saved
Your changes were saved successfully.
Heads up
A new version of the brand is available.
Check this
Some fields still need your attention.
Couldn't save
Something went wrong — please try again.
spinner — accent arc⌄ Token reference (3)
| Component | Property | Token | Resolved |
|---|---|---|---|
| alert | backgroundColor | {colors.surface-raised} | rgba(255,255,255,0.04) |
| alert | textColor | {colors.body} | #FFFFFF |
| alert | rounded | {rounded.card} | 20px |
| alert | padding | 16px 20px | 16px 20px |
| alert | border | 1px solid {colors.hairline} | 1px solid rgba(255,255,255,0.12) |
| progress-track | backgroundColor | {colors.hairline} | rgba(255,255,255,0.12) |
| progress-track | rounded | {rounded.pill} | 100px |
| progress-track | height | 6px | 6px |
| badge | backgroundColor | transparent | transparent |
| badge | textColor | {colors.muted} | #FFFFFF |
| badge | typography | {typography.badge} | {typography.badge} |
| badge | rounded | {rounded.pill} | 100px |
| badge | padding | 5.6px 13.6px | 5.6px 13.6px |
| badge | border | 1px solid {colors.hairline} | 1px solid rgba(255,255,255,0.12) |
Tables
Structured data, admin panels and reports: a muted uppercase header on a raised row, hairline row rules, body at 18px.
⌄ Token reference (3)
| Component | Property | Token | Resolved |
|---|---|---|---|
| table | backgroundColor | transparent | transparent |
| table | textColor | {colors.body} | #FFFFFF |
| table | rounded | {rounded.card} | 20px |
| table | border | 1px solid {colors.hairline} | 1px solid rgba(255,255,255,0.12) |
| table-header | backgroundColor | {colors.surface-raised} | rgba(255,255,255,0.04) |
| table-header | textColor | {colors.muted} | #FFFFFF |
| table-header | typography | {typography.badge} | {typography.badge} |
| table-header | border | 0 0 1px 0 solid {colors.hairline} | 0 0 1px 0 solid rgba(255,255,255,0.12) |
| table-cell | backgroundColor | transparent | transparent |
| table-cell | textColor | {colors.body} | #FFFFFF |
| table-cell | typography | {typography.body} | {typography.body} |
| table-cell | border | 0 0 1px 0 solid {colors.hairline} | 0 0 1px 0 solid rgba(255,255,255,0.12) |
Cards & surfaces
Raised from white at low opacity over the canvas, hairline border, 20px radius — no drop shadows. Depth comes from contrast, not material elevation.
Card title
A raised surface built from white at low opacity over the canvas, with a hairline border.
Feature
With an eyebrow
Lead with a small uppercase label, then a Sentence-case title and body.
Learn more →20px
Card radius
⌄ Token reference (1)
| Component | Property | Token | Resolved |
|---|---|---|---|
| card | backgroundColor | {colors.surface-raised} | rgba(255,255,255,0.04) |
| card | textColor | {colors.ink} | #FFFFFF |
| card | rounded | {rounded.card} | 20px |
| card | padding | 28px | 28px |
| card | border | 1px solid {colors.hairline} | 1px solid rgba(255,255,255,0.12) |
Links & eyebrow
Small text utilities. Links hover to yellow; the eyebrow is the uppercase overline above headlines.
text-linkeyebrow⌄ Token reference (2)
| Component | Property | Token | Resolved |
|---|---|---|---|
| text-link | backgroundColor | transparent | transparent |
| text-link | textColor | {colors.ink} | #FFFFFF |
| text-link | typography | {typography.body} | {typography.body} |
| eyebrow | backgroundColor | transparent | transparent |
| eyebrow | textColor | {colors.primary} | #FFD700 |
| eyebrow | typography | {typography.eyebrow} | {typography.eyebrow} |
Index rows
A large editorial line-item for indexes, section menus and directories: an optional oversized number, an uppercase title, an optional blurb and a trailing icon. On hover the whole row fills with the yellow accent in a single left-to-right wipe and the content inverts to black — the brand's one-accent-per-view rule applied to a list. This is the homepage "Explore the system" pattern, reusable anywhere a prominent list of destinations is needed.
⌄ Token reference (1)
| Component | Property | Token | Resolved |
|---|---|---|---|
| index-row | backgroundColor | transparent | transparent |
| index-row | textColor | {colors.ink} | #FFFFFF |
| index-row | typography | {typography.display} | {typography.display} |
| index-row | padding | 32px 28px | 32px 28px |
| index-row | border | 0 0 1px 0 solid {colors.hairline} | 0 0 1px 0 solid rgba(255,255,255,0.12) |
Interaction note: transitions use the
motiontokens — standardeaseat 0.3s (0.3s) for links and small state changes, 0.5s (0.5s) for button hover and large surfaces. Hover states are tokens too: each<name>-hoverentry pairs with its base component and drives the live hover state; the YAML is the source of truth for default, focus and hover alike.
Top Navigation
top-nav — A sticky bar on #1A1A1A with a blurred backdrop and no border (galton.sk's header separates by the blur alone — no rule): the canvas at ~70% opacity behind a blur(16px), 56px tall (the token's height). Carries the white wordmark lockup — the full mark with the ® and the letter-spaced BRANDS tagline (galton-wordmark-white-tagline-tight.png, ~46px tall) — at left, and the nav links at right. No button lives in the persistent nav — keep {component.button-yellow} (and any outline CTA) for the in-page calls to action (hero, forms). Links are {typography.body} — 18px, weight 300, #FFFFFF — with a 45px gap, brightening to #FFD700 (the accent) on hover; the lockup never recolours (white or black only). Below ~1400px the links collapse to a hamburger that opens a full-screen overlay.
Logo lockup
The GALTON wordmark with a superscript ® and a letter-spaced "BRANDS" tagline beneath — this is the lockup the header and footer carry (galton-wordmark-white-tagline-tight.png, white-on-dark; a black-on-light twin exists for inverted surfaces). The wordmark on its own ships as a fill="currentColor" SVG. White or black only — the lockup never turns yellow, even on hover. See "Logo & Iconography".
Buttons
All buttons: pill (100px), UPPERCASE, Galton Bold ({typography.button}), inline-flex centered, symmetric padding (15px 30px desktop), border 1px solid, transition all 0.5s ease. Labels sit dead-centre because the @font-face pins Galton's vertical metrics (see Typography → "Why the three *-override lines matter") — do not re-introduce an asymmetric "less padding at the bottom" hack; that was a workaround for the un-corrected webfont and is no longer needed. Responsive padding follows the live site: mobile 10px 25px · ≤991px 12px 20px · desktop 15px 30px.
button-yellow— The signature CTA (galton.sk.btn-yellow).#FFD700background,#1A1A1Atext,#1A1A1Aborder. Hover →#1A1A1Abackground,#FFFFFFtext,#FFFFFFborder.button-primary— A solid light button (galton.sk.btn-primary).#FFFFFFbackground,#1A1A1Atext,#1A1A1Aborder. Hover →#1A1A1Abackground,#FFFFFFtext,#FFFFFFborder.button-secondary— The outline/ghost pill on dark (galton.sk.btn-transparent-white): transparent with a#FFFFFFborder and text. Hover →#FFFFFFbackground,#1A1A1Atext. On a dark canvas this is also how the source's solid.btn-secondary(dark fill + white border) reads, so the two collapse into this one token.
Source mapping (galton.sk). The WordPress theme defines five pill variants on a light page; this dark-first system realises the same set with three tokens.
btn-yellow → button-yellow,btn-primary → button-primary, and bothbtn-secondary(solid dark) andbtn-transparent-white(transparent) →button-secondary(they're visually identical on the#1A1A1Afloor). The fifth,btn-transparent(black border + text, hover → yellow text), is a light-surface-only outline — on light, overridebutton-secondary's white border/text to#1A1A1A, exactly as the form note describes.
Inputs & Forms
Dark-first: transparent background, bottom-border only, primary-yellow focus. On light surfaces, override the white border/text to black.
text-input— Flat (0px), transparent,#FFFFFFbottom border, height 53px,{typography.body}/300, placeholder#FFFFFF. Focus → border#FFD700.textarea— Flat, hairline (rgba(255,255,255,0.12)) bottom border, min-height 120px, vertically resizable. Focus →#FFD700.select— Flat,#FFFFFFbottom border, height 53px,appearance: none. The native arrow is replaced by the brand chevron (grey "V") at the right, padding-right 30px, weight 300,#FFFFFFtext. Focus →#FFD700. (Sourced from the galton.sk contact form.)checkbox— Flat square (0px),#FFFFFFborder, 30px → 45px@1024, fills with a white square on:checked, focus →#FFD700. Pair with a label in{typography.body}/300 inside a flexform-checkrow.label—{typography.label}(Galton Light),#FFFFFF, block, 8px bottom margin.
Links, Eyebrow & Badge
text-link—color: inherit, no underline, hover/focus →#FFD700(primary). Transitioncolor 0.3s ease.eyebrow— Small uppercase label above headlines:{typography.eyebrow},#FFD700.badge— Neutral pill chip for meta/status/version on dark:{typography.badge},#FFFFFF,rgba(255,255,255,0.12)border,100px.
Cards & Containers
card — rgba(255,255,255,0.04) background, rgba(255,255,255,0.12) border, 20px (20px), ~28px padding, no drop shadow. (Detailed card patterns are not yet fully specified — see Known Gaps.)
Footer
footer — #1A1A1A with a rgba(255,255,255,0.12) top border, everything centered: the white wordmark lockup big (~80px tall) above two copy lines in #FFFFFF at 18px — the © line and the brand/website line. ~80px vertical padding. The footer never inverts.
Selection controls
The choice family shares the flat, dark-first language. The accent (#FFD700) marks the chosen state — never red or green.
checkbox— Flat square (0px),#FFFFFFborder, 30px; fills with a white square on:checked. Multi-choice, consent, filters.radio— The round sibling: a circle (100px),#FFFFFFborder, 30px; fills with a white dot on select. Single-choice from a set.toggle/toggle-on— A 52×30 pill switch. OFF =rgba(255,255,255,0.12)track; ON =#FFD700track (toggle-on) with a white knob. On/off preferences and settings.slider-track/slider-fill/slider-thumb— A 4pxrgba(255,255,255,0.12)track; the filled portion is#FFD700(yellow, never red); a 18px white thumb. Ranges, budgets, percentages.
Steppers & search
stepper— A numeric input with−/+controls (stepper-button: ghost,rgba(255,255,255,0.12)border,10px). The field stays flat (bottom-border only) liketext-input. Quantities, counts.search— A flat bottom-border input with a leading search icon (32px left padding). Focus →#FFD700. In content-heavy chrome a100pxcontained variant is allowed.
Tags, chips & multi-select
tag— An interactive, removable filter chip:100px,rgba(255,255,255,0.04)background,rgba(255,255,255,0.12)border,#FFFFFFtext, a muted×. Distinct from the staticbadge.tag-active— The selected state goes ink-filled (white background, black text) — never tinted red/green. A multi-select is a row of tags plus the input.
Tabs, breadcrumbs & pagination
tab/tab-active— Underline tabs. Inactive =#FFFFFFwith argba(255,255,255,0.12)rule; active =#FFFFFFtext with a 2px#FFD700underline. Switch sections without leaving the page.breadcrumb/breadcrumb-current— Muted segments separated by a chevron; the current page is#FFFFFF. Shows position in a hierarchy.pagination-item/pagination-item-active— 44px pill buttons,rgba(255,255,255,0.12)border; the current page is ink-filled (not yellow — yellow stays the single CTA). For lists, search results and feeds.
Menus, modals & tooltips
menu/menu-item— A dropdown/popover panel:rgba(255,255,255,0.04),rgba(255,255,255,0.12)border,10px; items hover to a raised row. An actions menu, distinct from the nativeselect.modal— A dialog panel:rgba(255,255,255,0.04),rgba(255,255,255,0.12)border,20px, 32px padding, over a#1A1A1A-at-~70% scrim. Confirmations, forms, prompts. No drop shadow.tooltip— Inverted for contrast over dark content:#FFFFFF(white) background,#1A1A1A(black) text,10px, badge-size text. Short hover/tap explanations.
Accordion & FAQ
accordion / accordion-content — Replicated from galton.sk. A vertical stack of rows divided by rgba(255,255,255,0.12) rules (no card, no fill); each header is a question in {typography.subhead} (Galton Light) with a chevron that rotates 180° when open, tinting to #FFD700. Single-open by default — opening one row closes the rest (match the source). The body (accordion-content) is {typography.body}. Height animates open/closed (~0.3s); the header is a real <button> with aria-expanded/aria-controls for accessibility (the source had none — this is the on-brand, accessible version). Use for FAQs, long-form Q&A, and progressive disclosure of dense content (e.g. the per-tool setup guides on the "For AI agents" page). On a light surface, the dividers and chevron flip to #1A1A1A.
Alerts, progress & tables
alert(+alert-success/-warning/-error/-info) — A neutralrgba(255,255,255,0.04)notification with a 3px left rule + icon in the status colour — the hue is never a fill. Success / error / warning / info messages. See "Status & feedback colours".progress-track/progress-fill— A 6pxrgba(255,255,255,0.12)track with a#FFD700fill (never red). For a spinner, rotate a single-arc ring in#FFD700; for steps, a row ofrgba(255,255,255,0.12)rules with the current step in yellow.table/table-header/table-cell—rgba(255,255,255,0.12)outline (20px); header isrgba(255,255,255,0.04)with#FFFFFFuppercase 15px labels; cells are#FFFFFFat 18px with hairline row rules. Structured data, admin panels, reports.
Side navigation
side-nav/side-nav-item/side-nav-item-active— A vertical nav with argba(255,255,255,0.12)right edge. Items are#FFFFFF, brightening to#FFFFFFon hover; the active item carries a 2px#FFD700left rule on argba(255,255,255,0.04)row. Pair with a top-nav for an app shell; collapse to a hamburger on mobile.
02 — Black on white
Black on white

On a light surface
Black on white, the same system.
GALTON is dark-first, but every surface inverts cleanly for print, email and documents — the neutrals flip, the accent stays.
The logo becomes its black wordmark, type and spacing are unchanged, and the only color that survives the flip is the signature yellow — used just as sparingly.

© 2026 GALTON Brands. All rights reserved.
The official brand system: design, voice and assets. · galton.sk
