/* Finanzapp — estilos mobile-first.
   La base es el teléfono; el escritorio se agrega con @media (min-width: 900px). */

:root{
  --paper:#F1EEE6; --card:#FBFAF6; --card2:#F5F2EA; --ink:#15171A; --ink2:#5D5E58; --ink3:#8C8B84;
  --line:#E3DFD5; --line2:#D4CFC2;
  --brand:#1E4B3A; --brand-ink:#fff; --mint:#DCEBDF; --mint2:#BFDCC8;
  --hot:#D9482D; --hot-bg:#FBE3DA; --gold:#B28B1E; --gold-bg:#F6EBCB; --sky:#3E5E9E; --sky-bg:#E1E7F3;
  --ok:#2E7D57; --warn:#B7791F; --bad:#C2412D;
  --hero:#15171A; --hero-ink:#F6F3EC; --hero-mut:rgba(241,238,230,.62); --hero-neg:#F49A84;
  --r-xl:26px; --r-lg:22px; --r-md:16px; --r-sm:12px;
  --shadow:0 1px 0 rgba(20,22,20,.04),0 10px 30px -20px rgba(20,22,20,.22);
  --shadow-lg:0 30px 80px -30px rgba(15,20,18,.5);
  --f-display:"Fraunces",ui-serif,Georgia,serif;
  --f-ui:"Geist",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --ease:cubic-bezier(.2,.8,.2,1);
  --sat:env(safe-area-inset-top,0px); --sab:env(safe-area-inset-bottom,0px);
  --tab-h:68px;
  color-scheme:light;
}
:root[data-theme=dark]{
  --paper:#0E1110; --card:#161A18; --card2:#1C211F; --ink:#EDEAE2; --ink2:#A9A79F; --ink3:#77766F;
  --line:#252B28; --line2:#323A36; --brand:#7FC8A2; --brand-ink:#0E1110; --mint:#1C3127; --mint2:#2A4A3A;
  --hot:#F07457; --hot-bg:#3A1F18; --gold:#E0BA55; --gold-bg:#352C14; --sky:#8FA9DD; --sky-bg:#1B2436;
  --ok:#6CC59A; --bad:#F07457; --warn:#E0BA55;
  --hero:#E9E5DA; --hero-ink:#15171A; --hero-mut:#5D5E58; --hero-neg:#C2412D;
  --shadow:0 1px 0 rgba(0,0,0,.2),0 10px 30px -18px rgba(0,0,0,.7); color-scheme:dark;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{background:var(--paper)}
html,body{margin:0;color:var(--ink);font-family:var(--f-ui);font-size:16px;line-height:1.45;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
body{min-height:100dvh;overscroll-behavior-y:contain;background:var(--paper)}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;background:none;border:0;padding:0;touch-action:manipulation}
a{color:inherit;text-decoration:none}
::selection{background:var(--mint2)}
.num{font-variant-numeric:tabular-nums}
svg.i{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.hide-m{display:none!important}

/* ============ Shell (móvil) ============ */
.rail{display:none}
.bar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:6px;padding:calc(var(--sat) + 10px) 14px 10px 18px;background:color-mix(in srgb,var(--paper) 86%,transparent);backdrop-filter:saturate(1.4) blur(14px);-webkit-backdrop-filter:saturate(1.4) blur(14px);border-bottom:1px solid transparent;transition:border-color .2s}
.bar.scrolled{border-bottom-color:var(--line)}
.bar .ttl{flex:1;min-width:0;font-family:var(--f-display);font-size:22px;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:0;transform:translateY(4px);transition:opacity .2s,transform .2s}
.bar.scrolled .ttl{opacity:1;transform:none}
.ib{width:44px;height:44px;border-radius:14px;display:grid;place-items:center;color:var(--ink2);position:relative;transition:background .15s}
.ib:active{background:var(--card2)}
.ib .badge-dot{position:absolute;top:9px;right:9px;width:8px;height:8px;border-radius:50%;background:var(--hot);border:2px solid var(--paper)}
.sync-ic{width:44px;height:44px;display:grid;place-items:center;color:var(--ink3)}
.sync-ic svg{width:19px;height:19px}
.sync-ic.err{color:var(--bad)}.sync-ic.ok{color:var(--ok)}.sync-ic.busy svg{animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
main{padding:2px 16px calc(var(--tab-h) + var(--sab) + 34px);max-width:1240px;margin:0 auto;min-height:100dvh}
.pg-h{margin:6px 2px 18px}
.pg-h h1{font-family:var(--f-display);font-weight:400;font-size:34px;letter-spacing:-.025em;line-height:1.02;margin:0;font-variation-settings:"opsz" 96}
.pg-h h1 em{font-style:italic;color:var(--brand)}
.pg-h .sub{color:var(--ink2);margin-top:6px;font-size:14.5px}
.pg-h .acts{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}

.tabbar{position:fixed;left:10px;right:10px;bottom:calc(10px + var(--sab));height:var(--tab-h);z-index:60;display:grid;grid-template-columns:repeat(5,1fr);align-items:center;padding:0 6px;border-radius:24px;background:color-mix(in srgb,var(--card) 90%,transparent);backdrop-filter:saturate(1.5) blur(18px);-webkit-backdrop-filter:saturate(1.5) blur(18px);border:1px solid var(--line);box-shadow:var(--shadow-lg)}
.tab{height:56px;border-radius:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--ink3);font-size:11px;font-weight:550;transition:color .15s}
.tab[aria-current=page]{color:var(--ink)}
.tab[aria-current=page] svg{stroke:var(--brand);stroke-width:2}
.fab{justify-self:center;width:58px;height:58px;border-radius:20px;background:var(--brand);color:var(--brand-ink);display:grid;place-items:center;box-shadow:0 12px 24px -12px var(--brand);transition:transform .2s var(--ease)}
.fab:active{transform:scale(.94)}
.fab svg{width:26px;height:26px;stroke-width:2.2;transition:transform .25s var(--ease)}
.fab.open svg{transform:rotate(45deg)}

/* Acciones rápidas (mantener presionado +) */
.dial{position:fixed;inset:0;z-index:55;background:rgba(14,16,15,.35);backdrop-filter:blur(2px);opacity:0;pointer-events:none;transition:opacity .2s}
.dial.on{opacity:1;pointer-events:auto}
.dial-list{position:fixed;left:50%;bottom:calc(var(--tab-h) + var(--sab) + 26px);transform:translateX(-50%);display:flex;flex-direction:column;gap:10px;align-items:stretch;width:min(320px,86vw)}
.dial-btn{display:flex;align-items:center;gap:14px;height:56px;padding:0 18px;border-radius:18px;background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow-lg);font-weight:600;font-size:15.5px;transform:translateY(16px) scale(.96);opacity:0;transition:transform .28s var(--ease),opacity .2s}
.dial.on .dial-btn{transform:none;opacity:1}
.dial.on .dial-btn:nth-child(2){transition-delay:.03s}.dial.on .dial-btn:nth-child(3){transition-delay:.06s}.dial.on .dial-btn:nth-child(4){transition-delay:.09s}.dial.on .dial-btn:nth-child(5){transition-delay:.12s}
.dial-btn .av{width:36px;height:36px;border-radius:12px;display:grid;place-items:center}

