:root{
  --bg:#F4F3F6; --card:#FFFFFF; --card-2:#FAFAFC; --ink:#241F31; --ink-2:#3D3A47;
  --muted:#6B6879; --faint:#747183; --line:#ECEBF0; --line-2:#DEDCE5;
  --accent:#0F766E; --accent-ink:#115E59; --accent-soft:#E4F4F1; --accent-2:#C7EAE3;
  --ok:#16A34A; --ok-soft:#E8F6EC; --warn:#E8930C; --warn-soft:#FDF3E3; --bad:#E05252; --bad-soft:#FBEAEA;
  --income:#A16A05;
  --fam-comida:#4E8E52; --fam-ocio:#5B67C4; --fam-salud:#C0684A; --fam-compras:#41847E;
  --fam-hogar:#94803E; --fam-finanzas:#7B6FA5; --fam-efectivo:#8A6B52; --fam-ingresos:#B57E14;
  --fam-transporte:#5C7FBB; --fam-ninos:#B25E9C; --fam-otros:#8B8798;
  --radius:18px; --radius-sm:12px; --pad:16px; --gap:12px; --sidebar:252px;
  --shadow:0 1px 2px rgba(20,18,30,.05),0 10px 26px -20px rgba(20,18,30,.20);
  --font:'Hanken Grotesk',-apple-system,'Segoe UI',system-ui,sans-serif;
  --numfont:'Space Grotesk','Hanken Grotesk',-apple-system,system-ui,sans-serif;
}
@media (prefers-color-scheme: dark){
  :root{--bg:#141218; --card:#1E1B24; --card-2:#26232E; --ink:#EDEBF2; --ink-2:#C9C6D4;
    --muted:#A5A1B2; --faint:#8F8CA0; --line:#302C39; --line-2:#3B3746;
    --accent:#2DD4BF; --accent-ink:#5EEAD4; --accent-soft:rgba(45,212,191,.14); --accent-2:rgba(45,212,191,.22);
    --ok:#4ADE80; --ok-soft:rgba(74,222,128,.14); --warn:#F0A94A; --warn-soft:rgba(240,169,74,.16); --bad:#F27979; --bad-soft:rgba(242,121,121,.15);
    --income:#E0AE4C;
    --fam-comida:#7DBE85; --fam-ocio:#98A2E8; --fam-salud:#E09877; --fam-compras:#77B7B0;
    --fam-hogar:#C4AC6A; --fam-finanzas:#A99FD0; --fam-efectivo:#B69679; --fam-ingresos:#E0AE4C;
    --fam-transporte:#8FAEDE; --fam-ninos:#DA93C4; --fam-otros:#8E8A9C;
    --shadow:0 1px 2px rgba(0,0,0,.3),0 14px 32px -20px rgba(0,0,0,.7);}
}
:root[data-theme="light"]{--bg:#F4F3F6; --card:#FFFFFF; --card-2:#FAFAFC; --ink:#241F31; --ink-2:#3D3A47;
  --muted:#6B6879; --faint:#747183; --line:#ECEBF0; --line-2:#DEDCE5;
  --accent:#0F766E; --accent-ink:#115E59; --accent-soft:#E4F4F1; --accent-2:#C7EAE3;
  --ok:#16A34A; --ok-soft:#E8F6EC; --warn:#E8930C; --warn-soft:#FDF3E3; --bad:#E05252; --bad-soft:#FBEAEA;
  --income:#A16A05;
  --fam-comida:#4E8E52; --fam-ocio:#5B67C4; --fam-salud:#C0684A; --fam-compras:#41847E;
  --fam-hogar:#94803E; --fam-finanzas:#7B6FA5; --fam-efectivo:#8A6B52; --fam-ingresos:#B57E14;
  --fam-transporte:#5C7FBB; --fam-ninos:#B25E9C; --fam-otros:#8B8798;
  --shadow:0 1px 2px rgba(20,18,30,.05),0 10px 26px -20px rgba(20,18,30,.20);}
:root[data-theme="dark"]{--bg:#141218; --card:#1E1B24; --card-2:#26232E; --ink:#EDEBF2; --ink-2:#C9C6D4;
  --muted:#A5A1B2; --faint:#8F8CA0; --line:#302C39; --line-2:#3B3746;
  --accent:#2DD4BF; --accent-ink:#5EEAD4; --accent-soft:rgba(45,212,191,.14); --accent-2:rgba(45,212,191,.22);
  --ok:#4ADE80; --ok-soft:rgba(74,222,128,.14); --warn:#F0A94A; --warn-soft:rgba(240,169,74,.16); --bad:#F27979; --bad-soft:rgba(242,121,121,.15);
  --income:#E0AE4C;
  --fam-comida:#7DBE85; --fam-ocio:#98A2E8; --fam-salud:#E09877; --fam-compras:#77B7B0;
  --fam-hogar:#C4AC6A; --fam-finanzas:#A99FD0; --fam-efectivo:#B69679; --fam-ingresos:#E0AE4C;
  --fam-transporte:#8FAEDE; --fam-ninos:#DA93C4; --fam-otros:#8E8A9C;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 14px 32px -20px rgba(0,0,0,.7);}

*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.5 var(--font);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}
button{font:inherit;color:inherit;background:none;border:none;cursor:pointer;padding:0;text-align:left;touch-action:manipulation;}
input,select{font:inherit;color:inherit;}
input,select,textarea,label{touch-action:manipulation;}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
::selection{background:var(--accent-2);}
::-webkit-scrollbar{width:11px;height:11px;} ::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:8px;border:3px solid var(--card);} ::-webkit-scrollbar-track{background:transparent;}
.hide{display:none!important}
.sr{position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap;}
.num,[data-num],.kpi .v,.spent,.nums,.row .a,.tx td.a,.tx td.d,.msg.model .metric .v{font-family:var(--numfont);font-variant-numeric:tabular-nums;letter-spacing:-.01em;}

/* shell */
.fz-mobtop{display:none;position:sticky;top:0;z-index:30;align-items:center;justify-content:space-between;gap:10px;
  padding:calc(11px + env(safe-area-inset-top)) 14px 11px;
  background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);}
.fz-logo{width:30px;height:30px;border-radius:9px;background:var(--accent);display:grid;place-items:center;flex:none;color:var(--bg);font-weight:700;font-size:15px;}
#installbanner,#updbanner{display:flex;align-items:center;gap:10px;padding:10px 14px;font-size:13.5px;
  background:color-mix(in srgb,var(--accent) 12%,var(--bg));border-bottom:1px solid var(--line);}
