Switchboard ← All documents
Sea Brand for Switchboard

Switchboard Design System

All 103 Oxygen Builder selectors documented. Live examples use the actual classes — update a class in your stylesheet and this page reflects it automatically. Variables follow the confirmed convention: no color or space prefix, no font-family declarations. Body font: Poppins. Heading font: Amifer.

Built from selectors.json · global-settings.json · May 2026

Section 1

Global Tokens

Defined in Oxygen Global Settings. Not classes themselves — the foundation everything is built on. Body font updated to Poppins; Amifer used for headings.

Colour Palette

Brand
--brand
#360568
Purple
--purple
#7209B7
Background
--background
#F9F5E3
Oldlace
--oldlace
#F9F5E3
Salmon
--salmon
#FF595E
Red
--red
#A90000
News BG
--news-bg
#FBE7C1
Black
--black
#190825
White
--white
#FFFFFF

Brand Gradient

Defined in Oxygen palette. Used in .bg-grainy-gradient and the footer. Linear, 163°, brand purple → salmon.

Spacing Scale

--xs · 0.5rem · icon gaps, tight stacking
--s · 1rem · also the standard border-radius value
--m · 1.5rem · standard padding & gaps
--l · 2rem · margin-bottom-m target
--xl · 3rem · section vertical padding
--xxl · 4rem · large top offsets

Typography

Live — type scale
.text-size-jumbo
.text-size-medium
.text-size-small (1.2rem)
.text-size-sm (1rem)
.text-medium-small
.text-size-extra-small (new)

Section 2 · Collection: Text styles

Text Styles

Applied directly to text elements. Colour and size classes are composable — stack them freely.

.headline
All pages

Bold (700) with bottom margin. Applied to h-tags on cards, service pages, hub pages, and staff sections. Has custom CSS in Oxygen — check for additional overrides.

Live

Training & Services at Switchboard

.hero_paragraph
Responsive at phone-landscape
HomepageHub pages

Larger introductory body text (~1.25rem) with bottom margin. Used for the first paragraph under a hero heading. Scales down on mobile.

Live

Switchboard is a charity for LGBTQ+ people looking for community, support or information.

.text-size-jumbo
Responsive at phone-landscape + phone-portrait
Homepage heroService hero

Large display text (~3.5rem). Hero headlines. Shrinks on mobile. Pair with .headline for bold weight.

Live
The Place for Community.
.text-size-medium
Service pagesHub pages

Mid-size text (~1.25rem). Section subheadings and lead copy.

Live

Supporting LGBTQ+ people across Brighton & Hove.

.text-size-small
CardsPost meta

Set to 1.2rem. Used for card descriptions and metadata.

Live

Posted 27 April 2026 · 3 min read

.text-size-sm

References the same Oxygen variable as .hero_paragraph (~1rem). Use for body-scale text that needs to be slightly smaller than the default.

Live

Body-scale text at sm size.

.text-size-extra-small
New

Smallest text size (~0.75rem). References Oxygen's xs spacing variable. Use for legal copy, fine print, and metadata labels.

Live

Reg Company No 03920445 · Charity No 1088133 · All Rights Reserved

.text-medium-small

In-between size (~0.9375rem). Use for secondary body copy that sits between .text-size-sm and the base size.

Live

Medium-small scale text.

.text-weight-bold

Forces font-weight 700 on any element. Also has a border property set in Oxygen — verify this is intentional.

Live

Normal text alongside .text-weight-bold.

.text-color-meski-black
.text-color-white
.text-color-salmon
.text-color-oldlace
All pages

Colour overrides for text. .text-color-meski-black sets text to #190825 (the updated near-black with a slight purple tint). .text-color-white has additional custom CSS. Use to reverse text on dark backgrounds or apply accent colour.

Live

Near-black text (.text-color-meski-black)

White (.text-color-white)

Oldlace (.text-color-oldlace)

Salmon (.text-color-salmon)

.link-color-salmon
.link-color-white
FooterDark sections

Custom CSS classes that override anchor colour within a container. Apply to the wrapper element, not the link itself. Note: the global links colour now references salmon via the Oxygen palette variable.

Section 3

Backgrounds

Applied to section and card wrappers to set background colour, gradients, or imagery.

.bg-white
CardsNavigation

White background with border-radius (10px) and padding. Used for card containers on coloured backgrounds and the navigation wrapper.

Live
White card on brand background
.news-section
Homepage news strip

