/* Identidad MTB: azul del sello «Monitoreo · Testigos Biológicos» (#4660AA) sobre blanco frío. */
:root{
  --bg:#f4f6fa; --surface:#fff; --surface-2:#eef1f7; --field:#f9fafc; --line:#dce2ec; --line-2:#c9d2e1; --fg:#1b2a44; --muted:#5d6a80;
  --accent:#4660aa; --accent-ink:#fff; --accent-soft:#e9eef7; --accent-deep:#33488a; --red:#c0392b;
  --ok:#1f7a4d; --ok-bg:#e3f2ea; --warn:#9a5b00; --warn-bg:#fcf1db; --bad:#b3261e; --bad-bg:#fbe5e2; --info:#4660aa; --info-bg:#e9eef7; --none:#5d6a80; --none-bg:#eef1f7;
  --f-display:"Barlow Semi Condensed","Barlow",system-ui,sans-serif; --f-body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif; --f-mono:"IBM Plex Mono",ui-monospace,monospace;
  --r:10px; --r-sm:7px; color-scheme:light;
}
@media (prefers-color-scheme:dark){:root{
  --bg:#0e1524; --surface:#151e31; --surface-2:#1c2740; --field:#111a2b; --line:#2a3754; --line-2:#36466a; --fg:#e6ebf5; --muted:#9aa7c0;
  --accent:#8ea4e6; --accent-ink:#0e1524; --accent-soft:#1f2c4d; --accent-deep:#b3c3f0; --red:#f08a7c;
  --ok:#74d3a1; --ok-bg:#153222; --warn:#f0bd62; --warn-bg:#382a0f; --bad:#f4918a; --bad-bg:#3b1a18; --info:#8ea4e6; --info-bg:#1f2c4d; --none:#9aa7c0; --none-bg:#1c2740; color-scheme:dark}}
*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);color:var(--fg);font:15px/1.55 var(--f-body);-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-underline-offset:2px}
img{max-width:100%}
[hidden]{display:none!important}
.wrap{max-width:1120px;margin:0 auto;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}
.top{position:sticky;top:0;z-index:5;background:var(--surface);border-bottom:1px solid var(--line);padding-top:env(safe-area-inset-top)}
.bar{display:flex;flex-wrap:wrap;align-items:center;gap:0 18px;padding-top:10px}
.brand{display:flex;align-items:center;gap:11px;text-decoration:none;margin-right:auto;min-width:0;flex:1 1 0;padding-bottom:8px}
.brand img{width:40px;height:40px;flex:0 0 auto}
.brand .bt{display:flex;flex-direction:column;min-width:0;line-height:1.1}
.brand b{font-family:var(--f-display);font-weight:700;font-size:18px;color:var(--fg);letter-spacing:.005em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand #modo{font-size:12.5px;color:var(--accent);font-weight:600;margin-top:2px}
.tabs{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;order:3;width:100%;margin:2px -10px 0;padding:0 2px}
.tabs::-webkit-scrollbar{display:none}
.tabs a{position:relative;padding:11px 10px 12px;color:var(--muted);text-decoration:none;font-weight:500;font-size:14.5px;white-space:nowrap}
.tabs a:hover{color:var(--fg)}
.tabs a.on{color:var(--accent);font-weight:600}
.tabs a.on::after{content:"";position:absolute;left:10px;right:10px;bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--accent)}
.who{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:13px;min-width:0;padding-bottom:8px}
.who span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}
@media (max-width:560px){.bar{flex-wrap:wrap}.brand b{font-size:15px;white-space:normal}.who{gap:2px}.brand img{width:36px;height:36px}#quien>span:last-child{display:none}}
main{padding-block:22px 80px}
.loading{color:var(--muted)}
h1{font-family:var(--f-display);font-weight:700;font-size:28px;line-height:1.15;margin:0;letter-spacing:-.005em;text-wrap:balance}
h2{font-family:var(--f-display);font-weight:600;font-size:19px;line-height:1.25;margin:0 0 12px}
h3{font-family:var(--f-display);font-weight:600;font-size:16.5px;color:var(--accent-deep);margin:0 0 10px}
p{margin:0}
.sub{color:var(--muted);margin-top:4px}
.head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:22px}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:20px}
.stack{display:flex;flex-direction:column;gap:16px}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr));gap:16px}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:14px}
.muted{color:var(--muted)} .small{font-size:13px} .mono{font-family:var(--f-mono);font-size:13px}
.num{font-variant-numeric:tabular-nums}
/* Estados */
.chip{display:inline-flex;align-items:center;gap:6px;padding:2px 9px;border-radius:var(--r-sm);font-size:12.5px;font-weight:600;white-space:nowrap;background:var(--cb);color:var(--cf)}
.chip::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.s-ok{--cb:var(--ok-bg);--cf:var(--ok);--c:var(--ok)} .s-warn{--cb:var(--warn-bg);--cf:var(--warn);--c:var(--warn)}
.s-bad{--cb:var(--bad-bg);--cf:var(--bad);--c:var(--bad)} .s-info{--cb:var(--info-bg);--cf:var(--info);--c:var(--info)} .s-none{--cb:var(--none-bg);--cf:var(--none);--c:var(--none)}
.alert{border-radius:var(--r-sm);padding:11px 14px;background:var(--cb);color:var(--cf);font-size:14px;border-left:3px solid currentColor}
.alert a{color:inherit;font-weight:600}
/* Botones */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:inherit;font-weight:600;border-radius:var(--r-sm);padding:10px 16px;border:1px solid var(--line-2);background:var(--surface);color:var(--fg);cursor:pointer;text-decoration:none;white-space:nowrap;min-height:44px}
.btn:hover{background:var(--surface-2)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn.primary:hover{background:var(--accent-deep);border-color:var(--accent-deep)}
.btn.danger{color:var(--bad);border-color:var(--bad);background:transparent}
.btn.ghost{border-color:transparent;background:transparent;color:var(--muted)}
.btn.sm{padding:5px 11px;font-size:13px;min-height:34px}
.btn[disabled]{opacity:.55;cursor:wait}
.actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:18px}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* Llamado principal */
.cta{display:flex;align-items:center;gap:18px;padding:22px 24px;border-radius:var(--r);background:var(--accent);color:var(--accent-ink);text-decoration:none;margin-bottom:22px}
.cta:hover{background:var(--accent-deep)}
.cta svg{flex:0 0 auto;width:54px;height:54px}
.cta b{display:block;font-family:var(--f-display);font-size:24px;font-weight:700;line-height:1.15}
.cta span{opacity:.9}
/* Formularios */
form .sec{border-top:1px solid var(--line);padding-top:18px;margin-top:18px}
form .sec:first-child{border-top:0;margin-top:0;padding-top:0}
.fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,170px),1fr));gap:12px 14px}
.fields.w2{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr))}
.f{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--muted);font-weight:500;min-width:0}
.f .req{color:var(--red)}
input,select,textarea{font:inherit;font-size:16px;color:var(--fg);background:var(--field);border:1px solid var(--line-2);border-radius:var(--r-sm);padding:9px 11px;width:100%;min-width:0;min-height:44px}
textarea{min-height:80px;resize:vertical}
input:focus,select:focus,textarea:focus{border-color:var(--accent);background:var(--surface);outline:none;box-shadow:0 0 0 3px var(--accent-soft)}
.unit{display:flex;align-items:center;gap:6px}.unit span{color:var(--muted);font-size:13px;white-space:nowrap}
.unit input{flex:1 1 auto}.unit select{width:auto;flex:0 0 auto;min-width:6.2em}
.seg{display:flex;flex-wrap:wrap;gap:8px}
.seg label{display:flex;align-items:center;gap:8px;border:1px solid var(--line-2);border-radius:var(--r-sm);padding:8px 14px;cursor:pointer;background:var(--surface);font-weight:600;color:var(--fg);min-height:44px}
.seg input{width:auto;min-height:0;accent-color:var(--accent)}
.seg label:has(input:checked){border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
.check{display:flex;gap:10px;align-items:flex-start;font-size:14px}
.check input{width:auto;min-height:0;margin-top:4px;accent-color:var(--accent)}
.hint{font-size:13px;color:var(--muted)}
.err{margin-top:12px}
.pick{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,240px),1fr));gap:10px}
.pick label{display:flex;flex-direction:column;gap:2px;border:1px solid var(--line-2);border-radius:var(--r-sm);padding:12px 14px;cursor:pointer;background:var(--surface)}
.pick label:has(input:checked){border-color:var(--accent);background:var(--accent-soft)}
.pick input{position:absolute;opacity:0;pointer-events:none}
.pick b{font-weight:600}
/* Fotos */
.photos{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.photo{position:relative;width:110px;height:110px;border-radius:8px;overflow:hidden;border:1px solid var(--line);background:var(--surface-2)}
.photo img{width:100%;height:100%;object-fit:cover;display:block}
.photo button{position:absolute;top:4px;right:4px;border:0;border-radius:999px;background:rgba(0,0,0,.65);color:#fff;width:28px;height:28px;font-size:16px;line-height:1;cursor:pointer}
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.gallery a{display:block;border-radius:8px;overflow:hidden;border:1px solid var(--line);aspect-ratio:1}
.gallery img{width:100%;height:100%;object-fit:cover;display:block}
.filebtns{display:flex;flex-wrap:wrap;gap:10px}
.filebtns label{cursor:pointer}
.filebtns input{position:absolute;opacity:0;width:1px;height:1px}
/* Tarjetas y listas */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:16px;display:flex;flex-direction:column;gap:8px;border-top:3px solid var(--c,var(--line))}
.card .t{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.card .t b{font-family:var(--f-display);font-size:16px}
.big{font-family:var(--f-display);font-weight:700;font-size:22px;font-variant-numeric:tabular-nums}
.list{display:flex;flex-direction:column}
.row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 0;border-bottom:1px solid var(--line);text-decoration:none;color:inherit}
.row:last-child{border-bottom:0}
a.row:hover{background:var(--surface-2)}
.row .l{min-width:0}.row .l b{display:block;font-weight:600;overflow-wrap:anywhere}
.empty{color:var(--muted);padding:12px 0}
.dl{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;font-size:14px;margin:0}
.dl dt{color:var(--muted)}.dl dd{margin:0;overflow-wrap:anywhere}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:18px}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;text-decoration:none;color:inherit}
.kpi.cero .n{color:var(--muted);font-weight:500}
a.kpi:hover{border-color:var(--c,var(--accent))}
.kpi .n{font-family:var(--f-display);font-weight:600;font-size:32px;line-height:1.1;color:var(--c,var(--fg));font-variant-numeric:tabular-nums}
.kpi .l{color:var(--muted);font-size:13px}
.tablebox{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
table{border-collapse:collapse;width:100%;font-size:14px}
th,td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:13px;color:var(--muted);font-weight:600;background:var(--surface-2);white-space:nowrap}
tbody tr:last-child td{border-bottom:0}
tr[data-href]{cursor:pointer} tr[data-href]:hover{background:var(--surface-2)}
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:12px}
.toolbar input{max-width:300px}.toolbar select{width:auto}
.layout{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:16px;align-items:start}
@media (max-width:860px){.layout{grid-template-columns:1fr}}
/* Acceso */
.auth{max-width:420px;margin:7vh auto 0;padding:32px 30px 28px}
.auth .sello{display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;margin:-4px 0 22px;padding-bottom:22px;border-bottom:1px solid var(--line)}
.auth .sello img{width:132px;height:132px}
.auth .sello p{font-size:13px;color:var(--muted);max-width:30ch}
.auth h1{font-size:24px}
@media (max-width:480px){.auth{margin-top:3vh;padding:24px 18px}.auth .sello img{width:108px;height:108px}}
.steps{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 16px;padding:0;list-style:none}
.steps li{font-size:13px;padding:4px 10px;border-radius:var(--r-sm);background:var(--surface-2);color:var(--muted)}
.steps li.on{background:var(--accent-soft);color:var(--accent);font-weight:600}
.steps li.done{color:var(--ok)}
.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom));transform:translateX(-50%);background:var(--fg);color:var(--bg);padding:11px 18px;border-radius:var(--r-sm);font-weight:500;z-index:20;max-width:calc(100% - 32px);text-align:center}
.done-box{text-align:center;padding:30px 18px}
.done-box .folio{font-family:var(--f-mono);font-size:28px;color:var(--accent);margin:10px 0}
.confirm{display:inline-flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 12px;border-radius:8px;background:var(--bad-bg);color:var(--bad);font-weight:500}
.temp{font-family:var(--f-mono);font-size:22px;letter-spacing:.08em;background:var(--surface-2);padding:6px 12px;border-radius:6px;user-select:all}
@media (prefers-reduced-motion:no-preference){.toast{animation:up .18s ease-out}@keyframes up{from{transform:translate(-50%,8px);opacity:0}}}
/* v2: QR, línea de tiempo, lecturas, reporte, avisos */
.bell{position:relative;display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:999px;color:var(--muted)}
.bell:hover{background:var(--surface-2);color:var(--fg)}
.bell svg{width:22px;height:22px}
#bell-n{position:absolute;top:2px;right:0;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--red);color:#fff;font-size:11px;font-weight:700;line-height:18px;text-align:center}
.qr{display:flex;flex-direction:column;align-items:center;gap:6px;margin:14px auto}
.qr svg{width:min(240px,70vw);height:auto;border-radius:8px;border:1px solid var(--line)}
.qr b{font-size:15px;letter-spacing:.05em}
.qr-panel{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;align-items:center;margin-top:16px;border-color:var(--accent)}
@media (max-width:640px){.qr-panel{grid-template-columns:1fr}}
.timeline{list-style:none;margin:0 0 16px;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px}
.timeline li{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:9px 12px;border-top:3px solid var(--line);display:flex;flex-direction:column;gap:2px}
.timeline li.ok{border-top-color:var(--accent)}
.timeline b{font-size:13px;font-weight:600;color:var(--muted)}
.timeline li.ok b{color:var(--accent)}
.timeline span{font-size:13.5px;font-variant-numeric:tabular-nums;white-space:pre}
.lecs{display:flex;flex-direction:column;gap:12px}
.lec{display:grid;grid-template-columns:44px minmax(0,1fr);gap:6px 10px;align-items:center}
.lec b{font-family:var(--f-display);font-size:16px;grid-row:span 2}
.lec .hint{grid-column:2}
.scan{display:flex;gap:16px;align-items:center}
.scan-ico{flex:0 0 auto;width:64px;height:64px;color:var(--accent)}
.mes{margin-bottom:22px}
.aviso.nuevo b::before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--red);margin-right:8px;vertical-align:middle}
.aviso .l{display:flex;flex-direction:column;gap:2px}
.bitacora table{font-size:13px}.bitacora td{white-space:nowrap}.bitacora td:nth-child(4){white-space:normal;min-width:160px}
.reporte{max-width:860px;margin:0 auto;display:flex;flex-direction:column;gap:18px}
.reporte header{display:flex;justify-content:space-between;gap:16px;border-bottom:3px solid var(--accent);padding-bottom:12px}
.reporte header b{display:block;font-family:var(--f-display);font-size:20px;color:var(--accent)}
.reporte header span{font-size:13px;color:var(--muted);font-weight:600}
.reporte header .r{text-align:right}.reporte header .r b{font-family:var(--f-mono);color:var(--fg);font-size:18px}
.reporte .res{border-radius:8px;padding:12px 16px;background:var(--cb);color:var(--cf);display:flex;flex-direction:column;gap:2px}
.reporte .res b{font-family:var(--f-display);font-size:18px}.reporte .res span{font-size:13px}
.reporte .cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:18px}
.reporte .lect{margin-top:10px;border:1px solid var(--line)}
.reporte footer{display:grid;grid-template-columns:1fr 1fr 1.3fr;gap:18px;border-top:1px solid var(--line);padding-top:14px}
.reporte footer span{display:block;font-size:12px;color:var(--muted)}
.reporte .firma{border-bottom:1px solid var(--fg);min-height:54px}
.reporte .obs{font-size:14px}
@media print{
  @page{size:letter;margin:14mm}
  body[data-vista="admin-bitacora"]{zoom:.72}
  .top,.noprint,.toast,.bell{display:none!important}
  body{background:#fff;color:#000}
  main{padding:0}
  .panel{border:0;padding:0}
  .tablebox{overflow:visible;border:0}
  tr[data-href]{cursor:default}
  .chip{border:1px solid currentColor}
  .reporte .res{border:1px solid currentColor}
}
body[data-vista="admin-bitacora"] main.wrap{max-width:1560px}
.bitacora td{white-space:normal}.bitacora td.mono,.bitacora td:nth-child(2),.bitacora td:nth-child(5){min-width:92px}
/* v3: mantenimiento */
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
.chipbtn{padding:7px 14px;border-radius:var(--r-sm);border:1px solid var(--line);background:var(--surface);color:var(--fg);text-decoration:none;font-weight:500;font-size:14px}
.chipbtn:hover{background:var(--surface-2)}
.chipbtn.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}
.t2{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px}
.big-date{text-align:right}.big-date span{display:block;font-size:12.5px;color:var(--muted)}
.big-date b{font-family:var(--f-display);font-size:24px;font-weight:800;color:var(--accent);font-variant-numeric:tabular-nums}
.cal{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px}
@media (min-width:700px){.cal{grid-template-columns:repeat(12,minmax(0,1fr))}}
.cal-m{border:1px solid var(--line);border-radius:8px;padding:6px 4px;text-align:center;min-height:58px;display:flex;flex-direction:column;align-items:center;gap:2px;background:var(--bg)}
.cal-m span{font-size:12px;color:var(--muted)}
.cal-m.on{border-color:var(--accent);background:var(--accent-soft)}
.cal-m.on b{font-family:var(--f-display);font-size:18px;color:var(--accent)}
.cal-m.done b{color:var(--ok)}
.vis{border-bottom:1px solid var(--line);padding-bottom:6px}.vis:last-child{border-bottom:0}.vis .row{border-bottom:0}
details.det-in{margin-top:6px}
details.det-in>summary{cursor:pointer;font-size:13.5px;color:var(--accent);font-weight:600;padding:4px 0}
details.det-in form{padding:10px 0 4px}
details.det>summary{cursor:pointer;font-weight:600}
details.inl{display:inline-block;vertical-align:top}
.incl{margin:0;padding-left:20px;columns:2 260px;font-size:14px}
.incl li{margin-bottom:3px;break-inside:avoid}
.invite{border-color:var(--accent);background:var(--accent-soft)}
.invite p{max-width:70ch}
.card.pq{border-top-color:var(--accent)}
.mant-line{border-top:1px dashed var(--line);padding-top:8px;margin-top:2px}
.agenda .agenda-it{display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:12px;align-items:start;padding:12px 0;border-bottom:1px solid var(--line)}
.agenda .agenda-it:last-child{border-bottom:0}
.agenda-it .d{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:8px;background:var(--surface-2);padding:6px 0}
.agenda-it .d b{font-family:var(--f-display);font-size:22px;line-height:1}.agenda-it .d span{font-size:12px;color:var(--muted)}
.agenda-it .l{display:flex;flex-direction:column;gap:2px;min-width:0}
.agenda-it .acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;align-items:flex-start}
@media (max-width:560px){.agenda .agenda-it{grid-template-columns:44px minmax(0,1fr)}.agenda-it>.chip{grid-column:2;justify-self:start}}
.sol .dl{margin-top:10px}
.row .l>span{display:block}
/* v4: perfiles, biblioteca y perfil del autoclave */
fieldset.plain{border:0;margin:0;padding:0;min-width:0}
fieldset.plain[disabled]{opacity:.7}
[data-oculto] .libre{display:none}
.hide-file{position:absolute;opacity:0;width:1px;height:1px}
a.plain{color:inherit;text-decoration:none}a.plain:hover{text-decoration:underline}
.foto{border-radius:10px;overflow:hidden;background:var(--surface-2);aspect-ratio:4/3;display:flex;align-items:center;justify-content:center}
.foto img{width:100%;height:100%;object-fit:contain;background:#fff}
.foto svg{width:80%;height:auto}
.foto.lg{width:min(260px,100%);flex:0 0 auto}
.card.model{text-decoration:none;color:inherit;border-top-width:1px}
.card.model:hover{border-color:var(--accent)}
.card.model .foto{margin:-4px -4px 6px}
.cards.models{grid-template-columns:repeat(auto-fill,minmax(min(100%,220px),1fr))}
.perfil-top,.ficha-top{display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap;margin-bottom:16px}
.perfil-top .pt-body,.ficha-top>div:last-child{flex:1 1 300px;min-width:0}
.eyebrow{font-size:13px;font-weight:600;color:var(--accent);margin-bottom:4px}
.chips-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.sec-nav{position:sticky;top:calc(env(safe-area-inset-top) + 104px);z-index:3;background:var(--bg);padding:6px 0;margin-bottom:10px}
.card.inner{border:1px solid var(--line);border-top-width:4px;box-shadow:none;margin-top:10px}
.panel.attn{border-color:var(--warn);background:var(--warn-bg)}
.panel[id^="s-"]{scroll-margin-top:130px}
#s-mant{scroll-margin-top:130px}
/* v5: perfil con foto, entrega mensual y locales */
.avatar{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:40px;height:40px;border-radius:50%;overflow:hidden;background:var(--accent-soft);color:var(--accent-deep);font-family:var(--f-display);font-weight:600;font-size:15px;border:1px solid var(--line)}
.avatar img{width:100%;height:100%;object-fit:cover;display:block}
.avatar.sm{width:30px;height:30px;font-size:12px}
.avatar.lg{width:58px;height:58px;font-size:20px}
.avatar.xl{width:112px;height:112px;font-size:36px}
#quien{display:inline-flex;align-items:center;gap:8px;max-width:none}
#quien>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}
.hola{display:flex;align-items:center;gap:14px}
.perfil-foto{display:flex;gap:20px;align-items:center;flex-wrap:wrap}
.con-avatar{display:flex;gap:10px;align-items:center}
.txt-bad{color:var(--bad);font-weight:600}
.mes-banner{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:center;justify-content:space-between;border-radius:var(--r);padding:18px 20px;margin-bottom:20px;background:var(--cb);color:var(--cf);border:1px solid color-mix(in srgb,currentColor 35%,transparent);border-left:4px solid currentColor}
.mes-banner b{font-family:var(--f-display);font-size:19px;font-weight:600}
.mes-banner p{color:var(--fg);margin-top:4px;max-width:70ch}
.mes-banner .acts{display:flex;gap:8px;flex-wrap:wrap}
.locales{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,280px),1fr));gap:12px}
.local{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px;display:flex;flex-direction:column;gap:4px}
.local.pref{border-color:var(--accent);box-shadow:inset 0 3px 0 var(--accent)}
.local .t{display:flex;justify-content:space-between;gap:8px;align-items:center}
.local .t b{font-family:var(--f-display);font-size:16px}
.local .acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.locales.compacto .local .acts .ghost{display:none}

