Triumph Brand · Dashboards Mode

Designed
for the screen.

The Triumph design system, recalibrated for long-session dashboards. Same green. Same identity. Calmed slate canvas, Inter doing the work Fabiola was never built for, dashboard-tight spacing, restrained chroma.

Audience
Staff & ops tools
Default mode
Dark (light opt-in)
00 / READ THIS FIRST

Building a Triumph dashboard? Start here.

This site is the operating manual for any AI agent (Claude, ChatGPT, Copilot, etc.) tasked with building, editing, or reviewing a Greenville Triumph staff-facing dashboard. The numbered sections below are documentation. What follows is operating procedure. Follow it exactly.

Machine-readable summary at /llms.txt.

01The link snippet (paste into <head>)
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300..900&family=Space+Grotesk:wght@400..700&family=JetBrains+Mono:wght@500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://dashboards.greenvilletriumph.club/tokens.css">
<link rel="stylesheet" href="https://dashboards.greenvilletriumph.club/components.css">

Three fonts: Inter (body + h1), Space Grotesk (h2/h3/h4), JetBrains Mono (data and labels). Fabiola Capitals loads automatically from tokens.css via @font-face, no extra import needed.

02Hard rules (non-negotiable)
  • Fabiola Capitals: .h-display hero only. Weight 400, tracking normal, no text-transform. Inter handles h1 and body. Space Grotesk handles h2/h3/h4 (geometric grotesque, structural confidence at heading scale, doesn't compete with Fabiola).
  • No hardcoded colors in CSS. Use var(--token-name). The Chart.js dataset exception applies because Canvas cannot resolve CSS vars; use tok('--green') et al. for series.
  • Decorative palette is fixed: green, royal blue, coral, soft purple. Yellow and lime are status-only.
  • Sharp edges. border-radius: 0 everywhere except --radius-full for pills and --radius-cta (2px) for CTA buttons.
  • No transform: scale() on hover. Use translateY(-2px) plus a shadow lift.
  • No gradient backgrounds at page or section level. Body is flat var(--color-bg). Small decorative gradients on a KPI top bar or hover border are fine.
  • Brand fidelity: --color-accent is exact Brandpad green (#61a631). Surfaces are hue-aligned with Greenville Blue. Text hue-aligned with Upstate Fog.
03Wrong system check

Building a sponsor deck or proposal slide? Stop and use design.greenvilletriumph.club (the Proposal Decks system). That one is poster-tuned, not for dashboards.

Need the strict external brand reference for logos, kit print, or official color/type rules? brandpad.io/greenville-triumph is authoritative.

Building any Triumph staff-facing dashboard (tickets, inventory, pricing, premium, projections, commission, sales reports)? This site is the source. Keep reading.

04Starting a new dashboard

Copy the starter at /starter/. It is single-file, pre-wired with the design system, dark-mode lock, theme toggle, sticky nav with scroll-spy, and five placeholder sections (hero, KPI band, Chart.js trend, table with totals, tabs + segmented control). Customize the TODOs, deploy.

05Dark-mode declaration (paste verbatim)
<meta name="color-scheme" content="dark light">
<meta name="supported-color-schemes" content="dark light">
<meta name="darkreader-lock">
<meta name="theme-color" content="#1d2230" media="(prefers-color-scheme: dark)">
<meta name="theme-color" content="#f3f3f1" media="(prefers-color-scheme: light)">
<script>(function(){try{var s=localStorage.getItem('td-theme');if(s==='light')document.documentElement.classList.add('light')}catch(e){}})();</script>

Tells every browser plus the Dark Reader extension to leave the already-dark page alone. The inline script applies the stored theme before paint, killing flash-of-wrong-theme on reload.

02 — DIAGNOSIS

Why the old system looked bad on dashboards

The strict Triumph kit was built for sponsor decks, programs, posters, kits. Those carry well at distance with high saturation and big display type. Drag the same tokens onto a 27" monitor at desk distance for six hours and they fight the data. Four specific failures, four targeted fixes in this system.

01 / SURFACES

Two saturated navies stacked

Page #020022 + surface #002855, both saturated navy. No neutral, no hierarchy. Cards floated as the decorated panel, not as content lifted out of a calm canvas. Fix: chroma-0.013 slate canvas with four lift-steps.

02 / TYPOGRAPHY

Fabiola on every heading

Fabiola Capitals is a single-weight display face designed for poster sizes. On a dashboard h3 at 22px it cramps, all-caps strokes turn heavy, and it competes with the data. Fix: Fabiola reserved for the page hero, Inter for h2 through h4.

03 / CHROMA

Four max-saturation brand colors on black

Navy 0.13, green 0.18, sky 0.13, lime 0.20, all stacked on a near-black bg with no neutral. The brand green at full saturation is correct, the canvas behind it is what made it scream. Fix: keep Triumph green at exact brand chroma (0.182, #61a631), sit it on a calm slate canvas. Brand-accurate, dashboard-comfortable.

04 / SPACING

Section padding sized for posters

Section padding maxed at 4.25rem read like museum gallery walls. A dashboard with twenty widgets feels disassembled. Fix: section padding tops out at 6rem at widest viewport, interior rhythm tightened to the design.seantippen scale.

03 — COLOR

Color

Soft slate canvas with a 0.013-chroma whisper of navy hue. Triumph green at the exact Brandpad value (#61a631) so anything that needs to read as on-brand for a customer does. Greenville Blue family for the secondary, lightened to read on dark. A four-color decorative rotation. All values in OKLCH so light mode is a clean inversion, not a separate palette.

Surfaces
BG
SURFACE
HOVER
RAISED
OVERLAY
Decorative palette

Per global rule, decorative accents rotate through green, royal blue, coral, and soft purple. Yellow and lime are status-only.

--color-accent
Triumph green · #61a631
--color-secondary
Greenville-blue family
--color-tertiary
Coral
--color-quaternary
Soft purple
Status
Success Warning Danger Info Accent
Brand reference palette

The canonical Brandpad values stay available as --brand-* for logo lockups and brand strips. They are not used as chrome.

--brand-greenville-blue
#002855 · PMS 295 C
--brand-triumph-green
#61a631 · PMS 369 C
--brand-upstate-fog
#f2fafa
--brand-deep-night
#020022
04 — TYPOGRAPHY

Typography

The single biggest fix versus the strict brand. Fabiola Capitals lives on the page hero. Inter does the rest. The discipline is brutal and not optional. Fabiola at 22px on a dashboard h3 is the source of half the ugliness in this codebase.

Hero (Fabiola — use once per page)

Exact Brandpad H1 spec. Weight 400 (single-weight OTF, anything else synthetic-bolds the strokes). Tracking normal. text-transform none, because Fabiola Capitals is uppercase-by-design in the OTF — the rule is redundant CSS friction. Line-height 1.0 multi-line-safe (Brandpad's 0.8 is single-line only).

.h-display font-family: --font-display
weight: 400
letter-spacing: normal
text-transform: none
line-height: 1.0
Greenville
Headings (Space Grotesk for h2/h3/h4, Inter for h1)

Inter at heading scale reads soft against Fabiola's angular display character. Space Grotesk is the geometric grotesque slotted in for h2/h3/h4 to add structural confidence without competing with Fabiola. h1 stays Inter at weight 800 because it sits closer to body and the heavier weight gives it presence.

h1 Inter / 800 / -0.02em
var(--text-3xl)

2026 ticket revenue

h2 Space Grotesk / 700 / -0.015em
var(--text-2xl)

Match day performance

h3 Space Grotesk / 600 / -0.010em
var(--text-xl)

Season ticket holders by section

h4 Space Grotesk / 600 / -0.005em
var(--text-lg)

Recent transactions

Body and data
p Inter / 400
var(--text-base)
color: secondary

Body copy uses Inter at the base size with relaxed leading. Comfortable at desk distance for hours. The grayish-blue secondary text reduces eye fatigue versus pure white on the slate canvas.

.mono JetBrains Mono / 500
tabular-nums
$847,221.50 · 2,341 tickets · +18.4%
.eyebrow JetBrains Mono / 700
uppercase / 0.18em tracking
SECTION LABEL
05 — SPACING

Spacing

Dashboard-tight rhythm. Fluid values that scale gracefully from laptop to widescreen without spreading thin.

--space-xs
4px — 8px
--space-sm
8px — 14px
--space-md
16px — 24px
--space-lg
24px — 40px
--space-xl
32px — 64px
--space-section
48px — 96px
06 — BUTTONS

Buttons

Solid for primary actions, outline for secondary, ghost for tertiary. Lift two pixels on hover, never scale.

07 — INPUTS

Inputs

Underline-only by default. Accent underline expands from the center on focus. Block inputs for forms where structure matters.

Underline
Block
08 — BADGES & PILLS

Badges and pills

Badges for status tags. Pills with leading dot for live state indicators.

Badges
Confirmed Pending Failed In review Featured
Pills
Last updated 2 min ago Updated 6 hours ago Stale · 3 days Live
Delta chips
+18.4% -2.1% 0.0% +243 -17
09 — CARDS & KPIs

Cards and KPIs

KPI markers use a left border that rotates through the four decorative accents. No card wrapper. The number is the hero, the chrome stays out of the way.

KPI grid
Season revenue
$847,221
+18.4% vs. 2025 final
Tickets sold
14,283
73% of season cap
STH renewals
91%
+4 pts vs. last season
Average ticket price
$31.42
All sections, weighted
Cards

Surface card

Default surface, 1px border, dashboard chrome.

Raised card

Lifted surface for emphasis, with shadow.

Interactive card

Hover lifts two pixels, tightens the border.

10 — TABLES

Tables

Bare structure. No card wrapper. Monospace tabular numerals so columns align. Row hover tints accent-subtle. Total row gets a thicker top border and lifted background.

Match Date Tickets Revenue Delta
Greenville Triumph vs. CharlotteMay 93,241$94,820+12.4%
Greenville Triumph vs. Tampa BayMay 162,887$81,114+8.1%
Greenville Triumph vs. AshevilleMay 303,612$108,930+21.7%
Greenville Triumph vs. CharlestonJun 62,194$58,490-4.2%
Total11,934$343,354+9.5%
11 — TABS & CONTROLS

Tabs and segmented controls

Tabs for view-level navigation. Segmented for time ranges or mode switches. Both underline-active, both keyboard-navigable.

Tabs
Overview
Season
Match day
Season ticket holders
Method of payment
Segmented
Progress
Season cap progress 73%
12 — CHART

Chart preview

Chart.js 4.4.7. Series colors via tok('--green'), tok('--blue'), etc. Hex literals only, because the Canvas API cannot resolve CSS custom properties.

13 — LOGOS & ASSETS

Logos and brand assets

Every Triumph lockup, self-hosted at /images/brand/ for direct linking from any dashboard. Lockups with light/dark variants automatically swap when the page theme changes. For vector formats (EPS, AI) or any non-screen usage, pull from Brandpad instead.

Triumph main lockup on dark Triumph main lockup on light

Main lockup

Full logo with shield and wordmark. Default identity choice for headers and primary brand placement.

Triumph simplified lockup on dark Triumph simplified lockup on light

Simplified lockup

Reduced lockup for nav bars, small headers, anywhere the main lockup would crowd the space.

Triumph wordmark on dark Triumph wordmark on light

Wordmark

Type-only treatment. Use when the shield would compete with other visual elements, or in very tight horizontal spaces.

Triumph shape mark

Shape mark

The standalone shield. Use as a favicon, a small icon, an avatar, or as a decorative motif on its own.

Triumph heritage pattern

Heritage pattern

Decorative pattern for banners, hero backgrounds, and texture moments. Use sparingly so it stays special.

14 — STARTER

Dashboard starter kit

A single-file copy-paste starting point for any new Triumph dashboard. Pre-wired with the design system, dark-mode lock, theme toggle, sticky nav with scroll-spy, and five placeholder sections. Delete what you don't need, fill in the TODOs.

What's pre-wired

  • Design system tokens and components linked from this domain (zero install).
  • Dark-mode meta-tag stack and inline early-paint script (no flash on reload).
  • Sticky nav with scroll-spy and a theme toggle that persists to localStorage.
  • Five sections: Hero, KPI band, Chart.js trend, table with totals, tabs + segmented control.
  • Brand-palette Chart.js helper (tok('--green')) that switches with theme.
15 — DO NOT

Don't do this

Anti-patterns from the strict brand that landed on dashboards by mistake.

Fabiola on h2 / h3 / h4

Single-weight display face cramps at UI sizes. Inter does this job. Fabiola earns one appearance per page, on the hero.

Saturated navy as a surface

Triumph navy is a poster color. Sitting cards on it floods the field with chroma and kills hierarchy. Use the slate canvas instead.

Lime or yellow as decorative accent

Reserved for status UI only. Default decorative rotation is green, royal blue, coral, soft purple.

Gradient text or gradient backgrounds

Flat surface plus optional noise grain. Small decorative gradients on a KPI top bar are fine. Radial blobs are banned.

transform: scale() on hover

Layout shifts cascade through grids. Lift two pixels and increase shadow.

Hardcoded hex in CSS

Reach for the token. The Chart.js exception is the only exception, because Canvas does not resolve CSS variables.

16 — USAGE

Usage

Link the token sheet and the components sheet in the head of every Triumph dashboard. Single-file dashboards also pull Inter and JetBrains Mono from Google Fonts directly. Fabiola loads from this domain via @font-face already declared in tokens.css.

Drop into <head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300..900&family=JetBrains+Mono:wght@500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://dashboards.greenvilletriumph.club/tokens.css">
<link rel="stylesheet" href="https://dashboards.greenvilletriumph.club/components.css">
Reference a token
/* CSS */
.card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  padding: var(--space-md);
}

// Chart.js — hex literal because Canvas cannot read CSS vars
const tok = (k) => getComputedStyle(document.documentElement).getPropertyValue(k).trim();
chart.data.datasets[0].borderColor = tok('--green');
File map
URLPurpose
tokens.cssCSS custom properties: colors, type, spacing, motion
components.cssComponent patterns: buttons, badges, tables, KPIs, tabs, toasts
/llms.txtMachine-readable agent instructions (markdown). Read first if you are an LLM building a Triumph dashboard.
/starter/Single-file dashboard starter kit (copy-paste ready)
/images/brand/triumph-*.pngAll Triumph brand lockups (main, simplified, wordmark, shape, pattern) in color / on-dark / on-light variants
/fonts/Fabiola-Capitals.otfFabiola Capitals OTF (served from design.greenvilletriumph.club, CORS open)