#installbanner.hide,#updbanner.hide{display:none;}
:root[data-theme="dark"] .fz-logo{color:#141218;}
.fz-shell{display:grid;grid-template-columns:var(--sidebar) 1fr;align-items:start;}
.fz-sidebar{position:sticky;top:0;height:100dvh;display:flex;flex-direction:column;gap:4px;padding:22px 16px 18px;
  border-right:1px solid var(--line);background:color-mix(in srgb,var(--card) 55%,var(--bg));}
#views{display:flex;flex-direction:column;gap:4px;}
.fz-navbtn{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:11px;color:var(--muted);font-weight:500;font-size:14.5px;width:100%;transition:background .12s,color .12s;}
.fz-navbtn:hover{background:var(--accent-soft);color:var(--ink);}
.fz-navbtn.on{background:var(--accent-soft);color:var(--accent-ink);font-weight:600;}
.fz-navbtn.on .fz-ic{color:var(--accent);}
.fz-ic{width:19px;height:19px;flex:none;color:var(--faint);display:inline-block;}
.fz-ic svg{width:100%;height:100%;display:block;}
.fz-icbtn{width:38px;height:38px;border-radius:10px;border:1px solid var(--line);background:var(--card);display:inline-flex;align-items:center;justify-content:center;color:var(--ink-2);transition:.12s;flex:none;}
.fz-icbtn:hover{border-color:var(--accent);color:var(--accent);}
.fz-icbtn .fz-ic{width:17px;height:17px;color:inherit;}
.pushtoggle.on{border-color:var(--accent);color:var(--accent-ink);}
.pushtoggle.on .fz-ic{color:var(--accent);}
.prefrow{display:flex;align-items:flex-start;gap:10px;cursor:pointer;}
.prefrow input{accent-color:var(--accent);margin-top:3px;flex:none;}
.prefrow b{display:block;font-size:13.5px;font-weight:600;}
.prefrow small{display:block;font-size:12px;color:var(--muted);margin-top:1px;}
.memrow{display:flex;align-items:flex-start;gap:9px;padding:9px 0;border-bottom:1px solid var(--line);}
.memrow:last-child{border-bottom:0;}
.memrow .memtx{flex:1;min-width:0;font-size:13px;line-height:1.45;}
.memrow .memdate{font-size:11px;color:var(--muted);margin-bottom:2px;}
.memrow button{flex:none;width:26px;height:26px;border-radius:8px;border:1px solid var(--line);background:none;color:var(--muted);cursor:pointer;font-size:13px;line-height:1;}
.memrow button:hover{color:var(--bad);border-color:var(--bad);}
#meminput{padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card-2);color:inherit;font:inherit;font-size:13.5px;}
/* ajustes: columna única con navegación de secciones sticky */
#view-ajustes{max-width:720px;}
#view-ajustes .card{margin-bottom:var(--gap);}
#view-ajustes .card>h2:first-child{margin-top:0;}
#view-ajustes section, #view-presu section{scroll-margin-top:64px;}
.ajnav{position:sticky;top:8px;z-index:15;display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:5px;margin-bottom:14px;
  background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(8px);border:1px solid var(--line);border-radius:999px;width:fit-content;max-width:100%;}
.ajnav::-webkit-scrollbar{display:none;}
.ajnav button{padding:6px 14px;border-radius:999px;font-size:13px;color:var(--muted);white-space:nowrap;flex:none;transition:.12s;}
.ajnav button:hover{color:var(--accent-ink);background:var(--accent-soft);}
.ajnav button.on{background:var(--accent);color:var(--bg);font-weight:600;}
@media(max-width:640px){.ajnav{top:calc(62px + env(safe-area-inset-top));} #view-ajustes section, #view-presu section{scroll-margin-top:118px;}}
#view-ajustes input:not([type=checkbox]),#view-ajustes select,#view-ajustes textarea{padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card-2);color:var(--ink);font:inherit;font-size:13.5px;}
#view-ajustes summary{cursor:pointer;font-size:13px;color:var(--accent-ink);font-weight:600;}
/* conexiones bancarias */
.gcconn{border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px;background:var(--card-2);}
.gcconn+.gcconn{margin-top:8px;}
.gcconn .hd{display:flex;align-items:center;gap:8px;}
.gcconn .nm{flex:1;min-width:0;font-weight:600;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gcconn .del{flex:none;width:26px;height:26px;border-radius:8px;border:1px solid var(--line);color:var(--muted);font-size:13px;line-height:1;text-align:center;}
.gcconn .del:hover{color:var(--bad);border-color:var(--bad);}
.gcconn .acc{font-size:12.5px;color:var(--ink-2);margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gcconn .acc small{color:var(--faint);font-size:11px;}
.gcconn .meta{font-size:11.5px;color:var(--muted);margin-top:5px;}
.gcconn .warnline{font-size:12px;font-weight:600;margin-top:6px;}
.gcconn .warnline.bad{color:var(--bad);}
.gcconn .warnline.warn{color:var(--warn);}
.gcconn .reconnect{margin-top:8px;}
.ic-sun{display:none;}
:root[data-theme="dark"] .ic-moon{display:none;}
:root[data-theme="dark"] .ic-sun{display:inline-block;}
@media (prefers-color-scheme: dark){
  :root:not([data-theme]) .ic-moon{display:none;}
  :root:not([data-theme]) .ic-sun{display:inline-block;}
}
.fz-main{padding:26px 30px 44px;min-width:0;}
.fz-wrap{max-width:1240px;margin:0 auto;}
.fz-titlerow{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:18px;}
h1{margin:0;font-size:31px;font-weight:800;letter-spacing:-.025em;line-height:1.08;}
.sub{margin:4px 0 0;color:var(--muted);font-size:14px;}
h2{margin:20px 0 9px;font-size:15px;font-weight:600;color:var(--ink);}
.smallcap{font-size:11px;text-transform:uppercase;letter-spacing:.055em;color:var(--muted);font-weight:600;}

/* pestañas de mes */
.tabs{display:flex;gap:6px;overflow-x:auto;max-width:100%;padding-bottom:2px;scrollbar-width:none;}
.tabs::-webkit-scrollbar{display:none;}
.tabs button{padding:7px 15px;border-radius:999px;border:1px solid var(--line);background:var(--card);font-size:13.5px;color:var(--muted);white-space:nowrap;flex:none;transition:.12s;}
.tabs button:hover{background:var(--accent-soft);border-color:transparent;color:var(--accent-ink);}
.tabs button.on{background:var(--accent);border-color:var(--accent);color:var(--bg);font-weight:600;}

/* KPIs */
.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--gap);}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:10px 12px;display:flex;flex-direction:column;gap:2px;}
.kpi .l{font-size:11px;text-transform:uppercase;letter-spacing:.055em;color:var(--faint);font-weight:600;}
.kpi .v{font-size:21px;font-weight:600;white-space:nowrap;}
.kpi .v.ok{color:var(--ok)} .kpi .v.bad{color:var(--bad)}
.kpi .s{font-size:12px;color:var(--muted);}
@media(max-width:1300px){.kpis{grid-template-columns:repeat(3,1fr);}}
@media(max-width:620px){.kpis{grid-template-columns:repeat(2,1fr);gap:8px;} .kpi .v{font-size:clamp(16px,5vw,21px);}}

/* layout de dos columnas */
.fz-2col{display:grid;grid-template-columns:1.55fr 1fr;gap:var(--gap);margin-top:var(--gap);align-items:start;}
.fz-2col.even{grid-template-columns:1fr 1fr;}
@media(max-width:1080px){.fz-2col{grid-template-columns:1fr!important;}}

/* masonry del Resumen: dos columnas que apilan sus tarjetas sin huecos entre filas */
.fz-masonry{display:grid;grid-template-columns:1.55fr 1fr;gap:var(--gap);margin-top:var(--gap);align-items:start;}
.fz-mcol{display:flex;flex-direction:column;gap:var(--gap);min-width:0;}
@media(max-width:1080px){
  .fz-masonry{display:flex;flex-direction:column;align-items:stretch;}
  .fz-mcol{display:contents;} /* en móvil las tarjetas se intercalan según su order */
}

/* tarjetas */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--gap);}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--pad);}
.card>button.hd{display:flex;width:100%;justify-content:space-between;align-items:center;gap:10px;}
.card h3{font-size:15.5px;font-weight:600;margin:0;}
.cardhd{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px;}
.cardhd h2{margin:0;}
.pill{font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;padding:3px 9px;border-radius:99px;white-space:nowrap;}
.pill.ok{color:var(--ok);background:var(--ok-soft);}
.pill.warn{color:var(--warn);background:var(--warn-soft);}
.pill.bad{color:var(--bad);background:var(--bad-soft);}
.nums{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin:.5rem 0 .45rem;}
.spent{font-size:22px;font-weight:600;}
.spent small{font-size:13px;font-weight:400;color:var(--muted);}
.remain{color:var(--muted);font-size:12.5px;text-align:right;}
.remain b{color:var(--ink);}
.proj{font-size:12px;color:var(--muted);margin:-.1rem 0 .5rem;}
.proj b{color:var(--ink);}
.proj.bad, .proj.bad b{color:var(--bad);}
.track{position:relative;height:10px;background:var(--line);border:none;border-radius:999px;margin-bottom:.3rem;overflow:hidden;}
.fill{position:absolute;inset:0 auto 0 0;border-radius:999px;background:var(--ok);max-width:100%;}
.fill.warn{background:var(--warn)} .fill.bad{background:var(--bad)}
.pace{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--ink);opacity:.45;}

