[hidden]{display:none!important}
/* Infinity Leather · estilos del sistema (glassmorphism compacto, mobile-first)
   creador: a.Wong.la - l.a.aguilar.wong@gmail.com */
/* Layout: app compacta mobile-first. Barra superior de vidrio + navegación inferior flotante;
   en escritorio, riel lateral con el logo completo. Marca: lima Infinity sobre cuero negro / salvia clara. */
:root{
  color-scheme:dark;
  --bg:#0a0c0e; --bg2:#13171b; --ink:#eef1e6; --ink2:#a7af9a; --ink3:#747c6a;
  --lime:#c8e23a; --lime2:#9fbd22; --moss:#657c1c; --onlime:#11140a;
  --glass:rgba(24,28,33,.58); --glass2:rgba(255,255,255,.055); --glass3:rgba(255,255,255,.1);
  --line:rgba(255,255,255,.08); --line2:rgba(255,255,255,.15); --hi:rgba(255,255,255,.12);
  --blob1:rgba(200,226,58,.26); --blob2:rgba(101,124,28,.30); --blob3:rgba(244,169,186,.09);
  --shadow:0 18px 44px -22px rgba(0,0,0,.7);
  --paper:#ffffff; --paperInk:#15181c; --plate:rgba(255,255,255,.92);
  --ok:#5fcf8a; --warn:#f0b84a; --info:#5fb6e8; --bad:#f07070; --violet:#b39cf5;
  --c1:#86a012; --c2:#2f90ba; --c3:#d05f80; --c4:#b97818; --c5:#8270e0;
  --h0:rgba(255,255,255,.05); --h1:#3d4a14; --h2:#5e7414; --h3:#86a012; --h4:#b2cf2c; --h5:#d8ef6a;
  --display:'Sora','Hanken Grotesk',system-ui,sans-serif;
  --sans:'Hanken Grotesk',system-ui,-apple-system,'Segoe UI',sans-serif;
  --serif:'Bodoni Moda','Didot',Georgia,serif;
  --r:18px; --r2:12px; --ease:cubic-bezier(.23,1,.32,1); --pop:cubic-bezier(.34,1.56,.64,1);
  --nav-h:64px;
}
@media (prefers-color-scheme: light){ :root:not([data-theme="dark"]){
  color-scheme:light;
  --bg:#eef2de; --bg2:#e3e9c9; --ink:#1f2414; --ink2:#566048; --ink3:#7d866e;
  --lime:#9cb51f; --lime2:#7f9a12; --moss:#566d14; --onlime:#ffffff;
  --glass:rgba(255,255,255,.6); --glass2:rgba(255,255,255,.55); --glass3:rgba(255,255,255,.85);
  --line:rgba(45,53,22,.10); --line2:rgba(45,53,22,.18); --hi:rgba(255,255,255,.85);
  --blob1:rgba(163,181,44,.36); --blob2:rgba(101,124,28,.20); --blob3:rgba(226,132,155,.15);
  --shadow:0 18px 40px -26px rgba(45,53,22,.5); --plate:rgba(255,255,255,.75);
  --ok:#23925a; --warn:#b07a0c; --info:#1f78b0; --bad:#c43c3c; --violet:#6b57d6;
  --c1:#7f9a12; --c2:#1f86b8; --c3:#d0587a; --c4:#a8740a; --c5:#6b57d6;
  --h0:rgba(45,53,22,.06); --h1:#dfe8b4; --h2:#c3d67a; --h3:#a3bd36; --h4:#7f9a12; --h5:#566d14;
}}
:root[data-theme="light"]{
  color-scheme:light;
  --bg:#eef2de; --bg2:#e3e9c9; --ink:#1f2414; --ink2:#566048; --ink3:#7d866e;
  --lime:#9cb51f; --lime2:#7f9a12; --moss:#566d14; --onlime:#ffffff;
  --glass:rgba(255,255,255,.6); --glass2:rgba(255,255,255,.55); --glass3:rgba(255,255,255,.85);
  --line:rgba(45,53,22,.10); --line2:rgba(45,53,22,.18); --hi:rgba(255,255,255,.85);
  --blob1:rgba(163,181,44,.36); --blob2:rgba(101,124,28,.20); --blob3:rgba(226,132,155,.15);
  --shadow:0 18px 40px -26px rgba(45,53,22,.5); --plate:rgba(255,255,255,.75);
  --ok:#23925a; --warn:#b07a0c; --info:#1f78b0; --bad:#c43c3c; --violet:#6b57d6;
  --c1:#7f9a12; --c2:#1f86b8; --c3:#d0587a; --c4:#a8740a; --c5:#6b57d6;
  --h0:rgba(45,53,22,.06); --h1:#dfe8b4; --h2:#c3d67a; --h3:#a3bd36; --h4:#7f9a12; --h5:#566d14;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;font-family:var(--sans);font-size:13.5px;line-height:1.42;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;overflow-x:hidden;-webkit-tap-highlight-color:transparent}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:60;background:var(--bg)}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:0;background:none;touch-action:manipulation}
svg.i{width:17px;height:17px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
::selection{background:var(--lime);color:var(--onlime)}
.num{font-variant-numeric:tabular-nums}
a{color:inherit}

/* Fondo infinito vivo */
.bg{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none;background:var(--bg)}
.blob{position:absolute;width:70vmax;height:70vmax;border-radius:50%}
.b1{left:-24vmax;top:-26vmax;background:radial-gradient(closest-side,var(--blob1),transparent);animation:drift 26s ease-in-out infinite alternate}
.b2{right:-28vmax;bottom:-30vmax;background:radial-gradient(closest-side,var(--blob2),transparent);animation:drift 32s ease-in-out -9s infinite alternate-reverse}
.b3{left:30vmax;top:34vmax;width:40vmax;height:40vmax;background:radial-gradient(closest-side,var(--blob3),transparent)}
.inf{position:absolute;left:50%;top:50%;width:150vmax;margin:-50vmax 0 0 -75vmax}
.inf use{fill:none;vector-effect:non-scaling-stroke;stroke-linecap:round}
.i1{animation:sway1 34s ease-in-out infinite alternate}
.i2{width:90vmax;margin:-6vmax 0 0 -10vmax;animation:sway2 26s ease-in-out infinite alternate}
.inf .base{stroke:var(--lime);stroke-width:1.2;opacity:.16}
.inf .run{stroke:var(--lime);stroke-width:3;stroke-dasharray:120 880;animation:flow 14s linear infinite;opacity:.6}
.i2 .base,.i2 .run{stroke:var(--moss)}.i2 .run{stroke-dasharray:80 920;animation:flow 10s linear -3s infinite reverse}
@keyframes flow{to{stroke-dashoffset:-1000}}
@keyframes drift{to{transform:translate3d(10vmax,8vmax,0) scale(1.1)}}
@keyframes sway1{from{transform:rotate(-14deg)}to{transform:rotate(-4deg) translate3d(3vmax,2vmax,0)}}
@keyframes sway2{from{transform:rotate(10deg)}to{transform:rotate(22deg) translate3d(-4vmax,-3vmax,0)}}

/* Vidrio */
.glass{position:relative;background:var(--glass);-webkit-backdrop-filter:blur(20px) saturate(150%);backdrop-filter:blur(20px) saturate(150%);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow),inset 0 1px 0 var(--hi)}

/* Estructura */
.app{position:relative;z-index:1;min-height:100%;padding-left:max(10px,env(safe-area-inset-left,0px));padding-right:max(10px,env(safe-area-inset-right,0px));padding-block:0 calc(var(--nav-h) + 26px + env(safe-area-inset-bottom,0px))}
.side{display:none}
.main{min-width:0;display:flex;flex-direction:column;gap:10px;max-width:1240px;margin:0 auto}
.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:50;display:flex;align-items:center;gap:10px;margin:0 -10px;padding:8px max(12px,env(safe-area-inset-right,0px)) 8px max(12px,env(safe-area-inset-left,0px));background:color-mix(in srgb,var(--bg) 72%,transparent);-webkit-backdrop-filter:blur(18px) saturate(150%);backdrop-filter:blur(18px) saturate(150%);border-bottom:1px solid var(--line)}
.top .mk{width:40px;height:auto;flex:none;filter:drop-shadow(0 2px 6px rgba(0,0,0,.3))}
.top .tl{min-width:0;margin-right:auto}
.top h1{margin:0;font-family:var(--display);font-weight:700;font-size:1.08rem;letter-spacing:-.02em;line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.eyebrow{font-size:.62rem;font-weight:750;letter-spacing:.12em;text-transform:uppercase;color:var(--lime);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top .acts{display:flex;gap:6px;flex:none}
.view{display:none;flex-direction:column;gap:10px;animation:viewIn .4s var(--ease) both}
.view.on{display:flex}
@keyframes viewIn{from{opacity:.4;transform:translateY(8px)}}

/* Navegación inferior */
.mnav{position:fixed;z-index:80;left:max(8px,env(safe-area-inset-left,0px));right:max(8px,env(safe-area-inset-right,0px));bottom:calc(8px + env(safe-area-inset-bottom,0px));height:var(--nav-h);padding:6px;display:flex;gap:2px;border-radius:22px}
.mnav a{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border-radius:16px;color:var(--ink2);text-decoration:none;font-size:.62rem;font-weight:750;position:relative;transition:background .25s,color .25s}
.mnav a svg{width:20px;height:20px}
.mnav a.on{background:linear-gradient(135deg,var(--lime),var(--lime2));color:var(--onlime);box-shadow:0 8px 18px -10px var(--lime)}
.mnav a .ct,.nav a .ct{position:absolute;top:3px;right:calc(50% - 22px);min-width:17px;height:17px;padding:0 5px;border-radius:99px;background:var(--warn);color:#1b1405;font-size:.6rem;font-weight:800;display:grid;place-items:center}

/* Botones */
.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:38px;padding:0 14px;border-radius:12px;font-weight:700;font-size:.84rem;white-space:nowrap;overflow:hidden;isolation:isolate;transition:transform .18s var(--ease),background .25s}
.btn:active{transform:scale(.96)}
.btn-p{background:linear-gradient(135deg,var(--lime),var(--lime2));color:var(--onlime);box-shadow:0 10px 22px -14px var(--lime)}
.btn-p::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.45) 50%,transparent 65%);transform:translateX(-120%);animation:shine 4.5s ease-in-out 1.5s infinite}
@keyframes shine{40%,100%{transform:translateX(120%)}}
.btn-g{background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line2);color:var(--ink)}
.btn-g:hover{background:var(--glass3)}
.btn-d{background:color-mix(in srgb,var(--bad) 14%,transparent);color:var(--bad);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--bad) 35%,transparent)}
.btn-s{min-height:30px;padding:0 10px;font-size:.76rem;border-radius:9px}
.btn[disabled]{opacity:.45;pointer-events:none}
.ibtn{display:grid;place-items:center;width:36px;height:36px;border-radius:11px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line);flex:none}
.ibtn.p{background:linear-gradient(135deg,var(--lime),var(--lime2));color:var(--onlime);box-shadow:0 8px 18px -10px var(--lime)}

