.ui{font-size:var(--fs-4); color:var(--text-primary); line-height:var(--lh-normal)}

.ui-btn{display:inline-flex; align-items:center; justify-content:center; gap:var(--sp-2);
  min-height:var(--control-h); padding:0 var(--sp-4); border-radius:var(--radius-md);
  font:inherit; font-size:var(--fs-4); font-weight:600; cursor:pointer;
  border:1px solid transparent; transition:background var(--dur-1) var(--ease),
  border-color var(--dur-1) var(--ease); white-space:nowrap; text-decoration:none}
.ui-btn:focus-visible{outline:2px solid var(--focus-ring); outline-offset:2px}
.ui-btn--primary{background:var(--surface-inverse); color:var(--text-inverse);
  border-color:var(--surface-inverse)}
.ui-btn--primary:hover{background:var(--text-secondary); border-color:var(--text-secondary)}
.ui-btn--secondary{background:var(--surface-raised); color:var(--text-primary);
  border-color:var(--border-strong)}
.ui-btn--secondary:hover{background:var(--surface-sunken)}
.ui-btn--ghost{background:transparent; color:var(--text-secondary); border-color:transparent}
.ui-btn--ghost:hover{background:var(--surface-sunken); color:var(--text-primary)}
.ui-btn--danger{background:var(--surface-raised); color:var(--fb-error);
  border-color:var(--fb-error)}
.ui-btn--danger:hover{background:var(--fb-error-bg)}
.ui-btn--sm{min-height:var(--control-h-sm); padding:0 var(--sp-3); font-size:var(--fs-3)}
.ui-btn[disabled],.ui-btn[aria-disabled="true"]{opacity:.45; cursor:not-allowed}
@media (pointer:coarse){ .ui-btn{min-height:var(--control-h-touch)} }

.ui-actions{display:flex; flex-wrap:wrap; gap:var(--sp-2); align-items:center}
.ui-actions .spacer{flex:1 1 auto}

.ui-field{display:flex; flex-direction:column; gap:var(--sp-1); margin-bottom:var(--sp-4)}
.ui-label{font-size:var(--fs-3); font-weight:600; color:var(--text-primary)}
.ui-label .req{color:var(--fb-error); margin-left:2px}
.ui-hint{font-size:var(--fs-2); color:var(--text-muted); line-height:var(--lh-snug)}
.ui-input,.ui-select,.ui-textarea{
  width:100%; min-height:var(--control-h); padding:var(--sp-2) var(--sp-3);
  border:1px solid var(--border-strong); border-radius:var(--radius-md);
  background:var(--surface-raised); color:var(--text-primary);
  font:inherit; font-size:var(--fs-4)}
.ui-textarea{min-height:76px; resize:vertical; line-height:var(--lh-normal)}
.ui-input:focus-visible,.ui-select:focus-visible,.ui-textarea:focus-visible{
  outline:2px solid var(--focus-ring); outline-offset:1px; border-color:var(--focus-ring)}
.ui-input::placeholder,.ui-textarea::placeholder{color:var(--text-muted)}
.ui-field[data-invalid] .ui-input,.ui-field[data-invalid] .ui-select{
  border-color:var(--fb-error); border-width:2px}
.ui-error{display:flex; gap:var(--sp-2); font-size:var(--fs-2); color:var(--fb-error);
  font-weight:600}
.ui-field-row{display:grid; grid-template-columns:1fr 1fr; gap:var(--sp-3)}

.ui-input--compacto,.ui-select--compacto{
  min-height:var(--control-h-sm); padding:var(--sp-1) var(--sp-2);
  font-size:var(--fs-3); border-radius:var(--radius-sm)}

.ui-table td>.ui-input--compacto,.ui-table td>.ui-select--compacto{width:100%}

.ui-input--num{max-width:12ch}
.ui-input--fecha{max-width:20ch}
.ui-input--corto{max-width:30ch}
.ui-input--medio{max-width:48ch}
@media (max-width:560px){ .ui-field-row{grid-template-columns:1fr} }

