The Marble Shrine: Style Guide
Actions
Button
.btn
One button, four modifiers. Square corners (--radius-btn),
uppercase Spectral, accent-driven. --primary fills,
--ghost outlines in the hairline color, --sm
compacts. Every call-to-action on the site is this class.
Icon button
favorite · play
Compact circular actions for in-context toggles. The mark is inline
SVG inking currentColor, the same icon set the favorite
button and audio player use. Accent on the active state.
Danger button
.danger-btn
Destructive actions outline in --danger and fill on hover.
Reserved for irreversible operations (delete account), inside a
hairline "danger zone" section.
Segmented control
view · scale togglesA pair (or few) of buttons sharing a border; the active one fills accent. Used for grid/table views and the profile chart scale toggle.
Forms & inputs
Text input
.input
Page-background fill, hairline border, card radius, font: inherit
(Spectral). Focus rings the accent; aria-invalid rings
--danger. One shared class (src/styles/forms.css)
replaces the per-page field CSS the auth and contact pages had grown.
Textarea
.textareaSame field treatment, vertically resizable, min-height floor.
Select
.selectNative select, same field treatment. Drives the catalog sort and facet dropdowns.
Labeled field
.field · help · error
Label, control, and a help or error line stacked. The label is the
eyebrow treatment; the error is --danger with
role="alert". Pairs with aria-invalid on the input.
Filter chip
category filter
Pill-shaped toggle with a live count. Active uses --accent-soft;
tracking tightens to --track-chip at this size.
Selection controls
These were native and unstyled across the site. Now styled into the design system (src/styles/forms.css) and reusable everywhere.
Checkbox
.check
Custom box on the site's field language: hairline border, accent fill +
checkmark when checked, --accent-soft focus ring. Used for
the shows filter facets and the contact form.
Radio
.radioSame treatment, round, filled-dot when selected. Used for the account-merge picker.
Switch
.switch
An on/off toggle built on a real checkbox (accessible by default). The
track fills --accent-soft and the knob slides to accent
when on. For binary settings where a chip toggle would read as a filter.
Range slider
.range
Themed track and thumb. The audio player scrubber uses the lighter
accent-color version; this is the fuller styled slider for
settings-style controls.
Content & surfaces
Card
ui/CardTokyo, Japan · 3 shows
Renders a <div> when no href
The standard elevated surface: --bg-elev, hairline,
card radius, elevate-on-hover. Renders an <a> when
given an href, else a <div>.
Pill
ui/PillSmall rounded status/source tag with three variants. Jump links, format tags, verify chips.
Badge
membershipAccount status on the profile page. Admin fills accent; subscriber uses accent-soft; free is muted.
Eyebrow
.eyebrowAbout
The mark
The one small uppercase label: --fs-2xs with --track-label. Sits above titles.
Section header
ui/SectionHeaderSetlist
18 songsSection heading with an optional right-aligned meta slot for chips or counts.
Media grid
ui/MediaGrid · .media-grid
The one responsive tile/card grid, with an overflow guard and a
two-column mobile floor. Pages set --grid-min/--grid-gap.
Table
tabular data| Token | Role |
|---|---|
--fs-md | Body |
--fs-sm | Secondary |
Uppercase tracked heads, hairline row rules.
Disclosure
<details>All eras (alphabetical)
Native <details>, styled. Used for the eras index and the header account menu.
Progressive-enhancement disclosure, no JS. Chevron rotates on open.
Feedback & status
Empty state
undocumented setlistDashed hairline frame, quiet copy, always a contribution link. The archive's "help us fill this in" moment.
Progress bar
role="progressbar"Pill track, accent fill, animated width. The fundraising goal on the support page.
Source badge
tape lineageThe one place fixed, non-theme colors are allowed. Each encodes a recording's source lineage.
Support banner
calloutAccent left-rule callout for the recurring support ask.
The tokens behind these
The palette, type scale, and spacing every component above is built from.