Un système éditorial-sportif. Grille suisse rigoureuse, typographie condensée, une seule couleur de signal. Pensé pour les tableaux de match, classements et interfaces de données denses.
// six règles. la rigueur éditoriale appliquée comme code. elles gouvernent chaque décision en dessous.
Papier crème, encre chaude. Le rouge de signal ne sert qu'au focus et à l'action. Le doré aux honneurs (finales, podium). Le vert au statut live. Jamais deux couleurs vives en compétition sur la même surface.
Chaque primitive a un code produit — mc-001, pb-001, dr-001. "Utilise mc-001" gagne contre "utilise la carte de match". Le code donne la permanence d'un objet plutôt que l'évanescence d'un widget.
Les majuscules s'annoncent. La minuscule fait confiance au lecteur. Réservée aux micro-capitales mono (≤10px) et au display Anton — la voix éditoriale s'autorise les capitales condensées, le reste se tait.
Pas de dégradés. Pas d'ombres portées. Pas d'arrondis généreux. Bordures hairline, coins quasi droits (2–6px). Une seule exception : le remplissage de zone graphique via color-mix.
Anton pour l'impact (titres, scores, heures, phases). DM Sans pour le texte courant. IBM Plex Mono pour la donnée. Trois voix, trois rôles stricts. Le tableau de match emprunte au journal sportif, pas au dashboard saas.
Coins carrés, hairlines, micro-capitales mono. Rien dans ce système ne sera daté dans cinq ans parce que rien n'est à la mode aujourd'hui. La rigueur traverse les saisons.
// dix neutres pour la surface et le type, cinq familles chromatiques pour la fonction. le rouge mène, le doré honore, le vert annonce la vie.
// trois voix, trois rôles stricts. anton porte l'impact, dm sans porte le texte, ibm plex mono porte la donnée. ne jamais mélanger les rôles.
// échelle modulaire base 2px. coins quasi droits. mouvement court. la rigueur passe par des angles francs.
// boutons, sélecteurs, étiquettes. l'action passe par le signal rouge ; tout le reste s'efface.
// phase-bar pour scander le tournoi, match-card pour annoncer le duel, data-row pour la lecture en grille.
// trois primitives pour documenter le système lui-même. utilisées sur cette page partout au-dessus.
// composition complète : filtres → phase-bar → match-cards → data-rows. la primitive est l'instrument, le pattern est la pièce.
// quatre étapes. lier la feuille, charger les polices, composer les primitives, étendre via les tokens.
<link rel="stylesheet" href="https://design.thinkspark.dev/touchline_ds/system.css?v=01">
<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">15h35</div> <div class="matchcard-court">terrain 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');
// variables css prêtes à coller. exportable en config tailwind ou en json w3c si besoin.
/* 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; }