.ui-chips{display:flex; flex-wrap:wrap; gap:var(--sp-2)}
.ui-chip{display:inline-flex; align-items:center; gap:var(--sp-1);
  padding:2px var(--sp-2); border-radius:var(--radius-full);
  font-size:var(--fs-2); font-weight:700; letter-spacing:.02em; white-space:nowrap;
  background:var(--surface-sunken); color:var(--text-secondary);
  border:1px solid var(--border-subtle)}
.ui-chip::before{content:""; width:6px; height:6px; border-radius:50%;
  background:currentColor; flex:none}
.ui-chip--ok{background:var(--fb-success-bg); color:var(--fb-success); border-color:transparent}
.ui-chip--warn{background:var(--fb-warning-bg); color:var(--fb-warning); border-color:transparent}
.ui-chip--err{background:var(--fb-error-bg); color:var(--fb-error); border-color:transparent}
.ui-chip--info{background:var(--fb-info-bg); color:var(--fb-info); border-color:transparent}

.ui-card{background:var(--surface-raised); border:1px solid var(--border-subtle);
  border-radius:var(--radius-lg); padding:var(--sp-5); box-shadow:var(--elev-1)}

.ui-kpi{background:var(--surface-sunken); border:1px solid var(--border-subtle);
  border-radius:var(--radius-md); padding:var(--sp-4);
  display:flex; flex-direction:column; min-width:0}
.ui-kpi .k{font-size:var(--fs-1); text-transform:uppercase; letter-spacing:.08em;
  color:var(--text-muted); font-weight:700}
.ui-kpi .v{font-size:var(--fs-7); font-weight:700; line-height:1.1;
  font-variant-numeric:tabular-nums; margin-top:var(--sp-1)}
.ui-kpi .s{font-size:var(--fs-2); color:var(--text-muted); margin-top:2px}

.ui-toolbar{display:flex; flex-wrap:wrap; gap:var(--sp-2); align-items:flex-end;
  padding:var(--sp-3); background:var(--surface-sunken);
  border:1px solid var(--border-subtle); border-radius:var(--radius-md);
  margin-bottom:var(--sp-3)}
.ui-toolbar .ui-field{margin:0; min-width:150px; flex:1 1 150px}
.ui-toolbar .grow{flex:2 1 220px}

.ui-table-wrap{overflow:auto; max-height:70vh; background:var(--surface-raised);
  border:1px solid var(--border-subtle); border-radius:var(--radius-md)}
.ui-table{width:100%; border-collapse:collapse; font-size:var(--fs-3);
  font-variant-numeric:tabular-nums}
.ui-table th{position:sticky; top:0; background:var(--surface-raised);
  text-align:left; font-size:var(--fs-1); text-transform:uppercase; letter-spacing:.06em;
  color:var(--text-muted); font-weight:700; padding:var(--sp-2) var(--sp-3);
  border-bottom:1.5px solid var(--border-strong); white-space:nowrap}
.ui-table th[aria-sort]{cursor:pointer; color:var(--text-primary)}
.ui-table th .car{color:var(--text-muted); font-size:var(--fs-2)}
.ui-table td{padding:var(--sp-2) var(--sp-3); border-bottom:1px solid var(--border-subtle)}
/* La fila Total (lineamiento 3: toda tabla con cifras la lleva). Va en <tfoot>; su rótulo puede ser <th scope="row">,
   que no hereda el estilo ni la posición fija de los encabezados. */
.ui-table tfoot th,.ui-table tfoot td{position:static; font-size:var(--fs-3); text-transform:none; letter-spacing:normal;
  color:var(--text-primary); font-weight:700; background:var(--surface-raised);
  border-top:1.5px solid var(--border-strong); border-bottom:0}

.ui-table td.num,.ui-table th.num{text-align:right}
.ui-table td.num{white-space:nowrap}
.ui-table tbody tr:hover{background:var(--surface-sunken)}