/* ============ Componentes ============ */
.stack{display:flex;flex-direction:column;gap:14px}
.grid{display:grid;gap:14px;grid-template-columns:minmax(0,1fr)}
.grid > *{min-width:0}
main{overflow-x:clip}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px;box-shadow:var(--shadow);min-width:0;position:relative}
.card h3{margin:0;font-size:13px;font-weight:600;letter-spacing:.02em;color:var(--ink2);display:flex;align-items:center;gap:8px;min-height:24px}
.card h3 svg{width:18px;height:18px}
.card h3 .lnk{margin-left:auto;font-weight:550;color:var(--ink3);font-size:13px;letter-spacing:0;padding:6px 0 6px 10px}
.eyebrow{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3);font-weight:650}
.big{font-family:var(--f-display);font-weight:400;font-size:46px;letter-spacing:-.03em;line-height:1;font-variation-settings:"opsz" 120;font-variant-numeric:lining-nums tabular-nums}
.big .cur{font-size:.5em;vertical-align:.6em;margin-right:2px;opacity:.55}
.mid{font-family:var(--f-display);font-weight:400;font-size:26px;letter-spacing:-.02em;line-height:1.08;font-variant-numeric:lining-nums tabular-nums}
.muted{color:var(--ink2)}.faint{color:var(--ink3)}
.small{font-size:13.5px}.xs{font-size:12px}
.row{display:flex;align-items:center;gap:10px}
.between{justify-content:space-between}
.wrap{flex-wrap:wrap}
.pill{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:550;background:var(--card2);color:var(--ink2);border:1px solid var(--line);white-space:nowrap}
.pill svg{width:14px;height:14px}
.pill.ok{background:var(--mint);color:var(--brand);border-color:transparent}
.pill.hot{background:var(--hot-bg);color:var(--hot);border-color:transparent}
.pill.gold{background:var(--gold-bg);color:var(--gold);border-color:transparent}
.pill.sky{background:var(--sky-bg);color:var(--sky);border-color:transparent}
.divider{height:1px;background:var(--line);margin:14px 0}
.empty{padding:28px 10px;text-align:center;color:var(--ink3);font-size:14.5px}

/* Botones */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 18px;border-radius:15px;font-weight:600;font-size:15px;border:1px solid var(--line2);background:var(--card);transition:transform .15s var(--ease),background .15s;white-space:nowrap}
.btn:active{transform:scale(.97)}
.btn.primary{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.btn.brand{background:var(--brand);color:var(--brand-ink);border-color:var(--brand)}
.btn.ghost{border-color:transparent;background:transparent;color:var(--ink2)}
.btn.sm{min-height:40px;padding:0 14px;font-size:14px;border-radius:12px}
.btn.block{width:100%}
.btn.danger{color:var(--bad)}
.btn:disabled{opacity:.4;pointer-events:none}
.btn svg{width:19px;height:19px}
.seg{display:flex;padding:4px;border-radius:15px;background:var(--card2);border:1px solid var(--line);gap:2px}
.seg-btn{flex:1;min-height:40px;padding:0 12px;border-radius:11px;font-size:14px;font-weight:600;color:var(--ink2);transition:all .18s;white-space:nowrap}
.seg-btn[aria-pressed=true]{background:var(--card);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.08),0 0 0 1px var(--line)}
.chips{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;margin:0 -16px;padding:2px 16px 4px;scroll-snap-type:x proximity}
.chips::-webkit-scrollbar{display:none}
.sheet .chips{margin:0 -18px;padding:2px 18px 4px}
.chip{flex:none;min-height:40px;padding:0 15px;border-radius:999px;border:1px solid var(--line);background:var(--card);font-size:14px;font-weight:550;color:var(--ink2);display:inline-flex;align-items:center;gap:7px;white-space:nowrap;scroll-snap-align:start}
.chip svg{width:17px;height:17px}
.chip[aria-pressed=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}

