The Marble Shrine: Style Guide

Actions

Button

.btn
Primary Default Ghost

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 toggles

A 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

.textarea

Same field treatment, vertically resizable, min-height floor.

Select

.select

Native select, same field treatment. Drives the catalog sort and facet dropdowns.

Labeled field

.field · help · error
We only use this for password resets.
Enter a valid email address.

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

.radio

Same 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/Card
Zepp Tokyo
Tokyo, Japan · 3 shows
Non-link card
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/Pill
Neutral Accent ✓ Verified Link pill

Small rounded status/source tag with three variants. Jump links, format tags, verify chips.

Badge

membership
Admin Subscriber Free tier

Account status on the profile page. Admin fills accent; subscriber uses accent-soft; free is muted.

Eyebrow

.eyebrow

About

The mark

The one small uppercase label: --fs-2xs with --track-label. Sits above titles.

Section header

ui/SectionHeader

Setlist

18 songs

Section heading with an optional right-aligned meta slot for chips or counts.

Media grid

ui/MediaGrid · .media-grid
Tile 1
Tile 2
Tile 3
Tile 4

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
TokenRole
--fs-mdBody
--fs-smSecondary

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 setlist
This setlist isn't documented yet. Know what they played? Have a tape? Send it our way. Every set we add is one fewer lost to time.

Dashed 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 lineage
AUD SBD MTX FM

The one place fixed, non-theme colors are allowed. Each encodes a recording's source lineage.

Support banner

callout
Keep The Shrine Standing

Real servers, storage, and bandwidth. If it's been worth something, help keep it online.

Support

Accent left-rule callout for the recurring support ask.

The tokens behind these

The palette, type scale, and spacing every component above is built from.

Design system