:root{
  --vs-title:#181818;--vs-side:#252526;--vs-side-hover:#2a2d2e;--vs-side-active:#37373d;
  --vs-accent:#007acc;--vs-accent-dark:#0069b4;--vs-bg:#f3f3f3;--vs-panel:#ffffff;
  --vs-border:#d8d8d8;--vs-border-soft:#e8e8e8;--vs-text:#1f1f1f;--vs-muted:#6a6a6a;
  --vs-success:#16825d;--vs-warning:#9b6a00;--vs-danger:#c43b45;--vs-info:#356ca5;
}
*{box-sizing:border-box}html,body{height:100%}body{margin:0;background:var(--vs-bg);color:var(--vs-text);font-family:"Segoe UI",Tahoma,Arial,sans-serif;font-size:12px;line-height:1.35}.app-shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;width:218px;background:var(--vs-side);color:#ccc;display:flex;flex-direction:column;z-index:1040;border-right:1px solid #111}.brand{height:50px;display:flex;gap:9px;align-items:center;padding:7px 10px;background:#1f1f1f;border-bottom:1px solid #333}.brand-mark{width:28px;height:28px;display:grid;place-items:center;background:var(--vs-accent);color:#fff;font-weight:700;font-size:11px;border-radius:2px}.brand-copy{min-width:0}.brand strong,.brand small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.brand strong{font-size:12px;color:#f2f2f2;font-weight:600}.brand small{font-size:10px;color:#8d8d8d;margin-top:1px}.side-caption{height:26px;padding:8px 11px 5px;font-size:9px;letter-spacing:.08em;color:#9b9b9b;font-weight:700}.side-caption-inner{margin-top:8px;padding-left:8px}.side-nav{padding:0 5px 8px;flex:1;overflow:auto}.side-nav a{position:relative;display:flex;align-items:center;gap:8px;color:#c8c8c8;text-decoration:none;height:30px;padding:0 8px;border-radius:2px;margin:1px 0;font-weight:400;font-size:11.5px}.side-nav a:hover{background:var(--vs-side-hover);color:#fff}.side-nav a.active{background:var(--vs-side-active);color:#fff}.side-nav a.active:before{content:"";position:absolute;left:-5px;top:0;bottom:0;width:2px;background:var(--vs-accent)}.side-nav i{width:16px;text-align:center;font-size:13px;color:#bfbfbf}.sidebar-user{display:flex;align-items:center;gap:7px;height:48px;padding:7px 9px;background:#1f1f1f;border-top:1px solid #333}.avatar-sm{width:27px;height:27px;border-radius:2px;display:grid;place-items:center;background:#3a3d41;color:#fff;font-weight:700;font-size:11px}.sidebar-user-copy{min-width:0;flex:1}.sidebar-user strong,.sidebar-user small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-user strong{font-size:10.5px;color:#e7e7e7;font-weight:600}.sidebar-user small{font-size:9px;color:#8b8b8b}.sidebar-user>a{color:#aaa;padding:4px}.sidebar-user>a:hover{color:#fff}.main-area{margin-left:218px;min-height:100vh;padding-bottom:22px}.topbar{height:50px;background:#f8f8f8;border-bottom:1px solid var(--vs-border);padding:0 12px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:1020}.topbar-left,.topbar-actions{display:flex;align-items:center;gap:8px}.page-heading h1{font-size:13px;margin:0;font-weight:600;color:#202020}.page-heading span{display:block;margin-top:1px;color:#777;font-size:9.5px;max-width:680px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.date-chip{height:28px;display:flex;align-items:center;gap:5px;padding:0 8px;font-size:10.5px;color:#555;background:#fff;border:1px solid var(--vs-border);border-radius:2px}.icon-btn{width:28px;height:28px;border:1px solid var(--vs-border);background:#fff;color:#333;border-radius:2px}.content-wrap{padding:10px 12px 14px}.statusbar{position:fixed;left:218px;right:0;bottom:0;height:22px;background:var(--vs-accent);color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 9px;font-size:9.5px;z-index:1030}.statusbar>div,.statusbar-right{display:flex;align-items:center;gap:10px}.card-clean{background:var(--vs-panel);border:1px solid var(--vs-border);border-radius:3px;box-shadow:none}.stat-card{min-height:64px;padding:9px 10px;display:flex;align-items:center;gap:9px}.stat-icon{width:34px;height:34px;border-radius:2px;display:grid;place-items:center;background:#edf6fb;color:var(--vs-accent);font-size:15px;border:1px solid #d5e8f3}.stat-card strong{display:block;font-size:19px;line-height:1.05;font-weight:600}.stat-card span{font-size:9px;color:var(--vs-muted);font-weight:600;text-transform:uppercase;letter-spacing:.03em}.section-card{padding:10px}.section-title{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;padding-bottom:7px;border-bottom:1px solid var(--vs-border-soft)}.section-title h2{font-size:12px;margin:0;font-weight:600}.section-title p{margin:1px 0 0;color:var(--vs-muted);font-size:9.5px}.btn{border-radius:2px;font-weight:500;font-size:11px;min-height:30px;padding:.3rem .58rem;box-shadow:none!important}.btn-sm{font-size:10.5px;min-height:27px;padding:.22rem .48rem}.btn-primary{background:var(--vs-accent);border-color:var(--vs-accent)}.btn-primary:hover,.btn-primary:focus{background:var(--vs-accent-dark);border-color:var(--vs-accent-dark)}.btn-light{background:#f7f7f7;border-color:#cfcfcf}.btn-outline-primary{color:var(--vs-accent);border-color:#7bb9df}.btn-outline-success{color:var(--vs-success);border-color:#8fcab5}.form-label{font-size:10.5px;font-weight:600;color:#444;margin-bottom:3px}.form-control,.form-select,.input-group-text{border-color:#cfcfcf;border-radius:2px!important;min-height:30px;font-size:11.5px;padding:.28rem .48rem}.input-group-text{background:#f3f3f3;color:#666}.form-control:focus,.form-select:focus{box-shadow:0 0 0 1px var(--vs-accent);border-color:var(--vs-accent)}textarea.form-control{min-height:58px}.form-text,.text-muted,.small,small{font-size:9.5px!important}.table{font-size:10.8px;margin-bottom:0}.table>:not(caption)>*>*{padding:.36rem .45rem;border-color:#ececec}.table thead th{font-size:9.5px;text-transform:none;letter-spacing:0;color:#444;background:#f3f3f3;border-bottom:1px solid #cecece;font-weight:600;white-space:nowrap}.table tbody tr:hover td{background:#f5f9fc}.table td{vertical-align:middle}.badge{border-radius:2px;font-size:9px;font-weight:600;padding:.25rem .38rem}.badge-soft-success{background:#eaf6f1;color:#116b4d;border:1px solid #cbe7dc}.badge-soft-warning{background:#fff7df;color:#7b5600;border:1px solid #efdfaa}.badge-soft-danger{background:#faecee;color:#a12d37;border:1px solid #efcdd1}.badge-soft-primary{background:#eaf3fa;color:#245d88;border:1px solid #cfe1ee}.person-cell{display:flex;align-items:center;gap:6px}.person-icon{width:27px;height:27px;border-radius:2px;background:#eaf3fa;color:#245d88;display:grid;place-items:center;font-weight:700;border:1px solid #cfe1ee}.empty-state{padding:20px;text-align:center;color:var(--vs-muted)}.visit-live{border-left:2px solid var(--vs-success)}.mini-list{display:flex;flex-direction:column}.mini-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 4px;border-bottom:1px solid #eee}.mini-row:last-child{border:0}.modal-content{border:1px solid #bdbdbd;border-radius:4px;box-shadow:0 12px 34px rgba(0,0,0,.24)}.modal-header{min-height:40px;padding:7px 10px;background:#f3f3f3}.modal-body{padding:10px}.modal-footer{padding:7px 10px;background:#fafafa}.modal-header,.modal-footer{border-color:#d8d8d8}.modal-title{font-size:12px;font-weight:600}.modal .btn-close{width:.7em;height:.7em;font-size:9px}.modal-dialog.modal-lg{max-width:720px}.quick-btn{background:#fff;border:1px solid var(--vs-border);border-radius:2px;padding:8px;text-decoration:none;color:var(--vs-text);display:flex;gap:8px;align-items:center;min-height:48px}.quick-btn:hover{border-color:#8abbd8;background:#f5f9fc;color:#0f5f93}.quick-btn i{font-size:15px;color:var(--vs-accent)}.filter-bar{display:flex;gap:6px;flex-wrap:wrap;align-items:end}.filter-bar .form-control,.filter-bar .form-select{max-width:190px}.alert{border-radius:2px;font-size:10.5px;padding:.48rem .65rem}.alert-soft{background:#eef6fb;border:1px solid #cde2ef;color:#315a75;border-radius:2px;padding:7px 8px;font-size:10px}.qr-box{width:168px;height:168px;border:1px dashed #bbb;border-radius:2px;display:grid;place-items:center;background:#fff;margin:auto}.login-page{min-height:100vh;background:#1e1e1e;display:grid;place-items:center;padding:18px}.login-card{width:100%;max-width:760px;background:#fff;border:1px solid #111;border-radius:4px;box-shadow:0 20px 60px rgba(0,0,0,.35);display:grid;grid-template-columns:.9fr 1.1fr;overflow:hidden}.login-art{background:#252526;color:#ddd;padding:28px;display:flex;flex-direction:column;justify-content:space-between;min-height:430px;border-right:1px solid #111}.login-art .big-icon{width:48px;height:48px;border-radius:2px;background:var(--vs-accent);display:grid;place-items:center;font-size:23px;color:#fff}.login-art h2{font-size:18px}.login-form{padding:34px}.login-form h1{font-size:20px;font-weight:600}.login-form p{color:var(--vs-muted)}.login-form .badge{background:var(--vs-accent)!important}.dt-container .dt-search{display:flex;align-items:center;gap:5px}.dt-container .dt-search input{height:28px!important;border:1px solid #cfcfcf!important;border-radius:2px!important;font-size:10.5px!important;padding:3px 6px!important}.dt-container .dt-length select{height:28px!important;border:1px solid #cfcfcf!important;border-radius:2px!important;font-size:10.5px!important}.dt-container .dt-info,.dt-container .dt-length,.dt-container .dt-search,.dt-container .dt-paging{font-size:9.5px!important;color:#666!important}.dt-container .dt-paging .dt-paging-button{padding:.2rem .42rem!important;font-size:9.5px!important;border-radius:2px!important}.compact-panel{border:1px solid var(--vs-border);background:#fafafa;padding:8px;border-radius:2px}.lookup-strip{display:grid;grid-template-columns:210px 1fr;gap:8px;align-items:end}.visitor-result{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:46px;padding:7px 8px;background:#f7fbfe;border:1px solid #cfe3ef;border-radius:2px}.visitor-result.hidden{display:none}.visitor-name{font-size:11.5px;font-weight:600}.visitor-meta{font-size:9.5px;color:#666;margin-top:2px}.step-label{font-size:9px;color:#777;font-weight:700;letter-spacing:.06em;text-transform:uppercase;margin-bottom:4px}.field-lock{opacity:.5;pointer-events:none}.relation-list{display:flex;flex-direction:column;gap:4px}.relation-item{display:flex;align-items:center;justify-content:space-between;padding:6px 7px;border:1px solid #e1e1e1;background:#fff;border-radius:2px}.relation-main{display:flex;align-items:center;gap:7px}.relation-main i{color:var(--vs-accent)}.relation-meta{font-size:9.5px;color:#666}.compact-note{font-size:9.5px;color:#666;line-height:1.35}.swal2-popup{font-size:12px!important;border-radius:4px!important}.swal2-title{font-size:17px!important}.swal2-confirm,.swal2-cancel{border-radius:2px!important;font-size:11px!important}.row.g-3{--bs-gutter-x:.65rem;--bs-gutter-y:.65rem}.row.g-2{--bs-gutter-x:.45rem;--bs-gutter-y:.45rem}
@media(max-width:991px){.sidebar{transform:translateX(-100%);transition:.18s}.sidebar.open{transform:none}.main-area{margin-left:0}.statusbar{left:0}.date-chip{display:none}.content-wrap{padding:8px}.topbar{padding:0 8px}.login-card{grid-template-columns:1fr}.login-art{display:none}.login-form{padding:28px 22px}.lookup-strip{grid-template-columns:1fr}.page-heading span{max-width:360px}}
@media(max-width:575px){.topbar-actions .btn{font-size:0;width:30px;padding:0}.topbar-actions .btn i{font-size:12px}.page-heading span{max-width:210px}.content-wrap{padding:7px}.modal-dialog{margin:.5rem}.stat-card{min-height:58px}.statusbar-right span:first-child{display:none}}

/* ==========================================================
   PATCH UI AZUL COMPACTO v1.1
   Unifica encabezados de formularios, paneles, tablas y modales
   con el azul Visual Studio del sistema.
   ========================================================== */