/* listas */
.rows{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;}
.row{width:100%;display:grid;grid-template-columns:1fr 7rem 5.5rem;gap:12px;align-items:center;padding:9px 13px;border-top:1px solid var(--line);}
.rows .row:first-child{border-top:none}
button.row:hover{background:var(--accent-soft);}
.row .n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.row .n small{color:var(--muted);font-size:11.5px;display:block;font-weight:400;font-family:var(--font);}
.row .b{height:8px;background:var(--line);border-radius:999px;position:relative;overflow:hidden;}
.row .b i{position:absolute;inset:0 auto 0 0;background:color-mix(in srgb,var(--accent) 55%,var(--card));border-radius:999px;max-width:100%;}
.row .a{text-align:right;font-weight:600;}
.row .a small{display:block;font-weight:400;color:var(--muted);font-size:11px;}
.row .a.up{color:var(--bad)} .row .a.dn{color:var(--ok)}
.row .b:empty{visibility:hidden;}
/* agenda: chip de fecha tipo calendario en vez de fecha dentro de la barra */
.row.agrow{grid-template-columns:auto 1fr auto;grid-template-areas:"d n a";}
.row.agrow .dchip{grid-area:d;}
.row.agrow .n{grid-area:n;}
.row.agrow .a{grid-area:a;}
.dchip{width:40px;flex:none;padding:4px 0 5px;border-radius:10px;background:var(--card-2);border:1px solid var(--line);
  display:flex;flex-direction:column;align-items:center;line-height:1.15;}
.dchip b{font-family:var(--numfont);font-variant-numeric:tabular-nums;font-size:15px;font-weight:700;}
.dchip small{font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700;}
.dchip.late{border-color:var(--warn);}
.dchip.late b,.dchip.late small{color:var(--warn);}
/* móvil: las filas se apilan — nombre a ancho completo, importe a la derecha, barra debajo */
@media(max-width:640px){
  .row:not(.cmp):not(.agrow){grid-template-columns:1fr auto!important;grid-template-areas:"n a" "b b";}
  .row:not(.cmp) .n{grid-area:n;white-space:normal;overflow-wrap:anywhere;}
  .row:not(.cmp) .n small{margin-top:1px;}
  .row:not(.cmp):not(.agrow) .a{grid-area:a;}
  .row:not(.cmp) .b{grid-area:b;margin-top:2px;}
  .row:not(.cmp) .b:empty{display:none;}
  .row:not(.cmp)>span:empty{display:none;}
}
.caret{color:var(--muted);font-size:.7rem;margin-left:.3rem;}
.morebtn .n{color:var(--accent-ink);font-weight:600;}
.cmp{grid-template-columns:1fr 5.2rem 5.2rem 4.6rem;}
.cmp .a{color:var(--ink);}
@media(max-width:640px){
  .cmp{grid-template-columns:1fr 1fr 1fr;gap:1px 10px;}
  .cmp .n{grid-column:1/-1;white-space:normal;}
  .cmp .n:empty{display:none;}
  .cmp .n small{display:inline;margin-left:.4rem;}
}
.tx{border-top:1px solid var(--line);background:var(--card-2);padding:6px 14px 10px;overflow-x:auto;}
.tx table{width:100%;border-collapse:collapse;font-size:12.5px;}
.tx td{padding:4px 5px;border-top:1px dotted var(--line);color:var(--muted);}
.tx tr:first-child td{border-top:none}
.tx td.m{color:var(--ink-2);max-width:0;width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font);}
.tx td.a{text-align:right;color:var(--ink);font-weight:600;white-space:nowrap;}
.tx td.a.inc{color:var(--ok)}
.tx td.d{white-space:nowrap;}

/* gráfico + este mes */
#chart{width:100%;height:240px;display:block;cursor:pointer;}
.note{color:var(--muted);font-size:12.5px;margin:8px 2px 0;}
.note b{color:var(--ink);}
.legend{display:flex;gap:14px;font-size:12px;color:var(--muted);margin:0;}
.legend .sw{width:9px;height:9px;border-radius:2px;display:inline-block;margin-right:5px;vertical-align:-1px;}
.sumline{display:flex;justify-content:space-between;gap:8px;align-items:baseline;font-size:13px;}
.sumline .lab{color:var(--muted);}
.hr{height:1px;background:var(--line);}

