/* ============ Accidoc — Design system ============ */
:root{
  --bg:#F4F6F9; --surface:#FFFFFF; --ink:#0E1B2C; --muted:#5B6B7F; --line:#E3E9F0;
  --primary:#1E56C8; --primary-ink:#FFFFFF; --primary-soft:#E8EFFC; --primary-deep:#123B8F;
  --ok:#0E9F6E; --ok-soft:#E3F5EE; --warn:#B96A0B; --warn-soft:#FBF0DE;
  --err:#D64545; --err-soft:#FBE9E9; --violet:#6D5AE0; --violet-soft:#EEEBFC;
  --shadow:0 1px 2px rgba(14,27,44,.06),0 8px 24px rgba(14,27,44,.07);
  --shadow-lg:0 24px 60px rgba(14,27,44,.18);
  --r:16px; --r-lg:22px;
  --schema-grass:#E9EFE9; --schema-road:#B7C1CC;
  font-size:16px;
}
[data-theme="dark"]{
  --bg:#0B1424; --surface:#131F33; --ink:#F2F6FC; --muted:#94A5BB; --line:#24344D;
  --primary:#5B8DEF; --primary-ink:#0B1424; --primary-soft:#1B2C4A; --primary-deep:#8FB3F5;
  --ok:#34C08B; --ok-soft:#123528; --warn:#F2A23C; --warn-soft:#3A2B14;
  --err:#F07A7A; --err-soft:#3D1D1D; --violet:#9D8DF2; --violet-soft:#272146;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.35);
  --schema-grass:#16222F; --schema-road:#33445A;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:'Manrope',system-ui,-apple-system,'Segoe UI',sans-serif;
  background:var(--bg); color:var(--ink); -webkit-font-smoothing:antialiased;
  line-height:1.5;
}
button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}
input,textarea,select{font:inherit;color:var(--ink)}
a{color:var(--primary);text-decoration:none}
.hidden{display:none!important}

/* ---------- Generic components ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;border-radius:14px;
  font-weight:700;padding:0 22px;height:52px;transition:transform .12s,box-shadow .12s,background .12s;user-select:none}
.btn:active{transform:scale(.97)}
.btn-primary{background:var(--primary);color:var(--primary-ink);box-shadow:0 6px 18px rgba(30,86,200,.28)}
.btn-primary:hover{filter:brightness(1.06)}
.btn-ghost{background:var(--surface);border:1.5px solid var(--line);color:var(--ink)}
.btn-ghost:hover{border-color:var(--primary);color:var(--primary)}
.btn-soft{background:var(--primary-soft);color:var(--primary)}
.btn-danger{background:var(--err);color:#fff}
.btn-big{height:64px;font-size:17px;border-radius:18px;width:100%}
.btn[disabled]{opacity:.45;pointer-events:none}
.btn-link{color:var(--muted);font-weight:600;height:auto;padding:8px}
.btn-link:hover{color:var(--primary)}

.chip{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;
  padding:3px 10px;border-radius:999px;white-space:nowrap}
.chip-ok{background:var(--ok-soft);color:var(--ok)}
.chip-warn{background:var(--warn-soft);color:var(--warn)}
.chip-err{background:var(--err-soft);color:var(--err)}
.chip-info{background:var(--primary-soft);color:var(--primary)}
.chip-muted{background:var(--line);color:var(--muted)}
.chip-violet{background:var(--violet-soft);color:var(--violet)}

/* provenance badges */
.prov{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:800;
  padding:2px 9px;border-radius:999px;letter-spacing:.2px;flex:none}
.prov-photo{background:var(--primary-soft);color:var(--primary)}
.prov-decl{background:var(--violet-soft);color:var(--violet)}
.prov-ai{background:var(--warn-soft);color:var(--warn)}
.prov-conf{background:var(--ok-soft);color:var(--ok)}

.banner{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:14px;font-size:14px;line-height:1.45}
.banner-info{background:var(--primary-soft);color:var(--primary-deep)}
.banner-warn{background:var(--warn-soft);color:var(--warn)}
.banner-ok{background:var(--ok-soft);color:var(--ok)}
.banner .ic{flex:none;font-size:18px;line-height:1.3}

.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.field label{font-size:13px;font-weight:700;color:var(--muted)}
.field input,.field textarea,.field select{
  background:var(--surface);border:1.5px solid var(--line);border-radius:12px;
  padding:13px 14px;font-size:16px;width:100%;outline:none;transition:border .15s}
.field input:focus,.field textarea:focus{border-color:var(--primary)}
textarea{resize:vertical;min-height:110px}

@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes pop{0%{transform:scale(.4);opacity:0}70%{transform:scale(1.08)}100%{transform:scale(1);opacity:1}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}
@keyframes spin{to{transform:rotate(360deg)}}
.spinner{width:16px;height:16px;border:2.5px solid var(--line);border-top-color:var(--primary);
  border-radius:50%;animation:spin .7s linear infinite;flex:none}

