/* Control Room — style repris de la maquette (thème sombre, accent vert). */
*,*::before,*::after{box-sizing:border-box}
body{margin:0;background:#060d0b;color:#e6f0ec;font:14px/1.5 'IBM Plex Sans',system-ui,'Segoe UI',sans-serif}
h1,h2,h3{font-family:'Barlow Semi Condensed','IBM Plex Sans',system-ui,sans-serif;margin:0}
a{color:inherit;text-decoration:none}
.muted{color:#9bb8ab}
.ic{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}

/* Mise en page : menu à gauche + contenu */
.app{display:flex;flex-wrap:wrap;min-height:100vh}
.side{flex:1 1 240px;max-width:280px;background:#07110d;border-right:1px solid #12302a;padding:20px 14px;display:flex;flex-direction:column;gap:4px}
.main{flex:999 1 560px;min-width:0;padding:28px 32px;display:flex;flex-direction:column;gap:20px}
.brand{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.brand b{font:700 22px 'Barlow Semi Condensed',sans-serif;letter-spacing:.08em}
.ng{margin:14px 10px 4px;color:#7fa593;font-size:11px;letter-spacing:.12em;text-transform:uppercase}
.ni{display:flex;align-items:center;gap:10px;min-height:44px;padding:0 12px;border-radius:8px;color:#c8dbd2}
a.ni:hover{background:#0d1f19}
.ni.on{background:#137a47;color:#fff;font-weight:600}
.ni.off{color:#5f7d70;cursor:default}
.ni.off small{margin-left:auto;font-size:10px;border:1px solid #1f3d33;border-radius:6px;padding:0 6px}
.me{display:flex;align-items:center;gap:10px;margin-top:auto;padding:10px;border:1px solid #1b4034;border-radius:10px;background:#0a1713}
.me div{flex:1;min-width:0}.me small{display:block;color:#9bb8ab;font-size:11px}
.av{width:36px;height:36px;border-radius:50%;background:#103a29;border:1px solid #25c26e;display:flex;align-items:center;justify-content:center;font-weight:700;flex:none}
.out{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:8px;color:#9bb8ab;background:none;border:0;cursor:pointer}
.out:hover{color:#fff;background:#0d1f19}
.tag{margin:12px 0 0;color:#5f7d70;font-size:10px;letter-spacing:.16em;text-align:center}

/* Cartes, boutons, champs */
.card{background:#0a1713;border:1px solid #14352b;border-radius:14px;padding:20px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:0 18px;border-radius:10px;border:1px solid #1b4034;background:#0d1f19;color:#e6f0ec;font:600 14px 'IBM Plex Sans',system-ui,sans-serif;cursor:pointer}
.btn.p{background:#137a47;border-color:#25c26e;color:#fff;width:100%}
.in{min-height:46px;width:100%;border-radius:10px;border:1px solid #1b4034;background:#0c1c16;color:#e6f0ec;padding:0 14px;font:14px 'IBM Plex Sans',system-ui,sans-serif}
.in:focus,.btn:focus-visible,.out:focus-visible,a:focus-visible{outline:2px solid #25c26e;outline-offset:2px}
.lb{display:block;margin-bottom:6px;color:#9bb8ab;font-size:13px}
.chip{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:6px;font-size:12px;font-weight:600;background:#24372f;color:#d3e3db}
.chip.ok{background:#12452c;color:#9ff0c1}
.err{border:1px solid #7a2d2d;background:#2a1212;color:#ffc9c9;border-radius:10px;padding:10px 14px}

/* Page de connexion */
.login{display:flex;flex-wrap:wrap;min-height:100vh}
.login .left{flex:1 1 560px;background:#07110d;border-right:1px solid #12302a;padding:56px 64px;display:flex;flex-direction:column;gap:26px;justify-content:center}
.login .right{flex:1 1 520px;display:flex;align-items:center;justify-content:center;padding:40px 24px}
.login .box{width:100%;max-width:460px;display:flex;flex-direction:column;gap:16px}
.role{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border:1px solid #14352b;border-radius:10px;background:#0a1713}
.role b{display:block}
.srv{display:flex;flex-wrap:wrap;gap:8px 16px;padding:10px 12px;border:1px dashed #2f5a4a;border-radius:8px;font-size:12px;color:#9bb8ab}
.todo{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.todo li{display:flex;gap:12px;align-items:baseline}

/* Messages, tableaux, formulaires, indicateurs */
.msgs{display:flex;flex-direction:column;gap:8px}
.msg{border-radius:10px;padding:10px 14px;border:1px solid #1b4034;background:#0d1f19}
.msg.success{border-color:#25c26e;background:#0e2a1d}
.msg.error{border-color:#7a2d2d;background:#2a1212;color:#ffc9c9}
.msg.warning{border-color:#8a6a1a;background:#2a210c;color:#ffe3a0}
.chip.warn{background:#4a3a0c;color:#ffe3a0}
.chip.crit{background:#4a1616;color:#ffc9c9}
.chip.mute{background:#1b2a24;color:#9bb8ab}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}
.kpi b{display:block;font:700 34px 'Barlow Semi Condensed',sans-serif}
.filtres{display:flex;flex-wrap:wrap;gap:10px;align-items:end}
.filtres > div{flex:1 1 160px}
.tbl{width:100%;border-collapse:collapse}
.tbl th,.tbl td{text-align:left;padding:10px 12px;border-bottom:1px solid #112a22;vertical-align:middle}
.tbl th{color:#7fa593;font-size:12px;letter-spacing:.06em;text-transform:uppercase;font-weight:600}
.scroll{overflow-x:auto}
.btn.s{min-height:44px;padding:0 12px;font-size:13px}
.btn.danger{border-color:#7a2d2d;color:#ffc9c9}
.actions{display:flex;flex-wrap:wrap;gap:6px}
.actions form{margin:0}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}
.champ .errorlist{margin:4px 0 0;padding:0;list-style:none;color:#ffc9c9;font-size:13px}
.champ .aide{margin:4px 0 0;color:#7fa593;font-size:12px}
.mdp{font:600 28px 'IBM Plex Mono',ui-monospace,Consolas,monospace;letter-spacing:.08em;padding:14px 18px;border:2px dashed #25c26e;border-radius:10px;background:#0c1c16;user-select:all}

/* Compte rendu */
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.infos{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px 24px;margin:0}
.infos dt{color:#7fa593;font-size:12px;letter-spacing:.06em;text-transform:uppercase}
.infos dd{margin:2px 0 0;font-weight:500}
.exc{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 0}
.chip.info{background:#10324a;color:#b8defa}
textarea.in{min-height:90px;padding:10px 12px;resize:vertical;font:inherit}
.vignettes{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.vignette{margin:0;border:1px solid #14352b;border-radius:10px;padding:8px;background:#07110d}
.vignette img{width:100%;height:150px;object-fit:cover;border-radius:6px;display:block;margin-bottom:6px}
.tampon{border-color:#25c26e}
.onglets{display:flex;flex-wrap:wrap;gap:6px}

/* Tableau de bord des anomalies */
.tuiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0;border-radius:10px;overflow:hidden;margin-top:6px}
.tuile{display:flex;flex-direction:column;align-items:center;justify-content:space-between;gap:6px;padding:14px 8px;text-align:center;color:#fff;min-height:130px}
.tuile span{font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase}
.tuile b{font:700 40px 'Barlow Semi Condensed',sans-serif}
.tuile small{opacity:.85}
.tuile.bleu{background:#2a5db0}.tuile.rouge{background:#a52035}.tuile.orange{background:#b36a12}.tuile.jaune{background:#9a8512}.tuile.cyan{background:#1c6e92}.tuile.vert{background:#1f8a4c}.tuile.violet{background:#5a35a8}
.grille-graph{display:grid;grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:16px}
.graph{width:100%;height:auto}.graph .grille{stroke:#1d3a2f;stroke-width:1}.graph .axe{fill:#b9d0c5;font-size:11px}
@media print{.actions,.filtres,nav.side{display:none!important}}