/* Controles */
.seg{display:inline-flex;padding:3px;border-radius:12px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line);gap:2px;max-width:100%;overflow-x:auto;scrollbar-width:none}
.seg::-webkit-scrollbar{display:none}
.seg button{padding:6px 11px;border-radius:9px;font-weight:650;font-size:.76rem;color:var(--ink2);white-space:nowrap;transition:background .25s,color .25s}
.seg button.on{background:var(--lime);color:var(--onlime)}
.fld{display:flex;flex-direction:column;gap:4px;min-width:0}
.fld>span{font-size:.64rem;font-weight:750;letter-spacing:.08em;text-transform:uppercase;color:var(--ink2);display:flex;gap:6px;align-items:center}
.inp{width:100%;height:40px;padding:0 11px;border-radius:11px;border:0;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line2);outline:0;transition:box-shadow .2s;min-width:0;font-size:16px}
@media (min-width:901px){.inp{font-size:.88rem;height:38px}}
textarea.inp{height:auto;padding:9px 11px;resize:vertical}
.inp:focus{box-shadow:inset 0 0 0 2px var(--lime)}
.inp.bad{box-shadow:inset 0 0 0 2px var(--bad)}
.inp[readonly]{opacity:.75}
select.inp{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink2) 50%),linear-gradient(135deg,var(--ink2) 50%,transparent 50%);background-position:calc(100% - 16px) 50%,calc(100% - 11px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:28px}
select.inp option{background:var(--bg2);color:var(--ink)}
.search{position:relative;flex:1;min-width:160px}
.search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--ink3)}
.search .inp{padding-left:36px}
.bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding:10px}
.bar .inp.w{width:auto;flex:1 1 140px}
.toggle{display:inline-flex;align-items:center;gap:7px;font-size:.8rem;font-weight:650;cursor:pointer;white-space:nowrap}
.toggle input{accent-color:var(--lime);width:16px;height:16px}
.sum{display:flex;gap:6px 12px;flex-wrap:wrap;align-items:center;font-size:.8rem;color:var(--ink2);padding:0 4px}
.sum b{color:var(--ink)}

/* Píldoras de estado */
.pill{display:inline-flex;align-items:center;gap:5px;padding:2px 9px 2px 7px;border-radius:99px;font-size:.7rem;font-weight:750;white-space:nowrap;background:color-mix(in srgb,var(--pc) 15%,transparent);color:var(--pc);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--pc) 30%,transparent)}
.pill::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--pc)}
.pill.s-registrar,.pill.s-confirmar{--pc:var(--warn)}.pill.s-registrar::before,.pill.s-confirmar::before{border-radius:2px}
.pill.s-pendiente{--pc:var(--warn)}
.pill.s-registrado{--pc:var(--info)}.pill.s-registrado::before{border-radius:2px}
.pill.s-ruta,.pill.s-transito{--pc:var(--info)}.pill.s-ruta::before,.pill.s-transito::before{border-radius:1px;transform:rotate(45deg)}
.pill.s-informado{--pc:var(--violet)}
.pill.s-destino{--pc:var(--violet)}.pill.s-destino::before{border-radius:50% 50% 50% 0}
.pill.s-entregado{--pc:var(--ok)}
.pill.s-otro{--pc:var(--ink2)}
.pill.s-retorno,.pill.s-perdida{--pc:var(--bad)}.pill.s-retorno::before{border-radius:0;width:8px;height:2px}.pill.s-perdida::before{border-radius:0;clip-path:polygon(50% 0,100% 100%,0 100%)}
.pill.ok{--pc:var(--ok)}.pill.warn{--pc:var(--warn)}.pill.bad{--pc:var(--bad)}.pill.info{--pc:var(--info)}
.chip{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:8px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line);font-size:.7rem;font-weight:650;white-space:nowrap;color:var(--ink2)}
.chip .dot{width:7px;height:7px;border-radius:3px;background:var(--cc,var(--lime))}
.code{font-family:var(--display);font-weight:600;font-size:.74rem;letter-spacing:.02em}