/* consejos */
#tips{display:flex;flex-direction:column;gap:var(--gap);}
.tipcard{border-left:3px solid var(--accent);position:relative;overflow:hidden;padding:14px 15px;}
.tipcard .tipnum{position:absolute;right:8px;top:-8px;font-size:52px;font-weight:700;color:var(--accent);opacity:.08;line-height:1;pointer-events:none;font-family:var(--numfont);}
.tipcard h3{margin:0 0 4px;font-size:13.5px;font-weight:600;display:flex;gap:.45rem;align-items:baseline;}
.tipcard p{font-size:13px!important;line-height:1.5;}
.gentipswrap{display:flex;flex-direction:column;align-items:center;gap:.7rem;padding:1.6rem 1rem;border:1.5px dashed var(--line);border-radius:var(--radius);text-align:center;}
.gentipswrap .big{font-size:1.6rem;}
.gentipswrap .note{margin:0;}
#gentips{padding:.55rem 1.3rem;border-radius:999px;background:var(--accent);color:var(--bg);font-weight:600;font-size:.9rem;transition:opacity .15s,transform .15s;}
#gentips:hover{opacity:.88;transform:translateY(-1px);}
#gentips[disabled]{opacity:.5;transform:none;cursor:default;}

/* botones sueltos */
.syncbtn{padding:8px 13px;border-radius:10px;border:1px solid var(--line);background:var(--card);color:var(--ink);font-size:13.5px;}
.syncbtn:hover{border-color:var(--accent);}
.syncbtn[disabled]{opacity:.5;cursor:default;}
#offlinepill{position:fixed;top:.6rem;left:50%;transform:translateX(-50%);z-index:60;display:flex;align-items:center;gap:.4rem;
  padding:.35rem .85rem;border-radius:999px;background:var(--card);border:1px solid var(--warn);color:var(--warn);
  font-size:.8rem;font-weight:600;box-shadow:0 4px 14px rgba(0,0,0,.12);animation:pillin .3s ease;}
@keyframes pillin{from{opacity:0; transform:translate(-50%,-8px);} to{opacity:1; transform:translate(-50%,0);}}
/* pull-to-refresh (móvil) */
/* acción revelada al hacer swipe sobre una fila de movimiento (se posiciona por JS en el hueco) */
#swipeact{position:fixed;z-index:5;display:flex;align-items:center;justify-content:center;gap:4px;overflow:hidden;white-space:nowrap;pointer-events:none;background:var(--accent-soft);color:var(--accent-ink);font-size:11px;font-weight:600;}
#swipeact.hit{background:var(--accent);color:var(--bg);}
#ptr{position:fixed;top:calc(-40px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);z-index:35;
  width:34px;height:34px;border-radius:50%;background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);
  display:flex;align-items:center;justify-content:center;color:var(--accent);font-size:15px;}

/* editor de movimientos */
.filters{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:12px;}
/* modo selección: las casillas viven ocultas hasta activarlo (botón ☑ o long-press en una fila) */
#view-movs:not(.selmode) .selbox,#view-movs:not(.selmode) .ed-selall{display:none;}
#selmodebtn[aria-pressed="true"]{border-color:var(--accent);color:var(--accent-ink);background:var(--accent-soft);}
.ed-tx{-webkit-user-select:none;user-select:none;} /* long-press = seleccionar, no lupa de texto */
.filters select,.filters input{padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink);font-size:13.5px;}
.filters input{flex:1;min-width:180px;}
#recatbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;position:sticky;top:8px;z-index:12;
  background:var(--card);border:1px solid var(--accent);border-radius:12px;padding:10px 13px;margin-bottom:12px;box-shadow:var(--shadow);font-size:13.5px;}
