:root{
  --bg:#eaefec; --surface:#fbfcfb; --fg:#17211d; --muted:#5a6a62; --line:#d3dcd7;
  --accent:#0b6b57; --accent-fg:#ffffff; --accent-soft:#d7ece5;
  --warn:#8a5200; --warn-soft:#fbecd0; --bad:#b42318; --bad-soft:#fbe0dc; --ok:#0b6b57; --ok-soft:#d7ece5;
  --f-sans:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;
  --f-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  color-scheme:light dark;
}
@media (prefers-color-scheme: dark){:root{
  --bg:#0d1411; --surface:#16201c; --fg:#e5eee9; --muted:#93a59b; --line:#2a3a33;
  --accent:#4fc3a1; --accent-fg:#06201a; --accent-soft:#183a30;
  --warn:#f0b254; --warn-soft:#3a2a0c; --bad:#ff8f84; --bad-soft:#3c1a17; --ok:#4fc3a1; --ok-soft:#183a30}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--f-sans);font-size:16px;line-height:1.45;
  padding:max(12px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) 0 max(16px,env(safe-area-inset-left,0px))}
.app{max-width:480px;margin:0 auto;min-height:100dvh;display:flex;flex-direction:column}
h1{font-size:1.3rem;margin:0;font-weight:650;text-wrap:balance}
h2{font-size:1.1rem;margin:0;font-weight:600}
h3{font-size:.95rem;margin:0;font-weight:600}
p{margin:0}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.marca{display:flex;flex-direction:column;gap:2px;padding:28px 0 18px}
.marca .sub{color:var(--muted);font-size:.9rem}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px;display:flex;flex-direction:column;gap:14px}
.campo{display:flex;flex-direction:column;gap:5px}
.campo label{font-size:.82rem;color:var(--muted)}
input[type=text],input[type=search],input[type=password],input[type=email],input[type=file],input[type=datetime-local],input[type=date],select{
  width:100%;font:inherit;padding:11px 12px;border:1px solid var(--line);background:var(--bg);color:var(--fg);border-radius:8px}
input[type=file]{padding:9px 10px}
.ayuda{font-size:.8rem;color:var(--muted)}
.ayuda a{color:var(--accent)}
.ayuda b,.msg b{font-weight:600}
.btn{font:inherit;font-weight:550;padding:12px 14px;border-radius:9px;border:1px solid var(--accent);background:var(--accent);color:var(--accent-fg);cursor:pointer;width:100%}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.sec{background:transparent;color:var(--accent)}
.btn.bad{background:transparent;color:var(--bad);border-color:var(--bad)}
.enlace{background:none;border:0;padding:4px 0;font:inherit;font-size:.9rem;color:var(--accent);cursor:pointer;text-decoration:underline;text-align:left}
.enlaces{display:flex;flex-direction:column;align-items:flex-start;gap:2px}
.msg{font-size:.9rem;padding:9px 11px;border-radius:8px}
.msg.error{background:var(--bad-soft);color:var(--bad)}
.msg.ok{background:var(--ok-soft);color:var(--ok)}
.msg.aviso{background:var(--warn-soft);color:var(--warn)}
.topbar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:14px 0 10px}
.topbar .quien{display:flex;flex-direction:column;min-width:0}
.topbar .quien b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar .quien span{font-size:.8rem;color:var(--muted)}
.contenido{flex:1;display:flex;flex-direction:column;gap:14px;padding-bottom:16px}
.nav{position:sticky;bottom:0;display:grid;grid-auto-flow:column;grid-auto-columns:1fr;background:var(--surface);
  border:1px solid var(--line);border-radius:14px 14px 0 0;padding-bottom:env(safe-area-inset-bottom,0px)}
.nav button{font:inherit;font-size:.72rem;padding:10px 2px 11px;background:none;border:0;color:var(--muted);cursor:pointer;
  display:flex;flex-direction:column;align-items:center;gap:4px}