:root{
  --ui-blue: var(--vs-accent, #007acc);
  --ui-blue-dark: var(--vs-accent-dark, #0069b4);
  --ui-blue-border: #005f9e;
  --ui-header-text: #ffffff;
}

/* Encabezado general de paneles/formularios */
.section-card > .section-title,
.card-header,
.form-header,
.panel-header,
.box-header{
  background:var(--ui-blue)!important;
  color:var(--ui-header-text)!important;
  border-bottom:1px solid var(--ui-blue-border)!important;
}
.section-card > .section-title{
  margin:-10px -10px 8px;
  padding:7px 10px;
  min-height:38px;
  border-radius:2px 2px 0 0;
}
.section-card > .section-title h1,
.section-card > .section-title h2,
.section-card > .section-title h3,
.section-card > .section-title h4,
.section-card > .section-title h5,
.section-card > .section-title h6,
.section-card > .section-title p,
.section-card > .section-title small,
.card-header h1,.card-header h2,.card-header h3,.card-header h4,.card-header h5,.card-header h6,
.form-header h1,.form-header h2,.form-header h3,.form-header h4,.form-header h5,.form-header h6,
.panel-header h1,.panel-header h2,.panel-header h3,.panel-header h4,.panel-header h5,.panel-header h6{
  color:#fff!important;
}
.section-card > .section-title p,
.section-card > .section-title small{
  opacity:.82;
}
.section-card > .section-title .btn-light{
  background:#fff!important;
  color:#155b84!important;
  border-color:rgba(255,255,255,.82)!important;
}
.section-card > .section-title .btn-outline-primary,
.section-card > .section-title .btn-primary{
  background:#fff!important;
  color:var(--ui-blue)!important;
  border-color:#fff!important;
}

/* Encabezados de tablas */
.table thead th,
.table.dataTable thead th,
.table.dataTable thead td{
  background:var(--ui-blue)!important;
  color:#fff!important;
  border-color:var(--ui-blue-dark)!important;
  font-weight:600!important;
}
.table thead th:first-child{border-top-left-radius:2px}
.table thead th:last-child{border-top-right-radius:2px}

/* Modal: header azul y zona de acciones clara, compacta */
.modal-header{
  min-height:40px!important;
  padding:7px 10px!important;
  background:var(--ui-blue)!important;
  color:#fff!important;
  border-bottom:1px solid var(--ui-blue-border)!important;
}
.modal-header .modal-title,
.modal-header h1,.modal-header h2,.modal-header h3,.modal-header h4,.modal-header h5,.modal-header h6,
.modal-header small,
.modal-header .text-muted{
  color:#fff!important;
}
.modal-header small,
.modal-header .text-muted{opacity:.82!important}
.modal-header .btn-close{
  filter:brightness(0) invert(1);
  opacity:.92!important;
  border:1px solid rgba(255,255,255,.45);
  border-radius:3px!important;
  padding:.38rem!important;
  margin:0!important;
}
.modal-header .btn-close:hover{opacity:1!important;background-color:rgba(255,255,255,.12)}
.modal-footer{
  min-height:44px;
  padding:7px 10px!important;
  background:#f5f6f8!important;
  border-top:1px solid #d4d8dd!important;
}
.modal-footer .btn{
  font-weight:600!important;
  min-width:72px;
}
.modal-footer .btn-light,
.modal-footer .btn-secondary{
  background:#fff!important;
  color:#333!important;
  border-color:#bfc5cc!important;
}
.modal-footer .btn-light:hover,
.modal-footer .btn-secondary:hover{
  background:#eceff2!important;
  border-color:#aeb5bd!important;
}
.modal-footer .btn-primary{
  background:var(--ui-blue)!important;
  color:#fff!important;
  border-color:var(--ui-blue-dark)!important;
}
.modal-footer .btn-primary:hover{
  background:var(--ui-blue-dark)!important;
  border-color:var(--ui-blue-dark)!important;
}

/* Controles dentro de formularios: aún más compactos */
.modal-body .form-control,
.modal-body .form-select,
.modal-body .input-group-text{
  min-height:29px;
}
.modal-body .form-label{margin-bottom:2px}

/* SweetAlert: compacto y coherente con el sistema */
.swal2-popup{
  width:min(360px,calc(100vw - 24px))!important;
  padding:12px 14px 13px!important;
  border-radius:4px!important;
  font-family:"Segoe UI",Tahoma,Arial,sans-serif!important;
  font-size:11px!important;
}
.swal2-icon{
  width:48px!important;
  height:48px!important;
  margin:6px auto 9px!important;
  transform:scale(.9);
}
.swal2-title{
  font-size:14px!important;
  font-weight:600!important;
  padding:0!important;
  margin:2px 0 5px!important;
}
.swal2-html-container{
  margin:0!important;
  padding:0 4px!important;
  font-size:11px!important;
  line-height:1.4!important;
}
.swal2-actions{
  margin:10px 0 0!important;
  gap:6px!important;
}
.swal2-styled{
  min-height:29px!important;
  margin:0!important;
  padding:.28rem .7rem!important;
  border-radius:2px!important;
  font-size:10.5px!important;
  box-shadow:none!important;
}
.swal2-confirm{background:var(--ui-blue)!important}
.swal2-cancel{background:#666!important}

/* Mantener texto legible en cabeceras con utilidades Bootstrap */
.modal-header .text-dark,
.section-title .text-dark{color:#fff!important}

/* ==========================================================
   PATCH UI v1.2 - CIERRE DE MODALES + TIPOGRAFIA MAS LEGIBLE
   - Fuerza la X al extremo derecho en TODOS los modales.
   - Aumenta ligeramente el grosor de la tipografia sin perder
     el estilo compacto tipo Visual Studio.
   ========================================================== */

/* La regla anterior anulaba el margin-left:auto de Bootstrap.
   Esta regla lo restaura explicitamente para todos los modales. */
.modal-header{
  display:flex!important;
  align-items:center!important;
  width:100%!important;
}
.modal-header > .btn-close,
.modal-header .btn-close{
  flex:0 0 auto!important;
  margin:0 0 0 auto!important;
  align-self:center!important;
  width:22px!important;
  height:22px!important;
  padding:5px!important;
  background-size:10px 10px!important;
}

/* Texto general: un poco mas firme, no negrita excesiva */
body{
  font-weight:500;
}
button,input,select,textarea,
.form-control,.form-select,.input-group-text,
.btn,
.table,
.side-nav a,
.date-chip,
.page-heading span,
.section-title p,
.compact-note,
.visitor-meta,
.relation-meta,
.dt-container .dt-info,
.dt-container .dt-length,
.dt-container .dt-search,
.dt-container .dt-paging{
  font-weight:500!important;
}

/* Titulos, etiquetas y encabezados con mejor jerarquia */
.brand strong,
.page-heading h1,
.section-title h2,
.modal-title,
.form-label,
.table thead th,
.table.dataTable thead th,
.step-label,
.btn,
.badge,
.sidebar-user strong{
  font-weight:600!important;
}

/* Titulos de modal ligeramente mas visibles */
.modal-title{
  font-size:12.5px!important;
}

/* Texto auxiliar sigue compacto pero ya no se ve tan fino */
.modal-header small,
.section-title p,
.form-text,
.text-muted,
.small,
small{
  font-weight:500!important;
}

/* Inputs y placeholders legibles */
.form-control::placeholder,
.form-select::placeholder{
  font-weight:500;
  color:#777;
  opacity:1;
}

/* ==========================================================
   FASE 2 - RECEPCION RAPIDA / CONTROL DE PERMANENCIA
   Mantiene el estilo compacto Visual Studio aprobado.
   ========================================================== */
.live-panel{border-color:#cbdbe6}
.live-count{background:#fff!important;color:var(--ui-blue)!important;border:1px solid rgba(255,255,255,.8)!important;font-size:10px!important}
.live-table tbody tr{background:#fbfdfc}
.live-table tbody tr:hover td{background:#f2f9f5}
.stay-chip{display:inline-flex;align-items:center;gap:4px;min-width:72px;padding:3px 6px;border-radius:2px;background:#eaf6f1;color:#116b4d;border:1px solid #cbe7dc;font-size:10px;font-weight:600}
.compact-empty{display:flex;align-items:center;justify-content:center;gap:8px;padding:13px!important;background:#fafafa;border:1px dashed #d4d8dc;border-radius:2px}
.compact-empty i{font-size:16px;color:var(--vs-success)}

.lookup-strip{display:grid;grid-template-columns:210px 1fr;gap:8px;align-items:end}
.dni-lookup{min-width:0}
.visitor-result{min-height:48px;border:1px solid #c9d9e5;background:#f6fbfe;border-radius:2px;padding:6px 7px;display:flex;align-items:center;gap:7px}
.visitor-result.hidden{visibility:hidden}
.visitor-avatar{width:34px;height:34px;flex:0 0 34px;display:grid;place-items:center;border-radius:2px;background:var(--ui-blue);color:#fff;font-size:14px;font-weight:700}
.visitor-copy{min-width:0;flex:1}
.visitor-name{font-size:11.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#202020}
.visitor-meta{font-size:9.5px;color:#66737d;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.step-label{font-size:9.5px;text-transform:uppercase;letter-spacing:.045em;font-weight:700;color:#4b6475;border-bottom:1px solid #e1e6ea;padding-bottom:4px;margin-bottom:6px}
.field-lock{opacity:.52;pointer-events:none;filter:grayscale(.12)}
.compact-note{font-size:9.5px;background:#f5f7f9;border:1px solid #dfe3e7;border-radius:2px;padding:5px 6px;color:#56616a}
#mQuickGuardian .modal-dialog{max-width:590px}
#mQuickGuardian .compact-note{min-height:30px;display:flex;align-items:center}

@media(max-width:767.98px){
  .lookup-strip{grid-template-columns:1fr}
  .visitor-result.hidden{display:none}
  .live-table{min-width:760px}
}


/* ==========================================================
   FASE 3 - QR OPERATIVO
   Escaneo por cámara + credencial imprimible.
   ========================================================== */
.qr-scan-shell{
  border:1px solid #cfd8df;
  background:#f7f9fa;
  border-radius:3px;
  padding:7px;
}
.qr-reader{
  width:100%;
  min-height:245px;
  background:#111;
  border-radius:2px;
  overflow:hidden;
}
.qr-reader video{
  width:100%!important;
  max-height:310px!important;
  object-fit:cover!important;
}
.qr-reader #qr-reader__dashboard,
.qr-reader #qr-reader__dashboard_section{
  font-size:10px!important;
}
.qr-reader button,
.qr-reader select{
  font-family:"Segoe UI",Tahoma,Arial,sans-serif!important;
  font-size:10px!important;
}
.qr-scan-status{
  margin-top:6px;
  padding:5px 7px;
  min-height:28px;
  display:flex;
  align-items:center;
  background:#fff;
  border:1px solid #dce2e6;
  color:#59656e;
  font-size:10px;
  font-weight:500;
}
.qr-scan-status.ok{border-color:#b9ddcd;background:#effaf5;color:#176746}
.qr-scan-status.error{border-color:#efc4c4;background:#fff4f4;color:#9c3030}
.qr-manual{border-top:1px solid #e1e5e8;padding-top:7px}
.qr-actions .btn{min-width:92px}
.qr-print-area .qr-box{display:flex;justify-content:center;align-items:center}

@media print{
  body *{visibility:hidden!important}
  .qr-print-area,.qr-print-area *{visibility:visible!important}
  .qr-print-area{
    position:fixed!important;
    left:0!important;
    top:0!important;
    width:86mm!important;
    min-height:54mm!important;
    margin:0!important;
    padding:8mm!important;
    border:1px solid #222!important;
    box-shadow:none!important;
    background:#fff!important;
    color:#111!important;
    text-align:center!important;
  }
  .qr-print-area .no-print{display:none!important}
  .qr-print-area .text-muted{color:#333!important}
}

/* ==========================================================
   FASE 4 - DASHBOARD + REPORTES AVANZADOS
   ========================================================== */
.chart-card{min-height:250px}.chart-wrap{position:relative;width:100%;min-height:190px}.chart-wrap.chart-lg{height:245px}.chart-wrap.chart-md{height:190px}.chart-wrap canvas{max-width:100%}
.dashboard-mini-stats{display:grid;gap:5px}.dashboard-mini-stats>div{display:flex;align-items:center;justify-content:space-between;border:1px solid #dfe5ea;background:#fafbfc;padding:7px 9px;border-radius:3px}.dashboard-mini-stats span{font-size:11px}.dashboard-mini-stats i{color:var(--ui-blue);margin-right:5px}.dashboard-mini-stats b{font-size:15px;color:#1f2937}.section-subtitle{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#59636e}.rank-list{display:grid;gap:3px}.rank-row{display:flex;align-items:center;gap:7px;padding:6px 3px;border-bottom:1px solid #edf0f2}.rank-row:last-child{border-bottom:0}.rank-num{width:21px;height:21px;display:inline-flex;align-items:center;justify-content:center;background:#eaf4fb;color:var(--ui-blue-dark);font-size:10px;font-weight:700;border-radius:3px}.rank-row b{display:block;font-size:10.8px}.rank-row small{display:block;color:#77818c;font-size:9.6px}.rank-row>strong{font-size:13px;color:var(--ui-blue)}
.report-filter-card .section-title{margin-bottom:7px}.report-filter-grid{display:grid;grid-template-columns:repeat(5,minmax(130px,1fr));gap:6px;align-items:end}.report-filter-grid .form-label{margin-bottom:2px}.report-filter-actions{display:flex;align-items:end}.report-filter-actions .btn{width:100%}.report-result-head{gap:8px}.report-table td{vertical-align:middle}.badge-soft-danger{background:#fdecec!important;color:#b42318!important;border:1px solid #f7c7c3!important}
@media(max-width:1200px){.report-filter-grid{grid-template-columns:repeat(3,minmax(130px,1fr))}}
@media(max-width:768px){.report-filter-grid{grid-template-columns:repeat(2,minmax(120px,1fr))}.chart-wrap.chart-lg{height:220px}}
@media(max-width:480px){.report-filter-grid{grid-template-columns:1fr}.report-filter-actions .btn{width:100%}}

/* ===== FASE 5 · Identidad institucional y administración ===== */
.brand-mark-logo{background:#fff!important;padding:2px;overflow:hidden}
.brand-mark-logo img{width:100%;height:100%;object-fit:contain;display:block;border-radius:1px}
.institution-logo-preview{width:76px;height:76px;border:1px solid #d5d8dc;background:#fff;border-radius:3px;display:grid;place-items:center;overflow:hidden}
.institution-logo-preview img{max-width:100%;max-height:100%;object-fit:contain}
.permission-grid{display:grid;grid-template-columns:150px repeat(3,minmax(90px,1fr));border:1px solid #d9dde2;border-radius:3px;overflow:hidden;font-size:10px}
.permission-grid>div{padding:6px 7px;border-right:1px solid #e5e7ea;border-bottom:1px solid #e5e7ea;background:#fff}
.permission-grid>div:nth-child(4n){border-right:0}.permission-grid .pg-head{background:#f1f4f7;font-weight:700}.permission-grid .pg-label{font-weight:600;background:#fafbfc}
.audit-detail{max-width:360px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.backup-card{display:flex;align-items:center;gap:9px;padding:9px;border:1px solid #dfe2e6;background:#fff;border-radius:3px}.backup-card i{font-size:20px;color:var(--vs-accent)}
.login-brand-logo{width:58px;height:58px;border-radius:4px;background:#fff;padding:4px;display:grid;place-items:center;overflow:hidden}.login-brand-logo img{width:100%;height:100%;object-fit:contain}
@media(max-width:700px){.permission-grid{grid-template-columns:120px repeat(3,minmax(72px,1fr));font-size:9px}}

/* ==========================================================
   UI v10 - AJUSTE RESPONSIVE / SIDEBAR OCULTABLE / FULLSCREEN
   ========================================================== */
html,body{width:100%;max-width:100%;overflow-x:hidden}
.app-shell{width:100%;max-width:100%;overflow-x:hidden}
.sidebar{transition:transform .2s ease,box-shadow .2s ease;will-change:transform}
.main-area{min-width:0;width:auto;max-width:100%;transition:margin-left .2s ease}
.content-wrap{width:100%;max-width:100%;min-width:0;overflow-x:hidden}
.content-wrap>*{max-width:100%;min-width:0}
.content-wrap .row{max-width:100%;margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}
.content-wrap [class*="col-"]{min-width:0}
.card-clean,.section-card,.compact-panel{min-width:0;max-width:100%}
.table-responsive{width:100%;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
.dt-container{width:100%!important;max-width:100%!important;min-width:0}
.dt-container .dt-layout-row{max-width:100%;flex-wrap:wrap;gap:5px 8px}
canvas{max-width:100%!important}

/* Escritorio: el menú se oculta por completo y el contenido aprovecha todo el ancho. */
body.sidebar-hidden .sidebar{transform:translateX(-100%)}
body.sidebar-hidden .main-area{margin-left:0}
body.sidebar-hidden .statusbar{left:0}
.statusbar{transition:left .2s ease}

.sidebar-backdrop{display:none}
.icon-btn{display:inline-flex;align-items:center;justify-content:center;flex:0 0 28px;transition:background .15s,border-color .15s,color .15s}
.icon-btn:hover{background:#edf5fb;border-color:#9abed5;color:var(--vs-accent)}
.icon-btn:focus-visible{outline:2px solid rgba(0,122,204,.25);outline-offset:1px}
.topbar-left{min-width:0;flex:1}
.page-heading{min-width:0;max-width:100%}
.topbar-actions{flex:0 0 auto}
.quick-entry-top{white-space:nowrap}

/* ==========================================================
   SWEETALERT2 - FORMAL / MODERNO / COMPACTO
   ========================================================== */
.swal2-container{z-index:20000!important;padding:12px!important}
.swal2-popup.app-swal-popup,
.app-swal-popup{
  width:min(390px,calc(100vw - 24px))!important;
  padding:0 0 13px!important;
  border:1px solid #cfd6dc!important;
  border-top:3px solid var(--ui-blue,#007acc)!important;
  border-radius:5px!important;
  box-shadow:0 18px 48px rgba(26,38,50,.24)!important;
  font-family:"Segoe UI",Tahoma,Arial,sans-serif!important;
  overflow:hidden!important;
}
.app-swal-popup .swal2-icon{
  width:43px!important;height:43px!important;
  margin:15px auto 7px!important;
  border-width:3px!important;
  transform:none!important;
}
.app-swal-popup .swal2-icon .swal2-icon-content{font-size:27px!important}
.app-swal-title,
.app-swal-popup .swal2-title{
  color:#20252a!important;
  font-size:15px!important;
  line-height:1.25!important;
  font-weight:650!important;
  padding:0 18px!important;
  margin:2px 0 5px!important;
}
.app-swal-body,
.app-swal-popup .swal2-html-container{
  color:#56616a!important;
  margin:0!important;
  padding:0 20px!important;
  font-size:11.5px!important;
  line-height:1.48!important;
  font-weight:500!important;
}
.app-swal-actions,
.app-swal-popup .swal2-actions{
  width:100%!important;
  margin:13px 0 0!important;
  padding:10px 14px 0!important;
  border-top:1px solid #e4e7ea!important;
  gap:7px!important;
  justify-content:flex-end!important;
}
.app-swal-popup .app-swal-confirm,
.app-swal-popup .app-swal-cancel{
  min-width:88px!important;
  min-height:30px!important;
  padding:.28rem .72rem!important;
  border-radius:2px!important;
  font-size:10.8px!important;
  font-weight:600!important;
}
.app-swal-popup .app-swal-cancel{background:#fff!important;color:#333!important;border:1px solid #bfc5cc!important}
.app-swal-popup .app-swal-cancel:hover{background:#f0f2f4!important;border-color:#abb2b9!important}
.app-swal-popup .swal2-close{font-size:20px!important;color:#777!important}
.app-swal-show{animation-duration:.16s!important}

/* Móvil/tablet: menú en overlay y contenido siempre ajustado. */
@media(max-width:991.98px){
  .sidebar{transform:translateX(-100%);box-shadow:none}
  .sidebar.open{transform:translateX(0);box-shadow:10px 0 30px rgba(0,0,0,.22)}
  .main-area{margin-left:0!important;width:100%}
  .statusbar{left:0!important}
  .sidebar-backdrop{display:block;position:fixed;inset:0;background:rgba(15,23,32,.42);opacity:0;visibility:hidden;transition:.18s;z-index:1035}
  .sidebar-backdrop.show{opacity:1;visibility:visible}
  body.sidebar-mobile-open{overflow:hidden}
  .page-heading span{max-width:52vw}
  .content-wrap{padding:8px}
}
@media(max-width:575.98px){
  .topbar{gap:6px}
  .topbar-actions{gap:5px}
  .date-chip{display:none!important}
  .quick-entry-top{width:30px!important;min-width:30px!important;padding:0!important;justify-content:center}
  .quick-entry-top span{display:none}
  .page-heading h1{max-width:52vw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .page-heading span{max-width:52vw}
  .section-title{align-items:flex-start;flex-wrap:wrap}
  .section-title>div{min-width:0;flex:1 1 180px}
  .filter-bar>*{flex:1 1 145px;max-width:100%!important}
  .dt-container .dt-search,.dt-container .dt-length{width:100%;justify-content:space-between}
  .dt-container .dt-search input{flex:1;min-width:0}
}

/* ==========================================================
   UI v11 - SIDEBAR COMPACTO CON ICONOS VISIBLES
   Al contraer en escritorio NO desaparece: queda una barra
   estrecha con los iconos de navegación.
   ========================================================== */
@media (min-width: 992px){
  .sidebar{
    width:218px;
    transition:width .2s ease, box-shadow .2s ease, transform .2s ease;
  }
  .main-area{
    margin-left:218px;
    transition:margin-left .2s ease;
  }
  .statusbar{
    left:218px;
    transition:left .2s ease;
  }

  body.sidebar-hidden .sidebar{
    width:54px;
    transform:none !important;
    overflow:hidden;
  }
  body.sidebar-hidden .main-area{margin-left:54px !important}
  body.sidebar-hidden .statusbar{left:54px !important}

  body.sidebar-hidden .brand{
    justify-content:center;
    gap:0;
    padding:7px 5px;
  }
  body.sidebar-hidden .brand-copy,
  body.sidebar-hidden .side-caption,
  body.sidebar-hidden .sidebar-user-copy{
    display:none !important;
  }
  body.sidebar-hidden .brand-mark{
    flex:0 0 30px;
    width:30px;
    height:30px;
  }

  body.sidebar-hidden .side-nav{
    padding:6px 5px 8px;
    overflow-x:hidden;
  }
  body.sidebar-hidden .side-nav a{
    width:42px;
    height:36px;
    margin:2px auto;
    padding:0;
    gap:0;
    justify-content:center;
    border-radius:3px;
  }
  body.sidebar-hidden .side-nav a span{display:none !important}
  body.sidebar-hidden .side-nav a i{
    width:42px;
    margin:0;
    text-align:center;
    font-size:16px;
    line-height:36px;
    color:#d4d4d4;
  }
  body.sidebar-hidden .side-nav a:hover i,
  body.sidebar-hidden .side-nav a.active i{color:#fff}
  body.sidebar-hidden .side-nav a.active:before{
    left:-5px;
    width:3px;
  }

  body.sidebar-hidden .sidebar-user{
    min-height:50px;
    height:auto;
    padding:6px 4px;
    gap:4px;
    justify-content:center;
  }
  body.sidebar-hidden .sidebar-user .avatar-sm{
    width:28px;
    height:28px;
    flex:0 0 28px;
  }
  body.sidebar-hidden .sidebar-user>a{
    width:20px;
    padding:2px 0;
    text-align:center;
  }

  /* Tooltip visual propio para el menú contraído. */
  body.sidebar-hidden .side-nav a[data-side-label]::after{
    content:attr(data-side-label);
    position:fixed;
    left:60px;
    z-index:12000;
    padding:5px 8px;
    background:#1f2328;
    color:#fff;
    border:1px solid #343a40;
    border-radius:3px;
    font-size:10.5px;
    font-weight:600;
    white-space:nowrap;
    opacity:0;
    visibility:hidden;
    pointer-events:none;
    transform:translateY(0);
    box-shadow:0 5px 16px rgba(0,0,0,.22);
  }
  body.sidebar-hidden .side-nav a[data-side-label]:hover::after{
    opacity:1;
    visibility:visible;
  }
}

/* ==========================================================
   PATCH UI v1.4 - SWEETALERT2 ICONOS PROPORCIONALES
   Corrige el check de éxito incompleto al mantener la geometría
   original de SweetAlert2 y escalarla mediante font-size.
   ========================================================== */
.app-swal-popup .swal2-icon{
  box-sizing:content-box!important;
  width:5em!important;
  height:5em!important;
  margin:13px auto 7px!important;
  font-size:11px!important;
  border-width:.25em!important;
  transform:none!important;
  overflow:visible!important;
}

/* Evita que reglas globales compactas deformen el check de éxito. */
.app-swal-popup .swal2-success .swal2-success-ring,
.app-swal-popup .swal2-success .swal2-success-fix,
.app-swal-popup .swal2-success [class^="swal2-success-circular-line"],
.app-swal-popup .swal2-success [class*=" swal2-success-circular-line"],
.app-swal-popup .swal2-success .swal2-success-line-tip,
.app-swal-popup .swal2-success .swal2-success-line-long{
  box-sizing:content-box!important;
}

/* Los otros iconos también conservan proporción correcta. */
.app-swal-popup .swal2-icon .swal2-icon-content{
  font-size:3.1em!important;
  line-height:1!important;
}

/* El check de éxito usa sus trazos nativos completos. */
.app-swal-popup .swal2-success .swal2-success-line-tip,
.app-swal-popup .swal2-success .swal2-success-line-long{
  display:block!important;
}

/* ==========================================================
   FASE PERFIL DE USUARIO v13
   Foto/avatar individual para usuarios del sistema.
   ========================================================== */
.avatar-sm{overflow:hidden}
.avatar-sm.has-photo{background:#252526;border:1px solid #4b4b4b;padding:0}
.avatar-sm img{width:100%;height:100%;display:block;object-fit:cover}
.user-table-person{display:flex;align-items:center;gap:8px;min-width:190px}
.user-table-person>div{min-width:0}
.user-table-person b,.user-table-person small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.user-table-person small{color:#7b7b7b;margin-top:1px}
.user-table-avatar{width:30px;height:30px;flex:0 0 30px;border-radius:50%;object-fit:cover;border:1px solid #c9d5dc;background:#fff}
.user-table-avatar-fallback{display:grid;place-items:center;background:#eaf3fa;color:#245d88;font-size:11px;font-weight:700}
.user-profile-editor{display:flex;align-items:center;gap:10px;padding:8px;background:#f7f9fb;border:1px solid #d9e0e5;border-radius:3px}
.user-profile-preview{width:62px;height:62px;flex:0 0 62px;border-radius:50%;display:grid;place-items:center;overflow:hidden;background:#eaf3fa;color:#245d88;border:2px solid #cfe1ee;font-size:25px;font-weight:700}
.user-profile-preview img{width:100%;height:100%;object-fit:cover;display:block}
.user-profile-preview span{font-size:20px;font-weight:700}
body.sidebar-hidden .sidebar-user .avatar-sm.has-photo{padding:0}

/* ==========================================================
   FASE MI PERFIL v14
   Perfil autogestionable desde el bloque inferior del sidebar.
   ========================================================== */
.sidebar-user{gap:6px}
.sidebar-profile-link{display:flex;align-items:center;gap:7px;min-width:0;flex:1;color:inherit;text-decoration:none;border-radius:3px;padding:2px}
.sidebar-profile-link:hover{background:rgba(255,255,255,.06);color:#fff}
.sidebar-profile-link .sidebar-user-copy{min-width:0;flex:1}
.sidebar-logout{flex:0 0 auto}
.profile-page-grid{max-width:1120px}
.profile-summary-card{height:100%}
.profile-summary-body{text-align:center;padding:16px 12px 13px;border-bottom:1px solid #e2e6e9}
.profile-main-avatar{width:88px;height:88px;margin:0 auto 9px;border-radius:50%;display:grid;place-items:center;overflow:hidden;background:#eaf3fa;color:#245d88;border:3px solid #d2e7f6;box-shadow:0 3px 12px rgba(0,0,0,.08);font-size:31px;font-weight:700}
.profile-main-avatar.has-photo{background:#fff;padding:0}
.profile-main-avatar img{width:100%;height:100%;display:block;object-fit:cover}
.profile-summary-body h3{font-size:15px;font-weight:700;margin:0;color:#222}
.profile-username{font-size:11px;color:#70777e;margin-top:2px}
.profile-meta-list{padding:7px 11px 10px}
.profile-meta-list>div{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:31px;border-bottom:1px solid #edf0f2;font-size:10.8px}
.profile-meta-list>div:last-child{border-bottom:0}
.profile-meta-list span{color:#66717a}.profile-meta-list span i{width:17px;color:#007acc}.profile-meta-list b{font-weight:650;color:#252a2f;text-align:right}
.profile-form-compact{padding:0}
.profile-form-actions{display:flex;justify-content:flex-end;margin-top:9px;padding-top:8px;border-top:1px solid #e3e7ea}
.profile-section-icon{font-size:18px;color:#007acc}
.password-hint{margin-top:8px;padding:6px 8px;background:#f6f8fa;border:1px solid #dde3e7;border-radius:3px;color:#66717a;font-size:10.5px;font-weight:500}
.password-eye{border-color:#ced4da!important;min-width:34px}
@media(min-width:992px){
  body.sidebar-hidden .sidebar-profile-link{flex:0 0 32px;width:32px;height:32px;padding:2px;justify-content:center}
  body.sidebar-hidden .sidebar-profile-link .avatar-sm{margin:0}
  body.sidebar-hidden .sidebar-user{flex-direction:column;gap:2px;padding:6px 4px}
  body.sidebar-hidden .sidebar-logout{width:24px;text-align:center}
}
@media(max-width:767.98px){.profile-main-avatar{width:76px;height:76px}.profile-page-grid{max-width:none}}

/* ==========================================================
   FASE 6 v15 - CATÁLOGOS DE VISITAS
   Motivos, áreas y personal administrables.
   ========================================================== */
.catalog-kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.catalog-kpi{min-height:54px;display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #d7dde2;border-radius:3px;padding:8px 11px;box-shadow:0 1px 2px rgba(0,0,0,.025)}
.catalog-kpi>i{width:31px;height:31px;display:grid;place-items:center;border-radius:3px;background:#eaf4fb;color:#007acc;font-size:15px;border:1px solid #d1e7f6}
.catalog-kpi b{display:block;font-size:17px;line-height:17px;color:#24292e;font-weight:700}.catalog-kpi span{display:block;margin-top:2px;color:#68737d;font-size:10.5px;font-weight:550}
.catalog-grid .section-card{min-height:310px}.catalog-table{margin:0}.catalog-table th{white-space:nowrap}.catalog-table td{vertical-align:middle}.catalog-table td:first-child{min-width:135px}.catalog-inactive{opacity:.58;background:#fafafa}.icon-only{width:29px!important;min-width:29px!important;padding-left:0!important;padding-right:0!important;text-align:center}
#visit_person_to_visit option[hidden]{display:none}
@media(max-width:991.98px){.catalog-kpis{grid-template-columns:1fr}.catalog-grid .section-card{min-height:0}}


/* ==========================================================
   FASE 7 v16 - AGENDA DE VISITAS PROGRAMADAS
   ========================================================== */
.appointment-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.appointment-alert-kpi{border-color:#f0c36a;background:#fffaf0}.appointment-alert-kpi>i{background:#fff3cd;border-color:#ffe69c;color:#9a6700}
.appointment-table td{vertical-align:middle}.appointment-table .badge i{margin-right:3px}.appointment-overdue{background:#fffaf2!important}.appointment-overdue td:first-child b{color:#9a6700}
.appointment-mini{gap:10px}.appointment-time{width:48px;flex:0 0 48px;text-align:center;border-right:1px solid #e2e6e9;padding-right:8px}.appointment-time b{display:block;color:#007acc;font-size:13px}.appointment-time small{display:block;color:#77818a;font-size:9.8px;margin-top:1px}
#apptGuardianInfo{display:block;min-height:14px;font-size:10px;margin-top:3px;color:#67717a;font-weight:550}
@media(max-width:991.98px){.appointment-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:575.98px){.appointment-kpis{grid-template-columns:1fr}.appointment-table{min-width:900px}}

/* ==========================================================
   FASE 8 v17 - CREDENCIAL, FOTO, HISTORIAL Y AVISOS
   ========================================================== */
.person-photo{width:30px;height:30px;flex:0 0 30px;border-radius:50%;object-fit:cover;border:1px solid #cad5dd;background:#fff}
.guardian-summary-card{min-height:370px}.guardian-photo-lg{width:82px;height:82px;border-radius:50%;display:grid;place-items:center;overflow:hidden;background:#eaf3fa;border:3px solid #d3e7f4;color:#245d88;font-size:29px;font-weight:750}.guardian-photo-lg.has-photo{background:#fff;padding:0}.guardian-photo-lg img{width:100%;height:100%;object-fit:cover;display:block}.guardian-photo-editor{display:flex;align-items:center;gap:10px;padding:8px;background:#f7f9fb;border:1px solid #d9e0e5;border-radius:3px;min-height:96px}.guardian-photo-preview{width:72px;height:72px;flex:0 0 72px;border-radius:50%;display:grid;place-items:center;overflow:hidden;background:#eaf3fa;color:#245d88;border:2px solid #cfe1ee;font-size:25px;font-weight:700}.guardian-photo-preview.has-photo{background:#fff}.guardian-photo-preview img{width:100%;height:100%;object-fit:cover;display:block}.guardian-alert{display:flex;gap:7px;padding:7px 8px;border-radius:3px;border:1px solid;font-size:10.5px;line-height:1.3}.guardian-alert>i{font-size:14px;margin-top:1px}.guardian-alert b,.guardian-alert span{display:block}.guardian-alert b{font-size:10.7px;margin-bottom:1px}.guardian-alert-info{background:#eff8ff;border-color:#badcf4;color:#245f86}.guardian-alert-warning{background:#fff9e8;border-color:#f2d487;color:#75520a}.guardian-alert-danger{background:#fff1f0;border-color:#efb5b0;color:#8d2a23}.guardian-alert-editor{padding:8px 9px;border:1px solid #e0c87b;background:#fffaf0;border-radius:3px}.visitor-avatar.has-photo{padding:0;overflow:hidden;background:#fff}.visitor-avatar.has-photo img{width:100%;height:100%;object-fit:cover;display:block}.visitor-security-alert{display:flex;align-items:flex-start;gap:8px;margin-top:6px;padding:7px 9px;border:1px solid;border-radius:3px;font-size:10.5px;line-height:1.35}.visitor-security-alert>i{font-size:14px;margin-top:1px}.visitor-security-alert b,.visitor-security-alert span{display:block}.visitor-security-alert b{font-size:10.8px;margin-bottom:1px}.visitor-security-warning{background:#fff9e8;border-color:#edcf75;color:#77530a}.visitor-security-danger{background:#fff1f0;border-color:#ebb1ab;color:#8b2e27}.visitor-security-info{background:#eff8ff;border-color:#b7daf1;color:#235e84}.guardian-history-avatar{width:46px;height:46px;flex:0 0 46px;border-radius:50%;display:grid;place-items:center;overflow:hidden;background:#eaf3fa;color:#245d88;border:2px solid #d1e5f2;font-size:17px;font-weight:700}.guardian-history-avatar.has-photo{background:#fff}.guardian-history-avatar img{width:100%;height:100%;object-fit:cover;display:block}.history-kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.history-table td{vertical-align:middle}.history-table small{font-size:9.8px}
@media(max-width:767.98px){.history-kpis{grid-template-columns:1fr}.guardian-summary-card{min-height:0}}
@media print{.sidebar,.topbar,.statusbar,.page-header,.history-kpis,.guardian-history-head+* form,.section-title .btn,.no-print{display:none!important}.content{margin:0!important;padding:0!important}.app-main{margin:0!important}.section-card{border:0!important;box-shadow:none!important}.history-table{font-size:9px}}


/* ==========================================================
   FASE 10 v19 - CONTROL EN VIVO Y ALERTAS DE PERMANENCIA
   ========================================================== */
.live-top-chip{height:30px;display:inline-flex;align-items:center;gap:5px;padding:0 8px;border:1px solid #d5dce1;border-radius:3px;background:#fff;color:#4e5962;text-decoration:none;font-size:10.5px;font-weight:650;white-space:nowrap}.live-top-chip:hover{background:#f4f8fb;color:#126ba4}.live-top-chip i{color:#77818a}.live-top-chip.has-live i{color:#19a974}.live-top-chip span{font-size:12px;font-weight:750}.live-top-chip em{font-style:normal;color:#7a848d;font-size:9.8px}.live-monitor-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.live-kpi{min-height:58px;display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #d7dde2;border-radius:3px;padding:8px 11px}.live-kpi>i{width:32px;height:32px;display:grid;place-items:center;border-radius:3px;background:#eaf4fb;color:#1674b9;font-size:15px;border:1px solid #d2e7f5}.live-kpi b{display:block;font-size:18px;line-height:18px;font-weight:750;color:#24292f}.live-kpi span{display:block;font-size:10.4px;color:#6c7680;margin-top:3px;font-weight:550}.live-kpi-normal>i{background:#edf9f2;border-color:#cbe8d5;color:#25824d}.live-kpi-warning{border-color:#ead49a;background:#fffdf7}.live-kpi-warning>i{background:#fff5d8;border-color:#f1d991;color:#9b6b00}.live-kpi-critical{border-color:#e7b3ad;background:#fffafa}.live-kpi-critical>i{background:#fff0ee;border-color:#efc0bb;color:#b23b32}.live-monitor-title{gap:8px}.live-legend{display:flex;gap:15px;align-items:center;font-size:10px;color:#68727b;font-weight:600}.legend-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px}.legend-dot.normal{background:#2e9e5b}.legend-dot.warning{background:#d79a00}.legend-dot.critical{background:#d04c42}.live-monitor-table td{vertical-align:middle}.live-monitor-table th{white-space:nowrap}.live-row-warning td{background:#fffdf5!important}.live-row-critical td{background:#fff6f5!important}.live-row-warning td:first-child{box-shadow:inset 3px 0 #d9a11b}.live-row-critical td:first-child{box-shadow:inset 3px 0 #d05046}.live-person{display:flex;align-items:center;gap:8px;min-width:220px}.live-person>img,.live-person>span:first-child{width:34px;height:34px;flex:0 0 34px;border-radius:50%;object-fit:cover;border:1px solid #ccd7de;background:#eaf3fa;color:#245d88;display:grid;place-items:center;font-weight:750}.live-person>div{min-width:0}.live-person b,.live-person small{display:block}.live-person b{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:250px}.live-person small{font-size:9.7px;color:#747f88;margin-top:1px}.live-person-alert{color:#a36d00!important;max-width:260px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-time{display:inline-flex;align-items:center;justify-content:center;min-width:64px;height:24px;padding:0 7px;border-radius:12px;background:#f0f4f7;color:#3e4b55;font-size:10.3px;font-weight:700;border:1px solid #dce3e8}.live-state{display:inline-flex;align-items:center;justify-content:center;min-width:68px;height:22px;border-radius:11px;padding:0 7px;font-size:9.1px;font-weight:750;letter-spacing:.2px}.live-state-normal{background:#eaf7ef;color:#277849;border:1px solid #c9e6d3}.live-state-warning{background:#fff5d9;color:#8b6204;border:1px solid #efd58d}.live-state-critical{background:#fff0ee;color:#a33830;border:1px solid #edbbb6}.live-monitor-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 9px;background:#f7f9fa;border:1px solid #dde3e7;border-radius:3px;color:#68727b;font-size:10.3px;font-weight:550}.live-monitor-foot i{color:#1674b9}.live-monitor-card .is-loading i{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
@media(max-width:991.98px){.live-monitor-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.live-top-chip em{display:none}.live-monitor-table{min-width:940px}}
@media(max-width:575.98px){.live-monitor-kpis{grid-template-columns:1fr 1fr}.live-kpi{min-height:54px;padding:7px}.live-kpi>i{width:29px;height:29px}.live-monitor-foot{align-items:flex-start;flex-direction:column}.live-top-chip{padding:0 6px}.live-top-chip em{display:none}}
@media print{.live-top-chip{display:none!important}}

/* ==========================================================
   FASE 11 v20 - SALA DE ESPERA Y FLUJO DE ATENCIÓN
   ========================================================== */
.workflow-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.workflow-kpi{min-height:56px;display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #d7dde2;border-radius:3px;padding:8px 11px}.workflow-kpi>i{width:32px;height:32px;display:grid;place-items:center;border-radius:3px;background:#eaf4fb;border:1px solid #d1e6f4;color:#1674b9;font-size:15px}.workflow-kpi b{display:block;font-size:18px;line-height:18px;font-weight:750;color:#24292f}.workflow-kpi span{display:block;font-size:10.4px;color:#68737d;margin-top:3px;font-weight:550}.workflow-kpi-wait>i{background:#fff7df;border-color:#efd898;color:#926600}.workflow-kpi-attention>i{background:#eaf4ff;border-color:#bfdaf2;color:#126ba4}.workflow-kpi-done>i{background:#edf9f2;border-color:#c8e7d3;color:#25794a}.workflow-table td{vertical-align:middle}.workflow-table th{white-space:nowrap}.workflow-row-atencion td{background:#f6fbff!important}.workflow-row-espera td:first-child{box-shadow:inset 3px 0 #d3a21a}.workflow-row-atencion td:first-child{box-shadow:inset 3px 0 #1681c4}.workflow-row-atendido td:first-child{box-shadow:inset 3px 0 #2d9858}.workflow-badge{display:inline-flex;align-items:center;justify-content:center;min-width:76px;height:22px;border-radius:11px;padding:0 8px;font-size:9.3px;font-weight:750}.workflow-wait{background:#fff5d9;border:1px solid #efd58d;color:#896104}.workflow-attention{background:#eaf5ff;border:1px solid #bdd9ef;color:#166a9f}.workflow-done{background:#eaf7ef;border:1px solid #c8e5d2;color:#28774a}.workflow-time{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 7px;border:1px solid #dde4e9;border-radius:12px;background:#f6f8fa;font-size:10.2px;font-weight:700;color:#48545e}.workflow-note{display:flex;align-items:flex-start;gap:7px;padding:7px 9px;border:1px solid #d9e1e7;background:#f7f9fb;border-radius:3px;color:#68737c;font-size:10.4px}.workflow-note i{color:#1674b9;margin-top:1px}@media(max-width:991.98px){.workflow-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.workflow-table{min-width:920px}}@media(max-width:575.98px){.workflow-kpis{grid-template-columns:1fr 1fr}}


/* ==========================================================
   FASE 12 v21 - TURNERO DIGITAL / MONITOR DE LLAMADOS
   ========================================================== */
.queue-code-cell{min-width:66px;text-align:center}.queue-code-cell b{display:block;font-size:14px;line-height:18px;color:#0969a8;font-weight:800;letter-spacing:.3px}.queue-code-cell small{display:block;font-size:8.8px;color:#25824d;font-weight:650;margin-top:1px}.queue-call-action{min-width:31px}
.queue-display-body{margin:0;background:#0a1d2c;color:#fff;font-family:Segoe UI,Arial,sans-serif;min-height:100vh;overflow:hidden}.queue-display-shell{min-height:100vh;display:flex;flex-direction:column}.queue-display-head{height:82px;display:flex;align-items:center;justify-content:space-between;padding:0 28px;background:#0d6fa8;border-bottom:1px solid rgba(255,255,255,.18)}.queue-display-brand{display:flex;align-items:center;gap:13px}.queue-display-brand img,.queue-display-brand>span{width:48px;height:48px;border-radius:5px;background:#fff;object-fit:contain;padding:3px;display:grid;place-items:center;color:#0d6fa8;font-weight:800}.queue-display-brand b{display:block;font-size:21px}.queue-display-brand small{display:block;font-size:12px;opacity:.85;margin-top:2px}.queue-clock{text-align:right}.queue-clock b{display:block;font-size:28px;line-height:29px}.queue-clock small{font-size:12px;opacity:.8}.queue-display-main{flex:1;display:grid;grid-template-columns:minmax(0,1.35fr) minmax(320px,.65fr);gap:16px;padding:16px}.queue-now,.queue-next{border:1px solid rgba(255,255,255,.13);border-radius:8px;background:#102a3d;box-shadow:0 10px 35px rgba(0,0,0,.2)}.queue-now{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:25px}.queue-now-label{font-size:16px;font-weight:700;letter-spacing:1px;color:#9fd8fa}.queue-now-code{font-size:clamp(86px,14vw,190px);line-height:.95;font-weight:900;letter-spacing:4px;color:#fff;margin:18px 0;text-shadow:0 4px 25px rgba(0,0,0,.25)}.queue-now-dest{font-size:clamp(22px,3vw,40px);font-weight:700;color:#6fd1ff}.queue-now-person{font-size:18px;opacity:.72;margin-top:8px}.queue-pulse{animation:queuePulse .8s ease 2}@keyframes queuePulse{50%{box-shadow:0 0 0 7px rgba(58,188,255,.22),0 10px 35px rgba(0,0,0,.2)}}.queue-next{padding:18px;display:flex;flex-direction:column}.queue-next-title{font-size:17px;font-weight:750;margin-bottom:12px;color:#d7effd}.queue-next-list{display:flex;flex-direction:column;gap:8px;overflow:auto;flex:1}.queue-next-row{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#15374e;border:1px solid rgba(255,255,255,.09);border-radius:5px;padding:10px 12px}.queue-next-row b{font-size:23px;color:#fff}.queue-next-row span{font-size:13px;color:#b7d8ea;text-align:right}.queue-empty{padding:30px 10px;text-align:center;color:#91a9b7;font-size:14px}.queue-updated{text-align:right;color:#7894a5;font-size:10px;padding-top:10px}.queue-display-foot{height:48px;padding:0 18px;display:flex;align-items:center;justify-content:space-between;background:#071722;border-top:1px solid rgba(255,255,255,.08);font-size:12px;color:#9eb5c4}.queue-display-foot button{width:34px;height:30px;background:#15374e;border:1px solid #30536a;color:#fff;border-radius:4px}.queue-display-foot button:hover{background:#1b4662}@media(max-width:850px){.queue-display-head{height:68px;padding:0 14px}.queue-display-brand b{font-size:16px}.queue-display-brand small{font-size:10px}.queue-display-brand img,.queue-display-brand>span{width:40px;height:40px}.queue-display-main{grid-template-columns:1fr;overflow:auto}.queue-now{min-height:52vh}.queue-next{min-height:300px}.queue-clock b{font-size:22px}}

/* ==========================================================
   FASE 13 v22 - CENTRO DE NOTIFICACIONES
   Alertas operativas y avisos internos compactos.
   ========================================================== */
.notification-top{position:relative}.notification-bell-btn{position:relative}.notification-badge{position:absolute;top:-4px;right:-5px;min-width:17px;height:17px;padding:0 4px;border-radius:9px;display:grid;place-items:center;background:#dc3545;color:#fff;border:2px solid #f3f3f3;font-size:9px;font-weight:800;line-height:1}
.notification-dropdown{width:360px;max-width:calc(100vw - 16px);padding:0;border:1px solid #cfd6dc;border-radius:4px;box-shadow:0 12px 28px rgba(0,0,0,.18);overflow:hidden}
.notification-dropdown-head{min-height:45px;padding:7px 9px 7px 11px;display:flex;align-items:center;justify-content:space-between;background:#007acc;color:#fff}.notification-dropdown-head b{display:block;font-size:12px;font-weight:700}.notification-dropdown-head small{display:block;font-size:9.5px;opacity:.82;margin-top:1px}.notification-dropdown-head .btn-link{color:#fff;text-decoration:none;width:30px;height:28px;padding:0;border-radius:3px}.notification-dropdown-head .btn-link:hover{background:rgba(255,255,255,.12)}
.notification-dropdown-list{max-height:390px;overflow:auto;background:#fff}.notification-loading,.notification-empty{padding:25px 12px;text-align:center;color:#7b858d;font-size:10.5px}.notification-loading .spinner-border{margin-right:4px}
.notification-item{display:flex;gap:8px;align-items:flex-start;padding:8px 9px;border-bottom:1px solid #edf0f2;color:#24292e;text-decoration:none;position:relative;background:#fff}.notification-item:hover{background:#f6f9fb;color:#24292e}.notification-item.is-unread{background:#f2f8fc}.notification-item .notif-icon{margin-top:1px}.notification-item .notif-copy{min-width:0;flex:1}.notification-item .notif-copy strong{display:block;font-size:10.8px;font-weight:700;line-height:1.25}.notification-item .notif-copy small{display:block;color:#5f6972;font-size:9.8px;line-height:1.35;margin-top:2px}.notification-item .notif-copy em{display:block;color:#929aa1;font-size:8.8px;font-style:normal;margin-top:3px}.notif-dot{width:7px;height:7px;flex:0 0 7px;border-radius:50%;background:#007acc;margin-top:5px}
.notification-dropdown-foot{height:34px;display:flex;align-items:center;justify-content:center;gap:5px;background:#f7f8f9;border-top:1px solid #dfe4e8;color:#0969a5;text-decoration:none;font-size:10px;font-weight:650}.notification-dropdown-foot:hover{background:#eef4f8;color:#075d91}
.notif-icon{width:28px;height:28px;flex:0 0 28px;border-radius:50%;display:grid;place-items:center;border:1px solid;font-size:12px}.notif-info{background:#e8f4fb;border-color:#c6e3f4;color:#0070b6}.notif-success{background:#eaf7ee;border-color:#c9e8d2;color:#1d7b3b}.notif-warning{background:#fff7e5;border-color:#f2d79c;color:#986700}.notif-danger{background:#fcebed;border-color:#efc8cd;color:#b4232f}
.notification-page-list{display:flex;flex-direction:column}.notification-page-item{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-bottom:1px solid #e7ebee;text-decoration:none;color:#24292e;position:relative}.notification-page-item:last-child{border-bottom:0}.notification-page-item:hover{background:#f8fafb;color:#24292e}.notification-page-item.is-unread{background:#f3f9fd}.notification-page-item .notif-copy{min-width:0;flex:1}.notification-page-item .notif-copy strong{display:block;font-size:11.5px;font-weight:700}.notification-page-item .notif-copy small{display:block;font-size:10.5px;color:#56616a;margin-top:2px;line-height:1.4}.notification-page-item .notif-copy em{display:block;font-style:normal;color:#8a949c;font-size:9.3px;margin-top:4px}
.empty-state{padding:28px 12px;text-align:center;color:#7b858d}.empty-state i{display:block;font-size:24px;color:#9ba8b1;margin-bottom:5px}.empty-state strong{display:block;font-size:12px;color:#58636c}.empty-state span{display:block;font-size:10px;margin-top:2px}
@media(max-width:575.98px){.notification-dropdown{width:calc(100vw - 12px)}.date-chip{display:none}}


/* FASE 14 v23 · Autorizaciones recurrentes */
.auth-days{display:flex;gap:6px;flex-wrap:wrap}.auth-days label{margin:0;cursor:pointer}.auth-days input{position:absolute;opacity:0;pointer-events:none}.auth-days span{display:inline-flex;min-width:42px;height:30px;align-items:center;justify-content:center;border:1px solid #cbd5e1;border-radius:5px;background:#fff;font-size:12px;font-weight:600;color:#475569}.auth-days input:checked+span{background:#0d6efd;border-color:#0d6efd;color:#fff}
.visit-authorization-box{margin-top:8px;border:1px solid #a7d7bd;background:#f2fbf6;border-radius:5px;overflow:hidden}.auth-fast-title{display:flex;align-items:center;gap:8px;padding:7px 9px;border-bottom:1px solid #cde8d8;color:#166534}.auth-fast-title i{font-size:17px}.auth-fast-title b,.auth-fast-title small{display:block}.auth-fast-title small{font-size:11px;color:#4b6b57;font-weight:500}.auth-fast-row{width:100%;border:0;border-top:1px solid #e0f1e7;background:#fff;padding:7px 9px;display:flex;align-items:center;justify-content:space-between;gap:10px;text-align:left;color:#1f2937}.auth-fast-row:first-of-type{border-top:0}.auth-fast-row:hover{background:#eefaf3}.auth-fast-row b,.auth-fast-row small{display:block}.auth-fast-row b{font-size:12px}.auth-fast-row small{font-size:11px;color:#64748b;margin-top:1px}.auth-fast-row>span{white-space:nowrap;color:#198754;font-size:11px;font-weight:700}.auth-fast-row>span i{margin-right:3px}


/* ==========================================================
   FASE 15 / v24 - SEGURIDAD, RESTRICCIONES E INCIDENCIAS
   ========================================================== */
.visitor-security-panel{margin-top:8px;padding:10px 12px;border:1px solid #d5dee9;border-left-width:4px;border-radius:6px;background:#f8fafc;font-size:12px}
.visitor-security-panel-danger{border-left-color:#dc3545;background:#fff6f7}.visitor-security-panel-warning{border-left-color:#f0ad00;background:#fffaf0}.visitor-security-panel-success{border-left-color:#198754;background:#f3fbf7}.visitor-security-panel-info{border-left-color:#0d6efd;background:#f4f8ff}
.visitor-security-head{display:flex;gap:9px;align-items:flex-start}.visitor-security-head>i{font-size:20px;line-height:1}.visitor-security-head b{display:block;font-size:12.5px}.visitor-security-head small{display:block;color:#5f6f82;margin-top:1px}.visitor-security-reason{margin-top:6px;color:#39495d}.visitor-security-meta,.visitor-security-approved,.visitor-security-blocked,.visitor-security-pending{margin-top:6px;font-weight:600}.visitor-security-approved{color:#157347}.visitor-security-blocked{color:#b02a37}.visitor-security-pending{color:#8a6500}
.security-list{display:grid;gap:7px}.security-item{display:flex;align-items:flex-start;gap:9px;padding:9px 10px;border:1px solid #dce4ed;border-left-width:4px;border-radius:6px;background:#fff}.security-item.security-danger{border-left-color:#dc3545}.security-item.security-warning{border-left-color:#f0ad00}.security-item.security-info{border-left-color:#0d6efd}.security-icon{width:28px;height:28px;border-radius:5px;display:grid;place-items:center;background:#eef3f8;font-size:15px;flex:0 0 auto}.security-item span,.security-item small{display:block}.security-item small{color:#657487;margin-top:2px}.security-desc{max-width:420px;white-space:normal}.badge-soft-warning{background:#fff3cd!important;color:#7a5c00!important}.badge-soft-danger{background:#fde9ec!important;color:#b02a37!important}.badge-soft-info{background:#e8f2ff!important;color:#0b5ed7!important}

/* ==========================================================
   FASE 16 / v25 - FIRMA DIGITAL Y CONSTANCIA DE VISITA
   ========================================================== */
.signature-page-grid{max-width:1180px}.signature-summary{display:grid;grid-template-columns:1fr 1fr;border:1px solid #dfe5ea;border-radius:4px;overflow:hidden;background:#fff}.signature-summary>div{padding:8px 9px;min-height:48px;border-bottom:1px solid #e9edf0}.signature-summary>div:nth-child(odd){border-right:1px solid #e9edf0}.signature-summary span,.signature-summary b{display:block}.signature-summary span{font-size:9.5px;color:#74808a;text-transform:uppercase;font-weight:650}.signature-summary b{font-size:11px;color:#27313a;margin-top:2px;font-weight:650}.signature-saved-box{margin-top:9px;padding:8px;border:1px solid #cde6d5;background:#f5fbf7;border-radius:4px}.signature-saved-box>span{display:block;color:#18743a;font-size:10.5px;font-weight:700}.signature-saved-box img{display:block;width:100%;max-width:290px;height:70px;object-fit:contain;background:#fff;border-bottom:1px solid #d8e1e6;margin:5px 0}.signature-saved-box small{display:block;color:#68757e;font-size:9.5px}.signature-instruction{display:flex;gap:8px;align-items:flex-start;margin-bottom:8px;padding:7px 9px;background:#f4f8fc;border:1px solid #d9e6f1;border-radius:4px;color:#425466;font-size:10.5px;line-height:1.4}.signature-instruction i{color:#007acc;font-size:15px}.signature-pad-wrap{position:relative;height:260px;border:1px solid #aebbc5;border-radius:4px;background:#fff;overflow:hidden;touch-action:none}.signature-pad-wrap:focus-within,.signature-pad-wrap:hover{border-color:#5a9bc4}.signature-pad-wrap canvas{width:100%;height:100%;display:block;cursor:crosshair;touch-action:none}.signature-pad-placeholder{position:absolute;inset:0;pointer-events:none;display:grid;place-items:center;align-content:center;gap:4px;color:#a0abb3;font-size:11px}.signature-pad-placeholder i{font-size:23px;color:#b3bdc5}.visit-signature-btn.signed{color:#198754;border-color:#b9dfc7;background:#f4fbf7}.visit-signature-btn.signed:hover{background:#eaf7ef}@media(max-width:767.98px){.signature-summary{grid-template-columns:1fr}.signature-summary>div:nth-child(odd){border-right:0}.signature-pad-wrap{height:220px}}


/* ==========================================================
   FASE UI v26 - SIDEBAR AGRUPADO + COLORES VIVOS
   Inspirado en la referencia del usuario: menús en acordeón,
   paleta azul viva y jerarquía visual más moderna.
   ========================================================== */
:root{
  --vs-side:#0f2438;
  --vs-side-hover:#163552;
  --vs-side-active:#1d65d8;
  --vs-accent:#2f80ed;
  --vs-accent-dark:#1f6fe0;
  --vs-bg:#eef3fa;
  --vs-border:#d6e0ee;
  --vs-border-soft:#e8eef8;
  --vs-muted:#6d7e95;
  --vs-success:#24a35a;
  --vs-warning:#f39c12;
  --vs-danger:#eb5757;
  --vs-info:#6c5ce7;
}
body{background:linear-gradient(180deg,#eef4fb 0%,#f7faff 100%)}
.sidebar{width:246px;background:linear-gradient(180deg,#11263b 0%,#0e2031 100%);border-right:1px solid rgba(255,255,255,.08);box-shadow:12px 0 28px rgba(8,20,40,.10)}
.main-area{margin-left:246px}
.statusbar{left:246px;background:linear-gradient(90deg,var(--vs-accent),#1b66db)}
.brand{height:58px;padding:10px 12px;background:rgba(255,255,255,.03);border-bottom:1px solid rgba(255,255,255,.08)}
.brand-mark{width:34px;height:34px;border-radius:10px;background:linear-gradient(180deg,#49a2ff,#2f80ed);box-shadow:0 8px 18px rgba(47,128,237,.35)}
.brand-copy strong{font-size:13.2px;color:#fff;font-weight:700}
.brand-copy small{font-size:10.2px;color:#9bb1c9}
.side-nav{padding:10px 8px 12px}
.side-nav.side-nav-groups{display:flex;flex-direction:column;gap:8px}
.nav-group{border:1px solid rgba(255,255,255,.06);border-radius:12px;background:rgba(255,255,255,.02);overflow:hidden}
.nav-group-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;background:transparent;border:0;color:#ecf5ff;padding:10px 12px;font-size:11.4px;font-weight:700;letter-spacing:.01em;text-align:left}
.nav-group-toggle:hover{background:rgba(47,128,237,.12)}
.nav-group-main{display:flex;align-items:center;gap:10px;min-width:0}
.nav-group-main i{width:20px;height:20px;display:grid;place-items:center;border-radius:7px;background:rgba(47,128,237,.18);color:#7fc1ff;font-size:12px;flex:0 0 20px}
.nav-group-main span:last-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nav-group-arrow{transition:transform .2s ease;color:#9dc3ee;font-size:12px}
.nav-group.is-open .nav-group-arrow{transform:rotate(180deg)}
.nav-group-menu{display:none;padding:0 6px 8px}
.nav-group.is-open .nav-group-menu{display:block}
.side-nav .nav-group-menu a{height:34px;margin:3px 0;border-radius:10px;padding:0 10px 0 12px;font-weight:600;color:#d7e7fb;gap:9px}
.side-nav .nav-group-menu a i{width:18px;font-size:13px;color:#a6c7ee}
.side-nav .nav-group-menu a:hover{background:rgba(47,128,237,.13);color:#fff}
.side-nav .nav-group-menu a.active{background:linear-gradient(90deg,#2f80ed,#4096ff);box-shadow:0 8px 18px rgba(47,128,237,.28);color:#fff}
.side-nav .nav-group-menu a.active i{color:#fff}
.side-nav .nav-group-menu a.active:before{display:none}
.sidebar-user{height:60px;padding:10px;background:rgba(255,255,255,.03);border-top:1px solid rgba(255,255,255,.07)}
.avatar-sm{border-radius:10px;background:linear-gradient(180deg,#4da3ff,#2f80ed);box-shadow:0 8px 18px rgba(47,128,237,.25)}
.sidebar-user strong{font-size:11px;color:#fff}
.sidebar-user small{font-size:9.3px;color:#9bb1c9}
.sidebar-profile-link{border-radius:10px}
.sidebar-profile-link:hover{background:rgba(47,128,237,.12)}
.topbar{height:56px;background:linear-gradient(90deg,#2f80ed 0%,#2d9cff 100%);border-bottom:0;box-shadow:0 8px 24px rgba(47,128,237,.20)}
.page-heading h1,.page-heading span{color:#fff}
.page-heading span{opacity:.84}
.icon-btn{width:32px;height:32px;border:1px solid rgba(255,255,255,.24);background:rgba(255,255,255,.12);color:#fff;border-radius:10px}
.icon-btn:hover{background:rgba(255,255,255,.18);color:#fff}
.live-top-chip,.date-chip{height:32px;border-radius:10px;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.14);color:#fff}
.live-top-chip em,.live-top-chip span,.date-chip{color:#fff}
.notification-bell-btn .notification-badge{background:#ff5577!important}
.quick-entry-top{border-radius:10px;background:#ffffff!important;color:#1d68db!important;border-color:#ffffff!important;font-weight:700;box-shadow:0 10px 24px rgba(20,67,160,.16)!important}
.quick-entry-top:hover{background:#f5f9ff!important;color:#165cbf!important}
.card-clean,.section-card,.compact-panel,.modal-content{border-color:#d9e5f3;box-shadow:0 8px 24px rgba(16,41,72,.05)}
.section-card{border-radius:14px;overflow:hidden}
.section-card>.section-title{background:linear-gradient(90deg,#1065cc,#238bff)!important;border-bottom-color:#1a73df!important;padding:9px 12px}
.section-card>.section-title h2{font-size:12.5px;font-weight:700}
.table thead th,.table.dataTable thead th,.table.dataTable thead td{background:linear-gradient(90deg,#2f80ed,#2491ff)!important;border-color:#1d6fdd!important}
.btn{border-radius:10px;font-weight:700}
.btn-primary{background:linear-gradient(180deg,#2f80ed,#1f73e8);border-color:#1f73e8}
.btn-primary:hover,.btn-primary:focus{background:linear-gradient(180deg,#2777df,#1968d9);border-color:#1968d9}
.btn-success{background:linear-gradient(180deg,#29b765,#22a354);border-color:#22a354}
.btn-danger{background:linear-gradient(180deg,#ef6464,#e14b4b);border-color:#e14b4b}
.btn-warning{background:linear-gradient(180deg,#f6b13a,#f39c12);border-color:#f39c12;color:#fff}
.form-control,.form-select,.input-group-text{border-radius:10px!important;border-color:#d5dfed}
.form-control:focus,.form-select:focus{box-shadow:0 0 0 .15rem rgba(47,128,237,.18);border-color:#2f80ed}
body.sidebar-hidden .sidebar{transform:none;width:72px}
body.sidebar-hidden .main-area{margin-left:72px!important}
body.sidebar-hidden .statusbar{left:72px!important}
body.sidebar-hidden .brand{justify-content:center;padding:10px 6px}
body.sidebar-hidden .brand-copy,body.sidebar-hidden .sidebar-user-copy{display:none!important}
body.sidebar-hidden .brand-mark{margin:0}
body.sidebar-hidden .side-nav{padding:10px 6px}
body.sidebar-hidden .nav-group{border-radius:12px}
body.sidebar-hidden .nav-group-toggle{padding:10px 8px;justify-content:center}
body.sidebar-hidden .nav-group-main{justify-content:center;gap:0;width:100%}
body.sidebar-hidden .nav-group-main span:last-child,body.sidebar-hidden .nav-group-arrow{display:none!important}
body.sidebar-hidden .nav-group-menu{display:none!important}
body.sidebar-hidden .nav-group-toggle::after{content:attr(data-side-label);position:absolute;left:calc(100% + 10px);top:50%;transform:translateY(-50%);background:#132d46;color:#fff;padding:7px 10px;border-radius:9px;font-size:11px;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;box-shadow:0 10px 24px rgba(6,20,35,.18)}
body.sidebar-hidden .nav-group-toggle:hover::after{opacity:1;visibility:visible}
body.sidebar-hidden .sidebar-user{flex-direction:column;gap:3px;padding:7px 4px}
body.sidebar-hidden .sidebar-profile-link{flex:0 0 34px;width:34px;height:34px;padding:2px;justify-content:center}
body.sidebar-hidden .sidebar-logout{width:24px;text-align:center}
@media(max-width:991px){
  .sidebar{width:246px}
  .main-area,.statusbar{left:0;margin-left:0!important}
}

/* ==========================================================
   FASE UI v27 - CORRECCIÓN: ACORDEONES SOBRIOS + ESQUINAS CUADRADAS
   Mantiene la paleta viva del v26, pero elimina el efecto ovalado.
   Los grupos del sidebar vuelven al mismo tono oscuro del menú.
   ========================================================== */

/* Sidebar: grupos integrados al mismo color, sin tarjetas/burbujas */
.side-nav.side-nav-groups{gap:2px!important;padding:8px 6px 10px!important}
.nav-group{
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  overflow:visible!important;
  box-shadow:none!important;
}
.nav-group-toggle{
  min-height:32px!important;
  padding:0 9px!important;
  border-radius:2px!important;
  background:transparent!important;
  color:#dbe9f7!important;
  border:0!important;
  font-weight:650!important;
}
.nav-group-toggle:hover,
.nav-group.is-open>.nav-group-toggle{
  background:#17344e!important;
  color:#fff!important;
}
.nav-group-main i{
  width:18px!important;
  height:18px!important;
  border-radius:0!important;
  background:transparent!important;
  color:#9fc7ed!important;
  font-size:13px!important;
}
.nav-group.is-open .nav-group-main i{color:#fff!important}
.nav-group-arrow{color:#9fc0df!important}
.nav-group-menu{padding:1px 0 4px 11px!important}
.side-nav .nav-group-menu a{
  height:31px!important;
  margin:1px 0!important;
  padding:0 8px!important;
  border-radius:2px!important;
  background:transparent!important;
  box-shadow:none!important;
  font-weight:600!important;
}
.side-nav .nav-group-menu a:hover{
  background:#1a3b59!important;
  color:#fff!important;
}
.side-nav .nav-group-menu a.active{
  background:#2f80ed!important;
  color:#fff!important;
  box-shadow:none!important;
}

/* General: diseño cuadrado/compacto, no ovalado */
.brand-mark,
.avatar-sm,
.sidebar-profile-link,
.icon-btn,
.live-top-chip,
.date-chip,
.quick-entry-top,
.card-clean,
.section-card,
.compact-panel,
.modal-content,
.btn,
.form-control,
.form-select,
.input-group-text,
.badge,
.alert,
.alert-soft,
.quick-btn,
.person-icon,
.visitor-result,
.relation-item,
.swal2-popup,
.swal2-confirm,
.swal2-cancel,
.notification-dropdown,
.notification-dropdown-head,
.notification-dropdown-foot{
  border-radius:2px!important;
}

/* Topbar: conserva azul vivo pero con controles cuadrados */
.topbar{background:#2f80ed!important;box-shadow:0 3px 10px rgba(47,128,237,.18)!important}
.icon-btn{background:rgba(255,255,255,.12)!important}
.live-top-chip,.date-chip{background:rgba(255,255,255,.12)!important}
.quick-entry-top{box-shadow:none!important}

/* Paneles y encabezados sin esquinas redondeadas */
.section-card{overflow:hidden!important}
.section-card>.section-title{
  background:#0d6fa8!important;
  border-radius:0!important;
  box-shadow:none!important;
}
.table thead th,.table.dataTable thead th,.table.dataTable thead td{
  background:#2f80ed!important;
}

/* Botones: colores vivos, forma rectangular */
.btn-primary{background:#2f80ed!important;border-color:#2f80ed!important}
.btn-primary:hover,.btn-primary:focus{background:#236fd8!important;border-color:#236fd8!important}
.btn-success{background:#24a35a!important;border-color:#24a35a!important}
.btn-danger{background:#eb5757!important;border-color:#eb5757!important}
.btn-warning{background:#f39c12!important;border-color:#f39c12!important;color:#fff!important}

/* Sidebar contraído: iconos cuadrados, sin burbujas */
body.sidebar-hidden .nav-group{border-radius:0!important}
body.sidebar-hidden .nav-group-toggle{border-radius:2px!important;padding:0 7px!important;height:34px!important;min-height:34px!important}
body.sidebar-hidden .nav-group-main i{background:transparent!important;border-radius:0!important}
body.sidebar-hidden .nav-group-toggle::after{border-radius:2px!important}

/* Modales y SweetAlert: compactos y cuadrados */
.modal-header,.modal-footer{border-radius:0!important}
.modal-header .btn-close{border-radius:2px!important}
.swal2-popup{border-radius:3px!important}

/* DataTables y paginación cuadradas */
.dt-container .dt-search input,
.dt-container .dt-length select,
.dt-container .dt-paging .dt-paging-button,
.page-link{
  border-radius:2px!important;
}


/* ==========================================================
   UI v28 - MENÚS AGRUPADOS EN ACORDEÓN EXCLUSIVO
   Mantiene la paleta viva y el estilo cuadrado de v27.
   ========================================================== */
.side-nav.side-nav-groups{gap:2px!important;padding:8px 6px 10px!important}
.nav-group{border:0!important;border-radius:0!important;background:transparent!important;overflow:visible!important}
.nav-group-toggle{min-height:34px;padding:0 9px!important;border-radius:0!important;background:transparent!important;color:#dce8f5!important;font-weight:700!important;border-left:3px solid transparent!important}
.nav-group-toggle:hover{background:#163552!important;border-left-color:#2f80ed!important}
.nav-group.is-open>.nav-group-toggle{background:#173754!important;color:#fff!important;border-left-color:#2f80ed!important}
.nav-group-main i{background:transparent!important;border-radius:0!important;color:#9fc8f3!important;width:18px!important;height:18px!important}
.nav-group-menu{padding:2px 0 4px 12px!important;background:transparent!important}
.side-nav .nav-group-menu a{height:31px!important;margin:1px 0!important;border-radius:0!important;padding:0 9px 0 12px!important;background:transparent!important}
.side-nav .nav-group-menu a:hover{background:#183b5b!important}
.side-nav .nav-group-menu a.active{background:#2f80ed!important;box-shadow:none!important;border-left:3px solid #8dc9ff!important;padding-left:9px!important}
body.sidebar-hidden .nav-group-toggle{border-left:0!important}
body.sidebar-hidden .nav-group{margin-bottom:2px!important}


/* ==========================================================
   FASE 18 v30 - CHECK-IN EXPRESS / KIOSCO DE RECEPCIÓN
   ========================================================== */
.kiosk-shell{max-width:1500px;margin:0 auto}.kiosk-main-card{min-height:610px}.kiosk-methods{display:grid;grid-template-columns:1fr 1fr;border:1px solid #d4dce7;background:#f4f7fb;margin-bottom:12px}.kiosk-method{border:0;border-right:1px solid #d4dce7;background:#f4f7fb;color:#394b61;min-height:72px;display:grid;grid-template-columns:38px 1fr;grid-template-rows:auto auto;text-align:left;padding:10px 14px}.kiosk-method:last-child{border-right:0}.kiosk-method>i{grid-row:1/3;font-size:24px;color:#2479df;align-self:center}.kiosk-method span{font-size:13px;font-weight:700}.kiosk-method small{font-size:10px;color:#748399}.kiosk-method.active{background:#e8f2ff;box-shadow:inset 0 -3px 0 #2f80ed}.kiosk-pane{padding:6px 2px 12px}.kiosk-search-group .form-control{height:42px;font-size:18px;font-weight:700;letter-spacing:.08em}.kiosk-search-group .btn{min-width:120px}.kiosk-result{border:1px solid #cfdced;background:#fff;margin-top:12px;padding:12px}.kiosk-person{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:12px;align-items:center}.kiosk-person-photo{width:64px;height:64px;border:1px solid #cbd8e8;background:#e9f3ff;display:grid;place-items:center;overflow:hidden;color:#2368be;font-size:24px;font-weight:800}.kiosk-person-photo img{width:100%;height:100%;object-fit:cover}.kiosk-person-info small{display:block;font-size:9px;font-weight:800;letter-spacing:.08em;color:#6d7e95}.kiosk-person-info h3{font-size:17px;margin:3px 0 5px;font-weight:750;color:#1d2d42}.kiosk-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap;color:#5c6c80;font-size:10.5px}.kiosk-person-action .btn{min-width:150px}.kiosk-children{border-top:1px solid #e3eaf3;margin-top:10px;padding-top:10px}.kiosk-children>b{display:block;font-size:10px;color:#66788f;margin-bottom:6px}.kiosk-children>div{display:flex;gap:6px;flex-wrap:wrap}.kiosk-child{border:1px solid #d5e0ed;background:#f7faff;padding:6px 8px;display:flex;gap:5px;align-items:center;font-size:10.5px}.kiosk-child i{color:#2f80ed}.kiosk-child small{color:#75859a;border-left:1px solid #ccd7e4;padding-left:6px}.kiosk-quick-actions{display:grid;grid-template-columns:1fr;gap:6px}.kiosk-quick-actions .quick-btn{min-height:52px}.kiosk-quick-actions .quick-btn span{display:block}.kiosk-quick-actions .quick-btn b,.kiosk-quick-actions .quick-btn small{display:block}.kiosk-quick-actions .quick-btn small{color:#718197;margin-top:2px}.kiosk-qr-reader{min-height:300px;border:1px solid #d2dce8;background:#f7f9fc}.kiosk-qr-status{border:1px solid #d5e0ed;border-top:0;background:#eef4fb;padding:7px 9px;font-size:10px;color:#52667d}.kiosk-invitation-summary{display:flex;gap:10px;flex-wrap:wrap;border-top:1px solid #e3eaf3;margin-top:10px;padding-top:10px;font-size:10.5px;color:#5f7085}.kiosk-invitation-summary span{background:#f5f8fc;border:1px solid #dce5f0;padding:6px 8px}.kiosk-recent-list .mini-row{padding:7px 2px}
@media(max-width:767px){.kiosk-methods{grid-template-columns:1fr}.kiosk-method{border-right:0;border-bottom:1px solid #d4dce7}.kiosk-method:last-child{border-bottom:0}.kiosk-person{grid-template-columns:52px 1fr}.kiosk-person-photo{width:52px;height:52px}.kiosk-person-action{grid-column:1/3}.kiosk-person-action .btn{width:100%}}


/* FASE 19 - Escáner universal DNI / QR / barras */
.qr-reader,.kiosk-qr-reader{position:relative;overflow:hidden;background:#f7f9fc}
.qr-reader video,.kiosk-qr-reader video{max-width:100%;object-fit:cover}
.qr-reader__scan_region,.kiosk-qr-reader__scan_region{min-height:180px}
#qr_manual_token,#kioskQrManual{font-family:Consolas,"Courier New",monospace;letter-spacing:.01em}
.scan-format-note{font-size:9.5px;color:#6b7d91}


/* ==========================================================
   FASE 20 v32 - MODAL ESCÁNER ACTUALIZADO
   Diseño cuadrado, controles de cámara y lector USB visibles.
   ========================================================== */
.scanner-modal-dialog{max-width:850px!important}
.scanner-modal-content{border-radius:0!important;overflow:hidden}
.scanner-modal-body{padding:10px!important;background:#f4f7fb}
.scanner-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(280px,.85fr);gap:10px}
.scanner-camera-panel,.scanner-manual-panel{background:#fff;border:1px solid #cfd9e6;min-width:0}
.scanner-panel-head{min-height:48px;padding:8px 10px;border-bottom:1px solid #d7e0eb;background:#eef4fb;display:flex;align-items:center;justify-content:space-between;gap:8px}
.scanner-panel-head b{display:block;font-size:11.5px;color:#18324e}
.scanner-panel-head small{display:block;color:#6f8093;margin-top:2px}
.scanner-reader{min-height:275px;background:#eef2f6;border:0!important}
.scanner-reader video{width:100%!important;min-height:275px;max-height:340px;object-fit:cover!important}
.qr-scan-status{min-height:36px;padding:8px 10px;border-top:1px solid #d7e0eb;background:#edf4fc;color:#49627c;font-size:10.5px;display:flex;align-items:center}
.qr-scan-status.ok{background:#eaf8f0;color:#176c42;border-color:#bee6cf}
.qr-scan-status.error{background:#fff0f0;color:#a93636;border-color:#efc5c5}
.qr-scan-status.warning{background:#fff8e7;color:#7e5b0c;border-color:#ecdba8}
.scanner-camera-controls{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:6px;padding:8px;border-top:1px solid #e0e7f0;background:#fff}
.scanner-camera-controls .form-select,.scanner-camera-controls .btn{border-radius:0!important}
.scanner-help{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border-top:1px solid #f0c2c2;background:#fff4f4;color:#943737;font-size:10px}
.scanner-help>div{display:flex;align-items:flex-start;gap:6px;min-width:0}
.scanner-live-dot{display:inline-flex;align-items:center;gap:5px;font-size:8.5px;font-weight:800;letter-spacing:.04em;color:#6b7d91;white-space:nowrap}
.scanner-live-dot i{width:7px;height:7px;background:#95a2b0;display:inline-block;border-radius:50%}
.scanner-live-dot.active{color:#197545}.scanner-live-dot.active i{background:#22a35a;box-shadow:0 0 0 3px rgba(34,163,90,.12)}
.scanner-live-dot.error{color:#aa3f3f}.scanner-live-dot.error i{background:#e45757}
.scanner-manual-panel{padding-bottom:10px}
.scanner-manual-panel>.scanner-panel-head{margin-bottom:10px}
.scanner-usb-box{margin:0 10px 10px;padding:10px;border:1px solid #d6e1ee;background:#f8fbff;display:grid;grid-template-columns:42px 1fr;gap:9px;align-items:center}
.scanner-usb-icon{width:42px;height:42px;background:#2f80ed;color:#fff;display:grid;place-items:center;font-size:20px}
.scanner-usb-box p{margin:0;color:#52677d;font-size:10.2px;line-height:1.45}
.scanner-manual-panel>.form-label,.scanner-manual-group,.scanner-format-list,.scanner-security-note{margin-left:10px;margin-right:10px}
.scanner-manual-group .form-control,.scanner-manual-group .btn{border-radius:0!important}
.scanner-format-list{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-top:12px;padding-top:10px;border-top:1px solid #e1e8f0}
.scanner-format-list span{font-size:9.3px;color:#5f7186}.scanner-format-list i{color:#1d9b55;margin-right:3px}
.scanner-security-note{margin-top:12px;padding:8px;border:1px solid #cfe0f2;background:#edf6ff;display:flex;align-items:flex-start;gap:7px;color:#46627e;font-size:9.5px}
.scanner-security-note i{color:#2f80ed;font-size:13px}
.scanner-modal-footer{background:#fff!important;border-top:1px solid #ced8e5!important}
.scanner-footer-note{font-size:9.5px;color:#697b90}
.scanner-modal-footer .btn{border-radius:0!important}
@media(max-width:767px){.scanner-grid{grid-template-columns:1fr}.scanner-reader,.scanner-reader video{min-height:230px}.scanner-camera-controls{grid-template-columns:1fr 1fr}.scanner-camera-controls .form-select{grid-column:1/3}.scanner-format-list{grid-template-columns:1fr}.scanner-footer-note{display:none}}


/* FASE 21 - enlaces compactos de catálogo rápido */
.quick-catalog-link{font-size:9.5px!important;font-weight:700!important;color:#1f73e8!important;text-decoration:none!important;border-radius:0!important;min-height:auto!important;line-height:1.2!important}
.quick-catalog-link:hover{color:#155ab8!important;text-decoration:underline!important}


/* FASE 23 v35 · Portal Mis visitas */
.host-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.host-kpi{min-height:66px;background:#fff;border:1px solid var(--vs-border);display:flex;align-items:center;gap:10px;padding:10px}.host-kpi>i{width:36px;height:36px;display:grid;place-items:center;background:#eaf3ff;color:#1f73e8;font-size:17px}.host-kpi b{display:block;font-size:20px;line-height:1}.host-kpi span{display:block;margin-top:3px;font-size:9.5px;color:var(--vs-muted);font-weight:700;text-transform:uppercase}.host-kpi-wait>i{background:#fff4d9;color:#c47b00}.host-kpi-attention>i{background:#e9f3ff;color:#156fd1}.host-kpi-done>i{background:#e8f7ef;color:#16825d}.host-visit-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.host-visit-card{border:1px solid #d8e3f0;background:#fff;padding:10px}.host-visit-card.is-focused{outline:2px solid var(--vs-accent);outline-offset:-2px}.host-visit-head{display:flex;justify-content:space-between;gap:8px;align-items:flex-start;border-bottom:1px solid #e8eef6;padding-bottom:8px}.host-person{display:flex;align-items:center;gap:8px;min-width:0}.host-person img,.host-person>span{width:36px;height:36px;object-fit:cover;display:grid;place-items:center;background:#eaf3ff;color:#1f73e8;font-weight:800}.host-person b,.host-person small{display:block}.host-person b{font-size:11.5px}.host-person small{font-size:9.5px;color:var(--vs-muted)}.host-visit-data{display:grid;grid-template-columns:1.2fr 1fr .7fr;gap:8px;padding:9px 0}.host-visit-data>div{min-width:0}.host-visit-data small,.host-visit-data b,.host-visit-data em{display:block}.host-visit-data small{font-size:8.8px;color:var(--vs-muted);text-transform:uppercase;font-weight:700}.host-visit-data b{font-size:10.8px;margin-top:2px}.host-visit-data em{font-size:9.2px;color:#66788e;font-style:normal;margin-top:1px}.host-response-state{padding:6px 7px;background:#f5f9ff;border:1px solid #dce8f7;color:#355f8a;font-size:9.8px}.host-visit-actions{display:flex;justify-content:flex-end;gap:5px;flex-wrap:wrap;padding-top:8px}.host-empty{min-height:130px}.host-empty i{font-size:25px;color:#24a35a;display:block;margin-bottom:5px}@media(max-width:900px){.host-kpis{grid-template-columns:repeat(2,1fr)}.host-visit-grid{grid-template-columns:1fr}}@media(max-width:575px){.host-kpis{grid-template-columns:1fr 1fr}.host-visit-data{grid-template-columns:1fr}.host-visit-actions .btn{flex:1 1 auto}}


/* Fase 24 v36 · Derivaciones y trazabilidad */
.visit-detail-head{padding:10px 12px;display:flex;align-items:center;justify-content:space-between;gap:10px}.visit-detail-person{display:flex;align-items:center;gap:9px}.visit-detail-person h2{font-size:14px;margin:0 0 2px;font-weight:700}.visit-detail-person span{font-size:10px;color:var(--vs-muted)}.visit-detail-actions{display:flex;align-items:center;gap:5px;flex-wrap:wrap}.detail-info-card{padding:9px 10px;min-height:68px}.detail-info-card small,.detail-info-card b,.detail-info-card span{display:block}.detail-info-card small{color:var(--vs-muted);font-size:9px!important;text-transform:uppercase;font-weight:700}.detail-info-card b{font-size:11.5px;margin-top:2px}.detail-info-card span{font-size:9.5px;color:var(--vs-muted);margin-top:2px}.visit-timeline{position:relative;padding:2px 0 4px 11px}.visit-timeline:before{content:"";position:absolute;left:18px;top:8px;bottom:8px;width:2px;background:#d7e5f5}.timeline-item{position:relative;display:flex;gap:10px;padding:7px 0}.timeline-item>i{width:16px;height:16px;border-radius:2px;background:#e8f2ff;color:#1d6ed8;display:grid;place-items:center;font-size:9px;z-index:1;margin-top:1px}.timeline-item>div{min-width:0;flex:1}.timeline-item b,.timeline-item span,.timeline-item small{display:block}.timeline-item b{font-size:10.8px}.timeline-item span{font-size:9.3px;color:#6c7b8d;margin-top:1px}.timeline-item small{font-size:9.5px!important;margin-top:2px;color:#46596e}.timeline-item em{display:inline-flex;align-items:center;gap:3px;margin:4px 6px 0 0;font-style:normal;font-size:8.9px;color:#526f8e;background:#edf5ff;border:1px solid #d9e9fb;padding:2px 4px;border-radius:2px}.timeline-referral>i{background:#fff3d6;color:#b26a00}.timeline-exit>i{background:#e8f7ef;color:#16825d}.detail-summary-list{display:flex;flex-direction:column}.detail-summary-list>div{display:flex;justify-content:space-between;gap:8px;padding:6px 2px;border-bottom:1px solid var(--vs-border-soft)}.detail-summary-list>div:last-child{border-bottom:0}.detail-summary-list span{font-size:9.5px;color:var(--vs-muted)}.detail-summary-list b{font-size:10px;text-align:right}.swal2-html-container .form-select,.swal2-html-container .form-control{text-align:left}
@media(max-width:767px){.visit-detail-head{align-items:flex-start;flex-direction:column}.visit-detail-actions{width:100%}}


/* FASE 25 / v37 - Resultado de atención y seguimientos */
.result-context{border:1px solid #d8e2ef;background:#f8fbff;padding:9px 10px;min-height:64px;border-radius:2px}.result-context small,.result-context b,.result-context span{display:block}.result-context small{font-size:9px;color:#6c7f95;text-transform:uppercase;font-weight:700}.result-context b{font-size:11.5px;margin-top:2px}.result-context span{font-size:9.5px;color:#65758a;margin-top:2px}.followup-toggle-box{border:1px solid #cfe0f5;background:#f3f8ff;padding:9px 10px;border-radius:2px}.followup-toggle-box small{display:block;color:#6d7f94;margin:3px 0 0 22px}.followup-status-card{border-left:3px solid #f39c12;background:#fff9e9;border-top:1px solid #eddcb0;border-right:1px solid #eddcb0;border-bottom:1px solid #eddcb0;padding:9px}.followup-status-card.is-overdue{border-left-color:#e35252;background:#fff0f0;border-color:#efcccc}.followup-status-card small,.followup-status-card b,.followup-status-card span,.followup-status-card em{display:block}.followup-status-card small{font-size:9px;color:#778}.followup-status-card b{font-size:13px;margin:2px 0}.followup-status-card span{font-weight:600}.followup-status-card em{font-size:9.5px;color:#6a7788;margin-top:4px;font-style:normal}.followup-kpi-overdue i{color:#d94b4b!important}.followup-row-overdue>td{background:#fff6f6!important}.empty-state.compact{padding:12px}.empty-state.compact i{display:block;font-size:18px;margin-bottom:3px}

/* ==========================================================
   FASE 26 / v38 - INDICADORES DE GESTIÓN
   ========================================================== */
.management-filter-form{display:grid;grid-template-columns:150px 150px auto auto auto;gap:7px;align-items:end}.management-filter-form .btn{border-radius:0!important;white-space:nowrap}.metric-kpi{min-height:78px;border:1px solid #d8e2ef;background:#fff;display:flex;align-items:center;gap:9px;padding:9px 10px}.metric-kpi-icon{width:34px;height:34px;flex:0 0 34px;display:grid;place-items:center;background:#eaf3ff;color:#2f80ed;font-size:16px}.metric-kpi strong,.metric-kpi span,.metric-kpi small{display:block}.metric-kpi strong{font-size:18px;line-height:1.05;color:#203248}.metric-kpi span{font-size:9px;text-transform:uppercase;font-weight:800;color:#5f7187;margin-top:3px}.metric-kpi small{font-size:8.8px!important;color:#8a98a9;margin-top:2px}.metric-cyan .metric-kpi-icon{background:#e6f8fb;color:#1595ab}.metric-purple .metric-kpi-icon{background:#f0ebff;color:#6c5ce7}.metric-green .metric-kpi-icon{background:#e8f7ef;color:#16825d}.metric-orange .metric-kpi-icon{background:#fff4dc;color:#c77b00}.metric-red .metric-kpi-icon{background:#ffeded;color:#d84d4d}.management-summary-list{display:flex;flex-direction:column}.management-summary-list>div{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 2px;border-bottom:1px solid #e7edf5}.management-summary-list>div:last-child{border-bottom:0}.management-summary-list span{font-size:10px;color:#65778d}.management-summary-list b{font-size:11px;color:#20364e}.management-table th,.management-table td{white-space:nowrap}.management-table td:first-child,.management-table th:first-child{white-space:normal;min-width:150px}@media(max-width:1000px){.management-filter-form{grid-template-columns:1fr 1fr 1fr}.management-filter-form>div{min-width:0}}@media(max-width:650px){.management-filter-form{grid-template-columns:1fr 1fr}.management-filter-form .btn{width:100%}.management-kpis .col-6{width:100%}.metric-kpi{min-height:64px}}

/* Formación Docente */
.table thead th{background:#1f73f1!important;color:#fff!important;font-weight:700;font-size:12px;white-space:nowrap}.card-header{background:#fff}.modal-header{background:#1f73f1;color:#fff}.modal-header .btn-close{filter:brightness(0) invert(1)}

/* ==========================================================
   FORMACIÓN DOCENTE · FASE 1 - CAPACITACIONES
   ========================================================== */
.training-kpis .stat-card{min-height:60px}.training-main-card{border:1px solid var(--vs-border)!important}.training-main-card>.card-header{padding:7px 9px}.training-main-card>.card-header small{font-size:9px!important}.training-filter{display:grid;grid-template-columns:minmax(260px,1fr) 130px 130px 130px auto;gap:6px;align-items:end}.training-filter-search{min-width:0}.training-filter-actions{display:flex;gap:4px}.training-table td{height:44px}.training-actions-col{width:82px}.training-title-cell b,.training-title-cell span,.training-title-cell small{display:block}.training-title-cell b{font-size:11.2px;color:#22364b}.training-title-cell span{font-size:9px;color:#1f73b9;font-weight:700;margin-top:1px}.training-title-cell small{margin-top:2px;color:#6b7a8b}.training-chip{display:inline-block;border:1px solid #cfe0f2;background:#edf5ff;color:#245f91;font-size:9px;font-weight:700;padding:2px 4px}.training-count{display:inline-grid;place-items:center;min-width:22px;height:22px;border:1px solid #d7e1ed;background:#f8fafc;font-weight:700;color:#36506b}.training-row-actions{display:flex;gap:3px;justify-content:center;white-space:nowrap}.training-row-actions .btn{width:27px;height:27px;padding:0;display:inline-grid;place-items:center}.training-form-section{border:1px solid #dbe4ee;background:#fbfcfe;padding:8px}.training-form-title{display:flex;align-items:center;gap:5px;font-size:10px;font-weight:800;color:#285b88;text-transform:uppercase;margin:-8px -8px 8px;padding:6px 8px;border-bottom:1px solid #dbe4ee;background:#f1f6fb}.training-summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.training-summary-grid>div{border:1px solid #dbe4ee;background:#f8fbff;padding:7px 8px;min-height:50px}.training-summary-grid small,.training-summary-grid b{display:block}.training-summary-grid small{font-size:8.8px!important;color:#6b7d90;text-transform:uppercase;font-weight:700}.training-summary-grid b{font-size:11px;margin-top:3px}.training-tabs .nav-link{border-radius:0!important;font-size:10px;font-weight:700;padding:6px 9px;color:#4c6178}.training-tabs .nav-link.active{color:#1f73d8}.training-info-box{border:1px solid #e0e7ef;background:#fff;padding:8px;min-height:72px}.training-info-box small,.training-info-box b{display:block}.training-info-box small{font-size:8.8px!important;text-transform:uppercase;color:#718296;font-weight:800;margin-bottom:4px}.training-info-box p{font-size:10.5px;line-height:1.45;margin:0;color:#35495d}.training-info-box b{font-size:10.5px;color:#35495d}.training-component-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}.training-component-grid a{border:1px solid #dbe4ee;background:#fff;color:#263c52;text-decoration:none;padding:10px;min-height:78px;display:grid;grid-template-columns:28px 1fr;grid-template-rows:auto auto;column-gap:7px}.training-component-grid a:hover{border-color:#8db8e8;background:#f7fbff}.training-component-grid i{grid-row:1/3;width:28px;height:28px;background:#eaf3ff;color:#1f73d8;display:grid;place-items:center;font-size:14px}.training-component-grid b{font-size:10.5px}.training-component-grid span{font-size:9px;color:#718094}.modal-dialog.modal-xl{max-width:940px}
@media(max-width:1050px){.training-filter{grid-template-columns:1fr 1fr 1fr}.training-filter-search{grid-column:span 2}.training-component-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:700px){.training-filter{grid-template-columns:1fr 1fr}.training-filter-search{grid-column:1/3}.training-summary-grid{grid-template-columns:1fr 1fr}.training-component-grid{grid-template-columns:1fr}.training-table{min-width:900px}}


/* ==========================================================
   FORMACIÓN DOCENTE · FASE 2 - PARTICIPANTES Y MATRÍCULAS
   ========================================================== */
.training-summary-grid{grid-template-columns:repeat(5,1fr)}
.participant-filter{grid-template-columns:minmax(320px,1fr) 150px auto}
.participant-table td{height:42px}
.participant-code{display:inline-block;min-width:58px;padding:2px 5px;border:1px solid #c9dbef;background:#eef6ff;color:#195f9f;font-family:Consolas,"Courier New",monospace;font-size:10px;font-weight:800;letter-spacing:.04em;text-align:center}
.enrollment-scroll{max-height:430px;overflow:auto}
.enrollment-scroll thead th{position:sticky;top:0;z-index:2}
.enrolled-list{max-height:350px}
.enrollment-hero{border-left:3px solid #1f73f1!important}
#bulkEnrollForm .form-check-input{border-radius:2px!important;width:15px;height:15px}
#bulkEnrollForm tbody tr:hover{background:#f3f8fe}
@media(max-width:1050px){.training-summary-grid{grid-template-columns:repeat(3,1fr)}.participant-filter{grid-template-columns:1fr 150px auto}}
@media(max-width:700px){.training-summary-grid{grid-template-columns:1fr 1fr}.participant-filter{grid-template-columns:1fr}.participant-table{min-width:900px}.enrollment-scroll{max-height:360px}}