#recatbar select{padding:8px 11px;border:1px solid var(--line);border-radius:9px;background:var(--card-2);color:var(--ink);font-size:13.5px;}
.go{padding:8px 17px;border-radius:999px;background:var(--accent);color:var(--bg);font-weight:600;font-size:13.5px;border:0;cursor:pointer;white-space:nowrap;transition:opacity .15s;}
.go:hover{opacity:.88;}
.go[disabled]{opacity:.5;cursor:default;}
#envrows input[type=number]{padding:5px 7px;border:1px solid var(--line);border-radius:8px;background:var(--card-2);color:var(--ink);font-size:13px;}
#envaddcat{padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:var(--card-2);color:var(--ink);font-size:13px;}
#edmeta{color:var(--muted);font-size:12.5px;margin:0 2px 10px;}
.edmeta-uncat{color:var(--warn);font-weight:600;text-decoration:underline;text-underline-offset:2px;font-size:inherit;}
/* teasers del Resumen (enlazan a Calendario / Asesor) */
#upteaser:hover,#tipteaser:hover{border-color:var(--accent);}
#upteaser .ttx,#tipteaser .ttx{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
#advisorfeed:not(.hide){display:flex;}
/* badges de categoría (compartido) */
.catbadge{display:inline-flex;align-items:center;justify-content:center;border-radius:31%;color:#fff;flex:none;vertical-align:middle;}
.catbadge svg{width:62%;height:62%;display:block;}
.catdot{display:inline-block;width:7px;height:7px;border-radius:50%;flex:none;margin-right:6px;vertical-align:0;}
.row .n .catbadge{margin-right:8px;}
.tx td.m .catbadge{margin-right:2px;}

/* lista de movimientos estilo Bilance (editor) */
#edrows{display:flex;flex-direction:column;gap:12px;background:none;border:none;box-shadow:none;}
.ed-selall{align-self:flex-start;}
.ed-selall label{display:inline-flex;align-items:center;gap:8px;padding:7px 14px;border-radius:999px;background:var(--accent-soft);color:var(--accent-ink);font-size:13px;font-weight:600;cursor:pointer;}
.ed-selall input{width:16px;height:16px;accent-color:var(--accent);}
.ed-day{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;}
.ed-dayhd{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:12px 16px 9px;}
.ed-dayhd .dl{font-weight:700;font-size:13px;color:var(--ink);}
.ed-dayhd .dn{font-family:var(--numfont);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:600;color:var(--muted);white-space:nowrap;}
.ed-tx{display:flex;align-items:center;gap:12px;padding:9px 14px;border-top:1px solid var(--line);}
.ed-tx .selbox{flex:none;display:inline-flex;align-items:center;cursor:pointer;}
.ed-tx .selbox input{width:19px;height:19px;accent-color:var(--accent);}
.ed-tx .edmid{flex:1;min-width:0;}
.ed-tx .edm{font-weight:600;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ed-tx .edsub{display:flex;align-items:center;font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px;}
.ed-tx .edsub .cn{overflow:hidden;text-overflow:ellipsis;}
.ed-tx .eda{flex:none;font-family:var(--numfont);font-variant-numeric:tabular-nums;font-weight:700;font-size:14px;white-space:nowrap;text-align:right;}
.ed-tx .eda.inc{color:var(--ok);}
.ed-tx .tagbtn{flex:none;}
.ed-tx.unc{opacity:.55;}
.ed-empty{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px 16px;text-align:center;color:var(--muted);font-size:13.5px;}

/* toast */
#toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(1.4rem + env(safe-area-inset-bottom));background:var(--ink);color:var(--bg);
  padding:10px 16px;border-radius:11px;font-size:13.5px;font-weight:500;box-shadow:0 8px 24px rgba(0,0,0,.28);z-index:100;
  opacity:0;transition:opacity .25s;pointer-events:none;max-width:min(90vw,460px);}
#toast.show{opacity:1;}
@media(max-width:1000px){#toast{bottom:calc(4.8rem + env(safe-area-inset-bottom));}}

/* hojas modales */
.tagbtn{opacity:0;transition:opacity .15s;border-radius:6px;padding:.1rem .25rem;line-height:1;font-size:1rem;min-width:32px;min-height:32px;}
[data-rid]:hover .tagbtn, #calmanual .row:hover .tagbtn, #calagenda .row:hover .tagbtn, .tagbtn:focus-visible{opacity:1;}
@media (hover:none){.tagbtn{opacity:.55;}}
#recatoverlay, #dsheetoverlay, #nboverlay, #pmoverlay, #ctoverlay, #addoverlay{position:fixed;inset:0;background:rgba(0,0,0,.42);z-index:80;animation:fzfade .18s ease;}
@keyframes fzfade{from{opacity:0}}
#recatsheet, #dsheet, #nbsheet, #pmsheet, #ctsheet, #addsheet{position:fixed;z-index:81;background:var(--card);border:1px solid var(--line);
  box-shadow:0 20px 60px -20px rgba(0,0,0,.5);padding:18px 19px;display:flex;flex-direction:column;gap:12px;
  left:50%;top:50%;transform:translate(-50%,-50%);width:min(420px, calc(100vw - 2rem));border-radius:var(--radius);}
#dsheet{width:min(480px, calc(100vw - 2rem));max-height:82vh;}
#recatsheet .rs-m, #dsheet .rs-m, #nbsheet .rs-m, #pmsheet .rs-m, #ctsheet .rs-m, #addsheet .rs-m{font-weight:600;overflow-wrap:anywhere;}
#nbsheet input[type=text], #nbsheet input[type=number], #pmsheet input, #ctsheet input, #ctsheet textarea, #addsheet input:not([type=checkbox]){padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card-2);color:var(--ink);}
#ctsheet textarea{resize:vertical;font:inherit;font-size:14px;}
#ctsheet .ct-l{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted);}
#ct-scan{padding:10px 12px;border:1px dashed var(--line-2);border-radius:10px;color:var(--muted);font-size:13.5px;}
#ct-scan:hover{border-color:var(--accent);color:var(--ink);}
#ct-scan[disabled]{opacity:.55;}
#ct-ok{background:var(--accent);color:var(--bg);font-weight:600;border-color:var(--accent);border-radius:999px;padding-left:18px;padding-right:18px;}
.rs-actions{display:flex;gap:8px;justify-content:flex-end;}
.rs-actions button{padding:9px 15px;border-radius:9px;border:1px solid var(--line);text-align:center;font-size:13.5px;}
#pm-ok, #rs-go, #nb-go{background:var(--accent);color:var(--bg);font-weight:600;border-color:var(--accent);border-radius:999px;padding-left:18px;padding-right:18px;}
#nbcats{max-height:38vh;overflow-y:auto;display:flex;flex-direction:column;gap:.15rem;border:1px solid var(--line);border-radius:10px;padding:.5rem .6rem;}
#nbcats label{display:flex;align-items:center;gap:.4rem;font-size:.85rem;}
#nbcats input, #recatsheet input[type=checkbox]{accent-color:var(--accent);}
#recatsheet .rs-meta{color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums;font-family:var(--numfont);}
#recatsheet select{padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card-2);color:var(--ink);}
#recatsheet label{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--muted);cursor:pointer;}
#recatsheet .rs-note{color:var(--warn);font-size:13px;margin:0;}
#rs-search{padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card-2);color:var(--ink);font-size:14px;}
#rs-catlist{max-height:46vh;overflow-y:auto;display:flex;flex-direction:column;gap:2px;margin:-2px -4px;padding:2px 4px;}
#ad-catlist{max-height:26vh;overflow-y:auto;display:flex;flex-direction:column;gap:2px;border:1px solid var(--line);border-radius:10px;padding:4px;}
.rs-catitem{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:12px;width:100%;text-align:left;font-size:14px;color:var(--ink);}
.rs-catitem:hover{background:var(--accent-soft);}
.rs-catitem.on{background:var(--accent-soft);color:var(--accent-ink);font-weight:600;}
.rs-catitem .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rs-catitem .rs-check{color:var(--accent);flex:none;font-weight:700;}
.rs-empty{color:var(--muted);font-size:13px;text-align:center;padding:14px;}
#rs-go[disabled], #recatsheet select[disabled], #recatsheet input[disabled]{opacity:.5;cursor:default;}
#ds-hd{display:flex;justify-content:space-between;align-items:center;gap:10px;}
#ds-close{width:32px;height:32px;border-radius:8px;text-align:center;}
#ds-close:hover{background:var(--line);}
#ds-body{overflow-y:auto;}
@media(max-width:640px){
  /* --kb: altura del teclado (iOS, vía visualViewport); la sheet sube con él y se encoge si no cabe */
  #recatsheet, #dsheet, #ctsheet, #addsheet{left:0; right:0; bottom:var(--kb, 0px); top:auto; transform:none; width:100%;
    max-height:calc(100dvh - var(--kb, 0px) - 12px); overflow-y:auto;
    border-radius:var(--radius) var(--radius) 0 0; border-left:none; border-right:none; border-bottom:none;
    padding-bottom:calc(1rem + env(safe-area-inset-bottom));}
  /* diálogos centrados (sobres, pagos): subir media altura de teclado para que no tape los botones */
  #nbsheet, #pmsheet{top:calc(50% - var(--kb, 0px)/2); max-height:calc(100dvh - var(--kb, 0px) - 24px); overflow-y:auto;}
  /* asa de arrastre: señal visual de "esto se desliza hacia abajo" */
  #recatsheet::before, #dsheet::before, #ctsheet::before, #addsheet::before{content:'';flex:none;width:38px;height:4px;border-radius:99px;
    background:var(--line-2);margin:-6px auto -2px;}
  #recatsheet .rs-actions button, #ctsheet .rs-actions button, #addsheet .rs-actions button{min-height:44px; flex:1;}
  #dsheet{max-height:85vh;}
}

/* tarjetas colapsables: cabecera pulsable con chevron, estado en localStorage */
.card[data-clp]>.cardhd{cursor:pointer;user-select:none;-webkit-user-select:none;}
.card[data-clp]>.cardhd>h2{flex:1;min-width:0;}
.clp-chev{flex:none;width:28px;height:28px;border-radius:8px;color:var(--faint);font-size:13px;
  display:inline-flex;align-items:center;justify-content:center;transition:transform .18s;}
