// charte-tabs.jsx // PREVIEW-ONLY — design-system documentation tab content. Not a production template. // Glyphs (⚠, ✓, ★, ✕, etc.) used here are for in-app docs only and will NEVER ship to PDF/KDP. // Production templates live in stress-pages.jsx + charte-pages.jsx and use exclusively. // Tab content panels for the Allo Education design-system mini-site. /* ---------- Tab: Vue d'ensemble ---------- */ function TabOverview() { return ( <>
Charte graphique · v1.2 · LOCK FINAL

Une collection.
Une seule identité.

Cette charte définit les règles visuelles, structurelles et éditoriales pour générer 50+ templates cohérents, du CP à la Terminale, multi-matières, imprimables KDP et pilotés par theme.json.

Principes
{[ ["Premium éducatif", "Chaleureux, rassurant, jamais bébé."], ["Lisibilité d'abord", "Print 300 dpi, KDP, texte ≥ 0.12in."], ["Système, pas pages", "Header / footer / grille communs ; seules les données changent."], ["Ketty utile", "Astuce, méthode, encouragement — jamais décoratif."], ].map(([t, d]) => (
{t}
{d}
))}

Architecture du système

Chaque page du livre se compose d'un shell commun (header + footer + grille) et d'un centre de page qui change selon le template. Tout est piloté par tokens.

{[ ["1", "theme.json", "primary, niveau, density, qrVisible, scoreVisible…", "var(--ae-primary)"], ["2", "tokens CSS", "couleurs, typographies, espacements, radii, échelle pouces.", "var(--ae-orange)"], ["3", "composants", "
,
, , , , …", "var(--ae-success)"], ].map(([n, t, d, c]) => (
Étape {n}
{t}
{d}
))}
Règle d'or : on ne redessine pas le header / footer à chaque template. Pour créer un nouveau cahier, on configure son theme.json, on choisit les composants à insérer dans le centre, et on génère.

Sommaire

