/* ============================================================
   AppBar — cabecera ÚNICA del portal y de todos los módulos.
   ------------------------------------------------------------
   Sustituye a las dos cabeceras anteriores (hero con degradado del
   portal + cabecera propia de cada visor). Es una barra neutra
   sólida, sticky, de 56px (52 en móvil), con:
     · franja superior de 3px con el color del área
     · icono del área en una pastilla teñida de ese color
   La identidad cromática por área vive SOLO en --module-accent*
   (la fija core/appbar.js desde core/modules.js).

   Piezas que también viven aquí porque son cabecera:
     skip link · banner de demo · drawer (640–1279) · rail (≥1280)
     · chip de paciente y sus menús · paleta de comandos (Ctrl/Cmd+K)

   Presupuesto de altura: appbar 56 + tabs 48 = 104px en escritorio
   y 52 + 44 = 96px en móvil (antes 250–500px).
   ============================================================ */
:root{
  /* Acento del área. Lo sobreescribe appbar.js en cada página. */
  --module-accent:#2f5fb3;
  --module-accent-ink:#2f5fb3;    /* variante AA (≥4.5:1) sobre blanco */
  --module-accent-lit:#8fb4f0;    /* variante AA sobre la barra oscura */

  --ab-h:56px;
  --ab-bg:#141c28;
  --ab-fg:#ffffff;
  --ab-fg-soft:#c8cdd6;           /* 9.4:1 sobre --ab-bg */
  --ab-hover:rgba(255,255,255,.12);
  --ab-line:rgba(255,255,255,.16);
  --ab-ring:#4c8dff;              /* anillo de foco visible sobre claro y oscuro */
  --ab-muted:#5f6d80;             /* texto secundario: 5.3:1 sobre blanco (AA) */
  --rail-w:0px;
  --pop-shadow:0 14px 38px rgba(10,26,50,.26),0 2px 6px rgba(10,26,50,.12);
}

/* ---------------- Skip link ---------------- */
.skip-link{
  position:fixed;top:8px;left:8px;z-index:200;
  transform:translateY(-160%);
  background:#fff;color:#16202e;font:inherit;font-size:14px;font-weight:600;
  padding:12px 16px;border-radius:10px;text-decoration:none;box-shadow:var(--pop-shadow);
}
.skip-link:focus{transform:none;outline:2px solid var(--ab-ring);outline-offset:2px}

/* ---------------- Barra ---------------- */
.appbar{
  position:sticky;top:0;z-index:60;
  background:var(--ab-bg);color:var(--ab-fg);
  border-top:3px solid var(--module-accent);
  box-shadow:0 1px 0 rgba(10,26,50,.12),0 2px 10px rgba(10,26,50,.10);
}
.appbar-inner{
  max-width:1280px;margin:0 auto;padding:0 14px;
  height:var(--ab-h);display:flex;align-items:center;gap:6px;min-width:0;
}
.ab-grow{flex:1 1 auto;min-width:8px}

/* Botón cuadrado de icono. 44x44 mínimo táctil dentro de una barra de 56. */
.ab-btn{
  appearance:none;border:0;background:transparent;cursor:pointer;color:var(--ab-fg);
  min-width:44px;min-height:44px;flex:none;
  display:inline-grid;place-items:center;border-radius:10px;
  padding:0;text-decoration:none;transition:background .15s;
}
.ab-btn:hover{background:var(--ab-hover)}
.ab-btn:active{background:rgba(255,255,255,.2)}
.ab-btn svg{width:20px;height:20px;display:block}

.appbar :focus-visible,
.ab-pop :focus-visible,
.ab-drawer :focus-visible,
.ab-rail :focus-visible,
.ab-palette :focus-visible,
.ab-banner :focus-visible{outline:2px solid var(--ab-ring);outline-offset:2px}