.card[data-clp]>.cardhd:hover .clp-chev{background:var(--accent-soft);color:var(--accent);}
.card.clp>*:not(.cardhd){display:none!important;}
/* cifra clave visible en la cabecera solo mientras la tarjeta está colapsada */
.clp-sum{display:none;font-family:var(--numfont);font-variant-numeric:tabular-nums;font-size:13.5px;font-weight:600;color:var(--muted);white-space:nowrap;flex:none;}
.card.clp>.cardhd .clp-sum{display:inline;}
.card.clp .clp-chev{transform:rotate(-90deg);}
.card.clp>.cardhd{margin-bottom:0;}
.fz-icbtn[disabled]{opacity:.4;cursor:default;}

/* nav inferior (móvil) */
#bottomnav{display:none;}
/* teclado abierto (táctil): la barra inferior estorba — en Android subiría pegada al teclado */
@media (hover:none){:root.kbopen #bottomnav{display:none!important;}}

/* chat (vista Asesor) */
#chatwrap{max-width:840px;margin:0 auto;}
/* modo pantalla completa: por debajo de las sheets (80) y por encima del nav móvil (40) */
#chatwrap.full{position:fixed;inset:0;z-index:50;max-width:none;margin:0;background:var(--bg);
  padding:env(safe-area-inset-top) 0 max(env(safe-area-inset-bottom), var(--kb, 0px));} /* iOS no desplaza los fixed al abrir teclado */
#chatwrap.full>:not(#chatpanel){display:none!important;}
#chatwrap.full #chatpanel{height:100%;border-radius:0;border:none;box-shadow:none;}
#chatpanel{display:flex;flex-direction:column;height:min(72dvh,760px);padding:0;overflow:hidden;position:relative;}
/* botón flotante para volver al final del hilo cuando se lee arriba */
#chatjump{position:absolute;left:50%;transform:translateX(-50%);bottom:118px;/* fallback; JS lo ancla al borde real del log */z-index:2;min-width:38px;min-height:38px;border-radius:999px;background:var(--card);border:1px solid var(--line);box-shadow:0 2px 8px rgba(0,0,0,.14);font-size:16px;color:var(--accent);text-align:center;}
#chathd{padding:12px 16px;border-bottom:1px solid var(--line);font-weight:600;font-size:14.5px;display:flex;justify-content:space-between;align-items:center;flex:none;}
#chathd .hdlab{display:flex;align-items:center;gap:9px;}
#chathd .hdlab .fz-ic{width:18px;height:18px;color:var(--accent);}
#chathdbtns{display:flex;gap:4px;align-items:center;}
#chathdbtns button{min-width:32px;min-height:32px;border-radius:8px;font-size:1rem;text-align:center;}
#chathdbtns button:hover{background:var(--line);}
#chatlog{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;}
.msg{max-width:90%;padding:9px 13px;border-radius:14px;font-size:14px;}
.msg.user{align-self:flex-end;border-radius:14px 14px 4px 14px;background:var(--accent-2);color:var(--ink);white-space:pre-wrap;}
.msg.model{align-self:flex-start;border-radius:14px 14px 14px 4px;background:var(--card-2);border:1px solid var(--line);color:var(--ink);width:100%;padding:11px 13px;}
.msg.model .metric{display:inline-block;background:var(--card);border:1px solid var(--line);border-radius:9px;padding:6px 11px;margin:.2rem .4rem .2rem 0;}
.msg.model .metric .l{font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--faint);font-weight:600;}
.msg.model .metric .v{font-size:16px;font-weight:600;}
.msg.model table{width:100%;border-collapse:collapse;font-size:12.5px;margin:.3rem 0;}
.msg.model td,.msg.model th{padding:4px 6px;border-top:1px solid var(--line);text-align:left;}
.msg.model th{color:var(--muted);font-weight:600;}
.msg.model canvas{width:100%;height:140px;}
#chatform{display:flex;gap:8px;padding:12px 14px;border-top:1px solid var(--line);flex:none;align-items:flex-end;}
#chatinput{flex:1;padding:10px 13px;border:1px solid var(--line);border-radius:10px;background:var(--card-2);color:var(--ink);font-size:14px;font-family:inherit;line-height:1.4;resize:none;max-height:120px;overflow-y:auto;}
#chatsend{padding:10px 19px;border-radius:999px;background:var(--accent);color:var(--bg);font-weight:600;font-size:14px;}
#chatattach{min-width:40px;min-height:40px;border-radius:10px;background:var(--card-2);border:1px solid var(--line);font-size:16px;flex:none;}
#chatimgchip{padding:0 14px;}
#chatconvos{flex:1;overflow-y:auto;padding:8px;}
.cv-row{display:flex;align-items:center;gap:.5rem;padding:.5rem .6rem;min-height:44px;border-radius:10px;cursor:pointer;}
.cv-row:hover{background:var(--accent-soft);}
.cv-row .cv-t{flex:1;min-width:0;overflow:hidden;}
.cv-row .cv-title{font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cv-row .cv-date{font-size:.75rem;color:var(--muted);}
.cv-row button{min-width:44px;min-height:44px;border-radius:8px;font-size:1rem;flex:none;text-align:center;}
.cv-row button:hover{background:var(--card-2);}
#chatconvos details{margin-top:.6rem;border-top:1px solid var(--line);padding-top:.4rem;}
#chatconvos summary{cursor:pointer;color:var(--muted);font-size:.85rem;padding:.5rem .4rem;min-height:44px;display:flex;align-items:center;}
.cv-empty{color:var(--muted);font-size:.85rem;text-align:center;padding:1rem;}
#chatempty{margin:auto;text-align:center;color:var(--muted);max-width:440px;padding:20px 0;}
#chatempty p{margin:0 0 15px;font-size:14.5px;line-height:1.5;}
#chatempty .bub{width:46px;height:46px;border-radius:13px;background:var(--accent-soft);display:grid;place-items:center;margin:0 auto 13px;}
#chatempty .bub .fz-ic{width:22px;height:22px;color:var(--accent);}
.chip{display:inline-block;margin:.2rem;padding:8px 14px;border:1px solid transparent;border-radius:999px;background:var(--accent-soft);color:var(--accent-ink);font-weight:600;font-size:13.5px;text-align:center;transition:.12s;}
.chip:hover{background:var(--accent-2);color:var(--accent-ink);}
.dots i{font-style:normal;animation:blink 1.3s infinite;}
.dots i:nth-child(2){animation-delay:.2s;}
.dots i:nth-child(3){animation-delay:.4s;}
@keyframes blink{0%,80%,100%{opacity:.2}40%{opacity:1}}

/* carga y login */
#loadwrap{max-width:340px;margin:20vh auto;text-align:center;color:var(--muted);}
#loadwrap button{margin-top:.6rem;}
.pulse{animation:pulse 1.2s ease-in-out infinite;}
@keyframes pulse{0%,100%{opacity:.35}50%{opacity:1}}
#loginwrap{max-width:340px;margin:20vh auto;padding:0 1rem;}
#loginwrap h1{margin-bottom:1rem;}
#loginwrap input{width:100%;padding:.65rem .8rem;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink);margin-bottom:.7rem;}
#loginwrap button{width:100%;padding:.7rem .8rem;border-radius:999px;background:var(--accent);color:var(--bg);font-weight:600;text-align:center;}
#lockwrap{position:fixed;inset:0;z-index:9999;background:var(--bg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:0 1rem;}
#lockwrap.hide{display:none;}
#lockwrap button{padding:.7rem 1.6rem;border-radius:999px;background:var(--accent);color:var(--bg);font-weight:600;}
#loginerr{color:var(--bad);font-size:.85rem;min-height:1.2em;margin:0 0 .5rem;}
.loginswitch{text-align:center;margin:.9rem 0 0;font-size:.85rem;}
.loginswitch a{color:var(--accent);text-decoration:none;}

footer{margin-top:2.2rem;color:var(--muted);font-size:.8rem;border-top:1px solid var(--line);padding-top:.9rem;}

/* móvil */
@media(max-width:1000px){
  .fz-desk{display:none!important;}
  .fz-mobtop{display:flex;}
  .fz-shell{grid-template-columns:1fr;}
  .fz-main{padding:12px 13px 92px;}
  #recatbar{top:calc(64px + env(safe-area-inset-top));}
  #bottomnav{position:fixed;left:0;right:0;bottom:0;z-index:40;display:flex;justify-content:space-around;align-items:stretch;
    background:color-mix(in srgb,var(--card) 94%,transparent);backdrop-filter:blur(12px);border-top:1px solid var(--line);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom));}
  #bottomnav button{flex:1;min-height:50px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;border-radius:11px;color:var(--muted);}
  #bottomnav button .fz-ic{width:22px;height:22px;color:inherit;}
  #bottomnav button .t{font-size:10.5px;font-weight:600;letter-spacing:.02em;}
  #bottomnav button.on{color:var(--accent);}
  #bottomnav button.fab{flex:none;align-self:center;width:56px;height:56px;min-height:56px;margin-top:-22px;border-radius:50%;
    background:var(--accent);color:var(--bg);box-shadow:0 6px 16px -5px var(--accent);border:3px solid var(--card);}
  #bottomnav button.fab .fz-ic{width:25px;height:25px;}
  #bottomnav button.fab.on{color:var(--bg);filter:brightness(1.12);}
  .fz-icbtn,#ds-close{min-width:44px;min-height:44px;}
  h1{font-size:21px;}
}
/* iOS hace zoom al enfocar inputs con fuente <16px: en táctil, todos a 16px */
@media(max-width:640px){
  input:not([type=checkbox]):not([type=radio]),select,textarea{font-size:16px!important;}
}
/* el scroll de paneles internos no arrastra al body (rebote encadenado) */
#ds-body,#chatlog,#rs-catlist,#chatconvos{overscroll-behavior:contain;}

