
/* ═══════════════════════════════════════════════════════════════════════════
   Le langage visuel de la console HUBS, porté ici.

   ⚠ ON REPREND LES JETONS, PAS LE CODE. La console HUBS est en React avec des
   thèmes pilotés par JavaScript ; ces pages n'ont pas une ligne de script et
   n'en auront pas (« script-src 'none' »). Copier ses composants signifierait
   assouplir la CSP pour un back-office à trois utilisateurs — on copie donc les
   VALEURS : couleurs, rayons, ombres, échelle typographique, grammaire de
   listes. Un utilisateur passant de la console au SI doit sentir un seul outil.

   ⚠ VALEURS RECOPIÉES DEPUIS hubs-server/frontend/src/theme.css. C'est une
   DUPLICATION ASSUMÉE, comme « applyTopic » chez HUBS : les deux dépôts ne
   partagent pas de chaîne de construction. Si la palette y bouge, elle bouge
   ici aussi — et rien ne le signalera automatiquement.

   ⚠ PAS DE BASCULE CLAIR/SOMBRE : elle exigerait du JavaScript. On suit donc
   prefers-color-scheme, ce qui couvre le cas réel — le thème du système. */

:root{
  color-scheme:light;
  --f-body:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,system-ui,sans-serif;
  --f-disp:var(--f-body);
  --f-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --bg:#e8e6e0;--bg3:#eeece6;
  --bgmesh:radial-gradient(110% 70% at 6% -8%, oklch(0.88 0.07 165 / .85) 0%, transparent 58%),
           radial-gradient(100% 60% at 100% 0%, oklch(0.9 0.05 60 / .8) 0%, transparent 60%),#e8e6e0;
  --surf:#fdfdfa;--surf2:#f0efe9;
  --line:rgba(20,28,24,.1);--line2:rgba(20,28,24,.18);
  --t1:#0f1513;--t2:#5b6560;--t3:#78817b;
  --ac:#12352a;--ac2:#0b2119;
  --grl:oklch(0.58 0.15 165 / .13);--gr-tx:oklch(0.47 0.13 165);
  --rd:oklch(0.58 0.16 25);--rdl:oklch(0.58 0.16 25 / .12);
  --am:#a06b3a;--aml:rgba(160,107,58,.15);
  --sh:inset 0 0 0 1px rgba(255,255,255,.62), 0 2px 4px -1px rgba(24,32,28,.16),
       0 10px 20px -8px rgba(24,32,28,.26), 0 26px 44px -26px rgba(24,32,28,.4);
  --shp:0 14px 30px -22px rgba(30,40,35,.5), inset 0 1px 0 #fff;
  --r:16px;--rl:18px;--rm:13px;--rxl:26px;
}
@media (prefers-color-scheme:dark){:root{
  color-scheme:dark;
  --bg:#080c10;--bg3:#0d1218;
  --bgmesh:radial-gradient(120% 80% at 8% -10%, oklch(0.55 0.14 165 / .55) 0%, transparent 60%),
           radial-gradient(110% 70% at 100% 6%, oklch(0.48 0.15 290 / .48) 0%, transparent 62%),#080c10;
  --surf:rgba(255,255,255,.055);--surf2:rgba(255,255,255,.09);
  --line:rgba(255,255,255,.1);--line2:rgba(255,255,255,.15);
  --t1:#f6faf8;--t2:rgba(255,255,255,.62);--t3:rgba(255,255,255,.42);
  --ac:oklch(0.58 0.17 290);--ac2:oklch(0.5 0.17 290);
  --grl:oklch(0.86 0.17 165 / .14);--gr-tx:oklch(0.86 0.17 165);
  --rd:#e0705e;--rdl:rgba(224,112,94,.14);
  --am:#e3b551;--aml:rgba(227,181,81,.16);
  --sh:inset 0 1px 0 rgba(255,255,255,.12), 0 22px 40px -30px rgba(0,0,0,.9);
  --shp:inset 0 1px 0 rgba(255,255,255,.16), 0 26px 48px -32px rgba(0,0,0,.95);
}}

*{box-sizing:border-box}
body{margin:0;min-height:100vh;font-family:var(--f-body);font-size:15px;line-height:1.55;
  color:var(--t1);background:var(--bg);overflow-x:hidden;display:flex;flex-direction:column}
/* Le fond ambiant de HUBS : un voile de couleur, jamais une image. */
body::before{content:'';position:fixed;inset:0;z-index:0;background:var(--bgmesh);pointer-events:none}

.tete{position:relative;z-index:1;display:flex;align-items:center;gap:20px;
  padding:14px 20px;border-bottom:1px solid var(--line);
  background:color-mix(in srgb,var(--surf) 82%,transparent)}
.marque{font-family:var(--f-disp);font-weight:800;font-size:16px;letter-spacing:-.02em;
  text-decoration:none;color:var(--t1)}
.tete nav a{color:var(--t2);text-decoration:none;font-weight:750;font-size:13.5px}
.tete nav a:hover{color:var(--t1)}
.fin{margin-left:auto;display:flex;align-items:center;gap:12px}
.qui{color:var(--t3);font-size:12px;font-family:var(--f-mono)}

