*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;font-family:var(--fs-font);font-size:var(--fs-text-base);color:var(--fs-text-primary);background:var(--fs-bg-app);-webkit-font-smoothing:antialiased}
a{text-decoration:none;color:inherit}
button{font-family:inherit}

/* ── Login ───────────────────────────────────────────────────────────────── */
#fs-login{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1B3A6B 0%,#2563EB 100%);padding:16px}
.fs-login-card{background:var(--fs-bg-surface);border-radius:var(--fs-radius-lg);box-shadow:var(--fs-shadow-lg);padding:40px 36px;width:100%;max-width:400px}
.fs-login-brand{text-align:center;margin-bottom:32px}
.fs-login-brand-name{font-size:var(--fs-text-2xl);font-weight:800;color:var(--fs-primary);letter-spacing:-.5px}
.fs-login-brand-sub{font-size:var(--fs-text-xs);color:var(--fs-text-muted);text-transform:uppercase;letter-spacing:1.5px;margin-top:4px}
.fs-login-heading{font-size:var(--fs-text-md);font-weight:600;color:var(--fs-text-secondary);margin-bottom:20px}

/* ── Campos de formulario (login + modal) ────────────────────────────────── */
.fs-field{margin-bottom:16px}
.fs-label{display:block;font-size:var(--fs-text-sm);font-weight:500;color:var(--fs-text-secondary);margin-bottom:6px}
.fs-input{width:100%;padding:9px 12px;border:1px solid var(--fs-border);border-radius:var(--fs-radius);font-size:var(--fs-text-base);font-family:var(--fs-font);color:var(--fs-text-primary);background:var(--fs-bg-surface);outline:none;transition:border-color var(--fs-transition),box-shadow var(--fs-transition)}
.fs-input:focus{border-color:var(--fs-accent);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.fs-input::placeholder{color:var(--fs-text-muted)}

/* ── Botón primario ancho (login) ────────────────────────────────────────── */
.fs-btn-primary{display:block;width:100%;padding:10px 18px;background:var(--fs-primary);color:var(--fs-text-white);border:none;border-radius:var(--fs-radius);font-size:var(--fs-text-base);font-weight:600;font-family:var(--fs-font);cursor:pointer;transition:background var(--fs-transition);margin-top:8px;text-align:center}
.fs-btn-primary:hover{background:var(--fs-primary-dark)}
.fs-btn-primary:disabled{opacity:.6;cursor:not-allowed}

/* ── Alertas ─────────────────────────────────────────────────────────────── */
.fs-alert{padding:10px 12px;border-radius:var(--fs-radius);font-size:var(--fs-text-sm);margin-bottom:0;margin-top:16px;display:none;line-height:1.5}
.fs-alert.visible{display:block}
.fs-alert-error{background:var(--fs-error-bg);color:var(--fs-error);border:1px solid rgba(220,38,38,.2)}
.fs-alert-success{background:var(--fs-success-bg);color:var(--fs-success);border:1px solid rgba(22,163,74,.2)}

/* ── Layout principal ────────────────────────────────────────────────────── */
#fs-app{display:flex;height:100vh;overflow:hidden}

#fs-sidebar{width:var(--fs-sidebar-w);min-width:var(--fs-sidebar-w);height:100vh;background:var(--fs-bg-sidebar);display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden;flex-shrink:0}
#fs-sidebar::-webkit-scrollbar{width:4px}
#fs-sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15);border-radius:2px}

.fs-sb-brand{padding:20px 16px 16px;border-bottom:1px solid rgba(255,255,255,.08);flex-shrink:0}
.fs-sb-brand-name{font-size:var(--fs-text-lg);font-weight:800;color:var(--fs-text-white);letter-spacing:-.3px}
.fs-sb-brand-sub{font-size:var(--fs-text-xs);color:rgba(255,255,255,.4);text-transform:uppercase;letter-spacing:1px;margin-top:2px}
.fs-sb-nav{flex:1;padding:8px 0}
.fs-sb-section{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:rgba(255,255,255,.3);padding:14px 16px 4px}
.fs-sb-item{display:flex;align-items:center;gap:10px;padding:8px 16px;color:rgba(255,255,255,.65);font-size:var(--fs-text-sm);font-weight:500;cursor:pointer;transition:all var(--fs-transition);border-left:3px solid transparent;user-select:none}
.fs-sb-item:hover{background:rgba(255,255,255,.07);color:var(--fs-text-white)}
.fs-sb-item.active{background:rgba(255,255,255,.10);color:var(--fs-text-white);border-left-color:#60A5FA}
.fs-sb-item svg{width:17px;height:17px;flex-shrink:0;opacity:.75}
.fs-sb-item:hover svg,.fs-sb-item.active svg{opacity:1}
.fs-sb-label{flex:1}
.fs-sb-badge{background:var(--fs-critica);color:#fff;font-size:10px;font-weight:700;min-width:18px;height:18px;border-radius:9px;display:none;align-items:center;justify-content:center;padding:0 5px}
.fs-sb-badge.show{display:flex}

/* Grupos plegables del menu (FASE30, Bloque 2) */
.fs-sb-section.fs-sb-toggle{display:flex;align-items:center;justify-content:space-between;cursor:pointer;user-select:none}
.fs-sb-section.fs-sb-toggle:hover{color:rgba(255,255,255,.55)}
.fs-sb-chevron{width:11px;height:11px;flex-shrink:0;transition:transform var(--fs-transition);opacity:.7}
.fs-sb-group.colapsado .fs-sb-chevron{transform:rotate(-90deg)}
.fs-sb-group.colapsado .fs-sb-group-items{display:none}

.fs-sb-footer{padding:12px 16px;border-top:1px solid rgba(255,255,255,.08);flex-shrink:0}
.fs-sb-user{display:flex;align-items:center;gap:10px}
.fs-sb-avatar{width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.18);color:var(--fs-text-white);font-size:var(--fs-text-sm);font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.fs-sb-user-info{min-width:0;flex:1}
.fs-sb-user-name{font-size:var(--fs-text-sm);font-weight:600;color:var(--fs-text-white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fs-sb-user-rol{font-size:var(--fs-text-xs);color:rgba(255,255,255,.4);text-transform:capitalize}
.fs-sb-logout{background:none;border:none;color:rgba(255,255,255,.4);cursor:pointer;padding:4px;border-radius:var(--fs-radius-sm);transition:color var(--fs-transition);display:flex;align-items:center;flex-shrink:0}
.fs-sb-logout:hover{color:var(--fs-text-white)}
.fs-sb-logout svg{width:16px;height:16px;display:block}

.fs-main-wrapper{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}

#fs-topbar{height:var(--fs-topbar-h);min-height:var(--fs-topbar-h);background:var(--fs-bg-surface);border-bottom:1px solid var(--fs-border);display:flex;align-items:center;padding:0 var(--fs-gap);box-shadow:var(--fs-shadow-sm);flex-shrink:0}
.fs-topbar-title{font-size:var(--fs-text-lg);font-weight:700;color:var(--fs-text-primary)}

#fs-content{flex:1;overflow-y:auto;padding:var(--fs-gap)}
#fs-content::-webkit-scrollbar{width:6px}
#fs-content::-webkit-scrollbar-thumb{background:var(--fs-border);border-radius:3px}

/* ── Cabecera de página ──────────────────────────────────────────────────── */
.fs-page-header{margin-bottom:24px}
.fs-page-title{font-size:var(--fs-text-xl);font-weight:700;color:var(--fs-text-primary)}
.fs-page-subtitle{font-size:var(--fs-text-sm);color:var(--fs-text-muted);margin-top:4px;text-transform:capitalize}

/* ── KPIs ────────────────────────────────────────────────────────────────── */
.fs-kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;margin-bottom:24px}
.fs-kpi-card{background:var(--fs-bg-surface);border:1px solid var(--fs-border);border-radius:var(--fs-radius);padding:20px;box-shadow:var(--fs-shadow-sm)}
.fs-kpi-label{font-size:var(--fs-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:var(--fs-text-muted);margin-bottom:10px}
.fs-kpi-value{font-size:32px;font-weight:800;color:var(--fs-text-primary);line-height:1}
.fs-kpi-value.alerta{color:var(--fs-critica)}

/* ── Panels ──────────────────────────────────────────────────────────────── */
.fs-panels-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.fs-panel{background:var(--fs-bg-surface);border:1px solid var(--fs-border);border-radius:var(--fs-radius);padding:20px;box-shadow:var(--fs-shadow-sm)}
.fs-panel-title{font-size:var(--fs-text-sm);font-weight:700;color:var(--fs-text-secondary);text-transform:uppercase;letter-spacing:.6px;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--fs-border)}

/* ── Tabla (dashboard) ───────────────────────────────────────────────────── */
.fs-table{width:100%;border-collapse:collapse;font-size:var(--fs-text-sm)}
.fs-table td{padding:9px 6px;border-bottom:1px solid var(--fs-border);vertical-align:middle}
.fs-table tr:last-child td{border-bottom:none}
.fs-table tr:hover td{background:var(--fs-bg-app)}

/* ── Badges ──────────────────────────────────────────────────────────────── */
.fs-badge{display:inline-flex;align-items:center;padding:3px 9px;border-radius:20px;font-size:11px;font-weight:700;white-space:nowrap;letter-spacing:.3px}
.fs-badge-r{background:#FEE2E2;color:#B91C1C;border:1px solid #FECACA}
.fs-badge-o{background:#FFEDD5;color:#C2410C;border:1px solid #FED7AA}
.fs-badge-a{background:#FEF3C7;color:#92400E;border:1px solid #FDE68A}
.fs-badge-g{background:#DCFCE7;color:#15803D;border:1px solid #BBF7D0}

/* ── Utilidades ──────────────────────────────────────────────────────────── */
.fs-empty{padding:36px 24px;text-align:center;color:var(--fs-text-muted);font-size:var(--fs-text-sm);line-height:1.6}
.fs-empty-error{color:var(--fs-error)}
.fs-loader{display:flex;align-items:center;justify-content:center;gap:8px;padding:36px;color:var(--fs-text-muted);font-size:var(--fs-text-sm)}
.fs-spinner{width:16px;height:16px;border:2px solid var(--fs-border);border-top-color:var(--fs-accent);border-radius:50%;animation:fs-spin .7s linear infinite;flex-shrink:0}
@keyframes fs-spin{to{transform:rotate(360deg)}}

.fs-skel{background:linear-gradient(90deg,#f0f0f0 25%,#e4e4e4 50%,#f0f0f0 75%);background-size:200% 100%;animation:fs-shimmer 1.4s infinite;border-radius:var(--fs-radius-sm)}
@keyframes fs-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}

.fs-boot-error{min-height:100vh;display:flex;align-items:center;justify-content:center;font-family:var(--fs-font);background:var(--fs-bg-app);padding:16px}
.fs-boot-error-card{background:var(--fs-bg-surface);border-radius:var(--fs-radius-lg);box-shadow:var(--fs-shadow-lg);padding:40px;max-width:440px;text-align:center}
.fs-boot-error-card h2{font-size:var(--fs-text-lg);font-weight:700;color:var(--fs-critica);margin-bottom:10px}
.fs-boot-error-card p{font-size:var(--fs-text-sm);color:var(--fs-text-secondary);line-height:1.6}
.fs-boot-error-card code{background:var(--fs-bg-app);padding:1px 6px;border-radius:var(--fs-radius-sm);font-size:var(--fs-text-xs);color:var(--fs-critica)}

/* ════════════════════════════════════════════════════════════════════════════
   MÓDULO CLIENTES
   ════════════════════════════════════════════════════════════════════════════ */

/* Cabecera de página con botón a la derecha */
.fs-page-header-row{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  margin-bottom:24px;
}

/* Panel sin padding interno (la toolbar pone el suyo) */
.fs-panel-flush{padding:0;overflow:hidden}

/* Botón primario compacto */
.fs-btn-primary-sm{
  display:inline-flex;
  align-items:center;
  padding:9px 18px;
  background:var(--fs-primary);
  color:var(--fs-text-white);
  border:none;
  border-radius:var(--fs-radius);
  font-size:var(--fs-text-sm);
  font-weight:600;
  font-family:var(--fs-font);
  cursor:pointer;
  white-space:nowrap;
  transition:background var(--fs-transition),box-shadow var(--fs-transition);
  box-shadow:0 1px 3px rgba(27,58,107,.25);
}
.fs-btn-primary-sm:hover{background:var(--fs-primary-dark);box-shadow:0 3px 8px rgba(27,58,107,.30)}
.fs-btn-primary-sm:active{transform:translateY(1px);box-shadow:none}
.fs-btn-primary-sm:disabled{opacity:.6;cursor:not-allowed;box-shadow:none}

/* Botón ghost (paginador, cancelar) */
.fs-btn-ghost{
  display:inline-flex;
  align-items:center;
  background:var(--fs-bg-surface);
  border:1px solid var(--fs-border);
  border-radius:var(--fs-radius);
  color:var(--fs-text-secondary);
  font-family:var(--fs-font);
  cursor:pointer;
  transition:all var(--fs-transition);
}
.fs-btn-ghost:hover:not(:disabled){
  background:var(--fs-bg-app);
  border-color:#9CA3AF;
  color:var(--fs-text-primary);
}
.fs-btn-ghost:disabled{opacity:.4;cursor:not-allowed}

/* Botón pequeño (paginador) */
.fs-btn-sm{padding:7px 14px;font-size:var(--fs-text-sm)}

/* Botón danger (eliminar modal) */
.fs-btn-danger{
  display:inline-flex;
  align-items:center;
  padding:9px 18px;
  background:var(--fs-critica);
  color:#fff;
  border:none;
  border-radius:var(--fs-radius);
  font-size:var(--fs-text-sm);
  font-weight:600;
  font-family:var(--fs-font);
  cursor:pointer;
  transition:background var(--fs-transition),box-shadow var(--fs-transition);
  box-shadow:0 1px 3px rgba(220,38,38,.25);
}
.fs-btn-danger:hover{background:#B91C1C;box-shadow:0 3px 8px rgba(220,38,38,.30)}
.fs-btn-danger:active{transform:translateY(1px);box-shadow:none}
.fs-btn-danger:disabled{opacity:.55;cursor:not-allowed;box-shadow:none}

/* Barra de herramientas (buscar + filtro) */
.fs-cli-toolbar{
  display:flex;
  align-items:center;
  gap:12px;
  padding:16px 20px;
  border-bottom:1px solid var(--fs-border);
  background:var(--fs-bg-surface);
  flex-wrap:wrap;
}

/* Buscador con icono superpuesto */
.fs-cli-search-wrap{
  position:relative;
  flex:1;
  max-width:340px;
}
.fs-cli-search-icon{
  position:absolute;
  left:10px;
  top:50%;
  transform:translateY(-50%);
  width:15px;
  height:15px;
  color:var(--fs-text-muted);
  pointer-events:none;
}
.fs-cli-search-input{padding-left:34px}

/* Select del filtro */
.fs-cli-select{max-width:190px;flex-shrink:0}

/* Wrapper de scroll horizontal para la tabla */
.fs-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}

/* Tabla del módulo Clientes (override y extensión de .fs-table) */
.fs-panel-flush .fs-table{margin:0}
.fs-panel-flush .fs-table thead th{
  padding:10px 12px;
  font-size:var(--fs-text-xs);
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.6px;
  color:var(--fs-text-muted);
  background:#FAFAFA;
  border-bottom:1px solid var(--fs-border);
  text-align:left;
  white-space:nowrap;
}
.fs-panel-flush .fs-table tbody td{padding:11px 12px;border-bottom:1px solid var(--fs-border)}
.fs-panel-flush .fs-table tbody tr:last-child td{border-bottom:none}
.fs-panel-flush .fs-table tbody tr:hover td{background:#F9FAFB}

/* Nombre y NIF con estilo propio */
.fs-cli-nombre{font-weight:600;color:var(--fs-text-primary)}
.fs-cli-nif{font-family:monospace;font-size:var(--fs-text-sm);color:var(--fs-text-secondary);letter-spacing:.5px}

/* Celda de acciones */
.fs-cli-acciones{text-align:right;white-space:nowrap}

/* Botones de acción en tabla */
.fs-btn-tbl{
  background:none;
  border:1px solid var(--fs-border);
  border-radius:var(--fs-radius-sm);
  padding:4px 10px;
  font-size:var(--fs-text-xs);
  font-weight:600;
  color:var(--fs-text-secondary);
  cursor:pointer;
  transition:all var(--fs-transition);
  font-family:var(--fs-font);
  margin-left:6px;
}
.fs-btn-tbl:first-child{margin-left:0}
.fs-btn-tbl:hover{background:var(--fs-accent-light);border-color:var(--fs-accent);color:var(--fs-accent)}
.fs-btn-tbl-danger:hover{background:#FEF2F2;border-color:#FECACA;color:var(--fs-critica)}

/* Paginador */
.fs-cli-pager{
  display:flex;
  align-items:center;
  gap:12px;
  padding:14px 20px;
  border-top:1px solid var(--fs-border);
  background:var(--fs-bg-surface);
}
.fs-pager-txt{
  flex:1;
  text-align:center;
  font-size:var(--fs-text-xs);
  color:var(--fs-text-muted);
}

/* ════════════════════════════════════════════════════════════════════════════
   MODAL
   ════════════════════════════════════════════════════════════════════════════ */

/* Overlay con desenfoque */
.fs-modal-bg{
  position:fixed;
  inset:0;
  background:rgba(15,23,42,.5);
  backdrop-filter:blur(3px);
  -webkit-backdrop-filter:blur(3px);
  z-index:1000;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:16px;
  animation:fs-overlay-in 180ms ease;
}
@keyframes fs-overlay-in{from{opacity:0}to{opacity:1}}

/* Tarjeta del modal */
.fs-modal{
  background:var(--fs-bg-surface);
  border-radius:var(--fs-radius-lg);
  box-shadow:0 20px 60px rgba(0,0,0,.18),0 4px 16px rgba(0,0,0,.10);
  width:100%;
  max-width:660px;
  max-height:90vh;
  display:flex;
  flex-direction:column;
  overflow:hidden;
  animation:fs-modal-in 200ms cubic-bezier(.16,1,.3,1);
}
@keyframes fs-modal-in{
  from{opacity:0;transform:scale(.96) translateY(8px)}
  to{opacity:1;transform:scale(1) translateY(0)}
}

/* Modal pequeño (confirmación) */
.fs-modal-sm{max-width:440px}

/* Cabecera del modal */
.fs-modal-header{
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:20px 24px 18px;
  border-bottom:1px solid var(--fs-border);
  flex-shrink:0;
}
.fs-modal-titulo{
  font-size:var(--fs-text-md);
  font-weight:700;
  color:var(--fs-text-primary);
  letter-spacing:-.2px;
}

/* Botón cerrar modal */
.fs-modal-close{
  background:none;
  border:none;
  width:28px;
  height:28px;
  display:flex;
  align-items:center;
  justify-content:center;
  border-radius:var(--fs-radius-sm);
  color:var(--fs-text-muted);
  font-size:16px;
  cursor:pointer;
  transition:background var(--fs-transition),color var(--fs-transition);
  flex-shrink:0;
}
.fs-modal-close:hover{background:var(--fs-bg-app);color:var(--fs-text-primary)}

/* Cuerpo del modal */
.fs-modal-body{
  padding:20px 24px;
  overflow-y:auto;
  flex:1;
}
.fs-modal-body::-webkit-scrollbar{width:4px}
.fs-modal-body::-webkit-scrollbar-thumb{background:var(--fs-border);border-radius:2px}

/* Footer del modal */
.fs-modal-footer{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:10px;
  padding:16px 24px;
  border-top:1px solid var(--fs-border);
  background:#FAFAFA;
  flex-shrink:0;
}

/* Grid de 2 columnas en el formulario del modal */
.fs-form-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  column-gap:16px;
}
.fs-form-grid .fs-field{margin-bottom:14px}
.fs-field-full{grid-column:1 / -1}

/* Confirmación de borrado */
.fs-confirm-icon{
  font-size:32px;
  text-align:center;
  margin-bottom:12px;
  color:var(--fs-alta);
}
.fs-confirm-msg{
  font-size:var(--fs-text-base);
  color:var(--fs-text-secondary);
  line-height:1.6;
  text-align:center;
}

/* ── Switch (checkbox) ───────────────────────────────────────────────────── */
.fs-switch{position:relative;display:inline-block;width:42px;height:24px}
.fs-switch input{opacity:0;width:0;height:0}
.fs-switch-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background:var(--fs-border);border-radius:24px;transition:.15s}
.fs-switch-slider:before{position:absolute;content:"";height:18px;width:18px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:.15s}
.fs-switch input:checked + .fs-switch-slider{background:var(--fs-primary)}
.fs-switch input:checked + .fs-switch-slider:before{transform:translateX(18px)}

/* ── Responsive ──────────────────────────────────────────────────────────── */
@media(max-width:768px){
  #fs-sidebar{display:none}
  .fs-panels-grid{grid-template-columns:1fr}
  .fs-kpi-grid{grid-template-columns:1fr 1fr}
  .fs-login-card{padding:28px 20px}
  .fs-page-header-row{flex-direction:column;align-items:flex-start}
  .fs-page-header-row .fs-btn-primary-sm{align-self:flex-start}
  .fs-form-grid{grid-template-columns:1fr}
  .fs-cli-toolbar{padding:12px 16px}
  .fs-cli-search-wrap{max-width:100%}
  .fs-modal-body{padding:16px}
  .fs-modal-header,.fs-modal-footer{padding-left:16px;padding-right:16px}
}
@media(max-width:480px){
  .fs-kpi-grid{grid-template-columns:1fr}
  .fs-cli-toolbar{flex-direction:column;align-items:stretch}
  .fs-cli-select{max-width:100%}
}

/* ── Calendario ──────────────────────────────────────────────────────────── */
.fs-btn-ghost-active{background:var(--fs-primary);color:#fff;border-color:var(--fs-primary)}

.fs-cal-cab{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--fs-border);flex-wrap:wrap;gap:8px}
.fs-cal-cab-nav{display:flex;align-items:center;gap:8px}
.fs-cal-cab-titulo{font-weight:700;font-size:14px;min-width:140px;text-align:center;text-transform:capitalize}

.fs-cal-grid{display:grid;grid-template-columns:repeat(7,1fr)}
.fs-cal-grid-head{border-bottom:1px solid var(--fs-border)}
.fs-cal-head-cell{padding:8px 10px;font-size:12px;font-weight:700;color:var(--fs-text-muted);text-align:center}

.fs-cal-cell{min-height:96px;border:1px solid var(--fs-border);border-width:0 1px 1px 0;padding:6px;cursor:pointer;transition:background .1s}
.fs-cal-cell:hover{background:#F9FAFB}
.fs-cal-cell-off{background:#FAFAFB;cursor:default}
.fs-cal-cell-off:hover{background:#FAFAFB}
.fs-cal-cell-hoy{background:#EFF6FF}
.fs-cal-cell-num{font-size:12px;font-weight:700;color:var(--fs-text-secondary);margin-bottom:4px}

.fs-cal-grid-semana .fs-cal-cell-semana{min-height:160px}

.fs-cal-chip{font-size:11px;line-height:1.4;padding:2px 6px;margin-bottom:3px;border-radius:6px;background:var(--fs-primary-soft,#EEF2FF);color:var(--fs-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.fs-cal-chip:hover{opacity:.8}
.fs-cal-chip-hora{font-weight:700}
.fs-cal-chip-mas{font-size:11px;color:var(--fs-text-muted);padding:2px 6px}
.fs-cal-chip-vacio{font-size:12px;color:var(--fs-text-muted);text-align:center;padding-top:20px}

@media(max-width:768px){
  .fs-cal-grid{grid-template-columns:1fr}
  .fs-cal-grid-head{display:none}
  .fs-cal-cell{min-height:auto}
  .fs-cal-cell-off{display:none}
}

/* ════════════════════════════════════════════════════════════════════════════
   MÓDULO MARÍA VIRTUAL (PR1 — base estructural)
   ════════════════════════════════════════════════════════════════════════════ */

/* Utilidad de espaciado entre paneles apilados */
.fs-mv-block{margin-bottom:16px}

/* Icono dentro de botones (p. ej. "Nueva conversación") */
.fs-mv-btn-icon{width:14px;height:14px;vertical-align:middle;margin-right:6px;margin-top:-2px}

/* Texto secundario pequeño reutilizable */
.fs-mv-hint{font-size:var(--fs-text-xs);color:var(--fs-text-muted);margin-top:4px}

/* Layout de 3 columnas en escritorio: lista, chat y contexto */
.fs-mv-layout{display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr) minmax(260px,340px);gap:16px;align-items:start}
.fs-mv-col{min-width:0}

/* Barra de navegación de tablet/móvil (oculta en escritorio) */
.fs-mv-nav-movil{display:none;gap:8px;margin-bottom:12px}
.fs-mv-btn-volver,.fs-mv-btn-contexto{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  padding:7px 12px;
  border:1px solid var(--fs-border);
  border-radius:var(--fs-radius);
  background:var(--fs-bg-surface);
  color:var(--fs-text-secondary);
  font-family:var(--fs-font);
  font-size:var(--fs-text-sm);
  font-weight:600;
  cursor:pointer;
  transition:all var(--fs-transition);
}
.fs-mv-btn-volver:hover,.fs-mv-btn-contexto:hover{background:var(--fs-bg-app);color:var(--fs-text-primary)}
.fs-mv-btn-volver:focus-visible,.fs-mv-btn-contexto:focus-visible{outline:2px solid var(--fs-accent);outline-offset:2px}
.fs-mv-chat-nombre:focus-visible{outline:2px solid var(--fs-accent);outline-offset:2px}
#fs-mv-acc-err:focus-visible{outline:2px solid var(--fs-accent);outline-offset:2px}

/* Tablet: lista + chat visibles; contexto oculto salvo con el botón */
@media (max-width:1024px){
  .fs-mv-nav-movil{display:flex}
  .fs-mv-layout{display:flex;align-items:stretch}
  .fs-mv-col-lista,.fs-mv-col-chat{flex:1 1 0}
  .fs-mv-col-contexto{display:none;flex:1 1 0}
  .fs-mv-btn-volver{display:none}
  .fs-mv-layout[data-panel-movil="lista"] .fs-mv-btn-contexto{display:none}

  .fs-mv-layout[data-panel-movil="contexto"] .fs-mv-col-lista{display:none}
  .fs-mv-layout[data-panel-movil="contexto"] .fs-mv-col-chat{display:none}
  .fs-mv-layout[data-panel-movil="contexto"] .fs-mv-col-contexto{display:flex;flex-direction:column}
}

/* Móvil: una sola sección visible cada vez */
@media (max-width:768px){
  .fs-mv-layout{flex-direction:column}
  .fs-mv-col-lista,.fs-mv-col-chat,.fs-mv-col-contexto{display:none;width:100%}

  .fs-mv-layout[data-panel-movil="lista"] .fs-mv-col-lista{display:flex;flex-direction:column}
  .fs-mv-layout[data-panel-movil="chat"] .fs-mv-col-chat{display:flex;flex-direction:column}
  .fs-mv-layout[data-panel-movil="contexto"] .fs-mv-col-contexto{display:flex;flex-direction:column}

  .fs-mv-layout[data-panel-movil="chat"] .fs-mv-btn-volver,
  .fs-mv-layout[data-panel-movil="contexto"] .fs-mv-btn-volver{display:inline-flex}
}

/* Etiqueta y valor de un campo del detalle (estado/prioridad/responsable) */
.fs-mv-campo-label{font-size:var(--fs-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--fs-text-muted);margin-bottom:4px}
.fs-mv-campo-valor{font-size:var(--fs-text-sm)}

/* ── Lista de conversaciones ─────────────────────────────────────────────── */
.fs-mv-item{display:flex;align-items:flex-start;gap:10px;padding:14px 16px;border-bottom:1px solid var(--fs-border);cursor:pointer;border-left:3px solid transparent}
.fs-mv-item:hover:not(.is-active){background:var(--fs-bg-app)}
.fs-mv-item:focus-visible{outline:2px solid var(--fs-accent);outline-offset:-2px}
.fs-mv-item.is-active{background:var(--fs-accent-light);border-left-color:var(--fs-accent)}
.fs-mv-item-avatar{width:36px;height:36px;border-radius:50%;background:var(--fs-primary-light);color:var(--fs-primary);display:flex;align-items:center;justify-content:center;font-size:var(--fs-text-xs);font-weight:700;flex-shrink:0}
.fs-mv-item-info{min-width:0;flex:1}
.fs-mv-item-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.fs-mv-item-nombre{flex:1;min-width:0;font-weight:600;font-size:var(--fs-text-sm);color:var(--fs-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fs-mv-item-hora{flex-shrink:0;font-size:var(--fs-text-xs);color:var(--fs-text-muted)}
.fs-mv-item-sub{font-size:var(--fs-text-xs);color:var(--fs-text-muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fs-mv-item-dot{width:9px;height:9px;border-radius:50%;background:var(--fs-critica);flex-shrink:0;margin-top:3px}
.fs-mv-item-meta{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap;align-items:center}
.fs-mv-item-resp{font-size:var(--fs-text-xs);color:var(--fs-text-muted)}

/* ── Cabecera de la conversación seleccionada ────────────────────────────── */
.fs-mv-chat-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;padding-bottom:14px;border-bottom:1px solid var(--fs-border)}
.fs-mv-chat-nombre{font-size:var(--fs-text-md);font-weight:700;color:var(--fs-text-primary)}
.fs-mv-chat-telefono{font-size:var(--fs-text-sm);color:var(--fs-text-secondary);margin-top:2px}
.fs-mv-chat-asunto{font-size:var(--fs-text-xs);color:var(--fs-text-muted);margin-top:2px}
.fs-mv-chat-acciones{display:flex;gap:8px;flex-wrap:wrap}

/* ── Campos estado / prioridad / responsable ─────────────────────────────── */
.fs-mv-fields-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-top:16px}

/* ── Banner de derivación ─────────────────────────────────────────────────── */
.fs-mv-derivacion{margin-top:12px;padding:10px 12px;background:var(--fs-accent-light);border-radius:var(--fs-radius);font-size:var(--fs-text-sm)}
.fs-mv-derivacion-motivo{color:var(--fs-text-secondary)}

/* ── Mensajes (burbujas) ──────────────────────────────────────────────────── */
.fs-mv-msgs{display:flex;flex-direction:column;gap:8px;max-height:440px;overflow-y:auto;padding:4px 2px}
.fs-mv-msg{max-width:80%}
.fs-mv-msg-in{align-self:flex-start}
.fs-mv-msg-out{align-self:flex-end}
.fs-mv-msg-nota{align-self:center}
.fs-mv-msg-sistema{align-self:center}
.fs-mv-msg-bubble{border-radius:var(--fs-radius);padding:8px 12px}
.fs-mv-msg-bubble-in{background:var(--fs-bg-app);border:1px solid var(--fs-border)}
.fs-mv-msg-bubble-out{background:var(--fs-accent-light);border:1px solid var(--fs-accent)}
.fs-mv-msg-bubble-nota{background:#FFFBEB;border:1px solid #FDE68A}
.fs-mv-msg-bubble-sistema{background:var(--fs-bg-surface);border:1px dashed var(--fs-text-muted)}
.fs-mv-msg-bubble-sistema .fs-mv-msg-texto{color:var(--fs-text-muted);font-style:italic}
.fs-mv-msg-autor{font-size:var(--fs-text-xs);font-weight:700;color:var(--fs-text-secondary);margin-bottom:3px}
.fs-mv-msg-texto{font-size:var(--fs-text-sm);color:var(--fs-text-primary);white-space:pre-wrap;word-break:break-word}
.fs-mv-msg-hora{font-size:10px;color:var(--fs-text-muted);margin-top:4px;text-align:right}

/* ── Composer ─────────────────────────────────────────────────────────────── */
.fs-mv-composer{margin-top:14px;border-top:1px solid var(--fs-border);padding-top:14px}
.fs-mv-composer-input{resize:vertical;min-height:60px}
.fs-mv-composer-acciones{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}

/* ── Avisos vinculados (panel de contexto) ────────────────────────────────── */
.fs-mv-avisos-list{display:flex;flex-direction:column;gap:8px}
.fs-mv-aviso{border:1px solid var(--fs-border);border-radius:var(--fs-radius);padding:10px 12px}
.fs-mv-aviso-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start;flex-wrap:wrap}
.fs-mv-aviso-titulo{font-weight:600;font-size:var(--fs-text-sm);color:var(--fs-text-primary)}
.fs-mv-aviso-badges{display:flex;gap:6px}
.fs-mv-aviso-msg{font-size:var(--fs-text-sm);color:var(--fs-text-secondary);margin-top:6px}
.fs-mv-aviso-fecha{font-size:var(--fs-text-xs);color:var(--fs-text-muted);margin-top:6px}

/* ── Solicitudes de clientes (FASE26_2) ───────────────────────────────────── */
.fs-sol-chips{display:flex;flex-wrap:wrap;gap:8px;padding:14px 16px 0}
.fs-sol-chip{
  border:1px solid var(--fs-border);background:var(--fs-bg-surface);color:var(--fs-text-secondary);
  border-radius:999px;padding:6px 14px;font-size:var(--fs-text-xs);font-weight:600;cursor:pointer;
  transition:all var(--fs-transition);white-space:nowrap
}
.fs-sol-chip:hover{border-color:var(--fs-primary)}
.fs-sol-chip.active{background:var(--fs-primary);border-color:var(--fs-primary);color:var(--fs-text-white)}

.fs-sol-cabecera{display:flex;gap:8px;flex-wrap:wrap}
.fs-sol-seccion-titulo{font-size:var(--fs-text-sm);font-weight:700;color:var(--fs-text-secondary);text-transform:uppercase;letter-spacing:.6px;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--fs-border)}
.fs-sol-seccion-subtitulo{font-size:var(--fs-text-xs);font-weight:700;color:var(--fs-text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}

.fs-sol-kv-group{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px 20px}
.fs-sol-kv-nested{grid-column:1 / -1;padding-left:16px;border-left:2px solid var(--fs-border);margin:2px 0 8px}
.fs-sol-kv{display:flex;flex-direction:column;gap:2px}
.fs-sol-kv-k{font-size:var(--fs-text-xs);color:var(--fs-text-muted);text-transform:uppercase;letter-spacing:.4px}
.fs-sol-kv-v{font-size:var(--fs-text-sm);color:var(--fs-text-primary)}

.fs-sol-descripcion{margin-top:14px;padding:12px 14px;background:var(--fs-bg-app);border-radius:var(--fs-radius);font-size:var(--fs-text-sm);color:var(--fs-text-secondary);white-space:pre-wrap}
.fs-sol-datos-extra{margin-top:14px;padding-top:14px;border-top:1px solid var(--fs-border)}
.fs-sol-total{margin-top:10px;font-size:var(--fs-text-sm);color:var(--fs-text-secondary)}
.fs-sol-acciones-rapidas{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.fs-sol-preview-cliente{margin-top:10px;font-size:var(--fs-text-sm);color:var(--fs-text-secondary)}

.fs-sol-vinculo{border:1px solid var(--fs-border);border-radius:var(--fs-radius);padding:10px 12px}

.fs-sol-timeline-item{display:flex;gap:14px;padding:8px 0;border-bottom:1px solid var(--fs-border);font-size:var(--fs-text-sm)}
.fs-sol-timeline-item:last-child{border-bottom:none}
.fs-sol-timeline-fecha{flex-shrink:0;width:130px;color:var(--fs-text-muted);font-size:var(--fs-text-xs)}

@media (max-width:640px){
  .fs-sol-kv-group{grid-template-columns:1fr}
  .fs-sol-timeline-item{flex-direction:column;gap:2px}
  .fs-sol-timeline-fecha{width:auto}
}
.fs-mv-aviso-acciones{display:flex;gap:8px;margin-top:8px}

/* ── Cumplimientos: matriz por periodo (FASE30, Bloque 3) ─────────────────── */
.fs-cum-table td{vertical-align:middle}
.fs-cum-td-expandir{width:28px}
.fs-cum-chevron-btn{background:none;border:none;cursor:pointer;color:var(--fs-text-muted);font-size:12px;padding:4px;transition:transform var(--fs-transition)}
.fs-cum-chevron-btn.abierto{transform:rotate(90deg)}
.fs-cum-fila-cliente{background:var(--fs-bg-surface)}
.fs-cum-fila-cliente.fs-cum-atencion{background:rgba(220,38,38,.05)}
.fs-cum-fila-modelo td{background:var(--fs-bg-app);font-size:var(--fs-text-sm)}
.fs-cum-hito-celda{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.fs-cum-hito-vacio{color:var(--fs-text-muted);font-size:var(--fs-text-xs)}
.fs-cum-badge-click{border:none;cursor:pointer;font:inherit}
.fs-cum-badge-click:hover{filter:brightness(0.92)}
.fs-cum-mini{border:1px solid var(--fs-border);background:var(--fs-bg-surface);color:var(--fs-text-muted);border-radius:4px;font-size:10px;padding:2px 5px;cursor:pointer;line-height:1.4}
.fs-cum-mini:hover{border-color:var(--fs-text-muted);color:var(--fs-text-secondary)}
.fs-cum-avance-bar{margin-top:4px;height:4px;width:80px;background:var(--fs-border);border-radius:2px;overflow:hidden}
.fs-cum-avance-bar span{display:block;height:100%;background:var(--fs-success)}
.fs-cum-item-fila{display:flex;align-items:flex-start;gap:14px;padding:10px 0;border-bottom:1px solid var(--fs-border)}
.fs-cum-item-fila:last-child{border-bottom:none}
.fs-cum-item-paso{flex:1;font-size:var(--fs-text-sm);font-weight:500}
.fs-cum-item-obs{width:100%;margin-top:4px;font-size:var(--fs-text-xs);color:var(--fs-text-muted)}

@media (max-width:768px){
  .fs-cum-table{font-size:12px}
  .fs-cum-hito-celda{flex-direction:column;align-items:flex-start}
}

/* ── Cumplimientos: panel de conversación / diario de trabajo (FASE30, Bloque 3) ── */
.fs-cum-com-btn{display:inline-flex;align-items:center;gap:4px}
.fs-cum-chat-modal{max-width:520px;height:min(640px,90vh)}
.fs-cum-chat-aviso{padding:10px 24px;font-size:var(--fs-text-xs);color:var(--fs-text-muted);border-bottom:1px solid var(--fs-border);flex-shrink:0}
.fs-cum-chat-hilo{display:flex;flex-direction:column;gap:12px;background:var(--fs-bg-app)}
.fs-cum-chat-msg{background:var(--fs-bg-surface);border:1px solid var(--fs-border);border-radius:var(--fs-radius);padding:10px 12px}
.fs-cum-chat-msg-cab{display:flex;align-items:center;gap:8px;margin-bottom:4px;flex-wrap:wrap}
.fs-cum-chat-msg-autor{font-size:var(--fs-text-sm);font-weight:600;color:var(--fs-text-primary)}
.fs-cum-chat-msg-fecha{font-size:var(--fs-text-xs);color:var(--fs-text-muted);margin-right:auto}
.fs-cum-chat-msg-texto{font-size:var(--fs-text-sm);color:var(--fs-text-secondary);white-space:pre-wrap;word-break:break-word}
.fs-cum-chat-footer{flex-shrink:0;border-top:1px solid var(--fs-border);background:#FAFAFA;padding:12px 24px}
.fs-cum-chat-form{display:flex;gap:8px;align-items:center}
.fs-cum-chat-form #fs-cum-chat-tipo{flex:0 0 130px}
.fs-cum-chat-form #fs-cum-chat-texto{flex:1}
@media (max-width:768px){
  .fs-cum-chat-form{flex-wrap:wrap}
  .fs-cum-chat-form #fs-cum-chat-tipo{flex:1 1 100%}
}

/* ── Componente común "Comunicar al cliente" (FASE30.6) ────────────────── */
.fs-com-aviso{padding:10px 24px;font-size:var(--fs-text-xs);color:var(--fs-text-muted);border-bottom:1px solid var(--fs-border);flex-shrink:0}

/* ── Matriz de Obligaciones (FASE30, Bloque C) ───────────────────────────── */
.fs-matriz-tabs-modulo{display:flex;gap:4px;margin-bottom:16px;border-bottom:1px solid var(--fs-border)}
.fs-matriz-tab-modulo{
  padding:10px 18px;background:none;border:none;border-bottom:2px solid transparent;
  font-family:var(--fs-font);font-size:var(--fs-text-sm);font-weight:600;
  color:var(--fs-text-secondary);cursor:pointer;transition:all var(--fs-transition);
}
.fs-matriz-tab-modulo:hover{color:var(--fs-text-primary)}
.fs-matriz-tab-modulo.activo{color:var(--fs-primary);border-bottom-color:var(--fs-primary)}

.fs-matriz-tabs-area{display:flex;gap:6px;padding:14px 24px 0}
.fs-matriz-tab-area{
  padding:7px 16px;background:var(--fs-bg-app);border:1px solid var(--fs-border);border-radius:999px;
  font-family:var(--fs-font);font-size:var(--fs-text-sm);font-weight:600;
  color:var(--fs-text-secondary);cursor:pointer;transition:all var(--fs-transition);
}
.fs-matriz-tab-area:hover{color:var(--fs-text-primary)}
.fs-matriz-tab-area.activo{background:var(--fs-primary);border-color:var(--fs-primary);color:#fff}

.fs-matriz-columnas-wrap{position:relative}
.fs-matriz-columnas-popover{
  position:absolute;top:calc(100% + 6px);right:0;z-index:20;
  background:var(--fs-bg-surface);border:1px solid var(--fs-border);border-radius:var(--fs-radius);
  box-shadow:0 8px 24px rgba(0,0,0,.12);padding:10px;min-width:260px;max-height:320px;overflow-y:auto;
}
.fs-matriz-columna-item{display:flex;align-items:center;gap:8px;padding:6px 4px;font-size:var(--fs-text-sm);cursor:pointer}
.fs-matriz-columna-item:hover{background:var(--fs-bg-app)}

.fs-matriz-table{table-layout:fixed}
.fs-matriz-th-cliente,
.fs-matriz-table td.fs-matriz-th-cliente{
  position:sticky;left:0;background:var(--fs-bg-surface);z-index:5;
  min-width:200px;max-width:240px;text-align:left;border-right:1px solid var(--fs-border);
}
.fs-matriz-th-col{min-width:64px;max-width:80px;text-align:center;font-size:var(--fs-text-xs)}
.fs-matriz-celda{text-align:center;cursor:default}
.fs-matriz-celda-click{cursor:pointer}
.fs-matriz-celda-click:hover{background:var(--fs-bg-app)}
.fs-matriz-punto{display:inline-block;width:10px;height:10px;border-radius:50%}
.fs-matriz-punto-activa{background:var(--fs-baja,#15803D)}
.fs-matriz-punto-vacia{background:var(--fs-border)}
.fs-matriz-btn-ficha{
  margin-left:6px;padding:2px 8px;background:none;border:1px solid var(--fs-border);border-radius:999px;
  font-size:10px;color:var(--fs-text-muted);cursor:pointer;vertical-align:middle;
}
.fs-matriz-btn-ficha:hover{color:var(--fs-text-primary);border-color:#9CA3AF}

.fs-matriz-modal-contexto{
  background:var(--fs-bg-app);border-radius:var(--fs-radius);padding:10px 14px;margin-bottom:14px;
  font-size:var(--fs-text-sm);color:var(--fs-text-secondary);display:flex;flex-direction:column;gap:2px;
}
.fs-matriz-modal-contexto strong{color:var(--fs-text-primary)}

/* ── Producción (FASE30, Bloque E.1) ─────────────────────────────────────── */
.fs-prod-layout{display:flex;gap:16px;align-items:flex-start}
.fs-prod-arbol{
  flex:0 0 260px;background:var(--fs-bg-surface);border:1px solid var(--fs-border);
  border-radius:var(--fs-radius);padding:12px;position:sticky;top:16px;
}
.fs-prod-areas{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap}
.fs-prod-area-btn{
  padding:6px 14px;background:var(--fs-bg-app);border:1px solid var(--fs-border);border-radius:999px;
  font-family:var(--fs-font);font-size:var(--fs-text-xs);font-weight:600;
  color:var(--fs-text-secondary);cursor:pointer;transition:all var(--fs-transition);
}
.fs-prod-area-btn.activo{background:var(--fs-primary);border-color:var(--fs-primary);color:#fff}
.fs-prod-obligaciones{display:flex;flex-direction:column;gap:2px}
.fs-prod-obligacion-btn{
  text-align:left;padding:8px 10px;background:none;border:none;border-radius:var(--fs-radius);
  font-family:var(--fs-font);font-size:var(--fs-text-sm);color:var(--fs-text-secondary);cursor:pointer;
}
.fs-prod-obligacion-btn:hover{background:var(--fs-bg-app)}
.fs-prod-obligacion-btn.activo{background:var(--fs-primary);color:#fff;font-weight:600}

.fs-prod-contenido{flex:1;min-width:0}
.fs-prod-cabecera{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:12px}
.fs-prod-titulo{font-size:var(--fs-text-lg);font-weight:700;color:var(--fs-text-primary)}
.fs-prod-controles{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.fs-prod-check-todos{display:flex;align-items:center;gap:6px;font-size:var(--fs-text-xs);color:var(--fs-text-muted);white-space:nowrap}

.fs-prod-resumen-card{
  display:flex;flex-wrap:wrap;gap:16px;background:var(--fs-bg-app);border-radius:var(--fs-radius);
  padding:10px 16px;margin-bottom:4px;font-size:var(--fs-text-sm);color:var(--fs-text-secondary);
}
.fs-prod-resumen-card strong{color:var(--fs-text-primary)}
.fs-prod-resumen-nota{font-size:11px;color:var(--fs-text-muted);margin-bottom:12px}
.fs-prod-alcance-nota{font-size:11px;color:var(--fs-text-muted);margin-bottom:6px}

.fs-prod-filtros-chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.fs-prod-chip{
  padding:5px 12px;background:var(--fs-bg-surface);border:1px solid var(--fs-border);border-radius:999px;
  font-family:var(--fs-font);font-size:11px;font-weight:600;color:var(--fs-text-secondary);cursor:pointer;
}
.fs-prod-chip.activo{background:var(--fs-primary);border-color:var(--fs-primary);color:#fff}

.fs-prod-celda-hito{text-align:center}
.fs-prod-hito-na{color:var(--fs-border)}

@media (max-width:900px){
  .fs-prod-layout{flex-direction:column}
  .fs-prod-arbol{flex:1 1 auto;position:static;width:100%}
}

/* ── Producción (FASE30, Bloque E.2 — generación supervisada) ───────────── */
.fs-prod-generar-bar{
  display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:10px 14px;margin-bottom:12px;background:var(--fs-bg-surface);border:1px solid var(--fs-border);border-radius:var(--fs-radius);
  font-size:var(--fs-text-sm);color:var(--fs-text-secondary);
}
.fs-prod-motivos{margin:4px 0 0;padding-left:18px;font-size:var(--fs-text-sm);color:var(--fs-error)}
.fs-prod-motivos li{margin-bottom:4px}
.fs-prod-aviso-festivos{background:#FFF7ED;color:#9A3412;border-color:#FED7AA}

/* ── Producción (FASE30, Bloque E.3 — acciones sobre cumplimientos) ─────── */
.fs-cum-chat-form #fs-prod-diario-tipo{flex:0 0 130px}
.fs-cum-chat-form #fs-prod-diario-texto{flex:1}
@media (max-width:480px){
  .fs-cum-chat-form #fs-prod-diario-tipo{flex:1 1 100%}
}

/* ── Trámites (FASE31, Bloque 4.1 — F0: solo el andamiaje del layout) ─────
   Únicamente estructura (barra de acciones + lista izquierda + panel
   derecho). El contenido de cada región se apoya en clases ya existentes
   (.fs-page-header-row, .fs-panel/.fs-panel-flush, .fs-empty, .fs-btn-*) —
   nada de esto crea un sistema de estilos nuevo, solo la rejilla que
   faltaba. La lista usa .fs-panel-flush (ya existente) para quedar sin
   padding propio, igual que en Clientes. */
.fs-tra-toolbar{
  display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:10px 14px;margin-bottom:12px;
  background:var(--fs-bg-surface);border:1px solid var(--fs-border);border-radius:var(--fs-radius);
}
.fs-tra-body{display:flex;gap:16px;align-items:flex-start;min-height:0}
.fs-tra-lista{flex:0 0 360px;min-width:0}
.fs-tra-panel{flex:1;min-width:0}

@media (max-width:900px){
  .fs-tra-body{flex-direction:column}
  .fs-tra-lista{flex:1 1 auto;width:100%}
}

/* ── Trámites (F1 — listado) ────────────────────────────────────────────
   Única regla nueva de verdad: resaltar la fila seleccionada cuya ficha
   se muestra en el panel derecho. No existe en ningún otro módulo porque
   ninguna otra vista tiene un panel de detalle persistente ligado al clic
   de una fila — se reutiliza el mismo tono ya usado en hover
   (--fs-accent-light, ver .fs-btn-tbl:hover) en vez de definir un color
   nuevo. */
.fs-tra-fila{cursor:pointer}
.fs-tra-fila-activa td{background:var(--fs-accent-light)!important}

/* ── Trámites (F3 — configuración: catálogo y textos legales) ───────────
   Modal ancho (fs-modal-lg, mismo patrón que fs-modal-sm ya existente) con
   dos columnas: lista de tipos a la izquierda, ficha + versiones a la
   derecha. Las filas de tipo reutilizan .fs-tra-fila/.fs-tra-fila-activa
   ya definidas arriba — ninguna regla de selección nueva. */
.fs-modal-lg{max-width:960px}
.fs-tra-config-body{display:flex;gap:16px;min-height:0}
.fs-tra-config-tipos{flex:0 0 260px;min-width:0;overflow-y:auto;max-height:60vh}
.fs-tra-config-textos{flex:1;min-width:0;overflow-y:auto;max-height:60vh}

@media (max-width:900px){
  .fs-tra-config-body{flex-direction:column}
  .fs-tra-config-tipos{flex:1 1 auto;width:100%;max-height:220px}
}

/* ── Trámites (F4 — detalle) ──────────────────────────────────────────────
   Rejilla de campos info/estado, mismo patrón grid ya usado en fs-form-grid
   (2 columnas, colapsa a 1 en móvil) pero para texto de solo lectura en vez
   de inputs — por eso es una regla separada, no una reutilización directa. */
.fs-tra-det-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media (max-width:700px){
  .fs-tra-det-grid{grid-template-columns:1fr}
}

/* ── Trámites (F7 — visor PDF y posiciones) ──────────────────────────────
   El <canvas> lo pinta pdf.js; las posiciones son divs absolutos
   superpuestos, calculados siempre desde el rectángulo real en puntos PDF
   vía viewport.transform (Util.axialAlignedBoundingBox) — nunca se guarda
   ni se razona en píxeles de pantalla. El color/etiqueta de cada recuadro
   se fija por JS (style.borderColor/color/background), no aquí, porque
   depende del participante de cada posición. */
.fs-tra-visor-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 0 6px}
.fs-tra-visor-canvas-scroll{overflow:auto;max-height:70vh;background:#525659;border-radius:var(--fs-radius);padding:16px}
.fs-tra-visor-canvas-wrap{position:relative;display:inline-block;line-height:0}
.fs-tra-visor-canvas-wrap canvas{display:block;background:#fff;box-shadow:var(--fs-shadow)}
.fs-tra-pdf-overlay{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}
.fs-tra-pdf-overlay.fs-tra-pdf-overlay-colocando{pointer-events:auto;cursor:crosshair}
.fs-tra-pos-box{position:absolute;box-sizing:border-box;border:2px dashed var(--fs-accent);background:rgba(37,99,235,.10);pointer-events:auto;border-radius:2px}
.fs-tra-pos-box.fs-tra-pos-box-editable{cursor:move}
.fs-tra-pos-box-label{position:absolute;top:-20px;left:-2px;white-space:nowrap;font-size:10px;font-weight:600;color:#fff;padding:1px 6px;border-radius:3px;pointer-events:none}
.fs-tra-pos-box-handle{position:absolute;right:-5px;bottom:-5px;width:10px;height:10px;border-radius:50%;background:#fff;border:2px solid currentColor;cursor:nwse-resize;pointer-events:auto}
.fs-tra-pos-draft{position:absolute;box-sizing:border-box;border:2px dashed var(--fs-text-muted);background:rgba(0,0,0,.06);pointer-events:none}
.fs-tra-visor-leyenda{display:flex;gap:12px;flex-wrap:wrap;margin-top:10px;font-size:11px;color:var(--fs-text-secondary)}
.fs-tra-visor-leyenda-item{display:flex;align-items:center;gap:5px}
.fs-tra-visor-leyenda-swatch{width:10px;height:10px;border-radius:2px;flex-shrink:0}

/* ── Trámites (F9 — firma presencial, modo kiosco) ───────────────────────
   Capa fija por encima de toda la aplicación (sidebar/topbar incluidos,
   que se ocultan por JS al abrir) — z-index por encima incluso de los
   modales (1000) porque el kiosco sustituye a toda la interfaz de gestión
   mientras está abierto, nunca convive con un modal encima. */
.fs-tra-kiosco{
  position:fixed;inset:0;z-index:2000;
  background:var(--fs-bg-app);
  display:flex;flex-direction:column;
}
.fs-tra-kiosco-top{
  display:flex;align-items:center;justify-content:space-between;flex-shrink:0;
  padding:12px 20px;background:var(--fs-bg-surface);border-bottom:1px solid var(--fs-border);
}
.fs-tra-kiosco-titulo{font-weight:700;color:var(--fs-text-primary);font-size:var(--fs-text-md)}
.fs-tra-kiosco-body{flex:1;overflow-y:auto;padding:20px}
.fs-tra-kiosco-grid{display:flex;gap:20px;align-items:flex-start;max-width:1400px;margin:0 auto}
.fs-tra-kiosco-pdf{flex:1 1 62%;min-width:0}
.fs-tra-kiosco-panel{flex:1 1 38%;min-width:320px;max-width:460px;background:var(--fs-bg-surface);border:1px solid var(--fs-border);border-radius:var(--fs-radius);padding:18px}
@media (max-width:960px){
  .fs-tra-kiosco-grid{flex-direction:column}
  .fs-tra-kiosco-panel{max-width:none;width:100%}
}
.fs-tra-texto-legal{
  max-height:180px;overflow-y:auto;font-size:var(--fs-text-sm);color:var(--fs-text-secondary);line-height:1.6;
  background:var(--fs-bg-app);border:1px solid var(--fs-border);border-radius:var(--fs-radius-sm);padding:10px 12px;
}
.fs-tra-firma-canvas-wrap{border:1px dashed var(--fs-border);border-radius:var(--fs-radius-sm);background:#fff}
.fs-tra-firma-canvas-wrap canvas{display:block;width:100%;height:180px;touch-action:none;cursor:crosshair}
.fs-tra-firma-exito{max-width:480px;margin:40px auto;text-align:center}
.fs-tra-firma-exito-sello{
  width:64px;height:64px;border-radius:50%;background:var(--fs-success-bg);color:var(--fs-success);
  display:flex;align-items:center;justify-content:center;font-size:32px;margin:0 auto 16px;
}
.fs-tra-firma-exito-titulo{font-size:var(--fs-text-lg);font-weight:700;color:var(--fs-text-primary);margin-bottom:18px}
.fs-tra-firma-exito-datos{
  text-align:left;background:var(--fs-bg-surface);border:1px solid var(--fs-border);border-radius:var(--fs-radius);
  padding:16px 18px;display:flex;flex-direction:column;gap:8px;font-size:var(--fs-text-sm);color:var(--fs-text-secondary);
}
