389 lines
15 KiB
Markdown
389 lines
15 KiB
Markdown
# Charte graphique Kluk
|
||
|
||
Charte extraite du site kluk.fr (`assets/css/style.scss`, `_layouts/`, `_includes/`).
|
||
Tout ce qu'il faut pour la réutiliser ailleurs se trouve dans le dossier [`charte/`](charte/) :
|
||
|
||
```
|
||
charte/
|
||
├── css/kluk.css Feuille de style complète, en CSS pur (sans Sass)
|
||
├── fonts/ Young Serif, Atkinson Hyperlegible Next (woff2) + licence OFL
|
||
├── img/
|
||
│ ├── favicon.svg Icône du site (tasse verte)
|
||
│ ├── illustration-tasses.svg Illustration « table et tasses », autonome (styles intégrés)
|
||
│ ├── tasse-{gris,orange,vert,rouge}.svg Une tasse seule, dans chaque couleur d'humeur
|
||
│ └── photo-attente.svg Pictogramme de l'emplacement de photo
|
||
└── exemple.html Page de démonstration de tous les composants
|
||
```
|
||
|
||
Pour démarrer : copier `charte/` dans le projet, puis dans le `<head>` :
|
||
|
||
```html
|
||
<meta name="theme-color" content="#F5F6F0">
|
||
<link rel="preload" href="charte/fonts/young-serif-400.woff2" as="font" type="font/woff2" crossorigin>
|
||
<link rel="preload" href="charte/fonts/atkinson-hyperlegible-next-400.woff2" as="font" type="font/woff2" crossorigin>
|
||
<link rel="stylesheet" href="charte/css/kluk.css">
|
||
<link rel="icon" href="charte/img/favicon.svg" type="image/svg+xml">
|
||
```
|
||
|
||
Les chemins des polices dans `kluk.css` sont relatifs (`../fonts/`) : garder la structure `css/` + `fonts/` côte à côte.
|
||
|
||
---
|
||
|
||
## 1. Esprit
|
||
|
||
Un univers de petit-déjeuner, calme et chaleureux : **la porcelaine du matin** (fond), **l'encre du thé** (texte), **le chêne de la table** (pied de page, illustration), et **les quatre couleurs des tasses** (gris, orange, vert, rouge) comme accents, qui sont aussi les quatre « humeurs ».
|
||
|
||
Principes :
|
||
|
||
- une seule colonne de lecture étroite (36 rem), beaucoup d'air ;
|
||
- des titres en serif ronde et amicale, un texte courant très lisible ;
|
||
- des formes arrondies (boutons en pilule, cartes arrondies), des traits d'encre épais façon dessin ;
|
||
- l'accessibilité d'abord : contrastes élevés, focus très visible, lien d'évitement, animations coupées si l'utilisateur le demande.
|
||
|
||
---
|
||
|
||
## 2. Couleurs
|
||
|
||
Toutes les couleurs sont des variables CSS déclarées sur `:root`.
|
||
|
||
### Fonds et texte
|
||
|
||
| Variable | Valeur | Rôle |
|
||
|---|---|---|
|
||
| `--porcelaine` | `#F5F6F0` | Fond de page, texte sur fond encre, `theme-color` |
|
||
| `--porcelaine-fonce` | `#E9ECE2` | Fond de `code`, emplacement de photo, liseré des cartes |
|
||
| `--encre` | `#2E2A26` | Texte, bordures, fond des boutons |
|
||
| `--encre-douce` | `#5A534C` | Texte secondaire : chapeau, notes, légendes, précisions |
|
||
| `--chene` | `#D9BC94` | Pied de page, plateau de la table (illustration) |
|
||
| `--chene-fonce` | `#B48D5F` | Socle de la Kluk, pointillés et picto de l'emplacement photo |
|
||
|
||
### Humeurs (accents)
|
||
|
||
| Variable | Valeur | Rôle |
|
||
|---|---|---|
|
||
| `--gris` | `#8D97A8` | Humeur grise |
|
||
| `--orange` | `#EDA33D` | Humeur orange, trait de l'exergue |
|
||
| `--vert` | `#5F9B59` | Humeur verte, soulignement des liens, focus des champs, favicon |
|
||
| `--rouge` | `#D8573F` | Humeur rouge, trait des messages d'erreur |
|
||
| `--vert-lien` | `#3F7A3B` | Vert foncé pour les cases à cocher (`accent-color`) |
|
||
|
||
### Teintes utilitaires
|
||
|
||
Écrites en dur dans le site d'origine ; `kluk.css` les expose en variables, avec les mêmes valeurs.
|
||
|
||
| Variable | Valeur | Rôle |
|
||
|---|---|---|
|
||
| `--encre-survol` | `#45403A` | Fond des boutons au survol |
|
||
| `--surface` | `#FBFCF8` | Fond des cartes (formulaire, calendrier) |
|
||
| `--bordure-champ` | `#8A8279` | Bordure des champs de saisie |
|
||
| `--erreur-fond` | `#FBE9E5` | Fond des messages d'erreur |
|
||
| `--blanc` | `#fff` | Fond des champs, reflet des tasses, fond à l'impression |
|
||
|
||
### Contrastes (WCAG)
|
||
|
||
| Couple | Ratio | Usage autorisé |
|
||
|---|---|---|
|
||
| encre / porcelaine | 13,1 : 1 | tout texte |
|
||
| encre-douce / porcelaine | 7,0 : 1 | tout texte |
|
||
| encre / chêne | 7,8 : 1 | tout texte (pied de page) |
|
||
| porcelaine / encre-survol | 9,4 : 1 | texte des boutons au survol |
|
||
| vert-lien / porcelaine | 4,8 : 1 | texte possible |
|
||
| vert / porcelaine | 3,1 : 1 | éléments graphiques seulement (soulignés, contours) |
|
||
| rouge / porcelaine | 3,6 : 1 | éléments graphiques seulement |
|
||
| gris / porcelaine | 2,7 : 1 | décoratif seulement |
|
||
| orange / porcelaine | 2,0 : 1 | décoratif seulement |
|
||
|
||
Règle : **le texte est toujours en encre ou encre douce**. Les couleurs d'humeur ne servent qu'aux traits, soulignés, pastilles et illustrations, jamais au texte.
|
||
|
||
---
|
||
|
||
## 3. Typographies
|
||
|
||
| Variable | Pile | Usage |
|
||
|---|---|---|
|
||
| `--serif` | `"Young Serif", Georgia, serif` | Titres `h1`–`h3`, exergue, phrase du pied de page |
|
||
| `--sans` | `"Atkinson Hyperlegible Next", "Atkinson Hyperlegible", system-ui, sans-serif` | Tout le reste, y compris le logo |
|
||
|
||
Fichiers fournis (`charte/fonts/`, licence SIL OFL 1.1 dans `OFL.txt`) :
|
||
|
||
- `young-serif-400.woff2` : Young Serif, une seule graisse (400) ;
|
||
- `atkinson-hyperlegible-next-400.woff2` : Atkinson Hyperlegible Next **variable**, graisses 200 à 800 ;
|
||
- `atkinson-hyperlegible-next-400-italic.woff2` : italique 400.
|
||
|
||
Graisses utilisées : 400 (texte), 700 (boutons, libellés, `strong`), 800 (logo). Les titres restent en 400 : c'est la serif qui porte le caractère.
|
||
|
||
### Échelle
|
||
|
||
| Élément | Taille | Interlignage | Remarques |
|
||
|---|---|---|---|
|
||
| Corps (`body`) | `1.1875rem` (19 px) | 1.65 | `font-kerning: normal` |
|
||
| `h1` | `clamp(2.35rem, 1.6rem + 3.6vw, 3.75rem)` | 1.15 | serif, `text-wrap: balance` |
|
||
| `h2` | `clamp(1.6rem, 1.35rem + 1vw, 2rem)` | 1.15 | serif |
|
||
| Chapeau | `1.3rem` | 1.55 | italique, encre douce |
|
||
| Exergue | `1.45rem` | 1.4 | serif |
|
||
| Logo | `1.35rem` | 1.2 | sans 800, `letter-spacing: 0.01em` |
|
||
| Phrase du pied | `1.15rem` | — | serif |
|
||
| Note | `1.0625rem` | — | encre douce |
|
||
| Navigation, petit bouton, pied, formulaire (erreur, secours), emplacement photo | `1rem` | — | |
|
||
| Légende de photo | `0.95rem` | — | encre douce |
|
||
| `code` | `0.9em` | — | |
|
||
|
||
Titres : `letter-spacing: -0.005em`.
|
||
|
||
### Typographie française
|
||
|
||
Le site applique automatiquement (plugin Jekyll `_plugins/typographie.rb`) une espace fine insécable avant `; ! ?` et une espace insécable avant `:` et `»` et après `«`. Dans un autre projet, taper ces espaces directement (` ` fine, ` ` insécable) ou reprendre ce plugin. Apostrophe typographique `’` et guillemets `« »`.
|
||
|
||
---
|
||
|
||
## 4. Espacements et mise en page
|
||
|
||
| Variable | Valeur | Rôle |
|
||
|---|---|---|
|
||
| `--colonne` | `36rem` | Largeur de la colonne de texte (~ 65 caractères) |
|
||
| `--gouttiere` | `1.25rem` | Marge latérale sur mobile, padding horizontal des conteneurs |
|
||
| `--largeur-entete` | `64rem` | Largeur maximale de l'en-tête |
|
||
| `--arrondi-petit` | `0.5rem` | Logo, champs de saisie |
|
||
| `--arrondi` | `0.75rem` | Photos, cartes (formulaire, calendrier, emplacement photo) |
|
||
| `--arrondi-pilule` | `999px` | Boutons |
|
||
|
||
Rythme vertical (marges) :
|
||
|
||
| Élément | Marge |
|
||
|---|---|
|
||
| Paragraphe | `0 0 1.15rem` |
|
||
| `h1` | `1.5rem 0` |
|
||
| `h2` | `4.5rem 0 1.25rem` (grande respiration avant chaque section) |
|
||
| Paragraphe contenant seulement un bouton | `2rem 0` |
|
||
| Photo | `2rem 0` |
|
||
| Exergue, calendrier | `2.25rem 0` (calendrier : `2.25rem 0 1rem`) |
|
||
| Formulaire | `2.5rem 0 1rem` |
|
||
| Note | `margin-top: 2.5rem` |
|
||
| Colonne `.texte` | padding `2rem` en haut, `5rem` en bas |
|
||
|
||
Points de rupture : `30rem` (calendrier resserré), `40rem` (formulaire plus aéré), `48rem` (l'illustration déborde de 4 rem de chaque côté de la colonne).
|
||
|
||
Structure de page : `body` en flex colonne avec `min-height: 100vh`, `main` en `flex: 1`, pour que le pied de page reste en bas.
|
||
|
||
Traits : encre, 2 à 3 px (boutons actifs 2 px, logo 2,5 px, pied de page 3 px, illustration 3 px, anses 6 px). Trait latéral de 4 px pour l'exergue (orange) et les erreurs (rouge).
|
||
|
||
---
|
||
|
||
## 5. Composants
|
||
|
||
La page [`charte/exemple.html`](charte/exemple.html) les montre tous.
|
||
|
||
### Squelette de page
|
||
|
||
```html
|
||
<body>
|
||
<a class="evitement" href="#contenu">Aller au contenu</a>
|
||
<header class="entete">…</header>
|
||
<main id="contenu" tabindex="-1">
|
||
<article class="texte">
|
||
…contenu…
|
||
</article>
|
||
</main>
|
||
<footer class="pied">…</footer>
|
||
</body>
|
||
```
|
||
|
||
`.evitement` est caché au-dessus de l'écran et n'apparaît qu'au focus clavier.
|
||
|
||
### En-tête, logo et navigation
|
||
|
||
```html
|
||
<header class="entete">
|
||
<a class="logo" href="/" aria-label="Kluk, retour à l'accueil">kluk</a>
|
||
<nav class="nav" aria-label="Navigation principale">
|
||
<ul>
|
||
<li><a href="/" aria-current="page">Accueil</a></li>
|
||
<li><a href="/histoire/">Comment est née l'idée</a></li>
|
||
<li><a href="/je-veux-ma-kluk/" class="bouton bouton-petit">Je veux ma Kluk</a></li>
|
||
</ul>
|
||
</nav>
|
||
</header>
|
||
```
|
||
|
||
- Le logo est un mot-symbole en minuscules, en Atkinson Hyperlegible Next graisse 800, encadré d'un trait d'encre arrondi.
|
||
- Les liens de navigation ne sont pas soulignés ; le soulignement vert apparaît au survol et sur la page courante (`aria-current="page"`).
|
||
- Une seule entrée de navigation est mise en valeur en bouton. Quand c'est la page courante, le bouton s'inverse (fond porcelaine, contour encre).
|
||
|
||
### Liens
|
||
|
||
Texte en encre, soulignement vert épais (`0.12em`, décalé de `0.2em`) qui passe à l'encre au survol. Dans le pied de page, soulignement encre fin (1 px, 2 px au survol).
|
||
|
||
### Focus
|
||
|
||
Contour encre de 3 px, décalé de 3 px, coins arrondis à 4 px, sur tous les éléments (`:focus-visible`). Les champs de formulaire utilisent un contour vert.
|
||
|
||
### Bouton
|
||
|
||
```html
|
||
<p><a class="bouton" href="/je-veux-ma-kluk/">Je veux ma Kluk</a></p>
|
||
|
||
<a class="bouton bouton-petit" href="…">Petit bouton</a>
|
||
|
||
<button class="bouton" type="submit">Envoyer</button>
|
||
```
|
||
|
||
Pilule encre, texte porcelaine en 700. Un bouton seul dans son paragraphe prend une marge de 2 rem. Dans un `.formulaire`, un `<button class="bouton">` perd sa bordure native et passe à `opacity: 0.6` quand il est `disabled`.
|
||
|
||
### Titres, chapeau, texte
|
||
|
||
```html
|
||
<h1>Titre de la page</h1>
|
||
<p><em>Le chapeau : une phrase d'accroche en italique.</em></p>
|
||
<p>Texte courant…</p>
|
||
<h2>Intertitre</h2>
|
||
```
|
||
|
||
Le chapeau n'a pas de classe : c'est **le paragraphe qui suit directement le `h1` et ne contient qu'un `<em>`** (sélecteur `h1 + p:has(> em:only-child)`).
|
||
|
||
### Exergue
|
||
|
||
```html
|
||
<p class="exergue">Une phrase à mettre en valeur.</p>
|
||
```
|
||
|
||
### Note
|
||
|
||
```html
|
||
<p class="note">Une précision discrète, en fin de page.</p>
|
||
```
|
||
|
||
### Code en ligne
|
||
|
||
```html
|
||
<code>exemple</code>
|
||
```
|
||
|
||
### Photo
|
||
|
||
```html
|
||
<figure class="photo">
|
||
<img src="photo.jpg" alt="Description de la photo" width="1200" height="900" loading="lazy" decoding="async">
|
||
<figcaption>Légende facultative.</figcaption>
|
||
</figure>
|
||
```
|
||
|
||
Toujours un `alt` descriptif, et `width`/`height` pour éviter les sauts de mise en page. Format des photos du site : 1200 × 900 (4:3) ; image de partage : 1200 × 630.
|
||
|
||
### Emplacement de photo (en attendant l'image)
|
||
|
||
```html
|
||
<figure class="photo">
|
||
<div class="photo-attente">
|
||
<svg viewBox="0 0 40 32" aria-hidden="true" focusable="false"><path d="M3 3 L6 25 Q6.5 29 10.5 29 L24.5 29 Q28.5 29 29 25 L32 3 Z M31.5 8 C39 8 39.5 21 30 22" /></svg>
|
||
<p><strong>Photo à venir</strong><br>Description de la photo attendue.</p>
|
||
</div>
|
||
</figure>
|
||
```
|
||
|
||
Cadre 3:2 en pointillés chêne foncé. Le pictogramme est aussi fourni seul : `img/photo-attente.svg`.
|
||
|
||
### Illustration « table et tasses »
|
||
|
||
Deux façons de l'utiliser :
|
||
|
||
1. **En image**, le plus simple (couleurs et animation intégrées au fichier) :
|
||
|
||
```html
|
||
<figure class="tasses">
|
||
<img src="charte/img/illustration-tasses.svg" alt="Trois tasses de couleur alignées sur la table, et une quatrième posée sur la Kluk, fumante.">
|
||
</figure>
|
||
```
|
||
|
||
2. **En SVG dans la page**, pour qu'elle suive les variables CSS : copier le bloc `<figure class="tasses">` de `charte/exemple.html`. La couleur de chaque tasse vient de sa classe d'humeur (`humeur-gris`, `humeur-orange`, `humeur-rouge`, `humeur-vert`) via `currentColor`. On peut donc réutiliser le symbole `#tasse` :
|
||
|
||
```html
|
||
<use href="#tasse" x="34" y="114" class="humeur-orange" />
|
||
```
|
||
|
||
La vapeur ondule doucement (5 s, deux volutes décalées de 2,5 s), seulement si `prefers-reduced-motion` ne le refuse pas. À partir de 48 rem, la figure déborde de 4 rem de part et d'autre de la colonne.
|
||
|
||
Tasses seules : `img/tasse-gris.svg`, `tasse-orange.svg`, `tasse-vert.svg`, `tasse-rouge.svg`.
|
||
|
||
### Calendrier d'humeurs (décoratif)
|
||
|
||
```html
|
||
<div class="calendrier" aria-hidden="true">
|
||
<span class="jour jour-v"></span>
|
||
<span class="jour jour-o"></span>
|
||
<span class="jour jour-g"></span>
|
||
<span class="jour jour-r"></span>
|
||
<!-- … une case par jour ; la grille remplit des colonnes de 7 jours (une semaine par colonne) -->
|
||
</div>
|
||
```
|
||
|
||
`jour-g` gris, `jour-o` orange, `jour-v` vert, `jour-r` rouge. Carte de fond `--surface` avec liseré intérieur `--porcelaine-fonce`.
|
||
|
||
### Formulaire
|
||
|
||
```html
|
||
<form class="formulaire">
|
||
<div class="champ">
|
||
<label for="champ-email">Votre adresse mail <span class="precision">(obligatoire)</span></label>
|
||
<input id="champ-email" name="Email" type="email" required autocomplete="email">
|
||
</div>
|
||
|
||
<fieldset class="champ">
|
||
<legend>Ce que vous aimeriez faire <span class="precision">(cochez tout ce qui vous ressemble)</span></legend>
|
||
<ul class="choix">
|
||
<li>
|
||
<input id="choix-1" type="checkbox" name="choix[]" value="1">
|
||
<label for="choix-1">Premier choix</label>
|
||
</li>
|
||
</ul>
|
||
</fieldset>
|
||
|
||
<div class="champ">
|
||
<label for="champ-message">Un mot, une idée, une question ? <span class="precision">(facultatif)</span></label>
|
||
<textarea id="champ-message" name="Message" rows="5"></textarea>
|
||
</div>
|
||
|
||
<!-- Champ piège anti-robots : invisible, laissé vide par les humains -->
|
||
<div class="piege" aria-hidden="true">
|
||
<label for="champ-site">Ne pas remplir</label>
|
||
<input id="champ-site" name="_site" type="text" tabindex="-1" autocomplete="off">
|
||
</div>
|
||
|
||
<p class="formulaire-erreur" role="alert" hidden></p>
|
||
|
||
<button class="bouton" type="submit">Envoyer</button>
|
||
|
||
<noscript><p class="formulaire-secours">Ce formulaire a besoin de JavaScript.</p></noscript>
|
||
</form>
|
||
```
|
||
|
||
- Libellés en 700 au-dessus des champs, précisions en 400 encre douce entre parenthèses.
|
||
- Champs : fond blanc, bordure 2 px `--bordure-champ`, arrondi 0,5 rem ; au focus, contour vert 3 px et bordure encre.
|
||
- Les styles ne visent que `input[type="email"]` et `textarea` : ajouter les autres types au sélecteur si besoin.
|
||
- Cases à cocher agrandies (1,35 rem), teintées `--vert-lien`.
|
||
- Message d'erreur : trait rouge à gauche sur fond rosé.
|
||
|
||
### Pied de page
|
||
|
||
```html
|
||
<footer class="pied">
|
||
<div class="pied-interieur">
|
||
<p class="pied-phrase">Une petite phrase facultative.</p>
|
||
<ul class="pied-liens">
|
||
<li><a href="/je-veux-ma-kluk/">Je veux ma Kluk</a></li>
|
||
<li><a href="/mentions-legales/">Mentions légales</a></li>
|
||
</ul>
|
||
</div>
|
||
</footer>
|
||
```
|
||
|
||
C'est « la table en bois » : fond chêne, trait d'encre de 3 px en haut, comme le plateau de l'illustration.
|
||
|
||
---
|
||
|
||
## 6. Impression
|
||
|
||
La navigation, le pied de page, l'illustration et le calendrier sont masqués ; le fond devient blanc.
|
||
|
||
## 7. Icône
|
||
|
||
`img/favicon.svg` : une tasse verte (`--vert`) cernée d'encre. `theme-color` : `#F5F6F0`.
|