/* Componentes reutilizables (core/ui.js y core/charts.js). Usan solo tokens: sirven en claro/oscuro y con cualquier color de marca. */
.t-accent{--c:var(--accent)}.t-in{--c:var(--in)}.t-out{--c:var(--out)}.t-tr{--c:var(--tr)}.t-res{--c:var(--res)}
.t-mint{--c:var(--mint)}.t-pink{--c:var(--pink)}.t-sky{--c:var(--sky)}.t-lemon{--c:var(--lemon)}.t-peach{--c:var(--peach)}.t-lilac{--c:var(--lilac)}

/* KPIs */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:14px}
.kpi{background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--c,var(--accent));border-radius:var(--r-sm);padding:10px 12px;box-shadow:var(--shadow);min-width:0}
.k-accent{--c:var(--accent)}.k-in{--c:var(--in)}.k-out{--c:var(--out)}.k-tr{--c:var(--tr)}.k-res{--c:var(--res)}
.k-mint{--c:var(--mint)}.k-pink{--c:var(--pink)}.k-sky{--c:var(--sky)}.k-lemon{--c:var(--lemon)}.k-peach{--c:var(--peach)}.k-lilac{--c:var(--lilac)}
.k-l{font-size:var(--fs-xs);font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.k-v{font-size:20px;font-weight:800;color:var(--ink);margin-top:2px;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}
.k-s{font-size:var(--fs-sm);color:var(--ink2);margin-top:2px}

/* Chips de filtro y control segmentado */
.fchips{display:flex;flex-wrap:wrap;gap:6px}
.fchip{min-height:var(--ctl-h-sm);padding:0 12px;border-radius:999px;border:1px solid var(--line2);background:var(--surface);color:var(--ink2);font-size:var(--fs-sm);font-weight:600}
.fchip:hover{border-color:var(--accent-ink)}
.fchip[aria-pressed="true"]{background:var(--accent-soft);border-color:var(--accent-ink);color:var(--accent-ink)}
.seg{display:inline-flex;gap:2px;padding:3px;border-radius:999px;background:var(--bg2);border:1px solid var(--line)}
.seg button{min-height:calc(var(--ctl-h-sm) - 6px);padding:0 12px;border-radius:999px;font-size:var(--fs-sm);font-weight:600;color:var(--ink2)}
.seg button[aria-pressed="true"]{background:var(--surface);color:var(--accent-ink);box-shadow:var(--shadow)}
.fchip:focus-visible,.seg button:focus-visible,.gic:focus-visible{outline:2px solid var(--accent-ink);outline-offset:2px}

/* Pills de estado */
.pill{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);font-weight:700;border-radius:999px;padding:2px 10px;white-space:nowrap;background:var(--bg2);color:var(--muted)}
.pill::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.pill.ok{background:var(--ok-bg);color:var(--ok)}.pill.warn{background:var(--warn-bg);color:var(--warn)}
.pill.bad{background:var(--danger-bg);color:var(--danger)}.pill.info{background:var(--info-bg);color:var(--info)}

/* Formularios compactos: grilla de 2 columnas (.full ocupa todo; .money alinea a la derecha) */
.frow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px}
.frow .full{grid-column:1/-1}
.frow .field{margin-bottom:0}
.frow .field label{font-size:var(--fs-sm)}
.frow input:not([type=checkbox]):not([type=radio]),.frow select,.frow textarea,.frow .fecha-b,.frow .desp-b{min-height:var(--ctl-h);padding:6px 10px;font-size:var(--fs)}
.frow .money input{text-align:right;font-variant-numeric:tabular-nums}
.frow input:focus,.frow select:focus,.frow textarea:focus{outline:none;border-color:var(--accent-ink);box-shadow:0 0 0 3px var(--accent-soft)}
@media (max-width:560px){.frow{grid-template-columns:minmax(0,1fr)}}

/* Densidad de tablas: Compacta / Extendida; en pantallas angostas la fila se apila (td[data-l] muestra la etiqueta) */
.tw.dens-comp td,.tw.dens-comp th{padding-block:5px}
.tw.dens-ext td,.tw.dens-ext th{padding-block:12px}
@media (max-width:760px){
  /* Cada fila es una tarjeta compacta (tablas .stk y .tw con densidad): la primera celda es el título; las demás van en línea
     «etiqueta: valor» (la etiqueta sale del encabezado de la columna) y envuelven; la última, si trae botones, queda a la derecha. */
  :is(table.stk,.tw[class*="dens-"] table), :is(table.stk,.tw[class*="dens-"] table) tbody{display:block;width:100%}
  :is(table.stk,.tw[class*="dens-"] table) thead{display:none}
  :is(table.stk,.tw[class*="dens-"] table) tr{display:flex;flex-wrap:wrap;align-items:center;gap:2px 14px;border-bottom:1px solid var(--line);padding:9px 2px}
  :is(table.stk,.tw[class*="dens-"] table) tr:last-child{border-bottom:0}
  :is(table.stk,.tw[class*="dens-"] table) td{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 5px;min-width:0;border:0;padding:0;font-size:var(--fs-sm);text-align:left!important}
  :is(table.stk,.tw[class*="dens-"] table) td:first-child{display:block;flex:1 1 100%;font-size:var(--fs);font-weight:700}
  :is(table.stk,.tw[class*="dens-"] table) td:first-child .muted,:is(table.stk,.tw[class*="dens-"] table) td:first-child small{font-weight:400;font-size:var(--fs-sm)}
  :is(table.stk,.tw[class*="dens-"] table) td[data-l]::before{content:attr(data-l) ":";color:var(--muted);font-weight:600;font-size:12px}
  :is(table.stk,.tw[class*="dens-"] table) td:first-child[data-l]::before{display:none}
  :is(table.stk,.tw[class*="dens-"] table) td:empty,:is(table.stk,.tw[class*="dens-"] table) td:not(:first-child):has(>:is(div,span,small,p,b,a):only-child:empty){display:none}
  /* v0.30.0 · la celda del nombre (la primera) nunca se oculta aunque su línea gris esté vacía: el nombre es texto suelto y ese div vacío era su único elemento */
  :is(table.stk,.tw[class*="dens-"] table) td:first-child>:is(.muted,small):empty{display:none}
  :is(table.stk,.tw[class*="dens-"] table) td:last-child:has(.btn,button,a.btn){flex:1 1 100%;justify-content:flex-end;gap:6px;margin-top:3px}
  :is(table.stk,.tw[class*="dens-"] table) td .btn:not(.primary):not(.danger){background:var(--surface);color:var(--ink2);border:1px solid var(--line2)}   /* acciones de fila: una sola variante, sin mezclar rosa y blanco */
}
.chip:empty,.pill:empty,.fchip:empty{display:none}

/* Galería de íconos */
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(44px,1fr));gap:6px;margin:10px 0}
.gic{display:grid;place-items:center;height:44px;border-radius:var(--r-sm);border:1px solid var(--line);background:var(--surface);color:var(--ink2)}
.gic:hover{border-color:var(--accent-ink);color:var(--accent-ink)}
.gic[aria-checked="true"]{background:var(--accent-soft);border-color:var(--accent-ink);color:var(--accent-ink)}

/* Gráficos */
.chart{margin:0;min-width:0}
.chart svg{width:100%;height:auto;display:block;overflow:visible}
.ch-grid{stroke:var(--line);stroke-width:1}
.ch-grid-c{fill:none;stroke:var(--bg2);stroke-width:22}
.ch-ax{fill:var(--muted);font-size:11px}
.ch-line{fill:none;stroke:var(--c);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.ch-dot{fill:var(--surface);stroke:var(--c);stroke-width:2}
.ch-bar{fill:var(--c)}
.ch-seg{fill:none;stroke:var(--c);stroke-width:22}
.ch-c{fill:var(--ink);font-size:18px;font-weight:800}
.ch-c.m{font-size:14px}.ch-c.xs{font-size:12px}   /* v0.9.6: importes largos (7 cifras) en el centro de la dona */
.legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:8px;font-size:var(--fs-sm);color:var(--ink2)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:10px;height:10px;border-radius:3px;background:var(--c)}
.legend.v{flex-direction:column}
.chart.dona{display:flex;flex-wrap:wrap;align-items:center;gap:16px}
.chart.dona svg{width:160px;flex:none}
.bars{display:flex;flex-direction:column;gap:8px}
.brow{display:grid;grid-template-columns:minmax(80px,30%) 1fr auto;align-items:center;gap:10px;font-size:var(--fs-sm)}
.b-n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink2)}
.b-t{height:10px;border-radius:999px;background:var(--bg2);overflow:hidden}
.b-f{display:block;height:100%;border-radius:999px;background:var(--c)}
.b-v{font-weight:700;font-variant-numeric:tabular-nums}

/* Barra de filtros: controles compactos en una fila */
.filtros select,.filtros input:not([type=checkbox]):not([type=radio]),.filtros .fecha-b,.filtros .desp-b{width:auto;min-height:var(--ctl-h);padding:6px 10px;font-size:var(--fs)}
.filtros .fecha,.filtros .desp{width:auto;display:inline-block}
.filtros input[type=search]{flex:1 1 200px}

/* v0.8: gráficos con globito, rango de fechas */
.ch-hit{fill:transparent;stroke:none;pointer-events:all}
.ch-pt{cursor:pointer}
.ch-pt:hover .ch-dot,.ch-pt:focus .ch-dot{r:5;fill:var(--c)}
.ch-bar{transition:opacity .12s}
.ch-hit:hover+*,.ch-bar:has(+ .ch-hit:hover){opacity:.8}
.ch-seg{cursor:pointer;transition:stroke-width .12s}
.ch-seg:hover{stroke-width:26}
.brow[data-tip]{cursor:default}
.brow[data-tip]:hover .b-f{filter:brightness(.92)}
.rango{display:flex;flex-direction:column;gap:8px}
.rg-p{display:flex;flex-wrap:wrap;gap:6px}
.rg-s{display:flex;flex-wrap:wrap;gap:8px 12px}
.rg-c{display:flex;flex-direction:column;gap:3px;font-size:var(--fs-sm);font-weight:600;color:var(--ink2);min-width:150px}
.rg-c select,.rg-c input:not([type=checkbox]):not([type=radio]),.rg-c .fecha-b,.rg-c .desp-b{min-height:var(--ctl-h);padding:6px 10px;font-size:var(--fs);font-weight:500}