.ui-table--fija td:first-child,
.ui-table--fija tbody th:first-child{
  position:sticky; left:0; background:var(--surface-page); z-index:var(--z-tbl-col)}

.ui-table--fija td,.ui-table--fija th{scroll-margin-left:var(--tbl-col-fija)}
.ui-table--fija thead th{z-index:var(--z-tbl-head)}
.ui-table--fija thead th:first-child{left:0; z-index:var(--z-tbl-corner)}

.ui-table--fija tbody tr:hover td:first-child,
.ui-table--fija tbody tr:hover th:first-child{background:var(--surface-sunken)}

.ui-empty{text-align:center; padding:var(--sp-7) var(--sp-4);
  border:1px dashed var(--border-default); border-radius:var(--radius-lg);
  background:var(--surface-sunken)}
.ui-empty h4{margin:0 0 var(--sp-2); font-size:var(--fs-5); color:var(--text-primary)}
.ui-empty p{margin:0 auto var(--sp-4); color:var(--text-secondary);
  font-size:var(--fs-3); max-width:44ch}

.ui-banner{display:flex; gap:var(--sp-3); padding:var(--sp-3) var(--sp-4);
  border-radius:var(--radius-md); font-size:var(--fs-3); align-items:flex-start;
  border-left:3px solid currentColor}
.ui-banner b{display:block; margin-bottom:2px}
.ui-banner--info{background:var(--fb-info-bg); color:var(--fb-info)}
.ui-banner--warn{background:var(--fb-warning-bg); color:var(--fb-warning)}
.ui-banner--err{background:var(--fb-error-bg); color:var(--fb-error)}
.ui-banner--ok{background:var(--fb-success-bg); color:var(--fb-success)}
.ui-banner span{color:var(--text-primary)}

.ui-banner ul{margin:0; padding-left:var(--sp-4)}
.ui-banner li{margin-bottom:var(--sp-1); line-height:1.5}
.ui-banner li:last-child{margin-bottom:0}

.ui-skel{display:block; height:11px; border-radius:var(--radius-full);
  background:linear-gradient(90deg,var(--surface-sunken) 25%,var(--border-subtle) 50%,var(--surface-sunken) 75%);
  background-size:200% 100%; animation:sccpulse 1.4s ease-in-out infinite}