/* micro-interacciones */
@media (prefers-reduced-motion: no-preference){
  button:not(.row):not(.hd):active{transform:scale(.97);}
  .view-in{animation:fzup .24s cubic-bezier(.2,.7,.3,1);}
  @keyframes fzup{from{opacity:0; transform:translateY(9px)}}
  /* entrada escalonada del Resumen: KPIs y tarjetas suben con un pequeño retardo incremental */
  .view-in .kpi, .view-in .fz-mcol>*{animation:fzup .3s cubic-bezier(.2,.7,.3,1) both;}
  .view-in .kpi:nth-child(2), .view-in .fz-mcol>:nth-child(2){animation-delay:.05s}
  .view-in .kpi:nth-child(3), .view-in .fz-mcol>:nth-child(3){animation-delay:.1s}
  .view-in .kpi:nth-child(4), .view-in .fz-mcol>:nth-child(4){animation-delay:.15s}
  .view-in .kpi:nth-child(5), .view-in .fz-mcol>:nth-child(5){animation-delay:.2s}
  .view-in .kpi:nth-child(n+6){animation-delay:.24s}
  .fill, .row .b i, .bil-catrow .bar i{animation:fillgrow .55s cubic-bezier(.2,.7,.3,1); transform-origin:left;}
  @keyframes fillgrow{from{transform:scaleX(0)}}
  #toast{transform:translate(-50%,10px); transition:opacity .25s, transform .25s;}
  #toast.show{transform:translate(-50%,0);}
  .spin{animation:fzspin .9s linear infinite;}
  @keyframes fzspin{to{transform:rotate(360deg)}}
  @media(max-width:640px){
    #recatsheet:not(.hide), #dsheet:not(.hide), #ctsheet:not(.hide), #addsheet:not(.hide){animation:sheetup .22s cubic-bezier(.2,.7,.3,1);}
    @keyframes sheetup{from{transform:translateY(30%); opacity:.4}}
  }
}

/* --- Resumen estilo Bilance --- */
.bil-donuts{display:flex;gap:12px;justify-content:space-around;flex-wrap:wrap;}
.bil-donut{position:relative;flex:none;width:100px;height:100px;}
.bil-donut canvas{width:100px;height:100px;display:block;}
.bil-dlbl{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;pointer-events:none;}
.bil-dlbl .da{font-family:var(--numfont);font-variant-numeric:tabular-nums;font-weight:700;font-size:13.5px;letter-spacing:-.02em;}
.bil-dlbl small{font-size:8.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--faint);font-weight:600;margin-top:2px;}
.bil-total{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:11px 13px;background:var(--card-2);border-radius:var(--radius-sm);}
.bil-total .l{font-size:13.5px;font-weight:600;color:var(--ink);}
.bil-total .v{font-family:var(--numfont);font-variant-numeric:tabular-nums;font-weight:700;font-size:16px;}
.bil-tasa{display:flex;align-items:center;gap:10px;}
.bil-tasa .ic{width:30px;height:30px;border-radius:9px;background:var(--accent-soft);display:grid;place-items:center;flex:none;color:var(--accent);}
.bil-tasa .ic svg{width:17px;height:17px;}
.bil-tasa .l{flex:1;font-size:13.5px;color:var(--ink);}
.bil-tasa .v{font-family:var(--numfont);font-variant-numeric:tabular-nums;font-weight:700;font-size:16px;}
.bil-toggle{display:inline-flex;gap:2px;background:var(--card-2);border-radius:999px;padding:2px;}
.bil-toggle button{padding:6px 13px;border-radius:999px;font-size:12px;font-weight:600;color:var(--muted);}
.bil-toggle button.on{background:var(--accent);color:var(--bg);}
@media(max-width:640px){.bil-toggle button{min-height:40px;min-width:46px;} .go{min-height:44px;}}
.bil-cat{display:flex;flex-direction:column;}
.bil-catrow{display:flex;align-items:center;gap:11px;padding:9px 0;border-top:1px solid var(--line);}
.bil-catrow:first-child{border-top:none;}
button.bil-catrow{width:100%;cursor:pointer;transition:background .15s;}
button.bil-catrow:hover, button.bil-catrow:focus-visible{background:var(--card-2);}
.bil-catrow .chev{color:var(--faint);font-size:15px;line-height:1;flex:none;}
.bil-cat.chartmode .bar{display:none;}
.bil-cat.noanim .bar i{animation:none;}
.bil-catdonut{display:flex;flex-direction:column;align-items:center;padding:6px 0 12px;}
.bil-donut.lg{width:150px;height:150px;}
.bil-donut.lg canvas{width:150px;height:150px;}
.bil-donut.lg .bil-dlbl .da{font-size:16px;}
.bil-donut.lg .bil-dlbl small{font-size:9.5px;}
.bil-catrow .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;}
.bil-catrow .bar{flex:0 0 76px;height:7px;background:var(--line);border-radius:999px;position:relative;overflow:hidden;}
.bil-catrow .bar i{position:absolute;inset:0 auto 0 0;border-radius:999px;max-width:100%;}
.bil-catrow .amt{font-family:var(--numfont);font-variant-numeric:tabular-nums;font-weight:700;font-size:14px;white-space:nowrap;}
.bil-catrow .amt.inc{color:var(--income);}
#weekchart{width:100%;height:150px;display:block;cursor:pointer;}
.bil-donuts button.bil-donut{cursor:pointer;border-radius:50%;}
.bil-donuts button.bil-donut:focus-visible{outline:2px solid var(--accent);outline-offset:3px;}