/* v6 · reportes en PDF e inventario */
.bulk{margin-bottom:12px}
.bulk-row{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center}
.bulk .check{margin:0}
.toolbar .f{flex-direction:row;align-items:center;gap:8px}
.pl-imgs{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}
.pl-prev{display:flex;align-items:center;justify-content:center;height:180px;border:1px dashed var(--line);border-radius:8px;background:repeating-conic-gradient(var(--surface-2) 0 25%,var(--surface) 0 50%) 0 0/16px 16px;margin:8px 0;overflow:hidden}
.pl-prev img{max-width:100%;max-height:100%;object-fit:contain}
.pl-prev.membrete{height:240px}
table.inv tr.grupo td{background:var(--surface-2);font-weight:600;font-size:13.5px;color:var(--accent-deep)}
table.inv tr.grupo{cursor:default}
tr.inactivo{opacity:.55}
.kpi .n small{font-size:14px;font-weight:600;color:var(--muted)}
form[data-t="entrada"] [data-tipo]:not([data-tipo~="entrada"]),form[data-t="salida"] [data-tipo]:not([data-tipo~="salida"]),form[data-t="conteo"] [data-tipo]:not([data-tipo~="conteo"]){display:none}
form[data-t="salida"]:not([data-m="entrega_odontologo"]) [data-motivo]{display:none}
details.det summary{cursor:pointer;list-style:revert}
details.det[open] summary{margin-bottom:6px}
.alert ul{margin:4px 0 0 18px}

