:root{font-family:Segoe UI,Arial,sans-serif;color:#172337;background:#f2f5f9;font-size:16px;line-height:1.45;--blue:#1d4ed8;--border:#d7e0eb}*{box-sizing:border-box}body{margin:0}#shell{display:flex;min-height:100vh}aside{width:240px;flex-shrink:0;background:#102744;color:white;padding:28px 20px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand{font-weight:800;letter-spacing:.04em;font-size:1.6rem}.brand span{display:block;font-size:.875rem;font-weight:400;letter-spacing:0;color:#b9cbe0}nav{display:grid;gap:6px;margin-top:32px}nav button{background:transparent;color:#d3e1f1;text-align:left;border:0}nav button.active{background:#254a77;color:white}.aside-foot{margin-top:auto;font-size:.875rem;color:#b9cbe0}main{width:100%;max-width:1350px;padding:32px 36px;min-width:0}h1{font-size:1.75rem;line-height:1.2;margin:0 0 8px}h2{font-size:1.2rem;margin:0 0 12px}h3{font-size:1rem;margin:0 0 6px}p{margin:6px 0 16px}.muted{color:#52657a;font-size:.9rem}.head{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:24px}.actions{display:flex;gap:8px;flex-wrap:wrap}.card{background:white;border:1px solid var(--border);border-radius:10px;padding:20px;margin-bottom:14px}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:14px}.grid>.card{margin:0}.two{display:grid;grid-template-columns:1fr 1fr;gap:16px}.summary{display:flex;gap:12px;flex-wrap:wrap;margin:14px 0}.badge{display:inline-block;font-size:.875rem;padding:3px 9px;border-radius:5px;background:#e5edf6;color:#28466c}.badge.X,.badge.reviewed{color:#166534;background:#dcfce7}.badge.DL{color:#854d0e;background:#fef3c7}.badge.DG{color:#991b1b;background:#fee2e2}.badge.NA,.badge.excluded{background:#edf0f4;color:#58677a}button,.button{font:inherit;font-size:.925rem;padding:10px 15px;border:1px solid var(--border);border-radius:6px;background:white;color:#203a5c;cursor:pointer;text-decoration:none;display:inline-block;text-align:center}button:hover,.button:hover{background:#edf3ff}button.primary,.button.primary{background:var(--blue);color:white;border-color:var(--blue)}button.danger{color:#a11212;border-color:#f0baba}button:disabled{opacity:.5;cursor:wait}input,select,textarea{font:inherit;font-size:1rem;padding:10px;border:1px solid #bdcad9;border-radius:5px;width:100%;background:white;color:#172337}input[type=checkbox]{width:20px;height:20px;vertical-align:middle}textarea{min-height:90px;resize:vertical}label{display:block;font-size:.9rem;font-weight:600;margin-bottom:5px}.field{margin-bottom:16px}form{margin:0}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}.full{grid-column:1/-1}table{border-collapse:collapse;width:100%;font-size:.925rem}th,td{padding:12px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}th{color:#52657a;background:#f8fafc}.table-wrap{overflow:auto}details{background:white;border:1px solid var(--border);border-radius:7px;margin:12px 0}summary{padding:15px;font-weight:650;cursor:pointer}.check-row{display:grid;grid-template-columns:minmax(0,1fr) 165px 90px;align-items:center;gap:12px;padding:12px 15px;border-top:1px solid #e5eaf2}.check-row.na{color:#687789;background:#fafbfd}.check-row select{font-size:.875rem;padding:8px}.check-row small{display:block;color:#52657a;margin-top:4px}.check-row .DG{border-left:3px solid #b91c1c}.number{color:#657a94;font-size:.875rem;margin-right:8px}.sticky{position:sticky;bottom:0;background:#f2f5f9ed;padding:14px 0;display:flex;justify-content:space-between;align-items:center;gap:12px;z-index:2}.photo{max-width:100%;max-height:180px;object-fit:contain;display:block;margin:8px 0}.logo{max-width:160px;max-height:75px}.empty{text-align:center;padding:36px;color:#52657a}#toast{position:fixed;right:20px;bottom:22px;background:#102744;color:white;border-radius:8px;padding:12px 18px;max-width:calc(100vw - 40px);z-index:10;display:none}#toast.error{background:#9f1515}dialog{border:1px solid var(--border);border-radius:12px;width:min(720px,95vw);padding:24px;max-height:90vh;overflow:auto}dialog::backdrop{background:#10274488}.defect{background:#f8fafc;border:1px solid var(--border);padding:16px;border-radius:6px;margin:12px 0}.login{max-width:420px;margin:60px auto}.notice{padding:12px 16px;border-left:4px solid #1d4ed8;background:#eaf1ff;margin:14px 0}.warn{border-color:#c77b00;background:#fff8df}.checklabel{display:flex;align-items:center;gap:10px;font-weight:500}.back{margin-bottom:16px}.save-state{font-size:.875rem;color:#52657a}a{color:var(--blue)}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #78a3ff;outline-offset:2px}.mobile-only{display:none}
@media(max-width:760px){#shell{display:block}aside{height:auto;position:static;width:100%;padding:14px 16px}.brand{font-size:1.25rem}.brand span{display:inline;margin-left:12px}nav{display:flex;gap:6px;margin-top:12px;overflow:auto}nav button{white-space:nowrap;padding:8px 11px}nav .admin,.aside-foot{display:none}main{padding:20px 14px}.desktop-only{display:none!important}.mobile-only{display:inline-block}.head{align-items:flex-start}.head h1{font-size:1.45rem}.form-grid,.two{grid-template-columns:1fr}.grid{grid-template-columns:1fr}.card{padding:16px}.check-row{grid-template-columns:minmax(0,1fr) 130px;gap:8px}.check-row>button{grid-column:1/-1;text-align:left;padding:7px 10px}.sticky{flex-wrap:wrap}.sticky .actions{width:100%}.sticky button{flex:1;padding:12px 8px}.head .actions{justify-content:flex-end}.table-wrap{font-size:.875rem}.mobile-only{display:inline-block}}
@media print{aside,.actions,.sticky,.back{display:none}main{padding:0}.card{border:0}}

/* Código de estados compartido con los PDF. El texto siempre identifica el estado. */
.badge.DL{background:#ffedd5;color:#9a3412}
.badge.NA{background:#e5e7eb;color:#374151}
.check-row.status-X{background:#f0fdf4;border-left:5px solid #16a34a}
.check-row.status-NA{background:#f3f4f6;border-left:5px solid #9ca3af;color:#4b5563}
.check-row.status-DL,.card.status-DL{background:#fff7ed;border-left:5px solid #ea580c}
.check-row.status-DG,.card.status-DG{background:#fef2f2;border-left:5px solid #dc2626}
.status-X select{background:#dcfce7;color:#166534;border-color:#16a34a}
.status-NA select{background:#e5e7eb;color:#374151;border-color:#9ca3af}
.status-DL select{background:#ffedd5;color:#9a3412;border-color:#ea580c}
.status-DG select{background:#fee2e2;color:#991b1b;border-color:#dc2626}
@media print{.check-row,.badge{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
/* Comprobaciones legibles: color solo en el selector y la marca lateral. */
.check-row.status-X,.check-row.status-NA,.check-row.status-DL,.check-row.status-DG{background:#fff;color:#172337}
.check-row .number{color:#172337}.check-row small{color:#374151}
.badge.progress{background:#dbeafe;color:#1e40af}.badge.pending{background:#fef3c7;color:#78350f}
.selection-row{padding:12px 16px;border-top:1px solid #e5e7eb}.selection-row input{flex-shrink:0}
.stage-reviewed{border-left:5px solid #16a34a}.stage-progress{border-left:5px solid #2563eb}.stage-pending{border-left:5px solid #d97706}.stage-excluded{border-left:5px solid #9ca3af}
[hidden]{display:none!important}nav small{padding:10px;color:#b9cbe0}.permission-admin{display:block}
/* Cada opción conserva su propio color cuando se abre el selector. */
.check-row select option.option-X{background:#dcfce7;color:#166534}
.check-row select option.option-NA{background:#e5e7eb;color:#374151}
.check-row select option.option-DL{background:#ffedd5;color:#9a3412}
.check-row select option.option-DG{background:#fee2e2;color:#991b1b}
.site-group{margin:24px 0;padding:12px 0;border-top:2px solid #cbd5e1}.site-group>h2,.site-group>h3{margin-bottom:14px}.report-year{font-size:1.45rem;font-weight:800}.installation-picker summary{list-style-position:inside}

.compact-sites p{margin:6px 0}.table-scroll{overflow-x:auto}.table-scroll th,.table-scroll td{padding:10px;min-width:90px}.table-scroll th:first-child,.table-scroll td:first-child{min-width:220px}

.dialog-alert{position:sticky;top:-24px;z-index:5;background:#fff1f2;color:#881337;border:2px solid #be123c;border-radius:8px;padding:18px;margin:0 0 18px;box-shadow:0 4px 16px #0002;font-size:1.05rem}.dialog-alert strong{display:block;font-size:1.15rem}.dialog-alert p{margin:8px 0 14px}.dialog-alert button{border-color:#be123c;color:#881337}.group-summary{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.group-state{display:flex;align-items:center;gap:8px;margin:0;font-weight:500;font-size:.85rem}.group-state select{width:auto;min-width:120px;font-size:.9rem}.technician-current{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.technician-replacement{margin:0}.technician-replacement summary{padding:8px 12px;font-size:.9rem}.technician-replacement label{padding:0 12px 12px}.preview-dialog{width:min(950px,96vw)}.preview-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px}.report-preview{background:white;border:1px solid #d7e0eb;padding:24px;margin-top:20px;font-size:.95rem}.preview-checks{margin:16px 0;font-size:.9rem}.preview-X{background:#dcfce7}.preview-NA{background:#e5e7eb}.preview-DL{background:#ffedd5}.preview-DG{background:#fee2e2}.report-preview p{white-space:normal;overflow-wrap:anywhere}.preview-checks td{padding:8px}.preview-checks td:first-child{width:38px}.preview-checks td:last-child{width:115px}
@media(max-width:760px){dialog{padding:16px;max-height:92dvh}.dialog-alert{top:-16px;padding:16px;font-size:1.05rem}.group-state{width:100%;justify-content:space-between}.report-preview{padding:12px;font-size:.9rem}.preview-checks{font-size:.8rem}.preview-checks td{padding:6px}.technician-replacement{width:100%}}

.installation-search-list{margin-top:14px;border-top:1px solid #d7e0eb}.installation-search-list>div{padding:12px 0;border-bottom:1px solid #e5e7eb}.installation-search-list .actions{margin-top:8px}

/* Report preview mirrors the compact PDF; mobile stacks columns for reading. */
.inactive-equipment{background:#e5e7eb;color:#374151;border:1px solid #9ca3af}.report-company{display:flex;align-items:center;gap:18px}.report-company .logo{max-width:130px;max-height:70px;object-fit:contain;margin:0}.report-company h2{margin:0}.report-company p{margin:6px 0}.report-heading{display:flex;align-items:center;justify-content:space-between;gap:15px;border-bottom:2px solid #142a43;margin-top:16px;padding-bottom:8px}.report-heading h2{font-size:1.15rem;margin:0}.report-heading strong{font-size:1.25rem;color:#142a43}.report-norm{font-weight:700;color:#142a43;font-size:.85rem}.report-identities{display:grid;grid-template-columns:1fr 1fr 110px;border:1px solid #bdc9d6}.report-identities section{padding:10px;border-right:1px solid #bdc9d6}.report-identities h3{margin:0 0 6px;font-size:.9rem}.report-identities p{font-size:.8rem;margin:0;line-height:1.4}.report-identities .photo{width:100px;max-height:134px;object-fit:contain;align-self:center;justify-self:center;margin:6px}.report-check-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start}.preview-checks{font-size:.76rem;table-layout:fixed;width:100%;margin:10px 0}.preview-checks th,.preview-checks td{padding:4px;overflow-wrap:anywhere}.preview-checks th:first-child,.preview-checks td:first-child{width:28px}.preview-checks th:last-child,.preview-checks td:last-child{width:78px}
@media(max-width:760px){.report-check-grid{grid-template-columns:1fr}.report-identities{grid-template-columns:1fr}.report-identities section{border-right:0;border-bottom:1px solid #bdc9d6}.report-heading{align-items:flex-start;flex-direction:column}.report-company{gap:10px}.report-company .logo{max-width:85px}.report-identities .photo{width:110px;max-height:147px}.preview-checks{font-size:.8rem}}

.notification-bar{display:flex;justify-content:flex-end;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:18px}.notification-bell{border-color:#2563eb;font-weight:700}.mail-body{white-space:normal;padding:16px;border:1px solid #d1d5db;border-radius:8px;background:#fff}.camera-input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}.actions label.button{cursor:pointer}section.card>h2{margin-top:0}@media(max-width:600px){.notification-bar{justify-content:flex-start}.notification-bar .muted{font-size:12px}}

nav .notification-bar{display:block;margin:0 0 12px}nav .notification-bell{width:100%;text-align:left;color:#fff;background:#243c59;border-color:#6482a5}nav .notification-bar .muted{display:none}.review-context{font-size:.9rem;color:#475569;text-align:right;margin:6px 0 16px}.equipment-identity h2{font-size:1.5rem}.identity-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.identity-grid p{font-size:1.05rem;margin:4px 0;overflow-wrap:anywhere}.identity-grid strong{font-size:.85rem;color:#475569}@media(max-width:760px){.identity-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.review-context{text-align:left}}

@media(max-width:760px){nav{flex-wrap:wrap}nav .notification-bar{flex-basis:100%;width:100%;margin-bottom:4px}nav .notification-bell{width:auto}nav small{flex-basis:100%}}

.notification-count{display:inline-flex;align-items:center;justify-content:center;min-width:25px;height:25px;padding:0 7px;margin-left:6px;border-radius:999px;background:#dc2626;color:#fff;font-weight:800;font-size:.95rem}.review-context{font-size:1.15rem;font-weight:650;color:#233c59;line-height:1.5}.installation-actions{padding:0 15px 15px}.installation-search-list details{margin:12px 0 0}.installation-search-list details summary{padding:12px 15px}#mail-text-form textarea{min-height:220px}@media(max-width:760px){.review-context{font-size:1.1rem}}

.economic-block{border-top:1px solid #d7e0eb;margin-top:20px;padding:18px 0 0}.economic-block h2{font-size:1.1rem}.eco-config-group{padding:16px 0;border-top:1px solid #d7e0eb}.eco-config-group fieldset{padding:12px 0 0;border:0;margin:0}.eco-config-group fieldset:disabled{opacity:.45}.eco-line{display:grid;grid-template-columns:1fr 1.6fr .6fr .7fr .5fr auto;gap:10px;align-items:end;padding:14px 0;border-bottom:1px solid #d7e0eb}.eco-line .field{margin:0}.eco-line input,.eco-line select{padding:8px}.eco-line button{padding:9px;align-self:end}.eco-line label{font-size:.8rem}@media(max-width:1000px){.eco-line{grid-template-columns:1fr 1fr}.eco-line .field:nth-child(2){grid-column:auto}.eco-line button{justify-self:start}}@media(max-width:600px){.eco-line{grid-template-columns:1fr 1fr}.eco-line .field:first-child,.eco-line .field:nth-child(2){grid-column:1/-1}}
/* Gestión económica 0.21 */
.eco-line{grid-template-columns:repeat(3,minmax(0,1fr));align-items:end}.eco-line output{display:block;font-size:1.15rem;font-weight:700;padding:.65rem 0}.eco-client-picker{position:relative}#eco-client-results{border:1px solid #c3ccd8;border-radius:8px;background:#fff;max-height:300px;overflow:auto;position:absolute;z-index:5;left:0;right:0;top:100%;box-shadow:0 8px 24px #17233722}#eco-client-results button{display:block;width:100%;text-align:left;padding:12px;border:0;border-radius:0;background:white}#eco-client-results button:hover,#eco-client-results button:focus{background:#e8eef5}.eco-sign-total{font-size:1.5rem;font-weight:800}#eco-signature{display:block;width:100%;height:auto;aspect-ratio:25/8;border:2px solid #8494a8;border-radius:8px;background:#fff;touch-action:none;margin:10px 0}.eco-saved-signature{display:block;max-width:300px;width:100%;max-height:130px;object-fit:contain;object-position:left}.preserve-lines{white-space:pre-wrap}@media(max-width:700px){.eco-line{grid-template-columns:repeat(2,minmax(0,1fr))}.eco-line .field:first-of-type{grid-column:1/-1}}
/* Albaranes y comunicaciones 0.22 */
.eco-worker{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.eco-worker [data-worker-label]{display:block;line-height:1.4}.eco-worker [data-change-worker]{position:static;align-self:flex-start;margin:3px 0 0}.eco-labor-line{grid-template-columns:1.2fr 1.4fr .7fr 1fr .8fr auto}.eco-line [data-description-field][hidden]{display:none}.company-config>summary{font-size:1.2rem;font-weight:700;padding:6px 0;cursor:pointer}.company-config>form,.company-config>.notice{margin-top:18px}.company-mail-group{border-top:1px solid #d7e0eb;margin-top:16px;padding:16px 0}.company-mail-group>summary{font-weight:700;cursor:pointer;margin-bottom:12px}#eco-signature{aspect-ratio:25/16}.eco-sign-toggle{font-size:.9rem;margin-bottom:12px}.eco-sign-summary{margin:8px 0;padding:14px}.eco-sign-summary p{margin:7px 0}#eco-sign-area .field{margin-top:18px}@media(max-width:900px){.eco-labor-line{grid-template-columns:repeat(2,minmax(0,1fr))}.eco-labor-line .field{grid-column:auto}.eco-labor-line .eco-worker{grid-column:auto}.eco-labor-line button[data-eco-remove]{grid-column:1/-1}}
/* Inicio y menú 0.23 */
#app-toolbar{position:fixed;top:0;left:0;right:0;height:64px;z-index:30;background:#102744;color:white;display:flex;align-items:center;gap:16px;padding:10px 18px}#app-toolbar[hidden]{display:none}#app-toolbar button{background:#254a77;color:white;border:0}#app-toolbar strong{flex:1}#shell{display:block}#main-nav-panel{position:fixed;left:0;top:64px;bottom:0;height:calc(100dvh - 64px);width:280px;z-index:25;transform:translateX(-100%);visibility:hidden;transition:transform .18s ease;overflow:auto}body.menu-open #main-nav-panel{transform:translateX(0);visibility:visible}#main-nav-panel nav{display:grid;overflow:visible}#menu-backdrop{position:fixed;inset:64px 0 0;background:#10274466;z-index:20}#menu-backdrop[hidden]{display:none}main{margin:64px auto 0;max-width:1350px}body:not(.menu-open) #main-nav-panel{pointer-events:none}.home-actions{display:grid;grid-template-columns:1fr 1fr;gap:20px}.home-actions .card{padding:28px}.home-actions button{padding:16px 24px}.home-choice{display:block;width:100%;text-align:left;margin:8px 0}.report-assets{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:20px 0}.report-asset{border:1px solid var(--border);border-radius:8px;padding:20px}.report-asset .logo{display:block;max-height:110px;margin-bottom:16px}.report-asset input[hidden]{display:none}.report-asset label.button{display:inline-block;font-weight:400}.eco-line input[readonly]{background:#eef2f6;color:#52657a}.eco-line button[data-unlock-price]{font-size:.8rem}@media(max-width:760px){.home-actions,.report-assets{grid-template-columns:1fr}#main-nav-panel{padding:20px}#app-toolbar{padding:10px 14px}.home-actions .card{padding:20px}}

/* Mejoras de edición 0.24 */
#app-toolbar .toolbar-brand{flex:1;text-align:left;font-size:1rem;font-weight:800;background:transparent;padding:10px 8px}
.eco-line button[data-eco-remove]{border:1px solid #c78686;color:#8a3535;background:#fffafa}.eco-line button[data-eco-remove]:hover{background:#fbecec;border-color:#b86565}.eco-line button[data-eco-remove]:focus-visible{outline:2px solid #b86565;outline-offset:2px}

.eco-budget-labor-line{grid-template-columns:1fr 1fr 1fr auto}@media(max-width:700px){.eco-budget-labor-line{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Filtro económico fijado 0.25 */
#eco-search-suggestions{border:1px solid var(--border);border-radius:8px;padding:6px;background:white;margin-top:6px;max-height:260px;overflow:auto}#eco-search-suggestions[hidden]{display:none}#eco-search-suggestions button{display:block;text-align:left;width:100%;border:0;margin:3px 0}.eco-filter-chip{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-top:12px;padding:10px 12px;background:#e8eef5;border:1px solid #b9c7d8;border-radius:8px}.eco-filter-chip strong{flex:1}.eco-filter-chip button{font-size:.85rem}#eco-search[disabled]{background:#eef2f6}

/* Presupuestos por bloques y subtotales 0.26 */
.eco-subtotal{text-align:right;font-weight:600;padding-right:7px}.budget-block>summary{font-weight:700;font-size:1.1rem;cursor:pointer;margin-bottom:16px}.budget-block>.field{margin-bottom:16px}.eco-global-labor{display:block;max-width:460px}.danger-outline{border-color:#c78686;color:#8a3535;background:#fffafa}#eco-add-budget-block{margin:8px 0 20px}.eco-global-labor[hidden]{display:none}

/* Estados comerciales: tono discreto y texto explícito. */
.badge.eco-state-draft{background:#eef0f3;color:#475569}
.badge.eco-state-offered{background:#e6efff;color:#1e40af}
.badge.eco-state-ready{background:#fff1d6;color:#92400e}
.badge.eco-state-invoiced{background:#e5f4eb;color:#166534}

/* 0.30: superficies, controles y jerarquía compartidos por ambos temas. */
:root{color-scheme:light;--page:#f3f5f8;--surface:#fff;--soft:#f7f9fc;--ink:#203047;--muted:#5d6c80;--border:#dce3ed;--control-border:#bbc7d7;--hover:#eef3fa;--blue:#2459c4;--shadow:0 3px 14px #182c4510;--nav:#142940;--nav-active:#2a486b}
:root[data-theme=dark]{color-scheme:dark;--page:#181818;--surface:#222222;--soft:#2a2a2a;--ink:#f0f0f0;--muted:#b6b6b6;--border:#3d3d3d;--control-border:#606060;--hover:#323232;--blue:#a6c6ff;--shadow:0 3px 14px #0003;--nav:#171717;--nav-active:#363636}
body{background:var(--page);color:var(--ink)}
main{padding:34px 36px 48px}h1{font-size:1.8rem;letter-spacing:-.025em}h2{line-height:1.4}h1,h2,h3{color:var(--ink)}
.card,details,dialog{background:var(--surface);color:var(--ink);border-color:var(--border);border-radius:12px;box-shadow:var(--shadow)}
.card{padding:24px;margin-bottom:18px}.grid{gap:18px}.head{margin-bottom:26px}.head .muted{margin-bottom:0}.muted,.empty,.save-state,.review-context,.identity-grid strong,.check-row small{color:var(--muted)}
button,.button{background:var(--surface);color:var(--ink);border-color:var(--border);border-radius:8px;font-weight:600;min-height:42px;padding:10px 16px;transition:background .12s,border-color .12s,box-shadow .12s}
button:hover,.button:hover{background:var(--hover);border-color:var(--control-border)}button.primary,.button.primary{background:#2459c4;border-color:#2459c4;color:#fff}button.primary:hover,.button.primary:hover{background:#1c49aa;border-color:#1c49aa}
button.danger,button[data-eco-remove]{color:#a93438;background:var(--surface);border-color:#d59a9e}button.danger:hover,button[data-eco-remove]:hover{background:#fff0f1;border-color:#bd525b}
input,select,textarea{background:var(--surface);color:var(--ink);border-color:var(--control-border);border-radius:7px;min-height:43px}input::placeholder,textarea::placeholder{color:var(--muted);opacity:.9}input[type=checkbox]{min-height:0;accent-color:#2459c4}
input:disabled,input[readonly],.eco-line input[readonly],#eco-search[disabled]{background:var(--soft);color:var(--muted)}input:disabled{cursor:not-allowed}
label{color:var(--ink);font-size:.9rem}th{background:var(--soft);color:var(--muted);font-weight:650}td,th{border-color:var(--border);padding:13px 12px}tbody tr:hover{background:var(--soft)}
summary{padding:17px 18px;line-height:1.45}.company-config>summary{padding:0;min-height:32px}.company-mail-group>summary{padding:0;min-height:32px}details[open]>summary{margin-bottom:6px}.installation-actions{padding:4px 18px 18px}
.defect,.mail-body,.eco-sign-summary,.eco-filter-chip{background:var(--soft);border-color:var(--border);color:var(--ink);border-radius:9px}.economic-block,.eco-line,.eco-config-group,.company-mail-group,.site-group,.installation-search-list,.installation-search-list>div,.report-asset,.selection-row{border-color:var(--border)}
#eco-client-results,#eco-search-suggestions{background:var(--surface);border-color:var(--border);box-shadow:var(--shadow)}#eco-client-results button,#eco-search-suggestions button{background:var(--surface);color:var(--ink)}#eco-client-results button:hover,#eco-client-results button:focus,#eco-search-suggestions button:hover{background:var(--hover)}
.check-row.status-X,.check-row.status-NA,.check-row.status-DL,.check-row.status-DG,.check-row.na{background:var(--surface);color:var(--ink);border-top-color:var(--border)}.check-row .number{color:var(--ink)}.check-row small{color:var(--muted)}
.sticky{background:var(--page);border-top:1px solid var(--border);margin-top:16px;padding:16px 0}.back{margin-bottom:20px}
#app-toolbar{background:var(--nav);box-shadow:0 2px 10px #0002;gap:12px;padding:10px 24px}#app-toolbar button{background:transparent;color:#e7eff9;border:1px solid #49617f;border-radius:8px}#app-toolbar button:hover{background:var(--nav-active)}#app-toolbar .toolbar-brand{border:0;letter-spacing:.07em;font-size:1.15rem;font-weight:800;padding-left:8px}#theme-toggle{margin-left:auto;font-size:.85rem;white-space:nowrap}
#main-nav-panel{background:var(--nav);padding:28px 20px;box-shadow:12px 0 30px #0002}#main-nav-panel nav{gap:8px}#main-nav-panel nav button{color:#d3e1f1;background:transparent;border:1px solid transparent;padding:12px 14px}#main-nav-panel nav button:hover{background:#223c5c}#main-nav-panel nav button.active{background:var(--nav-active);color:#fff;border-color:#48668b}#main-nav-panel nav .notification-bell{background:#243c59;border-color:#6482a5}nav small{line-height:1.6;border-top:1px solid #486078;margin-top:12px;padding-top:16px}#menu-backdrop{background:#060c1680}
.home-actions .card{padding:30px;border-top:3px solid #3f6fbf}.home-actions h2{font-size:1.35rem}.home-actions p{color:var(--muted);max-width:44ch;min-height:48px}.home-actions button{margin-top:6px}.report-assets{gap:22px}.report-asset{background:var(--soft);padding:22px}.report-asset .logo{background:white;border-radius:6px;padding:8px}.logo{object-fit:contain}
:root[data-theme=dark] .notice{background:#233b5e;color:#e3edff;border-left-color:#8cb5ff}:root[data-theme=dark] .notice.warn{background:#45391f;color:#ffe8b0;border-left-color:#d6a84e}
:root[data-theme=dark] button.danger,:root[data-theme=dark] button[data-eco-remove]{color:#ffb4b8;border-color:#93525d}:root[data-theme=dark] button.danger:hover,:root[data-theme=dark] button[data-eco-remove]:hover{background:#482d37}
:root[data-theme=dark] .badge{background:#2d405a;color:#d0e0fa}:root[data-theme=dark] .badge.X,:root[data-theme=dark] .badge.reviewed,:root[data-theme=dark] .badge.eco-state-invoiced{background:#224c3b;color:#b3edcc}:root[data-theme=dark] .badge.DL,:root[data-theme=dark] .badge.pending,:root[data-theme=dark] .badge.eco-state-ready{background:#513d25;color:#ffd99e}:root[data-theme=dark] .badge.DG{background:#552d39;color:#ffc0c7}:root[data-theme=dark] .badge.NA,:root[data-theme=dark] .badge.excluded,:root[data-theme=dark] .badge.eco-state-draft,:root[data-theme=dark] .inactive-equipment{background:#354154;color:#d5dfed}:root[data-theme=dark] .badge.eco-state-offered,:root[data-theme=dark] .badge.progress{background:#2d436d;color:#c8dcff}
:root[data-theme=dark] .card.status-DL{background:#302a22}:root[data-theme=dark] .card.status-DG{background:#35242c}
/* Las previsualizaciones de documentos y las firmas conservan el papel blanco. */
.report-preview{color:#172337;background:#fff}.report-preview h1,.report-preview h2,.report-preview h3,.report-preview strong{color:#142a43}.report-preview .muted{color:#52657a}.report-preview th{background:#f8fafc;color:#52657a}.report-preview tbody tr:hover{background:inherit}.report-preview td,.report-preview th{border-color:#d7e0eb}.report-preview .badge{background:#e5edf6;color:#28466c}.report-preview .badge.DL{background:#ffedd5;color:#9a3412}.report-preview .badge.DG{background:#fee2e2;color:#991b1b}.report-preview .badge.X{background:#dcfce7;color:#166534}.report-preview .badge.NA{background:#e5e7eb;color:#374151}.eco-saved-signature{background:#fff;border-radius:6px}
@media(max-width:760px){main{padding:24px 14px 32px}.card{padding:18px}.head{gap:12px;flex-wrap:wrap}.head .actions{justify-content:flex-start}.home-actions{gap:16px}.home-actions .card{padding:24px}.home-actions p{min-height:0}#app-toolbar{padding:10px 12px;gap:6px}#app-toolbar button{padding:8px 10px;font-size:.85rem}#app-toolbar .toolbar-brand{font-size:1rem;padding:8px 4px}#theme-toggle{font-size:.78rem!important}#main-nav-panel{width:min(300px,88vw)}.identity-grid{gap:14px}.actions{gap:10px}dialog{padding:18px}.report-preview{padding:12px}}
@media(prefers-reduced-motion:reduce){button,.button,#main-nav-panel{transition:none}}
@media print{body{background:#fff;color:#172337}#app-toolbar,#main-nav-panel,#menu-backdrop,#theme-toggle{display:none!important}main{margin:0;background:#fff}.card,details{background:#fff;color:#172337;box-shadow:none}}
.dialog-alert button{background:#fff;color:#881337}.dialog-alert button:hover{background:#ffe4e6}
.recipient-fields{border-top:1px solid var(--border);padding-top:18px;margin-top:4px}.recipient-fields textarea{min-height:100px}.recipient-fields .muted{margin:6px 0 16px}
.client-search-panel{max-width:760px}.client-search-panel .muted{margin:10px 0 0}

/* Compras: mismas superficies y controles en ambos temas. */
.purchase-tax-line{display:grid;grid-template-columns:repeat(4,minmax(100px,1fr)) auto;gap:12px;align-items:end;padding:14px 0;border-bottom:1px solid var(--border,#d5dce6)}
.purchase-tax-line .field{min-width:0}.purchase-tax-line button{margin-bottom:10px}
.purchase-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.purchase-summary strong{font-size:1.55rem}
.purchase-suggestions{display:grid;gap:6px;margin:8px 0}.purchase-suggestions[hidden]{display:none}.purchase-suggestions button{text-align:left}
#purchase-form input[type=file]{display:block;max-width:100%;margin:12px 0}.table-wrap{overflow-x:auto}
@media(max-width:700px){.purchase-tax-line{grid-template-columns:repeat(2,minmax(0,1fr))}.purchase-tax-line button{grid-column:1/-1;justify-self:end}.purchase-summary{grid-template-columns:1fr}}
.party-role-panel{padding:10px 14px;margin:12px 0;border:1px solid var(--border,#b8c4d3);border-radius:10px}.party-role-panel p{margin:0 0 8px}
.party-reuse{padding:12px;border:1px solid var(--border,#b8c4d3);border-radius:10px}.party-reuse label{display:block;margin-bottom:6px}.party-reuse input[type=search]{width:100%}.party-reuse [data-reuse-party]{display:block;text-align:left;margin-top:6px;width:100%}
.party-compare{display:grid;grid-template-columns:1fr 1fr;gap:16px}.party-compare section{padding:12px;border:1px solid var(--border,#b8c4d3);border-radius:8px}.party-compare dt{font-weight:600;margin-top:6px}.party-compare dd{margin:2px 0 0;overflow-wrap:anywhere}
@media(max-width:600px){.party-compare{grid-template-columns:1fr}.party-role-panel .actions{flex-wrap:wrap}}

.eco-state-awaiting-order{background:#fff3cd;color:#674c00;border:1px solid #dfc470}html[data-theme="dark"] .eco-state-awaiting-order{background:#4a390a;color:#ffdf8a}

/* Cabecera accesible durante selecciones largas; documentos agrupados. */
.campaign-dialog-header{position:sticky;top:-24px;z-index:4;display:flex;align-items:center;justify-content:space-between;gap:16px;background:var(--surface,#fff);padding:12px 0;border-bottom:1px solid var(--border,#d7e0eb);margin-bottom:18px}.campaign-dialog-header h2{margin:0}.campaign-dialog-header .actions{margin:0;justify-content:flex-end;flex-shrink:0}.document-menu{display:inline-block;max-width:100%;border:1px solid var(--border,#d7e0eb);border-radius:8px;padding:9px 12px;background:var(--surface,#fff)}.document-menu summary{font-weight:600;cursor:pointer}.document-menu .actions{padding-top:12px;flex-wrap:wrap}.history-equipment{margin:10px 0}.history-equipment summary{cursor:pointer}.history-equipment ul{margin:12px 0;padding-left:22px}.history-equipment li{padding:3px 0}
@media(max-width:760px){.campaign-dialog-header{top:-18px;gap:8px;flex-wrap:wrap}.campaign-dialog-header h2{font-size:1.1rem}.campaign-dialog-header .actions{margin-left:auto;gap:6px}.campaign-dialog-header button{font-size:.85rem;padding:9px}.document-menu{width:100%;box-sizing:border-box}}

/* Controles compactos y menús de documentos sin saltos en el diseño. */
button,.button,.report-menu>summary{display:inline-flex;align-items:center;justify-content:center;gap:7px;font-family:inherit;font-size:.94rem;font-weight:600;line-height:1.25;min-height:42px;padding:10px 14px;border-radius:8px;vertical-align:middle;text-decoration:none}
.actions,.head .actions{align-items:center;align-content:flex-start;gap:10px}.head{align-items:flex-start;flex-wrap:wrap}.head>.actions{flex:0 1 auto;justify-content:flex-end;max-width:100%}.head>div:first-child{min-width:220px;flex:1 1 360px}.head>.actions>.button,.head>.actions>button{align-self:center;flex:0 0 auto}
.report-menu{position:relative;display:inline-block;flex:none;margin:0;padding:0;border:0;border-radius:8px;background:transparent;max-width:100%;vertical-align:middle;overflow:visible}.report-menu>summary{list-style:none;cursor:pointer;border:1px solid var(--control-border,var(--border));background:var(--surface,#fff);color:var(--ink,#203a5c);margin:0}.report-menu>summary::-webkit-details-marker{display:none}.report-menu>summary:after{content:'⌄';font-size:.9em;margin-left:7px}.report-menu[open]>summary{border-color:var(--blue);background:var(--hover,#edf3ff)}.report-menu-items{position:absolute;top:calc(100% + 6px);left:0;width:max-content;max-width:min(360px,calc(100vw - 48px));min-width:240px;padding:8px;background:var(--surface,#fff);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 26px #10274426;z-index:12;display:grid;gap:4px}.report-menu-items>.button,.report-menu-items>button{display:flex;width:100%;justify-content:flex-start;text-align:left;border-color:transparent;background:transparent;min-height:40px;white-space:normal}.report-menu-items>.button:hover,.report-menu-items>button:hover{background:var(--hover,#edf3ff)}.head .report-menu-items{left:auto;right:0}.report-access{display:flex;gap:9px;align-items:center;flex-wrap:wrap;min-width:0}.report-state{font-size:.8rem;color:var(--muted,#52657a);line-height:1.35}.report-access>.button{white-space:normal}
@media(max-width:760px){.head>.actions{justify-content:flex-start;flex:1 1 100%}.head .report-menu-items{left:0;right:auto}.report-menu-items{min-width:220px}.head>.actions>.button,.head>.actions>button{flex:0 1 auto}.actions.summary{align-items:center}.report-access{gap:7px}.report-state{flex-basis:100%}button,.button,.report-menu>summary{font-size:.92rem}}

.report-menu:not([open])>.report-menu-items{display:none}

.head{display:block}.head>.actions{display:flex;justify-content:flex-start;margin-top:16px;align-items:center;flex-wrap:wrap}.head>.actions>button,.head>.actions>.button{width:auto;white-space:nowrap}.actions.summary{align-items:flex-start}.report-access{display:inline-flex;flex-direction:column;align-items:flex-start;gap:6px}.report-menu>summary{white-space:nowrap}.report-state{max-width:34ch}.head .report-menu-items{left:0;right:auto}

/* Vista previa: el mismo PDF y paginación que la emisión. */
.report-pdf-preview{display:block;width:100%;height:72vh;min-height:340px;border:1px solid var(--border);border-radius:8px;margin-top:14px;background:#e5e7eb}.preview-caption{line-height:1.5}.report-number{font-weight:750;font-size:1rem}

/* Descargas de revisión y apoyo interno para presupuestos, separados. */
.review-primary-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.review-budget-action{margin-left:auto}.button.budget-button{color:#65448c;border-color:#bcabd0;background:#f6f1fc}.button.budget-button:hover{background:#ede3f7;border-color:#9679b4}[data-theme="dark"] .button.budget-button{color:#e0c4ff;border-color:#80649e;background:#30243d}[data-theme="dark"] .button.budget-button:hover{background:#433052}
.signature-tools{margin-top:24px}.signature-tools>summary{cursor:pointer;font-weight:650}.signature-tools-body{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px;padding-top:20px}.signature-tools-body>.card{margin:0;padding:16px}.signature-tools-body h3{margin-top:0}.signature-emergency{margin-top:18px}.signature-emergency input{max-width:100%}#sign-progress:empty{display:none}#sign-recovery-notice[hidden]{display:none}
@media(max-width:760px){.signature-tools-body{grid-template-columns:1fr;gap:18px}.review-budget-action{flex-basis:100%;margin-left:0;display:flex;justify-content:flex-end}.review-primary-actions{max-width:100%}}

/* Empresa: plantillas con permiso propio y agrupación independiente. */
.company-templates-body{padding-top:16px}.template-group{margin-top:24px}.template-group h3{margin:0 0 12px}.template-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:14px}.template-card{background:var(--soft);border:1px solid var(--border);border-radius:10px;padding:18px;display:flex;flex-direction:column;align-items:flex-start;gap:10px}.template-card h4{font-size:1rem;line-height:1.45;margin:0;color:var(--ink)}.template-card p{margin:0}.template-card button{margin-top:auto}
/* Contraste reforzado en claro; se conserva el morado suave del tema oscuro. */
:root:not([data-theme=dark]) .button.budget-button{background:#6d28d9;color:#fff;border-color:#5b21b6;box-shadow:0 2px 5px #6d28d922}:root:not([data-theme=dark]) .button.budget-button:hover{background:#5b21b6;border-color:#4c1d95}.button.budget-button:focus-visible{outline:3px solid #a78bfa;outline-offset:3px}
@media screen{
 :root[data-theme=dark] #app-toolbar button{color:#efefef;border-color:#535353}
 :root[data-theme=dark] #main-nav-panel nav button{color:#dedede}
 :root[data-theme=dark] #main-nav-panel nav button:hover{background:#2d2d2d}
 :root[data-theme=dark] #main-nav-panel nav button.active{background:var(--nav-active);color:#fff;border-color:#666}
 :root[data-theme=dark] #main-nav-panel nav .notification-bell{background:#303030;border-color:#646464;color:#f3f3f3}
 :root[data-theme=dark] nav small{border-top-color:#484848;color:#bdbdbd}
 :root[data-theme=dark] .brand span,:root[data-theme=dark] .aside-foot{color:#b6b6b6}
 :root[data-theme=dark] #menu-backdrop{background:#0009}
 :root[data-theme=dark] .home-actions .card{border-top-color:#686868}
 :root[data-theme=dark] .notice:not(.warn){background:#2c2c2c;color:#ededed;border-left-color:#a5a5a5}
 :root[data-theme=dark] .badge:not(.X):not(.reviewed):not(.DL):not(.pending):not(.DG):not(.NA):not(.excluded):not(.progress){background:#383838;color:#e4e4e4}
 :root[data-theme=dark] .badge.NA,:root[data-theme=dark] .badge.excluded,:root[data-theme=dark] .inactive-equipment{background:#383838;color:#dedede}
}

/* Avisos de conflicto: no cambian el formato de los informes. */
#review-conflict[hidden]{display:none}.comparison-text{white-space:pre-wrap;overflow-wrap:anywhere;vertical-align:top;min-width:180px}#dialog .comparison-text{font-size:.92rem}#review-conflict .actions{flex-wrap:wrap}
