/* ============================================================
   SIGHA — Sistema Integral Hospital Amaya
   Design system derivado del logo institucional (azul + rojo)
   ============================================================ */

:root{
  /* Marca */
  --azul-950:#08243E;
  --azul-900:#0C2E4E;
  --azul-800:#123E68;
  --azul-700:#17537F;   /* primario */
  --azul-600:#1E6CA3;
  --azul-500:#2E8AC4;
  --azul-100:#E4EFF8;
  --azul-050:#F1F7FC;

  --rojo-700:#B7141A;
  --rojo-600:#D3181F;
  --rojo-500:#E1251B;   /* acento del logo */
  --rojo-100:#FDE7E7;

  /* Neutros */
  --tinta:#0F2439;
  --texto:#1F3A52;
  --suave:#64798F;
  --tenue:#93A6B8;
  --linea:#E2EAF1;
  --linea-2:#EDF2F7;
  --fondo:#F4F7FB;
  --blanco:#FFFFFF;

  /* Semánticos */
  --ok-600:#0E7C5A; --ok-100:#DDF3EB;
  --warn-600:#B4700A; --warn-100:#FCF0DA;
  --info-600:#1E6CA3; --info-100:#E4EFF8;
  --err-600:#C4141B;  --err-100:#FDE7E7;
  --morado-600:#6C4BB6; --morado-100:#EEE9FA;

  --r-sm:8px; --r:12px; --r-lg:16px; --r-xl:22px;
  --sh-1:0 1px 2px rgba(15,36,57,.06), 0 1px 3px rgba(15,36,57,.05);
  --sh-2:0 4px 14px rgba(15,36,57,.08);
  --sh-3:0 18px 48px rgba(15,36,57,.16);
  --sidebar-w:264px;

  --ff:"Segoe UI Variable Text","Segoe UI",Inter,system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
}