/* v6.1 · escáner y etiquetas */
.scan-in{width:100%;font-size:22px;padding:16px 18px;border:2px solid var(--accent);border-radius:var(--r);background:var(--surface)}
.scan-in:focus{outline:3px solid color-mix(in srgb,var(--accent) 30%,transparent)}
.txt-ok{color:var(--ok);font-weight:600}
.etqs{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.etq{border:1px dashed var(--line);border-radius:6px;padding:8px 10px;text-align:center;background:#fff;break-inside:avoid}
.etq svg{max-width:100%;height:auto;display:block;margin:4px auto}
.etq-n{font-size:12px;font-weight:600;line-height:1.2;color:#000}
.etq-c{font-size:12px;color:#000;letter-spacing:.05em}
@media print{body[data-vista="inventario"] .etqs{grid-template-columns:repeat(3,1fr);gap:4mm}body[data-vista="inventario"] .etq{border-color:#999}}

/* v9 · semáforo, contratos, taller, configuración */
#quien{text-decoration:none;color:inherit;border-radius:var(--r-sm);padding:3px 6px 3px 3px}
#quien:hover{background:var(--surface-2)}
.semaforo{background:var(--surface);border:1px solid var(--line);border-left:5px solid var(--cf);border-radius:var(--r);padding:18px 20px;margin-bottom:20px}
.sem-top{display:flex;gap:14px;align-items:center}
.sem-ico{flex:0 0 auto;width:44px;height:44px;border-radius:50%;background:var(--cb);color:var(--cf);display:flex;align-items:center;justify-content:center}
.sem-ico svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.semaforo b{font-family:var(--f-display);font-size:22px;font-weight:600;color:var(--cf);display:block;line-height:1.15}
.semaforo .sem-top p{color:var(--muted);margin-top:2px}
.sem-list{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.sem-list li{display:flex;gap:10px;align-items:baseline;padding:8px 12px;border-radius:var(--r-sm);background:var(--cb)}
.sem-list li::before{content:"";flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:var(--cf);transform:translateY(-1px)}
.sem-list a{color:var(--fg);text-decoration:none}.sem-list a:hover{text-decoration:underline}
.sem-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.bloqueado{background:var(--surface-2)}
.lock{display:flex;gap:14px;align-items:flex-start;color:var(--muted)}
.lock svg{flex:0 0 auto;width:28px;height:28px;fill:none;stroke:currentColor;stroke-width:1.8;margin-top:2px}
.datos{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.dato{background:var(--surface-2);border-radius:var(--r-sm);padding:10px 12px;display:flex;flex-direction:column;gap:2px;min-width:0}
.dato span{font-size:12.5px;color:var(--muted)}.dato b{font-weight:600;overflow-wrap:anywhere}
.datos.prog .dato{background:var(--accent-soft)}
.prerreporte{border:1px solid var(--bad);background:var(--bad-bg);color:var(--bad);border-radius:var(--r-sm);padding:10px 14px;font-size:14px}
.reporte.pre{position:relative;overflow:hidden}
.reporte.pre::after{content:"PRERREPORTE";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--f-display);font-weight:700;font-size:min(14vw,120px);color:var(--accent);opacity:.06;transform:rotate(-30deg);pointer-events:none}
.row.cambio{align-items:flex-start}.row.cambio .l{display:flex;flex-direction:column;gap:3px}
.pasos{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:0}
.pasos li{position:relative;padding:6px 0 10px 26px;display:flex;flex-direction:column;color:var(--muted)}
.pasos li::before{content:"";position:absolute;left:4px;top:10px;width:10px;height:10px;border-radius:50%;border:2px solid var(--line-2);background:var(--surface)}
.pasos li:not(:last-child)::after{content:"";position:absolute;left:9px;top:24px;bottom:-4px;width:2px;background:var(--line)}
.pasos li.ok{color:var(--fg)}.pasos li.ok::before{background:var(--accent);border-color:var(--accent)}
.pasos.horiz{flex-direction:row;flex-wrap:wrap;gap:8px 20px;margin:0 0 18px}
.pasos.horiz li{padding:0 0 0 22px}.pasos.horiz li::after{display:none}.pasos.horiz li::before{top:5px}
.pasos.horiz li.ok::before{background:var(--accent-soft);border-color:var(--accent)}
.cta-par{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:14px;margin-bottom:22px}
.cta-par .cta{margin:0}
.cta.alt{background:var(--surface);color:var(--fg);border:1px solid var(--line-2)}
.cta.alt svg{color:var(--accent);fill:none;stroke:currentColor;stroke-width:1.6}
.cta.alt:hover{background:var(--accent-soft)}
.contrato-doc{max-width:78ch}
.contrato-doc h3{font-size:18px;color:var(--fg);margin-bottom:6px}
.contrato-doc h4{font-family:var(--f-display);font-weight:600;font-size:16px;margin:16px 0 6px}
.contrato-doc p{margin:8px 0;line-height:1.6}
.contrato-doc ol{margin:0;padding-left:22px;display:flex;flex-direction:column;gap:8px;line-height:1.6}
.calTB{display:grid;grid-template-columns:repeat(auto-fill,minmax(86px,1fr));gap:6px}
.cm{border:1px solid var(--line);border-radius:var(--r-sm);padding:7px 8px;display:flex;flex-direction:column;gap:1px;background:var(--surface);min-height:66px}
.cm span{font-size:12px;color:var(--muted)}.cm b{font-family:var(--f-display);font-size:18px;line-height:1.1;color:var(--muted)}.cm small{font-size:11px;color:var(--muted);line-height:1.2}
.cm.ok{background:var(--ok-bg);border-color:transparent}.cm.ok b{color:var(--ok)}
.cm.warn{background:var(--warn-bg);border-color:var(--warn)}.cm.warn b{color:var(--warn)}
.cm.bad{background:var(--bad-bg);border-color:transparent}.cm.bad b{color:var(--bad)}
.cm.prog{border-color:var(--accent);border-style:dashed}.cm.prog b{color:var(--accent)}
.cm.info{background:var(--info-bg)}.cm.info b{color:var(--info)}
.cal-ley{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:10px;font-size:12.5px;color:var(--muted)}
.cal-ley span::before{content:"";display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px;vertical-align:-1px;border:1px solid var(--line-2)}
.cal-ley .ok::before{background:var(--ok-bg);border-color:var(--ok)}.cal-ley .warn::before{background:var(--warn-bg);border-color:var(--warn)}.cal-ley .prog::before{border:1px dashed var(--accent)}.cal-ley .bad::before{background:var(--bad-bg);border-color:var(--bad)}
.checks{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:6px 14px;margin-top:6px}
.photo .ph-l{position:absolute;left:0;right:0;bottom:0;background:rgba(27,42,68,.72);color:#fff;font-size:11px;padding:2px 6px}
.firmas{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:16px;margin-top:14px}
.pad{position:relative;margin-bottom:8px}
.pad canvas{width:100%;height:150px;display:block;border:1px dashed var(--line-2);border-radius:var(--r-sm);background:var(--field);touch-action:none;cursor:crosshair}
.pad .btn{position:absolute;top:6px;right:6px}
.firmas.ver>div{display:flex;flex-direction:column;gap:4px}
.firma-img{max-width:240px;height:80px;object-fit:contain;background:#fff;border:1px solid var(--line);border-radius:var(--r-sm)}
ol.linea{list-style:none;margin:0 0 18px;padding:0;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px}
ol.linea li{border-top:3px solid var(--line);padding-top:6px;display:flex;flex-direction:column;font-size:13px;color:var(--muted)}
ol.linea li.ok{border-color:var(--accent);color:var(--fg)}ol.linea li b{font-weight:600}
@media (max-width:640px){ol.linea{grid-template-columns:repeat(3,minmax(0,1fr))}}
ol.eventos{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
ol.eventos li{display:flex;flex-direction:column;gap:2px;padding-left:14px;border-left:2px solid var(--accent-soft)}
.cfg{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr));gap:12px}
.cfg-it{text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:4px}
.cfg-it b{font-family:var(--f-display);font-weight:600;font-size:17px;color:var(--accent-deep)}
.cfg-it:hover{border-color:var(--accent)}
.row .acts{display:flex;gap:8px;align-items:center}

/* v7.1 · mapa de locales, contrato, etiquetas Zebra */
.locales-mapa{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:16px;align-items:start}
.locales-mapa .locales{grid-template-columns:1fr}
.locales-mapa.compacto{grid-template-columns:1fr}
.mapa{position:sticky;top:120px;display:flex;flex-direction:column;gap:8px}
.mapa iframe{width:100%;height:440px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface-2)}
.local.sel{border-color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}
@media (max-width:860px){.locales-mapa{grid-template-columns:1fr}.mapa{position:static;order:-1}.mapa iframe{height:300px}}
.clausulas p{margin:8px 0;line-height:1.6}
.contrato-doc ol li{padding-left:2px}
.etqs.zebra{display:flex;flex-wrap:wrap;gap:10px}
.etq.z{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:1mm;padding:1.5mm 2mm;overflow:hidden;box-sizing:border-box}
.etq.z .etq-n{font-size:9pt;max-height:2.6em;overflow:hidden}
.etq.z svg{width:100%;height:45%;margin:0}
.etq.z .etq-c{font-size:8pt}
