/* ══════════════════════════════════════════════════════════════════════════
   Profile Reserve 360 — hoja única.

   Misma piel que Profile Manager 360 (los tokens son los suyos, copiados y no
   reinventados) y las mismas reglas:
   1. Índigo (--pr) es la MARCA: navegación, botones, lo seleccionado.
   2. Los estados de una mesa son DATOS y tienen su propio código, que se
      aprende una vez y vale para toda la casa:
        libre       blanco con borde        (nadie)
        reservada   índigo suave            (viene alguien)
        llegada     ámbar                   (está en la puerta / en barra)
        sentada     verde                   (comiendo)
        se pasa     rojo                    (ya debería haber dejado la mesa)
   3. Rótulos en frase, nunca por debajo de 12,5 px.
   ══════════════════════════════════════════════════════════════════════════ */

:root{
  --bg:#f4f5f9; --s1:#ffffff; --s2:#f8f9fc; --s3:#eef0f7;
  --ln:#e6e8f1; --ln2:#eef0f6;
  --tx:#101322; --md:#525a70; --dm:#676d7c;
  --pr:#6564f4; --pr-d:#5849e8; --pr-s:#eeeefe; --pr-b:#dcdcfd;
  --vi:#9148fb; --az:#2842e9;
  --jd:#0f9d63; --jd-s:#e4f7ef; --jd-b:#bfe9d4; --jd-t:#06673f;
  --am:#dc8407; --am-s:#fdf3e3; --am-b:#f6ddb4; --am-t:#95560a;
  --cr:#e0453b; --cr-s:#fdecea; --cr-b:#f8cdc8; --cr-t:#a3231b;
  --t-h1:27px; --t-h2:19px; --t-h3:16px; --t-b:15px; --t-s:13.5px; --t-xs:12.5px;
  --sh:0 1px 2px rgba(16,19,34,.04); --sh2:0 6px 20px rgba(16,19,34,.07); --sh3:0 14px 38px rgba(16,19,34,.12);
  --r:16px; --r-s:11px; --r-l:20px;
  --side:236px;
  --neg:var(--pr);           /* color del local elegido: lo pone la página */
  font-synthesis:none;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--tx);font:400 var(--t-b)/1.45 'Instrument Sans',system-ui,sans-serif;-webkit-font-smoothing:antialiased}
a{color:var(--pr);text-decoration:none}
a:hover{color:var(--pr-d)}
button,input,select,textarea{font:inherit;color:inherit}
.mono,.num{font-family:'IBM Plex Mono',ui-monospace,monospace;font-variant-numeric:tabular-nums}
.dm{color:var(--dm)} .md{color:var(--md)}
[hidden]{display:none!important}