.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:99;
  background:var(--ink);color:var(--bg);padding:12px 20px;border-radius:12px;font-weight:700;font-size:14px;
  box-shadow:var(--shadow-lg);animation:fadeUp .25s;max-width:90vw;text-align:center}

/* ============ Landing hub ============ */
.hub{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;gap:8px}
.hub .logo{font-size:34px;font-weight:800;letter-spacing:-.5px;display:flex;align-items:center;gap:12px}
.logo-mark{width:44px;height:44px;border-radius:13px;background:var(--primary);color:#fff;
  display:inline-flex;align-items:center;justify-content:center;font-size:22px;box-shadow:0 8px 20px rgba(30,86,200,.35)}
.hub .tagline{color:var(--muted);font-size:16px;margin:6px 0 34px;text-align:center;max-width:460px}
.hub-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,340px));gap:20px;justify-content:center;width:100%;max-width:760px}
.hub-card{padding:28px;display:flex;flex-direction:column;gap:10px;transition:transform .15s,box-shadow .15s;color:var(--ink)}
.hub-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg)}
.hub-card .hc-ic{font-size:30px}
.hub-card h2{font-size:19px;letter-spacing:-.2px}
.hub-card p{color:var(--muted);font-size:14px;flex:1}
.hub-card .hc-go{color:var(--primary);font-weight:800;font-size:14px}
.hub-qr{margin-top:38px;display:flex;align-items:center;gap:18px;padding:18px 22px}
.hub-qr p{font-size:13.5px;color:var(--muted);max-width:300px}
.hub-note{margin-top:26px;font-size:12.5px;color:var(--muted)}

/* ============ Driver app (phone shell) ============ */
.stage{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:28px 12px;
  background:radial-gradient(1200px 800px at 70% -10%,rgba(30,86,200,.10),transparent 60%),var(--bg)}
.phone{width:402px;max-width:100%;height:min(840px,calc(100vh - 40px));background:var(--surface);
  border-radius:36px;box-shadow:var(--shadow-lg);border:1px solid var(--line);
  display:flex;flex-direction:column;overflow:hidden;position:relative}
@media(max-width:520px){
  .stage{padding:0}
  .phone{width:100%;height:100vh;height:100dvh;border-radius:0;border:none}
}
.app-top{display:flex;align-items:center;gap:10px;padding:14px 16px 10px;flex:none}
.app-top .back{width:40px;height:40px;border-radius:12px;background:var(--bg);font-size:18px;
  display:flex;align-items:center;justify-content:center;flex:none}
.app-top .back:hover{background:var(--primary-soft);color:var(--primary)}
.app-top .step-label{font-size:12.5px;font-weight:800;color:var(--muted);letter-spacing:.4px;text-transform:uppercase;flex:1}
.app-top .theme-btn{width:40px;height:40px;border-radius:12px;background:var(--bg);font-size:17px;flex:none}
.progress{height:5px;background:var(--line);border-radius:99px;margin:0 16px 4px;overflow:hidden;flex:none}
.progress i{display:block;height:100%;background:var(--primary);border-radius:99px;transition:width .4s cubic-bezier(.2,.8,.2,1)}

.screens{flex:1;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-overflow-scrolling:touch}
.screen{display:none;flex-direction:column;gap:14px;padding:14px 20px 30px;min-height:100%}
.screen.active{display:flex;animation:fadeUp .3s cubic-bezier(.2,.8,.2,1)}
.screen h1{font-size:24px;line-height:1.22;letter-spacing:-.4px}
.screen .sub{color:var(--muted);font-size:15px;margin-top:-6px}
.screen .grow{flex:1}
.screen .foot{display:flex;flex-direction:column;gap:10px;margin-top:auto;padding-top:10px}

/* home */
.home-hero{flex:1;display:flex;flex-direction:column;justify-content:center;gap:18px;text-align:center;padding:10px 0}
.home-vehicle{display:flex;align-items:center;gap:12px;padding:14px;text-align:left}
.home-vehicle .hv-ic{width:44px;height:44px;border-radius:12px;background:var(--primary-soft);
  display:flex;align-items:center;justify-content:center;font-size:20px;flex:none}
.home-vehicle b{font-size:15px;display:block}
.home-vehicle span{font-size:12.5px;color:var(--muted)}
.sos-btn{height:110px;border-radius:26px;background:var(--err);color:#fff;font-size:22px;font-weight:800;
  width:100%;box-shadow:0 14px 34px rgba(214,69,69,.38);display:flex;flex-direction:column;gap:4px;
  align-items:center;justify-content:center;transition:transform .12s}
