/* Estilos del ERP. Tokens de color en :root (modo claro y oscuro). */
:root{color-scheme:light;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}body{margin:0}img{max-width:100%}[hidden]{display:none!important}
/* Layout: cabecera blanca con logo y pestañas subrayadas · hojas de trabajo sobre fondo gris claro · un solo acento azul marino */
:root{
  --band:#FFFFFF; --band-fg:#0F172A; --accent:#1E3A5F; --accent-ink:#1E3A5F; --on-accent:#FFFFFF;
  --bg:#F3F5F9; --surface:#FFFFFF; --surface-2:#F2F6FB; --line:#E3E6EB; --line-2:#EEF0F3; --fg:#0F172A; --muted:#64748B;
  --good:#166534; --good-bg:#F0FDF4; --warn:#92400E; --warn-bg:#FFFBEB; --bad:#B91C1C; --bad-bg:#FEF2F2; --info-bg:#F1F5F9;
  --f-display:"Geist",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif; --f-body:"Geist",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif; --f-mono:"Geist",ui-sans-serif,system-ui,sans-serif;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --band:#0E1525; --band-fg:#E5E9F0; --accent:#9DB7D5; --accent-ink:#C3D4E8; --on-accent:#0B1220;
  --bg:#0B1120; --surface:#111A2C; --surface-2:#142036; --line:#223049; --line-2:#1A263B; --fg:#E5E9F0; --muted:#93A1B5;
  --good:#7BC49A; --good-bg:#12291E; --warn:#E3B565; --warn-bg:#2C2312; --bad:#F29B91; --bad-bg:#2E1715; --info-bg:#17233A; color-scheme:dark}}
:root[data-theme="dark"]{
  --band:#0E1525; --band-fg:#E5E9F0; --accent:#9DB7D5; --accent-ink:#C3D4E8; --on-accent:#0B1220;
  --bg:#0B1120; --surface:#111A2C; --surface-2:#142036; --line:#223049; --line-2:#1A263B; --fg:#E5E9F0; --muted:#93A1B5;
  --good:#7BC49A; --good-bg:#12291E; --warn:#E3B565; --warn-bg:#2C2312; --bad:#F29B91; --bad-bg:#2E1715; --info-bg:#17233A; color-scheme:dark}
*{box-sizing:border-box}
body{background:var(--bg);color:var(--fg);font-family:var(--f-body);font-size:14px;line-height:1.5;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;letter-spacing:-.003em}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:10;background:var(--band)}
.wrap{max-width:1240px;margin:0 auto;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
header.top{background:var(--band);color:var(--band-fg);position:sticky;top:env(safe-area-inset-top,0px);z-index:5;border-bottom:1px solid var(--line)}
.top .wrap{display:flex;align-items:center;gap:24px;flex-wrap:wrap;padding-block:10px 0}
.brand{display:flex;align-items:center;gap:10px;padding-bottom:10px;color:var(--fg)}
.brand svg{width:34px;height:34px;flex:none;color:var(--accent)}
.brand .wm{display:flex;flex-direction:column;line-height:1}
.brand .wm b{font:650 19px/1 var(--f-display);letter-spacing:-.035em}
.brand .wm small{font:500 10.5px/1 var(--f-body);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-top:5px}
nav.tabs{display:flex;gap:2px;flex-wrap:nowrap;width:100%;overflow-x:auto;scrollbar-width:none;align-items:center;order:3;margin-top:4px}
nav.tabs::-webkit-scrollbar{display:none}
nav.tabs .navgrp{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);padding:0 8px 0 4px;white-space:nowrap;opacity:.8}
nav.tabs .navgrp:not(:first-child){margin-left:14px;padding-left:16px;border-left:1px solid var(--line)}
nav.tabs button{white-space:nowrap}
.who{margin-left:auto;display:flex;gap:8px;align-items:center;font-size:12px;color:var(--muted);padding-bottom:10px}
.who select{padding:5px 8px;font-size:12.5px}
nav.tabs button{background:transparent;border:0;color:var(--muted);font:500 13.5px var(--f-body);padding:12px 12px 13px;cursor:pointer;box-shadow:inset 0 -2px 0 transparent}
nav.tabs button:hover{color:var(--fg)}
nav.tabs button[aria-selected="true"]{color:var(--fg);box-shadow:inset 0 -2px 0 var(--fg)}
.storage{font-size:11px;color:var(--muted);order:2;margin:0 0 10px 12px;padding-bottom:0}
main{padding-block:20px 60px}
h1,h2,h3{font-family:var(--f-display);text-wrap:balance;margin:0}
h1{font-size:24px;font-weight:600;letter-spacing:-.025em} h2{font-size:15px;font-weight:600;letter-spacing:-.01em} h3{font-size:14px;font-weight:600}
.sub{color:var(--muted);font-size:13px;margin:4px 0 0}
.head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:18px}
.grid{display:grid;gap:16px}
.lbl{font-size:11px;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);font-weight:500}
.num,.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}
input,select,textarea{font:inherit;color:var(--fg);background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:7px 9px;min-width:0}
input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
input[type=number]{font-family:var(--f-mono);text-align:right}
textarea{width:100%;resize:vertical}
.field{display:flex;flex-direction:column;gap:4px;min-width:0}
.field span{font-size:12px;color:var(--muted)}
.btn{font:500 13px var(--f-body);border:1px solid var(--line);background:var(--surface);color:var(--fg);padding:7px 12px;border-radius:6px;cursor:pointer;white-space:nowrap}
.btn:hover{border-color:var(--accent)}
a.btn{text-decoration:none;display:inline-flex;align-items:center}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:500}
.btn.primary:hover{filter:brightness(1.06)}
.btn.ghost{border-color:transparent;background:transparent;color:var(--muted)}
.btn.ghost:hover{color:var(--fg)}
.btn.danger{color:var(--bad)}
.btn.sm{padding:4px 8px;font-size:12px}
.btn[disabled]{opacity:.5;cursor:not-allowed}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:6px;overflow:hidden}
.seg button{border:0;background:var(--surface);color:var(--muted);font:500 12px var(--f-body);padding:6px 10px;cursor:pointer}
.seg button+button{border-left:1px solid var(--line)}
.seg button[aria-pressed="true"]{background:var(--fg);color:var(--surface);font-weight:500}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:500;padding:2px 8px;border-radius:6px;border:1px solid var(--line);background:var(--surface);color:var(--muted);white-space:nowrap}
.chip::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.55}
.chip.good{color:var(--good)} .chip.warn{color:var(--warn)} .chip.bad{color:var(--bad)} .chip.info{color:var(--accent-ink)}
.tbl-wrap{overflow-x:auto;min-width:0}
table{border-collapse:collapse;width:100%}
th{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:500;text-align:left;padding:8px;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:middle}
td.r,th.r{text-align:right}
tr.off td{opacity:.45}
.note{font-size:12px;color:var(--muted)}
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(20px + env(safe-area-inset-bottom,0px));background:var(--fg);color:var(--surface);padding:10px 16px;border-radius:8px;font-size:13px;z-index:50;box-shadow:0 6px 24px rgba(0,0,0,.25)}