{[ ["01", "Couleurs", "Palette principale, sémantique, règles d'usage."], ["02", "Typographie", "Fredoka × Nunito Sans, échelle, lisibilité print."], ["03", "Grille 8.5×11", "Marges, colonnes, zones interdites."], ["04", "Header / Footer", "Shell commun à toutes les pages."], ["05", "Composants", "Leçon, exercice, QCM, Ketty, QR, bilan…"], ["06", "Ketty", "Slot mascotte 3D, poses, règles d'usage."], ["07", "Variantes par niveau", "CP/CE1 → Lycée."], ["08", "Densité", "Aéré · Standard · Dense."], ["09", "Do / Don't", "Bonnes pratiques, erreurs à éviter."], ["10", "Templates", "3 pages exemples : Primaire / Collège / Lycée."], ["11", "Tokens", "theme.json + variables CSS."], ].map(([n, t, d]) => (
{n} {t}
{d}
))}
); } /* ---------- Tab: Couleurs ---------- */ function Swatch({ name, hex, varName, dark = false, ratio }) { return (
{ratio && {ratio}}
{name}
{hex}
{varName}
); } function TabColors() { return ( <>

Palette principale

L'identité Allo Education s'appuie sur trois couleurs primaires : un bleu profond rassurant, un orange énergie, et un jaune accent. Le blanc et un cream très clair structurent les fonds.

Couleurs sémantiques

À utiliser uniquement pour les états indiqués. Ne jamais détourner pour de la décoration.

Neutres & fonds

Règles d'usage

{[ ["Ratio dominant 60 / 30 / 10", "60% blanc + bleu Allo en aplats forts (header, titres). 30% neutres et accents bleu soft. 10% orange + jaune pour accentuer.", "var(--ae-primary)"], ["Pas plus de 3 couleurs par bloc", "Sur un encadré, on ne mélange jamais plus de 3 couleurs en aplat (hors texte noir).", "var(--ae-orange)"], ["Un encadré = une intention", "Bleu = exercice. Orange = QCM / défi. Jaune = leçon / je retiens. Vert = méthode. Rouge = piège.", "var(--ae-success)"], ["Pink uniquement en couverture", "Le rose vif (#E91E78) est réservé aux titres de couvertures. Jamais à l'intérieur du livre.", "var(--ae-pink)"], ].map(([t, d, c]) => (
{t}
{d}
))}
); } /* ---------- Tab: Typographie ---------- */ function TabTypography() { return ( <>

Familles

Titres · joyeux
Fredoka
Ronde, scolaire, chaleureuse. Utilisée pour les titres, sous-titres, badges, numéros d'exercice, formules encadrées et tout élément joyeux.

Poids utilisés : 500 / 600 / 700.
Corps · lecture
Nunito Sans
Très lisible en print, douce et moderne. Corps de texte, consignes, questions, corrections, légendes et métadonnées.

Poids utilisés : 400 / 600 / 700 / 800.

Échelle (mesures print)

Toutes les tailles sont définies en pouces pour rester stables en impression. Le minimum absolu pour le corps de texte est 0.12in (≈ 9pt). En-dessous : illisible imprimé.

{[ ["Display cover", "Fredoka 600", "0.9in", "≈ 65pt", "Couvertures uniquement", { fontFamily: "Fredoka", fontSize: 86, lineHeight: 1, fontWeight: 700 }, "Cahier"], ["Titre H1", "Fredoka 600", "0.36in", "≈ 26pt", "Titres de leçon / chapitre", { fontFamily: "Fredoka", fontSize: 34, fontWeight: 600, color: "var(--ae-primary-deep)" }, "Le théorème de Pythagore"], ["Titre H2", "Fredoka 600", "0.22in", "≈ 16pt", "Sections / encadrés titrés", { fontFamily: "Fredoka", fontSize: 22, fontWeight: 600, color: "var(--ae-primary-deep)" }, "Vocabulaire"], ["Titre H3", "Fredoka 500", "0.18in", "≈ 13pt", "Sous-sections", { fontFamily: "Fredoka", fontSize: 18, fontWeight: 500, color: "var(--ae-primary-deep)" }, "Je retiens"], ["Consigne", "Nunito Sans 700", "0.15in", "≈ 11pt", "Énoncés d'exercice", { fontFamily: "Nunito Sans", fontSize: 15, fontWeight: 700, color: "var(--ae-text)" }, "Coche la bonne réponse."], ["Corps", "Nunito Sans 400", "0.13in", "≈ 9.5pt", "Texte courant", { fontFamily: "Nunito Sans", fontSize: 14, fontWeight: 400, color: "var(--ae-text)", lineHeight: 1.55 }, "Léa range deux sandwichs et une pomme dans son sac."], ["Corps min print", "Nunito Sans 600", "0.12in", "≈ 9pt", "Légendes, métadonnées (jamais sous cette taille)", { fontFamily: "Nunito Sans", fontSize: 13, fontWeight: 600, color: "var(--ae-text-soft)" }, "Document 1 · schéma de la traduction"], ["Eyebrow", "Nunito Sans 800", "0.1in", "≈ 7.5pt · uppercase, +letter-spacing", "Étiquettes / surtitres uniquement", { fontFamily: "Nunito Sans", fontSize: 11, fontWeight: 800, letterSpacing: ".14em", textTransform: "uppercase", color: "var(--ae-orange)" }, "Compétences B.O."], ].map(([name, font, size, ptSize, role, sampleStyle, sampleText]) => (
{name}
{font}
{role}
{sampleText}
{size}
{ptSize}
))}

Règles de lisibilité

{[ ["Interligne (line-height)", "1.45 – 1.6 sur le corps. 1.05 – 1.15 sur les titres."], ["Mesure de ligne", "55–80 caractères. Au-delà, fatigue de lecture."], ["Contraste", "Min 4.5:1 corps. AAA visé sur fond blanc."], ["Justification", "Texte aligné à gauche. Jamais justifié dur (rivières)."], ["Italique", "Réservé aux citations / mots étrangers. Jamais sur paragraphes entiers."], ["Majuscules", "Uniquement eyebrow / labels < 0.12in. Pas de titres tout caps."], ["Mathématiques", "Nunito Sans en exposant via . Fallback Arial pour symboles rares."], ["Veuves / orphelines", "Jamais une ligne seule en bas / haut de page."], ].map(([l, d]) => (
{l}
{d}
))}
); } /* ---------- Tab: Grille ---------- */ function TabGrid() { return ( <>

Page 8.5 × 11 in

Format officiel : portrait, 8.5 × 11 pouces (215.9 × 279.4 mm), exporté en PDF 300 dpi pour Amazon KDP. Grille à 6 colonnes, gouttière 0.18in, marges latérales 0.55in.

{/* Diagram */}
{/* Page outline */} {/* Header band */} Header — 0.95 in {/* Footer band */} Footer — 0.85 in {/* Content area with margins */} {/* 6 columns */} {[0,1,2,3,4,5].map(i => { const colW = (260 - 5*6) / 6; const x = 40 + i * (colW + 6); return ; })} {/* Margins labels */} marge 0.55 in marge 0.55 in zone utile · 7.4 in × 8.7 in marge basse 0.5 in {/* Header label */} 8.5 in 11 in
{/* Specs */}
Page
8.5 × 11 in
Portrait · 215.9 × 279.4 mm · KDP
Marges latérales
0.55 in
Côté reliure : prévoir +0.125in
Marges haut · bas
0.5 in
Header
0.95 in
Bord à bord (full-bleed bleu)
Footer
0.85 in
Zone utile
7.4 × 8.7 in
Colonnes
6
Permet 1 / 2 / 3 / 6 colonnes
Gouttière
0.18 in
Baseline grid
0.21 in
Lignes de réponse manuscrites
Bleed
0.125 in
Sur le full-bleed bleu uniquement

Visualisation

Grille verticale (orange) + zone de marge (bleu pointillé) projetées sur une page-test.

Titre de leçon
📖 Bloc leçon

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ut metus vitae enim consequat tincidunt.

Exercice 1
Exercice 2

Zones interdites

Pour que rien ne soit rogné en impression / massicotage.

{[ ["⚠ Reliure", "0.125 in supplémentaires côté reliure : ne jamais y placer texte critique, QR, ni numéro de page."], ["⚠ Bord de page", "Aucun contenu utile dans les 0.25 in extérieurs. Seul le full-bleed du header peut s'y prolonger."], ["⚠ Sous le header", "0.32 in de respiration sous la courbe du header avant tout contenu."], ["⚠ Au-dessus du footer", "0.16 in de respiration au-dessus du footer."], ["⚠ QR central", "0.6 × 0.6 in minimum, jamais collé à une autre forme. Toujours sur fond blanc."], ["⚠ Pied de bloc", "Une zone de réponse ne peut pas se terminer à moins de 0.2 in du footer."], ].map(([t, d]) => (
{t}
{d}
))}
); } /* ---------- Tab: Header / Footer ---------- */ function TabHeaderFooter() { return ( <>

Header commun

Hauteur fixe 0.95 in, full-bleed bleu Allo, courbe douce sur le bord inférieur. Structure logo / matière-niveau / page. Identique sur 100% des pages intérieures.

{/* Live header preview */}
Logo (gauche)
Toque + texte "Allo / Education / Éditions". Toujours blanc + orange sur bleu. Hauteur logo = 0.42in.
Pill matière · niveau
Capsule centrée. Format : Matière · Niveau. Fredoka 0.2in. Border blanc 1.5px.
Badge page (droite)
Pill jaune sur bleu deep. Texte au choix : Page 12, Bloc 1 · Page 12, ou Défi · Page 74.

Variantes Header

Toutes les variantes conservent la même hauteur, le bleu Allo et la courbe basse. On change uniquement les données et l'éventuel badge spécial.

{[ ["Standard primaire", { matiere: "Français", niveau: "CM2", page: 12 }], ["Collège — bloc + page", { matiere: "Maths", niveau: "Collège 4ᵉ", page: "Bloc 1 · Page 12" }], ["Lycée — chapitre", { matiere: "SVT", niveau: "Première", page: "Chap. 3 · Page 47" }], ["Défi / spécial", { matiere: "Maths", niveau: "Brevet 3ᵉ", page: "Défi · Page 74" }], ["Mode d'emploi", { matiere: "Mode d'emploi", niveau: "Primaire", page: "Page 3" }], ].map(([label, props]) => (
{label} {`
`}
))}

Footer commun

Hauteur 0.85 in. Trois zones : score à gauche, QR centré, numéro de page à droite.

Score
Capsule pointillée bleue. Format : Score : ___ / N. Fredoka 0.18in.
QR + texte
Disque bleu 0.55in + label "Corriger avec Ketty / sur alloeducation.fr". URL en orange.
Page
Cercle bleu 0.55in, chiffre Fredoka 0.22in en blanc.

Règles de visibilité

{[ ["qrVisible = false", "Ex. mode d'emploi, ouverture de chapitre, bilan trimestriel.", "Le bloc QR + texte est masqué. Le numéro de page reste à droite. Le score peut rester."], ["scoreVisible = false", "Ex. page théorique sans exercice, lexique, tableau récapitulatif.", "La capsule score est masquée. Le QR et le numéro de page restent."], ["Les deux à false", "Pages éditoriales : préface, sommaire, ouverture de partie.", "Footer minimal : numéro de page seul, centré."], ["Page double / annexes", "Glossaires, corrigés, planches d'autocollants.", "Footer remplacé par un footer minimaliste : page + URL alloeducation.fr."], ].map(([t, ex, r]) => (
{t}
{ex}
{r}
))}
); } Object.assign(window, { TabOverview, TabColors, TabTypography, TabGrid, TabHeaderFooter, });