@keyframes sccpulse{0%{background-position:200% 0}100%{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){.ui-skel{animation:none}}

.ui-help{display:inline-flex; position:relative; vertical-align:middle}
.ui-help-btn{width:18px; height:18px; min-height:0; padding:0; border-radius:50%;
  border:1px solid var(--border-strong); background:var(--surface-raised);
  color:var(--text-secondary); font-size:11px; font-weight:700; cursor:pointer;
  display:inline-flex; align-items:center; justify-content:center; line-height:1}
.ui-help-btn:focus-visible{outline:2px solid var(--focus-ring); outline-offset:2px}
.ui-help-btn::after{content:""; position:absolute; inset:-13px}
.ui-help-pop{position:absolute; left:0; top:calc(100% + 8px); z-index:var(--z-dropdown);
  width:264px; padding:var(--sp-3); background:var(--surface-inverse);
  color:var(--text-inverse); border-radius:var(--radius-md); box-shadow:var(--elev-3);
  font-size:var(--fs-2); line-height:var(--lh-snug); font-weight:400; text-align:left}
.ui-help-pop[hidden]{display:none}

.ui-def{all:unset; cursor:help; border-bottom:1px dotted var(--border-strong);
  color:inherit; font:inherit}
.ui-def:hover{border-bottom-color:var(--text-primary); color:var(--text-primary)}
.ui-def:focus-visible{outline:2px solid var(--focus-ring); outline-offset:2px}

.ui-tabs{display:flex; gap:var(--sp-1); border-bottom:1px solid var(--border-subtle);
  overflow-x:auto}
.ui-tab{min-height:var(--control-h-touch); padding:0 var(--sp-3); background:none;
  border:0; border-bottom:2px solid transparent; font:inherit; font-size:var(--fs-3);
  font-weight:600; color:var(--text-muted); cursor:pointer; white-space:nowrap}
.ui-tab[aria-selected="true"]{color:var(--text-primary); border-bottom-color:var(--text-primary)}
.ui-tab:focus-visible{outline:2px solid var(--focus-ring); outline-offset:-2px}
.ui-tab .n{display:inline-block; margin-left:var(--sp-1); padding:0 5px;
  border-radius:var(--radius-full); background:var(--surface-sunken);
  font-size:var(--fs-1); color:var(--text-secondary)}

.ui-stack{display:flex; flex-direction:column; gap:var(--sp-3)}
.ui-grid-kpi{display:grid; gap:var(--sp-2);
  grid-template-columns:repeat(auto-fit,minmax(136px,1fr))}

.ui-dest{display:flex; flex-direction:column; gap:var(--sp-2)}
.ui-dest-row{display:grid; grid-template-columns:76px 1fr; gap:var(--sp-3); align-items:start}
@media (max-width:560px){ .ui-dest-row{grid-template-columns:1fr; gap:var(--sp-1)} }
.ui-dest-lbl{font-size:var(--fs-2); font-weight:700; letter-spacing:.04em;
  text-transform:uppercase; color:var(--text-muted); padding-top:7px}
.ui-dest-chips{display:flex; flex-wrap:wrap; gap:var(--sp-2); align-items:center}
.ui-dest-chip{display:inline-flex; align-items:center; gap:var(--sp-2);
  padding:5px var(--sp-2) 5px var(--sp-3); border-radius:var(--radius-full);
  background:var(--surface-sunken); border:1px solid var(--border-subtle);
  font-size:var(--fs-3); color:var(--text-primary); white-space:nowrap}
.ui-dest-chip .x{border:0; background:none; cursor:pointer; color:var(--text-muted);
  font:inherit; line-height:1; padding:2px 4px; border-radius:var(--radius-sm)}
.ui-dest-chip .x:hover{color:var(--fb-error); background:var(--fb-error-bg)}
.ui-dest-chip .x:focus-visible{outline:2px solid var(--focus-ring); outline-offset:1px}
.ui-dest-chip--grupo{background:var(--surface-raised); border-color:var(--text-primary);
  border-style:dashed}
.ui-dest-chip--grupo .ico{font-size:var(--fs-2); color:var(--text-secondary)}
.ui-dest-chip--grupo .n{color:var(--text-muted); font-size:var(--fs-2)}
.ui-dest-vacio{font-size:var(--fs-3); color:var(--text-muted); font-style:italic}

.ui-dest-chips .ui-select{width:auto; min-width:220px; max-width:32ch}
.ui-dest-add{min-height:var(--control-h-sm); padding:0 var(--sp-3);
  border:1px dashed var(--border-strong); border-radius:var(--radius-md);
  background:var(--surface-raised); color:var(--text-secondary);
  font:inherit; font-size:var(--fs-3); cursor:pointer}
.ui-dest-add:hover{border-style:solid; color:var(--text-primary)}
.ui-dest-resumen{font-size:var(--fs-2); color:var(--text-secondary);
  padding:var(--sp-2) var(--sp-3); background:var(--surface-sunken);
  border-radius:var(--radius-sm); border-left:2px solid var(--border-strong)}

.ui-loader{display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:var(--sp-3); min-height:200px; color:var(--text-muted); font-size:var(--fs-2)}
.ui-loader img{width:120px; height:120px; display:block}
.ui-loader-txt{letter-spacing:.02em}
/* Marca que pone ui-loader.js en el elemento donde cambió un «Cargando…» por el loader. No lleva estilo propio: la regla existe para que la clase esté definida. */
.ui-loader-host{}
@media (prefers-reduced-motion:reduce){ .ui-loader img{animation:none} }

.ui-table tbody tr{scroll-margin-top:var(--control-h)}

.ui-modal-bg{position:fixed; inset:0; background:var(--overlay-scrim); z-index:var(--z-modal);
  display:flex; align-items:center; justify-content:center; padding:var(--sp-4)}
.ui-modal{background:var(--surface-raised); border-radius:var(--radius-lg); box-shadow:var(--elev-3);
  max-width:560px; width:100%; max-height:86vh; overflow-y:auto; padding:var(--sp-5)}
.ui-modal h2{margin:0 0 var(--sp-3); font-size:var(--fs-6); color:var(--text-primary)}
.ui-modal--danger{border-top:3px solid var(--fb-error)}

.ui-modal--wide{max-width:min(1040px,96vw); padding:var(--sp-4)}

.ui-modal--zonas{display:flex; flex-direction:column; height:86vh; max-height:86vh;
  min-height:min(520px,86vh); overflow:hidden}
.ui-modal--zonas > *{flex:0 0 auto}
.ui-modal--zonas > [data-zona="scroll"]{flex:1 1 auto; overflow-y:auto; min-height:0}
.ui-modal-actions{display:flex; gap:var(--sp-2); align-items:center; flex-wrap:wrap;
  margin-top:var(--sp-5); padding-top:var(--sp-4); border-top:1px solid var(--border-subtle)}

.ui-check{display:inline-flex; align-items:center; gap:var(--sp-2); font-size:var(--fs-3);
  color:var(--text-primary)}

.ui-est--neutro { --est-color:var(--text-secondary); --est-bg:var(--surface-sunken); }
.ui-est--info   { --est-color:var(--fb-info);        --est-bg:var(--fb-info-bg); }
.ui-est--ok     { --est-color:var(--fb-success);     --est-bg:var(--fb-success-bg); }
.ui-est--alerta { --est-color:var(--fb-warning);     --est-bg:var(--fb-warning-bg); }
.ui-est--error  { --est-color:var(--fb-error);       --est-bg:var(--fb-error-bg); }

.ui-est--abierto { --est-relleno:transparent;      --est-texto:var(--est-color); --est-punto:transparent; }
.ui-est--cerrado { --est-relleno:var(--est-bg);    --est-texto:var(--est-color); --est-punto:var(--est-color); }
.ui-est--urgente { --est-relleno:var(--est-color); --est-texto:var(--surface-raised); --est-punto:var(--est-color); }

.ui-est{
  display:inline-flex; align-items:center; gap:var(--sp-2);
  padding:2px var(--sp-3); border-radius:var(--radius-full);
  font-size:var(--fs-2); font-weight:600; line-height:1.6; white-space:nowrap;
  border:1px solid var(--est-color, var(--border-default));
  color:var(--est-texto, var(--text-secondary));
  background:var(--est-relleno, transparent);
}

.ui-est::before{
  content:""; width:8px; height:8px; border-radius:50%; flex:none;
  border:2px solid currentColor; background:var(--est-punto, transparent);
}
.ui-est--urgente::before{ border-color:var(--surface-raised); background:var(--surface-raised); }

.ui-multi{position:relative; display:inline-block}
.ui-multi-toggle{font-family:var(--font-sans); font-size:var(--fs-3); cursor:pointer;
  padding:var(--sp-1) var(--sp-3); background:var(--surface-raised); color:var(--text-primary);
  border:1px solid var(--border-default); border-radius:var(--radius-sm)}
.ui-multi-toggle:hover{background:var(--surface-sunken)}
.ui-multi-toggle:focus-visible{outline:2px solid var(--focus-ring); outline-offset:1px}

.ui-multi-toggle[aria-expanded="true"],
.ui-multi-toggle.is-on{border-color:var(--text-primary); font-weight:700}
.ui-multi-toggle .n{color:var(--text-muted); font-weight:400; margin-left:var(--sp-1)}
.ui-multi-toggle .caret{color:var(--text-muted); margin-left:var(--sp-1)}

.ui-multi-panel{position:absolute; top:calc(100% + 4px); left:0; z-index:var(--z-dropdown);
  min-width:19rem; max-width:26rem; background:var(--surface-raised);
  border:1px solid var(--border-default); border-radius:var(--radius-md);
  box-shadow:var(--elev-2); padding:var(--sp-2)}
.ui-multi-panel[hidden]{display:none}
.ui-multi-buscar{width:100%; margin-bottom:var(--sp-2)}
.ui-multi-lista{max-height:19rem; overflow-y:auto}
.ui-multi-opt{display:flex; align-items:center; gap:var(--sp-2); cursor:pointer;
  padding:var(--sp-1) var(--sp-2); border-radius:var(--radius-sm);
  font-size:var(--fs-3); color:var(--text-primary)}
.ui-multi-opt:hover{background:var(--surface-sunken)}
.ui-multi-opt .meta{color:var(--text-muted); font-size:var(--fs-2); margin-left:auto}
.ui-multi-vacio{padding:var(--sp-2); color:var(--text-muted); font-size:var(--fs-3); font-style:italic}
.ui-multi-acc{display:flex; gap:var(--sp-2); padding-top:var(--sp-2); margin-top:var(--sp-2);
  border-top:1px solid var(--border-subtle)}

/* ── Sumado por Luni (decisión D8, 2026-10-24): tablero, calendario y filtros ─────────────────── */

/* Texto solo para lectores de pantalla (anuncios de los componentes que se mueven con el teclado). */
.ui-sr{position:absolute; width:1px; height:1px; margin:-1px; padding:0; overflow:hidden;
  clip:rect(0 0 0 0); white-space:nowrap; border:0}

/* Tablero por estado · UI.tablero (assets/ui-tablero.js) */
.ui-tablero{display:grid; grid-auto-flow:column; grid-auto-columns:minmax(var(--tbl-col-fija), 1fr);
  gap:var(--sp-3); overflow-x:auto; padding-bottom:var(--sp-2)}
.ui-tablero-col{display:flex; flex-direction:column; min-width:0; background:var(--surface-sunken);
  border:1px solid var(--border-subtle); border-radius:var(--radius-md)}
.ui-tablero-cab{display:flex; align-items:center; justify-content:space-between; gap:var(--sp-2);
  padding:var(--sp-3); border-bottom:1px solid var(--border-subtle)}
.ui-tablero-titulo{margin:0; font-size:var(--fs-3); font-weight:var(--fw-semibold); color:var(--text-primary)}
.ui-tablero-n{font-size:var(--fs-2); color:var(--text-muted); font-variant-numeric:tabular-nums}
.ui-tablero-lista{list-style:none; margin:0; padding:var(--sp-2); display:flex; flex-direction:column;
  gap:var(--sp-2); flex:1 1 auto; min-height:var(--sp-8)}
.ui-tablero-lista--destino{background:var(--surface-muted); outline:2px dashed var(--border-strong); outline-offset:-2px}
.ui-tablero-tarjeta{display:flex; flex-direction:column; gap:var(--sp-1); padding:var(--sp-2) var(--sp-3);
  background:var(--surface-raised); border:1px solid var(--border-default); border-radius:var(--radius-sm);
  box-shadow:var(--elev-1); cursor:grab}
.ui-tablero-tarjeta:focus-visible{outline:2px solid var(--focus-ring); outline-offset:2px}
.ui-tablero-tarjeta--levantada{border-color:var(--border-accent); box-shadow:var(--elev-2)}
.ui-tablero-tarjeta[aria-busy="true"]{cursor:progress; color:var(--text-muted)}
.ui-tablero-tarjeta-titulo{font-size:var(--fs-3); font-weight:var(--fw-medium); color:var(--text-primary)}
.ui-tablero-tarjeta-detalle{font-size:var(--fs-2); color:var(--text-secondary)}
.ui-tablero-vacio{padding:var(--sp-3); font-size:var(--fs-2); color:var(--text-muted); text-align:center}

/* Calendario mensual y semanal · UI.calendario (assets/ui-calendario.js) */
.ui-cal{display:flex; flex-direction:column; gap:var(--sp-3)}
.ui-cal-cab{display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:var(--sp-3)}
.ui-cal-titulo{margin:0; font-size:var(--fs-5); font-weight:var(--fw-semibold); color:var(--text-primary);
  text-transform:capitalize}
.ui-cal-rejilla{display:flex; flex-direction:column; border:1px solid var(--border-subtle);
  border-radius:var(--radius-md); overflow:hidden; background:var(--surface-raised)}
.ui-cal-sem{display:grid; grid-template-columns:repeat(7, minmax(0, 1fr))}
.ui-cal-sem + .ui-cal-sem{border-top:1px solid var(--border-subtle)}
.ui-cal-encab{background:var(--surface-sunken); font-size:var(--fs-2); font-weight:var(--fw-semibold);
  color:var(--text-secondary); text-transform:capitalize}
.ui-cal-encab > *{padding:var(--sp-2)}
.ui-cal-dia{display:flex; flex-direction:column; gap:var(--sp-1); min-height:var(--sp-8); padding:var(--sp-1);
  border-left:1px solid var(--border-subtle)}
.ui-cal-dia:first-child{border-left:0}
.ui-cal-rejilla--semana .ui-cal-dia{min-height:calc(var(--sp-8) * 3)}
.ui-cal-dia--fuera{background:var(--surface-sunken); color:var(--text-muted)}
.ui-cal-dia--hoy .ui-cal-num{background:var(--surface-inverse); color:var(--text-inverse)}
.ui-cal-dia--destino{background:var(--surface-muted); outline:2px dashed var(--border-strong); outline-offset:-2px}
.ui-cal-num{align-self:flex-start; min-width:var(--sp-5); padding:0 var(--sp-1); border-radius:var(--radius-full);
  font-size:var(--fs-2); font-weight:var(--fw-semibold); text-align:center; font-variant-numeric:tabular-nums}
.ui-cal-items{display:flex; flex-direction:column; gap:var(--sp-1); min-width:0}
.ui-cal-item{padding:var(--sp-1) var(--sp-2); border-radius:var(--radius-sm); background:var(--surface-sunken);
  border:1px solid var(--border-default); font-size:var(--fs-2); color:var(--text-primary);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; cursor:grab}
.ui-cal-item:focus-visible{outline:2px solid var(--focus-ring); outline-offset:1px}
.ui-cal-item--levantado{border-color:var(--border-accent); box-shadow:var(--elev-2)}

/* Filtros con vistas guardadas · UI.filtros (assets/ui-filtros.js) */
.ui-filtros{display:flex; flex-direction:column; gap:var(--sp-3)}
.ui-filtros-campos{display:flex; flex-wrap:wrap; align-items:flex-end; gap:var(--sp-3)}
.ui-vistas{display:flex; flex-wrap:wrap; align-items:center; gap:var(--sp-2)}
.ui-vistas-titulo{font-size:var(--fs-2); font-weight:var(--fw-semibold); color:var(--text-secondary)}
.ui-vista--activa{background:var(--surface-inverse); color:var(--text-inverse); border-color:var(--surface-inverse)}

/* ── Íconos (decisión 5 de Alonso, 2026-10-25): Lucide 1.61.0, licencia ISC, alojados en /assets/vendor/lucide/.
   Toman el color del texto (currentColor) y el tamaño de la letra. Son decorativos: llevan aria-hidden="true";
   si un ícono va solo, su nombre va en texto con .ui-sr. Cada clase aparece en la guía viva. */
.ui-icono{display:inline-block; flex:none; width:1.25em; height:1.25em; vertical-align:-0.25em;
  background-color:currentColor; -webkit-mask:var(--ui-icono) center/contain no-repeat; mask:var(--ui-icono) center/contain no-repeat}
.ui-icono--buscar{--ui-icono:url(/assets/vendor/lucide/search.svg)}
.ui-icono--calendario{--ui-icono:url(/assets/vendor/lucide/calendar.svg)}
.ui-icono--tablero{--ui-icono:url(/assets/vendor/lucide/square-kanban.svg)}
.ui-icono--lista{--ui-icono:url(/assets/vendor/lucide/list.svg)}
.ui-icono--filtro{--ui-icono:url(/assets/vendor/lucide/funnel.svg)}
.ui-icono--agregar{--ui-icono:url(/assets/vendor/lucide/plus.svg)}
.ui-icono--editar{--ui-icono:url(/assets/vendor/lucide/pencil.svg)}
.ui-icono--borrar{--ui-icono:url(/assets/vendor/lucide/trash-2.svg)}
.ui-icono--cerrar{--ui-icono:url(/assets/vendor/lucide/x.svg)}
.ui-icono--listo{--ui-icono:url(/assets/vendor/lucide/check.svg)}
.ui-icono--flecha-derecha{--ui-icono:url(/assets/vendor/lucide/arrow-right.svg)}
.ui-icono--flecha-izquierda{--ui-icono:url(/assets/vendor/lucide/arrow-left.svg)}
.ui-icono--abajo{--ui-icono:url(/assets/vendor/lucide/chevron-down.svg)}
.ui-icono--derecha{--ui-icono:url(/assets/vendor/lucide/chevron-right.svg)}
.ui-icono--subir{--ui-icono:url(/assets/vendor/lucide/upload.svg)}
.ui-icono--descargar{--ui-icono:url(/assets/vendor/lucide/download.svg)}
.ui-icono--ver{--ui-icono:url(/assets/vendor/lucide/eye.svg)}
.ui-icono--ocultar{--ui-icono:url(/assets/vendor/lucide/eye-off.svg)}
.ui-icono--persona{--ui-icono:url(/assets/vendor/lucide/user.svg)}
.ui-icono--equipo{--ui-icono:url(/assets/vendor/lucide/users.svg)}
.ui-icono--cliente{--ui-icono:url(/assets/vendor/lucide/building-2.svg)}
.ui-icono--imagen{--ui-icono:url(/assets/vendor/lucide/image.svg)}
.ui-icono--video{--ui-icono:url(/assets/vendor/lucide/film.svg)}
.ui-icono--mensaje{--ui-icono:url(/assets/vendor/lucide/message-circle.svg)}
.ui-icono--comentario{--ui-icono:url(/assets/vendor/lucide/message-square.svg)}
.ui-icono--correo{--ui-icono:url(/assets/vendor/lucide/mail.svg)}
.ui-icono--telefono{--ui-icono:url(/assets/vendor/lucide/phone.svg)}
.ui-icono--aviso{--ui-icono:url(/assets/vendor/lucide/triangle-alert.svg)}
.ui-icono--info{--ui-icono:url(/assets/vendor/lucide/info.svg)}
.ui-icono--exito{--ui-icono:url(/assets/vendor/lucide/circle-check.svg)}
.ui-icono--error{--ui-icono:url(/assets/vendor/lucide/circle-x.svg)}
.ui-icono--reloj{--ui-icono:url(/assets/vendor/lucide/clock.svg)}
.ui-icono--entrar{--ui-icono:url(/assets/vendor/lucide/log-in.svg)}
.ui-icono--salir{--ui-icono:url(/assets/vendor/lucide/log-out.svg)}
.ui-icono--enlace-externo{--ui-icono:url(/assets/vendor/lucide/external-link.svg)}
.ui-icono--copiar{--ui-icono:url(/assets/vendor/lucide/copy.svg)}
.ui-icono--destacado{--ui-icono:url(/assets/vendor/lucide/sparkles.svg)}
.ui-icono--menu{--ui-icono:url(/assets/vendor/lucide/menu.svg)}
.ui-icono--ajustes{--ui-icono:url(/assets/vendor/lucide/settings.svg)}
.ui-icono--grafico{--ui-icono:url(/assets/vendor/lucide/chart-column.svg)}
.ui-icono--carpeta{--ui-icono:url(/assets/vendor/lucide/folder.svg)}
.ui-icono--aprobar{--ui-icono:url(/assets/vendor/lucide/thumbs-up.svg)}