/* Resumen */
.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:14px 16px}
.kpi .v{font-size:26px;font-weight:600;letter-spacing:-.03em;margin-top:6px}
.kpi .d{font-size:12px;color:var(--muted);margin-top:2px}
.two{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:16px}
.bar{height:10px;border-radius:5px;background:var(--surface-2);overflow:hidden}
.bar i{display:block;height:100%;background:var(--accent);border-radius:5px}
.stage-row{display:grid;grid-template-columns:110px 1fr 120px;gap:10px;align-items:center;padding:6px 0}
.list-item{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}
.list-item:last-child{border-bottom:0}

/* Cotizador */
.quote-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px;align-items:start}
.side{position:sticky;top:calc(env(safe-area-inset-top,0px) + 76px);display:grid;gap:12px}
.client-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.block{background:var(--surface);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.block-h{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:12px 14px;background:var(--surface-2);border-bottom:1px solid var(--line)}
.block-h .idx{font-family:var(--f-mono);font-size:12px;color:var(--accent-ink);font-weight:500}
.block-h input.name{font-weight:600;font-family:var(--f-display);width:180px}
.block-b{padding:14px;display:grid;gap:14px}
.equip{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto minmax(0,1fr) minmax(0,1fr) minmax(0,1fr);gap:10px;align-items:end;padding:12px;border:1px dashed var(--line);border-radius:8px}
.equip .full{grid-column:1/-1}
.toggles{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
.toggles .t{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--muted)}
.lines td input[type=number]{width:72px}
.lines td select{padding:7px 4px}
.lines td input.desc{width:100%;min-width:230px;border-color:transparent;background:transparent;padding:5px 6px}
.lines td input.desc:hover,.lines td input.desc:focus{border-color:var(--line);background:var(--surface)}
.lines .price{color:var(--accent-ink)}
.lines td.c{width:34px;text-align:center}
.margins table td,.margins table th{padding:6px 6px}
.mrow{display:grid;gap:6px;padding:10px 0;border-bottom:1px solid var(--line)}
.mrow:last-of-type{border-bottom:0}
.mname{font-weight:600;font-size:13px}
.conv-grid{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:8px;align-items:end;margin-top:10px}
.conv-grid input{width:100%}
.conv-eq{padding-bottom:8px;color:var(--muted);font-family:var(--f-mono)}
.seg.cur button{padding:1px 7px;font-size:11px}
.mrow .mchips{flex-wrap:nowrap;align-items:center;gap:4px}
.mrow .mchips button{flex:1 1 0;min-width:0;padding:5px 0}
.mrow .m-custom{width:54px!important;flex:none;padding:5px 6px}
.cli-wrap{position:relative}
.cli-results{position:absolute;top:100%;left:0;right:0;margin-top:4px;z-index:20;background:var(--surface);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.14);max-height:300px;overflow:auto}
.cli-results button{display:flex;width:100%;justify-content:space-between;align-items:center;gap:10px;border:0;border-bottom:1px solid var(--line);background:none;padding:9px 12px;text-align:left;cursor:pointer;color:var(--fg);font:inherit}
.cli-results button:last-child{border-bottom:0}
.cli-results button:hover,.cli-results button:focus-visible{background:var(--surface-2)}
.margins tr.sel td{background:var(--info-bg);font-weight:600}
.margins tr{cursor:pointer}
.big{font-size:30px;font-weight:600;letter-spacing:-.035em}
.kv{display:flex;justify-content:space-between;gap:8px;padding:4px 0;font-size:13px}
.kv b{font-weight:500}
.mchips{display:flex;gap:6px;flex-wrap:wrap}
.mchips button{font:500 12px var(--f-body);border:1px solid var(--line);background:var(--surface);color:var(--fg);padding:5px 9px;border-radius:6px;cursor:pointer}
.mchips button[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}

