492 lines
14 KiB
CSS
492 lines
14 KiB
CSS
/* ==================================================================
|
|
Thème commun de la plateforme « Mes cours » — M. Courcelle
|
|
------------------------------------------------------------------
|
|
Une seule feuille pour toute la plateforme : la page d'aiguillage,
|
|
les index de classe et les pages de module partagent ces jetons,
|
|
cette typographie et ces composants. Les feuilles spécialisées
|
|
(exercices-commune.css, jeux-differenciee.css, atelier-texte.css)
|
|
ne redéfinissent jamais une couleur en dur : elles consomment les
|
|
variables déclarées ici.
|
|
|
|
Pour ajouter une classe :
|
|
1. un couple --xxx-fond / --xxx-trait / --xxx-encre dans :root ;
|
|
2. une règle .classe-xxx plus bas ;
|
|
3. les règles de la tuile (.classe--xxx) dans index.html.
|
|
================================================================== */
|
|
|
|
:root {
|
|
/* --- encres et papiers ------------------------------------------ */
|
|
--encre: #16302B; /* texte principal, vert très sombre */
|
|
--encre-douce: #3E5751; /* texte secondaire, AA sur tous les fonds */
|
|
--papier: #FBFCFB; /* fond de page */
|
|
--blanc: #FFFFFF; /* fond des cartes et des champs */
|
|
--trait: #D5DEDA; /* bordures neutres */
|
|
--trait-fort: #B3C2BC;
|
|
|
|
/* --- couleurs par classe ---------------------------------------- */
|
|
/* -fond : aplat pâle ; -trait : filet vif, jamais du texte ;
|
|
-encre : variante sombre du filet, contraste AA pour du texte. */
|
|
--tc-fond: #FBE1E7; --tc-trait: #D6336C; --tc-encre: #B82A59;
|
|
--diff-fond: #DDF5EC; --diff-trait: #05BC8A; --diff-encre: #036F51;
|
|
--comm-fond: #FDF0CF; --comm-trait: #E0A100; --comm-encre: #7F5B00;
|
|
--ts-fond: #DFEAFB; --ts-trait: #2F6FDB; --ts-encre: #215FC2;
|
|
--ae-fond: #F1E3F7; --ae-trait: #9B4DCA; --ae-encre: #8840B4;
|
|
|
|
/* --- couleurs de verdict ---------------------------------------- */
|
|
--juste: #1E7A4C;
|
|
--juste-fond: #E3F3EA;
|
|
--erreur: #B0322A;
|
|
--erreur-fond: #F9E5E3;
|
|
--cible: #F5C542; /* surlignage, marqueur */
|
|
--cible-fond: #FDF6E1;
|
|
|
|
/* --- accent courant --------------------------------------------- */
|
|
/* Neutre par défaut ; chaque page de classe le remplace en posant
|
|
une classe .classe-xxx sur <body>. Tout le reste de la plateforme
|
|
ne connaît que --accent, --accent-fond et --accent-encre. */
|
|
--accent: var(--encre);
|
|
--accent-fond: #EDF2F0;
|
|
--accent-encre: var(--encre);
|
|
|
|
/* --- typographie ------------------------------------------------- */
|
|
--police-titre: "JetBrains Mono", ui-monospace, "Cascadia Code", Consolas, monospace;
|
|
--police-texte: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
--police-doc: Cambria, Georgia, "Times New Roman", serif; /* specimens de traitement de texte */
|
|
|
|
/* --- mesures ------------------------------------------------------ */
|
|
--lecture: 64ch; /* largeur de confort d'un paragraphe */
|
|
--page: 58rem; /* largeur de la colonne de contenu */
|
|
--gouttiere: 1.5rem; /* marge latérale, identique partout */
|
|
--base: 17px;
|
|
}
|
|
|
|
/* Identité de classe : posée sur <body>. */
|
|
.classe-tc { --accent: var(--tc-trait); --accent-fond: var(--tc-fond); --accent-encre: var(--tc-encre); }
|
|
.classe-diff { --accent: var(--diff-trait); --accent-fond: var(--diff-fond); --accent-encre: var(--diff-encre); }
|
|
.classe-comm { --accent: var(--comm-trait); --accent-fond: var(--comm-fond); --accent-encre: var(--comm-encre); }
|
|
.classe-ts { --accent: var(--ts-trait); --accent-fond: var(--ts-fond); --accent-encre: var(--ts-encre); }
|
|
.classe-ae { --accent: var(--ae-trait); --accent-fond: var(--ae-fond); --accent-encre: var(--ae-encre); }
|
|
|
|
/* ==================================================================
|
|
Base
|
|
================================================================== */
|
|
|
|
*, *::before, *::after { box-sizing: border-box; }
|
|
|
|
html {
|
|
font-size: var(--base);
|
|
scroll-behavior: smooth;
|
|
scroll-padding-top: 1rem;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
min-height: 100vh;
|
|
display: flex;
|
|
flex-direction: column;
|
|
background: var(--papier);
|
|
color: var(--encre);
|
|
font-family: var(--police-texte);
|
|
font-size: 1rem;
|
|
line-height: 1.55;
|
|
-webkit-text-size-adjust: 100%;
|
|
}
|
|
|
|
/* Mode projection : agrandit toute la page d'un coup pour le TBI.
|
|
Le jeton doit être posé sur <html> et non sur <body> : c'est <html>
|
|
qui porte font-size, et donc la valeur du rem pour toute la page. */
|
|
html.projection { --base: 25px; }
|
|
|
|
p, ul, ol { max-width: var(--lecture); }
|
|
p { margin: 0 0 .9rem; }
|
|
li { margin-bottom: .35rem; }
|
|
|
|
a { color: var(--accent-encre); }
|
|
a:hover { text-decoration-thickness: 2px; }
|
|
|
|
strong { font-weight: 600; }
|
|
|
|
code, kbd {
|
|
font-family: ui-monospace, "JetBrains Mono", Consolas, "Courier New", monospace;
|
|
font-size: .92em;
|
|
background: var(--accent-fond);
|
|
padding: .05rem .3rem;
|
|
border-radius: .2rem;
|
|
}
|
|
|
|
:focus-visible {
|
|
outline: 3px solid var(--accent-encre);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
html { scroll-behavior: auto; }
|
|
*, *::before, *::after { animation: none !important; transition: none !important; }
|
|
}
|
|
|
|
/* ==================================================================
|
|
En-tête de page
|
|
Fil d'Ariane, titre, sous-titre, et le filet de couleur de la
|
|
classe — le même motif que les tuiles de la page d'accueil.
|
|
================================================================== */
|
|
|
|
.entete {
|
|
background: var(--blanc);
|
|
border-bottom: .5rem solid var(--accent);
|
|
}
|
|
|
|
.entete__interieur {
|
|
max-width: calc(var(--page) + 2 * var(--gouttiere));
|
|
margin: 0 auto;
|
|
padding: 1rem var(--gouttiere) 1.1rem;
|
|
}
|
|
|
|
.ariane {
|
|
font-size: .85rem;
|
|
color: var(--encre-douce);
|
|
margin-bottom: .5rem;
|
|
}
|
|
.ariane a { color: var(--encre-douce); }
|
|
.ariane a:hover { color: var(--accent-encre); }
|
|
.ariane span[aria-hidden] { padding: 0 .35rem; color: var(--trait-fort); }
|
|
.ariane strong { color: var(--encre); font-weight: 600; }
|
|
|
|
.entete h1 {
|
|
margin: 0;
|
|
font-family: var(--police-titre);
|
|
font-size: clamp(1.35rem, 3.2vw, 1.9rem);
|
|
font-weight: 700;
|
|
letter-spacing: -0.02em;
|
|
line-height: 1.15;
|
|
}
|
|
|
|
.entete__meta {
|
|
margin: .35rem 0 0;
|
|
max-width: none;
|
|
color: var(--encre-douce);
|
|
font-size: .95rem;
|
|
}
|
|
|
|
/* Outils à droite du titre (bouton « Agrandir », par exemple) */
|
|
.entete__barre {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: .6rem 1.2rem;
|
|
align-items: flex-end;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
/* ==================================================================
|
|
Corps de page
|
|
================================================================== */
|
|
|
|
.contenu {
|
|
flex: 1;
|
|
width: 100%;
|
|
max-width: calc(var(--page) + 2 * var(--gouttiere));
|
|
margin: 0 auto;
|
|
padding: 2rem var(--gouttiere) 4rem;
|
|
}
|
|
|
|
.chapeau {
|
|
font-size: 1.08rem;
|
|
color: var(--encre-douce);
|
|
max-width: var(--lecture);
|
|
}
|
|
|
|
h2 {
|
|
font-family: var(--police-titre);
|
|
font-size: clamp(1.15rem, 2.6vw, 1.45rem);
|
|
font-weight: 700;
|
|
letter-spacing: -0.01em;
|
|
line-height: 1.25;
|
|
margin: 2.8rem 0 .8rem;
|
|
padding-top: .8rem;
|
|
border-top: 2px solid var(--accent);
|
|
max-width: var(--lecture);
|
|
}
|
|
|
|
.contenu > h2:first-child,
|
|
section > h2:first-child,
|
|
.inner > h2:first-child {
|
|
border-top: 0;
|
|
padding-top: 0;
|
|
margin-top: .5rem;
|
|
}
|
|
|
|
h3 {
|
|
font-family: var(--police-titre);
|
|
font-size: 1.02rem;
|
|
font-weight: 700;
|
|
margin: 1.8rem 0 .5rem;
|
|
color: var(--accent-encre);
|
|
}
|
|
|
|
h4 {
|
|
font-size: .95rem;
|
|
font-weight: 600;
|
|
margin: 1.2rem 0 .4rem;
|
|
}
|
|
|
|
/* ==================================================================
|
|
Encadrés
|
|
.encadre rappel neutre
|
|
.encadre--theorie ce qu'il faut savoir avant de jouer
|
|
.encadre--cle la règle à retenir
|
|
.encadre--attention piège fréquent
|
|
================================================================== */
|
|
|
|
.encadre {
|
|
background: var(--accent-fond);
|
|
border-left: .4rem solid var(--accent);
|
|
border-radius: 0 .4rem .4rem 0;
|
|
padding: .9rem 1.1rem;
|
|
margin: 1.4rem 0;
|
|
max-width: var(--lecture);
|
|
}
|
|
.encadre > :first-child { margin-top: 0; }
|
|
.encadre > :last-child { margin-bottom: 0; }
|
|
.encadre h3 { margin-top: 0; color: var(--encre); }
|
|
|
|
.encadre--theorie { background: var(--accent-fond); }
|
|
.encadre--cle { background: var(--cible-fond); border-left-color: var(--cible); }
|
|
.encadre--attention { background: var(--erreur-fond); border-left-color: var(--erreur); }
|
|
|
|
/* ==================================================================
|
|
Boutons
|
|
================================================================== */
|
|
|
|
.action {
|
|
font: inherit;
|
|
font-weight: 600;
|
|
font-size: .95rem;
|
|
background: var(--encre);
|
|
color: var(--papier);
|
|
border: 2px solid var(--encre);
|
|
border-radius: .4rem;
|
|
padding: .5rem 1.05rem;
|
|
cursor: pointer;
|
|
}
|
|
.action:hover { background: var(--accent-encre); border-color: var(--accent-encre); }
|
|
|
|
.action--secondaire {
|
|
background: var(--blanc);
|
|
color: var(--encre);
|
|
}
|
|
.action--secondaire:hover { background: var(--encre); color: var(--papier); border-color: var(--encre); }
|
|
|
|
.action[disabled] { opacity: .5; cursor: default; }
|
|
.action[disabled]:hover { background: var(--encre); border-color: var(--encre); }
|
|
|
|
.actions {
|
|
display: flex;
|
|
gap: .5rem;
|
|
flex-wrap: wrap;
|
|
margin: .9rem 0;
|
|
}
|
|
|
|
/* ==================================================================
|
|
Sommaire d'un module (bandeau de blocs / de séances)
|
|
================================================================== */
|
|
|
|
.sommaire {
|
|
background: var(--accent-fond);
|
|
border-bottom: 1px solid var(--trait);
|
|
}
|
|
|
|
.sommaire__interieur {
|
|
max-width: calc(var(--page) + 2 * var(--gouttiere));
|
|
margin: 0 auto;
|
|
padding: .7rem var(--gouttiere);
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: .4rem;
|
|
}
|
|
|
|
.sommaire a,
|
|
.sommaire button {
|
|
font: inherit;
|
|
font-size: .9rem;
|
|
font-weight: 600;
|
|
text-decoration: none;
|
|
color: var(--encre);
|
|
background: var(--blanc);
|
|
border: 1px solid var(--trait-fort);
|
|
border-radius: .35rem;
|
|
padding: .35rem .8rem;
|
|
cursor: pointer;
|
|
}
|
|
.sommaire a:hover,
|
|
.sommaire button:hover { border-color: var(--encre); }
|
|
|
|
.sommaire a[aria-current="page"],
|
|
.sommaire button[aria-current="true"] {
|
|
background: var(--encre);
|
|
border-color: var(--encre);
|
|
color: var(--papier);
|
|
}
|
|
|
|
/* ==================================================================
|
|
Index de classe : la liste des modules
|
|
Un <li class="module"> par module. Voir le gabarit en commentaire
|
|
dans chaque index de classe.
|
|
================================================================== */
|
|
|
|
.modules {
|
|
list-style: none;
|
|
padding: 0;
|
|
margin: 1.2rem 0 0;
|
|
max-width: none;
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(17rem, 1fr));
|
|
gap: 1rem;
|
|
}
|
|
|
|
.module { margin: 0; }
|
|
|
|
.module__lien {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
gap: .3rem;
|
|
background: var(--blanc);
|
|
border: 1px solid var(--trait);
|
|
border-top: .4rem solid var(--accent);
|
|
border-radius: .5rem;
|
|
padding: 1.1rem 1.2rem 1.2rem;
|
|
color: var(--encre);
|
|
text-decoration: none;
|
|
}
|
|
@media (hover: hover) {
|
|
.module__lien:hover { border-color: var(--accent); border-top-color: var(--accent); }
|
|
.module__lien:hover .module__titre { text-decoration: underline; text-decoration-thickness: 2px; }
|
|
}
|
|
|
|
.module__num {
|
|
font-family: var(--police-titre);
|
|
font-size: .78rem;
|
|
font-weight: 700;
|
|
letter-spacing: .04em;
|
|
text-transform: uppercase;
|
|
color: var(--accent-encre);
|
|
}
|
|
|
|
.module__titre {
|
|
font-family: var(--police-titre);
|
|
font-size: 1.12rem;
|
|
font-weight: 700;
|
|
line-height: 1.2;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
.module__resume {
|
|
color: var(--encre-douce);
|
|
font-size: .95rem;
|
|
margin-top: .2rem;
|
|
}
|
|
|
|
.module__meta {
|
|
margin-top: auto;
|
|
padding-top: .8rem;
|
|
color: var(--encre-douce);
|
|
font-size: .85rem;
|
|
}
|
|
|
|
/* Module annoncé mais pas encore en ligne : même carte, sans lien. */
|
|
.module--bientot .module__lien {
|
|
border-top-color: var(--trait-fort);
|
|
background: var(--papier);
|
|
color: var(--encre-douce);
|
|
cursor: default;
|
|
}
|
|
.module--bientot .module__num { color: var(--encre-douce); }
|
|
|
|
/* Classe sans aucun module publié */
|
|
.vide {
|
|
background: var(--blanc);
|
|
border: 2px dashed var(--trait-fort);
|
|
border-radius: .5rem;
|
|
padding: 2rem 1.5rem;
|
|
text-align: center;
|
|
color: var(--encre-douce);
|
|
max-width: none;
|
|
}
|
|
|
|
/* ==================================================================
|
|
Tableaux, figures, captures
|
|
================================================================== */
|
|
|
|
table {
|
|
border-collapse: collapse;
|
|
width: 100%;
|
|
max-width: var(--lecture);
|
|
margin: 1.2rem 0;
|
|
font-size: .95rem;
|
|
}
|
|
th, td {
|
|
border-bottom: 1px solid var(--trait);
|
|
padding: .45rem .6rem;
|
|
text-align: left;
|
|
vertical-align: top;
|
|
}
|
|
th {
|
|
background: var(--accent-fond);
|
|
border-bottom: 2px solid var(--accent);
|
|
font-weight: 600;
|
|
}
|
|
|
|
figure {
|
|
margin: 1.4rem 0;
|
|
max-width: var(--lecture);
|
|
}
|
|
figure img {
|
|
width: 100%;
|
|
display: block;
|
|
border: 1px solid var(--trait);
|
|
border-radius: .3rem;
|
|
}
|
|
figcaption {
|
|
font-size: .86rem;
|
|
color: var(--encre-douce);
|
|
margin-top: .4rem;
|
|
}
|
|
|
|
/* Capture pas encore déposée : la page reste lisible et dit quoi ajouter. */
|
|
.manque {
|
|
border: 2px dashed var(--trait-fort);
|
|
background: var(--papier);
|
|
border-radius: .3rem;
|
|
padding: 2rem 1rem;
|
|
text-align: center;
|
|
color: var(--encre-douce);
|
|
font-size: .9rem;
|
|
}
|
|
|
|
/* ==================================================================
|
|
Pied de page
|
|
================================================================== */
|
|
|
|
.pied {
|
|
border-top: 1px solid var(--trait);
|
|
background: var(--blanc);
|
|
color: var(--encre-douce);
|
|
font-size: .88rem;
|
|
}
|
|
.pied__interieur {
|
|
max-width: calc(var(--page) + 2 * var(--gouttiere));
|
|
margin: 0 auto;
|
|
padding: 1.2rem var(--gouttiere) 2rem;
|
|
}
|
|
.pied a { color: var(--encre-douce); }
|
|
|
|
/* ==================================================================
|
|
Impression
|
|
================================================================== */
|
|
|
|
@media print {
|
|
body { background: #fff; }
|
|
.sommaire, .action, .actions, .entete__barre button { display: none; }
|
|
.entete { border-bottom-width: 2px; }
|
|
.contenu { max-width: none; padding: 0; }
|
|
}
|