*,*::before,*::after{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0; font-family:var(--ff); color:var(--texto); background:var(--fondo);
  font-size:14px; line-height:1.5; -webkit-font-smoothing:antialiased;
}
.hidden{display:none!important}
svg{width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
button{font-family:inherit}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:#CBD8E4;border-radius:9px;border:3px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:#A9BCCE;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}

/* ===================== LOGIN ===================== */
.login{display:grid;grid-template-columns:1.15fr .85fr;min-height:100vh}
.login__art{
  position:relative;overflow:hidden;color:#fff;display:flex;align-items:center;
  background:
    radial-gradient(1100px 700px at 12% 8%, rgba(46,138,196,.42), transparent 60%),
    radial-gradient(900px 600px at 92% 92%, rgba(225,37,27,.30), transparent 58%),
    linear-gradient(150deg,var(--azul-950) 0%, var(--azul-800) 52%, var(--azul-900) 100%);
}
.login__art::after{
  content:"";position:absolute;inset:0;opacity:.5;
  background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);
  background-size:46px 46px;-webkit-mask-image:radial-gradient(70% 70% at 40% 40%,#000,transparent);mask-image:radial-gradient(70% 70% at 40% 40%,#000,transparent);
}
.login__artinner{position:relative;z-index:2;padding:0 clamp(36px,6vw,92px);max-width:660px}
.pulse-line{color:var(--rojo-500);opacity:.95;margin-bottom:26px}
.pulse-line svg{width:100%;height:66px;stroke-width:5}
.pulse-line path{stroke-dasharray:1400;stroke-dashoffset:1400;animation:trace 3.2s ease-out .2s forwards}
@keyframes trace{to{stroke-dashoffset:0}}
.login__art h1{font-size:clamp(30px,3.6vw,50px);line-height:1.14;margin:0 0 18px;font-weight:700;letter-spacing:-.6px}
.login__art h1 em{font-style:normal;color:#8FC6EA}
.login__art p{font-size:15.5px;line-height:1.7;color:#BFD6E8;margin:0 0 30px;max-width:52ch}
.login__feats{list-style:none;padding:0;margin:0;display:flex;gap:12px;flex-wrap:wrap}
.login__feats li{
  background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.16);
  padding:10px 15px;border-radius:999px;font-size:12.5px;color:#D6E6F3;backdrop-filter:blur(6px)
}
.login__feats span{color:#fff;font-weight:700;margin-right:5px}

.login__panel{display:flex;align-items:center;justify-content:center;background:var(--blanco);padding:32px}
.login__box{width:100%;max-width:392px}
.login__logo{width:190px;display:block;margin:0 auto 26px}
.login__box h2{margin:0 0 4px;font-size:23px;color:var(--tinta);letter-spacing:-.3px}
.login__sub{margin:0 0 24px;color:var(--suave);font-size:13.5px}
.login__err--demo{background:var(--amber-50,#fff8e6);border:1px solid #e6c37a;color:#7a5510;border-radius:8px;padding:11px 13px;text-align:left}
.login__err2{font-size:12px;font-weight:500;opacity:.85;margin-top:6px;line-height:1.45}
.login__err{color:var(--err-600);font-size:13px;min-height:20px;font-weight:600}
.login__hint{
  margin-top:22px;background:var(--azul-050);border:1px solid var(--azul-100);
  border-radius:var(--r);padding:13px 15px;font-size:12.4px;color:var(--suave);line-height:1.85
}
.login__hint strong{display:block;color:var(--azul-800);margin-bottom:4px;font-size:12px;letter-spacing:.4px;text-transform:uppercase}
.login__hint code{background:#fff;border:1px solid var(--linea);border-radius:5px;padding:1px 6px;color:var(--tinta);font-size:11.6px}
.login__foot{text-align:center;margin-top:22px;font-size:11.5px;color:var(--tenue)}
@media(max-width:940px){.login{grid-template-columns:1fr}.login__art{display:none}}

/* ===================== FORM CONTROLS ===================== */
[hidden]{display:none!important}
.field{display:block;margin-bottom:15px}
.field>span{display:block;font-size:12.2px;font-weight:600;color:var(--texto);margin-bottom:6px;letter-spacing:.1px}
.field>span .req{color:var(--rojo-500)}
input[type=text],input[type=password],input[type=number],input[type=date],input[type=time],
input[type=email],input[type=search],select,textarea{
  width:100%;padding:9.5px 12px;border:1px solid #D6E0EA;border-radius:var(--r-sm);
  font:inherit;font-size:13.6px;color:var(--tinta);background:#fff;transition:border-color .15s,box-shadow .15s;
}
textarea{resize:vertical;min-height:82px;line-height:1.6}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--azul-600);box-shadow:0 0 0 3.5px rgba(30,108,163,.14)}
input:disabled,select:disabled,textarea:disabled{background:#F6F8FA;color:var(--suave);cursor:not-allowed}
input::placeholder,textarea::placeholder{color:#A9B8C7}
select{appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364798F' stroke-width='2' stroke-linecap='round'><path d='M6 9l6 6 6-6'/></svg>");background-repeat:no-repeat;background-position:right 10px center;background-size:16px;padding-right:32px}
/* Combobox: se ve como un desplegable, pero se puede escribir en él.
   El panel lo dibuja el sistema —no el navegador— para que se vea igual
   en toda la aplicación y quepan las listas largas. */
.combo{position:relative;display:block;width:100%}
.combo input.combo__in{padding-right:32px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364798F' stroke-width='2' stroke-linecap='round'><path d='M6 9l6 6 6-6'/></svg>");
  background-repeat:no-repeat;background-position:right 10px center;background-size:16px}
.combo__pop{
  position:fixed;z-index:400;overflow-y:auto;padding:5px;
  background:#fff;border:1px solid var(--linea);border-radius:var(--r);box-shadow:var(--sh-3);
  animation:comboIn .12s ease-out;
}
@keyframes comboIn{from{opacity:0;transform:translateY(-4px)}}
.combo__op{
  display:block;width:100%;text-align:left;padding:8px 10px;border:0;background:none;
  border-radius:var(--r-sm);font:inherit;font-size:13.4px;color:var(--tinta);cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.combo__op:hover,.combo__op.mk{background:var(--azul-050);color:var(--azul-800)}
.combo__op.on{background:var(--azul-100);color:var(--azul-800);font-weight:600}
.combo__nada{padding:10px;font-size:12.4px;color:var(--suave)}

/* Botón que se lee como enlace: abre un detalle desde dentro de una tabla. */
.linkbtn{
  border:0;background:none;padding:0;font:inherit;font-size:13.4px;font-weight:600;
  color:var(--azul-700);cursor:pointer;text-align:left;
}
.linkbtn:hover{text-decoration:underline}

/* La celda del rol de turnos: el número es un botón que abre la lista
   de quién cubre esa jornada. Se nota que se puede tocar. */
.celbtn{border:0;background:none;padding:2px;cursor:pointer;border-radius:var(--r-sm);line-height:1}
.celbtn:hover{background:var(--azul-050)}
.celbtn:hover .bdg{box-shadow:0 0 0 2px var(--azul-100)}

/* Pie de firmas de un comprobante que alguien tiene que firmar. */
.firma{display:grid;grid-template-columns:1fr 1fr;gap:34px;margin-top:46px;text-align:center;
  font-size:12.2px;color:var(--suave);line-height:1.7}
.firma>div>span{display:block;border-top:1px solid var(--tinta);margin-bottom:7px}

.grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:0 16px}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:0 16px}
.span2{grid-column:span 2}
@media(max-width:760px){.grid2,.grid3,.grid4{grid-template-columns:1fr}.span2{grid-column:auto}}

/* ===================== BUTTONS ===================== */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  padding:9px 16px;border-radius:var(--r-sm);border:1px solid transparent;
  font-size:13.4px;font-weight:600;cursor:pointer;white-space:nowrap;
  transition:background .15s,box-shadow .15s,transform .08s,border-color .15s;
}
.btn svg{width:16px;height:16px;flex:none}
.btn:active{transform:translateY(1px)}
.btn--primary{background:var(--azul-700);color:#fff;box-shadow:0 1px 2px rgba(23,83,127,.3)}
.btn--primary:hover{background:var(--azul-800)}
.btn--danger{background:var(--rojo-600);color:#fff}
.btn--danger:hover{background:var(--rojo-700)}
.btn--ok{background:var(--ok-600);color:#fff}
.btn--ok:hover{filter:brightness(.93)}
.btn--ghost{background:#fff;color:var(--texto);border-color:#D6E0EA}
.btn--ghost:hover{background:#F7FAFC;border-color:#BECEDD}
.btn--soft{background:var(--azul-100);color:var(--azul-800)}
.btn--soft:hover{background:#D5E7F5}
.btn--sm{padding:6px 11px;font-size:12.4px;border-radius:7px}
.btn--sm svg{width:14px;height:14px}
.btn--block{width:100%;padding:11px}
.btn:disabled{opacity:.5;cursor:not-allowed}
.iconbtn{
  width:36px;height:36px;display:inline-grid;place-items:center;border-radius:9px;
  border:1px solid transparent;background:transparent;color:var(--suave);cursor:pointer;transition:.15s;
}
.iconbtn svg{width:19px;height:19px}
.iconbtn:hover{background:var(--azul-050);color:var(--azul-700)}
.iconbtn--sm{width:30px;height:30px}
.iconbtn--sm svg{width:16px;height:16px}
.iconbtn--danger:hover{background:var(--err-100);color:var(--err-600)}

/* ===================== APP SHELL ===================== */
.app{display:flex;min-height:100vh}
.sidebar{
  width:var(--sidebar-w);flex:none;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;
  background:linear-gradient(180deg,var(--azul-950),var(--azul-900) 45%,#0A2B48);
  color:#C7DAEA;z-index:40;
}
.sidebar__brand{display:flex;align-items:center;gap:11px;padding:17px 18px;border-bottom:1px solid rgba(255,255,255,.09)}
.sidebar__logo{width:44px;height:44px;flex:none;background:#fff;border-radius:11px;display:grid;place-items:center;padding:5px;box-shadow:0 2px 8px rgba(0,0,0,.28)}
.sidebar__logo img{width:100%;display:block}
.sidebar__name strong{display:block;color:#fff;font-size:13.4px;letter-spacing:.9px;line-height:1.25}
.sidebar__name span{font-size:11px;color:#7FA6C6;letter-spacing:.5px}
.nav{flex:1;overflow-y:auto;padding:12px 10px 20px}
.nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.16);background-clip:content-box}
.nav__grp{margin:16px 0 6px;padding:0 10px;font-size:10.2px;letter-spacing:1.3px;text-transform:uppercase;color:#5D87AB;font-weight:700}
.nav__grp:first-child{margin-top:2px}
.nav a{
  display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:9px;margin-bottom:1px;
  color:#BDD3E6;text-decoration:none;font-size:13.4px;font-weight:500;position:relative;transition:.14s;
}
.nav a svg{width:18px;height:18px;flex:none;opacity:.85}
.nav a:hover{background:rgba(255,255,255,.08);color:#fff}
.nav a.on{background:linear-gradient(90deg,rgba(46,138,196,.32),rgba(46,138,196,.12));color:#fff;font-weight:600}
.nav a.on::before{content:"";position:absolute;left:-10px;top:8px;bottom:8px;width:3.5px;border-radius:0 4px 4px 0;background:var(--rojo-500)}
.nav a .pill{margin-left:auto;background:var(--rojo-500);color:#fff;font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:999px;min-width:20px;text-align:center}
.sidebar__foot{padding:12px 16px;border-top:1px solid rgba(255,255,255,.09)}
.sidebar__sede{font-size:11.4px;color:#7FA6C6;display:flex;align-items:center;gap:7px}
.sidebar__conexion{display:flex;align-items:center;gap:7px;font-size:11px;color:#6E93B4;margin-top:7px}
.sidebar__conexion span{width:7px;height:7px;border-radius:50%;background:#5D87AB;flex:none}
.sidebar__conexion.ok span{background:#38C08A;box-shadow:0 0 0 3px rgba(56,192,138,.2)}
.sidebar__conexion.local span{background:#E2A62E;box-shadow:0 0 0 3px rgba(226,166,46,.2)}
.sidebar__conexion.error span{background:#E1251B;box-shadow:0 0 0 3px rgba(225,37,27,.24)}
.sidebar__sede::before{content:"";width:7px;height:7px;border-radius:50%;background:#38C08A;box-shadow:0 0 0 3px rgba(56,192,138,.22)}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{
  position:sticky;top:0;z-index:30;background:rgba(255,255,255,.92);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--linea);display:flex;align-items:center;gap:16px;padding:11px 22px;
}
.topbar__burger{display:none}
.topbar__crumb h1{margin:0;font-size:18.5px;color:var(--tinta);letter-spacing:-.3px;line-height:1.25;white-space:nowrap}
.topbar__crumb p{margin:1px 0 0;font-size:12.2px;color:var(--suave);white-space:nowrap}
.topbar__search{position:relative;flex:1;max-width:460px;margin-left:auto}
.topbar__search>svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--tenue)}
.topbar__search input{padding-left:35px;background:#F5F8FB;border-color:transparent;font-size:13px}
.topbar__search input:focus{background:#fff}
.searchpop{
  position:absolute;top:calc(100% + 8px);left:0;right:0;background:#fff;border:1px solid var(--linea);
  border-radius:var(--r);box-shadow:var(--sh-3);padding:6px;display:none;max-height:390px;overflow:auto;z-index:50
}
.searchpop.show{display:block}
.searchpop__i{display:flex;align-items:center;gap:11px;padding:8px 10px;border-radius:8px;cursor:pointer}
.searchpop__i:hover{background:var(--azul-050)}
.searchpop__i b{font-size:13.2px;color:var(--tinta);font-weight:600;display:block}
.searchpop__i small{color:var(--suave);font-size:11.8px}
.searchpop__none{padding:14px;text-align:center;color:var(--tenue);font-size:13px}
.topbar__right{display:flex;align-items:center;gap:6px}
.topbar__date{font-size:12.2px;color:var(--suave);text-align:right;line-height:1.35;padding-right:8px;border-right:1px solid var(--linea);margin-right:4px}
.topbar__date strong{display:block;color:var(--tinta);font-size:12.8px;text-transform:capitalize}

.user{display:flex;align-items:center;gap:9px;padding:5px 9px 5px 5px;border-radius:10px;cursor:pointer;position:relative;transition:.15s}
.user:hover{background:var(--azul-050)}
.user__av{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,var(--azul-700),var(--azul-500));color:#fff;display:grid;place-items:center;font-weight:700;font-size:12.6px;flex:none}
.user__txt strong{display:block;font-size:12.9px;color:var(--tinta);line-height:1.2}
.user__txt span{font-size:11.2px;color:var(--suave)}
.user__cx{width:15px;height:15px;color:var(--tenue)}
.usermenu{
  position:absolute;top:calc(100% + 8px);right:0;min-width:212px;background:#fff;border:1px solid var(--linea);
  border-radius:var(--r);box-shadow:var(--sh-3);padding:5px;display:none;z-index:60
}
.usermenu.show{display:block}
.usermenu button{
  display:block;width:100%;text-align:left;padding:9px 12px;border:0;background:none;border-radius:8px;
  font-size:13.2px;color:var(--texto);cursor:pointer
}
.usermenu button:hover{background:var(--azul-050)}
.usermenu button.danger{color:var(--err-600)}
.usermenu button.danger:hover{background:var(--err-100)}

.view{flex:1;padding:22px;max-width:1720px;width:100%}
@media(max-width:1080px){
  .sidebar{position:fixed;left:0;top:0;transform:translateX(-100%);transition:transform .25s}
  .sidebar.open{transform:none;box-shadow:var(--sh-3)}
  .topbar__burger{display:inline-grid}
  .topbar__crumb p{display:none}
}
@media(max-width:700px){.view{padding:14px}.topbar{padding:10px 13px;gap:10px}.topbar__search{display:none}.topbar__date{display:none}.user__txt{display:none}}

/* ===================== CARDS / PANELS ===================== */
.card{background:#fff;border:1px solid var(--linea);border-radius:var(--r-lg);box-shadow:var(--sh-1)}
.card__h{display:flex;align-items:center;gap:12px;padding:15px 18px;border-bottom:1px solid var(--linea-2)}
.card__h h3{margin:0;font-size:15px;color:var(--tinta);letter-spacing:-.15px}
.card__h p{margin:1px 0 0;font-size:12.2px;color:var(--suave)}
.card__h .sp{margin-left:auto;display:flex;gap:8px;align-items:center}
.card__b{padding:18px}
.card__b--flush{padding:0}

.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:16px}
.toolbar .sp{margin-left:auto}
.toolbar input,.toolbar select,.toolbar .combo{width:auto;min-width:150px}
.toolbar .combo .combo__in{width:100%;min-width:0}
.searchbox{position:relative}
.searchbox svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);width:15px;height:15px;color:var(--tenue)}
.searchbox input{padding-left:33px;min-width:260px}

.sect{margin-bottom:22px}
.sect__t{display:flex;align-items:center;gap:10px;margin:0 0 12px;font-size:12px;text-transform:uppercase;letter-spacing:1.1px;color:var(--suave);font-weight:700}
.sect__t::after{content:"";flex:1;height:1px;background:var(--linea)}

/* ===================== KPI ===================== */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;margin-bottom:20px}
.kpi{background:#fff;border:1px solid var(--linea);border-radius:var(--r-lg);padding:16px 17px;box-shadow:var(--sh-1);position:relative;overflow:hidden;transition:.18s}
.kpi:hover{box-shadow:var(--sh-2);transform:translateY(-1px)}
.kpi::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3.5px;background:var(--azul-600)}
.kpi--rojo::after{background:var(--rojo-500)} .kpi--ok::after{background:var(--ok-600)}
.kpi--warn::after{background:var(--warn-600)} .kpi--mor::after{background:var(--morado-600)}
.kpi__top{display:flex;align-items:center;justify-content:space-between;margin-bottom:9px}
.kpi__lb{font-size:12.1px;color:var(--suave);font-weight:600}
.kpi__ic{width:33px;height:33px;border-radius:9px;display:grid;place-items:center;background:var(--azul-100);color:var(--azul-700)}
.kpi__ic svg{width:17px;height:17px}
.kpi--rojo .kpi__ic{background:var(--rojo-100);color:var(--rojo-600)}
.kpi--ok .kpi__ic{background:var(--ok-100);color:var(--ok-600)}
.kpi--warn .kpi__ic{background:var(--warn-100);color:var(--warn-600)}
.kpi--mor .kpi__ic{background:var(--morado-100);color:var(--morado-600)}
.kpi__v{font-size:27px;font-weight:700;color:var(--tinta);line-height:1.05;letter-spacing:-.9px;font-variant-numeric:tabular-nums}
.kpi__v small{font-size:14px;font-weight:600;color:var(--suave);letter-spacing:0}
.kpi__d{font-size:11.8px;color:var(--suave);margin-top:5px;display:flex;align-items:center;gap:5px}
.kpi__d b{color:var(--ok-600)} .kpi__d b.dn{color:var(--err-600)}

/* ===================== TABLE ===================== */
.tablewrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13.2px}
.tbl thead th{
  text-align:left;padding:11px 14px;background:#F7FAFC;color:var(--suave);font-size:11.2px;
  text-transform:uppercase;letter-spacing:.75px;font-weight:700;border-bottom:1px solid var(--linea);white-space:nowrap
}
.tbl tbody td{padding:11px 14px;border-bottom:1px solid var(--linea-2);color:var(--texto);vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:0}
.tbl tbody tr{transition:background .12s}
.tbl tbody tr:hover{background:#F8FBFD}
.tbl tbody tr.clickable{cursor:pointer}
.tbl .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.tbl .acts{text-align:right;white-space:nowrap}
.tbl .acts .iconbtn{opacity:.55}
.tbl tr:hover .acts .iconbtn{opacity:1}
.tbl .mono{font-variant-numeric:tabular-nums;font-size:12.8px;color:var(--suave)}
/* Encabezado de grupo y subtotal dentro de una misma tabla: los usa
   la hoja de cobro de la emergencia y el detalle de una factura. */
.tbl tr.grp td{background:#F3F7FA;color:var(--suave);font-size:11.2px;text-transform:uppercase;
  letter-spacing:.7px;font-weight:700;padding:7px 14px}
.tbl tr.grp:hover td{background:#F3F7FA}
.tbl tr.tot td{background:#FAFCFE;border-top:1px solid var(--linea)}
.tbl tr.tot:hover td{background:#FAFCFE}
.tbl input[type=number]{border:1px solid var(--linea);border-radius:7px;padding:5px 8px;font-size:12.8px;
  font-variant-numeric:tabular-nums;color:var(--texto);background:#fff}
.tbl input[type=number]:focus{outline:0;border-color:var(--azul-500);box-shadow:0 0 0 3px var(--azul-050)}
.tbl b.name{color:var(--tinta);font-weight:600}

/* El cobro de la consulta: el concepto a la izquierda y el monto,
   editable, a la derecha. Se ve como un renglón de cuenta porque eso
   es: lo que el paciente va a pagar en caja al salir. */
.cobro{display:flex;align-items:center;gap:14px;border:1px solid var(--azul-100);
  background:var(--azul-050);border-radius:12px;padding:13px 15px}
.cobro__q{min-width:0;flex:1}
.cobro__q b{color:var(--tinta);font-size:14px}
.cobro__m{display:flex;align-items:center;gap:7px;font-weight:600;color:var(--suave)}
.cobro__m input{width:120px;border:1px solid var(--linea);border-radius:9px;padding:9px 11px;
  font-size:16px;font-weight:700;text-align:right;font-variant-numeric:tabular-nums;
  color:var(--tinta);background:#fff}
.cobro__m input:focus{outline:0;border-color:var(--azul-500);box-shadow:0 0 0 3px #fff}
.cobro__m--off{opacity:.45}
.cobro__m--off input{background:var(--fondo);text-decoration:line-through}
.empty{padding:52px 20px;text-align:center;color:var(--tenue)}
.empty svg{width:40px;height:40px;margin-bottom:12px;color:#C7D5E2;stroke-width:1.4}
.empty h4{margin:0 0 4px;color:var(--suave);font-size:14.5px}
.empty p{margin:0;font-size:13px}

.pager{display:flex;align-items:center;gap:8px;padding:12px 16px;border-top:1px solid var(--linea-2);font-size:12.6px;color:var(--suave)}
.pager .sp{margin-left:auto;display:flex;gap:5px}
.pager button{min-width:31px;height:31px;border:1px solid var(--linea);background:#fff;border-radius:7px;cursor:pointer;font-size:12.6px;color:var(--texto);padding:0 8px}
.pager button:hover:not(:disabled){background:var(--azul-050);border-color:var(--azul-500)}
.pager button.on{background:var(--azul-700);border-color:var(--azul-700);color:#fff;font-weight:600}
.pager button:disabled{opacity:.42;cursor:not-allowed}

/* ===================== BADGES / CHIPS ===================== */
.bdg{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;font-size:11.4px;font-weight:600;white-space:nowrap;line-height:1.7}
.bdg::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.85}
.bdg--nb::before{display:none}
.bdg--gris{background:#EEF2F6;color:#5A6E82}
.bdg--azul{background:var(--info-100);color:var(--info-600)}
.bdg--ok{background:var(--ok-100);color:var(--ok-600)}
.bdg--warn{background:var(--warn-100);color:var(--warn-600)}
.bdg--err{background:var(--err-100);color:var(--err-600)}
.bdg--mor{background:var(--morado-100);color:var(--morado-600)}
.avat{width:33px;height:33px;border-radius:9px;display:grid;place-items:center;font-weight:700;font-size:11.8px;color:#fff;flex:none;background:var(--azul-600)}
.avat--sm{width:27px;height:27px;font-size:10.6px;border-radius:7px}
.avat--lg{width:60px;height:60px;font-size:19px;border-radius:14px}
.cellu{display:flex;align-items:center;gap:10px}

/* ===================== TABS ===================== */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--linea);margin-bottom:18px;overflow-x:auto}
.tabs button{
  padding:10px 15px;border:0;background:none;cursor:pointer;font-size:13.4px;font-weight:600;color:var(--suave);
  border-bottom:2.5px solid transparent;margin-bottom:-1px;white-space:nowrap;transition:.15s
}
.tabs button:hover{color:var(--azul-700)}
.tabs button.on{color:var(--azul-700);border-bottom-color:var(--rojo-500)}

/* ===================== MODAL ===================== */
.modal-root{position:fixed;inset:0;z-index:100;display:none}
.modal-root.show{display:block}
.modal__bg{position:absolute;inset:0;background:rgba(10,32,52,.5);backdrop-filter:blur(3px);animation:fade .18s}
@keyframes fade{from{opacity:0}}
.modal{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:#fff;border-radius:var(--r-xl);
  box-shadow:var(--sh-3);width:min(96vw,600px);max-height:92vh;display:flex;flex-direction:column;animation:pop .2s cubic-bezier(.2,.9,.3,1)
}
@keyframes pop{from{opacity:0;transform:translate(-50%,-46%) scale(.97)}}
.modal--lg{width:min(96vw,900px)}
.modal--xl{width:min(97vw,1180px)}
.modal__h{display:flex;align-items:flex-start;gap:12px;padding:19px 22px 15px;border-bottom:1px solid var(--linea-2)}
.modal__h h3{margin:0;font-size:17px;color:var(--tinta);letter-spacing:-.25px}
.modal__h p{margin:2px 0 0;font-size:12.6px;color:var(--suave)}
.modal__h .iconbtn{margin-left:auto;margin-top:-3px}
.modal__b{padding:20px 22px;overflow-y:auto;flex:1}
.modal__f{display:flex;gap:10px;justify-content:flex-end;padding:15px 22px;border-top:1px solid var(--linea-2);background:#FAFCFD;border-radius:0 0 var(--r-xl) var(--r-xl)}
.modal__f .sp{margin-right:auto}

/* ===================== TOASTS ===================== */
.toasts{position:fixed;right:20px;bottom:20px;z-index:200;display:flex;flex-direction:column;gap:9px}
.toast{
  display:flex;align-items:flex-start;gap:11px;background:#fff;border:1px solid var(--linea);border-left:4px solid var(--azul-600);
  border-radius:var(--r);box-shadow:var(--sh-3);padding:12px 15px;min-width:290px;max-width:390px;animation:slidein .25s
}
@keyframes slidein{from{opacity:0;transform:translateX(24px)}}
.toast.out{animation:slideout .2s forwards}
@keyframes slideout{to{opacity:0;transform:translateX(24px)}}
.toast--ok{border-left-color:var(--ok-600)} .toast--err{border-left-color:var(--err-600)} .toast--warn{border-left-color:var(--warn-600)}
.toast__ic{width:20px;height:20px;flex:none;color:var(--azul-600);margin-top:1px}
.toast--ok .toast__ic{color:var(--ok-600)} .toast--err .toast__ic{color:var(--err-600)} .toast--warn .toast__ic{color:var(--warn-600)}
.toast b{display:block;font-size:13.2px;color:var(--tinta);margin-bottom:1px}
.toast span{font-size:12.4px;color:var(--suave);line-height:1.45}

/* ===================== FICHA PACIENTE ===================== */
.phead{
  background:linear-gradient(120deg,var(--azul-900),var(--azul-700) 62%,var(--azul-600));
  color:#fff;border-radius:var(--r-lg);padding:19px 22px;display:flex;gap:18px;align-items:center;flex-wrap:wrap;
  box-shadow:var(--sh-2);position:relative;overflow:hidden;margin-bottom:18px
}
.phead::after{content:"";position:absolute;right:-40px;top:-60px;width:270px;height:270px;border-radius:50%;background:rgba(255,255,255,.06)}
.phead__av{width:66px;height:66px;border-radius:16px;background:rgba(255,255,255,.16);border:2px solid rgba(255,255,255,.3);display:grid;place-items:center;font-size:22px;font-weight:700;flex:none}
.phead__id{position:relative;z-index:2;min-width:200px}
.phead__id h2{margin:0;font-size:20px;letter-spacing:-.3px}
.phead__id p{margin:3px 0 0;font-size:12.7px;color:#B9D4E9}
.phead__meta{display:flex;gap:26px;flex-wrap:wrap;margin-left:auto;position:relative;z-index:2}
.phead__meta div{font-size:12.2px;color:#A9C9E2}
.phead__meta strong{display:block;color:#fff;font-size:13.6px;font-weight:600;margin-top:2px}
.phead__alert{background:rgba(225,37,27,.9);color:#fff;padding:5px 12px;border-radius:8px;font-size:12px;font-weight:600;display:inline-flex;align-items:center;gap:6px;position:relative;z-index:2}
.phead__alert svg{width:14px;height:14px}

.dl{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:15px 22px}
.dl>div>span{display:block;font-size:11.3px;color:var(--suave);text-transform:uppercase;letter-spacing:.55px;font-weight:600;margin-bottom:2px}
.dl>div>strong{font-size:13.6px;color:var(--tinta);font-weight:600}

/* ===================== HCE (acto médico) ===================== */
.hce{display:grid;grid-template-columns:250px 1fr;gap:18px;align-items:start}
/* Una tabla ancha dentro del panel derecho no debe empujar la pantalla:
   sin esto, la columna 1fr crece hasta el ancho mínimo de su contenido
   y el módulo entero se sale por la derecha. Que se desplace la tabla. */
.hce>*{min-width:0}
@media(max-width:1000px){.hce{grid-template-columns:1fr}}
.hce__nav{background:#fff;border:1px solid var(--linea);border-radius:var(--r-lg);padding:9px;box-shadow:var(--sh-1);position:sticky;top:78px}
.hce__grp{font-size:10.3px;text-transform:uppercase;letter-spacing:1.1px;color:var(--tenue);font-weight:700;padding:11px 11px 5px}
.hce__nav button{
  display:flex;align-items:center;gap:9px;width:100%;text-align:left;padding:8px 11px;border:0;background:none;
  border-radius:8px;font-size:13.1px;color:var(--texto);cursor:pointer;transition:.13s;font-weight:500
}
.hce__nav button svg{width:16px;height:16px;color:var(--tenue);flex:none}
.hce__nav button:hover{background:var(--azul-050)}
.hce__nav button.on{background:var(--azul-100);color:var(--azul-800);font-weight:600}
.hce__nav button.on svg{color:var(--azul-700)}
.hce__nav button .dot{margin-left:auto;width:7px;height:7px;border-radius:50%;background:var(--ok-600)}

.vitals{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:12px}
.vital{background:#F8FBFD;border:1px solid var(--linea);border-radius:var(--r);padding:12px 13px;text-align:center}
.vital span{display:block;font-size:10.8px;color:var(--suave);text-transform:uppercase;letter-spacing:.6px;font-weight:700;margin-bottom:4px}
.vital strong{font-size:20px;color:var(--tinta);font-variant-numeric:tabular-nums;letter-spacing:-.5px}
.vital strong small{font-size:11.5px;color:var(--tenue);font-weight:600;margin-left:2px}
.vital.alert{background:var(--err-100);border-color:#F5C9C9}
.vital.alert strong{color:var(--err-600)}
.vital.warn{background:var(--warn-100);border-color:#F0DDB6}
.vital.warn strong{color:var(--warn-600)}

.timeline{position:relative;padding-left:26px}
.timeline::before{content:"";position:absolute;left:8px;top:6px;bottom:6px;width:2px;background:var(--linea)}
.tl{position:relative;padding-bottom:20px}
.tl:last-child{padding-bottom:0}
.tl::before{content:"";position:absolute;left:-22px;top:5px;width:11px;height:11px;border-radius:50%;background:#fff;border:2.5px solid var(--azul-600)}
.tl.rojo::before{border-color:var(--rojo-500)} .tl.ok::before{border-color:var(--ok-600)} .tl.warn::before{border-color:var(--warn-600)}
.tl__d{font-size:11.4px;color:var(--tenue);font-weight:600;text-transform:uppercase;letter-spacing:.5px}
.tl__t{font-size:13.8px;color:var(--tinta);font-weight:600;margin:2px 0 3px}
.tl__x{font-size:12.8px;color:var(--suave);line-height:1.6}

/* ===================== AGENDA ===================== */
.agenda{display:grid;grid-template-columns:270px 1fr;gap:18px;align-items:start}
@media(max-width:1000px){.agenda{grid-template-columns:1fr}}
.cal{background:#fff;border:1px solid var(--linea);border-radius:var(--r-lg);padding:14px;box-shadow:var(--sh-1)}
.cal__h{display:flex;align-items:center;justify-content:space-between;margin-bottom:11px}
.cal__h strong{font-size:13.6px;color:var(--tinta);text-transform:capitalize}
.cal__g{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cal__g span{text-align:center;font-size:10.4px;color:var(--tenue);font-weight:700;padding:5px 0;text-transform:uppercase}
.cal__g button{
  aspect-ratio:1;border:0;background:none;border-radius:8px;cursor:pointer;font-size:12.4px;color:var(--texto);
  position:relative;transition:.12s
}
.cal__g button:hover{background:var(--azul-050)}
.cal__g button.off{color:#C6D2DE;cursor:default}
.cal__g button.off:hover{background:none}
.cal__g button.hoy{font-weight:700;color:var(--rojo-600);box-shadow:inset 0 0 0 1.5px var(--rojo-500)}
.cal__g button.on{background:var(--azul-700);color:#fff;font-weight:700}
.cal__g button .d{position:absolute;bottom:4px;left:50%;transform:translateX(-50%);width:4px;height:4px;border-radius:50%;background:var(--azul-500)}
.cal__g button.on .d{background:#fff}

/* Agenda del médico: qué días atiende (programación y registro de citas) */
.cal--agenda{max-width:360px;margin:0 auto}
.cal__g button.ag-si{background:var(--ok-100);color:var(--ok-600);font-weight:600}
.cal__g button.ag-aus{background:var(--rojo-100);color:var(--rojo-600);text-decoration:line-through}
.cal__g button.ag-no{color:#B5C2CF;text-decoration:line-through}
.cal__g button.sel{box-shadow:inset 0 0 0 2px var(--azul-700)}
.cal__g button.on.ag-aus,.cal__g button.on.ag-no{background:var(--rojo-600);color:#fff}
.ag-ley{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px;font-size:11.6px;color:var(--tenue)}
.ag-ley span{display:flex;align-items:center;gap:5px}
.ag-ley i{width:10px;height:10px;border-radius:3px;display:inline-block}
.ag-ley i.ag-si{background:var(--ok-100);box-shadow:inset 0 0 0 1px var(--ok-600)}
.ag-ley i.ag-aus{background:var(--rojo-100);box-shadow:inset 0 0 0 1px var(--rojo-600)}
.ag-ley i.ag-no{background:#fff;box-shadow:inset 0 0 0 1px #B5C2CF}
.ag-modos{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.ag-modo{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--linea);border-radius:10px;padding:10px 12px;cursor:pointer}
.ag-modo input{width:auto;margin:3px 0 0}
.ag-modo span{display:flex;flex-direction:column;gap:2px;font-size:13.2px}
.ag-modo small{color:var(--tenue);font-size:11.8px}
.ag-modo:has(input:checked){border-color:var(--azul-500);background:var(--azul-050)}
.ag-horas{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.ag-horas button{border:1px solid var(--linea);background:#fff;border-radius:8px;padding:5px 9px;font-size:12.4px;cursor:pointer;font-family:inherit}
.ag-horas button:hover{border-color:var(--azul-500)}
.ag-horas button.on{background:var(--azul-700);border-color:var(--azul-700);color:#fff}
.ag-horas button[disabled]{opacity:.4;text-decoration:line-through;cursor:default}
@media (max-width:640px){.ag-modos{grid-template-columns:1fr}}

.slots{display:flex;flex-direction:column;gap:0}
.slot{display:flex;align-items:center;gap:14px;padding:11px 16px;border-bottom:1px solid var(--linea-2);transition:.12s}
.slot:hover{background:#F8FBFD}
.slot__h{font-size:13px;font-weight:700;color:var(--azul-700);width:56px;flex:none;font-variant-numeric:tabular-nums}
.slot--libre .slot__h{color:var(--tenue);font-weight:600}
.slot__b{flex:1;min-width:0}
.slot__b b{display:block;font-size:13.4px;color:var(--tinta);font-weight:600}
.slot__b small{font-size:12px;color:var(--suave)}
a.slot{color:inherit;text-decoration:none}
.slot--libre{cursor:pointer}
.slot--libre .slot__b b{color:var(--tenue);font-weight:500;font-style:italic}

/* ===================== CAMAS ===================== */
.beds{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:12px}
.bed{
  border:1px solid var(--linea);border-radius:var(--r);padding:12px 13px;background:#fff;cursor:pointer;
  transition:.15s;position:relative;overflow:hidden
}
.bed:hover{box-shadow:var(--sh-2);transform:translateY(-1px)}
.bed::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3.5px;background:var(--ok-600)}
.bed--ocu::after{background:var(--rojo-500)} .bed--lim::after{background:var(--warn-600)} .bed--man::after{background:var(--tenue)}
.bed__c{display:flex;align-items:center;justify-content:space-between;margin-bottom:7px}
.bed__c b{font-size:14.5px;color:var(--tinta);letter-spacing:-.2px}
.bed__p{font-size:12.5px;color:var(--texto);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bed__s{font-size:11.5px;color:var(--suave);margin-top:2px}
.bed--lib .bed__p{color:var(--tenue);font-style:italic;font-weight:500}

/* Elegir habitación: las libres se toman, las demás se ven pero no. */
.beds--elige .bed--lib{border-color:#BFD9EC}
.beds--elige .bed--ocu,.beds--elige .bed--lim,.beds--elige .bed--man{cursor:not-allowed;opacity:.58}
.beds--elige .bed--ocu:hover,.beds--elige .bed--lim:hover,.beds--elige .bed--man:hover{box-shadow:none;transform:none}
.bed--sel{border-color:var(--azul-600);background:var(--azul-050);box-shadow:0 0 0 2px var(--azul-100)}
.bed__ok{display:none;font-size:11.4px;font-weight:700;color:var(--azul-700);margin-top:6px}
.bed--sel .bed__ok{display:block}

/* ===================== TRIAJE ===================== */
.triaje{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:7px;font-size:11.6px;font-weight:700;color:#fff}
.triaje--I{background:#C4141B} .triaje--II{background:#E06C0B} .triaje--III{background:#C9A227}
.triaje--IV{background:#1E7C4F} .triaje--V{background:#1E6CA3}

/* ===================== CHARTS ===================== */
.chart{width:100%;height:auto}
.chart text{font-family:var(--ff);font-size:11px;fill:var(--suave)}
.chart .grid{stroke:var(--linea-2);stroke-width:1}
.chart .axis{stroke:var(--linea);stroke-width:1}
.legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:12px;justify-content:center}
.legend i{width:10px;height:10px;border-radius:3px;display:inline-block;margin-right:6px}
.legend span{font-size:12.2px;color:var(--suave)}
.legend b{color:var(--tinta);font-weight:600;margin-left:4px}

.bars{display:flex;flex-direction:column;gap:11px}
.bar__t{display:flex;justify-content:space-between;font-size:12.6px;margin-bottom:5px}
.bar__t span{color:var(--texto);font-weight:500}
.bar__t b{color:var(--tinta);font-variant-numeric:tabular-nums}
.bar__r{height:8px;background:var(--linea-2);border-radius:99px;overflow:hidden}
.bar__f{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--azul-600),var(--azul-500));transition:width .5s cubic-bezier(.2,.8,.3,1)}
.bar__f.rojo{background:linear-gradient(90deg,var(--rojo-600),#F2665F)}
.bar__f.ok{background:linear-gradient(90deg,#0E7C5A,#2FB98A)}
.bar__f.warn{background:linear-gradient(90deg,#B4700A,#E2A62E)}
.bar__f.mor{background:linear-gradient(90deg,#6C4BB6,#9B7FE0)}

/* ===================== CHAT (WhatsApp) ===================== */
.chat{height:440px;overflow-y:auto;padding:18px;background:#EDF2F7;display:flex;flex-direction:column;gap:10px}
.chat__vacio{margin:auto;color:var(--tenue);font-size:13px;text-align:center}
.chat__b{max-width:78%;padding:9px 13px;border-radius:14px;box-shadow:var(--sh-1);position:relative}
.chat__b--yo{align-self:flex-end;background:#D6F5C8;border-bottom-right-radius:4px}
.chat__b--bot{align-self:flex-start;background:#fff;border-bottom-left-radius:4px}
.chat__t{font-size:13.2px;line-height:1.55;color:var(--tinta);white-space:normal;word-break:break-word}
.chat__t b{font-weight:700}
.chat__h{font-size:10.4px;color:var(--tenue);text-align:right;margin-top:3px}
.chat__barra{display:flex;gap:9px;padding:13px 16px;border-top:1px solid var(--linea);background:#fff}
.chat__barra input{flex:1}

.lista-check{list-style:none;padding:0;margin:0}
.lista-check li{display:flex;gap:9px;align-items:flex-start;padding:6px 0;font-size:13px;color:var(--texto);line-height:1.5}
.lista-check li svg{width:16px;height:16px;flex:none;color:var(--ok-600);margin-top:2px}
.pasos{margin:0;padding-left:20px;font-size:13px;line-height:1.75;color:var(--texto)}
.pasos li{padding:3px 0}
.pasos code,.alertbox code{background:#fff;border:1px solid var(--linea);border-radius:5px;padding:1px 6px;font-size:11.8px}

/* ===================== MISC ===================== */
.split{display:grid;grid-template-columns:2fr 1fr;gap:18px;align-items:start}
.split3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px;align-items:start}
@media(max-width:1180px){.split,.split3{grid-template-columns:1fr}}
.hr{height:1px;background:var(--linea);margin:18px 0;border:0}
.muted{color:var(--suave)}
.tiny{font-size:11.8px}
.right{text-align:right}
.nowrap{white-space:nowrap}
.stack{display:flex;flex-direction:column;gap:12px}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.chips{display:flex;gap:7px;flex-wrap:wrap}
.chip{background:#F1F5F9;border:1px solid var(--linea);border-radius:999px;padding:4px 11px;font-size:12.2px;color:var(--texto);display:inline-flex;align-items:center;gap:6px}
.chip button{border:0;background:none;cursor:pointer;color:var(--tenue);padding:0;display:grid;place-items:center}
.chip button:hover{color:var(--err-600)}
.chip svg{width:13px;height:13px}
.chip--on{background:var(--azul-100);border-color:#CADEF0;color:var(--azul-800);font-weight:600}
/* Catálogo de laboratorio (acto médico y «Nueva orden»): la franja de lo
   marcado va pegada al buscador y se queda a la vista mientras se baja por
   la solicitud —en la página bajo la barra superior, como .hce__nav; en el
   modal al tope de su cuerpo—. .labcat acota hasta dónde acompaña: termina
   donde termina el catálogo. Un clic en un chip de la franja lo quita. */
.labcat{position:relative}
.labsel{position:sticky;top:78px;z-index:5;background:#fff;padding:6px 0 10px;margin-bottom:8px;border-bottom:1px solid var(--linea-2)}
.labsel .chip{cursor:pointer}
.labsel .chip svg{color:var(--azul-600)}
.labsel .chip:hover{background:#FEF2F2;border-color:#FECACA;color:var(--err-600)}
.labsel .chip:hover svg{color:var(--err-600)}
.labsel__mus{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:8px}
.labsel__mu{display:flex;align-items:center;gap:7px;font-size:12.2px;color:var(--texto)}
.labsel__mu span{font-weight:600;white-space:nowrap}
.labsel__mu input{width:auto;min-width:190px;padding:5px 9px;font-size:12.4px}
/* En el modal el cuerpo lleva 20px de relleno y Chrome pega la franja al
   borde del contenido, no al del relleno: el ::before tapa esa ranura para
   que los chips no se asomen por encima. En Firefox, que pega al borde del
   relleno, el ::before queda fuera del recorte y no estorba. */
.modal__b .labsel{top:0}
.modal__b .labsel::before{content:"";position:absolute;left:-22px;right:-22px;bottom:100%;height:20px;background:#fff}
.alertbox{display:flex;gap:11px;padding:13px 15px;border-radius:var(--r);font-size:13px;line-height:1.55;border:1px solid}
.alertbox svg{width:19px;height:19px;flex:none;margin-top:1px}
.alertbox--err{background:var(--err-100);border-color:#F3CDCD;color:#8E1015}
.alertbox--warn{background:var(--warn-100);border-color:#F0DEB8;color:#7C4E06}
.alertbox--info{background:var(--info-100);border-color:#C9E0F1;color:#124C74}
.alertbox--ok{background:var(--ok-100);border-color:#BEE7D7;color:#0A5C43}
.totals{background:#F8FBFD;border:1px solid var(--linea);border-radius:var(--r);padding:15px 17px}
.totals div{display:flex;justify-content:space-between;font-size:13.2px;padding:4px 0;color:var(--texto)}
.totals div.big{border-top:1px solid var(--linea);margin-top:7px;padding-top:11px;font-size:17px;font-weight:700;color:var(--tinta)}
.totals div.big span:last-child{color:var(--azul-700)}

/* ============================================================
   Membrete de los documentos impresos
   ============================================================ */
.membrete{text-align:center;margin-bottom:18px}
.membrete img{width:150px;margin-bottom:8px}
.membrete__d{font-size:11.6px;color:var(--suave);line-height:1.5}
.membrete__t{margin:14px 0 0;font-size:16px;letter-spacing:2px;color:var(--azul-800)}
.membrete__s{font-size:11.6px;color:var(--suave);margin-top:2px}
.print-only{display:none}

/* ============================================================
   El recetario del médico

   Reproduce el papel que cada médico manda a imprimir: banda del
   hospital a la izquierda, su nombre y su especialidad arriba, la
   marca de agua al centro y el pie de servicios abajo. Se ve igual
   en pantalla que en la impresora, porque es lo que el paciente se
   lleva en la mano.
   ============================================================ */
.rx{display:flex;background:#fff;border:1px solid var(--linea);border-radius:var(--r);
  overflow:hidden;color:#1a2430;font-size:13px;line-height:1.45}
.rx__banda{flex:none;width:34px;display:flex;flex-direction:column;align-items:center;gap:10px;
  padding:12px 0;border-right:2px solid var(--rojo-500)}
.rx__banda img{width:22px;transform:rotate(-90deg);flex:none}
.rx__banda-n,.rx__banda-l{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap}
.rx__banda-n{font-weight:800;font-size:11px;letter-spacing:.6px;color:var(--azul-800)}
.rx__banda-l{font-size:8.6px;font-style:italic;color:var(--rojo-500)}
.rx__hoja{flex:1;min-width:0;padding:12px 16px 10px;display:flex;flex-direction:column}

.rx__cab{display:flex;gap:14px;align-items:flex-start}
.rx__marca{flex:none;width:96px;text-align:center}
.rx__marca img{width:92px;display:block}
.rx__emg{margin-top:3px;font-size:8.4px;font-weight:800;letter-spacing:.4px;color:var(--rojo-500)}
.rx__quien{flex:1;min-width:0;text-align:center}
.rx__quien h2{margin:0;font-size:20px;font-weight:800;color:var(--azul-800);line-height:1.15;letter-spacing:.2px}
.rx__bajo{font-size:11.6px;color:var(--azul-700);margin-top:1px}
.rx__esp{font-size:13px;color:var(--rojo-500);margin-top:1px}
.rx__dir{font-size:9.6px;color:#4a5866;margin-top:4px;line-height:1.35}
.rx__tels{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-top:2px;
  font-size:9.6px;color:#4a5866}
.rx__hor{flex:none;width:118px;font-size:8.8px;color:#4a5866;line-height:1.35;text-align:right}
.rx__hor b{color:#1a2430}

/* Las dos rayas del papel, azul sobre rojo. */
.rx__regla{height:3px;margin:8px 0;background:
  linear-gradient(to bottom,var(--azul-700) 0 55%,var(--rojo-500) 55% 100%);border-radius:2px}

.rx__cuerpo{position:relative;flex:1;display:flex;flex-direction:column;min-height:330px}
.rx__rx{font-family:Georgia,'Times New Roman',serif;font-size:27px;line-height:1;color:#1a2430}
.rx__pac{display:flex;gap:12px;margin:6px 0 14px;font-size:11.4px}
.rx__campo{display:flex;align-items:baseline;gap:5px;min-width:0}
.rx__campo i{font-style:normal;color:#1a2430;flex:none}
.rx__campo u{flex:1;min-width:0;text-decoration:none;border-bottom:1px solid #9fb0c0;
  padding:0 3px 1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* La marca de agua del médico, detrás de lo escrito. */
.rx__agua{position:absolute;inset:44px 0 46px;display:flex;align-items:center;justify-content:center;
  pointer-events:none;font-size:34px;font-weight:800;letter-spacing:5px;text-transform:uppercase;
  color:var(--azul-800);opacity:.07;text-align:center;line-height:1.2}

.rx__tx{position:relative;flex:1}
.rx__tx ol{margin:0;padding-left:20px}
.rx__tx li{margin-bottom:9px}
.rx__tx li b{font-size:13.4px}
.rx__ind{font-size:11.6px;color:#4a5866;margin-top:1px}
.rx__vacio{margin:0;font-size:11.6px;color:var(--tenue)}
/* Los renglones del taco en blanco, para escribir a mano. */
.rx__renglones{height:100%;min-height:200px;background-image:repeating-linear-gradient(
  to bottom,transparent 0 27px,#d8e0e8 27px 28px)}
.rx__nota{margin-top:10px;font-size:11.6px;line-height:1.55}
.rx__alerg{margin-top:8px;font-size:11.4px;color:var(--rojo-500)}

.rx__firma{margin-top:22px;align-self:flex-end;width:250px;text-align:center;font-size:10.6px;color:#4a5866}
.rx__firma>span{display:block;border-top:1px solid #1a2430;margin-bottom:5px}
.rx__firma div{font-size:9.6px;margin-top:1px}
.rx__pie{font-size:9.4px;color:#4a5866;text-align:center;line-height:1.35}

@media (max-width:760px){
  .rx__cab{flex-wrap:wrap}
  .rx__hor{width:100%;text-align:center}
  .rx__pac{flex-wrap:wrap}
}

/* ============================================================
   Impresión

   Sale una sola hoja con lo que se está viendo. Si hay un modal
   abierto, el documento es el modal: el menú, la barra superior y
   la pantalla del fondo no se imprimen.
   ============================================================ */
@media print{
  @page{margin:14mm}
  html,body{height:auto;background:#fff}
  .sidebar,.topbar,.toasts,.modal__f,.modal__bg,.no-print{display:none!important}
  .modal__h .iconbtn,.pager,.tabs,.toolbar,.searchbox{display:none!important}
  .print-only{display:block!important}
  .view{padding:0;max-width:none}
  .card{box-shadow:none;border-color:#ccc;break-inside:avoid}
  .kpis,.chartbox{break-inside:avoid}
  table{break-inside:auto}
  tr{break-inside:avoid;break-after:auto}
  thead{display:table-header-group}
  .tablewrap{overflow:visible!important}
  a[href]::after{content:none!important}

  /* Con un modal abierto, la hoja es el modal y nada más. */
  body.imprime-modal .app{display:none!important}
  body.imprime-modal .modal-root{position:static;display:block!important}
  body.imprime-modal .modal{position:static;transform:none;width:100%;max-width:none;
    max-height:none;box-shadow:none;border-radius:0;animation:none;display:block}
  body.imprime-modal .modal__h{display:none!important}
  body.imprime-modal .modal__b{overflow:visible!important;padding:0;max-height:none}

  /* Sin modal, la hoja es la vista: el encabezado de página estorba. */
  body:not(.imprime-modal) .phead{break-inside:avoid}

  /* El papel aprieta más que la pantalla: así un documento corriente
     —una receta, una factura, un detalle de cuenta— cabe en una hoja. */
  .membrete{margin-bottom:12px}
  .membrete img{width:118px;margin-bottom:5px}
  .membrete__t{margin-top:10px;font-size:15px}
  .dl{gap:9px 20px}
  .dl>div>strong{font-size:12.6px}
  .sect{margin-bottom:14px}
  .sect__t{margin-bottom:8px}
  table.tbl{font-size:12.2px}
  .tbl thead th{padding:7px 10px}
  .tbl tbody td{padding:6px 10px}
  .totals{padding:11px 14px}
  .totals div{padding:3px 0;font-size:12.4px}
  .alertbox{padding:9px 12px}

  /* El recetario se imprime sin marco y a sangre: es el papel del
     médico, no una tarjeta dentro de una pantalla. */
  .rx{border:0;border-radius:0}
  .rx__hoja{padding:0 0 0 12px}
  .rx__cuerpo{min-height:0}
  .rx__agua{opacity:.05}
  .rx__tx li{break-inside:avoid}
}

/* ============================================================
   Imágenes clínicas — zona de carga, galería y visor
   ============================================================ */
.dropz{display:flex;align-items:center;gap:13px;padding:16px 18px;border:1.6px dashed #C6D6E4;border-radius:var(--r);
  background:var(--azul-050);cursor:pointer;transition:border-color .15s,background .15s;outline:none}
.dropz:hover,.dropz:focus-visible{border-color:var(--azul-500);background:#EAF3FA}
.dropz--on{border-color:var(--azul-600);background:var(--azul-100);border-style:solid}
.dropz--carg{opacity:.6;pointer-events:none}
.dropz>svg{width:26px;height:26px;flex:none;color:var(--azul-600)}
.dropz b{display:block;font-size:13.4px;color:var(--azul-800)}
.dropz small{display:block;font-size:11.8px;color:var(--suave);margin-top:2px}

.gal{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:11px}
.gal:not(:empty){margin-top:12px}
.gal__i{position:relative;margin:0;border:1px solid var(--linea);border-radius:var(--r);overflow:hidden;background:#0B1620}
.gal__i img{display:block;width:100%;height:112px;object-fit:cover;cursor:zoom-in;background:#0B1620}
.gal__x{position:absolute;top:6px;right:6px;width:24px;height:24px;border:0;border-radius:50%;cursor:pointer;
  background:rgba(11,22,32,.72);color:#fff;display:grid;place-items:center;padding:0}
.gal__x:hover{background:var(--err-600)}
.gal__x svg{width:13px;height:13px}
.gal__n{width:100%;border:0;border-top:1px solid var(--linea);border-radius:0;font-size:11.6px;padding:7px 9px;background:var(--blanco)}
.gal__n:focus{outline:none;background:var(--azul-050)}
.gal__i figcaption{background:var(--blanco);border-top:1px solid var(--linea);padding:7px 9px;font-size:11.6px;
  color:var(--texto);line-height:1.35;display:flex;flex-direction:column;gap:2px}
.gal__i figcaption span{color:var(--tenue);font-size:10.8px}

.visor{display:flex;flex-direction:column;gap:12px}
.visor__img{background:#0B1620;border-radius:var(--r);display:grid;place-items:center;padding:10px;min-height:320px}
.visor__img img{max-width:100%;max-height:64vh;display:block;border-radius:6px}
.visor__pie{display:flex;flex-direction:column;gap:3px;font-size:13.2px;color:var(--tinta)}

/* Frases clínicas sugeridas en el acto médico */
.chip--frase{cursor:pointer;align-items:flex-start;text-align:left;line-height:1.45;
  padding:7px 12px;max-width:100%;white-space:normal;transition:background .12s,border-color .12s,color .12s}
.chip--frase svg{width:12px;height:12px;flex:none;margin-top:3px;color:var(--tenue)}
.chip--frase:hover{background:var(--azul-100);border-color:#CADEF0;color:var(--azul-800)}
.chip--frase:hover svg{color:var(--azul-600)}
.chip--frase:active{background:var(--azul-050)}

/* Curvas de crecimiento */
.chip--curva{cursor:pointer;flex-direction:column;align-items:flex-start;gap:1px;line-height:1.3;
  padding:6px 12px;text-align:left;transition:background .12s,border-color .12s,color .12s}
.chip--curva small{color:var(--tenue);font-size:10.6px}
.chip--curva:hover{background:var(--azul-100);border-color:#CADEF0;color:var(--azul-800)}
.chip--curva.on{background:var(--azul-700);border-color:var(--azul-700);color:#fff;font-weight:600}
.chip--curva.on small{color:rgba(255,255,255,.78)}
.chip--curva.apagada{opacity:.55}
.chip--curva.apagada.on{opacity:1}
.curva{border-radius:var(--r-sm)}
.curva circle{cursor:default}
.inputlike{border:1px solid var(--linea);background:var(--suave);border-radius:var(--r-sm);
  padding:8px 11px;font-size:13.4px;color:var(--tenue);min-height:38px;display:flex;align-items:center}
