/* En Service - CSS commun (registre civique français clair · plaque/voyant)
   Toute la peau vit dans :root. Changer ces variables = re-thémer le site. */
:root{
  --bg:#F6F3EA;       /* papier ivoire */
  --surface:#FFFFFF;  /* émail blanc */
  --surface2:#FBFAF4;
  --ink:#191E2A;      /* encre */
  --ink-dim:#5C6373;
  --ink-mute:#8A91A0;
  --brand:#1D2A5B;    /* bleu service */
  --on-brand:#F6F3EA;
  --ok:#1F8A4C; --ok-glow:#34C26B;   /* voyant vert */
  --down:#CE2A23;     /* signal rouge */
  --warn:#B26A00;     /* ambre */
  --border:#E4DFD0; --hair:#EDE9DC;
  --radius:12px; --plaque-radius:16px;
  --font-disp:'Familjen Grotesk',system-ui,sans-serif;
  --font-body:'Inter',system-ui,sans-serif;
  --font-mono:'IBM Plex Mono',ui-monospace,monospace;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;overflow-x:clip}
body{margin:0;font-family:var(--font-body);font-size:15px;line-height:1.6;color:var(--ink);background:var(--bg);min-height:100vh;display:flex;flex-direction:column}
main{flex:1 0 auto}
body>footer{flex-shrink:0}
h1,h2,h3,h4,.disp{font-family:var(--font-disp);letter-spacing:-.02em;line-height:1.15}
a{color:inherit;text-decoration:none}
.mono{font-family:var(--font-mono);overflow-wrap:break-word}
/* La nav est position:sticky (~67px) : sans cette marge, un saut d'ancre ou un input autofocus
   (ex. /outils) scrolle la cible SOUS la barre. scroll-padding compense pour toute la page. */
html{scroll-padding-top:72px}
.wrap{max-width:1320px;margin:0 auto;padding-left:40px;padding-right:40px}
@media(max-width:1024px){.wrap{padding-left:24px;padding-right:24px}}
@media(max-width:680px){.wrap{padding-left:16px;padding-right:16px}}
/* Mobile : les tables de donnees defilent horizontalement au lieu d'etre ecrasees (sinon les
   badges/boutons se brisaient lettre par lettre). nowrap sur les cellules -> jamais de cesure verticale. */
@media(max-width:680px){
  .tbl:not(.checks-tbl){display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:12px}
  .tbl:not(.checks-tbl) th,.tbl:not(.checks-tbl) td{white-space:nowrap}
  /* Tables de PROSE (phrases entieres, ex. /souverainete) : on laisse retourner a la ligne au
     lieu de forcer un scroll horizontal large (le nowrap est fait pour les tables de badges). */
  .tbl.prose{display:table;width:100%}
  .tbl.prose th,.tbl.prose td{white-space:normal}
}
.nw{white-space:nowrap}
.eyebrow{font-family:var(--font-mono);font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin:0 0 10px}

/* ---- voyant + logo ---- */
.voyant{display:inline-block;width:.62em;height:.62em;border-radius:50%;background:var(--ok);
  box-shadow:0 0 0 .12em color-mix(in srgb,var(--ok-glow) 22%,transparent),0 0 .5em color-mix(in srgb,var(--ok-glow) 75%,transparent);
  animation:breathe 2.6s ease-in-out infinite;vertical-align:baseline}
.voyant.down{background:var(--down);box-shadow:0 0 0 .12em color-mix(in srgb,var(--down) 22%,transparent),0 0 .5em color-mix(in srgb,var(--down) 70%,transparent)}
.voyant.warn{background:var(--warn);box-shadow:0 0 0 .12em color-mix(in srgb,var(--warn) 22%,transparent)}
@keyframes breathe{0%,100%{opacity:1}50%{opacity:.42}}
.logo{font-family:var(--font-disp);font-weight:700;letter-spacing:-.02em;color:var(--brand);white-space:nowrap;display:inline-flex;align-items:baseline;font-size:24px}
.logo .sp{width:.24em;display:inline-block}
.logo .voyant{width:.55em;height:.55em;margin-left:.22em;flex-shrink:0;align-self:baseline}

/* ---- boutons ---- */
.btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-body);font-weight:600;font-size:15px;
  border-radius:11px;padding:12px 22px;cursor:pointer;border:1.5px solid transparent;transition:.15s}
.btn.p{background:var(--brand);color:var(--on-brand)}
.btn.p:hover{filter:brightness(1.12)}
.btn.g{background:transparent;color:var(--ink);border-color:var(--border)}
.btn.g:hover{border-color:var(--ink-mute)}
.btn.block{width:100%;justify-content:center}
.btn.sm{padding:8px 14px;font-size:14px;border-radius:9px}
.btn.danger{background:transparent;color:var(--down);border-color:color-mix(in srgb,var(--down) 35%,transparent)}

/* ---- nav ---- */
nav{position:sticky;top:0;z-index:60;background:var(--bg);border-bottom:1px solid var(--border)}
/* Bandeau feedback bêta (cf. es_nav, gated ES_BETA). Texte centré, croix épinglée en haut à droite
   (sinon en flex elle tombait seule sur une ligne quand le texte passe sur 2 lignes en mobile). Sans GPU. */