/* ── Armazón ── */
.app{display:grid;grid-template-columns:var(--side) 1fr;min-height:100vh}
.side{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:14px;padding:18px 14px;background:var(--s1);border-right:1px solid var(--ln);overflow:auto}
.logo{display:flex;align-items:center;gap:9px;padding:2px 6px 6px;color:var(--tx)}
.logo svg{flex:none}
.logo b{display:block;font-size:17px;line-height:1;font-weight:700;letter-spacing:-.01em}
.logo small{display:block;font-size:12.5px;line-height:1.1;margin-top:2px;font-weight:500}
.logo small em{font-style:normal;background:linear-gradient(90deg,var(--vi),var(--az));-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:600}
.negsel{display:flex;flex-direction:column;gap:4px}
.negsel label{font-size:var(--t-xs);color:var(--dm);padding:0 6px}
.negsel select{width:100%;padding:9px 10px;border:1px solid var(--ln);border-radius:var(--r-s);background:var(--s2);font-weight:600}
.nav{display:flex;flex-direction:column;gap:2px}
.nav a{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:10px;color:var(--md);font-weight:500}
.nav a .ic{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;background:var(--s3);color:var(--md);flex:none}
.nav a:hover{background:var(--s2);color:var(--tx)}
.nav a.on{background:var(--pr);color:#fff}
.nav a.on .ic{background:rgba(255,255,255,.18);color:#fff}
.nav .sep{font-size:var(--t-xs);color:var(--dm);padding:12px 10px 4px}
.side .pie{margin-top:auto;font-size:var(--t-xs);color:var(--dm);padding:10px 6px 0;border-top:1px solid var(--ln2)}
.side .pie a{color:var(--md)}
.main{min-width:0;display:flex;flex-direction:column}
.ph{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:22px 28px 16px;border-bottom:1px solid var(--ln);background:var(--s1)}
.ph h1{margin:0;font-size:var(--t-h1);line-height:1.1;letter-spacing:-.02em}
.ph p{margin:4px 0 0;color:var(--dm);font-size:var(--t-s)}
.ph .acc{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.cont{padding:22px 28px 60px}

/* ── Piezas ── */
.card{background:var(--s1);border:1px solid var(--ln);border-radius:var(--r);box-shadow:var(--sh);padding:18px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:8px 14px;border-radius:10px;border:1px solid var(--ln);background:var(--s1);color:var(--tx);font-weight:600;font-size:var(--t-s);cursor:pointer;white-space:nowrap;min-height:36px}
.btn:hover{border-color:var(--pr-b);background:var(--s2);color:var(--tx)}
.btn-p{background:var(--pr);border-color:var(--pr);color:#fff}
.btn-p:hover{background:var(--pr-d);border-color:var(--pr-d);color:#fff}
.btn-ok{background:var(--jd);border-color:var(--jd);color:#fff}
.btn-ok:hover{background:var(--jd-t);color:#fff}
.btn-mal{color:var(--cr-t);border-color:var(--cr-b)}
.btn-mal:hover{background:var(--cr-s);border-color:var(--cr)}
.btn-s{padding:5px 10px;min-height:30px;font-size:var(--t-xs)}
.btn:disabled{opacity:.5;cursor:default}
.seg{display:inline-flex;border:1px solid var(--ln);border-radius:10px;background:var(--s1);overflow:hidden}
.seg button{border:0;background:none;padding:7px 13px;font-weight:600;font-size:var(--t-s);color:var(--md);cursor:pointer;min-height:34px}
.seg button+button{border-left:1px solid var(--ln)}
.seg button.on{background:var(--pr-s);color:var(--pr-d)}
.inp,select.inp,textarea.inp{width:100%;padding:9px 11px;border:1px solid var(--ln);border-radius:10px;background:var(--s1);min-height:38px}
.inp:focus{outline:2px solid var(--pr-b);border-color:var(--pr)}
.fl{display:flex;flex-direction:column;gap:5px;font-size:var(--t-xs);color:var(--md);font-weight:500}
.fila{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}
.pill{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:99px;font-size:var(--t-xs);font-weight:600;background:var(--s3);color:var(--md);white-space:nowrap}
.pill i{width:7px;height:7px;border-radius:50%;background:currentColor}
.e-pendiente{background:var(--s3);color:var(--md)}
.e-confirmada{background:var(--pr-s);color:var(--pr-d)}
.e-llegada{background:var(--am-s);color:var(--am-t)}
.e-sentada{background:var(--jd-s);color:var(--jd-t)}
.e-terminada{background:var(--s3);color:var(--dm)}
.e-no_show{background:var(--cr-s);color:var(--cr-t)}
.e-cancelada{background:var(--s3);color:var(--dm);text-decoration:line-through}
.chip{display:inline-flex;align-items:center;gap:4px;padding:1px 7px;border-radius:6px;font-size:12px;font-weight:600;background:var(--s3);color:var(--md)}
.chip.vip{background:#fff4d6;color:#8a5a00}
.chip.alerg{background:var(--cr-s);color:var(--cr-t)}
.chip.noshow{background:var(--cr-s);color:var(--cr-t)}
.chip.habitual{background:var(--jd-s);color:var(--jd-t)}
.vacio{padding:28px;text-align:center;color:var(--dm)}
.toast{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);background:var(--tx);color:#fff;padding:11px 18px;border-radius:12px;box-shadow:var(--sh3);font-weight:500;z-index:90;max-width:calc(100vw - 32px)}
.toast.mal{background:var(--cr-t)}

/* ── Modal ── */
.velo{position:fixed;inset:0;background:rgba(16,19,34,.38);display:grid;place-items:center;z-index:60;padding:16px}
.modal{background:var(--s1);border-radius:var(--r-l);box-shadow:var(--sh3);width:min(560px,100%);max-height:calc(100vh - 32px);overflow:auto}
.modal header{display:flex;justify-content:space-between;align-items:center;padding:18px 20px 6px}
.modal header h2{margin:0;font-size:var(--t-h2)}
.modal .cuerpo{padding:10px 20px;display:flex;flex-direction:column;gap:12px}
.modal footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 18px}
.x{border:0;background:var(--s3);width:32px;height:32px;border-radius:9px;cursor:pointer;font-size:18px;line-height:1;color:var(--md)}
.horas{display:flex;flex-wrap:wrap;gap:6px}
.horas button{border:1px solid var(--ln);background:var(--s1);border-radius:9px;padding:6px 9px;font-family:'IBM Plex Mono',monospace;font-size:13px;cursor:pointer;min-width:62px}
.horas button.on{background:var(--pr);border-color:var(--pr);color:#fff}
.horas button:disabled{opacity:.35;text-decoration:line-through;cursor:default}
.sugerencias{position:relative}
.sugerencias ul{position:absolute;left:0;right:0;top:100%;margin:4px 0 0;padding:4px;list-style:none;background:var(--s1);border:1px solid var(--ln);border-radius:10px;box-shadow:var(--sh2);z-index:5}
.sugerencias li{padding:8px 10px;border-radius:8px;cursor:pointer;display:flex;justify-content:space-between;gap:8px}
.sugerencias li:hover{background:var(--s2)}

/* ══ SERVICIO: la sala en vivo ══ */
.srv{flex:none;display:grid;grid-template-columns:330px 1fr;grid-template-rows:auto 1fr;min-height:0;height:100vh}
.srv-top{grid-column:1/-1;display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 18px;background:var(--s1);border-bottom:1px solid var(--ln)}
.srv-top h1{margin:0 8px 0 0;font-size:21px;letter-spacing:-.02em;display:flex;align-items:center;gap:9px}
.srv-top h1 .punto{width:11px;height:11px;border-radius:50%;background:var(--neg)}
.fecha{display:inline-flex;align-items:center;border:1px solid var(--ln);border-radius:10px;background:var(--s1)}
.fecha button{border:0;background:none;padding:6px 10px;cursor:pointer;font-weight:700;color:var(--md);min-height:34px}
.fecha span{padding:0 6px;font-weight:600;font-size:var(--t-s);min-width:118px;text-align:center}
.fecha input{position:absolute;opacity:0;pointer-events:none;width:0}
.cifras{display:flex;gap:16px;margin-left:auto;font-size:var(--t-xs);color:var(--dm)}
.cifras b{display:block;font-size:19px;color:var(--tx);font-family:'IBM Plex Mono',monospace;font-weight:500;line-height:1.1}
.vivo{display:inline-flex;align-items:center;gap:6px;font-size:var(--t-xs);color:var(--jd-t);font-weight:600}
.vivo i{width:8px;height:8px;border-radius:50%;background:var(--jd);box-shadow:0 0 0 0 rgba(15,157,99,.5);animation:latido 2s infinite}
.vivo.off{color:var(--cr-t)} .vivo.off i{background:var(--cr);animation:none}
@keyframes latido{70%{box-shadow:0 0 0 7px rgba(15,157,99,0)}100%{box-shadow:0 0 0 0 rgba(15,157,99,0)}}

.lista{border-right:1px solid var(--ln);background:var(--s1);display:flex;flex-direction:column;min-height:0}
.lista .filtros{display:flex;gap:6px;padding:10px 12px;border-bottom:1px solid var(--ln2);flex-wrap:wrap}
.lista .filtros button{border:1px solid var(--ln);background:var(--s1);padding:4px 10px;border-radius:99px;font-size:12.5px;font-weight:600;color:var(--md);cursor:pointer}
.lista .filtros button.on{background:var(--tx);border-color:var(--tx);color:#fff}
.lista .rs{overflow:auto;flex:1;padding:6px 8px 80px}
.franja{font-size:12.5px;color:var(--dm);padding:12px 8px 4px;display:flex;justify-content:space-between;font-weight:600}
.res{display:grid;grid-template-columns:48px 1fr auto;gap:2px 10px;align-items:center;padding:9px 10px;border-radius:12px;cursor:pointer;border:1px solid transparent;user-select:none}
.res:hover{background:var(--s2)}
.res.sel{background:var(--pr-s);border-color:var(--pr-b)}
.res.arrastrando{opacity:.4}
.res .h{font-family:'IBM Plex Mono',monospace;font-size:14px;font-weight:500;grid-row:span 2}
.res .n{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.res .d{font-size:12.5px;color:var(--dm);display:flex;gap:6px;align-items:center;flex-wrap:wrap;grid-column:2/4}
.res .pax{font-family:'IBM Plex Mono',monospace;font-weight:500;background:var(--s3);border-radius:7px;padding:1px 7px;font-size:13px}
.res .sin-mesa{color:var(--cr-t);font-weight:600}
.res.hecha{opacity:.55}

.lienzo{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0}
.salas{display:flex;gap:4px;padding:10px 14px 0;flex-wrap:wrap;align-items:center}
.salas button{border:0;background:none;padding:7px 13px;border-radius:9px 9px 0 0;font-weight:600;color:var(--md);cursor:pointer;font-size:var(--t-s)}
.salas button.on{background:var(--s1);color:var(--tx);box-shadow:0 -1px 0 var(--ln) inset}
.salas button small{font-weight:500;color:var(--dm);margin-left:4px}
.salas .vista{margin-left:auto}
.plano-caja{flex:1;min-height:0;margin:0 14px 14px;background:var(--s1);border:1px solid var(--ln);border-radius:0 var(--r) var(--r) var(--r);overflow:hidden;position:relative}
.plano-caja svg{width:100%;height:100%;display:block;touch-action:none}
.leyenda{position:absolute;left:12px;bottom:10px;display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--md);background:rgba(255,255,255,.9);padding:6px 10px;border-radius:9px;border:1px solid var(--ln2)}
.leyenda span{display:inline-flex;align-items:center;gap:5px}
.leyenda i{width:11px;height:11px;border-radius:4px;border:1.5px solid}
.zoom{position:absolute;right:12px;bottom:10px;display:flex;flex-direction:column;gap:4px}
.zoom button{width:34px;height:34px;border-radius:9px;border:1px solid var(--ln);background:var(--s1);cursor:pointer;font-size:17px;font-weight:600;color:var(--md)}
.reloj{position:absolute;right:12px;top:10px;background:rgba(255,255,255,.94);border:1px solid var(--ln);border-radius:12px;padding:8px 12px;display:flex;align-items:center;gap:10px;font-size:var(--t-xs);color:var(--md)}
.reloj input[type=range]{width:180px;accent-color:var(--pr)}
.reloj b{font-family:'IBM Plex Mono',monospace;font-size:15px;color:var(--tx);font-weight:500;min-width:44px}
.reloj .ya{border:0;background:var(--pr-s);color:var(--pr-d);border-radius:7px;padding:3px 8px;font-weight:600;cursor:pointer;font-size:12px}

/* Mesas en el SVG */
.fondo-interior{fill:#fbfbfd} .fondo-terraza{fill:#f6faf3} .fondo-pista{fill:#15131f} .fondo-vip{fill:#fbf8f1}
.rejilla{stroke:#eceef5;stroke-width:1}
.fondo-pista+.rejilla-g .rejilla{stroke:#24212f}
.mesa{cursor:pointer}
.mesa .cuerpo{fill:#fff;stroke:#c9cddb;stroke-width:1.6;transition:fill .25s,stroke .25s}
.mesa .silla{fill:#e9ebf3;stroke:none}
.mesa .nom{font:600 14px 'Instrument Sans',sans-serif;fill:var(--tx);text-anchor:middle;dominant-baseline:central;pointer-events:none}
.mesa .sub{font:500 11px 'IBM Plex Mono',monospace;fill:var(--md);text-anchor:middle;dominant-baseline:central;pointer-events:none}
.mesa.st-reservada .cuerpo{fill:var(--pr-s);stroke:var(--pr)}
.mesa.st-reservada .silla{fill:var(--pr-b)}
.mesa.st-llegada .cuerpo{fill:var(--am-s);stroke:var(--am)}
.mesa.st-llegada .silla{fill:var(--am-b)}
.mesa.st-sentada .cuerpo{fill:var(--jd);stroke:var(--jd-t)}
.mesa.st-sentada .silla{fill:var(--jd-b)}
.mesa.st-sentada .nom,.mesa.st-sentada .sub,.mesa.st-tarde .nom,.mesa.st-tarde .sub{fill:#fff}
.mesa.st-tarde .cuerpo{fill:var(--cr);stroke:var(--cr-t)}
.mesa.st-tarde .silla{fill:var(--cr-b)}
.mesa.st-bloq .cuerpo{fill:var(--s3);stroke:#d9dce6;stroke-dasharray:4 3}
.mesa.sel .cuerpo{stroke:var(--tx);stroke-width:3}
.mesa.soltar .cuerpo{stroke:var(--pr);stroke-width:4;filter:drop-shadow(0 0 6px rgba(101,100,244,.55))}
.mesa.no-cabe .cuerpo{stroke:var(--cr);stroke-width:3;stroke-dasharray:5 3}
.mesa.propuesta .cuerpo{stroke:var(--pr);stroke-width:3.5;stroke-dasharray:6 4}
.mesa .barra-t{fill:rgba(255,255,255,.55)}
.fondo-pista ~ g .mesa .cuerpo{stroke:#4b4760}
.deco{pointer-events:none}
.deco .pared{fill:#3b3f52}
.deco .barra{fill:#d9c3a5;stroke:#b89a74;stroke-width:1.5}
.deco .escenario{fill:#2a2438;stroke:#1a1524}
.deco .pantalla{fill:#12131a;stroke:#000}
.deco .pista{fill:rgba(145,72,251,.10);stroke:rgba(145,72,251,.45);stroke-dasharray:8 6;stroke-width:2}
.deco .cabina{fill:#312a45}
.deco .planta{fill:#9bd3a8;stroke:#5fa872}
.deco .puerta{fill:none;stroke:#8a90a6;stroke-width:2}
.deco .zona{fill:rgba(101,100,244,.05);stroke:rgba(101,100,244,.35);stroke-dasharray:6 5;stroke-width:1.5}
.deco text{font:600 13px 'Instrument Sans',sans-serif;fill:#6b7186;text-anchor:middle;dominant-baseline:central;letter-spacing:.02em}
.deco .t-claro{fill:#fff}
.deco .t-texto{font-size:15px;fill:var(--md)}

/* Panel de detalle */
.det{position:absolute;right:14px;top:0;bottom:14px;width:340px;background:var(--s1);border:1px solid var(--ln);border-radius:var(--r);box-shadow:var(--sh3);display:flex;flex-direction:column;z-index:20;overflow:hidden}
.det header{padding:16px 16px 10px;border-bottom:1px solid var(--ln2);display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.det header h3{margin:0;font-size:18px}
.det header p{margin:3px 0 0;font-size:var(--t-xs);color:var(--dm)}
.det .cuerpo{padding:12px 16px;overflow:auto;flex:1;display:flex;flex-direction:column;gap:12px}
.det .kv{display:grid;grid-template-columns:96px 1fr;gap:6px 10px;font-size:var(--t-s)}
.det .kv dt{color:var(--dm)} .det .kv dd{margin:0;font-weight:500}
.det .acciones{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:12px 16px 16px;border-top:1px solid var(--ln2)}
.det .acciones .ancho{grid-column:1/-1}
.nota{background:var(--am-s);border:1px solid var(--am-b);color:var(--am-t);border-radius:10px;padding:8px 10px;font-size:var(--t-s)}
.nota.mal{background:var(--cr-s);border-color:var(--cr-b);color:var(--cr-t)}
.mini-res{border:1px solid var(--ln);border-radius:10px;padding:8px 10px;display:flex;justify-content:space-between;gap:8px;align-items:center;cursor:pointer;font-size:var(--t-s)}
.mini-res:hover{border-color:var(--pr-b)}

/* Línea de tiempo */
.tl{flex:1;min-height:0;margin:0 14px 14px;background:var(--s1);border:1px solid var(--ln);border-radius:0 var(--r) var(--r) var(--r);overflow:auto;position:relative}
.tl table{border-collapse:separate;border-spacing:0;min-width:100%}
.tl th,.tl td{border-bottom:1px solid var(--ln2);padding:0;height:40px}
.tl thead th{position:sticky;top:0;background:var(--s1);z-index:3;font:500 12px 'IBM Plex Mono',monospace;color:var(--dm);text-align:left;border-left:1px solid var(--ln2);padding-left:4px;height:32px}
.tl tbody th{position:sticky;left:0;background:var(--s1);z-index:2;text-align:left;padding:0 12px;font-weight:600;font-size:var(--t-s);white-space:nowrap;border-right:1px solid var(--ln);min-width:120px}
.tl tbody th small{color:var(--dm);font-weight:500;font-family:'IBM Plex Mono',monospace;margin-left:6px}
.tl thead th:first-child{left:0;z-index:4}
.tl .pista-t{position:relative}
.tl .blq{position:absolute;top:5px;bottom:5px;border-radius:8px;padding:0 8px;display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;overflow:hidden;white-space:nowrap;cursor:pointer;border:1px solid}
.tl .blq.e-confirmada,.tl .blq.e-pendiente{background:var(--pr-s);border-color:var(--pr-b);color:var(--pr-d);text-decoration:none}
.tl .blq.e-pendiente{border-style:dashed}
.tl .blq.e-llegada{background:var(--am-s);border-color:var(--am-b)}
.tl .blq.e-sentada{background:var(--jd);border-color:var(--jd-t);color:#fff}
.tl .blq.e-terminada{background:var(--s3);border-color:var(--ln);color:var(--dm)}
.tl .ahora{position:absolute;top:0;bottom:0;width:2px;background:var(--cr);z-index:2;pointer-events:none}

/* ══ EDITOR DE PLANO ══ */
.ed{flex:none;display:grid;grid-template-columns:210px 1fr 280px;min-height:0;height:calc(100vh - 86px)}
.paleta{background:var(--s1);border-right:1px solid var(--ln);overflow:auto;padding:12px}
.paleta h4{margin:14px 4px 8px;font-size:var(--t-xs);color:var(--dm);font-weight:600}
.paleta h4:first-child{margin-top:2px}
.piezas{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.pieza{border:1px solid var(--ln);background:var(--s2);border-radius:10px;padding:8px 4px 6px;display:flex;flex-direction:column;align-items:center;gap:4px;cursor:grab;font-size:12px;font-weight:600;color:var(--md);user-select:none;touch-action:none}
.pieza:hover{border-color:var(--pr-b);background:var(--pr-s);color:var(--pr-d)}
.pieza svg{width:42px;height:32px}
.ed .plano-caja{margin:14px;border-radius:var(--r)}
.ed .plano-caja svg{cursor:default}
.props{background:var(--s1);border-left:1px solid var(--ln);overflow:auto;padding:14px;display:flex;flex-direction:column;gap:12px}
.props h3{margin:0;font-size:var(--t-h3)}
.props .ayuda{font-size:var(--t-xs);color:var(--dm);line-height:1.5}
.props kbd{font:500 11px 'IBM Plex Mono',monospace;background:var(--s3);border:1px solid var(--ln);border-radius:5px;padding:0 5px}
.sel-caja{fill:none;stroke:var(--pr);stroke-width:1.5;stroke-dasharray:5 4;pointer-events:none}
.tirador{fill:#fff;stroke:var(--pr);stroke-width:2;cursor:nwse-resize}
.tirador.rot{cursor:grab;fill:var(--pr)}
.ed .elem{cursor:move}
.ed .elem.sel .cuerpo,.ed .elem.sel rect,.ed .elem.sel ellipse{filter:drop-shadow(0 0 4px rgba(101,100,244,.6))}
.guardado{font-size:var(--t-xs);color:var(--dm)}
.guardado.sucio{color:var(--am-t);font-weight:600}

/* ══ Tablas (reservas, clientes) ══ */
.tabla{width:100%;border-collapse:collapse;font-size:var(--t-s)}
.tabla th{text-align:left;font-size:var(--t-xs);color:var(--dm);font-weight:600;padding:9px 10px;border-bottom:1px solid var(--ln)}
.tabla td{padding:10px;border-bottom:1px solid var(--ln2);vertical-align:middle}
.tabla tr:hover td{background:var(--s2)}
.tabla .num{text-align:right}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:18px}
.kpi{background:var(--s1);border:1px solid var(--ln);border-radius:var(--r);padding:14px 16px}
.kpi small{color:var(--dm);font-size:var(--t-xs);font-weight:500}
.kpi b{display:block;font-size:30px;letter-spacing:-.02em;line-height:1.1;margin-top:4px}
.kpi span{font-size:var(--t-xs);color:var(--dm)}

/* ══ Entrar ══ */
.puerta{min-height:100vh;display:grid;place-items:center;padding:16px;background:radial-gradient(1200px 600px at 20% -10%,#ecebff 0,transparent 60%),radial-gradient(900px 500px at 110% 110%,#e3e9ff 0,transparent 55%),var(--bg)}
.puerta .card{width:min(400px,100%);padding:28px}
.puerta h1{font-size:22px;margin:18px 0 4px}
.puerta p{color:var(--dm);margin:0 0 18px;font-size:var(--t-s)}
.puerta form{display:flex;flex-direction:column;gap:12px}

/* ══ Móvil ══ */
.menu-movil{display:none}
@media (max-width:1100px){
  .srv{grid-template-columns:280px 1fr}
  .ed{grid-template-columns:170px 1fr 240px}
}
@media (max-width:860px){
  .app{grid-template-columns:1fr}
  .side{position:fixed;inset:0 auto 0 0;width:260px;z-index:70;transform:translateX(-100%);transition:transform .2s;box-shadow:var(--sh3)}
  .side.abierta{transform:none}
  .menu-movil{display:inline-grid;place-items:center;width:36px;height:36px;border-radius:10px;border:1px solid var(--ln);background:var(--s1);cursor:pointer;font-size:18px}
  .srv{grid-template-columns:1fr;grid-template-rows:auto minmax(420px,62vh) auto;height:auto}
  .srv-top{padding:10px 16px}
  .cifras{margin-left:0;width:100%;justify-content:space-between}
  .lista{grid-row:3;border-right:0;border-top:1px solid var(--ln)}
  .lista .rs{padding-bottom:16px}
  .lienzo{grid-row:2}
  .plano-caja,.tl{margin:0 10px 10px}
  .salas{padding:8px 10px 0}
  .det{position:fixed;left:0;right:0;bottom:0;top:auto;width:auto;max-height:78vh;border-radius:var(--r-l) var(--r-l) 0 0;z-index:65}
  .reloj{left:10px;right:10px;justify-content:space-between}
  .reloj input[type=range]{flex:1;width:auto}
  .leyenda{display:none}
  .ph,.cont{padding-left:16px;padding-right:16px}
  .ed{grid-template-columns:1fr;grid-template-rows:auto minmax(380px,60vh) auto;height:auto}
  .paleta{border-right:0;border-bottom:1px solid var(--ln)}
  .piezas{grid-template-columns:repeat(auto-fill,minmax(74px,1fr))}
  .props{border-left:0;border-top:1px solid var(--ln)}
  .tabla .ocultable{display:none}
}

/* ══ Plano 3D ══ */
.plano-caja.en3d #plano{display:none}
.plano-caja.en3d .leyenda{background:rgba(255,255,255,.92)}
.plano-caja.en3d .zoom [data-z=in],.plano-caja.en3d .zoom [data-z=out]{display:none}
.lienzo3d{position:absolute;inset:0;width:100%!important;height:100%!important;display:block;touch-action:none;cursor:grab}
.lienzo3d:active{cursor:grabbing}
.etiquetas3d{position:absolute;inset:0;pointer-events:none}
.et3d{display:flex;flex-direction:column;align-items:center;gap:1px;padding:3px 8px;border-radius:8px;background:rgba(255,255,255,.94);border:1px solid var(--ln);box-shadow:0 2px 8px rgba(16,19,34,.12);font:600 12px 'Instrument Sans',sans-serif;color:var(--tx);white-space:nowrap;line-height:1.15}
.et3d small{font:500 10.5px 'IBM Plex Mono',monospace;color:var(--md)}
.et3d.deco{background:rgba(16,19,34,.55);color:#fff;border:0;font-weight:500;font-size:11px}
.et3d.st-reservada{border-color:var(--pr);color:var(--pr-d)}
.et3d.st-llegada{border-color:var(--am);background:var(--am-s)}
.et3d.st-sentada{background:var(--jd);border-color:var(--jd-t);color:#fff}.et3d.st-sentada small{color:#e4f7ef}
.et3d.st-tarde{background:var(--cr);border-color:var(--cr-t);color:#fff}.et3d.st-tarde small{color:#fdecea}
.et3d.st-reservada-prox{border:1.5px dashed var(--pr)}
.et3d.sel{outline:2.5px solid var(--tx)}
.salas .vista{display:inline-flex;gap:8px;align-items:center}
.salas .vista .seg button{padding:4px 11px;min-height:30px;font-size:12.5px}

/* Logo: «360» con el degradado violeta→cian del logotipo original */
.logo small em{background:linear-gradient(90deg,#9b3cf5 0%,#5b4cf2 45%,#1fb2ff 100%);-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:700}
.logo b{color:#0b0f24}
.logo small{font-weight:700;letter-spacing:-.01em}
.puerta .logo svg{width:48px;height:48px}.puerta .logo b{font-size:21px}.puerta .logo small{font-size:15px}

/* Pacing: la franja tiene mesa pero cocina va al límite (restaurante). Se puede forzar desde el panel. */
.horas button.pacing{border-color:var(--am-b);background:var(--am-s);color:var(--am-t)}
.horas button.pacing.on{background:var(--am);border-color:var(--am);color:#fff}
