/* ─── Variables ─────────────────────────────────────────────────────────────── */
:root {
  /* ── Brand tokens (MDD logo colors) — landing only ── */
  --brand-blue:       #1B7BD6;
  --brand-blue-dark:  #1565B8;
  --brand-green:      #54B948;
  --brand-green-dark: #449438;
  --brand-blue-soft:  #EAF4FB;
  --brand-green-soft: #EEF8EC;
  --brand-ink:        #0B1220;
  --brand-paper:      #FAFAF7;

  --blue: #2563EB; --blue-dark: #1D4ED8; --blue-light: #EFF6FF;
  --green: #10B981; --green-light: #ECFDF5;
  --indigo: #6366F1; --indigo-light: #EEF2FF;
  --purple: #8B5CF6; --purple-light: #F5F3FF;
  --orange: #F59E0B; --orange-light: #FFFBEB;
  --red: #EF4444; --red-light: #FEF2F2;
  --amber: #F59E0B; --amber-light: #FFFBEB;
  --teal: #14B8A6; --teal-light: #F0FDFA;

  --bg: #F1F5F9; --card: #FFFFFF;
  --border: #E5E7EB; --border-light: #F3F4F6;
  --text: #1F2937; --text-muted: #6B7280; --text-subtle: #9CA3AF;

  --sidebar-bg: #0F172A; --sidebar-w: 230px;
  --header-h: 58px;

  --radius: 10px; --radius-sm: 7px; --radius-lg: 14px;
  --shadow: 0 1px 3px rgba(0,0,0,0.07), 0 1px 2px rgba(0,0,0,0.04);
  --shadow-md: 0 4px 14px rgba(0,0,0,0.08);
  --shadow-lg: 0 10px 40px rgba(0,0,0,0.12);

  --font: 'Inter', system-ui, -apple-system, sans-serif;
  --t: 150ms ease;
}

/* ─── Reset ─────────────────────────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{font-size:15px;-webkit-font-smoothing:antialiased}
body{font-family:var(--font);color:var(--text);background:var(--bg)}
a{color:inherit;text-decoration:none}
button{cursor:pointer;font-family:var(--font)}
input,textarea,select{font-family:var(--font)}

/* ─── App shell ─────────────────────────────────────────────────────────────── */
.app-layout{display:flex;min-height:100vh}

/* ─── Sidebar ───────────────────────────────────────────────────────────────── */
.sidebar{
  width:var(--sidebar-w);height:100vh;background:var(--sidebar-bg);
  display:flex;flex-direction:column;
  position:fixed;left:0;top:0;z-index:200;
  overflow:hidden; /* prevents content push-out; nav scrolls internally */
}
.sidebar-nav{flex:1;padding:12px 8px;display:flex;flex-direction:column;gap:2px;
  overflow-y:auto;-webkit-overflow-scrolling:touch}
