/* ====================================================================
   FIGAL · DESIGN SYSTEM  (cerrado en UI-C · UI-2 → UI-7.1 + M3/M5)
   Referencia: docs/design/Figal-Design-System.md · docs/design/DESIGN-notion-com.md
   --------------------------------------------------------------------
   MAPA DEL ARCHIVO (orden físico):
     1. DESIGN TOKENS (:root)           — color, tipografía, espaciado, radios,
                                          elevación, foco, movimiento (fundación).
     2. BASE / TYPOGRAPHY               — reset, body, .num, iconografía Lucide.
     3. APPLICATION SHELL               — #sidebar, #topbar, layout, .tab, responsive shell.
     4. SHARED COMPONENTS               — .search, .li, .btn, forms, .card, .badge,
                                          table, .chip, .modal.
     5. RESPONSIVE (consolidación UI-7) — colapso de dos paneles + topbar móvil.
     6. ACCESSIBILITY                   — :focus-visible, disabled, prefers-reduced-motion.
     7. PRINT (@media print)            — documentos aislados; NO heredan la migración.
     8. MODULES                         — calc/venta/precios, fichar, dashboard, planning,
                                          seguimiento, config, ws (Centro de Planificación).
     9. SPECIAL SURFACES                — charts (.stat/.chart), Leaflet (.map-*), Gantt.
   --------------------------------------------------------------------
   REGLAS PARA NUEVOS MÓDULOS: usar SOLO tokens y componentes existentes; prohibido
   CSS paralelo, colores/radios/tamaños literales nuevos o componentes duplicados.
   Los nombres de token históricos se CONSERVAN (compatibilidad JS/CSS); las escalas
   de fundación (--space-*, --font-size-*, --radius-*, --elevation-*, --motion-*) son
   la API disponible para futuros módulos aunque hoy tengan consumidores parciales.
   ==================================================================== */
:root{
  --kom-azul:#0078C0; --kom-naranja:#F69E09; /* Marca Kömmerling (documentos) */
  /* ---- Superficies / fondos ---- */
  --bg:#F1F5F9;              /* gris acero claro: fondo de la app */
  --panel:#ffffff;          /* superficie primaria */
  --panel-2:#F8FAFC;        /* superficie secundaria */
  --surface:#ffffff;        /* alias semántico */
  --surface-2:#F8FAFC;
  --surface-muted:#F1F5F9;
  --surface-elevated:#ffffff;
  /* ---- Bordes ---- */
  --border:#E2E8F0;         /* borde sutil */
  --border-2:#CBD5E1;       /* borde estándar (inputs, botones) */
  /* ---- Texto ---- */
  --text:#0F172A;           /* pizarra: texto primario */
  --text-soft:#475569;      /* texto secundario */
  --text-faint:#64748B;     /* texto atenuado (4,7:1 sobre blanco) */
  /* ---- Acción y selección (identidad metálica, igual que la landing) ----
     Naranja de seguridad = acción principal y lo que requiere atención, con
     texto oscuro (5,9:1). Azul = selección, enlaces y foco. */
  --action:#EA580C;
  --action-hover:#F97316;
  --on-action:#0F172A;
  --accent:#2563EB;
  --accent-hover:#1D4ED8;
  --accent-active:#1E40AF;
  --accent-soft:#EFF6FF;    /* fondo de seleccionado/activo */
  --accent-border:#BFDBFE;
  --focus-ring:rgba(37,99,235,.35);
  /* ---- Barra lateral en gris acero ---- */
  --steel:#1E293B;
  --steel-2:#273449;
  --steel-line:#334155;
  --steel-text:#CBD5E1;
  --steel-faint:#94A3B8;
  --cota:#C2670A;           /* medidas y cotas (no decorativo) */
  /* ---- Estados de negocio (semántica preservada; tono afinado) ---- */
  --green:#16a34a;  --green-soft:#e9f8ef;
  --amber:#d97706;  --amber-soft:#fdf3e6;
  --red:#dc2626;    --red-soft:#fdecec;
  --gray-soft:#F1F5F9;
  /* ---- Tipografía ---- */
  --font-sans:'Barlow',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  --font-display:'Barlow Condensed','Barlow',system-ui,sans-serif; /* títulos y cifras destacadas */
  --font-legacy:'Inter',system-ui,-apple-system,Segoe UI,Roboto,sans-serif; /* documentos */
  --mono:'Barlow',system-ui,sans-serif;  /* cifras y códigos: Barlow con cifras tabulares (body) */
  --mono-legacy:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace; /* documentos */
  --font-size-xs:12px;
  --font-size-sm:13px;
  --font-size-body:14px;
  --font-size-md:16px;
  --font-size-lg:20px;
  --font-size-xl:24px;
  --font-size-display:32px;
  --lh-tight:1.2;
  --lh-snug:1.35;
  --lh-normal:1.45;
  --lh-relaxed:1.6;
  /* ---- Espaciado (base 4) ---- */
  --space-1:4px;
  --space-2:8px;
  --space-3:12px;
  --space-4:16px;
  --space-5:20px;
  --space-6:24px;
  --space-7:32px;
  /* ---- Radios ---- */
  --radius-sm:6px;
  --radius-md:8px;
  --radius-lg:12px;
  --radius-pill:9999px;
  --radius:var(--radius-md);   /* alias por compatibilidad (antes 10px) */
  /* ---- Elevación (suave) ---- */
  --shadow:0 1px 2px rgba(15,23,42,.06);
  --shadow-md:0 6px 16px -4px rgba(15,23,42,.12);
  --shadow-lg:0 24px 48px -16px rgba(15,23,42,.30);
  --elevation-0:none;
  --elevation-1:var(--shadow);
  --elevation-2:var(--shadow-md);
  --elevation-overlay:var(--shadow-lg);
  /* ---- Movimiento ---- */
  --motion-fast:150ms;
  --motion-base:300ms;
  --ease-standard:cubic-bezier(.25,.1,.25,1);
  --ease-out:cubic-bezier(0.23, 1, 0.32, 1);      /* entradas/salidas de UI (Emil Kowalski) */
  --ease-in-out:cubic-bezier(0.77, 0, 0.175, 1);  /* movimiento en pantalla */
}
*{box-sizing:border-box;}
html,body{height:100%;margin:0;}
body{
  font-family:var(--font-sans);font-variant-numeric:tabular-nums;
  background:var(--bg);color:var(--text);font-size:var(--font-size-body);line-height:var(--lh-normal);
  display:flex;height:100vh;overflow:hidden;
}
.num{font-family:var(--font-sans);font-variant-numeric:tabular-nums;}

/* ---------- Iconografía Lucide (UI-2.1) ---------- */
.lucide{width:16px;height:16px;stroke-width:1.75;flex:0 0 auto;vertical-align:-2px;color:inherit;}
i[data-lucide]{display:inline-flex;width:16px;height:16px;}

/* ---------- Sidebar (UI-3 · Notion-inspired: blanco, aire, indicador azul fino) ---------- */
#sidebar{width:236px;flex:0 0 auto;background:var(--panel);border-right:1px solid var(--border);
  display:flex;flex-direction:column;z-index:30;transition:margin-left .2s;}
.sb-brand{height:56px;display:flex;align-items:center;padding:0 20px;flex:0 0 auto;border-bottom:1px solid var(--border);}
.sb-brand img{height:32px;width:auto;display:block;mix-blend-mode:multiply;}
#nav{display:flex;flex-direction:column;gap:2px;padding:12px 10px;overflow:auto;flex:1;}
#nav button{position:relative;display:flex;align-items:center;gap:11px;border:0;background:transparent;color:var(--text-soft);
  font:inherit;font-weight:500;font-size:13.5px;text-align:left;padding:8px 11px;border-radius:var(--radius-sm);cursor:pointer;transition:background .12s,color .12s;width:100%;}
#nav button .ic{width:16px;height:16px;color:var(--text-soft);flex:0 0 auto;}
#nav button:hover{background:var(--gray-soft);color:var(--text);}
#nav button:hover .ic{color:var(--text);}
/* Activo: gris muy claro + indicador azul fino a la izquierda + icono azul (sin bloque azul) */
#nav button.active{background:var(--accent-soft);color:var(--text);font-weight:600;box-shadow:inset 3px 0 0 var(--accent);}
#nav button.active .ic{color:var(--accent);}
.sb-foot{padding:10px;flex:0 0 auto;border-top:1px solid var(--border);}
.sb-report{display:flex;align-items:center;gap:11px;width:100%;text-align:left;border:0;cursor:pointer;
  background:transparent;color:var(--text-soft);padding:8px 11px;border-radius:6px;transition:background .12s;}
.sb-report:hover{background:var(--gray-soft);color:var(--text);}
.sb-report .ic{width:17px;height:17px;color:var(--text-soft);flex:0 0 auto;}
.sb-report b{display:block;font-size:12.5px;font-weight:600;color:var(--text);line-height:1.3;}
.sb-report small{display:block;color:var(--text-faint);font-size:11px;line-height:1.3;}

/* ---------- App column + Topbar ---------- */
.app-col{flex:1;min-width:0;display:flex;flex-direction:column;height:100vh;}
header#topbar{display:flex;align-items:center;gap:16px;padding:0 22px;height:56px;
  background:var(--panel);border-bottom:1px solid var(--border);flex:0 0 auto;z-index:10;}
#navToggle{border:0;background:transparent;cursor:pointer;color:var(--text-soft);padding:6px;border-radius:6px;width:auto;display:inline-flex;}
#navToggle:hover{background:var(--gray-soft);color:var(--text);}
#pageTitle{margin:0;font-family:var(--font-display);font-size:24px;font-weight:700;letter-spacing:0;line-height:1;}
.spacer{flex:1;}
.tb-search{position:relative;max-width:320px;flex:1;}
.tb-search>input{padding-left:32px;background:var(--surface-muted);border-color:transparent;}
.tb-search>input:focus{background:#fff;border-color:var(--accent);}
.tb-search>.ic{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-faint);width:15px;height:15px;pointer-events:none;}
.tb-res{position:absolute;left:0;right:0;top:100%;margin-top:6px;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-md);max-height:340px;overflow:auto;z-index:50;}
.tb-res .tb-item{padding:8px 12px;cursor:pointer;font-size:13px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px;}
.tb-res .tb-item:last-child{border-bottom:0;}
.tb-res .tb-item:hover{background:var(--surface-muted);}
.tb-res .tb-tag{font-size:10px;font-weight:700;color:var(--text-faint);}
.status{font-size:12px;color:var(--text-faint);display:flex;align-items:center;gap:6px;}
.status .dot{width:7px;height:7px;border-radius:50%;background:var(--green);}
.tb-user{display:flex;align-items:center;gap:9px;padding-left:16px;margin-left:2px;border-left:1px solid var(--border);}
.tb-user .av{width:28px;height:28px;border-radius:50%;background:var(--accent);color:#fff;display:grid;place-items:center;font-weight:600;font-size:12.5px;flex:0 0 auto;}
.tb-user .un{font-size:13px;font-weight:600;line-height:1.15;}
.tb-user .ur{font-size:11px;color:var(--text-faint);}
.tb-date{font-size:12px;color:var(--text-soft);display:inline-flex;align-items:center;gap:6px;white-space:nowrap;}
.tb-date .lucide{width:15px;height:15px;color:var(--text-faint);}
.tb-bell{position:relative;border:0;background:transparent;cursor:pointer;padding:6px;border-radius:6px;width:auto;color:var(--text-soft);display:inline-flex;}
.tb-bell:hover{background:rgba(0,0,0,.045);color:var(--text);}
.tb-badge{position:absolute;top:-2px;right:-2px;background:var(--red);color:#fff;font-size:9px;font-weight:700;min-width:15px;height:15px;border-radius:8px;display:grid;place-items:center;padding:0 3px;}

/* ---------- Layout ---------- */
main{flex:1;overflow:hidden;position:relative;background:var(--panel);}
.tab{display:none;height:100%;}
.tab.active{display:flex;height:100%;}
#tab-dashboard.active{display:block;height:100%;overflow:auto;}
body.nav-collapsed #sidebar{margin-left:-237px;}
@media(max-width:900px){
  #sidebar{position:fixed;top:0;left:0;bottom:0;box-shadow:var(--shadow-md);}
}
/* UI-7 · Consolidación responsive: layouts de dos paneles colapsan en móvil (sin overflow) */
@media(max-width:760px){
  .split,.calc-layout{flex-direction:column;}
  .list-pane{width:auto;min-width:0;border-right:0;border-bottom:1px solid var(--border);max-height:40vh;}
  .calc-side{width:auto;flex:0 0 auto;border-left:0;border-top:1px solid var(--border);}
  .detail-pane{padding:20px 18px;}
  .calc-main{padding:18px 16px;}
  /* Topbar: se ocultan informativos no esenciales (se conservan buscador, campana y avatar) */
  .tb-date,.status,.tb-user .un,.tb-user .ur{display:none;}
  .tb-user{padding-left:10px;}
}
@media(max-width:600px){
  .horas-wrap,.db-wrap{padding:16px 14px;}
  .detail-pane{padding:16px 14px;}
  .stat-3{grid-template-columns:repeat(2,1fr);}
}
/* UI-7 · Accesibilidad: respetar reducción de movimiento (foundation diferida de UI-2) */
@media(prefers-reduced-motion:reduce){
  /* El modal queda fuera: con movimiento reducido hace un fundido suave (ver «Movimiento»). */
  *:not(.modal-bg):not(.modal),*::before,*::after{transition-duration:.01ms !important;animation-duration:.01ms !important;animation-iteration-count:1 !important;scroll-behavior:auto !important;}
}
/* Web Interface Guidelines · táctil, foco, desbordes y enlace de salto (DESIGN-SYSTEM §17) */
:root{color-scheme:light;}
html{-webkit-tap-highlight-color:transparent;}
button,a,label,summary,select,[role="button"]{touch-action:manipulation;}
@media screen{ main :is(h1,h2,h3),#topbar h1,.modal h3{text-wrap:balance;} }
.modal,.tb-res,.list-scroll{overscroll-behavior:contain;}
.skip{position:fixed;left:12px;top:-60px;z-index:300;background:var(--panel);color:var(--text);padding:8px 14px;border-radius:var(--radius-sm);box-shadow:var(--shadow-md);font-weight:600;text-decoration:none;}
.skip:focus{top:12px;}
main:focus{outline:0;}
/* Pantalla de entrada (/login) — DESIGN-SYSTEM §18. Panel acero de marca + formulario. */
.login-body{display:block;height:auto;min-height:100vh;overflow:auto;background:var(--panel);}
.login{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);min-height:100vh;}
.login-marca{position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:40px;padding:40px 56px;color:var(--steel-text);
  background:linear-gradient(var(--steel-line) 1px,transparent 1px) 0 0/48px 48px,linear-gradient(90deg,var(--steel-line) 1px,transparent 1px) 0 0/48px 48px,var(--steel);
  background-blend-mode:normal;overflow:hidden;}
.login-marca::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 30% 40%,transparent 0,var(--steel) 75%);pointer-events:none;}
.login-marca::after{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--action);}
.login-marca>*{position:relative;}
.login-marca-logo{display:inline-block;align-self:flex-start;}
.login-marca-logo img{height:44px;width:auto;display:block;}
.login-marca-cuerpo{max-width:440px;}
.login-eyebrow{margin:0 0 14px;font-size:13px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--action-hover);}
.login-titular{margin:0 0 32px;font-family:var(--font-display);font-size:44px;font-weight:700;line-height:1;color:#fff;text-wrap:balance;}
.login-puntos{list-style:none;margin:0;padding:0;display:grid;gap:20px;}
.login-puntos li{display:grid;grid-template-columns:40px 1fr;gap:14px;align-items:start;font-size:14px;line-height:1.45;}
.login-puntos svg{width:40px;height:40px;padding:10px;border-radius:var(--radius-md);background:var(--steel-2);border:1px solid var(--steel-line);color:var(--action-hover);}
.login-puntos b{display:block;color:#fff;font-size:15px;font-weight:600;margin-bottom:2px;}
.login-marca-pie{margin:0;font-size:12.5px;color:var(--steel-faint);}
.login-panel{display:grid;place-items:center;padding:48px 24px;background:var(--panel);}
.login-form-caja{width:100%;max-width:380px;}
.login-form-caja h1{font-family:var(--font-display);font-size:34px;line-height:1.05;margin:0 0 6px;color:var(--text);}
.login-sub{margin:0 0 28px;font-size:14px;color:var(--text-soft);}
.login-form-caja .field input{font-size:15px;padding:11px 13px;}
.login-error{color:var(--red);background:var(--red-soft);border-radius:var(--radius-sm);padding:8px 11px;font-size:13px;margin:0 0 14px;}
.login-btn{width:100%;justify-content:center;min-height:46px;font-size:15px;margin-top:4px;}
.login-ayuda{margin:24px 0 0;padding-top:20px;border-top:1px solid var(--border);font-size:12.5px;color:var(--text-faint);line-height:1.5;}
@media (max-width:900px){
  .login{grid-template-columns:1fr;grid-template-rows:auto 1fr;}
  .login-marca{padding:20px 24px;gap:0;}
  .login-marca-cuerpo,.login-marca-pie{display:none;}
  .login-marca-logo img{height:34px;}
  .login-panel{place-items:start center;padding:32px 16px 48px;}
}
.tb-salir{margin-left:4px;}
/* Mostrar/ocultar contraseña (js/ver-clave.js) */
.ver-clave{position:relative;}
.ver-clave input{padding-right:42px;}
.ver-clave input::-ms-reveal,.ver-clave input::-ms-clear{display:none;}
.ver-clave-btn{position:absolute;right:3px;top:50%;transform:translateY(-50%);width:34px;height:32px;display:grid;place-items:center;border:0;background:none;border-radius:var(--radius-sm);color:var(--text-soft);cursor:pointer;padding:0;}
.ver-clave-btn:hover{color:var(--text);background:var(--surface-muted);}
.usr-activo{display:flex;align-items:center;gap:8px;font-size:13px;margin:0 0 12px;cursor:pointer;}
.usr-activo input{width:auto;}

.split{display:flex;width:100%;height:100%;}
.list-pane{
  width:340px;min-width:280px;flex:0 0 auto;background:var(--panel);
  border-right:1px solid var(--border);display:flex;flex-direction:column;
}
.detail-pane{flex:1;overflow:auto;padding:28px 32px;}

.pane-head{
  padding:18px 18px 14px;border-bottom:1px solid var(--border);flex:0 0 auto;
}
.pane-head h2{margin:0 0 12px;font-size:15px;font-weight:600;letter-spacing:-.1px;}
.pane-head .row{display:flex;gap:8px;}
.search{
  flex:1;border:1px solid var(--border);border-radius:6px;padding:6px 11px;
  font:inherit;font-size:13px;background:var(--surface-muted);
}
.search:focus{outline:0;border-color:var(--accent);background:#fff;box-shadow:0 0 0 3px var(--focus-ring);}
.list-scroll{flex:1;overflow:auto;padding:8px;}
.pag-ctrl{display:flex;align-items:center;gap:8px;padding:8px 4px 2px;justify-content:center;}
.pag-info{font-size:12px;color:var(--text-soft);min-width:90px;text-align:center;}

.li{
  position:relative;padding:11px 13px;border-radius:6px;cursor:pointer;border:1px solid transparent;
  display:flex;flex-direction:column;gap:3px;margin-bottom:2px;transition:background .12s;
}
.li:hover{background:var(--gray-soft);}
.li.active{background:var(--gray-soft);border-color:transparent;box-shadow:inset 2px 0 0 var(--accent);}
.li .li-top{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.li .li-name{font-weight:600;font-size:13.5px;}
.li .li-code{font-family:var(--mono);font-size:11.5px;color:var(--text-faint);}
.li .li-sub{font-size:12px;color:var(--text-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.empty-list{padding:40px 20px;text-align:center;color:var(--text-faint);font-size:13px;line-height:1.6;}

/* ---------- Buttons ---------- */
.btn{
  border:1px solid var(--border-2);background:var(--panel);color:var(--text);font:inherit;font-weight:500;
  padding:7px 13px;border-radius:var(--radius-sm);cursor:pointer;transition:background .12s,border-color .12s,color .12s;display:inline-flex;
  align-items:center;gap:6px;font-size:13px;white-space:nowrap;
}
.btn .lucide{width:15px;height:15px;}
.btn:hover{background:var(--gray-soft);}
.btn.primary{background:var(--action);border-color:var(--action);color:var(--on-action);font-weight:600;}
.btn.primary:hover{background:var(--action-hover);border-color:var(--action-hover);}
.btn.ghost{border-color:transparent;background:transparent;color:var(--text-soft);}
.btn.ghost:hover{background:var(--gray-soft);color:var(--text);}
.btn.danger{background:transparent;color:var(--red);border-color:transparent;}
.btn.danger:hover{background:var(--red-soft);color:var(--red);}
.btn.sm{padding:5px 10px;font-size:12px;}
.btn:disabled{opacity:.5;cursor:not-allowed;}

/* ---------- Forms ---------- */
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px;}
.field label{font-size:12px;font-weight:600;color:var(--text-soft);}
input,select,textarea{
  font:inherit;font-size:13px;border:1px solid var(--border-2);border-radius:var(--radius-sm);
  padding:8px 11px;background:var(--panel);color:var(--text);width:100%;
}
input:focus,select:focus,textarea:focus{outline:0;border-color:var(--accent);box-shadow:0 0 0 3px var(--focus-ring);}
/* UI-7 · Estado disabled consistente en controles de formulario */
input:disabled,select:disabled,textarea:disabled{background:var(--surface-muted);color:var(--text-faint);cursor:not-allowed;}
/* UI-2 · Fundación de foco accesible por teclado (aditiva; no altera :hover/:active) */
.btn:focus-visible,#nav button:focus-visible,.chip:focus-visible,a:focus-visible,button:focus-visible,summary:focus-visible,[role="button"]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px;}
input.num,td input.num{font-family:var(--font-sans);font-variant-numeric:tabular-nums;}
textarea{resize:vertical;min-height:70px;}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;}

/* ---------- Cards (UI-4 · superficie plana, aire, cabecera ligera) ---------- */
.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:none;margin-bottom:18px;}
.card-head{padding:14px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:12px;}
.card-head h3{margin:0;font-family:var(--font-display);font-size:19px;font-weight:700;color:var(--text);letter-spacing:0;}
.card-body{padding:20px;}
.detail-title{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px;}
.detail-title h1{margin:0;font-family:var(--font-display);font-size:32px;font-weight:700;letter-spacing:0;line-height:1.05;}
.detail-title .code{font-family:var(--mono);font-size:13px;color:var(--accent);font-weight:600;margin-top:2px;}
.placeholder{display:grid;place-items:center;height:100%;color:var(--text-faint);text-align:center;}
.placeholder .big{font-size:46px;margin-bottom:10px;opacity:.5;}

.meta-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px 28px;}
.meta-grid .k{font-size:11.5px;font-weight:600;color:var(--text-faint);margin-bottom:2px;}
.meta-grid .v{font-size:14px;}

/* ---------- Badges ---------- */
.badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:2px 8px;border-radius:5px;text-transform:capitalize;}
.badge::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;}
.badge.borrador{background:var(--gray-soft);color:var(--text-soft);}
.badge.enviado{background:var(--accent-soft);color:var(--accent);}
.badge.aceptado{background:var(--green-soft);color:var(--green);}
.badge.rechazado{background:var(--red-soft);color:var(--red);}
.badge.tipo-badge{background:var(--gray-soft);color:var(--text-soft);}
.badge.est-aceptada{background:var(--green-soft);color:var(--green);}
.badge.est-rechazada{background:var(--red-soft);color:var(--red);}
.badge.est-terminada{background:var(--accent-soft);color:var(--accent);}
.badge.est-otro{background:var(--gray-soft);color:var(--text-soft);}
.badge.aprobado{background:var(--amber-soft);color:var(--amber);}
.maps-link{font-size:11.5px;font-weight:600;color:var(--accent);text-decoration:none;display:inline-flex;align-items:center;gap:3px;}
.maps-link:hover{text-decoration:underline;}
/* Colores de estado de presupuesto (compartidos por el select de la lista y los stats) */
.e-borrador{background:var(--gray-soft);color:var(--text-soft);}
.e-enviado{background:var(--accent-soft);color:var(--accent);}
.e-aprobado{background:var(--amber-soft);color:var(--amber);}
.e-aceptado{background:var(--green-soft);color:var(--green);}
.e-rechazado{background:var(--red-soft);color:var(--red);}
.e-peso{background:var(--red-soft);color:var(--red);font-weight:700;border:1px solid var(--red);text-transform:none;}
.li-estado{font-size:10.5px;font-weight:700;border:0;border-radius:20px;padding:3px 22px 3px 9px;cursor:pointer;color:var(--text-soft);text-transform:capitalize;max-width:120px;
  -webkit-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath d='M1 2.5L4 5.5L7 2.5' stroke='%23888' fill='none' stroke-width='1.3'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;}
