card-03-stat-accent

Vignette statistique sur accent

Faire porter UN chiffre par un aplat d'accent chanfreiné, avec son cadrage (micro-libellé au-dessus) et son commentaire (corps collé en bas), de façon à ce que le chiffre se lise avant le texte.

cardslidesocialweb430×340px12 benchmarks

Télécharger le .zip

Le fragment RÉEL, dans son propre document, sur le sol de sa charte — pas une image. Ce que vous voyez est exactement ce que vous collerez.

Employer quand

Preuve chiffrée d'une slide : croissance, volume livré, part de marché. Une seule par slide, posée en tête de rangée ou en recouvrement du bas d'une photo pour ancrer l'accent.

Éviter quand

Le chiffre a besoin d'être comparé à d'autres (il faut un graphique), il n'y a pas de commentaire à mettre (la vignette se vide et le chanfrein devient un ornement seul), ou le texte descend sous 16 px — sur cet orange le contraste ne tient plus (3,4:1, valable seulement en grand corps).

Notes

Le vide entre le chiffre et le corps est une DÉCISION, pas un manque : il sépare la donnée de son commentaire. C'est la seule vignette du système où la règle « remplis l'espace » ne s'applique pas telle quelle — mais elle est bornée par benchmark (le corps démarre entre 50 % et 85 % de la hauteur), sinon on retombe sur un bloc qui flotte au milieu. Le corps n'est jamais en blanc pur : un blanc pur à 17 px rivalise avec le chiffre à 64 px et la hiérarchie tombe. Sur l'orange #F2551E, le blanc plafonne à 3,4:1 — donc grand corps seulement, jamais de 11 px. Le benchmark de contraste du CORPS a été ajouté après coup : le harnais HTML ne testait que le chiffre, et c'est l'audit .pptx du kit qui a attrapé le corps à 2,77:1. Quand un contrôle attrape ce que l'autre laisse passer, l'assertion manquante se pose des DEUX côtés.

Mots-clés

statchiffrekpivignettecarteaccentchanfreinnotchflèchedeckpreuve

Benchmarks — la géométrie, en assertions vérifiables

Rejouables par node bin/check.mjs card-03-stat-accent : le pattern se prouve, il ne se croit pas.

assertionmesureattendu
chanfrein ≈ 7,5 % de la largeurnotch('.vl-stat') / W0.075 ± 0.015
chanfrein sur le coin BAS-droit (l'orientation marque le premier rang)notchCorner('.vl-stat') === 'br' ? 1 : 01
marge intérieure gauche ≈ 8 % de la largeurnum('.vl-stat','paddingLeft') / W0.08 ± 0.02
saut typographique chiffre / micro-libellé ≥ 4,5num('.vl-stat__figure','fontSize') / num('.vl-stat__kicker','fontSize')≥ 4.5
le corps est bien en bas (haut du bloc entre 50 % et 85 % de la hauteur)box('.vl-stat__body').top / H0.5 → 0.85
aucun débordement du corps sous la marge basseH - num('.vl-stat','paddingBottom') - box('.vl-stat__body').bottom≥ -1
le corps s'arrête AVANT le chanfrein (il ne rentre pas dans la coupe)W - num('.vl-stat','paddingRight') - box('.vl-stat__body').right≥ -1
glyphe calé dans le coin haut-droit (≤ 12 % du bord)(W - box('.vl-stat__arrow').right) / W≤ 0.12
contraste du chiffre ≥ 3 (grand corps, seuil WCAG large text)contrast('.vl-stat__figure')≥ 3
corps ≥ 16 px — en dessous, 3,4:1 sur cet orange n'est plus lisiblenum('.vl-stat__body','fontSize')≥ 16
mesure de garde : le corps ne dépasse pas 34 caractères de largebox('.vl-stat__body').w / num('.vl-stat__body','fontSize')≤ 19
contraste du corps ≥ 3 (l'aplat d'accent ne pardonne rien en dessous)contrast('.vl-stat__body')≥ 3

Le code

fragment — patterns/card-03-stat-accent.html Télécharger
<!-- card-03-stat-accent — vignette statistique sur aplat d'accent, coin chanfreiné.
     Couleurs via --vl-* uniquement. Quatre zones dans un ordre FIXE : micro-libellé, chiffre,
     glyphe de coin, puis le corps collé en bas. -->
<div class="vl-stat">
  <div class="vl-stat__head">
    <div>
      <p class="vl-stat__kicker">Potential</p>
      <span class="vl-stat__figure">156%</span>
    </div>
    <span class="vl-stat__arrow">&#8599;</span>
  </div>
  <p class="vl-stat__body">Compound growth of the addressable segment over the last four
    reported years.</p>
</div>

<style>
.vl-stat {
  --vl-nc-size: var(--vl-notch, 32px);
  width: 430px; height: 340px;
  padding: 32px 34px 36px;
  background: var(--vl-orange); color: var(--vl-white);
  display: flex; flex-direction: column;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--vl-nc-size)), calc(100% - var(--vl-nc-size)) 100%, 0 100%);
}
.vl-stat__head { display: flex; align-items: flex-start; }
.vl-stat__kicker {
  margin: 0 0 16px; font-size: 12px; line-height: 1.4; font-weight: 700;
  letter-spacing: 0.14em; text-transform: uppercase; opacity: .85;
}
/* Le chiffre est ~5× le micro-libellé : c'est ce SAUT, et l'absence de taille intermédiaire,
   qui fait lire la vignette d'un coup d'œil. Rapprocher les deux corps la rend bavarde. */