main{position:relative;z-index:1;width:100%;max-width:900px;margin:0 auto;padding:18px 16px 60px;flex:1}
h1{font-family:var(--f-disp);font-size:26px;font-weight:800;letter-spacing:-.02em;margin:8px 0 4px}
h1 code{font-size:20px}
.sous{color:var(--t2);margin:0 0 18px;font-size:14px}

/* Titres de section : le liseré dégradé de HUBS. */
.sec-title{display:flex;align-items:center;gap:12px;font-size:11px;font-weight:800;color:var(--t3);
  text-transform:lowercase;letter-spacing:.18em;margin:26px 4px 12px}
.sec-title::after{content:'';flex:1;height:1px;
  background:linear-gradient(90deg,var(--line2),transparent)}

/* La grammaire de listes — celle des réglages HUBS, pas un tableau. Sur un
   téléphone, un tableau à six colonnes déborde ; une liste s'empile. */
.list{background:var(--surf);border:1px solid var(--line);border-radius:var(--rl);
  overflow:hidden;box-shadow:var(--sh);margin-bottom:8px}
.li{display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:13px 16px;border-bottom:1px solid var(--line);font-size:15px}
.li:last-child{border-bottom:0}
.k{color:var(--t2);font-size:13.5px;min-width:0}
.k strong{display:block;color:var(--t1);font-size:14.5px;font-weight:750;
  font-family:var(--f-mono);word-break:break-all}
.v{color:var(--t1);font-weight:600;text-align:right;flex-shrink:0;
  font-variant-numeric:tabular-nums;font-size:13.5px}
.v.faible{color:var(--t3);font-weight:500}
/* ⚠ Barré, pas masqué : un droit retiré doit rester LISIBLE. */
.li.off .k,.li.off .v{opacity:.5;text-decoration:line-through}
.li.off .v.actions{text-decoration:none;opacity:1}

.badge{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:750;
  padding:3px 9px;border-radius:20px;flex-shrink:0;text-transform:lowercase}
.badge.ok{background:var(--grl);color:var(--gr-tx)}
.badge.att{background:var(--aml);color:var(--am)}
.badge.non{background:var(--rdl);color:var(--rd)}
.badge.zero{background:var(--surf2);color:var(--t3)}

.acard{background:var(--surf);border:1px solid var(--line);border-radius:var(--rxl);
  padding:20px;display:flex;flex-direction:column;gap:14px;box-shadow:var(--sh)}

.cta{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;
  padding:14px 20px;border:none;border-radius:var(--r);cursor:pointer;
  font-family:inherit;font-size:15px;font-weight:800;letter-spacing:-.01em;
  color:#fff;background:linear-gradient(135deg,var(--ac),var(--ac2));
  box-shadow:var(--shp);transition:transform .12s,filter .15s;text-decoration:none}
.cta:hover{filter:brightness(1.08)}
.cta:active{transform:scale(.97)}
.cta.sm{width:auto;padding:11px 16px;font-size:13.5px;border-radius:var(--rm)}

.lien{border:0;background:none;color:var(--ac);font:inherit;font-weight:700;font-size:13.5px;
  cursor:pointer;padding:0;text-decoration:underline;text-underline-offset:3px}
.lien.danger{color:var(--rd)}
.retour{display:inline-block;color:var(--t2);text-decoration:none;font-size:13.5px;
  font-weight:700;margin-bottom:4px}
.retour:hover{color:var(--t1)}

/* ⚠ PAS D'ATTRIBUT style="" DANS LE HTML : la CSP est style-src 'self' SANS
   unsafe-inline, donc un style en ligne serait ignoré EN SILENCE — le bouton
   « Retirer » tomberait à la ligne sans qu'aucune erreur ne le dise. Toute règle
   ponctuelle prend donc une classe, ici et pas ailleurs. */
.note{color:var(--t3);font-size:13px;max-width:70ch;margin:10px 4px}
.note.serre{margin:0}
.enligne{display:inline}
.note strong{color:var(--t2)}
.ok,.err{border-radius:var(--rm);padding:12px 16px;margin:16px 0;font-size:14px;font-weight:600;
  border:1px solid}
.ok{background:var(--grl);border-color:var(--grl);color:var(--gr-tx)}
.err{background:var(--rdl);border-color:var(--rdl);color:var(--rd)}

code{font-family:var(--f-mono);font-size:.88em}

.formulaire{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;
  align-items:end;background:var(--surf);border:1px solid var(--line);
  border-radius:var(--rl);padding:18px;box-shadow:var(--sh)}
label{display:flex;flex-direction:column;gap:5px;font-size:11px;font-weight:800;color:var(--t3);
  text-transform:lowercase;letter-spacing:.14em}
input{font:inherit;font-size:14.5px;padding:11px 13px;border:1px solid var(--line2);
  border-radius:var(--rm);background:var(--bg3);color:var(--t1);min-width:0;
  text-transform:none;letter-spacing:normal;font-weight:500}
input:focus{outline:2px solid var(--ac);outline-offset:1px;border-color:transparent}
.formulaire .cta{grid-column:1/-1}

.accueil{max-width:26rem;margin:8vh auto;text-align:center}
.accueil h1{font-size:32px}
.accueil .acard{margin-top:20px;text-align:left}

@media(max-width:560px){
  .li{flex-direction:column;align-items:stretch;gap:6px}
  .v{text-align:left}
  main{padding:14px 12px 48px}
  h1{font-size:22px}
}