/* Partidas (hoja de costos) */
.partida{background:var(--surface);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.partida-h{display:grid;grid-template-columns:auto 1fr;gap:8px 16px;align-items:center;padding:12px 16px;background:var(--surface-2);box-shadow:inset 3px 0 0 var(--accent);border-bottom:1px solid var(--line)}
.partida-h .idx{color:var(--muted);font-size:13px;font-weight:500;margin-right:4px}
.partida-m{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-self:end}
.partida-m .mchips{flex-wrap:nowrap;gap:4px;align-items:center}
.partida-m .m-custom{width:56px;padding:5px 6px}
.partida-t{grid-column:1/-1;font-size:12px;color:var(--muted)}
.partida-f{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:10px 16px;border-top:1px solid var(--line)}
table.sheet td{vertical-align:top;padding:10px 8px}
table.sheet .idxc{color:var(--muted);padding-top:16px}
table.sheet input.qty{width:58px}
table.sheet input.cost{width:96px}
table.sheet td.num{padding-top:16px;white-space:nowrap}
table.sheet .price{color:var(--fg);font-weight:600}
.descc{min-width:300px;width:100%}
.costc{min-width:150px}.costin{display:flex;gap:4px;justify-content:flex-end}.costin select{padding:7px 4px}
.quote-layout{grid-template-columns:minmax(0,1fr) 300px}
.sumtbl td,.sumtbl th{white-space:nowrap}
.eqsel{display:flex;gap:6px;flex-wrap:wrap}.eqsel select{flex:1 1 auto}
.eqsel2{display:flex;gap:6px;margin-top:6px;flex-wrap:wrap}.eqsel2 input{flex:1 1 140px}
.dprev{font-size:12px;color:var(--muted);margin-top:6px}
.incs{display:flex;gap:4px;flex-wrap:wrap;margin-top:8px}
.inc-chip{font:500 11px var(--f-body);white-space:nowrap;border:1px solid var(--line);background:var(--surface);color:var(--muted);padding:3px 8px;border-radius:999px;cursor:pointer}
.inc-chip[aria-pressed="true"]{background:var(--fg);border-color:var(--fg);color:var(--surface)}
.incm{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:8px;font-size:12px;color:var(--muted)}
.incm input{width:60px;padding:4px 6px}
.dedit{margin-top:8px;font-size:12.5px;color:var(--fg)}
.costtag{display:flex;flex-direction:column;align-items:flex-end;gap:2px;margin-top:4px}
.sumtbl{margin:12px 0 6px}.sumtbl td,.sumtbl th{padding:5px 4px;font-size:12.5px}.sumtbl tr.tot td{font-weight:600;border-bottom:0}
.good{color:var(--good)}

/* Agenda */
.ag{table-layout:fixed;min-width:820px}
.ag th{text-align:left}.ag th.ag-today{color:var(--fg)}
.ag td{vertical-align:top;border-right:1px solid var(--line-2);padding:4px;height:78px}
.ag td.ag-h{font-weight:500;color:var(--fg);padding:8px;font-size:12.5px}
.ag-cell{cursor:pointer}.ag-cell:hover{background:var(--surface-2)}
.ag-off{background:repeating-linear-gradient(135deg,var(--surface-2) 0 6px,transparent 6px 12px)}
.ag-cita{display:flex;flex-direction:column;gap:1px;width:100%;text-align:left;border:1px solid var(--line);border-left:3px solid var(--fg);background:var(--surface);border-radius:6px;padding:5px 7px;margin-bottom:4px;cursor:pointer;font:inherit;color:var(--fg)}
.ag-cita b{font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-cita span{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ag-cita .ag-who{color:var(--fg)}
.ag-cita.t-instalación{border-left-color:var(--accent)}.ag-cita.t-mantenimiento{border-left-color:var(--good)}
.pt-who{display:inline-flex;gap:6px;align-items:center;font-size:12px;color:var(--muted);margin-left:14px}.pt-who select{padding:4px 6px;font-size:12px}
.kpi-l{text-align:left;font:inherit;color:inherit;cursor:pointer}.kpi-l:hover{border-color:var(--muted)}
/* Obras */
.obras{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:14px}
.obra{display:grid;gap:12px}
.obra-h{display:flex;justify-content:space-between;gap:12px}.obra-h h2{font-size:17px;margin:2px 0}
.obra-st{text-align:right;display:grid;gap:4px;justify-items:end}
.obra-bar{height:6px;border-radius:3px;background:var(--line-2);overflow:hidden}.obra-bar i{display:block;height:100%;background:var(--fg)}
.pasos{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.pasos li{display:grid;grid-template-columns:1fr auto;gap:0 8px;align-items:center;padding:6px 8px;border-radius:8px}
.pasos li:hover{background:var(--surface-2)}
.pasos li label{display:flex;gap:10px;align-items:center;cursor:pointer;font-weight:500}
.pasos li input{width:18px;height:18px;accent-color:var(--accent)}
.pasos li.ok label span{color:var(--muted);text-decoration:line-through;text-decoration-color:var(--line)}
.pasos li .note{grid-column:1;padding-left:28px;font-size:11.5px}
.pasos li button{grid-row:1;grid-column:2}
.pasos .partes{grid-column:1/-1;padding-left:28px}
.obra-f{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;align-items:center;border-top:1px solid var(--line);padding-top:10px;font-size:12.5px}
/* Cobros */
.pagos{display:grid;gap:8px}.pago{display:grid;grid-template-columns:64px 1fr auto;gap:12px;align-items:center}
.pago img,.nofoto{width:64px;height:64px;object-fit:cover;border-radius:8px;border:1px solid var(--line);cursor:pointer}.nofoto{display:grid;place-items:center;font-size:10px;color:var(--muted);cursor:default}
/* Mensajes */
.msg-grid{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:16px;align-items:start}
.msg-item{display:flex;flex-direction:column;gap:2px;width:100%;text-align:left;border:0;border-bottom:1px solid var(--line-2);background:none;padding:10px 6px;cursor:pointer;font:inherit;color:var(--fg)}
.msg-item.on{background:var(--surface-2);box-shadow:inset 3px 0 0 var(--fg)}
.phone{border:1px solid var(--line);border-radius:22px;overflow:hidden;background:#E9E3DA;display:flex;flex-direction:column;min-height:460px}
.phone-h{display:flex;gap:10px;align-items:center;padding:12px 14px;background:#F0F2F5;color:#111}.phone-h .note{color:#667781}
.phone-av svg{width:36px;height:36px}
.phone-b{flex:1;padding:16px;display:flex;flex-direction:column;justify-content:flex-end}
.bub{align-self:flex-end;background:#D9FDD3;color:#111;padding:8px 10px 18px;border-radius:10px 2px 10px 10px;max-width:88%;font-size:13px;line-height:1.45;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.08)}
.bub .tm{position:absolute;right:8px;bottom:3px;font-size:10px;color:#667781}
.phone-f{display:flex;gap:8px;padding:10px;background:#F0F2F5;justify-content:flex-end}
@media (max-width:980px){.msg-grid{grid-template-columns:minmax(0,1fr)}}
@media (max-width:520px){.obras{grid-template-columns:minmax(0,1fr)}}

/* Pipeline */
.pipe-filter{display:flex;gap:6px;flex-wrap:wrap}
.form-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.form-grid .w2{grid-column:span 2}
.confirm{display:inline-flex;gap:6px;align-items:center;font-size:12px;color:var(--bad)}

/* Modal */
.modal-bg{position:fixed;inset:0;background:rgba(5,15,20,.55);z-index:40;display:flex;align-items:flex-start;justify-content:center;padding:calc(40px + env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) 40px max(16px,env(safe-area-inset-left,0px));overflow:auto}
.modal{background:var(--surface);border-radius:12px;max-width:820px;width:100%;padding:20px;display:grid;gap:14px;border:1px solid var(--line)}
.drop{border:1.5px dashed var(--line);border-radius:10px;padding:18px;text-align:center;color:var(--muted)}
.drop.on{border-color:var(--accent);background:var(--info-bg)}

/* Propuesta (vista cliente) */
.paper{background:#fff;color:#14232C;max-width:860px;margin:0 auto;border-radius:6px;box-shadow:0 2px 16px rgba(0,0,0,.12);overflow:hidden}

@media (max-width:980px){
  .quote-layout{grid-template-columns:minmax(0,1fr)} .side{position:static}
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr))} .two{grid-template-columns:minmax(0,1fr)}
  .client-grid,.form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .equip{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:520px){
  .client-grid,.form-grid,.equip{grid-template-columns:minmax(0,1fr)} .form-grid .w2{grid-column:auto}
  .stage-row{grid-template-columns:90px 1fr 90px}
  .kpi .v{font-size:18px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
/* Impresión de la propuesta (botón Imprimir / Guardar PDF) */
@media print{body.printing header.top,body.printing #app>:not(.paper),body.printing #modal-root{display:none!important}body.printing{background:#fff}body.printing main{padding:0}body.printing .paper{box-shadow:none;max-width:none;border-radius:0}.pp *{-webkit-print-color-adjust:exact;print-color-adjust:exact}}

/* Inicio de sesión (servidor definitivo, S3): sin pestañas ni usuario hasta entrar */
body.sin-sesion nav.tabs,body.sin-sesion .who{display:none}
.login{max-width:380px;margin:48px auto;display:flex;flex-direction:column;gap:14px}
.login h1{margin:0}
.login .sub{margin:-6px 0 4px}
.login .note:empty{display:none}
.who .btn.sm{padding:4px 10px}