.beta-bar{position:relative;text-align:center;background:var(--brand);color:var(--on-brand);font-size:13.5px;line-height:1.45;padding:9px 42px}
.beta-bar a{color:var(--on-brand);text-decoration:underline;font-weight:600;white-space:nowrap}
.beta-x{position:absolute;top:6px;right:8px;background:none;border:0;color:var(--on-brand);font-size:18px;line-height:1;cursor:pointer;opacity:.75;padding:4px 8px}
.beta-x:hover{opacity:1}
nav .links .nav-sep{width:1px;height:20px;background:var(--border);margin:0 8px;align-self:center}
nav .links a.acct{opacity:.66}nav .links a.acct:hover,nav .links a.acct.on{opacity:1}
nav .row{display:flex;align-items:center;gap:6px;height:66px}
nav .brand{display:inline-flex;align-items:center;margin-right:auto}
nav .links{display:flex;gap:2px;align-items:center;font-size:14.5px;margin-left:auto}
nav .links a{opacity:.74;padding:8px 12px;border-radius:9px;white-space:nowrap}
nav .links a.on,nav .links a:hover{opacity:1;background:color-mix(in srgb,var(--brand) 7%,transparent)}
nav .nav-account{display:flex;gap:4px;align-items:center;margin-left:14px;font-size:14px}
nav .nav-account a{opacity:.74;padding:8px 10px;border-radius:9px}
nav .nav-account a:hover,nav .nav-account a.on{opacity:1;background:color-mix(in srgb,var(--brand) 7%,transparent)}
nav .btn{padding:9px 16px;font-size:14px;margin-left:10px}
.nav-toggle{position:absolute;opacity:0;pointer-events:none}
.nav-ham{display:none;margin-left:6px;background:none;border:1.5px solid var(--border);border-radius:9px;color:var(--ink);padding:8px;cursor:pointer;line-height:0}
.nav-ham svg{width:18px;height:18px;stroke:currentColor;stroke-linecap:round}
.nav-ham .h-close{display:none}
nav:has(#nav-toggle:checked) .h-open{display:none}nav:has(#nav-toggle:checked) .h-close{display:block}
.nav-back{display:none}
@media(max-width:820px){
  nav .links{display:none}
  .nav-ham{display:inline-flex;align-items:center;justify-content:center}
  nav:has(#nav-toggle:checked) .links{
    display:flex;flex-direction:column;align-items:stretch;gap:0;position:fixed;top:67px;left:0;right:0;
    background:var(--bg);border-bottom:1px solid var(--border);box-shadow:0 16px 26px rgba(25,30,42,.13);padding:0;z-index:55;margin:0}
  nav:has(#nav-toggle:checked) .links a{padding:14px 20px;border-radius:0;border-top:1px solid var(--hair);opacity:1}
  nav:has(#nav-toggle:checked) .links .nav-sep{width:auto;height:0;margin:0;border-top:2px solid var(--border)}
  body:has(#nav-toggle:checked) .nav-back{display:block;position:fixed;inset:67px 0 0;background:rgba(0,0,0,.04);z-index:46}
}

/* ---- marketing ---- */
.hero{padding-top:84px;padding-bottom:64px;text-align:center}
.hero h1{font-weight:700;font-size:54px;line-height:1.04;margin:14px auto 18px;max-width:14ch}
.hero p.lead{font-size:19px;line-height:1.6;color:var(--ink-dim);max-width:56ch;margin:0 auto 28px}
.hero .cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.hero .reassure{margin-top:18px;font-family:var(--font-mono);font-size:12.5px;color:var(--ink-mute)}
@media(max-width:680px){.hero h1{font-size:38px}.hero{padding-top:54px;padding-bottom:44px}section{padding-top:56px;padding-bottom:56px}.hero .plaque{text-align:center}.hero .plaque .state{justify-content:center}}
section{padding-top:84px;padding-bottom:84px}
.sec-h{text-align:center;max-width:620px;margin:0 auto 44px}
.sec-h h2{font-weight:700;font-size:34px;margin:6px 0 10px}
.sec-h p{color:var(--ink-dim);margin:0}
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
@media(max-width:860px){.cards{grid-template-columns:1fr}}
.card{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:24px}
.card>.ic{width:44px;height:44px;border-radius:12px;background:color-mix(in srgb,var(--brand) 8%,transparent);display:grid;place-items:center;margin:0 auto 14px}
.card .ic svg{width:22px;height:22px;stroke:var(--brand);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.card h3{font-size:18px;margin:0 0 7px}
.card p{margin:0;color:var(--ink-dim);font-size:14.5px}
/* Cartes a icone : contenu centre (icone deja centree via margin auto + titre + texte). */
.card:has(>.ic){text-align:center}
/* Section "checks" : 5 familles -> flex centre, 3+2 centre. Le conteneur est plafonne pour
   qu'une 4e carte ne tienne JAMAIS sur une rangee (sinon 4+1 avec orpheline plus large). */
.checks-cards{display:flex;flex-wrap:wrap;justify-content:center;gap:18px;max-width:1040px;margin-inline:auto}
.checks-cards>.card{flex:1 1 280px;max-width:calc((100% - 36px)/3)}
@media(max-width:860px){.checks-cards>.card{max-width:calc((100% - 18px)/2)}}
@media(max-width:560px){.checks-cards>.card{max-width:100%}}
/* Section "comment ca marche" : rail pointille reliant les 3 etapes numerotees */
.howflow{position:relative}
.howflow::before{content:"";position:absolute;left:0;right:0;top:45px;border-top:2px dashed color-mix(in srgb,var(--brand) 30%,transparent);z-index:0}
.howflow>.card{position:relative;z-index:1}
@media(max-width:860px){.howflow::before{display:none}}

/* ---- la plaque émaillée (device de marque) ---- */
.plaque{position:relative;background:linear-gradient(180deg,rgba(255,255,255,.55),transparent 26%),var(--surface);
  border:1px solid var(--border);border-radius:var(--plaque-radius);padding:26px 28px;
  box-shadow:0 1px 0 rgba(255,255,255,.6) inset,0 8px 26px rgba(25,30,42,.07)}
.plaque::before,.plaque::after{content:"";position:absolute;top:13px;width:6px;height:6px;border-radius:50%;
  background:radial-gradient(circle at 35% 30%,var(--ink-mute),transparent 70%);opacity:.45}
.plaque::before{left:13px}.plaque::after{right:13px}
.plaque .label{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:10px}
.plaque .state{display:flex;align-items:center;gap:14px}
.hero .plaque .state{justify-content:center}
.plaque .state .voyant{width:16px;height:16px;flex-shrink:0}
.plaque .state h2{font-size:26px;margin:0;font-weight:700;line-height:1.1}
@media(max-width:680px){.plaque .state h2{font-size:20px}
/* hero demo : l'URL nowrap (.tg) forcait la ligne plus large que la carte -> on autorise la cesure */
.plaque .mon .tg{white-space:normal;overflow-wrap:anywhere}}

/* ---- badges ---- */
.badge{display:inline-block;font-family:var(--font-mono);font-size:11.5px;font-weight:500;padding:.25em .7em;border-radius:100px;letter-spacing:.02em}
.b-ok{color:var(--ok);background:color-mix(in srgb,var(--ok) 12%,transparent);border:1px solid color-mix(in srgb,var(--ok) 30%,transparent)}
.b-warn{color:var(--warn);background:color-mix(in srgb,var(--warn) 12%,transparent);border:1px solid color-mix(in srgb,var(--warn) 30%,transparent)}
.b-down{color:var(--down);background:color-mix(in srgb,var(--down) 12%,transparent);border:1px solid color-mix(in srgb,var(--down) 30%,transparent)}
.b-dim{color:var(--ink-mute);background:color-mix(in srgb,var(--ink-mute) 12%,transparent);border:1px solid color-mix(in srgb,var(--ink-mute) 25%,transparent)}

/* ---- tarifs ---- */
.pricing{display:grid;grid-template-columns:1fr 1fr;gap:20px;max-width:760px;margin:0 auto}
@media(max-width:680px){.pricing{grid-template-columns:1fr}}
.price{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:30px}
.price.feat{border-color:var(--brand);box-shadow:0 8px 30px color-mix(in srgb,var(--brand) 14%,transparent)}
.price h3{font-size:22px;margin:0 0 4px}
/* badge d'offre (recommandé / agences) : espace + centrage vertical optique sur le titre */
.price h3 .badge{margin-left:9px;vertical-align:middle;position:relative;top:-1px}
.price .amt{font-family:var(--font-disp);font-size:42px;font-weight:700;margin:8px 0}
.price .amt small{font-size:15px;color:var(--ink-mute);font-weight:500}
.price ul{list-style:none;padding:0;margin:18px 0;display:grid;gap:10px}
.price li{padding-left:26px;position:relative;font-size:14.5px}
.price li::before{content:"";position:absolute;left:0;top:.45em;width:9px;height:9px;border-radius:50%;background:var(--ok)}
.price li.no{color:var(--ink-mute)}.price li.no::before{background:var(--border)}
/* cartes cumulatives (tarifs) : la pastille verte sert de coche ; "Tout le X, et :" = separateur */
.tier-plus{margin:18px 0 0;padding-top:16px;border-top:1px solid var(--border);font-weight:700;font-size:13.5px;color:var(--ink)}
.tier-feats{margin-top:12px!important}
.tier-feats li b{font-weight:700}
.tiers .price{display:flex;flex-direction:column}
.tiers .price .tier-feats{margin-bottom:0}
.cmp-details summary::-webkit-details-marker{display:none}

/* ---- footer ---- */
footer{border-top:1px solid var(--border);background:var(--surface2);margin-top:40px;padding:48px 0 30px}
footer .row{display:flex;gap:40px;flex-wrap:wrap;justify-content:space-between}
footer .tagline{color:var(--ink-dim);max-width:30ch;margin:12px 0 0;font-size:14px}
footer .cols{display:flex;gap:54px;flex-wrap:wrap}
footer .col h4{font-size:13px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-mute);margin:0 0 12px}
footer .col a{display:block;color:var(--ink-dim);font-size:14px;padding:3px 0}
footer .col a:hover{color:var(--ink)}
footer .legal{margin-top:34px;padding-top:18px;border-top:1px solid var(--border);display:flex;gap:14px;justify-content:space-between;flex-wrap:wrap;font-size:12.5px;color:var(--ink-mute)}

/* ---- auth ---- */
.auth-wrap{max-width:420px;margin:54px auto;padding:0 18px}
.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:32px}
.auth-card h1{font-size:25px;margin:0 0 6px;text-align:center}
.auth-card .sub{text-align:center;color:var(--ink-dim);margin:0 0 22px;font-size:14px}
.field{margin-bottom:14px}
.field label{display:block;font-size:13px;font-weight:600;margin-bottom:6px}
.field input,.field select,.field textarea{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:9px;
  padding:11px 13px;font:inherit;line-height:1.4;color:var(--ink);outline:none;transition:border-color .15s}
/* select uniformise sa hauteur sur celle de input (appearance native ratait de quelques px) ; fleche maison */
.field select{-webkit-appearance:none;appearance:none;padding-right:36px;cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%23888' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 13px center}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--brand)}
.field input[type=checkbox],.field input[type=radio]{width:auto;flex:0 0 auto}
.field .hint{font-size:12px;color:var(--ink-mute);margin-top:5px}
.alt{text-align:center;margin-top:18px;font-size:14px;color:var(--ink-dim)}
.alt a{color:var(--brand);font-weight:600}
.flash{padding:12px 15px;border-radius:10px;font-size:14px;margin-bottom:16px}
.flash.err{background:color-mix(in srgb,var(--down) 10%,transparent);color:var(--down);border:1px solid color-mix(in srgb,var(--down) 30%,transparent)}
.flash.ok{background:color-mix(in srgb,var(--ok) 10%,transparent);color:var(--ok);border:1px solid color-mix(in srgb,var(--ok) 30%,transparent)}

/* cibles d'ancre : ne pas se faire masquer par la nav sticky (top:0, ~67px) */
#reglages{scroll-margin-top:84px}

/* bandeau « en pause » : plus visible que le bouton Réactiver de la barre d'outils */
.paused-banner{display:flex;align-items:center;justify-content:space-between;gap:12px 16px;flex-wrap:wrap;padding:13px 16px;margin-bottom:16px;border-radius:10px;background:color-mix(in srgb,var(--warn) 12%,transparent);border:1px solid color-mix(in srgb,var(--warn) 38%,transparent);font-size:14px}

/* ---- layout app (sidebar + main) ---- */
.app{display:grid;grid-template-columns:248px 1fr;gap:32px;width:100%;max-width:1320px;margin:28px auto;padding:0 40px;align-items:start;flex:1 0 auto}
.app>.main{min-width:0}.app>aside{min-width:0}
@media(max-width:1024px){.app{padding:0 24px;gap:24px}}
/* Mobile (≤ breakpoint hamburger) : sidebar app cachée du flux, ouverte en overlay via le hamburger
   du top-nav - comme encart.fr. On masque les liens top redondants sur les pages app pour éviter
   que les deux panneaux fixes ne se superposent. */
@media(max-width:820px){
  .app{grid-template-columns:1fr;padding:0 16px;gap:0;margin:0 auto}
  .app>aside{display:none}
  .app>.main{padding-top:24px}
  body:has(.app) nav:has(#nav-toggle:checked) .links{display:none}
  body:has(.app):has(#nav-toggle:checked) .app>aside{
    display:block;position:fixed;top:67px;left:0;right:0;bottom:0;overflow-y:auto;
    z-index:56;background:var(--bg);border-bottom:1px solid var(--border);padding:18px 16px;margin:0}
}
.plan-box{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:16px;margin-bottom:14px}
.plan-box .pn{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute)}
.plan-box .pl{font-family:var(--font-disp);font-weight:700;font-size:18px;margin:2px 0 10px}
.bar-wrap{height:7px;background:var(--bg);border-radius:100px;overflow:hidden}
.bar{height:100%;background:var(--brand);border-radius:100px;transition:width .3s}
.plan-box .quota{font-size:12.5px;color:var(--ink-dim);margin-top:7px}
.plan-warn{font-size:12px;font-weight:600;margin-top:8px;color:var(--warn)}
.plan-warn.err{color:var(--down)}
.upgrade{display:block;text-align:center;background:var(--brand);color:var(--on-brand);border-radius:10px;padding:11px;margin-top:12px;font-weight:600;font-size:14px;line-height:1.3}
.tva{font-size:10.5px;color:var(--ink-mute);margin:8px 0 0;text-align:center}
.snav{display:flex;flex-direction:column;gap:2px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:8px}
.snav a{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:9px;font-size:14.5px;color:var(--ink-dim)}
.snav a:hover{background:var(--bg);color:var(--ink)}
.snav a.on{background:color-mix(in srgb,var(--brand) 9%,transparent);color:var(--brand);font-weight:600}
.snav .ic{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
.snav-sep{height:1px;background:var(--border);margin:6px 4px}

.main h1{font-size:28px;margin:0 0 4px}
.main .page-sub{color:var(--ink-dim);margin:0 0 22px}
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px;flex-wrap:wrap}

/* ---- liste de moniteurs ---- */
.mon-list{display:grid;gap:12px}
.mon{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:15px 18px}
.mon:hover{border-color:var(--ink-mute)}
.mon .dot{width:11px;height:11px;border-radius:50%;flex-shrink:0;background:var(--ok)}
.mon .dot.down{background:var(--down)}.mon .dot.warn{background:var(--warn)}.mon .dot.unknown{background:var(--ink-mute)}
.mon .meta{min-width:0;flex:1;overflow:hidden}
.mon .nm{font-weight:600;font-size:15.5px;display:flex;align-items:center;gap:7px;min-width:0}
.mon .nm-t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex-shrink:1}
.mon .nm .badge{flex-shrink:0}
.mon .nm [class^="flag-"]{flex-shrink:0}
.mon .tg{font-family:var(--font-mono);font-size:12.5px;color:var(--ink-mute);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* La plaque vit dans .hero{text-align:center} : sans ca, .mon .tg (bloc) heriterait du centrage
   alors que .mon .nm (flex) reste a gauche -> lignes desalignees. On force les lignes a gauche. */
.plaque .mon .meta{text-align:left}
.mon .right{text-align:right;white-space:nowrap;display:flex;align-items:center;gap:14px}
.mon .lat{font-family:var(--font-mono);font-size:13px;color:var(--ink-dim)}
.mon .upt{font-family:var(--font-mono);font-size:12px;color:var(--ink-mute)}
/* mobile : les metriques (latence/dispo/etat) passent sur une 2e ligne pleine largeur,
   sinon elles debordent a droite quand le nom + badge prennent toute la largeur. */
/* mobile : 2 lignes qui occupent toute la largeur (pas de vide a droite) :
   L1 = nom (gauche) ........ type-badge + drapeau (droite) ;
   L2 = latence/dispo (gauche) ........ etat (droite). Le nom tronque si trop long. */
@media(max-width:600px){
  .mon{flex-wrap:wrap}
  .mon .nm{flex-wrap:nowrap}
  .mon .nm .badge{margin-left:auto}
  .mon .right{flex-basis:100%;justify-content:flex-start;gap:10px;margin-top:9px;padding-top:9px;border-top:1px solid var(--hair)}
  .mon .right .badge{margin-left:auto}
}

/* ---- tableau générique ---- */
.tbl{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--border);border-radius:14px;overflow:hidden}
.tbl th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-mute);padding:12px 16px;border-bottom:1px solid var(--border)}
.tbl td{padding:13px 16px;border-bottom:1px solid var(--hair);font-size:14.5px}
.tbl tr:last-child td{border-bottom:none}
.tbl tr:hover td{background:var(--surface2)}

/* ---- état vide ---- */
.empty{text-align:center;padding:54px 24px;background:var(--surface);border:1px dashed var(--border);border-radius:16px;color:var(--ink-dim)}
.empty h3{margin:0 0 6px;color:var(--ink)}

/* ---- divers ---- */
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:18px}
@media(max-width:680px){.grid-2{grid-template-columns:1fr}}
.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border);border:1px solid var(--border);border-radius:14px;overflow:hidden;margin:18px 0}
@media(max-width:560px){.metrics{grid-template-columns:repeat(2,1fr)}}
.metric{background:var(--surface);padding:15px 17px}
.metric .v{font-family:var(--font-disp);font-size:24px;font-weight:700}
.metric .l{font-size:12px;color:var(--ink-mute);margin-top:3px}
.pagehead{padding-top:54px;padding-bottom:6px;text-align:center}
.pagehead h1{font-size:42px;margin:8px 0 12px}
.pagehead p{color:var(--ink-dim);max-width:60ch;margin:0 auto}
.prose{max-width:760px;margin:0 auto;padding:30px 0 60px}
.prose h2{font-size:22px;margin:30px 0 10px}
.prose p,.prose li{color:var(--ink-dim);line-height:1.7}
.powered{margin:30px 0;text-align:center}
.powered a{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:13px;color:var(--ink-dim);border:1px solid var(--border);background:var(--surface);border-radius:100px;padding:8px 16px}
.powered b{color:var(--ink);font-family:var(--font-disp);font-weight:700}

