An editorial-sport design system. Rigorous Swiss grid, condensed typography, a single signal color. Built for match tableaus, standings, and dense data interfaces.
// six rules. editorial rigor applied as code. they govern every decision below.
Cream paper, warm ink. The signal red is reserved for focus and action. Gold for honours (finals, podium). Green for live status. Never two vivid colors competing on the same surface.
Every primitive has a product code — mc-001, pb-001, dr-001. "Use mc-001" beats "use the match card". The code gives the permanence of an object rather than the evanescence of a widget.
Capitals announce themselves. Lowercase trusts the reader. Reserved for mono micro-caps (≤10px) and Anton display — the editorial voice allows itself condensed capitals; everything else quiets down.
No gradients. No drop shadows. No generous roundness. Hairline borders, near-square corners (2–6px). One exception only: graphic area fills via color-mix.
Anton for impact (headlines, scores, times, phases). DM Sans for body. IBM Plex Mono for data. Three voices, three strict roles. The match tableau borrows from the sports paper, not the SaaS dashboard.
Square corners, hairlines, mono micro-caps. Nothing in this system will look dated in five years because nothing is in fashion today. Rigor outlasts the seasons.
// ten neutrals for surface and type, five chromatic families for function. red leads, gold honours, green announces life.
// three voices, three strict roles. anton carries impact, dm sans carries text, ibm plex mono carries data. never mix the roles.
// modular scale on a 2px base. near-square corners. short motion. rigor comes through clean angles.
// buttons, selects, badges. action speaks through signal red; everything else recedes.
// phase-bar to mark the tournament, match-card to announce the duel, data-row for grid-reading.
// three primitives to document the system itself. used on this page throughout above.
// full composition: filters → phase-bar → match-cards → data-rows. the primitive is the instrument, the pattern is the piece.
// four steps. link the sheet, load the fonts, compose the primitives, extend via the tokens.
<link rel="stylesheet" href="https://design.thinkspark.dev/touchline_ds/system.css?v=08">
<link href="https://fonts.googleapis.com/css2? family=Anton&family=DM+Sans:wght@400;500;700& family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<!-- mc-001 match-card --> <div class="matchcard matchcard--gold"> <div> <div class="matchcard-time">3:35</div> <div class="matchcard-court">court a</div> </div> <div class="matchcard-vs"> <span class="home">BX Brussels</span> <span class="x">vs</span> <span class="away">RWDM</span> </div> </div>
/* override the signal, keep everything else */ :root { --signal: #0066ff; } /* switch to night */ document.documentElement.classList.add('theme-night');
// css variables ready to paste. exportable to tailwind config or w3c json if needed.
/* touchline / tokens.css · t-001 · v0.1 */ :root { /* paper / ink — day */ --paper: #f4f2ec; --paper-2: #ebe8df; --paper-3: #e0dccf; --card: #ffffff; --line: #d9d5ca; --dim: #9a978d; --mid: #6b6960; --mid-2: #3d3b35; --ink: #0e0e10; --ink-2: #1c1b18; /* night palette */ --night: #13110d; --night-2: #1d1a13; --night-3: #27231a; --milk: #f1ede1; --milk-mid: #8a8880; --milk-dim: #5e5b54; --line-n: #33301f; /* chromatic accents — five families */ --signal: #e6321e; --signal-deep: #b8230f; --signal-soft: #fde7e2; --gold: #b8932f; --gold-soft: #f3e9cf; --field: #2f7d4f; --field-soft: #dff0e4; --warn: #caa015; --info: #2864e8; /* radius · line · motion */ --r-sm: 2px; --r-md: 3px; --r-lg: 6px; --r-circle: 50%; --line-w: 1px; --line-w-2: 2px; --line-w-4: 4px; --dur-snap: 90ms; --dur-quick: 150ms; --dur-base: 220ms; /* spacing — 2px base */ --s-2:2;--s-4:4;--s-8:8;--s-12:12;--s-16:16;--s-24:24;--s-32:32;--s-48:48;--s-64:64;--s-80:80; /* type families */ --font-display: 'Anton', sans-serif; --font-sans: 'DM Sans', system-ui, sans-serif; --font-mono: 'IBM Plex Mono', ui-monospace, monospace; }