*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
/* Axon Admin DS tokens (F0a) — mismos nombres que admin-v2.css + alias 1.0.
   Acento de marca 1.0 sigue en azul (--primary); teal DS queda en --brand (decisión abierta). */
:root{
  color-scheme:light;

  /* Neutrales (slate) — DS */
  --bg:#f8fafc;--bg-soft:#f8fafc;--surface:#ffffff;--surface-2:#f1f5f9;--surface-soft:#f8fafc;
  --border:#e2e8f0;--border-strong:#cbd5e1;
  --text:#0f172a;--text-2:#475569;--text-3:#64748b;
  --muted:#64748b;--muted-2:#64748b;

  /* Marca + semánticos */
  --primary:#2563eb;--primary-dk:#1d4ed8;--primary-soft:#dbeafe;
  /* Rellenos de botón primario: siempre AA con texto --on-primary (en dark --primary se aclara para enlaces). */
  --btn-primary:#2563eb;--btn-primary-dk:#1d4ed8;--on-primary:#ffffff;
  --brand:#0e7490;--brand-contrast:#ffffff;
  --accent:#7c3aed;--accent-soft:#ede9fe;--accent-contrast:#ffffff;
  --ok:#15803d;--warn:#b45309;--danger:#b91c1c;--info:#1d4ed8;
  --success:#15803d;--warning:#b45309;

  --badge-ok-bg:#dcfce7;--badge-ok-border:#bbf7d0;
  --badge-danger-bg:#fee2e2;--badge-danger-border:#fca5a5;
  --badge-warn-bg:#fef9c3;--badge-warn-border:#fde047;
  --badge-info-bg:#dbeafe;--badge-info-border:#bfdbfe;
  --badge-muted-bg:#f1f5f9;--badge-muted-border:#e2e8f0;
  --badge-accent-bg:#ede9fe;--badge-accent-border:#c4b5fd;

  --sidebar-bg:#0c1524;--sidebar-bg-2:#111e31;--sidebar-hover:rgba(255,255,255,.10);
  --sidebar-w:248px;--topbar-h:54px;
  --sidebar-section-size:.69rem;--sidebar-subsection-size:.80rem;--sidebar-link-size:.83rem;

  --field-bg:#ffffff;--field-bg-soft:#fbfdff;--field-border:#cbd5e1;
  /* Readonly/disabled: gris más marcado que el chrome Access (#d4d4d4) para verse «apagados» */
  --field-readonly-bg:#b8c4d4;--field-readonly-border:#8fa0b5;--field-readonly-text:#1e293b;
  --field-disabled-bg:#b8c4d4;--field-disabled-border:#8fa0b5;--field-disabled-text:#1e293b;
  --tag-chip-bg:#eef2f7;--tag-chip-border:#c5d0dc;--tag-chip-text:#334155;--tag-chip-hover-bg:#e2e8f0;

  /* Chrome formularios Access (F0a) — grises clásicos, no rediseño */
  --access-chrome:#d4d4d4;--access-chrome-2:#e8e8e8;--access-chrome-3:#ececec;
  --access-chrome-border:#9ca3af;--access-chrome-border-soft:#d1d5db;
  --access-chrome-inset:#b8b8b8;--access-chrome-outset:#cbd5e1;--access-chrome-frame:#a8a8a8;
  --access-field-yellow:#fde047;--access-field-yellow-border:#ca8a04;
  --access-stripe:#f9fafb;
  /* Cabeceras de sección Access: fijas (no remapean en dark) para conservar AA */
  --access-section-yellow-bg:#fde047;--access-section-yellow-fg:#422006;
  --access-section-cyan-bg:#0e7490;--access-section-cyan-fg:#ffffff;
  --access-section-green-bg:#15803d;--access-section-green-fg:#ffffff;
  --access-section-purple-bg:#6d28d9;--access-section-purple-fg:#ffffff;
  --access-section-slate-bg:#cbd5e1;--access-section-slate-fg:#0f172a;

  --sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-8:32px;
  --radius:12px;--radius-sm:8px;--radius-pill:999px;
  --shadow:0 10px 28px rgba(15,23,42,.06),0 2px 8px rgba(15,23,42,.04);
  --shadow-sm:0 1px 2px rgba(15,23,42,.06),0 1px 3px rgba(15,23,42,.08);
  --shadow-1:0 1px 2px rgb(15 23 42 / .06);
  --shadow-2:0 4px 12px rgb(15 23 42 / .10);

  --font:Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --font-ui:var(--font);
  --font-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --fs-xs:12px;--fs-sm:13px;--fs-md:14px;--fs-lg:16px;--fs-xl:20px;--fs-2xl:28px;
  --body-gradient:radial-gradient(circle at top left,rgba(37,99,235,.08),transparent 32rem),linear-gradient(180deg,var(--bg-soft) 0,var(--bg) 38%,#e8eef6 100%);
  --card-bg:linear-gradient(180deg,rgba(255,255,255,.98),rgba(255,255,255,.94));
  --motion:160ms;
}
[data-theme="dark"]{
  color-scheme:dark;
  --bg:#0b1220;--bg-soft:#0b1220;--surface:#101828;--surface-2:#1e293b;--surface-soft:#1e293b;
  --border:#1e293b;--border-strong:#334155;
  /* Secundarios ≥ AA en tipografía pequeña (.68–.82rem): slate-400 fallaba a ojo */
  --text:#f1f5f9;--text-2:#e2e8f0;--text-3:#cbd5e1;
  --muted:#e2e8f0;--muted-2:#cbd5e1;
  --primary:#60a5fa;--primary-dk:#93c5fd;--primary-soft:rgba(37,99,235,.28);
  --btn-primary:#2563eb;--btn-primary-dk:#1d4ed8;--on-primary:#ffffff;
  --brand:#22d3ee;--brand-contrast:#04212b;
  --accent:#a78bfa;--accent-soft:rgba(124,58,237,.28);--accent-contrast:#1e1035;
  --ok:#4ade80;--warn:#fbbf24;--danger:#f87171;--info:#60a5fa;
  --success:#4ade80;--warning:#fbbf24;
  --badge-ok-bg:rgba(74,222,128,.16);--badge-ok-border:rgba(74,222,128,.35);
  --badge-danger-bg:rgba(248,113,113,.16);--badge-danger-border:rgba(248,113,113,.4);
  --badge-warn-bg:rgba(251,191,36,.16);--badge-warn-border:rgba(251,191,36,.35);
  --badge-info-bg:rgba(96,165,250,.16);--badge-info-border:rgba(96,165,250,.35);
  --badge-muted-bg:rgba(148,163,184,.14);--badge-muted-border:rgba(148,163,184,.28);
  --badge-accent-bg:rgba(167,139,250,.16);--badge-accent-border:rgba(167,139,250,.35);
  --field-bg:#101828;--field-bg-soft:#0f172a;--field-border:#334155;
  --field-readonly-bg:#1e293b;--field-readonly-border:#334155;--field-readonly-text:#e2e8f0;
  --field-disabled-bg:#1e293b;--field-disabled-border:#334155;--field-disabled-text:#94a3b8;
  --tag-chip-bg:#1e293b;--tag-chip-border:#334155;--tag-chip-text:#e2e8f0;--tag-chip-hover-bg:#334155;
  --shadow:0 10px 28px rgba(0,0,0,.45),0 2px 8px rgba(0,0,0,.35);
  --shadow-sm:0 1px 2px rgba(0,0,0,.4);
  --shadow-1:0 1px 2px rgb(0 0 0 / .40);
  --shadow-2:0 4px 14px rgb(0 0 0 / .50);
  --body-gradient:var(--bg);
  --card-bg:var(--surface);
}
html,body{height:100%}
body{font-family:var(--font-ui);font-size:13.5px;line-height:1.5;background:var(--body-gradient);color:var(--text);-webkit-font-smoothing:antialiased;font-feature-settings:"cv05","tnum";font-variant-numeric:tabular-nums}
a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}
.mono,.isbn,.doc-ref,.ax-money{font-family:var(--font-mono);letter-spacing:.02em;font-variant-numeric:tabular-nums;white-space:nowrap}
.ax-money__dec{color:var(--muted);font-weight:650}
.ax-money--neg{color:var(--danger,#dc2626)}
.ax-money--neg .ax-money__dec{color:inherit}
.ax-money--zero{color:var(--muted)}
.stock-valuation-page{min-width:0;max-width:100%}
.stock-valuation-kpis{display:flex;flex-wrap:wrap;gap:.35rem;margin:.35rem 0 .75rem}
.stock-valuation-kpis .page-hd-kpi{max-width:100%}
.stock-valuation-kpis .page-hd-kpi strong{font-size:.82rem;font-weight:800}
.stock-valuation-kpis .page-hd-kpi .ax-money{font-size:inherit;font-weight:inherit}
.stock-valuation-detail-hd{margin:.35rem 0 .45rem;font-size:1rem}
.stock-valuation-hint{margin-top:.65rem}
.stock-valuation-tbl table{width:100%;font-size:.72rem}
.stock-valuation-tbl th,.stock-valuation-tbl td{padding:.22rem .28rem;vertical-align:middle}
.stock-valuation-tbl th{white-space:normal;line-height:1.15;font-size:.66rem}
.stock-valuation-tbl .ax-money{font-size:.72rem;letter-spacing:-.01em}
.stock-valuation-tbl--summary{overflow-x:hidden}
.stock-valuation-tbl--summary table{table-layout:fixed}
.stock-valuation-tbl--summary th:first-child,
.stock-valuation-tbl--summary td:first-child{width:6.75rem}
.stock-valuation-tbl--summary th.num,.stock-valuation-tbl--summary td.num{width:auto}
.stock-valuation-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:0}
.stock-valuation-total td{border-top:2px solid var(--border);background:var(--surface-2,rgba(15,23,42,.04))}
/* a11y P0: skip link + contraste de secundarios ≥ AA */
.skip-link{position:absolute;left:.75rem;top:.35rem;z-index:400;padding:.45rem .75rem;border-radius:var(--radius-sm);background:var(--btn-primary);color:var(--on-primary);font-weight:700;font-size:.82rem;transform:translateY(-120%);transition:transform .12s ease}
.skip-link:focus,.skip-link:focus-visible{transform:none;outline:2px solid var(--accent-contrast,#fff);outline-offset:2px;text-decoration:none}
main:focus{outline:none}
main:focus-visible{outline:2px solid var(--primary);outline-offset:3px}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .skip-link{transition:none}
}

/* ── Topbar ──────────────────────────── */
.topbar{position:fixed;top:0;left:0;right:0;height:var(--topbar-h);background:var(--sidebar-bg);display:flex;align-items:center;z-index:200;border-bottom:1px solid rgba(255,255,255,.08);box-shadow:none}
.topbar-brand{width:var(--sidebar-w);flex-shrink:0;display:flex;align-items:center;gap:.6rem;padding:0 1.25rem;color:#fff;font-size:1rem;font-weight:800;letter-spacing:-.35px;border-right:1px solid rgba(255,255,255,.08)}
.topbar-dot{width:9px;height:9px;border-radius:50%;background:#60a5fa;box-shadow:none;flex-shrink:0}
.topbar-right{display:flex;align-items:center;gap:.65rem;margin-left:auto;padding:0 1.15rem}
.topbar-help{display:none;padding:.35rem .75rem;border:1px solid rgba(255,255,255,.22);border-radius:999px;color:rgba(255,255,255,.88);text-decoration:none;font-size:.76rem;font-weight:700;transition:all .12s}
.topbar-help:hover{background:rgba(255,255,255,.1);color:#fff;border-color:rgba(255,255,255,.35)}
.topbar-user{color:rgba(255,255,255,.88);font-size:.79rem;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar-logout{padding:.35rem .8rem;border:1px solid rgba(255,255,255,.18);border-radius:999px;background:rgba(255,255,255,.06);color:rgba(255,255,255,.88);font-size:.76rem;font-weight:700;cursor:pointer;transition:all .12s}
.topbar-logout:hover{background:rgba(255,255,255,.08);color:#fff;border-color:rgba(255,255,255,.3)}

/* ── Sidebar ─────────────────────────── */
.sidebar{position:fixed;top:var(--topbar-h);left:0;bottom:0;width:var(--sidebar-w);background:var(--sidebar-bg);overflow-y:auto;z-index:100;padding:.55rem .45rem 2rem;border-right:1px solid rgba(255,255,255,.09)}
.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.18);border-radius:2px}
.sidebar>nav{display:flex;flex-direction:column;gap:.7rem}
.nav-group{margin:0;padding:0}
/* Soft cards: mismo fill/radio en las 9; un acento (activo). Sin arcoíris. */
.nav-card{--nav-accent:#60a5fa;--nav-accent-soft:rgba(96,165,250,.16);--nav-accent-border:rgba(255,255,255,.16);--nav-label-color:rgba(148,163,184,.85);padding:.22rem .22rem .28rem;border-radius:10px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.035);box-shadow:none}
.nav-card--sales,.nav-card--purchases,.nav-card--warehouse,.nav-card--magazines,.nav-card--payments,.nav-card--collections,.nav-card--bank,.nav-card--reports,.nav-card--web,.nav-card--config,.nav-card--audit{--nav-accent:#60a5fa;--nav-accent-soft:rgba(96,165,250,.16);--nav-accent-border:rgba(255,255,255,.16);--nav-label-color:rgba(148,163,184,.85)}
/* Accesos sueltos de primer nivel (Inicio, Ventas, Clientes…): sin tarjeta ni
   etiqueta de sección, separados del primer grupo por una línea fina. */
.nav-quick{display:flex;flex-direction:column;padding:0 .22rem .5rem;margin-bottom:.1rem;border-bottom:1px solid rgba(255,255,255,.1)}
.nav-group--secondary .nav-link{font-size:var(--sidebar-link-size);font-weight:500;color:rgba(255,255,255,.72)}
.nav-group--secondary .nav-link:hover{color:#fff}
.nav-label{display:flex;align-items:center;gap:.4rem;padding:.4rem .55rem .22rem .5rem;margin:0;font-size:var(--sidebar-section-size);font-weight:650;text-transform:uppercase;letter-spacing:.06em;color:var(--nav-label-color,rgba(148,163,184,.85));user-select:none;border:none}
.nav-card .nav-label{letter-spacing:.06em}
.nav-label .nav-icon{opacity:.78;width:14px;height:14px;flex-shrink:0}
.nav-card .nav-details-summary{color:rgba(148,163,184,.85)}
.nav-card .nav-details[open]>.nav-details-summary{color:rgba(226,232,240,.92)}
.nav-card .nav-details-summary:hover{color:#fff;background:rgba(255,255,255,.04)}
.nav-sublabel{padding:.32rem .55rem .1rem .5rem;font-size:var(--sidebar-subsection-size);font-weight:600;text-transform:none;letter-spacing:.01em;color:rgba(148,163,184,.85);user-select:none}
/* Nesting = indent only (sin raíl border-left). */
.nav-subsection{margin:.1rem 0 .15rem;padding-left:.2rem;border-left:none}
.nav-subsection .nav-sublabel{padding-left:.15rem;padding-top:.28rem}
.nav-details{margin:.05rem 0 .45rem;border-radius:8px}
.nav-details-summary{list-style:none;cursor:pointer;padding:.4rem .55rem .4rem .5rem;font-size:var(--sidebar-subsection-size);font-weight:600;text-transform:none;letter-spacing:.01em;color:rgba(148,163,184,.85);user-select:none;display:flex;align-items:center;gap:.35rem;border-radius:8px;transition:color .12s,background .12s}
.nav-details-summary::-webkit-details-marker{display:none}
.nav-details-summary::before{content:'';width:0;height:0;border-left:5px solid currentColor;border-top:4px solid transparent;border-bottom:4px solid transparent;opacity:.85;transition:transform .12s;flex-shrink:0}
.nav-details[open]>.nav-details-summary::before{transform:rotate(90deg)}
.nav-details[open]>.nav-details-summary{color:rgba(226,232,240,.92)}
.nav-details-summary:hover{color:#fff;background:rgba(255,255,255,.04)}
.nav-details-body{margin:.05rem 0 .1rem;padding:.05rem 0 .1rem 1.1rem;border-left:none}
.nav-link--nested{padding:.42rem .55rem;font-size:var(--sidebar-link-size)}
.sidebar a,.sidebar .nav-link{display:flex;align-items:center;gap:.5rem;padding:.46rem .55rem;margin:0;color:rgba(255,255,255,.88);font-size:var(--sidebar-link-size);border:1px solid transparent;border-radius:8px;transition:color .12s,background .12s;white-space:nowrap;font-weight:500;text-decoration:none}
.nav-icon{flex-shrink:0;width:16px;height:16px;opacity:.72}
.nav-link:hover .nav-icon,.nav-link.active .nav-icon{opacity:1}
/* Un solo peso de item (core = mismo que el resto; badges marcan urgencia). */
.nav-link--core{font-size:var(--sidebar-link-size);font-weight:500;color:rgba(255,255,255,.88);letter-spacing:normal;padding:.46rem .55rem}
.nav-link--core .nav-icon{opacity:.72}
.nav-link--core:hover .nav-icon,.nav-link--core.active .nav-icon{opacity:1}
.nav-link--core:hover{color:#fff}
.sidebar a:hover,.sidebar .nav-link:hover{color:#fff;background:var(--sidebar-hover);text-decoration:none;border-color:transparent}
/* Active: solo tint (sin barra inset). */
.nav-card .nav-link.active,.nav-card a.nav-link.active{color:#fff;background:var(--nav-accent-soft);border-color:transparent;font-weight:600;box-shadow:none}
.nav-card .nav-link--nested.active,.nav-card a.nav-link--nested.active{box-shadow:none}
.nav-link--with-badge{justify-content:space-between;gap:.35rem}
.nav-link--with-badge .nav-link-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto}
/* Badges de cola: slate, sin borde (no compiten con active). */
.sidebar .nav-badge{flex-shrink:0;margin-left:auto;padding:.12rem .38rem;border-radius:999px;font-size:.72rem;font-weight:600;line-height:1.25;font-variant-numeric:tabular-nums;background:rgba(148,163,184,.22);color:rgba(226,232,240,.92);border:0;white-space:nowrap}
.nav-link.active .nav-badge{background:rgba(255,255,255,.16);color:#fff;border:0}
.nav-card>summary.nav-label{cursor:pointer;list-style:none}
.nav-card>summary.nav-label::-webkit-details-marker{display:none}
.nav-card>summary.nav-label::after{content:'';width:0;height:0;margin-left:auto;flex-shrink:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid currentColor;opacity:.85;transition:transform .12s}
.nav-card:not([open])>summary.nav-label::after{transform:rotate(-90deg)}
.nav-card-body{padding-top:.05rem}
.nav-favorites{margin:0 0 .15rem;padding:0 0 .45rem;border-radius:0;border:none;border-bottom:1px solid rgba(255,255,255,.16);background:transparent}
.nav-context{margin:0 0 .45rem;padding:.45rem .5rem .55rem;border-radius:10px;border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);background:color-mix(in srgb,var(--accent) 10%,transparent)}
.nav-context-label{font-size:.68rem;font-weight:650;letter-spacing:.02em;text-transform:none;color:color-mix(in srgb,var(--accent) 70%,#fff);margin:0 0 .2rem}
.nav-context-title{font-size:.82rem;font-weight:700;line-height:1.25;color:#fff;margin:0 0 .1rem;word-break:break-word}
.nav-context-meta{font-size:.68rem;color:rgba(255,255,255,.72);margin:0 0 .4rem}
.nav-context .nav-link--context{padding:.32rem .45rem;font-size:.78rem;border-radius:8px;margin:0}
.nav-context .nav-link--return{margin-top:.28rem;opacity:.92;border-top:1px solid rgba(255,255,255,.12);border-radius:0 0 8px 8px;padding-top:.45rem}
.nav-favorites[hidden]{display:none!important}
.nav-favorites-label{display:flex;align-items:center;gap:.35rem;padding:.32rem .55rem .16rem .5rem;font-size:var(--sidebar-section-size);font-weight:650;text-transform:uppercase;letter-spacing:.06em;color:rgba(148,163,184,.85)}
.nav-favorites-label .nav-icon{opacity:.75;width:14px;height:14px;color:rgba(251,191,36,.85)}
.nav-favorites-list .nav-link{padding:.44rem .55rem;font-size:var(--sidebar-link-size)}
/* Fav: utilitario del sidebar (no usa .btn; el pill primario ya no pinta type=button). */
button.nav-fav-btn,
button[type=button].nav-fav-btn{
  flex-shrink:0;
  width:1.35rem;
  height:1.35rem;
  min-width:1.35rem;
  min-height:1.35rem;
  margin-left:auto;
  border:0;
  border-radius:4px;
  padding:0;
  background:transparent;
  color:rgba(255,255,255,.32);
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  opacity:0;
  box-shadow:none;
  transform:none;
  font-size:inherit;
  font-weight:400;
  line-height:1;
  white-space:nowrap;
  transition:opacity .12s,color .12s,background .12s;
  -webkit-appearance:none;
  appearance:none;
}
.nav-link:hover button.nav-fav-btn,
.nav-link:hover button[type=button].nav-fav-btn,
.nav-link--fav button.nav-fav-btn,
.nav-link--fav button[type=button].nav-fav-btn,
button.nav-fav-btn:focus-visible,
button[type=button].nav-fav-btn:focus-visible{opacity:1}
button.nav-fav-btn:hover,
button[type=button].nav-fav-btn:hover{
  background:rgba(255,255,255,.08);
  color:rgba(254,243,199,.9);
  box-shadow:none;
  transform:none;
}
button.nav-fav-btn.is-fav,
button[type=button].nav-fav-btn.is-fav{
  color:rgba(251,191,36,.88);
  opacity:.85;
  background:transparent;
  box-shadow:none;
}
button.nav-fav-btn svg,
button[type=button].nav-fav-btn svg{
  width:14px;
  height:14px;
  display:block;
  pointer-events:none;
}
.nav-link--with-badge button.nav-fav-btn,
.nav-link--with-badge button[type=button].nav-fav-btn{margin-left:0}
.nav-favorites-list .nav-link--favorite button.nav-fav-btn,
.nav-favorites-list .nav-link--favorite button[type=button].nav-fav-btn{
  display:inline-flex;
  opacity:1;
  color:rgba(251,191,36,.95);
}
.nav-favorites-list .nav-link--favorite button.nav-fav-btn:hover,
.nav-favorites-list .nav-link--favorite button[type=button].nav-fav-btn:hover{
  color:#fde68a;
  background:rgba(255,255,255,.1);
}
html[data-sidebar-theme="light"] .nav-favorites-list .nav-link--favorite button.nav-fav-btn,
html[data-sidebar-theme="light"] .nav-favorites-list .nav-link--favorite button[type=button].nav-fav-btn{
  color:#d97706;
}
html[data-sidebar-theme="light"] .nav-favorites-list .nav-link--favorite button.nav-fav-btn:hover,
html[data-sidebar-theme="light"] .nav-favorites-list .nav-link--favorite button[type=button].nav-fav-btn:hover{
  color:#b45309;
  background:rgba(15,23,42,.06);
}

/* ── Sidebar tema claro (P3) ───────────
   El html puede seguir en data-theme=dark (color-scheme dark, --text claro).
   Este subárbol es una isla clara: color-scheme light + tinta slate, no var(--text). */
html[data-sidebar-theme="light"]{
  --sidebar-bg:#f8fafc;--sidebar-bg-2:#f1f5f9;--sidebar-hover:rgba(15,23,42,.06);
  --sidebar-ink:#334155;--sidebar-ink-2:#475569;--sidebar-ink-strong:#0f172a;
}
html[data-sidebar-theme="light"] .sidebar,
html[data-sidebar-theme="light"] .topbar{
  color-scheme:light;color:var(--sidebar-ink);background:var(--sidebar-bg);
}
html[data-sidebar-theme="light"] .sidebar{border-right:1px solid rgba(15,23,42,.12)}
html[data-sidebar-theme="light"] .topbar{box-shadow:none;border-bottom-color:rgba(15,23,42,.1)}
html[data-sidebar-theme="light"] .topbar-brand,
html[data-sidebar-theme="light"] .topbar-user{color:var(--sidebar-ink-strong)}
html[data-sidebar-theme="light"] .topbar-logout,
html[data-sidebar-theme="light"] .topbar-help,
html[data-sidebar-theme="light"] .topbar-search,
html[data-sidebar-theme="light"] .topbar-theme,
html[data-sidebar-theme="light"] .topbar-menu-btn{
  color:var(--sidebar-ink-2);border-color:rgba(15,23,42,.14);background:rgba(15,23,42,.04)
}
html[data-sidebar-theme="light"] .topbar-logout:hover,
html[data-sidebar-theme="light"] .topbar-help:hover,
html[data-sidebar-theme="light"] .topbar-search:hover,
html[data-sidebar-theme="light"] .topbar-theme:hover{color:var(--sidebar-ink-strong);background:#fff;border-color:rgba(15,23,42,.2)}
html[data-sidebar-theme="light"] .sidebar::-webkit-scrollbar-thumb{background:rgba(15,23,42,.14)}
html[data-sidebar-theme="light"] .nav-card{background:rgba(15,23,42,.035);border:1px solid rgba(15,23,42,.14);box-shadow:none;--nav-label-color:#475569}
html[data-sidebar-theme="light"] .nav-quick{border-bottom-color:rgba(15,23,42,.12)}
html[data-sidebar-theme="light"] .nav-card--sales,html[data-sidebar-theme="light"] .nav-card--purchases,html[data-sidebar-theme="light"] .nav-card--warehouse,html[data-sidebar-theme="light"] .nav-card--magazines,html[data-sidebar-theme="light"] .nav-card--payments,html[data-sidebar-theme="light"] .nav-card--collections,html[data-sidebar-theme="light"] .nav-card--bank,html[data-sidebar-theme="light"] .nav-card--reports,html[data-sidebar-theme="light"] .nav-card--web,html[data-sidebar-theme="light"] .nav-card--config,html[data-sidebar-theme="light"] .nav-card--audit{--nav-accent:#2563eb;--nav-accent-soft:rgba(37,99,235,.12);--nav-accent-border:rgba(15,23,42,.14);--nav-label-color:#475569}
html[data-sidebar-theme="light"] .nav-label,
html[data-sidebar-theme="light"] .nav-card .nav-label,
html[data-sidebar-theme="light"] .nav-favorites-label,
html[data-sidebar-theme="light"] .nav-sublabel{color:#475569}
html[data-sidebar-theme="light"] .nav-label .nav-icon,
html[data-sidebar-theme="light"] .sidebar .nav-link .nav-icon{color:#475569;opacity:.85}
html[data-sidebar-theme="light"] .nav-card .nav-details-summary,
html[data-sidebar-theme="light"] .nav-details-summary{color:#475569}
html[data-sidebar-theme="light"] .nav-card .nav-details[open]>.nav-details-summary,
html[data-sidebar-theme="light"] .nav-details[open]>.nav-details-summary{color:var(--sidebar-ink)}
html[data-sidebar-theme="light"] .nav-card .nav-details-summary:hover,
html[data-sidebar-theme="light"] .nav-details-summary:hover{color:var(--sidebar-ink-strong);background:rgba(15,23,42,.04)}
html[data-sidebar-theme="light"] .sidebar a,
html[data-sidebar-theme="light"] .sidebar a.nav-link,
html[data-sidebar-theme="light"] .sidebar .nav-link,
html[data-sidebar-theme="light"] .sidebar .nav-link--core,
html[data-sidebar-theme="light"] .sidebar .nav-link--nested,
html[data-sidebar-theme="light"] .nav-group--secondary .nav-link{color:var(--sidebar-ink)}
html[data-sidebar-theme="light"] .sidebar a:hover,
html[data-sidebar-theme="light"] .sidebar a.nav-link:hover,
html[data-sidebar-theme="light"] .sidebar .nav-link:hover,
html[data-sidebar-theme="light"] .nav-link--core:hover,
html[data-sidebar-theme="light"] .nav-group--secondary .nav-link:hover{color:var(--sidebar-ink-strong);background:var(--sidebar-hover);border-color:transparent}
html[data-sidebar-theme="light"] .nav-card .nav-link.active,
html[data-sidebar-theme="light"] .nav-card a.nav-link.active{color:var(--sidebar-ink-strong);background:color-mix(in srgb,var(--nav-accent-soft) 72%,#fff);box-shadow:none}
html[data-sidebar-theme="light"] .nav-favorites{border-bottom-color:rgba(15,23,42,.14);background:transparent}
html[data-sidebar-theme="light"] .nav-context{border-color:color-mix(in srgb,var(--accent) 28%,var(--border));background:color-mix(in srgb,var(--accent) 8%,#fff)}
html[data-sidebar-theme="light"] .nav-context-label{color:var(--accent)}
html[data-sidebar-theme="light"] .nav-context-title{color:var(--sidebar-ink-strong)}
html[data-sidebar-theme="light"] .nav-context-meta{color:var(--sidebar-ink-2)}
html[data-sidebar-theme="light"] .nav-context .nav-link--return{border-top-color:rgba(15,23,42,.08)}
html[data-sidebar-theme="light"] .nav-favorites-label .nav-icon{color:#d97706;opacity:.85}
html[data-sidebar-theme="light"] button.nav-fav-btn,
html[data-sidebar-theme="light"] button[type=button].nav-fav-btn{color:rgba(15,23,42,.28)}
html[data-sidebar-theme="light"] button.nav-fav-btn:hover,
html[data-sidebar-theme="light"] button[type=button].nav-fav-btn:hover{background:rgba(15,23,42,.06);color:#b45309;box-shadow:none;transform:none}
html[data-sidebar-theme="light"] button.nav-fav-btn.is-fav,
html[data-sidebar-theme="light"] button[type=button].nav-fav-btn.is-fav{color:#d97706;opacity:.9;background:transparent}
html[data-sidebar-theme="light"] .sidebar .nav-badge{background:rgba(15,23,42,.08);color:#475569;border:0}
html[data-sidebar-theme="light"] .nav-link.active .nav-badge{background:rgba(37,99,235,.14);color:#1e40af;border:0}
html[data-sidebar-theme="light"] .sidebar-theme-toggle{border-top-color:rgba(15,23,42,.12)}
html[data-sidebar-theme="light"] .sidebar-theme-btn{color:var(--sidebar-ink-2);border-color:rgba(15,23,42,.14);background:#fff}
html[data-sidebar-theme="light"] .sidebar-theme-btn:hover{color:var(--sidebar-ink-strong);background:#fff;border-color:rgba(15,23,42,.2)}
.sidebar-theme-toggle{margin:.55rem .2rem 0;padding-top:.5rem;border-top:1px solid rgba(255,255,255,.08)}
.sidebar-theme-btn{width:100%;display:flex;align-items:center;gap:.45rem;padding:.46rem .55rem;border:1px solid rgba(255,255,255,.1);border-radius:9px;background:rgba(255,255,255,.04);color:rgba(255,255,255,.68);font-size:calc(var(--sidebar-link-size) - .04rem);font-weight:650;font-family:var(--font);cursor:pointer;transition:color .12s,background .12s,border-color .12s}
.sidebar-theme-btn:hover{color:#fff;background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.16)}
.sidebar-theme-btn svg{flex-shrink:0;opacity:.85}

/* ── Shell ────────────────────────────── */
.shell{margin-left:var(--sidebar-w);padding-top:var(--topbar-h);min-height:100vh}
main{max-width:1380px;margin:0 auto;padding:1.55rem 1.7rem 2.2rem;min-width:0;box-sizing:border-box}

/* ── Page header ─────────────────────── */
.page-hd{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:1rem;margin-bottom:1.25rem;padding:.15rem 0}
.page-hd h1{font-size:1.42rem;font-weight:820;line-height:1.15;margin:0;letter-spacing:-.035em}
.page-hd-sub{color:var(--muted);font-size:.86rem;margin-top:.25rem}
.page-hd--compact{align-items:center;gap:.65rem 1rem;margin-bottom:.75rem}
.page-hd--compact h1{font-size:1.22rem}
.page-hd-main{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem .85rem;min-width:0}
.page-hd-kpis{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.35rem;margin:0}
.page-hd-kpi{
  display:inline-flex;align-items:baseline;gap:.28rem;padding:.22rem .55rem;
  border:1px solid var(--border);border-radius:999px;background:var(--surface);
  color:var(--text-2);text-decoration:none;font-size:.78rem;line-height:1.2;
  box-shadow:var(--shadow-sm)
}
.page-hd-kpi strong{font-variant-numeric:tabular-nums;font-weight:800;color:var(--text);font-size:.9rem}
.page-hd-kpi span{color:var(--muted);font-weight:650;text-transform:uppercase;letter-spacing:.04em;font-size:.64rem}
.page-hd-kpi:hover{border-color:var(--primary);color:var(--text);text-decoration:none;background:var(--primary-soft)}
.page-hd-kpi.is-active{border-color:var(--primary);background:var(--primary-soft);box-shadow:inset 0 0 0 1px rgba(37,99,235,.18)}
.page-hd-kpi.is-active strong{color:var(--primary-dk)}
[data-theme="dark"] .page-hd-kpi{background:var(--surface-2)}
[data-theme="dark"] .page-hd-kpi.is-active{background:rgba(96,165,250,.12);box-shadow:inset 0 0 0 1px rgba(96,165,250,.22)}
[data-theme="dark"] .page-hd-kpi.is-active strong{color:var(--primary)}
.page-hd-kpi--alert strong{color:var(--danger)}
.page-hd-kpi--warn strong{color:var(--warn)}
.page-hd > .flex{flex-wrap:nowrap;align-items:flex-end;gap:.45rem;--field-control-height:2.15rem}
.page-hd > .flex > .btn{flex-shrink:0}
.page-hd > .flex > .form-inline-row{width:auto;flex:0 1 auto}
/* Misma altura que el botón de acción del form-inline-row (Crear / Filtrar…). */
.page-hd > .flex > .btn.sm,
.page-hd > .flex > a.btn.sm{
  height:var(--field-control-height);min-height:var(--field-control-height);max-height:var(--field-control-height);
  padding:0 .85rem;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;
}
/* Buscador en cabecera (list-hd-tools / entity-hero__tools): layout.
   La alineación input↔Buscar (padding-top:0) va DESPUÉS de .form-inline-row
   — misma especificidad haría que el hueco de etiqueta vuelva a ganar.
   flex-basis bajo + nowrap: con título+KPIs anchos (p.ej. Pfizer Ops) un
   basis 24–26rem empujaba Usuarios/⋯ a la fila de abajo (~40px de desfase). */
.list-hd-tools,
.entity-hero__tools{display:flex;flex-wrap:nowrap;align-items:center;justify-content:flex-end;gap:.4rem;--field-control-height:2.15rem;min-width:0}
.page-hd--compact > .list-hd-tools{flex:1 1 14rem;align-self:center;min-width:0}
.list-hd-tools > .form-inline-row,
.entity-hero__tools > .form-inline-row{width:auto;flex:1 1 10rem;margin:0;gap:.35rem;align-items:center;flex-wrap:nowrap;min-width:0}
.list-hd-tools > .btn,
.list-hd-tools > a.btn,
.list-hd-tools > details,
.entity-hero__tools > .btn,
.entity-hero__tools > a.btn,
.entity-hero__tools > details{flex-shrink:0}
.list-hd-tools .btn,
.list-hd-tools .field--action .btn.sm,
.list-hd-tools > .btn.sm,
.list-hd-tools > a.btn.sm,
.entity-hero__tools .btn,
.entity-hero__tools .field--action .btn.sm,
.entity-hero__tools > .btn.sm,
.entity-hero__tools > a.btn.sm{
  height:var(--field-control-height);min-height:var(--field-control-height);max-height:var(--field-control-height);
  padding:0 .85rem;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;flex-shrink:0;
}
.list-hd-tools .list-row-menu__summary,
.entity-hero__tools .list-row-menu__summary{min-height:var(--field-control-height);height:var(--field-control-height);box-sizing:border-box}
.list-hd-search,
.entity-hero__search{min-width:0}
.list-hd-search .field--grow,
.entity-hero__search .field--grow{flex:1 1 8rem;min-width:6rem;max-width:34rem}
@media(max-width:900px){
  .list-hd-tools,.entity-hero__tools{flex-wrap:wrap;justify-content:flex-start}
  .list-hd-tools > .form-inline-row,.entity-hero__tools > .form-inline-row{flex:1 1 100%}
}

/* ── Cards ────────────────────────────── */
.card{background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);padding:1.15rem;box-shadow:var(--shadow);backdrop-filter:saturate(1.1) blur(6px)}
.card+.card{margin-top:1rem}
.card h2:first-child,.card h3:first-child{margin-top:0}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin-bottom:1.15rem}

/* ── KPI cards ────────────────────────── */
.kpi{text-align:left;padding:1rem;position:relative;overflow:hidden;text-decoration:none;color:inherit}
.kpi::after{content:"";position:absolute;right:-32px;top:-36px;width:92px;height:92px;border-radius:50%;background:linear-gradient(135deg,rgba(37,99,235,.13),rgba(124,58,237,.08))}
.kpi:hover{text-decoration:none;transform:translateY(-1px);box-shadow:0 14px 32px rgba(15,23,42,.08),0 4px 10px rgba(15,23,42,.05)}
.kpi-val{font-size:1.72rem;font-weight:850;color:var(--primary);line-height:1.05;letter-spacing:-.04em}
.kpi-label{font-size:.7rem;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.065em;margin-top:.35rem}
.kpi-sub{font-size:.8rem;color:var(--muted);margin:.35rem 0 0}

/* ── Document detail (doc-*) ─────────────
   Read-only / view-heavy document & entity sheets.
   Reference: /admin/invoices/view
   Do NOT merge with sale-factura* (Access HTMX edit forms).
*/
.doc-hero{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:1rem;padding:1.1rem 1.25rem;background:linear-gradient(135deg,#1e293b 0%,#0f172a 60%,#172554 100%);border-radius:var(--radius);color:#f1f5f9;box-shadow:var(--shadow);margin-bottom:1rem}
.doc-hero__code{font-size:1.35rem;font-weight:850;letter-spacing:-.02em;margin:0;font-variant-numeric:tabular-nums}
.doc-hero__meta{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-top:.45rem;font-size:.8rem;color:#cbd5e1}
.doc-hero__meta a{color:#93c5fd;font-weight:700;text-decoration:none}
.doc-hero__meta a:hover{text-decoration:underline}
.doc-hero__amount{text-align:right;display:flex;flex-direction:column;align-items:flex-end}
.doc-hero__amounts{display:flex;gap:1.35rem;flex-wrap:wrap;align-items:flex-end;justify-content:flex-end}
.doc-hero__amounts .doc-hero__amount{min-width:8.5rem}
.doc-hero__amount-label{font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:#94a3b8;margin-bottom:.2rem}
.doc-hero__amount-value{font-size:1.7rem;font-weight:850;letter-spacing:-.03em;line-height:1.15;font-variant-numeric:tabular-nums;display:inline-flex;align-items:center;justify-content:flex-end;gap:.3rem;min-height:2rem}
.doc-hero__amount-value .money{flex:0 0 auto}
/* Recuento y recencia bajo el importe: evita repetirlos como KPI aparte */
.doc-hero__amount-note{margin-top:.15rem;font-size:.72rem;color:#94a3b8;white-space:nowrap}
.doc-hero__action{margin:0;display:flex;align-items:center;padding-bottom:.15rem}
.doc-hero__action .btn.ghost{color:#e2e8f0;border-color:rgba(148,163,184,.45);background:rgba(255,255,255,.08)}
.doc-hero__action .btn.ghost:hover{color:#fff;border-color:rgba(148,163,184,.7);background:rgba(255,255,255,.12)}
/* Editor saldo: cerrado = importe + lápiz; abierto = formulario debajo (no encajar en 1.1rem) */
.doc-hero__balance-editor{display:flex;flex-direction:column;align-items:flex-end;margin:0;min-width:0}
.doc-hero__balance-editor>summary.doc-hero__amount-value{list-style:none;cursor:pointer;user-select:none}
.doc-hero__balance-editor>summary::-webkit-details-marker{display:none}
.doc-hero__balance-edit-icon{display:inline-flex;align-items:center;justify-content:center;width:1.1rem;height:1.1rem;flex:0 0 1.1rem;opacity:.55;font-size:.8rem;line-height:1}
.doc-hero__balance-editor>summary:hover .doc-hero__balance-edit-icon,
.doc-hero__balance-editor[open]>summary .doc-hero__balance-edit-icon{opacity:1}
.doc-hero__balance-edit{display:flex;gap:.35rem;align-items:center;flex-wrap:nowrap;margin-top:.45rem;padding:.45rem .5rem;background:rgba(15,23,42,.55);border:1px solid rgba(148,163,184,.35);border-radius:var(--radius-sm)}
.doc-hero__balance-edit .field-control{width:7.5rem;text-align:right;font-variant-numeric:tabular-nums;background:#0f172a;color:#f1f5f9;border-color:#475569}
.doc-hero__balance-edit .btn.ghost{color:#e2e8f0;border-color:rgba(148,163,184,.45);background:rgba(255,255,255,.06)}
.doc-hero__balance-edit .btn.ghost:hover{color:#fff;border-color:rgba(148,163,184,.7)}
/* Hueco del lápiz en Σ movimientos → mismos bordes derechos de importes */
.doc-hero__amount-value-slot{display:inline-block;width:1.1rem;height:1.1rem;flex:0 0 1.1rem}
.doc-chip{display:inline-flex;align-items:center;gap:.3rem;padding:.22rem .65rem;border-radius:999px;font-size:.7rem;font-weight:800;letter-spacing:.02em}
.doc-chip--finalizada{background:rgba(34,197,94,.16);color:#86efac;border:1px solid rgba(34,197,94,.35)}
.doc-chip--borrador{background:rgba(96,165,250,.16);color:#93c5fd;border:1px solid rgba(96,165,250,.35)}
.doc-chip--bloqueada{background:rgba(250,204,21,.16);color:#fde047;border:1px solid rgba(250,204,21,.35)}
.doc-chip--anulada{background:rgba(248,113,113,.16);color:#fca5a5;border:1px solid rgba(248,113,113,.4)}
.doc-chip--pago{background:rgba(148,163,184,.14);color:#e2e8f0;border:1px solid rgba(148,163,184,.3)}
/* Pestañas de sección de una entidad: navegación entre pantallas de la misma
   ficha (cliente ERP / ficha CGM / extracto). Cada pestaña es una URL con su
   propio formulario y su propio Guardar; la barra solo dice dónde estás.
   Cabecera + pestañas tienen altura fija (ellipsis) para que al navegar no salten.
   No confundir con .sale-factura__tab, que son secciones de un mismo POST. */
.entity-section{margin:0 0 .85rem}
.entity-section__title{margin:0;min-height:1.6rem;font-size:1.28rem;font-weight:750;line-height:1.25;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.entity-section__sub{margin:.12rem 0 .5rem;min-height:1.1rem;font-size:.78rem;line-height:1.35;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.entity-section__extras{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.45rem 1rem;margin:0 0 1rem}
.entity-tabs{display:flex;flex-wrap:wrap;gap:.15rem;align-items:flex-end;margin:0;border-bottom:1px solid var(--border)}
.entity-tabs__tab{display:inline-flex;align-items:center;gap:.35rem;padding:.42rem .8rem;font-size:.78rem;font-weight:700;color:var(--muted);text-decoration:none;border:1px solid transparent;border-bottom:2px solid transparent;border-radius:8px 8px 0 0;white-space:nowrap}
.entity-tabs__tab:hover{color:var(--text);background:var(--surface-2);text-decoration:none}
.entity-tabs__tab[aria-current=page]{color:var(--primary-dk);background:var(--surface);border-color:var(--border);border-bottom-color:var(--primary);cursor:default}
.entity-tabs__hint{margin-left:auto;align-self:center;padding:0 .3rem .35rem;font-size:.7rem;color:var(--muted)}
@media(max-width:640px){.entity-tabs__hint{display:none}}
.doc-toolbar{display:flex;flex-wrap:wrap;gap:.55rem;align-items:flex-start;margin-bottom:1rem}
.doc-toolbar__group{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center;padding:.35rem .45rem;background:rgba(255,255,255,.86);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);min-width:0;max-width:100%}
.doc-toolbar__group form{display:inline;margin:0}
.doc-toolbar__label{font-size:.64rem;font-weight:850;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);padding:0 .3rem}
.doc-toolbar button[disabled]{background:#94a3b8!important;color:#e2e8f0;cursor:not-allowed;opacity:.95}
.doc-toolbar__group .muted{flex:1 1 10rem;min-width:0}
.doc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:1rem;margin-bottom:1.25rem;min-width:0;width:100%}
.doc-card{position:relative;padding:1rem 1.15rem 1.05rem;min-width:0;overflow:hidden}
.doc-card__title{display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem;font-size:.72rem;font-weight:850;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.doc-card__title::before{content:"";width:.55rem;height:.55rem;border-radius:2px;background:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.14)}
.doc-card--customer .doc-card__title::before{background:#0891b2;box-shadow:0 0 0 3px rgba(8,145,178,.14)}
.doc-card--links .doc-card__title::before{background:#7c3aed;box-shadow:0 0 0 3px rgba(124,58,237,.14)}
.doc-card--totals .doc-card__title::before{background:#16a34a;box-shadow:0 0 0 3px rgba(22,163,74,.14)}
.doc-kv{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.32rem .9rem;margin:0;font-size:.84rem}
.doc-kv dt{margin:0;font-size:.72rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;align-self:center;white-space:nowrap}
.doc-kv dd{margin:0;font-weight:600;color:var(--text);min-width:0;overflow-wrap:break-word}
.doc-kv dd .muted{font-weight:500}
/* Refs técnicas (sales_group:…, magazine_renewal:…): una línea; scroll si el card es estrecho */
.doc-kv dd .doc-ref,.doc-kv dd.doc-ref{
  display:inline-block;max-width:100%;
  white-space:nowrap;overflow-x:auto;vertical-align:bottom;
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:.8rem;font-weight:650;font-variant-numeric:tabular-nums;
  letter-spacing:0;line-height:1.35;
  padding:.05rem .35rem;border-radius:var(--radius-sm);
  background:var(--badge-info-bg);color:var(--info);border:1px solid var(--badge-info-border)
}
.doc-badge--origin{
  display:inline-block;max-width:100%;padding:.12rem .5rem;
  background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);
  font-size:.78rem;font-weight:700;color:var(--text);letter-spacing:-.01em;
  white-space:normal;overflow-wrap:anywhere;word-break:break-word
}
.doc-kv__chips{
  display:flex;flex-wrap:wrap;gap:.28rem .35rem;align-items:center;
  max-width:100%;max-height:11rem;overflow:auto
}
.doc-kv__chips a{
  display:inline-block;max-width:100%;padding:.08rem .45rem;
  border:1px solid var(--border);border-radius:999px;background:var(--surface-2);
  font-size:.78rem;font-weight:700;white-space:nowrap
}
.doc-trace-group{
  display:flex;flex-direction:column;gap:.25rem;margin:.1rem 0;
  max-width:100%;max-height:11rem;overflow:auto
}
.doc-trace-item{
  font-size:.82rem;line-height:1.4;overflow-wrap:anywhere;word-break:break-word
}
.doc-trace-item a{
  font-weight:700;color:var(--primary);text-decoration:none
}
.doc-trace-item a:hover{
  text-decoration:underline
}
.doc-trace-item strong{
  font-weight:750;color:var(--text)
}
.doc-kv--relaxed{gap:.42rem .9rem}
.doc-total-row{display:flex;justify-content:space-between;align-items:baseline;padding:.3rem 0;font-size:.84rem;border-bottom:1px dashed #e2e8f0}
.doc-total-row span{color:var(--muted);font-weight:600}
.doc-total-row strong{font-variant-numeric:tabular-nums;font-weight:700}
.doc-total-row--grand{border-bottom:0;margin-top:.35rem;padding:.55rem .7rem;background:linear-gradient(135deg,#f0fdf4,#ecfdf5);border:1px solid #bbf7d0;border-radius:var(--radius-sm)}
.doc-total-row--grand span{color:#15803d;font-weight:800;text-transform:uppercase;font-size:.72rem;letter-spacing:.06em}
.doc-total-row--grand strong{font-size:1.25rem;font-weight:850;color:#14532d;letter-spacing:-.02em}
.doc-remarks{margin:.85rem 0 0;padding:.7rem .9rem;background:#fffbeb;border:1px solid #fde68a;border-radius:var(--radius-sm);font-size:.84rem;color:#78350f}
.doc-tech{margin-top:.75rem;border-top:1px dashed var(--border);padding-top:.55rem}
.doc-tech>summary{cursor:pointer;font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);list-style:none}
.doc-tech>summary::-webkit-details-marker{display:none}
.doc-tech>summary::before{content:"▸ ";color:var(--muted-2)}
.doc-tech[open]>summary::before{content:"▾ "}
.doc-tech .doc-kv{margin-top:.55rem}
.doc-empty{margin:0;font-size:.82rem;color:var(--muted)}
.doc-lines-hd{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.5rem;margin:1rem 0 .6rem}
.doc-lines-hd h2{margin:0;font-size:1.02rem;font-weight:820;letter-spacing:-.02em}
.doc-lines-hd .muted{font-size:.8rem}
.doc-lines td.num,.doc-lines th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.doc-lines tfoot td{padding:.65rem .8rem;font-weight:800;background:linear-gradient(180deg,#f8fafc,#f1f5f9);border-top:2px solid var(--border);font-variant-numeric:tabular-nums}
.doc-lines tfoot td.lbl{text-align:right}
.doc-lines tfoot .grand{color:#14532d;font-size:.95rem}
.doc-back{margin-top:.85rem}
.doc-back a{font-size:.84rem;font-weight:600}
.doc-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.65rem;margin-bottom:1.25rem}
.doc-stat{padding:.75rem .9rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);min-width:0}
.doc-stat strong{display:block;font-size:1.15rem;font-weight:850;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.15;overflow-wrap:anywhere}
.doc-stat span{display:block;margin-top:.25rem;font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.doc-stats--compact{gap:.45rem;margin-bottom:.75rem}
.doc-stats--compact .doc-stat{padding:.5rem .7rem}
.doc-stats--compact .doc-stat strong{font-size:1rem}
a.doc-stat{color:inherit;text-decoration:none}
a.doc-stat:hover{border-color:var(--primary);text-decoration:none}
a.doc-stat:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.doc-stat--ok{border-color:var(--badge-ok-border)}
.doc-stat--warn{border-color:var(--badge-warn-border)}
.doc-stat--danger{border-color:var(--badge-danger-border)}
.customer-360{margin:0 0 1rem;min-width:0}
.customer-360>.muted{margin:0 0 .75rem;font-size:.8rem}
.customer-360__aging{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.4rem;margin:0 0 .75rem}
.customer-360__aging-bucket{padding:.45rem .55rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);display:flex;flex-direction:column;gap:.15rem;min-width:0}
.customer-360__aging-bucket strong{font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.customer-360__aging-bucket span{font-size:.84rem;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.customer-360__aging-bucket.tone-warn{border-color:var(--badge-warn-border)}
.customer-360__aging-bucket.tone-danger{border-color:var(--badge-danger-border)}
.customer-360__actions{margin:0 0 .85rem}
.customer-360__cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.85rem;min-width:0}
.customer-360__cols>div{min-width:0}
.customer-360__cols .doc-lines-hd{margin:.15rem 0 .4rem}
.customer-360__cols .tbl-wrap{margin:0;max-width:100%}
.customer-360__more{margin:.35rem 0 0;font-size:.78rem}
.customer-360__events{margin-top:.85rem}
.customer-360__events h3{margin:0 0 .35rem;font-size:.82rem;color:var(--muted)}
.customer-360__events ul{margin:0;padding-left:1.1rem;font-size:.8rem}
@media(max-width:960px){.customer-360__cols,.customer-360__aging{grid-template-columns:1fr 1fr}}
@media(max-width:640px){.customer-360__cols,.customer-360__aging{grid-template-columns:1fr}}
/* Facturar albaranes agrupados: presets de periodo en fila propia bajo el
   formulario (mismo patrón que ax-saved-views). Sin esto, flex:1 0 100% no
   bastaba y los chips «Mes actual / …» se aplastaban al borde derecho. */
.filter-bar:has(>.group-sales-presets){
  flex-direction:column;align-items:stretch;gap:.55rem
}
.filter-bar:has(>.group-sales-presets)>.form-inline-row{width:100%;margin:0}
.group-sales-presets{
  display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;
  width:100%;min-width:0;margin:0;padding:0;box-sizing:border-box
}
.group-sales-presets .page-hd-kpis{flex-wrap:wrap;min-width:0;max-width:100%}
.group-sales-presets .page-hd-kpi{flex:0 1 auto;max-width:100%}
.group-sales-kpis{flex-wrap:wrap;min-width:0;max-width:100%}
.group-sales-kpis .page-hd-kpi:hover{border-color:var(--border);background:var(--surface);color:var(--text-2)}
[data-theme="dark"] .group-sales-kpis .page-hd-kpi:hover{background:var(--surface-2)}
.page-hd-main:has(.group-sales-kpis){align-items:flex-start}
.page-hd-main:has(.group-sales-kpis)>.page-hd-sub{flex:1 0 100%;margin-top:.15rem}
.group-sales-bar{
  display:flex;flex-direction:column;gap:.5rem;margin:0 0 .55rem;padding:.65rem .75rem;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);min-width:0
}
.group-sales-bar__head{display:flex;justify-content:space-between;align-items:center;gap:.75rem;flex-wrap:wrap}
.group-sales-bar__summary{margin:0;font-size:.82rem;font-weight:650;color:var(--text-2);min-width:0}
.group-sales-bar__actions{display:flex;gap:.45rem;align-items:center;flex-wrap:wrap}
.group-sales-bar .field{margin-bottom:0;display:flex;flex-direction:column;gap:.2rem;min-width:0}
.group-sales-bar .field>label{font-size:.74rem;font-weight:650;color:var(--muted)}
.group-sales-bar textarea.field-control{min-height:3.1rem;resize:vertical}
.group-sales-bar__hint{margin:0;font-size:.76rem}
.group-sales-pick-col{width:1%;white-space:nowrap;text-align:center;vertical-align:middle}
.group-sales-pick-col input[type="checkbox"]{
  width:1.1rem;height:1.1rem;margin:0;accent-color:var(--primary);cursor:pointer;vertical-align:middle;
  -webkit-appearance:none;appearance:none;
  border:1.5px solid color-mix(in srgb,var(--text) 45%,var(--border));
  border-radius:.22rem;background:var(--surface);box-sizing:border-box
}
.group-sales-pick-col input[type="checkbox"]:checked{
  background:var(--primary);border-color:var(--primary);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round' d='M3.5 8.2l2.8 2.8 6.2-6.2'/%3E%3C/svg%3E");
  background-size:78% 78%;background-position:center;background-repeat:no-repeat
}
/* Deshabilitado: relleno gris oscuro sólido (no solo opacidad). */
.group-sales-pick-col input[type="checkbox"]:disabled,
#group-sales-pick-all:disabled{
  cursor:not-allowed;
  background:#3f4654;
  border-color:#2a303b;
  background-image:none;
  opacity:1;filter:none
}
[data-theme="light"] .group-sales-pick-col input[type="checkbox"]:disabled,
[data-theme="light"] #group-sales-pick-all:disabled{
  background:#9aa3b2;border-color:#6b7280
}
.group-sales-row--blocked td{opacity:.78}
.group-sales-row--blocked .group-sales-pick-col{opacity:1}
/* Fuera del grupo en curso (otro cliente, pago o fiscalidad). */
.group-sales-row--mismatch td{opacity:.55}
.group-sales-row--mismatch .group-sales-pick-col{opacity:1}
/* Los chips informativos no fingen ser pulsables; el de «ocultos» sí lo es. */
.group-sales-kpis a.page-hd-kpi:hover{border-color:var(--primary);background:var(--primary-soft);color:var(--text)}
.doc-card#web-account{margin-bottom:1.25rem}
.doc-card#web-account .doc-kv{max-width:36rem}
.doc-card#web-account .doc-web-actions{display:flex;flex-direction:column;gap:.65rem;margin-top:.85rem;padding-top:.75rem;border-top:1px dashed var(--border)}
.form-inline-row--actions-only{align-items:center}
.form-inline-row--actions-only .field--action{padding-top:0}
.form-inline-row .field--hint{flex:1 1 14rem;min-width:12rem;max-width:28rem;padding-top:var(--field-label-row);box-sizing:border-box;justify-content:center}
.form-inline-row .field--hint .hint{margin:0;min-height:var(--field-control-height);display:flex;align-items:center;font-size:.74rem;line-height:1.3;color:var(--muted);font-weight:500}
/* Chips/toolbar sobre formularios Access (fondo claro) */
.sale-factura .doc-toolbar{margin:.45rem 0 .55rem}
.sale-factura .doc-chip-row{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center;margin:.35rem 0 .15rem}
.sale-factura .doc-chip--finalizada{background:#dcfce7;color:#166534;border-color:#86efac}
.sale-factura .doc-chip--borrador{background:#dbeafe;color:#1d4ed8;border-color:#93c5fd}
.sale-factura .doc-chip--bloqueada{background:#fef9c3;color:#a16207;border-color:#fde047}
.sale-factura .doc-chip--anulada{background:#fee2e2;color:#b91c1c;border-color:#fca5a5}
.sale-factura .doc-chip--pago{background:#f1f5f9;color:#334155;border-color:#cbd5e1}
@media(max-width:900px){
  .doc-hero{flex-direction:column;align-items:stretch}
  .doc-hero__amount{text-align:left}
  .doc-hero__amounts{justify-content:flex-start}
  .doc-toolbar__group{width:100%}
}

/* ── Typography ───────────────────────── */
h1{font-size:1.32rem;font-weight:800;margin-bottom:.8rem;line-height:1.2;letter-spacing:-.025em}
h2{font-size:1.03rem;font-weight:760;margin-bottom:.55rem;line-height:1.3;letter-spacing:-.015em}
h3{font-size:.9rem;font-weight:760;margin-bottom:.4rem}
p{margin-bottom:.45rem}

/* ── Tables ───────────────────────────── */
/* Sticky thead solo funciona respecto al scrollport del ancestro. Si el scroll
   es el de la página y .tbl-wrap tiene overflow, la cabecera se va con la tabla.
   Listados densos usan .list-scroll-page (abajo): el scroll vive en .tbl-wrap.
   border-collapse:separate es obligatorio para sticky en thead (Chrome/Firefox). */
.tbl-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:auto;box-shadow:var(--shadow)}
table{width:100%;border-collapse:separate;border-spacing:0}
/* Nueva suscripción CGM — evitar desborde de lista de packs / referencia / notas */
.magazine-sub-new{max-width:100%;min-width:0}
.magazine-sub-new .field{max-width:100%;min-width:0}
.magazine-sub-new__wide{width:100%;max-width:100%;min-width:0}
.magazine-sub-new__wide>input,
.magazine-sub-new__wide>textarea{display:block;width:100%;max-width:100%;min-width:0;box-sizing:border-box}
.magazine-pack-pick{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:.2rem .75rem;
  max-width:100%;
  min-width:0;
  max-height:16rem;
  overflow:auto;
  padding:.4rem .5rem .5rem;
  background:var(--surface);
  border:1px solid var(--border);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
}
.magazine-pack-pick__item{
  display:grid;
  grid-template-columns:minmax(0,1fr) 6.6rem 6.6rem;
  gap:.35rem;
  align-items:center;
  min-width:0;
  margin:0;
  padding:.28rem .4rem;
  border-radius:var(--radius-sm);
  cursor:pointer;
  font-weight:400;
}
.magazine-pack-pick__item:hover{background:rgba(37,99,235,.05)}
.magazine-pack-pick__item.is-selected,
.magazine-pack-pick__item:has(input:checked){background:#f0f9ff}
.magazine-pack-pick__col-pack{display:flex;align-items:baseline;gap:.4rem;min-width:0}
.magazine-pack-pick__radio{flex:0 0 auto;width:auto;margin:.12rem 0 0;align-self:flex-start}
.magazine-pack-pick__main{
  flex:1 1 auto;
  min-width:0;
  font-weight:600;
  font-size:.82rem;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.magazine-pack-pick__col-ini,
.magazine-pack-pick__col-fin{
  font-variant-numeric:tabular-nums;
  font-size:.74rem;
  white-space:nowrap;
  text-align:right;
}
@media(max-width:900px){
  .magazine-pack-pick{grid-template-columns:1fr}
  .magazine-pack-pick__item{grid-template-columns:minmax(0,1fr) 6.1rem 6.1rem}
}
thead th{position:sticky;top:0;z-index:4;background:linear-gradient(180deg,var(--surface),var(--surface-2));padding:.62rem .8rem;font-size:.69rem;font-weight:850;color:var(--text);text-transform:uppercase;letter-spacing:.055em;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap;box-shadow:0 1px 0 var(--border)}
tbody td{padding:.68rem .8rem;border-bottom:1px solid var(--border);font-size:.84rem;vertical-align:top}
tbody tr:last-child td{border-bottom:none}
tbody tr:hover td{background:var(--surface-2)}
th.num,td.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
/* Listados compactos: una fila por registro, celdas en una sola línea y
   acciones alineadas al final (estilo app premium). */
.tbl-tight td{vertical-align:middle}
.nowrap{white-space:nowrap}
.tbl-compact thead th{padding:.45rem .5rem;letter-spacing:.03em}
.tbl-compact tbody td{padding:.42rem .5rem;font-size:.8rem}
/* flex solo en contenedor interno (div), nunca en el <td>: display:flex en td
   rompe table-cell y las fechas se pintan encima de la fila anterior. */
.cell-stack{display:flex;flex-direction:column;gap:.2rem;line-height:1.3;white-space:nowrap;font-variant-numeric:tabular-nums}
td.cell-stack{display:table-cell}
td.cell-stack>span,td.cell-stack>strong{display:block;line-height:1.3}
td.cell-stack>*+*{margin-top:.2rem}
.cell-stack>span,.cell-stack>strong{line-height:1.3}
.cell-stack .muted{font-size:.72rem;line-height:1.3}
.cell-stack--dt{min-width:5.75rem}
.cell-clip{max-width:11rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Pedidos Pfizer: caber en el viewport sin scroll horizontal (textos CDC/código largos). */
.pfizer-ops-list{table-layout:fixed;width:100%}
.pfizer-ops-list th,.pfizer-ops-list td{overflow:hidden;vertical-align:middle}
.pfizer-ops-list th:nth-child(1),.pfizer-ops-list td:nth-child(1){width:3.4rem}
.pfizer-ops-list th:nth-child(2),.pfizer-ops-list td:nth-child(2){width:7.1rem}
.pfizer-ops-list th:nth-child(3),.pfizer-ops-list td:nth-child(3){width:auto}
.pfizer-ops-list th:nth-child(4),.pfizer-ops-list td:nth-child(4){width:6.6rem}
.pfizer-ops-list th:nth-child(5),.pfizer-ops-list td:nth-child(5){width:7.5rem}
.pfizer-ops-list th:nth-child(6),.pfizer-ops-list td:nth-child(6){width:5.4rem}
.pfizer-ops-list th:nth-child(7),.pfizer-ops-list td:nth-child(7){width:6.8rem}
.pfizer-ops-list__product{min-width:0;max-width:100%;white-space:normal}
.pfizer-ops-list__product>a,
.pfizer-ops-list__product>span{
  display:block;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap
}
.pfizer-ops-list__clip,
.pfizer-ops-list__ariba{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pfizer-ops-list__ariba code{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Tamaño de badge en tabla densa: lo fija `.tbl-compact .badge` (escala única) */
.pfizer-ops-list__status{white-space:nowrap;vertical-align:middle}
.pfizer-ops-list__status .badge{margin-right:.3rem;vertical-align:middle}
.pfizer-ops-list__status .muted{font-size:.68rem;vertical-align:middle}
.pfizer-ops-view__cover{display:block;max-width:90px;margin:0 0 .75rem;border:1px solid var(--border);border-radius:var(--radius-sm)}
.pfizer-ops-part{margin-top:.85rem}
.pfizer-ops-part .doc-card__title{margin:0 0 .25rem}
.pfizer-ops-part__link{margin:.65rem 0}
td.list-actions,th.list-actions{text-align:right;width:1%;white-space:nowrap;position:sticky;right:0;z-index:2;background:var(--surface);box-shadow:-6px 0 10px -8px rgba(15,23,42,.22)}
th.list-actions{z-index:5;top:0;background:linear-gradient(180deg,var(--surface),var(--surface-2))}
tbody tr:hover td.list-actions{background:var(--surface-2)}
.list-actions .actions{display:inline-flex;gap:.3rem;align-items:center;justify-content:flex-end;flex-wrap:nowrap;margin-top:0}
/* Encargos: Acciones sticky tapa «Cerrado»; desactivar sticky en esta tabla. */
.reservations-list th.list-actions,
.reservations-list td.list-actions{
  position:static !important;
  right:auto !important;
  z-index:auto !important;
  box-shadow:none !important;
  background:var(--surface);
}
.reservations-list thead th.list-actions{background:linear-gradient(180deg,var(--surface),var(--surface-2))}
.reservations-list tbody tr:hover td.list-actions{background:var(--surface-2)}
/* Listado a altura de viewport: título/filtros fijos, scroll solo en la tabla
   → thead sticky (top:0) no se pierde. Usar en Encargos y listados densos. */
.shell:has(.list-scroll-page){height:100dvh;overflow:hidden;box-sizing:border-box}
.shell:has(.list-scroll-page)>main{
  height:100%;max-height:100%;overflow:hidden;display:flex;flex-direction:column;
  padding-top:1rem;padding-bottom:.75rem;box-sizing:border-box
}
.list-scroll-page{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
.list-scroll-page>.page-hd,
.list-scroll-page>.entity-hero,
.list-scroll-page>.entity-section,
.list-scroll-page>.doc-toolbar,
.list-scroll-page>.doc-hero,
.list-scroll-page>.doc-remarks,
.list-scroll-page>.card,
.list-scroll-page>.form-inline-row,
.list-scroll-page>.ledger-view-erp{flex:0 0 auto;margin-bottom:.55rem}
.list-scroll-page>.web-pub-flow{flex:0 0 auto;margin-bottom:.55rem}
.list-scroll-page>.filter-bar{flex:0 0 auto;margin-bottom:.55rem;padding:.65rem .75rem}
.list-scroll-page>#books_catalog_badges,
.list-scroll-page>.books-catalog-badges{flex:0 0 auto;margin-bottom:.45rem}
.list-scroll-page__catalog>.books-catalog-type-bar,
.list-scroll-page__catalog>.warning{flex:0 0 auto}
.list-scroll-page>.ax-flash,.list-scroll-page>.ok,.list-scroll-page>.error,
.list-scroll-page>.alert{flex:0 0 auto}
.list-scroll-page__catalog{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden;gap:.65rem}
/* Extracto CGM: cabecera + filtros densos para dejar altura a la tabla. */
.list-scroll-page--dense>.entity-section,
.list-scroll-page--dense>.doc-toolbar,
.list-scroll-page--dense>.doc-hero,
.list-scroll-page--dense>.doc-remarks,
.list-scroll-page--dense>.card,
.list-scroll-page--dense>.form-inline-row,
.list-scroll-page--dense>.filter-bar,
.list-scroll-page--dense>.ledger-view-erp{margin-bottom:.28rem}
.list-scroll-page--dense>.entity-section{margin-bottom:.2rem}
.list-scroll-page--dense .entity-section__title{font-size:1.05rem;min-height:0}
.list-scroll-page--dense .entity-section__sub{margin:.02rem 0 .2rem;font-size:.72rem;min-height:0}
.list-scroll-page--dense .doc-toolbar{gap:.3rem;margin-bottom:.28rem}
.list-scroll-page--dense .doc-toolbar__group{padding:.12rem .28rem}
.list-scroll-page--dense .doc-toolbar__label{display:none}
.list-scroll-page--dense .doc-hero{padding:.45rem .7rem;gap:.55rem;align-items:center;margin-bottom:.28rem}
.list-scroll-page--dense .doc-hero__meta{margin-top:0}
.list-scroll-page--dense .doc-hero__amounts{gap:.7rem;align-items:flex-end}
.list-scroll-page--dense .doc-hero__amount-value{font-size:1.15rem;min-height:0}
.list-scroll-page--dense .doc-hero__action{margin:0;padding-bottom:0}
.list-scroll-page--dense .doc-remarks{margin:0 0 .28rem;padding:.28rem .55rem;font-size:.74rem}
.list-scroll-page--dense>.filter-bar{padding:.4rem .55rem;margin-bottom:.28rem}
.list-scroll-page--dense .filter-bar:has(>.ax-saved-views){gap:.25rem}
.list-scroll-page--dense .ax-saved-views{padding:.28rem 0 0}
.list-scroll-page--dense .list-scroll-page__catalog{gap:.3rem}
.ledger-view-erp{padding:.15rem .5rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}
.ledger-view-erp>summary{cursor:pointer;font-size:.78rem;font-weight:750;line-height:1.8;list-style:none}
.ledger-view-erp>summary::-webkit-details-marker{display:none}
.ledger-view-erp[open]>summary{margin-bottom:.3rem}
.ledger-view-erp .hint,.ledger-view-erp .ok{margin:0 0 .35rem;font-size:.72rem}
.list-scroll-page>.list-pager-row,
.list-scroll-page__catalog>.list-pager-row,
.list-scroll-page__catalog>.flex,
.list-scroll-page__catalog>.filter-bar,
.list-scroll-page__catalog>.page-hd,
.list-scroll-page__catalog>.page-hd-kpis{flex:0 0 auto;margin-bottom:.35rem}
.list-scroll-page>.error,
.list-scroll-page__catalog>.error{flex:0 0 auto}
.list-scroll-page>.warning,
.list-scroll-page>.po-sent-filter,
.list-scroll-page>.invoice-doc-panel,
.list-scroll-page>#stock_metrics_badges,
.list-scroll-page>.grid{flex:0 0 auto;margin-bottom:.55rem}
/* Aging de cartera: chips en page-hd (no grid card kpi) */
.page-hd-main .pf-aging-kpis{
  padding-left:.55rem;margin-left:.1rem;
  border-left:1px solid var(--border)
}
/* Contenedores intermedios (form bulk Clientes, .stack antiguo Stock): si no
   participan en el flex, overflow:hidden del shell deja la página sin scroll. */
.list-scroll-page__catalog>form,
.list-scroll-page__catalog>.stack{
  flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden;gap:.65rem
}
.list-scroll-page__catalog>form>:not(.tbl-wrap),
.list-scroll-page__catalog>.stack>:not(.tbl-wrap){flex:0 0 auto}
.list-section-label{
  margin:0;padding:0;
  font-size:.78rem;font-weight:700;letter-spacing:.02em;
  text-transform:uppercase;color:var(--muted)
}
.list-scroll-page>.list-section-label{flex:0 0 auto;margin:.15rem 0 .4rem}
.list-scroll-page>.grid{flex:0 0 auto}
.automation-health-alerts{margin:.35rem 0 0;padding-left:1.15rem}
.automation-health-alerts li+li{margin-top:.2rem}
.list-scroll-page>.tbl-wrap,
.list-scroll-page__catalog>.tbl-wrap,
.list-scroll-page__catalog>form>.tbl-wrap,
.list-scroll-page__catalog>.stack>.tbl-wrap{
  flex:1 1 auto;min-height:12rem;max-height:none;overflow:auto
}
/* Segunda tabla (p. ej. movimientos de stock): panel inferior compacto */
.list-scroll-page>.tbl-wrap~.tbl-wrap,
.list-scroll-page__catalog>.tbl-wrap~.tbl-wrap,
.list-scroll-page__catalog>.stack>.tbl-wrap~.tbl-wrap{
  flex:0 1 auto;min-height:8rem;max-height:36vh
}
.list-actions form{display:inline-flex;margin:0;align-items:center}
.list-actions .actions > .btn.sm,
.list-actions .actions > form > .btn.sm{white-space:nowrap;flex-shrink:0}
/* Cuadre saldos: Extracto / Cuadrar misma anchura y altura, alineados a la fila */
.balance-audit-table .list-actions .actions > .btn.sm,
.balance-audit-table .list-actions .actions > form > .btn.sm{
  min-width:5.75rem;
  height:1.85rem;
  min-height:1.85rem;
  padding:0 .65rem;
  box-sizing:border-box;
  white-space:nowrap;
  line-height:1.25;
  flex-shrink:0;
}
.balance-audit-table td.cell-clip{max-width:18rem}
.balance-audit-table td.list-actions{vertical-align:middle}

/* ── Buttons ──────────────────────────── */
button{-webkit-appearance:none;appearance:none}
/* Primarios solo con .btn / a.btn / submit genéricos.
   No pintar button[type=button]: chips, tabs, pickers, toolbar, palette,
   topbar, etc. tienen estilo propio. Submit con menú de fila, logout o
   danger tampoco entra aquí. */
.btn,button[type=submit]:not(.list-row-menu__item):not(.topbar-logout):not(.danger),a.btn{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;padding:.45rem .9rem;border:0;border-radius:999px;background:linear-gradient(135deg,var(--btn-primary),var(--btn-primary-dk));color:var(--on-primary);font-size:.8rem;font-weight:760;cursor:pointer;text-decoration:none;white-space:nowrap;transition:background .12s,transform .12s,box-shadow .12s;line-height:1.4;font-family:var(--font);box-shadow:0 6px 14px rgba(37,99,235,.16);-webkit-appearance:none;appearance:none}
.btn:hover,button[type=submit]:not(.list-row-menu__item):not(.topbar-logout):not(.danger):hover,a.btn:hover{background:linear-gradient(135deg,#3b82f6,var(--btn-primary-dk));text-decoration:none;color:var(--on-primary);transform:translateY(-1px);box-shadow:0 9px 18px rgba(37,99,235,.2)}
.btn.secondary,a.btn.secondary{background:#475569;box-shadow:0 5px 12px rgba(71,85,105,.14)}.btn.secondary:hover,a.btn.secondary:hover{background:#334155}
.btn.success{background:var(--success);box-shadow:0 5px 12px rgba(22,163,74,.15)}.btn.success:hover{background:#14532d}
.btn.warn{background:var(--warning);box-shadow:0 5px 12px rgba(217,119,6,.15)}.btn.warn:hover{background:#78350f}
.btn.danger{background:var(--danger);box-shadow:0 5px 12px rgba(220,38,38,.15)}.btn.danger:hover{background:#b91c1c}
.btn.accent,a.btn.accent{background:linear-gradient(135deg,var(--accent),#6d28d9);box-shadow:0 5px 12px rgba(124,58,237,.18)}.btn.accent:hover,a.btn.accent:hover{background:linear-gradient(135deg,#8b5cf6,#6d28d9)}
.btn.ghost{background:rgba(255,255,255,.72);border:1px solid var(--border);color:var(--text);box-shadow:none}.btn.ghost:hover{background:#fff;color:var(--primary);box-shadow:var(--shadow-sm)}
.btn.sm{padding:.3rem .65rem;font-size:.74rem;border-radius:999px;white-space:nowrap;text-align:center}
.btn.lg{padding:.62rem 1.15rem;font-size:.88rem}
/* ✕ de líneas Access/POS y remove-btn: rojo sin depender de .btn */
button.danger,button[type=submit].danger,button[type=button].danger,
button.remove-btn{background:var(--danger);color:#fff;border:0;border-radius:4px;padding:.2rem .55rem;font-size:.78rem;font-weight:700;cursor:pointer;box-shadow:none;transform:none;font-family:var(--font);line-height:1.25;-webkit-appearance:none;appearance:none}
button.danger:hover,button[type=submit].danger:hover,button[type=button].danger:hover,
button.remove-btn:hover{background:#b91c1c;color:#fff;transform:none;box-shadow:none}

/* ── Forms ────────────────────────────── */
label{font-size:.76rem;font-weight:780;color:var(--text-2);margin-bottom:.28rem;display:block}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],input[type=search],select,textarea{width:100%;padding:.54rem .72rem;border:1px solid var(--field-border);border-radius:var(--radius-sm);font-size:.84rem;color:var(--text);background:linear-gradient(180deg,var(--field-bg),var(--field-bg-soft));transition:border-color .12s,box-shadow .12s,background .12s;font-family:var(--font)}
/* Placeholder ≥ AA sobre --field-bg (el gris nativo del motor falla en dark) */
input::placeholder,textarea::placeholder{color:var(--text-3);opacity:1}
/* Popup nativo del <select>: en dark mode el motor suele pintar fondo claro pero hereda
   color:var(--text) claro → opciones ilegibles (solo se ve la seleccionada). Tinta fija. */
select option{color:#0f172a;background-color:#ffffff}
input:not([type=checkbox]):not([type=radio]):focus,select:focus,textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 22%,transparent);background:var(--field-bg)}
/* Toggle ver/ocultar contraseña (login + formularios con campo password) */
.pw-toggle{position:relative;display:block}
.pw-toggle input{padding-right:2.6rem!important}
.pw-toggle__btn{position:absolute;top:.2rem;right:.2rem;bottom:.2rem;width:2.3rem;display:flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--text-3);cursor:pointer;border-radius:var(--radius-sm);padding:0}
.pw-toggle__btn:hover{color:var(--text)}
.pw-toggle__btn:focus-visible{outline:2px solid var(--primary);outline-offset:-2px;color:var(--text)}
.pw-toggle__btn svg{width:1.1rem;height:1.1rem}
input[readonly],textarea[readonly],
input[readonly]:not([type=checkbox]):not([type=radio]),
.field-control[readonly],
.form-inline-row .field-control[readonly],
.form-inline-row .field>input[readonly],
.form-inline-row .field>textarea[readonly],
.admin-date-field>.admin-date-input[readonly],
.admin-date-field>.admin-date-input[readonly]:not(.field-control),
input.book-edit-id-field[readonly],
/* Gana a `.sale-factura input{background:var(--surface)}` del CSS embebido en página */
.sale-factura input[readonly],
.sale-factura textarea[readonly],
.sale-factura select:disabled,
.sale-factura input:disabled:not([type=checkbox]):not([type=radio]),
.sale-factura textarea:disabled,
#receipt_agreed_discount[readonly]{
  background:var(--field-readonly-bg)!important;
  border-color:var(--field-readonly-border)!important;
  color:var(--field-readonly-text)!important;
  cursor:default;
  box-shadow:inset 0 1px 2px rgba(15,23,42,.08);
}
input[readonly]:focus,textarea[readonly]:focus,
.field-control[readonly]:focus,
.admin-date-field>.admin-date-input[readonly]:focus,
input.book-edit-id-field[readonly]:focus,
.sale-factura input[readonly]:focus,
.sale-factura textarea[readonly]:focus,
#receipt_agreed_discount[readonly]:focus{
  border-color:var(--field-readonly-border)!important;
  box-shadow:inset 0 1px 2px rgba(15,23,42,.08);
  background:var(--field-readonly-bg)!important;
}
input:disabled:not([type=checkbox]):not([type=radio]),textarea:disabled,select:disabled,
.field-control:disabled,
.form-inline-row .field-control:disabled,
.form-inline-row .field>input:disabled,
.form-inline-row .field>select:disabled,
.form-inline-row .field>textarea:disabled,
.admin-date-field>.admin-date-input:disabled{
  background:var(--field-disabled-bg);
  border-color:var(--field-disabled-border);
  color:var(--field-disabled-text);
  cursor:not-allowed;
  opacity:1;
  box-shadow:inset 0 1px 2px rgba(15,23,42,.08);
}
input:disabled:not([type=checkbox]):not([type=radio]):focus,textarea:disabled:focus,select:disabled:focus,
.field-control:disabled:focus,
.admin-date-field>.admin-date-input:disabled:focus{
  border-color:var(--field-disabled-border);
  box-shadow:inset 0 1px 2px rgba(15,23,42,.08);
  background:var(--field-disabled-bg);
}
/* a11y: checks nativos (Firefox/GTK disabled) = caja oscura + tick casi invisible.
   Forzar control propio: borde visible, fill primary, tick blanco ≥ UI 3:1. */
input[type=checkbox],input[type=radio]{
  -webkit-appearance:none;appearance:none;
  width:1.05rem;height:1.05rem;min-width:1.05rem;min-height:1.05rem;max-width:1.05rem;max-height:1.05rem;
  margin:0;flex-shrink:0;
  box-sizing:border-box;vertical-align:middle;
  border:1.5px solid #475569;background:#fff;cursor:pointer;
  box-shadow:inset 0 1px 1px rgba(15,23,42,.06);
}
input[type=checkbox]{border-radius:3px}
input[type=radio]{border-radius:50%}
input[type=checkbox]:checked,input[type=radio]:checked{
  background-color:#1d4ed8;border-color:#1d4ed8;
  background-position:center;background-repeat:no-repeat;
}
input[type=checkbox]:checked{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23ffffff' stroke-width='2.75' stroke-linecap='round' stroke-linejoin='round' d='M3.2 8.3l3.1 3.1 6.4-7'/%3E%3C/svg%3E");
  background-size:.72rem .72rem;
}
input[type=radio]:checked{
  background-image:radial-gradient(circle,#fff 0 35%,transparent 36%);
}
input[type=checkbox]:focus-visible,input[type=radio]:focus-visible{
  outline:2px solid #2563eb;outline-offset:2px;
}
input[type=checkbox]:disabled,input[type=radio]:disabled{
  cursor:not-allowed;opacity:1;
  border-color:#64748b;background:#e2e8f0;
}
input[type=checkbox]:checked:disabled,input[type=radio]:checked:disabled{
  background-color:#1e40af;border-color:#1e40af;opacity:1;
}
input[type=checkbox]:checked:disabled{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23ffffff' stroke-width='2.75' stroke-linecap='round' stroke-linejoin='round' d='M3.2 8.3l3.1 3.1 6.4-7'/%3E%3C/svg%3E");
  background-size:.72rem .72rem;background-position:center;background-repeat:no-repeat;
}
input[type=radio]:checked:disabled{
  background-image:radial-gradient(circle,#fff 0 35%,transparent 36%);
  background-position:center;background-repeat:no-repeat;
}
[data-theme="dark"] input[type=checkbox]:not(:checked),[data-theme="dark"] input[type=radio]:not(:checked){
  background:#0f172a;border-color:#94a3b8;
}
[data-theme="dark"] input[type=checkbox]:disabled:not(:checked),[data-theme="dark"] input[type=radio]:disabled:not(:checked){
  background:#1e293b;border-color:#64748b;
}
/* Isla Access (.sale-factura) sigue siendo clara en dark mode */
[data-theme="dark"] .sale-factura input[type=checkbox]:not(:checked),
[data-theme="dark"] .sale-factura input[type=radio]:not(:checked){
  background:#fff;border-color:#475569;
}
[data-theme="dark"] .sale-factura input[type=checkbox]:disabled:not(:checked),
[data-theme="dark"] .sale-factura input[type=radio]:disabled:not(:checked){
  background:#e2e8f0;border-color:#64748b;
}
.field{margin-bottom:.9rem}
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem}
.form-grid .full,.grid .full{grid-column:1/-1}
.filter-bar{display:flex;gap:.65rem;align-items:flex-end;flex-wrap:wrap;padding:.85rem;background:color-mix(in srgb,var(--surface) 86%,transparent);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:1rem;box-shadow:var(--shadow);backdrop-filter:saturate(1.1) blur(6px)}
.filter-bar .field{margin-bottom:0;min-width:130px}
.filter-bar label{margin-bottom:.2rem}
/* ── Inline form row (filtros, alta compacta, input+botón) ──
   Patrón canónico backoffice — ver .cursor/rules/axon-backoffice-inline-forms.mdc
   Referencia: phase108_cgm_ledger.go, phase36_customer_view.go */
.form-inline-row{display:flex;flex-wrap:wrap;gap:.55rem;align-items:flex-start;width:100%;--field-label-row:1.43rem;--field-control-height:2.15rem}
/* A-4 — Vistas guardadas (segunda fila dentro de .filter-bar) */
.filter-bar:has(>.ax-saved-views){flex-direction:column;align-items:stretch;gap:.55rem}
.filter-bar:has(>.ax-saved-views)>.form-inline-row{width:100%;margin:0}
.ax-saved-views{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.45rem .55rem;margin:0;padding:.55rem 0 0;border-top:1px solid var(--border);width:100%;box-sizing:border-box}
.ax-saved-views__save{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.45rem .55rem;margin:0;flex:1 1 auto;min-width:0;width:auto}
.ax-saved-views__save .field--grow{flex:1 1 12rem;min-width:10rem;max-width:18rem}
.ax-saved-views__list{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;flex:1 1 12rem;min-width:0;min-height:var(--field-control-height,2.15rem)}
.ax-saved-views__list[hidden]{display:none!important}
.ax-saved-views__del{min-width:2rem;padding-left:.4rem;padding-right:.4rem;height:var(--field-control-height,2.15rem)}
/* Historial de cambios (/admin/overrides) — diff contenido en columna fija */
.overrides-audit-table{table-layout:fixed;width:100%}
.overrides-audit-table th,.overrides-audit-table td{vertical-align:middle}
.overrides-audit-table th:nth-child(1),.overrides-audit-table td:nth-child(1){width:7.5rem}
.overrides-audit-table th:nth-child(2),.overrides-audit-table td:nth-child(2){width:5.5rem}
.overrides-audit-table th:nth-child(3),.overrides-audit-table td:nth-child(3){width:7rem}
/* Campo: clip obligatorio — nombres largos (shipping_postal_code) desbordaban sobre «valor anterior». */
.overrides-audit-table th:nth-child(4),.overrides-audit-table td:nth-child(4){width:10.5rem;max-width:10.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.overrides-audit-table th:nth-child(5),.overrides-audit-table td:nth-child(5),
.overrides-audit-table th:nth-child(6),.overrides-audit-table td:nth-child(6){width:18%;max-width:0;overflow:hidden}
.overrides-audit-table th:nth-child(7),.overrides-audit-table td:nth-child(7){width:9rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.overrides-audit-table .mono,.overrides-diff{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem}
.overrides-diff{display:block;width:100%;max-width:100%;min-width:0;box-sizing:border-box;padding:.12rem .35rem;border-radius:var(--radius-sm);border:1px solid transparent;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.overrides-diff--old{background:var(--badge-danger-bg);color:var(--danger);border-color:var(--badge-danger-border)}
.overrides-diff--new{background:var(--badge-ok-bg);color:var(--ok);border-color:var(--badge-ok-border)}
.overrides-audit-table td.nowrap{white-space:nowrap}
.form-inline-row .field--entity-id{flex:0 0 11.5rem;width:11.5rem}
/* Historial cliente (/admin/customers/activity) */
.customer-activity-block{padding:.65rem .75rem;margin-bottom:.75rem}
.customer-activity-block__hd{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.45rem .75rem;margin:0 0 .45rem}
.customer-activity-block__title{margin:0;font-size:1rem;font-weight:800;color:var(--text)}
.customer-activity-remarks{max-width:14rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.form-inline-row .field{margin-bottom:0;flex:0 0 auto;display:flex;flex-direction:column;gap:.28rem}
.form-inline-row .field>label{margin-bottom:0;line-height:1.15;min-height:1.15rem;white-space:nowrap}
.form-inline-row .field--action{flex:0 0 auto;flex-shrink:0;justify-content:flex-end;padding-top:var(--field-label-row);box-sizing:border-box}
.form-inline-row .field--grow{flex:1 1 10rem;min-width:8rem;max-width:20rem}
.form-inline-row .field--kind{flex:0 0 8.5rem;width:8.5rem}
.form-inline-row .field--group{flex:0 0 12rem;width:12rem}
.form-inline-row .field--division{flex:0 0 7rem;width:7rem}
.form-inline-row .field--role{flex:0 0 11.5rem;width:11.5rem}
.form-inline-row .field--period{flex:0 0 13.5rem;width:13.5rem}
.form-inline-row .field--pwd{flex:0 0 11rem;width:11rem}
.form-inline-row .field--amount{flex:0 0 7rem;width:7rem}
.form-inline-row .field--amount input,.field.field--amount input,.field.field--amount .field-control{text-align:right;font-variant-numeric:tabular-nums}
.field.field--amount{width:7rem;max-width:7rem}
/* Umbral fiscal (3.005,06): 7rem de field--amount queda corto y el botón «Calcular» se monta encima. */
.form-inline-row .field--threshold{flex:0 0 10.5rem;width:10.5rem;min-width:10.5rem}
.form-inline-row .field--threshold .field-control{width:100%;min-width:0;text-align:right;font-variant-numeric:tabular-nums;box-sizing:border-box}
.form-inline-row .field--date{flex:0 0 11rem;width:11rem}
.admin-date-field{display:flex;align-items:stretch;width:100%;max-width:11rem;position:relative}
.admin-date-field>.admin-date-input{flex:1 1 0;min-width:0;width:auto!important;max-width:none;margin:0;border-top-right-radius:0;border-bottom-right-radius:0}
.admin-date-field>.admin-date-input:not(.field-control){height:2.15rem;padding:0 .65rem;border:1px solid var(--field-border);border-radius:var(--radius-sm);border-top-right-radius:0;border-bottom-right-radius:0;font-size:.84rem;line-height:calc(2.15rem - 2px);color:var(--text);background:linear-gradient(180deg,var(--field-bg),var(--field-bg-soft));box-sizing:border-box;font-family:var(--font);-webkit-appearance:none;appearance:none}
.admin-date-picker-native{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none;border:0;padding:0;bottom:0;right:0}
button.admin-date-picker-btn,button[type=button].admin-date-picker-btn{flex:0 0 2.15rem;width:2.15rem;height:2.15rem;min-height:2.15rem;border:1px solid var(--field-border);border-left:0;border-radius:0 var(--radius-sm) var(--radius-sm) 0;background:linear-gradient(180deg,var(--field-bg),var(--field-bg-soft));cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;margin:0;color:#64748b;box-sizing:border-box;box-shadow:none;transform:none;font-family:var(--font);font-size:inherit;font-weight:400;line-height:1;white-space:nowrap;-webkit-appearance:none;appearance:none}
button.admin-date-picker-btn:hover,button[type=button].admin-date-picker-btn:hover,button.admin-date-picker-btn:focus-visible,button[type=button].admin-date-picker-btn:focus-visible{color:var(--text);background:var(--field-bg);outline:none;box-shadow:0 0 0 2px rgba(59,130,246,.18);transform:none}
button.admin-date-picker-btn svg{width:.95rem;height:.95rem;display:block;pointer-events:none;flex-shrink:0}
input.admin-date-input,.form-inline-row input.admin-date-input{font-variant-numeric:tabular-nums}
.form-inline-row .field--date .admin-date-field{width:100%;max-width:none}
.form-inline-row .admin-date-picker-btn,.form-inline-row button.admin-date-picker-btn,.form-inline-row .admin-date-field>.admin-date-input:not(.field-control){height:var(--field-control-height);min-height:var(--field-control-height);max-height:var(--field-control-height);line-height:calc(var(--field-control-height) - 2px)}
.form-inline-row .admin-date-picker-btn,.form-inline-row button.admin-date-picker-btn{flex-basis:var(--field-control-height);width:var(--field-control-height)}
.form-inline-row .field--id{flex:0 0 8.5rem;width:8.5rem}
.form-inline-row .field--checkbox{flex:0 0 auto;flex-shrink:0;display:grid;grid-template-rows:1.15rem var(--field-control-height);row-gap:.28rem;padding-top:0;align-self:flex-start}
.form-inline-row .field--checkbox label{grid-row:2;align-self:center;display:inline-flex;align-items:center;gap:.35rem;margin-bottom:0;white-space:nowrap;font-size:.78rem;cursor:pointer;line-height:1.15;font-weight:600}
.form-inline-row .field-control,.form-inline-row .field>select,.form-inline-row .field>input:not([type=checkbox]):not([type=hidden]):not([type=radio]){display:block;height:var(--field-control-height);min-height:var(--field-control-height);max-height:var(--field-control-height);padding:0 .65rem;margin:0;border:1px solid var(--field-border);border-radius:var(--radius-sm);font-size:.84rem;line-height:calc(var(--field-control-height) - 2px);color:var(--text);background:linear-gradient(180deg,var(--field-bg),var(--field-bg-soft));box-sizing:border-box;width:100%;min-width:0;font-family:var(--font)}
.form-inline-row .field>select,.form-inline-row select.field-control{-webkit-appearance:none;appearance:none;padding-right:1.65rem}
.form-inline-row .field>input:not([type=checkbox]):not([type=hidden]):not([type=radio]),.form-inline-row input.field-control:not([type=checkbox]){-webkit-appearance:none;appearance:none}
.form-inline-row .field--action .btn.sm{height:var(--field-control-height);min-height:var(--field-control-height);max-height:var(--field-control-height);padding:0 .85rem;white-space:nowrap;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center}
.form-inline-row .field>label.field-label-sr{position:absolute;width:1px;height:1px;min-height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.form-inline-row--table-cell{align-items:center;flex-wrap:nowrap;gap:.4rem;width:auto}
.form-inline-row--table-cell .field{gap:0;position:relative}
.form-inline-row--table-cell .field--action{padding-top:0;justify-content:center}
.form-inline-row--table-cell .field--grow{flex:1 1 7rem;min-width:5.5rem;max-width:11rem}
/* Cabecera con buscador sr-only: anula el padding-top de etiqueta de .field--action.
   Selectores más específicos que `.form-inline-row .field--action` para no perder el duelo. */
.list-hd-tools .form-inline-row .field,
.entity-hero__tools .form-inline-row .field,
.list-hd-search .field,
.entity-hero__search .field{gap:0;position:relative;align-self:center;padding-top:0}
.list-hd-tools .form-inline-row .field--action,
.entity-hero__tools .form-inline-row .field--action,
.list-hd-search .field--action,
.entity-hero__search .field--action{padding-top:0;align-self:center;justify-content:center}
/* Desistimientos web: listado estándar + columna Notas expandible. */
.withdrawals-list-table td{vertical-align:top}
.withdrawals-list-table .wd-pedido{font-weight:600;white-space:nowrap}
.withdrawals-list-table .wd-pedido .muted{font-weight:400;font-size:12px}
.withdrawals-list-table .wd-cliente{max-width:14rem}
.withdrawals-list-table .wd-notes{max-width:18rem;min-width:12rem}
.withdrawals-list-table .wd-notes-clip{
  color:var(--muted);font-size:12px;line-height:1.35;overflow:hidden;
  display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;
  cursor:pointer;text-decoration:underline dotted var(--border-strong);text-underline-offset:3px
}
.wd-notes-details summary{list-style:none}
.wd-notes-details summary::-webkit-details-marker{display:none}
.wd-notes-details[open] .wd-notes-clip{
  display:block;-webkit-line-clamp:unset;line-clamp:unset;text-decoration:none;font-weight:600;color:var(--text-2)
}
.wd-notes-full{margin-top:6px;font-size:12px;color:var(--text)}
.wd-notes-src{font-weight:600;font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-3);margin:6px 0 4px}
.wd-notes-customer{white-space:pre-line;overflow-wrap:anywhere;color:var(--muted);margin-bottom:6px}
.wd-notes-edit{display:flex;flex-direction:column;gap:6px;margin:0}
.wd-notes-edit textarea{
  width:100%;min-height:5.5rem;font:inherit;font-size:12px;line-height:1.35;padding:6px 8px;
  border:1px solid var(--field-border);border-radius:var(--radius-sm);resize:vertical;box-sizing:border-box;
  background:var(--field-bg);color:var(--text)
}
.wd-notes-edit .btn{align-self:flex-start}
.withdrawals-list-table .wd-refund{white-space:nowrap}
.withdrawals-list-table .wd-goods-ok{margin-top:4px}
.withdrawals-list-table .field-label-sr{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0
}
.withdrawals-list-actions{white-space:nowrap}
@media (max-width:1100px){.withdrawals-list-table .wd-notes{display:none}}
.ledger-movement-form{display:flex;flex-direction:column;gap:.45rem;width:100%}
.ledger-movement-form>.form-inline-row{align-items:flex-start;gap:.5rem}
.ledger-movement-form .field--grow{flex:1 1 9rem;min-width:7rem;max-width:none}
.ledger-movement-form .field--settle{flex:1 1 14rem;min-width:11rem;max-width:22rem}
.ledger-movement-form .field--settle select.field-control{font-size:.78rem;padding-left:.5rem;padding-right:1.45rem}
.ledger-movement-form__payment{margin-top:.05rem;padding-top:.45rem;border-top:1px dashed rgba(219,228,238,.95)}
.ledger-movement-form__payment .field--checkbox label{white-space:normal;max-width:11.5rem;font-size:.74rem;line-height:1.2}
.ledger-movement-form .hint{margin:.35rem 0 0;font-size:.74rem;line-height:1.35}
.payment-forecast-form{display:flex;flex-direction:column;gap:.55rem;width:100%}
.payment-forecast-form .form-inline-row{gap:.45rem}
.payment-forecast-form .card{overflow:visible}
.payment-forecast-form .card:has(.supplier-picker-suggest:not([hidden])){position:relative;z-index:200;overflow:visible}
.payment-forecast-form .field--supplier-picker{flex:1 1 20rem;min-width:15rem;max-width:none;position:relative;z-index:1}
.payment-forecast-form .field--supplier-picker:has(.supplier-picker-suggest:not([hidden])){z-index:201}
.payment-forecast-form .field--supplier-picker .book-edit-picker-fields{grid-template-columns:4rem minmax(0,1fr);width:100%;max-width:none;overflow:visible}
.payment-forecast-form .field--supplier-picker .supplier-picker:has(.supplier-picker-suggest:not([hidden])){z-index:202}
.payment-forecast-form .field--invoice-no{flex:0 0 8rem;width:8rem;min-width:7rem;max-width:8rem}
.magazine-subscription-actions .field--checkbox label{white-space:normal;max-width:15rem;line-height:1.25}
.customer-access-web-actions{display:flex;flex-direction:column;gap:.55rem;margin-top:.45rem}
.customer-access-web-actions .form-inline-row{align-items:flex-start}
.customer-access-web-actions .field input[type=text]{width:14rem;max-width:100%}
/* Programas profesionales — densidad app premium (doc-hero + chips + list-scroll) */
.list-scroll-page>.doc-hero,
.list-scroll-page>.doc-toolbar,
.list-scroll-page>.partner-program-tabs{flex:0 0 auto;margin-bottom:.55rem}
.partner-program-tabs{display:flex;gap:.45rem;flex-wrap:wrap;align-items:center;margin-bottom:.75rem;padding-bottom:.55rem;border-bottom:1px solid var(--border)}
.partner-program-tabs .page-hd-kpi span:only-child{text-transform:uppercase;letter-spacing:.04em;font-size:.64rem;font-weight:650;color:var(--muted)}
.partner-program-tabs .page-hd-kpi.is-active span:only-child{color:var(--primary-dk)}
[data-theme="dark"] .partner-program-tabs .page-hd-kpi.is-active span:only-child{color:var(--primary)}
.partner-program-card__meta{gap:.45rem;align-items:center;flex-wrap:wrap;margin-top:.35rem}
.partner-program-card__foot{margin:.65rem 0 0}
.partner-program-card .page-hd-kpis{margin-top:.65rem}
.partner-summary{margin-bottom:1rem}
.partner-summary-chips{margin:.15rem 0 .55rem;flex-wrap:wrap}
.partner-summary-chips .page-hd-kpi{text-decoration:none}
.partner-summary-foot{justify-content:space-between;align-items:center;gap:.8rem;flex-wrap:wrap;margin-top:.35rem;padding-top:.85rem;border-top:1px solid var(--border)}
.partner-summary-foot__actions{gap:.45rem;flex-wrap:wrap}
.partner-summary-foot .ax-money,.partner-program-card__foot .ax-money{font-variant-numeric:tabular-nums}
.partner-summary .tbl-tight tr.is-subtotal td{
  font-size:.88rem;font-weight:800;letter-spacing:.01em;color:var(--primary-dk);
  background:var(--primary-soft);
  border-top:1px solid color-mix(in srgb,var(--primary) 42%,var(--border));
  border-bottom:1px solid color-mix(in srgb,var(--primary) 42%,var(--border));
  padding-top:.58rem;padding-bottom:.58rem;
  font-variant-numeric:tabular-nums;
  box-shadow:0 5px 0 var(--surface)
}
.partner-summary .tbl-tight tr.is-subtotal td:first-child{
  border-left:3px solid var(--primary);padding-left:.65rem;
  border-radius:6px 0 0 6px
}
.partner-summary .tbl-tight tr.is-subtotal td:last-child{
  border-right:1px solid color-mix(in srgb,var(--primary) 42%,var(--border));
  border-radius:0 6px 6px 0
}
.partner-summary .tbl-tight tbody tr.is-subtotal:last-child td{
  border-bottom:1px solid color-mix(in srgb,var(--primary) 42%,var(--border))
}
.partner-summary .tbl-tight tbody tr.is-subtotal:hover td{
  background:color-mix(in srgb,var(--primary) 18%,var(--surface))
}
.partner-summary .tbl-tight tr.is-subtotal td .muted{
  font-weight:650;color:var(--primary-dk);opacity:.78
}
.partner-summary .tbl-tight tr.is-subtotal .ax-money{font-weight:800}
.doc-hero__amount-value.ax-money{white-space:nowrap}
.partner-catalog-actions{display:flex;gap:.35rem;align-items:center;flex-wrap:nowrap;white-space:nowrap}
/* Catálogo partner: workspace (materias + alta + tabla). Scroll de página normal;
   no usar list-scroll-page/overflow:hidden — el panel de materias tapaba el viewport. */
.partner-catalog-region{display:flex;flex-direction:column;gap:.65rem;min-height:0}
.partner-catalog-region > .page-hd{margin-bottom:0}
.partner-catalog-region > .hint,
.partner-catalog-region > .ax-flash,
.partner-catalog-region > .ok,
.partner-catalog-region > .error,
.partner-catalog-region > .filter-bar,
.partner-catalog-region > form,
.partner-catalog-region > .list-inline-add-row,
.partner-catalog-region > .list-pager-row{flex:0 0 auto}
.partner-catalog-region > .tbl-wrap{flex:0 0 auto;overflow:visible;min-height:0;max-height:none}
/* Panel materias: no rgba(255,255,255) — en dark --text/#f1f5f9 sobre blanco era ilegible */
.partner-subjects-panel{margin-top:.75rem;padding:.85rem;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);color:var(--text)}
.partner-subjects-panel .hint,.partner-subjects-panel .muted{color:var(--text-2)}
.partner-subjects-panel h3{margin:0;font-size:1rem;color:var(--text)}
.partner-subjects-panel .panel-title{margin-bottom:.65rem}
.partner-subjects-panel .tbl-wrap{margin-bottom:.75rem;overflow:visible;max-height:none}
/* Dentro del plegable el marco ya lo da el propio panel: sin hueco extra arriba. */
.list-inline-add>.partner-subjects-panel{margin-top:0}
.partner-subjects-add{margin-top:.35rem}
.partner-orders-hint{margin:0 0 .45rem;flex:0 0 auto}
/* Chips informativos (presupuesto): misma escala que filtros; sin hover de enlace. */
.partner-orders-region .page-hd-main > .page-hd-kpis .page-hd-kpi:not(a),
.partner-users-region .page-hd-main > .page-hd-kpis .page-hd-kpi:not(a){
  cursor:default;pointer-events:none
}
.partner-orders-region .page-hd--compact > .flex,
.partner-users-region .page-hd--compact > .flex{
  align-items:center
}
.partner-orders-table td .badge{vertical-align:middle}
/* Alta en línea plegable: cerrada ocupa una píldora, no una banda de filtros.
   El <details> envuelve al <form> para que no sea hijo directo de
   .list-scroll-page__catalog (ese selector le mete overflow:hidden y lo recorta). */
.list-inline-add{flex:0 0 auto;min-height:auto;overflow:visible;margin:0 0 .55rem}
.list-inline-add>summary{
  display:inline-flex;align-items:center;gap:.35rem;cursor:pointer;list-style:none;
  padding:.22rem .6rem;border:1px solid var(--border);border-radius:var(--radius-pill);
  background:var(--surface);color:var(--text-2);font-size:.74rem;font-weight:650;
  box-shadow:var(--shadow-sm);user-select:none
}
.list-inline-add>summary::-webkit-details-marker{display:none}
.list-inline-add>summary::marker{content:""}
.list-inline-add>summary:hover{border-color:var(--primary);background:var(--primary-soft);color:var(--text)}
.list-inline-add[open]>summary{margin-bottom:.45rem;border-color:var(--primary);background:var(--primary-soft);color:var(--text)}
.list-inline-add>form{
  display:flex;flex-direction:column;gap:.45rem;width:100%;margin:0;min-height:auto;overflow:visible;
  padding:.7rem .75rem;border:1px solid var(--border);border-radius:var(--radius);
  background:color-mix(in srgb,var(--surface) 86%,transparent)
}
.list-inline-add .form-inline-row{width:100%;align-items:flex-start;gap:.5rem}
.list-inline-add__hint{margin:0;font-size:.74rem;min-height:0}
/* Variante en línea: el plegable comparte fila con un botón (p. ej. barra de acción). */
.list-inline-add--inline{margin:0}
.list-inline-add--inline[open]{flex:1 1 100%}
/* Varios plegables comparten banda; el que se abre pasa a ocupar la fila entera. */
.list-inline-add-row{display:flex;flex-wrap:wrap;gap:.4rem;margin:0 0 .55rem;flex:0 0 auto}
.list-inline-add-row>.list-inline-add{margin:0}
.list-inline-add-row>.list-inline-add[open]{flex:1 1 100%}
.partner-users-add .field--grow{flex:1 1 12rem;min-width:10rem;max-width:none}
.partner-users-table td{vertical-align:middle}
.partner-users-table td.num{min-width:5.5rem;white-space:nowrap}
/* Solo el contenido de la celda: si `ax-money` cae sobre el propio <td>, el
   display:inline-block lo saca del layout de tabla y la fila pierde el centrado. */
.partner-users-table td .ax-money{display:inline-block;max-width:none;overflow:visible}
.partner-users-role-form{margin:0}
.partner-users-role{min-width:7.5rem;max-width:9.5rem;font-size:.78rem;height:2rem;padding:.22rem .4rem}
.partner-users-budget-form{display:inline-flex;align-items:center;gap:.2rem;margin:0}
.partner-users-budget-input{width:5.75rem;min-width:5.75rem;font-size:.78rem;height:2rem;padding:.22rem .4rem;font-variant-numeric:tabular-nums;text-align:right}
.partner-users-budget-step-input{width:4.4rem;min-width:4.4rem;font-size:.78rem;height:2rem;padding:.22rem .35rem;font-variant-numeric:tabular-nums;text-align:right}
.partner-users-budget-step,.partner-users-budget-save{min-width:1.85rem;min-height:2rem;padding:.2rem .4rem;font-size:.95rem;font-weight:750;line-height:1}
.partner-users-pwd-form,
.partner-users-addr-form{display:flex;flex-direction:column;gap:.35rem;padding:.5rem .5rem .45rem;margin-top:.4rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft)}
.partner-users-pwd-label{font-size:.68rem;font-weight:750;text-transform:uppercase;letter-spacing:.04em;color:var(--text-2)}
.partner-users-pwd-check{display:flex;align-items:center;gap:.35rem;font-size:.76rem;color:var(--text-2);cursor:pointer}
.partner-users-pwd-form .field-control,
.partner-users-addr-form .field-control,
.partner-users-addr-form input[type=tel]{
  width:100%;min-height:2.15rem;padding:0 .65rem;font-size:.78rem;
  color:var(--text);border:1px solid var(--field-border);border-radius:var(--radius-sm);
  background:linear-gradient(180deg,var(--field-bg),var(--field-bg-soft));box-sizing:border-box
}
.partner-users-pwd-form .btn,
.partner-users-addr-form .btn{width:100%;margin-top:.1rem}
.partner-users-addr-row{display:grid;grid-template-columns:4.5rem 1fr;gap:.35rem}
.partner-users-addr--missing{color:var(--warn,#b45309)}
.filter-bar.filter-bar--single-row{align-items:flex-end;flex-wrap:nowrap}
.filter-bar.filter-bar--single-row .field--submit{align-self:flex-end;flex:0 0 auto;margin-bottom:0}
.filter-bar.filter-bar--search{align-items:center;flex-wrap:nowrap}
.filter-bar.filter-bar--tabs{align-items:center;flex-wrap:nowrap;gap:.4rem}
/* Chips de tipo de artículo: misma familia visual que .page-hd-kpi (una sola escala de chip) */
.books-catalog-type-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .6rem;margin:.35rem 0 .4rem}
.books-catalog-type-bar__head{display:inline-flex;align-items:baseline;gap:.4rem}
.books-catalog-type-bar__label{font-size:.64rem;font-weight:650;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.books-catalog-type-bar__hint{display:none}
.books-catalog-type-chips{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.35rem}
.books-catalog-type-chip{
  display:inline-flex;align-items:baseline;gap:.28rem;padding:.22rem .55rem;
  border:1px solid var(--border);border-radius:999px;background:var(--surface);
  color:var(--text-2);text-decoration:none;font-size:.74rem;line-height:1.2;font-weight:650;
  box-shadow:var(--shadow-sm)
}
.books-catalog-type-chip:hover{border-color:var(--primary);background:var(--primary-soft);color:var(--text);text-decoration:none}
.books-catalog-type-chip.active{border-color:var(--primary);background:var(--primary-soft);color:var(--primary-dk);box-shadow:inset 0 0 0 1px rgba(37,99,235,.18)}
.books-catalog-type-chip__count{font-variant-numeric:tabular-nums;font-weight:800;font-size:.78rem;color:var(--text)}
.books-catalog-type-chip.active .books-catalog-type-chip__count{color:var(--primary-dk)}
[data-theme="dark"] .books-catalog-type-chip{background:var(--surface-2)}
[data-theme="dark"] .books-catalog-type-chip.active{background:rgba(96,165,250,.12);color:var(--primary);box-shadow:inset 0 0 0 1px rgba(96,165,250,.22)}
[data-theme="dark"] .books-catalog-type-chip.active .books-catalog-type-chip__count{color:var(--primary)}
.books-catalog-filter-bar{margin:.35rem 0 .65rem;padding-top:.55rem;border-top:1px solid rgba(219,228,238,.95)}
.books-catalog-filter-bar__label{font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-bottom:.45rem}
.partner-orders-table td{vertical-align:middle}
.partner-orders-ref-form{display:flex;flex-direction:column;gap:.35rem;padding:.35rem .4rem .2rem;border-top:1px solid var(--border);margin-top:.15rem}
.partner-orders-ref-label{font-size:.68rem;font-weight:650;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}
.partner-orders-ref-form .field-control{width:100%;min-height:2rem;font-size:.78rem}
.partner-order-row--flash{background:rgba(34,197,94,.1)}

/* ── Badges ───────────────────────────── */
/* Escala única de badges: una sola altura por contexto.
   · Por defecto (hero, fichas, paneles): .68rem
   · Dentro de tabla densa (tbl-compact): .64rem — lo aplica el contexto, no cada listado
   No crear tamaños por pantalla; si hace falta otro, es que falta un contexto. */
.badge,.badge-status,.badge-warn,.badge-ok{display:inline-flex;align-items:center;justify-content:center;padding:.16rem .5rem;border-radius:var(--radius-pill);font-size:.68rem;font-weight:820;line-height:1.25;min-height:1.35rem;border:1px solid transparent;white-space:nowrap;vertical-align:middle}
.tbl-compact .badge,.tbl-compact .badge-status,.tbl-compact .badge-warn,.tbl-compact .badge-ok{font-size:.64rem;padding:.1rem .42rem;min-height:1.2rem}
.entity-meta .badge{min-height:1.5rem;padding:.2rem .6rem}
/* Varios badges en una misma celda: separación única, sin espacios sueltos en la plantilla */
.badge-group{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.25rem}
.badge.green,.badge.ok{background:var(--badge-ok-bg);color:var(--ok);border-color:var(--badge-ok-border)}
.badge.red,.badge.danger{background:var(--badge-danger-bg);color:var(--danger);border-color:var(--badge-danger-border)}
.badge.amber,.badge.warn{background:var(--badge-warn-bg);color:var(--warn);border-color:var(--badge-warn-border)}
.badge.blue,.badge.info{background:var(--badge-info-bg);color:var(--info);border-color:var(--badge-info-border)}
.badge.gray{background:var(--badge-muted-bg);color:var(--muted);border-color:var(--badge-muted-border)}
.badge.purple,.badge.accent{background:var(--badge-accent-bg);color:var(--accent);border-color:var(--badge-accent-border)}
.badge.teal{background:color-mix(in srgb,var(--brand) 16%,transparent);color:var(--brand);border-color:color-mix(in srgb,var(--brand) 35%,transparent)}

/* F0a — tonos semánticos KPI/card (hex → tokens) */
a.card.kpi.kpi--ok,.card.tone-ok{border-color:var(--badge-ok-border)}
a.card.kpi.kpi--warn,.card.tone-warn{border-color:var(--badge-warn-border)}
a.card.kpi.kpi--danger,.card.tone-danger{border-color:var(--badge-danger-border)}
a.card.kpi.kpi--accent,.card.tone-accent{border-color:var(--badge-accent-border)}
a.card.kpi.kpi--info,.card.tone-info{border-color:var(--badge-info-border)}
.card.tone-edge-warn{border-left:3px solid var(--warn)}
.hint.warn,.hint-warn{color:var(--warn)}
.badge.native{background:var(--brand);color:var(--brand-contrast);border-radius:.25rem}
.btn.info,a.btn.info{background:var(--info);box-shadow:0 5px 12px color-mix(in srgb,var(--info) 28%,transparent)}.btn.info:hover,a.btn.info:hover{filter:brightness(1.06)}
.badge.finalized{background:var(--badge-ok-bg);color:var(--ok);border-color:var(--badge-ok-border)}
.badge.cancelled{background:var(--badge-danger-bg);color:var(--danger);border-color:var(--badge-danger-border)}
.badge.ready{background:var(--badge-info-bg);color:var(--info);border-color:var(--badge-info-border)}
.badge.blocked{background:var(--badge-warn-bg);color:var(--warn);border-color:var(--badge-warn-border)}

/* F0a — celdas de rejilla Access (PO / encargo / albarán) */
td.cell-tone-info,th.cell-tone-info,.cell-tone-info{background:var(--badge-info-border)}
td.cell-tone-ok,th.cell-tone-ok,.cell-tone-ok{background:var(--badge-ok-border)}
td.cell-tone-ok{text-align:center}
.card.tone-ok-fill{border-color:var(--badge-ok-border);background:color-mix(in srgb,var(--ok) 8%,var(--surface))}
.card.tone-warn-fill{border-color:var(--badge-warn-border);background:color-mix(in srgb,var(--warn) 10%,var(--surface))}
.warning.compact,.notice.compact{margin:.45rem 0;padding:.55rem .75rem;font-size:.84rem}

.badge-RECEIPT{background:var(--badge-ok-bg);color:var(--ok);border-color:var(--badge-ok-border)}
.badge-RETURN{background:var(--badge-danger-bg);color:var(--danger);border-color:var(--badge-danger-border)}
.badge-TRANSFER{background:var(--badge-info-bg);color:var(--info);border-color:var(--badge-info-border)}
.badge-POS_SALE,.badge-SALE{background:var(--badge-accent-bg);color:var(--accent);border-color:var(--badge-accent-border)}
.badge-INVENTORY{background:var(--badge-warn-bg);color:var(--warn);border-color:var(--badge-warn-border)}
.badge-stock-other{background:var(--badge-muted-bg);color:var(--text-2);border-color:var(--badge-muted-border)}
.badge-deposit{background:var(--badge-warn-bg);color:var(--warn);border-color:var(--badge-warn-border)}
/* legacy badge compat */
.badge-status{margin-left:.3rem}
.badge-status.ready{background:var(--badge-ok-bg);color:var(--ok);border:1px solid var(--badge-ok-border)}
.badge-status.blocked{background:var(--badge-danger-bg);color:var(--danger);border:1px solid var(--badge-danger-border)}
.badge-warn{background:var(--badge-warn-bg);color:var(--warn);border-color:var(--badge-warn-border);margin-top:.3rem}
.badge-ok{background:var(--badge-ok-bg);color:var(--ok);border-color:var(--badge-ok-border)}
tr.row-current{background:var(--primary-soft)}
.ledger-list-actions .badge-warn{margin-top:0;flex-shrink:0}

/* ── Utilities ────────────────────────── */
.muted,.hint{color:var(--muted);font-size:.82rem}
.error{background:var(--badge-danger-bg);color:var(--danger);border:1px solid var(--badge-danger-border);padding:.72rem .9rem;border-radius:var(--radius);margin-bottom:1rem;font-size:.84rem}
.warning,.alert.warn{background:var(--badge-warn-bg);color:var(--warn);border:1px solid var(--badge-warn-border);padding:.72rem .9rem;border-radius:var(--radius);margin-bottom:1rem;font-size:.84rem}
.notice,.alert.info{background:var(--badge-info-bg);color:var(--info);border:1px solid var(--badge-info-border);padding:.72rem .9rem;border-radius:var(--radius);margin-bottom:1rem;font-size:.84rem}
.alert.ok{background:var(--badge-ok-bg);color:var(--ok);border:1px solid var(--badge-ok-border);padding:.72rem .9rem;border-radius:var(--radius);margin-bottom:1rem;font-size:.84rem}
.alert.err,.alert.danger{background:var(--badge-danger-bg);color:var(--danger);border:1px solid var(--badge-danger-border);padding:.72rem .9rem;border-radius:var(--radius);margin-bottom:1rem;font-size:.84rem}
.ok{background:var(--badge-ok-bg);color:var(--ok);border:1px solid var(--badge-ok-border);padding:.72rem .9rem;border-radius:var(--radius);margin-bottom:1rem;font-size:.84rem}
code{background:var(--surface-2);padding:.1rem .35rem;border-radius:3px;font-size:.78rem;color:var(--text-2);font-family:ui-monospace,monospace}
.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}
.stack{display:grid;gap:1rem}
.flex{display:flex;gap:.65rem;align-items:center;flex-wrap:wrap}
/* Heredados del inventario: sustituyen style="display:flex…" inline. */
.flex-row-sm{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}
.toolbar-actions{display:flex;gap:.5rem;align-items:center;flex-wrap:nowrap}
.justify-between{justify-content:space-between}
.pager{display:flex;align-items:center;gap:.55rem}
.list-pager-row{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.65rem;margin-bottom:.65rem}
.stock-book-hd-main{min-width:0;flex:1}
.stock-book-title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:min(100%,760px)}
.stock-book-actions{justify-content:flex-end}
.stock-book-kpi-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));margin-bottom:.85rem}
.stock-book-kpi-grid:last-child{margin-bottom:0}
.stock-book-kpi--primary .kpi-val{color:#1d4ed8}
.stock-book-kpi--calc .kpi-val{color:#a16207}
.stock-book-kpi--total .kpi-val{color:#c2410c}
.stock-book-kpi--owed .kpi-val{color:#dc2626}
.stock-transform-hd-main{min-width:0;flex:1}
.stock-transform-title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:min(100%,760px)}
.stock-transform-actions{justify-content:flex-end;flex-wrap:wrap;gap:.45rem}
.stock-transform-form .field-units{max-width:8rem}
.stock-transform-form .field-notes textarea{min-height:4.5rem}
.stock-transform-preview{margin-top:.15rem;color:var(--muted);font-size:.82rem}
.stock-transform-comp-table td:nth-child(1){white-space:nowrap;width:9.5rem;font-variant-numeric:tabular-nums}
.stock-transform-comp-table td:nth-child(2){min-width:0;max-width:28rem}
.stock-transform-comp-table .stock-transform-comp-title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.stock-transform-comp-table td:nth-child(3),.stock-transform-comp-table td:nth-child(4),.stock-transform-comp-table td:nth-child(5),.stock-transform-comp-table th:nth-child(3),.stock-transform-comp-table th:nth-child(4),.stock-transform-comp-table th:nth-child(5){text-align:right;white-space:nowrap;width:5.5rem}
.ledger-list-table th:nth-child(1),.ledger-list-table td:nth-child(1),.ledger-list-table th:nth-child(3),.ledger-list-table td:nth-child(3),.ledger-list-table th:nth-child(5),.ledger-list-table td:nth-child(5),.ledger-list-table th:nth-child(7),.ledger-list-table td:nth-child(7){width:1%;white-space:nowrap}
.ledger-list-table th:nth-child(4),.ledger-list-table td:nth-child(4){width:1%;white-space:nowrap;text-align:right;font-variant-numeric:tabular-nums}
.ledger-list-table td:nth-child(2){min-width:12rem;max-width:28rem}
.ledger-list-table td:nth-child(6){min-width:8rem;max-width:16rem}
.ledger-list-actions{display:flex;gap:.35rem;flex-wrap:nowrap;white-space:nowrap;align-items:center}
.ledger-list-actions form{display:contents;margin:0}
.ledger-list-actions .btn.sm{white-space:nowrap;line-height:1.25;min-height:1.85rem}
.ledger-list-table .money{display:inline-block;white-space:nowrap;font-variant-numeric:tabular-nums}
.ledger-punteo-cell{white-space:nowrap;vertical-align:middle;overflow:visible}
/* Misma rejilla en las dos filas: [nº 11ch] [acción]. Si no, el nº punteado
   es texto suelto y «Quitar» no cae donde «Puntear». */
.ledger-punteo-cell .ledger-punteo-form{
  display:inline-grid;grid-template-columns:11ch 5.75rem;gap:.35rem;align-items:center;
  margin:0;vertical-align:middle
}
.ledger-punteo-inline{margin-left:0!important}
/* Gana a input[type=number]{width:100%}. Sin spinner: se teclea o se deja auto. */
.ledger-punteo-cell input.ledger-punteo-num,
.ledger-punteo-cell .ledger-punteo-num--set{
  width:11ch;min-width:11ch;max-width:11ch;height:1.85rem;min-height:1.85rem;max-height:1.85rem;
  margin:0;padding:0 .4rem;font-size:.74rem;text-align:right;font-variant-numeric:tabular-nums;
  box-sizing:border-box
}
.ledger-punteo-cell input.ledger-punteo-num{-moz-appearance:textfield}
.ledger-punteo-cell input.ledger-punteo-num::-webkit-outer-spin-button,
.ledger-punteo-cell input.ledger-punteo-num::-webkit-inner-spin-button{
  -webkit-appearance:none;margin:0
}
.ledger-punteo-cell .ledger-punteo-num--set{
  display:inline-flex;align-items:center;justify-content:flex-end;font-weight:700
}
.ledger-punteo-cell .ledger-punteo-action{
  width:5.75rem;min-width:5.75rem;height:1.85rem;min-height:1.85rem;padding:0 .45rem;
  box-sizing:border-box;line-height:1;display:inline-flex;align-items:center;justify-content:center
}
/* Quitar no puede ser el mismo azul que Puntear: button[type=submit] pinta
   primario y se come .btn.ghost. Contorno danger, no pastilla roja: hay
   varios Quitar por pantalla. */
.ledger-punteo-cell button.ledger-punteo-action.danger{
  background:transparent;border:1px solid color-mix(in srgb,var(--danger) 55%,var(--border-strong));
  color:#fca5a5;box-shadow:none;transform:none
}
.ledger-punteo-cell button.ledger-punteo-action.danger:hover{
  background:rgba(239,68,68,.14);border-color:var(--danger);color:#fecaca
}
.ledger-view-table td.ledger-running{font-weight:650}
.ledger-view-table th:nth-child(8),
.ledger-view-table td.ledger-punteo-cell{width:1%;min-width:13rem}
.ledger-view-table td.list-actions .actions > .btn.sm,
.ledger-view-table td.list-actions .actions > form > .btn.sm{
  min-width:4.25rem;height:1.85rem;min-height:1.85rem;padding:0 .55rem;
  box-sizing:border-box;white-space:nowrap;line-height:1.25;flex-shrink:0
}
.ledger-view-table td.list-actions .actions > form > .btn.sm.danger{min-width:2.15rem;padding:0 .4rem}
.doc-toolbar .btn.sm,.doc-hero__action .btn.sm{white-space:nowrap;flex-shrink:0}
/* Cobros pendientes: Fecha Cuenta Cliente Concepto Div Debe IBAN Acciones */
.ledger-pending-table th:nth-child(1),.ledger-pending-table td:nth-child(1),
.ledger-pending-table th:nth-child(2),.ledger-pending-table td:nth-child(2),
.ledger-pending-table th:nth-child(5),.ledger-pending-table td:nth-child(5),
.ledger-pending-table th:nth-child(6),.ledger-pending-table td:nth-child(6){width:1%;white-space:nowrap}
.ledger-pending-table th:nth-child(6),.ledger-pending-table td:nth-child(6){text-align:right;font-variant-numeric:tabular-nums}
/* Punteo CGM: columnas tipadas (no nth-child — el checkbox admin desplaza índices) */
.ledger-recon-table .col-check,
.ledger-recon-table .col-date,
.ledger-recon-table .col-account,
.ledger-recon-table .col-div,
.ledger-recon-table .col-money,
.ledger-recon-table .col-punteo{width:1%;white-space:nowrap}
.ledger-recon-table .col-money{text-align:right;font-variant-numeric:tabular-nums}
.ledger-recon-table th.col-punteo,
.ledger-recon-table td.ledger-punteo-cell{min-width:13rem}
.ledger-recon-table td.cell-clip{max-width:9rem}
.ledger-recon-table .col-check input[type=checkbox]{width:auto;min-width:1rem;margin:0}
.magazine-renewals-table tbody td{vertical-align:middle}
.stock-transform-toolbar{display:flex;flex-wrap:wrap;gap:.55rem;align-items:center;margin-top:1rem;padding-top:.85rem;border-top:1px solid var(--border)}
.stock-mvt-deltas{display:grid;gap:.2rem;font-size:.78rem;line-height:1.35}
.stock-mvt-delta{color:#334155}
.stock-mvt-delta-label{display:inline-block;min-width:4.8rem;font-size:.66rem;font-weight:850;text-transform:uppercase;letter-spacing:.04em;color:#64748b}
.stock-empty-state{padding:1.35rem .5rem;text-align:center}
.stock-empty-state p{margin:.35rem 0}
/* Fila contexto (?book_id=): contraste en claro y en oscuro */
.deposit-view-row--context td{
  background:#fffbeb;
  color:#1c1917;
  box-shadow:inset 3px 0 0 #f59e0b;
}
.deposit-view-row--context td a,
.deposit-view-row--context td .list-primary-link{color:#1c1917}
.deposit-view-row--context td .muted{color:#57534e}
.deposit-view-row--context .btn.ghost,
.deposit-view-row--context .btn.secondary{
  color:#1c1917;border-color:#a8a29e;background:rgba(255,255,255,.55)
}
.deposit-view-row--context .list-row-menu__summary{color:#1c1917;border-color:#a8a29e}
[data-theme="dark"] .deposit-view-row--context td{
  background:rgba(251,191,36,.14);
  color:var(--text);
  box-shadow:inset 3px 0 0 #fbbf24;
}
[data-theme="dark"] .deposit-view-row--context td a,
[data-theme="dark"] .deposit-view-row--context td .list-primary-link{color:var(--text)}
[data-theme="dark"] .deposit-view-row--context td .muted{color:var(--muted)}
[data-theme="dark"] .deposit-view-row--context .btn.ghost,
[data-theme="dark"] .deposit-view-row--context .btn.secondary{
  color:var(--text);border-color:var(--border-strong);background:transparent
}
[data-theme="dark"] .deposit-view-row--context .list-row-menu__summary{color:var(--text);border-color:var(--border-strong)}
.actions{display:flex;gap:.55rem;margin-top:.85rem;flex-wrap:wrap}
.status{font-weight:600}
form{margin:0}
ul{padding-left:1rem}

/* ── Menu grid (dashboard) ────────────── */
.menu-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.5rem;margin-top:.75rem}
.menu-grid .btn,.menu-grid a.btn{justify-content:center;padding:.48rem .8rem;font-size:.79rem}

/* ── Doc grid (invoices panel) ────────── */
.doc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:.85rem;margin-top:.85rem;min-width:0;width:100%}
.doc-col{border:1px solid var(--border);border-radius:var(--radius);padding:1rem;background:var(--surface-2)}
.doc-list{display:grid;gap:.55rem;margin-top:.65rem}
.doc-row{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:.6rem .75rem}
.doc-meta{color:var(--muted);font-size:.78rem;margin-top:.15rem}
.invoice-doc-panel{margin-bottom:.75rem;padding:.7rem .85rem}
.invoice-doc-panel__summary{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.45rem .75rem;cursor:pointer;list-style:none}
.invoice-doc-panel__summary::-webkit-details-marker{display:none}
.invoice-doc-panel__summary::marker{content:""}
.invoice-doc-panel__summary-main{display:grid;gap:.12rem;min-width:0;padding-left:1.15rem;position:relative}
.invoice-doc-panel__summary-main::before{content:"";position:absolute;left:0;top:.35rem;width:.45rem;height:.45rem;border-right:2px solid var(--text-2);border-bottom:2px solid var(--text-2);transform:rotate(45deg);transition:transform .15s ease}
.invoice-doc-panel[open] .invoice-doc-panel__summary-main::before{top:.45rem;transform:rotate(225deg)}
.invoice-doc-panel__title{font-size:1rem;font-weight:780;color:var(--text);line-height:1.2}
.invoice-doc-panel__summary .hint{margin:0;font-size:.78rem}
.invoice-doc-panel__summary-actions{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}
.invoice-doc-panel .panel-title{margin-bottom:.45rem;align-items:center}
.invoice-doc-panel .panel-title h3{margin:0;font-size:.88rem}
.invoice-doc-panel__cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.55rem;margin-top:.55rem}
.invoice-doc-panel .doc-col{padding:.55rem .65rem}
.invoice-doc-panel .doc-list{gap:.4rem;margin-top:.4rem}
.invoice-doc-panel .doc-row{padding:.4rem .55rem}
.invoice-doc-panel__empty{margin:.35rem 0 0}
a.card.kpi{text-decoration:none;color:inherit;transition:border-color .12s,box-shadow .12s;cursor:pointer}
a.card.kpi:hover{border-color:#93c5fd;box-shadow:var(--shadow-sm);text-decoration:none;color:inherit}
a.card.kpi:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
a.card.kpi.is-active{border-color:#93c5fd;box-shadow:inset 0 0 0 1px rgba(37,99,235,.12);background:var(--primary-soft)}

/* ── Lightweight analytics ────────────── */
.metric-row{display:grid;grid-template-columns:150px 1fr auto;gap:.75rem;align-items:center;margin:.45rem 0}
.metric-track{height:9px;border-radius:999px;background:var(--border-strong);overflow:hidden}
.metric-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--primary),var(--accent))}
.metric-fill.success{background:linear-gradient(90deg,#22c55e,#16a34a)}
.metric-fill.warn{background:linear-gradient(90deg,#f59e0b,#d97706)}
.metric-fill.danger{background:linear-gradient(90deg,#ef4444,#dc2626)}
.insight-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1rem}
.panel-title{display:flex;justify-content:space-between;gap:.75rem;align-items:flex-start;margin-bottom:.75rem}
.panel-title h2{margin:0}.panel-title p{margin:.2rem 0 0}

/* ── Web publication flow banner ─────── */
.web-pub-flow{
  display:flex;align-items:center;gap:.35rem;margin-bottom:1rem;padding:.55rem .65rem;
  background:linear-gradient(180deg,#fff,#f8fafc);border:1px solid #cbd5e1;border-radius:var(--radius);
  box-shadow:var(--shadow-sm);flex-wrap:wrap;
  /* Isla clara: en dark --text/#f1f5f9 sobre blanco era ilegible */
  --text:#0f172a;--text-2:#475569;--muted:#475569;--muted-2:#64748b;
  --primary:#2563eb;--primary-soft:#dbeafe;--border:#e2e8f0;
  color:var(--text);
}
.web-pub-flow__step{display:flex;align-items:center;gap:.55rem;padding:.45rem .65rem;border-radius:var(--radius-sm);flex:1 1 150px;min-width:0;text-decoration:none;color:var(--text);border:1px solid transparent;background:transparent;transition:background .12s,border-color .12s,box-shadow .12s}
a.web-pub-flow__step:hover{background:#f1f5f9;border-color:var(--border);text-decoration:none;color:var(--text)}
.web-pub-flow__step--active{background:var(--primary-soft);border-color:#93c5fd;box-shadow:inset 0 0 0 1px rgba(37,99,235,.08);cursor:default;color:#1e3a8a}
.web-pub-flow__step--active .web-pub-flow__label strong{color:#1e3a8a}
.web-pub-flow__step--active .web-pub-flow__label span{color:#1d4ed8}
.web-pub-flow__icon{display:flex;align-items:center;justify-content:center;width:2.1rem;height:2.1rem;border-radius:999px;flex-shrink:0;background:#e2e8f0;color:#334155}
.web-pub-flow__step--active .web-pub-flow__icon{background:var(--primary);color:#fff}
.web-pub-flow__label{display:flex;flex-direction:column;line-height:1.2;min-width:0}
.web-pub-flow__label strong{font-size:.82rem;font-weight:800;letter-spacing:-.01em;color:var(--text)}
.web-pub-flow__label span{font-size:.72rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.web-pub-flow__sep{display:flex;align-items:center;justify-content:center;color:var(--muted-2);flex-shrink:0;padding:0 .05rem}
@media(max-width:960px){.web-pub-flow__sep{display:none}.web-pub-flow__step{flex:1 1 calc(50% - .35rem)}}
@media(max-width:520px){.web-pub-flow__step{flex:1 1 100%}}

/* ── Entity/product pages ─────────────── */
.entity-hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1rem;align-items:start;margin-bottom:1rem}
/* La columna de herramientas se queda con el espacio sobrante: el buscador manda */
.entity-hero--compact{margin-bottom:.55rem;gap:.65rem 1rem;grid-template-columns:minmax(11rem,auto) minmax(0,1fr);align-items:center}
/* La columna de herramientas se queda con el espacio sobrante: el buscador manda (estilos en .list-hd-tools / .entity-hero__tools) */
.entity-hero--compact .entity-title{font-size:1.28rem}
.entity-hero--compact .entity-meta{margin-top:.35rem}
.entity-title{font-size:1.55rem;font-weight:850;line-height:1.12;letter-spacing:-.04em;margin:0}
.entity-meta{display:flex;gap:.45rem;flex-wrap:wrap;margin-top:.55rem}
.books-catalog-kpis{flex-wrap:wrap;row-gap:.35rem}
.premium-layout{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:1rem;align-items:start}
.side-rail{display:grid;gap:1rem;position:sticky;top:calc(var(--topbar-h) + 1rem)}
.section-kicker{font-size:.68rem;font-weight:850;letter-spacing:.095em;text-transform:uppercase;color:var(--muted);margin-bottom:.25rem}
/* Franja de eje/SKU: superficie temática (no #fff) — en dark el label --text-2 sobre blanco era ilegible */
.field-card{border:1px solid var(--border);border-radius:var(--radius);padding:1rem;background:var(--surface-2);color:var(--text)}
.field-card>label,.field-card .field>label{color:var(--text-2)}
.field-card .hint,.field-card .muted{color:var(--text-2)}
/* Editor de variantes/SKU (fases 70/71): anchos semánticos, antes style="…px" inline. */
.axis-tbl .axis-th-actions{width:1%;white-space:nowrap}
.axis-tbl .axis-in-label{width:100%;min-width:120px}
.axis-tbl .axis-in-swatch{width:100%;min-width:90px;max-width:110px}
.axis-tbl .axis-in-sort{width:100%;max-width:80px}
.axis-file-cover{max-width:280px}
.sku-file-main{max-width:220px;font-size:.8rem}
.sku-file-thumb{max-width:100%;font-size:.72rem}
.sku-in-alt{width:100%;padding:.24rem .35rem;font-size:.72rem;box-sizing:border-box}
.sku-in-ean{min-width:130px}
.sku-in-title{min-width:240px}
/* input[type=…]{width:100%} es 0,1,1: hay que empatar o superar con el elemento. */
input.sku-in-price{width:5.5rem;max-width:5.5rem;text-align:right;box-sizing:border-box}
input.sku-in-stock{width:4.5rem;max-width:4.5rem;text-align:right;box-sizing:border-box}
/* Editor de ejes (fase 70): cabecera de alta/edición de eje en línea. */
.axis-f-grow{flex:1;min-width:120px;margin-bottom:0}
.axis-f-kind{margin-bottom:0;min-width:120px}
.axis-f-sort{max-width:90px;margin-bottom:0}
/* Punteo bancario (fase 123): id corto en línea; sin esto el input[type=number]
   a width:100% empuja el botón «Casar» fuera del .tbl-wrap y se corta. */
td.bank-line-actions{width:1%;white-space:nowrap;vertical-align:middle}
td.bank-line-actions>form{display:inline-flex;align-items:center;gap:.35rem;margin:0 .35rem 0 0;max-width:100%;vertical-align:middle}
.list-row-menu__form--id{display:flex;align-items:center;gap:.35rem;padding:.35rem .45rem;margin:0;box-sizing:border-box}
.list-row-menu__form--id .bank-match-id{flex:1 1 auto;min-width:5.5rem}
.list-row-menu__form--id .list-row-menu__item{width:auto;flex:0 0 auto}
input.bank-match-id{
  display:inline-block;width:7rem;max-width:7rem;min-width:5.5rem;
  box-sizing:border-box;vertical-align:middle;flex:0 0 auto
}
input.bank-match-id.bank-match-id--forecast{width:8rem;max-width:8rem}
/* Sustitución / abono de factura: campos fiscales a todo el ancho de su rejilla. */
.fiscal-grid input,.fiscal-grid .field-control{width:100%}
input.inv-field-remarks{width:100%;max-width:36rem;box-sizing:border-box}
input.inv-field-tin{width:100%;max-width:16rem;box-sizing:border-box}
input.inv-field-name{width:100%;max-width:24rem;box-sizing:border-box}
/* Franja de checkbox: superficie temática (no #fff) — en dark el texto --text sobre blanco era ilegible */
.check-row{display:flex;align-items:flex-start;gap:.65rem;padding:.7rem .8rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text);font-size:.84rem}
.check-row label{margin:0;font-size:.84rem;color:inherit}.check-row input{margin-top:.15rem}
/* Superficie temática: en dark --text/#f1f5f9 sobre #f8fafc era ilegible */
.read-panel{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);padding:.85rem;white-space:pre-wrap;font-size:.84rem;max-height:320px;overflow:auto;color:var(--text)}
.read-panel--html{white-space:normal;line-height:1.55}
.read-panel--html p,.read-panel--html h3,.read-panel--html h4,.read-panel--html ul,.read-panel--html ol{margin:.4em 0;color:inherit}
.read-panel--html a{color:var(--primary)}
/* ── Book edit compact (paridad Access) ── */
.book-edit-page{display:flex;flex-direction:column;gap:.45rem;height:calc(100vh - var(--topbar-h) - 5.25rem);max-height:calc(100vh - var(--topbar-h) - 5.25rem);min-height:0;overflow:visible}
.book-edit-jump{flex-shrink:0;position:relative;z-index:40;min-width:0;width:50%;max-width:36rem}
.book-edit-jump__form{width:100%;margin:0}
.book-edit-jump .list-hd-search .field--grow{max-width:none;flex:1 1 16rem;min-width:10rem;position:relative}
.book-edit-compact{display:flex;flex-direction:column;gap:.5rem;flex:1 1 auto;min-height:0;height:auto;max-height:none;overflow:hidden}
.book-edit-compact > header,.book-edit-compact > nav.book-edit-tabs,.book-edit-compact > .ok,.book-edit-compact > .error{flex-shrink:0}
.book-edit-compact > form#book-edit-form{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
.book-edit-compact > form#book-edit-form > .book-edit-panel:not([hidden]){flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch;padding-bottom:1rem!important}
.book-edit-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.55rem;align-items:end;padding:.55rem .65rem;background:linear-gradient(180deg,#fef9c3,#fef08a);border:1px solid #eab308;border-radius:var(--radius-sm)}
/* Cabecera amarilla (isla clara): badges con tinta oscura — en dark --warn/#fbbf24 sobre amarillo era ilegible */
.book-edit-header .badge.green,.book-edit-header .badge.ok{background:#dcfce7;color:#14532d;border-color:#86efac}
.book-edit-header .badge.red,.book-edit-header .badge.danger{background:#fee2e2;color:#991b1b;border-color:#fca5a5}
.book-edit-header .badge.amber,.book-edit-header .badge.warn{background:#fff7ed;color:#9a3412;border-color:#fdba74}
.book-edit-header .badge.blue,.book-edit-header .badge.info{background:#dbeafe;color:#1e40af;border-color:#93c5fd}
.book-edit-header .badge.gray{background:#e2e8f0;color:#0f172a;border-color:#94a3b8}
.book-edit-header .badge.purple{background:#ede9fe;color:#5b21b6;border-color:#c4b5fd}
.book-edit-compact--oop .book-edit-header{background:linear-gradient(180deg,#fee2e2,#fecaca);border-color:#f87171}
.book-edit-compact--ebook .book-edit-header{background:linear-gradient(180deg,#ede9fe,#c4b5fd);border-color:#7c3aed}
.book-edit-compact--ebook .book-edit-header .book-edit-mini-label{color:#5b21b6}
.book-edit-header-main{min-width:0;display:grid;grid-template-columns:max-content minmax(12rem,1fr) max-content;gap:.5rem;align-items:end}
.book-edit-header-ids{display:grid;grid-template-columns:12rem 6.75rem 7.5rem;gap:.4rem;align-items:end;flex-shrink:0}
.book-edit-header-ids>div{min-width:0}
.book-edit-header-ids .book-edit-id-field,
.book-edit-header-ids .book-edit-class-select{
  width:100%;max-width:100%;box-sizing:border-box;min-width:0;
  height:2rem;min-height:2rem;max-height:2rem;
  padding:.2rem .42rem;font-size:.78rem;line-height:1.2
}
.book-edit-mini-label{font-size:.62rem;font-weight:850;text-transform:uppercase;letter-spacing:.06em;color:#713f12;margin-bottom:.12rem}
.book-edit-id-field{width:100%;padding:.3rem .42rem;font-size:.78rem}
.book-edit-title-wrap{min-width:0;overflow:hidden}
.book-edit-title-wrap .book-edit-title-input{
  width:100%;min-width:0;font-size:.95rem;font-weight:700;
  height:2rem;min-height:2rem;max-height:2rem;padding:.2rem .5rem;box-sizing:border-box;line-height:1.2;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap
}
.book-edit-class-pill{align-self:center;padding:.28rem .55rem;background:#fff;border:1px solid #ca8a04;border-radius:4px;font-size:.72rem;font-weight:800;color:#713f12}
.book-edit-class-select{min-width:0;width:100%;padding:.2rem .42rem;font-size:.78rem;font-weight:700}
.book-edit-class-select--ebook{font-size:.78rem;font-weight:800;color:#dc2626;border-color:#f87171;background:#fff1f2}
.book-edit-margin-field{font-weight:800;background:#fef9c3;border-color:#eab308;color:#713f12;text-align:right}
.book-edit-gallery-upload{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.35rem;align-items:center;margin:.45rem 0 0}
.book-edit-cover-upload{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.35rem;align-items:center;margin:.45rem 0 0}
.book-edit-cover-upload input[type=file]{grid-column:1/-1;width:100%;min-width:0;max-width:100%;font-size:.78rem}
.book-edit-cover-upload input[type=text]{min-width:0;width:100%;max-width:none;padding:.3rem .45rem;font-size:.75rem}
.book-edit-gallery-upload input[type=file]{width:100%;min-width:0;max-width:100%;font-size:.78rem}
.book-edit-gallery-sort{display:flex;flex-direction:column;gap:.3rem;margin-top:.45rem}
.book-edit-gallery-item{display:grid;grid-template-columns:auto auto minmax(4.5rem,5.5rem) auto;grid-template-areas:"grip thumb type del" "url url url url";gap:.3rem .35rem;align-items:center;padding:.35rem .4rem;border:1px solid var(--border);border-radius:4px;background:#fff;cursor:grab}
.book-edit-gallery-item.dragging{opacity:.55;background:#fef9c3}
.book-edit-gallery-grip{color:var(--muted);user-select:none;grid-area:grip}
.book-edit-gallery-thumb{width:36px;height:48px;object-fit:contain;border:1px solid var(--border);border-radius:3px;background:#fff;grid-area:thumb}
.book-edit-gallery-thumb-empty{width:36px;text-align:center;grid-area:thumb;font-size:.72rem;color:var(--muted)}
.book-edit-gallery-type{width:100%;min-width:0;padding:.22rem .35rem;font-size:.72rem;grid-area:type}
.book-edit-gallery-url-input{grid-area:url;width:100%;min-width:0;padding:.28rem .4rem;font-size:.68rem;font-family:ui-monospace,Consolas,monospace;overflow-x:auto}
.book-edit-gallery-item .btn.danger{grid-area:del;justify-self:end;padding:.2rem .45rem}
.book-edit-check-inline{display:flex;align-items:flex-end;padding-bottom:.15rem}
.book-edit-check-inline label{display:flex;align-items:center;gap:.3rem;margin:0;font-size:.76rem;font-weight:600}
.book-edit-gallery-url{max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.72rem}
.book-edit-badges{display:flex;gap:.25rem;flex-wrap:wrap;align-items:center;align-self:end;justify-content:flex-end;padding-bottom:.3rem;flex-shrink:0;min-width:0;max-width:9.5rem;overflow:hidden}
.book-edit-badges .badge{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.book-edit-header-actions{display:flex;gap:.35rem;flex-shrink:0;align-items:center;align-self:end;padding-bottom:.3rem}
.book-edit-tabs{display:flex;gap:.12rem;flex-wrap:wrap;align-items:flex-end;margin:0;border-bottom:2px solid #eab308;background:#fffbeb;padding:.35rem .25rem 0}
.book-edit-compact--oop .book-edit-tabs{border-bottom-color:#f87171;background:#fff1f2}
.book-edit-compact--oop .book-edit-tabs button.book-edit-tab{color:#991b1b}
.book-edit-compact--oop .book-edit-tabs button.book-edit-tab:hover{background:#fee2e2;color:#7f1d1d}
.book-edit-compact--oop .book-edit-tabs button.book-edit-tab.active{background:#fecaca;border-color:#f87171;border-bottom-color:#fecaca;color:#450a0a}
.book-edit-compact--ebook .book-edit-tabs{border-bottom-color:#7c3aed;background:#ede9fe}
.book-edit-compact--ebook .book-edit-tabs button.book-edit-tab{color:#5b21b6}
.book-edit-compact--ebook .book-edit-tabs button.book-edit-tab:hover{background:#ddd6fe;color:#4c1d95}
.book-edit-compact--ebook .book-edit-tabs button.book-edit-tab.active{background:#c4b5fd;border-color:#7c3aed;border-bottom-color:#c4b5fd;color:#3b0764}
.book-edit-tabs button.book-edit-tab{display:inline-flex;align-items:center;gap:0;margin:0;padding:.34rem .65rem;border:1px solid transparent;border-bottom:0;border-radius:6px 6px 0 0;background:transparent;color:#713f12;font-size:.76rem;font-weight:700;line-height:1.4;cursor:pointer;box-shadow:none;transform:none;white-space:nowrap;font-family:var(--font);-webkit-appearance:none;appearance:none}
.book-edit-tabs button.book-edit-tab:hover{background:#fef9c3;color:#713f12;transform:none;box-shadow:none}
.book-edit-tabs button.book-edit-tab.active{background:#fde047;border-color:#eab308;border-bottom:2px solid #fde047;color:#422006;margin-bottom:-2px;position:relative;z-index:1}
.book-edit-panel{padding:.55rem .65rem!important;margin:0}
.book-edit-datos-layout{display:grid;grid-template-columns:minmax(0,1fr) 118px;gap:.6rem;align-items:start}
.book-edit-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:.45rem .55rem;align-items:start}
.book-edit-datos-layout .book-edit-cols{grid-template-columns:minmax(260px,1.5fr) minmax(150px,.85fr) minmax(125px,.7fr) minmax(190px,1.1fr) minmax(100px,.65fr);gap:.45rem .55rem}
.book-edit-col.span-2{grid-column:span 2}
.book-edit-stock-layout{display:grid;gap:.4rem;align-items:start}
.book-edit-stock-summary{display:grid;grid-template-columns:minmax(150px,1fr) minmax(170px,1.05fr) minmax(220px,1.15fr) minmax(180px,1.05fr);gap:.4rem .55rem;align-items:start}
/* Sticky por encima del panel; opaco para que el scroll no traspase. */
.book-edit-stock-moves{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .65rem;padding:.35rem .45rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fffbeb;position:sticky;top:0;z-index:12;box-shadow:0 2px 10px rgba(15,23,42,.1)}
.book-edit-stock-moves .book-edit-group-label{margin:0;flex:0 0 auto}
.book-edit-stock-moves .book-edit-toolbar-links{margin:0;flex:1 1 auto}
.book-edit-stock-moves .hint{margin:0;flex:1 1 100%}
/* z-index:1 aísla pickers internos — sin esto z-index:5 del picker pintaba sobre el sticky al scroll. */
.book-edit-stock-ops{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.95fr);gap:.4rem .65rem;align-items:start;padding:.45rem .5rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text);position:relative;z-index:1}
.book-edit-stock-ops .hint,.book-edit-stock-ops .muted{color:var(--text-2)}
.book-edit-stock-ops .book-edit-col{min-width:0}
.book-edit-stock-ops:has(.supplier-picker-suggest:not([hidden])){z-index:20}
.book-edit-stock-layout > .book-edit-bom-details{margin:0}
.book-edit-group-label--spaced{margin-top:.45rem}
.book-edit-stock-min,.book-edit-stock-rack{margin-top:.3rem}
.book-edit-purchase-currencies{margin-top:.35rem;display:inline-flex}
.book-edit-deposit-balances{margin-top:.3rem}
.book-edit-bom-table{margin-top:.4rem}
.book-edit-bom-add{margin-top:.45rem}
.book-edit-stock-layout .book-edit-col-stock .book-edit-kv td:last-child{text-align:right;font-variant-numeric:tabular-nums}
/* Anchos semánticos en ficha libro (evita inputs al 100% de columna) */
.book-edit-field-cell--qty{max-width:5.25rem}
.book-edit-field-cell--money{max-width:8rem}
.book-edit-field-cell--pct{max-width:5.25rem}
.book-edit-field-cell--id{max-width:8rem}
.book-edit-field-cell--rack{max-width:7rem}
.book-edit-field-cell--customer{max-width:10rem}
.book-edit-field-cell--customer-picker{max-width:22rem;position:relative;overflow:visible}
.book-edit-field-cell--customer-picker .supplier-picker{width:100%}
.book-edit-client-deposit{overflow:visible;position:relative}
.book-edit-field-cell--reason{max-width:14rem}
.book-edit-field-cell--currency{max-width:9rem}
.book-edit-field--num{text-align:right;font-variant-numeric:tabular-nums}
.book-edit-purchase-grid{align-items:start}
.book-edit-purchase-grid>div{min-width:0;max-width:100%}
.book-edit-col-purchase{min-width:0}
.book-edit-stock-layout .form-grid.dense input,
.book-edit-stock-layout .form-grid.dense select,
.book-edit-datos-layout .form-grid.dense input:not([type=checkbox]):not([type=file]),
.book-edit-datos-layout .form-grid.dense select{
  height:2rem;min-height:2rem;max-height:2rem;box-sizing:border-box;padding-top:0;padding-bottom:0;line-height:1.2;max-width:100%
}
.book-edit-datos-layout .admin-date-field{max-width:9.5rem}
.book-edit-field-cell--date{max-width:9.5rem}
.book-edit-field-cell--ref{max-width:9rem}
.book-edit-field-cell--select{max-width:9rem}
.book-edit-field-cell--year{max-width:5.5rem}
.book-edit-field-cell--isbn{max-width:12rem}
.book-edit-exchange-cell{display:flex;flex-direction:column;gap:.22rem;max-width:8rem}
.book-edit-exchange-cell .btn{
  height:1.85rem;min-height:1.85rem;width:100%;max-width:100%;padding:.15rem .35rem;line-height:1.1;white-space:nowrap;box-sizing:border-box;font-size:.68rem
}
/* Botones de ficha: más contraste que ghost translúcido sobre fondo blanco */
.book-edit-compact a.btn.ghost,.book-edit-compact button.btn.ghost,.book-edit-compact .btn.ghost{
  background:#e2e8f0;border:1px solid #94a3b8;color:#1e293b;box-shadow:none
}
.book-edit-compact a.btn.ghost:hover,.book-edit-compact button.btn.ghost:hover,.book-edit-compact .btn.ghost:hover{
  background:#cbd5e1;border-color:#64748b;color:#0f172a
}
.book-edit-compact a.btn.secondary,.book-edit-compact button.btn.secondary,.book-edit-compact .btn.secondary{
  background:#334155;color:#fff;border:1px solid #1e293b;box-shadow:none
}
.book-edit-compact a.btn.secondary:hover,.book-edit-compact button.btn.secondary:hover,.book-edit-compact .btn.secondary:hover{
  background:#1e293b;color:#fff
}
.book-edit-group-label{font-size:.64rem;font-weight:850;text-transform:uppercase;letter-spacing:.05em;color:var(--text-2);margin:0 0 .25rem}
.book-edit-field-hint{margin:0;font-size:.68rem;line-height:1.35;color:var(--text-2)}
.book-edit-field-hint strong{font-weight:700;color:var(--text)}
.book-edit-picker-fields{display:grid;grid-template-columns:5.75rem minmax(0,1fr);grid-template-rows:auto auto;column-gap:.55rem;row-gap:.08rem;align-items:start}
/* Tokens (no #334155): en dark mode el slate fijo era ilegible sobre fondo navy */
.book-edit-picker-fields>.book-edit-picker-label{margin:0;font-size:.66rem;font-weight:780;color:var(--text-2);line-height:1.05}
.book-edit-picker-fields>.book-edit-picker-label:first-of-type{grid-column:1;grid-row:1}
.book-edit-picker-fields>.book-edit-picker-label:nth-of-type(2){grid-column:2;grid-row:1}
.book-edit-picker-fields>.book-edit-id-field{grid-column:1;grid-row:2;width:100%;align-self:center}
.book-edit-picker-fields>.supplier-picker{grid-column:2;grid-row:2;min-width:0;width:100%;align-self:center}
.book-edit-picker-fields .book-edit-id-field,.book-edit-picker-fields .supplier-picker-input,.book-edit-picker-fields .supplier-picker-current{min-height:2.15rem;box-sizing:border-box}
.book-edit-authors-list{display:flex;flex-direction:column;gap:.45rem;margin-top:.2rem}
.book-edit-author-row{display:flex;gap:.35rem;align-items:flex-start}
.book-edit-author-row .supplier-picker{flex:1;min-width:0}
.book-edit-author-row .supplier-picker-clear{display:none}
.book-edit-author-remove{flex:0 0 auto;margin-top:.15rem;padding-inline:.45rem}
.book-edit-ops-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:.75rem 1rem;margin-top:.75rem;padding-top:.6rem;border-top:1px solid var(--border);align-items:start}
.book-edit-bulk-supplier-block{margin:0;padding:0;border:0}
.book-edit-bulk-supplier-hint{margin:0 0 .45rem}
.book-edit-bulk-supplier-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.35rem .55rem;align-items:end;max-width:none;padding:.5rem .6rem;border:1px solid #e2e8f0;border-radius:var(--radius-sm);background:#fffbeb;position:relative;overflow:visible}
.book-edit-bulk-supplier-label{grid-column:1/-1;font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:#713f12;margin:0}
.book-edit-bulk-supplier-picker{min-width:0;position:relative;z-index:2}
.book-edit-bulk-supplier-picker .supplier-picker{width:100%;max-width:none}
.book-edit-bulk-supplier-submit{white-space:nowrap;align-self:end;position:relative;z-index:1}
@media(max-width:900px){.book-edit-ops-row{grid-template-columns:1fr}}
.form-grid.dense{grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:.32rem .4rem}
.form-grid.dense .span-2{grid-column:1/-1}
.form-grid.dense label{font-size:.66rem;margin-bottom:.1rem;line-height:1.05;color:var(--text-2)}
.form-grid.dense input:not([type=checkbox]):not([type=radio]),.form-grid.dense select,.form-grid.dense textarea{padding:.3rem .42rem;font-size:.76rem;min-height:2rem}
.book-edit-cover-col{display:grid;gap:.3rem;justify-items:center}
.book-edit-cover-img{width:100%;max-height:150px;object-fit:contain;border:1px solid var(--border);background:#fff;border-radius:4px}
.book-edit-cover-empty{width:100%;height:135px;display:grid;place-items:center;border:1px dashed #cbd5e1;background:#f8fafc;font-size:.72rem;color:var(--muted);border-radius:4px}
.book-edit-web-preview-note{margin:0;max-width:11rem;font-size:.68rem;line-height:1.25;text-align:center;color:#b45309}
.book-edit-web-preview-note--ok{color:var(--ok)}
/* Bloque Ficha (auditoría) — compartido con documentos Access */
.doc-ficha{margin-top:.45rem;max-width:36rem;width:100%;box-sizing:border-box;padding:.4rem .55rem;background:var(--surface-2);border:1px solid var(--border);border-radius:4px;color:var(--text);grid-column:1/-1}
.doc-ficha__title{margin:0 0 .25rem;font-size:.72rem;font-weight:780;color:var(--text);text-transform:uppercase;letter-spacing:.02em}
.doc-ficha__cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:.2rem .9rem;min-width:0}
.doc-ficha__col{display:grid;gap:.12rem;min-width:0}
.doc-ficha__row{display:grid;grid-template-columns:7.25rem minmax(0,1fr);gap:.35rem;align-items:baseline;font-size:.76rem;line-height:1.3}
.doc-ficha__k{color:var(--text-2);font-weight:700;font-size:.72rem;white-space:nowrap}
.doc-ficha__v{color:var(--text);font-variant-numeric:tabular-nums;min-width:0;overflow-wrap:break-word;word-break:normal}
@media(max-width:640px){.doc-ficha__cols{grid-template-columns:1fr}}
[data-theme="dark"] .doc-ficha{background:var(--surface-2);border-color:var(--border);color:var(--text)}
[data-theme="dark"] .doc-ficha__title,[data-theme="dark"] .doc-ficha__v{color:var(--text)}
[data-theme="dark"] .doc-ficha__k{color:var(--text-2)}
.book-edit-flags{display:flex;gap:.45rem .75rem;flex-wrap:wrap;margin-top:.45rem;padding:.35rem .45rem;background:#f8fafc;border:1px solid var(--border);border-radius:4px;font-size:.76rem}
.book-edit-flags label{display:flex;align-items:center;gap:.35rem;margin:0;font-weight:600}
.book-edit-edition-flags{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .7rem;margin-top:.1rem;padding:.35rem .45rem;background:#f8fafc;border:1px solid var(--border);border-radius:4px}
.book-edit-edition-flags>label{display:inline-flex;align-items:center;gap:.35rem;margin:0;font-size:.76rem;font-weight:600;color:var(--text);line-height:1.2}
.book-edit-edition-flags input[type=checkbox],
.book-edit-flags input[type=checkbox]{
  width:1.05rem;height:1.05rem;min-width:1.05rem;min-height:1.05rem;max-width:1.05rem;max-height:1.05rem;
  padding:0;aspect-ratio:1;box-sizing:border-box;flex-shrink:0;
}
.book-edit-edition-flags__hint{font-weight:500;font-size:.68rem}
.book-edit-format-links{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.35rem;margin-left:auto}
.book-edit-flag-agotado{color:#dc2626;font-weight:800;font-size:.78rem}
.book-edit-flag-oop{color:#dc2626;font-weight:800}
.book-edit-create-ebook{display:flex;align-items:center;padding-top:.15rem}
.book-catalog-row--oop td{background:#fff1f2}
[data-theme="dark"] .book-catalog-row--oop td{background:rgba(248,113,113,.16)}
[data-theme="dark"] .book-catalog-row--oop:hover td,
[data-theme="dark"] .book-catalog-row--oop:hover td.list-actions{background:rgba(248,113,113,.24)}
.book-catalog-type{white-space:nowrap;font-size:.78rem;color:var(--muted)}
.catalog-sortable-table th a.catalog-sort{display:inline-flex;align-items:center;gap:.15rem;color:inherit;text-decoration:none;font-weight:700}
.catalog-sortable-table th a.catalog-sort:hover{text-decoration:underline}
.catalog-sortable-table th a.catalog-sort--active{color:#1d4ed8}
.book-edit-notes{min-height:3.5rem;resize:vertical;font-size:.76rem}
.book-edit-kv{width:100%;font-size:.76rem;border-collapse:collapse}
.book-edit-kv th,.book-edit-kv td{padding:.22rem .36rem;border-bottom:1px solid var(--border);text-align:left}
.book-edit-kv th{color:var(--muted);font-weight:700;width:42%}
.book-edit-kv-total td,.book-edit-kv-total th{font-weight:800;color:var(--primary)}
.book-edit-stock-breakdown{margin-top:0;table-layout:auto}
.book-edit-stock-breakdown th{width:1%;white-space:nowrap;font-size:.68rem;line-height:1.2;padding-right:.45rem}
.book-edit-stock-breakdown td:last-child{width:2.4rem;padding-left:.25rem}
.book-edit-stock-th-nowrap{font-size:.66rem;letter-spacing:-.015em}
.book-edit-stock-sub th{font-size:.66rem;text-transform:uppercase;letter-spacing:.03em;color:#64748b;border-bottom:none;padding-top:.42rem}
.book-edit-stock-calc td:last-child{font-weight:800;background:#fef9c3;color:#713f12;text-align:right}
.book-edit-stock-calc th{color:#854d0e}
.book-edit-stock-total td:last-child{color:#b91c1c;background:#fef9c3}
.book-edit-stock-total th{color:#b91c1c}
.book-edit-stock-owed-table{margin-top:.5rem}
.book-edit-stock-owed td:last-child{font-weight:800;background:#fff7ed;color:#c2410c;text-align:right}
.book-edit-stock-owed th{color:#c2410c}
.book-edit-stock-owed-hint{margin:.2rem 0 0;font-size:.66rem}
.book-edit-client-deposit-actions{display:flex;gap:.4rem;flex-wrap:wrap}
.book-edit-toolbar-links{display:flex;gap:.35rem;flex-wrap:wrap;margin-top:.35rem}
.book-edit-inline-form{display:inline-flex;gap:.35rem;align-items:center;margin:0}
.book-edit-panel[hidden]{display:none!important}
.book-edit-panel--etiquetas:not([hidden]){display:flex;flex-direction:column;overflow:auto;gap:0}
.book-edit-tag-hint{margin:0 0 .45rem;flex-shrink:0}
.book-edit-tag-hint-mobile{display:none}
.book-edit-tag-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem;flex:1 1 auto;min-height:min(42vh,18rem);align-items:stretch;overflow:hidden}
.book-edit-panel--etiquetas .book-edit-ai-bar{flex-shrink:0}
.book-edit-ai-proposals{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:.45rem;align-items:start;flex-shrink:0;margin:0 0 .5rem;max-height:min(26vh,12.5rem);overflow-x:hidden;overflow-y:auto}
.book-edit-ai-proposals:not(:has(.book-edit-ai-proposal:not([hidden]))){display:none;margin:0;max-height:0}
.book-edit-ai-proposal{margin:0;padding:.45rem .55rem;border:1px solid #c7d2fe;border-radius:4px;background:#f8fafc;color:#0f172a;min-width:0}
.book-edit-ai-proposal__title{margin:0 0 .3rem;font-size:.76rem;font-weight:700;color:#0f172a}
.book-edit-ai-proposal__status{margin:0 0 .3rem}
.book-edit-ai-proposal .hint,.book-edit-ai-proposal__status{color:#475569}
.book-edit-ai-proposal__list{display:flex;flex-direction:column;gap:.22rem;margin:0 0 .4rem;max-height:5.5rem;overflow-y:auto}
.book-edit-ai-proposal__item{display:flex;align-items:flex-start;gap:.4rem;font-size:.76rem;line-height:1.3;color:#0f172a}
.book-edit-ai-proposal__item input{margin-top:.15rem;flex-shrink:0}
.book-edit-ai-proposal__actions{display:flex;gap:.4rem;flex-wrap:wrap}
.book-edit-tag-box{display:flex;flex-direction:column;gap:.35rem;border:1px solid var(--border);border-radius:4px;background:#fff;padding:.45rem .5rem .5rem;min-height:0}
.book-edit-tag-selected{display:flex;flex-wrap:wrap;gap:.28rem;align-content:flex-start;min-height:2.35rem;max-height:6.5rem;overflow-y:auto;padding:.35rem .4rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:4px;flex-shrink:0}
.book-edit-tag-empty{font-size:.72rem;color:#94a3b8;font-style:italic;line-height:1.5}
button.book-edit-tag-chip,button[type=button].book-edit-tag-chip{display:inline-flex;align-items:center;gap:.28rem;max-width:100%;padding:.18rem .42rem .18rem .48rem;border:1px solid var(--tag-chip-border);border-radius:6px;background:var(--tag-chip-bg);color:var(--tag-chip-text);font-size:.72rem;font-weight:500;line-height:1.25;cursor:pointer;text-align:left;white-space:normal;justify-content:flex-start;box-shadow:none;transform:none;font-family:var(--font);-webkit-appearance:none;appearance:none}
button.book-edit-tag-chip:hover,button[type=button].book-edit-tag-chip:hover{background:var(--tag-chip-hover-bg);border-color:#b8c5d6;color:var(--tag-chip-text);transform:none;box-shadow:none;text-decoration:none}
button.book-edit-tag-chip::after,button[type=button].book-edit-tag-chip::after{content:'×';font-weight:700;font-size:.78rem;line-height:1;color:var(--muted);opacity:.85;flex-shrink:0}
button.book-edit-tag-chip:hover::after,button[type=button].book-edit-tag-chip:hover::after{color:#64748b}
.book-edit-tag-count{font-weight:700;color:var(--muted)}
.book-edit-tag-filter{width:100%;padding:.3rem .45rem;font-size:.74rem;border:1px solid #cbd5e1;border-radius:4px;flex-shrink:0}
.book-edit-tag-filter:focus{outline:2px solid #93c5fd;outline-offset:1px}
.book-edit-tag-list{max-height:10rem;overflow:auto;padding:.25rem}
.book-edit-tag-item{padding:.22rem .4rem;border-bottom:1px solid #f1f5f9;font-size:.78rem}
.book-edit-tag-select{width:100%;flex:1;min-height:10rem;height:100%;font-size:.76rem;padding:.25rem;border:1px solid #cbd5e1;border-radius:4px}
.book-edit-stock-mini{width:100%;font-size:.76rem;border-collapse:collapse}
.book-edit-stock-mini th,.book-edit-stock-mini td{padding:.18rem .28rem;border-bottom:1px solid var(--border);text-align:left}
.book-edit-stock-mini th{color:var(--muted);font-weight:700;width:48%}
.book-edit-stock-total td,.book-edit-stock-total th{font-weight:800;color:var(--primary)}
.book-edit-recursos-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.35fr);gap:.75rem;align-items:start}
.book-edit-recursos-media,.book-edit-recursos-text{min-width:0;max-width:100%}
.book-edit-recursos-media .form-grid.dense{
  width:100%;max-width:100%;min-width:0;
  grid-template-columns:minmax(0,1fr)
}
.book-edit-recursos-media .form-grid.dense > .full,
.book-edit-recursos-media .form-grid.dense > div{min-width:0;max-width:100%}
.book-edit-recursos-media .form-grid.dense input[type=text]{
  display:block;width:100%;min-width:0;max-width:100%;box-sizing:border-box
}
.book-edit-recursos-fields{grid-template-columns:minmax(0,1fr);gap:.55rem .65rem}
.book-edit-recursos-fields label{font-size:.68rem}
.book-edit-recursos-text .rich-wrap .rich-editor{min-height:11rem;max-height:min(52vh,560px)}
.book-edit-recursos-text .rich-wrap--compact .rich-editor{min-height:7rem;max-height:min(36vh,320px)}
.book-edit-ai-bar{display:flex;gap:.45rem;align-items:center;margin-bottom:.45rem;padding:.4rem .5rem;background:#eef2ff;border:1px solid #c7d2fe;border-radius:4px;color:#0f172a}
.book-edit-ai-bar .hint{color:#475569}
.book-edit-rich{min-height:7rem;resize:vertical}
.book-edit-text{min-height:4.5rem;resize:vertical}
.book-edit-text-sm{min-height:3.2rem;resize:vertical}
.read-panel.compact{max-height:14rem;font-size:.76rem;padding:.5rem}
.book-edit-legacy-ref summary{cursor:pointer;font-size:.78rem;font-weight:700;color:var(--muted)}
/* Tokens (no #fafafa): en dark --muted/#e2e8f0 sobre blanco era ilegible */
.book-edit-bom-details{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text)}
.book-edit-bom-summary{cursor:pointer;padding:.5rem .65rem;font-size:.78rem;font-weight:800;color:var(--primary);list-style:none;display:flex;align-items:center;gap:.35rem}
.book-edit-bom-summary::-webkit-details-marker{display:none}
.book-edit-bom-summary::before{content:'▸';font-size:.7rem;color:var(--muted);transition:transform .15s ease}
.book-edit-bom-details[open] > .book-edit-bom-summary::before{transform:rotate(90deg)}
.book-edit-bom-count{font-weight:600;color:var(--text-2)}
.book-edit-bom-body{padding:0 .65rem .65rem;border-top:1px solid var(--border)}
.book-edit-bom-body .hint,.book-edit-bom-body .muted{color:var(--text-2)}
.book-edit-footer{display:flex;gap:.45rem;flex-wrap:wrap;align-items:center;padding:.75rem .65rem;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);margin-top:auto;flex-shrink:0;z-index:15;box-shadow:0 -6px 18px rgba(15,23,42,.06);color:var(--text)}
.book-edit-footer-extra{display:flex;gap:.45rem;flex-wrap:wrap;align-items:center;padding:0 .15rem .35rem}
.book-edit-upload-form{display:inline-flex;gap:.35rem;align-items:center;margin:0}
.book-edit-footer-select{max-width:14rem;padding:.32rem .45rem;font-size:.75rem}
.book-edit-sku-current{background:#fef9c3!important}

/* ── Entity lookup picker (editorial, proveedor, libro) — paridad visual command-palette ── */
.supplier-picker{position:relative;width:100%}
.supplier-picker:has(.supplier-picker-suggest:not([hidden])){z-index:80}
.supplier-picker-current:not([hidden]){display:flex;align-items:center;gap:.4rem;padding:.38rem .5rem;border:1px solid var(--field-border);border-radius:var(--radius-sm);background:var(--field-bg);color:var(--text);min-height:2.15rem}
.supplier-picker-current[hidden],.supplier-picker-search[hidden]{display:none!important}
.supplier-picker-search:not([hidden]){display:block;position:relative;z-index:1}
.supplier-picker-label{flex:1;min-width:0;font-size:.82rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
button.supplier-picker-clear,button[type=button].supplier-picker-clear{display:inline-flex;align-items:center;justify-content:center;border:0;background:var(--surface-2);color:var(--text-2);width:1.45rem;height:1.45rem;border-radius:999px;cursor:pointer;font-size:.95rem;line-height:1;flex-shrink:0;box-shadow:none;transform:none;padding:0}
button.supplier-picker-clear:hover,button[type=button].supplier-picker-clear:hover{background:var(--badge-danger-bg);color:var(--danger);transform:none;box-shadow:none}
.supplier-picker-input{width:100%;padding:.38rem .5rem;font-size:.82rem;min-height:2.15rem}
/* Panel sugerencias: tokens (no #fff + --text claro en dark → ilegible) */
.supplier-picker-suggest{position:absolute;top:calc(100% + .3rem);left:0;right:0;z-index:90;display:grid;gap:.12rem;max-height:min(52vh,420px);overflow-y:auto;padding:.35rem;border:1px solid var(--border);border-radius:14px;background:var(--surface);color:var(--text);box-shadow:var(--shadow-2)}
.supplier-picker-suggest[hidden]{display:none!important;padding:0;border:0;box-shadow:none;margin:0}
.pf-search-field{position:relative;z-index:5}
.pf-search-field:has(.supplier-picker-suggest:not([hidden])){z-index:80}
.filter-bar:has(.pf-search-field .supplier-picker-suggest:not([hidden])){overflow:visible;position:relative;z-index:40}
.supplier-picker-status{margin:.15rem .45rem;font-size:.82rem;color:var(--text-2)}
button.supplier-picker-item,button[type=button].supplier-picker-item{display:grid;grid-template-columns:auto 1fr;gap:.65rem;align-items:center;width:100%;text-align:left;padding:.62rem .72rem;border:0;border-radius:10px;background:transparent;cursor:pointer;font:inherit;color:var(--text);box-shadow:none;transform:none;line-height:inherit;white-space:normal;justify-content:stretch}
button.supplier-picker-item:hover,button[type=button].supplier-picker-item:hover,button.supplier-picker-item:focus,button[type=button].supplier-picker-item:focus{background:#1d4ed8;color:#fff;outline:none;transform:none;box-shadow:none}
.supplier-picker-kind{font-size:.66rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--text-2);background:var(--surface-2);border:1px solid var(--border);border-radius:999px;padding:.18rem .45rem;white-space:nowrap;align-self:center}
.supplier-picker-body{min-width:0;display:grid;gap:.12rem}
button.supplier-picker-item strong.supplier-picker-item-title,button[type=button].supplier-picker-item strong.supplier-picker-item-title{display:block;font-size:.88rem;font-weight:700;line-height:1.25;color:inherit}
.supplier-picker-item-meta{display:block;font-size:.76rem;color:var(--text-2);margin-top:0;line-height:1.3}
button.supplier-picker-item:hover .supplier-picker-kind,button[type=button].supplier-picker-item:hover .supplier-picker-kind,button.supplier-picker-item:focus .supplier-picker-kind,button[type=button].supplier-picker-item:focus .supplier-picker-kind{background:rgba(255,255,255,.22);color:#fff;border-color:transparent}
button.supplier-picker-item:hover strong.supplier-picker-item-title,button[type=button].supplier-picker-item:hover strong.supplier-picker-item-title,button.supplier-picker-item:focus strong.supplier-picker-item-title,button[type=button].supplier-picker-item:focus strong.supplier-picker-item-title{color:#fff}
button.supplier-picker-item:hover .supplier-picker-item-meta,button[type=button].supplier-picker-item:hover .supplier-picker-item-meta,button.supplier-picker-item:focus .supplier-picker-item-meta,button[type=button].supplier-picker-item:focus .supplier-picker-item-meta{color:rgba(255,255,255,.92)}
.book-edit-footer .supplier-picker{min-width:14rem;max-width:20rem}
.supplier-picker.is-locked .supplier-picker-current{border-style:dashed;background:var(--field-readonly-bg);color:var(--field-readonly-text);border-color:var(--field-readonly-border)}
.tbl-wrap.compact table{font-size:.78rem}
.tbl-wrap.compact th,.tbl-wrap.compact td{padding:.25rem .38rem}
.lab-meta-list{display:grid;gap:.65rem}
/* Tokens theme-aware: el #fff hardcodeado en dark hacía un flash blanco por fila. */
.lab-meta-card{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);padding:.55rem .65rem}
.lab-meta-card__hd{display:flex;justify-content:space-between;align-items:center;gap:.65rem;flex-wrap:wrap;margin-bottom:.45rem}
.lab-meta-card__hd strong{color:var(--text)}
.lab-meta-form{gap:.45rem}
.lab-badge{display:inline-flex;align-items:center;margin-left:.45rem;padding:.12rem .5rem;border-radius:999px;font-size:.72rem;font-weight:700;text-decoration:none;border:1px solid transparent}
.lab-badge--closed{background:var(--badge-ok-bg);color:var(--ok);border-color:var(--badge-ok-border)}
.lab-badge--closed:hover{filter:brightness(1.08);color:var(--ok)}
.lab-badge--draft{background:var(--badge-warn-bg);color:var(--warn);border-color:var(--badge-warn-border)}
.lab-badge--draft:hover{filter:brightness(1.08);color:var(--warn)}
.lab-preview-table{min-width:72rem;width:max-content;max-width:none}
.lab-preview-table th,.lab-preview-table td{white-space:nowrap;vertical-align:top}
.lab-preview-table th.lab-preview-title,.lab-preview-table td.lab-preview-title{min-width:16rem;max-width:22rem;white-space:normal;overflow-wrap:break-word;word-break:normal;line-height:1.3}
@media(max-width:1180px){.book-edit-header-main{grid-template-columns:1fr}.book-edit-header-ids{grid-template-columns:12rem 6.75rem 7.5rem;width:max-content;max-width:100%}.book-edit-badges{max-width:none}.book-edit-datos-layout .book-edit-cols{grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.book-edit-stock-summary{grid-template-columns:repeat(2,minmax(170px,1fr))}.book-edit-stock-ops{grid-template-columns:1fr}}
@media(max-width:720px){.book-edit-header-ids{grid-template-columns:1fr 1fr;width:100%}.book-edit-header-ids>div:last-child{grid-column:1/-1}}
@media(max-width:900px){.book-edit-header{grid-template-columns:1fr}.book-edit-datos-layout,.book-edit-recursos-layout,.book-edit-tag-cols{grid-template-columns:1fr}.book-edit-upload-form{margin-left:0}.book-edit-page,.book-edit-compact{height:auto;max-height:none;overflow:visible}.book-edit-compact>form#book-edit-form{overflow:visible}.book-edit-compact>form#book-edit-form>.book-edit-panel:not([hidden]){flex:none;overflow:visible;min-height:0}.book-edit-panel--etiquetas:not([hidden]){display:block;overflow:visible}.book-edit-tag-hint-desktop{display:none}.book-edit-tag-hint-mobile{display:inline}.book-edit-tag-cols{flex:none;min-height:auto;overflow:visible;gap:.65rem}.book-edit-tag-box{min-height:auto}.book-edit-tag-selected{max-height:none}.book-edit-tag-select{flex:none;height:auto;min-height:9rem;max-height:min(40vh,16rem)}.book-edit-datos-layout .book-edit-cols,.book-edit-stock-summary,.book-edit-stock-ops{grid-template-columns:1fr}.book-edit-col.span-2,.book-edit-picker-fields{grid-column:1/-1}.book-edit-picker-fields{grid-template-columns:1fr;grid-template-areas:"id-label" "id-field" "name-label" "picker";row-gap:.28rem;column-gap:0}.book-edit-picker-fields>.book-edit-picker-label:first-of-type{grid-area:id-label}.book-edit-picker-fields>.book-edit-picker-label:nth-of-type(2){grid-area:name-label;margin-top:.2rem}.book-edit-picker-fields>.book-edit-id-field{grid-area:id-field;max-width:9rem}.book-edit-picker-fields>.supplier-picker{grid-area:picker;width:100%;min-width:0}.book-edit-picker-fields .supplier-picker-input,.book-edit-picker-fields .supplier-picker-current{min-height:2.75rem;font-size:.88rem;padding:.45rem .55rem}.book-edit-picker-fields .supplier-picker-label{font-size:.88rem;white-space:normal;overflow:visible;text-overflow:unset;line-height:1.3}}
@media(max-width:1100px){.premium-layout{grid-template-columns:1fr}.side-rail{position:static}.entity-hero{grid-template-columns:1fr}}

/* ── Status colors ────────────────────── */
.status-ok{color:#16a34a;font-weight:600}
.status-warn{color:#d97706;font-weight:600}
.status-err{color:#dc2626;font-weight:600}

/* ── Hamburger button ─────────────────── */
.topbar-menu-btn{display:none;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid rgba(255,255,255,.18);border-radius:8px;background:rgba(255,255,255,.06);cursor:pointer;flex-shrink:0;margin-right:.5rem;color:#fff}
.topbar-menu-btn:hover{background:rgba(255,255,255,.12)}
.topbar-menu-btn svg{display:block}
/* ── Sidebar backdrop ─────────────────── */
.sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,.48);z-index:99;backdrop-filter:blur(2px)}
.sidebar-backdrop.open{display:block}
/* ── Responsive ───────────────────────── */
@media(max-width:900px){
  :root{--sidebar-w:0px}
  .sidebar{transform:translateX(-248px);transition:transform .25s cubic-bezier(.4,0,.2,1);width:248px}
  .sidebar.open{transform:translateX(0)}
  .topbar-brand{width:auto;border:0}
  .topbar-menu-btn{display:inline-flex}
  main{padding:1rem .85rem 2rem}
}

/* ── Context drawer (M-05 peek) ─────── */
.context-drawer-backdrop{display:none;position:fixed;inset:0;background:rgba(15,23,42,.32);z-index:240;backdrop-filter:blur(1px)}
.context-drawer-backdrop.open{display:block}
.context-drawer{position:fixed;top:var(--topbar-h);right:0;bottom:0;width:min(440px,94vw);background:var(--surface);border-left:1px solid var(--border);box-shadow:-12px 0 32px rgba(15,23,42,.12);z-index:250;transform:translateX(105%);transition:transform .22s ease;display:flex;flex-direction:column}
.context-drawer.open{transform:translateX(0)}
.context-drawer-hd{display:flex;align-items:center;justify-content:space-between;gap:.65rem;padding:.85rem 1rem;border-bottom:1px solid var(--border);background:var(--surface-soft)}
.context-drawer-close{border:0;background:transparent;font-size:1.35rem;line-height:1;cursor:pointer;color:var(--muted);padding:.15rem .35rem;border-radius:6px}
.context-drawer-close:hover{background:#f1f5f9;color:var(--text)}
.context-drawer-body{flex:1;overflow:auto;padding:1rem}
.context-drawer-body .drawer-kv{display:grid;gap:.35rem;margin:.65rem 0 1rem;font-size:.84rem}
.context-drawer-body .drawer-kv strong{color:var(--text)}
.context-drawer-body .drawer-actions{display:flex;flex-wrap:wrap;gap:.35rem;margin:.85rem 0}
.context-drawer-body .drawer-line{border:1px solid var(--border);border-radius:var(--radius-sm);padding:.65rem;margin-bottom:.5rem}
.context-drawer-body .drawer-line-meta{display:flex;flex-wrap:wrap;gap:.35rem .65rem;font-size:.78rem;color:var(--muted);margin-top:.35rem}
.context-drawer-progress{display:flex;height:6px;border-radius:999px;overflow:hidden;background:#e2e8f0;margin-top:.45rem}
.context-drawer-progress span{display:block;height:100%}
.context-drawer-progress .ur{background:#2563eb}.context-drawer-progress .ue{background:#16a34a}.context-drawer-progress .inv{background:#7c3aed}
body.context-drawer-open{overflow:hidden}
button.context-drawer-trigger.linklike,.a.context-drawer-trigger.linklike{background:none;border:0;padding:0;color:var(--primary);cursor:pointer;font:inherit;text-decoration:underline}
button.context-drawer-trigger.linklike:hover{color:var(--primary-dk)}
.drawer-peek-row{display:inline-flex;align-items:center;gap:.35rem;flex-wrap:wrap}

/* ── Command palette (M-09) ───────────── */
.command-palette-backdrop{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:300;display:none;align-items:flex-start;justify-content:center;padding:calc(var(--topbar-h) + 2.5rem) 1rem 1rem;backdrop-filter:blur(2px)}
.command-palette-backdrop.open{display:flex}
.command-palette{width:min(560px,100%);background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:0 24px 64px rgba(15,23,42,.22);overflow:hidden}
.command-palette-input-wrap{display:flex;align-items:center;gap:.55rem;padding:.85rem 1rem;border-bottom:1px solid var(--border);background:var(--surface-soft)}
.command-palette-input-wrap input{flex:1;border:0;background:transparent;font-size:1rem;padding:.15rem 0;box-shadow:none}
.command-palette-input-wrap input:focus{box-shadow:none;border:0;background:transparent}
.command-palette-hint{font-size:.68rem;color:var(--muted);border:1px solid var(--border);border-radius:6px;padding:.12rem .35rem;background:var(--surface);font-family:var(--font-mono)}
.command-palette-results{list-style:none;margin:0;padding:.35rem;max-height:min(52vh,420px);overflow:auto}
.command-palette-results li{margin:0}
.command-palette-group{padding:.45rem .72rem .2rem;font-size:.66rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--text-2)}
button.command-palette-item{display:grid;grid-template-columns:auto 1fr auto;gap:.65rem;align-items:center;width:100%;border:0;background:transparent;text-align:left;padding:.62rem .72rem;border-radius:10px;cursor:pointer;font:inherit;font-size:inherit;font-weight:inherit;color:var(--text);box-shadow:none;transform:none;line-height:inherit;white-space:normal}
button.command-palette-item:hover{transform:none;box-shadow:none}
button.command-palette-item strong{font-size:.88rem;line-height:1.25;color:var(--text);font-weight:700}
button.command-palette-item .meta{display:block;font-size:.76rem;color:var(--text-2);margin-top:.12rem}
button.command-palette-item>.muted{color:var(--muted);font-size:.82rem}
button.command-palette-item:hover,button.command-palette-item.active{background:var(--primary);color:#fff}
button.command-palette-item:hover strong,button.command-palette-item.active strong{color:#fff}
button.command-palette-item:hover .meta,button.command-palette-item.active .meta{color:rgba(255,255,255,.92)}
button.command-palette-item:hover>.muted,button.command-palette-item.active>.muted{color:rgba(255,255,255,.8)}
button.command-palette-item:hover .command-palette-kind,button.command-palette-item.active .command-palette-kind{background:rgba(255,255,255,.22);color:#fff}
.command-palette-kind{font-size:.66rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--text-2);background:var(--surface-2);border-radius:999px;padding:.18rem .45rem;white-space:nowrap}
button.command-palette-item--card{align-items:start}
.command-palette-chips{display:flex;flex-wrap:wrap;gap:.28rem;margin-top:.35rem}
.command-palette-chip{font-size:.68rem;font-weight:700;line-height:1.2;padding:.16rem .42rem;border-radius:6px;background:var(--surface-2);color:var(--text-2);border:1px solid var(--border)}
.command-palette-chip.tone-ok{background:color-mix(in srgb,var(--ok) 14%,var(--surface));color:var(--ok);border-color:color-mix(in srgb,var(--ok) 35%,var(--border))}
.command-palette-chip.tone-warn{background:color-mix(in srgb,var(--warn) 14%,var(--surface));color:var(--warn);border-color:color-mix(in srgb,var(--warn) 35%,var(--border))}
.command-palette-chip.tone-danger{background:color-mix(in srgb,var(--danger) 14%,var(--surface));color:var(--danger);border-color:color-mix(in srgb,var(--danger) 35%,var(--border))}
button.command-palette-item:hover .command-palette-chip,button.command-palette-item.active .command-palette-chip{background:rgba(255,255,255,.18);color:#fff;border-color:rgba(255,255,255,.28)}
.command-palette-empty,.command-palette-status{padding:.85rem 1rem;font-size:.82rem;color:var(--muted)}
.command-palette-status.error{color:var(--danger)}
/* D1 — Notas internas por ficha (colapsable) */
/* grid-column:1/-1 — cuando se inserta dentro de una rejilla multi-columna
   (p.ej. .sale-factura__fields en la ficha de venta), debe ocupar todo el
   ancho como el bloque .doc-ficha; sin ancestro grid no tiene efecto. */
.entity-notes,.entity-audit{margin:.55rem 0 .75rem;padding:0;overflow:hidden;grid-column:1/-1}
.entity-notes__summary,.entity-audit__summary{list-style:none;cursor:pointer;display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .55rem;padding:.55rem .85rem;user-select:none}
.entity-notes__summary::-webkit-details-marker,.entity-audit__summary::-webkit-details-marker{display:none}
.entity-notes__summary::before,.entity-audit__summary::before{content:'▸';font-size:.72rem;color:var(--muted);transition:transform .12s ease;line-height:1;flex-shrink:0}
.entity-notes[open]>.entity-notes__summary::before,.entity-audit[open]>.entity-audit__summary::before{transform:rotate(90deg)}
.entity-notes__summary-title,.entity-audit__summary-title{font-size:.92rem;font-weight:800;color:var(--text);margin:0}
.entity-notes__count,.entity-audit__count{display:inline-flex;align-items:center;justify-content:center;min-width:1.35rem;height:1.2rem;padding:0 .35rem;border-radius:999px;font-size:.68rem;font-weight:800;background:var(--primary-soft);color:var(--primary);line-height:1}
.entity-notes__count--empty,.entity-audit__count--empty{background:var(--surface-2);color:var(--text-3);border:1px solid var(--border);opacity:1}
.entity-notes__summary-hint,.entity-audit__summary-hint{font-size:.72rem;font-weight:500;flex:1 1 12rem;min-width:0}
.entity-notes__panel,.entity-audit__panel{padding:0 .85rem .75rem;display:grid;gap:.55rem;border-top:1px solid var(--border)}
.entity-notes__compose{display:grid;gap:.45rem;margin:0}
.entity-notes__compose textarea{width:100%;min-height:2.8rem;resize:vertical;font:inherit;padding:.45rem .55rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--field-bg);color:var(--text)}
.entity-notes__compose textarea:focus{outline:2px solid color-mix(in srgb,var(--accent) 45%,transparent);outline-offset:1px}
.entity-notes__compose .btn{justify-self:start}
.entity-notes__list{list-style:none;margin:0;padding:0;display:grid;gap:.5rem;max-height:14rem;overflow-y:auto}
.entity-notes__item{padding:.55rem .65rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2)}
.entity-notes__meta{font-size:.78rem;margin:0 0 .3rem}
.entity-notes__body{margin:0;white-space:pre-wrap;line-height:1.4;font-size:.86rem}
.entity-notes__delete{margin-top:.35rem}
.entity-notes__empty{padding:.2rem 0}
/* A3 — Historial de cambios (mismo look que notas) */
.entity-audit__actions{display:flex;flex-wrap:wrap;gap:.4rem;margin:0}
.entity-audit__table{width:100%;font-size:.82rem}
.entity-audit__detail{margin-top:.15rem;font-size:.8rem;word-break:break-word}
.entity-audit__more{margin:0}
.entity-audit .nowrap{white-space:nowrap}
/* Notas + historial en dos columnas (ficha libro / cliente) */
.entity-side-panels{display:grid;grid-template-columns:1fr 1fr;gap:.45rem;margin:.35rem 0;align-items:stretch;min-width:0;grid-column:1/-1}
.entity-side-panels>.entity-notes,
.entity-side-panels>.entity-audit{margin:0;min-width:0;height:100%;display:flex;flex-direction:column}
.entity-side-panels .entity-notes__summary,
.entity-side-panels .entity-audit__summary{padding:.32rem .55rem;gap:.25rem .4rem;flex-wrap:nowrap;min-height:2rem;box-sizing:border-box}
.entity-side-panels .entity-notes__summary-title,
.entity-side-panels .entity-audit__summary-title{font-size:.8rem}
.entity-side-panels .entity-notes__summary-hint,
.entity-side-panels .entity-audit__summary-hint{display:none}
.entity-side-panels .entity-notes__panel,
.entity-side-panels .entity-audit__panel{padding:0 .55rem .5rem;flex:1}
.entity-side-panels .entity-notes__compose textarea{min-height:2.2rem;font-size:.8rem}
.entity-side-panels .entity-notes__list{max-height:7.5rem}
.entity-side-panels .entity-audit__table{font-size:.78rem}
@media (max-width:900px){
  .entity-side-panels{grid-template-columns:1fr}
  .entity-side-panels .entity-notes__summary-hint,
  .entity-side-panels .entity-audit__summary-hint{display:inline;font-size:.68rem}
}
/* Ficha libro: barra fina colapsada para no empujar Datos principales */
.book-edit-compact .entity-side-panels{margin:.25rem 0;flex-shrink:0}
.book-edit-compact>.entity-notes{margin:.35rem 0;flex-shrink:0}
.book-edit-compact>.entity-notes>.entity-notes__summary{padding:.38rem .65rem}
.book-edit-compact .entity-notes__summary-title{font-size:.82rem}
.book-edit-compact .entity-notes__summary-hint{font-size:.68rem}
.book-edit-compact .entity-notes__panel{padding:0 .65rem .55rem}
/* D2 — Ciclo de ediciones (columna en Datos principales) */
.book-editions{margin:0;padding:.5rem .6rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);display:grid;gap:.4rem;align-content:start}
.book-editions__hd{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .5rem}
.book-editions__hd .book-edit-group-label{margin:0}
.book-editions__intro{margin:0;font-size:.78rem}
.book-editions__banner{padding:.55rem .65rem;border-radius:var(--radius-sm);border:1px solid color-mix(in srgb,var(--warn) 35%,var(--border));background:color-mix(in srgb,var(--warn) 10%,var(--surface));margin:0}
.book-editions__banner p{margin:.3rem 0 .45rem}
.book-editions__current{margin:0}
.book-editions__current p{margin:.2rem 0;font-size:.86rem}
.book-editions__link{margin:0}
.book-editions__suggest{margin:.25rem 0 0;padding:.45rem .5rem;border:1px dashed var(--border);border-radius:var(--radius-sm);display:grid;gap:.3rem}
.book-editions__suggest-label{margin:0;font-size:.78rem;font-weight:700;color:var(--text-muted,inherit)}
.book-editions__suggest-list{margin:0;padding:0;list-style:none;display:grid;gap:.3rem}
.book-editions__suggest-list li{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;font-size:.8rem}
.book-editions__suggest-list .btn{padding:.28rem .5rem}
.book-edit-ops-row>.book-editions{min-width:0}
.book-edit-compact .entity-notes__compose textarea{min-height:2.4rem;font-size:.82rem}
.book-edit-compact .entity-notes__list{max-height:8.5rem}
.topbar-search{display:inline-flex;align-items:center;gap:.4rem;padding:.32rem .7rem;border:1px solid rgba(255,255,255,.18);border-radius:999px;background:rgba(255,255,255,.06);color:rgba(255,255,255,.82);font-size:.74rem;font-weight:700;cursor:pointer;transition:all .12s}
.topbar-search:hover{background:rgba(255,255,255,.1);color:#fff;border-color:rgba(255,255,255,.3)}
.topbar-search kbd{font-size:.62rem;font-weight:600;opacity:.75;font-family:ui-monospace,monospace}

/* ── HTMX premium feedback (P1 loading / P2 fade / P3 flash) ── */
@keyframes axon-htmx-spin{to{transform:rotate(360deg)}}
@keyframes axon-htmx-fade-in{from{opacity:.4}to{opacity:1}}
@keyframes axon-total-flash{
  0%{background-color:#fef08a;box-shadow:inset 0 0 0 1px rgba(202,138,4,.45)}
  100%{background-color:transparent;box-shadow:none}
}
/* 1) Indicador de carga: el elemento que dispara la petición recibe .htmx-request */
.btn.htmx-request,
button.htmx-request,
a.btn.htmx-request,
form.htmx-request>.btn,
form.htmx-request>button[type=submit],
form.htmx-request .sale-factura__row-actions>button[type=submit],
form.htmx-request .field--action>.btn{
  pointer-events:none;
  opacity:.78;
  cursor:wait;
}
.btn.htmx-request::before,
button.htmx-request::before,
a.btn.htmx-request::before,
form.htmx-request>.btn::before,
form.htmx-request>button[type=submit]::before,
form.htmx-request .sale-factura__row-actions>button[type=submit]::before,
form.htmx-request .field--action>.btn::before{
  content:"";
  width:.85em;height:.85em;flex-shrink:0;
  border:2px solid color-mix(in srgb,currentColor 32%,transparent);
  border-top-color:currentColor;
  border-radius:50%;
  animation:axon-htmx-spin .55s linear infinite;
}
/* Fila / región mientras se recalcula (onchange unidades, etc.) */
tr:has(form.htmx-request),
tr:has(form.htmx-request) td{
  background:#f1f5f9!important;
}
/* Visitadores: +/− no deben blanquear la fila ni fundir la lista. */
.partner-users-table tr:has(form.htmx-request),
.partner-users-table tr:has(form.htmx-request) td{
  background:transparent!important;
}
.partner-users-table tr.htmx-swapping,
.partner-users-table tr.htmx-swapping td{opacity:1;transition:none}
.sale-factura__addline:has(form.htmx-request),
.sale-factura__lines:has(form.htmx-request){
  opacity:.82;
  transition:opacity .12s ease;
}
/* Regiones usadas como hx-indicator (listados live search) */
[id$="_region"].htmx-request,
[id$="_catalog_region"].htmx-request{
  opacity:.55;
  pointer-events:none;
  transition:opacity .15s ease;
}
/* 2) Fade-in tras swap (clase JS axon-htmx-in) + clases nativas htmx */
.axon-htmx-in{animation:axon-htmx-fade-in .16s ease-out}
.htmx-swapping{opacity:0;transition:opacity .14s ease-out}
.htmx-settling{opacity:1}
/* 3) Flash en totales recalculados */
.sale-factura__totals .total-row .val.axon-total-flash,
.sale-factura__totals .total-row.grand .val.axon-total-flash,
.sale-factura__summary .box input.axon-total-flash,
.doc-total-row--grand.axon-total-flash,
.doc-total-row--grand strong.axon-total-flash{
  animation:axon-total-flash 1s ease-out;
}
/* 4) Accesibilidad: sin motion */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
    transition-duration:.01ms!important;
    scroll-behavior:auto!important;
  }
  .btn.htmx-request::before,
  button.htmx-request::before,
  a.btn.htmx-request::before,
  form.htmx-request>.btn::before,
  form.htmx-request>button[type=submit]::before,
  form.htmx-request .sale-factura__row-actions>button[type=submit]::before,
  form.htmx-request .field--action>.btn::before{animation:none;border-color:currentColor;opacity:.6}
  .axon-htmx-in,.htmx-swapping,.htmx-settling{opacity:1;animation:none;transition:none}
  .axon-total-flash{animation:none;background-color:#fef9c3}
}


/* ── F0a a11y focus ──────────────────── */
:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
button:focus:not(:focus-visible),a:focus:not(:focus-visible){outline:none}
.btn:focus-visible,.topbar-theme:focus-visible,.topbar-logout:focus-visible,.topbar-search:focus-visible{outline:2px solid var(--accent-contrast,#fff);outline-offset:2px;box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 45%,transparent)}

/* ── F0a dark mode content chrome ─────── */
[data-theme="dark"] .shell,[data-theme="dark"] main.content{background:transparent}
[data-theme="dark"] .tbl-wrap,[data-theme="dark"] table.data,[data-theme="dark"] .list-table{background:var(--surface);border-color:var(--border)}
[data-theme="dark"] table th{background:var(--surface-2);color:var(--text-2);border-color:var(--border)}
[data-theme="dark"] table td{border-color:var(--border);color:var(--text)}
[data-theme="dark"] table tr:hover td{background:rgba(148,163,184,.08)}
[data-theme="dark"] td.list-actions, [data-theme="dark"] th.list-actions{background:var(--surface)}
[data-theme="dark"] .doc-toolbar__group{background:var(--surface-2)}
[data-theme="dark"] .doc-stat{background:var(--surface)}
[data-theme="dark"] .doc-lines tfoot td{background:var(--surface-2)}
[data-theme="dark"] .doc-total-row{border-bottom-color:var(--border)}
[data-theme="dark"] .doc-total-row--grand{background:rgba(74,222,128,.10);border-color:rgba(74,222,128,.28)}
[data-theme="dark"] .doc-total-row--grand span,[data-theme="dark"] .doc-total-row--grand strong{color:var(--ok)}
/* Pie «Total factura»: mismo verde claro que Importes (el #14532d del light no contrasta). */
[data-theme="dark"] .doc-lines tfoot .grand{color:var(--ok)}
[data-theme="dark"] .alert.ok,.ok,[data-theme="dark"] .ok{background:var(--badge-ok-bg);color:var(--ok);border-color:var(--badge-ok-border)}
[data-theme="dark"] input:not([type=checkbox]):not([type=radio]),
[data-theme="dark"] select,
[data-theme="dark"] textarea{background:var(--field-bg);color:var(--text);border-color:var(--field-border)}
/* Primarios planos en dark: sin gradiente ni glow. */
[data-theme="dark"] .btn,[data-theme="dark"] button[type=submit]:not(.list-row-menu__item):not(.topbar-logout):not(.danger),[data-theme="dark"] a.btn{background:var(--btn-primary);box-shadow:none;transform:none}
[data-theme="dark"] .btn:hover,[data-theme="dark"] button[type=submit]:not(.list-row-menu__item):not(.topbar-logout):not(.danger):hover,[data-theme="dark"] a.btn:hover{background:var(--btn-primary-dk);box-shadow:none;transform:none;color:var(--on-primary)}
[data-theme="dark"] button.danger,[data-theme="dark"] button[type=submit].danger,[data-theme="dark"] button[type=button].danger,
[data-theme="dark"] button.remove-btn{background:var(--danger);color:#0f172a;box-shadow:none}
[data-theme="dark"] button.danger:hover,[data-theme="dark"] button[type=submit].danger:hover,[data-theme="dark"] button[type=button].danger:hover,
[data-theme="dark"] button.remove-btn:hover{background:#ef4444;color:#450a0a}
[data-theme="dark"] .btn.secondary,[data-theme="dark"] a.btn.secondary{background:#334155;color:#f1f5f9;box-shadow:none}
[data-theme="dark"] .btn.secondary:hover,[data-theme="dark"] a.btn.secondary:hover{background:#475569;color:#fff}
[data-theme="dark"] .btn.accent,[data-theme="dark"] a.btn.accent{background:var(--accent);box-shadow:none}
[data-theme="dark"] .btn.accent:hover,[data-theme="dark"] a.btn.accent:hover{background:#8b5cf6;box-shadow:none;color:var(--on-primary)}
[data-theme="dark"] .btn.ghost,[data-theme="dark"] a.btn.ghost{background:rgba(255,255,255,.06);border:1px solid var(--border-strong);color:var(--text);box-shadow:none}
[data-theme="dark"] .btn.ghost:hover,[data-theme="dark"] a.btn.ghost:hover{background:rgba(255,255,255,.1);color:var(--primary);border-color:var(--border-strong);transform:none}
[data-theme="dark"] .btn.success,[data-theme="dark"] a.btn.success{background:var(--success);color:#0f172a;box-shadow:none}
[data-theme="dark"] .btn.warn,[data-theme="dark"] a.btn.warn{background:var(--warning);color:#0f172a;box-shadow:none}
[data-theme="dark"] .btn.danger,[data-theme="dark"] a.btn.danger{background:var(--danger);color:#0f172a;box-shadow:none}
[data-theme="dark"] .btn.success:hover,[data-theme="dark"] a.btn.success:hover{background:#22c55e;color:#052e16}
[data-theme="dark"] .btn.warn:hover,[data-theme="dark"] a.btn.warn:hover{background:#f59e0b;color:#422006}
[data-theme="dark"] .btn.danger:hover,[data-theme="dark"] a.btn.danger:hover{background:#ef4444;color:#450a0a}
/* Access HTMX (sale-factura*): chrome gris/amarillo clásico = isla clara.
   Sin esto, --text claro del dark mode cae sobre amarillo/azul → contraste ilegible
   (totales Unidades/Total, ficha proveedor, ISBN field-yellow). */
[data-theme="dark"] .sale-factura{
  --text:#0f172a;--text-2:#475569;--text-3:#64748b;--muted:#64748b;--muted-2:#64748b;
  --surface:#ffffff;--surface-2:#f1f5f9;--surface-soft:#f8fafc;
  /* Re-bind: --card-bg se resolvía en :root a #101828 y las .card anidadas
     heredaban el valor ya sustituido (franja oscura vacía en dark). */
  --card-bg:var(--surface);
  --border:#e2e8f0;--border-strong:#cbd5e1;
  --primary:#2563eb;--primary-dk:#1d4ed8;--primary-soft:#dbeafe;
  --danger:#b91c1c;--ok:#15803d;--warn:#b45309;--info:#1d4ed8;
  --success:#15803d;--warning:#b45309;
  --badge-ok-bg:#dcfce7;--badge-ok-border:#bbf7d0;
  --badge-danger-bg:#fee2e2;--badge-danger-border:#fca5a5;
  --badge-warn-bg:#fef9c3;--badge-warn-border:#fde047;
  --badge-info-bg:#dbeafe;--badge-info-border:#bfdbfe;
  --badge-muted-bg:#f1f5f9;--badge-muted-border:#e2e8f0;
  --field-bg:#ffffff;--field-bg-soft:#fbfdff;--field-border:#cbd5e1;
  /* Readonly/disabled: gris más marcado que el chrome Access (#d4d4d4) para verse «apagados» */
  --field-readonly-bg:#b8c4d4;--field-readonly-border:#8fa0b5;--field-readonly-text:#1e293b;
  --field-disabled-bg:#b8c4d4;--field-disabled-border:#8fa0b5;--field-disabled-text:#1e293b;
  --access-stripe:#f9fafb;
  --shadow:var(--shadow-sm);
  color:var(--text);
}
[data-theme="dark"] .sale-factura .btn.ghost,[data-theme="dark"] .sale-factura a.btn.ghost{
  background:rgba(255,255,255,.72);border:1px solid var(--border);color:var(--text);box-shadow:none;
}
[data-theme="dark"] .sale-factura .btn.ghost:hover,[data-theme="dark"] .sale-factura a.btn.ghost:hover{
  background:#fff;color:var(--primary);border-color:var(--border);
}
[data-theme="dark"] .book-edit-compact a.btn.ghost,
[data-theme="dark"] .book-edit-compact button.btn.ghost,
[data-theme="dark"] .book-edit-compact .btn.ghost{background:var(--surface-2);border-color:var(--border-strong);color:var(--text)}
[data-theme="dark"] .book-edit-compact a.btn.ghost:hover,
[data-theme="dark"] .book-edit-compact button.btn.ghost:hover,
[data-theme="dark"] .book-edit-compact .btn.ghost:hover{background:var(--border-strong);color:var(--primary)}
/* Ficha libro dark: etiquetas pequeñas (.66rem) → --text (≥ AA); islas grises → superficie dark */
[data-theme="dark"] .book-edit-compact .form-grid.dense label,
[data-theme="dark"] .book-edit-picker-fields>.book-edit-picker-label,
[data-theme="dark"] .book-edit-group-label,
[data-theme="dark"] .book-edit-check-inline label,
[data-theme="dark"] .book-edit-kv th,
[data-theme="dark"] .book-edit-stock-mini th{
  color:var(--text);
}
[data-theme="dark"] .book-edit-field-hint{color:var(--text-2)}
[data-theme="dark"] .book-edit-field-hint strong{color:var(--text)}
[data-theme="dark"] .book-edit-flags,
[data-theme="dark"] .book-edit-edition-flags,
[data-theme="dark"] .book-edit-stock-ops,
[data-theme="dark"] .book-edit-bom-details,
[data-theme="dark"] .book-edit-footer,
[data-theme="dark"] .book-edit-cover-empty,
[data-theme="dark"] .book-edit-tag-box,
[data-theme="dark"] .book-edit-tag-selected,
[data-theme="dark"] .book-edit-gallery-item,
[data-theme="dark"] .book-edit-ai-bar,
[data-theme="dark"] .book-edit-ai-proposal{
  background:var(--surface-2);border-color:var(--border);color:var(--text);
}
[data-theme="dark"] .book-edit-ai-proposal__title,
[data-theme="dark"] .book-edit-ai-proposal__item{color:var(--text)}
[data-theme="dark"] .book-edit-ai-bar .hint,
[data-theme="dark"] .book-edit-ai-proposal .hint,
[data-theme="dark"] .book-edit-ai-proposal__status{color:var(--text-2)}

[data-theme="dark"] .book-edit-flags label,
[data-theme="dark"] .book-edit-edition-flags>label{color:var(--text)}
[data-theme="dark"] .book-edit-bom-body .hint,
[data-theme="dark"] .book-edit-bom-body .muted,
[data-theme="dark"] .book-edit-bom-count,
[data-theme="dark"] .book-edit-stock-ops .hint,
[data-theme="dark"] .book-edit-stock-ops .muted{
  color:var(--text-2);
}
/* Ficha libro dark: chrome Access #fef9c3/#fde047 → amber atenuado (no isla clara).
   Evita flash al hover de tabs y celdas de totales sobre fondo navy. */
[data-theme="dark"] .book-edit-header{
  background:linear-gradient(180deg,rgba(251,191,36,.2),rgba(251,191,36,.1));
  border-color:rgba(251,191,36,.45);
}
[data-theme="dark"] .book-edit-mini-label{color:#fbbf24}
[data-theme="dark"] .book-edit-compact--oop .book-edit-header{
  background:linear-gradient(180deg,rgba(248,113,113,.22),rgba(248,113,113,.1));
  border-color:rgba(248,113,113,.5);
}
[data-theme="dark"] .book-edit-compact--oop .book-edit-header .book-edit-mini-label{color:#fca5a5}
[data-theme="dark"] .book-edit-compact--ebook .book-edit-header{
  background:linear-gradient(180deg,rgba(167,139,250,.22),rgba(167,139,250,.1));
  border-color:rgba(167,139,250,.5);
}
[data-theme="dark"] .book-edit-compact--ebook .book-edit-header .book-edit-mini-label{color:#c4b5fd}
[data-theme="dark"] .book-edit-class-select--ebook{
  background:rgba(248,113,113,.16);border-color:rgba(248,113,113,.45);color:#fca5a5;
}
[data-theme="dark"] .book-edit-tabs{
  background:var(--surface-2);border-bottom-color:rgba(251,191,36,.5);
}
[data-theme="dark"] .book-edit-tabs button.book-edit-tab{color:var(--text-2)}
[data-theme="dark"] .book-edit-tabs button.book-edit-tab:hover{
  background:rgba(251,191,36,.14);color:var(--text);transform:none;box-shadow:none;
}
[data-theme="dark"] .book-edit-tabs button.book-edit-tab.active{
  background:rgba(251,191,36,.22);border-color:rgba(251,191,36,.45);
  border-bottom-color:rgba(251,191,36,.22);color:#fbbf24;
}
[data-theme="dark"] .book-edit-compact--oop .book-edit-tabs{
  background:var(--surface-2);border-bottom-color:rgba(248,113,113,.5);
}
[data-theme="dark"] .book-edit-compact--oop .book-edit-tabs button.book-edit-tab{color:#fca5a5}
[data-theme="dark"] .book-edit-compact--oop .book-edit-tabs button.book-edit-tab:hover{
  background:rgba(248,113,113,.16);color:#fecaca;
}
[data-theme="dark"] .book-edit-compact--oop .book-edit-tabs button.book-edit-tab.active{
  background:rgba(248,113,113,.22);border-color:rgba(248,113,113,.45);
  border-bottom-color:rgba(248,113,113,.22);color:#fca5a5;
}
[data-theme="dark"] .book-edit-compact--ebook .book-edit-tabs{
  background:var(--surface-2);border-bottom-color:rgba(167,139,250,.5);
}
[data-theme="dark"] .book-edit-compact--ebook .book-edit-tabs button.book-edit-tab{color:#c4b5fd}
[data-theme="dark"] .book-edit-compact--ebook .book-edit-tabs button.book-edit-tab:hover{
  background:rgba(167,139,250,.16);color:#ddd6fe;
}
[data-theme="dark"] .book-edit-compact--ebook .book-edit-tabs button.book-edit-tab.active{
  background:rgba(167,139,250,.22);border-color:rgba(167,139,250,.45);
  border-bottom-color:rgba(167,139,250,.22);color:#c4b5fd;
}
[data-theme="dark"] .book-edit-stock-calc td:last-child,
[data-theme="dark"] tbody tr.book-edit-stock-calc:hover td:last-child{
  background:rgba(251,191,36,.16);color:#fbbf24;
}
[data-theme="dark"] .book-edit-stock-calc th{color:#fbbf24}
[data-theme="dark"] .book-edit-stock-total td:last-child,
[data-theme="dark"] tbody tr.book-edit-stock-total:hover td:last-child{
  background:rgba(248,113,113,.16);color:#f87171;
}
[data-theme="dark"] .book-edit-stock-total th{color:#f87171}
[data-theme="dark"] .book-edit-stock-owed td:last-child,
[data-theme="dark"] tbody tr.book-edit-stock-owed:hover td:last-child{
  background:rgba(251,146,60,.14);color:#fb923c;
}
[data-theme="dark"] .book-edit-stock-owed th{color:#fb923c}
[data-theme="dark"] .book-edit-margin-field{
  background:rgba(251,191,36,.16);border-color:rgba(251,191,36,.4);color:#fbbf24;
}
[data-theme="dark"] .book-edit-sku-current{background:rgba(251,191,36,.16)!important}
[data-theme="dark"] .book-edit-gallery-item.dragging{background:rgba(251,191,36,.16)}
[data-theme="dark"] .book-edit-stock-moves,
[data-theme="dark"] .book-edit-bulk-supplier-form{
  background:rgba(251,191,36,.1);border-color:rgba(251,191,36,.35);color:var(--text);
}
[data-theme="dark"] .book-edit-bulk-supplier-label{color:#fbbf24}
[data-theme="dark"] .book-edit-stock-sub th{color:var(--text-2)}
[data-theme="dark"] .book-edit-tag-empty{color:var(--text-3)}
[data-theme="dark"] .book-edit-tag-filter,
[data-theme="dark"] .book-edit-tag-select{border-color:var(--field-border);background:var(--field-bg);color:var(--text)}
[data-theme="dark"] .book-edit-tag-item{border-bottom-color:var(--border)}
[data-theme="dark"] button.book-edit-tag-chip:hover::after{color:var(--text-2)}
[data-theme="dark"] .metric-track{background:rgba(148,163,184,.28)}
[data-theme="dark"] a.card.kpi:hover{border-color:var(--primary);box-shadow:var(--shadow-sm)}
[data-theme="dark"] a.card.kpi.is-active{border-color:var(--primary);box-shadow:inset 0 0 0 1px rgba(96,165,250,.22);background:var(--primary-soft)}
.topbar-theme{padding:.35rem .55rem;border:1px solid rgba(255,255,255,.18);border-radius:999px;background:rgba(255,255,255,.06);color:rgba(255,255,255,.85);font-size:.76rem;font-weight:700;cursor:pointer;transition:all .12s;display:inline-flex;align-items:center;gap:.35rem}
.topbar-theme:hover{background:rgba(255,255,255,.1);color:#fff;border-color:rgba(255,255,255,.3)}
.topbar-theme svg{flex-shrink:0}
[data-theme="dark"] thead th,[data-theme="dark"] th.list-actions{background:var(--surface-2);color:var(--text)}
[data-theme="dark"] tbody tr:hover td,[data-theme="dark"] tbody tr:hover td.list-actions{background:rgba(148,163,184,.10)}
[data-theme="dark"] .reservations-list tbody tr:hover td,
[data-theme="dark"] .reservations-list tbody tr:hover td.list-actions{background:var(--surface-2)}

/* ─── Toasts F0a (sustituyen saved=1 / banners flash) ─────────────────────── */
.ax-toasts{position:fixed;right:1rem;bottom:1rem;z-index:60;display:flex;flex-direction:column;gap:.5rem;max-width:min(380px,calc(100vw - 2rem));pointer-events:none}
.ax-toast{pointer-events:auto;display:flex;align-items:flex-start;gap:.65rem;padding:.7rem .85rem;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--radius);box-shadow:var(--shadow);font-size:.84rem;line-height:1.35;color:var(--text);animation:ax-toast-in .18s ease-out}
.ax-toast--ok{border-left-color:var(--ok)}
.ax-toast--warn{border-left-color:var(--warn)}
.ax-toast--danger{border-left-color:var(--danger)}
.ax-toast__msg{flex:1;min-width:0}
.ax-toast__close{flex:none;border:0;background:transparent;color:var(--muted);font-size:1.1rem;line-height:1;cursor:pointer;padding:.1rem .25rem;border-radius:4px}
.ax-toast__close:hover{color:var(--text);background:var(--surface-2)}
.ax-toast--out{opacity:0;transform:translateY(.35rem);transition:opacity .18s ease-out,transform .18s ease-out}
@keyframes ax-toast-in{from{opacity:0;transform:translateY(.35rem)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){
  .ax-toast{animation:none}
  .ax-toast--out{transition:none}
}

/* ─── Dashboard modo urgencias (F0a) ──────────────────────────────────────── */
.ax-dash-mode{display:inline-flex;gap:.35rem;flex-wrap:wrap;align-items:center}
.ax-dashboard-quiet{text-align:left;padding:1.25rem 1.35rem;border-style:dashed}
.ax-dashboard-quiet__title{margin:0 0 .35rem;font-size:1.05rem}

/* Listado premium: enlace primario + menú ⋯ por fila */
.list-primary-link{color:inherit;text-decoration:none}
.list-primary-link:hover,.list-primary-link:focus-visible{color:var(--accent);text-decoration:underline}
.list-primary-link--plain{text-decoration:none}
.list-primary-link--plain:hover,.list-primary-link--plain:focus-visible{text-decoration:underline}
.list-row--active td{background:color-mix(in srgb,var(--accent) 10%,transparent)}
/* Fila clicable (ax-list.js) */
tr[data-row-href]{cursor:pointer}
tr[data-row-href]:focus{outline:none}
tr.list-row--focus td{background:color-mix(in srgb,var(--primary) 12%,transparent)}
tr.list-row--focus td:first-child{box-shadow:inset 3px 0 0 var(--primary)}
tr.list-row--focus td.list-actions{background:color-mix(in srgb,var(--primary) 12%,var(--surface))}
/* Estado vacío con acción, en vez de una celda con «Sin registros» */
.list-empty{display:flex;flex-direction:column;align-items:center;gap:.45rem;padding:2.4rem 1.2rem;text-align:center}
.list-empty__title{margin:0;font-size:.98rem;font-weight:760;color:var(--text)}
.list-empty__hint{margin:0;max-width:34rem;font-size:.84rem;color:var(--muted)}
.list-empty__actions{display:flex;gap:.45rem;flex-wrap:wrap;justify-content:center;margin-top:.35rem}
td.list-empty-cell{padding:0;background:var(--surface)}
.list-row-menu{position:relative;display:inline-block;text-align:left}
.list-row-menu__summary{
  list-style:none;cursor:pointer;user-select:none;
  display:inline-flex;align-items:center;justify-content:center;
  min-width:2rem;min-height:1.85rem;padding:0 .45rem;
  border:1px solid var(--border);border-radius:var(--radius);
  background:var(--surface-soft);color:var(--text);font:inherit;font-weight:650;line-height:1;
  box-shadow:none;transform:none
}
.list-row-menu__summary::-webkit-details-marker{display:none}
.list-row-menu__summary::marker{content:""}
.list-row-menu[open]>.list-row-menu__summary,.list-row-menu__summary:hover{
  border-color:var(--accent);color:var(--accent)
}
/* La columna sticky de acciones crea contexto de apilado: sin esto el panel
   queda por debajo de las celdas de acciones de las filas siguientes. */
td.list-actions.list-actions--menu-open{z-index:60}
.list-row-menu[open]{z-index:60}
.list-row-menu__panel{
  position:absolute;right:0;top:calc(100% + .25rem);z-index:60;
  display:flex;flex-direction:column;gap:.1rem;
  min-width:11rem;padding:.3rem;
  border:1px solid var(--border);border-radius:var(--radius);
  background:var(--surface);box-shadow:0 14px 32px -14px rgba(15,23,42,.55);
  white-space:normal
}
/* Formulario largo dentro del ⋯ (visitadores): no es un menú de 2 ítems.
   Tiene que leerse como ficha flotante, no como otra celda de la tabla. */
.list-row-menu__panel--sheet{
  min-width:19rem;max-width:22rem;padding:.55rem .6rem .5rem;gap:.15rem
}
.list-row-menu__heading{
  margin:0 0 .35rem;padding:0 .15rem .4rem;
  border-bottom:1px solid var(--border);
  font-size:.82rem;font-weight:750;line-height:1.3;color:var(--text);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
/* ax-row-menu.js ancla el panel al viewport para que .tbl-wrap{overflow:auto}
   no lo recorte; sin JS se queda en absolute dentro de la celda. */
.list-row-menu__panel--floating{position:fixed;right:auto;top:0;left:0;margin:0;z-index:80}
/* Gana a .list-actions form{display:inline-flex} */
.list-actions .list-row-menu__panel form,
.list-row-menu__panel form{display:block;margin:0;width:100%}
/* Gana a button[type=submit] (pill azul global) */
.list-row-menu__panel button.list-row-menu__item,
.list-row-menu__panel button[type=submit].list-row-menu__item,
.list-row-menu__item{
  display:block;width:100%;box-sizing:border-box;text-align:left;
  justify-content:flex-start;align-items:center;
  padding:.5rem .6rem;margin:0;border:0;
  border-radius:calc(var(--radius) - 2px);
  background:transparent;color:var(--text);
  font:inherit;font-size:.82rem;font-weight:600;line-height:1.25;
  text-decoration:none;cursor:pointer;
  box-shadow:none;transform:none;white-space:nowrap
}
.list-row-menu__panel button.list-row-menu__item:hover,
.list-row-menu__panel button[type=submit].list-row-menu__item:hover,
.list-row-menu__panel button.list-row-menu__item:focus-visible,
.list-row-menu__panel button[type=submit].list-row-menu__item:focus-visible,
.list-row-menu__item:hover,.list-row-menu__item:focus-visible{
  background:var(--surface-soft);color:var(--accent);
  box-shadow:none;transform:none
}
.list-row-menu__panel button.list-row-menu__item--danger,
.list-row-menu__panel button[type=submit].list-row-menu__item--danger,
.list-row-menu__item--danger{color:var(--danger,#c0392b);background:transparent}
.list-row-menu__panel button.list-row-menu__item--danger:hover,
.list-row-menu__panel button[type=submit].list-row-menu__item--danger:hover,
.list-row-menu__panel button.list-row-menu__item--danger:focus-visible,
.list-row-menu__panel button[type=submit].list-row-menu__item--danger:focus-visible,
.list-row-menu__item--danger:hover,.list-row-menu__item--danger:focus-visible{
  background:color-mix(in srgb,var(--danger,#c0392b) 12%,transparent);
  color:var(--danger,#c0392b);box-shadow:none;transform:none
}
[data-theme="dark"] .list-row-menu__panel{
  background:var(--surface-2);border-color:var(--border-strong);
  box-shadow:0 22px 48px rgba(0,0,0,.72),0 0 0 1px var(--border-strong)
}
[data-theme="dark"] .list-row-menu__heading{border-bottom-color:var(--border-strong)}
[data-theme="dark"] .partner-users-pwd-form,
[data-theme="dark"] .partner-users-addr-form{
  background:var(--surface);border-color:var(--border-strong)
}
[data-theme="dark"] .partner-users-pwd-form .field-control,
[data-theme="dark"] .partner-users-addr-form .field-control,
[data-theme="dark"] .partner-users-addr-form input[type=tel]{
  background:var(--surface-2);border-color:var(--border-strong);color:var(--text)
}

/* ── Mobile listado (patrón transversal, ≤640px) ──────────────────────────────
   Auditoría listados backoffice: apila filtros y KPIs a una columna y sube el
   objetivo táctil de acciones de fila a 42px+. No toca formularios Access
   (esos ya tienen su propia media query en phase11_doc_crud.go).
   Va al final del archivo para que ningún edit posterior la pise por cascada. */
@media(max-width:640px){
  /* Listados de altura de viewport (list-scroll-page + shell 100dvh + overflow
     oculto) no tienen sentido en móvil: al apilar filtros y KPIs, el contenido
     superior supera a la tabla y el resto queda recortado sin forma de llegar a
     él. En móvil el scroll es el nativo de la página: suelta el contenedor. */
  .shell:has(.list-scroll-page){height:auto;overflow:visible}
  .shell:has(.list-scroll-page)>main{height:auto;max-height:none;overflow:visible;display:block;padding-top:.85rem;padding-bottom:1.25rem}
  .list-scroll-page{overflow:visible}
  .list-scroll-page>.tbl-wrap,
  .list-scroll-page__catalog>.tbl-wrap,
  .list-scroll-page__catalog>form>.tbl-wrap,
  .list-scroll-page__catalog>.stack>.tbl-wrap{min-height:0;max-height:none}
  .list-scroll-page__catalog>.stack{min-height:0;max-height:none;overflow:visible}
  /* KPIs: cada chip ocupa una banda completa y hace wrap natural. */
  .page-hd-kpis{gap:.4rem;width:100%}
  .page-hd-kpi{flex:1 1 auto;min-width:calc(50% - .4rem);justify-content:center;padding:.4rem .6rem}
  .page-hd > .flex{flex-wrap:wrap}
  /* Filtros y altas compactas: un control por línea a ancho completo.
     Excluye form-inline-row--table-cell (vive en <td>) que debe seguir en
     nowrap dentro del scroll horizontal de la tabla. */
  .filter-bar{padding:.65rem;gap:.55rem}
  .filter-bar .field,
  .filter-bar .form-inline-row .field{flex:1 1 100%;width:100%;min-width:0}
  .form-inline-row:not(.form-inline-row--table-cell) .field,
  .form-inline-row:not(.form-inline-row--table-cell) .field--grow,
  .form-inline-row:not(.form-inline-row--table-cell) .field--kind,
  .form-inline-row:not(.form-inline-row--table-cell) .field--group,
  .form-inline-row:not(.form-inline-row--table-cell) .field--division,
  .form-inline-row:not(.form-inline-row--table-cell) .field--role,
  .form-inline-row:not(.form-inline-row--table-cell) .field--period,
  .form-inline-row:not(.form-inline-row--table-cell) .field--pwd,
  .form-inline-row:not(.form-inline-row--table-cell) .field--amount,
  .form-inline-row:not(.form-inline-row--table-cell) .field--date,
  .form-inline-row:not(.form-inline-row--table-cell) .field--id,
  .form-inline-row:not(.form-inline-row--table-cell) .field--entity-id,
  .form-inline-row:not(.form-inline-row--table-cell) .field--threshold{flex:1 1 100%;width:100%;max-width:none;min-width:0}
  .form-inline-row:not(.form-inline-row--table-cell) .field--action{padding-top:.35rem}
  .form-inline-row:not(.form-inline-row--table-cell) .field--action .btn.sm,
  .form-inline-row:not(.form-inline-row--table-cell) .field>input:not([type=checkbox]):not([type=hidden]):not([type=radio]),
  .form-inline-row:not(.form-inline-row--table-cell) .field>select,
  .form-inline-row:not(.form-inline-row--table-cell) .field-control{width:100%;max-width:none;min-height:42px;font-size:16px}
  .form-inline-row .admin-date-field{max-width:none;width:100%}
  /* Touch de acciones dentro de tablas: sube el objetivo a 42px mínimo. */
  .tbl-tight .btn.sm,table .btn.sm,table .list-row-menu__summary{min-height:42px;padding:.4rem .7rem}
}

/* Comprobar eISBN (Provisiones eBook): franja compacta; el listado conserva el alto. */
.ebook-sku{display:grid;grid-template-columns:48px minmax(0,1fr);gap:.45rem .75rem;align-items:start;margin:0 0 .55rem;padding:.5rem .7rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}
.list-scroll-page>.ebook-sku{flex:0 0 auto}
.ebook-sku__cover{width:48px;height:64px;object-fit:cover;border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid var(--border)}
.ebook-sku__body{min-width:0}
.ebook-sku__verdict{margin:0 0 .2rem;font-size:.84rem;color:var(--text);line-height:1.35}
.ebook-sku__meta{margin:0;font-size:.84rem;color:var(--text-2);line-height:1.35}
.ebook-sku__pvp{font-weight:750;color:var(--text)}
.ebook-sku__more{margin-top:.35rem}
.ebook-sku__more>summary{cursor:pointer;font-size:.78rem;font-weight:650;color:var(--primary);user-select:none}
.ebook-sku__more[open]>summary{margin-bottom:.35rem}
.ebook-sku__more[open]{max-height:28vh;overflow:auto}
.ebook-sku__table{margin:0;max-height:none}
.ebook-sku__table.tbl-wrap{overflow:visible;box-shadow:none}
.ebook-sku__query{font-size:.84rem;padding:.15rem 0}
#ebook-provision-live-query:empty{display:none}
#ebook-provision-live-query{flex:0 0 auto;margin:0}
.list-scroll-page>.filter-bar{flex:0 0 auto;height:auto;max-height:none}
.filter-bar:has(>.ax-saved-views)>.form-inline-row{flex:0 0 auto;height:auto;align-self:stretch}