/* polish mobile : titres de page plus compacts sur petit écran */
@media(max-width:680px){.pagehead h1{font-size:32px}.sec-h h2{font-size:26px}}

/* tableau des checks (home) classé par famille */
.checks-tbl td{padding:9px 14px;vertical-align:top}
.checks-tbl .fam-row{background:color-mix(in srgb,var(--brand) 7%,transparent);color:var(--brand);font-family:var(--font-mono);font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;text-align:left;padding:9px 14px;border-top:1px solid var(--border)}

/* sélecteur d'outils (page Outils gratuits) */
.tools-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(185px,1fr));gap:12px;max-width:860px;margin:18px auto 0}
.tool-card{display:flex;flex-direction:column;gap:4px;text-align:left;background:var(--surface);border:1.5px solid var(--border);border-radius:14px;padding:14px 16px;transition:.14s}
.tool-card:hover{border-color:var(--ink-mute);transform:translateY(-1px)}
.tool-card.on{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 6%,transparent)}
.tool-card .tc-name{font-family:var(--font-disp);font-weight:600;font-size:15px;color:var(--ink)}
.tool-card .tc-desc{font-size:12.5px;color:var(--ink-mute);line-height:1.4}
/* FAQ repliable réutilisable */
.faq-item{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px 18px}
.faq-item summary{font-weight:600;cursor:pointer;list-style:none}
.faq-item summary::-webkit-details-marker{display:none}
.faq-item summary::before{content:"+";color:var(--brand);font-weight:700;margin-right:10px}
.faq-item[open] summary::before{content:"\2013"}
.faq-item p{margin:10px 0 0;color:var(--ink-dim);font-size:14.5px}