/* KPI */
.hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;padding:14px 16px;overflow:hidden;background:linear-gradient(150deg,color-mix(in srgb,var(--lime) 22%,var(--glass)),var(--glass) 62%)}
.hero .hv{font-family:var(--display);font-weight:800;font-size:2rem;letter-spacing:-.04em;line-height:1;font-variant-numeric:tabular-nums;margin:4px 0 6px}
.hero .hv small{font-size:.5em;font-weight:600;color:var(--ink2);margin-right:3px}
.hero p{margin:0;font-size:.78rem;color:var(--ink2)}
.hero .spark{display:block;height:34px;margin-top:8px;max-width:340px}
.ring{position:relative;width:96px;height:96px}
.ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.ring .rv{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--display);line-height:1}
.ring .rv b{font-size:1.2rem;font-weight:800}.ring .rv span{font-size:.58rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink2);margin-top:3px}
.kpis{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.kpi{padding:11px 12px;display:flex;flex-direction:column;gap:3px;min-width:0;overflow:hidden;border-radius:16px}
.kpi .k{font-size:.62rem;font-weight:750;letter-spacing:.08em;text-transform:uppercase;color:var(--ink2);display:flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi .k svg{width:14px;height:14px;color:var(--lime);flex:none}
.kpi .v{font-family:var(--display);font-weight:750;font-size:1.22rem;letter-spacing:-.03em;line-height:1.1;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi .v small{font-size:.6em;font-weight:600;color:var(--ink2);margin-right:2px}
.kpi .d{font-size:.68rem;color:var(--ink3);display:flex;gap:5px;align-items:center;flex-wrap:wrap;min-height:16px}
.delta{display:inline-flex;align-items:center;gap:2px;font-weight:800;padding:0 6px;border-radius:99px;font-size:.66rem}
.delta.up{color:var(--ok);background:color-mix(in srgb,var(--ok) 14%,transparent)}
.delta.dn{color:var(--bad);background:color-mix(in srgb,var(--bad) 14%,transparent)}

/* Paneles */
.grid{display:grid;grid-template-columns:minmax(0,1fr);gap:10px}
.panel{padding:13px 14px;display:flex;flex-direction:column;gap:10px;min-width:0}
.ph{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}
.ph h3{margin:0;font-family:var(--display);font-weight:650;font-size:.92rem;letter-spacing:-.02em;display:flex;align-items:center;gap:7px}
.ph h3 svg{color:var(--lime)}
.ph p{margin:1px 0 0;font-size:.7rem;color:var(--ink3)}
.ph .r{margin-left:auto;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.chart{position:relative;width:100%;min-width:0}
.chart svg{display:block;width:100%;overflow:visible}
.chart text,.donut text{font-family:var(--sans);font-size:10.5px;fill:var(--ink3)}
.legend{display:flex;gap:10px;flex-wrap:wrap;font-size:.72rem;color:var(--ink2)}
.legend span{display:inline-flex;align-items:center;gap:5px}
.legend i{width:9px;height:9px;border-radius:3px;background:var(--cc)}
.tip{position:fixed;z-index:200;pointer-events:none;padding:8px 11px;border-radius:11px;background:var(--bg2);color:var(--ink);box-shadow:0 14px 30px -10px rgba(0,0,0,.5),inset 0 0 0 1px var(--line2);font-size:.75rem;line-height:1.35;opacity:0;transform:translateY(4px);transition:opacity .15s,transform .15s;max-width:230px}
.tip.on{opacity:1;transform:none}
.tip b{font-family:var(--display);font-size:.88rem}
.donutwrap{display:grid;grid-template-columns:130px minmax(0,1fr);gap:14px;align-items:center}
.donut{position:relative;width:130px;height:130px}
.donut svg{width:100%;height:100%}
.donut .dc{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--display);line-height:1;pointer-events:none}
.donut .dc b{font-size:1.4rem;font-weight:800}.donut .dc span{font-size:.58rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink2);margin-top:4px}
.dleg{display:flex;flex-direction:column;gap:7px;min-width:0}
.dleg div{display:grid;grid-template-columns:10px minmax(0,1fr) auto auto;gap:7px;align-items:center;font-size:.76rem}
.dleg i{width:10px;height:10px;border-radius:3px;background:var(--cc)}
.dleg span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.dleg b{font-family:var(--display);font-variant-numeric:tabular-nums}
.dleg small{color:var(--ink3);font-size:.68rem;min-width:30px;text-align:right}
.blist{display:flex;flex-direction:column;gap:9px}
.brow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 10px;align-items:center}
.brow .bl{font-size:.78rem;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;gap:7px;align-items:center}
.brow .bl small{color:var(--ink3);font-weight:500;overflow:hidden;text-overflow:ellipsis}
.brow .bv{font-family:var(--display);font-weight:650;font-size:.78rem;font-variant-numeric:tabular-nums}
.brow .bt{grid-column:1/-1;height:7px;border-radius:99px;background:var(--h0);overflow:hidden}
.brow .bt i{display:block;height:100%;border-radius:99px;background:var(--cc,linear-gradient(90deg,var(--lime2),var(--lime)));transform-origin:left;animation:grow .9s var(--ease) both}
@keyframes grow{from{transform:scaleX(0)}}
.tree{display:flex;flex-wrap:wrap;gap:3px;height:150px;border-radius:12px;overflow:hidden}
.tree div{position:relative;display:flex;flex-direction:column;justify-content:flex-end;padding:7px 8px;min-width:0;overflow:hidden;background:var(--tc);color:#fff;animation:fadeIn .6s var(--ease) both}
.tree div b{font-family:var(--display);font-size:.78rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.35)}
.tree div span{font-size:.66rem;opacity:.9;white-space:nowrap;text-shadow:0 1px 2px rgba(0,0,0,.35)}
.pipe{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.pipe button{min-width:0;display:flex;flex-direction:column;gap:4px;align-items:flex-start;padding:9px;border-radius:12px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line);text-align:left}
.pipe b{font-family:var(--display);font-size:1.15rem;font-weight:750;font-variant-numeric:tabular-nums}
.pipe .pill{font-size:.62rem;max-width:100%;overflow:hidden}
.heat{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,1fr);gap:2px}
.heat i{aspect-ratio:1;border-radius:2px;background:var(--h0)}
.heat i[data-l="1"]{background:var(--h1)}.heat i[data-l="2"]{background:var(--h2)}.heat i[data-l="3"]{background:var(--h3)}.heat i[data-l="4"]{background:var(--h4)}.heat i[data-l="5"]{background:var(--h5)}
.heatwrap{display:grid;grid-template-columns:auto minmax(0,1fr);gap:5px;font-size:.6rem;color:var(--ink3)}
.heatwrap .dn{display:grid;grid-template-rows:repeat(7,1fr);gap:2px;align-items:center}
.alerts{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
.alerts::-webkit-scrollbar{display:none}
.alert{flex:none;display:inline-flex;align-items:center;gap:7px;padding:7px 11px;border-radius:12px;background:var(--glass);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:inset 0 0 0 1px var(--line2);font-size:.74rem;font-weight:700;text-decoration:none;color:inherit}
.alert svg{width:15px;height:15px}
.alert.w svg{color:var(--warn)}.alert.i svg{color:var(--info)}.alert.b svg{color:var(--bad)}.alert.o svg{color:var(--ok)}

/* Listas */
.tbl-wrap{overflow-x:auto;border-radius:var(--r2)}
table.tbl{width:100%;border-collapse:collapse;font-size:.8rem}
.tbl th{text-align:left;font-size:.62rem;font-weight:750;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3);padding:9px 10px;border-bottom:1px solid var(--line2);white-space:nowrap}
.tbl td{padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap;vertical-align:middle}
.tbl tr:hover td{background:var(--glass2)}
.tbl td.r,.tbl th.r{text-align:right;font-variant-numeric:tabular-nums}
.tbl tr.click{cursor:pointer}
.olist{display:flex;flex-direction:column;gap:7px}
.row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:4px 10px;align-items:center;padding:10px 11px;border-radius:15px;background:var(--glass);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);box-shadow:inset 0 0 0 1px var(--line),inset 0 1px 0 var(--hi);cursor:pointer;transition:transform .2s var(--ease)}
.row:active{transform:scale(.99)}
.row .dt{grid-row:span 2;display:flex;flex-direction:column;align-items:center;justify-content:center;width:44px;height:44px;border-radius:12px;background:var(--glass3);font-family:var(--display);line-height:1}
.row .dt b{font-size:1rem}.row .dt small{font-size:.56rem;text-transform:uppercase;color:var(--ink2);letter-spacing:.06em;margin-top:2px}
.row .who{min-width:0}
.row .who b{display:block;font-weight:700;font-size:.86rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .who>span{font-size:.72rem;color:var(--ink3);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .amt{text-align:right;font-family:var(--display);font-weight:750;font-size:.92rem;font-variant-numeric:tabular-nums;white-space:nowrap}
.row .amt small{display:block;font-family:var(--sans);font-size:.64rem;font-weight:700;color:var(--warn)}
.row .amt small.ok{color:var(--ok)}
.row .meta{grid-column:2/-1;display:flex;gap:4px;flex-wrap:wrap;align-items:center;min-width:0}
.row .meta select{height:26px;width:auto;padding:0 24px 0 8px;font-size:.72rem;font-weight:750;border-radius:99px;color:var(--pc);background-color:color-mix(in srgb,var(--pc) 13%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--pc) 30%,transparent);background-position:calc(100% - 13px) 50%,calc(100% - 9px) 50%}
.more{align-self:center}
.empty{display:flex;flex-direction:column;align-items:center;gap:5px;padding:26px 14px;text-align:center;color:var(--ink2)}
.empty b{font-family:var(--display);font-size:.98rem;color:var(--ink)}

/* Productos */
.pgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.pcard{display:flex;flex-direction:column;gap:6px;padding:9px;border-radius:15px;background:var(--glass);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);box-shadow:inset 0 0 0 1px var(--line),inset 0 1px 0 var(--hi);cursor:pointer}
.pcard .sw{position:relative;aspect-ratio:4/3;border-radius:11px;background:radial-gradient(120% 90% at 30% 20%,var(--glass3),transparent),var(--h0);display:grid;place-items:center;overflow:hidden}
.pcard .sw svg{width:70%;height:auto;filter:drop-shadow(0 8px 12px rgba(0,0,0,.3))}
.pcard .stk{position:absolute;top:6px;right:6px}
.pcard .nm{font-weight:700;font-size:.76rem;line-height:1.25;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.5em}
.pcard .meta{display:flex;justify-content:space-between;align-items:center;gap:5px;font-size:.7rem;color:var(--ink3)}
.pcard .pr{font-family:var(--display);font-weight:750;color:var(--ink);font-size:.85rem}
.stkb{display:inline-flex;align-items:center;gap:4px;padding:1px 7px;border-radius:99px;font-size:.66rem;font-weight:800;background:var(--bg2);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line2)}
.stkb::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ok)}
.stkb.low::before{background:var(--warn)}.stkb.out::before{background:var(--bad);border-radius:1px}
.sws{display:inline-grid;place-items:center;flex:none;width:34px;height:26px;border-radius:8px;background:radial-gradient(circle at 35% 30%,rgba(255,255,255,.22),rgba(255,255,255,.07));box-shadow:inset 0 0 0 1px var(--line)}.sws svg{width:28px;height:21px}