/* v0.9 · selector de color de íconos y juegos de íconos */
.swatches{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 4px}
.icol{width:26px;height:26px;border-radius:50%;border:2px solid var(--line);background:var(--icol,var(--surface));padding:0;cursor:pointer}
.icol:hover{transform:scale(1.08)}.icol[aria-checked="true"]{outline:2px solid var(--accent-ink);outline-offset:2px}
.icol-none{background:linear-gradient(135deg,transparent 45%,var(--out,#e66) 46%,var(--out,#e66) 54%,transparent 55%),var(--surface)}
.icol:focus-visible{outline:2px solid var(--accent-ink);outline-offset:2px}
.legend .pct{font-style:normal;color:var(--ink3,var(--ink2));font-weight:500}

/* v0.9.1 — densToggle con iconos; plazos cortos de rango() en celular; dona con la leyenda a la derecha en celular */
.seg-ic button{display:inline-flex;align-items:center;justify-content:center;padding:0 10px}
@media (max-width:560px){
  .rango .fchip[data-c]{font-size:0;padding-left:10px;padding-right:10px}
  .rango .fchip[data-c]::after{content:attr(data-c);font-size:var(--fs-sm)}
  .chart.dona{flex-wrap:nowrap;gap:10px}
  .chart.dona svg{width:min(38%,140px)}
  .chart.dona .legend.v{flex:1 1 0;min-width:0;margin-top:0;gap:4px;font-size:12px}
  .chart.dona .legend span{align-items:flex-start;line-height:1.25}
  .chart.dona .legend i{margin-top:3px;flex:none}
  .chart.dona .legend span{flex-wrap:wrap;column-gap:5px}   /* v0.9.6: el importe no se parte (con $) y el % baja a la línea de abajo si no entra */
  .chart.dona .legend b,.chart.dona .legend em.pct{white-space:nowrap}
}

/* v0.9.7 — variación en KPIs (el color lo da `sentido`), botón flotante e impresión */
.k-d{display:inline-flex;align-items:center;gap:2px;margin-left:6px;padding:1px 7px;border-radius:999px;font-size:var(--fs-xs);font-weight:700;vertical-align:middle;white-space:nowrap;background:var(--bg);color:var(--muted)}
.k-d i{font-style:normal}
.k-d-bueno{background:var(--in-soft);color:var(--in-ink)}
.k-d-malo{background:var(--out-soft);color:var(--out-ink)}
.fab{position:fixed;right:16px;bottom:calc(16px + var(--fab-extra,0px) + env(safe-area-inset-bottom,0px));z-index:60;display:flex;flex-direction:column;align-items:flex-end;gap:10px}
.fab-b{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:52px;height:52px;padding:0 14px;border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:var(--r-sm);background:color-mix(in srgb,var(--accent) 16%,var(--surface));color:var(--accent-ink);font:inherit;font-weight:800;box-shadow:var(--shadow-lg);cursor:pointer}   /* v0.9.9: estilo del menú (barra de acento a la izquierda + fondo clarito del tema) */
.fab-b:hover{filter:brightness(1.06)}.fab-b:focus-visible{outline:3px solid var(--accent-ink);outline-offset:2px}
.fab.abierto .fab-b{filter:brightness(.94)}
.fab-menu{display:flex;flex-direction:column;align-items:stretch;gap:6px;min-width:190px;padding:6px;background:color-mix(in srgb,var(--accent) 9%,var(--surface));border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:var(--r-sm);box-shadow:var(--shadow-lg)}
.fab-menu[hidden]{display:none}
.fab-i{display:flex;align-items:center;gap:10px;padding:10px 12px;border:0;border-radius:10px;background:none;color:var(--ink);font:inherit;font-weight:600;text-align:left;cursor:pointer}
.fab-i:hover,.fab-i:focus-visible{background:color-mix(in srgb,var(--accent) 16%,transparent)}
body.fab-varios .fab[data-fab-id="caja"]{bottom:calc(16px + 68px + var(--fab-extra,0px) + env(safe-area-inset-bottom,0px))}   /* si el Proyecto ya tiene su botón flotante, el de Caja queda arriba y no lo tapa */
body.fab-on .foot{padding-bottom:84px}   /* el pie no queda tapado por el botón flotante */
@page{margin:12mm}   /* v0.9.18 · fuera del @media: algunos navegadores descartan el bloque si lleva un @page adentro */
@media print{
  body{padding:0!important;min-height:0!important;transition:none!important}   /* v0.9.18: el body conservaba el padding-left del menú (~246 px) y la hoja salía corrida */
  .top{position:static!important;margin:0!important;padding:0 0 8px!important}
  .side,.side-bd,.hamb,.fab,.demo-bar,.foot,.toast,.tip-globo,#layer{display:none!important}
  .main{margin:0!important;padding:0!important;max-width:none!important}
  body{background:#fff!important}
  body.imprimiendo>:not(.imp-anc),body.imprimiendo .imp-anc>:not(.imp-anc):not(.imp-sel){display:none!important}   /* solo queda el contenido pedido (sin hojas en blanco) */
  body.imprimiendo .imp-sel{margin:0;box-shadow:none}
  .card,.kpi,.chart{break-inside:avoid;box-shadow:none}
}

/* ---------- v0.9.14 · globo flotante, calendario y desplegable propios ---------- */
.pop-bd{position:fixed;inset:0;z-index:259;background:transparent}
.pop-bd.on{background:transparent}
.pop{position:fixed;z-index:260;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-lg);opacity:0;transform:translateY(-4px) scale(.98);transition:opacity .12s ease,transform .12s ease;max-width:calc(100vw - 16px)}
.pop.on{opacity:1;transform:none}
@media (max-width:599px){
  .pop-bd.on{background:rgba(20,17,31,.45)}
  .pop.movil{left:0;right:0;bottom:0;top:auto;width:auto;max-width:none;border-radius:22px 22px 0 0;border-bottom:0;padding-bottom:env(safe-area-inset-bottom);transform:translateY(24px);max-height:82dvh;display:flex;flex-direction:column}
  .pop.movil.on{transform:none}
  .pop.movil::before{content:"";display:block;width:38px;height:4px;border-radius:4px;background:var(--line2);margin:8px auto 0;flex:none}
}
/* campos que reemplazan al nativo */
.fecha,.desp{position:relative;display:block;width:100%;min-width:0}
.fecha-i,.desp-i{position:absolute!important;left:0;top:0;width:1px!important;height:1px!important;min-width:0!important;padding:0!important;border:0!important;opacity:0;pointer-events:none;overflow:hidden}
.fecha-b,.desp-b{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-width:0;min-height:42px;text-align:left;border:1px solid var(--line2);background:var(--surface);color:var(--ink);border-radius:var(--r-sm);padding:9px 11px;font:inherit;cursor:pointer}
.fecha-b:hover:not(:disabled),.desp-b:hover:not(:disabled){border-color:var(--accent-ink)}
.fecha-b:disabled,.desp-b:disabled{opacity:.6;cursor:not-allowed}
.fecha-b.vacio .fecha-t,.desp-b.vacio .desp-t{color:var(--muted)}
.fecha-t,.desp-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fecha-b svg,.desp-b svg{flex:none;color:var(--muted)}
.fecha-b:focus-visible,.desp-b:focus-visible{outline:2px solid var(--accent-ink);outline-offset:1px}
/* calendario */
.cal{padding:12px 12px 10px;width:100%;max-width:340px;margin:0 auto}
.cal-h{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:8px}
.cal-n{display:grid;place-items:center;width:36px;height:36px;border-radius:50%;border:0;background:transparent;color:var(--ink2);cursor:pointer}
.cal-n:hover{background:var(--accent-soft);color:var(--accent-ink)}
.cal-t{flex:1;border:0;background:transparent;color:var(--ink);font:inherit;font-weight:800;font-size:15px;text-transform:capitalize;border-radius:10px;padding:6px 8px;cursor:pointer}
.cal-t:hover{background:var(--accent-soft)}
.cal-w,.cal-g{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cal-w span{text-align:center;font-size:11px;font-weight:800;letter-spacing:.04em;color:var(--muted);padding:4px 0}
.cal-g button{aspect-ratio:1/1;min-height:38px;border:0;border-radius:50%;background:transparent;color:var(--ink);font:inherit;font-size:14px;font-weight:600;cursor:pointer;display:grid;place-items:center}
.cal-g button.otro{color:var(--muted);font-weight:500;opacity:.65}
.cal-g button:hover:not(:disabled){background:var(--accent-soft);color:var(--accent-ink)}
.cal-g button.hoy,.cal-m button.hoy{box-shadow:inset 0 0 0 1.5px var(--accent-ink)}
.cal-g button[aria-pressed="true"],.cal-m button[aria-pressed="true"]{background:var(--accent);color:var(--on-accent);font-weight:800;opacity:1;box-shadow:none}
.cal-g button:disabled{opacity:.3;cursor:not-allowed}
.cal-g button:focus-visible,.cal-m button:focus-visible{outline:2px solid var(--accent-ink);outline-offset:1px}
.cal-m{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;padding:4px 0}
.cal-m button{border:0;border-radius:12px;background:transparent;color:var(--ink);font:inherit;font-weight:700;padding:14px 0;text-transform:capitalize;cursor:pointer}
.cal-m button:hover{background:var(--accent-soft)}
.cal-f{display:flex;justify-content:flex-end;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--line)}
.cal-f [data-hoy]{margin-right:auto}
/* desplegable */
.desp-l{display:flex;flex-direction:column;min-height:0;max-height:min(360px,60dvh)}
.desp-q{padding:10px 10px 4px;flex:none}
.desp-o{overflow:auto;padding:6px;display:flex;flex-direction:column;gap:2px;overscroll-behavior:contain}
.desp-op{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;border-radius:10px;background:transparent;color:var(--ink);font:inherit;font-weight:600;padding:10px 12px;min-height:42px;cursor:pointer}
.desp-op .desp-tx{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.desp-op em{flex:none;display:grid;place-items:center;width:22px;height:22px;border-radius:7px;border:1.5px solid var(--line2);color:transparent;font-style:normal}
.desp-op:hover:not(:disabled),.desp-op:focus-visible{background:var(--accent-soft);outline:0}
.desp-op[aria-selected="true"]{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent-ink)}
.desp-op[aria-selected="true"] em{background:var(--accent);border-color:transparent;color:var(--on-accent)}
.desp-op:disabled{opacity:.4;cursor:not-allowed}
[role=listbox]:not([aria-multiselectable]) .desp-op em{border:0;width:18px;background:transparent!important}
[role=listbox]:not([aria-multiselectable]) .desp-op[aria-selected="true"] em{color:var(--accent-ink)}
.desp-q input{min-height:40px}
.desp-q input:focus{outline:0;border-color:var(--accent-ink);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 30%,transparent)}
.desp-c{flex:none;width:10px;height:10px;border-radius:50%}
.desp-g{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:8px 12px 2px}
.desp-vacio{padding:18px;text-align:center;color:var(--muted);font-size:14px}
.desp-f{display:flex;justify-content:flex-end;gap:8px;padding:8px 10px;border-top:1px solid var(--line);flex:none}
.desp-f [data-lim]{margin-right:auto}

/* v0.9.15 · chip e ícono dentro de las opciones del desplegable (y en el botón cerrado) */
.desp-t{display:flex;align-items:center;gap:4px;overflow:hidden}
.desp-v{display:inline-flex;align-items:center;gap:7px;min-width:0}
.desp-v:only-child{flex:1}
.desp-tx{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.desp-s{flex:none;margin-right:2px}
.desp-b .desp-v+.desp-v{flex:0 1 auto}
.d-chip{flex:none;display:inline-flex;align-items:center;font-size:11px;font-weight:800;line-height:1;letter-spacing:.01em;border-radius:999px;padding:4px 8px;white-space:nowrap;background:var(--c-soft);color:var(--c-ink)}
.d-in{--c-soft:var(--in-soft);--c-ink:var(--in-ink)}.d-out{--c-soft:var(--out-soft);--c-ink:var(--out-ink)}.d-tr{--c-soft:var(--tr-soft);--c-ink:var(--tr-ink)}.d-res{--c-soft:var(--res-soft);--c-ink:var(--res-ink)}.d-accent{--c-soft:var(--accent-soft);--c-ink:var(--accent-ink)}
.d-ic{flex:none;display:inline-grid;place-items:center;color:var(--ink2)}
.desp-b .d-ic svg{color:inherit}

/* v0.9.16 · barra de progreso (ui.barra) */
.barra{position:relative;height:7px;border-radius:999px;background:var(--bg2);overflow:hidden}
.barra i{display:block;height:100%;min-width:7px;border-radius:999px;background:var(--c,var(--accent));transition:width .25s ease}
.barra i.cero{min-width:0}
.barra-t{margin-top:5px;font-size:var(--fs-sm);color:var(--muted)}
@media (prefers-reduced-motion:reduce){.barra i{transition:none}}

/* ---------- v0.9.18 · líneas: globito compartido y serie destacada; barrasH con % ---------- */
.ch-dest{--c:var(--ink2)}   /* gris pizarra suave; en oscuro --ink2 ya es el equivalente legible */
.ch-dest .ch-line{stroke-width:3.5}
.ch-dest .ch-dot{fill:var(--c)}
.ch-area{fill:var(--c);fill-opacity:.12;stroke:none;pointer-events:none}
.ch-colg{outline:none;cursor:pointer}
.ch-guide{stroke:var(--line2);stroke-width:1;stroke-dasharray:3 3;opacity:0;pointer-events:none}
.ch-hl{fill:var(--c);stroke:var(--surface);stroke-width:2;opacity:0;pointer-events:none}
.ch-ancla{fill:none;stroke:none;pointer-events:none}
.ch-colg:hover .ch-guide,.ch-colg:focus .ch-guide,.ch-colg:hover .ch-hl,.ch-colg:focus .ch-hl{opacity:1}
.ch-colg:focus-visible .ch-guide{stroke:var(--accent)}
.tip-globo.multi{white-space:nowrap;font-weight:500}
.tip-globo .tip-t{font-weight:700;margin-bottom:3px}
.tip-globo .tip-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--c);margin-right:6px;vertical-align:baseline}
.b-v .pct{font-style:normal;font-weight:500;font-size:.85em;color:var(--ink3,var(--muted));white-space:nowrap}
.b-v{white-space:nowrap}
@supports (grid-template-columns:subgrid){   /* con %, las barras de todas las filas miden lo mismo (la columna del importe es una sola) */
  .bars:has(.brow.con-pct){display:grid;grid-template-columns:minmax(80px,30%) 1fr auto;gap:8px 10px}
  .bars:has(.brow.con-pct)>.brow{grid-template-columns:subgrid;grid-column:1/-1}
}
@media (max-width:480px){.brow.con-pct .b-v{display:flex;flex-direction:column;align-items:flex-end;line-height:1.2}.bars:has(.brow.con-pct){grid-template-columns:minmax(70px,28%) 1fr auto}}
.tip-globo .tip-dot.ch-dest{background:var(--toast-ink);opacity:.7}

/* v0.18.0 · Cobros y cuotas */
.cb-tabs{margin:2px 0 12px;overflow-x:auto;max-width:100%}
.cb-tabs .seg{max-width:100%}
.cb-neg{color:var(--danger);font-weight:700}
/* v0.20.0 · Contactos: categorías con casilla en el formulario */
.ct-cats{display:flex;flex-wrap:wrap;gap:6px 16px}
/* v0.20.0 · Módulos de la Empresa: el motivo («Primero prendé Contactos») se acomoda en varias líneas en el celular */
#cfg-modulos .chk{flex-wrap:wrap;min-width:0;max-width:100%;margin-bottom:8px}
#cfg-modulos .chip{white-space:normal;max-width:100%}

/* v0.21.0 · Cobros › Cuotas: vista compacta con íconos, buscador y conmutador compacta/expandida; ficha de contacto con domicilio por partes */
.cq-barra{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;margin:8px 0 10px}
.cq-barra .field{margin:0}
.cq-q{flex:1 1 200px;min-width:0}
.cq-cl{flex:1 1 180px;min-width:0}
/* v0.27.0 · lista de filas compactas (planes, medios, categorías…): nombre · dato · acciones en UNA fila; en celular el dato baja debajo del nombre y el lápiz queda a la derecha */
.lst{border-top:1px solid var(--line)}
.lst-f{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:2px 14px;padding:7px 2px;border-bottom:1px solid var(--line)}
.lst-n{min-width:0;font-weight:700;overflow:hidden;text-overflow:ellipsis}
.lst-d{font-size:var(--fs-sm);white-space:nowrap}
.lst-f .acc{display:flex;gap:4px;justify-content:flex-end}
@media (max-width:760px){.lst-f{grid-template-columns:minmax(0,1fr) auto}.lst-f .lst-d{grid-column:1;grid-row:2;white-space:normal}.lst-f .acc{grid-column:2;grid-row:1 / span 2}}
.lst-s{display:block;font-weight:400;font-size:var(--fs-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lst-ct{grid-template-columns:minmax(0,1fr) auto auto auto}.lst-ct .lst-d{white-space:normal}
.ct-fil{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin:6px 0 8px}.ct-fil .ct-q{flex:1 1 220px;min-width:0}.ct-fil .chk{margin:0}
@media (max-width:760px){.lst-ct{grid-template-columns:minmax(0,1fr) auto}.lst-ct .lst-d:empty{display:none}}
.cq-lista{border-top:1px solid var(--line)}
.cq-fila{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 0;border-bottom:1px solid var(--line)}
.cq-main{min-width:0;flex:1}
.cq-l1{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;font-weight:700}
.cq-l2{font-size:var(--fs-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cq-l3{font-size:var(--fs-sm);color:var(--ink2)}
.cq-fila .acc{flex:none;display:flex;gap:4px}
.cq-anulada .cq-l1,.cq-anulada .cq-l2,.cq-anulada .cq-l3{opacity:.6}
.ct-dom,.ct-extra{border:1px solid var(--line);border-radius:var(--r-sm);padding:6px 10px 10px;margin:0;min-width:0}   /* v0.36.0 · «Más datos» igual que «Domicilio» */
.ct-dom legend,.ct-extra legend{padding:0 6px;font-size:var(--fs-sm);font-weight:600;color:var(--ink2)}

/* v0.22.0 · Caja: formulario flotante (importe grande, categorías con ícono, etiquetas), listado de movimientos, cuentas, ajustes */
.cj-nuevo .btn{--cj:var(--accent-ink)}
.cj-b-in{color:var(--in)}.cj-b-out{color:var(--out)}.cj-b-tr{color:var(--tr)}
.in{color:var(--in)}.out{color:var(--out)}.tr{color:var(--tr)}
.cj-neg{color:var(--danger)}
.cj-form{--cj:var(--out)}
.cj-form[data-tipo="ingreso"]{--cj:var(--in)}.cj-form[data-tipo="egreso"]{--cj:var(--out)}.cj-form[data-tipo="transferencia"]{--cj:var(--tr)}
.cj-tipos{width:100%;margin:2px 0 10px}
.cj-tipos button{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px}
.cj-tipos button[aria-pressed="true"]{color:var(--cj);box-shadow:inset 0 -2px 0 var(--cj)}
.cj-monto-w{display:flex;align-items:baseline;justify-content:center;gap:6px;padding:10px 12px;margin:2px 0 10px;border-radius:var(--r);background:var(--surface);border:1.5px solid color-mix(in srgb,var(--cj) 45%,var(--line))}
.cj-monto-w:focus-within{border-color:var(--cj);box-shadow:0 0 0 3px color-mix(in srgb,var(--cj) 20%,transparent)}
.cj-moneda{font-size:1.5rem;font-weight:700;color:var(--cj)}
.cj-monto{flex:0 1 auto;width:min(70%,10.5ch);min-width:0;border:0!important;background:transparent!important;box-shadow:none!important;font-size:2.1rem;font-weight:800;text-align:left;color:var(--cj);padding:0;letter-spacing:-.01em}
.cj-monto::placeholder{color:color-mix(in srgb,var(--cj) 35%,transparent)}
.cj-lbl{font-size:var(--fs-sm);font-weight:600;color:var(--ink2);margin:8px 0 4px}
.cj-rapido{display:flex;gap:6px;margin-top:6px}
.cj-nota{margin:2px 0 8px;padding:8px 10px;border-radius:var(--r-sm);background:color-mix(in srgb,var(--tr) 10%,var(--surface));font-size:var(--fs-sm);color:var(--ink2)}
.cj-aviso{min-height:2.8em;line-height:1.4;margin:6px 0 0;font-size:var(--fs-sm);color:var(--ink2)}   /* v0.33.0: lugar fijo para dos renglones (la hoja mide lo mismo en los tres tipos, también en el celular) */
.cj-tags{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:6px 8px;border:1px solid var(--line2);border-radius:var(--r-sm);background:var(--surface);min-height:var(--ctl-h)}
.cj-tags:focus-within{border-color:var(--accent-ink)}
.cj-tags input{flex:1;min-width:110px;border:0!important;background:transparent!important;box-shadow:none!important;padding:2px 0!important;height:auto!important}
.cj-tag,.cj-tg{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;background:var(--accent-soft);color:var(--accent-ink);font-size:var(--fs-sm);font-weight:600;border:0}
.cj-tag button{color:inherit;font-size:1.05em;line-height:1;padding:0 2px}
button.cj-tg{cursor:pointer}button.cj-tg:hover{filter:brightness(.95)}
.cj-pl .fchip,.cj-sug .fchip{display:inline-flex;align-items:center;gap:6px}
.cj-sug{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.cj-form .actions{flex-wrap:wrap}
.cj-ok{background:var(--cj)!important;border-color:var(--cj)!important;color:#fff!important}
/* listado */
.cj-barra{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;margin:8px 0 6px}.cj-barra .field{margin:0;flex:1 1 220px;min-width:0}
.cj-activos{margin:6px 0;align-items:center}.fchip.act{background:var(--accent-soft);border-color:var(--accent-ink);color:var(--accent-ink)}
.cj-tot{display:flex;flex-wrap:wrap;gap:4px 18px;padding:8px 0;font-size:var(--fs-sm);color:var(--ink2)}.cj-tot b{font-size:1rem}
.cj-lista{border-top:1px solid var(--line)}
.cj-dia{padding:10px 0 4px;font-size:var(--fs-sm);font-weight:700;color:var(--ink2)}
.cj-fila{border-bottom:1px solid var(--line)}
.cj-open{display:flex;align-items:center;gap:10px;width:100%;padding:8px 0;text-align:left;background:none;border:0;color:inherit;cursor:pointer}
.cj-open:focus-visible{outline:2px solid var(--accent-ink);outline-offset:2px;border-radius:var(--r-sm)}
.cj-ic{flex:none;display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:color-mix(in srgb,var(--c,var(--accent)) 14%,var(--surface));color:var(--c,var(--accent-ink))}
.cj-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.cj-l1{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;font-weight:700;overflow-wrap:anywhere}
.cj-l2{font-size:var(--fs-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cj-l3{display:flex;flex-wrap:wrap;gap:4px;padding:0 0 8px 48px}
.cj-imp{flex:none;font-weight:800;white-space:nowrap}
.cj-fila.anulado .cj-imp,.cj-fila.anulado .cj-l1{text-decoration:line-through;opacity:.55}
.cj-fila.anulado .cj-l2,.cj-fila.anulado .cj-ic{opacity:.55}
.cj-det-imp{font-size:2rem;font-weight:800;margin:6px 0}
/* v0.29.0 · acciones del detalle: mismo alto y misma separación en Cerrar / Duplicar / ✎ / Anular (el lápiz es cuadrado del alto de los botones) */
.sheet .cj-det-acc{align-items:stretch;gap:8px}.cj-det-acc .btn{flex:1 1 auto;min-height:var(--ctl-h);height:var(--ctl-h);padding:0 10px;justify-content:center}
.cj-det-acc .btn.ic-b{flex:0 0 var(--ctl-h);width:var(--ctl-h);padding:0}
.cj-chip-t{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-weight:700;font-size:var(--fs-sm);background:color-mix(in srgb,var(--c) 14%,var(--surface));color:var(--c)}
.cj-d{display:flex;gap:12px;justify-content:space-between;padding:6px 0;border-bottom:1px solid var(--line)}.cj-d>span:first-child{flex:none}.cj-d>span:last-child{text-align:right;overflow-wrap:anywhere}
/* resumen */
.cj-dos{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:12px;align-items:start}
.cj-grupo+.cj-grupo{margin-top:14px}.cj-grupo h3{margin:0 0 6px}
.cj-cuentas{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px}
.cj-cuenta{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"i n" "i s" "m m";align-items:center;column-gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);text-align:left;cursor:pointer;color:inherit}
.cj-cuenta:hover{border-color:var(--accent-ink)}.cj-cuenta.off{opacity:.65}
.cj-cuenta-ic{grid-area:i;display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:color-mix(in srgb,var(--c,var(--accent)) 14%,var(--surface));color:var(--c,var(--accent-ink))}
.cj-cuenta-n{grid-area:n;font-weight:600;font-size:var(--fs-sm);color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cj-cuenta-s{grid-area:s;font-weight:800;font-size:1.15rem}.cj-cuenta-s.neg{color:var(--danger)}
.cj-progs{list-style:none;margin:0;padding:0}.cj-prog{display:flex;gap:10px;justify-content:space-between;padding:6px 0;border-bottom:1px solid var(--line)}.cj-prog span:nth-child(2){flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cj-av{min-width:120px}
/* ajustes */
.cj-ajs{display:flex;flex-direction:column}
.cj-aj{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}.cj-aj.off{opacity:.6}
.cj-aj-ic{flex:none;display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:color-mix(in srgb,var(--c,var(--accent)) 14%,var(--surface));color:var(--c,var(--accent-ink))}
.cj-aj-n{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.cj-aj-n .muted{font-size:var(--fs-sm)}
.cj-aj .acc{flex:none;display:flex;gap:4px}
.ind-mod .kpis{margin-top:6px}
.cj-nom{display:inline-flex;align-items:center;gap:8px}
.cj-aj-t{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px}

/* v0.22.3 · Caja: pestañas fijas con ícono, grupos de cuentas, filtros ordenados */
.cb-fijo{position:sticky;top:var(--top-h,0px);z-index:30;background:var(--bg);margin:-8px 0 12px;padding:14px 0 6px}
.cj-seg,.cb-tabs .cj-seg{display:flex;width:max-content;min-width:100%;max-width:none}   /* v0.26.0: el fondo cubre todos los botones aunque la barra se desplace */
.cb-tabs{scrollbar-width:none}.cb-tabs::-webkit-scrollbar{display:none}
.cj-seg button{flex:1 1 auto;display:inline-flex;align-items:center;justify-content:center;gap:6px}
@media (max-width:760px){.cj-seg .cb-t{display:none}.cj-seg button{padding:0 6px}}
.cj-gtot{font-size:var(--fs-sm);white-space:nowrap}.cj-gtot b{font-size:1rem}
.cj-grupo-h{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px;padding-bottom:4px;border-bottom:2px solid var(--line)}.cj-grupo-h h3{margin:0}.cj-grupo-h .muted{font-size:var(--fs-sm)}
#cj-tipos{margin-top:10px}
.cj-rp-fil{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 16px;align-items:start;margin:12px 0 4px}.cj-rp-fil .field{margin:0}.cj-rp-fil .chk{min-height:var(--ctl-h);align-items:center;margin-top:20px}
.sheet.cj-hoja-ingreso{--cj-bg:color-mix(in srgb,var(--in) 9%,var(--surface))}.sheet.cj-hoja-egreso{--cj-bg:color-mix(in srgb,var(--out) 9%,var(--surface))}.sheet.cj-hoja-transferencia{--cj-bg:color-mix(in srgb,var(--tr) 9%,var(--surface))}
.sheet[class*="cj-hoja-"]{background:var(--cj-bg);transition:background .15s}.sheet[class*="cj-hoja-"]:not(.nov) .actions{background:var(--cj-bg)}
.cj-slot{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px;margin:10px 0}.cj-slot .field{margin:0;min-width:0}.cj-slot .field label{font-size:var(--fs-sm)}.cj-slot [hidden]{display:none}.cj-slot #cj-f-dest{grid-column:1/-1}
.cj-cuenta-f{margin-bottom:0}.cj-cuenta-f label{font-size:var(--fs-sm)}
.cj-tags input{flex:1 1 200px;font-size:var(--fs)}.cj-tags input::placeholder{font-size:var(--fs)}   /* v0.24.0: mismo tamaño de letra que el Concepto */
.cj-rapido{margin-bottom:10px}
/* v0.23.0 · alta de movimiento: plantillas en un botón dentro del importe (no suma altura) y «Guardar como plantilla» en el mismo lugar del botón */
.cj-monto-ww{position:relative;margin:2px 0 10px}.cj-monto-ww .cj-monto-w{margin:0;position:relative}
.cj-plb{position:absolute;right:14px;top:50%;transform:translateY(-50%);display:grid;place-items:center;width:36px;height:36px;padding:0;border-radius:11px;border:1px solid var(--line);background:var(--surface);color:var(--cj);cursor:pointer}
.cj-plb b{position:absolute;top:-4px;right:-4px;min-width:16px;height:16px;padding:0 3px;border-radius:8px;background:var(--cj);color:#fff;font-size:11px;display:grid;place-items:center}
.cj-plb:disabled{opacity:.45;cursor:default}.cj-plb:disabled b{background:var(--muted)}
.cj-plpop{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:30;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-lg);padding:8px}.cj-plpop[hidden]{display:none}
.cj-plpop input{width:100%;margin-bottom:6px}
.cj-pll{max-height:208px;overflow:auto;display:flex;flex-direction:column;gap:2px}
.cj-pli{display:flex;align-items:center;gap:10px;width:100%;min-height:40px;padding:8px 10px;border:0;border-radius:var(--r-sm);background:transparent;text-align:left;cursor:pointer}
.cj-pli:hover,.cj-pli:focus-visible{background:var(--accent-soft)}
.cj-pli span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.cj-pli em{font-style:normal;color:var(--ink2);font-size:var(--fs-sm)}
.cj-pl-vacio{margin:6px 8px}
.cj-plg-w{margin:10px 0 0}.cj-plg{width:100%}.cj-plg-f{display:flex;gap:8px;align-items:center}.cj-plg-f[hidden],.cj-plg[hidden]{display:none}.cj-plg-f input{flex:1;min-width:0}
/* v0.23.0 · Movimientos: aire entre los botones del encabezado y los filtros; Presupuesto: botones siempre visibles al pie */
.cj-cab{margin-bottom:12px;row-gap:10px}
.cj-pr-act{position:sticky;bottom:env(safe-area-inset-bottom,0px);z-index:20;background:var(--surface);padding:10px 76px 10px 0;margin-top:12px;border-top:1px solid var(--line)}
/* v0.23.0 · el «+» de Caja a la izquierda (opción por dispositivo); a la izquierda no hace falta apilarlo sobre el de otro Proyecto */
.fab.fab-izq{right:auto;left:16px;align-items:flex-start}
@media (min-width:761px){.fab.fab-izq{left:calc(var(--side-w) + 16px)}body.side-hidden .fab.fab-izq{left:16px}}   /* v0.27.0 · en escritorio, a la izquierda queda al lado del menú y no detrás */
body.fab-varios .fab.fab-izq[data-fab-id="caja"]{bottom:calc(16px + var(--fab-extra,0px) + env(safe-area-inset-bottom,0px))}
/* v0.23.0 · Estado: la tarjeta «Versiones» es un botón que abre el historial */
.est-ver{text-align:left;font:inherit;color:inherit;cursor:pointer;width:100%}.est-ver:hover{border-color:var(--accent)}

/* v0.24.0 · lista de plantillas: tacho por fila */
.cj-plr{display:flex;align-items:center;gap:2px}.cj-plr .cj-pli{flex:1;min-width:0}.cj-pld{flex:none;display:grid;place-items:center;width:36px;height:36px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--muted);cursor:pointer}.cj-pld:hover,.cj-pld:focus-visible{background:var(--accent-soft);color:var(--danger)}
.cj-monto-ww .cj-monto-w{padding-right:62px;min-height:60px;box-sizing:border-box}   /* v0.24.0: el botón de plantillas no pisa el borde ni el importe */
.cb-fijo .cs-tabs{margin:0}   /* v0.24.0: las solapas de todos los módulos quedan fijas al desplazar (clase cb-fijo) */
/* v0.24.0 · Configuración › Proyecto › Orden del menú */
.ord-sec{margin:10px 0}.ord-sl{font-size:var(--fs-sm);font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px}
.ord-l{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.ord-i{display:flex;align-items:center;gap:10px;min-height:44px;padding:4px 10px 4px 4px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface)}
.ord-i.ord-mov{border-color:var(--accent-ink);box-shadow:var(--shadow-lg);background:var(--accent-soft)}
.ord-h{display:grid;place-items:center;width:40px;height:40px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--muted);cursor:grab;touch-action:none}
.ord-h:hover,.ord-h:focus-visible{background:var(--accent-soft);color:var(--ink)}.ord-i.ord-mov .ord-h{cursor:grabbing}
.ord-ic{display:inline-flex;color:var(--ink2)}
/* v0.25.0 · Caja: repetir movimientos (panel dentro de la hoja del formulario) y proyección del flujo */
.cj-rep{display:inline-flex;align-items:center;gap:5px}.cj-rep svg{flex:none}
.cj-rp-in .field{margin:0 0 10px}.cj-rp-in .frow{margin-bottom:0}.cj-rp-in h3{font-size:1.05rem}
.cj-rp-cfg[hidden]{display:none}
.cj-rp-prev{display:flex;flex-direction:column;gap:2px;margin:8px 0 4px;padding:10px 12px;border-radius:var(--r-sm);background:color-mix(in srgb,var(--accent) 8%,var(--surface));font-size:var(--fs-sm);color:var(--ink2);min-height:3.2em}
.cj-rp-prev b{color:var(--ink)}.cj-rp-prev.warn,.cj-rp-prev .warn-t{color:var(--danger)}
.cj-pr-hero{border-left:4px solid var(--line2)}.cj-pr-hero.ok,.cj-pr-mini.ok{border-left-color:var(--in)}.cj-pr-hero.mal,.cj-pr-mini.mal{border-left-color:var(--danger)}.cj-pr-hero.info,.cj-pr-mini.info{border-left-color:var(--accent-ink)}
.cj-pr-mini{border-left:4px solid var(--line2)}
.cj-pr-ver{margin:4px 0 12px;font-size:1.05rem;font-weight:600;line-height:1.4}
.cj-pr-ctl{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 16px;align-items:start;margin:0 0 10px}.cj-pr-ctl .field{margin:0;min-width:0}.cj-pr-ctl .chk{display:flex;gap:8px;align-items:center;margin:4px 0}
.cj-pr-bajo td{background:color-mix(in srgb,var(--danger) 8%,transparent)}
.cj-pr-ds{margin:0;padding-left:0;list-style:none;display:flex;flex-direction:column;gap:10px}.cj-pr-d{padding:10px 12px;border:1px solid color-mix(in srgb,var(--danger) 35%,var(--line));border-radius:var(--r-sm)}
.cj-pr-obl{list-style:none;margin:6px 0 0;padding:0;font-size:var(--fs-sm)}.cj-pr-obl li{display:grid;grid-template-columns:76px 1fr auto;gap:8px;padding:3px 0;border-top:1px solid var(--line)}
.cj-pr-det summary{cursor:pointer;list-style:none}.cj-pr-det[open] summary{margin-bottom:8px}
.cj-series{list-style:none;margin:0;padding:0}.cj-serie{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 0;border-top:1px solid var(--line)}.cj-serie:first-child{border-top:0}
@media (max-width:760px){.cj-pr-obl li{grid-template-columns:62px 1fr auto}}
/* v0.25.0 · «Leer ahora» en Estado › Infraestructura: el ícono gira mientras lee (sin movimiento si la persona lo prefiere así) */
.ic-b.leyendo svg{animation:ic-gira 1s linear infinite}@keyframes ic-gira{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.ic-b.leyendo svg{animation:none;opacity:.5}}
.ic-b:disabled{opacity:.45;cursor:default}

/* v0.26.0 · Estándares de listas y ajustes: selector de ícono (vista previa), interruptor, botón «+ Algo», contador redondo, asa de arrastre */
.sel-ic-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:8px}
.sel-ic-prev{display:grid;place-items:center;width:44px;height:44px;border-radius:12px;border:1px solid var(--line2);background:var(--accent-soft);color:var(--accent-ink)}
.sel-ic-ayuda{margin:0 0 8px;font-size:var(--fs-sm);color:var(--muted)}
.sel-ic .gallery{max-height:260px;overflow:auto}
.tgl-row{display:flex;align-items:center;gap:10px;min-height:var(--ctl-h,40px)}.tgl-row label{cursor:pointer}
.tgl{flex:none;position:relative;width:44px;height:26px;border-radius:13px;border:0;padding:0;background:var(--line2);cursor:pointer;transition:background .15s}
.tgl-k{position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.3);transition:transform .15s}
.tgl[aria-checked="true"]{background:var(--ok,#2e9e6b)}.tgl[aria-checked="true"] .tgl-k{transform:translateX(18px)}
.tgl:focus-visible{outline:2px solid var(--accent-ink);outline-offset:2px}.tgl:disabled{opacity:.5;cursor:not-allowed}
.btn-mas{display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:0 14px 0 10px;border:0;border-radius:999px;background:var(--accent-soft);color:var(--accent-ink);font:inherit;font-size:var(--fs-sm);font-weight:700;cursor:pointer}
.btn-mas:hover{filter:brightness(.96)}.btn-mas:focus-visible{outline:2px solid var(--accent-ink);outline-offset:2px}
.cnt{display:inline-grid;place-items:center;min-width:26px;height:26px;padding:0 6px;border-radius:999px;background:var(--accent-soft);color:var(--accent-ink);font-size:12px;font-weight:800}
.est{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-sm);font-weight:600;color:var(--ok,#2e9e6b)}.est::before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor}
.est.off{color:var(--muted)}
.cj-aj .ord-h{width:32px;height:40px;flex:none}.cj-it.ord-mov{border-color:var(--accent-ink);box-shadow:var(--shadow-lg);background:var(--accent-soft);border-radius:var(--r-sm)}
.cj-grupo-h .cnt{margin-left:auto;align-self:center}
.cj-subs-ic{display:flex;flex-wrap:wrap;gap:6px;padding:4px 0 8px 42px}.cj-subs-ic .cj-aj-ic{width:32px;height:32px;border-radius:10px}
.cj-ver-subs{border:0;background:transparent;padding:0;font:inherit;font-size:var(--fs-sm);color:var(--accent-ink);cursor:pointer;text-align:left}.cj-ver-subs:hover{text-decoration:underline}
.cj-ct{margin:0 0 10px}
/* v0.26.0 · selector de contacto con buscador */
.cj-ctw{position:relative}.cj-ctr{display:flex;gap:6px;align-items:center}.cj-ctb{flex:1;min-width:0;display:flex;align-items:center;gap:8px;min-height:var(--ctl-h);padding:0 12px;font:inherit;color:var(--ink);line-height:1.2;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);text-align:left;cursor:pointer;overflow:hidden}.cj-ctb span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cj-ctb em,.cj-pli em{font-style:normal;font-size:var(--fs-sm);color:var(--muted);margin-left:auto;white-space:nowrap}.cj-ctpop{top:calc(100% + 2px)}
.cj-pli[aria-selected="true"]{background:var(--bg2)}
.cj-subs-ic .off{opacity:.5}

/* v0.26.0 · Caja: sugerencia de categoría (la más usada con la cuenta) */
.cj-sugcat{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:8px 0 0;padding:10px 12px;border:1.5px dashed color-mix(in srgb,var(--accent-ink) 55%,transparent);border-radius:var(--r);background:var(--surface);font-size:var(--fs-sm)}
.cj-sugcat[hidden]{display:none}.cj-sugcat b{color:var(--ink)}

/* v0.26.0 · Caja › Movimientos con la estructura de Oink: cabecera en dos columnas (celular: compacta con «Filtros ▾»), paginado con contador, franja de totales, columnas ordenables, densidad */
.cj-bar{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;min-width:0}.cj-bar .sp{flex:1}
.cj-mov-f1 #cj-tipos{margin-top:0}
.cj-mov-cab{display:grid;grid-template-columns:minmax(0,1fr);gap:8px 28px;align-items:start;padding:8px 0}
.cj-mov-izq,.cj-mov-der{display:flex;flex-direction:column;gap:8px;min-width:0}
.cj-mov-f3 .cj-qi{flex:1 1 auto;min-width:0;height:36px;padding:4px 12px;border-radius:var(--r-sm);border:1px solid var(--line2);background:var(--surface);color:var(--ink);font:inherit;font-size:var(--fs-sm)}
.cj-mov-f3 .cj-qi:focus{outline:none;border-color:var(--accent-ink)}.cj-mov-f3 .btn{flex:0 0 auto}
.cj-mov-f3 .cnt-s{margin-left:6px;min-width:20px;height:20px;font-size:11px;background:var(--accent);color:var(--on-accent)}
.cj-mov-cmp{display:none}
.cj-mov-pag{gap:8px}.cj-mov-pag .cj-pp select{height:30px;min-height:0;padding:0 6px;font-size:var(--fs-sm)}.cj-pag-n{min-width:34px;text-align:center;font-size:var(--fs-sm)}
.cj-mov-pag .btn.sm,.cj-pie-pag .btn.sm{min-width:32px;padding:0 8px}
.cj-pie-pag{justify-content:center;margin-top:10px}
.cnt-in{background:var(--in-soft);color:var(--in-ink)}
.cj-sum{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin:2px 0 8px;padding:10px 14px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);box-shadow:var(--shadow-sm,none);font-size:var(--fs-sm)}
.cj-sum b{font-size:.95rem}.cj-sum .fchip{margin:0}
.cj-th{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid var(--line);font-size:var(--fs-sm)}
.cj-th button{border:0;background:none;padding:2px 0;font:inherit;font-weight:700;color:var(--ink2);opacity:.8;cursor:pointer;white-space:nowrap}.cj-th button:hover{opacity:1;color:var(--accent-ink)}
.cj-th [data-msort="fecha"]{flex:0 0 66px;text-align:left}.cj-th [data-msort="concepto"]{flex:1;text-align:left;padding-left:48px}.cj-th [data-msort="monto"]{flex:none;text-align:right}
.cj-lt{overflow:visible}.cj-lista{border-top:0}
.cj-fe{flex:0 0 56px;font-size:var(--fs-sm);color:var(--muted);white-space:nowrap}
.cj-imp .amt-short{display:none}.cj-lt.dens-comp .cj-imp .amt-full{display:none}.cj-lt.dens-comp .cj-imp .amt-short{display:inline}
.cj-lt.dens-comp .cj-open{padding:4px 0}
.cj-vacio{padding:14px 0}
/* v0.29.0 · escritorio: las dos columnas comparten filas (fila 1: tipo + densidad | buscador, más filtros, CSV · fila 2: atajos y fechas | por página, paginador y contador), todo a la misma altura */
@media (min-width:761px){
  .cj-mov-cab{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);grid-template-rows:auto auto;align-items:start}
  .cj-mov-izq,.cj-mov-der{display:contents}
  .cj-mov-f1{grid-column:1;grid-row:1;gap:12px;min-height:36px;align-self:center}.cj-mov-f1 .sp{display:none}
  .cj-mov-rango{grid-column:1;grid-row:2}
  .cj-mov-f3{grid-column:2;grid-row:1;min-height:36px;align-self:center}
  .cj-mov-pag{grid-column:2;grid-row:2;min-height:32px;align-self:start}
  .cj-mov-f3 .btn,.cj-mov-f3 .cj-qi{height:36px;min-height:36px}
  .cj-mov-cab .seg{min-height:36px}.cj-mov-cab .seg button{min-height:30px}
}
@media (max-width:760px){
  .cj-mov-cmp{display:flex;gap:8px;align-items:center}
  .cj-mov-fbtn{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:8px;min-height:38px;padding:0 12px;border:1px solid var(--line2);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);font:inherit;font-weight:700;font-size:var(--fs-sm);cursor:pointer}
  .cj-mov-fbtn .n{flex:none;background:var(--accent);color:var(--on-accent);border-radius:999px;font-size:11px;font-weight:700;padding:1px 7px}
  .cj-mov-fbtn .res{flex:1;min-width:0;text-align:left;font-weight:500;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cj-mov-fbtn .fl{flex:none;transition:transform .15s}.cj-mov-cab.abierta .cj-mov-fbtn .fl{transform:rotate(180deg)}
  .cj-mov-fbus{flex:none;width:44px;min-height:38px;display:grid;place-items:center;border:1px solid var(--line2);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);cursor:pointer}
  .cj-mov-cab:not(.abierta) .cj-mov-rango,.cj-mov-cab:not(.abierta) .cj-mov-der{display:none}
  #cj-tipos{min-width:0}#cj-tipos .seg button{padding:0 5px;font-size:11px}.cj-dens .seg button{padding:0 7px;min-width:0}
  .cj-mov-f1{gap:6px}.cj-mov-f3 .cj-bt{display:none}
  .cj-mov-pag{flex-wrap:wrap;gap:6px 8px}
  .cj-mov-rango .rg-p{flex-wrap:nowrap;gap:4px}.cj-mov-rango .rg-p .fchip{flex:1 1 0;min-width:0;padding:0 2px;min-height:32px;font-size:12px;text-align:center;justify-content:center}   /* v0.29.0 · los 7 atajos en una sola fila (360–390 px) */
  .cj-mov-rango .rg-s{flex-wrap:nowrap;gap:8px}.cj-mov-rango .rg-c{flex:1 1 0;min-width:0}   /* Desde y Hasta lado a lado */
  .cj-lt.dens-comp .cj-l2,.cj-lt.dens-comp .cj-l3{display:none}
  .cj-th [data-msort="concepto"]{padding-left:40px}.cj-ic{width:32px;height:32px}.cj-lt.dens-comp .cj-fe{flex-basis:50px;font-size:12px}.cj-th [data-msort="fecha"]{flex-basis:60px}
}

/* v0.26.0 · Caja sin conexión: tarjeta «Pendientes de enviar» y aviso de lo que todavía no suma */
.cj-pend{margin:8px 0 12px;padding:10px 12px;border:1px dashed var(--line-strong,var(--line));border-radius:12px;background:var(--surface-2,var(--surface))}
.cj-pend-l{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:6px}
.cj-pend-it{display:flex;gap:8px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.cj-pend-t{min-width:0;flex:1 1 220px;overflow-wrap:anywhere}
.cj-pend-aviso{margin:8px 0}
button[aria-disabled="true"]{cursor:not-allowed}
/* v0.26.0 · aviso en negrita dentro del indicador (saldo real de Netlify sin cargar o viejo) */
.kpi-warn{margin-top:6px;color:var(--warn);background:var(--warn-bg);border-radius:var(--r-sm);padding:6px 10px;font-size:var(--fs-sm)}.kpi-warn b{display:inline-flex;align-items:center;gap:6px}

/* v0.27.0 · Caja › Movimientos: bloque fijo (título y botón · filtros · encabezados de columna) debajo de las solapas, como en Oink; el nuevo se destaca un instante */
.cj-movs{overflow:visible}
.cj-stick{position:sticky;top:calc(var(--top-h,0px) + var(--tabs-h,0px));z-index:20;background:var(--surface);margin:-16px -16px 0;padding:12px 16px 0;border-radius:var(--r) var(--r) 0 0}
.cj-stick .cj-cab{margin-bottom:6px}
.cj-stick .cj-mov-cab{padding:4px 0 6px}
.cj-stick .cj-th{margin:0 -16px;padding-left:16px;padding-right:16px}
/* v0.30.0 · en celular solo quedan fijos los encabezados de columna (Fecha · Concepto · Monto), justo debajo de las solapas; título y filtros se van con el desplazamiento (en escritorio sigue fijo todo el bloque) */
@media (max-width:760px){
  .cj-stick{display:contents}
  .cj-movs .cj-cab{margin-bottom:6px}
  .cj-movs .cj-mov-cab{padding:4px 0 8px}
  .cj-movs .cj-th{position:sticky;top:calc(var(--top-h,0px) + var(--tabs-h,0px));z-index:20;background:var(--surface);margin:0 -16px;padding:8px 16px 6px}
}
.cj-fila{scroll-margin-top:260px}
.cj-fila.cj-nuevo{animation:cj-nuevo 2.8s ease-out}
@keyframes cj-nuevo{0%,55%{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}100%{background:transparent;box-shadow:inset 3px 0 0 transparent}}
@media (prefers-reduced-motion:reduce){.cj-fila.cj-nuevo{animation:none;background:var(--accent-soft)}}
/* encabezado de cualquier tarjeta con título + botón de alta: en una sola línea, centrados y sin aire de más */
.card>.row.sb:first-child{align-items:center;margin-bottom:8px}.card>.row.sb:first-child>h2{margin:0}
/* pendientes de enviar dentro de Movimientos */
.cj-pend-h{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px}.cj-pend-f{font-weight:600}
.cj-pend-it .acc{display:flex;gap:4px;flex:none}

/* v0.27.0 · «● Activa» antes del ícono: columna alineada; con poco ancho queda solo el puntito (el texto sigue en aria-label y globito) */
.cj-ajs{container-type:inline-size}
.cj-ajs .est{flex:none;min-width:76px}
.cj-ajs .est-t{white-space:nowrap}
@container (max-width: 560px){.cj-ajs .est{min-width:0}.cj-ajs .est-t{display:none}.cj-ajs .est::before{width:10px;height:10px}}

/* v0.28.0 · Caja › selector «Ver en otra moneda» */
.cj-mon{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:8px 0}
.cj-mon .seg{flex:none}
.cj-mon-n{font-size:.85em}
.cj-sincot{margin-block:8px}

/* v0.29.0 · Cobros › Clientes en celular: fila compacta (nombre · suscripciones · debe y los íconos a la derecha, sin renglón propio para los botones) */
@media (max-width:760px){
  table.stk.cb-cl tr{padding:7px 2px;gap:1px 12px}
  table.stk.cb-cl td:last-child:has(.btn,button,a.btn){flex:0 0 auto;margin:0 0 0 auto;gap:6px}
  table.stk.cb-cl td:first-child .muted{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}

/* v0.29.0 · errores de formulario visibles (regla 88): campo rosado más fuerte que el estilo del sitio + mensaje pegado al campo, o arriba de la hoja si es general */
input.f-inv,select.f-inv,textarea.f-inv,.f-inv .desp-b,.f-inv .fecha-b,.f-inv .cj-monto-w{border-color:var(--out-ink)!important;background:var(--out-soft)!important;box-shadow:0 0 0 2px color-mix(in srgb,var(--out) 35%,transparent)}
.f-err{display:flex;align-items:flex-start;gap:6px;margin:6px 0 2px;padding:6px 10px;border-radius:var(--r-xs);background:var(--out-soft);color:var(--out-ink);font-size:var(--fs-sm);font-weight:700;line-height:1.35;scroll-margin:80px 0 100px}
.f-err svg{flex:none;margin-top:1px}
.f-err-top{margin:8px 0 10px;padding:10px 12px;font-size:var(--fs)}
.f-inv>label{color:var(--out-ink)}

/* v0.30.0 · metas de las reservas: barra en la tarjeta de la cuenta (Resumen) y sección «Reservas» de Reportes */
.cj-cuenta.con-meta{grid-column:span 2}
.cj-cuenta-m{grid-area:m;display:block;margin-top:10px}
.cj-meta-t{display:block;margin-top:5px;font-size:var(--fs-sm);color:var(--muted);line-height:1.35}
.cj-meta-t.venc{color:var(--danger)}
.cj-rs-meta .barra{min-width:120px}
@media (max-width:480px){.cj-cuenta.con-meta{grid-column:1/-1}}

/* v0.30.0 · Caja › Horas y rendimiento */
.cj-hs-nav{display:flex;align-items:center;gap:8px}.cj-hs-nav b{display:inline-block}.cj-hs-nav b::first-letter{text-transform:uppercase}
.cj-hs-sw{display:inline-flex;align-items:center;gap:6px;font-size:13px;cursor:pointer;margin-left:auto}
.cj-hs-cat{display:block;font-size:11px;line-height:1.1}
.cj-hs .cj-hs-in{width:84px;min-width:0;text-align:right}
.cj-hs-h{white-space:nowrap}.cj-hs-h .cj-hs-her{margin-left:4px;vertical-align:middle}
.cj-hs-her{display:inline-flex;color:var(--muted);cursor:help}
.cj-hs th button.lnk{font:inherit;font-weight:700;color:inherit;background:none;border:0;padding:0;cursor:pointer}
.cj-hs .cj-hs-tot td{font-weight:700;border-top:2px solid var(--line)}
@media (max-width:700px){.cj-hs th,.cj-hs td{padding:8px 4px;font-size:14px}.cj-hs th{font-size:11px;text-transform:uppercase}.cj-hs td:nth-child(n+2),.cj-hs th:nth-child(n+2){white-space:nowrap}.cj-hs td:last-child,.cj-hs th:last-child{text-align:right}.cj-hs .cj-hs-in{width:56px;padding:6px}}

/* v0.30.0 · Seguridad › «Cómo se puede ingresar»: un interruptor por método */
.ing-h{font-size:var(--fs-sm);letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin:6px 0 0}
.ing-grp{border:1px solid var(--line);border-radius:12px;padding:0 12px}
.ing-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-top:1px solid var(--line)}
.ing-grp>.ing-row:first-child{border-top:0}
.ing-ic{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex:none;color:var(--muted)}
.ing-t{flex:1;min-width:0}.ing-t b{display:block}.ing-t small{display:block;color:var(--muted)}
.ing-i{display:inline-flex;color:var(--muted);cursor:help;flex:none}
.ing-sw{position:relative;width:46px;height:26px;flex:none;display:block}
.ing-sw input{position:absolute;inset:0;z-index:1;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}
.ing-sw i{position:absolute;inset:0;border-radius:13px;background:var(--line);transition:background .15s}
.ing-sw i::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25);transition:transform .15s}
.ing-sw input:checked+i{background:var(--accent)}
.ing-sw input:checked+i::after{transform:translateX(20px)}
.ing-sw input:disabled{cursor:not-allowed}.ing-sw input:disabled+i{opacity:.55}
.ing-sw input:focus-visible+i{outline:2px solid var(--accent);outline-offset:2px}
@media (prefers-reduced-motion:reduce){.ing-sw i,.ing-sw i::after{transition:none}}
.frow .field:has(>.ing-row){border:1px solid var(--line);border-radius:12px;padding:0 12px}
.frow .field:has(>.ing-row)>.ing-row{border-top:0}

/* v0.30.0 · Avisos › Personas elegidas */
.av-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}
.av-chips:empty{display:none}
.av-chip{display:inline-flex;align-items:center;gap:4px;background:var(--accent-soft,var(--surface-2));border-radius:16px;padding:3px 6px 3px 10px;font-size:var(--fs-sm)}
.av-chip button{border:0;background:none;color:inherit;font:inherit;cursor:pointer;padding:2px 6px;border-radius:10px}
.av-lista{border:1px solid var(--line);border-radius:8px;max-height:260px;overflow:auto;margin-top:6px}
.av-p{display:flex;gap:10px;align-items:center;padding:8px 10px;border-top:1px solid var(--line);cursor:pointer}
.av-p:first-child{border-top:0}
.av-p input{width:20px;height:20px;flex:none}
.av-p div{min-width:0}.av-p b,.av-p small{display:block;overflow-wrap:anywhere}
.av-p.off{opacity:.45;cursor:not-allowed}

/* ---------- v0.31.0 · tablero de bloques (core/tablero.js): Caja › Tablero y Reportes, Cobros, el Tablero de la Empresa ---------- */
.cb-con-barra{display:flex;flex-direction:column;gap:6px}
.cb-con-barra>.cb-tabs{margin:0}
.tb-barra{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;min-width:0}
.tb-sp{flex:1}
.tb-hoy{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-sm);color:var(--muted);white-space:nowrap}
.tb-ctl{display:inline-flex;align-items:center;gap:4px}
.tb-ctl .seg-ic button{min-height:28px;padding:0 6px}
.tb-chk{font-size:var(--fs-sm);white-space:nowrap;min-height:0;margin:0}
.tb-barra .rango{flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px;min-width:0}
.tb-barra .rg-p{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;max-width:100%}.tb-barra .rg-p::-webkit-scrollbar{display:none}
.tb-barra .rg-p .fchip{min-height:28px;padding:0 10px;font-size:12.5px;white-space:nowrap;flex:none}
.tb-barra .rg-s{display:none}.tb-barra.rg-abierto .rg-s{display:flex;flex-basis:100%}
.tb-barra.rg-abierto .rango{flex-basis:100%}
.tb-barra .rg-c{min-width:140px}
.tb-ib{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:8px;color:var(--ink2);flex:none;background:none;border:0;cursor:pointer}
.tb-ib:hover{background:var(--bg2);color:var(--ink)}
.tb-ib[aria-pressed="true"],.tb-ib[aria-expanded="true"]{background:var(--accent-soft);color:var(--accent-ink)}
.tb-ib:disabled{opacity:.35;cursor:default}
.tb-ib:focus-visible{outline:2px solid var(--accent-ink);outline-offset:1px}
.tb{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:start}
.tb>.tb-blq{grid-column:1/-1;margin:0;padding:10px 14px 12px;min-width:0;scroll-margin-top:var(--tb-sm,120px)}
.tb>.tb-blq.tb-medio{grid-column:auto}
.tb>.tb-ed{grid-column:1/-1}
@media (max-width:760px){.tb{grid-template-columns:minmax(0,1fr)}.tb>.tb-blq.tb-medio{grid-column:1/-1}}
.tb-blq.tb-flash{box-shadow:0 0 0 2px var(--accent-ink),var(--shadow);transition:box-shadow .3s}
.tb-h{display:flex;align-items:center;gap:6px;min-height:30px;margin-bottom:6px}
.tb-h h2{margin:0;font-size:14.5px;font-weight:700;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}
.tb-hi{display:inline-flex;color:var(--muted);flex:none}
.tb-tot{margin-left:auto;font-weight:800;font-size:14.5px;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ink)}
.tb-tot.tb-in{color:var(--in-ink)}.tb-tot.tb-out{color:var(--out-ink)}.tb-tot.tb-res{color:var(--res-ink)}.tb-tot.tb-tr{color:var(--tr-ink)}
.tb-acc{display:inline-flex;align-items:center;gap:2px;flex:none}
.tb-h h2+.tb-acc{margin-left:auto}
.tb-mini{padding:2px}.tb-mini button{min-height:24px;padding:0 8px;font-size:11.5px}
.tb-vacio{margin:4px 0 2px;font-size:var(--fs-sm)}
.tb-nota{margin:-2px 0 6px;font-size:12px}
.tb-kpis{margin:0;gap:8px;grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}
.tb-kpis .kpi{padding:7px 10px;box-shadow:none}
.tb-kpis .k-v{font-size:18px}
.tb-kpis .k-s{font-size:11.5px;color:var(--muted)}
.kpi-ir{cursor:pointer;transition:background .15s}.kpi-ir:hover{background:var(--bg2)}.kpi-ir:focus-visible{outline:2px solid var(--accent-ink);outline-offset:2px}
.tb-dims{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:0 0 8px;gap:4px}.tb-dims::-webkit-scrollbar{display:none}
.tb-dims .fchip{min-height:26px;padding:0 10px;font-size:12px;flex:none}
.tb-blq .bars{gap:2px}
.tb-blq .brow{min-height:26px;padding:0 4px;border-radius:6px}
.tb-blq .b-t{height:8px}
.brow.b-dril{cursor:pointer}.brow.b-dril:hover{background:var(--bg2)}.brow.b-dril:focus-visible{outline:2px solid var(--accent-ink);outline-offset:1px}
.tb-filas{display:flex;flex-direction:column}
.tb-fila{display:grid;grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:4px 8px;min-height:32px;padding:3px 4px;border-top:1px solid var(--line);border-radius:6px}
.tb-filas>.tb-fila:first-child{border-top:0}
.tb-fila[role="button"]{cursor:pointer}.tb-fila[role="button"]:hover{background:var(--bg2)}.tb-fila[role="button"]:focus-visible{outline:2px solid var(--accent-ink);outline-offset:-2px}
.tb-fila.off{opacity:.65}
.tb-fi{display:inline-flex;color:var(--muted)}
.tb-fn{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fs)}
.tb-fv{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:700}
.tb-fv.in{color:var(--in-ink)}.tb-fv.out{color:var(--out-ink)}.tb-fv.tr{color:var(--tr-ink)}
.tb-neg{color:var(--out-ink)}
.tb-fm{grid-column:2/-1;display:block;padding-bottom:3px}
.tb-fm .cj-cuenta-m{display:block}.tb-fm .barra{height:6px}.tb-fm .cj-meta-t{display:block;font-size:11.5px;color:var(--muted);margin-top:3px;line-height:1.3}
.tb-fm .pill{margin-left:4px;vertical-align:middle}
.tb-fila-b{grid-template-columns:minmax(0,1fr) minmax(60px,40%) 44px}.tb-fila-b .tb-fv{text-align:right}
.tb-fila-p{grid-template-columns:54px minmax(0,1fr) auto}.tb-ff{font-size:12px;color:var(--muted);white-space:nowrap}
.tb-pres{margin:2px 0 8px}
.tb-hz-l{display:flex;flex-direction:column}
.tb-hz{display:grid;grid-template-columns:20px minmax(0,1fr) auto auto;align-items:center;gap:8px;min-height:34px;padding:3px 4px;border-top:1px solid var(--line);font-size:13.5px}
.tb-hz-l>.tb-hz:first-child{border-top:0}
.tb-hz-i{display:inline-flex}.tb-hz.warn .tb-hz-i{color:var(--warn)}.tb-hz.ok .tb-hz-i{color:var(--ok)}.tb-hz.info .tb-hz-i{color:var(--info)}
.tb-hz-m{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);background:var(--bg2);border-radius:4px;padding:0 5px;vertical-align:1px}
.tb-proy{border:0;grid-template-columns:20px minmax(0,1fr)}
details.tb-mas{margin-top:6px}
details.tb-mas>summary{display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:var(--fs-sm);font-weight:600;color:var(--accent-ink);list-style:none;padding:2px 0}
details.tb-mas>summary::-webkit-details-marker{display:none}
details.tb-mas>summary svg:last-child{transition:transform .15s}details.tb-mas[open]>summary svg:last-child{transform:rotate(180deg)}
.tb-t{font-size:13px;font-variant-numeric:tabular-nums}
.tb-t th,.tb-t td{padding:5px 8px}
.tb-t th:not(:first-child),.tb-t td:not(:first-child){text-align:right}
.tb-t tfoot th{color:var(--ink);font-size:13px;text-transform:none;letter-spacing:0;border-top:2px solid var(--line2);border-bottom:0}
.tb-t .tb-sub td{font-weight:700;background:var(--bg2);font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink2)}
.tb-t .tb-tr{cursor:pointer}.tb-t .tb-tr:hover td{background:var(--bg2)}
.th-ord{font:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;background:none;border:0;padding:0;cursor:pointer;white-space:nowrap}
.th-ord:hover{color:var(--ink2)}.th-ord:focus-visible{outline:2px solid var(--accent-ink);outline-offset:2px}
.cj-hs.tb-t td{height:34px}
.cj-hs .cj-hs-in{width:68px;min-height:28px;padding:2px 8px;text-align:right}
.cj-hs .cj-hs-n{line-height:1.15;white-space:normal!important;min-width:0}
.cj-hs .cj-hs-sub{display:block}.cj-hs .cj-hs-cat{display:block;color:var(--muted);font-size:11px;line-height:1.1;margin-top:1px}   /* v0.32.0 · la categoría, chica, debajo del ingreso */
.cj-hs-pie{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;font-size:12.5px}
.cj-hs-pie .muted svg{vertical-align:-2px}
.ch-dash{stroke-dasharray:7 5}
.ch-fin{fill:var(--ink2);font-size:12px;font-weight:700}
.tb-medio .chart .ch-ax{font-size:14px}.tb-medio .chart .ch-fin{font-size:15px}   /* el gráfico se achica en media columna: la letra queda legible */
.tb-cmp{font-size:12px;color:var(--muted);white-space:nowrap}
/* editar disposición */
.tb-ed{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;background:var(--accent-soft);color:var(--accent-ink);border-radius:var(--r-sm);padding:8px 12px;font-size:var(--fs-sm)}
.tb-ed>span:nth-child(2){flex:1 1 260px;min-width:0}.tb-ed svg{vertical-align:-3px;display:inline-block}
.tb-ed-b{display:flex;gap:6px;flex-wrap:wrap}
.tb-et{display:inline-flex;align-items:center;gap:0;margin-right:2px}
.tb-editando>.tb-blq{outline:1.5px dashed var(--accent);outline-offset:-1px}
.tb-editando>.tb-blq>:not(.tb-h){pointer-events:none;user-select:none}
.tb-editando>.tb-blq.tb-off{opacity:.5}.tb-editando>.tb-blq.tb-nada{opacity:.7}
.tb-editando .tb-blq[hidden]{display:block}
.tb-grip{cursor:grab;touch-action:none}.tb-arrastrando{opacity:.85;box-shadow:var(--shadow-lg)}.tb-arrastrando .tb-grip{cursor:grabbing}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media print{.tb-barra,.tb-acc,.tb-ed,.tb-et,.tb-hz [data-hz-x],.tb-mas>summary{display:none!important}.tb{display:block}.tb>.tb-blq{margin-bottom:10px}}
/* v0.31.0 · interruptor estándar: un submódulo va con sangría debajo de su módulo */
.ing-row.ing-hija{padding-left:30px}.ing-row.ing-hija .ing-ic{width:26px;height:26px}
.ing-t .chip{margin-top:3px}
.tb-barra-sola{margin:-6px 0 10px}
.tb-fila-g{min-height:26px;border-top:0}.tb-fila-g .tb-fn{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700}.tb-fila-g .tb-fv{font-size:12.5px;color:var(--ink2)}
.est-l{margin:0 0 12px;padding-left:20px;display:flex;flex-direction:column;gap:6px;font-size:var(--fs-sm);color:var(--ink2)}.est-l b{color:var(--ink)}
@media (max-width:480px){.tb-h{flex-wrap:wrap;row-gap:2px}.tb-h h2{flex:1 0 auto}.tb-tot{margin-left:auto}}   /* en celular el título no se corta: el total y los botones bajan si no entran */