/* bande de stats (pagehead Fonctionnalités) */
.stat-strip{display:flex;flex-wrap:wrap;justify-content:center;gap:14px;margin-top:30px}
.stat-strip>div{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px 22px;text-align:center;min-width:118px}
.stat-strip b{display:block;font-family:var(--font-disp);font-weight:700;font-size:24px;color:var(--brand);line-height:1.1}
.stat-strip span{font-size:12.5px;color:var(--ink-mute)}
/* section 2 colonnes texte/visuel */
.split{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center;max-width:980px;margin:0 auto}
@media(max-width:820px){.split{grid-template-columns:1fr;gap:26px}}
.split-h{font-size:30px;margin:4px 0 12px}
.ticks{list-style:none;padding:0;margin:16px 0 0;display:grid;gap:8px}
.ticks li{position:relative;padding-left:26px;color:var(--ink-dim)}
.ticks li::before{content:"\2713";position:absolute;left:0;color:var(--ok);font-weight:700}
code{font-family:var(--font-mono);font-size:.88em;background:color-mix(in srgb,var(--brand) 7%,transparent);padding:.1em .4em;border-radius:5px}

/* galerie de modèles de page de statut */
.model-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
@media(max-width:900px){.model-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.model-grid{grid-template-columns:1fr}}
.model-card{display:block;color:inherit;text-decoration:none;border:1px solid var(--border);border-radius:16px;overflow:hidden;background:var(--surface);transition:.15s}
.mp-see{font-family:var(--font-mono);font-size:12px;color:var(--brand);font-weight:500}
.model-card:hover{transform:translateY(-2px);box-shadow:0 10px 28px rgba(25,30,42,.10)}
.model-prev{padding:16px 16px 18px}
.mp-eyebrow{font-family:var(--font-mono);font-size:9px;letter-spacing:.14em}
.mp-state{display:flex;align-items:center;gap:8px;font-family:var(--font-disp);font-weight:700;font-size:14px;margin:7px 0 9px}
.mp-voyant{width:11px;height:11px;border-radius:50%;flex-shrink:0}
.mp-pill{display:inline-block;font-family:var(--font-mono);font-size:10px;border:1px solid;border-radius:100px;padding:2px 8px;margin-bottom:12px}
.mp-svc{border:1px solid;border-radius:9px;padding:9px 11px;margin-bottom:8px}
.mp-svc-h{display:flex;justify-content:space-between;font-size:11px;font-weight:600;font-family:var(--font-mono)}
.mp-bars{display:flex;gap:1.5px;margin-top:7px;height:13px}
.mp-bars i{flex:1;border-radius:1px}
.model-meta{display:flex;align-items:center;justify-content:space-between;padding:13px 16px;border-top:1px solid var(--border)}
.model-meta h3{margin:0;font-size:16px}
/* Apercu de modele : carte de statut interne (theme applique via tokens inline). */
.mp-card{padding:11px 12px;margin-bottom:9px}
.mp-bdg{font-size:10px;font-weight:600;white-space:nowrap}
/* Pagenav de categories (page Modeles) : barre collante sous la nav + onglets scroll-spy. */
.cattabs{position:sticky;top:66px;z-index:50;background:var(--bg);border-bottom:1px solid var(--border)}
.cattabs-row{display:flex;gap:8px;overflow-x:auto;padding-top:12px;padding-bottom:12px;scrollbar-width:none}
.cattabs-row::-webkit-scrollbar{display:none}
.cattab{flex:0 0 auto;font-family:var(--font-mono);font-size:13px;color:var(--ink-dim);border:1px solid var(--border);border-radius:100px;padding:7px 14px;white-space:nowrap;transition:.15s;cursor:pointer}
.cattab:hover{border-color:var(--ink-mute);color:var(--ink)}
.cattab.is-active{background:var(--brand);color:var(--on-brand);border-color:var(--brand)}
.cattab .cat-count{opacity:.6;font-size:11px}
.cattab.is-active .cat-count{opacity:.85}
.catsec{scroll-margin-top:128px}
.cat-h{display:flex;align-items:center;gap:9px;margin-bottom:16px}
.cat-h .cat-n{font-family:var(--font-mono);font-size:13px;font-weight:500;color:var(--ink-mute);background:var(--surface);border:1px solid var(--border);border-radius:100px;padding:1px 9px}