.sidebar-logo{
  display:flex;align-items:center;gap:10px;
  padding:18px 16px 16px;border-bottom:1px solid rgba(255,255,255,0.06);
}
.logo-icon{
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
.logo-text{font-weight:800;font-size:14px;color:#fff;letter-spacing:-0.01em}
.nav-item{
  display:flex;align-items:center;gap:9px;padding:9px 11px;
  border-radius:var(--radius-sm);color:#94A3B8;font-size:13.5px;font-weight:500;
  transition:background var(--t),color var(--t);
}
.nav-item:hover{background:rgba(255,255,255,0.06);color:#CBD5E1}
.nav-item.active{background:rgba(255,255,255,0.1);color:#fff}
.nav-icon{width:17px;height:17px;flex-shrink:0}
.sidebar-footer{padding:12px 8px;border-top:1px solid rgba(255,255,255,0.06);display:flex;flex-direction:column;gap:8px}
.sidebar-user{display:flex;align-items:center;gap:9px;padding:7px 10px}
.user-avatar{
  width:32px;height:32px;background:var(--blue);border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  color:white;font-weight:800;font-size:12px;flex-shrink:0;
}
.sidebar-user .user-info{min-width:0;flex:1}
.user-name{font-size:12px;font-weight:600;color:#E2E8F0;line-height:1.35;word-break:break-word}
.user-role{font-size:11px;color:#64748B;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.btn-logout{
  display:flex;align-items:center;gap:8px;width:100%;padding:8px 11px;
  background:none;border:none;color:#64748B;font-size:13px;font-weight:500;
  border-radius:var(--radius-sm);transition:background var(--t),color var(--t);
}
.btn-logout:hover{background:rgba(239,68,68,0.12);color:#FCA5A5}

/* ─── Main wrapper ──────────────────────────────────────────────────────────── */
/* `max-width:100vw` junto a `margin-left` es lo que provocaba scroll horizontal en
   tableta: 100vw es el ANCHO COMPLETO de la ventana, así que sumado al margen de
   la barra lateral el contenido terminaba fuera de la pantalla. Descontar la barra
   lo deja exacto en cualquier ancho. */
.main-wrapper{margin-left:var(--sidebar-w);flex:1;display:flex;flex-direction:column;min-height:100vh;min-width:0;max-width:calc(100vw - var(--sidebar-w))}

/* ─── Top header ────────────────────────────────────────────────────────────── */
.top-header{
  position:sticky;top:0;z-index:100;
  height:var(--header-h);
  background:rgba(255,255,255,0.95);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--border);
  display:flex;align-items:center;justify-content:space-between;
  padding:0 24px;gap:16px;
}
/* min-width:0 en los dos lados de la barra superior. Sin esto, un elemento de
   flex vale `min-width:auto` y no se encoge por debajo de su contenido: en
   tableta (≈820 px) el bloque derecho medía 764 px, no cedía, y empujaba la
   página 16 px fuera de la pantalla. Era scroll horizontal en TODAS las
   pantallas de la aplicación, no solo en Configuración. */
.top-header-left{display:flex;align-items:center;gap:12px;flex:1;min-width:0}
.top-header-right{display:flex;align-items:center;gap:10px;min-width:0;flex-shrink:0}

.mobile-menu-btn{
  display:none;background:none;border:none;color:var(--text-muted);
  padding:6px;border-radius:var(--radius-sm);cursor:pointer;
  transition:background var(--t);
}
.mobile-menu-btn:hover{background:var(--border-light)}

.top-search-form{flex:1;max-width:460px;min-width:0}
.top-search-wrap{position:relative}
.top-search-icon{
  position:absolute;left:11px;top:50%;transform:translateY(-50%);
  width:15px;height:15px;color:var(--text-muted);
}
.top-search-input{
  width:100%;padding:8px 12px 8px 34px;
  border:1.5px solid var(--border);border-radius:var(--radius-sm);
  font-size:13.5px;color:var(--text);background:var(--bg);
  transition:border-color var(--t),background var(--t);
}
.top-search-input:focus{outline:none;border-color:var(--blue);background:white}

.top-user-btn{
  display:flex;align-items:center;gap:8px;padding:5px 10px 5px 5px;
  border-radius:20px;border:1px solid var(--border);background:white;
  transition:box-shadow var(--t);cursor:pointer;
}
.top-user-btn:hover{box-shadow:var(--shadow)}
.top-avatar{
  width:28px;height:28px;background:var(--blue);border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  color:white;font-weight:700;font-size:11px;
}
.top-user-name{
  font-size:12.5px;font-weight:600;color:var(--text);
  /* 23-ago-2026: `.top-header-right` es `flex-shrink:0`, así que un nombre largo
     —el de un médico con dos apellidos— estiraba la barra superior y sacaba la
     página 23 px a la derecha EN TODAS las pantallas, no solo en Configuración.
     Se ve como una franja en blanco al arrastrar en tableta. El nombre se corta
     con puntos suspensivos; el completo sigue en el menú que abre el botón. */
  max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
@media(max-width:900px){.top-user-name{max-width:110px}}



/* ─── Content area ──────────────────────────────────────────────────────────── */
.main-content{flex:1;background:var(--bg);position:relative}
/* No max-width — content fills the full available width after the sidebar.
   Form pages use .form-container for their own readable width limits. */
.content-inner{padding:28px 32px}

/* ─── Page header ───────────────────────────────────────────────────────────── */
.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:24px}
.page-header-left{flex:1}
.page-title{font-size:21px;font-weight:800;color:var(--text);letter-spacing:-0.02em;margin-bottom:3px}
.page-subtitle{font-size:13.5px;color:var(--text-muted)}
.page-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}
.meta-chip{display:inline-flex;align-items:center;padding:2px 9px;background:var(--border-light);border-radius:20px;font-size:12px;color:var(--text-muted);font-weight:500}
.meta-chip.blood-type{background:#FEF2F2;color:#DC2626;font-weight:700}
.page-actions{display:flex;gap:8px;flex-shrink:0;align-items:center}
.back-link{display:inline-flex;align-items:center;gap:4px;font-size:12.5px;color:var(--text-muted);margin-bottom:6px;transition:color var(--t)}
.back-link:hover{color:var(--blue)}

/* ─── Buttons ───────────────────────────────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 17px;border-radius:var(--radius-sm);font-size:13.5px;font-weight:600;border:1.5px solid transparent;cursor:pointer;transition:all var(--t);white-space:nowrap}
.btn-primary{background:var(--blue);color:white;border-color:var(--blue)}
.btn-primary:hover{background:var(--blue-dark);border-color:var(--blue-dark)}
.btn-outline{background:white;color:var(--blue);border-color:var(--blue)}
.btn-outline:hover{background:var(--blue-light)}
.btn-ghost{background:transparent;color:var(--text-muted);border-color:transparent}
/* 🚨 18-sep-2026 · ESTA CLASE NO EXISTÍA Y DIECINUEVE PANTALLAS LA USABAN.
   `.btn-secondary` se escribía en las plantillas desde hacía meses —«Cobrar sin
   consulta», «Guardar como adjunto», los de ajustes y los de finanzas— y aquí
   no había ninguna regla con ese nombre. El elemento se quedaba con lo que le
   da `.btn` a secas: relleno, tamaño y `border:1.5px solid transparent`. Medido
   en el navegador: fondo `rgba(0,0,0,0)`, borde `rgba(0,0,0,0)`. O sea, texto
   suelto con aire alrededor.

   Importa más de lo que parece: un médico que no ve un recuadro no sabe que
   eso se puede apretar. Es el mismo fallo que «el botón no hace nada», sólo que
   antes de tocarlo.

   Se define como el gris de la casa —blanco con borde— para que acompañe al
   azul primario sin competir con él. No se toca `.btn`, así que ninguna de las
   diecinueve cambia de tamaño ni de posición: sólo aparece el recuadro. */
.btn-secondary{background:var(--card);color:var(--text);border-color:var(--border)}
.btn-secondary:hover{background:var(--bg);border-color:var(--text-subtle)}

/* ─── El desplegable propio de `input.combo` (18-sep-2026) ───────────────────
   Sustituye al `datalist` nativo, que FILTRA sus opciones por lo que ya está
   escrito y por eso no dejaba cambiar una unidad ya elegida. El porqué completo
   está en `static/mdd-combo.js`.

   `position:fixed` y no `absolute`: estos campos viven dentro de una tabla con
   `overflow-x:auto`, y un panel absoluto se recorta contra ese contenedor —
   saldría medio desplegable. El sitio lo calcula el .js en cada apertura. */
.mdd-combo-caja{position:fixed;z-index:9000;background:var(--card);
  border:1px solid var(--border);border-radius:11px;
  box-shadow:0 14px 34px rgba(15,23,42,.18);padding:5px;overflow-y:auto;
  max-height:min(52vh,320px);min-width:150px;font-size:13.5px}
.mdd-combo-caja [data-valor]{padding:9px 11px;border-radius:8px;cursor:pointer;
  color:var(--text);display:flex;align-items:center;justify-content:space-between;
  gap:10px;line-height:1.25}
.mdd-combo-caja [data-valor]:hover,
.mdd-combo-caja .mdd-combo-ojo{background:var(--border-light)}
.mdd-combo-caja .es{font-weight:700;color:var(--blue)}
.mdd-combo-caja .es span{font-weight:700}
/* En un dedo, 34 px no se atinan. WCAG 2.5.5 pide 44. */
@media (hover:none){.mdd-combo-caja [data-valor]{padding:12px 12px;font-size:14px}}
.btn-ghost:hover{background:var(--border-light);color:var(--text)}
.btn-danger{background:var(--red);color:white;border-color:var(--red)}
.btn-danger:hover{background:#DC2626}
.btn-full{width:100%}
.btn-lg{padding:11px 26px;font-size:14.5px;border-radius:var(--radius)}
.btn-sm{padding:6px 13px;font-size:12.5px}
.btn-xs{padding:4px 9px;font-size:11.5px}

/* ─── Cards ─────────────────────────────────────────────────────────────────── */
.card{background:var(--card);border-radius:var(--radius);border:1px solid var(--border);box-shadow:var(--shadow);overflow:hidden;margin-bottom:18px}
.card-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-bottom:1px solid var(--border-light)}
.card-title{font-size:14.5px;font-weight:700;color:var(--text);display:flex;align-items:center;gap:6px}
.card-subtitle{font-size:11.5px;color:var(--text-muted);margin-top:2px}
.card-link{font-size:12.5px;color:var(--blue);font-weight:500}
.card-link:hover{text-decoration:underline}
.card-body{padding:18px}
.card-badge{display:inline-flex;padding:3px 9px;background:var(--blue-light);color:var(--blue);border-radius:20px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:0.04em}
.card-badge.purple{background:var(--purple-light);color:var(--purple)}
.card-danger{border-color:#FECACA}
/* 25-ago-2026: `.card{overflow:hidden}` RECORTABA los menús del autocompletado
   (medicamentos y CIE-10) en el borde de su card, y la card siguiente
   («Pronóstico») parecía taparlos — el médico solo veía dos opciones. Ningún
   z-index gana contra un recorte del ancestro. Esta clase se pone SOLO en las
   cards que alojan un desplegable; el hidden general se queda para las demás
   (hay cards con contenido a sangre que dependen del recorte en las esquinas).
   La vigila tests/test_ui_dropdowns_consulta.py. */
.card.card-desplegable{overflow:visible}
.danger-title{color:var(--red)}
.danger-text{font-size:13px;color:var(--text-muted);margin-bottom:12px;line-height:1.5}

/* ─── Stats ─────────────────────────────────────────────────────────────────── */
.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:20px}
.stat-card{background:var(--card);border-radius:var(--radius);border:1px solid var(--border);box-shadow:var(--shadow);padding:18px;display:flex;align-items:center;gap:14px}
.stat-icon{width:46px;height:46px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.stat-icon svg{width:20px;height:20px}
.stat-icon.blue{background:var(--blue-light);color:var(--blue)}
.stat-icon.green{background:var(--green-light);color:var(--green)}
.stat-icon.indigo{background:var(--indigo-light);color:var(--indigo)}
.stat-icon.purple{background:var(--purple-light);color:var(--purple)}
.stat-icon.orange{background:var(--orange-light);color:var(--orange)}
.stat-icon.red{background:var(--red-light);color:var(--red)}
.stat-icon.gray{background:var(--border-light);color:var(--text-muted)}
.stat-number{font-size:28px;font-weight:900;color:var(--text);letter-spacing:-0.03em;line-height:1}
.stat-label{font-size:11.5px;color:var(--text-muted);margin-top:2px}

/* ─── Quick actions ─────────────────────────────────────────────────────────── */
.quick-actions-row{display:flex;gap:10px;margin-bottom:20px;overflow-x:auto;padding-bottom:4px}
.quick-action-card{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  padding:14px 16px;background:var(--card);border:1px solid var(--border);
  border-radius:var(--radius);cursor:pointer;min-width:90px;flex-shrink:0;
  transition:box-shadow var(--t),transform var(--t);
}
.quick-action-card:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}
.qa-icon{width:40px;height:40px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center}
.qa-icon svg{width:18px;height:18px}
.qa-icon.blue{background:var(--blue-light);color:var(--blue)}
.qa-icon.green{background:var(--green-light);color:var(--green)}
.qa-icon.indigo{background:var(--indigo-light);color:var(--indigo)}
.qa-icon.orange{background:var(--orange-light);color:var(--orange)}
.qa-icon.red{background:var(--red-light);color:var(--red)}
.qa-icon.gray{background:var(--border-light);color:var(--text-muted)}
.qa-label{font-size:11.5px;font-weight:600;color:var(--text);text-align:center;line-height:1.2}

/* ─── Dashboard grid ────────────────────────────────────────────────────────── */
.dashboard-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}

/* ─── Consultation type badges ──────────────────────────────────────────────── */
.consultation-type-badge{display:inline-flex;padding:2px 8px;border-radius:20px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:0.04em}
.consultation-type-badge.general{background:var(--blue-light);color:var(--blue)}
.consultation-type-badge.seguimiento{background:var(--green-light);color:var(--green)}
.consultation-type-badge.urgente{background:var(--red-light);color:var(--red)}
.consultation-type-badge.estudios{background:var(--purple-light);color:var(--purple)}
.consultation-type-badge.documento{background:#F0F9FF;color:#0369A1;border:1px solid #BAE6FD}
.consultation-type-badge.lg{font-size:12px;padding:4px 12px}

/* ─── List items ────────────────────────────────────────────────────────────── */
.list-items{display:flex;flex-direction:column}
.list-item{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid var(--border-light);transition:opacity var(--t)}
.list-item:last-child{border-bottom:none}
.list-item:hover{opacity:0.78}
.list-item-avatar{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:13px;color:white;flex-shrink:0}
.list-item-avatar.blue,.list-item-avatar.general{background:var(--blue)}
.list-item-avatar.green,.list-item-avatar.seguimiento{background:var(--green)}
.list-item-avatar.red,.list-item-avatar.urgente{background:var(--red)}
.list-item-avatar.purple,.list-item-avatar.estudios{background:var(--purple)}
.list-item-content{flex:1;min-width:0}
.list-item-title{font-size:13.5px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-item-subtitle{font-size:12px;color:var(--text-muted);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-item-meta{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex-shrink:0}
.allergy-dot{color:var(--red);font-size:10px;margin-left:4px}

/* ─── Badges ────────────────────────────────────────────────────────────────── */
.badge{display:inline-flex;padding:2px 7px;border-radius:20px;font-size:11px;font-weight:600}
.badge-blue{background:var(--blue-light);color:var(--blue)}
.badge-green{background:var(--green-light);color:var(--green)}
.badge-gray{background:var(--border-light);color:var(--text-muted)}

/* ─── Clinical alerts banner ────────────────────────────────────────────────── */
.clinical-alerts-banner{display:flex;flex-direction:column;gap:6px;margin-bottom:20px}
.clinical-alerts-banner.compact{margin-bottom:18px}
.alert-banner-item{
  display:flex;align-items:flex-start;gap:8px;padding:9px 14px;
  border-radius:var(--radius-sm);font-size:13px;line-height:1.5;
}
.alert-banner-item strong{font-weight:700;white-space:nowrap}
.alert-banner-item.red{background:#FEF2F2;color:#991B1B;border-left:3px solid var(--red)}
.alert-banner-item.amber{background:var(--amber-light);color:#78350F;border-left:3px solid var(--amber)}
.alert-banner-item.blue{background:var(--blue-light);color:#1E40AF;border-left:3px solid var(--blue)}
.alert-banner-item.purple{background:var(--purple-light);color:#581C87;border-left:3px solid var(--purple)}

/* ─── Alert chips (table) ───────────────────────────────────────────────────── */
.alert-chips-mini{display:flex;flex-wrap:wrap;gap:4px}
.alert-chip-mini{display:inline-flex;align-items:center;padding:2px 7px;border-radius:12px;font-size:10.5px;font-weight:600}
.alert-chip-mini.red{background:#FEF2F2;color:#DC2626}
.alert-chip-mini.amber{background:var(--amber-light);color:#92400E}

/* ─── Patient quick stats ───────────────────────────────────────────────────── */
.patient-quick-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px}
.quick-stat{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}
.quick-stat-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.05em;color:var(--text-muted);margin-bottom:4px}
.quick-stat-value{font-size:13.5px;font-weight:600;color:var(--text);line-height:1.4}
.quick-stat-value.followup{color:var(--green);font-size:12.5px}

/* ─── Vitals bar ────────────────────────────────────────────────────────────── */
.vitals-bar{display:flex;flex-wrap:wrap;gap:1px;background:var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:18px;box-shadow:var(--shadow)}
.vitals-bar-item{flex:1;min-width:90px;background:var(--card);padding:10px 14px;text-align:center}
.vitals-bar-item.glucose{background:var(--orange-light)}
.vitals-bar-item--danger{background:#FEF2F2}.vitals-bar-item--danger .vitals-bar-value{color:#DC2626}
.vitals-bar-item--warning{background:#FFFBEB}.vitals-bar-item--warning .vitals-bar-value{color:#D97706}
.vitals-bar-item--elevated{background:#F5F3FF}.vitals-bar-item--elevated .vitals-bar-value{color:#7C3AED}
.vitals-bar-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.05em;color:var(--text-muted);margin-bottom:2px}
.vitals-bar-value{font-size:17px;font-weight:800;color:var(--text);letter-spacing:-0.01em}
.vitals-bar-value span{font-size:11px;font-weight:500;color:var(--text-muted)}

/* ─── Vitals chips (timeline) ───────────────────────────────────────────────── */
.vitals-chips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:8px}
.vital-chip{display:inline-flex;padding:2px 8px;background:var(--border-light);border-radius:12px;font-size:11px;font-weight:600;color:var(--text-muted)}
.vital-chip.glucose{background:var(--orange-light);color:#92400E}

/* ─── Vitals form grid ──────────────────────────────────────────────────────── */
.vitals-form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:12px}
.vital-input-group{display:flex;flex-direction:column;gap:4px}
.vital-input{text-align:center}
.vital-unit{font-size:11px;color:var(--text-muted);font-weight:500;text-align:center}
.bp-pair{display:flex;align-items:center;gap:4px}
.bp-pair .vital-input{flex:1;min-width:0}
.bp-sep{font-size:16px;font-weight:700;color:var(--text-muted);flex-shrink:0}

/* ─── Search and filters ────────────────────────────────────────────────────── */
.search-filter-bar{margin-bottom:18px;display:flex;flex-direction:column;gap:12px}
.search-form{display:flex;gap:8px;align-items:center}
.search-input-wrap{position:relative;flex:1}
.search-icon{position:absolute;left:11px;top:50%;transform:translateY(-50%);width:15px;height:15px;color:var(--text-muted)}
.search-input{width:100%;padding:9px 12px 9px 34px;border:1.5px solid var(--border);border-radius:var(--radius-sm);font-size:13.5px;background:white;color:var(--text);transition:border-color var(--t)}
.search-input:focus{outline:none;border-color:var(--blue)}

.filter-tabs{display:flex;gap:4px;flex-wrap:wrap}
.filter-tab{padding:5px 13px;border-radius:20px;font-size:12.5px;font-weight:600;color:var(--text-muted);border:1.5px solid transparent;background:var(--card);transition:all var(--t)}
.filter-tab:hover{border-color:var(--border);color:var(--text)}
.filter-tab.active{background:var(--blue-light);color:var(--blue);border-color:var(--blue)}
.filter-tab.red.active{background:var(--red-light);color:var(--red);border-color:var(--red)}
.filter-tab.amber.active{background:var(--amber-light);color:#92400E;border-color:var(--amber)}
.filter-tab.green.active{background:var(--green-light);color:var(--green);border-color:var(--green)}
.filter-tab.gray.active{background:var(--border-light);color:var(--text);border-color:var(--border)}

/* ─── Table ─────────────────────────────────────────────────────────────────── */
.patients-table-wrap{overflow-x:auto}
.table{width:100%;border-collapse:collapse}
.table th{text-align:left;padding:9px 14px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;color:var(--text-muted);background:var(--bg);border-bottom:1px solid var(--border)}
.table td{padding:11px 14px;border-bottom:1px solid var(--border-light);font-size:13.5px;color:var(--text)}
.table tr:last-child td{border-bottom:none}
.table tbody tr:hover td{background:#FAFAFA}
.patient-name-cell{display:flex;align-items:center;gap:9px}
.table-avatar{width:30px;height:30px;background:var(--blue-light);color:var(--blue);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:12px;flex-shrink:0}
.patient-name{font-weight:600;color:var(--text)}
.patient-email{font-size:12px;color:var(--text-muted)}
.table-actions{display:flex;gap:3px}
.text-muted{color:var(--text-muted)}
.text-subtle{color:var(--text-subtle)}
.text-sm{font-size:13px}
.text-xs{font-size:11.5px}

/* ─── Detail views ──────────────────────────────────────────────────────────── */
.detail-grid{display:grid;grid-template-columns:300px 1fr;gap:20px;align-items:start}
.detail-sidebar{display:flex;flex-direction:column;gap:0}
.patient-profile{display:flex;flex-direction:column;align-items:center;padding-bottom:14px;margin-bottom:14px;border-bottom:1px solid var(--border-light)}
.profile-avatar{width:60px;height:60px;background:var(--blue);color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:900;margin-bottom:8px}
.profile-name{font-size:15px;font-weight:700;text-align:center}
.info-list{display:flex;flex-direction:column}
.info-item{display:flex;justify-content:space-between;gap:10px;padding:7px 0;border-bottom:1px solid var(--border-light);font-size:12.5px}
.info-item:last-child{border-bottom:none}
.info-item dt{color:var(--text-muted);font-weight:500;flex-shrink:0}
.info-item dd{color:var(--text);font-weight:600;text-align:right}
.blood-type-val{color:var(--red);font-size:13px}

.measures-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.measure-item{background:var(--bg);border-radius:var(--radius-sm);padding:10px;text-align:center;border:1px solid var(--border-light)}
.measure-val{font-size:18px;font-weight:800;color:var(--text);letter-spacing:-0.02em}
.measure-label{font-size:10px;font-weight:600;text-transform:uppercase;color:var(--text-muted);margin-top:2px}
.measure-item.bmi-ok .measure-val{color:var(--green)}
.measure-item.bmi-warn .measure-val{color:var(--amber)}
.measure-item.bmi-high .measure-val{color:var(--red)}
.measure-item.bmi-low .measure-val{color:var(--blue)}

.antecedent-block{margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid var(--border-light)}
.antecedent-block:last-child{border-bottom:none;margin-bottom:0}
.antecedent-label{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:0.05em;color:var(--text-muted);margin-bottom:3px;display:flex;align-items:center;gap:4px}
.antecedent-value{font-size:12.5px;color:var(--text);line-height:1.5}
.habits-row{display:flex;flex-wrap:wrap;gap:5px;margin-top:3px}
.habit-chip{font-size:11.5px;background:var(--border-light);padding:2px 8px;border-radius:12px;color:var(--text-muted)}

/* ─── Timeline ──────────────────────────────────────────────────────────────── */
.timeline{position:relative}
.timeline-item{display:flex;gap:14px;padding-bottom:22px;position:relative}
.timeline-item::before{content:'';position:absolute;left:6px;top:18px;bottom:0;width:2px;background:var(--border)}
.timeline-item:last-child::before{display:none}
.timeline-marker{width:14px;height:14px;border-radius:50%;background:var(--blue);border:2.5px solid white;box-shadow:0 0 0 2px var(--blue);flex-shrink:0;margin-top:4px}
.timeline-item.type-seguimiento .timeline-marker{background:var(--green);box-shadow:0 0 0 2px var(--green)}
.timeline-item.type-urgente .timeline-marker{background:var(--red);box-shadow:0 0 0 2px var(--red)}
.timeline-item.type-estudios .timeline-marker{background:var(--purple);box-shadow:0 0 0 2px var(--purple)}

.timeline-content{flex:1;background:white;border:1px solid var(--border);border-radius:var(--radius);padding:13px 15px;border-left:3px solid var(--blue)}
.timeline-item.type-seguimiento .timeline-content{border-left-color:var(--green)}
.timeline-item.type-urgente .timeline-content{border-left-color:var(--red)}
.timeline-item.type-estudios .timeline-content{border-left-color:var(--purple)}

.timeline-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.timeline-left{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.timeline-date{font-size:12px;font-weight:600;color:var(--text-muted)}
.timeline-actions-row{display:flex;gap:4px}
.timeline-reason{font-size:14.5px;font-weight:700;color:var(--text);margin-bottom:7px}
.timeline-body{display:flex;flex-direction:column;gap:4px}
.timeline-diagnosis{font-size:13px;color:var(--text);font-weight:600;margin-bottom:3px}
.timeline-field{font-size:12.5px;color:var(--text-muted);display:flex;gap:5px;flex-wrap:wrap}
.timeline-field-label{font-weight:700;color:var(--text);white-space:nowrap}
.timeline-followup{display:flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;color:var(--green);margin-top:6px;padding-top:6px;border-top:1px solid var(--border-light)}

/* ─── Consultation detail ───────────────────────────────────────────────────── */
.consultation-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.detail-field{margin-bottom:14px;padding-bottom:14px;border-bottom:1px solid var(--border-light)}
.detail-field:last-child{border-bottom:none;margin-bottom:0}
.detail-field-label{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;color:var(--text-muted);margin-bottom:4px;display:flex;align-items:center;gap:4px}
.detail-field-value{font-size:13.5px;color:var(--text);line-height:1.6}
.detail-field-value.highlight{font-weight:700;font-size:15px}
.detail-field-value.bold{font-weight:700}
.detail-field-value.mono{font-family:monospace;font-size:12.5px}
.detail-field-value.followup-val{color:var(--green);font-weight:600}
.diagnosis-field .detail-field-label{color:var(--blue)}
.private-notes-card{border-color:#DDD6FE}
.transcription-text{font-size:13px;color:var(--text-muted);line-height:1.7;font-style:italic}

/* ─── Transcription panel ───────────────────────────────────────────────────── */
.transcription-panel{background:var(--card);border:1px solid var(--purple-light);border-radius:var(--radius);margin-bottom:18px;overflow:hidden}
.transcription-panel-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;cursor:pointer;transition:background var(--t)}
.transcription-panel-header:hover{background:var(--purple-light)}
.transcription-panel-title{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:700;color:var(--purple)}
.toggle-icon{color:var(--text-muted);font-size:11px}
.transcription-panel-body{padding:12px 16px;border-top:1px solid var(--purple-light)}

/* ─── Forms ─────────────────────────────────────────────────────────────────── */
/* Form containers use generous max-widths so they scale well on wide screens.
   Individual field widths stay readable thanks to form-row flex layout. */
.form-container{max-width:980px;margin:0 auto}
.form-container-wide{max-width:1200px}
.form-section{margin-bottom:0}
.form-group{display:flex;flex-direction:column;gap:4px;flex:1}
.form-group-grow{flex:2}
.form-row{display:flex;gap:14px;margin-bottom:14px}
.form-group:not(.form-row > .form-group){margin-bottom:14px}
.form-group:last-child{margin-bottom:0}
.form-label{font-size:12.5px;font-weight:700;color:var(--text);display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.label-note{font-size:11px;font-weight:400;color:var(--text-muted)}
.required{color:var(--red)}
.form-input{padding:8px 11px;border:1.5px solid var(--border);border-radius:var(--radius-sm);font-size:13.5px;color:var(--text);background:white;width:100%;transition:border-color var(--t),box-shadow var(--t)}
.form-input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,0.09)}
.form-textarea{resize:vertical;min-height:75px}
.form-select{cursor:pointer}
.name-prefix-row{display:flex;align-items:stretch;gap:8px}
.name-prefix-select{width:74px;flex:0 0 74px}
.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}
.label-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}
.label-dot.red{background:var(--red)}
.label-dot.amber{background:var(--amber)}
.label-dot.blue{background:var(--blue)}
.label-dot.purple{background:var(--purple)}

/* BMI display */
.bmi-display{padding:8px 11px;background:var(--bg);border-radius:var(--radius-sm);font-size:14px;font-weight:700;color:var(--text);border:1.5px solid var(--border);min-height:38px;display:flex;align-items:center}
.bmi-display.bmi-ok{color:var(--green);background:var(--green-light);border-color:var(--green)}
.bmi-display.bmi-warn{color:#92400E;background:var(--amber-light);border-color:var(--amber)}
.bmi-display.bmi-high{color:var(--red);background:var(--red-light);border-color:var(--red)}
.bmi-display.bmi-low{color:var(--blue);background:var(--blue-light);border-color:var(--blue)}

/* ─── Voice upload ──────────────────────────────────────────────────────────── */
.voice-section{border-color:#DDD6FE}
.voice-upload-area{border:2px dashed var(--border);border-radius:var(--radius);padding:24px;text-align:center;transition:border-color var(--t),background var(--t);position:relative}
.voice-upload-area.drag-over{border-color:var(--purple);background:var(--purple-light)}
.voice-upload-icon svg{width:36px;height:36px;color:var(--purple);margin:0 auto 10px;display:block}
.voice-upload-area p{font-size:13.5px;color:var(--text-muted);margin-bottom:3px}
.upload-link{color:var(--blue);cursor:pointer;font-weight:700}
.upload-hint{font-size:11.5px;color:var(--text-subtle);display:block;margin-top:3px}
.file-input{display:none}
.selected-file{margin-top:8px;font-size:13px;font-weight:700;color:var(--green)}
.btn-voice{display:flex;align-items:center;gap:7px;margin-top:10px;width:100%;justify-content:center;padding:9px;border:1.5px solid var(--purple);color:var(--purple);background:transparent;border-radius:var(--radius-sm);font-size:13.5px;font-weight:600;transition:all var(--t)}
.btn-voice:hover:not(:disabled){background:var(--purple-light)}
.btn-voice:disabled{opacity:0.45;cursor:not-allowed}

/* ─── Alerts ────────────────────────────────────────────────────────────────── */
.alert{display:flex;align-items:flex-start;gap:9px;padding:11px 14px;border-radius:var(--radius-sm);font-size:13.5px;margin-bottom:18px;line-height:1.5}
.alert-error{background:var(--red-light);color:#991B1B;border:1px solid #FECACA}
.alert-success{background:var(--green-light);color:#065F46;border:1px solid #A7F3D0}
.alert-info{background:var(--blue-light);color:#1E40AF;border:1px solid #BFDBFE}

/* ─── Empty states ──────────────────────────────────────────────────────────── */
.empty-state{display:flex;flex-direction:column;align-items:center;gap:10px;padding:36px 20px;text-align:center;color:var(--text-muted)}
.empty-state.large{padding:70px 40px}
.empty-state svg{width:44px;height:44px;color:var(--border)}
.empty-state p{font-size:13.5px}

/* ─── Modal ─────────────────────────────────────────────────────────────────── */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center;z-index:1000;backdrop-filter:blur(3px)}
.modal-overlay.hidden{display:none}
.modal{background:white;border-radius:var(--radius-lg);padding:30px;max-width:390px;width:90%;box-shadow:var(--shadow-lg);text-align:center}
.modal-icon{width:50px;height:50px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 14px}
.modal-icon svg{width:22px;height:22px}
.modal-icon.danger{background:var(--red-light);color:var(--red)}
.modal h3{font-size:17px;font-weight:800;margin-bottom:7px}
.modal p{font-size:13.5px;color:var(--text-muted);margin-bottom:22px;line-height:1.5}
.modal-actions{display:flex;gap:10px;justify-content:center}

/* ─── Settings ──────────────────────────────────────────────────────────────── */
.settings-avatar-row{display:flex;align-items:center;gap:14px}
.settings-avatar{width:54px;height:54px;background:var(--blue);color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:900;flex-shrink:0}
.settings-name{font-size:16px;font-weight:800}
.settings-email{font-size:13px;color:var(--text-muted)}

/* ─── Auth ──────────────────────────────────────────────────────────────────── */
.auth-body{background:linear-gradient(135deg,#EFF6FF 0%,#F0FDFA 100%);min-height:100vh;display:flex;align-items:center;justify-content:center}
.auth-container{width:100%;max-width:420px;padding:24px 16px}
.auth-brand{text-align:center;margin-bottom:22px}
.auth-brand-link{display:inline-flex;align-items:center;gap:10px;font-size:17px;font-weight:900;color:var(--text);letter-spacing:-0.02em}
.auth-card{background:white;border-radius:var(--radius-lg);padding:34px;box-shadow:var(--shadow-lg);border:1px solid var(--border)}
.auth-title{font-size:21px;font-weight:900;color:var(--text);margin-bottom:3px;letter-spacing:-0.02em}
.auth-subtitle{font-size:13.5px;color:var(--text-muted);margin-bottom:22px}
.auth-form{display:flex;flex-direction:column}
.auth-form .form-group{margin-bottom:14px}
.auth-form .form-row{margin-bottom:0}
.auth-form .form-row .form-group{margin-bottom:14px}
.auth-footer-text{text-align:center;font-size:13.5px;color:var(--text-muted);margin-top:18px}
.auth-link{color:var(--blue);font-weight:700}
.auth-link:hover{text-decoration:underline}

/* ── Login redesign (2-column + mascot) ─────────────────────────────────── */
/* Card es el ancla — centrada por auth-body flex. Mascota posicionada
   absolutamente a su izquierda en desktop. */
.login-wrap{position:relative;width:100%;max-width:420px}
.login-mascot-col{display:none}
.login-mascot-stage{display:flex;align-items:center;justify-content:center}
@keyframes mascotBreathe{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-6px) scale(1.015)}}
@keyframes mascotCelebrate{0%,100%{transform:scale(1) rotate(0deg)}25%{transform:scale(1.08) rotate(-4deg)}75%{transform:scale(1.08) rotate(4deg)}}
@keyframes cardShake{0%,100%{transform:translateX(0)}20%,60%{transform:translateX(-7px)}40%,80%{transform:translateX(7px)}}
.login-mascot{width:260px;height:auto;opacity:0;transform-origin:bottom center;transition:opacity .4s ease,transform .25s ease;will-change:transform,opacity;animation:mascotBreathe 4s ease-in-out infinite;-webkit-mask-image:linear-gradient(to bottom,black 84%,transparent 94%);mask-image:linear-gradient(to bottom,black 84%,transparent 94%)}
.login-mascot.mascot-loaded{opacity:1}
.login-mascot.focus-email{transform:scale(1.04)}
.login-mascot.focus-password{transform:scale(1.04);filter:drop-shadow(0 6px 18px rgba(37,99,235,.18))}
.login-mascot.celebrate{animation:mascotCelebrate .5s ease-in-out}
.login-form-col{width:100%}
.login-form-col .auth-brand{margin-bottom:24px;text-align:center}
.login-form-col .auth-card{width:100%}
.auth-card.shake{animation:cardShake .4s ease}
@media(min-width:880px){
  .login-mascot-col{display:flex;align-items:center;justify-content:flex-end;position:absolute;right:calc(100% + 40px);top:0;bottom:0;width:300px}
}
.login-form-col .form-input:focus{border-color:var(--blue,#2563EB);box-shadow:0 0 0 3px rgba(37,99,235,.12);transition:border-color .15s,box-shadow .15s}
.login-form-col .btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 14px rgba(37,99,235,.28);transition:transform .15s,box-shadow .15s}

/* ─── Landing ───────────────────────────────────────────────────────────────── */
.landing-body{background:white}
.landing-nav{position:sticky;top:0;z-index:100;background:rgba(255,255,255,0.92);backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}
.landing-nav-inner{max-width:1100px;margin:0 auto;padding:13px 24px;display:flex;align-items:center;justify-content:space-between}
.landing-brand{display:flex;align-items:center;gap:10px;font-size:16px;font-weight:900;color:var(--text);letter-spacing:-0.02em}
.landing-nav-actions{display:flex;gap:8px;align-items:center}
.hero{max-width:1100px;margin:0 auto;padding:80px 24px 60px;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center}
.hero-badge{display:inline-block;padding:4px 12px;background:var(--blue-light);color:var(--blue);border-radius:20px;font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:0.08em;margin-bottom:14px}
.hero-title{font-size:42px;font-weight:900;color:var(--text);line-height:1.1;letter-spacing:-0.03em;margin-bottom:16px}
.hero-subtitle{font-size:16px;color:var(--text-muted);line-height:1.6;margin-bottom:30px}
.hero-actions{display:flex;gap:10px;flex-wrap:wrap}
.hero-visual{display:flex;justify-content:center}
.hero-card-demo{background:white;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);border:1px solid var(--border);width:100%;max-width:360px;overflow:hidden}
.demo-header{display:flex;align-items:center;gap:5px;padding:10px 14px;background:var(--bg);border-bottom:1px solid var(--border);font-size:11.5px;color:var(--text-muted)}
.demo-dot{width:7px;height:7px;border-radius:50%;background:var(--border)}
.demo-dot.blue{background:var(--blue)} .demo-dot.green{background:var(--green)}
.demo-patient{display:flex;align-items:center;gap:10px;padding:14px;border-bottom:1px solid var(--border-light)}
.demo-avatar{width:38px;height:38px;background:var(--blue);color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:14px}
.demo-name{font-weight:700;font-size:14px} .demo-meta{font-size:11.5px;color:var(--text-muted)}
.demo-timeline{padding:14px;display:flex;flex-direction:column;gap:10px}
.demo-tl-item{display:flex;gap:8px;align-items:flex-start}
.demo-tl-dot{width:8px;height:8px;background:var(--blue);border-radius:50%;margin-top:3px;flex-shrink:0}
.demo-tl-date{font-size:10.5px;color:var(--text-muted)} .demo-tl-title{font-size:12.5px;font-weight:600}
.features{background:var(--bg);padding:80px 24px}
.features-inner{max-width:1100px;margin:0 auto}
.features-title{font-size:30px;font-weight:900;text-align:center;color:var(--text);letter-spacing:-0.02em;margin-bottom:6px}
.features-subtitle{text-align:center;color:var(--text-muted);font-size:15.5px;margin-bottom:44px}
.features-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.feature-card{background:white;border-radius:var(--radius-lg);border:1px solid var(--border);padding:22px;box-shadow:var(--shadow)}
.feature-icon{width:42px;height:42px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;margin-bottom:12px}
.feature-icon svg{width:20px;height:20px}
.feature-icon.blue{background:var(--blue-light);color:var(--blue)} .feature-icon.green{background:var(--green-light);color:var(--green)}
.feature-icon.indigo{background:var(--indigo-light);color:var(--indigo)} .feature-icon.orange{background:var(--orange-light);color:var(--orange)}
.feature-icon.purple{background:var(--purple-light);color:var(--purple)} .feature-icon.teal{background:var(--teal-light);color:var(--teal)}
.feature-card h3{font-size:14.5px;font-weight:700;color:var(--text);margin-bottom:5px}
.feature-card p{font-size:13px;color:var(--text-muted);line-height:1.6}
.cta-section{background:var(--blue);padding:80px 24px;text-align:center}
.cta-inner{max-width:600px;margin:0 auto}
.cta-section h2{font-size:30px;font-weight:900;color:white;letter-spacing:-0.02em;margin-bottom:8px}
.cta-section p{font-size:15.5px;color:rgba(255,255,255,0.8);margin-bottom:26px}
.cta-section .btn-primary{background:white;color:var(--blue);border-color:white}
.cta-section .btn-primary:hover{background:var(--blue-light)}
.landing-footer{background:var(--text);padding:22px}
.landing-footer-inner{max-width:1100px;margin:0 auto;display:flex;justify-content:space-between;align-items:center;font-size:12.5px;color:var(--text-muted)}
.btn-ghost{color:var(--text-muted);background:transparent;border:none}

/* ─── Utilities ─────────────────────────────────────────────────────────────── */
.hidden{display:none!important}

/* ─── Sidebar overlay (mobile) ──────────────────────────────────────────────── */
.sidebar-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:199;backdrop-filter:blur(2px)}
.sidebar-overlay.hidden{display:none!important}

/* ─── Responsive ────────────────────────────────────────────────────────────── */
/* App shell: the sidebar collapses to a slide-in drawer on tablets & phones
   (≤900px) so portrait tablets get the full content width instead of a cramped
   column squeezed next to a 230px rail. The hamburger (wired in app.js) toggles it. */
@media (max-width:900px) {
  .sidebar{transform:translateX(-100%);transition:transform 0.28s ease}
  .sidebar.open{transform:translateX(0);box-shadow:4px 0 24px rgba(0,0,0,0.3)}
  .main-wrapper{margin-left:0;max-width:100vw}
  .mobile-menu-btn{display:flex}
  .top-search-form{display:none}
  body.sidebar-open{overflow:hidden}
  /* Stack page headers so long action toolbars wrap to full width instead of
     overflowing (main-content uses overflow-x:clip, which would clip them). */
  .page-header{flex-direction:column;gap:12px}
  .page-actions{width:100%}
}
@media (max-width:1024px) {
  .stats-grid{grid-template-columns:1fr 1fr}
  .consultation-detail-grid{grid-template-columns:1fr}
  .patient-quick-stats{grid-template-columns:1fr 1fr}
  .features-grid{grid-template-columns:1fr 1fr}
  .hero{grid-template-columns:1fr} .hero-visual{display:none}
}
@media (max-width:800px) {
  .dashboard-grid{grid-template-columns:1fr}
  .detail-grid{grid-template-columns:1fr}
  .vitals-bar-item{min-width:70px}
}
@media (max-width:680px) {
  .content-inner{padding:18px 14px}
  .stats-grid{grid-template-columns:1fr}
  .form-row{flex-direction:column}
  .page-header{flex-direction:column;gap:12px}
  .page-actions{width:100%}
  .quick-actions-row{gap:7px}
  .patient-quick-stats{grid-template-columns:1fr 1fr}
  .vitals-form-grid{grid-template-columns:1fr 1fr}
  .features-grid{grid-template-columns:1fr}
  .top-search-form{display:none}
  .consult-layout{flex-direction:column}
  .consult-history-panel{width:100%}
}

/* ═══════════════════════════════════════════════════════════════════════════ */
/* ITERATION 3 ADDITIONS                                                      */
/* ═══════════════════════════════════════════════════════════════════════════ */

/* ─── Button variants ────────────────────────────────────────────────────── */
.btn-primary-soft{background:var(--blue-light);color:var(--blue);border:1.5px solid transparent}
.btn-primary-soft:hover{background:#DBEAFE;border-color:var(--blue)}
.shortcut-hint{font-size:10px;background:rgba(37,99,235,0.15);padding:1px 5px;border-radius:4px;font-weight:600;margin-left:2px}

/* ─── Nav extras ─────────────────────────────────────────────────────────── */
.nav-item-btn{background:none;border:none;width:100%;text-align:left;color:#94A3B8;font-size:13.5px;font-weight:500;cursor:pointer}
.nav-item-btn:hover{background:rgba(255,255,255,0.06);color:#CBD5E1}
.nav-shortcut{font-size:9.5px;background:rgba(255,255,255,0.08);padding:1px 5px;border-radius:4px;margin-left:auto;color:#64748B}

/* ─── Clinical summary card ──────────────────────────────────────────────── */
.clinical-summary-card{
  display:flex;align-items:flex-start;gap:12px;
  background:linear-gradient(135deg,#EFF6FF,#F5F3FF);
  border:1px solid #C7D2FE;border-radius:var(--radius);
  padding:14px 16px;margin-bottom:16px;
}
.cs-icon{width:36px;height:36px;background:white;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:var(--shadow)}
.cs-content{flex:1;min-width:0}
.cs-label{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:0.06em;color:#6366F1;margin-bottom:3px}
.cs-text{font-size:13.5px;color:var(--text);line-height:1.6}
.cs-empty{color:var(--text-muted);font-style:italic}
.cs-action{flex-shrink:0}
.cs-regen-btn{color:#6366F1;border-color:transparent}
.cs-regen-btn:hover{background:#EEF2FF}

/* ─── Timeline v2 ────────────────────────────────────────────────────────── */
@keyframes slideInTL {
  from{opacity:0;transform:translateX(-8px)}
  to{opacity:1;transform:translateX(0)}
}
.timeline.v2{position:relative;display:flex;flex-direction:column;gap:0}
.tl-item{display:flex;gap:0;animation:slideInTL 0.35s ease both;opacity:0;position:relative}
.tl-item:last-child .tl-connector{display:none}
.tl-icon{
  width:36px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;
  padding-top:2px;
}
.tl-icon svg{width:20px;height:20px;padding:4px;border-radius:50%;background:var(--blue-light);color:var(--blue);box-shadow:var(--shadow)}
.tl-item.tl-seguimiento .tl-icon svg{background:var(--green-light);color:var(--green)}
.tl-item.tl-urgente .tl-icon svg{background:var(--red-light);color:var(--red)}
.tl-item.tl-estudios .tl-icon svg{background:var(--purple-light);color:var(--purple)}
.tl-item.tl-documento .tl-icon svg{background:#F0F9FF;color:#0369A1}
.tl-connector{width:2px;background:var(--border);flex:1;min-height:16px;margin-top:4px;align-self:stretch}
.tl-item.tl-seguimiento .tl-connector{background:var(--green-light)}
.tl-item.tl-urgente .tl-connector{background:var(--red-light)}
.tl-item.tl-estudios .tl-connector{background:var(--purple-light)}
.tl-item.tl-documento .tl-connector{background:#E0F2FE}

.tl-card{
  flex:1;background:white;border:1px solid var(--border);border-radius:var(--radius);
  padding:13px 15px;margin:0 0 12px 10px;
  border-left:3px solid var(--blue);
  transition:box-shadow var(--t);
}
.tl-card:hover{box-shadow:var(--shadow-md)}
.tl-item.tl-seguimiento .tl-card{border-left-color:var(--green)}
.tl-item.tl-urgente .tl-card{border-left-color:var(--red)}
.tl-item.tl-estudios .tl-card{border-left-color:var(--purple)}
.tl-item.tl-documento .tl-card{border-left-color:#0EA5E9;background:#FAFEFF}

.tl-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:7px}
.tl-card-left{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.tl-date{font-size:11.5px;color:var(--text-muted);font-weight:600}
.tl-actions{display:flex;gap:4px;flex-shrink:0}
.tl-reason{font-size:14.5px;font-weight:700;color:var(--text);margin-bottom:6px;line-height:1.3}
.tl-diagnosis{font-size:13px;color:var(--text);margin:6px 0 4px;line-height:1.5}
.tl-field-label{font-weight:700;color:var(--blue);font-size:12px}
.tl-item.tl-seguimiento .tl-field-label{color:var(--green)}
.tl-item.tl-urgente .tl-field-label{color:var(--red)}

.tl-expandable{max-height:0;overflow:hidden;transition:max-height 0.3s ease;display:flex;flex-direction:column;gap:3px}
.tl-expandable.open{max-height:400px}
.tl-detail{font-size:12.5px;color:var(--text-muted);line-height:1.5;padding-top:3px}

.tl-expand-btn{
  display:inline-flex;align-items:center;gap:4px;
  font-size:11.5px;font-weight:600;color:var(--blue);
  background:none;border:none;cursor:pointer;padding:5px 0;
  transition:color var(--t);
}
.tl-expand-btn:hover{color:var(--blue-dark)}

.tl-followup{
  display:flex;align-items:center;gap:5px;
  font-size:11.5px;font-weight:600;color:var(--green);
  margin-top:8px;padding-top:8px;border-top:1px solid var(--border-light);
}

/* ─── Quick Consultation Modal ───────────────────────────────────────────── */
.qc-overlay{
  position:fixed;inset:0;background:rgba(15,23,42,0.6);
  display:flex;align-items:center;justify-content:center;
  z-index:1000;backdrop-filter:blur(4px);
  animation:fadeIn 0.15s ease;
}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.qc-overlay.hidden{display:none}

.qc-modal{
  background:white;border-radius:var(--radius-lg);
  width:100%;max-width:540px;max-height:92vh;overflow-y:auto;
  box-shadow:var(--shadow-lg);
  animation:slideUp 0.2s ease;
}
@keyframes slideUp{from{transform:translateY(16px);opacity:0}to{transform:translateY(0);opacity:1}}

.qc-header{padding:18px 20px 0;display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.qc-title{display:flex;align-items:center;gap:8px;font-size:16px;font-weight:800;color:var(--text)}
.qc-hint{font-size:11.5px;color:var(--text-muted);margin:3px 0 0}
.qc-close{background:none;border:none;color:var(--text-muted);cursor:pointer;padding:4px;border-radius:6px;transition:background var(--t)}
.qc-close:hover{background:var(--border-light)}
.qc-form{padding:16px 20px 20px;display:flex;flex-direction:column;gap:12px}
.qc-patient-row{display:flex;flex-direction:column;gap:4px}
.qc-label{font-size:12px;font-weight:700;color:var(--text)}
.qc-dx-note{font-size:10.5px;font-weight:400;color:var(--text-muted);margin-left:4px}
.qc-select{width:100%;padding:8px 11px;border:1.5px solid var(--border);border-radius:var(--radius-sm);font-size:14px;color:var(--text);background:white}
.qc-select:focus{outline:none;border-color:var(--blue)}
.qc-fields{display:flex;flex-direction:column;gap:10px}
.qc-field{display:flex;flex-direction:column;gap:3px}
.qc-input{padding:8px 11px;border:1.5px solid var(--border);border-radius:var(--radius-sm);font-size:13.5px;color:var(--text);font-family:var(--font);transition:border-color var(--t)}
.qc-input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,0.08)}
.qc-textarea{resize:none;min-height:60px}
.qc-row-2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.qc-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:4px;border-top:1px solid var(--border-light)}
.qc-footer-note{display:flex;align-items:flex-start;gap:6px;font-size:11.5px;color:var(--text-muted);line-height:1.4;flex:1}
.qc-submit{flex-shrink:0}

/* ─── Clinical templates bar ─────────────────────────────────────────────── */
.templates-bar{display:flex;align-items:center;gap:10px;margin-bottom:18px;flex-wrap:wrap;background:white;border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px}
.templates-label{font-size:12px;font-weight:700;color:var(--text-muted);white-space:nowrap}
.template-btns{display:flex;gap:6px;flex-wrap:wrap}
.template-btn{padding:5px 12px;background:var(--bg);border:1.5px solid var(--border);border-radius:20px;font-size:12px;font-weight:600;color:var(--text);cursor:pointer;transition:all var(--t)}
.template-btn:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-light)}

/* Template applied highlight */
@keyframes templatePulse{0%{border-color:var(--green);background:var(--green-light)}100%{border-color:var(--border);background:white}}
.template-applied{animation:templatePulse 1.2s ease}

/* ─── Consultation layout with history sidebar ───────────────────────────── */
.consult-layout{display:flex;gap:20px;align-items:flex-start}
.consult-main{flex:1;min-width:0}
.consult-history-panel{
  width:260px;flex-shrink:0;position:sticky;top:calc(var(--header-h) + 20px);
  background:white;border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow);overflow:hidden;
}
.chp-section{padding:12px 14px;border-bottom:1px solid var(--border-light)}
.chp-section:last-child{border-bottom:none}
.chp-title{font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:0.06em;color:var(--text-muted);margin-bottom:8px}
.chp-alert{font-size:11.5px;padding:5px 8px;border-radius:5px;margin-bottom:5px;line-height:1.4}
.chp-alert.red{background:var(--red-light);color:#991B1B}
.chp-alert.amber{background:var(--amber-light);color:#78350F}
.chp-alert.blue{background:var(--blue-light);color:#1E40AF}
.chp-empty{font-size:12px;color:var(--text-subtle);font-style:italic}
.chp-consult{display:block;padding:8px 0;border-bottom:1px solid var(--border-light);transition:background var(--t);border-radius:4px}
.chp-consult:last-child{border-bottom:none}
.chp-consult:hover{background:var(--bg)}
.chp-consult-header{display:flex;align-items:center;gap:6px;margin-bottom:3px}
.chp-date{font-size:10.5px;color:var(--text-muted)}
.chp-reason{font-size:11.5px;font-weight:600;color:var(--text);line-height:1.3}
.chp-dx{font-size:11px;color:var(--text-muted);line-height:1.3;margin-top:2px}
.chp-meds{font-size:10.5px;color:var(--text-subtle);margin-top:2px}
.chp-measures{display:flex;gap:8px;flex-wrap:wrap}
.chp-measure{font-size:12px;color:var(--text-muted)}
.chp-measure span{font-size:14px;font-weight:800;color:var(--text)}
.chp-measure.bmi span{color:var(--green)}

/* ─── Landing v2 ─────────────────────────────────────────────────────────── */
.section-label{display:inline-block;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:0.1em;color:var(--blue);background:var(--blue-light);padding:3px 10px;border-radius:20px;margin-bottom:10px}
.section-label.light{color:rgba(255,255,255,0.8);background:rgba(255,255,255,0.15)}

.hero-v2{padding:80px 24px 60px;background:linear-gradient(160deg,#F8FAFF 0%,#EFF6FF 40%,#F5F3FF 100%)}
.hero-v2-inner{max-width:1160px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center}
.hero-v2-content{}
.hero-v2-title{font-size:48px;font-weight:900;color:var(--text);line-height:1.08;letter-spacing:-0.03em;margin-bottom:18px}
.hero-accent{color:var(--blue);position:relative}
.hero-v2-sub{font-size:16.5px;color:var(--text-muted);line-height:1.65;margin-bottom:28px;max-width:480px}
.hero-v2-actions{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.hero-trust{font-size:12px;color:var(--text-subtle)}
.hero-badge{display:inline-block;padding:4px 12px;background:var(--blue-light);color:var(--blue);border-radius:20px;font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:0.08em;margin-bottom:16px}

/* App mockup */
.app-mockup{background:white;border-radius:12px;box-shadow:0 20px 60px rgba(0,0,0,0.12),0 4px 16px rgba(0,0,0,0.06);border:1px solid var(--border);overflow:hidden}
.mockup-bar{display:flex;align-items:center;gap:6px;padding:10px 14px;background:var(--bg);border-bottom:1px solid var(--border)}
.mockup-dot{width:8px;height:8px;border-radius:50%;background:var(--border)}
.red-dot{background:#EF4444}.amber-dot{background:#F59E0B}.green-dot{background:#10B981}
.mockup-url{font-size:10.5px;color:var(--text-muted);background:white;border:1px solid var(--border);border-radius:4px;padding:2px 8px;margin-left:8px}
.mockup-content{padding:14px}
.mockup-patient-header{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.mockup-avatar{width:38px;height:38px;background:var(--blue);color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:14px;flex-shrink:0}
.mockup-patient-name{font-size:14px;font-weight:800;margin-bottom:3px}
.mockup-chips{display:flex;gap:4px}
.mockup-chip{font-size:10px;font-weight:700;padding:1px 7px;border-radius:10px}
.mockup-chip.blue{background:var(--blue-light);color:var(--blue)}
.mockup-chip.green{background:var(--green-light);color:var(--green)}
.mockup-chip.red{background:var(--red-light);color:var(--red)}
.mockup-alerts{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.mockup-alert{font-size:11px;padding:5px 8px;border-radius:5px;font-weight:600}
.mockup-alert.red{background:var(--red-light);color:#991B1B}
.mockup-alert.amber{background:var(--amber-light);color:#78350F}
.mockup-timeline{display:flex;flex-direction:column;gap:8px}
.mockup-tl-item{display:flex;gap:8px;align-items:flex-start}
.mockup-tl-icon{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px}
.mockup-tl-icon svg{width:13px;height:13px}
.mockup-tl-icon.blue{background:var(--blue-light);color:var(--blue)}
.mockup-tl-icon.green{background:var(--green-light);color:var(--green)}
.mockup-tl-content{flex:1}
.mockup-tl-date{font-size:10.5px;color:var(--text-muted);margin-bottom:2px;display:flex;align-items:center;gap:5px}
.mockup-chip-inline{font-size:9.5px;font-weight:700;padding:1px 6px;border-radius:10px}
.mockup-chip-inline.seguimiento{background:var(--green-light);color:var(--green)}
.mockup-chip-inline.general{background:var(--blue-light);color:var(--blue)}
.mockup-tl-dx{font-size:11.5px;font-weight:600;color:var(--text);line-height:1.3}
.mockup-vitals-row{display:flex;gap:6px;margin-top:3px}
.mockup-vitals-row span{font-size:9.5px;background:var(--border-light);padding:1px 6px;border-radius:8px;color:var(--text-muted);font-weight:600}

/* Landing how it works */
.how-section{padding:80px 24px;background:var(--bg)}
.how-inner{max-width:1100px;margin:0 auto;text-align:center}
.steps-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;margin-top:40px}
.step{background:white;border-radius:var(--radius-lg);border:1px solid var(--border);padding:24px;box-shadow:var(--shadow)}
.step-num{width:36px;height:36px;background:var(--blue);color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:900;margin:0 auto 12px}
.step h3{font-size:14.5px;font-weight:700;margin-bottom:6px}
.step p{font-size:13px;color:var(--text-muted);line-height:1.5}

/* Landing security section */
.security-section{padding:80px 24px;background:var(--sidebar-bg);color:white}
.security-inner{max-width:1100px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center}
.security-content h2{font-size:28px;font-weight:900;margin-bottom:22px;letter-spacing:-0.02em}
.security-list{list-style:none;display:flex;flex-direction:column;gap:12px}
.security-list li{display:flex;align-items:center;gap:10px;font-size:14px;color:rgba(255,255,255,0.85)}
.security-list svg{width:16px;height:16px;color:var(--green);flex-shrink:0}
.security-visual{display:flex;justify-content:center}
.lock-card{width:180px;height:180px;background:rgba(255,255,255,0.08);border:1px solid rgba(255,255,255,0.12);border-radius:var(--radius-lg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center;font-size:13px;color:rgba(255,255,255,0.7)}

/* Landing nav links */
.landing-nav-links{display:flex;gap:24px}
.landing-nav-links a{font-size:14px;color:var(--text-muted);font-weight:500;transition:color var(--t)}
.landing-nav-links a:hover{color:var(--text)}

/* Landing responsive */
@media (max-width:900px) {
  .hero-v2-inner{grid-template-columns:1fr}
  .hero-v2-visual{display:none}
  .steps-grid{grid-template-columns:1fr 1fr}
  .security-inner{grid-template-columns:1fr}
  .security-visual{display:none}
  .landing-nav-links{display:none}
}
@media (max-width:600px) {
  .hero-v2-title{font-size:34px}
  .steps-grid{grid-template-columns:1fr}
  .qc-row-2{grid-template-columns:1fr}
  .landing-nav-hide-mobile{display:none!important}
}

/* ─── Landing: pricing grid stacks vertically on mobile ─────────────────── */
.landing-pricing-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:20px;
  margin-bottom:28px;
}
@media(max-width:860px){
  .landing-pricing-grid{
    grid-template-columns:1fr;
    max-width:440px;
    margin-left:auto;
    margin-right:auto;
  }
}

/* ─── Landing: brand name always visible, smaller on mobile ─────────────── */
.landing-brand-text{object-fit:contain;display:block}
@media(max-width:600px){
  .landing-brand-text{height:20px!important}
  .landing-nav-inner{padding:10px 14px}
  .hero-v2{padding:44px 16px 32px}
  #pricing{padding:48px 16px!important}
  .landing-footer-inner{flex-direction:column;gap:6px;text-align:center}
}

/* ═══════════════════════════════════════════════════════════════════════════ */
/* ITERATION 5 — DASHBOARD UI PREMIUM                                         */
/* ═══════════════════════════════════════════════════════════════════════════ */

/* ─── Sidebar v2 ─────────────────────────────────────────────────────────── */
.logo-block{display:flex;flex-direction:column;gap:1px}
.logo-sub{font-size:9.5px;color:#475569;font-weight:500;letter-spacing:0.02em;margin-top:1px}
.nav-badge-new{
  font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:0.04em;
  background:#10B981;color:white;padding:1px 6px;border-radius:10px;margin-left:auto;
}
.user-avatar-lg{
  width:36px;height:36px;background:var(--blue);border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  color:white;font-weight:800;font-size:13px;flex-shrink:0;
  box-shadow:0 0 0 2px rgba(37,99,235,0.3);
}

/* ─── Topbar v2 ──────────────────────────────────────────────────────────── */
.top-search-wrap{position:relative;flex:1}
.top-search-input{padding-right:46px}
.search-kbd{
  position:absolute;right:10px;top:50%;transform:translateY(-50%);
  font-size:10px;color:var(--text-muted);background:var(--border-light);
  padding:2px 6px;border-radius:4px;font-family:var(--font);
  border:1px solid var(--border);pointer-events:none;white-space:nowrap;
}
.topbar-qc-btn{
  display:inline-flex;align-items:center;gap:6px;
  padding:7px 14px;border-radius:var(--radius-sm);
  font-size:13px;font-weight:600;cursor:pointer;
  background:transparent;border:1.5px solid var(--border);
  color:var(--text);transition:all var(--t);white-space:nowrap;
}

/* ─── La barra superior no cabe en tableta ────────────────────────────────────
 *
 * 23-ago-2026, BUG PREEXISTENTE cazado por las pruebas del reordenado de
 * Configuración: a 820 px la barra mide 843 y la página se sale 23 px a la
 * derecha —una franja en blanco al arrastrar— **en TODAS las pantallas**, no
 * sólo en Configuración. La causa son los cuatro botones de acción con texto
 * dentro de un `.top-header-right` que es `flex-shrink:0`.
 *
 * Se escapó de las pruebas de navegador que ya vigilaban esto porque su médico
 * de mentiras tiene un nombre corto y cabía raspando.
 *
 * Abajo de 1100 px los botones se quedan con su icono: `font-size:0` esconde el
 * texto (que es un nodo suelto, sin etiqueta que agarrar) y el SVG no se entera,
 * porque trae ancho y alto propios. El `title` da el nombre al pasar el mouse y
 * el área táctil no baja de 40 px.
 *
 * 26-ago-2026 — ERA 980 Y SE QUEDABA CORTO. El umbral se eligió en agosto
 * midiendo a 820 px, que era donde se había visto el problema; nadie midió los
 * anchos de en medio. Medido ahora en una ventana de 1024 px, SIN tocar nada y
 * sin el botón nuevo del buzón:
 *
 *     ventana 1024  →  document.scrollWidth = 1050     (26 px de más)
 *     ventana 1100  →  1100                            (ya cabe)
 *
 * O sea que la franja en blanco al arrastrar seguía ahí para cualquiera con un
 * portátil de 1024 px de ancho útil. Salió al medir el botón nuevo en cinco
 * anchos en vez de en uno — la misma lección de la nota de arriba, otra vez.
 */
@media(max-width:1100px){
  .topbar-qc-btn,.topbar-new-btn{
    font-size:0;gap:0;padding:9px 11px;min-width:40px;justify-content:center;
  }
  .topbar-qc-btn svg,.topbar-new-btn svg{width:16px;height:16px}
}

.topbar-qc-btn:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-light)}
.topbar-new-btn{white-space:nowrap}
.topbar-qc-wrap{position:relative;display:inline-flex}
/* El menú de «Acciones rápidas» reusa la caja del menú del avatar, pero se
   ancla a la IZQUIERDA de su disparador: colgado a la derecha se salía de la
   pantalla, porque este botón vive a media barra y no en la esquina. Y repone
   `font-size`, que abajo de 1100 px el disparador deja en 0 para quedarse en
   icono (ver la nota de `.topbar-qc-btn`). */
.qa-menu{left:0;right:auto;min-width:210px;font-size:13px}
.qa-chevron{transition:transform var(--t)}
#qaBtn[aria-expanded="true"] .qa-chevron{transform:rotate(180deg)}
.top-user-wrap{position:relative}
.top-user-btn{
  display:flex;align-items:center;gap:7px;
  padding:5px 10px 5px 6px;
  border-radius:20px;border:1px solid var(--border);
  background:white;transition:box-shadow var(--t);cursor:pointer;
  font-family:var(--font);-webkit-appearance:none;appearance:none;
}
.top-user-btn:hover{box-shadow:var(--shadow-md)}
.top-user-btn[aria-expanded="true"]{box-shadow:var(--shadow-md);border-color:rgba(37,99,235,0.3)}
.top-user-chevron{opacity:0.4;transition:transform 0.2s ease;flex-shrink:0}
.top-user-btn[aria-expanded="true"] .top-user-chevron{transform:rotate(180deg);opacity:0.7}

/* ─── User dropdown menu ─────────────────────────────────────────────────── */
.top-user-dropdown{
  position:absolute;right:0;top:calc(100% + 8px);
  background:white;border:1px solid var(--border);
  border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);
  min-width:230px;z-index:400;overflow:hidden;
  animation:dropdownIn 0.15s ease;
}
@keyframes dropdownIn{
  from{opacity:0;transform:translateY(-6px) scale(0.98)}
  to{opacity:1;transform:translateY(0) scale(1)}
}
.top-user-dropdown.hidden{display:none!important}
.tud-header{
  display:flex;align-items:center;gap:10px;
  padding:14px 16px;background:#FAFAFA;
}
.tud-avatar{
  width:36px;height:36px;border-radius:50%;flex-shrink:0;
  background:linear-gradient(135deg,var(--blue),#6366F1);
  color:white;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:14px;
}
.tud-header-info{min-width:0;flex:1}
.tud-name{font-size:13px;font-weight:700;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tud-email{font-size:11px;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px}
.tud-divider{height:1px;background:var(--border-light)}
.tud-item{
  display:flex;align-items:center;gap:9px;width:100%;
  padding:10px 16px;font-size:13.5px;font-weight:500;
  color:var(--text);cursor:pointer;
  background:none;border:none;font-family:var(--font);text-align:left;
  transition:background var(--t),color var(--t);text-decoration:none;
}
.tud-item:hover{background:#F0F7FF;color:var(--blue)}
.tud-item svg{color:var(--text-muted);flex-shrink:0;transition:color var(--t)}
.tud-item:hover svg{color:var(--blue)}
.tud-logout:hover{background:#FEF2F2!important;color:var(--red)!important}
.tud-logout:hover svg{color:var(--red)!important}

/* ─── Dashboard hero ─────────────────────────────────────────────────────── */
.dash-hero{
  background:linear-gradient(135deg,#EFF6FF 0%,#E0F2FE 55%,#F0FDFA 100%);
  border-radius:var(--radius-lg);
  border:1px solid rgba(37,99,235,0.1);
  padding:28px 32px;
  margin-bottom:20px;
  overflow:hidden;
  position:relative;
}
.dash-hero-content{display:flex;align-items:center;justify-content:space-between;gap:24px}
.dash-hero-text{flex:1;min-width:0}
.dash-greeting{font-size:22px;font-weight:800;color:var(--text);letter-spacing:-0.02em;margin-bottom:4px}
.dash-greeting-sub{font-size:14px;color:var(--text-muted);margin-bottom:8px}
.dash-date{
  display:inline-flex;align-items:center;gap:5px;
  font-size:12.5px;color:var(--text-muted);font-weight:500;
  background:rgba(255,255,255,0.7);padding:4px 10px;border-radius:20px;
  border:1px solid rgba(37,99,235,0.12);margin-bottom:18px;
}
.dash-hero-actions{display:flex;gap:10px;flex-wrap:wrap}
.dash-qc-btn{background:rgba(255,255,255,0.8)!important}
.dash-qc-btn:hover{background:white!important}

/* Hero illustration */
.dash-hero-illus{
  position:relative;width:240px;height:160px;flex-shrink:0;
}
@media (max-width:860px){.dash-hero-illus{display:none}}

.hi-blob{
  position:absolute;right:-30px;bottom:-30px;
  width:180px;height:180px;
  background:rgba(37,99,235,0.07);border-radius:50%;
}
.hi-card{
  position:absolute;background:white;border-radius:12px;
  box-shadow:0 6px 24px rgba(0,0,0,0.08),0 2px 8px rgba(0,0,0,0.04);
}
.hi-card-main{
  right:0;bottom:0;width:155px;padding:13px;
  transform:rotate(-4deg);
}
.hi-card-dots{display:flex;gap:4px;margin-bottom:8px}
.hi-dot{width:7px;height:7px;border-radius:50%;background:#E5E7EB}
.hi-dot-g{background:#10B981}
.hi-card-icon{display:flex;justify-content:center;margin-bottom:8px}
.hi-lines{display:flex;flex-direction:column;gap:5px}
.hi-line{height:6px;background:#EFF6FF;border-radius:4px;width:100%}
.hi-line-short{width:65%}
.hi-float-circle{
  position:absolute;background:white;border-radius:50%;
  box-shadow:0 4px 16px rgba(0,0,0,0.1);
  display:flex;align-items:center;justify-content:center;
}
.hi-steth{top:0;right:100px;width:60px;height:60px;transform:rotate(8deg)}
.hi-pulse{top:50px;left:10px;width:40px;height:40px;background:var(--green-light)}

/* ─── KPI grid ───────────────────────────────────────────────────────────── */
.dash-kpi-grid{
  display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px;
}
.kpi-card{
  background:white;border-radius:var(--radius);border:1px solid var(--border);
  box-shadow:var(--shadow);padding:18px 16px 0;
  display:flex;align-items:flex-start;gap:13px;
  position:relative;overflow:hidden;
  transition:transform var(--t),box-shadow var(--t);
  cursor:default;
}
/* El `z-index` NO es decorativo, y por eso va junto al `transform`.
 *
 * 24-ago-2026: la nota negra de ayuda salía tapada por la fila de gráficas del
 * Inicio. La causa es que un `transform` CREA UN CONTEXTO DE APILAMIENTO, y este
 * aparece justo en el momento en que se muestra el tooltip —al hacer hover—. El
 * `z-index:1010` del tooltip quedaba atrapado DENTRO de ese contexto; hacia
 * afuera la tarjeta valía `z-index:auto`, y `.trend-card` viene después en el
 * DOM, así que ganaba por orden de pintado.
 *
 * Nunca se había visto porque hasta que existió esa fila no había nada debajo
 * que pudiera taparlo. Si alguien quita el `transform`, este `z-index` deja de
 * hacer falta — pero no estorba. */
.kpi-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);z-index:20}
.kpi-card[data-tooltip]{overflow:visible} /* allow tooltip to escape card bounds */
.kpi-icon-wrap{
  width:42px;height:42px;border-radius:var(--radius-sm);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
.kpi-icon-wrap svg{width:20px;height:20px}
.kpi-icon-blue{background:var(--blue-light);color:var(--blue)}
.kpi-icon-green{background:var(--green-light);color:var(--green)}
.kpi-icon-amber{background:var(--orange-light);color:var(--orange)}
.kpi-icon-purple{background:var(--purple-light);color:var(--purple)}
.kpi-body{flex:1;padding-bottom:18px}
.kpi-num{
  font-size:32px;font-weight:900;color:var(--text);letter-spacing:-0.04em;line-height:1;margin-bottom:3px;
}
.kpi-label{font-size:13px;font-weight:600;color:var(--text);margin-bottom:2px}
.kpi-micro{font-size:11.5px;color:var(--text-muted)}
.kpi-bar{
  position:absolute;bottom:0;left:0;right:0;height:3px;border-radius:0 0 var(--radius) var(--radius);
}
.kpi-bar-blue{background:var(--blue)}
.kpi-bar-green{background:var(--green)}
.kpi-bar-amber{background:var(--orange)}
.kpi-bar-purple{background:var(--purple)}

/* ─── Fila de evolución (gráficas mes a mes) ─────────────────────────────── */
/* Cuelga de la fila de KPI de arriba y repite su lenguaje: misma tarjeta, mismo
   borde, misma sombra. Cada tarjeta es un número grande que pinta el SERVIDOR
   más un lienzo que puede quedarse vacío si el CDN de Chart.js no llega — por
   eso el número nunca vive dentro del canvas. */
.dash-trend-grid{
  display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:20px;
}
/* 🚨 Cuatro en el mismo renglón cuando la de Ganancia también se pinta
   (3-sep-2026, encargo de Francisco). Va con una clase y NO con
   `auto-fit`: con `auto-fit` el número de columnas depende del ancho exacto
   de la ventana, y hay pruebas de navegador que lo cuentan. Una clase dice
   la intención y se puede medir. */
.dash-trend-grid.con-ganancia{grid-template-columns:repeat(4,1fr)}
.trend-card{
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:15px 16px 12px;position:relative;overflow:hidden;
  min-width:0;
}
.trend-head{display:flex;align-items:center;gap:7px;margin-bottom:9px}
.trend-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.trend-title{font-size:12.5px;font-weight:700;color:var(--text)}
/* De quién es la gráfica (11-sep-2026). Va en el encabezado de la tarjeta, a
   la derecha del título, y es el mismo segmentado de Insumos y Mis finanzas —
   más pequeño porque aquí compite con una tarjeta, no con una pantalla. */
.trend-ambito{display:inline-flex;gap:2px;margin-left:auto;padding:2px;min-width:0;
  background:#F1F5F9;border:1px solid var(--border);border-radius:999px}
/* El que se encoge es el selector, NO el título: sin esto, «Ganancia por mes»
   se partía en dos renglones y esa tarjeta quedaba más alta que sus tres
   hermanas de la misma fila. */
.trend-head .trend-title{flex-shrink:0}
.trend-ambito a{padding:3px 8px;border-radius:999px;font-size:11px;font-weight:700;
  color:#64748B;text-decoration:none;white-space:nowrap;max-width:88px;min-width:0;
  overflow:hidden;text-overflow:ellipsis}
.trend-ambito a:hover{color:var(--text);background:#fff}
.trend-ambito a.on{background:#0F172A;color:#fff}
.trend-figure{display:flex;align-items:baseline;gap:9px;margin-bottom:2px;flex-wrap:wrap}
.trend-value{
  font-size:27px;font-weight:900;color:var(--text);letter-spacing:-0.04em;line-height:1;
}
.trend-delta{font-size:12px;font-weight:700;display:inline-flex;align-items:center;gap:3px}
.trend-delta-up{color:#047857}      /* verde oscuro: legible como TEXTO, que --green no es */
.trend-delta-down{color:#B91C1C}
.trend-delta-flat{color:var(--text-muted)}
.trend-sub{font-size:11.5px;color:var(--text-muted);margin-bottom:9px}
.trend-canvas{height:96px;position:relative}
.trend-axis{
  display:flex;justify-content:space-between;font-size:10.5px;color:var(--text-subtle);
  margin-top:5px;font-variant-numeric:tabular-nums;
}
.trend-legend{display:flex;gap:13px;margin-top:9px;flex-wrap:wrap}
.trend-legend span{
  display:inline-flex;align-items:center;gap:5px;
  font-size:11px;font-weight:600;color:var(--text-muted);
}
.trend-legend i{width:9px;height:9px;border-radius:2.5px;display:inline-block;flex-shrink:0}

/* La tira que sustituye a la fila mientras el médico no tiene dos meses de
   historia. Tres lienzos vacíos arriba de todo se ven rotos. */
.trend-invite{
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:16px 20px;margin:0 0 20px;
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
}
.trend-invite-icon{
  width:44px;height:44px;border-radius:11px;background:var(--blue-light);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
.trend-invite-text{flex:1;min-width:200px}
.trend-invite-title{font-size:14px;font-weight:700;color:var(--text)}
.trend-invite-sub{font-size:13px;color:var(--text-muted);margin-top:2px}

/* ─── Quick actions grid ─────────────────────────────────────────────────── */
.dash-section-header{margin-bottom:10px}
.dash-section-title{font-size:13.5px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.06em}
.dash-qactions-grid{
  display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:24px;
}
.dqa-card{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  padding:16px 10px 14px;background:white;border:1px solid var(--border);
  border-radius:var(--radius);box-shadow:var(--shadow);cursor:pointer;
  text-align:center;transition:all var(--t);text-decoration:none;
  font-family:var(--font);
}
.dqa-card:hover{border-color:var(--blue);box-shadow:var(--shadow-md);transform:translateY(-2px)}
.dqa-icon{
  width:44px;height:44px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  transition:transform var(--t);
}
.dqa-card:hover .dqa-icon{transform:scale(1.08)}
.dqa-icon svg{width:20px;height:20px}
.dqa-blue{background:var(--blue-light);color:var(--blue)}
.dqa-indigo{background:var(--indigo-light);color:var(--indigo)}
.dqa-green{background:var(--green-light);color:var(--green)}
.dqa-amber{background:var(--orange-light);color:var(--orange)}
.dqa-gray{background:var(--border-light);color:var(--text-muted)}
.dqa-label{font-size:12px;font-weight:600;color:var(--text);line-height:1.3}

/* ─── Dashboard main grid ────────────────────────────────────────────────── */
.dash-main-grid{display:grid;grid-template-columns:1fr 320px;gap:18px;margin-bottom:18px;align-items:start}
.dash-main-left{display:flex;flex-direction:column;gap:0}
.dash-main-right{display:flex;flex-direction:column;gap:0}

/* ─── Empty consultations state ──────────────────────────────────────────── */
.dash-empty-consults{
  display:flex;flex-direction:column;align-items:center;gap:10px;
  padding:32px 20px;text-align:center;
}
.dec-icon-wrap{
  width:72px;height:72px;background:var(--bg);border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  border:1px solid var(--border);
}
.dec-title{font-size:15px;font-weight:700;color:var(--text)}
.dec-sub{font-size:13px;color:var(--text-muted);max-width:300px;line-height:1.5}

/* ─── Patient list (dashboard) ───────────────────────────────────────────── */
.dash-patient-list{display:flex;flex-direction:column;gap:0}
.dpl-item{
  display:flex;align-items:center;gap:12px;
  padding:11px 0;border-bottom:1px solid var(--border-light);
  transition:background var(--t);
}
.dpl-item:last-child{border-bottom:none}
.dpl-avatar{
  width:38px;height:38px;border-radius:50%;
  background:linear-gradient(135deg,var(--blue),var(--indigo));
  color:white;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:14px;flex-shrink:0;
}
.dpl-content{flex:1;min-width:0}
.dpl-name{font-size:14px;font-weight:700;color:var(--text);margin-bottom:2px}
.dpl-meta{font-size:12px;color:var(--text-muted);margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dpl-badges{display:flex;gap:4px;flex-wrap:wrap}
.dpl-badge{font-size:10.5px;font-weight:600;padding:1px 7px;border-radius:10px}
.dpl-badge.red{background:var(--red-light);color:#DC2626}
.dpl-badge.amber{background:var(--orange-light);color:#92400E}
.dpl-badge.blue{background:var(--blue-light);color:var(--blue)}
.dpl-btn{
  padding:5px 12px;border-radius:var(--radius-sm);
  font-size:12px;font-weight:600;color:var(--blue);
  border:1.5px solid var(--blue);background:white;
  cursor:pointer;transition:all var(--t);white-space:nowrap;flex-shrink:0;
}
.dpl-btn:hover{background:var(--blue-light)}

/* ─── Agenda card ────────────────────────────────────────────────────────── */
.dash-agenda-card{margin-bottom:14px}
.dash-agenda-body{padding:16px}
.dash-agenda-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 0;text-align:center}
.dae-icon{margin-bottom:4px}
.dae-title{font-size:13.5px;font-weight:600;color:var(--text)}
.dae-sub{font-size:12px;color:var(--text-muted);max-width:200px;line-height:1.4}
.dash-agenda-count{text-align:center;padding:14px 0}
.dac-num{font-size:40px;font-weight:900;color:var(--amber);letter-spacing:-0.04em;line-height:1}
.dac-label{font-size:13px;color:var(--text-muted);margin-top:4px;margin-bottom:14px}

/* ─── Mini stats (right sidebar) ─────────────────────────────────────────── */
.dash-mini-stats{display:flex;flex-direction:column;gap:0}
.dms-item{
  display:flex;justify-content:space-between;align-items:center;
  padding:8px 0;border-bottom:1px solid var(--border-light);font-size:13px;
}
.dms-item:last-child{border-bottom:none}
.dms-item dt{color:var(--text-muted);font-weight:500}
.dms-item dd{font-weight:800;color:var(--text);font-size:15px}
.dms-amber{color:var(--orange)!important}
.dms-red{color:var(--red)!important}

/* ─── Recommended flow ───────────────────────────────────────────────────── */
.dash-flow-card .card-body{padding:20px 24px}
.dash-flow{display:flex;align-items:center;gap:16px}
.df-step{display:flex;align-items:flex-start;gap:12px;flex:1;min-width:0}
.df-arrow{
  flex-shrink:0;color:var(--border);
  width:28px;height:28px;
}
.df-arrow svg{width:28px;height:28px;color:#CBD5E1}
.df-num{
  width:28px;height:28px;border-radius:50%;
  background:var(--blue);color:white;
  display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:800;flex-shrink:0;margin-top:2px;
}
.df-icon{
  width:44px;height:44px;border-radius:var(--radius-sm);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
.df-icon svg{width:20px;height:20px}
.df-icon-blue{background:var(--blue-light);color:var(--blue)}
.df-icon-green{background:var(--green-light);color:var(--green)}
.df-icon-amber{background:var(--orange-light);color:var(--orange)}
.df-text{flex:1;min-width:0}
.df-title{font-size:13.5px;font-weight:700;color:var(--text);margin-bottom:3px}
.df-sub{font-size:12px;color:var(--text-muted);line-height:1.4}

/* ─── Responsive dashboard ───────────────────────────────────────────────── */
@media (max-width:1100px){
  .dash-kpi-grid{grid-template-columns:repeat(2,1fr)}
  .dash-trend-grid{grid-template-columns:repeat(3,1fr)}
  .dash-trend-grid.con-ganancia{grid-template-columns:repeat(2,1fr)}
  .dash-qactions-grid{grid-template-columns:repeat(3,1fr)}
  .dash-main-grid{grid-template-columns:1fr}
}
@media (max-width:720px){
  .dash-hero{padding:20px 18px}
  .dash-greeting{font-size:18px}
  .dash-kpi-grid{grid-template-columns:repeat(2,1fr)}
  .dash-trend-grid,.dash-trend-grid.con-ganancia{grid-template-columns:1fr}
  .dash-qactions-grid{grid-template-columns:repeat(3,1fr)}
  .dash-flow{flex-direction:column;gap:12px}
  .df-arrow{transform:rotate(90deg);align-self:center}
  .topbar-new-btn{display:none}
}
@media (max-width:480px){
  .dash-kpi-grid{grid-template-columns:1fr}
  .dash-qactions-grid{grid-template-columns:repeat(2,1fr)}
}

/* ═══════════════════════════════════════════════════════════════════════════ */
/* PATIENTS PAGE — Premium redesign                                            */
/* ═══════════════════════════════════════════════════════════════════════════ */

/* ─── Hero ───────────────────────────────────────────────────────────────── */
.pt-hero{
  background:linear-gradient(135deg,#EFF6FF 0%,#E0F2FE 55%,#F0FDFA 100%);
  border-radius:var(--radius-lg);border:1px solid rgba(37,99,235,0.1);
  overflow:hidden;margin-bottom:20px;
}
.pt-hero-inner{display:flex;align-items:center;justify-content:space-between;padding:24px 30px}
.pt-hero-title{font-size:28px;font-weight:900;color:var(--text);letter-spacing:-0.03em;margin-bottom:5px}
.pt-hero-sub{font-size:14.5px;color:var(--text-muted);font-weight:400}
.pt-hero-illus{flex-shrink:0;width:380px;height:160px}
.pt-hero-illus svg{width:100%;height:100%}
@media(max-width:860px){.pt-hero-illus{display:none}}

/* ─── KPI row ────────────────────────────────────────────────────────────── */
.pt-kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px}
/* 9-oct-2026 · Oferta del Paciente 0 de su especialidad (patients.html). */
.pt-ejemplo-oferta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 16px;padding:12px 14px;
  border:1.5px dashed #A7C7F5;border-radius:14px;background:#F5F9FF}
.pt-eo-ico{flex:0 0 34px;height:34px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;
  background:#E0ECFF;color:#1D4ED8}
.pt-eo-txt{flex:1 1 260px;min-width:0}
.pt-eo-txt b{display:block;font-size:14px;color:#0F172A;line-height:1.35}
.pt-eo-txt span{display:block;font-size:13px;color:#475569;line-height:1.5;margin-top:2px}
.pt-eo-btn{min-height:40px;white-space:nowrap}
@media (max-width:520px){.pt-eo-btn{width:100%}}
.pt-kpi-card{
  background:white;border-radius:var(--radius);border:1px solid var(--border);
  box-shadow:var(--shadow);padding:16px 18px;
  display:flex;align-items:center;gap:14px;
  transition:transform var(--t),box-shadow var(--t);cursor:default;
}
.pt-kpi-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.pt-kpi-icon{
  width:44px;height:44px;border-radius:50%;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
}
.pt-kpi-icon svg{width:20px;height:20px}
.pt-kpi-blue{background:var(--blue-light);color:var(--blue)}
.pt-kpi-green{background:var(--green-light);color:var(--green)}
.pt-kpi-amber{background:var(--orange-light);color:var(--orange)}
.pt-kpi-purple{background:var(--purple-light);color:var(--purple)}
.pt-kpi-num{font-size:28px;font-weight:900;color:var(--text);letter-spacing:-0.04em;line-height:1}
.pt-kpi-label{font-size:13px;font-weight:600;color:var(--text);margin-top:2px}
.pt-kpi-micro{font-size:11px;color:var(--text-muted);margin-top:1px}
@media(max-width:900px){.pt-kpi-row{grid-template-columns:repeat(2,1fr)}}
@media(max-width:480px){.pt-kpi-row{grid-template-columns:1fr}}

/* ─── Controls row (search + button) ────────────────────────────────────── */
.pt-controls-row{display:flex;gap:10px;align-items:center;margin-bottom:12px}
.pt-search-form{flex:1;min-width:0}
.pt-search-wrap{position:relative;display:flex;align-items:center}
.pt-search-icon{
  position:absolute;left:13px;width:15px;height:15px;
  color:var(--text-muted);flex-shrink:0;pointer-events:none;
}
.pt-search-inp{
  width:100%;padding:10px 40px 10px 38px;
  border:1.5px solid var(--border);border-radius:var(--radius-sm);
  font-size:14px;color:var(--text);background:white;
  transition:border-color var(--t),box-shadow var(--t);
  font-family:var(--font);
}
.pt-search-inp:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,0.09)}
.pt-search-clear{
  position:absolute;right:12px;color:var(--text-muted);
  display:flex;align-items:center;transition:color var(--t);
}
.pt-search-clear:hover{color:var(--red)}

/* ─── Filter chips row ───────────────────────────────────────────────────── */
.pt-filter-row{
  display:flex;align-items:center;gap:10px;
  margin-bottom:16px;flex-wrap:wrap;
}
.pt-filter-label{font-size:12.5px;font-weight:700;color:var(--text-muted);white-space:nowrap}
.pt-filter-chips{display:flex;gap:6px;flex-wrap:wrap;overflow-x:auto;flex:1}
.pt-chip{
  display:inline-flex;align-items:center;padding:5px 14px;
  border-radius:20px;font-size:12.5px;font-weight:600;
  color:var(--text-muted);border:1.5px solid var(--border);
  background:white;transition:all var(--t);white-space:nowrap;cursor:pointer;
}
.pt-chip:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-light)}
.pt-chip.active{background:var(--blue);color:white;border-color:var(--blue)}
/* ─── Table card ─────────────────────────────────────────────────────────── */
.pt-table-card{margin-bottom:0}
.pt-table-wrap{overflow-x:auto}
.pt-table{width:100%;border-collapse:collapse}

/* Table header */
.pt-th{
  text-align:left;padding:11px 8px;
  font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:0.03em;
  color:var(--text-muted);background:#FAFAFA;
  border-bottom:1.5px solid var(--border);
  white-space:nowrap;
  display:table-cell;
}
.pt-th:first-child{padding-left:14px}
.pt-th:last-child{text-align:center}
.pt-th{cursor:default}
.pt-th svg{margin-left:3px;opacity:0.5;vertical-align:middle}
.pt-th-actions{text-align:center!important}

/* ── Encabezados que ordenan (17-sep-2026) ─────────────────────────────────
   El `<a>` se come el padding del `<th>` a propósito: así el área de clic es
   la celda entera y no sólo las siete letras de «Edad». La flecha apagada de
   doble punta dice «esto se puede ordenar» sin gritar; la encendida dice por
   dónde va. Antes había una flecha dibujada en «Paciente» que no hacía nada. */
.pt-th-ord{padding:0;cursor:pointer}
.pt-th-ord .pt-th-a{
  position:relative;
  display:flex;align-items:center;gap:4px;
  padding:11px 8px;color:inherit;text-decoration:none;
  font:inherit;letter-spacing:inherit;text-transform:inherit;
  transition:background .12s ease,color .12s ease;
}
.pt-th-ord:first-child .pt-th-a{padding-left:14px}
/* El aviso de «esto ordena» para las columnas INACTIVAS es el fondo y el
   subrayado, no una flecha: una flecha por encabezado cuesta ~64 px del
   presupuesto de ancho de la tabla y devuelve el scroll horizontal. */
.pt-th-ord .pt-th-a:hover{background:#F1F5F9;color:var(--text);text-decoration:underline;text-underline-offset:3px}
.pt-th-ord .pt-th-a:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}
/* 🚨 ABSOLUTA, y ésta es la línea que sostiene el presupuesto de ancho.
   Medido: con la flecha EN FLUJO, «Consultas» crecía 16 px y «Última visita»
   12 px al volverse la columna activa — el encabezado es lo que fija el ancho
   de esas dos columnas, no el dato—. Un elemento absoluto no aporta nada al
   ancho intrínseco, así que la tabla mide exactamente lo mismo esté ordenada
   por donde esté. Vive en el canalón de 16 px que dejan los dos `padding` de
   8 px, sin tocar el texto de ningún encabezado.
   Lo verifica `scripts/medir_ancho_tabla.py`. */
.pt-th .pt-th-flecha{
  position:absolute;right:-5px;top:50%;margin-top:-6px;
  margin-left:0;opacity:1;flex:0 0 auto;pointer-events:none;
}
.pt-th-ord-on{background:#F5F8FF;color:var(--blue)}

/* ── «Ordenar por» (17-sep-2026) ───────────────────────────────────────────
   Vive en el renglón de filtros porque es la misma pregunta: qué veo y en qué
   orden. En el móvil no hay encabezados que picar, así que aquí es donde se
   ordena; en el escritorio es además el único camino de vuelta a «Registro»,
   que no tiene columna en la tabla. */
.pt-orden-y-filtros{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px;
}
.pt-orden-y-filtros .pt-filter-row{flex:1 1 420px;margin-bottom:0;min-width:0}
.pt-orden{display:inline-flex;align-items:center;gap:6px;flex-shrink:0;min-width:0}
.pt-orden-lbl{font-size:12.5px;font-weight:700;color:var(--text-muted);white-space:nowrap}
.pt-orden-sel{
  font-size:12.5px;font-weight:600;color:var(--text);
  background:#fff;border:1px solid var(--border);border-radius:8px;
  padding:5px 26px 5px 9px;cursor:pointer;max-width:300px;
  appearance:none;-webkit-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748B' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 8px center;background-size:11px;
}
.pt-orden-sel:hover{border-color:#CBD5E1}
.pt-orden-sel:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
/* Fold cerrada (344px) y teléfono: el selector se lleva el renglón completo
   antes que salir cortado a la mitad de «Última visita». */
@media (max-width: 620px){
  .pt-orden{width:100%;order:2}
  /* Fold cerrado (344 px): la etiqueta se lleva 100 px que el selector
     necesita para decir la opción completa. Se va del dibujo, no del
     significado: el `aria-label` del `<select>` sigue diciendo qué ordena. */
  .pt-orden-lbl{display:none}
  .pt-orden-sel{flex:1 1 auto;min-width:0;max-width:none}
  .pt-orden-y-filtros .pt-filter-row{flex:1 1 100%}
}

/* Table rows */
.pt-td{
  padding:13px 8px;border-bottom:1px solid var(--border-light);
  font-size:13.5px;color:var(--text);vertical-align:middle;
}
.pt-td:first-child{padding-left:14px}
.pt-row{transition:background var(--t)}
.pt-row:hover .pt-td{background:#F8FAFF}
.pt-row:last-child .pt-td{border-bottom:none}

/* Patient cell */
.pt-pat-cell{display:flex;align-items:center;gap:9px}
.pt-avatar-cell{
  width:34px;height:34px;border-radius:50%;flex-shrink:0;
  background:linear-gradient(135deg,var(--blue),var(--indigo));
  color:white;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:14px;
}
/* 14-sep-2026 · el paciente del consultorio compartido lleva el ícono de dos
   personas EN LUGAR de su inicial: mismo tamaño, misma posición, misma
   alineación de la fila. Un indicador por paciente y en el sitio donde el ojo
   ya está. Sirve para la tabla (.pt-avatar-cell) y para la tarjeta de móvil
   (.pt-mc-avatar). */
.pt-avatar-cell.pt-avatar-org,
.pt-mc-avatar.pt-avatar-org{
  background:#EDE9FE;color:#7C3AED;
  box-shadow:inset 0 0 0 1px rgba(124,58,237,.16);
}
.pt-avatar-cell.pt-avatar-org svg{width:17px;height:17px}
.pt-mc-avatar.pt-avatar-org svg{width:20px;height:20px}
/* La llave del ícono, sobre la tabla. */
.pt-leyenda-org{
  margin-left:auto;display:inline-flex;align-items:center;gap:7px;
  font-size:12px;color:var(--text-muted);white-space:nowrap;flex-shrink:0;
}
.pt-leyenda-icono{
  width:22px;height:22px;border-radius:50%;flex:0 0 22px;
  display:inline-flex;align-items:center;justify-content:center;
  background:#EDE9FE;color:#7C3AED;
}
.pt-leyenda-icono svg{width:12px;height:12px}
@media (max-width: 900px){ .pt-leyenda-org{display:none} }
.pt-pat-name{font-weight:700;color:var(--text);font-size:14px}
.pt-pat-sub{font-size:11.5px;color:var(--text-muted);margin-top:2px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pt-badge-new{
  font-size:9.5px;font-weight:800;text-transform:uppercase;
  background:var(--blue-light);color:var(--blue);
  padding:1px 7px;border-radius:10px;letter-spacing:0.04em;
}

/* Paciente de ejemplo - 27-ago-2026
 *
 * El degradado es el del LOGO (--brand-blue a --brand-green, 100deg), el mismo
 * del boton de sugerencias de la barra (.topbar-qc-sug, :2593). NO se usan
 * --blue/--green: esos son la paleta de la app, no la de la marca.
 *
 * El degradado NO va como fondo del <td>. .pt-row:hover .pt-td pinta #F8FAFF
 * sobre la celda (:1481) y lo borraria justo al pasar el raton, que es cuando
 * el medico esta mirando. Va como barra de acento en un pseudo-elemento DENTRO
 * de la celda, que ademas sobrevive al .card{overflow:hidden} de la tabla.
 */
.pt-badge-ejemplo{
  font-size:9.5px;font-weight:800;text-transform:uppercase;
  background:linear-gradient(100deg,var(--brand-blue) 0%,var(--brand-green) 100%);
  color:#fff;
  padding:1px 8px;border-radius:10px;letter-spacing:0.04em;
  white-space:nowrap;
}
.pt-row-ejemplo .pt-td:first-child{position:relative}
.pt-row-ejemplo .pt-td:first-child::before{
  content:'';position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(180deg,var(--brand-blue),var(--brand-green));
}
/* El renglon lleva un tinte de marca apenas perceptible, y su hover se
 * REDEFINE: si no, el #F8FAFF generico se lo comeria y el renglon perderia su
 * identidad justo al senalarlo. */
.pt-row-ejemplo .pt-td{background:linear-gradient(100deg,rgba(27,123,214,0.035) 0%,rgba(84,185,72,0.035) 100%)}
.pt-row-ejemplo:hover .pt-td{background:linear-gradient(100deg,rgba(27,123,214,0.085) 0%,rgba(84,185,72,0.085) 100%)}

/* Age/Gender cell */
.pt-age-gender{display:flex;flex-direction:column;gap:2px}
.pt-age-val{font-size:13.5px;font-weight:600;color:var(--text);white-space:nowrap}
.pt-gender-val{font-size:12px;color:var(--text-muted);display:flex;align-items:center;gap:3px;white-space:nowrap}
.pt-gender-sym{font-size:14px;font-weight:700}
.pt-gender-sym.male{color:#3B82F6}
.pt-gender-sym.female{color:#EC4899}

/* Contact cell */
.pt-contact{display:flex;flex-direction:column;gap:4px}
.pt-contact-item{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--text-muted)}
.pt-contact-item svg{flex-shrink:0;opacity:0.5}
.pt-contact-empty{color:var(--text-subtle)}
/* WhatsApp: el número es el botón. Mismo verde sólido que el texto (sin el opacity:0.5
   de los íconos de contacto) y zoom al pasar el mouse sobre número + logo. */
.pt-wa{display:inline-flex;align-items:center;gap:5px;color:#16A34A;font-weight:600;text-decoration:none;transition:transform .15s ease;transform-origin:left center}
.pt-wa svg{opacity:1;fill:#16A34A}
.pt-wa:hover{transform:scale(1.12)}

/* Clinical alerts cell */
.pt-alerts-cell{display:flex;flex-direction:column;gap:4px}
.pt-alert-tag{
  display:inline-flex;align-items:center;gap:4px;
  font-size:11px;font-weight:700;padding:2px 8px;border-radius:10px;
  width:fit-content;
}
.pt-alert-red{background:var(--red-light);color:#DC2626}
.pt-chronic-text{font-size:12px;color:var(--text-muted);line-height:1.3}
.pt-no-chronic{font-size:11.5px;color:var(--text-subtle)}

/* Consultation count cell */
.pt-consult-cell{display:flex;flex-direction:column;align-items:center;gap:2px}
.pt-consult-count{
  width:30px;height:30px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:800;
  background:var(--border-light);color:var(--text-muted);
  border:1.5px solid var(--border);
}
.pt-consult-count.has-consults{background:var(--blue-light);color:var(--blue);border-color:rgba(37,99,235,0.2)}
.pt-consult-word{font-size:10.5px;color:var(--text-subtle);text-align:center}

/* Last visit cell */
.pt-last-visit{display:flex;align-items:center;gap:5px;font-size:13px;color:var(--text-muted);white-space:nowrap}
.pt-last-visit svg{opacity:0.5;flex-shrink:0}
.pt-never{color:var(--text-subtle)}

/* Actions cell */
.pt-td-actions{text-align:center}
.pt-actions{display:flex;align-items:center;justify-content:center;gap:4px}
.pt-act-btn{
  display:inline-flex;align-items:center;gap:4px;
  padding:5px 10px;border-radius:var(--radius-sm);
  font-size:12px;font-weight:600;color:var(--text-muted);
  background:transparent;border:1px solid transparent;cursor:pointer;
  transition:all var(--t);white-space:nowrap;font-family:var(--font);
}
.pt-act-btn:hover{background:var(--bg);border-color:var(--border);color:var(--text)}
/* Modo icono: "Ver" desaparecio (la fila entera abre el expediente) y Editar/Mas
 * se quedan sin etiqueta para que las 9 columnas quepan sin scroll horizontal.
 * El texto vive en title/aria-label, asi que no se pierde para lector de pantalla. */
.pt-act-icon{padding:6px;gap:0}
.pt-actions{gap:2px}
.pt-act-btn svg{flex-shrink:0}

/* Dropdown */
.pt-more-wrap{position:relative}
.pt-dropdown{
  position:fixed;
  background:white;border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow-md);min-width:168px;z-index:9000;padding:4px;
}
.pt-dd-item{
  display:flex;align-items:center;gap:8px;width:100%;
  padding:8px 10px;border-radius:var(--radius-sm);
  font-size:13px;color:var(--text);cursor:pointer;
  background:none;border:none;font-family:var(--font);text-align:left;
  transition:background var(--t);
}
.pt-dd-item:hover{background:var(--bg)}
.pt-dd-item svg{color:var(--text-muted)}
.pt-dd-sep{height:1px;background:var(--border-light);margin:3px 0}
.pt-dd-danger{color:var(--red)!important}
.pt-dd-danger:hover{background:var(--red-light)!important}
.pt-dd-danger svg{color:var(--red)!important}

/* Table footer */
.pt-table-footer{
  display:flex;align-items:center;justify-content:space-between;
  padding:12px 20px;border-top:1px solid var(--border-light);
  flex-wrap:wrap;gap:10px;
}
.pt-showing{font-size:13px;color:var(--text-muted)}
.pt-pagination{display:flex;align-items:center;gap:6px}
.pt-pg-btn{
  width:30px;height:30px;border-radius:var(--radius-sm);
  border:1px solid var(--border);background:white;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  color:var(--text-muted);transition:all var(--t);
}
.pt-pg-btn:hover:not([disabled]){border-color:var(--blue);color:var(--blue)}
.pt-pg-btn:disabled{opacity:0.4;cursor:not-allowed}
.pt-pg-current{
  width:30px;height:30px;border-radius:var(--radius-sm);
  background:var(--blue);color:white;
  display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:700;
}
.pt-per-page{
  display:flex;align-items:center;gap:4px;
  font-size:13px;color:var(--text-muted);cursor:pointer;
}

/* ─── Empty state ────────────────────────────────────────────────────────── */
.pt-empty-card{
  background:white;border-radius:var(--radius-lg);border:1px solid var(--border);
  box-shadow:var(--shadow);padding:60px 40px;
  display:flex;flex-direction:column;align-items:center;gap:14px;
  text-align:center;margin-bottom:18px;
}
.pt-empty-illus{margin-bottom:8px}
.pt-empty-illus svg{width:180px;height:140px}
.pt-empty-title{font-size:17px;font-weight:800;color:var(--text)}
.pt-empty-sub{font-size:14px;color:var(--text-muted);max-width:380px;line-height:1.5}

/* ─── What can you do section ────────────────────────────────────────────── */
.pt-what{margin-top:20px}
.pt-what-title{font-size:15px;font-weight:700;color:var(--text);margin-bottom:12px}
.pt-what-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.pt-what-card{
  display:flex;align-items:center;gap:12px;
  background:white;border:1px solid var(--border);border-radius:var(--radius);
  padding:16px;box-shadow:var(--shadow);
  transition:all var(--t);cursor:pointer;
  font-family:var(--font);text-align:left;
}
.pt-what-card:hover{border-color:var(--blue);box-shadow:var(--shadow-md);transform:translateY(-1px)}
.pt-what-icon{
  width:42px;height:42px;border-radius:var(--radius-sm);flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
}
.pt-what-icon svg{width:19px;height:19px}
.pt-wi-blue{background:var(--blue-light);color:var(--blue)}
.pt-wi-green{background:var(--green-light);color:var(--green)}
.pt-wi-amber{background:var(--orange-light);color:var(--orange)}
.pt-wi-purple{background:var(--purple-light);color:var(--purple)}
.pt-what-name{font-size:13.5px;font-weight:700;color:var(--text);margin-bottom:3px}
.pt-what-desc{font-size:12px;color:var(--text-muted);line-height:1.4}

/* ─── Patients page responsive ───────────────────────────────────────────── */
@media(max-width:1000px){
  .pt-what-grid{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:800px){
  .pt-filter-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px}
  .pt-filter-chips::-webkit-scrollbar{display:none}

  /* Mobile: table → vertical cards */
  .pt-table-wrap{display:none}
  .pt-table-card::after{display:none}
}
@media(max-width:600px){
  .pt-hero-inner{padding:18px 16px}
  .pt-hero-title{font-size:22px}
  .pt-what-grid{grid-template-columns:1fr}
  .pt-controls-row{flex-wrap:wrap}
  .pt-controls-row .btn{width:100%}
  .pt-search-form{width:100%}
}

/* ═══════════════════════════════════════════════════════════════════════════ */
/* SETTINGS PAGE — Premium redesign                                            */
/* ═══════════════════════════════════════════════════════════════════════════ */

/* ─── Hero ───────────────────────────────────────────────────────────────── */
.cfg-hero{
  background:linear-gradient(135deg,#EFF6FF 0%,#E0F2FE 55%,#F0FDFA 100%);
  border-radius:var(--radius-lg);border:1px solid rgba(37,99,235,0.1);
  margin-bottom:20px;overflow:hidden;
}
.cfg-hero-inner{display:flex;align-items:center;justify-content:space-between;padding:24px 30px}
.cfg-hero-title{font-size:28px;font-weight:900;color:var(--text);letter-spacing:-0.03em;margin-bottom:5px}
.cfg-hero-sub{font-size:14px;color:var(--text-muted);line-height:1.5}
.cfg-hero-illus{flex-shrink:0;width:320px;height:180px}
.cfg-hero-illus svg{width:100%;height:100%}
@media(max-width:860px){.cfg-hero-illus{display:none}}

/* ─── Two-column main grid ───────────────────────────────────────────────── */
.cfg-main-grid{display:grid;grid-template-columns:280px 1fr;gap:20px;margin-bottom:20px;align-items:start}
/* min-width:0 en los hijos: por omisión un elemento de grid vale `min-width:auto`,
   así que un hijo ancho (una rejilla interna con una columna fija, una dirección
   larga) estira la columna y con ella la página entera. Es la causa clásica del
   scroll horizontal en tableta, donde la barra lateral ya ocupa su espacio pero
   la rejilla todavía no colapsa. */
.cfg-main-grid>*{min-width:0}
@media(max-width:1100px){.cfg-main-grid{grid-template-columns:1fr}}

/* ═══ Carril de navegación — acordeón vertical FIJO ═══════════════════════════
 *
 * 23-ago-2026. La pantalla juntaba DOCE temas en un scroll sin fin, sin forma de
 * saltar a ninguno. Ahora se agrupan en seis y este carril los gobierna.
 *
 * Se queda fijo al bajar (`sticky`) con su propio scroll: en una pantalla baja
 * —una laptop de 13"— el carril nunca tapa contenido ni se corta a la mitad.
 * Sólo en escritorio: a partir de 1100 px la rejilla colapsa a una columna y un
 * carril fijo en móvil estorbaría más de lo que ayuda.
 */
.cfg-rail{display:flex;flex-direction:column;gap:11px}
@media(min-width:1101px){
  .cfg-rail{position:sticky;top:16px;max-height:calc(100vh - 32px);
            overflow-y:auto;padding-right:2px}
  .cfg-rail::-webkit-scrollbar{width:5px}
  .cfg-rail::-webkit-scrollbar-thumb{background:#CBD5E1;border-radius:3px}
}

/* Tira de identidad: quién eres, siempre a la vista, en una línea. */
.cfg-who{
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:13px;display:flex;align-items:center;gap:11px;flex-shrink:0;
}
.cfg-who-av{
  width:38px;height:38px;border-radius:50%;background:var(--blue);color:#fff;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px;
}
.cfg-who-tx{min-width:0}
.cfg-who-n{font-size:13px;font-weight:800;line-height:1.25;color:var(--text);
           white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cfg-who-s{font-size:11.5px;color:var(--text-muted);margin-top:1px;
           white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.cfg-nav{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
         box-shadow:var(--shadow);padding:6px;flex-shrink:0}
.cfg-grp{border-radius:8px}
.cfg-grp + .cfg-grp{margin-top:1px}
.cfg-grp-h{
  display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:8px;width:100%;
  border:none;background:none;font-family:var(--font);font-size:13.5px;font-weight:600;
  color:var(--text-muted);cursor:pointer;text-align:left;
  transition:background var(--t),color var(--t);
}
.cfg-grp-h:hover{background:var(--border-light);color:var(--text)}
.cfg-grp.on > .cfg-grp-h{background:var(--blue-light);color:var(--blue-dark);font-weight:700}
.cfg-grp-h .cfg-gi{width:16px;height:16px;flex-shrink:0}
.cfg-grp-h .cfg-gn{font-size:11px;font-weight:700;color:var(--text-subtle);
                   font-variant-numeric:tabular-nums}
.cfg-grp.on .cfg-gn{color:var(--blue)}
.cfg-grp-h .cfg-ga{margin-left:auto;width:11px;height:11px;color:var(--text-subtle);
                   transition:transform .16s ease;flex-shrink:0}
.cfg-grp.open .cfg-ga{transform:rotate(90deg)}
.cfg-grp.on .cfg-ga{color:var(--blue)}

/* La sub-lista se abre con la ALTURA (grid-template-rows), no con `display`:
   así la apertura anima y el contenido sigue existiendo para el buscador del
   navegador aunque esté plegado. */
.cfg-subs{display:grid;grid-template-rows:0fr;transition:grid-template-rows .18s ease}
.cfg-grp.open .cfg-subs{grid-template-rows:1fr}
.cfg-subs-in{overflow:hidden}
.cfg-sub{
  display:block;width:100%;text-align:left;border:none;background:none;font-family:var(--font);
  font-size:12.5px;color:var(--text-muted);padding:6px 10px 6px 35px;border-radius:7px;
  cursor:pointer;position:relative;
}
.cfg-sub:hover{background:var(--border-light);color:var(--text)}
.cfg-sub.on{color:var(--blue-dark);font-weight:700}
.cfg-sub::before{content:'';position:absolute;left:19px;top:0;bottom:0;width:1.5px;
                 background:var(--border)}
.cfg-sub.on::before{background:var(--blue)}
.cfg-nav-sep{height:1px;background:var(--border-light);margin:5px 8px}

/* «Ver todo»: despliega los seis paneles seguidos para buscar con Ctrl+F. */
.cfg-verlotodo{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
               box-shadow:var(--shadow);padding:6px;flex-shrink:0}
.cfg-vt{
  display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:8px;width:100%;
  border:none;background:none;font-family:var(--font);font-size:13px;font-weight:600;
  color:var(--text-muted);cursor:pointer;text-align:left;
}
.cfg-vt:hover{background:var(--border-light);color:var(--text)}
.cfg-vt.on{background:var(--sidebar-bg);color:#fff}
.cfg-vt svg{width:15px;height:15px;flex-shrink:0}
.cfg-vt small{margin-left:auto;font-size:10.5px;font-weight:600;opacity:.7}

/* ═══ Paneles ═══ */
.cfg-pane{display:none}
.cfg-pane.on{display:block}
/* Modo «Ver todo»: los seis a la vez, separados por una raya. */
body.cfg-todo .cfg-pane{display:block}
body.cfg-todo .cfg-pane + .cfg-pane{border-top:1px solid var(--border);padding-top:24px;margin-top:24px}
.cfg-pane-h{margin-bottom:13px}
.cfg-pane-t{font-size:20px;font-weight:800;letter-spacing:-.02em;color:var(--text)}
.cfg-pane-s{font-size:13px;color:var(--text-muted);margin-top:3px}

/* Destello al llegar desde una sub-sección: sin él uno no sabe a dónde saltó. */
/* ─── Buscador del carril (25-ago-2026) ──────────────────────────────────── */
.cfg-buscar{position:relative}
.cfg-buscar svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);
  width:14px;height:14px;color:var(--text-muted);pointer-events:none}
.cfg-buscar input{width:100%;border:1px solid var(--border);border-radius:10px;
  background:var(--card);padding:9px 12px 9px 33px;font-size:13px;color:var(--text)}
.cfg-buscar input:focus{outline:none;border-color:var(--blue);
  box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.cfg-buscar input::-webkit-search-cancel-button{-webkit-appearance:none}
.cfg-buscar-res{position:absolute;z-index:120;top:calc(100% + 6px);left:0;right:0;
  background:#fff;border:1px solid var(--border);border-radius:12px;
  box-shadow:0 12px 32px rgba(15,23,42,.14);padding:4px;max-height:min(340px,55vh);
  overflow-y:auto}
.cfg-buscar-op{display:flex;flex-direction:column;gap:1px;width:100%;text-align:left;
  border:none;background:none;border-radius:8px;padding:8px 10px;cursor:pointer}
.cfg-buscar-op:hover,.cfg-buscar-op.on{background:var(--border-light)}
.cfg-buscar-t{font-size:13px;font-weight:600;color:var(--text)}
.cfg-buscar-g{font-size:11px;color:var(--text-muted)}
.cfg-buscar-vacio{padding:10px 12px;font-size:12.5px;color:var(--text-muted)}

.cfg-flash{animation:cfgFlash .9s ease}
@keyframes cfgFlash{0%{box-shadow:0 0 0 3px rgba(37,99,235,.35)}100%{box-shadow:var(--shadow)}}
/* 24-sep-2026 · El 20 px pelado dejaba el bloque 38 px POR DEBAJO de la barra
   superior, que es `position:sticky` y mide 58 px (`--header-h`, .top-header
   arriba en este mismo archivo). Al pulsar un ítem del carril, el título de la
   tarjeta llegaba partido por la mitad: se veía la mitad de abajo de las letras
   y la de arriba tapada por la barra semitransparente. Medido: 17 px del título
   tapados en «Privacidad e IA», «e.firma» y «Mi plan», a 882 y 1440 px.
   Sólo pasaba de 800 px para arriba, porque mobile.css deja la barra
   `position:relative` a 768 y menos — por eso en el celular nunca se vio.
   La fórmula buena ya estaba escrita en este archivo, en el `top:` del carril
   (.cfg-carril): la barra más el aire. */
.cfg-anchor{scroll-margin-top:calc(var(--header-h) + 20px)}

/* Título compacto: sustituye a la portada con ilustración, que ocupaba ~180 px
   arriba de todo sin decir nada. */
.cfg-titulo{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.cfg-titulo h1{font-size:24px;font-weight:900;letter-spacing:-.03em;color:var(--text)}
.cfg-titulo p{font-size:13.5px;color:var(--text-muted)}

/* Perfil: los datos a la izquierda y la vista previa del PDF a la derecha,
   pegada (sticky) para que siga a la vista mientras editas los campos que
   refleja. Es la tarjeta que antes vivía suelta en el carril. */
/* 3-oct-2026 · minmax(0,1fr) y no 1fr: «1fr» es minmax(auto,1fr) y deja que el
   contenido más ancho ensanche la columna. A 344 px (Fold cerrado) la tarjeta
   «Datos profesionales» medía 374 y se cortaba por la derecha, con el botón
   «Guardar» fuera de la pantalla. Lo vigila tests/test_ui_configuracion_movil_y_red_lenta_3oct.py */
.cfg-perfil-grid{display:grid;grid-template-columns:minmax(0,1fr) 246px;gap:16px;align-items:start}
.cfg-previa-col{position:sticky;top:16px}
.cfg-previa-col .cfg-pdf-card{margin-bottom:0}
@media(max-width:1100px){
  .cfg-perfil-grid{grid-template-columns:minmax(0,1fr)}
  .cfg-previa-col{position:static}
}

/* ─── Profile card ───────────────────────────────────────────────────────── */
.cfg-profile-card{margin-bottom:14px}
.cfg-profile-head{padding:14px 18px;border-bottom:1px solid var(--border-light)}
.cfg-profile-section-title{font-size:14px;font-weight:700;color:var(--text)}
.cfg-profile-body{padding:18px;display:flex;flex-direction:column;align-items:center;text-align:center}
.cfg-avatar-wrap{margin-bottom:12px}
.cfg-avatar-circle{
  width:72px;height:72px;border-radius:50%;
  background:linear-gradient(135deg,var(--blue),#6366F1);
  color:white;display:flex;align-items:center;justify-content:center;
  font-size:28px;font-weight:900;
  box-shadow:0 4px 16px rgba(37,99,235,0.25);
}
.cfg-profile-name{font-size:16px;font-weight:800;color:var(--text);margin-bottom:8px}
.cfg-profile-badges{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;margin-bottom:14px}
.cfg-badge{font-size:11px;font-weight:700;padding:3px 10px;border-radius:12px}
.cfg-badge-blue{background:var(--blue-light);color:var(--blue)}
.cfg-badge-green{background:var(--green-light);color:var(--green)}
.cfg-profile-info{
  width:100%;text-align:left;
  background:var(--bg);border-radius:var(--radius-sm);
  padding:10px 12px;display:flex;flex-direction:column;gap:7px;
  margin-bottom:12px;
}
.cfg-info-row{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--text-muted)}
.cfg-info-row svg{flex-shrink:0;color:var(--text-subtle)}
.cfg-pdf-link{
  display:inline-flex;align-items:center;gap:5px;
  font-size:12px;font-weight:600;color:#D97706;
  background:#FFFBEB;padding:5px 10px;border-radius:8px;
  border:1px solid #FDE68A;cursor:default;
}

/* ─── PDF preview card ───────────────────────────────────────────────────── */
.cfg-pdf-card{padding:14px}
.cfg-pdf-card-header{
  display:flex;align-items:center;justify-content:space-between;
  margin-bottom:12px;
}
.cfg-pdf-card-title{font-size:13px;font-weight:700;color:var(--text)}
.cfg-pdf-card-header svg{color:var(--text-subtle)}
.cfg-pdf-doc{
  background:white;border:1.5px solid var(--border);border-radius:var(--radius);
  overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.06);
}
.cfg-pdf-doc-header{
  display:flex;align-items:center;gap:10px;padding:12px 14px;
  background:#FAFAFA;border-bottom:1px solid var(--border-light);
}
.cfg-pdf-logo-icon{
  width:34px;height:34px;border-radius:var(--radius-sm);
  background:var(--blue-light);display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
.cfg-pdf-doc-name{font-size:13px;font-weight:800;color:var(--text)}
.cfg-pdf-doc-spec{font-size:11px;color:var(--blue);font-weight:500}
.cfg-pdf-divider{height:2px;background:linear-gradient(90deg,var(--blue),var(--blue-light));margin:0}
.cfg-pdf-rows{padding:8px 14px;display:flex;flex-direction:column;gap:0}
.cfg-pdf-row{
  display:flex;justify-content:space-between;align-items:center;
  padding:6px 0;border-bottom:1px solid var(--border-light);font-size:11px;
}
.cfg-pdf-row:last-child{border-bottom:none}
.cfg-pdf-row-label{color:var(--text-muted);font-weight:500}
.cfg-pdf-row-val{color:var(--text);font-weight:600;text-align:right;max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cfg-pdf-doc-note{
  font-size:9.5px;color:var(--text-subtle);text-align:center;
  padding:7px;background:#FAFAFA;border-top:1px solid var(--border-light);
}

/* ─── Form card ──────────────────────────────────────────────────────────── */
.cfg-form-card{overflow:hidden}

/* ─── Form sections ──────────────────────────────────────────────────────── */
/*
 * 23-ago-2026, reordenado de Configuración. Hasta hoy `.cfg-section-info` era una
 * COLUMNA de 280 px a la izquierda de cada sección: icono, título y descripción.
 * Repetida en las ocho secciones, era un índice impreso dentro del contenido —
 * decía dónde estabas parado pero no llevaba a ningún lado— y dejaba a los
 * formularios con dos tercios del ancho.
 *
 * Ese índice pasó a ser el carril de navegación de la izquierda (`.cfg-nav`), y
 * aquí el bloque se convierte en una FRANJA superior de ancho completo. No es
 * una disposición nueva: es exactamente la que ya vivía —y ya estaba probada—
 * en el `@media(max-width:880px)` de más abajo. Sólo se aplica en todos los
 * anchos y se compacta a una línea (icono AL LADO del texto, no encima).
 *
 * Cero cambios de marcado en las ocho secciones: ni un id, ni un name, ni un
 * <form>, ni un manejador en línea. Las ocho ganan ~280 px con esta regla.
 */
.cfg-section{border-bottom:1px solid var(--border-light)}
.cfg-section-last{border-bottom:none}
.cfg-section-layout{display:flex;flex-direction:column;gap:0;padding:0}
.cfg-section-info{
  width:100%;padding:13px 20px;
  border-bottom:1px solid var(--border-light);
  background:#FAFAFA;
  display:flex;align-items:center;gap:11px;
}
.cfg-si-icon{
  width:32px;height:32px;border-radius:var(--radius-sm);flex-shrink:0;
  display:flex;align-items:center;justify-content:center;margin-bottom:0;
}
.cfg-si-icon svg{width:16px;height:16px}
.cfg-si-blue{background:var(--blue-light);color:var(--blue)}
.cfg-si-green{background:var(--green-light);color:var(--green)}
.cfg-si-purple{background:var(--purple-light);color:var(--purple)}
/* `cfg-si-indigo` lo usa «Firma y logo personal» desde que se escribió y NUNCA
   se definió: ese icono salía sin fondo. Se define aquí. */
.cfg-si-indigo{background:var(--indigo-light);color:var(--indigo)}
.cfg-si-text{min-width:0}
.cfg-si-title{font-size:13.5px;font-weight:700;color:var(--text);margin-bottom:1px}
.cfg-si-desc{font-size:12px;color:var(--text-muted);line-height:1.45}
.cfg-section-fields{flex:1;padding:20px}

/* Informational box inside form */
.cfg-doc-info-box{
  display:flex;align-items:flex-start;gap:9px;
  background:var(--blue-light);border:1px solid #BFDBFE;border-radius:var(--radius-sm);
  padding:12px 14px;font-size:13px;color:#1E40AF;line-height:1.5;
}
.cfg-doc-info-box svg{flex-shrink:0;color:#3B82F6;margin-top:1px}

/* Form action buttons */
.cfg-form-actions{
  display:flex;justify-content:flex-end;gap:10px;
  padding:16px 20px;border-top:1px solid var(--border-light);
  background:#FAFAFA;
}

/* Alert styled for settings page */
.cfg-alert{
  display:flex;align-items:flex-start;gap:10px;
  padding:13px 16px;border-radius:var(--radius-sm);
  font-size:14px;margin-bottom:14px;
}
.cfg-alert-success{
  background:var(--green-light);color:#065F46;border:1px solid #A7F3D0;
}
.cfg-alert-success svg{flex-shrink:0;margin-top:1px}
.cfg-alert-error{
  background:var(--red-light);color:#991B1B;border:1px solid #FECACA;
}

/* ─── Bottom two-card grid ───────────────────────────────────────────────── */
.cfg-bottom-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.cfg-bottom-grid>*{min-width:0}
@media(max-width:1100px){.cfg-bottom-grid{grid-template-columns:1fr}}

/* ─── Account card ───────────────────────────────────────────────────────── */
/* 24-sep-2026 · Esta regla lleva vacía desde que nació, y esa es media
   historia del defecto: el gancho para apagar el cromado de la tarjeta se puso
   en el HTML y la regla nunca se escribió, así que `<div class="card
   cfg-account-card">` se quedó con TODO el tratamiento de `.card` (fondo
   blanco, borde, radio, sombra, overflow:hidden) mientras envolvía a otras tres
   tarjetas blancas. La otra media historia estaba en la plantilla, y se arregló
   ahí: hoy «Cuenta» cierra ANTES de esas tres (settings.html, busca «AQUÍ SE
   CIERRA»). La clase se queda porque el carril y el buscador la usan para saber
   qué panel es (test_settings_reordenado, test_ui_settings_buscador,
   test_settings_carril_y_buscador); la regla vacía se queda documentada para
   que nadie la rellene creyendo que falta algo. */
.cfg-account-card{}
.cfg-acct-rows{display:flex;flex-direction:column;gap:0}
.cfg-acct-row{
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 0;border-bottom:1px solid var(--border-light);
}
.cfg-acct-row:last-child{border-bottom:none}
.cfg-acct-left{display:flex;align-items:center;gap:8px}
.cfg-acct-icon{
  width:26px;height:26px;border-radius:6px;background:var(--bg);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
.cfg-acct-icon svg{color:var(--text-muted)}
.cfg-acct-label{font-size:13px;color:var(--text-muted);font-weight:500}
.cfg-acct-val{font-size:13.5px;font-weight:600;color:var(--text)}
.cfg-acct-badge{
  font-size:13px;font-weight:800;background:var(--blue-light);
  color:var(--blue);padding:2px 10px;border-radius:12px;
}
.cfg-status-tag{font-size:12px;font-weight:700;padding:3px 10px;border-radius:12px}
.cfg-status-active{background:var(--green-light);color:var(--green)}
.cfg-status-inactive{background:var(--border-light);color:var(--text-muted)}
.cfg-plan-tag{
  font-size:12px;font-weight:700;padding:3px 10px;border-radius:12px;
  background:var(--blue-light);color:var(--blue);
}

/* ─── Security card ──────────────────────────────────────────────────────── */
.cfg-security-body{display:flex;align-items:center;gap:16px;padding:16px 18px}
.cfg-sec-items{flex:1;display:flex;flex-direction:column;gap:14px}
.cfg-sec-item{display:flex;align-items:flex-start;gap:10px}
.cfg-sec-icon{
  width:30px;height:30px;border-radius:8px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;margin-top:1px;
}
.cfg-sec-icon svg{width:14px;height:14px}
.cfg-sec-blue{background:var(--blue-light);color:var(--blue)}
.cfg-sec-green{background:var(--green-light);color:var(--green)}
.cfg-sec-purple{background:var(--purple-light);color:var(--purple)}
.cfg-sec-amber{background:var(--orange-light);color:var(--orange)}
.cfg-sec-name{font-size:13px;font-weight:700;color:var(--text);display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:2px}
.cfg-sec-desc{font-size:11.5px;color:var(--text-muted);line-height:1.4}
.cfg-soon-tag{
  font-size:9.5px;font-weight:800;text-transform:uppercase;letter-spacing:0.04em;
  background:var(--orange-light);color:var(--orange);padding:1px 7px;border-radius:10px;
}
.cfg-security-illus{width:100px;flex-shrink:0}
.cfg-security-illus svg{width:100%;height:auto}

/* ─── Settings responsive ────────────────────────────────────────────────── */
@media(max-width:880px){
  /* La disposición en columna ya es la de siempre (ver «Form sections» arriba);
     aquí sólo se aprieta el relleno. */
  .cfg-section-info{padding:12px 16px}
  .cfg-section-fields{padding:16px 18px}
  .cfg-security-illus{display:none}
}
@media(max-width:600px){
  .cfg-hero-inner{padding:18px 16px}
  .cfg-hero-title{font-size:22px}
  .cfg-form-actions{flex-direction:column-reverse}
  .cfg-form-actions .btn{width:100%;justify-content:center}
}

/* ═══════════════════════════════════════════════════════════════════════════ */
/* DASHBOARD FIX — Correct broken layout and invisible icons                   */
/* ═══════════════════════════════════════════════════════════════════════════ */

/* Inline-SVG illustration (no absolute-positioned children) */
.dash-hero-illus-wrap{flex-shrink:0;width:280px;height:160px}
.dash-hero-illus-wrap svg{width:100%;height:100%}
@media(max-width:860px){.dash-hero-illus-wrap{display:none}}

/* Section label */
.dash-section-label{
  font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:0.08em;
  color:var(--text-muted);margin-bottom:10px;display:block;
}

/* Quick action cards — icon box replaces broken circle approach */
.dqa-card{
  display:flex;flex-direction:column;align-items:center;gap:9px;
  padding:18px 12px 16px;background:white;border:1px solid var(--border);
  border-radius:var(--radius);box-shadow:var(--shadow);cursor:pointer;
  text-align:center;transition:all var(--t);text-decoration:none;
  font-family:var(--font);color:var(--text);
  /* Reset button defaults */
  -webkit-appearance:none;appearance:none;
}
.dqa-icon-box{
  width:46px;height:46px;border-radius:12px;
  display:flex;align-items:center;justify-content:center;
  flex-shrink:0;
}
.dqa-icon-box svg{display:block}
.dqa-card:hover{border-color:var(--blue);box-shadow:var(--shadow-md);transform:translateY(-2px)}
.dqa-label{font-size:12.5px;font-weight:700;color:var(--text);line-height:1.3}

/* Main grid with corrected column names */
.dash-main-grid{display:grid;grid-template-columns:1fr 360px;gap:20px;margin-bottom:20px;align-items:start}
.dash-col-left{display:flex;flex-direction:column;gap:0}
.dash-col-right{display:flex;flex-direction:column;gap:0}

/* Unified list component for recent consultations + patients */
.dash-list{display:flex;flex-direction:column}
.dash-list-item{
  display:flex;align-items:center;gap:11px;
  padding:12px 18px;border-bottom:1px solid var(--border-light);
  transition:background var(--t);text-decoration:none;color:inherit;
}
.dash-list-item:last-child{border-bottom:none}
.dash-list-item:hover{background:#FAFBFF}
.dash-list-avatar{
  width:36px;height:36px;border-radius:50%;color:white;
  display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:14px;flex-shrink:0;
}
.dash-list-info{flex:1;min-width:0}
.dash-list-name{font-size:13.5px;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-list-sub{font-size:12px;color:var(--text-muted);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-list-right{display:flex;flex-direction:column;align-items:flex-end;gap:3px;flex-shrink:0}
.dash-list-date{font-size:11px;color:var(--text-subtle)}

/* Consultation type badges in list */
.dash-type-badge{font-size:10px;font-weight:700;padding:2px 7px;border-radius:10px}
.dash-type-general{background:var(--blue-light);color:var(--blue)}
.dash-type-seguimiento{background:var(--green-light);color:var(--green)}
.dash-type-urgente{background:var(--red-light);color:var(--red)}
.dash-type-estudios{background:var(--purple-light);color:var(--purple)}

/* Unified empty state */
.dash-empty{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  padding:28px 20px;text-align:center;
}
.dash-empty-icon{
  width:64px;height:64px;background:var(--bg);border-radius:50%;
  border:1.5px solid var(--border);
  display:flex;align-items:center;justify-content:center;margin-bottom:4px;
}
.dash-empty-title{font-size:14.5px;font-weight:700;color:var(--text)}
.dash-empty-sub{font-size:12.5px;color:var(--text-muted);max-width:280px;line-height:1.5}

/* Flow section */
.dash-flow{display:flex;align-items:center;gap:14px;flex-wrap:nowrap}
.dash-flow-step{display:flex;align-items:flex-start;gap:10px;flex:1;min-width:0}
.dash-flow-num{
  width:24px;height:24px;border-radius:50%;color:white;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:900;margin-top:2px;
}
.dash-flow-icon{
  width:42px;height:42px;border-radius:var(--radius-sm);flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
}
.dash-flow-arrow{flex-shrink:0;color:var(--border)}

/* ─── Dashboard responsive updates ──────────────────────────────────────── */
@media(max-width:1100px){
  .dash-kpi-grid{grid-template-columns:repeat(2,1fr)}
  .dash-trend-grid{grid-template-columns:repeat(3,1fr)}
  .dash-trend-grid.con-ganancia{grid-template-columns:repeat(2,1fr)}
  .dash-qactions-grid{grid-template-columns:repeat(3,1fr)}
  .dash-main-grid{grid-template-columns:1fr}
}
@media(max-width:720px){
  .dash-kpi-grid{grid-template-columns:repeat(2,1fr)}
  .dash-trend-grid,.dash-trend-grid.con-ganancia{grid-template-columns:1fr}
  .dash-qactions-grid{grid-template-columns:repeat(2,1fr)}
  .dash-flow{flex-direction:column;gap:0}
  .dash-flow-step{align-items:center;gap:14px;padding:14px 0}
  .dash-flow-num{margin-top:0;width:28px;height:28px;font-size:13px;flex-shrink:0}
  .dash-flow-icon{width:48px;height:48px;border-radius:12px;flex-shrink:0}
  .dash-flow-arrow{
    transform:rotate(90deg);
    display:flex;justify-content:center;align-self:center;
    padding:0;margin:0;
  }
}
@media(max-width:480px){
  .dash-kpi-grid{grid-template-columns:1fr}
  .dash-qactions-grid{grid-template-columns:repeat(2,1fr)}
}

/* ═══════════════════════════════════════════════════════════════════════════ */
/* PATIENTS PAGE — Mobile responsive fix                                       */
/* ═══════════════════════════════════════════════════════════════════════════ */

/* Prevent page-level horizontal overflow.
   overflow-x:clip (not hidden) so tooltips/popovers can escape vertically —
   clip doesn't create a scroll container, hidden does (implicit overflow-y:auto). */
.main-content{overflow-x:hidden;overflow-x:clip}
.content-inner{overflow-x:hidden;overflow-x:clip}

/* Mobile patient cards — hidden on desktop */
.pt-mobile-list{display:none}

/* Mobile card styles */
.pt-mobile-card{
  display:flex;align-items:center;gap:12px;
  background:white;border:1px solid var(--border);border-radius:var(--radius);
  padding:13px 15px;box-shadow:var(--shadow);
  text-decoration:none;color:inherit;
  transition:background var(--t),border-color var(--t);
}
.pt-mobile-card:hover,.pt-mobile-card:active{
  background:#F8FAFF;border-color:rgba(37,99,235,0.25);
}
.pt-mc-avatar{
  width:42px;height:42px;border-radius:50%;flex-shrink:0;
  background:linear-gradient(135deg,var(--blue),#6366F1);
  color:white;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:16px;
}
.pt-mc-body{flex:1;min-width:0}
.pt-mc-name{font-size:14px;font-weight:700;color:var(--text);margin-bottom:2px;
  display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pt-mc-meta{font-size:12px;color:var(--text-muted);margin-bottom:5px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pt-mc-tags{display:flex;gap:4px;flex-wrap:wrap}
.pt-mc-tag{font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:10px}
.pt-mc-tag-red{background:var(--red-light);color:#DC2626}
.pt-mc-tag-amber{background:var(--orange-light);color:#92400E}
.pt-mc-tag-blue{background:var(--blue-light);color:var(--blue)}
.pt-mc-tag-gray{background:var(--border-light);color:var(--text-muted)}
/* Bienvenida de la ficha del paciente de ejemplo (27-ago-2026).
 *
 * Mismo degradado del logo que la etiqueta de la lista, pero MUY diluido: es
 * una bienvenida, no un anuncio, y va encima del resumen clinico sin gritar
 * mas fuerte que el. El borde izquierdo la ata visualmente a la barra de
 * acento del renglon de donde vino el medico.
 */
.pe-bienvenida{
  border:1px solid rgba(27,123,214,0.22);
  border-left:3px solid var(--brand-blue);
  background:linear-gradient(100deg,rgba(27,123,214,0.06) 0%,rgba(84,185,72,0.06) 100%);
  border-radius:var(--radius);
  padding:14px 16px;margin:0 0 14px;
}
.pe-bv-cabeza{display:flex;align-items:center;justify-content:space-between;gap:12px}
.pe-bv-titulo{
  font-size:14px;font-weight:800;color:var(--text);
  display:flex;align-items:center;gap:8px;
}
.pe-bv-titulo::before{
  content:'';width:9px;height:9px;border-radius:50%;flex-shrink:0;
  background:linear-gradient(100deg,var(--brand-blue),var(--brand-green));
}
.pe-bv-ocultar-form{margin:0}
.pe-bv-ocultar{
  background:none;border:1px solid var(--border);border-radius:8px;
  padding:4px 11px;font-size:11.5px;font-weight:600;color:var(--text-muted);
  cursor:pointer;white-space:nowrap;
  transition:background var(--t),color var(--t),border-color var(--t);
}
.pe-bv-ocultar:hover{background:#fff;color:var(--text);border-color:#CBD5E1}
.pe-bv-texto{
  margin:7px 0 10px;font-size:13px;line-height:1.55;color:var(--text-muted);
  max-width:76ch;
}
/* 19-oct-2026 (C1) · Dos renglones con rótulo, «De tu especialidad» y «En
 * todos tus pacientes», todos los chips iguales y uno solo relleno: el
 * siguiente sugerido. El relleno de «lo propio» (.pe-bv-propio) se fue: en
 * Pediatría pintaba de azul «Pre-consulta contestada» y dejaba blancas las
 * curvas y la cartilla. */
.pe-bv-enlaces{display:grid;gap:8px}
.pe-bv-fila{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin:0}
.pe-bv-rotulo{font-size:11.5px;font-weight:700;color:var(--text-muted);margin-right:2px;white-space:nowrap}
.pe-bv-enlaces a.pe-bv-sig{background:var(--brand-blue);color:#fff;border-color:var(--brand-blue)}
.pe-bv-enlaces a.pe-bv-sig:hover{background:#155FA8;border-color:#155FA8}
/* (C4) Visitado: palomita SÓLO de CSS, para que el texto del enlace no cambie. */
.pe-bv-enlaces a.pe-bv-visto::before{content:"\2713\00a0";color:#2F8A27;font-weight:800}
.pe-bv-enlaces a.pe-bv-sig.pe-bv-visto::before{color:#fff}
.pe-bv-puente{margin:10px 0 0;font-size:13px;color:var(--text)}
.pe-bv-puente[hidden]{display:none}
.pe-bv-puente a{font-weight:700;color:var(--brand-blue)}
/* (C2) Las anclas del recorrido caen con su encabezado a la vista, debajo de
 * la barra de arriba (medido el 19-oct: «Estudios» quedaba con el título tapado). */
#ptd-estudios,#ptd-ultima-receta,#recorrido-ejemplo{scroll-margin-top:calc(var(--header-h) + 16px)}
@media(max-width:600px){ .pe-bv-rotulo{flex-basis:100%} }
.pe-bv-enlaces a{
  font-size:12px;font-weight:600;color:var(--brand-blue);text-decoration:none;
  background:#fff;border:1px solid rgba(27,123,214,0.22);
  padding:5px 11px;border-radius:20px;
  transition:background var(--t),border-color var(--t);
}
.pe-bv-enlaces a:hover{background:var(--brand-blue-soft);border-color:var(--brand-blue)}
.pe-bv-caso{display:block;color:var(--text);font-weight:700;margin-bottom:2px}
@media(max-width:600px){
  .pe-bv-cabeza{flex-direction:column;align-items:flex-start;gap:8px}
  .pe-bv-ocultar{width:100%}
}

/* Paciente de ejemplo, vista movil (27-ago-2026). Es OTRO marcado que el de la
 * tabla (la plantilla de la lista de pacientes). El degradado del logo aqui si puede
 * ir de fondo -la tarjeta no tiene la regla de hover que pinta sobre la
 * celda-, pero el hover se redefine igual para no perderlo al tocarla. */
.pt-mc-tag-ejemplo{
  background:linear-gradient(100deg,var(--brand-blue) 0%,var(--brand-green) 100%);
  color:#fff;font-weight:700;
}
.pt-mobile-card-ejemplo{
  border-color:rgba(27,123,214,0.35);
  background:linear-gradient(100deg,rgba(27,123,214,0.05) 0%,rgba(84,185,72,0.05) 100%);
}
.pt-mobile-card-ejemplo:hover,.pt-mobile-card-ejemplo:active{
  background:linear-gradient(100deg,rgba(27,123,214,0.10) 0%,rgba(84,185,72,0.10) 100%);
  border-color:rgba(27,123,214,0.45);
}
.pt-mc-right{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex-shrink:0}
.pt-mc-date{font-size:11px;color:var(--text-muted);white-space:nowrap}
.pt-mobile-count{
  text-align:center;font-size:12.5px;color:var(--text-muted);
  padding:10px 0 4px;
}

/* ─── Tablet/mobile breakpoint for patients page (≤900 → cards, not a clipped table) ── */
@media(max-width:900px){
  /* Show mobile cards, hide desktop table */
  .pt-mobile-list{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
  .pt-table-card{display:none}

  /* Hero */
  .pt-hero-inner{padding:18px 16px}
  .pt-hero-title{font-size:22px}
  .pt-hero-illus{display:none}

  /* KPI: 2 columns */
  .pt-kpi-row{grid-template-columns:repeat(2,1fr)}

  /* Controls: wrap cleanly */
  .pt-controls-row{flex-wrap:wrap;gap:8px}
  .pt-controls-row .btn{width:100%;justify-content:center}
  .pt-search-form{width:100%;order:-1}
  .pt-actions-group{width:100%;flex-wrap:wrap}

  /* Filter row: chips scroll horizontally, no overflow of page */
  .pt-filter-row{overflow:hidden;flex-wrap:nowrap;align-items:center}
  .pt-filter-label{flex-shrink:0}
  .pt-filter-chips{
    flex:1;min-width:0;
    overflow-x:auto;
    flex-wrap:nowrap;
    -webkit-overflow-scrolling:touch;
    padding-bottom:2px;
    scrollbar-width:none;
  }
  .pt-filter-chips::-webkit-scrollbar{display:none}


  /* What section: 2 columns */
  .pt-what-grid{grid-template-columns:1fr 1fr}
}

@media(max-width:480px){
  /* KPI: 1 column on very small phones */
  .pt-kpi-row{grid-template-columns:1fr}

  /* Hero padding */
  .pt-hero-inner{padding:14px 12px}

  /* What section: 1 column */
  .pt-what-grid{grid-template-columns:1fr}

  /* Content inner padding reduction */
  .content-inner{padding:14px 12px}
}

/* ═══════════════════════════════════════════════════════════════════════════ */
/* WIDE-SCREEN IMPROVEMENTS — 1600px+ (1920p, 2K, 4K monitors)                */
/* ═══════════════════════════════════════════════════════════════════════════ */

@media(min-width:1600px){
  /* Dashboard: wider right sidebar for agenda/summary */
  .dash-main-grid{grid-template-columns:1fr 420px}

  /* Dashboard: quick actions — keep 5 columns but wider */
  .dash-qactions-grid{gap:16px}

  /* Patient detail: wider left sidebar */
  .detail-grid{grid-template-columns:320px 1fr;gap:28px}

  /* Consultation layout: wider history panel */
  .consult-history-panel{width:300px}

  /* Settings: slightly wider left column */
  .cfg-main-grid{grid-template-columns:300px 1fr;gap:28px}

  /* Patients page KPI: more spacing */
  .pt-kpi-row{gap:20px}

  /* Content padding grows with screen */
  .content-inner{padding:32px 40px}
}

@media(min-width:2200px){
  /* Very wide screens: add horizontal padding to prevent extreme stretching */
  .content-inner{padding:36px 6%}
}

/* ── Loading button state ──────────────────────────────────────────────────── */
@keyframes btnSpin{to{transform:rotate(360deg)}}
.btn-loading{opacity:.75;pointer-events:none;position:relative;cursor:not-allowed;}
.btn-loading .btn-spinner,.btn-spinner{
  display:inline-block;width:13px;height:13px;border:2px solid currentColor;
  border-radius:50%;border-top-color:transparent;animation:btnSpin .6s linear infinite;
  vertical-align:middle;margin-right:6px;flex-shrink:0;
}

/* ── Follow-up toggle switch (iOS style) ───────────────────────────────────── */
.fu-toggle{
  width:44px;height:24px;border-radius:12px;background:#E5E7EB;
  position:relative;cursor:pointer;transition:background .25s;
  flex-shrink:0;border:none;padding:0;outline:none;
}
.fu-toggle.on{background:#2563EB;}
.fu-toggle::after{
  content:'';position:absolute;width:18px;height:18px;border-radius:50%;
  background:white;top:3px;left:3px;
  transition:transform .25s;box-shadow:0 1px 4px rgba(0,0,0,.25);
}
.fu-toggle.on::after{transform:translateX(20px);}
.fu-toggle-wrap{display:flex;align-items:center;gap:8px;cursor:pointer;}
.fu-toggle-label{font-size:12.5px;font-weight:600;color:#6B7280;transition:color .2s;}
.fu-toggle-wrap:has(.fu-toggle.on) .fu-toggle-label{color:#2563EB;}

/* ─── Tooltip system ──────────────────────────────────────────────────────
 * USO:
 *   <button data-tooltip="Texto del tooltip">Click</button>
 *   <button data-tooltip="Texto largo" data-tooltip-wrap="true">Hover</button>
 *   <button data-tooltip="Aparece abajo" data-tooltip-pos="bottom">X</button>
 *   <button data-tooltip="Aparece a la derecha" data-tooltip-pos="right">→</button>
 *
 * REGLAS:
 *   - Reemplazar title="..." nativo cuando se quiera tooltip visual
 *   - Conservar aria-label en botones icon-only (accesibilidad)
 *   - NO usar en mobile (touch) — el sistema se oculta automáticamente
 *   - Default position: top (encima del elemento)
 *
 * ADVERTENCIA: elementos dentro de contenedores con overflow:hidden
 *   (p.ej. .card) tendrán el tooltip recortado. En esos casos usar
 *   data-tooltip-pos="bottom" si hay espacio, o aplicar overflow:visible
 *   al contenedor padre inmediato del elemento con tooltip.
 * ───────────────────────────────────────────────────────────────────────── */
[data-tooltip] {
  position: relative;
}

/* Utility: apply to any container with overflow:hidden that wraps a tooltip element */
[data-tooltip-overflow="visible"] {
  overflow: visible !important;
}

[data-tooltip]::after {
  content: attr(data-tooltip);
  position: absolute;
  bottom: calc(100% + 8px);
  left: 50%;
  transform: translateX(-50%) translateY(4px);
  background: #1F2937;
  color: white;
  font-size: 12px;
  font-weight: 500;
  line-height: 1.4;
  padding: 6px 10px;
  border-radius: 6px;
  white-space: nowrap;
  max-width: calc(100vw - 32px);
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.18s ease, transform 0.18s ease;
  z-index: 1010;
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  font-family: var(--font);
}

[data-tooltip]::before {
  content: '';
  position: absolute;
  bottom: calc(100% + 2px);
  left: 50%;
  transform: translateX(-50%) translateY(4px);
  border: 5px solid transparent;
  border-top-color: #1F2937;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.18s ease, transform 0.18s ease;
  z-index: 1010;
}

[data-tooltip]:hover::after,
[data-tooltip]:hover::before,
[data-tooltip]:focus-visible::after,
[data-tooltip]:focus-visible::before {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

/* Variante: tooltip multi-línea */
[data-tooltip][data-tooltip-wrap="true"]::after {
  white-space: normal;
  width: 220px;
  max-width: 240px;
  text-align: center;
}

/* Variante: bottom */
[data-tooltip][data-tooltip-pos="bottom"]::after {
  bottom: auto;
  top: calc(100% + 8px);
  transform: translateX(-50%) translateY(-4px);
}
[data-tooltip][data-tooltip-pos="bottom"]::before {
  bottom: auto;
  top: calc(100% + 2px);
  border-top-color: transparent;
  border-bottom-color: #1F2937;
  transform: translateX(-50%) translateY(-4px);
}
[data-tooltip][data-tooltip-pos="bottom"]:hover::after,
[data-tooltip][data-tooltip-pos="bottom"]:hover::before,
[data-tooltip][data-tooltip-pos="bottom"]:focus-visible::after,
[data-tooltip][data-tooltip-pos="bottom"]:focus-visible::before {
  transform: translateX(-50%) translateY(0);
}

/* Variante: right */
[data-tooltip][data-tooltip-pos="right"]::after {
  bottom: 50%;
  left: calc(100% + 8px);
  transform: translateY(50%) translateX(-4px);
}
[data-tooltip][data-tooltip-pos="right"]::before {
  bottom: 50%;
  left: calc(100% + 2px);
  border-top-color: transparent;
  border-right-color: #1F2937;
  transform: translateY(50%) translateX(-4px);
}
[data-tooltip][data-tooltip-pos="right"]:hover::after,
[data-tooltip][data-tooltip-pos="right"]:hover::before,
[data-tooltip][data-tooltip-pos="right"]:focus-visible::after,
[data-tooltip][data-tooltip-pos="right"]:focus-visible::before {
  transform: translateY(50%) translateX(0);
}

/* Variante: left */
[data-tooltip][data-tooltip-pos="left"]::after {
  bottom: 50%;
  left: auto;
  right: calc(100% + 8px);
  transform: translateY(50%) translateX(4px);
}
[data-tooltip][data-tooltip-pos="left"]::before {
  bottom: 50%;
  left: auto;
  right: calc(100% + 2px);
  border-top-color: transparent;
  border-left-color: #1F2937;
  transform: translateY(50%) translateX(4px);
}
[data-tooltip][data-tooltip-pos="left"]:hover::after,
[data-tooltip][data-tooltip-pos="left"]:hover::before,
[data-tooltip][data-tooltip-pos="left"]:focus-visible::after,
[data-tooltip][data-tooltip-pos="left"]:focus-visible::before {
  transform: translateY(50%) translateX(0);
}

/* Tooltip vacío: no mostrar */
[data-tooltip=""]::after,
[data-tooltip=""]::before {
  display: none;
}

@media (prefers-reduced-motion: reduce) {
  [data-tooltip]::after,
  [data-tooltip]::before {
    transition: opacity 0.01s linear;
  }
}

/* En dispositivos touch (hover:none): ocultar tooltips */
@media (hover: none) {
  [data-tooltip]::after,
  [data-tooltip]::before {
    display: none;
  }
}

/* ─── Skeleton loaders ───────────────────────────────────────────────────────
 * Primitivas:
 *   <div class="skeleton skeleton-line"></div>
 *   <div class="skeleton skeleton-line skeleton-line-sm"></div>
 *   <div class="skeleton skeleton-block"></div>
 *   <div class="skeleton skeleton-avatar"></div>
 * Composición: .skeleton-page-overlay[data-shape="table|grid|detail|cards|generic"]
 * Animación: pulse (opacity 0.6 ↔ 1.0)
 * ──────────────────────────────────────────────────────────────────────────── */
@keyframes skeletonPulse{0%,100%{opacity:.6}50%{opacity:1}}
.skeleton{background:var(--border-light,#F3F4F6);border-radius:var(--radius-sm,7px);animation:skeletonPulse 1.4s ease-in-out infinite;display:block;}
.skeleton-line{height:12px;width:100%;margin:8px 0;}
.skeleton-line-sm{width:60%;}
.skeleton-line-xs{width:35%;}
.skeleton-line-lg{height:18px;width:70%;}
.skeleton-block{height:80px;width:100%;border-radius:var(--radius,10px);}
.skeleton-avatar{width:40px;height:40px;border-radius:50%;}
.skeleton-card{height:120px;width:100%;border-radius:var(--radius,10px);background:var(--card,#fff);border:1px solid var(--border-light,#F3F4F6);position:relative;overflow:hidden;}
.skeleton-card::before{content:'';position:absolute;inset:16px;background:var(--border-light,#F3F4F6);border-radius:var(--radius-sm,7px);animation:skeletonPulse 1.4s ease-in-out infinite;}

/* ─── Overlay de navegación ─────────────────────────────────────────────── */
.skeleton-page-overlay{position:absolute;inset:0;background:var(--bg,#F1F5F9);z-index:50;padding:24px;overflow:hidden;opacity:0;transition:opacity .18s ease;pointer-events:none;}
.skeleton-page-overlay.visible{opacity:1;pointer-events:auto;}
.skel-tpl-header{height:28px;width:240px;margin-bottom:24px;background:var(--border-light);border-radius:var(--radius-sm);animation:skeletonPulse 1.4s ease-in-out infinite;}
/* TABLE */
.skel-tpl-table .skel-row{display:flex;gap:16px;align-items:center;padding:14px 16px;background:var(--card,#fff);border:1px solid var(--border-light);border-radius:var(--radius,10px);margin-bottom:8px;}
.skel-tpl-table .skel-row .skel-row-lines{flex:1;}
/* GRID */
.skel-tpl-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-top:12px;}
.skel-tpl-grid .skel-cell{height:80px;background:var(--card,#fff);border:1px solid var(--border-light);border-radius:var(--radius-sm);animation:skeletonPulse 1.4s ease-in-out infinite;}
/* DETAIL */
.skel-tpl-detail .skel-detail-header{display:flex;gap:16px;align-items:center;padding:20px;background:var(--card);border:1px solid var(--border-light);border-radius:var(--radius);margin-bottom:16px;}
.skel-tpl-detail .skel-detail-section{padding:20px;background:var(--card);border:1px solid var(--border-light);border-radius:var(--radius);margin-bottom:12px;}
/* CARDS */
.skel-tpl-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;}
/* GENERIC */
.skel-tpl-generic .skel-block{background:var(--card);border:1px solid var(--border-light);border-radius:var(--radius);padding:20px;margin-bottom:16px;}

/* ── La gráfica del Inicio, en grande ─────────────────────────────────────────
 * 24-ago-2026. Las tres tarjetas de tendencia se abren en un modal para verlas
 * de cerca, igual que ya se hacía en indicadores del paciente.
 *
 * `z-index:1200` la pone por encima de `#upsellModal`, que vive en 900 y ocupa
 * la ventana entera: sin esto, un médico con el upsell abierto podría picar una
 * tarjeta y no ver nada. */
/* `pointer` (la manita) y no `zoom-in` (la lupa). Medido el 24-ago: el
 * `zoom-in` SÍ se aplicaba —tarjeta, contenedor y lienzo, y Chart.js no lo
 * pisa—, o sea que no era un problema de cascada sino de forma. La lupa no se
 * lee como «esto se pica»: la manita es la convención que invita al clic, y era
 * justo lo que faltaba para que se note que las gráficas se amplían. */
.trend-card[data-grafica],
.trend-card[data-grafica] *{cursor:pointer}
.trend-card[data-grafica]:hover{border-color:var(--blue);box-shadow:var(--shadow-md)}
.trend-card[data-grafica]:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
.trend-zoom{
  position:absolute;top:10px;right:12px;font-size:13px;color:var(--text-muted);
  opacity:0;transition:opacity var(--t);pointer-events:none;
}
.trend-card[data-grafica]:hover .trend-zoom,
.trend-card[data-grafica]:focus-visible .trend-zoom{opacity:1}

.gr-modal{display:none;position:fixed;inset:0;z-index:1200}
.gr-modal.abierto{display:block}
.gr-modal-fondo{position:absolute;inset:0;background:rgba(15,23,42,.55)}
.gr-modal-panel{
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:min(1100px,calc(100vw - 32px));max-height:calc(100vh - 48px);
  background:var(--card);border-radius:var(--radius);box-shadow:0 20px 60px rgba(0,0,0,.25);
  display:flex;flex-direction:column;overflow:hidden;
}
.gr-modal-head{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:16px 20px;border-bottom:1px solid var(--border);
}
.gr-modal-titulo{margin:0;font-size:17px;font-weight:800;color:var(--text)}
.gr-modal-cerrar{
  width:34px;height:34px;border-radius:8px;border:none;background:var(--bg);
  color:var(--text-muted);font-size:15px;cursor:pointer;flex-shrink:0;
}
.gr-modal-cerrar:hover{background:var(--border)}
.gr-modal-body{display:flex;gap:20px;padding:18px 20px 20px;min-height:0;flex:1}
/* Altura CONCRETA para el lienzo. Chart.js con `maintainAspectRatio:false` mide
 * a su contenedor, y sin esta línea el flex le da lo que sobra: medido el
 * 24-ago, 810×231 en vez de 810×460. No desaparece —eso comprobé antes de
 * escribirlo—, pero sale a la mitad de alto, que en una gráfica de 12 meses es
 * la diferencia entre leerla y adivinarla. */
.gr-modal-lienzo{flex:1;min-width:0;height:min(60vh,460px);position:relative}
.gr-modal-lado{width:230px;flex-shrink:0;display:flex;flex-direction:column;gap:10px}
.gr-modal-sub{margin:0 0 4px;font-size:12.5px;color:var(--text-muted);line-height:1.45}
.gr-f{font-size:12px;font-weight:700;color:var(--text);margin-bottom:-4px}
.gr-sel{
  width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:8px;
  font-size:13px;font-family:var(--font);background:var(--card);color:var(--text);
}
.gr-chk{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text);cursor:pointer}
.gr-modal-acciones{margin-top:auto;display:flex;flex-direction:column;gap:8px}
.gr-btn{
  padding:9px 12px;border-radius:8px;border:1px solid var(--border);background:var(--card);
  color:var(--blue);font-size:13px;font-weight:700;font-family:var(--font);cursor:pointer;
}
.gr-btn:hover{background:var(--bg)}
.gr-btn-sec{color:var(--text-muted)}

@media (max-width:860px){
  .gr-modal-body{flex-direction:column}
  .gr-modal-lienzo{height:44vh}
  .gr-modal-lado{width:100%}
  .gr-modal-acciones{margin-top:8px;flex-direction:row}
  .gr-btn{flex:1}
}

/* ═══ Buzón de sugerencias — 26-ago-2026 ══════════════════════════════════════
 *
 * El botón lleva el degradado azul→verde del logo (`--brand-blue` a
 * `--brand-green`) porque Francisco lo pidió «para llamar la atención pero del
 * mismo tamaño que los demás». Por eso NO cambia caja: hereda `.topbar-qc-btn`
 * entera —padding, radio, tipografía— y sólo pisa color y borde. Así también
 * hereda el modo icono de tableta y celular (@media max-width:980px), que es
 * donde un botón «especial» suele romper la fila.
 */
.topbar-qc-sug{
  background:linear-gradient(100deg,var(--brand-blue) 0%,var(--brand-green) 100%);
  border-color:transparent;color:#fff;
}
.topbar-qc-sug:hover{
  background:linear-gradient(100deg,var(--brand-blue-dark) 0%,var(--brand-green-dark) 100%);
  border-color:transparent;color:#fff;
}
.topbar-qc-sug:focus-visible{outline:2px solid var(--brand-blue);outline-offset:2px}
/* Y por debajo de 1400 px se queda con su icono, ANTES que los demás.
 *
 * Medido a 1280 px: con la palabra «Sugerencias» el botón ocupa 140 px y el
 * buscador de la izquierda se comprime de 182 px a 82 px — un campo de búsqueda
 * de 82 px no sirve para nada. La barra tiene un presupuesto fijo y este botón
 * es el que llegó tarde, así que es el que cede.
 *
 * En icono sigue siendo el único con degradado, o sea el único que resalta; el
 * nombre completo vive en el `title` y en el menú lateral del celular. Encima
 * de 1400 px sí hay sitio para las dos cosas. */
@media(max-width:1400px){
  .topbar-qc-sug{font-size:0;gap:0;padding:9px 11px;min-width:40px;justify-content:center}
  .topbar-qc-sug svg{width:16px;height:16px}
}

/* ── Refiere y gana (25-sep-2026; «champaña y marino» 28-sep-2026) ─────────
 * Antes: degradado CÁLIDO naranja→frambuesa (25-sep) y luego «dorado café»
 * con texto blanco (26-sep). El botón ya no «navega a una página»: abre una
 * ventana (static/refiere.js) y su href queda de respaldo.
 * Francisco, 28-sep: «el color dorado que tiene no me gusta, parece café, dale
 * un mejor tono de dorado con gradientes claras», «el color rojo parece
 * "Problema" en lugar de "Refiere y gana"» y «se tiene que ver elegante, no
 * como casino ni como algo urgente».
 *
 * Los tonos salen de la referencia de dorado champaña que mandó. El «dorado
 * café» de antes (#8F6700→#715301) existía para que el texto BLANCO pasara
 * AA; con texto MARINO la cuenta se invierte: sobre las cinco paradas del
 * degradado da 7.5 · 11.3 · 12.3 · 10.5 · 6.5 (el blanco daría 1.2–2.2).
 * tests/test_refiere_y_gana_v2_28sep.py lee estas paradas y vuelve a medir.
 *
 * Prohibido en todo el programa: rojo, naranja y magenta; animaciones en
 * bucle, pulsos o destellos. Movimiento, sólo al abrir y respetando
 * `prefers-reduced-motion`. */
:root{
  --ryg-oro-brillo:#F8EBC6; --ryg-oro-claro:#F3E2A6; --ryg-oro-medio:#EFDB8B;
  --ryg-oro:#D9B660; --ryg-oro-hondo:#C6AB64; --ryg-oro-linea:#B8923A;
  --ryg-marino:#0D2756; --ryg-marfil:#FBF6E8; --ryg-tinta:#334155; --ryg-gris:#475569;
  --ryg-degradado:linear-gradient(115deg,#D9B660 0%,#F3E2A6 38%,#F8EBC6 50%,#EFDB8B 64%,#C6AB64 100%);
}

/* El botón de la barra. Es la MISMA caja que `.topbar-qc-btn` (tamaño, radio,
 * modo icono), así que hereda el comportamiento responsivo que ya pasó por dos
 * incendios de scroll horizontal; sólo cambia la piel. Es un <a> (su respaldo
 * es la página) que refiere.js convierte en ventana: sin subrayado. */
.topbar-qc-ref{
  position:relative;text-decoration:none;
  background:linear-gradient(115deg,#D9B660 0%,#F3E2A6 38%,#F8EBC6 50%,#EFDB8B 64%,#C6AB64 100%);
  background-size:100% 100%;background-position:0 50%;
  border:1px solid rgba(184,146,58,.55);color:#0D2756;
  box-shadow:0 1px 2px rgba(138,108,58,.25),inset 0 1px 0 rgba(255,255,255,.6);
  transition:background-position .45s ease,background-size .45s ease,box-shadow .2s ease;
}
.topbar-qc-ref svg{color:#0D2756;stroke:#0D2756}
/* Un reflejo que se desliza UNA vez al pasar el mouse; nada en bucle.
 * El degradado se REPITE aquí a propósito: `.topbar-qc-btn:hover` usa el
 * atajo `background:#EFF6FF`, que borra la imagen, y el botón dorado se volvía
 * azul pálido al pasar el mouse (y así se quedaba en el Fold tras tocarlo). */
.topbar-qc-ref:hover{
  background:linear-gradient(115deg,#D9B660 0%,#F3E2A6 38%,#F8EBC6 50%,#EFDB8B 64%,#C6AB64 100%);
  background-size:200% 100%;background-position:100% 50%;
  border-color:rgba(184,146,58,.75);color:#0D2756;text-decoration:none;
  box-shadow:0 2px 6px rgba(138,108,58,.28),inset 0 1px 0 rgba(255,255,255,.7);
}
.topbar-qc-ref:focus-visible{outline:2px solid #0D2756;outline-offset:2px}
@media (prefers-reduced-motion:reduce){.topbar-qc-ref{transition:none}}
/* Cede ANTES que los demás, igual que Sugerencias: debajo de 1400 px es sólo
 * el regalo. Medido: con los dos botones con texto a 1280 px el buscador se
 * quedaba por debajo de los 120 px que exige la prueba de la barra. */
@media(max-width:1400px){
  .topbar-qc-ref{font-size:0;gap:0;padding:9px 11px;min-width:40px;justify-content:center}
  .topbar-qc-ref svg{width:16px;height:16px}
}
/* El punto de «Nuevo»: pasivo, sin número y sin parpadeo. Marino con aro
 * blanco (antes amarillo, 28-sep: nada de naranja). Se va con la primera vez
 * que el médico abre la ventana o la página. */
.ref-nuevo{
  position:absolute;top:-3px;right:-3px;width:9px;height:9px;border-radius:50%;
  background:#0D2756;box-shadow:0 0 0 2px #fff;pointer-events:none;
}
/* El renglón del menú del celular: el mismo dorado, el mismo texto marino. */
.nav-item-ref{
  position:relative;
  background:linear-gradient(115deg,#D9B660 0%,#F3E2A6 38%,#F8EBC6 50%,#EFDB8B 64%,#C6AB64 100%);
  color:#0D2756 !important;border:1px solid rgba(184,146,58,.55);width:100%;box-sizing:border-box;
  margin:14px 0 2px;border-radius:10px;font-weight:700;
  box-shadow:0 1px 2px rgba(138,108,58,.25),inset 0 1px 0 rgba(255,255,255,.6);
}
.nav-item-ref .nav-icon{color:#0D2756 !important;stroke:#0D2756}
.nav-item-ref span{color:#0D2756 !important}
.nav-item-ref .ref-nuevo{top:8px;right:10px}
.nav-item-ref:hover,.nav-item-ref.active{
  background:linear-gradient(115deg,#D9B660 0%,#F3E2A6 38%,#F8EBC6 50%,#EFDB8B 64%,#C6AB64 100%);
  background-size:200% 100%;background-position:100% 50%;color:#0D2756 !important;
  border-color:rgba(184,146,58,.75);
}
/* El menú lateral es oscuro: un anillo marino ahí no se ve (1.2:1). Champaña. */
.nav-item-ref:focus-visible{outline:2px solid #F3E2A6;outline-offset:2px}

/* ── La ventana: la única y la del botón son el MISMO componente ───────────
 * Escritorio: tarjeta de 520 px centrada, con desplazamiento interno. ≤600 px:
 * hoja que sube desde abajo (el Fold cerrado). */
.ref-ventana-fondo{position:fixed;inset:0;z-index:1150;display:none;align-items:center;
  justify-content:center;padding:20px;background:rgba(13,39,86,.42)}
.ref-ventana-fondo.abierta{display:flex}
.ref-ventana{background:#fff;border-radius:18px;max-width:520px;width:100%;
  max-height:88vh;max-height:88dvh;display:flex;flex-direction:column;
  box-shadow:0 24px 60px rgba(13,39,86,.28);overflow:hidden;position:relative;
  font-family:var(--font);animation:refEntrar .18s ease-out}
/* El panel tiene altura FIJA: el esqueleto y lo que llega miden lo mismo, así
 * que al cargar nada salta. */
.ref-ventana.ref-ventana-panel{height:min(88vh,760px);height:min(88dvh,760px)}
.ref-ventana-contenido{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch}
@keyframes refEntrar{from{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.ref-ventana{animation:none}}

/* Cabecera marina con una línea champaña de 3 px. */
.ref-ventana-cab{position:relative;display:flex;align-items:flex-start;gap:14px;
  background:#0D2756;color:#fff;padding:22px 60px 20px 24px}
.ref-ventana-cab::after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;
  background:linear-gradient(115deg,#D9B660 0%,#F3E2A6 38%,#F8EBC6 50%,#EFDB8B 64%,#C6AB64 100%)}
.ref-cab-regalo{flex:0 0 40px;width:40px;height:40px;border-radius:50%;display:inline-flex;
  align-items:center;justify-content:center;color:#0D2756;
  background:linear-gradient(115deg,#D9B660 0%,#F3E2A6 38%,#F8EBC6 50%,#EFDB8B 64%,#C6AB64 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.6)}
.ref-cab-regalo svg{stroke:#0D2756}
.ref-cab-textos{min-width:0}
.ref-ventana-cab h2{margin:0 0 6px;font-family:var(--font);font-size:20px;font-weight:700;
  line-height:1.25;color:#fff;letter-spacing:0}
.ref-ventana-cab p{margin:0;font-size:14px;line-height:1.5;color:#F3E8C8}
.ref-cerrar{position:absolute;top:14px;right:14px;z-index:2;width:34px;height:34px;border-radius:50%;
  border:1px solid rgba(243,226,166,.55);background:#0D2756;color:#fff;font-size:20px;line-height:1;
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;
  box-shadow:0 2px 8px rgba(13,39,86,.28)}
.ref-cerrar:hover{background:#17336B}
.ref-cerrar:focus-visible{outline:2px solid #F3E2A6;outline-offset:2px}

.ref-ventana-cuerpo{padding:22px 24px 24px;font-size:14px;color:#334155;line-height:1.55;background:#fff}
.ref-seccion + .ref-seccion{margin-top:22px;padding-top:20px;border-top:1px solid #EDE7D6}
.ref-sub{margin:0 0 10px;font-size:13px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  color:#0D2756}
.ref-aviso{margin:0;background:#FBF6E8;border:1px solid rgba(184,146,58,.45);border-radius:12px;
  padding:14px 16px;color:#334155;font-size:14px;line-height:1.55}
.ref-aviso a{color:#0D2756;font-weight:700;text-decoration:underline}

/* La caja del código: marfil con borde CONTINUO champaña. */
.ref-codigo{display:flex;align-items:center;justify-content:space-between;gap:10px;
  border:1px solid rgba(184,146,58,.45);background:#FBF6E8;border-radius:12px;padding:10px 10px 10px 14px;margin:0 0 12px}
.ref-codigo strong{font-size:20px;font-weight:700;letter-spacing:.12em;color:#0D2756;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:nowrap}
/* Medido a 344 px (Fold cerrado): el código se partía en dos renglones
 * («RUIZ-» / «WXP») porque el botón «Copiar» le robaba el ancho. Un código que
 * se dicta no puede partirse: el botón baja y el código se queda entero. */
@media(max-width:420px){.ref-codigo{flex-wrap:wrap}.ref-codigo .ref-btn{flex:1 1 100%}}

.ref-acciones{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
/* WhatsApp a lo ancho y los secundarios repartidos debajo: con tres botones en
 * 520 px, «Ahora no» caía solo a un segundo renglón (medido en captura). */
.ref-acciones .ref-btn-wa{flex:1 1 100%}
.ref-acciones .ref-btn-contorno{flex:1 1 0}
/* Un aviso a la vez: mientras la ventana está abierta, la oferta de huella
 * (que flota encima del velo) se esconde, igual que con el menú lateral. */
body.ref-dialogo-abierto .hl-oferta{display:none}
.ref-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:10px;
  padding:10px 16px;font-size:14px;font-weight:600;cursor:pointer;border:1px solid #CBD5E1;
  background:#fff;color:#0D2756;text-decoration:none;min-height:42px;font-family:var(--font);
  transition:background-color .15s ease,border-color .15s ease}
.ref-btn:hover{background:#F8FAFC;border-color:#94A3B8;color:#0D2756;text-decoration:none}
.ref-btn:focus-visible{outline:2px solid #0D2756;outline-offset:2px}
.ref-btn-contorno{background:#fff;border-color:#CBD5E1;color:#0D2756}
.ref-codigo .ref-btn-contorno{border-color:#0D2756}
/* El ÚNICO botón lleno: marino. Nada de verde chillón (el WhatsApp va en su
 * ícono) ni de rojo. */
.ref-btn-wa{background:#0D2756;border-color:#0D2756;color:#fff}
.ref-btn-wa:hover{background:#17336B;border-color:#17336B;color:#fff}
.ref-btn-wa:focus-visible{outline:2px solid #0D2756;outline-offset:2px}
/* «Guardar código» de la pantalla de usar código (antes naranja→frambuesa). */
.ref-btn-prim{background:#0D2756;border-color:#0D2756;color:#fff}
.ref-btn-prim:hover{background:#17336B;border-color:#17336B;color:#fff}
.ref-btn-wa .ref-ico-wa{width:18px;height:18px;color:#fff;fill:#fff;flex:0 0 18px}
.ref-letra{font-size:12.5px;color:#475569;line-height:1.55;margin:12px 0 0}
.ref-letra a,.ref-ventana-cuerpo a:not(.ref-btn){color:#0D2756;text-decoration:underline;font-weight:600}

/* Cómo funciona: tres pasos, número en un círculo champaña. */
.ref-pasos{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.ref-paso{background:#fff;border:1px solid #EDE7D6;border-radius:12px;padding:12px;font-size:13px;
  color:#334155;line-height:1.5}
.ref-paso b{display:block;color:#0D2756;font-size:13.5px;margin:8px 0 4px}
.ref-paso-num{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  border-radius:50%;font-size:13px;font-weight:700;color:#0D2756;
  background:linear-gradient(115deg,#D9B660 0%,#F3E2A6 38%,#F8EBC6 50%,#EFDB8B 64%,#C6AB64 100%);
  border:1px solid rgba(184,146,58,.5)}

/* Tus colegas: lista compacta y etiquetas sobrias.
 * Todo alineado a la IZQUIERDA (28-sep, revisión de capturas): pegadas a la
 * derecha, las etiquetas y «Ganado hasta hoy» quedaban justo debajo de la ✕
 * fija al desplazar («Canceló» se leía «Canc»), y a 344 px unas se quedaban a
 * la derecha y otras bajaban: la lista se veía desordenada. */
.ref-colegas-cab{display:flex;flex-direction:column;align-items:flex-start;gap:6px;margin-bottom:10px}
.ref-colegas-cab .ref-sub{margin:0}
.ref-ganado{text-align:left}
.ref-ganado span{display:block;font-size:12.5px;color:#475569}
.ref-ganado strong{display:block;font-size:24px;font-weight:700;color:#0D2756;line-height:1.2}
.ref-colegas{list-style:none;margin:0;padding:0}
.ref-colega{padding:12px 0;border-bottom:1px solid #F1ECDD}
.ref-colega:last-child{border-bottom:0}
.ref-colega-fila{display:flex;justify-content:flex-start;align-items:center;gap:6px 10px;flex-wrap:wrap}
.ref-colega-nombre{font-weight:600;color:#0D2756}
.ref-colega-premio{font-size:12.5px;color:#475569;margin-top:4px}
.ref-estado{display:inline-block;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600;
  background:#F1F5F9;color:#475569}
.ref-estado.e-registrado{background:#EEF2F7;color:#334155}
.ref-estado.e-meses_gratis{background:#EEF2F7;color:#0D2756}
.ref-estado.e-pagando{background:#EAF5E8;color:#2F6B2A}
.ref-estado.e-completo{background:#F7EDD0;color:#5C4300}
.ref-estado.e-cancelo,.ref-estado.e-sin_beneficio{background:#F1F5F9;color:#475569}
.ref-barra{height:6px;border-radius:999px;background:#F1ECDD;overflow:hidden;margin-top:8px}
.ref-barra i{display:block;height:100%;border-radius:999px;
  background:linear-gradient(115deg,#D9B660 0%,#F3E2A6 38%,#F8EBC6 50%,#EFDB8B 64%,#C6AB64 100%)}

/* Mientras llega el panel: bloques quietos (sin brillo en bucle). */
.ref-esqueleto{min-height:100%}
.ref-esq-cab{height:108px;background:#0D2756;border-bottom:3px solid #EFDB8B}
.ref-esq-cuerpo{padding:24px}
.ref-esq-cuerpo i{display:block;height:14px;border-radius:7px;background:#F1ECDD;margin:0 0 14px;width:70%}
.ref-esq-cuerpo i.ancho{height:52px;border-radius:12px;width:100%;background:#FBF6E8;border:1px solid #EDE7D6}
.ref-esq-cuerpo i.corto{width:45%}
.ref-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* La página /refiere-y-gana: el mismo panel, en una tarjeta. */
.ref-pagina{max-width:640px;margin:0 auto;padding:4px 0 40px}
.ref-pagina .ref-panel{background:#fff;border-radius:18px;overflow:hidden;border:1px solid #EDE7D6;
  box-shadow:0 10px 30px rgba(13,39,86,.08)}
.ref-pagina .ref-ventana-cab{padding-right:24px}

@media(max-width:600px){
  .ref-ventana-fondo{align-items:flex-end;padding:0}
  .ref-ventana{max-width:none;border-radius:20px 20px 0 0;max-height:92vh;max-height:92dvh}
  .ref-ventana.ref-ventana-panel{height:88vh;height:88dvh}
  /* El asa: dice «esto es una hoja y se cierra» sin palabras. */
  .ref-ventana::before{content:"";position:absolute;top:7px;left:50%;width:40px;height:4px;
    margin-left:-20px;border-radius:2px;background:rgba(243,232,200,.55);z-index:3}
  .ref-ventana-cab{padding:24px 56px 18px 18px;gap:12px}
  .ref-ventana-cuerpo{padding:18px 18px 22px}
  .ref-acciones .ref-btn{flex:1 1 100%}
  .ref-pasos{grid-template-columns:1fr}
  .ref-pagina .ref-panel{border-radius:16px}
}

.sug-backdrop{position:fixed;inset:0;z-index:1200;display:flex;align-items:center;
  justify-content:center;padding:20px;background:rgba(11,18,32,.55);overflow-y:auto}
.sug-backdrop[hidden]{display:none}
.sug-modal{width:100%;max-width:560px;max-height:calc(100vh - 40px);overflow-y:auto;
  box-sizing:border-box;padding:22px;border-radius:18px;background:#fff;
  box-shadow:0 24px 70px rgba(11,18,32,.32)}
.sug-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.sug-head h2{margin:0;font-size:19px;font-weight:800;color:var(--brand-ink)}
.sug-x{flex:0 0 auto;width:32px;height:32px;display:grid;place-items:center;padding:0;
  border:1px solid var(--border);border-radius:9px;background:#fff;color:#667085;
  font-size:22px;line-height:1;cursor:pointer}
.sug-x:hover{color:var(--brand-ink)}
.sug-sub{margin:6px 0 16px;color:#5f6879;font-size:13px;line-height:1.55}
.sug-label{display:block;margin-bottom:6px;font-size:12.5px;font-weight:700;color:#344054}
#sugTexto{width:100%;box-sizing:border-box;padding:11px 12px;border:1px solid var(--border);
  border-radius:10px;font-family:var(--font);font-size:13.5px;line-height:1.55;resize:vertical}
#sugTexto:focus{outline:none;border-color:var(--brand-blue);box-shadow:0 0 0 3px var(--brand-blue-soft)}
.sug-cuenta{margin:4px 0 14px;text-align:right;color:#98a2b3;font-size:11px}

.sug-zona{display:grid;place-items:center;gap:5px;padding:20px 16px;cursor:pointer;
  border:1.5px dashed #cbd5e1;border-radius:12px;background:#fbfcfe;text-align:center;
  transition:border-color .15s,background .15s}
.sug-zona svg{width:26px;height:26px;color:var(--brand-blue)}
.sug-zona strong{font-size:13px;color:#344054}
.sug-zona small{color:#98a2b3;font-size:11.5px;line-height:1.5}
.sug-zona:hover,.sug-zona:focus-visible{border-color:var(--brand-blue);background:var(--brand-blue-soft);outline:none}
/* `is-sobre` la pone el guión al arrastrar encima: sin una señal clara, el
   médico suelta el archivo sin saber si va a entrar. */
.sug-zona.is-sobre{border-color:var(--brand-green);background:var(--brand-green-soft)}

.sug-lista{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:7px}
.sug-item{display:flex;align-items:center;gap:9px;padding:8px 10px;
  border:1px solid var(--border);border-radius:10px;background:#fff}
.sug-item-nombre{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:12.5px;font-weight:650;color:#344054}
.sug-item-peso{flex:0 0 auto;color:#98a2b3;font-size:11px}
.sug-item-ver{flex:0 0 auto;padding:4px 9px;border:1px solid var(--border);border-radius:7px;
  background:#fff;color:var(--brand-blue);font-family:var(--font);font-size:11.5px;
  font-weight:700;cursor:pointer}
.sug-item-ver:hover{background:var(--brand-blue-soft)}
.sug-item-x{flex:0 0 auto;width:26px;height:26px;display:grid;place-items:center;padding:0;
  border:1px solid var(--border);border-radius:7px;background:#fff;color:#b42318;
  font-size:17px;line-height:1;cursor:pointer}
.sug-item-x:hover{background:#fff4f3;border-color:#fecdca}
.sug-gracias{padding:10px;border-radius:10px;background:var(--brand-green-soft);
  color:#067647;font-size:12.5px;font-weight:700;text-align:center}

.sug-aviso{margin-top:11px;padding:9px 11px;border-radius:9px;background:#fff4f3;
  border:1px solid #fecdca;color:#b42318;font-size:12px;line-height:1.5}
.sug-aviso[hidden]{display:none}
.sug-pie{margin-top:16px}
.sug-enviar{width:100%;padding:11px 16px;border:0;border-radius:11px;cursor:pointer;
  background:linear-gradient(100deg,var(--brand-blue) 0%,var(--brand-green) 100%);
  color:#fff;font-family:var(--font);font-size:14px;font-weight:800}
.sug-enviar:disabled{opacity:.6;cursor:default}

/* La vista previa va POR ENCIMA del modal (z-index mayor): es una capa aparte
   porque un video o un PDF a tamaño útil no cabe dentro del formulario. */
.sug-visor{position:fixed;inset:0;z-index:1300;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:12px;padding:24px;background:rgba(11,18,32,.9)}
.sug-visor[hidden]{display:none}
.sug-visor-x{position:absolute;top:16px;right:16px}
.sug-visor-caja{max-width:min(920px,100%);max-height:78vh;display:flex;align-items:center;justify-content:center}
.sug-visor-caja img,.sug-visor-caja video{max-width:100%;max-height:78vh;border-radius:12px;background:#000}
.sug-visor-caja iframe{width:min(920px,90vw);height:78vh;border:0;border-radius:12px;background:#fff}
.sug-sin-vista{padding:22px;border-radius:12px;background:#fff;color:#344054;
  font-size:13px;line-height:1.6;text-align:center;max-width:420px}
.sug-visor-pie{margin:0;color:#e4e8f0;font-size:12.5px}

/* ── Tableta y celular ─────────────────────────────────────────────────────
 * A pantalla chica el modal deja de ser una ventana y pasa a ser una hoja
 * pegada abajo: es donde está el pulgar, y una ventana centrada con teclado
 * abierto deja el botón de enviar fuera de la pantalla. */
@media(max-width:640px){
  .sug-backdrop{padding:0;align-items:flex-end}
  .sug-modal{max-width:none;max-height:92vh;border-radius:18px 18px 0 0;padding:18px 16px 22px}
  .sug-head h2{font-size:17px}
  .sug-zona{padding:16px 12px}
  .sug-item-ver{padding:6px 10px}          /* área táctil, no 4 px */
  .sug-item-x{width:30px;height:30px}
  .sug-visor{padding:12px}
  .sug-visor-caja iframe{width:100%;height:70vh}
}

/* La entrada del buzón en el menú lateral existe SÓLO donde la barra superior
   esconde sus acciones rápidas (max-width:768px). Arriba de ahí sobra: habría
   dos caminos al mismo sitio y el de la barra ya llama la atención. */
.nav-solo-movil{display:none}
@media(max-width:768px){
  .nav-solo-movil{display:flex;width:100%;text-align:left;
    font-family:var(--font);cursor:pointer}
}

/* ── El buzón de sugerencias en el menú de celular (1-sep-2026) ─────────────
 * Encargo de Francisco: «en móvil, Buzón de sugerencias muévelo al final,
 * después de configuración, y dale los mismos colores que tenemos en
 * escritorio».
 *
 * El degradado es EL MISMO de `.topbar-qc-sug` —las variables de MARCA, las del
 * logo, no --blue/--green de la paleta de la app— para que el botón de
 * escritorio y la entrada de celular sean reconociblemente la misma cosa.
 *
 * El color va con `!important` a propósito: `.nav-item` pinta su texto y su
 * icono en el gris del menú, y con más especificidad al estar en `.active` o en
 * `:hover`. Sin esto el degradado quedaría con letra gris marengo encima.
 *
 * Y va SIN margen lateral, con `width:100%`: medido a 390 px el 1-sep, un
 * `margin` de 12 px lo sacaba 4 px de la barra (iba de 20 a 234 con la barra
 * terminando en 230). La causa es el tipo de elemento, no el margen: `.nav-item`
 * es un <a> y en flex se estira al ancho del <nav> —el desplazamiento de 8 px
 * es el padding del <nav>, no un margen suyo—, mientras que un <button> toma
 * anchura intrínseca, así que el margen lo empujaba sin encogerlo.
 */
.nav-item-sug{
  background:linear-gradient(100deg,var(--brand-blue) 0%,var(--brand-green) 100%);
  color:#fff !important;
  border:0;
  width:100%;
  box-sizing:border-box;
  margin:14px 0 6px;
  border-radius:10px;
  font-weight:700;
}
.nav-item-sug .nav-icon{color:#fff !important;stroke:#fff}
.nav-item-sug span{color:#fff !important}
.nav-item-sug:hover{
  background:linear-gradient(100deg,var(--brand-blue-dark) 0%,var(--brand-green-dark) 100%);
  color:#fff !important;
}
.nav-item-sug:focus-visible{outline:2px solid #fff;outline-offset:-3px}

/* ── El recordatorio por WhatsApp al agendar (17-sep-2026) ───────────────────
   Vive en los DOS modales de agendar (el del calendario y el global de
   `base.html`), así que las reglas van aquí y no en la plantilla: dos copias
   del mismo estilo es cómo se consigue que uno de los dos se quede viejo. */
.mdd-wa-cita {
  border: 1.5px solid #E5E7EB;
  border-radius: 9px;
  padding: 10px 12px;
  background: #FAFAFA;
}
.mdd-wa-cita-sw {
  display: flex; align-items: center; gap: 8px;
  font-size: 13px; font-weight: 600; color: #374151; cursor: pointer;
}
.mdd-wa-cita-sw input { width: 15px; height: 15px; accent-color: #25D366; cursor: pointer; }
.mdd-wa-cita-cuerpo { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
/* 🚨 El atributo `hidden` sólo vale `display:none` en la hoja del NAVEGADOR, y
   cualquier `display` de autor le gana. Sin esta línea, el bloque salía con las
   casillas de consentimiento Y el «Ya nos autorizó» al mismo tiempo —que es
   contradictorio— porque el `display:flex` de arriba pisaba el `hidden`.
   Se aplica a los dos elementos que se ocultan aquí. */
.mdd-wa-cita-cuerpo[hidden], .mdd-wa-cita-ya[hidden] { display: none; }
.mdd-wa-cita-lbl {
  font-size: 11px; font-weight: 700; color: #9CA3AF;
  text-transform: uppercase; letter-spacing: .02em;
}
.mdd-wa-cita-tel { display: flex; gap: 6px; }
.mdd-wa-cita-tel input {
  padding: 8px 10px; border: 1.5px solid #E5E7EB; border-radius: 8px;
  font-size: 13px; font-family: inherit; outline: none; box-sizing: border-box;
  min-width: 0;   /* sin esto, un flex item no baja de su ancho intrínseco */
}
.mdd-wa-cita-tel input:first-child { flex: 0 0 62px; text-align: center; }
.mdd-wa-cita-tel input:last-child  { flex: 1 1 auto; }
.mdd-wa-cita-tel input:focus { border-color: #2563EB; }
.mdd-wa-cita-chk {
  display: flex; gap: 8px; align-items: flex-start;
  font-size: 12px; line-height: 1.45; color: #4B5563; cursor: pointer;
}
.mdd-wa-cita-chk input {
  width: 14px; height: 14px; margin-top: 2px; flex-shrink: 0;
  accent-color: #25D366; cursor: pointer;
}
.mdd-wa-cita-ya { margin: 8px 0 0; font-size: 12px; color: #059669; }
.mdd-wa-cita-cambiar {
  background: none; border: none; padding: 0; margin-left: 4px;
  font: inherit; font-size: 12px; color: #2563EB;
  text-decoration: underline; cursor: pointer;
}

/* ── Los campos que faltan para asentar la nota (17-sep-2026) ────────────────
   Antes de esto, la pantalla avisaba con un diálogo que listaba nombres de
   campo en texto y ofrecía «Guardar de todas formas» — un botón que el
   servidor tenía prohibido conceder (NOM_CANDADO=estricto ⇒ 422). Ahora se
   marca lo que falta DONDE está, que es lo que el médico puede arreglar.

   Borde + fondo + un punto, no sólo color: hay médicos que no distinguen el
   rojo, y este repo ya tomó esa decisión para las píldoras de caducidad. */
.cf-falta > .form-label,
.cf-falta > label.form-label { color: #B91C1C; }
input.cf-falta,
textarea.cf-falta,
select.cf-falta {
  border-color: #DC2626 !important;
  background: #FEF2F2;
  box-shadow: 0 0 0 3px rgba(220, 38, 38, .10);
}
.form-group.cf-falta { position: relative; }
.form-group.cf-falta::before {
  content: "Falta";
  position: absolute; top: 0; right: 0;
  font-size: 10px; font-weight: 800; letter-spacing: .04em;
  color: #B91C1C; background: #FEE2E2;
  padding: 1px 7px; border-radius: 10px;
}
/* La marca se va en cuanto el médico empieza a escribir: dejarla puesta
   mientras teclea la respuesta correcta es regañarlo por algo que ya arregló. */
input.cf-falta:focus,
textarea.cf-falta:focus,
select.cf-falta:focus { background: #fff; box-shadow: 0 0 0 3px rgba(37, 99, 235, .12); }
/* La leyenda del asterisco en el alta de paciente (17-sep-2026). */
.pf-leyenda-oblig {
  margin: 0 0 16px; padding: 9px 13px;
  background: #F8FAFC; border: 1px solid #E5E7EB; border-radius: 9px;
  font-size: 12.5px; line-height: 1.5; color: #4B5563;
}

/* ── Huella: banner de oferta única (26-sep-2026) ─────────────────────────
   Banner, no modal: convive con la ventana de referidos sin pelear el foco.
   En escritorio flota abajo a la derecha; en móvil es hoja inferior a lo
   ancho (los pulgares viven abajo). z-index bajo el de los modales (1000+)
   a propósito: si un modal abre encima, el banner espera sin taparlo.
   28-sep-2026 (barrido): esa promesa no se cumplía. Con 900 —el MISMO del
   velo de #upsellModal y #upgradeOverlay, y más abajo en el DOM— el banner se
   pintaba ENCIMA del modal de planes y tapaba «Empezar por $249» a 344 px; y
   también encima de la receta global (700), la de Google Calendar (600) y la
   del consultorio en Configuración (500). 450: debajo de todas esas ventanas,
   encima del menú lateral (200) y de los desplegables (400). */
.hl-oferta {
  position: fixed; right: 20px; bottom: 20px; z-index: 450;
  width: 340px; max-width: calc(100vw - 32px);
  background: var(--surface, #fff); color: var(--text, #0f172a);
  border: 1px solid var(--border, #e2e8f0); border-radius: 14px;
  box-shadow: 0 12px 32px rgba(15, 23, 42, .18);
  padding: 16px 18px;
}
.hl-oferta-cab { display: flex; align-items: center; gap: 8px; font-size: 14.5px; }
.hl-oferta-cab svg { color: var(--primary, #2563eb); flex: none; }
.hl-oferta-texto { font-size: 13px; color: var(--text-muted, #475569); margin: 8px 0 12px; line-height: 1.45; }
.hl-oferta-error { font-size: 12.5px; color: #b91c1c; margin: 0 0 10px; }
.hl-oferta-acciones { display: flex; gap: 8px; flex-wrap: wrap; }
.hl-oferta-check { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-muted, #64748b); margin-top: 10px; cursor: pointer; }
.hl-oferta-check input { margin: 0; }
@media (max-width: 640px) {
  .hl-oferta { right: 8px; left: 8px; bottom: 8px; width: auto; }
}
/* Con el menú lateral abierto, el banner se retira: medido el 26-sep en el
   Fold — la hoja inferior tapaba Buzón/Refiere/Configuración y sus taps.
   El menú (z-index 199/200) manda; el banner vuelve al cerrarlo. */
body.sidebar-open .hl-oferta { display: none; }
/* 28-sep-2026 (barrido): el banner es fijo abajo y tapaba las acciones del
   FONDO de la página —«Quitar» en Mis medicamentos, «Anotar» en Finanzas,
   «Agregar» en Insumos— sin que hubiera más scroll para sacarlas de debajo:
   hasta pulsar «Ahora no», no se podían usar (y test_ui_e2e quedó en rojo).
   Mientras está visible, la página reserva abajo su alto y un poco más, así
   todo control se puede desplazar por encima de él. Se detecta por el style
   en línea porque así lo enciende y apaga static/mdd-huella.js (nace
   `display:none;`, se revela con style.display = '' y se cierra con 'none'):
   si un día pasa a una clase, esta regla tiene que seguirla (lo vigila
   tests/test_barrido_28sep_huella.py). Sin soporte de :has() queda como
   antes, nada se rompe. */
body:has(.hl-oferta:not([style*="none"])) { padding-bottom: 250px; }

/* ── Instalar app móvil (26-sep-2026) ─────────────────────────────────────
   La tarjeta vive arriba del buscador de Configuración. El botón lleva el
   MISMO degradado azul→verde del botón de sugerencias — Francisco lo pidió
   con ese parentesco a propósito: son los dos botones «de la casa». */
.cfg-instapp { margin: 0 0 12px; }
.cfg-instapp-btn {
  display: flex; align-items: center; justify-content: center; gap: 9px;
  width: 100%; padding: 12px 16px; border: none; border-radius: 12px;
  background: linear-gradient(100deg, var(--brand-blue) 0%, var(--brand-green) 100%);
  color: #fff; font-size: 14px; font-weight: 700; cursor: pointer;
  box-shadow: 0 4px 14px rgba(37, 99, 235, .25);
}
.cfg-instapp-btn:hover {
  background: linear-gradient(100deg, var(--brand-blue-dark) 0%, var(--brand-green-dark) 100%);
}
.cfg-instapp-btn:focus-visible { outline: 2px solid var(--brand-blue); outline-offset: 2px; }

.instapp-fondo {
  position: fixed; inset: 0; z-index: 1200; display: flex;
  align-items: center; justify-content: center; padding: 16px;
  background: rgba(15, 23, 42, .55);
}
.instapp-caja {
  position: relative; width: 480px; max-width: 100%; max-height: calc(100vh - 32px);
  overflow: auto; background: #fff; border-radius: 16px; padding: 26px 26px 22px;
  box-shadow: 0 24px 60px rgba(15, 23, 42, .3);
}
.instapp-caja h2 { font-size: 18px; font-weight: 800; color: #0F172A; margin: 0 0 6px; padding-right: 30px; }
.instapp-sub { font-size: 13.5px; color: #475569; margin: 0 0 18px; line-height: 1.5; }
.instapp-cerrar {
  position: absolute; top: 14px; right: 14px; width: 32px; height: 32px;
  border: none; border-radius: 8px; background: #F1F5F9; color: #475569;
  font-size: 20px; line-height: 1; cursor: pointer;
}
.instapp-cerrar:hover { background: #E2E8F0; }
.instapp-os { display: flex; gap: 12px; }
.instapp-os-btn {
  flex: 1; display: flex; flex-direction: column; align-items: center; gap: 6px;
  padding: 22px 10px 16px; border: 2px solid #E2E8F0; border-radius: 14px;
  background: #fff; cursor: pointer; color: #0F172A;
}
.instapp-os-btn:hover { border-color: var(--brand-blue); background: #F8FAFF; }
.instapp-os-btn svg { color: var(--brand-blue); }
.instapp-os-btn span { font-size: 15px; font-weight: 800; }
.instapp-os-btn small { font-size: 12px; color: #64748B; }
.instapp-nota {
  background: #EFF6FF; border: 1px solid #BFDBFE; border-radius: 10px;
  padding: 10px 12px; font-size: 12.5px; color: #1E40AF; margin: 0 0 14px; line-height: 1.5;
}
.instapp-pasos { margin: 0; padding: 0 0 0 4px; list-style: none; counter-reset: instapp; }
.instapp-pasos li {
  counter-increment: instapp; position: relative; padding: 0 0 14px 42px;
  font-size: 13.5px; color: #334155; line-height: 1.5;
}
.instapp-pasos li::before {
  content: counter(instapp); position: absolute; left: 0; top: 0;
  width: 28px; height: 28px; border-radius: 50%;
  background: linear-gradient(100deg, var(--brand-blue) 0%, var(--brand-green) 100%);
  color: #fff; font-weight: 800; font-size: 13px;
  display: flex; align-items: center; justify-content: center;
}
.instapp-pasos li b { color: #0F172A; }
.instapp-pasos li small { display: block; color: #64748B; font-size: 12px; margin-top: 2px; }
.instapp-url { color: var(--brand-blue); font-weight: 700; }
.instapp-listo {
  background: #0F172A; color: #E2E8F0; border-radius: 10px;
  padding: 10px 14px; font-size: 13px; margin: 6px 0 14px;
}
.instapp-listo b { color: #34D399; }
.instapp-volver {
  border: 1.5px solid #E2E8F0; background: #fff; color: #334155;
  border-radius: 9px; padding: 8px 14px; font-size: 13px; font-weight: 600; cursor: pointer;
}
.instapp-volver:hover { background: #F8FAFC; }
@media (max-width: 640px) {
  .instapp-fondo { align-items: flex-end; padding: 0; }
  .instapp-caja { width: 100%; border-radius: 16px 16px 0 0; max-height: 92vh; }
  .instapp-os-btn { padding: 16px 8px 12px; }
}

/* ── Guía de cada sección: qué es y cómo empezar (8-oct-2026) ──────────────
   Regla de Francisco: toda sección dice qué es y cómo empezar. Texto en
   services/guias_seccion.py; marcado en templates/partials/_guia_seccion.html;
   comportamiento en static/mdd-guia.js. Plegada es una píldora de 36 px que
   no empuja nada; abierta, una tarjeta con los pasos numerados. */
.guia-que{margin:4px 0 0;font-size:14px;line-height:1.55;color:#475569;max-width:760px}
details.guia-sec{display:block;margin:12px 0 16px;max-width:100%;box-sizing:border-box}
details.guia-sec>summary{list-style:none}
details.guia-sec>summary::-webkit-details-marker{display:none}
.guia-sum{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:0 14px;border-radius:999px;
  border:1.5px solid #BFDBFE;background:#F5F9FF;color:#1D4ED8;font-size:13.5px;font-weight:700;cursor:pointer;
  user-select:none;-webkit-user-select:none;font-family:inherit;box-sizing:border-box;max-width:100%}
.guia-sum:hover{background:#EAF2FF}
.guia-sum:focus-visible{outline:2px solid #2563EB;outline-offset:2px}
.guia-ico{flex-shrink:0}
.guia-sum-n{font-weight:600;color:#64748B;font-size:12.5px}
.guia-chev{flex-shrink:0;transition:transform .2s ease}
details.guia-sec[open]{background:#F8FAFC;border:1.5px solid #E2E8F0;border-radius:16px;padding:12px}
details.guia-sec[open]>.guia-sum{background:#fff}
details.guia-sec[open] .guia-chev{transform:rotate(180deg)}
.guia-cuerpo{padding:12px 2px 2px}
.guia-pasos{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px}
.guia-paso{display:flex;gap:10px;align-items:flex-start;background:#fff;border:1px solid #E5E7EB;border-radius:12px;padding:12px;min-width:0}
.guia-paso i{flex:0 0 26px;height:26px;border-radius:50%;background:#0D2756;color:#fff;font-style:normal;font-weight:800;
  font-size:13px;display:flex;align-items:center;justify-content:center}
.guia-paso>div{min-width:0}
.guia-paso b{display:block;font-size:14px;color:#0F172A;margin-bottom:3px;line-height:1.35}
.guia-paso span{display:block;font-size:13px;color:#475569;line-height:1.5}
.guia-pie{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:12px}
.guia-instr{display:inline-flex;align-items:center;gap:6px;color:#1D4ED8;font-weight:600;font-size:13.5px;text-decoration:none;min-height:40px}
.guia-instr:hover{text-decoration:underline}
.guia-ok{min-height:40px;padding:0 18px;border-radius:10px;border:1.5px solid #CBD5E1;background:#fff;color:#0F172A;
  font-weight:700;font-size:13.5px;cursor:pointer;font-family:inherit;margin-left:auto}
.guia-ok:hover{border-color:#94A3B8}
.guia-que-dentro{margin:0 0 12px;color:#334155}
/* Flotante (Calendario): plegada es la misma píldora; abierta, una hoja fija
   encima de la agenda —`position:fixed` para que ningún `overflow:hidden` de
   la cuadrícula la recorte— que se cierra con «Entendido», Esc o tocando fuera. */
details.guia-sec.guia-flotante{display:inline-block;margin:0;position:relative}
details.guia-sec.guia-flotante[open]{background:none;border:none;padding:0;border-radius:0}
details.guia-sec.guia-flotante[open]>.guia-cuerpo{position:fixed;left:50%;top:92px;transform:translateX(-50%);
  width:min(620px,calc(100vw - 32px));max-height:calc(100vh - 130px);overflow:auto;z-index:900;box-sizing:border-box;
  background:#F8FAFC;border:1.5px solid #E2E8F0;border-radius:16px;padding:14px;box-shadow:0 22px 48px rgba(15,23,42,.22)}
@media (max-width:520px){
  details.guia-sec.guia-flotante[open]>.guia-cuerpo{top:64px;max-height:calc(100vh - 84px)}
  .guia-pasos{grid-template-columns:1fr}
  details.guia-sec[open]{padding:10px;border-radius:14px}
  .guia-ok{width:100%;margin-left:0}
}
@media (prefers-reduced-motion:reduce){ .guia-chev{transition:none} }

/* ── Tus primeros pasos (9-oct-2026) · partials/_primeros_pasos.html ─────── */
.pp{background:#fff;border:1.5px solid #D6E6FB;border-radius:18px;padding:16px;margin:0 0 20px;
  box-shadow:0 1px 2px rgba(13,39,86,.04)}
.pp[hidden]{display:none}
.pp-cabeza{display:flex;align-items:flex-start;gap:12px 16px;flex-wrap:wrap;margin-bottom:12px}
.pp-cabeza>div:first-child{flex:1 1 240px;min-width:0}
.pp-titulo{font-size:17px;font-weight:800;color:#0D2756;margin:0}
.pp-sub{font-size:13px;color:#475569;margin:3px 0 0;line-height:1.5}
.pp-avance{display:flex;align-items:center;gap:10px;flex:0 1 220px;min-width:160px}
.pp-avance-n{font-size:13px;color:#334155;white-space:nowrap}
.pp-barra{flex:1;height:8px;border-radius:99px;background:#E2E8F0;overflow:hidden}
.pp-barra i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#1B7BD6,#54B948)}
.pp-ocultar{background:none;border:1px solid #CBD5E1;border-radius:10px;min-height:36px;padding:0 12px;
  font-size:12.5px;font-weight:600;color:#475569;cursor:pointer}
.pp-ocultar:hover{border-color:#94A3B8;color:#0F172A}
.pp-lista{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.pp-paso{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid #E5E7EB;border-radius:12px;background:#F8FAFC}
.pp-check{flex:0 0 28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  background:#0D2756;color:#fff;font-weight:800;font-size:13px}
.pp-check .pp-ok{display:none}
.pp-hecho .pp-check{background:#54B948}
.pp-hecho .pp-check .pp-ok{display:block}
.pp-hecho .pp-check .pp-num{display:none}
.pp-hecho .pp-txt b{color:#475569;text-decoration:line-through;text-decoration-color:#94A3B8}
.pp-txt{flex:1;min-width:0}
.pp-txt b{display:block;font-size:14px;color:#0F172A;line-height:1.35}
.pp-txt b em{font-style:normal;font-weight:500;color:#64748B;font-size:12.5px}
.pp-txt span{display:block;font-size:12.5px;color:#475569;line-height:1.45;margin-top:2px}
.pp-ir{flex:0 0 auto;display:inline-flex;align-items:center;min-height:40px;padding:0 14px;border-radius:10px;
  background:#1B7BD6;color:#fff;font-weight:700;font-size:13px;text-decoration:none;white-space:nowrap}
.pp-ir:hover{background:#155FA8}
.pp-opcional .pp-ir{background:#fff;color:#1B7BD6;border:1.5px solid #A7C7F5}
.pp-listo{flex:0 0 auto;font-size:12.5px;font-weight:700;color:#2F8A27}
/* 19-oct-2026 · Un solo «siguiente». Eran seis botones azules iguales y no se
   leía cuál tocaba: ahora sólo el primer pendiente va relleno y con borde de
   color; los demás pendientes, de contorno. El opcional, sin número y con su
   etiqueta, separado por una línea fina. */
.pp-siguiente{border-color:#7FB2EE;background:#F2F8FF;box-shadow:0 0 0 2px rgba(27,123,214,.12)}
.pp-ir.pp-ir-contorno{background:#fff;color:#1B7BD6;border:1.5px solid #A7C7F5}
.pp-ir.pp-ir-contorno:hover{background:#F2F8FF}
.pp-paso.pp-opcional{margin-top:6px;position:relative}
.pp-paso.pp-opcional::before{content:"";position:absolute;left:6px;right:6px;top:-8px;border-top:1px solid #E2E8F0}
.pp-etq-opcional{flex:0 0 auto;font-size:11px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;
  color:#64748B;background:#EEF2F7;border-radius:99px;padding:3px 8px}
.pp-txt .pp-extra{margin-top:4px;font-size:12.5px;color:#64748B}
.pp-txt .pp-extra a{color:#1B7BD6;font-weight:600}
.pp-cierre{border-color:#BFE3B8;background:linear-gradient(180deg,#F4FBF2,#fff)}
.pp-cierre .pp-titulo{color:#1F6B19}
@media (max-width:520px){
  .pp{padding:12px;border-radius:14px}
  .pp-paso{flex-wrap:wrap}
  .pp-txt{flex-basis:calc(100% - 40px)}
  .pp-ir{width:100%;justify-content:center}
  .pp-ocultar{order:3}
  .pp-avance{flex:1 1 100%}
}
@media print{ .pp, .guia-sec{display:none !important} }

/* ── Paciente de ejemplo · ← Volver al recorrido (19-oct-2026) ─────────────
   partials/_franja_ejemplo.html. Con `desde=ejemplo` se queda pegada debajo de
   la barra de arriba: el regreso a Santiago tiene que estar a la mano también
   a media página de curvas. */
.fe-franja{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;margin:0 0 14px;padding:9px 12px;
  border:1px solid #FDE68A;background:#FFFBEB;border-radius:12px;font-size:13px;color:#78350F}
.fe-franja.fe-desde{position:sticky;top:calc(var(--header-h) + 6px);z-index:20;box-shadow:0 2px 6px rgba(120,53,15,.08)}
.fe-etq{font-weight:800;letter-spacing:.02em;text-transform:uppercase;font-size:11.5px;
  background:#FEF3C7;border:1px solid #FCD34D;border-radius:99px;padding:2px 9px}
.fe-nota{flex:1 1 220px;min-width:0;line-height:1.4}
.fe-volver{margin-left:auto;font-weight:700;color:#1D4ED8;text-decoration:none;white-space:nowrap;
  min-height:36px;display:inline-flex;align-items:center}
.fe-volver:hover{text-decoration:underline}
@media (max-width:520px){ .fe-volver{margin-left:0;white-space:normal} }
@media print{ .fe-franja{display:none !important} }