/* Tarjetas genéricas (proveedores, altas, más) */
.cards{display:grid;grid-template-columns:minmax(0,1fr);gap:8px}
.card{padding:12px;border-radius:16px;display:flex;flex-direction:column;gap:8px;cursor:pointer}
.card .ct{display:flex;align-items:center;gap:10px}
.card .av{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;flex:none;font-family:var(--display);font-weight:800;color:var(--onlime);background:linear-gradient(135deg,var(--lime),var(--lime2))}
.card .ct b{display:block;font-weight:750;font-size:.9rem}
.card .ct span{display:block;font-size:.72rem;color:var(--ink3)}
.card .ct .r{margin-left:auto;text-align:right;font-family:var(--display);font-weight:750;font-variant-numeric:tabular-nums}
.card .ct .r small{display:block;font-family:var(--sans);font-size:.66rem;font-weight:600;color:var(--ink3)}
.stats3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.stats3 div{padding:7px 8px;border-radius:10px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line)}
.stats3 span{display:block;font-size:.58rem;font-weight:750;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3)}
.stats3 b{font-family:var(--display);font-size:.84rem;font-variant-numeric:tabular-nums}
.hub{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.hub a,.hub button{display:flex;flex-direction:column;gap:6px;padding:14px;border-radius:16px;text-decoration:none;text-align:left;color:inherit}
.hub svg.i{width:24px;height:24px;color:var(--lime)}
.hub b{font-family:var(--display);font-size:.92rem}
.hub span{font-size:.72rem;color:var(--ink3)}
.altsec{display:flex;flex-direction:column;gap:8px}
.alts{display:flex;flex-wrap:wrap;gap:6px}
.alt{display:inline-flex;align-items:center;gap:6px;padding:5px 6px 5px 10px;border-radius:10px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line);font-size:.78rem;font-weight:650;text-transform:capitalize;cursor:pointer}
.alt small{font-size:.64rem;color:var(--ink3);font-weight:700;padding:1px 6px;border-radius:99px;background:var(--glass3)}
.alt i.sw{width:12px;height:12px;border-radius:4px;background:var(--cc);box-shadow:inset 0 0 0 1px rgba(255,255,255,.3)}
.addalt{display:flex;gap:6px}
.addalt .inp{height:34px;font-size:16px}

