[hidden]{display:none !important}
@font-face{font-family:Montserrat;font-weight:400;font-style:normal;font-display:swap;src:url(/fonts/montserrat-400.woff2) format('woff2')}
@font-face{font-family:Montserrat;font-weight:500;font-style:normal;font-display:swap;src:url(/fonts/montserrat-500.woff2) format('woff2')}
@font-face{font-family:Montserrat;font-weight:600;font-style:normal;font-display:swap;src:url(/fonts/montserrat-600.woff2) format('woff2')}
@font-face{font-family:Montserrat;font-weight:700;font-style:normal;font-display:swap;src:url(/fonts/montserrat-700.woff2) format('woff2')}
@font-face{font-family:Bodoni;font-weight:400;font-style:normal;font-display:swap;src:url(/fonts/bodoni-400.woff2) format('woff2')}
:root{
  --g:#3F8A67;--g-dark:#2E6B4F;--g-soft:#E9F3EE;--g-line:#cfe3d8;
  --ink:#1D2A2F;--ink2:#3d4b51;--muted:#6B787F;--line:#E2E7E4;--line2:#EEF1EF;--bg:#F4F6F5;--card:#fff;
  --warn:#9A6200;--warn-bg:#FFF4DE;--bad:#B4322A;--bad-bg:#FDECEA;--info:#1F5FBF;--info-bg:#EAF1FD;--ok:#237A50;--ok-bg:#E5F4EC;
  --orange:#D9660B;--orange-bg:#FFEEDF;--red:#C62828;--red-bg:#FDE8E8;
  --r:12px;--r-sm:8px;--sh:0 1px 2px rgba(16,24,40,.05),0 1px 3px rgba(16,24,40,.06);--sh-lg:0 12px 32px rgba(16,24,40,.14);
  --sb:256px;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;font-family:Montserrat,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;font-size:14px;line-height:1.45;color:var(--ink);background:var(--bg)}
a{color:var(--g-dark);text-decoration:none}a:hover{text-decoration:underline}
h1,h2,h3,h4{margin:0 0 .5rem;line-height:1.25;color:var(--ink)}
h1{font-size:1.45rem;font-weight:700}h2{font-size:1.12rem;font-weight:700}h3{font-size:.98rem;font-weight:600}h4{font-size:.9rem;font-weight:600}
p{margin:.25rem 0 .75rem}small,.small{font-size:.82rem}.muted{color:var(--muted)}.nowrap{white-space:nowrap}.right{text-align:right}.center{text-align:center}
.mono{font-variant-numeric:tabular-nums}.b{font-weight:600}.upper{text-transform:uppercase;letter-spacing:.04em}
hr{border:0;border-top:1px solid var(--line);margin:1rem 0}
.brand{font-family:Bodoni,"Bodoni Moda",Didot,Georgia,serif;letter-spacing:.32em;font-weight:400}

