Feature heading
Top border in the accent color signals visual priority. Good for homepage feature grids and tiered comparison.
- Supporting detail
- Another detail
- One more detail
Every design token, typographic specimen, component, and interaction pattern on the site — in one place.
Project Broadsheet's palette is newsprint — warm ink-on-paper by default, deep navy-black in dark mode. Every value is a CSS custom property in tokens.css.
All borders and divider lines use semi-transparent text colors so they adapt automatically across themes.
Four typefaces do all the work. All are served from Bunny Fonts with system-font fallbacks.
Hero titles, masthead, page titles, decorative numerals.
Subheads, card titles, article headlines.
Article and page body copy — 17px base, 1.7 line-height.
All UI chrome — nav, buttons, form labels, metadata.
Fluid type scale via clamp(). Each step is defined in tokens.css and adjusts between a mobile minimum and a desktop maximum.
A consistent rhythm from 4px to 120px. Use spacing tokens — never hardcoded values.
All buttons meet the 44×44px minimum touch target. Hover states have explicit color to beat parent link overrides.
<button class="btn btn--primary">Primary</button>
All inputs are minimum 44px tall, use the UI typeface, and have a visible focus ring distinct from the hover state.
A short summary describing what's on the other side of this link. Usually 1–2 sentences.
Same visual style, without hover behavior.
Top border in the accent color signals visual priority. Good for homepage feature grids and tiered comparison.
The fastest way to a live publication.
Launch plus a custom look and migrated archive.
White-glove for serious publications.
A softer box with more room for prose. Good for sidebars, notes, and supplementary context within a longer article.
Data-dense comparison tables use .compare-table wrapped in .table-wrap for horizontal overflow on small screens.
| Criterion | Option Afree | Option B$9/mo |
|---|---|---|
| Starting cost | $0 | $9/mo |
| Ownership | Full | Partial |
| Lock-in risk | None | Low |
Icons are inline SVG, 24×24 viewBox, stroke-width: 2, fill: none, and currentColor so they inherit text color in light and dark modes.
Every site-wide pattern we use to meet WCAG 2.2 AA — in one place, with live demos.
Press Tab on any page. The first focusable element is a "Skip to content" link that jumps past navigation.
Every interactive element shows a 2px vermillion outline with 3px offset on keyboard focus. Click the button below, then press Tab to see it.
Use .sr-only to hide content visually while keeping it accessible to assistive tech.
<label class="sr-only" for="email">Email</label> <input id="email" type="email" placeholder="you@example.com">
All animations and scroll-behavior honor prefers-reduced-motion. Enable the OS-level setting, and motion drops to 0.01ms.
role="banner" on site header, role="contentinfo" on footeraria-label on every icon-only button and every navaria-current="page" on active nav and sidebar linksaria-hidden="true" on decorative SVGs<main id="main"> as the skip-link targetEvery interactive element is a minimum of 44×44 CSS pixels — buttons, nav links, form inputs, theme toggle, hamburger, back-to-top, sidebar links.
All text/background pairings target WCAG AA minimums: 4.5:1 for normal text, 3:1 for large text and UI components. Most exceed AAA.
| Pairing | Ratio | AA normal | AA large | AAA |
|---|---|---|---|---|
| Ink on Paper | 15.6 : 1 | Pass | Pass | Pass |
| Ink soft on Paper | 12.4 : 1 | Pass | Pass | Pass |
| Muted on Paper | 7.1 : 1 | Pass | Pass | Pass |
| Vermillion on Paper | 5.2 : 1 | Pass | Pass | — |
| Slate on Paper | 6.8 : 1 | Pass | Pass | Pass |
| White on Vermillion | 5.4 : 1 | Pass | Pass | — |
| Paper on Ink (inverted) | 15.6 : 1 | Pass | Pass | Pass |
Ratios above are for light mode; dark mode values are derived and independently verified at identical or better contrast.