03 · GALTON AI Assets
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 |
App chrome
Sticky 56px top bar, the footer, and a vertical side-nav — all on the canvas with a hairline edge. The active side-nav item carries a yellow rule; the persistent top-nav CTA is the outline pill, never yellow.
⌄ Token reference (4)
| Component | Property | Token | Resolved |
|---|---|---|---|
| top-nav | backgroundColor | {colors.canvas} | #1A1A1A |
| top-nav | textColor | {colors.ink} | #FFFFFF |
| top-nav | typography | {typography.body} | {typography.body} |
| top-nav | height | 56px | 56px |
| top-nav | border | none | none |
| side-nav | backgroundColor | transparent | transparent |
| side-nav | textColor | {colors.body} | #FFFFFF |
| side-nav | rounded | {rounded.none} | 0px |
| side-nav | border | 0 1px 0 0 solid {colors.hairline} | 0 1px 0 0 solid rgba(255,255,255,0.12) |
| side-nav-item | backgroundColor | transparent | transparent |
| side-nav-item | textColor | {colors.muted} | #FFFFFF |
| side-nav-item | typography | {typography.body} | {typography.body} |
| side-nav-item | rounded | {rounded.component} | 10px |
| side-nav-item | padding | 10px 14px | 10px 14px |
| footer | backgroundColor | {colors.canvas} | #1A1A1A |
| footer | textColor | {colors.muted} | #FFFFFF |
| footer | typography | {typography.body} | {typography.body} |
| footer | padding | 72px | 72px |
| footer | border | none | none |
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} |
Interaction note: buttons and inputs use a standard
easeover ~300–600ms. Hover states are described in prose; default (and focus) states are the source of truth in the YAML.
Top Navigation
top-nav — A 56px sticky bar on #1A1A1A with a blurred backdrop and no border (galton.sk's header separates by the blur alone — no rule). Carries the wordmark lockup at left — embed galton-wordmark-white.svg (don't retype the letters) — and a set of in-page anchor links + at most one compact secondary (outline) pill CTA at right ({component.button-secondary}, with the button typography). The yellow button does not belong in the persistent nav — keep {component.button-yellow} for the primary in-page CTA (hero, forms). Links are {typography.body} in #FFFFFF, brightening to #FFFFFF on hover.
Logo lockup
The white GALTON wordmark (vector SVG, fill="currentColor") plus a superscript ® and a letter-spaced "Brands" tagline beneath. 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}/400, 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, #FFFFFF text, a rgba(255,255,255,0.12) top border, centered wordmark lockup + copy. ~72px 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.