/* Marca */
.ab-brand{
  display:inline-flex;align-items:center;gap:8px;flex:none;
  color:var(--ab-fg);text-decoration:none;font-weight:600;font-size:14.5px;letter-spacing:-.2px;
  padding:8px 8px;border-radius:10px;min-height:44px;transition:background .15s;
}
.ab-brand:hover{background:var(--ab-hover)}
.ab-brand .ab-mark{font-size:17px;line-height:1}

/* Migas de pan: el último nivel es texto (el <h1> de la página) */
.ab-crumbs{min-width:0;flex:0 1 auto}
.ab-crumbs ol{list-style:none;display:flex;align-items:center;gap:6px;margin:0;padding:0;min-width:0}
.ab-crumbs li{display:flex;align-items:center;gap:6px;min-width:0}
.ab-crumbs li+li::before{content:"›";color:var(--ab-fg-soft);flex:none;font-size:15px}
.ab-crumbs a{
  display:inline-flex;align-items:center;min-height:44px;   /* área táctil */
  color:var(--ab-fg-soft);text-decoration:none;font-size:13.5px;font-weight:500;white-space:nowrap;
  padding:0 8px;border-radius:8px;
}
.ab-crumbs a:hover{color:var(--ab-fg);background:var(--ab-hover)}
.ab-h1{
  margin:0;font-size:15px;font-weight:600;letter-spacing:-.2px;color:var(--ab-fg);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;
}

/* Conmutador de área: icono teñido + nombre + chevron */
.ab-switch{
  appearance:none;border:1px solid var(--ab-line);background:transparent;cursor:pointer;
  color:var(--ab-fg);font:inherit;font-size:13px;font-weight:600;
  display:inline-flex;align-items:center;gap:8px;min-height:44px;flex:none;
  padding:0 10px;border-radius:10px;transition:background .15s,border-color .15s;
}
.ab-switch:hover{background:var(--ab-hover);border-color:rgba(255,255,255,.34)}
.ab-switch .ab-chev{opacity:.7}
.ab-switch .ab-swtxt{max-width:22ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Pastilla del icono, teñida con el acento del área */
.ab-ico{
  width:26px;height:26px;flex:none;border-radius:8px;display:grid;place-items:center;font-size:15px;line-height:1;
  background:color-mix(in srgb,var(--module-accent) 34%,transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--module-accent) 58%,transparent);
}

/* Buscador global */
.ab-search{display:flex;align-items:center;flex:0 1 260px;min-width:0}
.ab-search input{
  width:100%;font:inherit;font-size:13.5px;color:var(--ab-fg);
  background:rgba(255,255,255,.10);border:1px solid var(--ab-line);
  border-radius:10px;padding:9px 12px;min-height:44px;
}
.ab-search input::placeholder{color:rgba(255,255,255,.62)}
.ab-search input:focus{outline:2px solid var(--ab-ring);outline-offset:1px;background:rgba(255,255,255,.16)}