.sos-btn:active{transform:scale(.97)}
.sos-btn small{font-size:13px;font-weight:600;opacity:.85}
.home-links{display:flex;flex-direction:column;gap:8px}

/* choice cards */
.choices{display:flex;flex-direction:column;gap:10px}
.choice{display:flex;align-items:center;gap:14px;text-align:left;padding:16px;border-radius:16px;
  background:var(--surface);border:1.5px solid var(--line);transition:border .12s,background .12s,transform .1s;width:100%}
.choice:hover{border-color:var(--primary)}
.choice:active{transform:scale(.98)}
.choice.selected{border-color:var(--primary);background:var(--primary-soft)}
.choice .c-ic{width:46px;height:46px;border-radius:13px;background:var(--bg);font-size:21px;
  display:flex;align-items:center;justify-content:center;flex:none}
.choice.selected .c-ic{background:var(--surface)}
.choice b{display:block;font-size:15.5px}
.choice span{display:block;font-size:13px;color:var(--muted);margin-top:1px}
.choice .c-badge{margin-left:auto;flex:none}
.choice-express{border-color:var(--warn);background:var(--warn-soft)}
.choice-express .c-ic{background:var(--surface)}

/* safety checklist */
.check-list{display:flex;flex-direction:column;gap:10px}
.check-item{display:flex;align-items:center;gap:13px;padding:14px 15px;border-radius:15px;
  background:var(--surface);border:1.5px solid var(--line);text-align:left;width:100%;transition:all .15s}
.check-item .ck{width:26px;height:26px;border-radius:9px;border:2px solid var(--line);flex:none;
  display:flex;align-items:center;justify-content:center;font-size:14px;color:transparent;transition:all .15s}