Warm cream (#FBE7C1) with 5% vertical padding. Used for the homepage news section.

Live
Cream background section
.frosted-card
Service hero overlay

Semi-transparent white (23% opacity) with backdrop-blur and shadow. Used for cards over image or gradient backgrounds. Requires isolation: isolate on parent to work correctly in Safari.

Live

Frosted glass card

.bg-grainy-gradient
Sections & Wrappers
Background intentionally cleared at tablet-portrait
Governance heroService heroes

Multi-layer background: the brand gradient (brand purple → salmon, 163°) with a grainy texture blended via multiply. Has isolation: isolate in custom CSS to fix Safari blend mode bug. Background is cleared at tablet-portrait breakpoint — re-apply per page if needed. Also cleared at tablet-landscape and phone-landscape.

Live
.cc-pink_bg
.cc-brown_bg
Decorative overlays

Fixed-position decorative SVG ellipses (pink/salmon and brown tones). Z-index -1 so they sit behind content. Used as layered page background accents.

.bg-image

Sets background-size: cover and background-position: center via custom CSS. Apply alongside Oxygen's background image setting or an inline style.

.bg-news
⚠ Empty — no properties defined

Currently empty. Either define styles or remove in favour of .news-section exclusively.

Section 4

Cards & Components

The primary repeating UI element — used across services, news, training hub, and hub pages.

.card
Min-height collapses at phone-portrait
ServicesNewsTraining hubHubs

Base card container with min-height. Combine with .bg-white .card-padding .shadow-s .borders-rounded-s for a complete card.

Live — full card pattern

Service Title

Short description of the service.

.card-padding

Internal padding (--m) for card content. Kept separate so it can be applied or overridden independently.

.card-image
News cardsService cards

Fixed 220px height, object-fit: cover, full width, rounded corners, bottom margin. Apply to img tags inside cards.

Live
.card_heading-wrapper
All cards

Flex row for heading + optional icon. Centres items with xs gap and bottom margin.

Live

Card Heading with Icon

.card_link-container

Flex container for the link or button at the bottom of a card.

.card_content-grid

2-column grid used inside a card for side-by-side text + image or text + icon layouts.

.tag
News cardsPost meta

Salmon pill label with white text. Used for news categories (Jobs, Training, News etc.).

Live
JobsTrainingNews
.shadow-s
Decorative classes
CardsForm fields

box-shadow: 0 2px 12px rgba(0,0,0,0.1). Used on cards and Gravity Forms input fields instead of borders.

Live
Card with .shadow-s

Section 5

Staff Components

Used on How We Are Managed and pulled dynamically into service pages via ACF relationship + PHP code block.

.staff-card
⚠ Empty — define styles
How we are managedService pages

Wrapper for staff member cards. Currently a placeholder — add border-radius, padding, and white background here to control all staff cards globally.

Live — suggested pattern

Alex Smith

he/him

Service Lead

.staff-image

Circular image (border-radius: 50%) with object-fit: cover. Apply to the staff photo img tag — constrain width via parent.

.staff-name_wrapper

Flex row for staff name and optional pronoun badge. Aligns items centrally with xs gap.

Section 6

Layout & Grid

CSS grid and flex containers for page layout. Most grid classes collapse to a single column on mobile.

.grid_2-columns
Collapses at phone-landscape
HeroService heroCTA

2-column CSS grid with --m gap. The core layout class — used across hero sections, service split layouts, and CTA blocks.

Live
.grid_4-columns
Collapses at phone-landscape
Feature gridsIcon rows

4-column grid. Used for icon/feature rows and partner logo grids.

Live
.we_do-card_wrapper
Homepage — What We Do

2-column grid with a tighter 14px gap (vs --m). Used for the hub cards on the homepage.

Live
.news_grid
Homepage newsNews archive

3-column grid for news card listings.

Live
.RWP_wrapper
Collapses at tablet-portrait + phone-landscape
Recover with Pride subpages

280px fixed sidebar + fluid content column. Used across all RWP subpages. Now also collapses at phone-landscape.

Live
.post-loop-builder-1
Changes at phone-landscape
News loop

Flex container for Oxygen's news post loop.

.post-loop-builder-2
Secondary loop

3-column grid loop layout.

.grid

Generic grid container with margin. Use when no specific column-count class is needed.

.container-1

Basic flex container.

Section 7 · Collection: Sections & Wrappers

Section Wrappers

Page-level containers. Most have responsive overrides at multiple breakpoints.

.section-hero
Responsive at all 4 breakpoints
HomepageHub pages

Full viewport height hero with horizontal padding. Has the most responsive overrides of any class — sizing and padding adjust at all four breakpoints.

.section-small-hero
Responsive at all 4 breakpoints
GovernanceWho we areInner pages

Shorter hero (~40vh) for inner pages that don't need a full-screen treatment.

.hero-wrapper
Responsive at tablet-portrait, tablet-landscape, phone-landscape
Homepage

Now set to display: block at base (updated from flex). Contains the hero content and CTA. Responsive overrides adjust layout at tablet and below.

.hero_content
⚠ Empty — define styles

Placeholder wrapper for hero text content. Add padding or alignment styles here to control the hero layout globally.

.hero_cta
display:none at tablet-landscape
Homepage hero

Wrapper for the hero CTA button(s). Now has a responsive rule — hidden at tablet-landscape. Previously empty at base; check Oxygen for base styles.

.service-hero-wrapper-cta
Hidden at tablet-portrait and below
Service pages

Right column of the service hero. Oldlace background with centred content — displays the referral form. Hidden on mobile.

.section-what-we-do
.we_do-wrapper
Homepage

.section-what-we-do sets vertical margin. .we_do-wrapper is an inner positioning context — currently empty.

.cta-section
.cta_content-wrapper
.cta_copy-wrapper
.cta_content-wrapper collapses at tablet-portrait
Homepage

Three-layer CTA: .cta-section = outer flex wrapper; .cta_content-wrapper = 2-column rounded card (min-height 20rem); .cta_copy-wrapper = left column grid for stacked copy.

Live

Make a difference today

Donate
.navigation_wrapper
Global — all pages

Sticky top nav bar. White background, flex layout, border-radius, position: sticky, z-index: 100, shadow.

.header-builder-1
Has tablet-landscape override
Global header

Outer header block wrapper. display: block + custom CSS.

.content-area
Inner page templates

Main content margin wrapper for page templates. Sets 5% horizontal margin.

.pages_pitch-container
Who we areHub pages

Wide margin container for pitch/intro copy sections. Sets horizontal margin to 5%.

Section 8

Recover With Pride Components

Classes specific to the RWP service and its subpages.

.RWP_menu
⚠ Empty — define styles
RWP subpages

Left sidebar navigation for RWP subpages. Links to all sub-sections: LGBTQ+ Resources, Recovery Resources, 1:1 Coaching, Group Coaching, Blocking & Exclusions, Affected Others, Research Overview, Our Partners. Define visual styles here.

.RWP_content
⚠ Empty — define styles
RWP subpages

Right content column on RWP subpages. Displays the resource accordion and page body. Add padding here.

.RWP_accordion
RWP resource subpages

Wrapper for the resource accordion. Has custom CSS — see the accordion stylesheet (.rwp-accordion-item / .rwp-accordion-trigger / .rwp-accordion-body). Pulls Post Title + Post Content from RWP Resource CPT via Oxygen repeater + PHP code block with setup_postdata($post). Query fed by ACF relationship field using WP_Query array with wp_list_pluck.

Section 9 · Collection: Utility classes

Utility Classes

Single-purpose helpers. Apply to any element for targeted overrides.

.global_padding
.section-padding

.global_padding = --m vertical + 5% horizontal. .section-padding = --xl vertical + 5% horizontal. Use on outer section wrappers needing consistent gutters.

.utility_top-padding-0

Removes top padding. Use to butt a section directly against the one above it.

.utility_top-bottom-padding-10
New

Sets both top and bottom padding to 10%. Use on full-width sections that need generous vertical breathing room relative to the viewport — particularly hero-adjacent sections.

Live
10% padding top & bottom
.flex-align-center
.utility_content-center

Both set display: flex with both axes centred. Apply either — they are functionally identical. .utility_content-center also has a phone-landscape breakpoint override.

Live
Centred content
.utility-content-right
.utility_content-align-top
.utility_content-align-left

Alignment utilities for flex containers. Right-aligns, top-aligns, or left-aligns flex content respectively. .utility_content-align-top is currently empty — add align-items: flex-start before use.

.flex-flow-column
⚠ Empty

Intended for flex-direction: column. Add the property before use.

.borders-rounded-s

Applies border-radius: 10px (--radius). Use on any element needing rounded corners not inherited from a component class.

Live
Without vs with
.full-height
.utility_50vh
.utility_50vw
.utility_min-height-20rem

Size utilities. .full-height = 100vh. .utility_50vh/.utility_50vw = split panels. .utility_min-height-20rem = prevents sections collapsing when content is sparse.

.utility_blend_multiply
Decorative layers

mix-blend-mode: multiply at 60% opacity. Used to blend decorative elements and grain textures into coloured backgrounds.

Live
.utility_horizontal-columns
⚠ Empty

Placeholder for a horizontal scrolling layout. Define before use.

Section 10

Spacing Utilities

.margin-bottom-xs

margin-bottom: --xs (0.5rem). Tight stacking.

.margin-bottom-m

margin-bottom: --l (2rem). Standard breathing room between groups.

.margin-top-s

margin-top: --s (1rem). Light top spacing.

.margin-top-xxl

margin-top: --xxl (4rem). Large offset — used after full-height hero sections.

Section 11

Icons & Image Sizes

.icon-xs
Card headings

1.5rem × 1.5rem. Small decorative icons next to card headings.

Live

Icon XS next to text

.icon-s
Social linksNav

2rem × 2rem. Social media icons and navigation icon buttons.

.image-size-icon

Non-square icon (~3rem × 2rem). For wider-format partner logos or feature icons.

.image-service-logo
Service pages

Auto-width, ~3rem height. Partner/funder logos on service pages.

.social-icon
Footer

Salmon-coloured icon with padding, size, and border-radius. Applied to social SVG icons in the footer.

Live
.post-image
News cards

Full-width, 220px fixed-height news card image with object-fit: cover.

.service-image
Service pages

Full-width image with object-fit: cover. Currently set to display: none in Oxygen — verify this is intentional or a work-in-progress.

.image-1

position: relative. Used to position an image element within a relative stacking context.

Section 12

Post & News Meta

.post_meta
News cardsPost templates

Flex row (font-weight 600) for the post metadata row. Contains tag + date + author. Also has border-radius and margin.

Live
.post_meta-wrapper

Flex row with xs gap for grouping meta elements.

.post_meta-author

Flex row for author name and avatar thumbnail.

.social-link-wrapper
FooterStaff cards

Flex row for social icon links with xs gap and bottom margin.

Section 13

Footer

Global footer template applied to all pages.

.footer
Global — all pages

Outer footer wrapper. The background (brand purple + grainy texture blend) is now applied directly in Oxygen on the element rather than via this class — the class itself is currently empty in selectors.json. Padding and layout are still set here via Oxygen.

Live
.footer_links-wrapper
Collapses at tablet-portrait

Flex row for navigation link groups (Services, Company, Legal, Partners, Follow us).

.footer_links

Padding container for individual footer link column groups.

.footer_logo-wrapper
Collapses at tablet-portrait

Flex container for footer logo, charity number, and company reg. Bottom padding separates it from the links row.

.footer-jumbo
Scales at tablet-landscape, tablet-portrait, phone-landscape

Large decorative typographic element at very low opacity. White, relative position. Scales down significantly across breakpoints.

Section 14

Empty Classes — Define or Remove Before Handover

These classes exist in Oxygen's selector library but have no properties defined at the base breakpoint. Define styles, or remove them to keep the selector library clean.

.cta_headline
⚠ Empty

Reserved for the CTA section headline. Add font-size, colour, and weight to control it globally. Has a tablet-portrait breakpoint override — add base styles to match.

.circle-pattern
⚠ Empty

Placeholder for a repeating circle pattern. Define or remove.

.text-shadow
⚠ Empty

Placeholder for a text-shadow effect. Define or remove.

.menu_button
Has phone-landscape override

Mobile hamburger menu toggle. Empty at base — has a phone-landscape override. Check Oxygen for what's applied at that breakpoint.

.staff-card
.RWP_content
.RWP_menu
.hero_content
.we_do-wrapper
.flex-flow-column
.utility_horizontal-columns
.utility_content-align-top
.bg-news
⚠ All currently empty

Structural placeholder classes. Styles are currently applied inline in Oxygen on individual elements. Define CSS here to manage these globally, or remove unused ones to keep the selector library tidy.

Variable convention — no color or space prefix. Use --brand, --salmon, --m, --xl etc. Font-family declarations omitted — managed globally in Oxygen.
Body font updated to Poppins (gfont-poppins). Amifer remains in use for headings via the global stylesheet.
Links colour now references Salmon via the Oxygen palette variable (--bde-palette-color-1-f03a3b08...).
Text colour updated to #190825 — near-black with a subtle purple tint.
⚠ 10 empty classes in Section 14 require action before handover.