/* Hero */
.hero{background:var(--hero);color:var(--hero-ink);border:0;border-radius:var(--r-xl);padding:22px 20px 18px;overflow:hidden;position:relative;box-shadow:var(--shadow-lg)}
.hero .eyebrow{color:var(--hero-mut)}
.hero .big{font-size:52px;margin:10px 0 6px;cursor:pointer;user-select:none}
.hero .hint{color:var(--hero-mut);font-size:13.5px;line-height:1.4}
.hero .kv{display:grid;grid-template-columns:1fr auto;gap:8px 14px;font-size:14px;color:var(--hero-mut);margin-top:16px;padding-top:14px;border-top:1px solid color-mix(in srgb,var(--hero-ink) 14%,transparent)}
.hero .kv b{color:var(--hero-ink);font-weight:550;text-align:right;font-variant-numeric:tabular-nums}
.hero .kv .neg{color:var(--hero-neg)}
.hero-glow{position:absolute;right:-120px;top:-150px;width:380px;height:380px;border-radius:50%;background:radial-gradient(closest-side,rgba(127,200,162,.32),transparent);pointer-events:none}
.eye{position:absolute;top:14px;right:12px;width:44px;height:44px;border-radius:14px;display:grid;place-items:center;color:var(--hero-mut)}

/* Acciones rápidas en Hoy */
.quick{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.qa{display:flex;flex-direction:column;align-items:center;gap:7px;padding:12px 4px 10px;border-radius:18px;background:var(--card);border:1px solid var(--line);font-size:12.5px;font-weight:600;color:var(--ink2);transition:transform .15s}
.qa:active{transform:scale(.96)}
.qa .av{width:40px;height:40px;border-radius:13px;display:grid;place-items:center}

/* Widgets (carrusel horizontal en móvil) */
.widgets{display:grid;grid-auto-flow:column;grid-auto-columns:82%;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 -16px;padding:2px 16px 6px;scrollbar-width:none}
.widgets::-webkit-scrollbar{display:none}
.widgets > *{scroll-snap-align:center}
.wd{min-height:178px;display:flex;flex-direction:column}
.wd .foot{margin-top:auto}
.dots{display:flex;justify-content:center;gap:6px;margin-top:2px}
.dots i{width:6px;height:6px;border-radius:6px;background:var(--line2);transition:width .2s,background .2s}
.dots i.on{width:18px;background:var(--ink3)}

/* Ciclo de tarjeta */
.cycle-track{position:relative;height:50px;margin:6px 0 2px}
.cycle-bar{position:absolute;left:0;right:0;top:20px;height:12px;border-radius:999px;background:var(--card2);border:1px solid var(--line);overflow:hidden}
.cycle-fill{position:absolute;left:0;top:0;bottom:0;background:repeating-linear-gradient(-45deg,var(--mint2),var(--mint2) 6px,var(--mint) 6px,var(--mint) 12px)}
.cycle-today{position:absolute;top:6px;width:2px;height:40px;background:var(--ink);border-radius:2px}
.cycle-today span{position:absolute;top:-16px;left:50%;transform:translateX(-50%);font-size:11px;font-weight:650}
.cycle-due{position:absolute;top:36px;font-size:11px;color:var(--hot);font-weight:650;transform:translateX(-50%);white-space:nowrap}
.cover{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}
.cover .c{padding:12px 13px;border-radius:var(--r-md);background:var(--card2);border:1px solid var(--line)}
.cover .c .mid{font-size:21px;margin-top:3px}
.cover .c.full{grid-column:span 2;background:var(--mint);border-color:transparent;display:flex;align-items:center;justify-content:space-between;gap:10px}
.meter{height:10px;border-radius:999px;background:var(--card2);border:1px solid var(--line);overflow:hidden;position:relative}
.meter > i{position:absolute;inset:0 auto 0 0;border-radius:999px;background:var(--brand);transition:width .8s var(--ease)}
.meter.hot > i{background:var(--hot)}.meter.gold > i{background:var(--gold)}.meter.warn > i{background:var(--warn)}
.meter .tick{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--ink3);border-radius:2px}