.vl-stat__figure { font-size: 64px; line-height: 1; font-weight: 800; letter-spacing: -0.02em; }
.vl-stat__arrow { margin-left: auto; font-size: 34px; line-height: 1; }
/* Collé en bas (`margin-top:auto`) : le vide entre le chiffre et le corps est ASSUMÉ, il
   sépare la donnée de son commentaire. Centrer le bloc à la place ne remplirait rien — ça
   couperait le vide en deux et le ferait lire comme un oubli. */
.vl-stat__body {
  margin: auto 0 0; max-width: 32ch;
  font-size: 17px; line-height: 1.55; color: var(--vl-ink-muted-invert);
}
</style>
tokens de la charte — systems/ref-06-orange-notched.json Télécharger
:root {
  --vl-bg: #F0EFEC;
  --vl-board: #DEDDD9;
  --vl-white: #FFFFFF;
  --vl-black: #141414;
  --vl-orange: #F2551E;
  --vl-steel: #C6D0CF;
  --vl-ink-muted: #6A6A67;
  --vl-ink-muted-invert: #FFF1E9;
  --vl-ink-on-steel: #3E4746;
  --vl-hairline: #00000015;
  --vl-ph-a: #C9C9C9;
  --vl-ph-b: #4C4C4C;
  --vl-ph-dark-a: #6A6A6A;
  --vl-ph-dark-b: #141414;
  --vl-notch: 34px;
  --vl-margin: 60px;
}
les métadonnées — patterns/card-03-stat-accent.json (télécharger)
{
  "name": "Vignette statistique sur accent",
  "family": "card",
  "ref": "ref-06-orange-notched",
  "intent": "Faire porter UN chiffre par un aplat d'accent chanfreiné, avec son cadrage (micro-libellé au-dessus) et son commentaire (corps collé en bas), de façon à ce que le chiffre se lise avant le texte.",
  "when_to_use": "Preuve chiffrée d'une slide : croissance, volume livré, part de marché. Une seule par slide, posée en tête de rangée ou en recouvrement du bas d'une photo pour ancrer l'accent.",
  "avoid_when": "Le chiffre a besoin d'être comparé à d'autres (il faut un graphique), il n'y a pas de commentaire à mettre (la vignette se vide et le chanfrein devient un ornement seul), ou le texte descend sous 16 px — sur cet orange le contraste ne tient plus (3,4:1, valable seulement en grand corps).",
  "tags": [
    "stat",
    "chiffre",
    "kpi",
    "vignette",
    "carte",
    "accent",
    "chanfrein",
    "notch",
    "flèche",
    "deck",
    "preuve"
  ],
  "vars": [
    {
      "name": "--vl-orange",
      "role": "aplat d'accent porteur",
      "default": "#F2551E"
    },
    {
      "name": "--vl-white",
      "role": "chiffre et glyphe",
      "default": "#FFFFFF"
    },
    {
      "name": "--vl-ink-muted-invert",
      "role": "corps sur l'aplat (jamais du blanc pur, mais pas plus sombre que 3:1 non plus)",
      "default": "#FFF1E9"
    },
    {
      "name": "--vl-notch",
      "role": "longueur du chanfrein",
      "default": "32px"
    }
  ],
  "slots": [
    "kicker",
    "figure",
    "arrow",
    "body"
  ],
  "geometry": {
    "root": ".vl-stat",
    "frame": [
      430,
      340
    ],
    "ratios": {
      "pad_x_over_width": 0.079,
      "notch_over_width": 0.074,
      "figure_over_kicker": 5.33,
      "body_top_over_height": 0.66
    },
    "type_px": {
      "kicker": 12,
      "figure": 64,
      "body": 17,
      "arrow": 34
    },
    "pad_ratio": {
      "top": 0.074,
      "x": 0.079,
      "bottom": 0.084
    }
  },
  "benchmarks": [
    {
      "name": "chanfrein ≈ 7,5 % de la largeur",
      "measure": "notch('.vl-stat') / W",
      "expect": 0.075,
      "tol": 0.015
    },
    {
      "name": "chanfrein sur le coin BAS-droit (l'orientation marque le premier rang)",
      "measure": "notchCorner('.vl-stat') === 'br' ? 1 : 0",
      "expect": 1
    },
    {
      "name": "marge intérieure gauche ≈ 8 % de la largeur",
      "measure": "num('.vl-stat','paddingLeft') / W",
      "expect": 0.08,
      "tol": 0.02
    },
    {
      "name": "saut typographique chiffre / micro-libellé ≥ 4,5",
      "measure": "num('.vl-stat__figure','fontSize') / num('.vl-stat__kicker','fontSize')",
      "min": 4.5
    },
    {
      "name": "le corps est bien en bas (haut du bloc entre 50 % et 85 % de la hauteur)",
      "measure": "box('.vl-stat__body').top / H",
      "min": 0.5,
      "max": 0.85
    },
    {
      "name": "aucun débordement du corps sous la marge basse",
      "measure": "H - num('.vl-stat','paddingBottom') - box('.vl-stat__body').bottom",
      "min": -1
    },
    {
      "name": "le corps s'arrête AVANT le chanfrein (il ne rentre pas dans la coupe)",
      "measure": "W - num('.vl-stat','paddingRight') - box('.vl-stat__body').right",
      "min": -1
    },
    {
      "name": "glyphe calé dans le coin haut-droit (≤ 12 % du bord)",
      "measure": "(W - box('.vl-stat__arrow').right) / W",
      "max": 0.12
    },
    {
      "name": "contraste du chiffre ≥ 3 (grand corps, seuil WCAG large text)",
      "measure": "contrast('.vl-stat__figure')",
      "min": 3
    },
    {
      "name": "corps ≥ 16 px — en dessous, 3,4:1 sur cet orange n'est plus lisible",
      "measure": "num('.vl-stat__body','fontSize')",
      "min": 16
    },
    {
      "name": "mesure de garde : le corps ne dépasse pas 34 caractères de large",
      "measure": "box('.vl-stat__body').w / num('.vl-stat__body','fontSize')",
      "max": 19
    },
    {
      "name": "contraste du corps ≥ 3 (l'aplat d'accent ne pardonne rien en dessous)",
      "measure": "contrast('.vl-stat__body')",
      "min": 3
    }
  ],
  "pptx": {
    "primitive": "notched_rect",
    "emitter": "kit/vl_pptx.py:stat_block",
    "pattern": "card-03-stat-accent"
  },
  "notes": "Le vide entre le chiffre et le corps est une DÉCISION, pas un manque : il sépare la donnée de son commentaire. C'est la seule vignette du système où la règle « remplis l'espace » ne s'applique pas telle quelle — mais elle est bornée par benchmark (le corps démarre entre 50 % et 85 % de la hauteur), sinon on retombe sur un bloc qui flotte au milieu. Le corps n'est jamais en blanc pur : un blanc pur à 17 px rivalise avec le chiffre à 64 px et la hiérarchie tombe. Sur l'orange #F2551E, le blanc plafonne à 3,4:1 — donc grand corps seulement, jamais de 11 px. Le benchmark de contraste du CORPS a été ajouté après coup : le harnais HTML ne testait que le chiffre, et c'est l'audit .pptx du kit qui a attrapé le corps à 2,77:1. Quand un contrôle attrape ce que l'autre laisse passer, l'assertion manquante se pose des DEUX côtés.",
  "media": [
    "slide",
    "social",
    "web"
  ],
  "id": "card-03-stat-accent"
}

À côté