/* GMAO — styles de base, sans dépendance. Mobile d'abord. */
:root{--bg:#f4f6f8;--card:#fff;--text:#1d2733;--muted:#6b7785;--line:#dde3e9;--primary:#0b5cad;--primary-d:#084a8c;--danger:#b42318;--ok:#067647;--warn:#b54708;--radius:8px}
*{box-sizing:border-box}
html{font-size:16px}
body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.45}
a{color:var(--primary)}
code{background:#eef2f6;padding:.05em .35em;border-radius:4px;font-size:.9em}
h1{font-size:1.5rem;margin:.2rem 0 1rem}
h2{font-size:1.15rem;margin:0 0 .75rem}
.muted,small.muted{color:var(--muted)}
.topbar{background:#12263f;color:#fff;display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.6rem 1rem}
.brand{color:#fff;text-decoration:none;font-weight:700;font-size:1.1rem;margin-right:auto}
.nav-toggle{background:transparent;color:#fff;border:1px solid #ffffff55;border-radius:6px;padding:.35rem .7rem}
.mainnav{display:none;width:100%;flex-direction:column;gap:.25rem}
.mainnav.open{display:flex}
.mainnav a{color:#dbe6f3;text-decoration:none;padding:.45rem .5rem;border-radius:6px}
.mainnav a.active,.mainnav a:hover{background:#ffffff1a;color:#fff}
.nav-user{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;border-top:1px solid #ffffff22;padding-top:.5rem;margin-top:.25rem}
.nav-user small{color:#a9b8c9}
.link{background:none;border:0;color:#dbe6f3;text-decoration:underline;cursor:pointer;font:inherit;padding:0}
.container{max-width:1200px;margin:0 auto;padding:1rem}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1rem;margin-bottom:1rem}
.narrow{max-width:440px;margin:2rem auto}
.center{text-align:center}
.page-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem}
.actions{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
form.inline{display:inline}
.btn{display:inline-block;padding:.5rem .9rem;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--text);text-decoration:none;cursor:pointer;font:inherit;line-height:1.2}
.btn:hover{background:#f0f3f6}
.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-d)}
.btn-danger{color:var(--danger);border-color:#f3c3be}
.form label{display:flex;flex-direction:column;gap:.25rem;margin-bottom:.75rem;font-weight:500}
.form label.check,.filters .check{flex-direction:row;align-items:center;gap:.4rem;font-weight:400}
input,select,textarea{font:inherit;padding:.5rem .6rem;border:1px solid #c5ced8;border-radius:6px;background:#fff;width:100%;max-width:100%}
input[type=checkbox]{width:auto}
input:focus,select:focus,textarea:focus{outline:2px solid #0b5cad55;border-color:var(--primary)}
.grid{display:grid;grid-template-columns:1fr;gap:0 1rem}
.field-error{color:var(--danger);font-size:.9rem;margin:-.5rem 0 .75rem}
.flash{padding:.7rem 1rem;border-radius:6px;margin-bottom:1rem;border:1px solid}
.flash-success{background:#ecfdf3;border-color:#abefc6;color:var(--ok)}
.flash-error{background:#fef3f2;border-color:#fecdca;color:var(--danger)}
.flash-info{background:#eff8ff;border-color:#b2ddff;color:#175cd3}
.filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem}
.filters input[type=search]{flex:1 1 220px;width:auto}
.filters select{width:auto;flex:1 1 160px}
.table-wrap{overflow-x:auto}
.table{width:100%;border-collapse:collapse;background:#fff}
.table th,.table td{padding:.55rem .6rem;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.table th{font-size:.85rem;color:var(--muted);font-weight:600;background:#f8fafc}
.table .num{text-align:right}
.table tr.inactive td{color:var(--muted)}
.table tr.alert-row td{background:#fffaeb}
.empty{color:var(--muted);padding:1rem;background:#fff;border:1px dashed var(--line);border-radius:var(--radius)}
.stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.75rem;margin-bottom:1rem}
.stat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:.9rem;text-decoration:none;color:var(--text);display:flex;flex-direction:column}
.stat strong{font-size:1.7rem}
.stat span{color:var(--muted);font-size:.9rem}
.stat-warn strong{color:var(--warn)}
.details{display:grid;grid-template-columns:1fr;gap:.2rem .75rem;margin:0}
.details dt{font-weight:600;color:var(--muted);font-size:.9rem}
.details dd{margin:0 0 .5rem}
.pre{white-space:pre-wrap}
.list{list-style:none;padding:0;margin:0}
.list li{padding:.4rem 0;border-bottom:1px solid var(--line)}
.activity{padding-left:1rem}
.badge{display:inline-block;font-size:.8rem;padding:.05rem .5rem;border-radius:999px;margin-left:.4rem}
.badge-ok{background:#ecfdf3;color:var(--ok)}
.badge-muted{background:#f2f4f7;color:var(--muted)}
.pager{display:flex;gap:1rem;align-items:center;justify-content:center;margin:1rem 0}
/* Tableaux en cartes sur mobile */
@media (max-width:700px){
  .table thead{display:none}
  .table tr{display:block;border-bottom:2px solid var(--line);padding:.4rem 0}
  .table td{display:flex;justify-content:space-between;gap:1rem;border:0;padding:.25rem .6rem}
  .table td::before{content:attr(data-label);color:var(--muted);font-size:.85rem}
  .table .num{text-align:left}
}
@media (min-width:701px){
  .grid{grid-template-columns:1fr 1fr}
  .grid .span2{grid-column:span 2}
  .details{grid-template-columns:200px 1fr}
}
@media (min-width:1000px){
  .nav-toggle{display:none}
  .mainnav{display:flex;flex-direction:row;width:auto;align-items:center}
  .nav-user{border:0;padding:0;margin:0 0 0 1rem}
}

/* ---------- Sprint 2 : tickets, SLA, dispatch ---------- */
.badges{display:flex;flex-wrap:wrap;gap:.3rem;align-items:center}
.badge{margin-left:0;font-weight:600;white-space:nowrap}
.st-nouveau{background:#eff8ff;color:#175cd3}
.st-assigne{background:#f4f3ff;color:#5925dc}
.st-en_cours{background:#fff6ed;color:#c4320a}
.st-en_attente{background:#f2f4f7;color:#475467}
.st-resolu{background:#ecfdf3;color:#067647}
.st-planifie{background:#eef4ff;color:#3538cd}
.st-cloture{background:#f2f4f7;color:#667085}
.st-annule{background:#f2f4f7;color:#98a2b3;text-decoration:line-through}
.pr-P1{background:#b42318;color:#fff;border-color:#b42318}
.pr-P2{background:#fef3f2;color:#b42318}
.pr-P3{background:#f2f4f7;color:#344054}
.pr-P4{background:#f8f9fc;color:#667085}
.sla{border:1px solid currentColor}
.sla-a_l_heure{color:#067647;background:#ecfdf3}
.sla-a_risque{color:#b54708;background:#fffaeb}
.sla-depasse{color:#fff;background:#d92d20;border-color:#d92d20}
.sla-respecte{color:#475467;background:#f2f4f7}
.sla-na{color:#98a2b3;background:#fff}
small.sla-delta{background:none;border:0;font-weight:600}
small.sla-delta.sla-depasse{color:#d92d20}
small.sla-delta.sla-a_risque{color:#b54708}
small.sla-delta.sla-a_l_heure{color:#067647}
.table tr.row-sla-depasse td:first-child{box-shadow:inset 4px 0 0 #d92d20}
.table tr.row-sla-a_risque td:first-child{box-shadow:inset 4px 0 0 #f79009}
.table tr.row-sla-a_l_heure td:first-child{box-shadow:inset 4px 0 0 #12b76a}
.stat-risk strong{color:#b54708}
.stat-late strong{color:#d92d20}
.txt-risk{color:#b54708;font-weight:700}
.txt-late{color:#d92d20;font-weight:700}
.ticket-layout{display:grid;grid-template-columns:1fr;gap:0 1rem}
.details.compact{grid-template-columns:1fr}
.details.compact dd{margin-bottom:.6rem}
.timeline{list-style:none;margin:0 0 1rem;padding:0 0 0 1.1rem;border-left:2px solid var(--line)}
.timeline li{position:relative;padding:0 0 1rem .6rem}
.timeline li::before{content:"";position:absolute;left:-1.55rem;top:.3rem;width:.8rem;height:.8rem;border-radius:50%;background:#98a2b3;border:2px solid #fff}
.timeline li.tl-creation::before{background:#175cd3}
.timeline li.tl-commentaire::before{background:#12b76a}
.timeline li.tl-statut::before{background:#f79009}
.timeline li.tl-assignation::before{background:#7a5af8}
.timeline li.tl-priorite::before{background:#d92d20}
.tl-head time{display:block;font-size:.85rem}
.tl-body{margin-top:.35rem;background:#f8fafc;border:1px solid var(--line);border-radius:6px;padding:.55rem .7rem}
.tl-internal .tl-body{background:#fffaeb;border-color:#fedf89}
.comment-form{border-top:1px solid var(--line);padding-top:1rem}
.dispatch{display:grid;grid-template-columns:1fr;gap:0 1rem}
.queue{list-style:none;margin:0;padding:0}
.queue-item{display:grid;grid-template-columns:1fr;gap:.4rem;padding:.7rem .6rem;border-bottom:1px solid var(--line);border-left:4px solid #d0d5dd}
.queue-item.row-sla-depasse{border-left-color:#d92d20}
.queue-item.row-sla-a_risque{border-left-color:#f79009}
.queue-item.row-sla-a_l_heure{border-left-color:#12b76a}
.assign-inline{display:flex;gap:.4rem}
.ticket-side .form + .form{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--line)}
.ticket-side .form .btn{margin-top:.1rem}
.assign-inline select{flex:1}
.bar{background:#eef2f6;border-radius:999px;height:.6rem;min-width:80px;overflow:hidden}
.bar span{display:block;height:100%;background:#0b5cad;border-radius:999px}
.mini{list-style:none;margin:.3rem 0 0;padding:0;font-size:.85rem}
.dot{display:inline-block;width:.6rem;height:.6rem;border-radius:50%;border:0;vertical-align:middle}
.dot.sla-a_l_heure{background:#12b76a}.dot.sla-a_risque{background:#f79009}.dot.sla-depasse{background:#d92d20}
@media (min-width:900px){
  .ticket-layout{grid-template-columns:minmax(0,1fr) 340px}
  .queue-item{grid-template-columns:minmax(0,1fr) 380px;align-items:center}
}
.bar-0{width:0%}.bar-5{width:5%}.bar-10{width:10%}.bar-15{width:15%}.bar-20{width:20%}.bar-25{width:25%}.bar-30{width:30%}.bar-35{width:35%}.bar-40{width:40%}.bar-45{width:45%}.bar-50{width:50%}.bar-55{width:55%}.bar-60{width:60%}.bar-65{width:65%}.bar-70{width:70%}.bar-75{width:75%}.bar-80{width:80%}.bar-85{width:85%}.bar-90{width:90%}.bar-95{width:95%}.bar-100{width:100%}
.queue-item .badges{margin-top:.35rem}

/* --- Sprint 2 (conformité) : dispatch par jour, assignation 2 clics, pièces jointes, SLA --- */
.tnum{font-variant-numeric:tabular-nums;white-space:nowrap}
.table.load th.day,.table.load td.day{min-width:64px;text-align:center;vertical-align:top}
.table.load th.today,.table.load td.today{background:#f5f8ff}
.table.load td.day-busy{background:#eef4ff}
.table.load td.day-full{background:#fff4e5}
.day-count{display:block;font-size:1.05rem}
.table.load .mini li{white-space:nowrap}
.load-open{font-size:1.15rem}
.assign-pop{position:relative}
.assign-pop>summary{list-style:none;cursor:pointer;display:inline-block}
.assign-pop>summary::-webkit-details-marker{display:none}
.assign-choices{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.45rem}
.assign-btn small{color:var(--muted);font-weight:400;margin-left:.25rem}
@media (min-width:900px){.queue-item{grid-template-columns:minmax(0,1fr) 420px}}
.attachments{list-style:none;margin:0 0 1rem;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.75rem}
.att{border:1px solid var(--line);border-radius:8px;padding:.5rem;display:flex;flex-direction:column;gap:.25rem}
.att-link{display:flex;flex-direction:column;gap:.3rem;text-decoration:none}
.att-thumb{width:100%;height:120px;object-fit:cover;border-radius:6px;background:#f2f4f7}
.att-icon{display:flex;align-items:center;justify-content:center;height:120px;border-radius:6px;background:#fef3f2;color:#b42318;font-weight:700;font-size:1.4rem}
.att-name{font-weight:600;word-break:break-all}
.upload-form{display:flex;flex-wrap:wrap;gap:.6rem;align-items:flex-end}
.sla-table input[type=number]{width:7rem}
.row-error td{background:#fef3f2}
.btn-link{background:none;border-color:transparent}
[hidden]{display:none!important}
@media (min-width:900px){.mainnav a{white-space:nowrap;padding:.4rem .45rem}.mainnav{flex-wrap:wrap;row-gap:.2rem}.nav-user small{display:none}}
@media (min-width:1400px){.nav-user small{display:inline}}
/* ---------- Correctifs sprint 2 : équipement à l'arrêt, stockage ---------- */
.badge-down{background:#7a271a;color:#fff;font-weight:700}
.form label.check-down,.check-down{display:flex;gap:.6rem;align-items:flex-start;font-weight:400;border:1px solid #fda29b;background:#fef3f2;border-radius:8px;padding:.6rem .75rem}
.form label.check-down input,.check-down input{width:1.2rem;height:1.2rem;margin-top:.15rem;flex:none}
.queue-item.queue-down{background:#fef3f2;border-left-color:#7a271a;border-left-width:6px}
.btn-down{background:#7a271a;color:#fff;border-color:#7a271a}
.form-down{display:flex;flex-direction:column;gap:.3rem}
.att-del{margin:0}
.btn-small{font-size:.8rem;padding:.1rem .3rem}
.storage-usage{margin-top:.4rem}
@media (max-width:700px){
  .table.tickets td{display:block;overflow-wrap:anywhere}
  .table.tickets td::before{display:block;margin-bottom:.1rem}
  .table.tickets .badge{margin:0 .2rem .2rem 0}
}
/* --- Sprint 3 : stock, QR, sous-traitance --- */
.tabs{display:flex;flex-wrap:wrap;gap:.25rem;border-bottom:1px solid var(--line);margin:0 0 1rem}
.tabs a{padding:.45rem .8rem;text-decoration:none;color:var(--muted);border-bottom:3px solid transparent}
.tabs a.active{color:var(--text);border-bottom-color:var(--primary);font-weight:600}
.row-low td{background:#fff6ed}
.badge-low{background:#fef0c7;color:#93370d}
.badge-st{background:#eef4ff;color:#3538cd}
.badge-return{background:#fde8e7;color:#b42318;font-weight:700}
.st-a_valider{background:#fef0c7;color:#93370d}
.res-resolu{background:#ecfdf3;color:var(--ok)}
.res-pieces_a_commander{background:#fef0c7;color:#93370d}
.res-nouvelle_intervention{background:#eef4ff;color:#3538cd}
.res-non_resolu{background:#fde8e7;color:#b42318}
.mv-entree{background:#ecfdf3;color:var(--ok)}.mv-sortie{background:#fde8e7;color:#b42318}.mv-transfert{background:#eef4ff;color:#3538cd}.mv-ajustement{background:#f2f4f7;color:var(--muted)}
.table.matrix th,.table.matrix td{white-space:nowrap}
.table.compact td,.table.compact th{padding:.3rem .5rem}
.part-layout{display:grid;gap:1rem}
@media(min-width:900px){.part-layout{grid-template-columns:1fr 1fr}}
.card-exit{border:2px solid var(--primary)}
.scan-focus{box-shadow:0 0 0 4px #0b5cad22}
.row2{display:grid;gap:.75rem;grid-template-columns:1fr 1fr}
.btn-block{display:block;width:100%;text-align:center;padding:.75rem 1rem;font-size:1.05rem}
.mv-forms{display:grid;gap:1rem}
@media(min-width:900px){.mv-forms{grid-template-columns:repeat(3,1fr)}}
.mv-forms h3{margin:.2rem 0 .4rem;font-size:1rem}
.plain{list-style:none;padding:0;margin:0 0 .75rem}.plain li{padding:.25rem 0;border-bottom:1px solid var(--line)}
.reports{list-style:none;padding:0;margin:0}.reports li{padding:.5rem 0;border-bottom:1px solid var(--line)}
.card-validate{border:2px solid #f79009;background:#fffcf5}
.assign-st{border-top:1px solid var(--line);margin-top:.4rem;padding-top:.4rem}
.btn-st{background:#eef4ff}
.check-inline{display:inline-flex;align-items:center;gap:.3rem}
.result-choice{border:0;padding:0;margin:0 0 .75rem;display:grid;gap:.5rem}
@media(min-width:700px){.result-choice{grid-template-columns:1fr 1fr}}
.result-choice legend{font-weight:600;margin-bottom:.4rem}
.result-opt{display:flex;align-items:center;gap:.6rem;padding:.75rem;border:2px solid var(--line);border-radius:var(--radius);background:#fff;font-weight:600;cursor:pointer;min-height:48px}
.result-opt:has(input:checked){border-color:var(--primary);box-shadow:0 0 0 3px #0b5cad22}
.result-opt input{width:1.2rem;height:1.2rem}
.part-lines{border:1px solid var(--line);border-radius:var(--radius);padding:.6rem;margin:0 0 .75rem}
.part-line{display:grid;gap:.4rem;grid-template-columns:1fr;margin-bottom:.6rem;padding-bottom:.6rem;border-bottom:1px dashed var(--line)}
@media(min-width:700px){.part-line{grid-template-columns:2fr 2fr 5rem}}
.time-pair{display:flex;align-items:center;gap:.3rem}.time-pair input{width:4rem}
.report-form input,.report-form select,.report-form textarea{font-size:16px}
.container-narrow{max-width:760px}
.topbar-public{justify-content:space-between}
.topbar-public .muted{color:#c9d3df}
.public-foot{text-align:center;padding:1rem}
.scan-view{position:relative;max-width:480px;margin:0 auto .75rem}
.scan-view video{width:100%;border-radius:var(--radius);background:#000}
.scan-frame{position:absolute;inset:15%;border:3px solid #fff;border-radius:12px;box-shadow:0 0 0 999px #0005}
.table.matrix th{white-space:normal;min-width:6.5rem;vertical-align:bottom}
.row2-qty{grid-template-columns:7.5rem 1fr}
@media (max-width:700px){
  .table.keep thead{display:table-header-group}
  .table.keep tr{display:table-row;border:0;padding:0}
  .table.keep td{display:table-cell;padding:.35rem .4rem;border-bottom:1px solid var(--line)}
  .table.keep td::before{content:none}
  .table.keep .num{text-align:right}
}
.form label.result-opt{flex-direction:row;align-items:center;justify-content:flex-start;text-align:left;margin:0}
.form label.result-opt input{flex:none}
@media (max-width:520px){.report-form .row2{grid-template-columns:1fr}}