/* ---------- Layout ---------- */
.app{display:grid;grid-template-columns:var(--sb) 1fr;min-height:100vh}
.sb{background:#fff;border-right:1px solid var(--line);position:sticky;top:0;height:100vh;overflow-y:auto;display:flex;flex-direction:column}
.sb-top{padding:20px 20px 14px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--line2)}
.sb-logo{display:inline-flex;align-items:center;justify-content:center;background:var(--g);color:#fff;border-radius:10px;padding:8px 12px;font-size:15px}
.sb-sub{font-size:.72rem;color:var(--muted);line-height:1.2}
.nav{padding:10px 10px 24px;flex:1}
.nav-mod{font-size:.68rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin:14px 10px 4px}
.nav a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;color:var(--ink2);font-weight:500;font-size:.88rem}
.nav a:hover{background:var(--line2);text-decoration:none}
.nav a.on{background:var(--g-soft);color:var(--g-dark);font-weight:600}
.nav a .ic{width:18px;height:18px;flex:0 0 18px;opacity:.75}
.nav a .cnt{margin-left:auto;background:var(--g);color:#fff;border-radius:999px;font-size:.7rem;padding:1px 7px;font-weight:700}
.nav a .cnt.alert{background:var(--red)}
.sb-foot{padding:12px 16px;border-top:1px solid var(--line2);font-size:.75rem;color:var(--muted)}
.main{min-width:0;display:flex;flex-direction:column}
.sb-backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:90}
.top{position:sticky;top:0;z-index:20;background:rgba(244,246,245,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;padding:10px 24px;min-height:58px}
.top .tt{font-weight:700;font-size:1rem;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.top .burger{display:none}
.content{padding:22px 24px 60px;max-width:1440px;width:100%}
.content.narrow{max-width:980px}
.page-h{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.page-h .grow{flex:1;min-width:220px}
.page-h p{margin:.15rem 0 0;color:var(--muted)}
.crumbs{font-size:.8rem;color:var(--muted);margin-bottom:4px}.crumbs a{color:var(--muted)}

.iconbtn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:10px;border:1px solid var(--line);background:#fff;color:var(--ink2);cursor:pointer}
.iconbtn:hover{background:var(--line2)}
.iconbtn .dot{position:absolute;top:5px;right:5px;min-width:16px;height:16px;border-radius:9px;background:var(--red);color:#fff;font-size:.62rem;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 4px}
.usermenu{position:relative}
.dd{position:absolute;right:0;top:44px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--sh-lg);min-width:240px;padding:6px;display:none;z-index:50}
.dd.open{display:block}
.dd a,.dd button{display:block;width:100%;text-align:left;padding:9px 12px;border-radius:8px;color:var(--ink);background:none;border:0;font:inherit;cursor:pointer}
.dd a:hover,.dd button:hover{background:var(--line2);text-decoration:none}
.dd .who{padding:10px 12px;border-bottom:1px solid var(--line2);margin-bottom:4px}

/* ---------- Cards ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);margin-bottom:16px}
.card-h{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line2);flex-wrap:wrap}
.card-h h2,.card-h h3{margin:0;flex:1}
.card-b{padding:16px 18px}
.card-b.tight{padding:0}
.card-f{padding:12px 18px;border-top:1px solid var(--line2);display:flex;gap:8px;flex-wrap:wrap;align-items:center;background:#FBFCFB;border-radius:0 0 var(--r) var(--r)}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.g-side{grid-template-columns:minmax(0,1fr) 360px}
.span2{grid-column:span 2}.span3{grid-column:span 3}.span-all{grid-column:1/-1}
.stack>*+*{margin-top:12px}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.row.between{justify-content:space-between}
.row .grow{flex:1}

.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;box-shadow:var(--sh)}
.kpi .k{font-size:.74rem;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.kpi .v{font-size:1.45rem;font-weight:700;margin-top:4px;font-variant-numeric:tabular-nums}
.kpi .s{font-size:.78rem;color:var(--muted)}
.kpi.red{border-color:#f3c2c2;background:var(--red-bg)}.kpi.orange{border-color:#f6d2b3;background:var(--orange-bg)}.kpi.ok{border-color:var(--g-line);background:var(--g-soft)}
a.kpi{display:block;color:inherit}a.kpi:hover{text-decoration:none;border-color:var(--g)}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:9px;border:1px solid var(--line);background:#fff;color:var(--ink);padding:8px 14px;font:inherit;font-weight:600;font-size:.86rem;cursor:pointer;line-height:1.2;white-space:nowrap;text-decoration:none!important}
.btn:hover{background:var(--line2)}
.btn:disabled,.btn.disabled{opacity:.5;cursor:not-allowed;pointer-events:none}
.btn-p{background:var(--g);border-color:var(--g);color:#fff}.btn-p:hover{background:var(--g-dark)}
.btn-d{background:#fff;border-color:#efc4c0;color:var(--bad)}.btn-d:hover{background:var(--bad-bg)}
.btn-w{background:var(--warn-bg);border-color:#f0d9a8;color:var(--warn)}
.btn-wa{background:#25D366;border-color:#25D366;color:#fff}.btn-wa:hover{background:#1fb457}
.btn-ghost{background:transparent;border-color:transparent;color:var(--g-dark)}.btn-ghost:hover{background:var(--g-soft)}
.btn-sm{padding:5px 10px;font-size:.78rem;border-radius:7px}
.btn-lg{padding:12px 20px;font-size:.95rem}
.btn-block{width:100%}
form.inline{display:inline}

/* ---------- Badges ---------- */
.badge{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:2px 10px;font-size:.74rem;font-weight:600;background:var(--line2);color:var(--ink2);white-space:nowrap}
.badge.ok{background:var(--ok-bg);color:var(--ok)}.badge.warn{background:var(--warn-bg);color:var(--warn)}.badge.bad{background:var(--bad-bg);color:var(--bad)}
.badge.info{background:var(--info-bg);color:var(--info)}.badge.muted{background:var(--line2);color:var(--muted)}.badge.orange{background:var(--orange-bg);color:var(--orange)}.badge.red{background:var(--red);color:#fff}
.dotc{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--muted)}.dotc.red{background:var(--red)}.dotc.orange{background:var(--orange)}.dotc.ok{background:var(--ok)}

/* ---------- Tables ---------- */
.tbl-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:.86rem}
.tbl th{text-align:left;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:700;padding:10px 12px;border-bottom:1px solid var(--line);background:#FAFBFA;white-space:nowrap}
.tbl td{padding:10px 12px;border-bottom:1px solid var(--line2);vertical-align:top}
.tbl tr:last-child td{border-bottom:0}
.tbl tr.click{cursor:pointer}.tbl tr.click:hover td{background:#FAFCFB}
.tbl tr.row-red td{background:#FFF3F3}.tbl tr.row-red td:first-child{box-shadow:inset 4px 0 0 var(--red)}
.tbl tr.row-orange td{background:#FFF8F0}.tbl tr.row-orange td:first-child{box-shadow:inset 4px 0 0 var(--orange)}
.tbl td.num,.tbl th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.tbl tfoot td{font-weight:700;background:#FAFBFA;border-top:1px solid var(--line)}
.tbl.compact td,.tbl.compact th{padding:6px 10px}

/* ---------- Forms ---------- */
.field{display:flex;flex-direction:column;gap:5px;min-width:0}
.field>label,.lbl{font-size:.76rem;font-weight:600;color:var(--ink2)}
.field .hint{font-size:.74rem;color:var(--muted)}
input:not([type]),input[type=text],input[type=number],input[type=email],input[type=tel],input[type=date],input[type=datetime-local],input[type=time],input[type=password],input[type=search],input[type=url],select,textarea{
  width:100%;border:1px solid #D5DCD8;border-radius:9px;padding:9px 11px;font:inherit;color:var(--ink);background:#fff;min-height:38px}
textarea{min-height:76px;resize:vertical}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--g);box-shadow:0 0 0 3px rgba(63,138,103,.15)}
input[readonly],textarea[readonly],input:disabled,select:disabled,textarea:disabled{background:#F4F6F5;color:var(--ink2)}
input[type=file]{font:inherit;font-size:.82rem;max-width:100%}
input[type=file]::file-selector-button{font:inherit;font-weight:600;font-size:.8rem;border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 12px;margin-right:10px;cursor:pointer;color:var(--ink)}
input[type=file]::file-selector-button:hover{background:var(--line2)}
input[type=checkbox],input[type=radio]{accent-color:var(--g);width:16px;height:16px}
.check{display:inline-flex;align-items:center;gap:8px;font-size:.88rem;cursor:pointer}
.fgrid{display:grid;gap:12px 14px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
.fgrid.c2{grid-template-columns:repeat(2,minmax(0,1fr))}.fgrid.c3{grid-template-columns:repeat(3,minmax(0,1fr))}.fgrid.c4{grid-template-columns:repeat(4,minmax(0,1fr))}
.req::after{content:" *";color:var(--bad)}
.seg{display:inline-flex;border:1px solid #D5DCD8;border-radius:9px;overflow:hidden;background:#fff}
.seg label{padding:7px 12px;cursor:pointer;font-size:.84rem;font-weight:500;border-right:1px solid #D5DCD8;display:flex;align-items:center;gap:6px}
.seg label:last-child{border-right:0}
.seg input{display:none}
.seg label:has(input:checked){background:var(--g);color:#fff}
.inline-form{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap}
.inline-form .field{flex:1;min-width:140px}

/* ---------- Alerts ---------- */
.alert{border-radius:10px;padding:11px 14px;margin-bottom:12px;border:1px solid;font-size:.88rem}
.alert.ok{background:var(--ok-bg);border-color:#bfe3cf;color:#1d5e3e}.alert.error,.alert.bad{background:var(--bad-bg);border-color:#f2c3bf;color:#8f2520}
.alert.warn{background:var(--warn-bg);border-color:#f0d9a8;color:#7a4e00}.alert.info{background:var(--info-bg);border-color:#c9daf8;color:#1b4b94}
.alert b{font-weight:700}
.flash-wrap{position:fixed;right:18px;bottom:18px;z-index:200;display:flex;flex-direction:column;gap:8px;max-width:420px}
.flash-wrap .alert{box-shadow:var(--sh-lg);margin:0;animation:fin .25s ease}
@keyframes fin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---------- Tabs ---------- */
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto}
.tabs a,.tabs button{padding:10px 14px;border:0;background:none;font:inherit;font-weight:600;color:var(--muted);border-bottom:2px solid transparent;cursor:pointer;white-space:nowrap;font-size:.88rem}
.tabs a.on,.tabs button.on{color:var(--g-dark);border-bottom-color:var(--g)}
.tabs a:hover{text-decoration:none;color:var(--ink)}
.tabpane{display:none}.tabpane.on{display:block}

/* ---------- Misc ---------- */
.empty{text-align:center;padding:36px 16px;color:var(--muted)}
.empty .big{font-size:2rem;opacity:.35}
.dl{display:grid;grid-template-columns:minmax(120px,max-content) 1fr;gap:6px 16px;font-size:.88rem;margin:0}
.dl dt{color:var(--muted);font-weight:500}.dl dd{margin:0;font-weight:500;word-break:break-word}
.pill-list{display:flex;flex-wrap:wrap;gap:6px}
.thumbs{display:flex;flex-wrap:wrap;gap:8px}
.thumbs a,.thumbs .th{display:block;width:92px;height:92px;border-radius:8px;overflow:hidden;border:1px solid var(--line);background:#fafafa;position:relative}
.thumbs img{width:100%;height:100%;object-fit:cover}
.thumbs .pdf{display:flex;align-items:center;justify-content:center;font-weight:700;color:var(--bad);font-size:.8rem;height:100%}
.progress{height:8px;border-radius:99px;background:var(--line2);overflow:hidden}
.progress>span{display:block;height:100%;background:linear-gradient(90deg,#34a36f,#2F6E51);border-radius:99px}
.progress.over>span{background:var(--red)}
.cap-bar{height:6px;border-radius:9px;background:var(--line2);overflow:hidden;margin-top:4px}.cap-bar span{display:block;height:100%;background:var(--g)}.cap-bar.over span{background:var(--red)}
.list-plain{list-style:none;margin:0;padding:0}.list-plain li{padding:8px 0;border-bottom:1px solid var(--line2)}.list-plain li:last-child{border-bottom:0}
.note{background:#FAFBF9;border:1px dashed var(--line);border-radius:10px;padding:10px 12px;font-size:.86rem}
.sticky-actions{position:sticky;bottom:0;background:rgba(255,255,255,.96);backdrop-filter:blur(6px);border-top:1px solid var(--line);padding:12px 18px;display:flex;gap:8px;justify-content:flex-end;z-index:5;border-radius:0 0 var(--r) var(--r)}
.timeline{list-style:none;margin:0;padding:0 0 0 18px;border-left:2px solid var(--line)}
.timeline li{position:relative;padding:0 0 14px 14px}
.timeline li::before{content:"";position:absolute;left:-25px;top:3px;width:12px;height:12px;border-radius:50%;background:#fff;border:2px solid var(--line)}
.timeline li.done::before{background:var(--g);border-color:var(--g)}
.timeline li.act::before{background:#fff;border-color:var(--info);box-shadow:0 0 0 3px var(--info-bg)}
.chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:999px;padding:3px 10px;font-size:.78rem;background:#fff}
.search{position:relative}.search input{padding-left:34px}.search svg{position:absolute;left:10px;top:10px;width:16px;height:16px;opacity:.5}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:12px}
.toolbar .field{min-width:150px}
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end}
.filters .field{min-width:150px;flex:0 1 200px}
.op-sheet-preview{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
dialog.modal{border:0;border-radius:16px;padding:0;box-shadow:var(--sh-lg);width:min(640px,94vw);max-height:90vh}
dialog.modal.wide{width:min(780px,96vw)}
dialog.modal::backdrop{background:rgba(20,30,28,.45)}
dialog.modal .card-h{position:sticky;top:0;background:#fff;z-index:1}
.x{background:none;border:0;font-size:1.4rem;line-height:1;cursor:pointer;color:var(--muted)}
.steps{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0}
.step{font-size:.72rem;padding:3px 8px;border-radius:6px;background:var(--line2);color:var(--muted);font-weight:600}
.step.done{background:var(--ok-bg);color:var(--ok)}.step.now{background:var(--info-bg);color:var(--info)}
.proc-card{border:1px solid var(--line);border-radius:12px;padding:14px;background:#fff;margin-bottom:10px}
.proc-card.hl{border-color:var(--g);box-shadow:0 0 0 3px var(--g-soft)}
.proc-card .acts{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
/* v2.12.1: número de OP en cada tarjeta, OP de una asignación varia, búsqueda y «volver al mismo lugar» */
.op-tag{display:inline-block;font-size:.74rem;font-weight:700;color:var(--g-dark);background:var(--g-soft);border:1px solid var(--g-line);border-radius:6px;padding:1px 7px;margin-right:8px;vertical-align:2px;white-space:nowrap}
.misc-op{display:flex;align-items:center;gap:0;flex-wrap:wrap;margin-bottom:4px;font-size:.9rem}
.op-filter{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 12px}.op-filter input{max-width:420px;flex:1;min-width:220px}
.kp-flash{animation:kpflash 2s ease}
@keyframes kpflash{0%,35%{box-shadow:0 0 0 4px #F2B84B;border-color:#E09A1A}100%{}}
.op-link{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:.84rem;margin-top:2px}
.lane{border:1px solid var(--line);border-radius:12px;background:#fff;padding:12px;min-width:0}
.lane h4{display:flex;align-items:center;gap:6px;margin-bottom:6px}
.lane .task{border:1px solid var(--line2);background:#FAFBFA;border-radius:8px;padding:8px 10px;margin-top:6px;font-size:.82rem}
.cal{width:100%;border-collapse:collapse;font-size:.8rem}
.cal th,.cal td{border:1px solid var(--line2);padding:6px;text-align:center}
.cal td.lo{background:#F2F8F5}.cal td.mid{background:#DDF0E6}.cal td.hi{background:#FFE9D6}.cal td.over{background:#FAD4D4;font-weight:700}
.cal th{background:#FAFBFA;font-weight:600}
.cal td:first-child,.cal th:first-child{text-align:left;white-space:nowrap}

/* ---------- Login ---------- */
.auth{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:linear-gradient(160deg,#EEF5F1 0%,#F7F8F7 60%)}
.auth-card{width:min(420px,100%);background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:var(--sh-lg);padding:32px}
.auth-logo{display:flex;flex-direction:column;align-items:center;gap:6px;margin-bottom:22px}
.auth-logo .sb-logo{font-size:22px;padding:12px 18px;border-radius:12px}

/* ---------- Proforma editor ---------- */
.pf-sheet{background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--sh);margin-bottom:18px;overflow:hidden}
.pf-head{background:var(--g);color:#fff;padding:10px 16px;display:flex;align-items:center;gap:10px}
.pf-head input{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.35);color:#fff;font-weight:600;text-align:center}
.pf-head input::placeholder{color:rgba(255,255,255,.75)}
.pf-body{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:18px;padding:16px}
.canvas-wrap{position:relative}
.canvas{position:relative;width:100%;background:#fff;border:1px dashed #b9c8c0;border-radius:6px;overflow:hidden;touch-action:none;user-select:none;background-image:linear-gradient(#f1f4f2 1px,transparent 1px),linear-gradient(90deg,#f1f4f2 1px,transparent 1px);background-size:5% 5%}
.canvas .el{position:absolute;border:1px solid transparent;cursor:move;box-sizing:border-box}
.canvas .el.sel{border-color:var(--g);box-shadow:0 0 0 1px var(--g)}
.canvas .el img{width:100%;height:100%;object-fit:contain;pointer-events:none;display:block}
.canvas .el .cap{position:absolute;left:0;right:0;top:100%;text-align:center;font-size:9px;line-height:1.2;color:#333;padding-top:2px;pointer-events:none}
.canvas .el .cap b{display:block;font-size:9px}
.canvas .el.txt{display:flex;align-items:center;justify-content:center;text-align:center;font-size:10px;color:#333;padding:2px;white-space:pre-wrap;overflow:hidden}
.canvas .h{position:absolute;width:12px;height:12px;background:#fff;border:2px solid var(--g);border-radius:3px;right:-6px;bottom:-6px;cursor:nwse-resize;display:none;touch-action:none}
.canvas .h.h-nw{left:-6px;top:-6px;right:auto;bottom:auto}.canvas .h.h-ne{right:-6px;top:-6px;bottom:auto;cursor:nesw-resize}.canvas .h.h-sw{left:-6px;bottom:-6px;right:auto;cursor:nesw-resize}
.canvas .el.sel .h{display:block}
.canvas-tools{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;align-items:center}
.canvas-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:.85rem;pointer-events:none;text-align:center;padding:20px}
.el-props{border:1px solid var(--line);border-radius:10px;padding:10px;margin-top:8px;background:#FAFBFA;display:none}
.el-props.on{display:block}
.costbox{background:#FBFCF8;border:1px solid #e8e9dc;border-radius:12px;padding:12px;margin-top:10px}
.costbox .calc{display:grid;grid-template-columns:1fr auto;gap:4px 12px;font-size:.84rem}
.costbox .calc .v{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.costbox .calc .sep{grid-column:1/-1;border-top:1px dashed #ddd;margin:3px 0}
.save-state{font-size:.78rem;color:var(--muted)}

/* ---------- Celdas visibles, celular con prefijo, arrastrar imágenes ---------- */
.phone-in{display:flex;gap:6px;min-width:0}.phone-in select{flex:0 0 auto;width:118px;padding-right:4px}.phone-in input{flex:1;min-width:0}
.seg.sm label{padding:6px 9px;font-size:.78rem;white-space:nowrap}
.dprices{display:grid;grid-template-columns:auto minmax(0,1fr) minmax(0,1fr);gap:6px 8px;align-items:center}
.dprices .lbl{font-size:.74rem}.dprices .badge{font-size:.66rem;padding:1px 6px;margin-left:2px}
.cell-h{display:flex;align-items:center;justify-content:space-between;gap:8px}
.vis{display:inline-flex;align-items:center;gap:5px;font-size:.72rem;font-weight:600;color:var(--muted);cursor:pointer;white-space:nowrap}
.vis input{width:14px;height:14px}
.pf-head .vis{color:rgba(255,255,255,.9)}
.cell-off input:not([type=checkbox]),.cell-off textarea,.cell-off select,.cell-off .details{opacity:.45}
.cell-off .cell-h label:first-child,.cell-off>.cell-h .lbl{text-decoration:line-through;color:var(--muted)}
.pf-head input.m-off{opacity:.55;text-decoration:line-through}
.canvas-wrap .drop-hint{display:none;position:absolute;inset:0;border:2px dashed var(--g);border-radius:6px;background:rgba(63,138,103,.10);color:var(--g-dark);font-weight:700;align-items:center;justify-content:center;pointer-events:none;font-size:1rem}
.canvas-wrap.drop .drop-hint{display:flex}
.canvas:focus{outline:2px solid var(--g-line);outline-offset:2px}
tr.row-green td{background:#F1FAF5}tr.row-green td:first-child{box-shadow:inset 4px 0 0 var(--ok)}
tr.row-yellow td{background:#FFFBEA}tr.row-yellow td:first-child{box-shadow:inset 4px 0 0 #E0B400}
.badge.yellow{background:#FFF3C4;color:#7a5a00}
.st-dot{display:inline-block;width:10px;height:10px;border-radius:50%;vertical-align:middle;margin-right:6px}
.st-dot.red{background:var(--red)}.st-dot.yellow{background:#E0B400}.st-dot.green{background:var(--ok)}.st-dot.grey{background:#C3CBC7}

/* ---------- Selector de material con búsqueda ---------- */
.combo{position:relative;display:flex;gap:6px;min-width:0;flex-wrap:nowrap}
.combo .cb-cat{flex:0 0 auto;width:190px}
.combo .cb-box{position:relative;flex:1;min-width:0}
.combo .cb-q{width:100%}
.combo .cb-list{position:absolute;left:0;right:0;top:calc(100% + 3px);background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--sh-lg);max-height:280px;overflow-y:auto;z-index:60;display:none}
.combo.open .cb-list{display:block}
.combo .cb-opt{padding:8px 11px;cursor:pointer;display:flex;justify-content:space-between;gap:10px;font-size:.86rem;border-bottom:1px solid var(--line2)}
.combo .cb-opt:last-child{border-bottom:0}
.combo .cb-opt.act,.combo .cb-opt:hover{background:var(--g-soft)}
.combo .cb-opt .m{color:var(--muted);font-size:.76rem;white-space:nowrap}
.combo .cb-empty{padding:10px 12px;color:var(--muted);font-size:.84rem}
.combo .cb-q.chosen{border-color:var(--g-line);background:#FAFDFB;font-weight:600}
dialog .combo .cb-list{top:auto;bottom:calc(100% + 3px);max-height:230px}
@media (max-width:860px){.combo{flex-wrap:wrap}.combo .cb-cat{width:100%}}

/* ---------- Listado de compras ---------- */
.sup-h td{background:var(--g-soft)!important;font-weight:700;color:var(--g-dark)}
.print-sheet{background:#fff;max-width:900px;margin:0 auto;padding:28px 34px;border:1px solid var(--line);border-radius:12px}
.print-sheet .ph{display:flex;align-items:center;gap:16px;border-bottom:3px solid var(--g);padding-bottom:12px;margin-bottom:14px}
.print-sheet .ph .logo{background:var(--g);color:#fff;padding:10px 14px;border-radius:8px;font-size:18px}
.print-sheet .ph h1{margin:0;font-size:1.25rem;letter-spacing:.06em}
.print-sheet .sig{display:grid;grid-template-columns:1fr 1fr;gap:40px;margin-top:60px}
.print-sheet .sig div{border-top:1px solid var(--ink);padding-top:6px;text-align:center;font-size:.82rem}
@media print{.print-sheet{border:0;padding:0;max-width:none}.content{max-width:none}}

/* ---------- Responsive ---------- */
@media (max-width:1100px){.g-side{grid-template-columns:minmax(0,1fr)}.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.pf-body{grid-template-columns:1fr}}
@media (max-width:860px){
  .app{grid-template-columns:1fr}
  .sb{position:fixed;left:0;top:0;bottom:0;width:280px;z-index:100;transform:translateX(-100%);transition:transform .2s;box-shadow:var(--sh-lg)}
  .sb.open{transform:none}
  .sb-backdrop.open{display:block}
  .top{padding:8px 14px}.top .burger{display:inline-flex}
  .content{padding:16px 14px 70px}
  .g2,.g3,.g4,.fgrid.c2,.fgrid.c3,.fgrid.c4{grid-template-columns:1fr}
  .span2,.span3{grid-column:auto}
  .dl{grid-template-columns:1fr}.dl dt{margin-top:6px}
  .tbl.stack-m thead{display:none}
  .tbl.stack-m tr{display:block;border-bottom:1px solid var(--line);padding:8px 0}
  .tbl.stack-m td{display:flex;justify-content:space-between;gap:10px;border:0;padding:4px 12px}
  .tbl.stack-m td::before{content:attr(data-l);font-size:.72rem;color:var(--muted);font-weight:600;text-transform:uppercase}
  .tbl.stack-m td.num{text-align:right}
}
@media print{
  .sb,.top,.no-print,.flash-wrap{display:none!important}
  .app{display:block}.content{padding:0}
  body{background:#fff}.card{box-shadow:none}
}

/* ---------- Gráficos simples ---------- */
.chart{padding:6px 0 0}
.bars{display:flex;align-items:flex-end;gap:2px;height:150px;border-bottom:1px solid var(--line);position:relative}
.bars .b{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;position:relative;cursor:default;min-width:0}
.bars .b span{display:block;width:70%;max-width:34px;background:var(--g);border-radius:4px 4px 0 0;min-height:1px;transition:opacity .15s}
.bars .b:hover span{opacity:.75}
.bars .b .val{font-size:.66rem;color:var(--ink2);margin-bottom:2px;white-space:nowrap}
.bars .b:last-child .val{align-self:flex-end}
.bars .b:last-child[data-tip]:hover::after{left:auto;right:0;transform:none}
.bars .b[data-tip]:hover::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 4px);left:50%;transform:translateX(-50%);background:#1D2A2F;color:#fff;font-size:.72rem;padding:5px 8px;border-radius:6px;white-space:nowrap;z-index:5;pointer-events:none}
.bars-x{display:flex;gap:2px;margin-top:4px}.bars-x div{flex:1;text-align:center;font-size:.64rem;color:var(--muted);min-width:0;overflow:hidden}
/* v2.6 · recepción por proceso anterior y entrega por piezas */
.acts .recv-row,.acts .split-box{flex-basis:100%}
.recv-row{border:1px solid #f0d9a8;background:var(--warn-bg);border-radius:10px;padding:8px 10px}
.split-box{border:1px dashed var(--line);border-radius:10px;padding:8px 10px;background:#FAFBF9}
.split-box summary{color:var(--muted)}
.inputs-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.inputs-list .chip{font-size:.78rem;border:1px solid var(--line);border-radius:999px;padding:2px 9px;background:#fff}
.inputs-list .chip.ok{border-color:#bfe3cf;background:var(--ok-bg);color:#1d5e3e}
.inputs-list .chip.warn{border-color:#f0d9a8;background:var(--warn-bg);color:#7a4e00}
.check.wa-opt{align-items:flex-start;border:1px solid #bfe3cf;background:var(--ok-bg);border-radius:10px;padding:10px 12px}
.check.wa-opt input{margin-top:3px}
/* Observaciones de los operarios en sus tareas */
.notes-list{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:6px}
.notes-list li{background:#FFFBEF;border:1px solid #F1E4BF;border-radius:var(--r-sm);padding:6px 10px;font-size:.84rem;line-height:1.35}
.notes-list li .who{font-weight:600}
.notes-list li .when{color:var(--muted);font-size:.76rem;margin-left:4px}
.notes-list img{display:block;margin-top:6px;max-width:120px;max-height:90px;border-radius:6px;border:1px solid var(--line);object-fit:cover}
.notes-list.compact li{padding:4px 8px;font-size:.78rem}
.note-add{margin-top:8px}
.note-add summary{cursor:pointer;color:var(--g-dark);font-weight:600;font-size:.82rem}
.note-add textarea{width:100%}
.stopped{border-left:4px solid var(--bad)}
.sched-rows{display:grid;gap:6px}
.sched-row{display:grid;grid-template-columns:minmax(130px,1.2fr) minmax(90px,.8fr) minmax(90px,.8fr) minmax(150px,1.1fr) auto;gap:6px;align-items:center}
.sched-row .dur{display:flex;gap:4px;align-items:center;flex-wrap:nowrap}
.sched-head{font-size:.72rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.02em}
.person-picks{display:flex;flex-wrap:wrap;gap:6px;max-height:180px;overflow:auto;padding:2px}
.person-picks label{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:999px;padding:4px 10px;font-size:.82rem;background:#fff;cursor:pointer}
.person-picks label:has(input:checked){border-color:var(--g);background:var(--g-soft);color:var(--g-dark)}
@media (max-width:700px){.sched-row{grid-template-columns:1fr 1fr}.sched-row .dur{grid-column:1/-1}.sched-head{display:none}}
.sched-row.bad input[data-k=end]{border-color:var(--bad)}
/* v2.10 · coordinación de entrega */
.sched-box{background:#F0FDF4;border:1px solid #bbf7d0;border-radius:12px;padding:12px 14px}.sched-box .k{font-size:.72rem;letter-spacing:.08em;color:#15803D;font-weight:700}.sched-box .v{font-size:1.2rem;font-weight:700;margin-top:2px}.sched-box .t{font-size:.95rem;margin-top:2px}
/* v2.10 · resumen de cotización */
.pf-summary .sum-tbl td{vertical-align:middle}.pf-summary .sum-tbl tfoot td{border-top:0;padding-top:4px;padding-bottom:4px}
.rank{display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:28px;border-radius:50%;background:var(--green,#3F8A67);color:#fff;font-weight:700;font-size:.9rem;margin-right:2px}
/* v2.10 · fotos del producto terminado */
.photo-proto{margin-top:10px;border:1px dashed #bcd9c8;border-radius:12px;padding:12px;background:#FAFCFB}
.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px;margin-top:10px}
.photo-slot{border:1px solid var(--line,#e5e7eb);border-radius:10px;padding:10px;background:#fff;display:flex;flex-direction:column;gap:6px}
.photo-slot.need{border-color:#f0c36d;background:#FFFBF0}.photo-slot.done{border-color:#bcd9c8}
.photo-slot .ph-h{display:flex;gap:8px;align-items:center}.photo-slot .ph-img img{width:100%;height:110px;object-fit:cover;border-radius:8px;display:block}
.tiny{font-size:.74rem;line-height:1.3}.ph-hint{min-height:2.6em}
.ph-fig{margin:0;width:150px}.ph-fig .th{width:150px;height:110px}.ph-fig figcaption{margin-top:4px}
.op-search{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:0 0 12px}.op-search .field{margin:0}

/* ---------- v2.11 Cotizador y Costos productos ---------- */
.pub-state{display:flex;flex-direction:column;gap:2px;align-items:flex-start;padding:8px 12px;border-radius:10px;border:1px solid var(--line);background:#fff;font-size:.8rem;max-width:300px}
.pub-state b{font-size:.86rem}.pub-state span{color:var(--muted)}.pub-state .btn{margin-top:4px}
.pub-state.ok{border-color:var(--g-line);background:var(--g-soft)}.pub-state.warn{border-color:#F2E2A0;background:#FFFBEA}.pub-state.bad{border-color:#f3c2c2;background:var(--red-bg)}
.seg a{padding:6px 12px;font-size:.84rem;font-weight:500;border-right:1px solid #D5DCD8;color:var(--ink2);text-decoration:none}.seg a:last-child{border-right:0}.seg a.on{background:var(--g);color:#fff}
.qt-thumb{width:56px;height:44px;object-fit:contain;border-radius:6px;background:#F3F5F4;display:block}
.qt-thumb.empty{display:flex;align-items:center;justify-content:center;font-size:.62rem;color:var(--muted);text-align:center}
.qt-edit input:not([type=checkbox]),.qt-edit select,.qt-edit textarea{padding:5px 7px;font-size:.84rem;min-height:0}
.qt-edit textarea{width:100%;min-width:260px;resize:vertical}
.qt-edit tr.qt-new td{background:#FAFCFB}
.qt-edit input.missing{border-color:var(--bad);background:var(--bad-bg)}
.qt-comps td{vertical-align:middle}.qt-fcell{min-width:280px}
.qt-sum{display:flex;flex-wrap:wrap;gap:6px 16px;margin:12px 0;font-size:.86rem;color:var(--ink2)}.qt-sum b{color:var(--ink)}
.qt-test .inline-form{align-items:flex-end}
.qt-clip{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qt-top{grid-template-columns:minmax(0,2.2fr) minmax(0,1fr)}
.qt-photo{width:100%;max-height:260px;object-fit:contain;border-radius:8px;background:#F3F5F4;display:block}
.qt-photo.empty{height:160px;display:flex;align-items:center;justify-content:center;color:var(--muted)}
.qt-mirrors{display:flex;flex-wrap:wrap;gap:6px 14px}
.neg{color:var(--bad)}
.span3{grid-column:span 3}
@media (max-width:900px){.qt-top{grid-template-columns:1fr}.span3{grid-column:auto}}
.qt-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:16px;align-items:start}
.qt-result{position:sticky;top:12px}
.qt-n{display:inline-flex;width:22px;height:22px;border-radius:50%;background:var(--g);color:#fff;font-size:.78rem;align-items:center;justify-content:center;margin-right:6px}
.qt-picker{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:10px;max-height:470px;overflow:auto;padding:2px}
.qt-card{display:flex;flex-direction:column;gap:4px;text-align:left;border:1px solid var(--line);border-radius:10px;background:#fff;padding:6px;cursor:pointer;font:inherit;color:inherit}
.qt-card:hover{border-color:var(--g)}.qt-card.on{border-color:var(--g);box-shadow:0 0 0 2px var(--g-soft)}
.qt-card img,.qt-card .ph{width:100%;height:92px;object-fit:contain;background:#F3F5F4;border-radius:6px}
.qt-card .ph{display:flex;align-items:center;justify-content:center;font-size:.7rem;color:var(--muted)}
.qt-card b{font-size:.8rem;line-height:1.2}.qt-card span{font-size:.7rem;color:var(--muted)}
.qt-chosen{display:flex;gap:14px;align-items:center}
.qt-chosen img{width:150px;max-height:130px;object-fit:contain;background:#F3F5F4;border-radius:8px}
.qt-chosen .btn{margin-top:6px}
.qt-piece{padding:8px 0;font-weight:600}
.qt-prices td,.qt-prices th{padding:6px 8px}.qt-prices tr.qt-main td{font-weight:700;font-size:1rem}
.qt-break{margin:12px 0 0;font-size:.84rem}
.qt-what{margin-bottom:10px}
.qt-addsum{background:var(--g-soft);border:1px solid var(--g-line);border-radius:10px;padding:10px 12px}
.qt-pflist{display:flex;flex-direction:column;gap:6px;max-height:240px;overflow:auto}
.qt-pf{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;text-align:left;border:1px solid var(--line);border-radius:8px;background:#fff;padding:8px 10px;cursor:pointer;font:inherit}
.qt-pf.on{border-color:var(--g);background:var(--g-soft)}
@media (max-width:980px){.qt-layout{grid-template-columns:1fr}.qt-result{position:static}}
.qt-comps select[data-base]{min-width:112px}
.qt-comps textarea{min-width:380px}
.qt-comps td:nth-child(2) input{min-width:150px!important;width:150px}
.qt-mbar{display:none}
@media (max-width:980px){.qt-mbar:not([hidden]){display:flex;position:fixed;left:10px;right:10px;bottom:10px;z-index:30;justify-content:space-between;align-items:center;gap:10px;background:var(--g);color:#fff;border-radius:12px;padding:12px 16px;box-shadow:0 6px 20px rgba(0,0,0,.18);text-decoration:none;font-size:.9rem}.qt-layout{padding-bottom:64px}}
.qt-edit select{min-width:112px}
/* ---------- v2.12 Asistencia del personal ---------- */
.att-who{display:flex;gap:10px;align-items:center}
.att-who img,.att-ini{width:40px;height:40px;border-radius:50%;object-fit:cover;background:var(--g-soft);flex:0 0 40px}
.att-ini{display:inline-flex;align-items:center;justify-content:center;font-weight:700;color:var(--g-dark);font-size:.8rem}
.att-mark{display:inline-flex;gap:6px;align-items:center}.att-mark img{width:30px;height:30px;border-radius:6px;object-fit:cover}
.att-mark.flag b{color:var(--bad)}
.att-people{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px}
.att-person .card-b{display:flex;flex-direction:column;gap:4px;align-items:flex-start}
.att-ref{width:100%;height:150px;object-fit:cover;border-radius:10px;background:#F3F5F4;margin-bottom:6px}
.att-ref.empty{display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:.8rem}
.att-photo-form{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}
.att-compare{display:flex;gap:6px}.att-compare img,.att-ref-s{width:64px;height:64px;object-fit:cover;border-radius:8px;background:#F3F5F4}
.att-ref-s.empty{display:inline-flex;align-items:center;justify-content:center;font-size:.62rem;color:var(--muted);text-align:center}
/* tablet */
body.kiosk{background:#F1F5F3;min-height:100vh}
.k-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 22px;background:#fff;border-bottom:1px solid var(--line)}
.k-brand{display:flex;flex-direction:column;gap:2px}.k-brand .brand{background:var(--g);color:#fff;padding:6px 12px;border-radius:8px;letter-spacing:.3em;font-family:Georgia,serif;align-self:flex-start}.k-brand span:last-child{font-size:.8rem;color:var(--muted)}
.k-clock{text-align:center}#kTime{font-size:2.6rem;font-weight:700;font-variant-numeric:tabular-nums;line-height:1}.k-date{color:var(--muted)}
.k-tools{display:flex;gap:6px}
.k-main{padding:18px 22px 40px}
.k-help{text-align:center;color:var(--ink2);font-size:1.15rem;margin:4px 0 12px}
.k-search{max-width:420px;margin:0 auto 16px}.k-search input{width:100%;font-size:1.1rem;padding:12px 16px;border-radius:12px}
.k-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px}
.k-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 10px;border:2px solid var(--line);border-radius:16px;background:#fff;cursor:pointer;font:inherit;color:inherit;text-align:center;touch-action:manipulation}
.k-card:active{transform:scale(.98)}
.k-card img,.k-ini{width:96px;height:96px;border-radius:50%;object-fit:cover;background:var(--g-soft)}
.k-ini{display:inline-flex;align-items:center;justify-content:center;font-size:1.8rem;font-weight:700;color:var(--g-dark)}
.k-card b{font-size:1.02rem}.k-st{font-size:.82rem;color:var(--muted)}
.k-card.st-trabajando{border-color:var(--g)}.k-card.st-almuerzo{border-color:#E8B54A}.k-card.st-salio{opacity:.65}
.k-over{position:fixed;inset:0;background:rgba(20,30,26,.55);display:flex;align-items:center;justify-content:center;z-index:50;padding:16px}
.k-panel{position:relative;background:#fff;border-radius:20px;padding:22px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:22px;width:min(1000px,100%);max-height:96vh;overflow:auto}
.k-x{position:absolute;right:30px;top:28px;width:44px;height:44px;border:1px solid var(--line);border-radius:50%;background:#fff;font-size:1.6rem;line-height:1;cursor:pointer;color:var(--ink2);box-shadow:0 2px 8px rgba(0,0,0,.15);z-index:3}
.k-ref img{width:100%;max-height:300px;object-fit:cover;border-radius:14px}.k-ref{display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--muted)}
.k-ini.big{width:160px;height:160px;font-size:3rem}
.k-side h2{text-align:center;margin:12px 0}
.k-marks{display:flex;flex-direction:column;gap:6px}.k-marks div{display:flex;justify-content:space-between;padding:8px 12px;border-radius:10px;background:#F6F8F7}.k-marks div.on{background:var(--g-soft)}
.k-video{position:relative;border-radius:14px;overflow:hidden;background:#111;aspect-ratio:4/3}
.k-video video{width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}
.k-frame{position:absolute;inset:12% 25%;border:3px dashed rgba(255,255,255,.6);border-radius:50%}
.k-camerr{position:absolute;inset:auto 0 0 0;background:rgba(0,0,0,.65);color:#fff;padding:10px;font-size:.85rem;text-align:center}
.k-hint{text-align:center;color:var(--muted);margin:10px 0}
.k-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.k-act{padding:20px 10px;font-size:1.15rem;font-weight:700;border-radius:14px;border:2px solid var(--line);background:#fff;cursor:pointer;touch-action:manipulation}
.k-act.main{background:var(--g);border-color:var(--g);color:#fff}.k-act:disabled{opacity:.35;cursor:default}.k-act.wait{opacity:.6}
.k-done{background:#fff;border-radius:20px;padding:40px 30px;text-align:center;font-size:1.4rem;max-width:560px}
.k-check{width:90px;height:90px;border-radius:50%;background:var(--g);color:#fff;font-size:3rem;display:flex;align-items:center;justify-content:center;margin:0 auto 16px}
@media (max-width:760px){.k-panel{grid-template-columns:1fr}.k-head{flex-wrap:wrap}#kTime{font-size:2rem}}
.att-rep td:first-child,.att-board td:first-child{min-width:210px}
/* v2.12.2: líneas de «Registrar compra» con IVA */
.buy-head,.buy-line{display:grid;grid-template-columns:minmax(0,1fr) 96px 120px 104px 96px;gap:6px;align-items:start}
.buy-head{font-size:.74rem;font-weight:600;color:var(--muted);margin-bottom:4px}.buy-head .num{text-align:right}
.buy-line{margin-bottom:6px}.buy-line input{width:100%;min-width:0}.buy-line .bl-f{display:block;min-width:0;margin:0}.buy-line .bl-l{display:none}
.buy-line .bl-t{text-align:right}.buy-line .lt{display:block;text-align:right;padding-top:10px;font-size:.86rem}
.buy-tot{display:grid;gap:2px;text-align:right;font-size:.9rem}.buy-tot .mono{display:inline-block;min-width:96px}
@media (max-width:720px){.buy-head{display:none}.buy-line{grid-template-columns:1fr 1fr;border:1px solid var(--line);border-radius:10px;padding:8px}.buy-line .bl-item{grid-column:1/-1}
  .buy-line .bl-l{display:block;font-size:.72rem;font-weight:600;color:var(--muted);margin-bottom:2px}.buy-line .lt{padding-top:9px;font-weight:700}}
/* v2.13: varias fotos por tipo en el protocolo de empaque */
.photo-slot .ph-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:6px}.photo-slot .ph-item{display:flex;flex-direction:column;gap:2px}
.photo-slot .ph-list .ph-img img{height:90px}
/* v2.13: anticipo y previo entrega en el editor de proformas */
.adv-box{margin-top:12px;padding-top:10px;border-top:1px solid var(--line2);display:flex;flex-direction:column;gap:6px}.adv-box .dl{margin:2px 0 0}
.sum-tbl tr.adv-row td{background:#EAF1F8}
/* v2.13: Programación de entregas (Logística) */
.ag-day{border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:#fff}.ag-day.today{border-color:var(--g);box-shadow:0 0 0 3px var(--g-soft)}
.ag-date{margin-bottom:6px}
.ag-item{display:grid;grid-template-columns:96px minmax(0,1fr) auto;gap:10px;align-items:center;padding:8px 10px;border-radius:8px;color:inherit;text-decoration:none;border-left:4px solid #E09A1A;margin-top:4px;background:#FFFBF3}
.ag-item.confirmada,.ag-item.transito{border-left-color:var(--g);background:var(--g-soft)}.ag-item.late{background:#FDECEA}
.ag-item:hover{filter:brightness(.97);text-decoration:none}.ag-main{display:flex;flex-direction:column;min-width:0}.ag-main .small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ag-time{font-size:.86rem;font-weight:600}.ag-tags{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}
.dp-tbl tr.hl td{background:#F2F8FC}
@media (max-width:860px){.tbl.stack-m.dp-tbl td{display:block;white-space:normal}.tbl.stack-m.dp-tbl td::before{display:block;margin-bottom:2px}}
@media (max-width:720px){.ag-item{grid-template-columns:1fr;gap:4px}.ag-tags{justify-content:flex-start}.ag-main .small{white-space:normal}}
/* v2.14: diseño oculto e instalación en el editor de proformas */
.pf-sheet.pf-excluded{opacity:.62;border-style:dashed}.pf-sheet.pf-excluded:hover{opacity:.9}
.install-box{margin-top:10px;padding-top:8px;border-top:1px dashed var(--line)}
/* v2.14 · fechas y horarios de un proceso (Mis procesos) */
.slot-list{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
.slot-list .slot{font-size:.74rem;border:1px solid var(--line);border-radius:999px;padding:1px 8px;background:var(--card);color:var(--ink)}
.slot-list .slot.today{border-color:var(--g);background:var(--g-soft);font-weight:600}
.slot-list .slot.past{opacity:.55}
.undo-flash{box-shadow:0 0 0 3px var(--warn-bg),0 0 0 4px var(--warn) !important;transition:box-shadow .2s}
.k-review{margin-top:14px;font-size:1rem;color:var(--warn);background:var(--warn-bg);border-radius:12px;padding:10px 14px}
/* v2.16 · verificación en dos pasos */
.otp-input{font-size:1.6rem;letter-spacing:.32em;text-align:center;font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;padding:10px 12px}
.otp-input::placeholder{letter-spacing:.32em;color:#c9cdca}
.mfa-steps{margin:0 0 12px;padding-left:20px;display:grid;gap:10px}
.mfa-qr{display:flex;justify-content:center;margin:10px 0 6px}.mfa-qr svg{border:1px solid var(--line);border-radius:10px;width:200px;height:200px;max-width:100%}
.mfa-secret{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-weight:600;letter-spacing:.04em;user-select:all;background:var(--line2);padding:1px 6px;border-radius:6px;word-break:break-all}
.mfa-codes{list-style:none;margin:0;padding:12px;display:grid;grid-template-columns:repeat(2,1fr);gap:8px 16px;background:var(--line2);border-radius:10px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:1.02rem;text-align:center}
@media print{.auth{background:#fff;min-height:0}.auth-card{box-shadow:none;border:0}.auth-card .btn,.auth-card .check,.auth-card script{display:none}}
