/* =====================================================================
   Oxaleo — design (jetons de couleur en tête : clair, puis sombre)
   ===================================================================== */
:root{
  /* Neutres légèrement verdis : le gris froid tirait l'application vers le tableur. */
  --surface:#ffffff; --surface-2:#f7faf8; --ink:#17211c; --ink-2:#34433a; --muted:#748178; --line:#e4ebe6; --line-2:#edf2ee;
  --primary:#155f4a; --primary-ink:#ffffff; --primary-soft:#e8f4ee; --primary-line:#b9d9c9;
  --marque:#0f766e;                                  /* sarcelle Oxaleo : logo et petites touches */
  --danger:#c94a4a; --danger-soft:#fff0f0; --warn-soft:#fff7df; --warn-line:#ead18b; --ok-soft:#e9f7ef; --ok-line:#b7dec8;
  /* Les quatre niveaux ne bougent pas : palette vérifiée pour les daltonismes. */
  --n4:#0f766e; --n4-ink:#ffffff; --n3:#5eead4; --n3-ink:#04342e; --n2:#f59e0b; --n2-ink:#3d2500; --n1:#dc2626; --n1-ink:#ffffff; --nA:#cbd5e1; --nA-ink:#28303d;
  --radius:18px; --radius-s:12px;
  /* Mêmes nuages vert pâle que la page d'accueil */
  --fond:radial-gradient(40rem 26rem at 96% 0%,rgba(167,215,168,.26),transparent 70%),radial-gradient(32rem 24rem at 12% 8%,rgba(206,235,219,.55),transparent 70%),radial-gradient(36rem 26rem at 90% 96%,rgba(214,238,226,.6),transparent 70%);
  --bg:#f7faf8;
  --shadow:0 1px 2px rgba(20,50,35,.03),0 8px 28px rgba(20,50,35,.055);
  --shadow-lg:0 20px 55px rgba(20,50,35,.14);
  --side:252px;
  /* Identité : barre latérale et bandeaux verts du trèfle, dégradé des titres. */
  --vert-fonce:linear-gradient(165deg,#103f32 0%,#155f4a 100%);
  --sur-vert:#eaf6ef; --sur-vert-2:rgba(234,246,239,.68); --vert-ligne:rgba(255,255,255,.13); --vert-survol:rgba(255,255,255,.09);
  --vert-on:#ffffff; --vert-on-ink:#155f4a;
  --degrade-titre:linear-gradient(95deg,#155f4a 10%,#2f9e6e 60%,#7cc242 100%);
}
:root[data-theme="dark"]{
  --bg:#0e1411; --surface:#151d19; --surface-2:#1b2521; --ink:#e8efea; --ink-2:#c2cfc7; --muted:#8b9a92; --line:#26332c; --line-2:#1f2a25;
  --primary:#5fcf9f; --primary-ink:#06211a; --primary-soft:#18302a; --primary-line:#2f5a49;
  --marque:#5eead4;
  --danger:#f87171; --danger-soft:#3a1d20; --warn-soft:#332a12; --warn-line:#5c4a1c; --ok-soft:#10312a; --ok-line:#1f5049;
  --n3-ink:#04342e; --nA:#42504a; --nA-ink:#e6ece9;
  --fond:radial-gradient(circle at 85% -10%,rgba(47,155,114,.12),transparent 28rem),radial-gradient(circle at 5% 20%,rgba(30,70,56,.30),transparent 25rem);
  --shadow:0 1px 2px rgba(0,0,0,.28),0 8px 28px rgba(0,0,0,.32); --shadow-lg:0 20px 55px rgba(0,0,0,.55);
  --vert-fonce:linear-gradient(165deg,#0b1d17 0%,#10291f 100%); --vert-on:rgba(95,207,159,.16); --vert-on-ink:#7ddcb0;
  --degrade-titre:linear-gradient(95deg,#5fcf9f 10%,#8fdc9f 55%,#b8e36b 100%);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
[hidden]{display:none!important}
body{margin:0;background:var(--fond),var(--bg);background-attachment:fixed;color:var(--ink);font:14px/1.55 ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:-.01em;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit;color:inherit}
/* Graisses retenues (la police Windows rend le 500 déjà bien visible) : 400 le texte et les listes,
   500 les boutons et les mots mis en avant, 600 les chiffres et petits titres, 700 les titres de page. */
b,strong{font-weight:500}
svg.ic{width:18px;height:18px;flex:none;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vertical-align:-4px}
/* Une seule famille d'icônes, au trait, jamais d'émoji en couleur : dans un titre elles prennent le
   vert de la marque, dans un texte ou un bouton la couleur du texte. */
.card h3 svg.ic,.privacy > svg.ic{color:var(--primary)}
.privacy > svg.ic{margin-top:1px}
.kpi .k svg.ic,.savestate svg.ic,.warnbtn svg.ic,.toast svg.ic{width:15px;height:15px;vertical-align:-3px}
.segmented button{display:inline-flex;align-items:center;gap:6px}
.segmented button svg.ic{width:16px;height:16px}
.pastille{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:3px;vertical-align:1px}

/* ---------- Boutons & champs ---------- */
button{cursor:pointer;border:1px solid var(--primary);background:var(--primary);color:var(--primary-ink);border-radius:11px;padding:8px 15px;font-weight:500;line-height:1.3;box-shadow:0 4px 12px color-mix(in srgb,var(--primary) 16%,transparent);transition:background .15s,border-color .15s,box-shadow .15s,transform .05s}
button:hover{filter:brightness(1.08)}
button:active{transform:translateY(1px)}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:none;border-color:var(--primary);box-shadow:0 0 0 4px color-mix(in srgb,var(--primary) 18%,transparent)}
button.ghost{background:var(--surface);color:var(--ink-2);border-color:var(--line);box-shadow:none}
button.ghost:hover{background:var(--surface-2);border-color:var(--primary-line);color:var(--primary);filter:none}
button.danger{border-color:var(--danger-soft);color:var(--danger);background:var(--danger-soft);box-shadow:none}
button.icon{padding:6px 10px;background:var(--surface);color:var(--muted);border-color:var(--line);font-weight:400;box-shadow:none}
button.icon:hover{color:var(--ink);border-color:var(--primary-line);filter:none}
button.round{border-radius:50%;width:34px;height:34px;padding:0;display:inline-flex;align-items:center;justify-content:center}
/* Les boutons « plats » (navigation, listes, puces, lignes cliquables) n'ont pas l'ombre du bouton principal. */
button.link,.brand-link,.side-nav button,.tabbar button,.segmented button,.chip,.complist button,.cellpop button,.lien-liste,.crow2,.erow2,.mline,.pline,.lvb,.ech button,.names button{box-shadow:none}
button:disabled{opacity:.4;cursor:default}
button.link{background:none;border:0;padding:0;color:var(--primary);font-weight:400;text-decoration:underline;text-underline-offset:3px}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],input[type=search],select,textarea{border:1px solid var(--line);border-radius:11px;padding:9px 12px;background:var(--surface-2);box-shadow:inset 0 1px 2px rgba(30,60,45,.025)}
/* Une seule hauteur pour tous les champs et tous les boutons ordinaires (principal, secondaire,
   danger), sur toutes les pages : un champ posé à côté d'un bouton est toujours à sa hauteur.
   Les boutons particuliers (puces, onglets, cases, pastilles…) ont une classe et gardent leur taille. */
:root{--h-controle:38px}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],input[type=search],select{height:var(--h-controle);padding-top:0;padding-bottom:0}
button:not([class]),button.ghost,button.danger,button.plein{min-height:var(--h-controle);padding-top:0;padding-bottom:0;display:inline-flex;align-items:center;justify-content:center;gap:7px}
select{padding-right:28px}
textarea{width:100%;min-height:96px;resize:vertical}
::placeholder{text-transform:none;color:var(--muted);opacity:.8}
input:focus,select:focus,textarea:focus{border-color:var(--primary);background:var(--surface);outline:none;box-shadow:0 0 0 4px color-mix(in srgb,var(--primary) 14%,transparent)}
kbd{font:11px ui-monospace,Consolas,monospace;background:var(--surface-2);border:1px solid var(--line);border-bottom-width:2px;border-radius:5px;padding:1px 5px;color:var(--ink-2)}
input[type=color]{width:42px;height:38px;padding:3px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}

/* ---------- Structure : barre latérale (ordinateur) / onglets en bas (mobile) ---------- */
.app{min-height:100vh}
.side{position:fixed;inset:0 auto 0 0;width:var(--side);background:var(--vert-fonce);color:var(--sur-vert);display:flex;flex-direction:column;padding:22px 14px calc(16px + env(safe-area-inset-bottom,0px));z-index:30;box-shadow:6px 0 30px rgba(16,62,49,.10)}
/* Sur le vert, tout reprend les couleurs « sur-vert » ; les boutons secondaires deviennent translucides. */
.side .brand-link{color:var(--sur-vert);padding:4px 10px 24px;gap:8px;flex-direction:column;align-items:flex-start}
.side .app-sub{padding-left:3px}
.side .app-sub,.side .savestate{color:var(--sur-vert-2)}
.side .warnbtn{background:rgba(255,209,102,.16);border-color:rgba(255,209,102,.38);color:#ffdc8f}
.side button.ghost{background:var(--vert-survol);border-color:var(--vert-ligne);color:var(--sur-vert)}
.side button.ghost:hover{background:rgba(255,255,255,.16);color:#fff;border-color:var(--vert-ligne)}
/* Le logo complet, puis le nom de la classe dessous */
.brand{display:flex;flex-direction:column;align-items:flex-start;gap:6px}
.logo-complet{height:40px;width:auto;display:block}
.app-sub{color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}
.side-nav{display:flex;flex-direction:column;gap:4px}
.side-nav button{display:flex;align-items:center;gap:11px;background:transparent;border:0;box-shadow:none;color:var(--sur-vert-2);font-weight:400;padding:10px 12px;border-radius:13px;min-height:44px;text-align:left}
.side-nav button:hover{background:var(--vert-survol);color:var(--sur-vert);filter:none}
.side-nav button.on{background:var(--vert-on);color:var(--vert-on-ink);box-shadow:0 6px 18px rgba(0,0,0,.12)}
.side-foot{margin-top:auto;display:flex;flex-direction:column;gap:8px;padding:14px 4px 0;border-top:1px solid var(--vert-ligne)}
/* Bas du menu : deux boutons de même taille, discrets */
.side-foot > button,#installSlot button{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 12px;font-size:13px;font-weight:400;border-radius:11px}
.side-foot > button svg.ic,#installSlot button svg.ic{width:16px;height:16px}
.side-foot #installSlot:empty{display:none}
.savestate{font-size:12px;color:var(--muted);line-height:1.7;padding:0 4px 4px}
.savestate .bad{color:var(--danger);font-weight:600}
.content{margin-left:var(--side);min-height:100vh}
.topbar{display:none}
.tabbar{display:none}
main{padding:28px 34px 64px;max-width:1500px;margin:0 auto}
/* Titres de page dans le style de la page d'accueil : grands, serrés, sous-titre gris */
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:6px 0 24px}
.page-title{font-size:25px;font-weight:700;letter-spacing:-.035em;line-height:1.15;margin:0}
.page-sub{color:var(--muted);font-size:13.5px;margin-top:4px}
/* La saisie est un plan de travail : on lui laisse la hauteur plutôt que le souffle. */
body.saisie main{padding-top:18px}
body.saisie .page-head{margin-bottom:12px}
body.saisie .page-title{font-size:22px}
body.saisie .page-sub{font-size:13px;margin-top:2px}

@media (max-width:900px){
  .side{display:none}
  .content{margin-left:0;padding-bottom:calc(70px + env(safe-area-inset-bottom,0px))}
  .topbar{display:flex;position:sticky;top:0;z-index:30;align-items:center;gap:10px;background:color-mix(in srgb,var(--surface) 88%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--line);padding:calc(8px + env(safe-area-inset-top,0px)) 14px 8px}
  .topbar .brand{padding:0;flex:1;min-width:0;flex-direction:row;align-items:center;gap:10px}
  .topbar .logo-complet{height:30px}
  .topbar .app-sub{max-width:52vw}
  .topbar .savestate{text-align:right;font-size:11px}
  .tabbar{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;left:0;right:0;bottom:0;z-index:40;background:color-mix(in srgb,var(--surface) 92%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--line);padding:6px 6px calc(6px + env(safe-area-inset-bottom,0px))}
  .tabbar button{background:none;border:0;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;font-weight:400;padding:5px 2px;border-radius:10px}
  .tabbar button svg.ic{width:22px;height:22px}
  .tabbar button.on{color:var(--primary)}
  main{padding:18px 16px 30px}
  .page-title{font-size:23px}
  body.saisie main{padding-top:12px}
}

/* ---------- Cartes & éléments généraux ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:20px 22px;margin-bottom:16px;box-shadow:var(--shadow)}
.card h3{font-size:15px;margin:0 0 12px;font-weight:600;letter-spacing:-.015em;display:flex;align-items:center;gap:11px}
/* Icône de titre posée dans une tuile vert pâle, comme les cartes de la page d'accueil */
.card h3 svg.ic{width:30px;height:30px;padding:7px;border-radius:11px;background:var(--primary-soft);flex:none}
/* Cartes côte à côte qui finissent par une action : le bouton est toujours en bas, au même niveau
   d'une carte à l'autre, quelle que soit la longueur du texte (Excel, accueil, premier lancement). */
.carte-action,.step{display:flex;flex-direction:column}
.carte-action > :last-child,.step > :last-child{margin-top:auto}
.carte-action p{margin:0 0 14px}
.carte-action .row select{flex:1 1 100%;min-width:0}
h2{font-size:19px;margin:4px 0 12px}
.muted{color:var(--muted)}
.small{font-size:12.5px}
.row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.row + .row{margin-top:10px}
.lbl{font-weight:600;color:var(--muted);font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;margin-right:4px}
.fld{display:inline-flex;align-items:center;gap:8px;font-weight:400;font-size:13.5px}
/* Formulaire en colonnes : étiquettes alignées à gauche, champs tous de la même largeur */
.champs{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px 16px;align-items:center}
.champs > span{font-weight:400;font-size:13.5px;color:var(--ink-2)}
.champs input,.champs select{width:100%}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}
.empty{padding:40px 20px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:var(--radius);background:color-mix(in srgb,var(--surface) 65%,transparent)}
.empty .big{display:flex;align-items:center;justify-content:center;width:60px;height:60px;margin:0 auto 12px;border-radius:18px;background:var(--primary-soft);color:var(--primary)}
.empty .big svg.ic{width:28px;height:28px}
.hint{color:var(--muted);font-size:13px;margin-top:10px;line-height:1.6}
.dot{display:inline-block;width:10px;height:10px;border-radius:50%;flex:none}
.warn{background:var(--warn-soft);border:1px solid var(--warn-line);border-radius:12px;padding:11px 14px;font-size:13.5px}
.ok-box{background:var(--ok-soft);border:1px solid var(--ok-line);border-radius:12px;padding:11px 14px;font-size:13.5px}
.print-only{display:none}
.help h3{margin-top:20px}
.help li{margin-bottom:5px}
.privacy{display:flex;gap:10px;align-items:flex-start;background:var(--primary-soft);border:1px solid var(--primary-line);border-radius:12px;padding:11px 14px;font-size:13.5px;color:var(--ink-2)}

/* ---------- Niveaux ---------- */
.n4{background:var(--n4);color:var(--n4-ink)} .n3{background:var(--n3);color:var(--n3-ink)}
.n2{background:var(--n2);color:var(--n2-ink)} .n1{background:var(--n1);color:var(--n1-ink)} .nA{background:var(--nA);color:var(--nA-ink)}
.pill{display:inline-block;min-width:46px;text-align:center;border-radius:8px;padding:3px 10px;font-weight:600;font-size:12.5px;white-space:nowrap}
.pill.n0{background:transparent;color:var(--muted);border:1px dashed var(--line)}
.rate.ok{color:#0f766e}.rate.mid{color:#b45309}.rate.low{color:var(--danger)}
:root[data-theme="dark"] .rate.ok{color:#5eead4} :root[data-theme="dark"] .rate.mid{color:#f2c14e}

/* ---------- Barres d'outils ---------- */
.bar{padding:12px 16px;margin-bottom:14px}
.bar-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bar-row + .bar-row{margin-top:10px}
.grow{flex:1}
.sep{width:1px;height:26px;background:var(--line);margin:0 4px}
.chip{border:1px solid var(--line);background:var(--surface);color:var(--ink-2);border-radius:999px;padding:5px 13px;font-weight:400;font-size:13px;display:inline-flex;align-items:center;gap:6px}
.chip:hover{border-color:var(--primary-line);filter:none}
.chip.on{background:var(--primary);color:var(--primary-ink);border-color:var(--primary)}
.chip[style*="--mc"].on{background:var(--mc);border-color:var(--mc);color:#fff}
.chip[style*="--mc"].on .dot{background:#fff !important}
.chip .n{opacity:.65;font-weight:600}
.seg-chips{display:flex;gap:6px;flex-wrap:wrap}
.segmented{display:inline-flex;background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:3px;gap:2px;flex-wrap:wrap}
.segmented button{background:transparent;border:0;color:var(--muted);padding:6px 13px;border-radius:9px;font-weight:600;font-size:13.5px}
.segmented button.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px rgba(16,24,40,.12)}
details.menu{position:relative}
details.menu summary{list-style:none;cursor:pointer;border:1px solid var(--line);border-radius:10px;padding:6px 12px;font-weight:700;background:var(--surface);user-select:none;min-height:38px;display:flex;align-items:center}
details.menu summary::-webkit-details-marker{display:none}
details.menu[open] summary{background:var(--primary-soft);border-color:var(--primary)}
.menu-pop{position:absolute;top:calc(100% + 6px);left:0;z-index:50;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-lg);padding:6px;display:flex;flex-direction:column;gap:4px;min-width:230px}
.menu-pop button{justify-content:flex-start;text-align:left;white-space:nowrap}
.toggle{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:400;color:var(--muted);cursor:pointer}
input.search{min-width:240px}
.progress{font-weight:400;color:var(--muted);font-size:13px}

/* ---------- Saisie : grille ---------- */
.grid-wrap{overflow:auto;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);max-height:70vh}
table.grid thead th.mat-h{letter-spacing:.06em;text-transform:uppercase;font-size:11px;font-weight:600}
table.grid{border-collapse:separate;border-spacing:0}
table.grid th,table.grid td{border-right:1px solid var(--line-2);border-bottom:1px solid var(--line-2)}
table.grid thead th{position:sticky;background:var(--surface-2);z-index:3}
table.grid thead tr:first-child th{top:0}
table.grid thead tr:nth-child(2) th{top:28px}
table.grid th.corner{left:0;z-index:5;text-align:left;padding:8px 14px;min-width:120px;vertical-align:bottom;font-weight:400}
table.grid th.mat-h{height:28px;font-size:12px;color:#fff;background:var(--mc);padding:0 8px;white-space:nowrap;letter-spacing:.02em}
table.grid th.comp-h{height:30px;width:38px;min-width:38px;padding:0;cursor:pointer;font-weight:600;font-size:12.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}
table.grid th.comp-h:hover,table.grid th.comp-h.hl{background:var(--primary-soft);color:var(--primary)}
/* Une seule ligne au-dessus de la grille : nom de la colonne, et accès à la liste numérotée */
.gridhead{display:flex;align-items:center;gap:10px;min-height:26px;margin-bottom:6px}
.colname{display:flex;align-items:center;gap:8px;flex:1;min-width:0;font-size:13.5px;font-weight:400;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.colname .num{background:var(--primary-soft);color:var(--primary);border-radius:6px;padding:1px 7px;font-size:12px;font-weight:700;flex:none}
.colname .vide{color:var(--muted);font-weight:400}
.lien-liste{background:none;border:0;color:var(--muted);font-size:12.5px;font-weight:400;padding:3px 9px;border-radius:8px;flex:none;white-space:nowrap}
.lien-liste:hover{background:var(--primary-soft);color:var(--primary)}
/* Liste numérotée des compétences, repliée par défaut */
.complist{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:1px 14px;margin:0 0 10px;padding:8px 14px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow)}
.complist .grp{grid-column:1/-1;display:flex;align-items:center;gap:7px;font-weight:600;font-size:12.5px;margin:8px 0 2px;color:var(--ink-2)}
.complist button{display:flex;gap:9px;align-items:baseline;background:none;border:0;padding:3px 7px;border-radius:7px;text-align:left;font-size:13px;color:var(--ink-2);font-weight:400;width:100%}
.complist button:hover,.complist button.hl{background:var(--primary-soft);color:var(--primary)}
.complist button b{flex:none;min-width:18px;text-align:right;font-weight:600;font-variant-numeric:tabular-nums}
/* Palette qui s'ouvre sur la case (mode « Au clic ») */
.cellpop{position:fixed;z-index:60;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow-lg);padding:7px;display:flex;flex-direction:column;gap:3px;width:210px;overflow-y:auto;overscroll-behavior:contain}
.cellpop .who{font-size:12px;color:var(--muted);padding:4px 8px 3px;line-height:1.4}
.cellpop .who b{color:var(--ink);font-size:13px}
.cellpop button{display:flex;align-items:center;gap:9px;background:none;border:0;padding:4px 8px;border-radius:9px;font-size:13.5px;font-weight:400;color:var(--ink);text-align:left;width:100%}
.cellpop button:hover,.cellpop button:focus-visible{background:var(--primary-soft)}
.cellpop button.sel{background:var(--primary-soft);color:var(--primary)}
.cellpop button[disabled]{opacity:.4}
.cellpop .sw{min-width:34px;height:26px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:700;flex:none}
.cellpop .sw.sx{background:repeating-linear-gradient(45deg,var(--surface) 0 4px,var(--line) 4px 8px);color:var(--muted)}
.cellpop .k{margin-left:auto;font-size:11px;color:var(--muted);font-weight:400}
.mode-clic table.grid td.cell{cursor:pointer}
table.grid td.cell.editing{box-shadow:inset 0 0 0 3px var(--primary)}
table.grid th.rate-h{min-width:70px;font-size:11.5px;vertical-align:bottom;padding:8px 6px}
table.grid tbody th.name{position:sticky;left:0;background:var(--surface);z-index:2;text-align:left;font-weight:600;padding:0 14px;white-space:nowrap;height:34px;font-size:13.5px;letter-spacing:.03em}
table.grid tbody tr:hover th.name{background:var(--primary-soft);color:var(--primary)}
table.grid tbody tr:hover td.cell.n0{background:var(--surface-2)}
table.grid td.cell{width:40px;height:34px;text-align:center;font-weight:600;font-size:11px;cursor:crosshair;user-select:none;-webkit-user-select:none;touch-action:manipulation}
table.grid td.cell.n0{background:var(--surface);color:transparent}
table.grid td.cell:hover{box-shadow:inset 0 0 0 2px var(--ink)}
table.grid td.rate,table.grid tfoot td{text-align:center;font-weight:600;font-size:12px}
table.grid tfoot th,table.grid tfoot td{position:sticky;bottom:0;background:var(--surface-2);z-index:2;height:32px}
table.grid tfoot th{left:0;z-index:4;text-align:left;padding:0 14px;font-size:12.5px}
.compact table.grid th.comp-h{height:26px;width:30px;min-width:30px;font-size:11.5px}
.compact .vt{max-height:108px}
.compact table.grid td.cell{width:30px;height:26px;font-size:9.5px}
.compact table.grid tbody th.name{height:26px;font-size:12.5px}

/* ---------- Saisie : modes tactiles ---------- */
.focus-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.focus-head select{flex:1;min-width:0;max-width:560px;font-weight:600}
.focus-title{font-size:18px;font-weight:700;letter-spacing:-.01em;margin:12px 0 4px;line-height:1.3}
.focus-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;color:var(--muted);font-size:13px}
.focus-meta .sbar{max-width:260px}
.lvlist{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.lvgroup{padding:10px 16px 4px;font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;background:var(--surface-2);border-bottom:1px solid var(--line-2);display:flex;align-items:center;gap:8px}
.lvrow{display:flex;align-items:center;gap:12px;padding:9px 14px;border-bottom:1px solid var(--line-2)}
.lvrow:last-child{border-bottom:0}
.lvname{flex:1;min-width:0;font-weight:600;letter-spacing:.02em}
.lvname.long{font-weight:400;letter-spacing:0;font-size:14px;line-height:1.35}
.lvbtns{display:flex;gap:6px;flex:none}
.lvb{--c:var(--line);--ci:var(--ink);min-width:48px;height:44px;border-radius:12px;border:2px solid var(--c);background:transparent;color:var(--ink-2);font-weight:700;font-size:13px;padding:0 6px}
.lvb:hover{filter:none;background:color-mix(in srgb,var(--c) 18%,transparent)}
.lvb.sel{background:var(--c);color:var(--ci);box-shadow:0 2px 8px color-mix(in srgb,var(--c) 45%,transparent)}
.lvb.l4{--c:var(--n4);--ci:var(--n4-ink)} .lvb.l3{--c:var(--n3);--ci:var(--n3-ink)} .lvb.l2{--c:var(--n2);--ci:var(--n2-ink)} .lvb.l1{--c:var(--n1);--ci:var(--n1-ink)} .lvb.lA{--c:var(--nA);--ci:var(--nA-ink);min-width:44px}
.focus-foot{display:flex;justify-content:space-between;gap:10px;margin-top:14px}
@media (max-width:600px){
  .lvrow{flex-wrap:wrap;gap:8px}
  .lvname{flex-basis:100%}
  .lvbtns{width:100%}
  .lvb{flex:1;min-width:0;height:46px}
}

/* ---------- Élèves / compétences ---------- */
table.list{width:100%;border-collapse:separate;border-spacing:0;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--surface)}
table.list th{text-align:left;font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;padding:8px;border-bottom:1px solid var(--line)}
table.list td{padding:6px 8px;border-bottom:1px solid var(--line-2);vertical-align:middle}
table.list input[type=text]{width:100%}
.codes{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.codeitem{display:flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:12px;padding:6px 6px 6px 10px;background:var(--surface-2)}
.codeitem input{flex:1;min-width:0;border:0;background:transparent;font-weight:700;letter-spacing:.04em;height:32px;padding:4px}
.codeitem .num{font-size:11px;color:var(--muted);width:20px}
.err{color:var(--danger);font-size:12.5px;font-weight:400;min-height:18px}
.matcard{border-left:6px solid var(--mc)}
.matcard .mhead{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.matcard .mhead input[type=text]{font-weight:700;font-size:16px;flex:1;min-width:180px}

/* ---------- Bilans ---------- */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(175px,1fr));gap:10px;margin-bottom:14px}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}
.kpi .k{font-size:12.5px;color:var(--muted);font-weight:400}
.kpi .v{font-size:23px;font-weight:600;line-height:1.25;letter-spacing:-.01em}
.kpi .s{font-size:12px;color:var(--muted)}
button.kpi{display:flex;flex-direction:column;justify-content:flex-start;text-align:left;color:var(--ink);font-weight:400;cursor:pointer}
button.kpi:hover{border-color:var(--primary-line);box-shadow:0 4px 16px rgba(79,70,229,.14);filter:none}
button.kpi .go{font-size:12px;color:var(--primary);font-weight:600;margin-top:auto;padding-top:4px}
.sbar{display:flex;height:17px;border-radius:6px;overflow:hidden;background:var(--line-2);width:100%}
.sbar.big{height:26px;border-radius:8px}
.sbar.thin{height:14px;border-radius:5px}
.sbar .seg{display:flex;align-items:center;justify-content:center;font-size:10.5px;font-weight:400;min-width:0;overflow:hidden;white-space:nowrap}
.sbar.big .seg{font-size:13px}
.sbar.thin .seg{font-size:9.5px}
.sbar.empty{align-items:center;justify-content:center;color:var(--muted);font-size:12px}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;margin-top:10px;color:var(--ink-2)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:13px;height:13px;border-radius:4px;display:inline-block}
.clabel{display:flex;align-items:center;gap:8px;font-weight:400}
.badge{display:inline-block;border-radius:999px;padding:2px 9px;font-size:11.5px;font-weight:400;white-space:nowrap}
.b-classe{background:var(--danger-soft);color:var(--danger);font-weight:400}
.b-groupe{background:var(--warn-soft);color:#b45309;font-weight:400}
.b-acquis{background:var(--ok-soft);color:#0f766e;font-weight:400}
.b-nd{background:var(--line-2);color:var(--muted)}
.b-accomp{background:var(--danger-soft);color:var(--danger)}
.dash{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:16px}
.mline,.pline{display:grid;gap:10px;align-items:center;padding:8px 10px;border-radius:10px;width:100%;background:none;border:0;color:var(--ink);font-weight:400;text-align:left}
.mline{grid-template-columns:minmax(110px,190px) 1fr 52px}
.pline{grid-template-columns:10px minmax(0,1fr) 90px 72px}
.mline:hover,.pline:hover{background:var(--surface-2);filter:none}
.pline .nm,.cname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.minibar{height:8px;background:var(--line-2);border-radius:4px;overflow:hidden}
.minibar i{display:block;height:100%}
.pline .cnt{font-size:12px;color:var(--muted);text-align:right;font-weight:400}
.ech{display:flex;flex-wrap:wrap;gap:6px}
.ech button{background:var(--surface);border:1px solid var(--line);color:var(--ink);font-weight:600;border-radius:999px;padding:5px 12px;font-size:13px;letter-spacing:.02em}
.ech button:hover{border-color:var(--primary-line);color:var(--primary);filter:none}
.ech button b{margin-left:6px}
.clist{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface)}
.citem + .citem{border-top:1px solid var(--line-2)}
.crow2,.erow2{display:grid;grid-template-columns:10px minmax(0,1.4fr) minmax(120px,1fr) 52px 150px 14px;gap:12px;align-items:center;width:100%;background:var(--surface);border:0;border-radius:0;color:var(--ink);font-weight:400;text-align:left;padding:9px 15px}
.erow2{grid-template-columns:minmax(0,.6fr) minmax(120px,1.2fr) 52px auto 110px 14px}
.crow2:hover,.erow2:hover{background:var(--surface-2);filter:none}
.citem.open .crow2{background:var(--primary-soft)}
.chev{color:var(--muted);font-size:16px;transition:transform .15s}
.citem.open .chev{transform:rotate(90deg)}
.cdetail{padding:8px 16px 16px 38px;background:var(--surface-2);border-top:1px dashed var(--line)}
.lvcols{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-top:10px}
.lvcol h4{margin:0 0 6px;font-size:12.5px;display:flex;align-items:center;gap:6px}
.names{display:flex;flex-wrap:wrap;gap:5px}
.lvcol .names button{background:var(--surface);border:1px solid var(--line);color:var(--ink);font-weight:600;font-size:12px;padding:3px 9px;border-radius:7px;letter-spacing:.02em}
.lvcol .names button:hover{border-color:var(--primary-line);color:var(--primary);filter:none}
.mpills{display:flex;gap:4px;flex-wrap:wrap}
.mpills span{font-size:11px;font-weight:600;border-radius:6px;padding:1px 6px;background:var(--surface-2);white-space:nowrap}
.fnav{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.prio{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.prio .col{border-radius:var(--radius);padding:14px;border:1px solid var(--line);background:var(--surface)}
.prio .col h3{display:flex;align-items:center;gap:8px;margin:0 0 6px}
.prio .col.c1{border-top:4px solid var(--n1)} .prio .col.c2{border-top:4px solid var(--n2)} .prio .col.c3{border-top:4px solid var(--n4)}
.prio ul{margin:6px 0 0;padding-left:18px}
table.evo{border-collapse:collapse;width:100%}
table.evo th,table.evo td{padding:8px;border-bottom:1px solid var(--line-2);text-align:center}
table.evo th:first-child,table.evo td:first-child{text-align:left}
.up{color:#1e8a3a;font-weight:600}.down{color:var(--danger);font-weight:600}
.fiche-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap}
.fiche-name{font-size:28px;font-weight:700;letter-spacing:.02em}
table.fiche{width:100%;border-collapse:collapse}
table.fiche th{text-align:left;font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;padding:8px;border-bottom:1px solid var(--line)}
table.fiche td{padding:8px;border-bottom:1px solid var(--line-2)}
.evodots{display:flex;gap:3px}
.evodots span{width:26px;height:20px;border-radius:5px;font-size:10px;font-weight:600;display:inline-flex;align-items:center;justify-content:center}
.evodots span.n0{background:transparent;border:1px dashed var(--line)}

/* ---------- Page publique (visiteur non connecté, toujours en thème clair) ---------- */
body.public .side,body.public .tabbar,body.public .topbar,body.public #fsBanner{display:none!important}
body.public .content{margin-left:0}
body.public main{max-width:none;padding:0;overflow-x:clip}
/* Des nuages vert pâle répartis sur toute la hauteur de la page */
body.public{background:
  radial-gradient(40rem 26rem at 92% 4%,rgba(167,215,168,.30),transparent 70%),
  radial-gradient(32rem 22rem at 2% 24%,rgba(206,235,219,.75),transparent 70%),
  radial-gradient(36rem 24rem at 98% 52%,rgba(214,238,226,.70),transparent 70%),
  radial-gradient(34rem 22rem at 4% 80%,rgba(221,241,230,.80),transparent 70%),
  #f7faf8;background-attachment:scroll}
.pub{max-width:1200px;margin:0 auto;padding:0 28px 28px}
.pub section[id]{scroll-margin-top:88px}
.pub-sur,.sur-titre{display:inline-block;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--primary);background:var(--primary-soft);border:1px solid var(--primary-line);border-radius:999px;padding:5px 12px}
button.grand{padding:13px 22px;font-size:15px;border-radius:14px}
.pub-cta{display:flex;gap:12px;flex-wrap:wrap}

/* Barre du haut, qui reste visible pendant le défilement ;
   border-image étend son fond translucide sur toute la largeur de l'écran. */
.pub-nav{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:10px;margin:0 -28px;padding:14px 28px;border-image:conic-gradient(rgba(247,250,248,.84) 0 0) fill 0/0/0 100vw;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.pub-nav button{white-space:nowrap}
.pub-logo{display:flex;align-items:center;background:none;border:0;padding:0;box-shadow:none}
.pub-logo:hover{filter:none;opacity:.85}
.pub-logo img{height:40px;width:auto;display:block}
.pub-liens{display:flex;gap:2px;margin-left:22px}
.pub-liens button{background:none;border:0;box-shadow:none;color:var(--ink-2);font-weight:600;font-size:14px;padding:8px 13px;border-radius:10px}
.pub-liens button:hover{background:var(--primary-soft);color:var(--primary);filter:none}

/* En-tête : le message à gauche, la démonstration à droite, posée sur une grande tache verte */
.pub-hero{position:relative;display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);gap:56px;align-items:center;padding:44px 0 96px;transition:grid-template-columns .45s ease,gap .45s ease}
/* Mode « démo » : le texte s'efface et la démonstration prend toute la largeur. */
/* minmax(0,0fr) et non 0fr : sans le minimum à zéro, la colonne de texte garderait
   la largeur de son mot le plus long et la démonstration n'irait pas jusqu'au bord. */
.pub-hero.plein{grid-template-columns:minmax(0,0fr) minmax(0,1fr);gap:0}
.pub-hero.plein .pub-hero-texte{opacity:0;visibility:hidden;transform:translateX(-14px);pointer-events:none}
.pub-hero-texte{transition:opacity .3s ease,transform .3s ease}
.demo-barre{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:0 2px 14px;margin-bottom:12px;border-bottom:1px solid var(--line)}
.demo-invite{color:var(--muted);font-size:13px}
.pub-hero::before{content:"";position:absolute;right:-6%;top:2%;width:640px;height:600px;background:#e2f2e8;border-radius:58% 42% 52% 48% / 46% 56% 44% 54%;z-index:-1;pointer-events:none}
.pub-hero::after{content:"";position:absolute;left:44%;bottom:30px;width:190px;height:170px;background:rgba(124,194,66,.13);border-radius:52% 48% 40% 60% / 58% 42% 58% 42%;z-index:-1;pointer-events:none}
.pub-hero h1{font-size:clamp(34px,4.8vw,58px);line-height:1.04;letter-spacing:-.05em;font-weight:800;margin:20px 0 18px}
.pub-hero h1 em{font-style:normal;background:var(--degrade-titre);-webkit-background-clip:text;background-clip:text;color:transparent}
.pub-chapo{font-size:17px;line-height:1.65;color:var(--ink-2);max-width:540px;margin:0 0 28px}
.pub-preuves{list-style:none;padding:0;margin:26px 0 0;display:flex;gap:8px 20px;flex-wrap:wrap;color:var(--ink-2);font-size:13px;font-weight:600}
.pub-preuves li{display:flex;align-items:center;gap:7px}
.pub-preuves svg.ic{width:18px;height:18px;padding:3px;border-radius:50%;background:var(--primary-soft);color:var(--primary);stroke-width:3}
/* Flèche tracée qui relie « Essayer la démo » à la grille de droite. */
.pub-fleche{display:flex;align-items:flex-end;justify-content:flex-end;gap:8px;margin:12px 0 0;color:var(--primary);font-size:13px;font-weight:600}
.pub-fleche svg{width:90px;height:40px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;opacity:.5;animation:pointe 2.6s ease-in-out infinite}
@keyframes pointe{0%,100%{transform:translateX(0)}50%{transform:translateX(8px)}}
@media (prefers-reduced-motion:reduce){ .pub-fleche svg{animation:none} }

/* Démonstration interactive (ecrans/demo.js) : mêmes niveaux, couleurs et règles que l'application */
.pub-demo{position:relative;background:var(--surface);border:1px solid var(--line);border-radius:24px;box-shadow:0 30px 70px rgba(16,62,49,.14),0 2px 6px rgba(16,62,49,.05);padding:18px 18px 14px}
.pub-demo-tete{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.pub-demo-tete small{display:block;color:var(--muted);font-size:11.5px;font-weight:600}
.pub-demo-tete b{font-size:16px;letter-spacing:-.02em}
.pub-badge{font-size:11px;font-weight:700;color:var(--primary);background:var(--primary-soft);border-radius:999px;padding:4px 10px;white-space:nowrap}
.demo-onglets{display:flex;flex-wrap:nowrap;width:100%;margin:12px 0}
.demo-onglets button{flex:1 1 0;justify-content:center;padding:6px 8px;font-size:12.5px;white-space:nowrap}
/* Même hauteur pour les quatre onglets : la page ne saute pas quand on change d'onglet. */
.demo-corps{position:relative;height:392px;overflow-y:auto;scrollbar-width:thin}
/* Palette ouverte : on laisse dépasser, sinon le cadre la couperait */
.demo-corps.ouvert{overflow:visible}
.demo-consigne{font-size:12.5px;color:var(--muted);margin:0 0 8px}
.demo-consigne b{color:var(--ink)}
.demo-table{width:100%;border-collapse:separate;border-spacing:4px}
.demo-table th{font-size:11.5px;font-weight:700;color:var(--muted);text-align:center}
.demo-table tbody th,.demo-table tfoot th{text-align:left;color:var(--ink);font-size:13px;padding-right:4px}
.demo-table tfoot th{color:var(--muted);font-size:12px}
.demo-table td.case{height:36px;border-radius:9px;text-align:center;font-weight:800;font-size:11.5px;cursor:pointer;transition:transform .12s,box-shadow .12s}
.demo-table td.case.n0{background:var(--surface-2);box-shadow:inset 0 0 0 1.5px var(--line)}
.demo-table td.case:hover{transform:scale(1.07);box-shadow:0 4px 14px rgba(0,0,0,.14)}
.demo-table td.case.sel{box-shadow:0 0 0 2px var(--surface),0 0 0 4.5px var(--primary)}
.demo-table td.taux{font-size:12px;font-weight:800;text-align:center;min-width:48px}
.demo-table tfoot td.taux{border-top:1px solid var(--line);padding-top:6px}
.demo-pop{position:absolute;z-index:5;width:220px}
/* « Essayer la démo » : le cadre se signale une seconde, sinon le bouton semblerait sans effet */
.pub-demo.attire{animation:attire 1.1s ease-out}
@keyframes attire{
  0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--primary) 45%,transparent),0 30px 70px rgba(16,62,49,.14)}
  60%{box-shadow:0 0 0 12px color-mix(in srgb,var(--primary) 0%,transparent),0 30px 70px rgba(16,62,49,.14)}
  100%{box-shadow:0 30px 70px rgba(16,62,49,.14),0 2px 6px rgba(16,62,49,.05)}
}
@media (prefers-reduced-motion:reduce){ .pub-demo.attire{animation:none} }
.demo-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:12px}
.demo-kpis div{background:var(--surface-2);border:1px solid var(--line-2);border-radius:12px;padding:9px 10px}
.demo-kpis b{display:block;font-size:19px;letter-spacing:-.02em;line-height:1.2}
.demo-kpis small{display:block;font-size:11px;color:var(--muted);line-height:1.3;margin-top:2px}
.demo-liste{display:flex;flex-direction:column;gap:6px}
.demo-ligne{display:grid;grid-template-columns:minmax(0,1fr) 84px 40px 112px;gap:10px;align-items:center;padding:7px 9px;border-radius:10px;background:var(--surface-2);font-size:12.5px}
.demo-ligne.fiche{grid-template-columns:minmax(0,1fr) auto}
.demo-ligne .rate{font-weight:800;font-size:12px;text-align:right}
.demo-ligne .badge{justify-self:start;font-size:10.5px}
.demo-comp{display:block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.demo-comp b{color:var(--muted);font-size:11px;margin-right:6px}
.demo-groupe{background:var(--surface-2);border-radius:12px;padding:8px 10px}
.demo-groupe-tete{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12.5px;margin-bottom:6px}
.demo-noms{display:flex;flex-wrap:wrap;gap:5px}
.demo-nom{font-size:12px;font-weight:700;padding:3px 10px;border-radius:7px;border:0;box-shadow:none}
.demo-eleves{margin-bottom:12px}
.demo-eleves .chip{font-size:12.5px;padding:4px 12px}
.demo-fiche-tete{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px}
.demo-fiche-tete b{display:block;font-size:17px;letter-spacing:-.02em}
.demo-fiche-tete small{font-size:12px;color:var(--muted)}
.demo-fiche-tete .rate{font-weight:800}
.demo-corps > .sbar{margin-bottom:10px}
.demo-ligne .pill{font-size:11px}

/* Sections */
.pub-sec{padding:72px 0}
.pub-titre{text-align:center;max-width:700px;margin:0 auto 40px}
.pub-titre h2{font-size:clamp(26px,3.2vw,40px);letter-spacing:-.04em;line-height:1.12;margin:16px 0 12px;font-weight:800}
.pub-titre p{color:var(--muted);font-size:16px;margin:0}
.pub-cartes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px}
.pub-cartes.trois{grid-template-columns:repeat(3,minmax(0,1fr))}
.pub-carte{background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:24px;box-shadow:var(--shadow);transition:transform .2s,box-shadow .2s}
.pub-carte:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
.pub-ic{width:44px;height:44px;border-radius:14px;display:flex;align-items:center;justify-content:center;background:var(--primary-soft);color:var(--primary);margin-bottom:16px}
.pub-ic svg.ic{width:21px;height:21px}
.pub-carte h3{margin:0 0 6px;font-size:16.5px;letter-spacing:-.02em}
.pub-carte p{margin:0;color:var(--muted);font-size:14px;line-height:1.6}

/* Sécurité : bandeau vert, comme la barre latérale de l'application */
.pub-sombre{background:var(--vert-fonce);color:var(--sur-vert);border-radius:32px;padding:72px 48px;margin:24px 0}
.pub-sombre .pub-sur{background:var(--vert-survol);border-color:var(--vert-ligne);color:var(--sur-vert)}
.pub-sombre .pub-titre p,.pub-sombre .pub-carte p{color:var(--sur-vert-2)}
.pub-sombre .pub-carte{background:var(--vert-survol);border-color:var(--vert-ligne);box-shadow:none}
.pub-sombre .pub-carte b{color:#fff}
.pub-sombre .pub-ic{background:rgba(255,255,255,.12);color:#fff}

.pub-etapes{list-style:none;counter-reset:etape;padding:0;margin:0 auto;max-width:1000px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.pub-etapes li{counter-increment:etape;background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:24px}
.pub-etapes li::before{content:counter(etape);display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:12px;background:var(--vert-fonce);color:#fff;font-weight:800;margin-bottom:14px}
.pub-etapes b{font-size:16px}
.pub-etapes p{margin:6px 0 0;color:var(--muted);font-size:14px}

.pub-fin{text-align:center;padding:72px 24px;margin:24px 0 8px;border-radius:32px;border:1px solid var(--line);background:radial-gradient(circle at 50% 0,rgba(21,95,74,.13),transparent 70%),var(--surface)}
.pub-fin img{display:block;margin:0 auto 18px}
.pub-fin h2{font-size:clamp(26px,3.2vw,40px);letter-spacing:-.04em;margin:16px 0 10px}
.pub-fin p{color:var(--muted);margin:0 0 26px;font-size:15.5px}
.pub-fin .pub-cta{justify-content:center}

/* Pied de page : le texte est posé sur la ligne des lettres du logo (le trèfle dépasse au-dessus). */
/* Pied de page : tous les textes sur une même ligne, celle des lettres du logo.
   Une image s'aligne par son bord bas ; les lettres s'arrêtent 2 px plus haut, d'où la marge négative. */
.pub-pied{display:flex;align-items:baseline;flex-wrap:wrap;gap:14px 28px;margin-top:36px;padding:26px 0 6px;border-top:1px solid var(--line);color:var(--muted);font-size:13px}
.pub-pied-logo{display:flex;align-items:baseline;gap:14px;flex:1;min-width:240px}
.pub-pied-logo img{height:30px;width:auto;margin-bottom:-2px}
.pub-pied-liens{display:flex;align-items:baseline;gap:18px}
.pub-pied .link{font-size:13px}
.pub-pied a{color:var(--primary);font-weight:600;text-decoration:none}
.pub-pied a:hover{text-decoration:underline}

/* Pages légales : une colonne étroite, confortable à lire */
.legal{display:grid;grid-template-columns:230px minmax(0,1fr);gap:32px;align-items:start;margin:24px 0 48px}
.legal-onglets{position:sticky;top:96px;display:flex;flex-direction:column;gap:4px}
.legal-onglets button{background:none;border:0;box-shadow:none;color:var(--ink-2);font-weight:500;text-align:left;justify-content:flex-start;padding:9px 13px;border-radius:11px}
.legal-onglets button:hover{background:var(--primary-soft);color:var(--primary);filter:none}
.legal-onglets button.on{background:var(--primary-soft);color:var(--primary);font-weight:600}
.legal-texte{background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:30px 34px;box-shadow:var(--shadow);max-width:760px;line-height:1.7}
.legal-texte h2{font-size:26px;font-weight:700;letter-spacing:-.035em;margin:0 0 4px}
.legal-texte h3{font-size:15.5px;font-weight:600;letter-spacing:-.01em;margin:26px 0 8px}
.legal-texte p,.legal-texte li{font-size:14.5px;color:var(--ink-2)}
.legal-texte ul{margin:8px 0;padding-left:20px}
.legal-texte li{margin-bottom:5px}
.legal-texte a{color:var(--primary);font-weight:500}
.legal-texte .maj{color:var(--muted);font-size:13px;margin:0 0 4px}
.legal-texte table.list{margin-top:10px;font-size:13.5px}
.legal-texte table.list td{vertical-align:top}
.legal-texte mark{background:var(--warn-soft);border:1px solid var(--warn-line);border-radius:6px;padding:0 6px;color:var(--ink);font-size:13px}
@media (max-width:860px){
  .legal{grid-template-columns:1fr;gap:16px}
  .legal-onglets{position:static;flex-direction:row;flex-wrap:wrap}
  .legal-texte{padding:22px 20px}
}

.pub-auth{max-width:470px;margin:26px auto 40px}
.pub-retour{text-align:center;margin:18px 0 0}

@media (max-width:980px){
  .pub-hero{grid-template-columns:1fr;gap:44px;padding:28px 0 64px}
  .pub-hero::before{right:-30%;top:auto;bottom:0;width:520px;height:520px}
  .pub-hero::after{display:none}
  .pub-cartes{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pub-liens{display:none}
  /* Une seule colonne : la grille passe dessous, la flèche se tourne vers le bas. */
  .pub-fleche{justify-content:flex-start}
  .pub-fleche svg{width:64px;transform:rotate(104deg);animation:none}
}
@media (max-width:640px){
  .pub{padding:0 16px 24px}
  .pub-nav{margin:0 -16px;padding:10px 16px;gap:8px}
  .pub-nav button:not(.pub-logo){padding:7px 12px;font-size:13.5px}
  .pub-nav [data-action=pubInscription]{display:none}   /* le bouton d'inscription est déjà en tête de page */
  .pub-logo img{height:32px}
  .pub-chapo{font-size:15.5px}
  .pub-sec{padding:48px 0}
  .pub-cartes,.pub-cartes.trois,.pub-etapes{grid-template-columns:1fr}
  .pub-sombre{padding:44px 20px;border-radius:24px}
  .pub-fin{padding:48px 18px;border-radius:24px}
  .pub-demo{padding:14px 10px 10px}
  .demo-onglets button{padding:6px 5px;font-size:11.5px}
  .demo-table{border-spacing:3px}
  .demo-table td.case{height:32px}
  .demo-table td.taux{min-width:38px;font-size:11px}
  .demo-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .demo-ligne{grid-template-columns:minmax(0,1fr) 38px auto}
  .demo-ligne .sbar{display:none}
}

/* ---------- Accueil ---------- */
.hero{margin:6px 0 26px}
.hero h1{margin:12px 0 4px;font-size:28px;font-weight:700;letter-spacing:-.035em;line-height:1.15}
.hero .tag{color:var(--muted);font-size:14px;margin:0}
.tuiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-bottom:16px}
.tuile{display:flex;flex-direction:column;align-items:flex-start;gap:4px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px;text-align:left;color:var(--ink);font-weight:400}
.tuile:hover{border-color:var(--marque);filter:none}
.tuile .t{font-weight:600;font-size:14.5px;letter-spacing:-.015em;display:flex;align-items:center;gap:10px;margin-bottom:4px}
.tuile .t svg.ic{width:32px;height:32px;padding:7px;border-radius:10px;background:var(--primary-soft);color:var(--primary)}
.tuile .s{color:var(--muted);font-size:13px}
.tuile .go{color:var(--marque);font-weight:600;font-size:12.5px;margin-top:auto;padding-top:8px}
.chiffres{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-bottom:16px}
.chiffre{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.chiffre .v{font-size:21px;font-weight:600;letter-spacing:-.01em}
.chiffre .k{font-size:12px;color:var(--muted)}
.brand-link{background:none;border:0;padding:0;display:flex;align-items:center;gap:10px;cursor:pointer;text-align:left;width:100%;color:var(--ink);font-weight:400;border-radius:10px}
.brand-link:hover{filter:none;opacity:.8}
.brand-link:active{transform:none}

/* ---------- Écrans de compte ---------- */
/* Informations du compte : quatre petites tuiles (étiquette grise, valeur en gras) */
.infos{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px;margin:0 0 18px}
.infos div{background:var(--surface-2);border:1px solid var(--line-2);border-radius:14px;padding:11px 14px;min-width:0}
.infos dt{font-size:11.5px;color:var(--muted);font-weight:400;margin-bottom:2px}
.infos dd{margin:0;font-weight:600;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.auth{max-width:460px;margin:10px auto}
.auth .card{padding:24px}
.auth h3{font-size:19px;margin-bottom:6px}
.auth .intro{color:var(--muted);font-size:13.5px;margin:0 0 16px}
.auth label{display:block;font-size:12.5px;font-weight:600;color:var(--ink-2);margin:12px 0 5px}
.auth input{width:100%}
.auth .plein{width:100%;margin-top:20px;font-size:14.5px}
.auth .liens{display:flex;justify-content:space-between;gap:10px;margin-top:14px;font-size:13px;flex-wrap:wrap}
.auth .logo-auth{display:flex;align-items:center;gap:10px;justify-content:center;margin-bottom:16px}
.auth .logo-auth img{width:52px;height:52px}
.auth .logo-auth b{font-size:18px;letter-spacing:.02em}

/* ---------- Premier lancement ---------- */
.welcome{background:linear-gradient(135deg,var(--primary-soft),var(--surface));border:1px solid var(--primary-line);border-radius:22px;padding:28px;box-shadow:var(--shadow)}
.welcome h2{font-size:24px;margin:0 0 6px;letter-spacing:-.02em}
.steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:18px 0}
.step{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:16px}
.step .num{width:28px;height:28px;border-radius:50%;background:var(--primary);color:var(--primary-ink);display:inline-flex;align-items:center;justify-content:center;font-weight:700;margin-bottom:8px}
.step.done .num{background:#1e8a3a;color:#fff}
.step h4{margin:0 0 4px;font-size:15px}
.step p{margin:0 0 10px;color:var(--muted);font-size:13px}
.plus-list{display:grid;gap:10px}
.plus-list button{display:flex;align-items:center;gap:12px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:14px;padding:14px 16px;font-weight:600;text-align:left;box-shadow:var(--shadow)}

/* ---------- Outils enseignant ---------- */
.outil-tabs{display:flex;gap:7px;overflow-x:auto;padding:2px 0 12px;scrollbar-width:thin}
.outil-tabs button{white-space:nowrap;background:var(--surface);color:var(--ink-2);border:1px solid var(--line);padding:9px 13px;border-radius:999px;font-size:13px}
.outil-tabs button.on{background:var(--primary);color:var(--primary-ink);border-color:var(--primary)}
.outil-wrap{max-width:1180px}.outil-card h2{margin:0 0 4px;font-size:21px}.outil-card h3{margin:0}.outil-card p{margin:0;color:var(--muted)}
.outil-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:18px}
.outil-form{display:grid;grid-template-columns:repeat(4,minmax(130px,1fr));gap:12px;align-items:end;padding:15px;background:var(--surface-2);border:1px solid var(--line-2);border-radius:14px;margin-bottom:18px}
.outil-form label,.prep-form label{display:grid;gap:5px;font-size:12.5px;font-weight:600;color:var(--ink-2)}
.outil-form .large{grid-column:span 2}.outil-form button{min-height:42px}.outil-form textarea{resize:vertical}
.outil-liste{display:grid;gap:8px}.outil-liste article{display:grid;grid-template-columns:105px minmax(0,1fr) auto;gap:14px;align-items:start;border:1px solid var(--line-2);border-radius:13px;padding:12px 14px;background:var(--surface)}
.outil-liste article p{white-space:pre-wrap;color:var(--ink-2);margin:3px 0}.outil-date{font-size:12px;color:var(--muted);font-weight:600;padding-top:2px}.mini{padding:6px 9px;font-size:12px}.danger{color:#b42318}.ligne-actions{display:flex;gap:6px;align-items:center}
.outil-vide{padding:28px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:14px;background:var(--surface-2)}
.periode-grid{display:grid;grid-template-columns:repeat(5,minmax(155px,1fr));gap:10px;overflow-x:auto}.periode-grid>section{background:var(--surface-2);border:1px solid var(--line-2);border-radius:14px;padding:12px;min-width:155px}.periode-grid h3{font-size:14px;margin-bottom:10px}.prog-item{display:grid;gap:3px;background:var(--surface);border:1px solid var(--line-2);padding:10px;border-radius:10px;margin-top:8px}.prog-item b{font-size:12px}.prog-item span{font-size:12px;color:var(--muted)}
.progression-table{overflow:auto}.progression-table table{width:100%;border-collapse:collapse}.progression-table th,.progression-table td{text-align:left;padding:10px;border-bottom:1px solid var(--line-2)}.progression-table th{font-size:12px;color:var(--muted)}
.prep-form{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.prep-form .wide{grid-column:1/-1}.prep-form textarea{resize:vertical}.prep-form button{grid-column:1/-1;justify-self:start}.section-title{margin-top:24px!important;margin-bottom:10px!important}
.objectif-heures{display:flex;align-items:center;gap:7px;font-size:13px}.objectif-heures input{width:75px}.heures-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.heures-kpis>div{display:grid;background:var(--surface-2);border:1px solid var(--line-2);border-radius:14px;padding:14px}.heures-kpis strong{font-size:25px}.heures-kpis span{font-size:12px;color:var(--muted)}.heures-kpis .reste{background:var(--primary-soft);border-color:var(--primary-line)}.heures-bar{height:10px;border-radius:999px;background:var(--line-2);overflow:hidden;margin:10px 0 18px}.heures-bar i{display:block;height:100%;background:var(--primary);border-radius:inherit}
.pro-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.pro-grid article{position:relative;display:grid;gap:5px;border:1px solid var(--line);border-radius:14px;padding:15px}.pro-grid article h3{font-size:16px;margin-top:18px}.pro-grid article a{color:var(--primary)}.badge-ok{position:absolute;top:10px;right:10px;font-size:10px;background:var(--primary-soft);color:var(--primary);border-radius:99px;padding:4px 7px}

/* ---------- Bandeaux, notifications, historique ---------- */
/* Bandeau du dossier de sauvegarde : une carte discrète en haut de page, pas une barre pleine largeur */
.fsbanner{display:flex;align-items:center;gap:14px;max-width:1432px;margin:18px 34px 0;padding:12px 14px 12px 12px;background:var(--surface);border:1px solid var(--primary-line);border-radius:16px;box-shadow:var(--shadow)}
.fsbanner[hidden]{display:none}
.fs-ic{flex:none;width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;background:var(--primary-soft);color:var(--primary)}
.fs-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;line-height:1.4}
.fs-txt b{font-size:14px;letter-spacing:-.01em}
.fs-txt span{font-size:12.5px;color:var(--muted)}
.fs-act{display:flex;gap:8px;flex:none}
.fs-act button{padding:7px 13px;font-size:13px}
.warnbtn{background:var(--warn-soft);border:1px solid var(--warn-line);color:#8a5d00;padding:3px 9px;font-size:12px;margin-top:2px;border-radius:8px}
.toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);z-index:60;background:#141827;color:#fff;border-radius:14px;padding:11px 16px;display:flex;align-items:center;gap:12px;box-shadow:var(--shadow-lg);font-weight:400;max-width:calc(100vw - 32px)}
.toast button{background:#fff;color:#141827;border-color:#fff}
@media (max-width:900px){ .toast{bottom:calc(84px + env(safe-area-inset-bottom,0px))} }
table.hist{width:100%;border-collapse:collapse;margin-top:8px}
table.hist td,table.hist th{padding:6px 8px;border-bottom:1px solid var(--line-2);text-align:left}
table.hist th{font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}

@media (max-width:900px){
  .fld{flex:1 1 200px;min-width:0}
  .fld select{flex:1;min-width:0;max-width:100%}
  .segmented{flex-wrap:nowrap;overflow-x:auto;max-width:100%;scrollbar-width:none}
  .segmented button{white-space:nowrap}
  .fsbanner{flex-wrap:wrap;margin:12px 16px 0}
  .fs-act{width:100%;justify-content:flex-end}
  .focus-meta{gap:8px}
  .dash{grid-template-columns:1fr}
  .crow2{grid-template-columns:10px minmax(0,1fr) 52px 14px}
  .crow2 .sbar,.crow2 .badge{display:none}
  .erow2{grid-template-columns:minmax(0,1fr) 52px auto 14px}
  .erow2 .sbar,.erow2 .mpills{display:none}
  input.search{min-width:0;width:100%}
  .bar-row .sep{display:none}
  .kpis{grid-template-columns:repeat(2,1fr)}
  .kpi .v{font-size:24px}
  table.grid td.cell{width:34px;height:32px}
  table.grid th.comp-h{width:34px;min-width:34px}
  table.grid tbody th.name{max-width:108px;overflow:hidden;text-overflow:ellipsis;padding:0 10px;font-size:12.5px}
  table.grid th.corner{min-width:108px}
  .complist{grid-template-columns:1fr}
  .colname{font-size:13px}
  .lien-liste .lg{display:none}
  .card{padding:14px 15px}
  .outil-form{grid-template-columns:1fr 1fr}.outil-form .large{grid-column:1/-1}.prep-form{grid-template-columns:1fr 1fr}.periode-grid{grid-template-columns:repeat(5,220px)}
  .outil-liste article{grid-template-columns:1fr}.outil-date{padding:0}.ligne-actions{justify-content:flex-start}
}
@media (max-width:560px){.outil-form,.prep-form{grid-template-columns:1fr}.outil-form .large,.prep-form .wide{grid-column:1}.outil-head{flex-direction:column}.heures-kpis{grid-template-columns:1fr}.outil-tabs{margin-right:-15px}.objectif-heures{width:100%;justify-content:space-between}}
@media print{
  body{background:#fff;color:#000}
  .no-print,.side,.topbar,.tabbar,.fsbanner{display:none !important}
  .content{margin:0;padding:0}
  .print-only{display:block}
  main{padding:0;max-width:none}
  .card,.kpi,.prio .col{box-shadow:none;break-inside:avoid}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  textarea{border:1px solid #ccc;min-height:0}
}