/* Acción primaria */
.ab-primary{
  appearance:none;border:0;cursor:pointer;font:inherit;font-size:13px;font-weight:600;white-space:nowrap;
  color:#0e1622;background:#fff;min-height:44px;flex:none;padding:0 14px;border-radius:10px;
  transition:background .15s,transform .06s;
}
.ab-primary:hover{background:#e8f0fb}
.ab-primary:active{transform:translateY(1px)}

/* Chip de paciente */
.ab-chip{
  appearance:none;border:1px solid var(--ab-line);background:transparent;cursor:pointer;color:var(--ab-fg);
  display:inline-flex;align-items:center;gap:8px;min-height:44px;flex:0 1 auto;min-width:0;
  padding:0 10px 0 5px;border-radius:999px;font:inherit;font-size:13px;font-weight:600;
  transition:background .15s,border-color .15s;
}
.ab-chip:hover{background:var(--ab-hover);border-color:rgba(255,255,255,.34)}
.ab-avatar{
  width:28px;height:28px;flex:none;border-radius:50%;display:grid;place-items:center;
  background:color-mix(in srgb,var(--module-accent) 42%,#2b3648);
  color:#fff;font-size:12.5px;font-weight:600;
}
.ab-chip-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.ab-chip-age{color:var(--ab-fg-soft);font-weight:500}

/* ---------------- Popovers / menús ---------------- */
/* `fixed` y colgados de <body>: anclados por script a su disparador, así no
   los recorta el `overflow` de la barra ni compiten con su z-index. */
.ab-pop{
  position:fixed;z-index:120;min-width:220px;max-width:min(92vw,320px);
  background:#fff;color:#16202e;border:1px solid #e2e8f1;border-radius:12px;
  box-shadow:var(--pop-shadow);padding:6px;
}
.ab-pop[hidden]{display:none}
.ab-pop-head{padding:10px 10px 8px;border-bottom:1px solid #eef2f7;margin-bottom:6px}
.ab-pop-name{font-size:14.5px;font-weight:600;letter-spacing:-.2px}
.ab-pop-meta{font-size:12.5px;color:#4a5a6e;margin-top:3px;line-height:1.45}
.ab-pop-label{
  display:block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;
  color:var(--ab-muted);padding:8px 10px 4px;
}
.ab-item{
  width:100%;display:flex;align-items:center;gap:10px;text-align:left;
  appearance:none;border:0;background:transparent;cursor:pointer;text-decoration:none;
  font:inherit;font-size:13.5px;font-weight:500;color:#16202e;
  min-height:44px;padding:8px 10px;border-radius:9px;
}
.ab-item:hover,.ab-item:focus-visible{background:#f2f6fb}
.ab-item[aria-current="true"]{background:#eef3fb;font-weight:600}
.ab-item .ab-item-ico{width:22px;flex:none;text-align:center;font-size:15px}
.ab-item .ab-item-sub{display:block;font-size:11.5px;font-weight:500;color:var(--ab-muted)}
.ab-item .ab-dash{width:3px;align-self:stretch;border-radius:2px;background:var(--i,transparent);flex:none}
.ab-sep{height:1px;background:#e8eef6;margin:6px 4px}
.ab-item.danger{color:#c02c1e}
.ab-item.danger:hover,.ab-item.danger:focus-visible{background:#fdecea}
.ab-item[disabled]{opacity:.55;cursor:default}
.ab-item[disabled]:hover{background:transparent}
.ab-pop select{
  width:100%;font:inherit;font-size:13.5px;font-weight:600;color:#16202e;
  background:#f7f9fc;border:1px solid #e2e8f1;border-radius:9px;padding:10px;min-height:44px;
}

/* ---------------- Banner de demo ---------------- */
.ab-banner{
  display:flex;align-items:center;gap:12px;
  background:#fdf2dc;border-bottom:1px solid #f3dca0;color:#5c4407;
  font-size:13px;line-height:1.45;padding:10px 16px;
}
.ab-banner[hidden]{display:none}
.ab-banner-in{max-width:1280px;margin:0 auto;display:flex;align-items:center;gap:12px;width:100%}
.ab-banner p{margin:0;flex:1}
.ab-banner button{
  appearance:none;border:1px solid #e2c581;background:#fff;cursor:pointer;color:#5c4407;
  font:inherit;font-size:12.5px;font-weight:600;min-height:36px;padding:0 12px;border-radius:8px;flex:none;
}
.ab-banner button:hover{background:#fffaf0}

/* ---------------- Drawer (640–1279px) ---------------- */
.ab-scrim{position:fixed;inset:0;z-index:110;background:rgba(12,22,36,.5)}
.ab-scrim[hidden]{display:none}
.ab-drawer{
  position:fixed;top:0;bottom:0;left:0;z-index:115;width:min(300px,86vw);
  background:#fff;color:#16202e;box-shadow:var(--pop-shadow);
  padding:12px;overflow:auto;
  transform:translateX(0);transition:transform .18s ease;
}
.ab-drawer[hidden]{display:none}
.ab-drawer.closing{transform:translateX(-100%)}
.ab-drawer-head{display:flex;align-items:center;gap:8px;padding:4px 4px 10px;border-bottom:1px solid #eef2f7;margin-bottom:6px}
.ab-drawer-head b{font-size:15px}
.ab-drawer-head .ab-btn{color:#16202e;margin-left:auto}
.ab-drawer-head .ab-btn:hover{background:#f2f6fb}

/* ---------------- Lista de destinos (rail y drawer) ----------------
   Mismo marcado en los dos sitios; aquí la versión clara (drawer) y más
   abajo la oscura (rail). Así el drawer no se queda sin estilos fuera
   del breakpoint del rail. */
.ab-rail-group{
  font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;
  color:var(--ab-muted);padding:12px 12px 4px;white-space:nowrap;
}
.ab-rail-item{
  display:flex;align-items:center;gap:12px;text-decoration:none;
  appearance:none;border:0;background:transparent;cursor:pointer;text-align:left;width:100%;
  color:#4a5a6e;font:inherit;font-size:13.5px;font-weight:500;
  min-height:44px;padding:0 10px;border-radius:10px;transition:background .15s,color .15s;
}
.ab-rail-item:hover{background:#f2f6fb;color:#16202e}
.ab-rail-item[aria-current]{background:#eef3fb;color:#16202e;font-weight:600}
.ab-rail-ico{
  width:32px;height:32px;flex:none;border-radius:9px;display:grid;place-items:center;font-size:16px;
  background:color-mix(in srgb,var(--i,#5b6b82) 18%,transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--i,#5b6b82) 34%,transparent);
}
.ab-rail-ico svg{width:18px;height:18px;display:block}
.ab-rail-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------------- Rail lateral (≥1280px) ---------------- */
.ab-rail{display:none}
@media (min-width:1280px){
  body{padding-left:var(--rail-w)}
  .ab-rail{
    display:flex;flex-direction:column;gap:2px;
    position:fixed;top:0;bottom:0;left:0;z-index:70;width:var(--rail-w);
    background:#0f1620;color:#fff;border-right:1px solid rgba(255,255,255,.08);
    padding:10px 8px;overflow:hidden auto;
    transition:width .18s ease;
  }
  .ab-rail .ab-rail-toggle{
    appearance:none;border:0;background:transparent;cursor:pointer;color:var(--ab-fg-soft);
    min-height:44px;min-width:44px;display:flex;align-items:center;gap:10px;
    padding:0 10px;border-radius:10px;font:inherit;font-size:12.5px;font-weight:600;
  }
  .ab-rail .ab-rail-toggle:hover{background:var(--ab-hover);color:#fff}
  .ab-rail .ab-rail-group{color:#8f9bad}
  .ab-rail .ab-rail-item{color:var(--ab-fg-soft)}
  .ab-rail .ab-rail-item:hover{background:var(--ab-hover);color:#fff}
  .ab-rail .ab-rail-item[aria-current]{background:rgba(255,255,255,.14);color:#fff;font-weight:600}
  .ab-rail .ab-rail-ico{
    background:color-mix(in srgb,var(--i,#5b6b82) 30%,transparent);
    box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--i,#5b6b82) 52%,transparent);
  }
  .ab-rail.colapsado .ab-rail-txt,
  .ab-rail.colapsado .ab-rail-group{display:none}
  .ab-rail.colapsado .ab-rail-item{justify-content:center;padding:0}
  /* con rail no hace falta el botón de menú */
  .ab-menu{display:none}
}

/* ---------------- Paleta de comandos (Ctrl/Cmd+K) ---------------- */
.ab-palette{position:fixed;inset:0;z-index:150;background:rgba(12,22,36,.5);display:flex;justify-content:center;padding:12vh 16px 16px}
.ab-palette[hidden]{display:none}
.ab-palette-box{
  width:100%;max-width:580px;height:max-content;max-height:70vh;display:flex;flex-direction:column;
  background:#fff;color:#16202e;border-radius:14px;box-shadow:var(--pop-shadow);overflow:hidden;
}
.ab-palette input{
  font:inherit;font-size:16px;padding:16px 18px;border:0;border-bottom:1px solid #e8eef6;
  background:#fff;color:#16202e;width:100%;
}
.ab-palette input:focus{outline:none;border-bottom-color:var(--module-accent)}
.ab-palette-list{list-style:none;margin:0;padding:6px;overflow:auto;flex:1}
.ab-palette-list .ab-pl-group{
  font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;
  color:var(--ab-muted);padding:10px 10px 4px;
}
.ab-palette-list li[role="option"]{
  display:flex;align-items:center;gap:10px;cursor:pointer;
  font-size:13.5px;font-weight:500;min-height:44px;padding:8px 10px;border-radius:9px;
}
.ab-palette-list li[aria-selected="true"]{background:#eef3fb;font-weight:600}
.ab-palette-list .ab-pl-ico{width:22px;flex:none;text-align:center;font-size:15px}
.ab-palette-list .ab-pl-sub{display:block;font-size:11.5px;font-weight:500;color:var(--ab-muted)}
.ab-palette-foot{border-top:1px solid #e8eef6;padding:8px 14px;font-size:11.5px;color:var(--ab-muted);display:flex;gap:14px}
.ab-palette kbd{
  font:inherit;font-size:11px;font-weight:600;background:#f2f6fb;border:1px solid #e2e8f1;
  border-bottom-width:2px;border-radius:5px;padding:1px 5px;
}
.ab-palette-empty{padding:26px 16px;text-align:center;color:var(--ab-muted);font-size:13.5px}

/* ---------------- Responsive ---------------- */
/* 640–1279: sin rail; la navegación global vive en el drawer. */
@media (max-width:1279px){
  .ab-rail{display:none}
}
/* < 640: una sola línea; lo secundario se colapsa en el kebab. */
@media (max-width:639px){
  :root{--ab-h:52px}
  .appbar-inner{padding:0 6px;gap:2px}
  .ab-brand .ab-brand-txt{display:none}
  /* El título del módulo es lo que hay que leer aquí: se lleva el espacio
     sobrante y se corta con puntos suspensivos, no a mitad de palabra. */
  .ab-grow{display:none}
  .ab-crumbs{flex:1 1 auto;min-width:64px}
  .ab-chip{flex:0 0 auto;max-width:34vw}
  .ab-crumbs li:not(:last-child){display:none}
  .ab-crumbs li+li::before{display:none}
  .ab-switch .ab-swtxt,.ab-switch .ab-chev{display:none}
  .ab-switch{padding:0 6px;border-color:transparent;min-width:44px;justify-content:center}
  .ab-search{display:none}
  .ab-primary{display:none}
  .ab-chip-age{display:none}
  .ab-banner{padding:10px 12px;font-size:12.5px}
}
/* En pantallas muy estrechas el chip se queda en el avatar: el nombre está
   a un toque, dentro del popover, y así el título del módulo cabe entero. */
@media (max-width:479px){
  .ab-chip-txt{display:none}
  .ab-chip{padding:0 5px}
}
@media (min-width:640px){
  .ab-kebab{display:none}
}
/* Entre 640 y 1023 el buscador estorba: se accede por la lupa/paleta. */
@media (max-width:1023px){
  .ab-search{display:none}
}
@media (min-width:1024px){
  .ab-find{display:none}
}

/* ---------------- Movimiento reducido ---------------- */
@media (prefers-reduced-motion:reduce){
  .ab-drawer,.ab-rail,.ab-btn,.ab-brand,.ab-switch,.ab-chip,.ab-primary{transition:none !important}
  .ab-drawer.closing{transform:none}
}
