/* ===================================================================== style.css — la "peau" de la page --------------------------------------------------------------------- Le CSS (Cascading Style Sheets) décrit l'APPARENCE des éléments HTML. Une règle CSS se lit ainsi : sélecteur { ← QUI on cible (balise, .classe, #id…) propriété: valeur; ← CE QU'ON change } "Cascading" (en cascade) : si plusieurs règles ciblent le même élément, la plus SPÉCIFIQUE gagne (un #id bat une .classe qui bat une balise), et à égalité, la DERNIÈRE écrite gagne. ===================================================================== */ /* --------------------------------------------------------------------- 1. VARIABLES CSS (on dit aussi "custom properties") --------------------------------------------------------------------- :root = l'élément racine du document (). On y déclare des variables qui commencent par deux tirets "--". On les réutilise ensuite partout avec var(--nom). Avantage : changer une couleur à UN endroit la change PARTOUT. --------------------------------------------------------------------- */ :root { --fond: #f7f5f0; /* couleur de fond de la page */ --surface: #ffffff; /* fond des "cartes" et blocs */ --texte: #1d1b18; /* couleur du texte principal */ --texte-doux: #6b665e; /* texte secondaire, plus discret */ --bordure: #e2ddd3; /* traits de séparation */ --accent: #d4a017; /* jaune "JavaScript" */ --accent-fort: #8a6500; /* version plus foncée pour le texte */ --code-fond: #1e1e24; /* fond des éditeurs de code */ --code-texte: #e8e6e3; /* texte dans les éditeurs */ --ok: #2f9e5b; /* vert : succès */ --erreur: #d64545; /* rouge : erreur */ --info: #3b7dd8; /* bleu : information */ --rayon: 10px; /* arrondi des coins */ --police: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; --police-code: "JetBrains Mono", "Fira Code", Consolas, monospace; } /* --------------------------------------------------------------------- MODE SOMBRE AUTOMATIQUE --------------------------------------------------------------------- @media permet d'appliquer des règles SOUS CONDITION. Ici : "si le système de l'utilisateur est réglé en thème sombre". On ne fait que redéfinir les variables : tout le reste suit tout seul. :not([data-theme="light"]) → sauf si l'utilisateur a forcé le clair avec le bouton (voir script.js). --------------------------------------------------------------------- */ @media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { --fond: #141416; --surface: #1c1c20; --texte: #ecebe8; --texte-doux: #9d988f; --bordure: #2e2e34; --accent-fort: #f0c040; --code-fond: #0f0f12; } } /* Même chose quand l'utilisateur force le thème sombre avec le bouton */ :root[data-theme="dark"] { --fond: #141416; --surface: #1c1c20; --texte: #ecebe8; --texte-doux: #9d988f; --bordure: #2e2e34; --accent-fort: #f0c040; --code-fond: #0f0f12; } /* --------------------------------------------------------------------- 2. RÉINITIALISATION DE BASE --------------------------------------------------------------------- "*" = sélecteur universel : TOUS les éléments. box-sizing: border-box → la largeur d'un élément INCLUT ses marges intérieures (padding) et sa bordure. Beaucoup plus intuitif. --------------------------------------------------------------------- */ * { box-sizing: border-box; } html { scroll-behavior: smooth; /* défilement doux quand on clique un lien #ancre */ scroll-padding-top: 20px; /* laisse un peu d'air au-dessus du titre ciblé */ } body { margin: 0; /* le navigateur met 8px par défaut : on enlève */ background: var(--fond); color: var(--texte); font-family: var(--police); font-size: 17px; line-height: 1.65; /* interligne confortable pour la lecture */ } /* --------------------------------------------------------------------- 3. MISE EN PAGE : grille à deux colonnes (menu + contenu) --------------------------------------------------------------------- display: grid transforme un conteneur en GRILLE. grid-template-columns définit la largeur des colonnes : - 260px : le menu a une largeur fixe - 1fr : le contenu prend "1 fraction" de l'espace restant --------------------------------------------------------------------- */ .mise-en-page { display: grid; grid-template-columns: 260px 1fr; min-height: 100vh; /* vh = % de la hauteur de la fenêtre */ } /* Le menu latéral */ .sommaire { position: sticky; /* "colle" en haut quand on défile */ top: 0; height: 100vh; overflow-y: auto; /* barre de défilement si le menu est long */ padding: 24px 18px; border-right: 1px solid var(--bordure); background: var(--surface); } .sommaire .logo { display: flex; /* flexbox : aligne les enfants en ligne */ align-items: center; /* centrés verticalement */ gap: 10px; /* espace entre eux */ font-weight: 700; font-size: 1.1rem; /* rem = relatif à la taille de police racine */ margin-bottom: 20px; } .sommaire .logo span { background: var(--accent); color: #000; font-family: var(--police-code); padding: 2px 8px; border-radius: 6px; } .sommaire ol { list-style: none; /* enlève les numéros automatiques */ padding: 0; margin: 0; counter-reset: chap -1; /* compteur CSS maison, démarre à -1 → premier = 0 */ } .sommaire li { counter-increment: chap; /* +1 à chaque
let */
p code, li code, td code, summary code {
font-family: var(--police-code);
font-size: .88em;
background: var(--surface);
border: 1px solid var(--bordure);
padding: 1px 6px;
border-radius: 5px;
}
/* Encadrés pédagogiques */
.encadre {
border-left: 4px solid var(--info);
background: var(--surface);
padding: 12px 18px;
border-radius: 0 var(--rayon) var(--rayon) 0;
margin: 20px 0;
}
.encadre.astuce { border-color: var(--ok); }
.encadre.attention { border-color: var(--erreur); }
.encadre strong:first-child { display: block; margin-bottom: 4px; }
/* Tableaux */
table {
width: 100%;
border-collapse: collapse; /* fusionne les bordures des cellules */
margin: 16px 0;
font-size: .95rem;
}
th, td {
text-align: left;
padding: 8px 12px;
border-bottom: 1px solid var(--bordure);
}
th { color: var(--texte-doux); font-weight: 600; }
/* Images de schéma faites en texte */
pre.schema {
font-family: var(--police-code);
font-size: .85rem;
background: var(--surface);
border: 1px solid var(--bordure);
border-radius: var(--rayon);
padding: 16px;
overflow-x: auto;
line-height: 1.4;
}
/* ---------------------------------------------------------------------
5. LE "BAC À SABLE" : éditeur de code + sortie
---------------------------------------------------------------------
Chaque .bac contient :
- une barre (titre + boutons)
- un