/* drapeaux des régions de sonde en CSS (évite le tofu des emoji drapeaux) */
.flag-fr,.flag-ca,.flag-sg,.flag-au{display:inline-block;position:relative;width:15px;height:10px;border-radius:2px;vertical-align:-1px;box-shadow:0 0 0 .5px rgba(0,0,0,.28) inset,0 0 0 .5px rgba(0,0,0,.18)}
.flag-fr{background:linear-gradient(90deg,#0055A4 0 33.3%,#fff 33.3% 66.6%,#EF4135 66.6%)}
.flag-any{display:inline-block;width:11px;height:11px;border-radius:50%;vertical-align:-1px;background:radial-gradient(circle at 3.5px 3px,#5b7fb5,#1D2A5B 75%);box-shadow:0 0 0 .5px rgba(0,0,0,.22) inset}
.flag-ca{background:linear-gradient(90deg,#D52B1E 0 28%,#fff 28% 72%,#D52B1E 72%)}
.flag-ca::after{content:"";position:absolute;left:50%;top:50%;width:3px;height:3px;background:#D52B1E;transform:translate(-50%,-50%) rotate(45deg)}
/* Singapour : rouge/blanc + croissant et 5 etoiles (sinon = drapeau Indonesie). Approx. a 15x10. */
.flag-sg{background:radial-gradient(circle at 5.2px 1.5px,#fff .45px,transparent .55px),radial-gradient(circle at 6.2px 2.3px,#fff .45px,transparent .55px),radial-gradient(circle at 5.85px 3.4px,#fff .45px,transparent .55px),radial-gradient(circle at 4.7px 3.4px,#fff .45px,transparent .55px),radial-gradient(circle at 4.6px 2.3px,#fff .45px,transparent .55px),radial-gradient(circle at 4.3px 2.5px,#EF3340 1.8px,transparent 1.9px),radial-gradient(circle at 3.2px 2.5px,#fff 1.8px,transparent 1.9px),linear-gradient(180deg,#EF3340 0 50%,#fff 50%)}
.flag-au{background-color:#012169;background-image:radial-gradient(circle at 72% 32%,#fff .85px,transparent 1.1px),radial-gradient(circle at 82% 58%,#fff .85px,transparent 1.1px),radial-gradient(circle at 64% 66%,#fff .85px,transparent 1.1px),radial-gradient(circle at 86% 82%,#fff .65px,transparent .9px)}
/* drapeau dans les tableaux comparatifs : texte plus grand que les eyebrows -> recentrer sur la capitale */
.tbl .flag-fr,.tbl .flag-ca,.tbl .flag-sg,.tbl .flag-au{vertical-align:0}

/* sélecteur de modèle en pills (éditeur de page de statut) */
.preset-pills{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:4px}
.ppill-group-h{flex-basis:100%;width:100%;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-mute);font-weight:700;margin:10px 0 0}
.ppill-group-h:first-child{margin-top:0}
.ppill{position:relative;display:inline-flex;align-items:center;border:1.5px solid var(--border);border-radius:100px;padding:7px 14px;font-size:13.5px;cursor:pointer;background:var(--surface);transition:.12s}
.ppill:hover{border-color:var(--ink-mute)}
.ppill input{position:absolute;opacity:0;width:0;height:0}
.ppill.on{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 9%,transparent);color:var(--brand);font-weight:600}

/* Déconnexion dans la sidenav : utile dans l'overlay mobile, redondante sur desktop (top-nav) */
.snav-logout{display:none}
@media(max-width:820px){.snav-logout{display:flex}}

/* ---- Checkout : récap features + sélecteur d'offre en cartes ---- */
.co-feats{list-style:none;margin:0 0 22px;padding:0;display:grid;gap:10px}
.co-feats li{display:flex;align-items:flex-start;gap:11px;font-size:14.5px;color:var(--ink)}
.co-feats .ck{flex-shrink:0;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  background:color-mix(in srgb,var(--ok) 14%,transparent);color:var(--ok);margin-top:1px}
.plan-opts{display:grid;gap:10px;margin-bottom:18px}
.plan-opt{display:flex;align-items:center;gap:14px;padding:15px 17px;border:1.5px solid var(--border);
  border-radius:14px;cursor:pointer;transition:.13s;background:var(--surface)}
.plan-opt:hover{border-color:var(--ink-mute)}
.plan-opt input{accent-color:var(--brand);width:18px;height:18px;flex-shrink:0;cursor:pointer}
.plan-opt:has(input:checked){border-color:var(--brand);background:color-mix(in srgb,var(--brand) 5%,transparent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 11%,transparent)}
.po-body{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
.po-name{font-weight:600;font-size:15.5px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.po-sub{font-size:12.5px;color:var(--ink-mute)}
.po-sub s{opacity:.7}
.po-price{text-align:right;white-space:nowrap;line-height:1.1}
.po-price b{font-family:var(--font-disp);font-size:23px;font-weight:700;display:block}
.po-price small{color:var(--ink-mute);font-size:12px}
.po-badge{font-family:var(--font-mono);font-size:10px;letter-spacing:.03em;color:var(--ok);
  background:color-mix(in srgb,var(--ok) 13%,transparent);border-radius:100px;padding:2px 8px;font-weight:600}

/* Zone grisée (création bloquée à quota plein) : pas d'effet GPU, juste opacité + clics off */
.locked-area{opacity:.5;pointer-events:none;user-select:none}

/* Checkout : sélecteur d'offre Pro / Business (segmented, sans effet GPU) */
.co-tabs{display:flex;gap:4px;background:var(--surface2);border:1px solid var(--border);border-radius:11px;padding:4px;margin:0 0 16px}
.co-tabs a{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;padding:9px 10px;border-radius:8px;font-weight:600;font-size:14.5px;color:var(--ink-dim)}
.co-tabs a.on{background:var(--surface);color:var(--brand);box-shadow:0 1px 2px rgba(25,30,42,.08)}
.co-save{font-family:var(--font-mono);font-size:10px;font-weight:600;color:var(--ok);position:relative;top:1px}

/* Tableaux comparatifs d'offres (tarifs + checkout), source unique es_plan_features() */
.yes,.no{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;font-size:12px;font-weight:800;line-height:1;vertical-align:middle}
.yes{background:var(--ok);color:#fff}
.no{background:#E7E2D5;color:#A8A192}
.tbl.cmp{table-layout:fixed}
.tbl.cmp th,.tbl.cmp td{text-align:center;width:20%}
.tbl.cmp td:first-child,.tbl.cmp th:first-child{text-align:left;width:40%}
.co-table{width:100%;border-collapse:collapse;margin:6px 0 14px;table-layout:fixed}
.co-table th,.co-table td{padding:10px 12px;text-align:center;border-bottom:1px solid var(--hair);font-size:14px;width:28%}
.co-table th:first-child,.co-table td:first-child{text-align:left;color:var(--ink-dim);width:44%}
.co-table th:nth-child(2),.co-table td:nth-child(2){border-left:1px solid var(--border)}
.co-table thead th{vertical-align:top;font-family:var(--font-disp);font-size:17px}
.co-table .price{font-family:var(--font-disp);font-weight:700;font-size:21px;margin-top:3px;white-space:nowrap}
.co-table .price small{font-size:12px;color:var(--ink-mute);font-weight:400}
.co-table tfoot td{border:0;padding-top:14px}
.co-col-hl{background:color-mix(in srgb,var(--brand) 4%,transparent)}
.co-current{font-size:13px;color:var(--ink-mute)}

/* Dashboard : barre filtre + tri des moniteurs */
.mon-tools{display:flex;gap:10px;align-items:center;margin-bottom:14px;flex-wrap:wrap}
.mon-tools #mon-q{flex:1;min-width:200px;padding:9px 13px;border:1px solid var(--border);border-radius:9px;font:inherit;line-height:1.4;background:var(--surface);color:var(--ink)}
/* champ de filtre avec bouton « X » d'effacement */
.mon-q-wrap{position:relative;flex:1;min-width:200px;display:flex}
.mon-q-wrap #mon-q{flex:1;width:100%;padding-right:34px}
.mon-q-wrap #mon-q::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}
.mon-q-clear{position:absolute;right:5px;top:50%;transform:translateY(-50%);border:0;background:none;cursor:pointer;color:var(--ink-mute);font-size:20px;line-height:1;width:26px;height:26px;border-radius:7px;display:none;align-items:center;justify-content:center;padding:0}
.mon-q-clear:hover{background:var(--bg);color:var(--ink)}
.mon-q-wrap.has-val .mon-q-clear{display:flex}
.mon-tools select{padding:9px 36px 9px 13px;border:1px solid var(--border);border-radius:9px;font:inherit;line-height:1.4;background:var(--surface);color:var(--ink);cursor:pointer;max-width:260px;
  -webkit-appearance:none;appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%23888' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 13px center}
.mon-tools #mon-count{color:var(--ink-mute);font-size:12px;white-space:nowrap;margin-left:auto}
.mon-pager{display:flex;align-items:center;justify-content:center;gap:16px;margin:16px 0}
.mon-pager .mon-pageinfo{font-size:13px;color:var(--ink-mute)}
.mon-pager button[disabled]{opacity:.45;cursor:default}

/* Page Sonde : blocs de code, étapes, onglets clients (sans JS) */
.codeblock{background:#1B2233;color:#E7EBF3;border-radius:10px;padding:14px 16px;overflow-x:auto;font-family:var(--font-mono);font-size:12.5px;line-height:1.7;margin:0 0 12px;white-space:pre}
.codeblock .c{color:#8B95A8}
.codeblock .k{color:#8FD0FF}
.steps{display:grid;gap:16px;max-width:760px;margin:0 auto}
.step{display:flex;gap:16px;align-items:flex-start;background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:20px 22px}
.step .n{flex:0 0 30px;width:30px;height:30px;border-radius:50%;background:var(--brand);color:#fff;display:grid;place-items:center;font-family:var(--font-mono);font-weight:600;font-size:14px}
.step .b{flex:1;min-width:0}
.step .b h4{margin:3px 0 5px;font-size:16px}
.step .b p{margin:0 0 8px;color:var(--ink-dim)}
.tabs{max-width:820px;margin:0 auto}
.tabs>input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.tablabels{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:16px}
.tablabels label{cursor:pointer;padding:8px 18px;border:1px solid var(--border);border-radius:100px;font-family:var(--font-mono);font-size:13px;color:var(--ink-dim);background:var(--surface)}
.tabs .pane{display:none}
#tab-php:checked~.panes .pane.php,#tab-py:checked~.panes .pane.py,#tab-sh:checked~.panes .pane.sh{display:block}
#tab-php:checked~.tablabels label[for=tab-php],#tab-py:checked~.tablabels label[for=tab-py],#tab-sh:checked~.tablabels label[for=tab-sh]{background:var(--brand);color:#fff;border-color:var(--brand)}
.compat-note{display:flex;gap:12px;align-items:flex-start;background:var(--surface2);border:1px solid var(--border);border-radius:12px;padding:16px 18px;max-width:820px;margin:0 auto;color:var(--ink-dim);font-size:14px;line-height:1.6}
.compat-note b{color:var(--ink)}
.distro{display:inline-block;font-family:var(--font-mono);font-size:11.5px;padding:.2em .6em;margin:2px;border:1px solid var(--border);border-radius:7px;color:var(--ink-dim);background:var(--surface)}
/* Onglets de l'editeur de page de statut (CSS pur, radios ; Apparence/Moniteurs/Maintenances/Incidents) */
.etab-in{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.etabs{position:sticky;top:66px;z-index:40;display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;background:var(--bg);margin:0 0 18px;padding:12px 0;border-bottom:1px solid var(--border)}
.etabs::-webkit-scrollbar{display:none}
.etabs label{flex:0 0 auto;cursor:pointer;padding:8px 15px;border:1px solid var(--border);border-radius:100px;font-family:var(--font-mono);font-size:13px;color:var(--ink-dim);background:var(--surface);transition:.13s;white-space:nowrap}
.etabs label:hover{border-color:var(--ink-mute);color:var(--ink)}
.epane{display:none}
.epane>.card{margin-top:0}
#etab-app:checked~.epanes .ep-app,#etab-mon:checked~.epanes .ep-mon,#etab-maint:checked~.epanes .ep-maint,#etab-inc:checked~.epanes .ep-inc{display:block}
#etab-app:checked~.etabs label[for=etab-app],#etab-mon:checked~.etabs label[for=etab-mon],#etab-maint:checked~.etabs label[for=etab-maint],#etab-inc:checked~.etabs label[for=etab-inc]{background:var(--brand);color:var(--on-brand);border-color:var(--brand)}

/* === Corrections mobile (batch 2026-06-05) === */
.cta{display:flex;gap:12px;flex-wrap:wrap}
summary{user-select:none}
.checks-tbl td:first-child{width:36%}
@media(max-width:560px){.stat-strip{display:grid;grid-template-columns:1fr 1fr}.stat-strip>div{min-width:0;padding:12px 10px}}

/* E-mail obfusqué (reconstruit par app.js). Rendu identique à l'ancien lien contact. */
a.eml:not(.btn){color:var(--brand);text-decoration:none}
a.eml:not(.btn):hover{text-decoration:underline}