/* ---------- v0.31.0 · Consola › Mapa: Base → Proyectos que heredan → Empresas (instancias) ---------- */
.tb-barra .mp-q{margin:0;flex:1 1 200px;min-width:0}.tb-barra .mp-q input{min-height:32px;height:32px;padding:4px 12px;font-size:var(--fs-sm);border-radius:999px}
.tb-barra .fchip{min-height:30px;padding:0 11px;font-size:12.5px;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.mp-fp-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;max-width:100%;margin:0}.mp-fp-chips::-webkit-scrollbar{display:none}
.mp-intro{margin:0 0 10px}
.mp-kpis .kpi{padding:8px 12px}
.mp{display:flex;flex-direction:column;gap:0;margin-bottom:14px}
.mp-raiz,.mp-proy{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:10px 12px;min-width:0}
.mp-raiz{border-top:3px solid var(--accent);background:linear-gradient(180deg,var(--accent-soft),var(--surface) 70px)}
.mp-proy{border-top:3px solid var(--in);margin-top:12px}.mp-proy+.mp-proy{margin-top:14px}
.mp-ph{display:flex;align-items:center;gap:12px;width:100%;background:none;border:0;padding:2px 0;text-align:left;color:inherit;cursor:pointer;border-radius:var(--r-sm)}
.mp-ph:hover b,.mp-ph:focus-visible b{text-decoration:underline}
.mp-orb{flex:none;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--accent);color:var(--on-accent)}
.mp-orb.s{background:var(--in-soft);color:var(--in-ink);width:40px;height:40px}
.mp-pt{display:flex;flex-direction:column;min-width:0;flex:1}.mp-pt b{font-size:1.05rem;line-height:1.25}
.mp-rol{font-size:var(--fs-xs);font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}
.mp-meta{display:flex;flex-wrap:wrap;gap:5px;margin-top:4px;align-items:center}
.mp-ch{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs);color:var(--ink2);border:1px solid var(--line);border-radius:999px;padding:1px 8px;background:var(--surface)}
.mp-tot{flex:none;text-align:right;font-size:var(--fs-xs);color:var(--muted);display:flex;flex-direction:column;line-height:1.15}.mp-tot b{font-size:1.4rem;color:var(--ink)}
.mp-al{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:700;border-radius:999px;padding:1px 7px;flex:none}
.mp-al.warn{background:var(--warn-bg);color:var(--warn)}.mp-al.bad{background:var(--danger-bg);color:var(--danger)}
.mp-tests{margin-top:10px;padding-top:8px;border-top:1px dashed var(--line2)}
.mp-tl{font-size:var(--fs-xs);color:var(--muted);font-weight:600}
.mp-minis{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.mp-mini{display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:0 10px;border-radius:999px;border:1px solid var(--line2);background:var(--surface);color:var(--ink);font-size:var(--fs-sm);font-weight:600;cursor:pointer}
.mp-mini.arch{opacity:.6}
.mp-dot{width:8px;height:8px;border-radius:50%;background:var(--in);flex:none}.mp-dot.off{background:var(--muted)}.mp-dot.warn{background:var(--warn)}.mp-dot.bad{background:var(--danger)}
.mp-hereda{position:relative;display:flex;justify-content:center;height:30px}
.mp-hereda:before{content:"";position:absolute;top:0;bottom:0;left:50%;border-left:2px dashed var(--line2)}
.mp-hereda span{position:relative;align-self:center;font-size:11px;color:var(--muted);background:var(--bg);padding:0 8px}
.mp-hojas{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;margin-top:10px}
.mp-nd{position:relative;display:flex;flex-direction:column;gap:5px;text-align:left;background:var(--bg2);border:1px solid var(--line);border-radius:var(--r-sm);padding:9px 10px 8px 12px;color:inherit;cursor:pointer;min-width:0;overflow:hidden}
.mp-nd:hover,.mp-nd:focus-visible{border-color:var(--accent)}
.mp-nd:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:transparent}
.mp-nd.sv-warn:before{background:var(--warn)}.mp-nd.sv-bad:before{background:var(--danger)}
.mp-nd.arch{opacity:.62}
.mp-nt{display:flex;align-items:center;gap:6px;min-width:0}.mp-nt b{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mp-tp{font-size:var(--fs-xs);color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mp-ps{display:flex;align-items:center;gap:6px;font-size:var(--fs-xs);color:var(--ink2);min-width:0}
.mp-caras{display:flex;flex:none}.mp-caras .mp-ini+.mp-ini{margin-left:-6px}
.mp-n{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mp-ini{width:24px;height:24px;border-radius:50%;display:inline-grid;place-items:center;font-size:10px;font-weight:700;flex:none;border:2px solid var(--bg2);background:var(--line);color:var(--ink2)}
.mp-ini.sa{background:var(--accent);color:var(--on-accent)}.mp-ini.pr{background:var(--in-soft);color:var(--in-ink)}.mp-ini.ad{background:var(--lilac-bg);color:var(--lilac)}.mp-ini.e{background:var(--accent-soft);color:var(--accent-ink)}
.mp-segs{display:flex;gap:2px;height:5px}.mp-segs i{flex:1;max-width:18px;border-radius:2px;background:var(--line2)}.mp-segs i.sup{background:var(--in)}
.mp-pie{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:11px}.mp-pie .on{color:var(--ok)}.mp-pie .off{color:var(--warn)}
.mp-yo{margin-left:auto;font-weight:600;color:var(--ok)}.mp-yo.no{color:var(--warn)}
.mp-vacio{margin:4px 0;font-size:var(--fs-sm)}
.mp-dh{margin-bottom:6px}.mp-dh h3{margin:2px 0}
.mp-h4{margin:14px 0 6px;font-size:var(--fs-sm);text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}
.mp-alr{display:flex;gap:8px;align-items:flex-start;margin:0 0 6px}
.mp-fp{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--line);min-width:0;width:100%;background:none;border-left:0;border-right:0;border-top:0;color:inherit;text-align:left;font:inherit}
.mp-fp .mp-ini{border-color:var(--surface)}
.mp-fn{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden}.mp-fn small{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mp-fe{cursor:pointer}.mp-fe:hover .mp-fn{text-decoration:underline}
.mp-rb{font-size:11px;font-weight:700;border-radius:999px;padding:2px 8px;background:var(--line);color:var(--ink2);flex:none}
.mp-rb.sa{background:var(--accent);color:var(--on-accent)}.mp-rb.pr{background:var(--in-soft);color:var(--in-ink)}.mp-rb.ad{background:var(--lilac-bg);color:var(--lilac)}
.mp-cnts{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.mp-cnt{display:inline-flex;gap:5px;align-items:baseline;font-size:var(--fs-xs);border:1px solid var(--line2);border-radius:999px;padding:2px 9px;color:var(--ink2)}
.mp-kv{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:8px 0}.mp-kv div{border:1px solid var(--line);border-radius:var(--r-sm);padding:6px 8px;display:flex;flex-direction:column}.mp-kv b{font-size:1.1rem}.mp-kv span{font-size:var(--fs-xs);color:var(--muted)}
.mp-acts{flex-wrap:wrap}
@media (max-width:560px){.mp-hojas{grid-template-columns:1fr}.mp-tot b{font-size:1.15rem}.mp-orb{width:38px;height:38px}}

.cj-hs-her.cj-hs-hueco{visibility:hidden}   /* v0.32.0 · mismo ancho con o sin relojito: las cajitas de horas quedan alineadas */

/* v0.32.0 · estándar 17: en el celular, las acciones de la fila van a la derecha del título (no en un renglón aparte).
   La primera celda deja lugar para los botones; las demás celdas («Suscripciones», «Debe»…) siguen debajo del título. */
@media (max-width:760px){
  :is(table.stk,.tw[class*="dens-"] table) tr:has(>td:last-child .acc)>td:first-child{flex:1 1 calc(100% - 132px);order:0}
  :is(table.stk,.tw[class*="dens-"] table) tr:has(>td:last-child .acc)>td:last-child{order:1;flex:0 0 auto;margin:0 0 0 auto;align-self:center}
  :is(table.stk,.tw[class*="dens-"] table) tr:has(>td:last-child .acc)>td:not(:first-child):not(:last-child){order:2}
  :is(table.stk,.tw[class*="dens-"] table) tr:has(>td:last-child .acc) .acc{flex-wrap:nowrap}
}
.cj-hs-ley{display:inline-flex;align-items:center;gap:4px}.cj-hs-ley svg{display:inline-block;flex:none}   /* v0.32.0 · relojito y su leyenda en la misma línea */

/* v0.32.0 · Proyección: supuestos en dos filas parejas (etiqueta al lado, controles de 32 px, guardar con ícono; la explicación va en el ⓘ) */
.cj-pr-cfg{display:flex;flex-direction:column;gap:10px}
.cj-pr-fila{display:flex;flex-wrap:wrap;align-items:center;gap:8px 18px}
.cj-pr-g{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:nowrap}
.cj-pr-l{font-size:var(--fs-sm);font-weight:600;color:var(--muted);white-space:nowrap;margin:0}
.cj-pr-cfg .fchips{margin:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.cj-pr-cfg .fchips::-webkit-scrollbar{display:none}
.cj-pr-cfg .fchip{min-height:32px;padding:0 12px;font-size:13px;white-space:nowrap;flex:none}
.cj-pr-cfg .seg{flex:none;width:auto}.cj-pr-cfg .seg button{min-height:32px;padding:0 14px;font-size:13px}
.cj-pr-sel{min-height:32px;height:32px;padding:0 30px 0 10px;font-size:13px;width:auto;max-width:220px}
.cj-pr-cfg .chk{margin:0;font-size:13px;white-space:nowrap}
.cj-pr-col{display:inline-flex;align-items:center;gap:4px}
.cj-pr-col input{height:32px;min-height:32px;width:130px;padding:0 10px;font-size:13px;text-align:right}
.cj-pr-i{margin-left:auto;display:inline-flex}
.cj-pr-nota{margin:0;font-size:12.5px}
/* v0.32.1 · celular: el título «Supuestos ⓘ» arriba; cada etiqueta a la izquierda con el mismo ancho; chips cortos que entran sin desplazar; Colchón con su botón «Guardar» estándar */
.cj-pr-tit h2{margin:0;font-size:1rem}
@media (max-width:560px){
  .cj-pr-fila{flex-direction:column;align-items:stretch;gap:8px}
  .cj-pr-g{width:100%}.cj-pr-g .cj-pr-l{width:68px;flex:none}
  .cj-pr-cfg .fchips{flex-wrap:nowrap;overflow:visible;gap:4px;flex:1;min-width:0}.cj-pr-cfg .fchip{padding:0 9px;font-size:12.5px;flex:1 1 auto}
  .cj-pr-sel{flex:1;max-width:none;width:auto;min-width:0}
  .cj-pr-sw{padding-left:76px}
  .cj-pr-col{flex:1}.cj-pr-col input{flex:1;width:auto;min-width:0}
}

/* v0.32.0 · Consola › Mapa, entrega B: pulso, módulos y «Medir uso» en cada tarjeta */
.mp-nb{background:none;border:0;padding:0;margin:0;font:inherit;color:inherit;text-align:left;cursor:pointer;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mp-nb b{font-weight:700}
.mp-nb::after{content:"";position:absolute;inset:0;border-radius:inherit}   /* toda la tarjeta abre el detalle */
.mp-nd:has(.mp-nb:focus-visible){outline:2px solid var(--accent-ink);outline-offset:2px}.mp-nb:focus-visible{outline:none}
.mp-nd{cursor:pointer}.mp-nd .mp-al{position:relative}
.mp-segs i.a{background:var(--in)}
.mp-pulso{display:flex;align-items:center;gap:5px;font-size:var(--fs-xs);color:var(--ink2);min-width:0;white-space:nowrap}.mp-pulso b{color:var(--ink)}
.mp-mods{display:inline-flex;gap:3px;margin-left:auto}.mp-md{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:6px;background:var(--accent-soft);color:var(--accent-ink)}
.mp-medir{position:relative;z-index:1;display:inline-flex;align-items:center;gap:4px;min-height:26px;padding:0 8px;border-radius:999px;border:1px solid var(--line2);background:var(--surface);color:var(--ink2);font:inherit;font-size:11.5px;font-weight:700;cursor:pointer;margin-left:6px}
.mp-medir:hover{border-color:var(--accent);color:var(--accent-ink)}.mp-medir.hecho{background:var(--accent-soft);color:var(--accent-ink);border-color:transparent}
.mp-medir.midiendo svg{animation:mp-gira 1s linear infinite}
@keyframes mp-gira{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.mp-medir.midiendo svg{animation:none}}
.mp-pie .mp-yo{margin-left:auto}
.mp-mrow{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 0}
.mp-mchip{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;padding:4px 10px;border-radius:999px;border:1px solid var(--line2);color:var(--muted)}
.mp-mchip small{font-size:11px;opacity:.8}.mp-mchip.on{background:var(--in-soft);color:var(--in-ink);border-color:transparent}
.mp-usage{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.mp-um{border:1px solid var(--line);border-radius:var(--r-sm);padding:7px 9px;display:flex;flex-direction:column;gap:1px;min-width:0}
.mp-uk{display:flex;align-items:center;gap:5px;font-size:11.5px;color:var(--muted);font-weight:600}.mp-um b{font-size:1.1rem}.mp-um small{font-size:11.5px;color:var(--muted)}
.mp-stamp{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:12px;color:var(--muted);flex-wrap:wrap}.mp-stamp .btn{margin-left:auto}
.mp-uso-vacio{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px;border:1px dashed var(--line2);border-radius:var(--r-sm);font-size:13px;color:var(--ink2)}.mp-uso-vacio span{flex:1 1 200px}
.mp-stamp>span{flex:1 1 180px}
.cb-dv{width:64px;min-height:30px;padding:2px 6px;text-align:center}   /* v0.32.0 · día de vencimiento editable en la suscripción */

/* v0.32.1 · Horas y rendimiento: entra en el ancho sin desplazar (tabla fija), números y encabezados a la derecha, la cajita alineada con «Horas»
   y el relojito a su izquierda con lugar reservado. Subcategoría y categoría se cortan con «…» si no entran. */
.cj-hs.tb-t{width:100%;table-layout:fixed}
.cj-hs th:first-child,.cj-hs td:first-child{text-align:left}
.cj-hs th:not(:first-child),.cj-hs td:not(:first-child){text-align:right;white-space:nowrap}
.cj-hs th:nth-child(2),.cj-hs td:nth-child(2){width:24%}
.cj-hs th:nth-child(3),.cj-hs td:nth-child(3){width:100px}
.cj-hs th:nth-child(4),.cj-hs td:nth-child(4){width:22%}
.cj-hs th .th-ord{justify-content:flex-end;width:100%}
.cj-hs .cj-hs-sub,.cj-hs .cj-hs-cat{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cj-hs .cj-hs-hw{display:inline-flex;align-items:center;justify-content:flex-end;gap:4px;width:100%}
.cj-hs .cj-hs-hw .cj-hs-her{margin:0;flex:none}
.cj-hs .cj-hs-in{width:64px;max-width:100%;flex:none}
@media (max-width:560px){
  .cj-hs th,.cj-hs td{padding:6px 3px;font-size:13px}
  .cj-hs th{font-size:10.5px;letter-spacing:.02em}
  .cj-hs th:nth-child(2),.cj-hs td:nth-child(2){width:25%}
  .cj-hs th:nth-child(3),.cj-hs td:nth-child(3){width:76px}
  .cj-hs th:nth-child(4),.cj-hs td:nth-child(4){width:23%}
  .cj-hs .cj-hs-in{width:52px;padding:2px 6px}
  .cj-hs .cj-hs-hw{gap:2px}
}
/* v0.32.1 / v0.33.1 · Saldos al cierre en el celular: Cuenta, Saldo e Inicial ocupan justo el ancho de la pantalla; deslizando hacia la derecha aparecen
   Ingresos, Egresos y Transferencias. La tabla mide dos pantallas y la columna Cuenta queda fija a la izquierda. */
@media (max-width:560px){
  .tb-saldos{width:200%;max-width:none;table-layout:fixed}
  .tb-saldos th:first-child,.tb-saldos td:first-child{width:20%;position:sticky;left:0;z-index:1;background:var(--surface);box-shadow:6px 0 6px -6px rgba(0,0,0,.18)}
  .tb-saldos .tb-sub td:first-child{background:var(--bg2)}
  .tb-saldos th:nth-child(2),.tb-saldos td:nth-child(2),.tb-saldos th:nth-child(3),.tb-saldos td:nth-child(3){width:15%}
  .tb-saldos th:nth-child(n+4),.tb-saldos td:nth-child(n+4){width:16.66%}
  .tb-saldos .cj-nom{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px;min-width:0}
}


.cj-pr-sw{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px}   /* v0.32.1 · los dos interruptores juntos */
@media (max-width:560px){.cj-pr-col{min-width:0}.cj-pr-col input{width:0}.cj-pr-cfg .fchips{min-width:0}}
@media (max-width:560px){.cj-pr-g:has(.fchips){flex-wrap:wrap;gap:4px 8px}.cj-pr-g:has(.fchips) .cj-pr-l{width:100%}.cj-pr-g:has(.fchips) .fchips{flex:1 1 100%}}   /* v0.32.1 · los chips de Horizonte ocupan todo el ancho, con su etiqueta arriba */
.mp-mini-w{display:inline-flex;align-items:center;gap:2px}.mp-mini-w .mp-medir{margin-left:0}.mp-mini-p{font-size:11px;color:var(--muted);font-weight:600}   /* v0.32.1 · Medir uso también en las Empresas de la Base */
.tb-saldos .tb-op{display:inline-block;margin-right:5px;font-weight:800;color:var(--accent-ink);letter-spacing:0}   /* v0.32.1 · Saldos al cierre: la fórmula en los encabezados (Saldo = Inicial + Ingresos − Egresos ± Transf.) */

/* v0.33.0 · Reportes › Evolución mensual › tabla por mes: compacta, una fila por mes. En el celular: Mes corto · Ingresos · Egresos · Resultado
   (con la tasa y lo aportado a reservas chicos debajo); Tasa y A reservas como columnas solo en pantallas anchas. */
.tb-evo .tb-evo-c,.tb-evo .tb-evo-x{display:none}
.tb-evo td:first-child{white-space:nowrap}
@media (max-width:560px){
  .tb-evo{width:100%;table-layout:fixed;font-size:12.5px}
  .tb-evo th,.tb-evo td{padding:5px 4px}
  .tb-evo th:nth-child(n+5),.tb-evo td:nth-child(n+5){display:none}
  .tb-evo th:first-child,.tb-evo td:first-child{width:19%}
  .tb-evo .tb-evo-l{display:none}.tb-evo .tb-evo-c{display:inline}
  .tb-evo .tb-evo-x{display:block;font-size:11px;color:var(--muted);font-weight:500;white-space:normal;line-height:1.25}
}

/* v0.33.0 · Monedas C: transferencia entre monedas distintas → «Hacia la cuenta» y «Entra en destino» comparten la fila (el mismo lugar que categoría y
   subcategoría: la hoja mide lo mismo en los tres tipos) */
.cj-slot.cj-slot-dos #cj-f-dest{grid-column:auto}
.cj-slot #cj-f-md input{width:100%}
.cj-slot #cj-f-md label b{color:var(--cj)}
.tb-fmon{font-weight:500;white-space:nowrap}
.tb-saldos .tb-smon{display:block;font-size:11px;padding-left:22px;white-space:nowrap}
@media (max-width:560px){.cj-slot.cj-slot-dos #cj-f-dest .d-chip{display:none}}   /* en el celular, con dos columnas, se ve el nombre de la cuenta (el chip Operativa/Reserva no entra) */
.fchip:disabled{opacity:.5;cursor:not-allowed;border-style:dashed}   /* v0.33.1 · chip no disponible (p. ej. «Repetir» entre monedas distintas): grisado, con el motivo en su globito */
.inv-link{margin:8px 0 0;overflow-wrap:anywhere}
.cj-otras-nota{margin:0 0 10px;font-size:var(--fs-sm)}

/* v0.35.0 · Contactos y Cobros */
#ct-edad{margin-left:8px;font-size:var(--fs-sm)}
.ct-resp-f{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) auto auto;gap:8px;align-items:center;margin-bottom:8px}
.ct-resp-f select,.ct-resp-f input[type=text]{width:100%;min-width:0}
.ct-resp-f .chk{margin:0;white-space:nowrap;font-size:var(--fs-sm)}
.ct-acargo{margin:6px 0 0;font-size:var(--fs-sm)}
@media (max-width:560px){.ct-resp-f{grid-template-columns:minmax(0,1fr) auto;padding-bottom:8px;border-bottom:1px solid var(--line)}.ct-resp-f select{grid-column:1/-1}}
.cb-desc{white-space:nowrap;margin-left:4px}
.cb-bon{margin:0 0 12px;padding:8px 12px;border:1px solid var(--line);border-radius:var(--r-sm)}
.cb-bon summary{cursor:pointer;font-weight:600}
.cb-bon p{margin:6px 0;font-size:var(--fs-sm)}
.ap-ipc-viejo{color:var(--warn,#b45309)}.ap-ipc-w{align-self:start}.ap-ipc-w .btn{width:100%;min-height:var(--ctl-h);height:var(--ctl-h);padding-top:0;padding-bottom:0}   /* v0.36.0 · el botón a la altura del campo (la etiqueta vacía iguala el renglón) */
.ap-t .ap-n{width:100%;max-width:140px}
.ap-t .ap-pct{white-space:nowrap;color:var(--muted)}

/* v0.35.0 · Clases */
.t-off{--c:var(--muted)}
.cl-nav{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap;min-width:0}
.cl-tit{font-size:var(--fs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cl-filtros{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;margin:0 0 10px}
.cl-filtros>*{min-width:0}
.cl-imp-tit{display:none}
.cl-vacio{padding:16px 0}
.cl-tab td.acc{display:table-cell;white-space:nowrap;text-align:right}
.cl-tab td.acc>*+*{margin-left:4px}
.tb-barra .desp:has(#cg-act){width:auto;flex:0 1 260px;min-width:180px}
.tb-barra .cl-q{width:auto;flex:0 1 220px;min-width:120px;height:var(--ctl-h-sm);min-height:0}
.cl-tw{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface)}
.cl-grilla{display:grid;grid-template-columns:48px repeat(var(--cols),minmax(140px,1fr));min-width:min-content}
.cl-ch{position:sticky;top:0;z-index:2;height:36px;display:flex;align-items:center;justify-content:center;gap:4px;padding:0 6px;font-size:var(--fs-sm);font-weight:700;color:var(--ink);background:var(--surface);border-bottom:1px solid var(--line);white-space:nowrap}
.cl-ch small{font-weight:500;color:var(--muted)}
.cl-hoyp{font-size:var(--fs-xs);font-weight:700;color:var(--accent-ink);background:var(--accent-soft);border-radius:999px;padding:1px 6px}
.cl-horas{position:relative}
.cl-horas span{position:absolute;right:6px;transform:translateY(-50%);font-size:var(--fs-xs);color:var(--muted);font-variant-numeric:tabular-nums}
.cl-horas span:first-child{transform:none}
.cl-c{border-left:1px solid var(--line);min-width:0}
.cl-col{position:relative}
.cl-linea{position:absolute;left:0;right:0;border-top:1px dashed var(--line);pointer-events:none}
.cl-b{position:absolute;display:flex;flex-direction:column;align-items:flex-start;gap:1px;overflow:hidden;text-align:left;padding:4px 6px;border:0;border-left:3px solid var(--c);border-radius:6px;background:color-mix(in srgb,var(--c) 15%,var(--surface));color:var(--ink);font-size:var(--fs-xs);line-height:1.25;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.05)}
.cl-b:hover{background:color-mix(in srgb,var(--c) 24%,var(--surface))}
.cl-b:focus-visible{outline:2px solid var(--accent-ink);outline-offset:1px;z-index:3}
.cl-b>*{flex-shrink:0}
.cl-b b{font-size:var(--fs-sm);font-weight:700;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cl-b small{color:var(--ink2);max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cl-b small:empty{display:none}
.cl-bh{display:flex;width:100%;justify-content:space-between;gap:6px;font-weight:700;color:var(--c);font-variant-numeric:tabular-nums}
.cl-b.canc{opacity:.6;background:repeating-linear-gradient(135deg,var(--surface) 0 6px,color-mix(in srgb,var(--c) 10%,var(--surface)) 6px 12px)}
.cl-b.canc b{text-decoration:line-through}
.cl-b.reemp{box-shadow:inset 0 0 0 1px var(--c)}
.cl-b .pill{margin-top:2px}
.cl-cupo{font-size:var(--fs-xs);font-weight:700;color:var(--ink2);background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:0 6px;font-variant-numeric:tabular-nums}
.cl-cupo.lleno{color:var(--danger);border-color:var(--danger);background:var(--danger-bg)}
.cl-ok{display:inline-flex;vertical-align:-2px;margin-left:4px;color:var(--ok)}
.cl-barra{display:inline-block;vertical-align:middle;width:60px;height:5px;margin-left:6px;border-radius:999px;background:var(--line);overflow:hidden}
.cl-barra i{display:block;height:100%;background:var(--accent-ink)}
.cl-ley{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:10px;font-size:var(--fs-sm);color:var(--ink2)}
.cl-ley-i::before{content:'';display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px;background:var(--c);vertical-align:-1px}
.cl-dot{display:inline-block;width:10px;height:10px;margin-right:6px;border-radius:3px;background:var(--c)}
/* modo lista (celular) */
.cl-ldia{font-size:var(--fs-h2);margin:14px 0 6px}
.cl-ldia:first-of-type{margin-top:4px}
.cl-lista{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.cl-lista .cl-b{position:static;padding:8px 10px;min-height:64px}
/* hoja de la clase y listas de alumnos */
.cl-al-cab{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:10px 0 4px}
.cl-als{list-style:none;margin:0 0 10px;padding:0}
.cl-al{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;padding:8px 0;border-bottom:1px solid var(--line)}
.cl-al:last-child{border-bottom:0}
.cl-al-n{flex:1 1 160px;min-width:0}
.cl-al .fchips{flex-wrap:nowrap}
.cl-acc{margin:10px 0;border:1px solid var(--line);border-radius:var(--r-sm);padding:0 12px}
.cl-acc>summary{cursor:pointer;padding:10px 0;font-weight:600}
.cl-acc-b{padding-bottom:10px}
/* alumnos */
.cl-ig{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px;padding:2px 0}
.cl-ig+.cl-ig{border-top:1px dashed var(--line)}
.cl-ig-acc{margin-left:auto}
.cl-rein{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;width:100%;padding:4px 0 6px}
.cl-rein .chk{margin:0}
.cl-puntos{display:flex;flex-wrap:wrap;gap:4px;margin:4px 0 10px}
.cl-pt{width:12px;height:12px;border-radius:50%;background:var(--line2)}
.cl-pt.presente{background:var(--ok)}.cl-pt.ausente{background:var(--danger)}.cl-pt.aviso{background:var(--info)}
/* tablero */
.cl-barras{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.cl-br-t{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;font-size:var(--fs-sm);margin-bottom:3px}
.cl-mapa{border-collapse:separate;border-spacing:3px;font-size:var(--fs-sm)}
.cl-mapa th{font-weight:600;color:var(--ink2);text-align:left;padding:2px 6px;white-space:nowrap}
.cl-mapa thead th{text-align:center}
.cl-hm{min-width:48px;height:30px;text-align:center;border-radius:6px;background:var(--bg2);color:var(--ink2);font-variant-numeric:tabular-nums}
.cl-hm.h1{background:color-mix(in srgb,var(--accent) 22%,var(--surface))}
.cl-hm.h2{background:color-mix(in srgb,var(--accent) 48%,var(--surface));color:var(--ink)}
.cl-hm.h3{background:var(--accent);color:var(--on-accent);font-weight:700}
/* profes y ajustes */
.cl-fr{align-items:flex-end;border-bottom:1px dashed var(--line);padding-bottom:6px;margin-bottom:6px}
.cl-fr-x{flex:0 0 auto}
.cl-listas{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
.cl-listas .card{margin:0}
.cl-chips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.fchip.off{opacity:.55;text-decoration:line-through}
.cl-listas .ord-i{padding-right:8px}.cl-li-n{flex:1;min-width:0;text-align:left;font-weight:600}.cl-li-n.off{opacity:.55;text-decoration:line-through}
.cl-ord-th,.cl-ord-td{width:44px;padding-left:2px!important;padding-right:0!important}.cl-ord-td .ord-h{width:36px;height:36px}
tr.ord-mov{background:var(--accent-soft)}
.cl-etq{display:grid;gap:8px;margin:8px 0 4px}
.cl-etq-h,.cl-etq-f{display:grid;grid-template-columns:minmax(70px,120px) minmax(0,1fr) minmax(0,1fr);gap:8px;align-items:center}
.cl-etq-h span{font-size:var(--fs-xs);font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.cl-colores{display:flex;flex-wrap:wrap;gap:8px}
.cl-col-b{width:30px;height:30px;border-radius:50%;border:2px solid transparent;background:color-mix(in srgb,var(--c,var(--line2)) 55%,var(--surface));font-size:var(--fs-xs);font-weight:700;color:var(--ink2)}
.cl-col-b.on{border-color:var(--ink)}
@media (max-width:640px){
  .cl-filtros{grid-template-columns:1fr 1fr}
  .cl-al .fchips{flex-wrap:wrap}
}
@media print{
  .cl-imp-tit{display:block;font-size:16px;margin:0 0 8px}
  .cl-tw{overflow:visible;border:0}
  .cl-grilla{grid-template-columns:40px repeat(var(--cols),1fr);min-width:0}
  .cl-ch{position:static}
  .cl-b{box-shadow:none;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .cl-ley-i::before{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

/* v0.35.0 · Sonido en este dispositivo */
.ton-card .ton-fila{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0}
.ton-evs{display:grid;gap:4px;margin:4px 0 6px}
.ton-evs .chk{margin:0}
.ton-min{border:1px solid var(--line2);background:var(--surface);border-radius:var(--r-sm);text-align:center;width:64px;min-height:var(--ctl-h-sm);height:var(--ctl-h-sm);padding:0 8px;margin:0 4px;display:inline-block}
#cp-son .av-push{border:0;padding:0;background:none}
.tb-blq.tb-cargando{opacity:.55;transition:opacity .15s}   /* v0.36.0 · el bloque que se está repintando */