/* Modal (hoja inferior en móvil) */
.ov{position:fixed;inset:0;z-index:120;display:none;align-items:flex-end;justify-content:center;background:rgba(5,7,8,.5);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}
.ov.on{display:flex;animation:fadeIn .2s ease both}
@keyframes fadeIn{from{opacity:0}}
.modal{width:100%;max-height:94%;display:flex;flex-direction:column;background:color-mix(in srgb,var(--bg2) 88%,transparent);border-radius:22px 22px 0 0;animation:sheet .38s var(--ease) both;padding-bottom:env(safe-area-inset-bottom,0px)}
@keyframes sheet{from{transform:translateY(40px);opacity:.3}}
.mh{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line)}
.mh h3{margin:0;font-family:var(--display);font-weight:700;font-size:1rem;letter-spacing:-.02em}
.mh .x{margin-left:auto}
.mb{padding:12px 14px;overflow:auto;display:flex;flex-direction:column;gap:12px;overscroll-behavior:contain}
.mf{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:10px 14px;border-top:1px solid var(--line)}
.mf .sp{margin-right:auto}
.tot{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;width:100%}
.tot div{display:flex;flex-direction:column;padding:6px 8px;border-radius:10px;background:var(--glass2)}
.tot span{font-size:.58rem;font-weight:750;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3)}
.tot b{font-family:var(--display);font-size:.92rem;font-variant-numeric:tabular-nums;white-space:nowrap}
.fgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
.fgrid .s2{grid-column:1/-1}
.sect{font-family:var(--display);font-weight:650;font-size:.8rem;display:flex;align-items:center;gap:7px;color:var(--ink)}
.sect svg{color:var(--lime)}
.sect::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--line2),transparent)}
.found{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:11px;font-size:.76rem;font-weight:650}
.found.ok{background:color-mix(in srgb,var(--ok) 12%,transparent);color:var(--ok)}
.found.new{background:var(--glass2);color:var(--ink2)}
.lines{display:flex;flex-direction:column;gap:7px}
.line{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:7px;align-items:end;padding:9px;border-radius:13px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line)}
.line .c6{grid-column:1/-1}.line .c2{grid-column:span 2}.line .c3{grid-column:span 3}.line .c4{grid-column:span 4}.line .c5{grid-column:span 5}.line .c1{grid-column:span 1}
.line .pinfo{grid-column:1/-1;font-size:.7rem;color:var(--ink3);display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.line .ibtn{width:38px;height:38px}
.ac{position:relative}
.acl{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:10;max-height:260px;overflow:auto;padding:4px;border-radius:13px;background:var(--bg2);box-shadow:0 18px 40px -12px rgba(0,0,0,.55),inset 0 0 0 1px var(--line2);display:none}
.acl.on{display:block}
.aci{display:flex;align-items:center;gap:9px;width:100%;padding:7px 8px;border-radius:9px;text-align:left}
.aci:hover,.aci.on{background:var(--glass3)}
.aci .t{min-width:0;flex:1}
.aci .t b{display:block;font-size:.8rem}
.aci .t span{display:block;font-size:.7rem;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.aci .r{font-size:.72rem;text-align:right;color:var(--ink2);white-space:nowrap}

/* Rótulos */
.lab-grid{display:grid;gap:8px;grid-template-columns:minmax(0,1fr)}
.lab{position:relative;display:flex;gap:9px;padding:10px 10px 10px 5px;border-radius:10px;background:var(--paper);color:var(--paperInk);box-shadow:0 12px 26px -18px rgba(0,0,0,.6);font-family:'Arial Narrow','Roboto Condensed',var(--sans);transition:opacity .2s}
.lab.off{opacity:.35}
.lab .vert{writing-mode:vertical-rl;transform:rotate(180deg);font-weight:800;font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;border-right:1.5px dashed #c9cfb4;padding-left:5px;display:flex;align-items:center;justify-content:center;color:#3c4422;white-space:nowrap}
.lab .lc{min-width:0;flex:1;display:flex;flex-direction:column;gap:1px;font-size:.8rem;line-height:1.25}
.lab .big{font-size:1.05rem;font-weight:800}
.lab .nm{font-weight:800}
.lab .tag{display:inline-block;align-self:flex-start;padding:1px 6px;border-radius:5px;background:#e9efcf;color:#3c4a0c;font-weight:800;font-size:.68rem}
.lab .qr{width:76px;height:76px;align-self:center;image-rendering:pixelated}
.lab .chk{position:absolute;top:7px;right:7px;width:18px;height:18px;accent-color:#7f9a12}
.lab .cobra{white-space:nowrap;font-size:.76rem;margin-top:3px;padding-top:3px;border-top:1.5px dashed #d6dcc2;display:flex;justify-content:space-between;gap:8px;font-weight:800}
.lab .addr{}

/* Toast */
.toast{position:fixed;left:50%;bottom:calc(var(--nav-h) + 22px + env(safe-area-inset-bottom,0px));z-index:150;transform:translate(-50%,20px);opacity:0;padding:10px 15px;border-radius:13px;background:var(--bg2);color:var(--ink);box-shadow:0 18px 40px -14px rgba(0,0,0,.55),inset 0 0 0 1px var(--line2);font-weight:650;font-size:.82rem;transition:opacity .25s,transform .35s var(--pop);pointer-events:none;max-width:calc(100vw - 32px)}
.toast.on{opacity:1;transform:translate(-50%,0)}

/* ===== Escritorio ===== */
@media (min-width:640px){
  .kpis{grid-template-columns:repeat(4,minmax(0,1fr))}
  .pgrid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}
  .cards{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hub{grid-template-columns:repeat(3,minmax(0,1fr))}
  .lab-grid.sh{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
  .lab-grid.mo{grid-template-columns:repeat(auto-fill,minmax(330px,1fr))}
  .fgrid{grid-template-columns:repeat(4,minmax(0,1fr))}.fgrid .s2{grid-column:span 2}.fgrid .s4{grid-column:1/-1}
  .ov{align-items:center;padding:20px}
  .modal{width:min(820px,100%);max-height:100%;border-radius:22px;animation:pop .35s var(--pop) both}
  .modal.sm{width:min(500px,100%)}.modal.lg{width:min(980px,100%)}
  @keyframes pop{from{opacity:0;transform:translateY(16px) scale(.97)}}
}
@media (min-width:900px){
  :root{--nav-h:0px}
  .app{display:grid;grid-template-columns:220px minmax(0,1fr);gap:16px;padding-block:14px 30px;padding-left:max(14px,env(safe-area-inset-left,0px));padding-right:max(14px,env(safe-area-inset-right,0px))}
  .side{display:flex;position:sticky;top:14px;height:calc(100vh - 28px);flex-direction:column;gap:4px;padding:14px 12px}
  .brand{display:grid;place-items:center;padding:12px 10px;border-radius:16px;background:var(--plate);margin-bottom:10px;box-shadow:inset 0 0 0 1px var(--line)}
  .brand img{width:100%;max-width:170px;height:auto}
  .nav{display:flex;flex-direction:column;gap:2px}
  .nav a{position:relative;display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:12px;color:var(--ink2);text-decoration:none;font-weight:650;font-size:.86rem;transition:background .25s,color .25s}
  .nav a:hover{background:var(--glass2);color:var(--ink)}
  .nav a.on{background:linear-gradient(135deg,var(--lime),var(--lime2));color:var(--onlime);box-shadow:0 10px 22px -12px var(--lime)}
  .nav a .ct{position:static;margin-left:auto}
  .sfoot{margin-top:auto;display:flex;flex-direction:column;gap:7px;padding-top:10px;border-top:1px solid var(--line)}
  .dstate{display:flex;align-items:center;gap:7px;font-size:.72rem;color:var(--ink2)}
  .dstate i{width:8px;height:8px;border-radius:50%;background:var(--warn)}
  .dstate.cloud i{background:var(--ok)}
  .credit{font-size:.64rem;color:var(--ink3)}
  .mnav{display:none}
  .top{position:static;margin:0;border-radius:var(--r);border:1px solid var(--line);background:var(--glass);padding:10px 14px}
  .top .mk{display:none}
  .top h1{font-size:1.3rem}
  .main{gap:14px}
  .view{gap:14px}
  .grid.g2{grid-template-columns:minmax(0,1.55fr) minmax(0,1fr)}
  .grid.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
  .grid.g2e{grid-template-columns:repeat(2,minmax(0,1fr))}
  .kpi .v{font-size:1.45rem}
  .hero .hv{font-size:2.5rem}
  .cards{grid-template-columns:repeat(3,minmax(0,1fr))}
  .lab-grid.sh{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
  .toast{bottom:28px}
}
@media (max-width:899px){.side{display:none!important}.top .acts .lbl{display:none}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}


/* ===== Mascota Infi ===== */
.petdock{position:fixed;z-index:90;left:0;top:0;width:132px;height:138px;touch-action:none;user-select:none;-webkit-user-select:none;transition:transform 2.4s linear;will-change:transform;contain:layout style}
.petdock.drag{transition:none}.petdock.hid{display:none}
.pwalk{position:absolute;inset:0;transition:transform .3s var(--ease)}
.pwalk.flip{transform:scaleX(-1)}
.pbody{position:absolute;inset:0;transform-origin:50% 100%;cursor:grab;animation:pBreathe 3.4s ease-in-out infinite;will-change:transform}
.petdock.drag .pbody{cursor:grabbing}
.pshadow{position:absolute;left:16%;right:16%;bottom:-3px;height:9px;border-radius:50%;background:radial-gradient(closest-side,rgba(0,0,0,.38),transparent)}
.pcan{position:absolute;left:0;right:0;bottom:0;margin:auto;width:100%;aspect-ratio:445/460}
.pcan img{position:absolute;pointer-events:none;-webkit-user-drag:none;user-select:none}
.pcan .l-base{left:0;top:0;width:100%;height:100%}
.pcan .l-spr{left:50%;bottom:0;transform:translateX(-50%);max-width:118%;opacity:0}
.pcan.spr .l-spr{opacity:1}.pcan.spr .l-base,.pcan.spr .l-face,.pcan.spr .l-props{opacity:0}
.pcan .l-face{opacity:0}.pcan.fc .l-face{opacity:1}
.pcan svg{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.pcan .pp,.pcan .fx{display:none}
.pcan[data-props~="phones"] .pp-phones,.pcan[data-props~="book"] .pp-book,.pcan[data-props~="fish"] .pp-fish,.pcan[data-props~="mug"] .pp-mug,.pcan[data-props~="laptop"] .pp-laptop{display:inline}
.pcan[data-fx~="notes"] .fx-notes,.pcan[data-fx~="zzz"] .fx-zzz,.pcan[data-fx~="hearts"] .fx-hearts,.pcan[data-fx~="conf"] .fx-conf,.pcan[data-fx~="spark"] .fx-spark,.pcan[data-fx~="yarn"] .fx-yarn,.pcan[data-fx~="fly"] .fx-fly,.pcan[data-fx~="think"] .fx-think,.pcan[data-fx~="steam"] .fx-steam,.pcan[data-fx~="nam"] .fx-nam,.pcan[data-fx~="type"] .fx-type,.pcan[data-fx~="bang"] .fx-bang{display:inline}
.l-lids .lid{transform-box:fill-box;transform-origin:50% 0;transform:scaleY(0);transition:transform .11s ease-in}
.pcan.blink .l-lids .lid{transform:scaleY(1)}
.pcan[data-lids="closed"] .l-lids .lid{transform:scaleY(1);transition-duration:.6s}
.pcan[data-lids="half"] .l-lids .lid{transform:scaleY(.55);transition-duration:.5s}
@keyframes pBreathe{0%,100%{transform:scale(1)}50%{transform:scale(1.012,.988)}}
.pbody[data-a="groove"]{animation:pGroove .52s ease-in-out infinite alternate}
@keyframes pGroove{from{transform:rotate(-4deg)}to{transform:rotate(4deg) translateY(-4px)}}
.pbody[data-a="read"]{animation:pRead 4s ease-in-out infinite}
@keyframes pRead{0%,100%{transform:rotate(-1.5deg)}50%{transform:rotate(1.5deg)}}
.pbody[data-a="chomp"]{animation:pChomp .34s ease-in-out infinite}
@keyframes pChomp{50%{transform:translateY(-3px)}}
.pbody[data-a="sleep"]{animation:pSleep 3.6s ease-in-out infinite}
@keyframes pSleep{0%,100%{transform:rotate(-3deg) scale(1)}50%{transform:rotate(-3deg) scale(1.025,.975)}}
.pbody[data-a="stretch"]{animation:pStretch 2.8s var(--ease) both}
@keyframes pStretch{25%{transform:scale(.92,1.1)}55%{transform:scale(1.06,.92)}80%{transform:scale(.99,1.02)}}
.pbody[data-a="jump"]{animation:pJump .8s var(--ease) infinite}
@keyframes pJump{0%,100%{transform:translateY(0) scale(1.04,.96)}18%{transform:scale(.96,1.05)}48%{transform:translateY(-30%)}80%{transform:translateY(0) scale(1.04,.96)}}
.pbody[data-a="pounce"]{animation:pPounce 1.2s var(--ease) infinite}
@keyframes pPounce{0%,60%,100%{transform:none}70%{transform:translate(10%,-18%) rotate(8deg)}85%{transform:translateX(16%) rotate(4deg)}}
.pbody[data-a="walk"]{animation:pWalk .42s ease-in-out infinite alternate}
@keyframes pWalk{from{transform:rotate(-2deg)}to{transform:translateY(-5px) rotate(2deg)}}
.pbody[data-a="run"]{animation:pWalk .2s ease-in-out infinite alternate}
.pbody[data-a="wave"]{animation:pWave 1s ease-in-out infinite alternate}
@keyframes pWave{to{transform:rotate(3deg) translateY(-2px)}}
.pbody[data-a="groom"]{animation:pGroom .6s ease-in-out infinite alternate}
@keyframes pGroom{to{transform:rotate(-3deg) translateY(1px)}}
.pbody[data-a="look"]{animation:pLook 2.4s ease-in-out infinite}
@keyframes pLook{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(4deg)}}
.pbody[data-a="hop"]{animation:pHop .5s var(--ease)}
@keyframes pHop{40%{transform:translateY(-10%) scale(.98,1.03)}80%{transform:scale(1.03,.97)}}
.pbody[data-a="drag"]{animation:pDangle 1s ease-in-out infinite alternate;transform-origin:50% 0}
@keyframes pDangle{from{transform:rotate(-7deg)}to{transform:rotate(7deg)}}
.fx text,.fx path,.fx g,.fx circle,.fx rect,.fx ellipse{transform-box:fill-box;transform-origin:center}
.fx-notes text,.fx-zzz text{font-family:var(--display);font-weight:800;fill:var(--lime);animation:fUp 2.6s ease-in infinite;paint-order:stroke;stroke:rgba(0,0,0,.35);stroke-width:2px}
.fx-notes text:nth-child(2),.fx-zzz text:nth-child(2){animation-delay:.85s}.fx-notes text:nth-child(3),.fx-zzz text:nth-child(3){animation-delay:1.7s}
.fx-hearts path{fill:#f06a8c;animation:fUp 1.8s ease-in infinite}.fx-hearts path:nth-child(2){animation-delay:.6s}.fx-hearts path:nth-child(3){animation-delay:1.2s}
.fx-steam path{fill:none;stroke:rgba(255,255,255,.75);stroke-width:4;stroke-linecap:round;animation:fUp 2.2s ease-in infinite}.fx-steam path:nth-child(2){animation-delay:1.1s}
.fx-nam text,.fx-bang text{font-family:var(--display);font-weight:800;fill:#fff;paint-order:stroke;stroke:#566d14;stroke-width:5px;animation:fPop .9s var(--pop) infinite}
.fx-type text{font-family:var(--display);font-weight:700;fill:var(--lime);animation:fPop .5s steps(2) infinite}
@keyframes fUp{0%{opacity:0;transform:translate(0,0) scale(.6)}20%{opacity:1}100%{opacity:0;transform:translate(14px,-70px) scale(1.15)}}
@keyframes fPop{0%,100%{transform:scale(.9)}50%{transform:scale(1.08)}}
.fx-conf rect{animation:fConf 1.6s linear infinite}.fx-conf rect:nth-child(2n){animation-duration:1.9s;animation-delay:.3s}.fx-conf rect:nth-child(3n){animation-duration:1.3s;animation-delay:.6s}
@keyframes fConf{from{transform:translateY(-60px) rotate(0)}to{transform:translateY(260px) rotate(600deg);opacity:0}}
.fx-spark path{fill:#fff;animation:fTw 1.2s ease-in-out infinite}.fx-spark path:nth-child(2){animation-delay:.4s}.fx-spark path:nth-child(3){animation-delay:.8s}
@keyframes fTw{0%,100%{opacity:0;transform:scale(.3)}50%{opacity:1;transform:scale(1) rotate(45deg)}}
.fx-think circle{fill:#eef1e2;animation:fBl 1.4s ease-in-out infinite}.fx-think circle:nth-child(2){animation-delay:.2s}.fx-think circle:nth-child(3){animation-delay:.4s}
@keyframes fBl{50%{opacity:.3}}
.fx-yarn .ball{animation:fYarn 2.4s ease-in-out infinite}
@keyframes fYarn{0%,100%{transform:translateX(0) rotate(0)}50%{transform:translateX(-120px) rotate(-540deg)}}
.fx-yarn .thread{animation:fBl 2.4s ease-in-out infinite}
.fx-fly .bfly{animation:fFly 5s ease-in-out infinite}
.fx-fly .wing{animation:fFlap .18s ease-in-out infinite alternate;transform-origin:50% 100%!important}
@keyframes fFly{20%{transform:translate(-120px,-40px)}40%{transform:translate(-60px,-110px)}60%{transform:translate(60px,-70px)}80%{transform:translate(20px,10px)}}
@keyframes fFlap{to{transform:scaleY(.25)}}
.pp-fish{animation:fFish .34s ease-in-out infinite;transform-box:fill-box;transform-origin:80% 50%}
@keyframes fFish{50%{transform:rotate(6deg)}}
.pp-mug{animation:fSip 3s ease-in-out infinite;transform-box:fill-box;transform-origin:50% 100%}
@keyframes fSip{0%,60%,100%{transform:none}75%{transform:rotate(-14deg) translate(4px,-6px)}}
.pp-laptop .scr{animation:fGlow 2s ease-in-out infinite}
@keyframes fGlow{50%{opacity:.75}}
.bubble{position:absolute;right:calc(100% - 16px);bottom:80%;width:max-content;max-width:min(240px,calc(100vw - 150px));padding:9px 12px;border-radius:15px 15px 4px 15px;background:var(--paper);color:var(--paperInk);font-size:.76rem;font-weight:600;line-height:1.35;box-shadow:0 14px 28px -12px rgba(0,0,0,.45);opacity:0;transform:translateY(6px) scale(.96);transform-origin:bottom right;transition:opacity .25s,transform .35s var(--pop);pointer-events:none;z-index:2}
.bubble.on{opacity:1;transform:none}
.bubble.r{right:auto;left:calc(100% - 16px);border-radius:15px 15px 15px 4px;transform-origin:bottom left}
.bubble b{color:#566d14}
.petmenu{position:absolute;right:0;bottom:calc(100% + 6px);width:290px;max-width:calc(100vw - 24px);padding:11px;display:none;flex-direction:column;gap:8px;cursor:default;z-index:3}
.petmenu.r{right:auto;left:0}
.petmenu.on{display:flex;animation:fadeIn .25s ease both}
.petmenu h4{margin:0;font-family:var(--display);font-size:.88rem;display:flex;align-items:center;gap:7px}
.petmenu .pm{display:flex;flex-wrap:wrap;gap:4px}
.petmenu .pm button{padding:5px 9px;border-radius:9px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line);font-size:.72rem;font-weight:650}
.petmenu .pm button:hover{background:var(--lime);color:var(--onlime)}
.petmenu small{font-size:.6rem;font-weight:750;letter-spacing:.1em;text-transform:uppercase;color:var(--ink3)}
.petcall{position:fixed;z-index:90;right:max(12px,env(safe-area-inset-right,0px));bottom:calc(var(--nav-h) + 22px + env(safe-area-inset-bottom,0px));width:44px;height:44px;border-radius:50%;display:none;place-items:center;background:linear-gradient(135deg,var(--lime),var(--lime2));color:var(--onlime);box-shadow:0 12px 24px -10px rgba(0,0,0,.5)}
.petcall.on{display:grid}
@media (max-width:899px){.petdock{width:96px;height:100px}}

/* ===== Componentes del sistema multipágina ===== */
.cargando{display:flex;align-items:center;justify-content:center;gap:10px;padding:30px;color:var(--ink2);font-size:.85rem}
.cargando::before{content:"";width:18px;height:18px;border-radius:50%;border:2.5px solid var(--line2);border-top-color:var(--lime);animation:gira .8s linear infinite}
@keyframes gira{to{transform:rotate(360deg)}}
.tabs{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;padding:3px;border-radius:13px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line);align-self:flex-start;max-width:100%}
.tabs::-webkit-scrollbar{display:none}
.tabs button{padding:7px 12px;border-radius:10px;font-weight:700;font-size:.78rem;color:var(--ink2);white-space:nowrap}
.tabs button.on{background:var(--lime);color:var(--onlime)}
.filtros{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:10px}
.filtros .s2{grid-column:1/-1}
@media (min-width:900px){.filtros{grid-template-columns:repeat(6,minmax(0,1fr))}.filtros .s2{grid-column:span 2}}
.dt-wrap{display:flex;flex-direction:column;gap:8px}
.dt-top{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.dt-top .search{flex:1}
.dt-pie{display:flex;gap:8px;align-items:center;justify-content:space-between;flex-wrap:wrap;font-size:.76rem;color:var(--ink2)}
.tbl th.ord{cursor:pointer;user-select:none}
.tbl th.ord:hover{color:var(--ink)}
.tbl td.wrap{white-space:normal;min-width:160px}
.tbl tfoot td{font-weight:800;border-top:1px solid var(--line2);font-family:var(--display)}
.chartbox{position:relative;width:100%;height:220px}
@media (min-width:900px){.chartbox{height:260px}.chartbox.alto{height:320px}}
.chartbox.bajo{height:180px}
.solo-gestor,.solo-admin{display:none!important}
body.es-gestor .solo-gestor{display:revert!important}
body.es-admin .solo-admin{display:revert!important}
body.es-gestor .solo-gestor.flex{display:flex!important}
.check{display:flex;align-items:center;gap:8px;font-size:.8rem;font-weight:650;padding:8px 10px;border-radius:11px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line)}
.check input{accent-color:var(--lime);width:17px;height:17px}
.check.warn{background:color-mix(in srgb,var(--warn) 12%,transparent);color:var(--warn)}
.aviso{display:flex;gap:8px;align-items:flex-start;padding:10px 12px;border-radius:12px;font-size:.78rem;line-height:1.4;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line2)}
.aviso svg{flex:none;margin-top:1px}
.aviso.warn{background:color-mix(in srgb,var(--warn) 12%,transparent);color:var(--ink)}.aviso.warn svg{color:var(--warn)}
.aviso.bad{background:color-mix(in srgb,var(--bad) 12%,transparent)}.aviso.bad svg{color:var(--bad)}
.aviso.ok{background:color-mix(in srgb,var(--ok) 12%,transparent)}.aviso.ok svg{color:var(--ok)}
.masmenu{position:fixed;z-index:110;left:max(8px,env(safe-area-inset-left,0px));right:max(8px,env(safe-area-inset-right,0px));bottom:calc(var(--nav-h) + 16px + env(safe-area-inset-bottom,0px));padding:10px;display:none;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;border-radius:20px}
.masmenu.on{display:grid;animation:sheet .3s var(--ease) both}
.masmenu a{display:flex;flex-direction:column;align-items:center;gap:5px;padding:12px 4px;border-radius:14px;text-decoration:none;color:var(--ink);font-size:.7rem;font-weight:700;text-align:center;background:var(--glass2)}
.masmenu a svg{width:22px;height:22px;color:var(--lime)}
.masmenu a.on{background:var(--lime);color:var(--onlime)}.masmenu a.on svg{color:var(--onlime)}
.usuario{display:flex;align-items:center;gap:9px;padding:8px;border-radius:12px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line)}
.usuario .av{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;font-family:var(--display);font-weight:800;color:var(--onlime);background:linear-gradient(135deg,var(--lime),var(--lime2));flex:none}
.usuario b{display:block;font-size:.8rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.usuario span{display:block;font-size:.66rem;color:var(--ink3);text-transform:capitalize}
.usuario>div{min-width:0;flex:1}
/* Login */
.login-wrap{position:relative;z-index:1;min-height:100%;display:grid;place-items:center;padding:24px max(16px,env(safe-area-inset-left,0px))}
.login{width:min(400px,100%);padding:24px 22px;display:flex;flex-direction:column;gap:14px}
.login .lg{display:grid;place-items:center;padding:14px;border-radius:18px;background:var(--plate)}
.login .lg img{width:min(220px,80%);height:auto}
.login h1{margin:0;font-family:var(--display);font-size:1.2rem;text-align:center}
.login p{margin:0;text-align:center;color:var(--ink2);font-size:.8rem}
.login .btn{width:100%}
.login .lnk{background:none;color:var(--ink2);font-size:.78rem;text-decoration:underline;cursor:pointer;align-self:center}
@media print{
  body{background:#fff!important;color:#000!important}
  .side,.mnav,.top .acts,.petdock,.petcall,.masmenu,.no-print,.bg,.toast{display:none!important}
  .app{display:block!important;padding:0!important}
  .glass{background:#fff!important;box-shadow:none!important;border:1px solid #ccc!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
  .panel,.kpi{break-inside:avoid}
  *{color:#000!important}
}
/* Chips seleccionables (altas) */
button.chip{cursor:pointer;border:0;padding:6px 11px;font:inherit;font-size:.74rem;font-weight:700;color:var(--ink)}
button.chip.on{background:linear-gradient(135deg,var(--lime),var(--lime2));color:var(--onlime);box-shadow:0 8px 18px -12px var(--lime)}
.bar>svg.i,.aviso>svg.i{flex:none}
/* Fotos de productos */
.sws.foto{width:40px;height:40px;padding:0;overflow:hidden;background:var(--h0)}
.sws.foto img{width:100%;height:100%;object-fit:cover;display:block}
.fotoprod{display:flex;gap:12px;align-items:center;padding:10px;border-radius:14px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line)}
.fotoprod .vista{width:96px;height:96px;flex:none;border-radius:12px;overflow:hidden;display:grid;place-items:center;background:var(--h0)}
.fotoprod .vista img{width:100%;height:100%;object-fit:cover}
.fotoprod .vista .sws{width:70px;height:54px}.fotoprod .vista .sws svg{width:60px;height:45px}
.fotoprod .acc{display:flex;flex-direction:column;gap:6px;min-width:0}
.fotoprod small{color:var(--ink3);font-size:.7rem}
.fotolista{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:8px;max-height:46vh;overflow:auto;padding:2px}
.fotolista .it{display:flex;flex-direction:column;gap:3px;font-size:.66rem;text-align:center;padding:5px;border-radius:10px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line)}
.fotolista .it img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:7px}
.fotolista .it.no{opacity:.55;box-shadow:inset 0 0 0 1.5px var(--bad)}
.fotolista .it.ok b{color:var(--ok)}.fotolista .it.err b{color:var(--bad)}
a.btn{text-decoration:none}
.tabs button .ct{display:inline-grid;place-items:center;min-width:18px;height:18px;margin-left:4px;padding:0 5px;border-radius:99px;background:var(--warn);color:#1b1405;font-size:.62rem;font-weight:800}

/* ---- Ventana que no se cierra al tocar fuera: sacudida de aviso ---- */
@keyframes sacudir{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(2px)}}
.modal.sacudir{animation:sacudir .38s cubic-bezier(.36,.07,.19,.97)}
@media (prefers-reduced-motion:reduce){.modal.sacudir{animation:none;box-shadow:0 0 0 2px var(--lime)}}
/* ---- Autocompletado: lista hacia arriba cuando no hay espacio abajo ---- */
.acl.up{top:auto;bottom:calc(100% + 4px)}
.aci{min-height:44px}
/* ---- Líneas de productos compactas: producto | precio | cant. | desc. | quitar ---- */
.line.lp{grid-template-columns:minmax(0,1fr) 92px 70px 84px 38px;gap:6px;padding:8px}
.line.lp .fld>span{font-size:.6rem}
.line.lp .inp{height:36px;padding:0 10px;font-size:.84rem}
.line.lp .num{text-align:right}
.line.lp .ibtn{width:36px;height:36px}
.line.lp .pinfo{grid-column:1/-1}
@media (min-width:641px){.line.lp4{grid-template-columns:minmax(0,1fr) 66px 62px 88px 88px}}
@media (max-width:640px){
  .line.lp{grid-template-columns:repeat(3,minmax(0,1fr)) 36px}
  .line.lp4{grid-template-columns:repeat(4,minmax(0,1fr))}
  .line.lp .lp-prod{grid-column:1/-1}
}
/* ---- Servicios de la invitación: servicio | producto | texto | costo | quitar ---- */
.line.ls{grid-template-columns:130px 100px minmax(0,1fr) 84px 36px;gap:6px;padding:8px;margin-bottom:6px}
.line.ls .fld>span{font-size:.6rem}
.line.ls .inp{height:36px;padding:0 10px;font-size:.84rem}
.line.ls .num{text-align:right}
@media (max-width:640px){.line.ls{grid-template-columns:88px 1fr 1fr 36px}.line.ls>:nth-child(1){grid-area:1/1/2/3}.line.ls>:nth-child(2){grid-area:1/3/2/4}.line.ls>:nth-child(5){grid-area:1/4/2/5;align-self:end}.line.ls>:nth-child(4){grid-area:2/1/3/2}.line.ls>:nth-child(3){grid-area:2/2/3/5}}
/* ---- Lista compacta de productos (invitación / crear venta): foto · código · cant. · precio · subtotal ---- */
.epl{display:flex;flex-direction:column;gap:5px}
.epl-h,.epl-r{display:grid;grid-template-columns:40px minmax(56px,1fr) 56px 74px 64px 74px 30px;gap:6px;align-items:center}
.epl-r .inp.err{box-shadow:inset 0 0 0 1.5px var(--bad)}
.epl-h{font-size:.58rem;font-weight:750;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3);padding:0 6px}
.epl-r{padding:5px 6px;border-radius:11px;background:var(--glass2);box-shadow:inset 0 0 0 1px var(--line)}
.epl-r .sws{width:40px;height:32px;border-radius:7px}
.epl-r .sws svg{width:30px;height:24px}
.epl-c{display:flex;flex-direction:column;min-width:0}.epl-c b{font-size:.8rem}.epl-c small{font-size:.62rem}
.epl-r .inp{height:32px;padding:0 8px;font-size:.82rem;text-align:right}
.epl-r [data-s]{font-size:.78rem;font-weight:700}
.epl-r .ibtn{width:30px;height:30px}
.epl .r{text-align:right}
@media (max-width:420px){.epl-h,.epl-r{grid-template-columns:30px minmax(44px,1fr) 42px 56px 48px 58px 26px;gap:3px}.epl-r .inp{padding:0 5px;font-size:.78rem}.epl-r [data-s]{font-size:.7rem}.epl-r .sws{width:34px;height:28px}}
/* ---- Ventana compacta (nueva invitación) ---- */
.modal.compacto .mb{gap:8px;padding:10px 12px}
.modal.compacto .fgrid{gap:7px}
.modal.compacto .fld{gap:3px}
.modal.compacto .fld>span{font-size:.6rem}
.modal.compacto .inp{height:36px;font-size:.84rem;padding:0 10px}
.modal.compacto select.inp{padding-right:28px}
.modal.compacto .sect{font-size:.76rem;margin-top:2px}
.modal.compacto .aviso{padding:7px 10px;font-size:.72rem}
.modal.compacto .check{font-size:.76rem;padding:7px 10px}
.modal.compacto .stats3 div{padding:5px 7px}
/* ---- Listas de casillas (condiciones de rótulo) ---- */
.chks{display:flex;flex-wrap:wrap;gap:6px}.chks .check{padding:6px 10px;font-size:.78rem}