/* Insights / alertas */
.ins{display:grid;grid-template-columns:40px 1fr;gap:12px;padding:14px;border-radius:var(--r-md);background:var(--card);border:1px solid var(--line);position:relative}
.ins .ic{width:40px;height:40px;border-radius:13px;display:grid;place-items:center;background:var(--card2)}
.ins.hot .ic{background:var(--hot-bg);color:var(--hot)}
.ins.gold .ic{background:var(--gold-bg);color:var(--gold)}
.ins.ok .ic{background:var(--mint);color:var(--brand)}
.ins.sky .ic{background:var(--sky-bg);color:var(--sky)}
.ins .t{font-weight:650;font-size:15px;line-height:1.3;padding-right:26px}
.ins .d{font-size:13.5px;color:var(--ink2);margin-top:3px;line-height:1.45}
.ins .imp{display:inline-flex;margin-top:8px}
.ins .acts{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.ins .x{position:absolute;top:6px;right:6px;width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--ink3)}
.ins .x svg{width:16px;height:16px}
.kind{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;font-weight:700;color:var(--ink3);margin-bottom:3px}

/* Listas y filas deslizables */
.list{display:flex;flex-direction:column}
.sw-row{position:relative;overflow:hidden;border-radius:16px}
.sw-bg{position:absolute;inset:0;display:flex;align-items:center;justify-content:flex-end;padding-right:22px;background:var(--hot);color:#fff;font-weight:650;font-size:14px;gap:6px;opacity:0;transition:opacity .15s}
.sw-bg svg{width:20px;height:20px}
.li{display:grid;grid-template-columns:42px 1fr auto;gap:12px;align-items:center;padding:11px 8px;min-height:64px;border-radius:16px;background:var(--card);cursor:pointer;text-align:left;width:100%;position:relative;touch-action:pan-y;transition:transform .25s var(--ease)}
.li.dragging{transition:none}
.li:active{background:var(--card2)}
.av{width:42px;height:42px;border-radius:14px;display:grid;place-items:center;flex:none}
.av svg{width:20px;height:20px}
.av.sm{width:34px;height:34px;border-radius:11px}.av.sm svg{width:17px;height:17px}
.li .n{font-weight:600;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.li .m{font-size:12.5px;color:var(--ink3);display:flex;gap:5px;align-items:center;flex-wrap:wrap;margin-top:1px;line-height:1.35}
.li .amt{font-weight:600;font-variant-numeric:tabular-nums;text-align:right;font-size:15px;white-space:nowrap}
.li .amt.in{color:var(--ok)}
.li .amt small{display:block;font-weight:450;color:var(--ink3);font-size:12px}
.day-h{display:flex;justify-content:space-between;align-items:baseline;padding:16px 8px 6px;font-size:12.5px;color:var(--ink3);font-weight:650;letter-spacing:.02em;position:sticky;top:calc(var(--sat) + 64px);background:var(--card);z-index:2}
.tag{font-size:10.5px;padding:1px 6px;border-radius:6px;background:var(--card2);color:var(--ink3);border:1px solid var(--line);font-weight:600}
.tag.copec{background:var(--mint);color:var(--brand);border-color:transparent}
.tag.cam{background:var(--sky-bg);color:var(--sky);border-color:transparent}

/* Categorías */
.ribbon{display:flex;height:14px;border-radius:999px;overflow:hidden;gap:2px;margin:14px 0 12px}
.ribbon i{display:block;height:100%}
.cat-row{display:grid;grid-template-columns:12px 1fr auto auto;gap:10px;align-items:center;padding:7px 0;font-size:14.5px}
.cat-row .sw{width:10px;height:10px;border-radius:3px}
.cat-row .v{font-variant-numeric:tabular-nums;font-weight:600}
.cat-row .p{font-variant-numeric:tabular-nums;color:var(--ink3);font-size:12.5px;width:42px;text-align:right}

/* Presupuestos */
.budgets{display:grid;grid-template-columns:1fr;gap:10px}
.bud{padding:14px;border-radius:var(--r-md);background:var(--card);border:1px solid var(--line);display:flex;flex-direction:column;gap:10px;text-align:left;width:100%}
.bud .h{display:flex;align-items:center;gap:10px}
.bud .nm{font-weight:650;font-size:15px}
.bud .st{margin-left:auto}
.bud .vals{display:flex;justify-content:space-between;font-size:13px;color:var(--ink2)}
.bud .vals b{color:var(--ink);font-weight:650;font-variant-numeric:tabular-nums}

/* Metas */
.goals{display:grid;grid-template-columns:1fr;gap:12px}
.goal{padding:18px;border-radius:var(--r-lg);background:var(--card);border:1px solid var(--line);display:flex;flex-direction:column;gap:14px;box-shadow:var(--shadow);text-align:left;width:100%}
.goal .top{display:flex;gap:14px;align-items:center}
.ring{position:relative;width:72px;height:72px;flex:none}
.ring svg{width:72px;height:72px;transform:rotate(-90deg)}
.ring .pct{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--f-display);font-size:18px}
.goal .nm{font-family:var(--f-display);font-size:21px;letter-spacing:-.015em;line-height:1.1}
.goal .meta{font-size:13px;color:var(--ink3);margin-top:3px}
.goal .kv{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.goal .kv div{background:var(--card2);border-radius:12px;padding:9px 11px;border:1px solid var(--line)}
.goal .kv b{display:block;font-variant-numeric:tabular-nums;font-weight:650;font-size:15px;margin-top:1px}
.goal .kv span{font-size:11.5px;color:var(--ink3)}
.goals-strip{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(230px,72%);gap:10px;overflow-x:auto;margin:0 -16px;padding:2px 16px 6px;scrollbar-width:none;scroll-snap-type:x proximity}
.goals-strip::-webkit-scrollbar{display:none}
.goals-strip .goal{scroll-snap-align:start;padding:14px}
.goals-strip .ring,.goals-strip .ring svg{width:58px;height:58px}
.goals-strip .ring .pct{font-size:15px}
.goals-strip .nm{font-size:17px}

/* Cuentas */
.accts{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.acct{padding:14px;border-radius:var(--r-lg);border:1px solid var(--line);background:var(--card);display:flex;flex-direction:column;gap:12px;min-height:140px;text-align:left;box-shadow:var(--shadow);width:100%}
.acct .badge{width:36px;height:36px;border-radius:12px;display:grid;place-items:center;font-weight:700;font-size:12px;color:#fff}
.acct .nm{font-weight:650;font-size:14.5px;line-height:1.2}
.acct .tp{font-size:12px;color:var(--ink3);line-height:1.3}
.acct .mid{margin-top:auto;font-size:23px}
.acct .foot{display:flex;gap:6px;flex-wrap:wrap}
.cc{grid-column:span 2;background:linear-gradient(135deg,#1C2B44 0%,#22385C 55%,#2E4A78 100%);color:#EEF1F7;border:0;min-height:170px}
.cc .tp,.cc .faint{color:rgba(238,241,247,.62)}
.cc .chipc{width:34px;height:26px;border-radius:6px;background:linear-gradient(135deg,#D8C27A,#B79B48)}

/* Calendario */
.cal-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.cal-h b{font-family:var(--f-display);font-weight:400;font-size:24px;letter-spacing:-.02em;text-transform:capitalize}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;touch-action:pan-y}
.cal .dw{font-size:11px;color:var(--ink3);text-align:center;font-weight:650;padding:4px 0}
.cd{aspect-ratio:1/1.12;border-radius:12px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding-top:6px;gap:3px;font-size:14px;font-weight:550;position:relative;font-variant-numeric:tabular-nums;border:1px solid transparent}
.cd.out{opacity:.3}
.cd.today{border-color:var(--ink)}
.cd[aria-pressed=true]{background:var(--ink);color:var(--paper)}
.cd .ds{display:flex;gap:2px;flex-wrap:wrap;justify-content:center;max-width:30px}
.cd .ds i{width:6px;height:6px;border-radius:50%}
.cd .sp{font-size:9.5px;color:var(--ink3);font-weight:550}
.cd[aria-pressed=true] .sp{color:inherit;opacity:.7}
.ev{display:grid;grid-template-columns:42px 1fr auto;gap:12px;align-items:center;padding:10px 4px;border-bottom:1px solid var(--line)}
.ev:last-child{border-bottom:0}
.ev .dt{text-align:center;line-height:1.05}
.ev .dt b{display:block;font-family:var(--f-display);font-size:22px;font-weight:400}
.ev .dt span{font-size:11px;color:var(--ink3);text-transform:uppercase;font-weight:650}
.week{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.wk{border-radius:14px;padding:8px 2px;text-align:center;background:var(--card2);border:1px solid var(--line);font-size:11px;color:var(--ink3);font-weight:600}
.wk b{display:block;font-size:17px;color:var(--ink);font-weight:600;margin:1px 0 3px}
.wk.today{background:var(--ink);color:var(--paper);border-color:var(--ink)}.wk.today b{color:var(--paper)}
.wk .ds{display:flex;gap:2px;justify-content:center;min-height:6px}.wk .ds i{width:5px;height:5px;border-radius:50%}

/* Salud financiera */
.health{display:flex;gap:18px;align-items:center}
.health .ring,.health .ring svg{width:112px;height:112px}
.health .ring .pct{font-size:34px;flex-direction:column;display:flex;align-items:center;justify-content:center;line-height:1}
.health .ring .pct small{font-family:var(--f-ui);font-size:11px;color:var(--ink3);margin-top:4px}
.hbar{display:grid;grid-template-columns:1fr auto;gap:4px 10px;font-size:13px;margin-top:6px}
.hbar .meter{grid-column:span 2;height:6px}

/* Gráficos */
.chart{position:relative;width:100%}
.chart svg{display:block;width:100%;height:auto;overflow:visible}
.chart text{font-family:var(--f-ui);font-size:11px;fill:var(--ink3)}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--ink2)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:10px;height:10px;border-radius:3px;display:inline-block}
.tipbox{position:fixed;z-index:300;pointer-events:none;background:var(--ink);color:var(--paper);border-radius:10px;padding:7px 10px;font-size:12px;line-height:1.4;box-shadow:var(--shadow-lg);opacity:0;transition:opacity .12s;max-width:240px}
.tipbox.on{opacity:1}

/* Secciones */
.sec{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:26px 2px 12px}
.sec h2{font-family:var(--f-display);font-weight:400;font-size:24px;letter-spacing:-.02em;margin:0}
.sec a,.sec button{font-size:14px;color:var(--ink3);font-weight:550;padding:8px 0 8px 8px}
.kpis{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.kpi{padding:14px 15px;border-radius:var(--r-md);background:var(--card);border:1px solid var(--line)}
.kpi .mid{margin-top:4px;font-size:22px}
.kpi .xs{margin-top:3px}
.month-nav{display:flex;align-items:center;justify-content:space-between;gap:4px;padding:4px;border-radius:15px;background:var(--card);border:1px solid var(--line)}
.month-nav b{flex:1;text-align:center;font-weight:650;font-size:15px;text-transform:capitalize}
.month-nav button{width:44px;height:40px;border-radius:11px;display:grid;place-items:center;color:var(--ink2)}
.month-nav button:disabled{opacity:.3}
.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl th{text-align:left;font-weight:650;color:var(--ink3);font-size:12px;padding:8px 6px;border-bottom:1px solid var(--line)}
.tbl td{padding:11px 6px;border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums;vertical-align:middle}
.tbl .r{text-align:right}
.tbl tr:last-child td{border-bottom:0}
.slider{width:100%;accent-color:var(--brand);height:32px}
.note-box{padding:12px 14px;border-radius:var(--r-md);background:var(--card2);border:1px solid var(--line);font-size:13.5px;color:var(--ink2);margin-bottom:14px;line-height:1.45}

/* Más (grilla) */
.more{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.more button,.more a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:96px;border-radius:18px;background:var(--card2);border:1px solid var(--line);font-size:13px;font-weight:600;color:var(--ink);text-align:center;padding:8px}
.more .av{width:42px;height:42px}

/* Hojas (bottom sheets) */
.scrim{position:fixed;inset:0;z-index:100;background:rgba(12,14,13,.45);opacity:0;transition:opacity .25s;display:flex;align-items:flex-end;justify-content:center}
.scrim.on{opacity:1}
.sheet{width:100%;max-height:94dvh;overflow:auto;overscroll-behavior:contain;background:var(--card);border-radius:28px 28px 0 0;box-shadow:var(--shadow-lg);padding:8px 18px calc(18px + var(--sab));transform:translateY(100%);transition:transform .32s var(--ease)}
.scrim.on .sheet{transform:none}
.sheet.dragging{transition:none}
.grab-zone{position:sticky;top:-8px;margin:-8px -18px 4px;padding:10px 0 6px;background:var(--card);z-index:3;touch-action:none;cursor:grab}
.grab{width:42px;height:5px;border-radius:5px;background:var(--line2);margin:0 auto}
.sheet-h{display:flex;align-items:center;justify-content:space-between;margin:2px 0 14px;gap:12px}
.sheet-h h2{font-family:var(--f-display);font-weight:400;font-size:25px;letter-spacing:-.02em;margin:0}
.x-btn{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;color:var(--ink3);flex:none}
.x-btn svg{width:18px;height:18px}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.field label,.lbl{font-size:13px;font-weight:650;color:var(--ink2)}
.inp{min-height:50px;border-radius:14px;border:1px solid var(--line2);background:var(--card2);padding:0 14px;font-size:16px;outline:none;transition:border-color .15s,box-shadow .15s;width:100%}
.inp:focus{border-color:var(--brand);box-shadow:0 0 0 4px var(--mint)}
select.inp{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%238C8B84' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;padding-right:34px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.sheet-foot{display:flex;gap:10px;margin-top:10px;position:sticky;bottom:calc(-18px - var(--sab));background:var(--card);padding:10px 0 calc(var(--sab) + 2px);margin-bottom:calc(-18px - var(--sab))}
.sheet-foot .btn{flex:1}
.sheet-foot .btn.ghost{flex:0 0 auto}

/* Registro rápido con teclado propio */
.amt-disp{display:flex;align-items:baseline;justify-content:center;gap:4px;padding:6px 0 4px;min-height:78px}
.amt-disp .cur{font-family:var(--f-display);font-size:30px;color:var(--ink3)}
.amt-disp .v{font-family:var(--f-display);font-size:58px;letter-spacing:-.03em;line-height:1;font-variant-numeric:lining-nums tabular-nums}
.amt-disp .v.zero{color:var(--line2)}
.amt-disp input{font-family:var(--f-display);font-size:58px;letter-spacing:-.03em;border:0;outline:0;background:transparent;width:auto;min-width:1ch;max-width:100%;padding:0;caret-color:var(--brand)}
.amt-disp input::placeholder{color:var(--line2)}
.amt-sub{text-align:center;font-size:13px;color:var(--ink3);min-height:18px;margin-bottom:10px}
.keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}
.keypad button{height:58px;border-radius:16px;background:var(--card2);font-size:24px;font-weight:500;font-variant-numeric:tabular-nums;display:grid;place-items:center;transition:background .1s,transform .1s}
.keypad button:active{background:var(--line);transform:scale(.97)}
.keypad .k-ok{background:var(--ink);color:var(--paper);font-size:16px;font-weight:650}
.keypad svg{width:24px;height:24px}
.cat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:4px 0 12px}
.cat-btn{display:flex;flex-direction:column;align-items:center;gap:5px;padding:9px 2px 8px;border-radius:15px;border:1px solid var(--line);background:var(--card);font-size:11px;min-width:0;overflow:hidden;font-weight:600;color:var(--ink2);line-height:1.15;text-align:center}
.cat-btn .av{width:34px;height:34px;border-radius:11px}
.cat-btn .av svg{width:18px;height:18px}
.cat-btn[aria-pressed=true]{border-color:var(--ink);color:var(--ink);box-shadow:0 0 0 1px var(--ink) inset}
.det{border-top:1px solid var(--line);margin-top:4px;padding-top:10px}
.det summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:600;color:var(--ink2);min-height:40px}
.det summary::-webkit-details-marker{display:none}
.det[open] summary svg{transform:rotate(90deg)}
.toggle-row{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--r-md);background:var(--mint);margin:10px 0}
.toggle-row .tx{flex:1;font-size:13px;line-height:1.35}
.toggle-row .tx b{display:block;font-size:14.5px}
.toggle-row.neutral{background:var(--card2);border:1px solid var(--line)}
.switch{width:52px;height:32px;border-radius:999px;background:var(--line2);position:relative;transition:background .2s;flex:none}
.switch::after{content:"";position:absolute;top:3px;left:3px;width:26px;height:26px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .25s var(--ease)}
.switch[aria-checked=true]{background:var(--brand)}
.switch[aria-checked=true]::after{transform:translateX(20px)}
.receipt-thumb{width:100%;max-height:220px;object-fit:contain;border-radius:14px;background:var(--card2);border:1px solid var(--line);margin-bottom:12px}
.route{display:flex;flex-direction:column;margin:6px 0 14px}
.route .step{display:grid;grid-template-columns:38px 1fr auto;gap:12px;align-items:center;padding:9px 0;position:relative}
.route .step:not(:last-child)::after{content:"";position:absolute;left:18px;top:46px;bottom:-8px;width:2px;background:var(--line2)}
.route .dot{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;color:#fff;font-weight:700;font-size:12px;z-index:1}
.steps-dots{display:flex;gap:6px}
.steps-dots i{width:22px;height:4px;border-radius:4px;background:var(--line2)}
.steps-dots i.on{background:var(--ink)}

/* Búsqueda global */
.search{position:fixed;inset:0;z-index:120;background:var(--paper);display:flex;flex-direction:column;opacity:0;transform:translateY(10px);transition:opacity .2s,transform .25s var(--ease);pointer-events:none}
.search.on{opacity:1;transform:none;pointer-events:auto}
.search-top{display:flex;align-items:center;gap:8px;padding:calc(var(--sat) + 10px) 10px 10px 16px;border-bottom:1px solid var(--line)}
.search-top input{flex:1;height:50px;border:0;outline:0;background:transparent;font-size:18px}
.search-res{flex:1;overflow:auto;padding:6px 12px calc(30px + var(--sab))}
.sr-h{font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3);font-weight:700;margin:16px 6px 6px}

/* Bloqueo */
.lock{position:fixed;inset:0;z-index:500;background:var(--hero);color:var(--hero-ink);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:30px;text-align:center}
.lock .logo{width:68px;height:68px;border-radius:22px;background:var(--hero-ink);color:var(--hero);display:grid;place-items:center;font-family:var(--f-display);font-size:38px;font-weight:600}
.lock h2{font-family:var(--f-display);font-weight:400;font-size:30px;margin:0}
.lock p{color:var(--hero-mut);margin:0;max-width:30ch}
.pin{display:flex;gap:10px}
.pin i{width:14px;height:14px;border-radius:50%;border:2px solid var(--hero-mut)}
.pin i.on{background:var(--hero-ink);border-color:var(--hero-ink)}
.lock .keypad{width:min(300px,80vw)}
.lock .keypad button{background:color-mix(in srgb,var(--hero-ink) 9%,transparent);color:var(--hero-ink)}

/* Toasts */
.toasts{position:fixed;left:12px;right:12px;bottom:calc(var(--tab-h) + var(--sab) + 22px);z-index:400;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{pointer-events:auto;background:var(--ink);color:var(--paper);border-radius:16px;padding:13px 14px 13px 16px;display:flex;align-items:center;gap:14px;box-shadow:var(--shadow-lg);font-size:14.5px;animation:tin .35s var(--ease);max-width:520px;width:100%}
.toast span{flex:1}
.toast button{color:var(--mint2);font-weight:650;font-size:14px;min-height:36px}
@keyframes tin{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.fade-in{animation:fin .4s var(--ease) both}
@keyframes fin{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.offline-banner{position:fixed;top:calc(var(--sat) + 4px);left:50%;transform:translateX(-50%);z-index:90;background:var(--ink);color:var(--paper);font-size:12.5px;font-weight:600;padding:6px 12px;border-radius:999px;display:none}
body.offline .offline-banner{display:block}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ============ Escritorio ============ */
@media (min-width:900px){
  .hide-m{display:revert!important}.hide-d{display:none!important}
  .qa.hide-m{display:flex!important}
  .hero .eye{display:none}
  html,body{font-size:15px}
  .app{display:grid;grid-template-columns:96px 1fr}
  .rail{display:flex;position:sticky;top:0;height:100vh;flex-direction:column;align-items:center;gap:4px;padding:20px 0;border-right:1px solid var(--line);z-index:20}
  .logo{width:44px;height:44px;border-radius:14px;background:var(--ink);color:var(--paper);display:grid;place-items:center;margin-bottom:16px;font-family:var(--f-display);font-size:24px;font-weight:600}
  .rail .tab{width:76px;height:auto;padding:9px 0 7px;font-size:11px}
  .rail .tab:hover{background:var(--card2);color:var(--ink)}
  .rail .tab[aria-current=page]{background:var(--card)}
  .rail .spacer{flex:1}
  .rail .fab{margin:6px 0 10px}
  .tabbar{display:none}
  .bar{padding:16px 40px 8px;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:0;position:static;justify-content:flex-end}
  .bar .ttl{display:none}
  main{padding:0 40px 80px}
  .pg-h{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin:-48px 0 24px;max-width:calc(100% - 260px)}
  .pg-h h1{font-size:42px}
  .pg-h .acts{margin-top:0}
  .g-home{grid-template-columns:repeat(12,minmax(0,1fr))}
  .s12{grid-column:span 12}.s8{grid-column:span 8}.s7{grid-column:span 7}.s6{grid-column:span 6}.s5{grid-column:span 5}.s4{grid-column:span 4}
  .widgets{grid-auto-flow:row;grid-template-columns:repeat(4,1fr);grid-auto-columns:auto;margin:0;padding:0;overflow:visible}
  .dots{display:none}
  .quick{grid-template-columns:repeat(6,1fr)}
  .hero{padding:28px}
  .hero .big{font-size:64px}
  .hero-in{display:grid;grid-template-columns:1.2fr 1fr;gap:30px;align-items:end}
  .hero .kv{margin-top:0;padding-top:0;border-top:0}
  .budgets{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
  .goals{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}
  .goals-strip{grid-auto-flow:row;grid-template-columns:repeat(4,1fr);margin:0;padding:0;overflow:visible}
  .accts{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}
  .cc{grid-column:auto}
  .kpis{grid-template-columns:repeat(4,1fr)}
  .chips{margin:0;padding:0;flex-wrap:wrap;overflow:visible}
  .scrim{align-items:center;padding:20px}
  .sheet{width:min(560px,100%);border-radius:28px;max-height:calc(100dvh - 40px);transform:translateY(16px) scale(.985);padding:8px 24px 22px}
  .sheet.wide{width:min(780px,100%)}
  .grab{display:none}
  .grab-zone{padding:6px 0}
  .sheet-foot{position:static;margin:10px 0 0;padding:0;justify-content:flex-end}
  .sheet-foot .btn{flex:0 0 auto}
  .keypad.touch-only{display:none}
  .cat-grid{grid-template-columns:repeat(6,1fr)}
  .toasts{bottom:28px;left:50%;right:auto;transform:translateX(-50%);width:auto}
  .search{inset:8vh auto auto 50%;transform:translate(-50%,10px);width:min(680px,92vw);max-height:76vh;border-radius:24px;border:1px solid var(--line);box-shadow:var(--shadow-lg);background:var(--card)}
  .search.on{transform:translate(-50%,0)}
  .search-scrim{position:fixed;inset:0;z-index:119;background:rgba(12,14,13,.35);display:none}
  .search-scrim.on{display:block}
  .day-h{top:0}
  .cd{aspect-ratio:auto;min-height:84px;align-items:flex-start;padding:8px 10px;font-size:15px}
  .cd .ds{justify-content:flex-start;max-width:none}
  .cd .sp{font-size:11px}
  .more{grid-template-columns:repeat(4,1fr)}
}
@media (min-width:900px) and (max-width:1180px){.s8,.s7,.s6,.s5,.s4{grid-column:span 12}.widgets{grid-template-columns:repeat(2,1fr)}}

/* ============ Impresión (reporte PDF) ============ */
.report{display:none}
@media print{
  @page{size:A4;margin:14mm}
  body{background:#fff;color:#111}
  .app,.tabbar,.toasts,.tipbox,.scrim,.search,.dial,.lock,.offline-banner{display:none!important}
  .report{display:block!important;font-size:11pt;color:#111}
  .report h1{font-family:var(--f-display);font-weight:400;font-size:26pt;margin:0 0 2mm}
  .report h2{font-family:var(--f-display);font-weight:400;font-size:15pt;margin:8mm 0 3mm;border-bottom:1px solid #ccc;padding-bottom:2mm}
  .report .kp{display:grid;grid-template-columns:repeat(4,1fr);gap:4mm;margin-top:5mm}
  .report .kp div{border:1px solid #ddd;border-radius:3mm;padding:3mm}
  .report .kp b{display:block;font-family:var(--f-display);font-weight:400;font-size:15pt;margin-top:1mm}
  .report table{width:100%;border-collapse:collapse;font-size:10pt}
  .report th,.report td{text-align:left;padding:1.6mm 2mm;border-bottom:1px solid #e5e5e5}
  .report td.r,.report th.r{text-align:right}
  .report .muted{color:#555}
  .report section{break-inside:avoid}
}
