card-01-ghost-icon
card-16-paper-grid-poster
Affiche papier quadrillé à deux blocs
Tenir un post social 4:5 entier avec DEUX blocs de texte et rien d'autre — une accroche monumentale qui remplit la largeur, une chute deux fois plus petite en dessous — posés sur un papier quadrillé qui sert de repère d'alignement, et une bande basse réservée d'avance au repère de marque.
cardsocial1080×1350px15 benchmarks
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
Une thèse sans chiffre-héros, à publier en post image 1080×1350 : le sujet tient en une affirmation de 5 à 7 mots et son commentaire de 10 à 13. Le quadrillage donne au bloc typographique une assise que le blanc pur ne donne pas, et il se photographie bien dans un fil.
Éviter quand
L'actu EST un chiffre (le chiffre-héros doit alors dominer, ce n'est pas cette composition), la copie dépasse ~19 mots au total (le corps tombe sous le plancher social de 2,2 % de la largeur), ou le canal n'est pas un cadre portrait — en 16:9 les deux blocs s'étalent et l'accroche cesse d'être monumentale.
Notes
Deux lois portent ce pattern. (1) LA BANDE BASSE EST UN PADDING, pas une marge du dernier bloc : le repère de marque est en position absolue, donc il ne pousse rien — sans la réserve, le texte descend le TOUCHER et aucun contrôle ne s'en plaint, puisque rien ne déborde. C'est la faute jumelle du piège logo des gabarits Finengy : retirer le logo de la mesure supprime aussi le contrôle de sa collision. (2) LE FOND EST UN COUPLE background-color + background-image, dans cet ordre : `bin/check.mjs` lit `background-color` et ne voit jamais une image, donc un papier peint uniquement en gradient rendrait tous les contrastes contre du transparent. Le halo radial est le troisième calque de la même image — il éclaircit le centre sous le texte sans ajouter de couche au sens de check-deck. La composition n'a AUCUN filet, aucune vignette, aucun aplat : ce qui structure est le quadrillage, et il est sous tout. Pour accentuer un mot de la chute, poser shape-05-text-selection dessus — c'est le seul accent que cette charte autorise.
Mots-clés
Benchmarks — la géométrie, en assertions vérifiables
Rejouables par node bin/check.mjs card-16-paper-grid-poster : le pattern se prouve, il ne se croit pas.
| assertion | mesure | attendu |
|---|---|---|
| cadre portrait 4:5 — le format du post, pas un choix de composition | W / H | 0.8 ± 0.005 |
| pas du quadrillage ≈ 2,5 % de la largeur | parseFloat(cs('.vl-paper-grid','--pg-step')) / W | 0.025 ± 0.006 |
| LE PAPIER EST UN FOND PLEIN : la grille est une background-image posée dessus, sinon le contraste se mesure contre du transparent | cs('.vl-paper-grid','backgroundColor').indexOf('rgba(0, 0, 0, 0)') === 0 ? 0 : 1 | 1 |
| le quadrillage est bien là : deux répétitions linéaires dans la background-image | (cs('.vl-paper-grid','backgroundImage').match(/repeating-linear-gradient/g) || []).length | 2 ± 0 |
| fer gauche serré ≈ 3,7 % de la largeur — plus étroit que la marge droite | num('.vl-paper-grid','paddingLeft') / W | 0.037 ± 0.008 |
| l'accroche MONTE : elle colle la réserve haute | box('.vl-paper-grid__hook').top - num('.vl-paper-grid','paddingTop') | 0 ± 3 |
| BANDE DE MARQUE RÉSERVÉE ≈ 14,5 % de la hauteur, et c'est un padding | num('.vl-paper-grid','paddingBottom') / H | 0.145 ± 0.02 |
| le repère de marque tient DANS la bande : il ne remonte jamais sur le texte | box('.vl-paper-grid__mark').top - (H - num('.vl-paper-grid','paddingBottom')) | ≥ 0 |
| saut typographique accroche / chute entre 1,45 et 1,75 — deux rangs, pas deux tailles voisines | num('.vl-paper-grid__hook','fontSize') / num('.vl-paper-grid__drop','fontSize') | 1.45 → 1.75 |
| respiration entre les deux blocs ≈ 4,2 % de la hauteur | num('.vl-paper-grid__drop','marginTop') / H | 0.0415 ± 0.012 |
| PLANCHER SOCIAL : le plus petit corps ≥ 2,2 % de la largeur du cadre | num('.vl-paper-grid__drop','fontSize') / W | ≥ 0.022 |
| le bloc typographique remplit la zone utile : au plus une ligne de chute de libre au-dessus de la bande | (H - num('.vl-paper-grid','paddingBottom')) - box('.vl-paper-grid__drop').bottom | -2 → 130 |
| contraste de l'accroche ≥ 4,5 | contrast('.vl-paper-grid__hook') | ≥ 4.5 |
| contraste de la chute ≥ 4,5 | contrast('.vl-paper-grid__drop') | ≥ 4.5 |
| aucun débordement hors du cadre | overflow('.vl-paper-grid') | ≤ 0 |
Le code
patterns/card-16-paper-grid-poster.html
Télécharger<!-- card-16-paper-grid-poster — fragment autonome. Couleurs via --vl-* uniquement, aucune valeur en dur. -->
<div class="vl-paper-grid" lang="fr">
<div class="vl-paper-grid__type">
<div class="vl-paper-grid__hook">L'IA sait déjà tenir la comptabilité.</div>
<div class="vl-paper-grid__drop">Les modèles sont prêts. Reste à bâtir l'architecture qui les met au travail.</div>
</div>
<div class="vl-paper-grid__mark">Marque</div>
</div>
<style>
.vl-paper-grid {
--pg-step: var(--vl-grid-step, 27px);
--pg-foot: var(--vl-footer, 196px);
position: relative;
width: 1080px; height: 1350px;
box-sizing: border-box;
padding: var(--vl-margin-top, 52px) 56px var(--pg-foot) var(--vl-margin-x, 40px);
display: flex; flex-direction: column; justify-content: flex-start;
overflow: hidden;
font-family: Inter, system-ui, -apple-system, "Segoe UI", sans-serif;
color: var(--vl-ink);
/* Le papier EST le fond de la racine : la grille se pose en background-image PAR-DESSUS un
background-color plein. Inversé, le contraste se mesurerait contre du transparent. */
background-color: var(--vl-bg);
background-image:
repeating-linear-gradient(0deg, var(--vl-grid) 0 1px, transparent 1px var(--pg-step)),
repeating-linear-gradient(90deg, var(--vl-grid) 0 1px, transparent 1px var(--pg-step)),
radial-gradient(120% 90% at 50% 45%, var(--vl-glow) 0%, transparent 65%);
}
.vl-paper-grid__type { position: relative; }
.vl-paper-grid__hook {
font-weight: 900; font-size: 154px; line-height: 1.07; letter-spacing: -4px;
}
.vl-paper-grid__drop {
font-weight: 800; font-size: 97px; line-height: 1.24; letter-spacing: -1.8px;
margin-top: 56px;
}
/* La bande basse est RÉSERVÉE par le padding : le repère de marque s'y ancre au coin, il ne
pousse jamais le texte. Sans la réserve, le bloc typographique descend le toucher. */
.vl-paper-grid__mark {
position: absolute; right: 56px; bottom: 56px;
font-weight: 900; font-size: 54px; letter-spacing: -1.5px; line-height: 1;
}
</style>
systems/ref-24-finengy-paper-selection.json
Télécharger:root {
--vl-bg: #F6F5F1;
--vl-ink: #142A4E;
--vl-grid: rgba(20,42,78,0.16);
--vl-grid-step: 27px;
--vl-glow: rgba(255,255,255,0.5);
--vl-accent: #FDC300;
--vl-select: rgba(253,195,0,0.55);
--vl-handle: #142A4E;
--vl-select-alt: rgba(124,138,255,0.42);
--vl-handle-alt: #2C4BE8;
--vl-handle-bar: 6px;
--vl-handle-dot: 30px;
--vl-margin-x: 40px;
--vl-margin-top: 52px;
--vl-footer: 196px;
}
les métadonnées — patterns/card-16-paper-grid-poster.json (télécharger)
{
"name": "Affiche papier quadrillé à deux blocs",
"family": "card",
"ref": "ref-24-finengy-paper-selection",
"intent": "Tenir un post social 4:5 entier avec DEUX blocs de texte et rien d'autre — une accroche monumentale qui remplit la largeur, une chute deux fois plus petite en dessous — posés sur un papier quadrillé qui sert de repère d'alignement, et une bande basse réservée d'avance au repère de marque.",
"when_to_use": "Une thèse sans chiffre-héros, à publier en post image 1080×1350 : le sujet tient en une affirmation de 5 à 7 mots et son commentaire de 10 à 13. Le quadrillage donne au bloc typographique une assise que le blanc pur ne donne pas, et il se photographie bien dans un fil.",
"avoid_when": "L'actu EST un chiffre (le chiffre-héros doit alors dominer, ce n'est pas cette composition), la copie dépasse ~19 mots au total (le corps tombe sous le plancher social de 2,2 % de la largeur), ou le canal n'est pas un cadre portrait — en 16:9 les deux blocs s'étalent et l'accroche cesse d'être monumentale.",
"media": [
"social"
],
"tags": [
"carte",
"affiche",
"poster",
"papier",
"quadrillage",
"grille",
"millimetre",
"social",
"portrait",
"4-5",
"accroche",
"chute",
"deux-blocs",
"typographie",
"monumental",
"linkedin",
"decryptage",
"bande-logo",
"pied"
],
"vars": [
{
"name": "--vl-bg",
"role": "le papier — un blanc cassé, jamais du blanc pur : c'est lui qui laisse la grille exister",
"default": "#F6F5F1"
},
{
"name": "--vl-ink",
"role": "encre pleine des deux blocs, sans gris intermédiaire",
"default": "#142A4E"
},
{
"name": "--vl-grid",
"role": "trait du quadrillage — 16 % d'encre : sous 12 % il disparaît dans un fil, au-dessus de 20 % il concurrence le texte",
"default": "rgba(20,42,78,0.16)"
},
{
"name": "--vl-grid-step",
"role": "pas du quadrillage, en px — 2,5 % de la largeur de carte",
"default": "27px"
},
{
"name": "--vl-glow",
"role": "halo central qui éclaircit le papier sous le texte",
"default": "rgba(255,255,255,0.5)"
},
{
"name": "--vl-margin-x",
"role": "fer gauche — serré, l'accroche part au bord",
"default": "40px"
},
{
"name": "--vl-margin-top",
"role": "réserve haute : l'accroche monte HAUT",
"default": "52px"
},
{
"name": "--vl-footer",
"role": "bande basse réservée au repère de marque ; c'est un padding, jamais une marge du bloc",
"default": "196px"
}
],
"slots": [
"accroche",
"chute",
"marque"
],
"geometry": {
"root": ".vl-paper-grid",
"frame": [
1080,
1350
],
"ratios": {
"width_over_height": 0.8,
"grid_step_over_width": 0.025,
"margin_x_over_width": 0.037,
"footer_over_height": 0.145,
"hook_over_drop": 1.588,
"gap_over_height": 0.0415
},
"type_px": {
"accroche": 154,
"chute": 97
},
"pad_ratio": {
"top": 0.0385,
"x": 0.037,
"bottom": 0.145
}
},
"benchmarks": [
{
"name": "cadre portrait 4:5 — le format du post, pas un choix de composition",
"measure": "W / H",
"expect": 0.8,
"tol": 0.005
},
{
"name": "pas du quadrillage ≈ 2,5 % de la largeur",
"measure": "parseFloat(cs('.vl-paper-grid','--pg-step')) / W",
"expect": 0.025,
"tol": 0.006
},
{
"name": "LE PAPIER EST UN FOND PLEIN : la grille est une background-image posée dessus, sinon le contraste se mesure contre du transparent",
"measure": "cs('.vl-paper-grid','backgroundColor').indexOf('rgba(0, 0, 0, 0)') === 0 ? 0 : 1",
"expect": 1
},
{
"name": "le quadrillage est bien là : deux répétitions linéaires dans la background-image",
"measure": "(cs('.vl-paper-grid','backgroundImage').match(/repeating-linear-gradient/g) || []).length",
"expect": 2,
"tol": 0
},
{
"name": "fer gauche serré ≈ 3,7 % de la largeur — plus étroit que la marge droite",
"measure": "num('.vl-paper-grid','paddingLeft') / W",
"expect": 0.037,
"tol": 0.008
},
{
"name": "l'accroche MONTE : elle colle la réserve haute",
"measure": "box('.vl-paper-grid__hook').top - num('.vl-paper-grid','paddingTop')",
"expect": 0,
"tol": 3
},
{
"name": "BANDE DE MARQUE RÉSERVÉE ≈ 14,5 % de la hauteur, et c'est un padding",
"measure": "num('.vl-paper-grid','paddingBottom') / H",
"expect": 0.145,
"tol": 0.02
},
{
"name": "le repère de marque tient DANS la bande : il ne remonte jamais sur le texte",
"measure": "box('.vl-paper-grid__mark').top - (H - num('.vl-paper-grid','paddingBottom'))",
"min": 0
},
{
"name": "saut typographique accroche / chute entre 1,45 et 1,75 — deux rangs, pas deux tailles voisines",
"measure": "num('.vl-paper-grid__hook','fontSize') / num('.vl-paper-grid__drop','fontSize')",
"min": 1.45,
"max": 1.75
},
{
"name": "respiration entre les deux blocs ≈ 4,2 % de la hauteur",
"measure": "num('.vl-paper-grid__drop','marginTop') / H",
"expect": 0.0415,
"tol": 0.012
},
{
"name": "PLANCHER SOCIAL : le plus petit corps ≥ 2,2 % de la largeur du cadre",
"measure": "num('.vl-paper-grid__drop','fontSize') / W",
"min": 0.022
},
{
"name": "le bloc typographique remplit la zone utile : au plus une ligne de chute de libre au-dessus de la bande",
"measure": "(H - num('.vl-paper-grid','paddingBottom')) - box('.vl-paper-grid__drop').bottom",
"min": -2,
"max": 130
},
{
"name": "contraste de l'accroche ≥ 4,5",
"measure": "contrast('.vl-paper-grid__hook')",
"min": 4.5
},
{
"name": "contraste de la chute ≥ 4,5",
"measure": "contrast('.vl-paper-grid__drop')",
"min": 4.5
},
{
"name": "aucun débordement hors du cadre",
"measure": "overflow('.vl-paper-grid')",
"max": 0
}
],
"notes": "Deux lois portent ce pattern. (1) LA BANDE BASSE EST UN PADDING, pas une marge du dernier bloc : le repère de marque est en position absolue, donc il ne pousse rien — sans la réserve, le texte descend le TOUCHER et aucun contrôle ne s'en plaint, puisque rien ne déborde. C'est la faute jumelle du piège logo des gabarits Finengy : retirer le logo de la mesure supprime aussi le contrôle de sa collision. (2) LE FOND EST UN COUPLE background-color + background-image, dans cet ordre : `bin/check.mjs` lit `background-color` et ne voit jamais une image, donc un papier peint uniquement en gradient rendrait tous les contrastes contre du transparent. Le halo radial est le troisième calque de la même image — il éclaircit le centre sous le texte sans ajouter de couche au sens de check-deck. La composition n'a AUCUN filet, aucune vignette, aucun aplat : ce qui structure est le quadrillage, et il est sous tout. Pour accentuer un mot de la chute, poser shape-05-text-selection dessus — c'est le seul accent que cette charte autorise.",
"id": "card-16-paper-grid-poster"
}
À côté
card-02-notched-brief
Carte chanfreinée de second rang
card-03-stat-accent
Vignette statistique sur accent
card-04-stat-barchart
Carte statistique à barres empilées
card-05-balance-gauge
Carte solde à jauge compteur
card-06-forecast-timeline