.pres-stats{display:flex;flex-wrap:wrap;gap:6px;padding:8px 12px 2px;}
.ps-pill{display:flex;flex-direction:column;gap:1px;line-height:1.15;font-size:11px;border-radius:8px;padding:4px 9px;background:var(--gray-soft);color:var(--text-soft);}
.ps-pill .ps-top{font-weight:700;}
.ps-pill .ps-eur{font-family:var(--mono);font-size:10px;opacity:.85;}
/* Flujo de trabajo (colas por rol) */
.wf-item{display:flex;gap:14px;justify-content:space-between;align-items:flex-start;border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:8px;background:var(--panel);}
.wf-main{min-width:0;flex:1;display:flex;flex-direction:column;gap:4px;}
.wf-tit{font-weight:700;font-size:13.5px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.wf-sub{font-size:12.5px;color:var(--text-soft);}
.wf-sub b{color:var(--text);}
.wf-main input{margin-top:4px;font-size:12.5px;}
.wf-fields{display:flex;gap:8px;}
.wf-fields .wf-num{max-width:150px;}
.wf-act{flex:0 0 auto;display:flex;gap:6px;align-items:center;flex-wrap:wrap;justify-content:flex-end;}
.wf-seg{display:flex;flex-direction:column;gap:4px;margin-top:6px;}
.wf-seg-el{display:flex;align-items:center;gap:8px;}
.wf-seg-lbl{flex:0 0 84px;font-size:12px;color:var(--text-soft);}
.wf-seg-btns{display:flex;gap:4px;flex-wrap:wrap;}
.wf-seg-el{flex-wrap:wrap;}
.wf-seg-nota,.p-nota{flex:1 1 220px;min-width:0;min-height:30px;resize:none;overflow:hidden;font:inherit;font-size:12px;line-height:1.35;padding:5px 8px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);}
.p-nota{width:100%;display:block;min-width:180px;}
.p-sit{padding:4px 6px;font-size:12px;min-width:150px;}
/* El atributo hidden siempre oculta (aunque la clase fije display) */
[hidden]{display:none !important;}
/* Presupuesto de venta: precio de pieza puesto a mano (solo en pantalla, no en la impresión) */
.vt-precio.is-manual{background:var(--amber-soft);border-color:var(--amber);}
.vt-reset{border:0;background:transparent;color:var(--amber);font-size:15px;font-weight:700;line-height:1;cursor:pointer;padding:0 2px 0 4px;}
.vt-reset:hover{color:var(--text);}
.wf-seg-nota:focus,.p-nota:focus{outline:none;border-color:var(--accent);}
.wf-seg .seg-opt{font-size:11px;padding:2px 8px;border:1px solid var(--border);border-radius:6px;background:var(--panel);cursor:pointer;color:var(--text-soft);}
.wf-seg .seg-opt.active{font-weight:700;border-color:transparent;color:#fff;}
.wf-seg .seg-opt.active.n-pendiente{background:var(--text-soft);}
.wf-seg .seg-opt.active.n-progreso{background:var(--amber);}
.wf-seg .seg-opt.active.n-completado{background:var(--green);}
/* Revisor de incoherencias */
/* Contador minimal: punto de color (por tipo) + número a la derecha en gris */
.nav-badge{display:inline-flex;align-items:center;gap:6px;margin-left:auto;font-size:12px;font-weight:700;font-family:var(--mono);color:var(--text-soft);}
.nav-badge::before{content:'';width:7px;height:7px;border-radius:50%;background:var(--text-faint);flex:0 0 auto;}
.nav-badge.nb-work::before{background:var(--accent);}
.nav-badge.nb-alert::before{background:var(--red);}
.rv-kpis{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:18px;}
.rv-kpi{flex:1;min-width:140px;border-radius:12px;padding:14px 16px;border:1px solid var(--border);background:var(--panel);}
.rv-kpi .rv-kpi-n{font-size:26px;font-weight:800;line-height:1;}
.rv-kpi .rv-kpi-l{font-size:12px;color:var(--text-soft);margin-top:4px;}
.rv-group{margin-bottom:22px;}
.rv-group h3{font-size:14px;margin:0 0 10px;}
.rv-item{display:flex;gap:14px;justify-content:space-between;align-items:flex-start;border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:8px;background:var(--panel);}
.rv-item-main{min-width:0;flex:1;}
.rv-item-tit{font-weight:700;font-size:13px;display:flex;align-items:center;gap:8px;}
.rv-item-msg{font-size:13px;color:var(--text);margin-top:3px;line-height:1.35;}
.rv-item-sug{font-size:12px;color:var(--text-soft);margin-top:4px;}
.rv-item-act{flex:0 0 auto;display:flex;gap:6px;align-items:center;flex-wrap:wrap;justify-content:flex-end;}
.rv-sil .rv-item{opacity:.6;}
/* Aviso de cliente parecido (evitar duplicados) */
.dup-aviso{margin-bottom:12px;padding:10px 12px;border:1px solid var(--amber);border-radius:8px;background:var(--amber-soft);font-size:13px;line-height:1.4;}
/* Alerta de incidencias sin leer (franja del Dashboard) */
.dash-inc-banner{display:flex;align-items:center;gap:10px;width:100%;margin:0 0 16px;padding:12px 16px;border:1px solid var(--red);border-radius:10px;background:var(--red-soft);color:var(--red);font:inherit;font-size:14px;font-weight:700;cursor:pointer;text-align:left;}
.dash-inc-banner span{margin-left:auto;font-weight:600;}
.dash-inc-banner:hover{background:var(--red);color:#fff;}
/* Obra como acordeón: línea resumen plegable (nº, nombre, dirección, estado, ppto aceptado) */
.obra-acc{padding:0;overflow:hidden;margin-bottom:12px;}
.obra-sum{list-style:none;cursor:pointer;display:flex;align-items:center;gap:12px;padding:12px 16px;user-select:none;}
.obra-sum::-webkit-details-marker{display:none;}
.obra-sum::before{content:'▸';color:var(--text-soft);font-size:13px;flex:0 0 auto;transition:transform .15s;}
.obra-acc[open]>.obra-sum::before{transform:rotate(90deg);}
.obra-acc[open]>.obra-sum{border-bottom:1px solid var(--border);}
.obra-sum:hover{background:var(--surface-muted,#f8fafc);}
.obra-sum-cod{font-family:var(--mono);color:var(--accent);font-weight:700;flex:0 0 auto;}
.obra-sum-nombre{font-weight:700;color:var(--text);flex:0 0 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:32ch;}
.obra-sum-dir{color:var(--text-soft);font-size:13px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.obra-sum-tags{flex:0 0 auto;display:flex;align-items:center;gap:8px;}
.obra-sum-pres{font-size:12px;color:var(--text-soft);white-space:nowrap;}
.obra-acc.terminada .obra-sum-cod,.obra-acc.terminada .obra-sum-nombre,.obra-acc.terminada .obra-sum-dir,.obra-acc.terminada .obra-sum-pres{color:var(--text-soft);}
@media(max-width:600px){.obra-sum-dir{display:none;}}
.obra-inline{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;}
.obra-inline .oi-field{display:flex;flex-direction:column;gap:3px;}
.obra-inline .oi-field.oi-wide{grid-column:1/-1;}
.obra-inline .oi-lbl{font-size:10.5px;font-weight:600;color:var(--text-faint);}
.oi-copy{border:0;background:transparent;padding:0 0 0 8px;font:inherit;font-size:10.5px;font-weight:600;color:var(--accent);text-transform:none;letter-spacing:0;cursor:pointer;width:auto;}
.oi-copy:hover{text-decoration:underline;}
.obra-inline input,.obra-inline select{font-size:13px;padding:6px 9px;}

/* ---------- Tables ---------- */
/* ---------- Tablas (UI-4 · minimalistas: sin cabecera cajeada, aire, hover sutil) ---------- */
table{width:100%;border-collapse:collapse;font-size:12.5px;}
th{text-align:left;font-size:12px;font-weight:600;color:var(--text-soft);padding:9px 12px;border-bottom:1px solid var(--border-2);background:transparent;}
td{padding:9px 12px;border-bottom:1px solid var(--border);vertical-align:middle;}
tbody tr:last-child td{border-bottom:0;}
tbody tr:hover td{background:var(--surface-muted);}
tr:last-child td{border-bottom:0;}
.tbl-wrap{overflow:auto;max-width:100%;}
/* Parte cuya obra está terminada: fila tachada en rojo (sin tachar la columna de acciones) */
.parte-terminada td{color:var(--text-soft);}
.parte-terminada td:not(:last-child){text-decoration:line-through;text-decoration-color:#e11d48;text-decoration-thickness:2px;}
td input,td select{padding:6px 8px;font-size:13px;}
th.r,td.r{text-align:right;}
td.r .num{display:inline-block;}

.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;}
.chip{border:1px solid var(--border);background:#fff;padding:4px 11px;border-radius:6px;font-size:12.5px;cursor:pointer;color:var(--text-soft);}
.chip:hover{background:var(--surface-muted);}
.chip.active{background:var(--accent-soft);border-color:var(--accent-border);color:var(--accent);font-weight:600;}

/* ---------- Calculadora ---------- */
.calc-layout{display:flex;width:100%;height:100%;}
.calc-main{flex:1;overflow:auto;padding:22px 26px;}
.calc-side{width:340px;flex:0 0 auto;border-left:1px solid var(--border);background:var(--panel);overflow:auto;padding:20px;}
.vent-card{border:1px solid var(--border);border-radius:10px;margin-bottom:16px;background:var(--panel);box-shadow:none;}
.vent-head{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border);background:transparent;border-radius:10px 10px 0 0;}
.vent-head .vent-idx{width:24px;height:24px;border-radius:6px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;font-weight:700;font-size:12px;flex:0 0 auto;}
.vent-head input{flex:1;font-weight:600;}
.vent-body{padding:14px;}
/* Pieza como acordeón: línea resumen plegable (nombre, descripción, medida, color, venta activa) */
.vent-acc{padding:0;overflow:hidden;}
.vent-sum{list-style:none;cursor:pointer;display:flex;align-items:center;gap:12px;padding:12px 16px;user-select:none;}
.vent-sum::-webkit-details-marker{display:none;}
.vent-sum::after{content:'▸';color:var(--text-soft);font-size:13px;flex:0 0 auto;order:99;transition:transform .15s;}
.vent-acc[open]>.vent-sum::after{transform:rotate(90deg);}
.vent-acc[open]>.vent-sum{border-bottom:1px solid var(--border);}
.vent-sum:hover{background:var(--surface-muted,#f8fafc);}
.vent-sum-main{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1;}
.vent-sum-nombre{font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.vent-sum-desc{color:var(--text-soft);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.vent-sum-tags{flex:0 0 auto;display:flex;align-items:center;gap:12px;}
.vent-sum-dim,.vent-sum-color{font-size:12px;color:var(--text-soft);white-space:nowrap;}
.vent-sum-precio{font-weight:700;color:var(--accent);white-space:nowrap;}
.vent-grip{flex:0 0 auto;cursor:grab;color:var(--text-faint);font-size:15px;line-height:1;padding:0 2px;user-select:none;}
.vent-grip:active{cursor:grabbing;}
.vent-card.vent-dragging{opacity:.45;}
.vent-card.vent-drop-before{box-shadow:inset 0 3px 0 var(--accent);}
.vent-card.vent-drop-after{box-shadow:inset 0 -3px 0 var(--accent);}
.vent-sel{display:flex;align-items:center;flex:0 0 auto;cursor:pointer;}
.vent-sel input{cursor:pointer;width:16px;height:16px;}
.copia-dest-list{max-height:260px;overflow-y:auto;border:1px solid var(--border);border-radius:8px;margin-bottom:4px;}
.copia-dest{padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--border);font-size:13px;}
.copia-dest:last-child{border-bottom:0;}
.copia-dest:hover{background:var(--surface-muted,#f8fafc);}
.copia-dest.sel{background:var(--accent-soft);color:var(--accent);}
.vent-sum-opt{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--text-soft);cursor:pointer;white-space:nowrap;}
.vent-sum-opt input{cursor:pointer;}
.vent-opt-badge{font-size:10px;font-weight:700;letter-spacing:.3px;color:#92400e;background:#fef3c7;border:1px solid #fcd34d;border-radius:6px;padding:1px 6px;white-space:nowrap;}
.vent-acc.is-opcion{border-color:#fcd34d;}
.vent-acc.is-opcion>.vent-sum{background:#fffbeb;}
.vent-acc.is-opcion .vent-sum-precio{color:var(--text-soft);text-decoration:line-through;}
@media(max-width:600px){.vent-sum-desc,.vent-sum-color{display:none;}}
.mini-label{font-size:11px;font-weight:600;color:var(--text-faint);margin:0 0 8px;}
.vidrios-tbl td{padding:5px 6px;}
.vidrios-tbl input,.vidrios-tbl select{padding:5px 7px;font-size:12.5px;}

.sum-row{display:flex;justify-content:space-between;align-items:baseline;padding:7px 0;border-bottom:1px dashed var(--border);font-size:13px;}
.sum-row .lbl{color:var(--text-soft);}
.sum-row .val{font-family:var(--mono);font-weight:500;}
.sum-row.total{border-bottom:0;border-top:2px solid var(--border);margin-top:6px;padding-top:12px;font-size:17px;font-weight:700;}
.sum-row.total .val{font-weight:700;color:var(--accent);}
.sum-section{margin-bottom:18px;}
.sum-section h4{font-size:12px;color:var(--text-faint);margin:0 0 6px;}
.vent-mini{font-size:12px;color:var(--text-soft);display:flex;justify-content:space-between;padding:4px 0;}
.vent-mini .num{color:var(--text);font-weight:500;}

.cfg-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px;}
.cfg-field{display:flex;flex-direction:column;gap:4px;}
.cfg-field label{font-size:11.5px;font-weight:600;color:var(--text-soft);}
.cfg-field .with-pick{display:flex;gap:6px;}
.cfg-field .with-pick input{flex:1;}
.cfg-field .with-pick select{width:42%;flex:0 0 auto;color:var(--text-soft);font-size:12px;}

.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;}
.consult{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;background:var(--accent-soft);border:1px solid var(--accent-border);border-radius:8px;padding:10px 12px;}
.consult>div,.cost-breakdown>div{display:flex;flex-direction:column;gap:1px;}
.consult .cl,.cost-breakdown .cl{color:var(--text-faint);font-size:10px;}
.consult .num,.cost-breakdown .num{font-weight:600;font-size:13px;}
.ro{padding:8px 11px;border:1px solid var(--border);border-radius:8px;background:var(--panel-2);color:var(--text);font-weight:600;}
.cost-breakdown{display:grid;grid-template-columns:repeat(auto-fit,minmax(88px,1fr));gap:8px;padding:10px 12px;border:1px dashed var(--border-2);border-radius:8px;}
.venta-vistas{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px;padding:10px 12px;background:var(--accent-soft);border:1px solid var(--accent-border);border-radius:8px;}
.venta-vistas>div{display:flex;flex-direction:column;gap:2px;}
.venta-vistas .cl{color:var(--text-soft);font-size:10.5px;}
.venta-vistas .num{font-weight:700;font-size:14px;color:var(--accent);}
@media(max-width:760px){.venta-vistas{grid-template-columns:1fr;}}
.vd-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;margin-bottom:6px;background:var(--panel-2);font-size:13px;}
.vent-foot{display:flex;gap:22px;justify-content:flex-end;margin-top:12px;padding-top:10px;border-top:1px solid var(--border);font-size:13px;color:var(--text-soft);}
.vent-foot b{font-size:15px;color:var(--text);}
.vm-preview{margin-top:14px;padding:12px 14px;background:var(--panel-2);border:1px solid var(--border);border-radius:10px;}
.modal.wide{width:680px;}
@media(max-width:760px){.grid4{grid-template-columns:1fr 1fr;}.consult,.cost-breakdown{grid-template-columns:1fr 1fr;}}

/* ---------- Control de horas ---------- */
.horas-wrap{padding:24px 30px;overflow:auto;width:100%;}
.horas-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:20px;}
.horas-head h1{margin:0;font-size:20px;font-weight:600;letter-spacing:-.3px;}
#horasView .grid2{gap:18px;}
.scan-row{display:grid;grid-template-columns:130px 1fr 1.3fr;gap:12px;align-items:center;margin-bottom:12px;}
.scan-row>label{font-size:12.5px;font-weight:600;color:var(--text-soft);}
.scan-row input{font-size:15px;}
.verif{display:inline-flex;align-items:center;min-height:38px;padding:6px 12px;border-radius:8px;font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.verif.empty{background:var(--gray-soft);color:var(--text-faint);}
.verif.ok{background:var(--green-soft);color:var(--green);}
.verif.bad{background:var(--red-soft);color:var(--red);}
.bc-pick{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:6px;}
.bc-opt{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--border);border-radius:8px;font-size:13px;cursor:pointer;}
.bc-opt input{width:auto;}
/* Panel lateral de escaneo en Fichar (ahorra papel: se escanea de pantalla) */
.fichar-layout{display:grid;grid-template-columns:minmax(0,640px) minmax(0,1fr);gap:24px;align-items:start;}
.fichar-main>.card{max-width:640px;}
/* Espacio a la derecha del formulario: 4/10 obras · 2/10 hueco separador · 4/10 empleados */
.fichar-side{position:sticky;top:0;display:grid;grid-template-columns:4fr 2fr 4fr;gap:0;align-items:start;}
.fichar-side .card{margin-bottom:0;}
.fichar-side .card:first-child{grid-column:1;}
.fichar-side .card:last-child{grid-column:3;}
.fichar-side .card-body{padding:12px 14px;}
.scan-search{width:100%;margin-bottom:8px;}
.scan-count{font-size:11.5px;color:var(--text-faint);margin-bottom:8px;}
.scan-bc-list{display:flex;flex-direction:column;gap:8px;max-height:52vh;overflow:auto;padding:2px;}
.scan-bc{border:1px solid var(--border);border-radius:8px;padding:7px 11px;background:#fff;}
.scan-bc .sb-title{font-size:12.5px;font-weight:600;line-height:1.25;color:#1a1a1a;}
.scan-bc .sb-sub{font-size:11px;color:var(--text-faint);margin-bottom:3px;}
.scan-bc .bc-svg{height:46px;}
.scan-bc .sb-code{font-family:var(--mono);font-size:11px;letter-spacing:1px;text-align:center;color:var(--text-soft);margin-top:2px;}
.scan-empty{font-size:12.5px;color:var(--text-faint);padding:10px 4px;}
.mov-layout{display:grid;grid-template-columns:1fr 2fr;gap:14px;align-items:start;}
.mov-layout .mov-form{display:flex;flex-direction:column;gap:14px;min-width:0;}
@media(max-width:980px){.mov-layout{grid-template-columns:1fr;}}
.bc3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;align-items:start;}
.bc3 .bc3-col .card-head h3{font-size:14px;}
.bc3 .bc3-col .scan-bc-list{max-height:60vh;}
@media(max-width:980px){.bc3{grid-template-columns:1fr;}}
@media(max-width:1080px){.fichar-layout{grid-template-columns:1fr;}.fichar-side{position:static;}.fichar-main>.card{max-width:none;}}
@media(max-width:600px){.fichar-side{grid-template-columns:1fr;}.fichar-side .card{grid-column:auto;}}
@media(max-width:720px){.scan-row{grid-template-columns:1fr;}}

/* ---------- Impresión de códigos de barras ---------- */
#printArea{display:none;}
.bc-svg{width:100%;height:54px;display:block;}
@media print{
  html,body{height:auto !important;overflow:visible !important;}
  header,main,#sidebar,#modalBg,#toast{display:none !important;}
  /* UI-2 · Aislamiento documental: los documentos NO heredan la migración visual.
     Se fija la familia tipográfica y se CONGELAN los tokens de acento a sus valores
     históricos, de modo que remapear la paleta global no altere presupuestos impresos. */
  #printArea{
    display:block !important;
    font-family:var(--font-legacy); font-variant-numeric:normal;
    --accent:#009ED6; --accent-hover:#008cbf; --accent-soft:#e7f6fc; --accent-border:#9fdcf1;
    --font-sans:var(--font-legacy); --font-display:var(--font-legacy); --mono:var(--mono-legacy); --action:#009ED6; --on-action:#fff; --action-hover:#008cbf;
    --bg:#f6f7f9; --panel-2:#fafbfc; --surface-2:#fafbfc; --surface-muted:#f6f7f9;
    --border:#e6e8ec; --border-2:#d6dae0; --text:#1f2328; --text-soft:#586170; --text-faint:#8a94a3;
    --gray-soft:#eef0f3; --radius-sm:4px; --radius-md:8px; --radius-lg:12px; --radius:8px;
  }
  #printArea .num,#printArea input.num{font-family:var(--mono);font-variant-numeric:tabular-nums;}
  .bc-sheet h2{font-size:15pt;margin:0 0 8mm;}
  .bc-grid{display:grid;grid-template-columns:1fr 1fr;gap:6mm;}
  .bc-card{border:1px solid #000;border-radius:3px;padding:5mm 4mm;text-align:center;page-break-inside:avoid;}
  .bc-title{font-weight:700;font-size:13pt;}
  .bc-sub{font-size:9pt;color:#333;margin:1mm 0 2mm;}
  .bc-card .bc-svg{height:18mm;}
  .bc-code{font-family:monospace;font-size:11pt;letter-spacing:1px;margin-top:1mm;}
  /* Planning semanal · PDF (diseño "A2": obra + operarios destacan, comentario en banda) */
  .pl-print{font-family:'Inter',system-ui,-apple-system,sans-serif;color:#1f2937;}
  .pl-print *{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .pl-print .pl-head{display:flex;align-items:baseline;justify-content:space-between;border-bottom:2pt solid #0075DE;padding-bottom:1.4mm;margin-bottom:2.2mm;}
  .pl-print .pl-head h1{font-size:15pt;color:#0075DE;letter-spacing:-.3px;font-weight:800;}
  .pl-print .pl-rng{font-size:9pt;color:#64748b;font-weight:700;}
  .pl-print .pl-daybar{display:flex;align-items:center;gap:2mm;margin:3mm 0 1mm;padding:.9mm 2.5mm;background:#eaf2fb;border-left:1.4mm solid #0075DE;border-radius:1mm;break-after:avoid;page-break-after:avoid;}
  .pl-print .pl-dn{font-size:9.5pt;font-weight:800;color:#0f172a;text-transform:uppercase;letter-spacing:.5px;}
  .pl-print .pl-df{font-size:8.5pt;color:#0075DE;font-weight:800;}
  .pl-print .pl-ln{display:none;}
  .pl-print .pl-card{border:.6pt solid #e6eaf1;border-radius:2mm;overflow:hidden;margin-bottom:.7mm;break-inside:avoid;page-break-inside:avoid;}
  .pl-print .pl-top{display:flex;align-items:center;gap:2mm;padding:1mm 2.5mm .7mm;}
  .pl-print .pl-obra{background:#e2e8f0;color:#475569;font-size:8.5pt;font-weight:800;border-radius:1.4mm;padding:.6mm 2mm;letter-spacing:.2px;white-space:nowrap;flex:0 0 auto;}
  .pl-print .pl-cli{font-size:9.5pt;font-weight:800;color:#0f172a;min-width:0;}
  .pl-print .pl-ops{display:flex;gap:1mm;flex:0 0 auto;flex-wrap:wrap;max-width:62mm;}
  .pl-print .pl-op{color:#fff;font-size:7.5pt;font-weight:700;border-radius:10pt;padding:.4mm 2mm;white-space:nowrap;}
  .pl-print .pl-op-none{background:#94a3b8;}
  .pl-print .pl-com{font-size:7.5pt;color:#0f3a52;background:#eaf6fd;border-top:.6pt solid #d3ecfa;border-bottom:.6pt solid #d3ecfa;padding:.6mm 2.5mm;font-weight:600;line-height:1.15;}
  .pl-print .pl-meta{display:flex;flex-wrap:wrap;gap:1mm 4mm;font-size:7pt;color:#94a3b8;padding:.5mm 2.5mm;}
  .pl-print .pl-tel{color:#0f172a;font-weight:700;white-space:nowrap;text-decoration:none;}
  .pl-print .pl-maps{color:#0075DE;text-decoration:underline;font-weight:600;}
  .pl-print .pl-empty{font-size:8pt;color:#94a3b8;padding:1mm 2.5mm;}
  .parte-print{font-size:10pt;color:#000;}
  .parte-print .pp2-head{display:flex;justify-content:space-between;align-items:baseline;border-bottom:2px solid #000;padding-bottom:2mm;margin-bottom:3mm;}
  .parte-print h2{font-size:16pt;margin:0;}
  .parte-print .pp2-fecha{font-size:11pt;}
  .parte-print .k{font-size:8pt;text-transform:uppercase;letter-spacing:.3px;color:#444;font-weight:700;}
  .parte-print .pp2-grid{width:100%;border-collapse:collapse;margin-bottom:3mm;}
  .parte-print .pp2-grid td{border:1px solid #999;padding:1.6mm 2.5mm;font-size:9.5pt;vertical-align:top;}
  .parte-print .pp2-grid td.k{background:#f0f0f0;width:24mm;white-space:nowrap;}
  .parte-print .pp2-obra{display:flex;align-items:center;gap:5mm;border:1px solid #999;padding:2mm 2.5mm;margin-bottom:3mm;}
  .parte-print .pp2-obra .bc-svg{height:14mm;width:auto;}
  .parte-print .po-code{font-family:monospace;font-size:8.5pt;text-align:center;}
  .parte-print .pp2-ops{border:1px solid #999;padding:2mm 2.5mm;margin-bottom:3mm;}
  .parte-print .po-row{display:flex;flex-wrap:wrap;gap:6mm;margin-top:1.5mm;}
  .parte-print .po-op{text-align:center;}
  .parte-print .po-op .po-name{font-weight:700;font-size:9.5pt;}
  .parte-print .po-op .bc-svg{height:11mm;width:auto;}
  .parte-print .pp2-block{border:1px solid #999;padding:2mm 2.5mm;margin-bottom:3mm;}
  .parte-print .pp2-block>div:last-child{font-size:9.5pt;white-space:pre-wrap;margin-top:1mm;}
  .parte-print .pp2-firmas{display:grid;grid-template-columns:1fr 1fr;gap:5mm;}
  .parte-print .pp2-firmas .pp2-block{height:30mm;}
  .parte-print .pp2-lineas{width:100%;border-collapse:collapse;margin-bottom:3mm;}
  .parte-print .pp2-lineas th{background:#f0f0f0;border:1px solid #999;padding:1.2mm 2.5mm;font-size:8pt;text-transform:uppercase;letter-spacing:.3px;text-align:left;}
  .parte-print .pp2-lineas td{border:1px solid #999;padding:1.2mm 2.5mm;font-size:9.5pt;}
  .parte-print .pp2-lineas th.r,.parte-print .pp2-lineas td.r{text-align:right;font-family:monospace;}
  .parte-print .pp2-lineas th.c,.parte-print .pp2-lineas td.c{text-align:center;}
  .parte-print .pp2-lineas tr.sec td{background:#f7f7f7;font-weight:700;font-size:8pt;text-transform:uppercase;letter-spacing:.3px;}
  .parte-print .pp2-tot{width:62mm;margin:0 0 4mm auto;border-collapse:collapse;}
  .parte-print .pp2-tot td{padding:1.2mm 2.5mm;font-size:9.5pt;border:1px solid #999;}
  .parte-print .pp2-tot td.r{text-align:right;font-family:monospace;}
  .parte-print .pp2-tot .tot td{font-weight:700;font-size:11pt;background:#f0f0f0;}
  .parte-print .pp2-notes{border:1px solid #000;height:70mm;padding:2mm;}
  .doc-head{margin-bottom:3mm;}
  .doc-head img{height:13mm;width:auto;}
  .doc-foot{margin-top:4mm;padding-top:2mm;border-top:1px solid #000;display:flex;justify-content:space-between;align-items:center;gap:6mm;font-size:7.5pt;color:#222;line-height:1.35;}
  .doc-foot-nota{font-weight:700;white-space:nowrap;}
  .doc-foot-logo{height:11mm;width:auto;flex:0 0 auto;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .vpres-print{font-size:9.5pt;color:#1f2937;}
  .vpres-print *{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  /* Reglas de paginación (PDF servidor): bloques que NUNCA se cortan. */
  .vpres-print .vq-pieza{break-inside:avoid;page-break-inside:avoid;}
  .vpres-print .vq-cierre{break-inside:avoid;page-break-inside:avoid;}   /* resumen económico + firma = un bloque */
  /* Página 1 · Presupuesto comercial */
  .vq-head{display:flex;justify-content:space-between;align-items:center;}
  .vq-num{font-size:18pt;font-weight:800;color:var(--accent);margin:0 0 2mm;letter-spacing:-.3px;}
  .vq-meta div{font-size:9pt;margin-bottom:1mm;}
  .vq-meta b{color:var(--accent);font-weight:700;}
  .vq-ic{color:var(--accent);margin-right:1mm;}
  .vq-logo{height:28mm;width:auto;flex:0 0 auto;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .vq-rule{height:1.4mm;background:linear-gradient(90deg,var(--kom-azul) 0%,var(--kom-azul) 35%,var(--kom-naranja) 100%);border-radius:1mm;margin:2mm 0 4mm;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .vq-cards{display:flex;gap:4mm;margin-bottom:4mm;break-inside:avoid;page-break-inside:avoid;}
  .vq-card{flex:1;border:1px solid var(--accent-border);border-radius:2mm;overflow:hidden;break-inside:avoid;page-break-inside:avoid;}
  .vq-card-h{background:var(--accent-soft);color:var(--accent);font-weight:700;font-size:10pt;padding:2mm 3mm;display:flex;align-items:center;gap:2mm;}
  .vq-card-b{padding:2.5mm 3mm;font-size:9pt;line-height:1.5;}
  .vq-card-b .vq-c-name{font-weight:700;font-size:10pt;margin-bottom:1mm;}
  .vq-intro{font-size:9.5pt;line-height:1.45;margin:0 0 4mm;white-space:pre-line;}
  .vq-sec{display:flex;align-items:center;gap:2mm;color:var(--accent);font-weight:700;font-size:11pt;border-bottom:2px solid var(--accent);padding-bottom:1mm;margin:4mm 0 3mm;break-after:avoid;page-break-after:avoid;}
  .vq-sec small{font-weight:400;font-size:8pt;color:#666;}
  .vq-sic{color:var(--accent);}
  /* M2.1 · "OPCIONES DISPONIBLES" siempre inicia página nueva */
  .vq-sec-opt{break-before:page;page-break-before:always;margin-top:0;}
  /* M2.5/M2.6 · Imagen ~5×5 cm; espaciado compensado para no aumentar páginas */
  .vq-pieza{display:flex;gap:4mm;border:1px solid #dbe3ec;border-radius:2mm;padding:2.5mm;margin-bottom:2.5mm;page-break-inside:avoid;break-inside:avoid;}
  /* Mosquitera (concepto en una línea, sin imagen) */
  .vq-linea{display:flex;justify-content:space-between;align-items:center;gap:6mm;border:1px solid var(--accent-border);border-left:3px solid var(--accent);border-radius:2mm;padding:2mm 3mm;margin-bottom:2.5mm;page-break-inside:avoid;break-inside:avoid;}
  .vq-linea .vq-l-desc{min-width:0;}
  .vq-linea .vq-l-tit{font-weight:700;font-size:10.5pt;color:#1a1a1a;}
  .vq-linea .vq-l-tit.vq-l-concepto{font-weight:400;}
  .vq-linea .vq-l-descr{display:block;font-weight:700;font-size:9pt;color:#111;margin-top:.4mm;line-height:1.25;}
  .vq-linea .vq-l-sub{display:block;font-size:8.5pt;color:#666;margin-top:.4mm;}
  .vq-linea .vq-l-nums{display:flex;align-items:center;gap:5mm;flex:0 0 auto;font-size:9.5pt;white-space:nowrap;}
  .vq-linea .vq-l-dto{font-size:9pt;color:#1f2937;font-weight:600;white-space:nowrap;}
  .vq-linea .vq-l-total{font-weight:800;color:var(--accent);font-size:11pt;}
  .vq-p-img{flex:0 0 50mm;display:flex;align-items:center;justify-content:center;}
  .vq-p-img img{max-width:50mm;max-height:50mm;object-fit:contain;}
  .vq-p-noimg{font-size:8pt;color:#aaa;border:1px dashed #ccc;width:50mm;height:50mm;display:flex;align-items:center;justify-content:center;}
  .vq-p-info{flex:1;min-width:0;}
  .vq-p-tit{font-weight:800;font-size:12pt;color:#111;margin-bottom:.4mm;}
  .vq-p-desc{font-weight:700;font-size:9.5pt;color:#111;margin-bottom:1mm;line-height:1.25;}
  .vq-opt-badge{background:var(--accent);color:#fff;font-size:7pt;font-weight:700;padding:.5mm 2mm;border-radius:3mm;margin-left:2mm;vertical-align:middle;}
  .vq-p-cols{display:flex;gap:4mm;}
  .vq-p-cd{flex:0 0 40mm;font-size:9pt;line-height:1.5;}
  .vq-p-cd b{color:var(--accent);}
  .vq-p-ca{flex:1;margin:0;padding:0;list-style:none;font-size:8.5pt;line-height:1.35;}
  .vq-p-ca li{display:flex;gap:1.5mm;align-items:flex-start;margin-bottom:.6mm;}
  .vq-chk{color:#16a34a;font-weight:800;}
  .vq-p-foot{display:flex;gap:2mm;margin-top:2.5mm;border-top:1px solid #e3e8ef;padding-top:2mm;}
  .vq-pf-cell{flex:1;display:flex;flex-direction:column;gap:.5mm;}
  .vq-pf-l{font-size:7pt;text-transform:uppercase;color:#888;letter-spacing:.3px;}
  .vq-pf-v{font-size:10pt;font-weight:700;}
  .vq-pf-total{flex:1.2;background:var(--accent-soft);border-radius:2mm;padding:1.5mm 3mm;display:flex;flex-direction:column;justify-content:center;}
  .vq-pf-total .vq-pf-l{color:var(--accent);}
  .vq-pf-tv{font-size:13pt;font-weight:800;color:var(--accent);}
  .vq-opm .vq-p-foot{margin-top:0;border-top:0;padding-top:0;}
  /* M2.2/M2.3 · Resumen económico indivisible (nunca se parte) */
  .vq-resumen{display:flex;align-items:stretch;gap:4mm;margin:4mm 0;border:1px solid #dbe3ec;border-radius:2mm;padding:3mm;break-inside:avoid;page-break-inside:avoid;}
  .vq-r-left{flex:0 0 30mm;display:flex;align-items:center;gap:2mm;color:var(--accent);font-weight:800;font-size:11pt;line-height:1.1;}
  .vq-r-mid{flex:1;font-size:9.5pt;}
  .vq-r-row{display:flex;justify-content:space-between;padding:1.2mm 0;border-bottom:1px solid #eef2f6;}
  .vq-r-row .neg{color:#dc2626;}
  .vq-r-sub{font-weight:700;}
  .vq-r-total{flex:0 0 50mm;background:var(--accent);color:#fff;border-radius:2mm;padding:3mm;text-align:center;display:flex;flex-direction:column;justify-content:center;}
  .vq-rt-tit{font-size:9pt;font-weight:600;opacity:.92;}
  .vq-rt-val{font-size:19pt;font-weight:800;margin:1mm 0;}
  .vq-rt-sub{font-size:8pt;opacity:.85;}
  .vq-fc{display:flex;align-items:center;gap:3mm;}
  .vq-fc-logo{height:14mm;width:auto;}
  .vq-fc-data{display:flex;flex-direction:column;font-size:8pt;color:#444;gap:.6mm;}
  .vpres-print .vpr-tbl{width:100%;border-collapse:collapse;margin-bottom:3mm;font-size:9pt;}
  .vpres-print .vpr-tbl th,.vpres-print .vpr-tbl td{border:1px solid #cdd6e0;padding:1.4mm 2mm;}
  .vpres-print .vpr-tbl th{background:var(--accent-soft);color:var(--accent);font-size:8pt;text-align:left;}
  .vpres-print .vpr-tbl td.r,.vpres-print .vpr-tbl th.r{text-align:right;}
  /* Hoja de Condiciones — SIEMPRE en su propia página (salto antes), bloque que
     fluye de arriba abajo. Compacta para caber en 1 sola A4. */
  .cg-page{break-before:page;page-break-before:always;color:#1f2937;font-size:7.5pt;}
  .cg-head{display:flex;justify-content:space-between;align-items:flex-start;flex:0 0 auto;}
  .cg-title{font-size:12pt;font-weight:800;color:var(--accent);margin:0 0 1mm;}
  .cg-meta div{font-size:7.5pt;margin-bottom:.3mm;}
  .cg-meta b{color:var(--accent);}
  .cg-logo{height:15mm;width:auto;}
  .cg-rule{height:1mm;background:linear-gradient(90deg,var(--kom-azul) 0%,var(--kom-azul) 35%,var(--kom-naranja) 100%);border-radius:1mm;margin:1mm 0 1.5mm;flex:0 0 auto;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .cg-items{display:flex;flex-direction:column;gap:1mm;}
  .cg-item{display:flex;gap:2.2mm;page-break-inside:avoid;}
  .cg-num{flex:0 0 4.6mm;height:4.6mm;border-radius:50%;background:var(--accent);color:#fff;font-weight:700;font-size:7.5pt;display:flex;align-items:center;justify-content:center;}
  .cg-it-tit{font-weight:700;color:var(--accent);font-size:8pt;line-height:1.15;}
  .cg-it-txt{font-size:7.5pt;line-height:1.25;text-align:justify;color:#333;}
  /* Bloque de garantía: caja azul como el resto del presupuesto; marca Kömmerling en su azul */
  .cg-gar{display:flex;align-items:center;gap:3mm;margin:1mm 0;background:#fff;border:.3mm solid var(--accent-border);border-left:1.6mm solid var(--accent);border-radius:2mm;padding:1.5mm 2.5mm;flex:0 0 auto;}
  .cg-sello{flex:0 0 auto;}
  .cg-sello img{height:13mm;width:auto;display:block;}
  .cg-gtxt{font-size:7.5pt;line-height:1.3;text-align:justify;color:#333;}
  .cg-kom{color:var(--kom-azul);font-weight:700;letter-spacing:.1px;}
  .cg-pagos{flex:0 0 auto;}
  .cg-pagos-h{display:flex;align-items:center;gap:2mm;color:var(--accent);font-weight:700;font-size:9.5pt;border-bottom:1.5px solid var(--accent);padding-bottom:.6mm;margin:1mm 0 1mm;}
  .cg-pay-sel{font-size:8pt;margin-bottom:1mm;display:flex;gap:6mm;align-items:center;flex-wrap:wrap;}
  .cg-radio{display:inline-flex;align-items:center;gap:1.5mm;}
  .cg-rdot{width:2.6mm;height:2.6mm;border-radius:50%;border:1.2px solid var(--accent);display:inline-block;}
  .cg-rdot.on{background:var(--accent);box-shadow:inset 0 0 0 .6mm #fff;}
  .cg-pay-grid{display:flex;gap:4mm;margin-bottom:1mm;}
  .cg-pcard{flex:1;border:1px solid var(--accent-border);border-radius:2mm;overflow:hidden;opacity:.7;}
  .cg-pcard.sel{opacity:1;border:1.5px solid var(--accent);}
  .cg-pcard-h{background:var(--accent);color:#fff;font-weight:700;font-size:8pt;text-align:center;padding:.8mm;}
  .cg-pcard-b{display:flex;}
  .cg-pcol{flex:1;text-align:center;padding:1.2mm 1mm;border-right:1px solid #e3e8ef;}
  .cg-pcol:last-child{border-right:0;}
  .cg-pct{font-size:11.5pt;font-weight:800;color:var(--accent);}
  .cg-plbl{font-size:6.5pt;font-weight:600;}
  .cg-pdet{font-size:6pt;color:#888;}
  .cg-pamt{font-size:8pt;font-weight:700;margin-top:.3mm;}
  .cg-pconcepto{margin-top:1mm;padding-top:.8mm;border-top:.3mm dashed var(--accent);font-size:5.5pt;line-height:1.25;color:#2a2a2a;}
  .cg-pconcepto b{display:block;font-weight:800;color:#0f2a44;font-family:monospace;font-size:6pt;margin-top:.2mm;}
  .cg-fin{font-size:8pt;margin:.8mm 0 .4mm;}
  .cg-cta{font-size:9.5pt;font-weight:700;color:var(--accent);margin-bottom:1mm;}
  .cg-firmas{display:flex;gap:14mm;margin:1mm 0;flex:0 0 auto;}
  .cg-firmas>div{flex:1;font-weight:700;font-size:8pt;}
  .cg-firmas .cg-empresa{font-weight:400;font-size:7pt;margin:.4mm 0 4mm;}
  .cg-sline{border-bottom:1px solid #888;}
  .cg-page .vq-fc{flex:0 0 auto;}
  .cg-page .vq-fc-logo{height:11mm;}
  .cg-page .vq-fc-data{font-size:7pt;}
  @page{margin:12mm;}
}

/* ---------- Precios DB ---------- */
.db-wrap{padding:24px 30px;overflow:auto;width:100%;}
.db-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px;flex-wrap:wrap;gap:12px;}
.db-head h1{margin:0;font-family:var(--font-display);font-size:32px;font-weight:700;letter-spacing:0;line-height:1.05;}
.db-layout{display:grid;grid-template-columns:250px minmax(0,1fr);gap:22px;align-items:start;}
.db-side{position:sticky;top:0;display:flex;flex-direction:column;gap:8px;}
.db-side-sel{display:none;}
.db-side-list{display:flex;flex-direction:column;gap:2px;max-height:calc(100vh - 210px);overflow:auto;padding-right:4px;}
.db-tab{display:flex;align-items:center;justify-content:space-between;gap:8px;border:0;background:transparent;color:var(--text-soft);font:inherit;font-size:13px;font-weight:500;text-align:left;padding:7px 10px;border-radius:6px;cursor:pointer;}
.db-tab:hover{background:var(--gray-soft);color:var(--text);}
.db-tab.active{background:var(--gray-soft);color:var(--text);font-weight:600;box-shadow:inset 2px 0 0 var(--accent);}
.db-tab .count{font-size:11px;color:var(--text-faint);font-weight:500;flex:0 0 auto;}
.db-side-vacio{font-size:12px;padding:6px 10px;}
@media(max-width:900px){.db-layout{grid-template-columns:1fr;}.db-side{position:static;}.db-side-list,.db-side-q{display:none;}.db-side-sel{display:block;}}
.db-card{break-inside:avoid;margin-bottom:18px;}
.db-main .db-card{margin-bottom:0;}
.db-card .card-head .count{font-size:11.5px;color:var(--text-faint);font-weight:500;}
.db-card .card-body{padding:0;}
.db-card table{font-size:12.5px;}
.db-card th,.db-card td{padding:5px 12px;}
.db-card td:last-child{width:40px;text-align:center;}
.db-card td{vertical-align:top;}
.db-card .db-ta{min-height:0;resize:none;overflow:hidden;line-height:1.4;padding:6px 10px;display:block;}
.db-card .add-row{padding:8px 12px;}
.del-x{border:0;background:transparent;color:var(--text-faint);cursor:pointer;font-size:15px;line-height:1;padding:2px 6px;border-radius:5px;}
.del-x:hover{background:var(--red-soft);color:var(--red);}

/* ---------- Modal ---------- */
.modal-bg{position:fixed;inset:0;background:rgba(16,24,40,.45);display:none;place-items:center;z-index:100;backdrop-filter:blur(2px);}
.modal-bg.show{display:grid;}
.modal{background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:var(--elevation-overlay);width:520px;max-width:92vw;max-height:88vh;overflow:auto;}
.modal-head{padding:15px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;}
.modal-head h3{margin:0;font-size:15px;font-weight:600;}
.modal-body{padding:18px;}
.modal-foot{padding:12px 18px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px;}

/* ---------- Toast ---------- */
#toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(20px);
  background:#1f2937;color:#fff;padding:10px 18px;border-radius:10px;font-size:13px;font-weight:500;
  box-shadow:var(--shadow-md);opacity:0;pointer-events:none;transition:opacity 250ms var(--ease-out),transform 250ms var(--ease-out);z-index:200;}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0);}
#toast.act{pointer-events:auto;}
#toast button{background:none;border:0;color:#fff;font:inherit;font-weight:700;text-decoration:underline;margin-left:10px;cursor:pointer;padding:0;}

::-webkit-scrollbar{width:10px;height:10px;}
::-webkit-scrollbar-thumb{background:#d4dbe5;border-radius:6px;border:2px solid var(--bg);}
::-webkit-scrollbar-thumb:hover{background:#bcc6d3;}
.muted{color:var(--text-faint);}
.right{text-align:right;}
.flex{display:flex;align-items:center;gap:10px;}
.gap{gap:10px;}
.mt{margin-top:14px;}

/* ---------- Dashboard ---------- */
.dash{padding:22px 26px;}
.dash-row{display:grid;gap:16px;margin-bottom:16px;}
.dg-4{grid-template-columns:repeat(4,minmax(0,1fr));}
.dg-3{grid-template-columns:repeat(3,minmax(0,1fr));}
.dg-2{grid-template-columns:repeat(2,minmax(0,1fr));}
@media(max-width:1300px){.dg-4{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media(max-width:1100px){.dg-3{grid-template-columns:1fr;}.dg-2{grid-template-columns:1fr;}}
@media(max-width:760px){.dg-4{grid-template-columns:1fr;}}
.w{background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:none;display:flex;flex-direction:column;min-width:0;}
.w-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);}
.w-tit{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;letter-spacing:-.1px;}
.w-tit .ic{width:15px;height:15px;color:var(--text-faint);}
.w-head>.flex{flex-wrap:wrap;}
.w-link{font-size:12px;font-weight:500;color:var(--accent);cursor:pointer;white-space:nowrap;}
.w-link:hover{text-decoration:underline;}
.w-body{padding:14px 16px;min-width:0;}
.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:4px;}
.kpi{padding:5px 7px;cursor:pointer;border-radius:8px;transition:background-color .12s;}
.kpi:hover{background:var(--panel-2);}
.kpi .kpi-n{font-size:22px;font-weight:700;letter-spacing:-.5px;}
.kpi .kpi-l{font-size:11.5px;color:var(--text-soft);}
.kpi.k-green .kpi-n{color:var(--green);}
.kpi.k-amber .kpi-n{color:var(--amber);}
.kpi.k-accent .kpi-n{color:var(--accent);}
.kpi.k-red .kpi-n{color:var(--red);}
.dash-list{display:flex;flex-direction:column;}
.dash-li{display:flex;align-items:center;gap:10px;padding:8px 4px;border-bottom:1px solid var(--border);cursor:pointer;border-radius:6px;}
.dash-li:last-child{border-bottom:0;}
.dash-li:hover{background:var(--panel-2);}
.dash-li .dl-dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto;}
.dash-li .dl-main{flex:1;min-width:0;}
.dash-li .dl-t{font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dash-li .dl-s{font-size:11.5px;color:var(--text-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dash-li .dl-meta{font-size:11px;color:var(--text-faint);white-space:nowrap;}
.dash-empty{padding:16px 4px;text-align:center;color:var(--text-faint);font-size:12.5px;}
.stat-3{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,170px),1fr));gap:10px;margin-bottom:14px;}
/* KPIs premium (UI-6): tiles neutros homogéneos, número protagonista, etiqueta discreta */
.stat-box{background:var(--surface-muted);border:0;border-radius:8px;padding:12px 14px;}
.stat-box .sb-n{font-size:23px;font-weight:700;letter-spacing:-.5px;line-height:1.15;}
.stat-box .sb-l{font-size:10.5px;color:var(--text-faint);font-weight:600;margin-top:3px;}
.stat-box.green .sb-n{color:var(--green);}
.stat-box.sb-dual{display:grid;grid-template-columns:1fr 1fr;gap:6px;}
.stat-box.sb-dual>div+div{border-left:1px solid var(--border);padding-left:6px;}
.stat-box.red .sb-n{color:var(--red);}
.stat-box.accent .sb-n{color:var(--accent);}
.chart-legend{display:flex;gap:16px;font-size:11px;color:var(--text-faint);margin:2px 0 8px;}
.chart-legend i{display:inline-block;width:12px;height:3px;border-radius:2px;margin-right:6px;vertical-align:middle;}
.chart{margin-top:2px;}
.chart svg{width:100%;height:auto;display:block;}
.mini-bars{display:flex;flex-direction:column;gap:8px;}
.mini-bar{display:grid;grid-template-columns:90px 1fr 48px;align-items:center;gap:8px;font-size:12px;}
.mini-bar .mb-lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mini-bar .mb-track{height:8px;background:var(--gray-soft);border-radius:6px;overflow:hidden;}
.mini-bar .mb-fill{height:100%;background:var(--accent);border-radius:6px;}
.mini-bar .mb-val{text-align:right;font-family:var(--mono);font-size:11.5px;color:var(--text-soft);}
.dash-seg .st-cell{display:flex;gap:3px;justify-content:center;}
.st-dot{width:17px;height:17px;border-radius:50%;border:1.5px solid var(--border-2);display:inline-grid;place-items:center;font-size:9px;color:#fff;}
.st-dot.completado{background:var(--green);border-color:var(--green);}
.st-dot.progreso{background:var(--accent);border-color:var(--accent);}
.st-dot.pendiente{background:#fff;border-color:var(--border-2);}
/* Top row 4 paneles equilibrados (Obras / Remates / Reparaciones / Incidencias) */
.dash-top3{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;}
@media(max-width:1100px){.dash-top3{grid-template-columns:1fr 1fr;}}
@media(max-width:760px){.dash-top3{grid-template-columns:1fr;}}
/* M7 · Panel Incidencias (consumidor de la Bitácora) */
.dash-inc-w{display:flex;flex-direction:column;}
.inc-summary{display:flex;align-items:center;gap:12px;padding:12px;border-bottom:1px solid var(--border);}
.inc-count{font-family:var(--mono);font-size:28px;font-weight:700;line-height:1;min-width:52px;text-align:center;padding:8px 6px;border-radius:8px;background:var(--panel);}
.inc-summary.lvl-green{background:var(--green-soft);} .inc-summary.lvl-green .inc-count{color:var(--green);}
.inc-summary.lvl-amber{background:var(--amber-soft);} .inc-summary.lvl-amber .inc-count{color:var(--amber);}
.inc-summary.lvl-red{background:var(--red-soft);} .inc-summary.lvl-red .inc-count{color:var(--red);}
.inc-state{font-size:12.5px;font-weight:600;color:var(--text);}
.inc-sub{font-size:11px;color:var(--text-faint);margin-top:3px;}
.dash-inc-w .w-body{padding:2px 10px;}
.dash-top3 .w-body{max-height:330px;overflow:auto;}
.d-list{display:flex;flex-direction:column;}
.d-item{display:flex;align-items:flex-start;gap:9px;padding:9px 4px;border-bottom:1px solid var(--border);cursor:pointer;border-radius:6px;}
.d-item:last-child{border-bottom:0;}
.d-item:hover{background:var(--gray-soft);}
.d-dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto;margin-top:5px;}
.d-main{flex:1;min-width:0;}
.d-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.d-code{font-family:var(--mono);font-size:12.5px;font-weight:700;color:var(--accent);}
.d-date{font-size:11px;color:var(--text-faint);font-family:var(--mono);margin-left:auto;}
.d-sit{font-size:11px;color:var(--text-soft);font-weight:500;}
.d-sub{font-size:12px;color:var(--text-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px;}
.badge-pri{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:20px;}
.pri-ejec{background:var(--green-soft);color:var(--green);}
.pri-proceso{background:var(--accent-soft);color:var(--accent);}
.e-seg-red{background:var(--red-soft);color:var(--red);}
/* Reparaciones acordeón */
.rep-acc{border-bottom:1px solid var(--border);}
.rep-acc:last-child{border-bottom:0;}
.rep-acc-head{display:flex;align-items:center;gap:7px;padding:9px 6px;cursor:pointer;font-size:13px;font-weight:600;border-radius:6px;}
.rep-acc-head:hover{background:var(--panel-2);}
.rep-loc{flex:1;}
.rep-cnt{color:var(--text-faint);font-weight:600;}
.rep-chev{color:var(--text-faint);transition:transform .15s;}
.rep-acc.open .rep-chev{transform:rotate(180deg);}
.rep-acc-body{display:none;padding:0 6px 8px;}
.rep-acc.open .rep-acc-body{display:block;}
.rep-li{padding:6px 8px;border-left:2px solid var(--accent-border);margin:4px 0 4px 4px;cursor:pointer;border-radius:0 6px 6px 0;}
.rep-li:hover{background:var(--accent-soft);}
.rep-code{font-family:var(--mono);font-size:11.5px;font-weight:700;color:var(--accent);}
.rep-name{font-size:12px;font-weight:600;}
.rep-desc{font-size:11.5px;color:var(--text-soft);margin-top:1px;}
.rep-more{font-size:11.5px;font-weight:600;color:var(--accent);padding:5px 8px;cursor:pointer;}
.rep-more:hover{text-decoration:underline;}
/* Planning panel */
.pln-body{display:flex;flex-direction:column;gap:0;padding:0;max-height:none;}
.pln-days{padding:6px 14px;}
.pln-day{display:flex;gap:12px;padding:8px 0;border-bottom:1px solid var(--border);}
.pln-day:last-child{border-bottom:0;}
.pln-date{flex:0 0 52px;font-size:12px;font-weight:700;color:var(--text-soft);padding-top:3px;}
.pln-rows{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px;}
.pln-row{display:flex;align-items:center;gap:9px;cursor:pointer;border-radius:6px;padding:2px 4px;}
.pln-row:hover{background:var(--gray-soft);}
.pln-team{font-size:10.5px;font-weight:700;color:#fff;padding:2px 9px;border-radius:6px;white-space:nowrap;flex:0 0 auto;max-width:120px;overflow:hidden;text-overflow:ellipsis;}
.pln-obra{font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pln-foot{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:12px 14px;border-top:1px solid var(--border);background:transparent;}
.pln-sub-tit{font-size:10.5px;font-weight:700;color:var(--text-faint);margin-bottom:7px;}
.inst-row{display:flex;justify-content:space-between;align-items:center;font-size:12.5px;padding:3px 0;}
.inst-row b{font-size:15px;}
/* Charts header period + legend pills */
.w-period{width:auto;font-size:11.5px;padding:3px 8px;border-radius:7px;color:var(--text-soft);background:var(--panel-2);border:1px solid var(--border-2);}
.dash-charts .stat-box{text-align:center;}
/* Filtro temporal de gráficas (Fase S1.3) */
.tf{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end;}
.tf select,.tf input[type=date]{width:auto;font-size:11.5px;padding:3px 7px;border-radius:7px;color:var(--text-soft);background:var(--panel-2);border:1px solid var(--border-2);}
.tf .tf-range{font-size:11px;color:var(--text-faint);white-space:nowrap;}
.tf .tf-range.tf-err{color:var(--red);font-weight:600;}
.tf .tf-sep{color:var(--text-faint);font-size:11px;}
.dash-charts-bar{display:flex;justify-content:flex-end;margin:2px 0 8px;}
.tf-sync{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-soft);cursor:pointer;}
.tf-sync input{margin:0;}
.tf-sync select{font-size:11.5px;padding:2px 6px;border-radius:7px;color:var(--text-soft);background:var(--panel-2);border:1px solid var(--border-2);}
.dash-charts-bar{gap:14px;align-items:center;}
.dash-updated{font-size:10.5px;margin-left:auto;}
.cmp-badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;padding:3px 8px;border-radius:7px;margin-bottom:8px;border:1px solid var(--border-2);background:var(--panel-2);}
.cmp-badge.up{color:var(--green);} .cmp-badge.down{color:var(--red);} .cmp-badge.flat{color:var(--text-soft);}
.cmp-badge .cmp-lbl{color:var(--text-faint);font-weight:400;}
.cmp-badge .cmp-pct{opacity:.85;}
.leg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--text-soft);}
.leg .st-dot{width:14px;height:14px;font-size:8px;}
.badge.cmt,.badge-pri.cmt{display:inline-flex;}
.cmt{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;background:var(--panel-2);border:1px solid var(--border);color:var(--text-soft);padding:3px 9px;border-radius:7px;white-space:nowrap;}
/* Presupuesto de venta (editor) */
.venta-tbl{width:100%;}
.venta-tbl th{font-size:10.5px;}
.venta-tbl td{vertical-align:top;padding:7px 8px;}
.venta-tbl textarea.auto{min-height:34px;resize:none;overflow:hidden;font-size:13px;line-height:1.35;padding:7px 9px;}
.venta-tbl input.num{text-align:right;padding:7px 8px;}
.vt-img{position:relative;height:3cm;width:118px;border:1px dashed var(--border-2);border-radius:8px;display:grid;place-items:center;cursor:pointer;background:var(--panel-2);overflow:hidden;}
.vt-img img{max-height:100%;max-width:100%;object-fit:contain;}
.vt-img .vt-img-add{font-size:11px;color:var(--text-faint);}
.vt-img .vt-img-clear{position:absolute;top:3px;right:3px;background:rgba(0,0,0,.55);color:#fff;border:0;border-radius:50%;width:18px;height:18px;cursor:pointer;font-size:11px;line-height:1;padding:0;}
.vt-optchk{font-size:11.5px;display:flex;align-items:center;gap:5px;white-space:nowrap;cursor:pointer;}
.vt-optchk input{width:auto;}
.venta-tot{width:100%;max-width:440px;margin-left:auto;font-size:14px;}
.venta-tot td{padding:7px 4px;}
.venta-tot td:last-child{text-align:right;}
.venta-tot input#vtExtra{width:64px;display:inline-block;text-align:right;}
.venta-tot select#vtIva{width:auto;display:inline-block;}
.venta-tot .vt-sub td{border-top:1px solid var(--border);font-weight:600;}
.venta-tot .vt-grand td{border-top:2px solid var(--border);font-weight:700;font-size:17px;color:var(--accent);}
/* M6 · Opciones comerciales (bloque informativo, no suma al total) */
.vt-opc-info{max-width:440px;margin:14px 0 0 auto;background:var(--surface-muted);border:1px solid var(--border);border-radius:8px;padding:12px 14px;}
.vt-opc-tit{font-size:12px;font-weight:600;color:var(--text-soft);margin-bottom:10px;}
.vt-opc-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;}
.vt-opc-grid>div{display:flex;flex-direction:column;gap:1px;}
.vt-opc-l{font-size:10.5px;color:var(--text-faint);font-weight:600;}
.vt-opc-v{font-size:15px;font-weight:600;font-family:var(--mono);}
/* Bloques de pieza (imagen izq · descripción der) */
.vbloques{display:flex;flex-direction:column;gap:14px;}
.vbloque{display:flex;gap:16px;border:1px solid var(--border);border-radius:10px;padding:16px;background:transparent;}
.vb-img{flex:0 0 150px;}
.vb-img .vt-img{height:3.2cm;width:150px;}
.vb-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px;}
.vb-titulo{font-weight:700;font-size:15px;border:1px solid transparent;background:transparent;padding:5px 7px;border-radius:6px;}
.vb-titulo:hover,.vb-titulo:focus{border-color:var(--border-2);background:#fff;}
.vb-descripcion{font-weight:600;font-size:13px;color:var(--text-soft);border:1px solid transparent;background:transparent;padding:4px 7px;border-radius:6px;width:100%;resize:none;line-height:1.3;margin-top:-4px;}
.vb-descripcion:hover,.vb-descripcion:focus{border-color:var(--border-2);background:#fff;}
.vb-cd{display:grid;grid-template-columns:1fr 1fr;gap:2px 18px;font-size:12.5px;color:var(--text-soft);}
.vb-cd .vb-k{font-weight:600;color:var(--text);}
.vb-caract{display:flex;flex-direction:column;gap:2px;}
.vb-ca{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12.5px;padding:3px 6px;border-radius:6px;}
.vb-ca:nth-of-type(even){background:rgba(37,99,235,.08);} /* rayado alterno: solo interfaz de venta */
.vb-ca:hover{background:#fff;}
.vb-ca-t{flex:1;min-width:0;}
.vb-ca-act{display:flex;gap:1px;}
.vb-ca-act button{border:0;background:transparent;cursor:pointer;font-size:11px;padding:1px 5px;border-radius:4px;color:var(--text-faint);width:auto;}
.vb-ca-act button:hover{background:var(--gray-soft);color:var(--text);}
.vb-foot{display:flex;align-items:center;gap:14px;flex-wrap:wrap;border-top:1px solid var(--border);padding-top:9px;margin-top:2px;}
.vb-uds{font-size:12.5px;color:var(--text-soft);font-weight:600;}
.vb-fl{font-size:12px;color:var(--text-soft);display:flex;align-items:center;gap:5px;}
.vb-fl input{width:92px;text-align:right;}
.vb-total{margin-left:auto;font-weight:700;font-size:16px;color:var(--accent);}
.cap-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 4px;border-bottom:1px solid var(--border);}
.cap-row:last-child{border-bottom:0;}
.cap-chk{justify-content:flex-start;cursor:pointer;border-radius:6px;}
.cap-chk:hover{background:var(--gray-soft);}
.cap-chk input[type=checkbox]{width:auto;margin:0;}
.cap-chk.is-ya{cursor:default;opacity:.6;}
.cap-chk.is-ya:hover{background:transparent;}

/* ---------- Estado de obras / seguimiento ---------- */
.seg-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px;}
.seg-bar h2{margin:0;font-size:16px;font-weight:700;}
.seg-filtros{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px;}
.seg-filtros select{max-width:230px;}
.seg-card{padding:16px 18px;}
.seg-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px;}
.seg-obra{font-size:14px;font-weight:700;display:flex;align-items:baseline;gap:8px;}
.seg-cod{font-size:11px;color:var(--text-faint);}
.seg-name{font-size:13px;font-weight:600;margin-top:2px;}
.seg-meta{font-size:12px;color:var(--text-soft);margin-top:2px;}
.seg-estado{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:5px;white-space:nowrap;}
.e-seg-pendiente{background:var(--gray-soft);color:var(--text-soft);}
.e-seg-proceso{background:var(--amber-soft);color:var(--amber);}
.e-seg-espera{background:var(--accent-soft);color:var(--accent);}
.e-seg-lista{background:var(--green-soft);color:var(--green);}
.seg-prog{display:flex;align-items:center;gap:10px;margin-bottom:14px;}
.seg-prog-bar{flex:1;height:10px;background:var(--gray-soft);border-radius:20px;overflow:hidden;}
.seg-prog-fill{height:100%;border-radius:20px;transition:width .2s;}
.fill-pendiente{background:var(--text-faint);}
.fill-proceso{background:var(--amber);}
.fill-espera{background:var(--accent);}
.fill-lista{background:var(--green);}
.seg-prog-pct{font-size:13px;font-weight:700;min-width:42px;text-align:right;}
.seg-elems{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:10px;}
.seg-elem-lbl{font-size:11px;font-weight:600;color:var(--text-soft);margin-bottom:4px;}
.seg-seg{display:flex;border:1px solid var(--border-2);border-radius:8px;overflow:hidden;}
.seg-opt{flex:1;white-space:nowrap;border:0;border-right:1px solid var(--border);background:#fff;color:var(--text-soft);font:inherit;font-size:11.5px;font-weight:600;padding:6px 4px;cursor:pointer;transition:background-color .12s,color .12s;width:auto;}
.seg-opt:last-child{border-right:0;}
.seg-opt:hover{background:var(--panel-2);}
.seg-opt.active.n-pendiente{background:var(--text-faint);color:#fff;}
.seg-opt.active.n-progreso{background:var(--amber);color:#fff;}
.seg-opt.active.n-completado{background:var(--green);color:#fff;}
.seg-com{min-height:54px;}

/* ---------- Planning semanal ---------- */
.planning-wrap{padding:4px 2px;overflow:auto;width:100%;min-height:0;}
.pl-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px;}
.pl-bar h2{margin:0;font-size:16px;font-weight:700;}
.pl-bar .pl-range{font-size:13px;color:var(--text-soft);font-weight:500;}
.pl-bar .spacer{flex:1;}
.pl-week{display:flex;flex-direction:column;gap:12px;}
.pl-day{background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:none;display:flex;flex-direction:row;align-items:stretch;overflow:hidden;}
.pl-day.is-today{border-color:var(--accent-border);box-shadow:0 0 0 2px var(--accent-soft);}
.pl-day-head{flex:0 0 132px;padding:11px 13px;border-right:1px solid var(--border);background:var(--panel-2);display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:4px;}
.pl-day-head .pl-dn{font-size:13px;font-weight:700;text-transform:capitalize;}
.pl-day-head .pl-dd{font-size:11px;color:var(--text-faint);}
.pl-day.is-today .pl-dn{color:var(--accent);}
.pl-add{border:0;background:transparent;color:var(--accent);font:inherit;font-weight:700;font-size:14px;cursor:pointer;line-height:1;padding:3px 9px;border-radius:6px;width:auto;margin-top:4px;border:1px solid var(--accent-border);}
.pl-add:hover{background:var(--accent-soft);}
.pl-day-body{flex:1;min-width:0;padding:9px;display:flex;flex-direction:row;flex-wrap:wrap;align-items:flex-start;gap:9px;}
.pl-day-empty{color:var(--text-faint);font-size:11.5px;padding:10px 4px;}
.pl-task{flex:0 0 215px;width:215px;border:1px solid var(--border);border-radius:8px;background:var(--panel-2);padding:8px 9px;display:flex;flex-direction:column;gap:5px;}
.pl-task .pt-top{display:flex;align-items:flex-start;justify-content:space-between;gap:6px;}
.pl-task .pt-obra{font-size:12.5px;font-weight:700;color:var(--accent);font-family:var(--mono);}
.pl-task .pt-cli{font-size:12px;font-weight:600;}
.pl-task .pt-line{font-size:11.5px;color:var(--text-soft);}
.pl-task .pt-acts{display:flex;gap:2px;flex:0 0 auto;align-items:center;}
.pl-task .pl-grip{cursor:grab;color:var(--text-faint);font-size:14px;line-height:1;user-select:none;padding:0 2px;}
.pl-task .pl-grip:active{cursor:grabbing;}
.pl-task.pl-dragging{opacity:.45;}
.pl-task.pl-drop-before{box-shadow:inset 0 3px 0 var(--accent);}
.pl-task.pl-drop-after{box-shadow:inset 0 -3px 0 var(--accent);}
.pl-day-body.pl-day-drop{background:var(--accent-soft);border-radius:8px;}
.pl-task .pt-acts button{border:0;background:transparent;cursor:pointer;font-size:12px;padding:1px 4px;border-radius:5px;color:var(--text-faint);width:auto;}
.pl-task .pt-acts button:hover{background:var(--gray-soft);color:var(--text);}
.pl-task .pt-badges{display:flex;gap:5px;flex-wrap:wrap;}
.pl-emp-chips{display:flex;gap:4px;flex-wrap:wrap;}
.pl-emp-chips .ec{font-size:10.5px;font-weight:600;background:var(--accent-soft);color:var(--accent);border-radius:20px;padding:2px 8px;display:inline-flex;align-items:center;gap:4px;}
.pl-emp-chips .ec .x{cursor:pointer;opacity:.7;}
.pl-emp-chips .ec .x:hover{opacity:1;}
.pl-task .pt-com{font-size:11.5px;color:var(--text-faint);font-style:italic;}
/* Modal de tarea */
.pl-ac{position:relative;}
.pl-ac input.is-invalid{border-color:var(--red);background:var(--red-soft);}
.pl-ac-res{position:absolute;z-index:5;left:0;right:0;top:100%;margin-top:3px;background:#fff;border:1px solid var(--border-2);border-radius:8px;box-shadow:var(--shadow);max-height:240px;overflow:auto;}
.pl-ac-res .pl-ac-item{padding:7px 11px;cursor:pointer;font-size:13px;border-bottom:1px solid var(--border);}
.pl-ac-res .pl-ac-item:last-child{border-bottom:0;}
.pl-ac-res .pl-ac-item:hover,.pl-ac-res .pl-ac-item.active{background:var(--accent-soft);}
.pl-ac-res .pl-ac-item .pa-num{font-family:var(--mono);font-weight:700;color:var(--accent);font-size:12px;}
.pl-selinfo{margin-top:8px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:10px 12px;}
.pl-selinfo .si-row{display:flex;gap:8px;font-size:12.5px;padding:2px 0;}
.pl-selinfo .si-k{color:var(--text-faint);font-weight:600;min-width:78px;}
.pl-emp-box{border:1px solid var(--border-2);border-radius:8px;max-height:190px;overflow:auto;}
.pl-emp-box label{display:flex;align-items:center;gap:8px;padding:6px 11px;font-size:13px;cursor:pointer;border-bottom:1px solid var(--border);font-weight:500;}
.pl-emp-box label:last-child{border-bottom:0;}
.pl-emp-box label:hover{background:var(--panel-2);}
.pl-emp-box input{width:auto;}
/* Partes reparación/remates */
.ec-bc{flex-direction:row;align-items:center;gap:5px;}
.ec-bc .bc-svg{height:22px;width:auto;}
.ec-bc .ec-code{font-family:var(--mono);font-size:10px;}
.ptot-table{width:auto;min-width:250px;margin-top:8px;font-size:13px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;}
.ptot-table td{padding:4px 10px;border:0;}
.ptot-table .ptot-total td{border-top:1px solid var(--border-2);font-weight:700;font-size:15px;}
.obra-hist{margin-top:12px;}
.obra-desc{margin-bottom:10px;}
.obra-desc>div{font-size:13px;white-space:pre-wrap;margin-top:2px;}
@media(max-width:1100px){.pl-week{grid-template-columns:repeat(7,minmax(150px,1fr));}}
.w-search{padding:6px 14px 2px;}
.w-search-inp{width:100%;font-size:12.5px;}

.venta-activa{background:rgba(var(--accent-rgb,59,130,246),0.06);border-radius:6px;padding:2px 6px;margin:-2px -6px;}
.mod-activa-badge{font-size:10px;color:var(--accent);font-weight:600;margin-left:4px;}
.sum-row-activa{font-weight:600;color:var(--accent);}

/* ── Modalidad Comercial ── */
.mc-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:14px}
.mc-card{display:flex;align-items:flex-start;gap:10px;padding:12px;border:1.5px solid var(--border);border-radius:10px;cursor:pointer;transition:border-color .12s,background .12s}
.mc-card:hover{border-color:var(--accent)}
.mc-card.on{border-color:var(--accent);background:rgba(0,131,176,.06)}
.mc-card input{display:none}
.mc-radio{flex:0 0 18px;width:18px;height:18px;border:2px solid var(--border);border-radius:50%;margin-top:1px;position:relative;transition:border-color .12s}
.mc-card.on .mc-radio{border-color:var(--accent)}
.mc-card.on .mc-radio::after{content:"";position:absolute;inset:3px;background:var(--accent);border-radius:50%}
.mc-txt{display:flex;flex-direction:column;gap:2px}
.mc-txt b{font-size:13px}
.mc-sub{font-size:11px;color:var(--text-soft);line-height:1.35}
.mc-activa{border-top:1px solid var(--border);padding-top:12px}
.mc-activa-head{font-size:13.5px;color:var(--accent)}
.mc-activa-sub{font-size:11.5px;color:var(--text-soft);margin:2px 0 8px}
.mc-activa-aff{display:flex;flex-wrap:wrap;gap:6px;font-size:11px;color:var(--text-soft)}
.mc-activa-aff span{background:var(--surface-2,#f1f5f9);padding:2px 8px;border-radius:999px}
.mc-activa-aff span::before{content:"✓ ";color:var(--accent)}
@media(max-width:700px){.mc-grid{grid-template-columns:1fr}}

/* ── Pagos personalizados (Fase B) ── */
.pp-wrap{margin-top:10px}.pp-tbl{width:100%;border-collapse:collapse;font-size:13px}.pp-tbl th{text-align:left;font-weight:600;padding:4px 6px;border-bottom:1px solid var(--border)}.pp-tbl td{padding:4px 6px}.pp-ok{color:var(--accent)}.pp-err{color:#c0392b;font-weight:600}.pp-aviso{font-size:11.5px;color:#c0392b;margin-top:4px}

.pp-field-err{border-color:#c0392b!important;background:#fff5f5!important}

/* ── Pagos personalizados Fase C ── */
.pp-mode-bar{display:flex;align-items:center;gap:6px;margin-bottom:10px;font-size:12px}.pp-mode-lbl{color:var(--text-soft)}.pp-modo.active{background:var(--accent);color:#fff;border-color:var(--accent)}.pp-val-cell{padding-right:6px}.pp-resto-val{font-weight:600;color:var(--accent);font-family:var(--mono);font-size:12px}.pp-resto-lbl{display:flex;align-items:center;gap:3px;font-size:11px;color:var(--text-soft);margin-top:4px;cursor:pointer;user-select:none}.pp-resto-txt{font-size:10px;letter-spacing:.5px;font-weight:600}.pp-row-resto .pp-resto-txt{color:var(--accent)}.pp-cond{margin-top:3px;font-size:11.5px}

/* ── Series Admin Panel ── */
.sr-tbl{width:100%;border-collapse:collapse;font-size:12.5px}.sr-tbl th{text-align:left;padding:6px 10px;border-bottom:2px solid var(--border);font-weight:600;white-space:nowrap}.sr-tbl td{padding:6px 10px;border-bottom:1px solid var(--border);vertical-align:middle}.sr-inactiva{opacity:.55}.sr-plantilla{font-size:11.5px;background:var(--surface-2,#f1f5f9);padding:2px 6px;border-radius:4px}.sr-prev{font-size:12px;font-weight:600;color:var(--accent)}.sr-sim{font-size:10.5px;margin-top:1px}

/* ── Series Admin cards ── */
.sr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}.sr-card{border:1.5px solid var(--border);border-radius:10px;overflow:hidden}.sr-card.sr-inactiva{opacity:.55}.sr-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;padding:10px 14px;background:var(--surface-2,#f8fafc);border-bottom:1px solid var(--border)}.sr-card-body{padding:10px 14px;display:flex;flex-direction:column;gap:6px}.sr-campo{display:flex;gap:8px;align-items:baseline;font-size:12.5px}.sr-campo label{font-weight:600;min-width:110px;flex-shrink:0;color:var(--text-soft)}.sr-prev{font-weight:700;color:var(--accent);font-size:13px}.sr-sim{font-size:11px;margin-left:4px}

.sr-recom{margin-top:10px;padding:10px 12px;background:var(--amber-soft,#fffbeb);border:1.5px solid var(--amber,#f59e0b);border-radius:8px;font-size:12.5px;display:flex;flex-direction:column;gap:4px}

/* ── Módulo Configuración (reglas propias no duplicadas) ──
   La definición autoritativa de layout/sidebar/navegación vive en "Configuration
   Framework v2.0" (más abajo, prevalece por cascada). UI-7.1 eliminó el .cfg-layout
   legacy; UI-C elimina aquí el resto de duplicados ya superados por v2.0
   (.cfg-sidebar, .cfg-nav-btn:hover/.active, .cfg-nav-ic) → sin cambio visual.
   Se conservan reglas propias (.cfg-nav-btn base con transición, .cfg-main padding). */
.config-wrap{height:100%;display:flex;flex-direction:column}
.cfg-sidebar-title{padding:10px 18px 14px;font-size:12px;font-weight:700;color:var(--text-soft);}
.cfg-nav-btn{display:flex;align-items:center;gap:9px;width:100%;padding:9px 18px;border:none;background:transparent;cursor:pointer;font-size:13.5px;color:var(--text);text-align:left;transition:background .1s;border-radius:0}
.cfg-main{padding:28px 32px;overflow-y:auto}
.cfg-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 24px;text-align:center;color:var(--text-soft)}
.cfg-ph-ic{font-size:42px;margin-bottom:12px;opacity:.4}
/* ── Serie cards ── */
.cfg-series-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:20px}
.cfg-serie-grid{display:flex;flex-direction:column;gap:16px}
.cfg-serie-card{border:1.5px solid var(--border);border-radius:12px;overflow:hidden;background:var(--surface)}
.cfg-sc-head{display:flex;justify-content:space-between;align-items:center;padding:12px 18px;background:var(--surface-2,#f8fafc);border-bottom:1px solid var(--border)}
.cfg-sc-title{display:flex;align-items:center;gap:8px}
.cfg-sc-name{font-size:14px;font-weight:700;letter-spacing:.3px}
.cfg-sc-body{padding:18px}
.cfg-sc-cols{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-bottom:16px}
.cfg-field{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.cfg-field label{font-size:11px;font-weight:600;color:var(--text-soft);}
.cfg-mono{font-family:var(--mono);font-size:13px;color:var(--accent);font-weight:600}
.cfg-prev{font-size:14px}
.cfg-sim{font-size:11px;margin-top:2px}
.cfg-sc-actions{display:flex;flex-wrap:wrap;gap:8px;border-top:1px solid var(--border);padding-top:14px}
@media(max-width:900px){.cfg-layout{grid-template-columns:1fr}.cfg-sidebar{border-right:none;border-bottom:1px solid var(--border)}.cfg-sc-cols{grid-template-columns:1fr 1fr}}
@media(max-width:600px){.cfg-sc-cols{grid-template-columns:1fr}}

/* ── Configuration Framework v2.0 ── */
.cfg-header{padding:24px 32px 16px;border-bottom:1px solid var(--border)}
.cfg-header h1{margin:0 0 6px;font-size:22px}
.cfg-header p{margin:0;font-size:13px;line-height:1.5}
.cfg-layout{display:grid;grid-template-columns:230px 1fr;min-height:0;flex:1}
.cfg-sidebar{background:var(--surface-2,#f8fafc);border-right:1px solid var(--border);padding:10px 0;overflow-y:auto}
.cfg-nav-cat{padding:14px 18px 6px;font-size:10.5px;font-weight:700;color:var(--text-faint);}
.cfg-nav-btn{display:flex;align-items:center;gap:9px;width:100%;padding:8px 18px;border:none;background:transparent;cursor:pointer;font-size:13px;color:var(--text);text-align:left}
.cfg-nav-btn:hover{background:var(--surface-3,#f1f5f9)}
.cfg-nav-btn.active{background:var(--accent-soft,rgba(0,131,176,.1));color:var(--accent);font-weight:600}
.cfg-nav-ic{font-size:14px;width:20px;text-align:center;flex-shrink:0}
.cfg-nav-lbl{flex:1}
.cfg-nav-status{font-size:9px}
.cfg-main{display:flex;flex-direction:column;min-height:0}
#cfgContent{flex:1;padding:24px 32px;overflow-y:auto}
.cfg-footer{display:flex;justify-content:space-between;align-items:center;padding:12px 32px;border-top:1px solid var(--border);background:var(--surface-2,#f8fafc)}
.cfg-footer-actions{display:flex;gap:8px}
.cfg-pending{color:var(--amber,#f59e0b);font-size:12.5px;font-weight:600}
.cfg-saved{color:var(--green,#16a34a);font-size:12.5px;font-weight:600}

/* ── Equipos (Scheduling Framework) ── */
.eq-dot{display:inline-block;width:11px;height:11px;border-radius:50%;margin-right:4px}
.eq-operarios{display:flex;flex-wrap:wrap;gap:8px}
.eq-op-chk{display:flex;align-items:center;gap:4px;font-size:12.5px;background:var(--surface-2,#f1f5f9);padding:3px 8px;border-radius:6px;cursor:pointer}
.eq-op-chk input{width:auto}

/* ── Planning Semanal — Schedule View Model (Fase B) ── */
.pt-quicklink{cursor:pointer;font-size:11px;opacity:.6;margin-left:3px;text-decoration:none}
.pt-quicklink:hover{opacity:1}
.pt-conflictos .badge{margin-right:4px;margin-top:3px;display:inline-block}

/* ── GanttRenderer + ScheduleUI (Fase C.1) ── */
.dg-gantt{grid-template-columns:minmax(0,1fr) 280px;align-items:stretch}
.dash-stock-w{contain:size}
.dash-stock-w .w-body{flex:1 1 0;min-height:0;overflow:auto}
@media(max-width:1100px){.dg-gantt{grid-template-columns:1fr}.dash-stock-w{contain:none}.dash-stock-w .w-body{max-height:280px}}

/* ── Hero del Dashboard (D1.2): widgets + gráficas a la izquierda, mapa alto a la derecha ── */
.dash-hero{display:grid;grid-template-columns:minmax(0,2.4fr) minmax(0,1fr);gap:16px;margin-bottom:16px;align-items:stretch}
.dash-hero-left{display:flex;flex-direction:column;gap:16px;min-width:0}
.dash-charts2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
@media(max-width:1100px){.dash-hero{grid-template-columns:1fr}}
@media(max-width:620px){.dash-charts2{grid-template-columns:1fr}}
.dash-map-w{display:flex;flex-direction:column}

/* ── Mapa de obras aceptadas (D1) ── */
.map-body{display:flex;flex-direction:column;flex:1;min-height:0}
.map-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 14px;border-bottom:1px solid var(--border)}
/* Leaflet integrado en el Design System (solo chrome; sin tocar funcionamiento) */
.leaflet-popup-content-wrapper{border-radius:10px;box-shadow:var(--shadow-md);border:1px solid var(--border);padding:2px}
.leaflet-popup-content{margin:12px 14px;font:inherit;font-size:13px}
.leaflet-popup-tip{box-shadow:none;border:1px solid var(--border)}
.leaflet-container a.leaflet-popup-close-button{color:var(--text-faint);padding:6px 7px 0 0}
.leaflet-bar{border:0;box-shadow:var(--shadow)}
.leaflet-bar a,.leaflet-touch .leaflet-bar a{background:#fff;color:var(--text-soft);border-bottom-color:var(--border)}
.leaflet-bar a:hover{background:var(--gray-soft);color:var(--text)}
.leaflet-control-attribution{background:rgba(255,255,255,.75);font-size:9px;color:var(--text-faint)}
.map-search{flex:1 1 260px;max-width:420px}
.map-counter{font-size:12px;white-space:nowrap}
.map-badges{display:flex;gap:6px;flex-wrap:wrap}
.map-loc-wrap{padding:0 12px}
.map-loc-wrap:not(:empty){padding:8px 12px 0}
.map-loc{font-size:12.5px;color:var(--text-soft);display:inline-flex;align-items:center;gap:6px}
.map-canvas{flex:1;min-height:320px;width:100%;z-index:0}
.dash-map-w .map-canvas{width:auto;margin:11px;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden} /* ~3 mm de aire alrededor del mapa */
.map-canvas .leaflet-container{font:inherit}
/* M3 · marcador por tipo (divIcon minimalista, sombra muy discreta) */
.map-marker{background:none;border:0;filter:drop-shadow(0 1px 1.5px rgba(15,23,42,.28))}
.map-pop{min-width:180px}
.map-pop-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.map-pop-code{font-family:var(--mono);font-weight:600;color:var(--accent)}
.map-pop-type{font-size:10.5px;font-weight:600;padding:1px 7px;border-radius:5px;white-space:nowrap}
.map-pop-name{font-weight:600;margin:2px 0}
.map-pop-sub{font-size:12px;color:var(--text-soft);margin-top:2px}
.map-pop-btn{margin-top:8px}
.map-pop-sep{border:0;border-top:1px solid var(--border);margin:8px 0}
/* M3 · leyenda por tipo bajo el mapa */
.map-legend{display:flex;flex-wrap:wrap;gap:14px;padding:8px 14px;border-top:1px solid var(--border);border-radius:0 0 var(--radius) var(--radius)}
/* M5 · leyenda interactiva: cada item es un checkbox de filtro por tipo */
.map-leg-item{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-soft);cursor:pointer;user-select:none;transition:opacity .12s}
.map-leg-item input{width:auto;margin:0;cursor:pointer}
.map-leg-item i{width:9px;height:9px;border-radius:50%;flex:0 0 auto}
.map-leg-item.off{opacity:.42}
.gantt-bar{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.gantt-search{flex:0 0 320px}
.gantt-range{font-size:12.5px;color:var(--text-soft);white-space:nowrap}
.gantt-rows{display:flex;flex-direction:column;gap:6px;max-height:420px;overflow-y:auto;scrollbar-gutter:stable}
.gantt-row{display:grid;grid-template-columns:220px 1fr;gap:10px;border:1px solid var(--border);border-radius:8px;padding:8px 10px;align-items:center}
.grl-top{font-size:13px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.grl-cli{font-size:12px;color:var(--text-soft);margin:2px 0}
.grl-eq{display:flex;align-items:center;gap:5px;font-size:11.5px}
.gantt-row-track{display:grid;height:28px;background:repeating-linear-gradient(90deg,var(--surface-2,#f8fafc) 0,var(--surface-2,#f8fafc) calc(100%/var(--dias,28) - 1px),var(--border) calc(100%/var(--dias,28) - 1px),var(--border) calc(100%/var(--dias,28)));border-radius:6px;overflow:hidden}
.gantt-bar-item{display:flex;align-items:center;justify-content:center;color:#fff;font-size:10.5px;font-weight:600;border-radius:4px;margin:2px;padding:0 4px;overflow:hidden;white-space:nowrap}
.sc-card{border:1px solid var(--border);border-radius:8px;padding:8px 10px;font-size:12.5px}
.sc-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.sc-code{font-weight:700;color:var(--accent)}
.sc-cliente{color:var(--text-soft);margin:3px 0}
.sc-equipo{display:flex;align-items:center;gap:5px;font-size:11.5px}
.sc-fechas{font-size:11px;margin-top:2px}
.sc-quicklinks{display:inline-flex;gap:4px;margin-top:4px}

/* ── Scheduling Workspace (Fase C2) ── */
.ws-wrap{padding:16px;display:flex;flex-direction:column;gap:14px;overflow-y:auto;min-height:0}
.ws-topbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.ws-topbar h2{margin:0;font-family:var(--font-display);font-size:24px;font-weight:700;letter-spacing:0;flex:0 0 auto}
.ws-topbar-nav{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ws-range{font-size:12.5px;color:var(--text-soft);white-space:nowrap;margin-left:4px}
.ws-topbar-vista{display:flex;gap:6px;margin-left:auto}
.ws-vista-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.ws-vista-btn:disabled{opacity:.4;cursor:not-allowed}
.ws-layout{display:grid;grid-template-columns:220px minmax(0,1fr) 260px;gap:14px;align-items:start}
@media(max-width:1300px){.ws-layout{grid-template-columns:200px minmax(0,1fr)}.ws-layout aside:last-child{display:none}}
@media(max-width:900px){.ws-layout{grid-template-columns:1fr}}
.ws-filtros,.ws-detalle{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px}
.ws-filtros h3,.ws-detalle h3{margin:0 0 10px;font-size:13px}
.ws-filtro-field{display:flex;flex-direction:column;gap:3px;margin-bottom:10px}
.ws-filtro-field label{font-size:11px;font-weight:600;color:var(--text-soft);}
.ws-detalle-vacio{display:flex;align-items:center;justify-content:center;min-height:160px;text-align:center}
.ws-detalle-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.ws-bottom{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
@media(max-width:1100px){.ws-bottom{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.ws-bottom{grid-template-columns:1fr}}
.ws-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px}
.ws-card h4{margin:0 0 8px;font-size:12.5px}
.ws-card-row{font-size:12px;padding:3px 0;border-bottom:1px solid var(--border)}
.ws-card-row:last-child{border-bottom:none}

/* Fase C4.1 — estados visuales de InteractionEngine (combinables) */
.gantt-row.is-hover{background:var(--gray-soft)}
.gantt-row.is-seleccionado{outline:2px solid var(--accent);outline-offset:-2px;background:var(--accent-soft)}

/* Fase C4.2 — vista previa de Drag & Drop transaccional (sin persistir) */
.gantt-bar-item{position:relative}
.gantt-bar-item.is-dragging{box-shadow:0 0 0 2px var(--accent);opacity:.9;z-index:2;cursor:grabbing}
.gantt-row.is-drag-invalido .gantt-bar-item{box-shadow:0 0 0 2px var(--red)}

/* Fase C4.3 — handles de resize izq/dcho (6px, coincide con edgePx del InputManager) */
.gantt-bar-item::before,.gantt-bar-item::after{content:"";position:absolute;top:0;bottom:0;width:6px;cursor:ew-resize;background:transparent}
.gantt-bar-item::before{left:0}
.gantt-bar-item::after{right:0}
.gantt-bar-item.is-resizing{box-shadow:0 0 0 2px var(--accent);opacity:.9;z-index:2}

/* Fase S1.1 — Config Parámetros Operativos + simulación */
.op-cfg-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media(max-width:700px){.op-cfg-grid{grid-template-columns:1fr}}
.cfg-field-meta{font-size:10.5px;margin-top:3px}
.cfg-badge{display:inline-block;font-size:9.5px;padding:0 5px;border-radius:8px;background:var(--panel-2);border:1px solid var(--border-2);color:var(--text-soft)}
.op-sim{margin-top:14px;border:1px solid var(--accent-border);background:var(--accent-soft);border-radius:10px;padding:10px 12px}
.op-sim h4{margin:0 0 6px;font-size:13px}
.op-sim-row{display:flex;justify-content:space-between;font-size:12.5px;padding:2px 0;border-bottom:1px solid var(--border)}
.op-sim-row:last-of-type{border-bottom:none}

/* Fase C7 — Panel de Inteligencia Operativa (OIP) */
.oip-panel{margin-top:12px;border:1px solid var(--border);border-radius:10px;padding:10px 12px;background:var(--panel)}
.oip-score{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.oip-score-num{font-size:15px;font-weight:700;min-width:38px;text-align:center}
.oip-insights{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
@media(max-width:900px){.oip-insights{grid-template-columns:1fr}}
.oip-insight{border:1px solid var(--border);border-left:3px solid var(--text-faint);border-radius:8px;padding:6px 9px;font-size:12px}
.oip-insight.crit-error{border-left-color:var(--red)}
.oip-insight.crit-warning{border-left-color:var(--amber)}
.oip-insight.crit-info{border-left-color:var(--accent)}
.oip-insight-desc{font-size:11px;margin-top:2px}
.oip-actions{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}
.oip-action{font-size:10.5px;padding:1px 7px;border-radius:10px;background:var(--panel-2);border:1px solid var(--border-2);color:var(--text-soft)}

/* Fase C6 — Vista Calendario (Unified Scheduling Workspace) */
.cal-bar{display:flex;align-items:center;gap:8px;padding:6px 4px;margin-bottom:6px}
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.cal-cell{min-height:82px;border:1px solid var(--border);border-radius:8px;padding:5px 6px;background:var(--panel);display:flex;flex-direction:column;gap:3px}
.cal-cell.is-finde{background:var(--panel-2)}
.cal-cell.has-conflict{border-color:var(--red)}
.cal-cell.is-dimmed{opacity:.4}
.cal-cell-head{display:flex;align-items:center;gap:5px;font-size:11px}
.cal-num{font-weight:600}
.cal-conf{margin-left:auto;font-size:10px}
.cal-cell-body{display:flex;flex-direction:column;gap:2px}
.cal-chip{font-size:10.5px;padding:1px 5px;background:var(--panel-2);border-radius:4px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-chip:hover{background:var(--accent-soft)}
.cal-mas{font-size:10px}
.cal-cell-foot{font-size:10px;margin-top:auto}
@media(max-width:900px){.cal-grid{grid-template-columns:repeat(7,minmax(40px,1fr));overflow-x:auto}}

/* RR. HH. (Laboratorio): campos de configuración por año y tablas editables */
.rh-hint{font-size:11px;color:var(--text-faint)}
.rh-campo-si{grid-column:1/-1;flex-wrap:wrap}
.rh-aviso{display:flex;align-items:center;gap:6px;margin:0 0 10px;font-size:12.5px;color:var(--amber)}
.rh-aviso svg{width:14px;height:14px}
.rh-tbl input:not([type=checkbox]),.rh-tbl select{padding:5px 7px;font-size:12.5px;min-width:70px}
.rh-tbl input[type=checkbox]{width:auto}
.rh-tbl tr.rh-inactivo td{opacity:.55}
/* RR. HH. · Ausencias: calendario del mes por trabajador y avisos en Planning/calendario */
.rh-mes{border-collapse:separate;border-spacing:2px;font-size:11px}
.rh-mes th{padding:2px 0;min-width:24px;text-align:center;font-weight:600;color:var(--text-soft);background:transparent}
.rh-mes th span{display:block;font-size:9.5px;font-weight:500;color:var(--text-faint)}
.rh-mes th:first-child,.rh-mes-nom{text-align:left;min-width:150px;padding:2px 8px 2px 0;white-space:nowrap;font-size:12px;color:var(--text)}
.rh-mes td.rh-dia{height:24px;padding:0;border-radius:4px;background:var(--panel-2);text-align:center;font-weight:700;cursor:pointer;transition:background-color 150ms ease}
.rh-mes td.rh-dia:hover{background:var(--accent-soft)}
.rh-mes td.is-nolab{background:var(--border)}
.rh-mes th.is-nolab{color:var(--text-faint)}
.rh-mes th.is-hoy{color:var(--accent)}
.rh-mes td.is-hoy{box-shadow:inset 0 0 0 1px var(--accent)}
.rh-mes td.is-aprobada,.rh-leyenda i.is-aprobada{background:var(--accent);color:#fff}
.rh-mes td.is-solicitada,.rh-leyenda i.is-solicitada{background:var(--amber-soft);color:var(--amber);box-shadow:inset 0 0 0 1px var(--amber)}
.rh-mes td.is-parcial,.rh-leyenda i.is-parcial{background:var(--accent-soft);color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
.rh-leyenda{display:flex;flex-wrap:wrap;gap:14px;margin-top:10px;font-size:11.5px;color:var(--text-soft)}
.rh-leyenda span{display:inline-flex;align-items:center;gap:5px}
.rh-leyenda i{display:inline-block;width:12px;height:12px;border-radius:3px;background:var(--panel-2)}
.rh-leyenda i.is-nolab{background:var(--border)}
.au-info{min-height:20px}
.rh-saldos td.rh-saldo{white-space:nowrap}
.rh-saldo b{font-size:15px;font-family:var(--mono)}
.rh-saldo small{font-size:11px;color:var(--text-faint)}
.rh-saldo-det{font-size:11px;color:var(--text-faint);margin-top:1px}
.rh-saldo.is-pos b{color:var(--green)}
.rh-saldo.is-cero b{color:var(--text-soft)}
.rh-saldo.is-neg b{color:var(--red)}
.rh-aviso.is-grave{color:var(--red)}
/* RR. HH.: filtro común y listas largas con scroll (cabecera fija) */
.rh-filtro{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px}
.rh-filtro select,.rh-filtro input[type=date]{width:auto}
.rh-filtro .search{flex:1 1 220px;max-width:340px}
.tbl-wrap.rh-scroll{max-height:62vh;overflow:auto;overscroll-behavior:contain}
/* ===== Portal del empleado (móvil, puerto aparte · public/portal) ===== */
body.portal{display:block;height:auto;min-height:100vh;overflow:auto;background:var(--bg)}
body.portal input,body.portal select,body.portal textarea{font-size:16px}
.po{max-width:540px;margin:0 auto;min-height:100vh;padding-bottom:calc(76px + env(safe-area-inset-bottom))}
.po-cargando{padding:24px 16px;color:var(--text-faint)}
.po-entrar{display:flex;flex-direction:column;gap:4px;padding:40px 20px;max-width:380px;margin:0 auto}
.po-entrar h1{font-family:var(--font-display);font-size:28px;margin:12px 0 2px}
.po-logo{width:170px;height:auto}
.po-cab{position:sticky;top:0;z-index:5;display:flex;justify-content:space-between;align-items:center;gap:10px;padding:calc(12px + env(safe-area-inset-top)) 16px 12px;background:var(--steel);color:#fff}
.po-cab .btn{color:#fff}
.po-hola{font-family:var(--font-display);font-size:21px;font-weight:700}
.po-fecha{font-size:12.5px;color:var(--steel-text)}
.po-cola{display:flex;align-items:center;gap:8px;margin:10px 16px 0;padding:10px 12px;border-radius:var(--radius-md);background:var(--amber-soft);color:var(--amber);font-size:13px}
.po-main{padding:14px 16px;display:flex;flex-direction:column;gap:12px}
.po-titulo{font-family:var(--font-display);font-size:20px;margin:2px 0}
.po-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-md);padding:14px;display:flex;flex-direction:column;gap:10px}
.po-card h2{font-size:15px;margin:0}
.po-card .field{margin-bottom:0}
.po-grande{width:100%;min-height:52px;justify-content:center;font-size:16px;gap:8px}
.po-estado{display:flex;align-items:center;gap:12px;padding:16px;border-radius:var(--radius-md);background:var(--panel);border:1px solid var(--border)}
.po-estado svg{width:30px;height:30px;color:var(--text-faint)}
.po-estado div{display:flex;flex-direction:column}
.po-estado b{font-family:var(--font-display);font-size:22px}
.po-estado span{font-size:14px;font-weight:600}
.po-estado small{font-size:13px;color:var(--text-soft)}
.po-estado.is-trab{border-color:var(--green);background:var(--green-soft)}
.po-estado.is-trab svg,.po-estado.is-trab b{color:var(--green)}
.po-estado.is-pausa{border-color:var(--amber);background:var(--amber-soft)}
.po-estado.is-pausa svg,.po-estado.is-pausa b{color:var(--amber)}
.po-linea{font-size:14px;padding:4px 0;border-bottom:1px solid var(--border)}
.po-linea:last-child{border-bottom:0}
.po-linea b{font-variant-numeric:tabular-nums}
.po-entre{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.po-seg{display:flex;background:var(--gray-soft);border-radius:var(--radius-sm);padding:3px;gap:3px}
.po-seg button{flex:1;border:0;background:transparent;border-radius:var(--radius-sm);padding:9px 6px;font:inherit;font-weight:600;color:var(--text-soft);cursor:pointer}
.po-seg button.is-on{background:var(--panel);color:var(--text);box-shadow:var(--shadow-sm,0 1px 2px rgba(15,23,42,.08))}
.po-total{flex-direction:row;justify-content:space-between;align-items:center}
.po-total b{font-family:var(--font-display);font-size:26px}
.po-dia{padding:10px 0;border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:6px}
.po-dia:last-of-type{border-bottom:0}
.po-dia .btn{align-self:flex-start}
.po-marcas{display:flex;flex-wrap:wrap;gap:4px}
.po-fila{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap}
.po-fila>.field{flex:1 1 140px}
.po-info{display:flex;flex-direction:column;gap:4px;font-size:13.5px}
.po-info p{margin:0}
.po-dur{font-weight:700;font-size:15px}
.po-subir{cursor:pointer}
.po-saldos{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.po-saldo{gap:2px}
.po-saldo span{font-size:13px;font-weight:600;color:var(--text-soft)}
.po-saldo b{font-family:var(--font-display);font-size:34px;line-height:1.1;color:var(--green)}
.po-saldo small{font-size:12.5px;color:var(--text-soft)}
.po-saldo em{font-style:normal;font-size:11.5px;color:var(--text-faint)}
.po-saldo.is-cero b{color:var(--text-soft)}
.po-saldo.is-neg b{color:var(--red)}
.po-nav{position:fixed;left:0;right:0;bottom:0;z-index:6;display:flex;justify-content:center;background:var(--panel);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom)}
.po-nav button{flex:1;max-width:135px;display:flex;flex-direction:column;align-items:center;gap:3px;padding:9px 4px 10px;border:0;background:transparent;font:inherit;font-size:12px;font-weight:600;color:var(--text-faint);cursor:pointer}
.po-nav button svg{width:22px;height:22px}
.po-nav button.is-on{color:var(--action)}
.po-toast{position:fixed;left:50%;bottom:calc(86px + env(safe-area-inset-bottom));transform:translateX(-50%);max-width:min(92vw,480px);padding:10px 14px;border-radius:var(--radius-md);background:var(--steel);color:#fff;font-size:14px;opacity:0;pointer-events:none;transition:opacity 200ms ease;z-index:10}
.po-toast.show{opacity:1}
.po-recordatorio{border-left:4px solid var(--amber);gap:8px}
.po-privacidad dl{margin:8px 0 12px;font-size:13.5px}
.po-privacidad dt{font-weight:700;margin-top:10px}
.po-privacidad dd{margin:2px 0 0;color:var(--text-soft)}
.po-recordatorio span{display:flex;gap:8px;align-items:flex-start;font-size:14px;font-weight:600;color:var(--text)}
.po-recordatorio svg{color:var(--amber);flex:0 0 auto;margin-top:2px}
.po-recordatorio .btn,.po-novedades .btn{align-self:flex-start}
.po-novedades{border-left:4px solid var(--accent)}
.po-novedades .po-linea{display:flex;gap:8px;align-items:flex-start}
.po-novedades .po-linea svg{flex:0 0 auto;margin-top:2px}
.po-novedades .is-ok{color:var(--text)}
.po-novedades .po-linea:has(.is-ok) svg{color:var(--green)}
.po-novedades .po-linea:has(.is-mal) svg{color:var(--red)}

/* RR. HH. · Fichajes */
.fi-fichar{display:flex;flex-wrap:wrap;align-items:flex-start;gap:12px}
.fi-fichar>select{width:auto;min-width:220px}
.fi-panel{flex:1 1 420px;display:flex;flex-direction:column;gap:8px}
.fi-estado{font-size:14px;font-weight:600;color:var(--text-soft)}
.fi-estado.is-trab{color:var(--green)}
.fi-estado.is-pausa{color:var(--amber)}
.fi-acciones{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.fi-acciones input{flex:1 1 260px;max-width:420px}
.fi-acciones select{width:auto;max-width:420px}
.fi-marcas{display:flex;flex-wrap:wrap;gap:4px}
.fi-marca{font-size:11.5px;background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:1px 6px;white-space:nowrap}
.fi-marca b{font-family:var(--mono)}
.fi-marca.is-corr{border-color:var(--accent-border);background:var(--accent-soft)}
.fi-marca.is-anulada{text-decoration:line-through;opacity:.55}
.fi-marca.is-sincob{border-style:dashed;border-color:var(--amber)}
/* Documentación para una obra: resumen de lo que entra en el PDF */
.pq-resumen{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.pq-trab{font-size:12.5px;display:flex;flex-wrap:wrap;gap:4px;align-items:center}
.pq-trab b{margin-right:4px}
/* Registro mensual en pantalla (en el PDF manda .parte-print) */
.rg-ver table{width:100%;border-collapse:collapse;font-size:12.5px;margin-bottom:10px}
.rg-ver th{background:var(--panel-2);font-size:11.5px;text-align:left}
.rg-ver th,.rg-ver td{border-bottom:1px solid var(--border);padding:5px 7px;text-align:left}
.rg-ver .r{text-align:right;font-variant-numeric:tabular-nums}
.rg-ver .c{text-align:center}
.rg-ver tr.sec td{font-weight:700;background:var(--panel-2)}
.rg-ver p{font-size:13px;margin:6px 0}
.fi-corr{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding:6px 0;border-bottom:1px solid var(--border)}
.fi-corr:last-child{border-bottom:0}
.fi-nueva{display:flex;gap:6px;align-items:center;margin-bottom:6px}
.fi-nueva select,.fi-nueva input[type=time]{width:auto}
.fi-nueva .fn-obra{flex:1}
.rh-scroll thead th{position:sticky;top:0;z-index:1;background:var(--panel-2)}
.he-neg{color:var(--red);font-weight:700}
.au-dur{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--text)}
.au-dur svg,.au-info .rh-aviso svg{width:14px;height:14px;flex:0 0 auto}
.pl-emp-chips .ec.is-ausente{background:var(--red-soft);color:var(--red);text-decoration:line-through}
.pl-emp-chips .ec.is-parcial{background:var(--amber-soft);color:var(--amber)}
.pl-aus{font-size:11px;color:var(--red);line-height:1.3}
.cal-wday>.pl-aus{padding:5px 9px 0}
.pl-emp-box label.is-ausente{color:var(--text-faint)}
.cal-aus{margin-left:auto;display:inline-flex;align-items:center;gap:2px;font-size:10.5px;color:var(--red)}
.cal-aus svg{width:12px;height:12px}

/* Calendario del Dashboard (alternativa al Gantt): semana = tareas del Planning, mes = obras */
.cal-ayuda{font-size:11.5px;display:inline-flex;align-items:center;gap:4px}
.cal-ayuda svg{width:13px;height:13px}
.cal-rango{min-width:150px;text-align:center}
.cal-scroll{overflow-x:auto}
.cal-scroll>.cal-grid,.cal-week{min-width:860px}
.cal-dows{margin-bottom:4px}
.cal-dows>div{font-size:11px;font-weight:600;color:var(--text-faint);text-align:center;text-transform:uppercase;letter-spacing:.04em}
.cal-cell.is-fuera{opacity:.55}
.cal-cell.is-today{border-color:var(--accent-border);box-shadow:0 0 0 2px var(--accent-soft)}
.cal-cell.is-today .cal-num{color:var(--accent)}
.cal-cell.is-drop{background:var(--accent-soft);border-color:var(--accent)}
.cal-chip[draggable="true"]{cursor:grab}
.cal-chip.is-dragging{opacity:.45}
.cal-chip.is-retrasada{background:var(--amber-soft);color:var(--amber)}
.cal-peso{color:var(--red);font-weight:700}
.cal-mas{border:0;background:transparent;padding:0 2px;text-align:left;font-size:10.5px;color:var(--accent);cursor:pointer;width:auto}
.cal-mas:hover{text-decoration:underline}
.cal-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.cal-wday{border:1px solid var(--border);border-radius:8px;background:var(--panel);display:flex;flex-direction:column;min-width:0}
.cal-wday.is-finde{background:var(--panel-2)}
.cal-wday.is-today{border-color:var(--accent-border);box-shadow:0 0 0 2px var(--accent-soft)}
.cal-wday-head{display:flex;justify-content:space-between;align-items:baseline;gap:6px;padding:7px 9px;border-bottom:1px solid var(--border);background:var(--panel-2);border-radius:8px 8px 0 0}
.cal-wday-head .cal-dn{font-size:12.5px;font-weight:700}
.cal-wday-head .cal-dd{font-size:11px;color:var(--text-faint)}
.cal-wday.is-today .cal-dn{color:var(--accent)}
.cal-wday.is-finde .cal-dn{color:var(--text-faint)}
.cal-wday-body{flex:1;min-height:90px;padding:6px;display:flex;flex-direction:column;gap:6px}
.cal-wday-body .pl-task{width:auto;flex:none}

/* Fase C5 — Vista por Equipos (Team Scheduling) */
.team-group{margin-bottom:14px;border:1px solid var(--border);border-radius:10px;overflow:hidden}
.team-head{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 12px;background:var(--panel-2);border-bottom:1px solid var(--border)}
.team-head-sin{border-left:4px solid var(--text-faint)}
.team-head-nombre{font-weight:600;font-size:13px}
.team-head-metrics{display:flex;gap:12px;align-items:center;font-size:12px}
.team-group .gantt-rows{padding:2px 0}

/* Fase C4.5 — multi-selección: obra primaria más marcada que las secundarias */
.gantt-row.is-primary{outline-width:2px;outline-color:var(--accent-hover);background:var(--accent-soft)}
/* Overlay de recuento de selección (OverlayFramework, priority 10) */
.ws-overlay-selcount{position:absolute;top:6px;right:10px;background:var(--accent);color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;box-shadow:var(--shadow-md);pointer-events:none}

/* ── Gantt Header + duración (Fase C3) ── */
.gantt-header{display:grid;gap:0;margin:6px 0 4px;padding:0 11px 0 241px;overflow:hidden;scrollbar-gutter:stable}
.gantt-col-head{min-width:0;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:9px;padding:2px 0;border-right:1px solid var(--border)}
.gantt-col-head.is-finde{background:var(--surface-2,#f8fafc)}
.gantt-col-head.is-cambio-mes{border-left:2px solid var(--accent)}
.gantt-col-head{position:relative}
.gch-aus{position:absolute;top:1px;right:1px;min-width:12px;height:12px;padding:0 2px;border-radius:6px;background:var(--red);color:#fff;font-size:8.5px;font-weight:700;line-height:12px;text-align:center}
.gch-sub{color:var(--text-faint);}
/* Vista mensual estrecha: sin sitio para el nombre del día, queda solo el número */
.gantt-header{container-type:inline-size;}
@container (max-width:900px){ .gantt-header:has(>:nth-child(21)) .gch-sub{display:none;} }
.gch-num{font-weight:600}
.gantt-bar-dur{opacity:.8;font-weight:400;margin-left:4px}

/* ── Workspace zoom selector (Fase C3) ── */
.ws-zoom{display:flex;gap:4px}
.ws-zoom-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.ws-ir-fecha{width:auto;padding:4px 6px;font-size:12px}

/* ==================================================================
   M4 · Bitácora de Obra (Work Journal) — timeline horizontal + detalle
   ================================================================== */
.obra-bitacora-wrap{display:block}
.bit-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.bit-actions{display:flex;gap:6px;flex-wrap:wrap}
.bit-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}
.bit-filtros{display:flex;gap:6px;flex-wrap:wrap}
.bit-filtro{font-size:11.5px;padding:3px 9px}
.bit-search{flex:1;min-width:140px;max-width:260px}
.bit-orden{width:auto;font-size:12px;padding:5px 8px}
/* Timeline: SIEMPRE scroll horizontal, nunca crece verticalmente */
.bit-timeline{overflow-x:auto;overflow-y:hidden;padding:2px 0}
.bit-tl-track{display:flex;align-items:flex-start;min-width:min-content;position:relative;padding:16px 8px 6px}
.bit-tl-track::before{content:'';position:absolute;top:22px;left:16px;right:16px;height:2px;background:var(--border)}
.bit-dot{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:7px;min-width:62px;padding:0 6px;border:0;background:none;cursor:pointer}
.bit-dot-pt{width:13px;height:13px;border-radius:50%;border:2px solid var(--panel);box-shadow:0 0 0 1px var(--border);transition:transform .12s}
.bit-dot.verde .bit-dot-pt{background:var(--green)}
.bit-dot.rojo .bit-dot-pt{background:var(--red)}
.bit-dot.sel .bit-dot-pt{transform:scale(1.3);box-shadow:0 0 0 3px var(--accent-soft)}
.bit-dot-f{font-size:10.5px;color:var(--text-faint);white-space:nowrap}
.bit-dot.sel .bit-dot-f{color:var(--text);font-weight:600}
.bit-empty{padding:20px;text-align:center;color:var(--text-faint);font-size:12.5px}
/* Detalle */
.bit-detail{margin-top:8px;border:1px solid var(--border);border-radius:8px;padding:14px 16px;background:var(--surface-muted)}
.bit-detail:empty{display:none}
.bit-det-head{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.bit-badge{font-size:10.5px;font-weight:700;letter-spacing:.4px;padding:2px 9px;border-radius:5px;white-space:nowrap}
.bit-badge.verde{background:var(--green-soft);color:var(--green)}
.bit-badge.rojo{background:var(--red-soft);color:var(--red)}
.bit-det-fecha{font-size:12px;color:var(--text-soft)}
.bit-det-tit{font-size:14px;font-weight:600;margin-bottom:4px}
.bit-det-desc{font-size:13px;color:var(--text-soft);line-height:1.5;white-space:pre-line}
.bit-fotos{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.bit-thumb{width:100px;height:100px;object-fit:cover;border-radius:8px;border:1px solid var(--border);cursor:pointer;display:block}
.bit-resuelta{margin-top:12px;font-size:12.5px;font-weight:600;color:var(--green)}
.bit-resolver{display:inline-flex;align-items:center;gap:7px;margin-top:12px;font-size:13px;cursor:pointer}
.bit-resolver input{width:auto}
.bit-foto-prev{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.bit-foto-prev .bit-thumb{width:56px;height:56px}
.bit-foto-ed{position:relative;display:inline-block}
.bit-foto-ed .del-x{position:absolute;top:-6px;right:-6px;background:var(--panel);border:1px solid var(--border);border-radius:50%;padding:1px 5px;font-size:11px}
/* Lightbox de fotos (in-app) */
.bit-lightbox{position:fixed;inset:0;background:rgba(15,23,42,.86);z-index:300;display:flex;align-items:center;justify-content:center}
.bit-lb-img{max-width:88vw;max-height:86vh;border-radius:8px;box-shadow:var(--shadow-lg)}
.bit-lb-nav{position:absolute;top:50%;transform:translateY(-50%);border:0;background:rgba(255,255,255,.15);color:#fff;font-size:30px;line-height:1;width:46px;height:62px;border-radius:8px;cursor:pointer}
.bit-lb-prev{left:20px}
.bit-lb-next{right:20px}
.bit-lb-nav:hover{background:rgba(255,255,255,.28)}
.bit-lb-close{position:absolute;top:18px;right:22px;border:0;background:transparent;color:#fff;font-size:24px;cursor:pointer}
.bit-lb-count{position:absolute;bottom:20px;left:0;right:0;text-align:center;color:#fff;font-size:13px;opacity:.85}

/* ==================================================================
   LABORATORIO UWM — Shell (Fase 2A · INC-0)
   Andamiaje de 4 zonas: menú superior · árbol · lienzo · propiedades ·
   barra inferior. Solo tokens :root y patrones del Design System.
   ================================================================== */
.uwm-wrap{flex:1;width:100%;height:100%;min-width:0;min-height:0;display:grid;grid-template-rows:auto 1fr auto;background:var(--bg);}
/* Menú superior */
.uwm-menubar{display:flex;align-items:center;gap:14px;padding:8px 14px;background:var(--panel);border-bottom:1px solid var(--border);}
.uwm-brand{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13px;color:var(--text);}
.uwm-brand .ic{width:16px;height:16px;color:var(--accent);}
.uwm-menus{display:flex;gap:2px;}
.uwm-menu{border:0;background:transparent;color:var(--text-soft);font-size:13px;padding:5px 10px;border-radius:var(--radius-sm);cursor:pointer;}
.uwm-menu:hover:not(:disabled){background:var(--gray-soft);color:var(--text);}
.uwm-menu:disabled{opacity:.45;cursor:default;}
.uwm-ver{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--text-faint);}
/* Cuerpo: árbol | lienzo | propiedades */
.uwm-body{display:grid;grid-template-columns:240px 1fr 288px;gap:12px;padding:12px;min-height:0;}
.uwm-panel{display:flex;flex-direction:column;min-height:0;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;}
.uwm-panel-head{display:flex;align-items:center;gap:7px;padding:9px 12px;font-size:12px;font-weight:600;color:var(--text-soft);border-bottom:1px solid var(--border);}
.uwm-panel-head .ic{width:14px;height:14px;}
.uwm-panel-body{flex:1;min-height:0;overflow:auto;padding:12px;}
.uwm-placeholder{color:var(--text-faint);font-size:12px;}
/* Lienzo central */
.uwm-canvas-wrap{position:relative;min-width:0;min-height:0;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;background:var(--surface-muted);}
.uwm-canvas{width:100%;height:100%;display:grid;place-items:center;}
.uwm-canvas-empty{display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--text-faint);font-size:13px;}
.uwm-canvas-empty small{font-size:11px;color:var(--text-faint);}
.uwm-canvas-icon{width:40px;height:40px;opacity:.5;margin-bottom:4px;}
/* Barra inferior */
.uwm-statusbar{display:flex;gap:20px;align-items:center;padding:6px 14px;background:var(--panel);border-top:1px solid var(--border);font-family:var(--mono);font-size:11px;color:var(--text-faint);}
.uwm-status-item b{color:var(--text-soft);font-weight:600;}
@media(max-width:900px){.uwm-body{grid-template-columns:1fr;grid-auto-rows:minmax(140px,auto);}}

/* Laboratorio UWM — INC-1: render SVG + panel árbol */
.uwm-canvas{padding:24px;}
.uwm-svg{display:block;width:100%;height:100%;}
/* R-1 · Lenguaje visual del perfil: relleno BLANCO por defecto (hasta la
   biblioteca de color por serie) y GEOMETRÍA en negro. Cambiar el color de la
   serie = redefinir estos dos tokens. */
:root{--uwm-perfil:#ffffff;--uwm-linea:#111111;}
.uwm-svg-frame{fill:var(--uwm-perfil);stroke:var(--uwm-linea);stroke-width:2;stroke-linejoin:round;}
/* Junquillo: parte del perfil (blanco); se lee por sus dos líneas negras (filo
   del vidrio y galce a 17,5 mm). No captura el puntero. */
.uwm-svg-junquillo{fill:none;stroke:var(--uwm-linea);stroke-width:1.3;stroke-linejoin:round;pointer-events:none;}
/* Sistema Perimetral (P-01.2): módulos apilados fuera del marco. Render de
   validacion —existencia/orden/espesor/apilamiento—, no definitivo. */
.uwm-svg-modulo>polygon{fill:var(--accent-soft);stroke:var(--accent-border);stroke-width:2;}
.uwm-svg-modulo>text{fill:var(--accent-active);font-family:var(--mono);font-weight:600;}
.uwm-svg-modulo-zapata>polygon{fill:var(--gray-soft);stroke:var(--border);}
.uwm-svg-modulo-zapata>text{fill:var(--text-soft);}
/* Sistema Persiana (P-01.3, acoplado): representacion inicial por volumenes. */
.uwm-svg-persiana-pano{opacity:.5;stroke:var(--border);stroke-width:1.5;}
.uwm-svg-persiana-guia,.uwm-svg-persiana-lama-inf{stroke:var(--text-soft);stroke-width:1.5;}
.uwm-svg-persiana-cajon>rect{stroke:var(--text-soft);stroke-width:2;}
.uwm-svg-persiana-cajon>text{fill:var(--text);font-family:var(--mono);font-weight:600;}
.uwm-svg-seccion>rect{stroke:var(--text-soft);stroke-width:1.5;}
.uwm-svg-seccion>text{fill:var(--text);font-family:var(--mono);font-weight:600;}
.uwm-vista{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-soft);margin-left:8px;}
.uwm-vista-sel{font:inherit;padding:2px 6px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--text);}
.uwm-apilado{margin:0;padding-left:18px;font-size:12.5px;color:var(--text);}
.uwm-apilado li{margin:2px 0;}
.uwm-perim-lado{border-top:1px solid var(--border);padding:8px 0;}
.uwm-perim-lado-tit{font-size:12px;font-weight:600;color:var(--text-soft);margin-bottom:4px;}
.uwm-linkbtn{background:none;border:0;padding:0;color:var(--accent);font:inherit;cursor:pointer;text-align:left;}
.uwm-linkbtn:hover{text-decoration:underline;}
.uwm-perim-fila{display:flex;align-items:center;gap:8px;justify-content:space-between;}
.uwm-apilado-inline{font-size:12.5px;color:var(--text);}
.uwm-cotas-eje{display:flex;align-items:baseline;justify-content:space-between;margin:8px 0 4px;padding-top:6px;border-top:1px solid var(--border);}
.uwm-cotas-eje-t{font-size:11px;font-weight:700;letter-spacing:.04em;color:var(--text-soft);}
.uwm-cotas-total{font-family:var(--mono);font-size:12.5px;font-weight:600;color:var(--text);}
.uwm-suma-ok{color:var(--green);}
.uwm-suma-err{color:var(--amber);font-weight:600;}
.uwm-svg-vano{fill:var(--uwm-perfil);stroke:var(--uwm-linea);stroke-width:1.5;}
.uwm-svg-vano-empty{fill:var(--surface-muted);}
/* Agrupación de módulos (M-1): tira sobre el árbol. */
.uwm-modulos{padding:8px 12px;border-bottom:1px solid var(--border);}
.uwm-mod-agrupar{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;font-size:12px;font-weight:600;
  color:var(--text-soft);background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--r-sm);cursor:pointer;}
.uwm-mod-agrupar:hover{color:var(--text);border-color:var(--accent-border);}
.uwm-mod-agrupar .ic{width:14px;height:14px;}
.uwm-mod-strip{display:flex;flex-wrap:wrap;align-items:center;gap:6px;}
.uwm-mod-tab{display:inline-flex;align-items:center;gap:6px;padding:5px 9px;font-size:12px;font-weight:600;
  color:var(--text-soft);background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--r-sm);cursor:pointer;}
.uwm-mod-tab:hover{color:var(--text);}
.uwm-mod-activo{color:var(--accent);background:var(--accent-soft);border-color:var(--accent-border);}
.uwm-mod-x{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border-radius:50%;
  font-size:13px;line-height:1;color:var(--text-faint);}
.uwm-mod-x:hover{color:var(--danger,#c0392b);background:var(--bg);}
.uwm-mod-add,.uwm-mod-orient{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;
  color:var(--text-soft);background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--r-sm);cursor:pointer;}
.uwm-mod-add:hover,.uwm-mod-orient:hover{color:var(--text);border-color:var(--accent-border);}
.uwm-mod-add .ic,.uwm-mod-orient .ic{width:14px;height:14px;}
/* Aviso constructivo (M-4): apertura exterior + fijo en el mismo módulo. */
.uwm-mod-warn{margin-left:2px;color:var(--warn,#b7791f);font-size:12px;line-height:1;}
.uwm-cj-aviso{display:flex;align-items:center;gap:6px;margin-top:8px;padding:7px 9px;font-size:11.5px;line-height:1.35;
  color:var(--warn,#b7791f);background:color-mix(in srgb,var(--warn,#b7791f) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--warn,#b7791f) 35%,transparent);border-radius:var(--r-sm);}
.uwm-cj-aviso .ic{width:14px;height:14px;flex:none;}
.uwm-cj-modulo-alerta{border-color:color-mix(in srgb,var(--warn,#b7791f) 45%,transparent)!important;}
.uwm-cj-modulo-warn{display:inline-flex;align-items:center;gap:4px;margin-left:8px;color:var(--warn,#b7791f);font-weight:600;}
.uwm-cj-modulo-warn .ic{width:12px;height:12px;}

/* Vista de conjunto (M-3): módulos adyacentes con junta, sobre el lienzo. */
.uwm-cj-overview{position:absolute;inset:0;z-index:5;background:var(--bg);overflow:auto;padding:24px;}
.uwm-cj-lienzo{display:flex;align-items:stretch;justify-content:center;min-height:100%;gap:0;}
.uwm-cj-fila{flex-direction:row;}
.uwm-cj-columna{flex-direction:column;}
.uwm-cj-modulo{display:flex;flex-direction:column;align-items:center;gap:8px;min-width:0;min-height:0;flex-basis:0;
  padding:8px;border:1px solid transparent;border-radius:var(--r-sm);cursor:pointer;}
.uwm-cj-modulo:hover{background:var(--bg-soft);}
.uwm-cj-modulo-activo{border-color:var(--accent-border);background:var(--accent-soft);}
.uwm-cj-mini{width:100%;flex:1;display:flex;align-items:center;justify-content:center;min-height:0;}
.uwm-cj-mini svg{max-width:100%;max-height:100%;}
.uwm-cj-modulo-lbl{font-size:11px;font-weight:600;color:var(--text-soft);font-family:var(--mono);}
/* Junta de acople: doble línea (dos marcos que se topan). Ancho cero real. */
.uwm-cj-fila .uwm-cj-junta{align-self:stretch;width:0;margin:8px 0;border-left:2px solid var(--text-faint);
  border-right:2px solid var(--text-faint);box-sizing:content-box;padding:0 1px;}
.uwm-cj-columna .uwm-cj-junta{justify-self:stretch;height:0;margin:0 8px;border-top:2px solid var(--text-faint);
  border-bottom:2px solid var(--text-faint);box-sizing:content-box;padding:1px 0;}

/* Cotas del conjunto (N-2): en el panel derecho, jerarquía total/módulo. */
.uwm-cj-cotas{display:flex;flex-direction:column;gap:6px;}
.uwm-cj-title{font-size:11px;font-weight:600;color:var(--text-soft);}
.uwm-cj-pick{background:none;border:none;padding:0;font:inherit;color:var(--accent);cursor:pointer;text-decoration:underline;text-underline-offset:2px;}
.uwm-cj-mod-activo{background:var(--accent-soft);border-radius:var(--r-sm);}
.uwm-cj-mod-activo .uwm-cj-pick{color:var(--text);font-weight:600;text-decoration:none;}
.uwm-cj-row{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;color:var(--text);}
.uwm-cj-wh{display:inline-flex;align-items:center;gap:4px;}
.uwm-cj-wh .uwm-input-num{width:64px;text-align:right;}
.uwm-cj-x{color:var(--text-faint);}
.uwm-mod-hint{margin-top:6px;font-size:11px;color:var(--text-faint);}
.uwm-cj-row span{color:var(--text-soft);}
.uwm-cj-row .uwm-input-num{width:82px;text-align:right;}
.uwm-cj-total span,.uwm-cj-cross span{font-weight:600;color:var(--text);}
.uwm-cj-mod{padding-left:10px;}
.uwm-cj-mod span{color:var(--text-faint);}
.uwm-cj-sum{align-self:flex-end;font-family:var(--mono);font-size:11px;color:var(--text-faint);}
.uwm-tree-list{list-style:none;margin:0;padding:0 0 0 14px;}
.uwm-tree-list .uwm-tree-list{border-left:1px solid var(--border);}
.uwm-tree-node{padding:3px 0;font-size:12.5px;color:var(--text);}
.uwm-tree-role{font-weight:600;}
.uwm-tree-id{margin-left:6px;font-family:var(--mono);font-size:11px;color:var(--text-faint);}

/* Laboratorio UWM — INC-1A: interacción (selección, propiedades, nombre) */
.uwm-model{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-soft);}
.uwm-model-name{border:1px solid var(--border);background:var(--panel);border-radius:var(--radius-sm);padding:3px 8px;font-size:12.5px;color:var(--text);min-width:150px;}
.uwm-model-name:focus{outline:none;border-color:var(--accent);}
.uwm-svg rect{cursor:pointer;}
.uwm-tree-node.uwm-sel-node>.uwm-tree-role{background:var(--accent-soft);color:var(--accent);border-radius:4px;padding:1px 6px;}
.uwm-props-list{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;margin:0;font-size:12.5px;}
.uwm-props-list dt{color:var(--text-faint);}
.uwm-props-list dd{margin:0;color:var(--text);text-align:right;}

/* Laboratorio UWM — INC-1B: edición + Inspector del Modelo */
.uwm-body{grid-template-columns:240px 1fr 300px;}
.uwm-right{display:flex;flex-direction:column;gap:12px;min-height:0;}
.uwm-right .uwm-props{flex:1;min-height:0;}
.uwm-right .uwm-inspector{flex:0 0 auto;}
.uwm-inspector.uwm-collapsed .uwm-panel-body{display:none;}
/* Formularios de propiedades */
.uwm-block{margin-bottom:14px;}
.uwm-block-title{font-size:11px;font-weight:700;color:var(--text-faint);margin:0 0 8px;}
.uwm-field{display:flex;flex-direction:column;gap:3px;margin-bottom:8px;}
.uwm-field>span{font-size:11.5px;color:var(--text-soft);}
.uwm-input{border:1px solid var(--border);background:var(--panel);border-radius:var(--radius-sm);padding:5px 8px;font-size:12.5px;color:var(--text);width:100%;font-family:inherit;}
.uwm-input:focus{outline:none;border-color:var(--accent);}
.uwm-input-num{font-family:var(--mono);}
.uwm-hint{font-size:11px;color:var(--text-faint);margin:6px 0 0;}
.uwm-edit-msg{font-size:11.5px;margin:4px 0 0;min-height:14px;color:var(--green);}
.uwm-edit-msg.uwm-edit-err{color:var(--red);}
.uwm-props-body{overflow:auto;}
/* Inspector */
.uwm-inspector .uwm-panel-body{max-height:230px;overflow:auto;}
.uwm-insp-toggle{margin-left:auto;border:0;background:transparent;color:var(--text-soft);font-size:16px;line-height:1;cursor:pointer;width:20px;height:20px;border-radius:4px;}
.uwm-insp-toggle:hover{background:var(--gray-soft);}
.uwm-insp-group{margin-bottom:10px;}
.uwm-insp-title{font-size:10.5px;font-weight:700;letter-spacing:.05em;color:var(--accent);margin-bottom:3px;}
.uwm-insp-list{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;margin:0;font-size:11.5px;font-family:var(--mono);}
.uwm-insp-list dt{color:var(--text-faint);}
.uwm-insp-list dd{margin:0;color:var(--text);text-align:right;}
.uwm-insp-group.uwm-insp-bad .uwm-insp-title{color:var(--red);}

/* Laboratorio UWM — INC-2: subdivisión de Vanos */
.uwm-svg-division{fill:var(--uwm-perfil);stroke:var(--uwm-linea);stroke-width:1.5;stroke-linejoin:round;}
/* R-1 · Junta de inversora entre pareja abatible: perfil BLANCO con contorno
   negro → el hueco view-aware (6/66 mm) se lee como DOBLE LÍNEA, no como la
   línea discontinua de corredera. */
.uwm-svg-inversora{fill:var(--uwm-perfil);stroke:var(--uwm-linea);stroke-width:1.3;stroke-linejoin:round;pointer-events:none;}
.uwm-actions{display:flex;flex-direction:column;gap:6px;}
.uwm-actions .btn{width:100%;justify-content:center;}

/* Laboratorio UWM — INC-3: barra de herramientas y definición funcional */
.uwm-wrap{grid-template-rows:auto auto 1fr auto;}
.uwm-toolbar{display:flex;align-items:center;gap:4px;padding:6px 12px;background:var(--panel);border-bottom:1px solid var(--border);flex-wrap:wrap;}
.uwm-tool{display:inline-flex;align-items:center;gap:6px;border:1px solid transparent;background:transparent;color:var(--text-soft);font-size:12.5px;padding:5px 10px;border-radius:var(--radius-sm);cursor:pointer;}
.uwm-tool .ic{width:15px;height:15px;}
.uwm-tool:hover:not(:disabled){background:var(--gray-soft);color:var(--text);}
.uwm-tool:disabled{opacity:.4;cursor:default;}
.uwm-tb-sep{width:1px;height:20px;background:var(--border);margin:0 6px;}
/* Cierres: Hoja (banda + acristalamiento + marca de apertura) y Fijo (neutro) */
.uwm-svg-hoja{fill:var(--uwm-perfil);stroke:var(--uwm-linea);stroke-width:1.5;stroke-linejoin:round;}
/* S-03A: vidrio = diagonales (convención de dibujo técnico); panel = sólido. */
.uwm-svg-relleno{fill:url(#uwm-pat-vidrio);pointer-events:none;}
.uwm-pat-vidrio-fondo{fill:var(--accent-soft);}
.uwm-pat-vidrio-linea{stroke:var(--accent-border);stroke-width:5;}
.uwm-svg-relleno-panel{fill:#cfd6df;stroke:var(--border-2);stroke-width:3;}
.uwm-svg-opening{stroke:var(--accent);stroke-width:6;fill:none;pointer-events:none;}

/* Laboratorio UWM — STABILIZATION-01: consolidación del editor */
.uwm-tool-active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent);}
.uwm-tool-active:hover:not(:disabled){background:var(--accent-soft);color:var(--accent);}
.uwm-canvas-tool{cursor:crosshair;}
.uwm-tree-attr{opacity:.72;font-style:italic;}
.uwm-tree-attr .uwm-tree-role{font-weight:500;}
.uwm-menu[disabled]{cursor:not-allowed;}

/* Laboratorio UWM — STABILIZATION-02: cotas al eje (fija/libre) */
.uwm-cota{display:flex;align-items:flex-end;gap:8px;margin-bottom:8px;}
.uwm-cota .uwm-field{flex:1;margin-bottom:0;}
.uwm-check{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--text-soft);padding-bottom:6px;white-space:nowrap;cursor:pointer;}

/* Laboratorio UWM — R-03: estado de restricción de cada hueco */
.uwm-restr{display:inline-block;font-size:9.5px;font-weight:600;letter-spacing:.02em;
  padding:1px 6px;border-radius:999px;vertical-align:middle;}
.uwm-restr-flexible{background:var(--accent-soft);color:var(--accent);}
.uwm-restr-fijado{background:var(--green-soft);color:var(--green);}
.uwm-restr-calculado{background:var(--surface-muted);color:var(--text-soft);}
.uwm-cota input:disabled{opacity:.6;cursor:not-allowed;}
.uwm-restr-calc-hint{font-style:italic;opacity:.75;}

/* Laboratorio UWM — R-03.2: manipulación directa (ghost preview + edición) */
.uwm-ghost{pointer-events:none;}
.uwm-ghost-linea{stroke:var(--accent);stroke-width:2px;stroke-dasharray:6 4;
  vector-effect:non-scaling-stroke;}
.uwm-ghost-absorbe{fill:var(--accent);fill-opacity:.08;stroke:none;}
.uwm-ghost-txt{font:600 13px var(--mono,monospace);vector-effect:non-scaling-stroke;
  paint-order:stroke;stroke:var(--panel);stroke-width:3px;dominant-baseline:middle;}
.uwm-ghost-txt-fija{fill:var(--green);}
.uwm-ghost-txt-absorbe{fill:var(--accent);}
.uwm-canvas-hit.uwm-canvas-arrastrable{cursor:ew-resize;}
.uwm-cota-inline{position:absolute;transform:translate(-50%,-50%);z-index:6;width:82px;
  border:1px solid var(--accent);background:var(--panel);color:var(--text);
  border-radius:var(--radius-sm);padding:3px 6px;font:13px var(--mono,monospace);
  text-align:center;box-shadow:var(--elevation-overlay,0 2px 8px rgba(0,0,0,.18));}

/* Laboratorio UWM — STABILIZATION-03 / R-04: acotado visual (solo lectura) */
.uwm-svg-dim{pointer-events:none;}
.uwm-dim-line,.uwm-dim-tick{stroke:var(--text-soft);stroke-width:2;fill:none;}
.uwm-dim-ext{stroke:var(--border-2);stroke-width:1.5;fill:none;}
.uwm-dim-txt{fill:var(--text);font-family:var(--mono);}
.uwm-dim-nombre{font-weight:700;fill:var(--accent);}
/* R-04 · jerarquía y estados de restricción en la propia cota. Los huecos
   (parciales) son la información de trabajo primaria; su color es el MISMO
   que la pastilla del panel (Fijado=verde, Calculado=gris, Flexible=neutro),
   así el lienzo y el panel hablan un solo idioma. */
.uwm-svg-dim-fijado .uwm-dim-line,.uwm-svg-dim-fijado .uwm-dim-tick{stroke:var(--green);}
.uwm-svg-dim-fijado .uwm-dim-txt{fill:var(--green);font-weight:600;}
.uwm-svg-dim-calculado .uwm-dim-line,.uwm-svg-dim-calculado .uwm-dim-tick{stroke:var(--text-faint);}
.uwm-svg-dim-calculado .uwm-dim-txt{fill:var(--text-faint);font-style:italic;}
/* El total es un nivel jerárquico SECUNDARIO: presente como referencia, pero
   sin competir con los huecos (antes iba en acento y se llevaba la mirada). */
.uwm-svg-dim-total .uwm-dim-line,.uwm-svg-dim-total .uwm-dim-tick{stroke:var(--text-faint);stroke-width:2;}
.uwm-svg-dim-total .uwm-dim-txt{fill:var(--text-soft);font-weight:600;}

/* Laboratorio UWM — INC-4: símbolos de apertura y selector visual */
/* S-03A: el trazo del símbolo es constante en pantalla —en una carpintería
   de 3 m era un brochazo y en una de 400 mm un hilo—; la geometría del glifo
   sigue a la hoja porque los extremos marcan las bisagras (INC-4). */
.uwm-svg-sym{fill:none;pointer-events:none;stroke-linecap:round;stroke-linejoin:round;
  vector-effect:non-scaling-stroke;}
.uwm-svg-sym-fino{stroke:var(--accent);stroke-width:1.4px;}
.uwm-svg-sym-grueso{stroke:var(--accent);stroke-width:2.4px;}
.uwm-svg-sym-ext{stroke-dasharray:7 5;}
/* Selector visual de apertura */
.uwm-ap-grupo{font-size:10.5px;font-weight:700;color:var(--text-faint);margin:10px 0 5px;}
.uwm-ap-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;}
.uwm-ap-item{display:flex;flex-direction:column;align-items:center;gap:2px;padding:5px 3px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--panel);cursor:pointer;font-size:9px;line-height:1.15;color:var(--text-soft);text-align:center;}
.uwm-ap-item:hover{border-color:var(--accent);background:var(--gray-soft);}
.uwm-ap-sel{border-color:var(--accent);background:var(--accent-soft);color:var(--accent);font-weight:600;}
.uwm-mini{width:34px;height:27px;display:block;}
.uwm-mini polyline{fill:none;stroke:var(--accent);stroke-linecap:round;stroke-linejoin:round;}
.uwm-mini-fino{stroke-width:1.6;}
.uwm-mini-grueso{stroke-width:2.6;}
.uwm-mini-ext{stroke-dasharray:4 3;}

/* Laboratorio UWM — L-06: divisiones virtuales */
.uwm-svg-division-virtual{fill:none;stroke:var(--text-faint);stroke-width:5;stroke-dasharray:30 22;pointer-events:none;}
/* Laboratorio UWM — L-09: planos físicos */
.uwm-svg-plano{pointer-events:none;}
.uwm-svg-plano line{stroke:var(--text-faint);stroke-width:6;stroke-linecap:round;}
.uwm-svg-plano text{fill:#ffffff;font-family:var(--mono);font-weight:600;dominant-baseline:auto;}
.uwm-plano-badge{fill:var(--text-soft);opacity:.92;}
.uwm-svg-plano-exterior .uwm-plano-badge{fill:var(--accent);}
.uwm-svg-plano-interior .uwm-plano-badge{fill:var(--text-soft);}
.uwm-svg-plano-central .uwm-plano-badge{fill:var(--amber);}
.uwm-svg-plano-exterior line{stroke-dasharray:none;}
.uwm-svg-plano-central line{stroke-dasharray:26 14;}
.uwm-svg-plano-interior line{stroke-dasharray:8 12;}
/* Laboratorio UWM — L-07: selección del tipo de marco */
.uwm-ctx-screen{display:flex;align-items:center;justify-content:center;height:100%;padding:24px;}
.uwm-ctx-card{width:100%;max-width:460px;}
.uwm-ctx-title{font-size:18px;font-weight:600;margin:0 0 16px;}
.uwm-ctx-list{display:flex;flex-direction:column;gap:8px;margin-bottom:20px;}
.uwm-ctx-opt{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;align-items:center;
  padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;background:var(--panel);}
.uwm-ctx-opt:hover{border-color:var(--text-faint);}
.uwm-ctx-opt.uwm-ctx-sel,.uwm-ctx-opt:has(input:checked){border-color:var(--accent);}
.uwm-ctx-opt input{grid-row:span 2;}
.uwm-ctx-label{font-weight:600;}
.uwm-ctx-desc{grid-column:2;font-size:12px;color:var(--text-faint);}
.uwm-ctx-go{width:100%;}
/* Laboratorio UWM — L-08: manilla de la hoja activa */
/* R-2 · Manilla (maneta): roseta + lever. Bisagras: herrajes en su lado. */
.uwm-svg-manilla{pointer-events:none;}
.uwm-svg-manilla .uwm-manilla-lever{fill:var(--text);}
.uwm-svg-manilla .uwm-manilla-base{fill:var(--text);opacity:.55;}
.uwm-svg-bisagra{fill:var(--text);opacity:.8;pointer-events:none;}
/* Ejes de construcción (diagnóstico): Red Universal de Ejes en gris discontinuo. */
.uwm-svg-eje{stroke:#9aa1ac;stroke-width:1;stroke-dasharray:16 12;fill:none;pointer-events:none;vector-effect:non-scaling-stroke;}
/* Motor de Ejes (Capa 1): ejes exteriores y de división como líneas. */
.uwm-svg-eje-ext{stroke:var(--uwm-linea);stroke-width:2.5;fill:none;pointer-events:none;stroke-linejoin:round;}
.uwm-svg-eje-div{stroke:var(--uwm-linea);stroke-width:2;fill:none;pointer-events:none;}
.uwm-svg-eje-div-virtual{stroke:var(--uwm-linea);stroke-width:2;fill:none;pointer-events:none;stroke-dasharray:20 12;}
/* Rect clicable invisible (hueco/hoja): identidad para el DOM, sin dibujo. */
.uwm-svg-hit{fill:transparent;stroke:none;}
.uwm-svg-vidrio-eje{pointer-events:none;fill:var(--accent-soft);stroke:none;}
.uwm-svg-perfil{pointer-events:none;fill:none;stroke:var(--text);stroke-width:1.2;vector-effect:non-scaling-stroke;}
.uwm-svg-inglete{pointer-events:none;stroke:var(--text-faint,#9a9a9a);stroke-width:1;vector-effect:non-scaling-stroke;}
/* Registro de vidrios reales (P2-2) en el Inspector. */
.uwm-vid-tabla{width:100%;border-collapse:collapse;font-size:11px;margin-top:4px;}
.uwm-vid-tabla th,.uwm-vid-tabla td{padding:2px 4px;border-bottom:1px solid var(--border);text-align:left;}
.uwm-vid-tabla th{color:var(--text-soft);font-weight:600;}
.uwm-vid-num{font-family:var(--mono);text-align:right!important;}
.uwm-vid-tabla tfoot td{font-weight:600;border-top:1px solid var(--border);border-bottom:none;}
.uwm-vid-exp{float:right;font-size:10px;font-weight:600;padding:1px 7px;color:var(--accent);background:var(--accent-soft);
  border:1px solid var(--accent-border);border-radius:var(--r-sm);cursor:pointer;}
.uwm-insp-hint{font-size:11px;color:var(--text-faint);margin:4px 0 0;}
.uwm-svg-medcota{pointer-events:none;}
.uwm-svg-medcota line{stroke-width:1;vector-effect:non-scaling-stroke;}
.uwm-svg-med-txt{font-family:var(--mono);font-weight:600;paint-order:stroke;stroke:var(--surface,#fff);stroke-width:3;stroke-linejoin:round;}
.uwm-svg-medcota-hoja line{stroke:var(--text);}
.uwm-svg-medcota-hoja .uwm-svg-med-txt{fill:var(--text);}
.uwm-svg-medcota-vreal line{stroke:#0f6e56;}
.uwm-svg-medcota-vreal .uwm-svg-med-txt{fill:#0f6e56;}
.uwm-svg-medcota-vvisto line{stroke:var(--accent);}
.uwm-svg-medcota-vvisto .uwm-svg-med-txt{fill:var(--accent);}
.uwm-svg-eje-label{fill:#6b7280;font-family:var(--mono);font-size:34px;font-style:italic;pointer-events:none;}
/* Cotas de pieza (diagnóstico): tamaño real. Hoja en acento, vidrio en verde. */
.uwm-svg-cotapieza{font-family:var(--mono);font-weight:700;pointer-events:none;paint-order:stroke;stroke:var(--panel);stroke-width:4px;stroke-linejoin:round;}
.uwm-svg-cotapieza-hoja{fill:var(--accent);}
.uwm-svg-cotapieza-vidrio{fill:var(--green);}

/* Laboratorio UWM — L-10: el Relleno «Otro» (panel ya tenía estilo propio) */
.uwm-svg-relleno-otro{fill:var(--gray-soft);stroke:var(--text-faint);stroke-width:3;stroke-dasharray:22 16;}

/* Laboratorio UWM — L-10.1: gestor de definiciones de relleno */
.uwm-modal{position:absolute;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;
  background:rgba(0,0,0,.32);padding:24px;}
.uwm-modal-card{width:100%;max-width:560px;background:var(--panel);border:1px solid var(--border);
  border-radius:var(--radius-lg);box-shadow:var(--elevation-overlay);display:flex;flex-direction:column;max-height:100%;}
.uwm-modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;
  border-bottom:1px solid var(--border);}
.uwm-modal-head h3{margin:0;font-size:15px;font-weight:600;}
.uwm-modal-x{background:none;border:0;font-size:20px;line-height:1;cursor:pointer;color:var(--text-faint);}
.uwm-modal-foot{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--border);}
.uwm-modal-foot .primary{margin-left:auto;}
.uwm-rel-body{padding:14px 16px;overflow:auto;display:grid;gap:16px;}
.uwm-rel-lista{display:flex;flex-direction:column;gap:4px;max-height:210px;overflow:auto;}
.uwm-rel-fila{display:grid;grid-template-columns:1fr auto;gap:2px 10px;text-align:left;padding:8px 10px;
  border:1px solid transparent;border-radius:var(--radius-md);background:none;cursor:pointer;}
.uwm-rel-fila:hover{background:var(--surface-muted);}
.uwm-rel-fila.uwm-rel-sel{border-color:var(--accent);background:var(--surface-muted);}
.uwm-rel-nombre{grid-column:1;font-weight:600;font-size:13px;}
.uwm-rel-meta{grid-column:1;font-size:12px;color:var(--text-faint);}
.uwm-rel-usos{grid-column:2;grid-row:1/3;align-self:center;justify-self:end;
  font-size:11px;font-family:var(--mono);color:var(--text-faint);}
.uwm-rel-editor{display:grid;gap:10px;border-top:1px solid var(--border);padding-top:14px;}

/* Laboratorio UWM - L-11: gestor de materiales */
.uwm-mat-card{max-width:640px;}
.uwm-mat-filtros{display:grid;grid-template-columns:1fr auto;gap:8px;padding:12px 16px 0;}
.uwm-mat-body{padding:14px 16px;overflow:auto;display:grid;gap:16px;}
.uwm-mat-lista{display:flex;flex-direction:column;gap:4px;
  min-height:106px;max-height:190px;overflow:auto;}
.uwm-mat-comp{border-top:1px solid var(--border);padding-top:12px;display:grid;gap:8px;}
.uwm-capa{display:grid;grid-template-columns:1fr 84px 2fr auto;gap:6px;align-items:center;}
.uwm-hint-inline{font-weight:400;font-size:11px;color:var(--text-faint);}
.uwm-edit-warn{color:var(--amber);}

/* Laboratorio UWM - L-12: capa de interacción natural */

/* Cursor: comunica la acción, sin iconografía. Por defecto flecha; sobre un
   objeto seleccionable, puntero; con una herramienta activa, cruz. */
.uwm-canvas-hit{cursor:pointer;}
.uwm-canvas-tool,.uwm-canvas-tool.uwm-canvas-hit{cursor:crosshair;}

/* R-04 · Señalado (hover): UN solo lenguaje —acento atenuado— para cualquier
   rol. Antes el hover era acento para unos roles y ámbar para otros (División,
   Vano): eso mezclaba el color de «conflicto» con el de «señalado». El rol ya
   se lee por la forma; el hover solo dice «esto responde al cursor». */
.uwm-hover{fill:none;pointer-events:none;stroke:var(--accent);opacity:.55;}

/* Menú contextual */
.uwm-ctxmenu{position:absolute;z-index:50;min-width:210px;padding:6px;
  background:var(--panel);border:1px solid var(--border);
  border-radius:var(--radius-md);box-shadow:var(--elevation-2);}
.uwm-cm-grupo{display:flex;flex-direction:column;}
.uwm-cm-titulo{padding:6px 10px 2px;font-size:11px;font-weight:600;
  color:var(--text-faint);}
.uwm-cm-item{display:flex;align-items:center;gap:9px;width:100%;
  padding:7px 10px;border:0;border-radius:var(--radius-sm);
  background:none;cursor:pointer;font-size:13px;color:var(--text);text-align:left;}
.uwm-cm-item:hover{background:var(--surface-muted);}
.uwm-cm-item .ic{width:15px;height:15px;color:var(--text-soft);}
.uwm-cm-sep{height:1px;margin:5px 6px;background:var(--border);}

/* Doble clic sobre un objeto sin diálogo propio: se llama la atención sobre
   el panel de propiedades, que es su ficha. */
.uwm-props-atencion{box-shadow:0 0 0 2px var(--focus-ring);border-radius:var(--radius-md);}

/* Laboratorio UWM - L-13: viewport (camara sobre el dibujo) */

/* Indicador de zoom: discreto, al final de la barra. No es un panel. */
.uwm-zoom{margin-left:auto;padding:0 10px;font-family:var(--mono);font-size:11px;
  color:var(--text-faint);white-space:nowrap;align-self:center;}

/* Cursor de encuadre: comunica que se mueve la camara, no el dibujo. */
.uwm-canvas-pan-listo{cursor:grab;}
.uwm-canvas-pan,.uwm-canvas-pan.uwm-canvas-hit{cursor:grabbing;}

/* Los overlays de selección y señalado mantienen su grosor a cualquier zoom:
   al 10% un trazo de 16 mm sería invisible y al 800% taparía la pieza. */
.uwm-hover{vector-effect:non-scaling-stroke;stroke-width:1.5px;stroke-dasharray:5 4;}

/* Laboratorio UWM - B-03: vista previa de solo lectura del simbolo de apertura */
.uwm-ap-preview{display:flex;justify-content:center;padding:8px 0;}
.uwm-ap-preview .uwm-mini{width:56px;height:44px;}

/* Laboratorio UWM - S-03B: seleccion multiple */
.uwm-multi-sel{fill:none;pointer-events:none;stroke:var(--accent);stroke-width:1.5px;
  stroke-dasharray:5 4;vector-effect:non-scaling-stroke;opacity:.9;}
.uwm-multi-sel.uwm-multi-activo{stroke-width:2.5px;stroke-dasharray:none;}
.uwm-marquee{fill:var(--accent-soft);fill-opacity:.25;stroke:var(--accent);
  stroke-width:1px;stroke-dasharray:4 3;vector-effect:non-scaling-stroke;pointer-events:none;}
.uwm-tree-node.uwm-multi-node>.uwm-tree-role{background:var(--surface-muted);
  color:var(--accent);border-radius:4px;padding:1px 6px;}

/* Laboratorio UWM - R-01.1: Designer Conflicts */
.uwm-conflicto{fill:var(--amber);fill-opacity:.08;stroke:var(--amber);stroke-width:2px;
  stroke-dasharray:7 4;vector-effect:non-scaling-stroke;pointer-events:none;}
.uwm-conflictos{position:absolute;top:8px;left:50%;transform:translateX(-50%);z-index:5;
  display:flex;flex-direction:column;gap:6px;max-width:min(560px,90%);}
.uwm-conflictos[hidden]{display:none;}
.uwm-conflicto-item{display:flex;align-items:flex-start;gap:8px;text-align:left;cursor:pointer;
  background:var(--amber-soft);color:var(--amber);border:1px solid var(--amber);
  border-radius:var(--radius-sm);padding:7px 10px;font:inherit;font-size:12.5px;line-height:1.35;
  box-shadow:var(--elevation-1);}
.uwm-conflicto-item .ic{width:15px;height:15px;flex:none;margin-top:1px;}
.uwm-status-valid span{font-weight:600;}
.uwm-block-conflicto{border:1px solid var(--amber);background:var(--amber-soft);
  border-radius:var(--radius-sm);}
.uwm-block-conflicto .uwm-block-title,.uwm-block-conflicto .uwm-hint{color:var(--amber);}

/* ===================== KNOWLEDGE STUDIO (KS-0.0) ===================== */
.ks-wrap{padding:22px;max-width:1100px;margin:0 auto;overflow:auto;height:100%;}
.ks-hero{padding:26px 28px;}
.ks-hero-badge{display:inline-flex;align-items:center;gap:8px;font-weight:700;color:var(--accent);
  background:var(--accent-soft);border:1px solid var(--accent-border);border-radius:999px;padding:5px 12px;font-size:13px;}
.ks-title{font-size:26px;font-weight:700;margin:14px 0 8px;color:var(--text);}
.ks-lead{font-size:14.5px;line-height:1.6;color:var(--text-soft);max-width:820px;}
.ks-phase{margin-top:14px;font-size:13px;color:var(--text-soft);}
.ks-flow{padding:20px 24px;margin-top:18px;}
.ks-block-title{font-size:11px;font-weight:700;color:var(--text-soft);margin-bottom:12px;}
.ks-flow-row{display:flex;align-items:stretch;gap:6px;flex-wrap:wrap;}
.ks-flow-node{flex:1;min-width:150px;background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;}
.ks-flow-t{font-weight:700;color:var(--text);font-size:14px;}
.ks-flow-d{font-size:12.5px;color:var(--text-soft);margin-top:4px;}
.ks-flow-arrow{display:flex;align-items:center;color:var(--text-faint);}
.ks-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;margin-top:18px;}
.ks-card{padding:18px 20px;}
.ks-muted{font-size:12.5px;color:var(--text-soft);line-height:1.55;}
.ks-entities{list-style:none;padding:0;margin:10px 0 0;display:flex;flex-wrap:wrap;gap:8px;}
.ks-entities code{background:var(--gray-soft);border:1px solid var(--border);border-radius:6px;padding:3px 8px;font-family:var(--mono);font-size:12px;color:var(--text);}
.ks-targets,.ks-principles{list-style:none;padding:0;margin:10px 0 0;font-size:13px;color:var(--text);}
.ks-targets li{display:flex;align-items:center;gap:8px;margin:6px 0;}
.ks-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);flex:0 0 auto;}
.ks-principles li{margin:7px 0;line-height:1.5;color:var(--text-soft);}
.ks-principles b{color:var(--accent);font-family:var(--mono);font-size:12px;}

/* ====================================================================
   REDISEÑO METÁLICO (oct. 2026) · capa de componentes de la interfaz
   Misma identidad que la landing de "/": gris acero, naranja de seguridad
   para la acción principal y lo que requiere atención, azul para selección.
   Solo pantalla (@media screen): presupuestos, partes y planning impresos
   y los PDF no heredan nada de este bloque. Ver DESIGN-SYSTEM.md §1-§2.
   ==================================================================== */
@media screen{
  body{font-size:14.5px;}

  /* ---- Barra lateral en gris acero, agrupada por áreas ---- */
  #sidebar{background:var(--steel);border-right:0;color:var(--steel-text);}
  .sb-brand{height:64px;border-bottom:1px solid var(--steel-line);padding:0 22px;}
  .sb-brand img{height:34px;mix-blend-mode:normal;}
  #nav{gap:1px;padding:12px 12px 16px;}
  #nav::-webkit-scrollbar{width:8px;} #nav::-webkit-scrollbar-thumb{background:var(--steel-line);border-radius:8px;}
  .nav-sec{display:flex;flex-direction:column;gap:1px;margin-top:14px;}
  .nav-group{font-size:12px;font-weight:600;color:var(--steel-faint);padding:0 12px 6px;list-style:none;}
  summary.nav-group{cursor:pointer;display:flex;align-items:center;justify-content:space-between;}
  summary.nav-group::-webkit-details-marker{display:none;}
  summary.nav-group::after{content:'';width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);transition:transform .15s;}
  details[open]>summary.nav-group::after{transform:rotate(45deg);}
  summary.nav-group:hover{color:var(--steel-text);}
  #nav button{color:var(--steel-text);font-size:14.5px;font-weight:500;padding:8px 12px;min-height:38px;}
  #nav button .ic{color:var(--steel-faint);}
  #nav button:hover{background:var(--steel-2);color:#fff;}
  #nav button:hover .ic{color:#fff;}
  #nav button.active{background:rgba(255,255,255,.08);color:#fff;font-weight:600;box-shadow:inset 3px 0 0 var(--action-hover);}
  #nav button.active .ic{color:var(--action-hover);}
  #nav button:focus-visible,#nav summary:focus-visible,.sb-report:focus-visible{outline:2px solid #93C5FD;outline-offset:-2px;}
  .nav-badge{color:var(--steel-text);font-family:var(--font-sans);}
  .nav-badge::before{background:var(--steel-faint);}
  .nav-badge.nb-work::before{background:#60A5FA;}
  .nav-badge.nb-alert::before{background:#F87171;}
  .sb-foot{border-top:1px solid var(--steel-line);padding:12px;}
  .sb-report{color:var(--steel-text);}
  .sb-report:hover{background:var(--steel-2);color:#fff;}
  .sb-report .ic{color:var(--steel-faint);}
  .sb-report b{color:#fff;}
  .sb-report small{color:var(--steel-faint);}

  /* ---- Barra superior: contexto + título ---- */
  header#topbar{height:64px;padding:0 28px;border-bottom:1px solid var(--border);}
  .tb-title{display:flex;flex-direction:column;justify-content:center;gap:3px;min-width:0;}
  #pageGroup{font-size:12.5px;font-weight:500;color:var(--text-faint);line-height:1;}
  #pageGroup:empty{display:none;}
  .tb-search{max-width:360px;}
  .tb-search>input{background:var(--panel);border:1px solid var(--border-2);min-height:38px;}
  .tb-user .av{background:var(--steel);}
  .tb-bell:hover{background:var(--gray-soft);}

  /* ---- Lienzo de pantalla y cabeceras ---- */
  .db-wrap{padding:28px 32px 40px;}
  .db-head{margin-bottom:24px;align-items:flex-end;}
  .planning-wrap{padding:24px 32px 40px;}

  /* ---- Botones y controles ---- */
  .btn{min-height:36px;padding:7px 14px;font-weight:600;border-radius:var(--radius-sm);}
  .btn.sm{min-height:30px;padding:4px 10px;}
  .btn.ghost{border-color:transparent;background:transparent;}
  input,select,textarea{border-radius:var(--radius-sm);}
  input:not([type=checkbox]):not([type=radio]):not([type=range]),select{min-height:36px;}
  td input:not([type=checkbox]):not([type=radio]),td select{min-height:30px;}
  .chip{border-radius:var(--radius-pill);padding:5px 13px;font-weight:500;}
  .chip.active{background:var(--steel);border-color:var(--steel);color:#fff;}
  .search{border-radius:var(--radius-sm);}

  /* ---- Tarjetas y paneles ---- */
  .card,.w{border-radius:var(--radius-md);border-color:var(--border);box-shadow:var(--shadow);}
  .card-head,.w-head{padding:14px 18px;}
  .w-tit{font-family:var(--font-display);font-size:18px;font-weight:700;color:var(--text);}
  .w-tit .ic{color:var(--text-soft);width:16px;height:16px;}
  .w-link{font-weight:600;}

  /* ---- Tablas ---- */
  th{font-size:12.5px;color:var(--text-soft);background:var(--panel-2);border-bottom:1px solid var(--border-2);padding:10px 14px;}
  td{padding:10px 14px;}
  tbody tr:hover td{background:var(--panel-2);}

  /* ---- Listas maestro-detalle ---- */
  .li{border-radius:var(--radius-sm);}
  .li.active{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent);}
  .li .li-code,.d-code{font-family:var(--font-display);font-size:15px;font-weight:700;color:var(--text);letter-spacing:.01em;}

  /* ---- Cifras destacadas ---- */
  .stat-box{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-md);padding:14px 16px;}
  .stat-box .sb-n,.kpi .kpi-n{font-family:var(--font-display);font-size:30px;letter-spacing:0;line-height:1.05;}
  .stat-box .sb-l{font-size:12.5px;color:var(--text-soft);font-weight:500;}

  /* ---- Estados, avisos y feedback ---- */
  .badge{border-radius:var(--radius-pill);font-size:12px;padding:3px 10px;}
  .empty-list{padding:56px 24px;color:var(--text-soft);font-size:14.5px;}
  .dash-inc-banner{border-radius:var(--radius-md);border:1px solid #FECACA;border-left:4px solid var(--red);background:var(--panel);color:var(--red);font-weight:600;}
  .dash-inc-banner:hover{background:var(--red-soft);color:var(--red);}
  .dash-rrhh-banner{border-color:var(--amber-soft);border-left-color:var(--amber);color:var(--amber);}
  .dash-rrhh-banner:hover{background:var(--amber-soft);color:var(--amber);}
  .modal{border-radius:var(--radius-lg);}
  .modal-head h3{font-family:var(--font-display);font-size:22px;font-weight:700;}
  .modal-bg{background:rgba(15,23,42,.55);}
  #toast{background:var(--steel);border-radius:var(--radius-md);}

  .placeholder>div{display:flex;flex-direction:column;align-items:center;gap:6px;max-width:320px;}
  .placeholder .big{display:grid;place-items:center;width:64px;height:64px;margin-bottom:8px;border-radius:var(--radius-md);background:var(--panel);border:1px solid var(--border);color:var(--text-soft);font-size:0;opacity:1;}
  .placeholder .big svg{width:30px;height:30px;}
  .placeholder b{font-family:var(--font-display);font-size:20px;color:var(--text);}
  .placeholder span{color:var(--text-soft);}
  .cfg-nav-ic .ic,.cfg-nav-ic svg{width:17px;height:17px;color:var(--text-soft);}
  .cfg-nav-status{width:9px;height:9px;border-radius:50%;flex:0 0 auto;background:var(--amber);}
  .cfg-st-configured{background:var(--green);} .cfg-st-warning{background:#F97316;} .cfg-st-error{background:var(--red);}
  .cfg-ph-ic{color:var(--text-soft);} .cfg-ph-ic svg{width:44px;height:44px;}
  /* ---- Movimiento (skill «animate», Emil Kowalski) ----
     Modal: ocasional -> transición estándar. Entra 250 ms, sale 150 ms
     (la salida más rápida que la entrada). transform/opacity solamente.
     El fondo se desvanece a la vez para que se lean como una sola capa. */
  .modal-bg{opacity:0;transition:opacity 150ms var(--ease-out),display 150ms allow-discrete;}
  .modal-bg.show{opacity:1;transition-duration:250ms;}
  .modal-bg .modal{opacity:0;transform:scale(0.96);transform-origin:center;
    transition:opacity 150ms var(--ease-out),transform 150ms var(--ease-out);}
  .modal-bg.show .modal{opacity:1;transform:none;transition-duration:250ms;}
  @starting-style{
    .modal-bg.show{opacity:0;}
    .modal-bg.show .modal{opacity:0;transform:scale(0.96);}
  }
  /* Tarjetas y filas pulsables: se usan decenas de veces al día -> hover casi
     imperceptible (solo color, 150 ms ease) y solo con ratón; pulsación 160 ms. */
  .li,.d-item,.kpi{transition:background-color 150ms ease,box-shadow 150ms ease;}
  @media (hover:hover) and (pointer:fine){
    .hoy-k:hover{border-color:var(--border-2);box-shadow:var(--shadow-md);}
  }
  @media (prefers-reduced-motion:reduce){
    .modal-bg,.modal-bg.show{transition:opacity 200ms ease,display 200ms allow-discrete;}
    .modal-bg .modal,.modal-bg.show .modal{transform:none;transition:opacity 200ms ease;}
    @starting-style{ .modal-bg.show .modal{transform:none;} }
    .hoy-k:active{transform:none;}
  }

  /* ---- Dashboard: fila "Hoy" ---- */
  .dash-hoy{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin:0 0 20px;}
  .hoy-k{position:relative;display:grid;grid-template-columns:1fr auto;grid-template-areas:"n ic" "t t" "d d";align-items:start;gap:2px 10px;
    text-align:left;padding:16px 18px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow);
    font:inherit;color:var(--text);cursor:pointer;
    transition:border-color 150ms ease,box-shadow 150ms ease,transform 160ms var(--ease-out);}
  .hoy-k:active{transform:scale(0.97);}
  .hoy-n{grid-area:n;font-family:var(--font-display);font-size:40px;font-weight:700;line-height:1;}
  .hoy-ic{grid-area:ic;display:grid;place-items:center;width:36px;height:36px;border-radius:var(--radius-sm);background:var(--gray-soft);color:var(--text-soft);}
  .hoy-ic .ic,.hoy-ic svg{width:18px;height:18px;}
  .hoy-t{grid-area:t;margin-top:8px;font-weight:600;font-size:15px;}
  .hoy-d{grid-area:d;font-size:13px;color:var(--text-soft);}
  .hoy-aviso{border-color:#FDBA74;box-shadow:inset 0 3px 0 var(--action),var(--shadow);}
  .hoy-aviso .hoy-ic{background:var(--action);color:var(--on-action);}
  @media (max-width:1700px){ .dash-top3{grid-template-columns:repeat(2,minmax(0,1fr));} }
  @media (max-width:1100px){ .dash-hoy{grid-template-columns:repeat(2,minmax(0,1fr));} }
  @media (max-width:900px){ .dash-hero{grid-template-columns:1fr;} }
  @media (max-width:700px){ .dash-top3,.dash-charts2{grid-template-columns:1fr;} }
  @media (max-width:560px){ .dash-hoy{grid-template-columns:1fr;} .db-wrap{padding:20px 16px 32px;} header#topbar{padding:0 14px;} }
}
