/* =====================================================================
   Charte commune Guépard (refonte claire du 18/10/2026)
   Une seule charte pour l'appli élève (/app/) et GuépaCode (/parcours-code/) :
   mêmes couleurs, même en-tête (logo + titre + Langue + Couleur), même barre du bas.
   3 nuances d'écran choisies par l'élève (clé guepard-app-nuance) :
   sombre (gris-noir, par défaut) · gris (gris doux) · clair.
   ===================================================================== */
html:root[data-nuance]{
  --gp-orange:#E87511; --gp-orange-2:#F08A2C; --gp-sur-orange:#1A0E02;
  --gp-vert:#2FC27A; --gp-rouge:#FF6B5E;
  --gp-rayon:16px;
  --gp-police:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",Roboto,"Noto Sans","Noto Naskh Arabic",Tahoma,sans-serif;
  --gp-titres:"Archivo Black",Archivo,"Arial Black",system-ui,sans-serif;
}
html:root[data-nuance="sombre"]{
  --gp-fond:#151515; --gp-carte:#1F1F1F; --gp-carte-2:#2A2A2A; --gp-ligne:#383838;
  --gp-texte:#F5F5F5; --gp-texte-2:#D2D2D2; --gp-texte-3:#ABABAB;
  --gp-accent:#F59A45; --gp-accent-doux:#2B1D10; --gp-barre:#0D0D0D; --gp-barre-ligne:#262626;
  color-scheme:dark;
}
html:root[data-nuance="gris"]{
  --gp-fond:#2C2F34; --gp-carte:#373B41; --gp-carte-2:#42474E; --gp-ligne:#535960;
  --gp-texte:#FFFFFF; --gp-texte-2:#E4E6E9; --gp-texte-3:#C6CAD0;
  --gp-accent:#FFB066; --gp-accent-doux:#4A3A2B; --gp-barre:#23262A; --gp-barre-ligne:#3B4046;
  color-scheme:dark;
}
html:root[data-nuance="clair"]{
  --gp-fond:#F2F2F2; --gp-carte:#FFFFFF; --gp-carte-2:#EBEBEB; --gp-ligne:#D6D6D6;
  --gp-texte:#141414; --gp-texte-2:#383838; --gp-texte-3:#5A5A5A;
  --gp-accent:#B35500; --gp-accent-doux:#FCEBDA; --gp-barre:#FFFFFF; --gp-barre-ligne:#DCDCDC;
  --gp-vert:#12864F; --gp-rouge:#C6362A;
  color-scheme:light;
}
/* GuépaCode : ses propres variables suivent la nuance choisie (gris neutres + orange de l'agence) */
html:root[data-nuance]{
  --ground:var(--gp-fond); --surface:var(--gp-carte); --raise:var(--gp-carte-2); --rule:var(--gp-ligne);
  --ink:var(--gp-texte); --ink-2:var(--gp-texte-2); --ink-3:var(--gp-texte-3);
  --orange:var(--gp-accent); --orange-2:var(--gp-orange-2); --orange-soft:var(--gp-accent-doux);
  --go:var(--gp-vert); --stop:var(--gp-rouge);
}
/* clair : un orange qui reste lisible en texte (3,9:1) ET sous un texte foncé dans les gros boutons (4,8:1) */
html:root[data-nuance="clair"]{ --orange:#D06200; --orange-2:#E87511; }
html[data-nuance] body{background:var(--gp-fond);color:var(--gp-texte)}

/* ---------- en-tête commun ---------- */
.gp-barre{overflow:visible;position:sticky;top:0;z-index:50;background:var(--gp-barre);border-bottom:1px solid var(--gp-barre-ligne);
  padding:calc(8px + env(safe-area-inset-top)) 12px 8px;font-family:var(--gp-police);color:var(--gp-texte)}
.gp-barre .gp-in{max-width:760px;margin:0 auto;display:flex;align-items:center;gap:10px}
.gp-logo{flex:0 0 auto;display:grid;place-items:center;width:46px;height:46px;border-radius:12px;background:#111;text-decoration:none}
.gp-logo img{width:40px;height:auto;display:block}
.gp-titre{flex:1 1 auto;min-width:0;line-height:1.15}
.gp-titre small{display:block;font:700 11.5px/1.2 var(--gp-police);letter-spacing:.08em;text-transform:uppercase;color:var(--gp-accent);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gp-titre b{display:block;font:400 17px/1.15 var(--gp-titres);color:var(--gp-texte);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}
.gp-bouton{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:1px;min-height:46px;padding:4px 10px;
  border-radius:12px;border:1.5px solid var(--gp-ligne);background:var(--gp-carte);color:var(--gp-texte);cursor:pointer;font-family:var(--gp-police);text-align:start}
.gp-bouton:active{transform:scale(.97)}
.gp-bouton .gp-mini{font:600 11.5px/1.2 var(--gp-police);color:var(--gp-texte-3);white-space:nowrap;display:flex;align-items:center;gap:4px}
.gp-bouton .gp-mini svg{width:13px;height:13px}
.gp-bouton .gp-val{font:700 15px/1.2 var(--gp-police);white-space:nowrap;max-width:118px;overflow:hidden;text-overflow:ellipsis}
.gp-langue{border-color:var(--gp-orange)}
.gp-nuance{align-items:center;width:52px;padding:4px}
.gp-nuance svg{width:22px;height:22px;color:var(--gp-accent)}
.gp-nuance .gp-mini{font-size:10.5px}
@media (max-width:359px){
  .gp-barre{padding-left:8px;padding-right:8px}
  .gp-barre .gp-in{gap:6px}
  .gp-logo{width:40px;height:40px} .gp-logo img{width:34px}
  .gp-titre b{font-size:15px}
  .gp-bouton{padding:4px 7px} .gp-bouton .gp-val{max-width:104px;font-size:13.5px}
  .gp-titre small{font-size:10.5px}
  .gp-dock a{font-size:11.5px}
  .gp-nuance{width:44px}
}

/* ---------- barre du bas commune ---------- */
.gp-dock{position:fixed;left:0;right:0;bottom:0;z-index:50;background:var(--gp-barre);border-top:1px solid var(--gp-barre-ligne);
  padding:6px 4px calc(6px + env(safe-area-inset-bottom));font-family:var(--gp-police)}
.gp-dock{display:block;overflow:visible;gap:0}
.gp-dock .gp-in{width:100%;max-width:620px;margin:0 auto;display:flex}
.gp-dock a{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px 2px 4px;border-radius:12px;
  text-decoration:none;color:var(--gp-texte-3);font:600 12.5px/1.15 var(--gp-police);text-align:center;position:relative}
.gp-dock a svg{width:24px;height:24px}
.gp-dock a span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gp-dock a.gp-actif{color:var(--gp-accent);background:var(--gp-accent-doux)}
.gp-dock a.gp-actif:before{content:"";position:absolute;top:-7px;left:22%;right:22%;height:3px;border-radius:0 0 3px 3px;background:var(--gp-orange)}
body.gp-avec-dock{padding-bottom:calc(78px + env(safe-area-inset-bottom))}

/* ---------- feuilles (langue, couleur, parrainage…) ---------- */
.gp-voile{position:fixed;inset:0;z-index:90;background:rgb(0 0 0 / .55);display:flex;align-items:flex-end;justify-content:center;font-family:var(--gp-police)}
.gp-feuille{background:var(--gp-carte);color:var(--gp-texte);width:100%;max-width:560px;max-height:88vh;overflow:auto;border-radius:22px 22px 0 0;
  padding:18px 16px calc(18px + env(safe-area-inset-bottom));box-shadow:0 -10px 40px rgb(0 0 0 / .35)}
@media (min-width:700px){.gp-voile{align-items:center}.gp-feuille{border-radius:22px}}
.gp-feuille-tete{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
.gp-feuille-tete h2{margin:0;font:400 20px/1.2 var(--gp-titres);display:flex;align-items:center;gap:8px}
.gp-feuille-tete h2 svg{width:24px;height:24px;color:var(--gp-accent)}
.gp-fermer{min-width:46px;min-height:46px;border-radius:12px;border:1.5px solid var(--gp-ligne);background:var(--gp-carte-2);color:var(--gp-texte);font:700 15px var(--gp-police);cursor:pointer;padding:0 12px}
.gp-liste-lg{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.gp-liste-lg button{display:flex;align-items:center;gap:10px;min-height:56px;padding:8px 12px;border-radius:14px;border:2px solid var(--gp-ligne);
  background:var(--gp-carte-2);color:var(--gp-texte);font:700 16px/1.2 var(--gp-police);cursor:pointer;text-align:start}
.gp-liste-lg button .gp-dr{font-size:24px;line-height:1;flex:0 0 auto}
.gp-liste-lg button small{display:block;font:500 12.5px/1.2 var(--gp-police);color:var(--gp-texte-3);margin-top:2px}
.gp-liste-lg button.gp-on{border-color:var(--gp-orange);background:var(--gp-accent-doux)}
.gp-liste-lg button.gp-on:after{content:"✓";margin-inline-start:auto;color:var(--gp-accent);font-weight:900;font-size:18px}
@media (max-width:359px){.gp-liste-lg{grid-template-columns:1fr}}
.gp-nuances{display:grid;gap:10px}
.gp-nuances button{display:flex;align-items:center;gap:14px;min-height:64px;padding:10px 14px;border-radius:14px;border:2px solid var(--gp-ligne);
  background:var(--gp-carte-2);color:var(--gp-texte);font:700 17px var(--gp-police);cursor:pointer;text-align:start}
.gp-nuances button.gp-on{border-color:var(--gp-orange)}
.gp-nuances button.gp-on:after{content:"✓";margin-inline-start:auto;color:var(--gp-accent);font-weight:900;font-size:20px}
.gp-nuances i{flex:0 0 52px;height:40px;border-radius:10px;border:1px solid rgb(128 128 128 / .5);position:relative;overflow:hidden}
.gp-nuances i:after{content:"";position:absolute;left:8px;right:8px;bottom:8px;height:8px;border-radius:4px;background:#E87511}
.gp-nuances small{display:block;font:500 13.5px var(--gp-police);color:var(--gp-texte-3);margin-top:2px}

/* écran d'accueil « Choisissez votre langue » (premier lancement) */
.gp-bienvenue{position:fixed;inset:0;z-index:95;background:var(--gp-fond);color:var(--gp-texte);overflow:auto;font-family:var(--gp-police);
  padding:calc(20px + env(safe-area-inset-top)) 16px calc(24px + env(safe-area-inset-bottom))}
.gp-bienvenue .gp-in{max-width:560px;margin:0 auto}
.gp-bienvenue .gp-logo{width:64px;height:64px;margin:0 auto 12px}
.gp-bienvenue .gp-logo img{width:56px}
.gp-bienvenue h1{font:400 26px/1.15 var(--gp-titres);text-align:center;margin:0 0 6px}
.gp-bienvenue p{text-align:center;color:var(--gp-texte-2);margin:0 0 16px;font-size:16px;line-height:1.5}
.gp-bienvenue .gp-note{font-size:14px;color:var(--gp-texte-3);margin-top:16px}

/* ---------- composants communs (appli + accueil GuépaCode) ---------- */
.gp-tuiles{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.gp-tuile{display:flex;flex-direction:column;align-items:flex-start;gap:8px;min-height:118px;padding:14px;border-radius:var(--gp-rayon);
  background:var(--gp-carte);border:1.5px solid var(--gp-ligne);color:var(--gp-texte);text-decoration:none;cursor:pointer;
  font:inherit;text-align:start;transition:transform .1s,border-color .15s;width:100%}
.gp-tuile:hover{border-color:var(--gp-orange)} .gp-tuile:active{transform:scale(.97)}
.gp-tuile .gp-ic{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;background:var(--gp-accent-doux);color:var(--gp-accent)}
.gp-tuile .gp-ic svg{width:26px;height:26px}
.gp-tuile b{font:800 17px/1.2 Archivo,var(--gp-police);color:var(--gp-texte)}
.gp-tuile small{display:block;font:500 14px/1.3 var(--gp-police);color:var(--gp-texte-3);margin-top:2px}
.gp-tuile.gp-forte{background:var(--gp-carte);border:2px solid var(--gp-orange)}
.gp-tuile.gp-forte .gp-ic{background:var(--gp-accent-doux);color:var(--gp-accent)}
.gp-tuile.gp-forte b{color:var(--gp-texte)}.gp-tuile.gp-forte small{color:var(--gp-texte-2)}
.gp-lignes{display:flex;flex-direction:column;gap:8px}
.gp-ligne{display:flex;align-items:center;gap:12px;min-height:62px;padding:10px 14px;border-radius:14px;background:var(--gp-carte);
  border:1.5px solid var(--gp-ligne);color:var(--gp-texte);text-decoration:none;font:inherit;text-align:start;cursor:pointer;width:100%}
.gp-ligne .gp-ic{flex:0 0 40px;width:40px;height:40px;border-radius:11px;display:grid;place-items:center;background:var(--gp-accent-doux);color:var(--gp-accent)}
.gp-ligne .gp-ic svg{width:22px;height:22px}
.gp-ligne b{display:block;font:700 16px/1.25 var(--gp-police)}
.gp-ligne small{display:block;font:500 14px/1.3 var(--gp-police);color:var(--gp-texte-3)}
.gp-ligne .gp-fl{margin-inline-start:auto;color:var(--gp-texte-3);flex:0 0 auto}
.gp-ligne .gp-fl svg{width:20px;height:20px}
[dir=rtl] .gp-ligne .gp-fl svg{transform:scaleX(-1)}

/* GuépaCode : l'en-tête commun remplace l'ancienne marque et l'ancien menu de langue */
.gp-code header .brand,.gp-code .lg-choix,.gp-code .logo-acces{display:none !important}

/* les boutons de la charte ne prennent pas les styles des pages (button{width:100%}…) */
.gp-charte button{width:auto;margin:0;line-height:normal;text-transform:none;letter-spacing:normal;box-shadow:none;font-family:var(--gp-police)}
.gp-charte .gp-liste-lg button,.gp-charte .gp-nuances button{width:100%}
.gp-charte a{text-decoration:none}

/* ===== contrôle final 20/10 — règle de la gérante : JAMAIS de texte sur fond orange plein (pages du code et appli) =====
   fond sombre (ou clair en mode clair), contour orange, texte lisible. */
.vg-fin .vg-fin-go,.vg-suite,.vg-cmd button.vg-play,.ch-fin,#cx-go,#qsend,#p-quiz button.gros,button.gros,.se-b2,.filtre[aria-pressed="true"],#lancer.lancer,
.jeu-bt,.fiche button.or,#cx .cx-suiv,.viral button.defi,.lc-lire.parle,#qx .qx-ecoute.parle,
.btn-or,.onglets button[aria-selected="true"],.cadeau,.fil-page .btn.plein,.tn .bt.plein{
  background:var(--gp-carte-2,#2A2A2A)!important;background-image:none!important;color:var(--gp-texte,#F5F5F5)!important;
  border:2px solid var(--gp-orange,#E87511)!important}
.tn .bt.plein .tr,.fil-page .btn.plein .tr,.cadeau *{color:inherit!important}
#cx .cx-suiv:disabled{border-style:dashed!important;opacity:.85}
.step.now .num{background:transparent!important;color:var(--gp-orange,#E87511)!important;border:2px solid var(--gp-orange,#E87511)!important}
.face.arriere{background:var(--gp-carte,#1F1F1F)!important;background-image:none!important;color:var(--gp-texte,#F5F5F5)!important;border:2px solid var(--gp-orange,#E87511)!important}
.face.arriere *{color:inherit}
.puce.active b,.guide h3 span,.voix.on,.date-conduite ol.pas li:before,.argent ol.simple li:before{
  background:transparent!important;color:var(--gp-accent,#F59A45)!important;border:2px solid var(--gp-orange,#E87511)!important;box-sizing:border-box}

/* appli-v2 (20/10/2026) : bouton ☰ de l'en-tête de l'appli (Langue et Couleur rangées dedans) */
.gp-menu-app{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;margin-inline-start:auto;border-radius:14px;border:1.5px solid var(--gp-ligne);background:transparent;color:var(--gp-texte);cursor:pointer;padding:0}
.gp-menu-app svg{width:24px;height:24px}
.gp-menu-liste{display:grid;gap:10px}
.gp-menu-liste button,.gp-menu-liste a{text-decoration:none;display:flex;align-items:center;gap:14px;width:100%;min-height:64px;padding:10px 14px;border-radius:14px;border:2px solid var(--gp-ligne);background:var(--gp-carte-2);color:var(--gp-texte);font:700 16.5px var(--gp-police);cursor:pointer}
.gp-menu-liste small{display:block;font:500 13.5px var(--gp-police);color:var(--gp-texte-3);margin-top:2px}
.gp-menu-liste a svg:last-child{flex-basis:18px;width:18px;height:18px;margin-inline-start:auto;color:var(--gp-texte-3)}
.gp-menu-liste button svg,.gp-menu-liste a svg:first-child{flex:0 0 26px;width:26px;height:26px;color:var(--gp-accent)}
.gp-menu-liste a span,.gp-menu-liste button span{text-align:start;font-weight:700}