.check-item.done{border-color:var(--ok);background:var(--ok-soft)}
.check-item.done .ck{background:var(--ok);border-color:var(--ok);color:#fff}
.check-item b{font-size:14.5px;display:block}
.check-item span{font-size:12.5px;color:var(--muted)}
.check-item .ck-ic{font-size:20px;flex:none}

/* camera */
.cam-wrap{display:flex;flex-direction:column;gap:12px}
.cam-counter{display:flex;justify-content:space-between;align-items:center;font-size:13px;font-weight:800;color:var(--muted)}
.cam-dots{display:flex;gap:5px}
.cam-dots i{width:7px;height:7px;border-radius:50%;background:var(--line)}
.cam-dots i.done{background:var(--ok)}
.cam-dots i.cur{background:var(--primary);transform:scale(1.3)}
.viewfinder{position:relative;aspect-ratio:3/3.4;border-radius:20px;overflow:hidden;background:#1a2433}
.viewfinder svg.scene{position:absolute;inset:0;width:100%;height:100%;transition:filter .3s}
.viewfinder.too-dark svg.scene{filter:brightness(.32) saturate(.6)}
.vf-overlay{position:absolute;inset:0;pointer-events:none}
.vf-corner{position:absolute;width:26px;height:26px;border:3px solid rgba(255,255,255,.9);border-radius:4px}
.vf-corner.tl{top:12px;left:12px;border-right:none;border-bottom:none}
.vf-corner.tr{top:12px;right:12px;border-left:none;border-bottom:none}
.vf-corner.bl{bottom:12px;left:12px;border-right:none;border-top:none}
.vf-corner.br{bottom:12px;right:12px;border-left:none;border-top:none}
.vf-hint{position:absolute;left:50%;top:14px;transform:translateX(-50%);background:rgba(10,16,26,.72);
  color:#fff;font-size:12.5px;font-weight:700;padding:6px 14px;border-radius:99px;white-space:nowrap;backdrop-filter:blur(4px)}
.vf-flash{position:absolute;inset:0;background:#fff;opacity:0;pointer-events:none}
.vf-flash.go{animation:flash .35s}
@keyframes flash{0%{opacity:0}30%{opacity:.95}100%{opacity:0}}
.vf-silhouette{position:absolute;inset:0;width:100%;height:100%}
.cam-actions{display:flex;align-items:center;justify-content:center;gap:26px;padding:2px 0}
.shutter{width:72px;height:72px;border-radius:50%;background:#fff;border:5px solid rgba(255,255,255,.45);
  outline:3px solid var(--line);box-shadow:var(--shadow);transition:transform .1s;flex:none}
[data-theme="dark"] .shutter{outline-color:#2c3d57}
.shutter:active{transform:scale(.9)}
.cam-skip{color:var(--muted);font-weight:700;font-size:14px;width:72px}
.cam-flashtoggle{width:72px;font-size:20px;text-align:center;color:var(--muted)}
.qc-panel{display:flex;flex-direction:column;gap:8px;min-height:44px}
.qc-chip{display:flex;align-items:center;gap:9px;padding:10px 14px;border-radius:12px;font-size:14px;font-weight:700;animation:fadeUp .25s}
.qc-chip.ok{background:var(--ok-soft);color:var(--ok)}
.qc-chip.err{background:var(--err-soft);color:var(--err)}
.qc-chip.info{background:var(--primary-soft);color:var(--primary)}
.qc-chip.warn{background:var(--warn-soft);color:var(--warn)}

/* plate */
.plate-card{display:flex;flex-direction:column;align-items:center;gap:14px;padding:26px 18px}
.plate{display:flex;align-items:stretch;border:2.5px solid #0E1B2C;border-radius:8px;overflow:hidden;
  font-size:30px;font-weight:800;letter-spacing:2px;background:#fff;color:#111;font-family:ui-monospace,monospace}
.plate .eu{background:#003399;color:#FFCC00;font-size:10px;display:flex;flex-direction:column;
  align-items:center;justify-content:center;padding:4px 7px;gap:3px;font-weight:700}
.plate .num{padding:8px 16px;display:flex;align-items:center}
.conf-meter{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted);font-weight:700}
.conf-meter .bar{width:120px;height:6px;background:var(--line);border-radius:99px;overflow:hidden}
.conf-meter .bar i{display:block;height:100%;width:98%;background:var(--ok);border-radius:99px}

/* scan document */
.scan-doc{position:relative;border-radius:18px;overflow:hidden;background:linear-gradient(135deg,#21344F,#0E1B2C);
  aspect-ratio:16/10;display:flex;align-items:center;justify-content:center}
.scan-doc .doc{width:72%;background:#fff;border-radius:10px;padding:14px 16px;color:#233;font-size:10px;line-height:1.7;
  box-shadow:0 18px 40px rgba(0,0,0,.4);position:relative}
.scan-doc .doc b{font-size:12px;color:#123B8F;display:block;letter-spacing:.5px}
.scan-line{position:absolute;left:6%;right:6%;height:3px;border-radius:99px;background:var(--ok);
  box-shadow:0 0 18px var(--ok);animation:scanmove 1.6s ease-in-out infinite}
@keyframes scanmove{0%,100%{top:14%}50%{top:82%}}
.ocr-fields{display:flex;flex-direction:column;gap:9px}
.ocr-field{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:13px;
  background:var(--surface);border:1.5px solid var(--line);animation:fadeUp .3s}
.ocr-field .of-lab{font-size:12px;color:var(--muted);font-weight:700;width:86px;flex:none}
.ocr-field .of-val{font-weight:800;font-size:14.5px;flex:1}
.ocr-field .prov{margin-left:auto}

/* chat questionnaire */
.chat{display:flex;flex-direction:column;gap:12px;flex:1}
.bubble{max-width:88%;padding:13px 16px;border-radius:18px;font-size:15px;line-height:1.45;animation:fadeUp .3s}
.bubble.bot{background:var(--bg);border:1px solid var(--line);border-bottom-left-radius:6px;align-self:flex-start}
.bubble.me{background:var(--primary);color:var(--primary-ink);border-bottom-right-radius:6px;align-self:flex-end;font-weight:700}
.bubble.note{background:var(--warn-soft);color:var(--warn);align-self:flex-start;font-size:13.5px;font-weight:600}
.chat-answers{display:flex;flex-direction:column;gap:8px;margin-top:2px;animation:fadeUp .3s}
.chat-answers .ans{padding:13px 16px;border-radius:14px;border:1.5px solid var(--line);background:var(--surface);
  font-weight:700;font-size:14.5px;text-align:left;transition:all .12s;width:100%}
.chat-answers .ans:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.chat-why{font-size:12px;color:var(--muted);text-align:left;padding:0 4px}

/* schema */
.schema-box{border-radius:18px;overflow:hidden;border:1.5px solid var(--line);background:var(--schema-grass);position:relative}
.schema-box svg{display:block;width:100%;height:auto;touch-action:none}
.schema-tools{display:flex;gap:8px;align-items:center;justify-content:center;flex-wrap:wrap}
.tool-btn{height:42px;padding:0 14px;border-radius:12px;background:var(--surface);border:1.5px solid var(--line);
  font-weight:700;font-size:13.5px;display:inline-flex;align-items:center;gap:7px}
.tool-btn:hover{border-color:var(--primary);color:var(--primary)}
.schema-legend{display:flex;gap:14px;justify-content:center;font-size:12.5px;color:var(--muted);font-weight:700;flex-wrap:wrap}
.schema-legend i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.sel-ring{stroke:var(--warn);stroke-width:2.5;stroke-dasharray:6 5;fill:none;animation:pulse 1.6s infinite}

/* summary */
.recit{display:flex;flex-direction:column;gap:10px}
.recit-line{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:13px;
  background:var(--surface);border:1px solid var(--line);font-size:14.5px;line-height:1.5}
.recit-line .prov{margin-top:2px}
.missing-item{display:flex;align-items:center;gap:12px;padding:14px;border-radius:14px;border:1.5px solid var(--line);background:var(--surface)}
.missing-item.blocking{border-color:rgba(214,69,69,.4)}
.missing-item b{font-size:14.5px;display:block}
.missing-item span{font-size:12.5px;color:var(--muted)}
.missing-item .btn{margin-left:auto;height:38px;padding:0 14px;font-size:13px;border-radius:10px;flex:none}
.all-good{display:flex;flex-direction:column;align-items:center;gap:12px;padding:34px 20px;text-align:center}
.big-check{width:76px;height:76px;border-radius:50%;background:var(--ok);color:#fff;font-size:36px;
  display:flex;align-items:center;justify-content:center;animation:pop .5s;box-shadow:0 14px 34px rgba(14,159,110,.35)}

/* review + generate */
.rev-section{display:flex;align-items:center;gap:12px;padding:14px;border-radius:14px;background:var(--surface);border:1px solid var(--line)}
.rev-section .rs-ic{width:40px;height:40px;border-radius:11px;background:var(--bg);display:flex;align-items:center;justify-content:center;font-size:18px;flex:none}
.rev-section b{font-size:14.5px;display:block}
.rev-section span{font-size:12.5px;color:var(--muted)}
.rev-section .chip{margin-left:auto}
.gen-steps{display:flex;flex-direction:column;gap:12px;padding:10px 0}
.gen-step{display:flex;align-items:center;gap:12px;font-weight:700;font-size:14.5px;color:var(--muted);opacity:.35;transition:opacity .3s}
.gen-step.on{opacity:1}
.gen-step .gs-ic{width:30px;height:30px;border-radius:50%;background:var(--line);display:flex;align-items:center;justify-content:center;font-size:14px;flex:none}
.gen-step.done .gs-ic{background:var(--ok);color:#fff}
.ref-box{text-align:center;padding:18px;border-radius:16px;background:var(--primary-soft);color:var(--primary-deep)}
.ref-box b{font-size:22px;letter-spacing:1.5px;font-family:ui-monospace,monospace}
.ref-box span{font-size:12.5px;font-weight:700;display:block;margin-bottom:4px}

/* map mini */
.map-mini{border-radius:16px;overflow:hidden;border:1.5px solid var(--line)}
.map-mini svg{display:block;width:100%;height:auto}

/* datarow */
.datarow{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:13px;background:var(--surface);border:1px solid var(--line)}
.datarow .dr-lab{font-size:12.5px;color:var(--muted);font-weight:700;width:96px;flex:none}
.datarow .dr-val{font-weight:800;font-size:14.5px;flex:1}
.datarow input{border:none;outline:none;background:transparent;font-weight:800;font-size:14.5px;width:100%}

/* ============ Dashboard ============ */
.dash{display:grid;grid-template-columns:236px 1fr;min-height:100vh}
.side{background:#0E1B2C;color:#C6D3E4;display:flex;flex-direction:column;padding:22px 14px;gap:4px;position:sticky;top:0;height:100vh}
[data-theme="dark"] .side{background:#0A111E}
.side .logo{display:flex;align-items:center;gap:10px;color:#fff;font-weight:800;font-size:19px;padding:4px 10px 20px}
.side .logo .logo-mark{width:34px;height:34px;font-size:17px;border-radius:10px}
.side nav{display:flex;flex-direction:column;gap:3px;flex:1}
.side .nav-item{display:flex;align-items:center;gap:11px;padding:11px 13px;border-radius:11px;font-weight:700;
  font-size:14px;color:#9FB1C7;text-align:left;width:100%;transition:background .12s}
.side .nav-item:hover{background:rgba(255,255,255,.06);color:#fff}
.side .nav-item.active{background:var(--primary);color:#fff;box-shadow:0 6px 16px rgba(30,86,200,.4)}
.side .side-foot{font-size:12px;color:#5B6B7F;padding:12px 10px 2px;border-top:1px solid rgba(255,255,255,.08)}
.side .side-org{display:flex;align-items:center;gap:10px;padding:12px 10px;border-radius:12px;background:rgba(255,255,255,.05);margin-bottom:10px}
.side .side-org .avatar{width:34px;height:34px;border-radius:10px;background:var(--warn);color:#fff;font-weight:800;
  display:flex;align-items:center;justify-content:center;font-size:14px;flex:none}
.side .side-org b{color:#fff;font-size:13.5px;display:block}
.side .side-org span{font-size:11.5px;color:#8CA0B8}

.main{padding:26px 32px 60px;max-width:1180px;width:100%}
.main-head{display:flex;align-items:center;gap:14px;margin-bottom:22px;flex-wrap:wrap}
.main-head h1{font-size:24px;letter-spacing:-.4px}
.main-head .sub{color:var(--muted);font-size:14px;width:100%}
.main-head .spacer{flex:1}

.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin-bottom:22px}
.kpi{padding:18px;display:flex;flex-direction:column;gap:6px;animation:fadeUp .4s both}
.kpi .k-lab{font-size:12.5px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;display:flex;gap:8px;align-items:center}
.kpi .k-val{font-size:30px;font-weight:800;letter-spacing:-1px;line-height:1}
.kpi .k-sub{font-size:12.5px;color:var(--muted);font-weight:600}
.kpi .k-val.warn{color:var(--warn)} .kpi .k-val.ok{color:var(--ok)} .kpi .k-val.err{color:var(--err)}

.panel{padding:20px;margin-bottom:20px}
.panel-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.panel-head h2{font-size:16.5px;letter-spacing:-.2px}
.panel-head .spacer{flex:1}

.chart{display:flex;align-items:flex-end;gap:18px;height:170px;padding:8px 6px 0}
.chart .col{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;height:100%;justify-content:flex-end}
.chart .bar{width:100%;max-width:52px;border-radius:9px 9px 4px 4px;background:var(--primary-soft);position:relative;transition:height .6s cubic-bezier(.2,.8,.2,1)}
.chart .bar.hot{background:var(--primary)}
.chart .bar b{position:absolute;top:-24px;left:50%;transform:translateX(-50%);font-size:13px;color:var(--ink)}
.chart .m{font-size:12px;font-weight:800;color:var(--muted)}

table.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl th{text-align:left;font-size:11.5px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);
  font-weight:800;padding:10px 12px;border-bottom:1.5px solid var(--line)}
.tbl td{padding:13px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl tr.rowlink{cursor:pointer;transition:background .1s}
.tbl tr.rowlink:hover{background:var(--primary-soft)}
.tbl .t-avatar{width:32px;height:32px;border-radius:50%;background:var(--primary-soft);color:var(--primary);
  font-size:12px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;margin-right:9px;vertical-align:middle}
.tbl .t-plate{font-family:ui-monospace,monospace;font-weight:700;font-size:12.5px;background:var(--bg);
  border:1px solid var(--line);padding:2px 7px;border-radius:6px}
.completude{display:inline-flex;align-items:center;gap:8px}
.completude .cbar{width:70px;height:6px;border-radius:99px;background:var(--line);overflow:hidden}
.completude .cbar i{display:block;height:100%;border-radius:99px}
.completude b{font-size:12.5px}

.filters{display:flex;gap:8px;flex-wrap:wrap}
.filter{height:36px;padding:0 14px;border-radius:99px;border:1.5px solid var(--line);font-weight:700;font-size:13px;color:var(--muted)}
.filter.active{background:var(--ink);border-color:var(--ink);color:var(--bg)}

/* detail */
.detail-grid{display:grid;grid-template-columns:1.6fr 1fr;gap:20px;align-items:start}
@media(max-width:980px){.detail-grid{grid-template-columns:1fr}}
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px}
.gallery .ph{border-radius:12px;overflow:hidden;border:1px solid var(--line);position:relative;background:#1a2433}
.gallery .ph svg{display:block;width:100%;height:auto}
.gallery .ph span{position:absolute;left:6px;bottom:6px;background:rgba(10,16,26,.75);color:#fff;
  font-size:10px;font-weight:700;padding:2px 8px;border-radius:99px}
.timeline{display:flex;flex-direction:column;gap:0}
.tl-item{display:flex;gap:14px;position:relative;padding-bottom:18px}
.tl-item:before{content:"";position:absolute;left:14px;top:30px;bottom:0;width:2px;background:var(--line)}
.tl-item:last-child:before{display:none}
.tl-dot{width:30px;height:30px;border-radius:50%;background:var(--primary-soft);color:var(--primary);
  display:flex;align-items:center;justify-content:center;font-size:13px;flex:none;z-index:1}
.tl-item b{font-size:13.5px;display:block}
.tl-item span{font-size:12px;color:var(--muted)}
.audit{font-family:ui-monospace,monospace;font-size:11.5px;color:var(--muted);line-height:2;overflow-x:auto;white-space:nowrap}
.audit b{color:var(--ok)}
.doc-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:13px;border:1.5px solid var(--line);margin-bottom:9px}
.doc-item .di-ic{width:38px;height:38px;border-radius:10px;background:var(--err-soft);color:var(--err);
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:11px;flex:none}
.doc-item b{font-size:13.5px;display:block}
.doc-item span{font-size:12px;color:var(--muted)}
.doc-item .btn{margin-left:auto;height:36px;padding:0 14px;font-size:13px;border-radius:10px}

.vcards{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(max-width:640px){.vcards{grid-template-columns:1fr}}
.vcard{padding:16px;border-radius:14px;border:1.5px solid var(--line)}
.vcard .vh{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.vcard .vh .tag{width:30px;height:30px;border-radius:9px;color:#fff;font-weight:800;display:flex;align-items:center;justify-content:center;font-size:14px}
.vcard dl{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;font-size:13px}
.vcard dt{color:var(--muted);font-weight:600}
.vcard dd{font-weight:700;text-align:right}

.vgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px}
.vg-card{padding:16px;display:flex;flex-direction:column;gap:8px}
.vg-card .vg-top{display:flex;align-items:center;gap:10px}
.vg-card .vg-ic{width:40px;height:40px;border-radius:11px;background:var(--primary-soft);font-size:19px;display:flex;align-items:center;justify-content:center}
.vg-card b{font-size:14.5px;display:block}
.vg-card .t-plate{align-self:flex-start}
.vg-meta{font-size:12.5px;color:var(--muted);display:flex;justify-content:space-between}

.back-crumb{display:inline-flex;align-items:center;gap:8px;font-weight:800;font-size:13.5px;color:var(--muted);margin-bottom:14px}
.back-crumb:hover{color:var(--primary)}

@media(max-width:860px){
  .dash{grid-template-columns:1fr}
  .side{position:static;height:auto;flex-direction:row;align-items:center;overflow-x:auto;padding:12px}
  .side .logo{padding:0 14px 0 6px}
  .side nav{flex-direction:row}
  .side .side-org,.side .side-foot{display:none}
  .main{padding:20px 16px 60px}
}

/* ============ v0.2 — persistance, offline, modales ============ */

/* Indicateur de connectivité dans la barre du haut */
.net-badge{position:absolute;top:14px;right:60px;font-size:11px;font-weight:800;
  color:var(--ok);padding:4px 9px;border-radius:99px;background:var(--ok-soft);
  letter-spacing:.3px;pointer-events:none}
.net-badge.offline{color:var(--warn);background:var(--warn-soft)}
@media(max-width:520px){.net-badge{right:54px;font-size:10px;padding:3px 7px}}

/* Bandeau de reprise sur l'accueil */
.resume-banner{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:16px;
  background:var(--primary-soft);color:var(--primary-deep);text-align:left;width:100%;
  border:1.5px solid rgba(30,86,200,.25);animation:fadeUp .35s}
.resume-banner > span:first-child{font-size:22px}
.resume-banner div{flex:1}
.resume-banner b{font-size:14px;display:block}
.resume-banner span{font-size:12.5px;color:var(--primary-deep);opacity:.8}
.resume-banner > b:last-child{font-size:13.5px;flex:none}

/* Source caméra (démo vs réelle) */
.cam-source-badge{position:absolute;left:50%;bottom:50px;transform:translateX(-50%);
  background:rgba(10,16,26,.7);color:#fff;font-size:10.5px;font-weight:800;padding:3px 10px;
  border-radius:99px;backdrop-filter:blur(4px);letter-spacing:.3px}
.cam-source-badge.live{background:rgba(14,159,110,.85)}

/* Modales (feedback, disclaimer) */
.modal-overlay{position:fixed;inset:0;background:rgba(14,27,44,.55);z-index:200;
  display:flex;align-items:flex-end;justify-content:center;padding:0;animation:fadeIn .2s}
@media(min-width:560px){.modal-overlay{align-items:center;padding:24px}}
.modal{background:var(--surface);width:100%;max-width:480px;max-height:92vh;overflow-y:auto;
  border-radius:22px 22px 0 0;padding:22px 22px 26px;animation:slideUp .3s cubic-bezier(.2,.8,.2,1);
  display:flex;flex-direction:column;gap:12px}
@media(min-width:560px){.modal{border-radius:22px}}
@keyframes slideUp{from{transform:translateY(40px);opacity:0}to{transform:none;opacity:1}}
.modal-head{display:flex;align-items:center;gap:10px}
.modal-head h2{font-size:19px;flex:1}
.modal-close{font-size:26px;color:var(--muted);width:36px;height:36px;border-radius:10px;line-height:1}
.modal-close:hover{background:var(--bg);color:var(--ink)}
.modal .sub{color:var(--muted);font-size:14px}
.bullets{list-style:none;display:flex;flex-direction:column;gap:8px;margin:6px 0}
.bullets li{position:relative;padding-left:24px;font-size:14px}
.bullets li:before{content:"✓";position:absolute;left:0;color:var(--ok);font-weight:800}

/* Étoiles de notation */
.fb-stars{display:flex;gap:6px;justify-content:center;padding:6px 0}
.fb-stars .star{font-size:34px;color:var(--line);line-height:1;transition:transform .1s,color .15s}
.fb-stars .star:hover{transform:scale(1.15)}
.fb-stars .star.on{color:#F7B500}
.fb-device{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}

/* Historique des dossiers */
.hist-head{display:flex;align-items:center;gap:12px}
.hist-head h1{font-size:24px;flex:1}
.hist-list{display:flex;flex-direction:column;gap:12px;margin-top:6px}
.hist-card{background:var(--surface);border:1.5px solid var(--line);border-radius:16px;padding:14px;
  display:flex;flex-direction:column;gap:10px;animation:fadeUp .3s}
.hist-card .hc-head{display:flex;align-items:center;gap:8px}
.hist-card .hc-ref{font-weight:800;font-size:13.5px;font-family:ui-monospace,monospace}
.hist-card .hc-time{margin-left:auto;font-size:12px;color:var(--muted)}
.hist-card .hc-body{display:flex;flex-direction:column;gap:2px}
.hist-card .hc-body b{font-size:14.5px}
.hist-card .hc-body span{font-size:12.5px;color:var(--muted)}
.hist-card .hc-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.hist-card .hc-actions{margin-left:auto;display:flex;gap:4px}
.hist-card .hc-actions .btn{height:36px;padding:0 12px;font-size:13px;border-radius:10px}
.hist-foot{display:flex;flex-direction:column;gap:8px;margin-top:18px}
.hist-empty{display:flex;flex-direction:column;align-items:center;gap:14px;padding:40px 20px;text-align:center}
.hist-empty-ic{font-size:46px;opacity:.5}
.hist-empty h2{font-size:20px}
.hist-empty p{color:var(--muted);font-size:14px;max-width:320px}
.hist-loading{color:var(--muted);font-size:14px;text-align:center;padding:30px}

/* Démonstration : pastille « démo » globale */
.demo-pill{position:fixed;bottom:14px;left:14px;z-index:90;background:var(--warn-soft);color:var(--warn);
  font-size:11px;font-weight:800;padding:5px 10px;border-radius:99px;letter-spacing:.3px;
  border:1px solid rgba(185,106,11,.3);pointer-events:none}

/* Impression (PDF natif) */
@media print{
  .side,.app-top,.back-crumb,.modal-overlay,.net-badge,.demo-pill,.foot button{display:none!important}
  .main{padding:0!important;max-width:100%!important}
  body{background:#fff}
  .card,.panel{box-shadow:none!important;border:1px solid #ccc!important;break-inside:avoid}
  .detail-grid{grid-template-columns:1fr!important}
}

/* ============ Dashboard v0.2 — auth, audit, feedback, settings ============ */

/* Login overlay */
.login-overlay{position:fixed;inset:0;background:radial-gradient(800px 600px at 30% 20%,#123B8F,#0E1B2C);
  display:flex;align-items:center;justify-content:center;padding:24px;z-index:300}
.login-card{background:var(--surface);width:100%;max-width:380px;padding:32px;border-radius:22px;
  box-shadow:0 24px 60px rgba(0,0,0,.4);display:flex;flex-direction:column;gap:12px}
.login-brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:20px;justify-content:center}
.login-brand .logo-mark{width:36px;height:36px;font-size:18px;border-radius:10px}
.login-card h1{font-size:20px;text-align:center;letter-spacing:-.3px}
.login-card .sub{text-align:center;font-size:13px;color:var(--muted)}
.login-card .field input{padding:12px 14px}
.login-err{color:var(--err);font-size:13px;font-weight:700;min-height:18px}
.login-hint{background:var(--bg);border-radius:12px;padding:12px;font-size:12.5px;color:var(--muted);line-height:1.7}
.login-hint code{background:var(--surface);padding:1px 6px;border-radius:5px;font-weight:700;color:var(--ink);
  border:1px solid var(--line)}
.login-back{display:block;text-align:center;font-weight:700;font-size:13px;margin-top:8px}

/* Search input */
.search-input{height:44px;padding:0 16px;border-radius:12px;border:1.5px solid var(--line);
  background:var(--surface);font-size:14px;width:280px;max-width:50vw;outline:none}
.search-input:focus{border-color:var(--primary)}

/* Feedback cards */
.fb-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px;
  display:flex;flex-direction:column;gap:6px}
.fb-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.fb-stars{color:#F7B500;font-size:16px;letter-spacing:1px}
.fb-card p{font-size:13.5px;margin:0}

/* Logout sidebar item */
.nav-logout{margin-top:auto;border-top:1px solid rgba(255,255,255,.08);border-radius:0}

/* vg-qr button */
.vg-qr{font-size:13px}

/* Caption */
.caption{font-size:12px;color:var(--muted);font-style:italic;margin:6px 0 0}

/* Audit scrollable */
.audit{font-family:ui-monospace,monospace;font-size:11.5px;color:var(--muted);line-height:2;
  max-height:280px;overflow:auto;background:var(--bg);padding:10px 12px;border-radius:10px}
