/* ==========================================================================
   L'application — elle prolonge site.css, elle ne le remplace pas.
   Mêmes couleurs, mêmes polices, mêmes bandes pleine largeur.
   ========================================================================== */

.app-main{min-height:60vh;padding-bottom:60px}
.vue{display:none}
.vue.active{display:block}

/* ---------------------------------------------------------- entête app */
.app-nav{display:flex;align-items:center;gap:clamp(10px,1.6vw,22px);flex-wrap:wrap;padding:10px var(--pad) 10px 0}
.onglet{
  font-family:var(--display);font-size:15px;font-weight:700;color:var(--muted);
  padding:10px 4px;border-bottom:3px solid transparent;background:none;
}
.onglet[aria-current="page"]{color:var(--ink);border-bottom-color:var(--blue)}
.onglet:hover{color:var(--ink)}
.app-nav .btn{margin-left:auto}

/* Pastille du compte : on voit tout de suite qui est connecté. */
.badge-compte{
  display:flex;align-items:center;gap:10px;margin-left:auto;
  background:var(--blue-soft);color:var(--ink);padding:6px 16px 6px 6px;border-radius:999px;
  border:2px solid transparent;text-align:start;max-width:260px;
}
.badge-compte:hover,.badge-compte[aria-current="page"]{border-color:var(--blue)}
.badge-compte:focus-visible{outline:3px solid var(--yellow);outline-offset:2px}
.badge-compte .avatar{
  flex:none;width:38px;height:38px;border-radius:50%;display:grid;place-items:center;
  background:var(--yellow);color:var(--ink);font-family:var(--display);font-weight:800;font-size:15px;letter-spacing:.02em;
}
.badge-compte .identite{display:flex;flex-direction:column;min-width:0;line-height:1.2}
.badge-compte strong{font-family:var(--display);font-size:15px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.badge-compte .identite span{font-size:12.5px;font-weight:700;color:var(--blue)}
.app-nav .badge-compte + .btn{margin-left:0}
[dir="rtl"] .badge-compte{padding:6px 6px 6px 16px;margin-left:0;margin-right:auto}

/* ------------------------------------------------------------- bandeau */
.entete{background:var(--blue);color:var(--white);padding:clamp(26px,3.4vw,44px) 0;margin-bottom:var(--souffle)}
.entete h1{font-size:clamp(26px,3.4vw,40px);color:var(--white)}
.entete p{color:#cfe1fa;font-weight:700;margin-top:8px;max-width:60ch}
.entete .eyebrow{color:var(--yellow);display:block;margin-bottom:10px}

/* ------------------------------------------------------------ messages */
.message{padding:15px 18px;font-weight:700;font-size:15.5px;margin:0 0 18px}
.message.erreur{background:#fdeae7;color:#a3271a;border-left:4px solid var(--red)}
.message.ok{background:var(--green-soft);color:#06513d;border-left:4px solid var(--green)}
.message.info{background:var(--yellow-soft);color:var(--yellow-ink);border-left:4px solid var(--yellow)}
.message:empty{display:none}

/* ------------------------------------------------------------ formulaires */
.formulaire{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;max-width:820px}
.formulaire .large{grid-column:1/-1}
.champ{display:flex;flex-direction:column;gap:7px}
.champ>span{font-family:var(--display);font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.champ input,.champ select,.champ textarea{
  font-family:var(--body);font-size:16px;font-weight:600;color:var(--ink);
  background:var(--white);border:2px solid var(--sand);padding:13px 14px;width:100%;
}
.champ input:focus,.champ select:focus,.champ textarea:focus{outline:3px solid var(--blue);outline-offset:1px;border-color:var(--blue)}
.champ textarea{min-height:96px;line-height:1.55;resize:vertical}
.champ small{font-size:13px;font-weight:600;color:var(--muted-2)}
.bascule{display:flex;align-items:center;gap:12px;font-size:15.5px;font-weight:700}
.bascule input{width:22px;height:22px;accent-color:var(--blue)}

.carte-blanche{background:var(--white);padding:clamp(22px,3vw,34px);max-width:560px}
.carte-blanche h2{font-size:24px;margin-bottom:6px}
.carte-blanche>p{margin-bottom:20px;font-size:15px}

.duo-choix{display:flex;gap:0;margin-bottom:26px;max-width:560px}
.duo-choix button{
  flex:1;font-family:var(--display);font-weight:800;font-size:15px;padding:14px 10px;
  background:var(--white);color:var(--muted);border-bottom:3px solid var(--sand);
}
.duo-choix button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--blue);background:var(--white)}

/* ------------------------------------------------------------- listes */
.liste-lecons{display:grid;gap:0;margin-top:6px}
.ligne-lecon{
  display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:18px;align-items:center;
  background:var(--white);padding:18px 20px;border-bottom:1px solid var(--cream);width:100%;text-align:left;
}
.ligne-lecon:hover{background:var(--yellow-soft)}
.ligne-lecon .rang{
  width:46px;height:46px;display:grid;place-items:center;background:var(--cream);
  font-family:var(--display);font-weight:800;font-size:16px;
}
.ligne-lecon.finie .rang{background:var(--green);color:var(--white)}
.ligne-lecon strong{font-family:var(--display);font-size:17.5px;font-weight:700;display:block}
.ligne-lecon span.detail{font-size:14px;color:var(--muted-2);font-weight:700}

/* --------------------------------------------------------- une leçon */
.mots{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:0}
.mot{background:var(--white);padding:22px 24px;border-right:1px solid var(--cream);border-bottom:1px solid var(--cream);position:relative}
.mot .de{font-family:var(--display);font-size:21px;font-weight:800;letter-spacing:-.02em;display:block;padding-right:58px}
.mot .fr{font-size:15.5px;color:var(--muted);margin-top:6px}
.mot .ar{font-family:var(--ar);font-size:18px;color:var(--muted-2);margin-top:4px;line-height:1.9}
.ecouter{
  position:absolute;right:18px;top:20px;width:46px;height:46px;border-radius:50%;
  background:var(--blue);display:grid;place-items:center;
}
.ecouter:hover{transform:scale(1.08)}

.astuce{background:var(--yellow-soft);border-left:4px solid var(--yellow);padding:20px 22px;margin:var(--souffle) 0}
.astuce strong{font-family:var(--display);display:block;font-size:13px;letter-spacing:.1em;text-transform:uppercase;color:var(--yellow-ink);margin-bottom:6px}

.question{background:var(--white);padding:24px;margin-bottom:2px}
.question h3{font-size:18px;font-weight:700;margin-bottom:14px}
.choix{display:flex;flex-direction:column;gap:8px}
.choix label{display:flex;align-items:center;gap:13px;padding:14px 16px;border:2px solid var(--sand);font-size:16px;font-weight:700;cursor:pointer}
.choix label:hover{border-color:var(--muted-2)}
.choix input{width:20px;height:20px;accent-color:var(--blue)}
.choix label:has(input:checked){border-color:var(--blue);background:var(--blue-soft)}
.correction{margin-top:14px;padding:14px 16px;font-size:15px;font-weight:700}
.correction.juste{background:var(--green-soft);color:#06513d}
.correction.faux{background:var(--yellow-soft);color:var(--yellow-ink)}
.resultat{background:var(--blue);color:var(--white);padding:28px;margin:var(--souffle) 0}
.resultat h3{font-family:var(--display);font-size:30px;color:var(--yellow);margin-bottom:6px}
.resultat p{color:#cfe1fa;font-weight:700}

/* -------------------------------------------------------- le planning */
.creneau{display:grid;grid-template-columns:86px minmax(0,1fr) auto;gap:22px;align-items:center;background:var(--white);padding:22px 24px;border-bottom:1px solid var(--cream)}
.jour{background:var(--blue);color:var(--white);text-align:center;padding:12px 6px}
.jour strong{font-family:var(--display);font-size:26px;font-weight:800;display:block;color:var(--yellow);line-height:1.05}
.jour span{font-size:11px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}
.creneau h3{font-family:var(--display);font-size:19px;font-weight:700}
.creneau .infos{font-size:14.5px;color:var(--muted);font-weight:700;margin-top:5px}
.creneau .desc{font-size:14.5px;margin-top:8px;max-width:60ch}
.creneau .actions{display:flex;flex-direction:column;gap:8px;align-items:flex-end}
.etiquette{font-family:var(--display);font-size:11px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;padding:5px 11px;background:var(--cream);color:var(--muted)}
.etiquette.reserve{background:var(--green-soft);color:#06513d}
.etiquette.complet{background:#fdeae7;color:#a3271a}
.etiquette.annule{background:var(--cream);color:var(--muted-2);text-decoration:line-through}

/* ------------------------------------------------------------ tableaux */
.tableau{width:100%;overflow-x:auto;background:var(--white)}
table{border-collapse:collapse;width:100%;min-width:520px}
th,td{text-align:left;padding:13px 16px;border-bottom:1px solid var(--cream);font-size:14.5px}
th{font-family:var(--display);font-size:11.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--muted-2)}
td{font-weight:700}
td.nombre{font-variant-numeric:tabular-nums}

/* ------------------------------------------------------------- chiffres */
.chiffres-app{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:0}
.chiffre-app{background:var(--white);padding:24px;border-right:1px solid var(--cream)}
.chiffre-app strong{font-family:var(--display);font-size:40px;font-weight:800;letter-spacing:-.04em;display:block;font-variant-numeric:tabular-nums}
.chiffre-app span{font-size:14px;font-weight:700;color:var(--muted)}

.barre{height:10px;background:var(--cream);margin-top:10px}
.barre>div{height:10px;background:var(--green)}

.vide{background:var(--white);padding:clamp(30px,4vw,52px);text-align:center}
.vide h3{font-size:21px;margin-bottom:8px}
.vide p{max-width:48ch;margin:0 auto;font-size:15px}

.titre-section{display:flex;align-items:baseline;justify-content:space-between;gap:20px;flex-wrap:wrap;margin:var(--souffle) 0 14px}
.titre-section h2{font-size:clamp(21px,2.5vw,27px)}
.titre-section span{font-size:14px;font-weight:700;color:var(--muted-2)}

.rangee-boutons{display:flex;gap:12px;flex-wrap:wrap;margin-top:18px}
.lien-discret{font-size:14.5px;font-weight:700;color:var(--muted);text-decoration:underline;text-underline-offset:3px;background:none}
.lien-discret:hover{color:var(--red)}

@media (max-width:640px){
  .creneau{grid-template-columns:1fr;gap:14px}
  .creneau .actions{align-items:stretch}
  .ligne-lecon{grid-template-columns:44px minmax(0,1fr)}
  .ligne-lecon>svg{display:none}
}

/* ==========================================================================
   L'introduction du parcours : ce qu'on vise, et quand c'est acquis.
   ========================================================================== */
.objectifs{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(260px,1fr);gap:0;margin:6px 0 var(--souffle)}
.objectifs-texte{background:var(--white);padding:clamp(22px,3vw,34px)}
.objectifs-texte h2{font-size:clamp(21px,2.5vw,28px);margin:8px 0 6px}
.objectifs-detail{font-size:15.5px;margin-bottom:16px}
.objectifs-texte ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:11px}
.objectifs-texte li{position:relative;padding-left:26px;font-size:15.5px;font-weight:700;color:var(--muted)}
.objectifs-texte li::before{content:'';position:absolute;left:5px;top:.62em;width:8px;height:8px;background:var(--green)}
.objectifs-seuil{background:var(--blue);color:var(--white);padding:clamp(22px,3vw,34px);display:flex;flex-direction:column;gap:6px}
.objectifs-seuil .eyebrow{color:var(--yellow)}
.objectifs-seuil strong{font-family:var(--display);font-size:52px;font-weight:800;letter-spacing:-.05em;line-height:1;margin:6px 0}
.objectifs-seuil p{color:#cfe1fa;font-size:14.5px;font-weight:700}
.objectifs-seuil .objectifs-etat{margin-top:auto;padding-top:16px;border-top:1px solid rgba(255,255,255,.25);color:var(--white)}
.objectifs-seuil.atteint{background:var(--green)}
.objectifs-seuil.atteint .eyebrow{color:var(--ink)}
.objectifs-seuil.atteint p{color:#ddf5ee}
.objectifs-seuil.atteint .objectifs-etat{color:var(--white)}

/* -------------------------------------------------- leçon fermée / offerte */
.ligne-lecon.verrouillee{background:var(--cream);opacity:.92;cursor:default}
.ligne-lecon.verrouillee:hover{background:var(--cream)}
.ligne-lecon.verrouillee .rang{background:var(--sand);color:var(--muted-2)}
.offerte{
  display:inline-block;margin-left:10px;padding:3px 9px;background:var(--green);color:var(--white);
  font-family:var(--display);font-size:10.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;vertical-align:2px;
}
.barre-lecon{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.resultat.atteint{background:var(--green)}
.resultat.atteint h3{color:var(--ink)}
.resultat.atteint p{color:#ddf5ee}
.resultat .verdict{font-family:var(--display);font-weight:800;color:var(--yellow);font-size:16px;margin-bottom:6px}
.resultat.atteint .verdict{color:var(--ink)}

/* ==========================================================================
   À l'impression : une fiche de travail propre, en noir sur blanc.
   Avant le quiz, c'est un exercice. Après, la correction est dessus.
   ========================================================================== */
@media print{
  @page{margin:16mm}
  header,footer,.app-nav,.entete,.wipe,.barre-lecon,.rangee-boutons,.ecouter,.message,.duo-choix,.objectifs-seuil{display:none!important}
  body{background:#fff;color:#000;font-size:11.5pt}
  .wrap{max-width:none;padding:0}
  .mot,.mots,.question,.astuce,.objectifs-texte{background:#fff;border:none}
  .mots{display:block}
  .mot{padding:0 0 10pt;border-bottom:1px solid #ccc;page-break-inside:avoid}
  .mot .de{font-size:14pt;padding-right:0}
  .mot .fr,.mot .ar{color:#000}
  .astuce{border-left:3pt solid #000;padding:8pt 10pt;page-break-inside:avoid}
  .question{padding:0 0 12pt;page-break-inside:avoid}
  .choix label{border:1px solid #666;padding:6pt 8pt;background:#fff}
  .choix input{-webkit-appearance:none;appearance:none;width:11pt;height:11pt;border:1px solid #000;border-radius:50%}
  .correction{border:1px solid #000;background:#fff!important;color:#000!important}
  .titre-section{margin:14pt 0 6pt;border-bottom:1px solid #000}
  .resultat{background:#fff!important;color:#000!important;border:1px solid #000;padding:8pt}
  .resultat h3,.resultat p,.resultat .verdict{color:#000!important}
  a[href]::after{content:''}
}

/* ---------------------------------------------------- import d'un document */
.import{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(280px,1fr);gap:0;margin-bottom:var(--souffle)}
.import-texte{background:var(--blue);color:var(--white);padding:clamp(22px,3vw,32px)}
.import-texte h2{color:var(--white);font-size:23px;margin-bottom:10px}
.import-texte p{color:#cfe1fa;font-size:15px;margin-bottom:10px}
.import-texte .import-note{color:#9dc2f2;font-size:14px}
.import-actions{background:var(--white);padding:clamp(22px,3vw,32px);display:flex;flex-direction:column;gap:14px}
.import-actions input[type=file]{font-family:var(--body);font-size:15px;font-weight:600;padding:12px;background:var(--cream);border:2px dashed var(--sand);width:100%}
.import-actions textarea{font-family:var(--body);font-size:15px;font-weight:600;padding:12px;border:2px solid var(--sand);width:100%;resize:vertical}
.import-actions .btn{align-self:flex-start}
@media (max-width:760px){.import{grid-template-columns:1fr}.objectifs{grid-template-columns:1fr}}

/* ------------------------------------------- relecture d'un document importé */
.relu{background:var(--white);padding:22px 24px;border-bottom:1px solid var(--cream)}
.relu-entete{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:10px}
.relu-aide{font-family:var(--display);font-size:11.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--red)}
.relu-enonce{font-family:var(--display);font-size:17px;font-weight:700;color:var(--ink);margin-bottom:12px}
.relu-contenu{font-size:15.5px;line-height:1.65;color:var(--muted);max-width:80ch}
.relu-ligne{font-size:15px;color:var(--muted-2);font-family:var(--body);margin-top:4px;overflow-wrap:anywhere}
.relu-options{display:flex;flex-direction:column;gap:8px}
.relu-option{display:flex;align-items:flex-start;gap:12px;padding:11px 14px;border:2px solid var(--sand);cursor:pointer;font-size:15.5px;font-weight:700}
.relu-option:hover{border-color:var(--muted-2)}
.relu-option input{width:20px;height:20px;accent-color:var(--green);flex-shrink:0;margin-top:1px}
.relu-option:has(input:checked){border-color:var(--green);background:var(--green-soft)}
.relu-qcm input[type=text]{margin-top:12px;width:100%;font-family:var(--body);font-size:15px;font-weight:600;padding:11px 13px;border:2px solid var(--sand)}
.relu-texte{border-left:4px solid var(--blue)}
.relu-ecrit{border-left:4px solid var(--yellow)}

/* -------------------------------------- textes à lire et exercices écrits */
.texte-lecture{
  background:var(--white);padding:22px 26px;margin-bottom:12px;
  font-size:16.5px;line-height:1.75;color:var(--ink);max-width:78ch;border-left:4px solid var(--blue);
}
.ecrit-bloc{background:var(--white);padding:20px 24px;border-left:4px solid var(--yellow);margin-bottom:2px}
.ecrit-enonce{font-family:var(--display);font-size:17px;font-weight:700;color:var(--ink);margin-bottom:8px}
.ecrit-ligne{font-size:15.5px;color:var(--muted);line-height:1.9;overflow-wrap:anywhere}
@media print{
  .texte-lecture,.ecrit-bloc{background:#fff;border-left:2pt solid #000;padding:6pt 10pt;page-break-inside:avoid}
  .ecrit-ligne{line-height:2.4}
}