.nav button[aria-current="page"]{color:var(--accent);font-weight:600}
.nav button:disabled{opacity:.4;cursor:not-allowed}
.nav svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;font-size:.92rem}
.kv dt{color:var(--muted)}
.kv dd{margin:0;text-align:right;word-break:break-word}
.kv dd.mono{font-family:var(--f-mono)}
.pill{font-size:.75rem;padding:2px 9px;border-radius:99px;background:var(--accent-soft);color:var(--accent);font-weight:550;white-space:nowrap}
.pill.warn{background:var(--warn-soft);color:var(--warn)}
.vacio{color:var(--muted);text-align:center;padding:26px 8px}

/* ---- F2: reservas ---- */
.subtitulo{font-size:.95rem;margin:4px 0 -4px;color:var(--muted)}
.fila{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.dos{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.dias{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}
.dias button{font:inherit;font-size:.78rem;min-width:52px;padding:7px 4px;border:1px solid var(--line);background:var(--bg);color:var(--fg);border-radius:9px;cursor:pointer;line-height:1.25}
.dias button span{display:block;font-family:var(--f-mono);font-size:.95rem}
.dias button[aria-pressed="true"]{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}
.tl{position:relative;height:34px;border:1px solid var(--line);border-radius:7px;background:var(--bg);overflow:hidden}
.tl .oc{position:absolute;top:0;bottom:0;background:var(--bad-soft);border-left:1px solid var(--bad);border-right:1px solid var(--bad)}
.tl .oc.mia{background:var(--accent-soft);border-color:var(--accent)}
.tl .sel{position:absolute;top:5px;bottom:5px;background:var(--accent);opacity:.85;border-radius:5px}
.tl .sel.err{background:var(--bad)}
.ticks{position:relative;height:18px;margin-top:3px;font-family:var(--f-mono);font-size:.7rem;color:var(--muted)}
.ticks span{position:absolute;transform:translateX(-50%)}
.ticks span:first-child{transform:none}
.ticks span:last-child{transform:translateX(-100%)}
.lista{display:flex;flex-direction:column;gap:2px;font-size:.82rem;color:var(--muted)}
.lista b{font-family:var(--f-mono);font-weight:500;color:var(--fg)}
.resumen{border:1px dashed var(--line);border-radius:9px;padding:10px 12px;font-size:.92rem}
.resumen.err{border-color:var(--bad);color:var(--bad)}
.codigo-caja{display:flex;flex-direction:column;gap:2px}
.codigo{font-family:var(--f-mono);font-size:1.9rem;letter-spacing:.2em;font-weight:500}
.pill.proxima{background:var(--accent-soft)}
.panel.vivo{border-color:var(--accent)}
.confirmar{display:flex;flex-direction:column;gap:8px;border:1px solid var(--bad);border-radius:10px;padding:12px}
.botonera{display:flex;gap:8px}
.botonera .btn{flex:1}
/* ---- acceso por QR ---- */
.qr{align-items:stretch;padding-block:28px}
.centro{text-align:center}
.estado{display:flex;justify-content:center}
.girando{width:44px;height:44px;border-radius:50%;border:4px solid var(--line);border-top-color:var(--accent);animation:giro 1s linear infinite}
@keyframes giro{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion: reduce){.girando{animation-duration:3s}}
.icono-estado{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.8rem;font-weight:700}
.estado.ok .icono-estado{background:var(--ok-soft);color:var(--ok)}
.estado.error .icono-estado{background:var(--bad-soft);color:var(--bad)}
.estado.aviso .icono-estado{background:var(--warn-soft);color:var(--warn)}

.dos>*{min-width:0}
input[type=datetime-local]{min-width:0;max-width:100%;width:100%;box-sizing:border-box}
.aviso-correo{display:flex;flex-direction:column;gap:10px}

/* ---- F3a: administracion ---- */
.pestanas{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:4px}
.pestana{font:inherit;font-size:.8rem;padding:9px 2px;border:0;border-radius:9px;background:none;color:var(--muted);cursor:pointer;display:flex;flex-direction:column;align-items:center;min-width:0}
.pestana[aria-current="page"]{background:var(--accent-soft);color:var(--accent);font-weight:600}
.pestana:disabled{opacity:.5;cursor:not-allowed}
.pestana small{font-size:.62rem}
.tarjeta-cab{display:flex;justify-content:space-between;align-items:center;gap:10px;width:100%;font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;text-align:left}
.tarjeta-cab .nom{display:flex;flex-direction:column;min-width:0;word-break:break-word}
.detalle{display:flex;flex-direction:column;gap:12px;border-top:1px solid var(--line);padding-top:12px}
.clave-temp{display:block;font-family:var(--f-mono);font-size:1.35rem;letter-spacing:.06em;text-align:center;padding:14px 8px;background:var(--bg);border:1px dashed var(--accent);border-radius:10px;word-break:break-all;user-select:all}
.dos-botones button{flex:1}
.dias button[aria-pressed="true"]{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}
.evidencia{margin:0;padding-left:18px;font-size:.88rem}
textarea{width:100%;box-sizing:border-box;font:inherit;padding:11px 12px;border:1px solid var(--line);background:var(--bg);color:var(--fg);border-radius:8px;resize:vertical}
.admin-usuarios,.admin-reservas,.admin-sanciones{display:flex;flex-direction:column;gap:12px}
.tarjetas{display:flex;flex-direction:column;gap:12px}
.fila>select{flex:1;min-width:0}
.fila>.btn{width:auto;flex:none}
.pills{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
input[type=date],input[type=time]{width:100%;font:inherit;padding:11px 12px;border:1px solid var(--line);background:var(--bg);color:var(--fg);border-radius:8px;box-sizing:border-box;min-width:0;max-width:100%}
input[readonly]{opacity:.7}
.campo[hidden]{display:none}
input[type=time]{padding:11px 8px}

/* ---- F3b: panel Sala ---- */
.sala,.sala-accesos{display:flex;flex-direction:column;gap:14px}
.sala-cab{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.sala-act{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.btn.chico{width:auto;padding:7px 12px;font-size:.85rem}
.sala-bloque{display:flex;flex-direction:column;gap:10px}
.pill.sin{background:var(--line);color:var(--muted)}
.lectura{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.lectura>div{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:10px 4px;text-align:center;display:flex;flex-direction:column;gap:2px;min-width:0}
.lectura b{font-family:var(--f-mono);font-size:1.2rem;font-weight:600;overflow-wrap:anywhere}
.lectura b.corto{font-family:var(--f-sans);font-size:.85rem;line-height:1.25;overflow-wrap:normal}
.lectura span{font-size:.72rem;color:var(--muted)}
.acciones{display:flex;flex-direction:column;gap:10px}
.espera{display:flex;align-items:center;gap:12px}
.girando.chico{width:22px;height:22px;border-width:3px;flex:none}
.acc-lista{display:flex;flex-direction:column}
.acc-fila{display:flex;flex-direction:column;gap:2px;padding:10px 0;border-top:1px solid var(--line)}
.acc-fila:first-child{border-top:0;padding-top:0}
.acc-fila .mono{font-family:var(--f-mono);font-weight:500}
.acc-fila p{word-break:break-word}

/* ---- lector de QR (#/escanear) ---- */
.escaner{gap:12px}
.visor{position:relative;overflow:hidden;border-radius:12px;background:#000;width:100%;aspect-ratio:1/1;max-height:min(70vh,520px)}
.visor video{display:block;width:100%;height:100%;object-fit:cover}
.marco{position:absolute;inset:16%;border:3px solid #fff;border-radius:14px;box-shadow:0 0 0 999px rgba(0,0,0,.4);pointer-events:none}
.zona-escaner{display:flex;flex-direction:column;gap:12px}

/* ---- F5: control del aire ---- */
.control{display:flex;flex-direction:column;gap:14px}
.etq{font-size:.85rem;color:var(--muted)}
.ac-ultimo{display:flex;flex-direction:column;gap:6px}
.ac-resumen{font-size:1.15rem;font-weight:600;overflow-wrap:anywhere}
.ac-campo{display:flex;flex-direction:column;gap:8px}
.seg{display:grid;gap:6px}
.seg.dos{grid-template-columns:repeat(2,minmax(0,1fr))}
.seg-op{font:inherit;padding:10px 6px;border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--fg);cursor:pointer;min-width:0;overflow-wrap:anywhere}
.seg-op[aria-pressed="true"]{background:var(--accent);color:var(--accent-fg);border-color:var(--accent);font-weight:600}
.seg-op:disabled{opacity:.55;cursor:not-allowed}
.temp-fila{display:flex;align-items:center;justify-content:center;gap:16px}
.temp{font-family:var(--f-mono);font-size:2rem;font-weight:600;min-width:5ch;text-align:center}
.btn.paso{width:56px;padding:10px 0;font-size:1.4rem;flex:none}
[hidden]{display:none !important} /* .panel y otras reglas con display ganaban al atributo hidden */

/* ---- Escritorio (PC): barra lateral, contenido ancho y listas en columnas.
   El diseno movil (arriba) no cambia. ---- */
@media (min-width:1024px){
  .app:not(.shell){max-width:440px;justify-content:center;padding-top:6vh}
  .app.shell{max-width:none;margin:0;display:grid;grid-template-columns:248px minmax(0,1fr);
    grid-template-rows:auto 1fr;grid-template-areas:"quien contenido" "nav contenido";align-items:start}
  .app.shell .topbar{grid-area:quien;position:sticky;top:0;padding:22px 20px 14px;background:var(--surface);
    border-right:1px solid var(--line);min-height:0}
  .app.shell .nav{grid-area:nav;position:sticky;top:76px;height:calc(100dvh - 76px);align-content:start;
    grid-auto-flow:row;grid-auto-columns:auto;border:0;border-right:1px solid var(--line);border-radius:0;padding:6px 12px}
  .app.shell .nav button{flex-direction:row;justify-content:flex-start;gap:12px;font-size:.95rem;
    padding:11px 12px;border-radius:9px}
  .app.shell .nav button:hover:not(:disabled){background:var(--accent-soft)}
  .app.shell .nav button[aria-current="page"]{background:var(--accent-soft)}
  .app.shell .contenido{grid-area:contenido;width:100%;max-width:1120px;box-sizing:border-box;padding:28px 36px 40px;gap:18px}

  /* vistas de lectura: ancho comodo, no se estiran */
  .contenido>.contenido{padding:0;max-width:640px}
  .contenido>.control,.contenido>.sala,.contenido>.sala-accesos{max-width:none}

  .pestanas{grid-template-columns:repeat(4,max-content);width:max-content;max-width:100%}
  .pestana{padding:9px 22px}

  .tarjetas{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px;align-items:start}
  .tarjetas>.ayuda,.tarjetas>.msg{grid-column:1/-1}
  .tarjetas>.panel.abierta{grid-column:1/-1}
  .panel.abierta>.detalle{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px 28px;align-items:start}
  .panel.abierta>.detalle>dl,.panel.abierta>.detalle>.msg,.panel.abierta>.detalle>p{grid-column:1/-1}
  .tarjeta-cab .nom{flex:1}
  .tarjeta-cab:hover .nom b{text-decoration:underline}

  .admin-usuarios .btn:not(.chico),.admin-reservas .btn:not(.chico){width:auto;align-self:flex-start;padding-left:22px;padding-right:22px}
  .admin-usuarios>.fila,.admin-reservas>.fila{max-width:640px}
  .admin-usuarios input[type=search],.admin-usuarios input[type=text]{max-width:520px}
  .sala,.sala-accesos{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;align-items:start}
  .sala>.sala-cab,.sala>.msg,.sala-accesos>.msg{grid-column:1/-1}
}