/* --- Calendario mensual --- */
#calgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;}
.cal-dow{text-align:center;font-size:10.5px;font-weight:700;color:var(--faint);text-transform:uppercase;letter-spacing:.04em;padding-bottom:2px;}
.cal-cell{aspect-ratio:1/1.05;border-radius:10px;background:var(--card-2);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:2px;overflow:hidden;}
.cal-cell.empty{background:transparent;}
.cal-cell.pos{background:var(--ok-soft);}
.cal-cell.neg{background:var(--bad-soft);}
.cal-cell.today{border:2px solid var(--accent);}
.cal-cell .dnum{font-size:12px;font-weight:600;color:var(--ink);}
.cal-cell .dnet{font-family:var(--numfont);font-variant-numeric:tabular-nums;font-size:9.5px;font-weight:600;line-height:1;}
.cal-cell.pos .dnet{color:var(--ok);}
.cal-cell.neg .dnet{color:var(--bad);}
button.cal-cell{text-align:center;cursor:pointer;}
button.cal-cell:hover{outline:1.5px solid var(--accent-2);}

/* --- Recurrentes pagado/pendiente --- */
.recsum{display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
.recsum .ring{position:relative;flex:none;width:96px;height:96px;}
.recsum .ring canvas{width:96px;height:96px;display:block;}
.recsum .ring .rl{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;}
.recsum .ring .rl .pv{font-family:var(--numfont);font-weight:700;font-size:18px;}
.recsum .ring .rl small{font-size:8.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--faint);font-weight:600;}
.recsum .legend2{display:flex;flex-direction:column;gap:8px;}
.recsum .lg{display:flex;align-items:center;gap:8px;font-size:13px;}
.recsum .lg .sw{width:10px;height:10px;border-radius:3px;flex:none;}
.recsum .lg b{font-family:var(--numfont);font-variant-numeric:tabular-nums;}
.rec-row .paidchk{color:var(--ok);font-weight:700;flex:none;}
.rec-row.paid{background:var(--ok-soft);}
/* lo ya resuelto no compite por atención: importe atenuado, la negrita queda para lo pendiente */
.rec-row.paid .a{color:var(--muted);font-weight:500;}

/* KPIs pulsables: abren una hoja con el desglose del cálculo */
.kpi.tap{cursor:pointer;transition:border-color .12s;}
.kpi.tap:hover{border-color:var(--accent);}

/* tarjeta Hoy */
#todayrows{display:flex;flex-direction:column;gap:8px;}
.today-line{display:flex;align-items:flex-start;gap:8px;font-size:13.5px;text-align:left;width:100%;}
.today-line small{color:var(--muted);}
button.today-line{color:var(--accent-ink);font-weight:600;}
button.today-line:hover{text-decoration:underline;text-underline-offset:2px;}
.today-env{display:flex;align-items:center;gap:8px;font-size:12.5px;padding-left:24px;}
.today-env .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.today-env .tb{flex:0 0 64px;height:5px;background:var(--line);border-radius:99px;position:relative;overflow:hidden;}
.today-env .tb i{position:absolute;inset:0 auto 0 0;background:var(--warn);border-radius:99px;max-width:100%;}
.today-env .tb i.over{background:var(--bad);}
.today-env .amt{font-family:var(--numfont);font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--muted);}

/* chips persistentes del chat (encima del input) */
#chatchips{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:9px 14px 0;flex:none;}
/* conversación vacía: enseñar todas las sugerencias en vez de una tira cortada */
#chatpanel.empty #chatchips{flex-wrap:wrap;overflow-x:visible;}
#chatchips::-webkit-scrollbar{display:none;}
#chatchips .chip{flex:none;margin:0;padding:6px 12px;font-size:12.5px;}
#chatstop{min-width:44px;border-radius:10px;border:1px solid var(--bad);color:var(--bad);font-size:15px;text-align:center;}

/* nombre de sobre desplegable (abre sus movimientos) */
button.envnm{display:block;width:100%;}
button.envnm:hover{color:var(--accent-ink);}

/* puntito de pago previsto en la rejilla del calendario */
.cal-cell .updot{width:5px;height:5px;border-radius:50%;background:var(--warn);flex:none;}

/* botón de acción dentro del toast (Deshacer) */
#toast .toastact{background:none;border:none;color:inherit;font-weight:700;text-decoration:underline;text-underline-offset:2px;margin-left:12px;cursor:pointer;}

/* onboarding por pestaña */
.onb{margin-bottom:var(--gap);border-color:var(--accent-2);
  background:linear-gradient(135deg,var(--accent-soft),var(--card) 55%);}
.onb-hd{display:flex;align-items:center;gap:10px;margin-bottom:4px;}
.onb-hd h2{margin:0;font-size:16px;}
.onb-ic{flex:none;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-size:17px;background:var(--accent-soft);}
.onb-row{display:flex;gap:10px;align-items:flex-start;padding-top:8px;}
.onb-row>span{flex:none;width:22px;text-align:center;font-size:14px;line-height:1.45;}
.onb-row p{margin:0;font-size:13px;color:var(--muted);line-height:1.45;}
.onb-row p b{color:var(--ink);}
.onb-ft{display:flex;justify-content:flex-end;margin-top:12px;}
.onb.bye{opacity:0;transform:translateY(-4px);transition:opacity .25s,transform .25s;}
#view-chat .onb{max-width:840px;margin:0 auto var(--gap);}
@media (prefers-reduced-motion: reduce){.onb.bye{transition:none;}}
