/* ============================================================
   Australcode Admin Kit v1.1.36 — GENERADO por build-kit.sh
   NO editar a mano: editar el DS (assets/css/) o extras.css y
   regenerar. Fuente: wp-plugin-design (hub skills).
   Identidad: Verde Austral (decisión 8.109) — brand record:
   references/australcode-brand-identity.md
   ============================================================ */

/* =============================================================
   Australcode Design System — colors_and_type.css
   "Industrial Clarity" — premium B2B for WP-Admin context.
   Light-mode v1. Dark-mode tokens defined, not activated.
   ============================================================= */

/* -------------------------------------------------------------
   1. FONTS — Inter (UI) + JetBrains Mono (data).

   Self-hosted via fonts.css + assets/fonts/*.woff2. NO Google Fonts CDN
   por requisitos de WP.org submission, GDPR/LOPD (Chile) y performance
   (elimina round-trip externo en first paint).

   Ver references/fonts.md para subsetting (fonttools pyftsubset) y
   deploy. Pattern adoptado de conecta-shipping (audit baseline
   2026-05-13 — HUB-1 wp-design-auditor v1.0.0).
   ------------------------------------------------------------- */
@import url('./fonts.css');

.acds-root {
  /* -----------------------------------------------------------
     2. NEUTRALS — 13-step slate-leaning scale.
     Designed for surfaces, borders, text.
     ----------------------------------------------------------- */
  --acds-neutral-0:   #ffffff;
  --acds-neutral-25:  #fbfcfd;
  --acds-neutral-50:  #f7f8fa;
  --acds-neutral-100: #eef0f3;
  --acds-neutral-150: #e3e6eb;
  --acds-neutral-200: #d6dae1;
  --acds-neutral-300: #b8bec8;
  --acds-neutral-400: #8d95a3;
  --acds-neutral-500: #6b7384;
  --acds-neutral-600: #4d5566;
  --acds-neutral-700: #363c4a;
  --acds-neutral-800: #232833;
  --acds-neutral-900: #161a23;
  --acds-neutral-950: #0a0c11;

  /* -----------------------------------------------------------
     3. ACCENT (PRIMARY) — Verde Austral, 9-step scale (decisión 8.109 / AC-0).
     Primary CTA fill = accent-500 (--acds-accent-bg). accent-600 = --acds-accent-fg (texto/links sobre claro).
     --acds-accent-glow: SOLO sobre superficies oscuras (grafito) — nunca sobre claro.
     Canon: wp-plugin-design/references/australcode-brand-identity.md.
     ----------------------------------------------------------- */
  --acds-accent-50:  #e7f4ef;
  --acds-accent-100: #cfe9df;
  --acds-accent-200: #a3d6c2;
  --acds-accent-300: #6fbea1;
  --acds-accent-400: #3b9b7b;
  --acds-accent-500: #0e7a5f;  /* PRIMARY — 5.29:1 sobre blanco (AA texto) */
  --acds-accent-600: #0a5c48;
  --acds-accent-700: #084a3a;
  --acds-accent-800: #063a2e;
  --acds-accent-900: #052e25;
  --acds-accent-glow: #34d9b2; /* solo dark: logos/banners/cursor-firma — 10.5:1 sobre #0F1110 */

  /* -----------------------------------------------------------
     4. STATUS SEMANTICS — pending, processing, success, skipped,
     error, warning, provisional (parcial), voided (anulado).
     Each: bg / border / fg / dot.
     ----------------------------------------------------------- */
  /* PENDING — neutral, awaiting action */
  --acds-status-pending-bg:     #f1f3f6;
  --acds-status-pending-border: #d6dae1;
  --acds-status-pending-fg:     #4d5566;
  --acds-status-pending-dot:    #8d95a3;

  /* PROCESSING — info blue, in flight */
  --acds-status-processing-bg:     #e7f0fe;
  --acds-status-processing-border: #b9cdfa;
  --acds-status-processing-fg:     #1a44ae;
  --acds-status-processing-dot:    #2f66f0;

  /* SUCCESS — emitted, synchronized, ok */
  --acds-status-success-bg:     #e6f4ec;
  --acds-status-success-border: #b7dec5;
  --acds-status-success-fg:     #1f6b3f;
  --acds-status-success-dot:    #2c8f54;

  /* SKIPPED — intentionally bypassed */
  --acds-status-skipped-bg:     #f4f1ed;
  --acds-status-skipped-border: #ddd4c8;
  --acds-status-skipped-fg:     #6e5d44;
  --acds-status-skipped-dot:    #9c8866;

  /* ERROR — failed, rejected */
  --acds-status-error-bg:     #fdecec;
  --acds-status-error-border: #f5b9b9;
  --acds-status-error-fg:     #a51d1d;
  --acds-status-error-dot:    #d23232;

  /* WARNING — needs attention but not blocking */
  --acds-status-warning-bg:     #fdf3df;
  --acds-status-warning-border: #f0d68c;
  --acds-status-warning-fg:     #7a5510;
  --acds-status-warning-dot:    #c08a1a;

  /* PROVISIONAL (parcial) — partially completed */
  --acds-status-provisional-bg:     #f0ebfb;
  --acds-status-provisional-border: #d2c2f1;
  --acds-status-provisional-fg:     #4f33a1;
  --acds-status-provisional-dot:    #7853d1;

  /* VOIDED (anulado) — strikethrough, inactive */
  --acds-status-voided-bg:     #ebedf0;
  --acds-status-voided-border: #c8cdd5;
  --acds-status-voided-fg:     #4d5566;  /* AA: 6.4:1 (era #6b7384 = 4.06, fallaba AA @ fs-11) */
  --acds-status-voided-dot:    #6b7384;

  /* -----------------------------------------------------------
     5. CHARTS — 8-color categorical palette.
     Tested for deuteranopia/protanopia distinguishability.
     ----------------------------------------------------------- */
  --acds-chart-1: #2f66f0;  /* blue */
  --acds-chart-2: #2c8f54;  /* green */
  --acds-chart-3: #c08a1a;  /* amber */
  --acds-chart-4: #d23232;  /* red */
  --acds-chart-5: #7853d1;  /* violet */
  --acds-chart-6: #0e8a8a;  /* teal */
  --acds-chart-7: #b14a8c;  /* rose */
  --acds-chart-8: #4d5566;  /* slate */

  /* -----------------------------------------------------------
     6. DOMAIN ACCENTS — for chips/tags only, NOT global.
     Documents (SII), Couriers (CL), Image formats.
     ----------------------------------------------------------- */
  /* Documents */
  --acds-doc-boleta-bg:    #e7f0fe;  --acds-doc-boleta-fg:    #1a44ae;
  --acds-doc-factura-bg:   #e6f4ec;  --acds-doc-factura-fg:   #1f6b3f;
  --acds-doc-nc-bg:        #fdf3df;  --acds-doc-nc-fg:        #7a5510;
  --acds-doc-guia-bg:      #f0ebfb;  --acds-doc-guia-fg:      #4f33a1;

  /* Couriers */
  --acds-courier-bx-bg:        #e7eefd;  --acds-courier-bx-fg:        #173887;
  --acds-courier-starken-bg:   #fdecec;  --acds-courier-starken-fg:   #a51d1d;
  --acds-courier-chilexp-bg:   #fdf3df;  --acds-courier-chilexp-fg:   #7a5510;
  --acds-courier-correos-bg:   #e6f4ec;  --acds-courier-correos-fg:   #1f6b3f;

  /* Image formats */
  --acds-fmt-jpeg-bg: #f1f3f6;  --acds-fmt-jpeg-fg: #363c4a;
  --acds-fmt-webp-bg: #e7f0fe;  --acds-fmt-webp-fg: #1a44ae;
  --acds-fmt-avif-bg: #f0ebfb;  --acds-fmt-avif-fg: #4f33a1;
  --acds-fmt-png-bg:  #e6f4ec;  --acds-fmt-png-fg:  #1f6b3f;

  /* Pro / Premium feature gating — aliases of status-provisional
     (violeta institucional). Semantic-named para usarlo en gates
     Pro-only sin confundir con "estado provisional" en flow SII.
     Referenced by .acds-badge--pro y .acds-pro-gate pill. */
  --acds-pro-bg:     var(--acds-status-provisional-bg);
  --acds-pro-border: var(--acds-status-provisional-border);
  --acds-pro-fg:     var(--acds-status-provisional-fg);

  /* -----------------------------------------------------------
     7. SEMANTIC ALIASES — components reference these.
     Token-swap target for dark mode.
     ----------------------------------------------------------- */
  --acds-bg-app:      var(--acds-neutral-50);
  --acds-bg-surface:  var(--acds-neutral-0);
  --acds-bg-sunken:   var(--acds-neutral-100);
  --acds-bg-hover:    var(--acds-neutral-50);
  --acds-bg-active:   var(--acds-neutral-100);
  --acds-bg-overlay:  rgba(10, 12, 17, 0.48);

  --acds-fg-default:  var(--acds-neutral-900);
  --acds-fg-strong:   var(--acds-neutral-950);
  --acds-fg-muted:    var(--acds-neutral-600);  /* AA sobre bg-app: 7.0:1 (neutral-500 daba 4.48 — fallaba AA texto normal) */
  --acds-fg-subtle:   var(--acds-neutral-400);
  --acds-fg-disabled: var(--acds-neutral-300);
  --acds-fg-on-accent: var(--acds-neutral-0);

  --acds-border-subtle: var(--acds-neutral-150);
  --acds-border-default: var(--acds-neutral-200);
  --acds-border-strong: var(--acds-neutral-300);
  --acds-border-focus: var(--acds-accent-500);

  --acds-accent-fg:    var(--acds-accent-600);
  --acds-accent-bg:    var(--acds-accent-500);
  --acds-accent-bg-hover: var(--acds-accent-600);
  --acds-accent-bg-active: var(--acds-accent-700);
  --acds-accent-bg-subtle: var(--acds-accent-50);

  /* -----------------------------------------------------------
     8. TYPOGRAPHY
     ----------------------------------------------------------- */
  --acds-font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
  --acds-font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', 'Cascadia Code', Menlo, monospace;

  /* Scale — 11/12/13/14/15/17/20/24/32 */
  --acds-fs-11: 11px;   /* micro / labels caps */
  --acds-fs-12: 12px;   /* small ui */
  --acds-fs-13: 13px;   /* base UI (WP-Admin density) */
  --acds-fs-14: 14px;   /* prominent UI */
  --acds-fs-15: 15px;   /* lede */
  --acds-fs-17: 17px;   /* h4 */
  --acds-fs-20: 20px;   /* h3 */
  --acds-fs-24: 24px;   /* h2 */
  --acds-fs-32: 32px;   /* h1 / kpi value */

  /* Line heights */
  --acds-lh-tight:  1.2;
  --acds-lh-snug:   1.35;
  --acds-lh-normal: 1.5;

  /* Weights */
  --acds-fw-regular:  400;
  --acds-fw-medium:   500;
  --acds-fw-semibold: 600;
  --acds-fw-bold:     700;

  /* Tracking */
  --acds-tracking-tight:  -0.01em;
  --acds-tracking-normal: 0;
  --acds-tracking-wide:   0.02em;
  --acds-tracking-caps:   0.06em;

  /* -----------------------------------------------------------
     9. SPACING — 2px base step, ritmo ~4px (no-lineal), 12 steps.
     0/2/4/6/8/12/16/20/24/32/40/48/64
     ----------------------------------------------------------- */
  --acds-sp-0:  0;
  --acds-sp-1:  2px;
  --acds-sp-2:  4px;
  --acds-sp-3:  6px;
  --acds-sp-4:  8px;
  --acds-sp-5:  12px;
  --acds-sp-6:  16px;
  --acds-sp-7:  20px;
  --acds-sp-8:  24px;
  --acds-sp-9:  32px;
  --acds-sp-10: 40px;
  --acds-sp-11: 48px;
  --acds-sp-12: 64px;

  /* ----------------------------------------------------------- 
     10. RADII — xs/sm/md/lg/pill (2/4/6/8/999)
     ----------------------------------------------------------- */
  --acds-radius-xs:   2px;
  --acds-radius-sm:   4px;
  --acds-radius-md:   6px;
  --acds-radius-lg:   8px;
  --acds-radius-pill: 999px;

  /* -----------------------------------------------------------
     11. ELEVATION
     ----------------------------------------------------------- */
  --acds-shadow-none: none;
  --acds-shadow-border: inset 0 0 0 1px var(--acds-border-default);
  --acds-shadow-xs: 0 1px 1px rgba(16, 24, 40, 0.04);
  --acds-shadow-sm: 0 1px 2px rgba(16, 24, 40, 0.06), 0 1px 1px rgba(16, 24, 40, 0.04);
  --acds-shadow-md: 0 4px 8px -2px rgba(16, 24, 40, 0.08), 0 2px 4px -2px rgba(16, 24, 40, 0.05);
  --acds-shadow-lg: 0 12px 24px -8px rgba(16, 24, 40, 0.12), 0 4px 8px -4px rgba(16, 24, 40, 0.06);
  --acds-shadow-focus: 0 0 0 3px rgba(47, 102, 240, 0.25);
  --acds-shadow-focus-error: 0 0 0 3px rgba(210, 50, 50, 0.22);

  /* -----------------------------------------------------------
     12. MOTION — fast, no bounce.
     ----------------------------------------------------------- */
  --acds-dur-1: 100ms;   /* primitive scale — hover/press feedback (semantic: --acds-duration-fast) */
  --acds-dur-2: 160ms;   /* primitive scale — default ui transitions (semantic: --acds-duration-base) */
  --acds-dur-3: 240ms;   /* primitive scale — enter/exit larger surfaces (semantic: --acds-duration-slow) */

  /* Semantic aliases — los componentes del kit los usan SIEMPRE (no los --acds-dur-N
     crudos). Sweep 2026-06-16: componentes migrados a --acds-duration-* (A-001).
     Adoptado de conecta-shipping (audit 2026-05-13, HUB-3 wp-design-auditor v1.0.0).
     Nombres auto-documentantes. Backwards-compat preservado via los --acds-dur-N (un
     consumer externo —ej. back-in-stock— puede seguir referenciándolos). */
  --acds-duration-fast: var(--acds-dur-1);
  --acds-duration-base: var(--acds-dur-2);
  --acds-duration-slow: var(--acds-dur-3);
  --acds-ease-standard: cubic-bezier(0.2, 0, 0, 1);
  --acds-ease-out:      cubic-bezier(0.16, 1, 0.3, 1);

  /* -----------------------------------------------------------
     13. LAYOUT
     ----------------------------------------------------------- */
  --acds-layout-sidebar:    240px;
  --acds-layout-topbar:     48px;
  --acds-layout-row-sm:     32px;
  --acds-layout-row:        40px;
  --acds-layout-row-lg:     48px;
  --acds-layout-container:  1440px;

  /* -----------------------------------------------------------
     14. BREAKPOINTS — exposed as CSS vars for runtime read.
     Use @media (min-width: 768px) directly in stylesheets.
     ----------------------------------------------------------- */
  --acds-bp-sm:  640px;
  --acds-bp-md:  768px;
  --acds-bp-lg:  1024px;
  --acds-bp-xl:  1280px;
  --acds-bp-2xl: 1536px;

  /* -----------------------------------------------------------
     15. Z-INDEX
     ----------------------------------------------------------- */
  --acds-z-base:    0;
  --acds-z-sticky:  10;
  --acds-z-dropdown: 100;
  --acds-z-overlay: 1000;
  --acds-z-modal:   1010;
  --acds-z-toast:   1100;
  --acds-z-tooltip: 1200;
}

/* -------------------------------------------------------------
   DARK MODE — defined, NOT activated in v1.
   Activate with [data-theme="dark"] on <html>.
   Status colors desaturated ~30% to avoid screen burn.
   ------------------------------------------------------------- */
.acds-root[data-theme="dark"] {
  --acds-bg-app:      #0a0c11;
  --acds-bg-surface:  #14181f;
  --acds-bg-sunken:   #1c2027;
  --acds-bg-hover:    #1c2027;
  --acds-bg-active:   #232830;
  --acds-bg-overlay:  rgba(0, 0, 0, 0.6);

  --acds-fg-default:  #f1f3f6;
  --acds-fg-strong:   #ffffff;
  --acds-fg-muted:    #9ca3ae;
  --acds-fg-subtle:   #6b7384;
  --acds-fg-disabled: #4d5566;
  --acds-fg-on-accent: #ffffff;

  --acds-border-subtle: #232830;
  --acds-border-default: #2c323d;
  --acds-border-strong: #3a4150;

  --acds-accent-fg:    #34d9b2;
  --acds-accent-bg:    #0e8f6e;
  --acds-accent-bg-hover: #15a57f;
  --acds-accent-bg-active: #34d9b2;
  --acds-accent-bg-subtle: rgba(52, 217, 178, 0.12);

  --acds-status-pending-bg:     rgba(141, 149, 163, 0.12);
  --acds-status-pending-border: rgba(141, 149, 163, 0.28);
  --acds-status-pending-fg:     #b8bec8;
  --acds-status-processing-bg:     rgba(47, 102, 240, 0.14);
  --acds-status-processing-border: rgba(47, 102, 240, 0.32);
  --acds-status-processing-fg:     #8aa6f6;
  --acds-status-success-bg:     rgba(44, 143, 84, 0.14);
  --acds-status-success-border: rgba(44, 143, 84, 0.32);
  --acds-status-success-fg:     #6ec18b;
  --acds-status-error-bg:     rgba(210, 50, 50, 0.14);
  --acds-status-error-border: rgba(210, 50, 50, 0.32);
  --acds-status-error-fg:     #f08080;
  --acds-status-warning-bg:     rgba(192, 138, 26, 0.14);
  --acds-status-warning-border: rgba(192, 138, 26, 0.32);
  --acds-status-warning-fg:     #e6c061;
  --acds-status-provisional-bg:     rgba(120, 83, 209, 0.14);
  --acds-status-provisional-border: rgba(120, 83, 209, 0.32);
  --acds-status-provisional-fg:     #a791e0;
  --acds-status-voided-bg:     rgba(141, 149, 163, 0.10);
  --acds-status-voided-border: rgba(141, 149, 163, 0.22);
  --acds-status-voided-fg:     #8d95a3;
  --acds-status-skipped-bg:     rgba(156, 136, 102, 0.14);
  --acds-status-skipped-border: rgba(156, 136, 102, 0.30);
  --acds-status-skipped-fg:     #c4a97e;

  --acds-shadow-xs: 0 1px 1px rgba(0, 0, 0, 0.4);
  --acds-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4), 0 1px 1px rgba(0, 0, 0, 0.3);
  --acds-shadow-md: 0 4px 8px -2px rgba(0, 0, 0, 0.5), 0 2px 4px -2px rgba(0, 0, 0, 0.35);
  --acds-shadow-lg: 0 12px 24px -8px rgba(0, 0, 0, 0.6), 0 4px 8px -4px rgba(0, 0, 0, 0.4);
  --acds-shadow-focus: 0 0 0 3px rgba(47, 102, 240, 0.35);
}

@media (prefers-color-scheme: dark) {
  /* No auto-activation in v1. Customer enables via data-theme. */
}

/* -------------------------------------------------------------
   BASE — minimal, opt-in.
   ------------------------------------------------------------- */
.acds-root,
.cd {
  font-family: var(--acds-font-sans);
  font-size: var(--acds-fs-13);
  line-height: var(--acds-lh-normal);
  color: var(--acds-fg-default);
  background: var(--acds-bg-app);
  font-feature-settings: 'cv11', 'ss01', 'tnum';
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* Numerals tabular — always for data. */
.acds-num,
.acds-mono,
.acds-tbl td.acds-num,
.acds-tbl th.acds-num {
  font-variant-numeric: tabular-nums;
}

.acds-mono {
  font-family: var(--acds-font-mono);
  font-feature-settings: 'tnum', 'zero';
  font-size: 0.92em;
}

/* -------------------------------------------------------------
   SEMANTIC TYPE — opt-in classes (no global resets).
   ------------------------------------------------------------- */
.acds-h1 {
  font-size: var(--acds-fs-32);
  font-weight: var(--acds-fw-semibold);
  line-height: var(--acds-lh-tight);
  letter-spacing: var(--acds-tracking-tight);
  color: var(--acds-fg-strong);
}

.acds-h2 {
  font-size: var(--acds-fs-24);
  font-weight: var(--acds-fw-semibold);
  line-height: var(--acds-lh-tight);
  letter-spacing: var(--acds-tracking-tight);
  color: var(--acds-fg-strong);
}

.acds-h3 {
  font-size: var(--acds-fs-20);
  font-weight: var(--acds-fw-semibold);
  line-height: var(--acds-lh-snug);
  color: var(--acds-fg-strong);
}

.acds-h4 {
  font-size: var(--acds-fs-17);
  font-weight: var(--acds-fw-semibold);
  line-height: var(--acds-lh-snug);
  color: var(--acds-fg-strong);
}

.acds-lede {
  font-size: var(--acds-fs-15);
  line-height: var(--acds-lh-normal);
  color: var(--acds-fg-muted);
}

.acds-body {
  font-size: var(--acds-fs-13);
  line-height: var(--acds-lh-normal);
  color: var(--acds-fg-default);
}

.acds-small {
  font-size: var(--acds-fs-12);
  line-height: var(--acds-lh-snug);
  color: var(--acds-fg-muted);
}

.acds-caps {
  font-size: var(--acds-fs-11);
  font-weight: var(--acds-fw-semibold);
  letter-spacing: var(--acds-tracking-caps);
  text-transform: uppercase;
  color: var(--acds-fg-muted);
}

.acds-kbd {
  font-family: var(--acds-font-mono);
  font-size: var(--acds-fs-11);
  padding: 1px 5px;
  background: var(--acds-bg-sunken);
  border: 1px solid var(--acds-border-default);
  border-bottom-width: 2px;
  border-radius: var(--acds-radius-xs);
  color: var(--acds-fg-muted);
}

/* -------------------------------------------------------------
   REDUCED MOTION
   ------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* =============================================================
   Australcode Design System — components.css
   All components use acds- prefix.
   Depends on colors_and_type.css.
   ============================================================= */

/* -------------------------------------------------------------
   BUTTONS — .acds-btn
   Variants: primary, secondary, ghost, danger
   Sizes: sm, default, lg
   ------------------------------------------------------------- */
.acds-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 28px;
  padding: 0 12px;
  font-family: var(--acds-font-sans);
  font-size: var(--acds-fs-13);
  font-weight: var(--acds-fw-medium);
  line-height: 1;
  letter-spacing: var(--acds-tracking-tight);
  border: 1px solid transparent;
  border-radius: var(--acds-radius-sm);
  background: transparent;
  color: var(--acds-fg-default);
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
  transition: background var(--acds-duration-fast) var(--acds-ease-standard),
              border-color var(--acds-duration-fast) var(--acds-ease-standard),
              color var(--acds-duration-fast) var(--acds-ease-standard),
              box-shadow var(--acds-duration-fast) var(--acds-ease-standard);
}

.acds-btn:focus-visible {
  outline: none;
  box-shadow: var(--acds-shadow-focus);
}

/* Disabled neutro y legible — atenuar un botón de color con opacity mata el
   contraste del label (accent/error + texto blanco cae a ~2.8-3.2:1, falla AA).
   El disabled "no disponible" baja a neutro: fg-muted sobre bg-sunken pasa AA.
   El estado .acds-btn--loading (busy/spinner) se excluye: ahí el label ya es
   transparente y el spinner —no el contraste del texto— es la señal, así que
   conserva su background de color para que el spinner sea visible. */
.acds-btn:disabled:not(.acds-btn--loading),
.acds-btn[aria-disabled="true"]:not(.acds-btn--loading) {
  background: var(--acds-bg-sunken);
  color: var(--acds-fg-muted);
  border-color: var(--acds-border-default);
  cursor: not-allowed;
  opacity: 1;
}
.acds-btn--loading:disabled,
.acds-btn--loading[aria-disabled="true"] {
  cursor: wait;
}

/* Sizes */
.acds-btn--sm  { height: 24px; padding: 0 10px; font-size: var(--acds-fs-12); border-radius: var(--acds-radius-xs); }
.acds-btn--lg  { height: 36px; padding: 0 16px; font-size: var(--acds-fs-14); }

/* Loading state — canónico Australcode (H-003 audit 2026-05-25).

   Utility para feedback de motion durante AJAX/POST. Aplicar con JS:
     btn.classList.add('acds-btn--loading');
     btn.setAttribute('aria-busy', 'true');
     btn.setAttribute('disabled', '');
     // ... operación async
     btn.classList.remove('acds-btn--loading');
     btn.removeAttribute('aria-busy');
     btn.removeAttribute('disabled');

   El texto se vuelve transparente y aparece un spinner centrado del
   color del foreground del button variant. Requiere @keyframes acds-spin
   (definido al final de este file).
*/
.acds-btn--loading {
  position: relative;
  color: transparent !important;
  pointer-events: none;
  cursor: wait;
}
.acds-btn--loading::after {
  content: '';
  position: absolute;
  left: 50%; top: 50%;
  width: 14px; height: 14px;
  margin: -7px 0 0 -7px;
  border: 2px solid currentColor;
  border-right-color: transparent;
  border-radius: 50%;
  color: var(--acds-fg-on-accent);
  animation: acds-spin 0.6s linear infinite;
}
.acds-btn--secondary.acds-btn--loading::after,
.acds-btn--ghost.acds-btn--loading::after,
.acds-btn--danger.acds-btn--loading::after {
  color: var(--acds-fg-default);
}
@keyframes acds-spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

/* Primary */
.acds-btn--primary {
  background: var(--acds-accent-bg);
  color: var(--acds-fg-on-accent);
  border-color: var(--acds-accent-bg);
  box-shadow: var(--acds-shadow-xs), inset 0 1px 0 rgba(255, 255, 255, 0.12);
}
.acds-btn--primary:hover:not(:disabled):not([aria-disabled="true"]) { background: var(--acds-accent-bg-hover); border-color: var(--acds-accent-bg-hover); }
.acds-btn--primary:active { background: var(--acds-accent-bg-active); border-color: var(--acds-accent-bg-active); }

/* Secondary */
.acds-btn--secondary {
  background: var(--acds-bg-surface);
  color: var(--acds-fg-default);
  border-color: var(--acds-border-default);
  box-shadow: var(--acds-shadow-xs);
}
.acds-btn--secondary:hover:not(:disabled):not([aria-disabled="true"]) { background: var(--acds-bg-hover); border-color: var(--acds-border-strong); }
.acds-btn--secondary:active { background: var(--acds-bg-active); }

/* Ghost */
.acds-btn--ghost {
  background: transparent;
  color: var(--acds-fg-default);
  border-color: transparent;
}
.acds-btn--ghost:hover:not(:disabled):not([aria-disabled="true"]) { background: var(--acds-bg-hover); }
.acds-btn--ghost:active { background: var(--acds-bg-active); }

/* Danger */
.acds-btn--danger {
  background: var(--acds-status-error-dot);
  color: #fff;
  border-color: var(--acds-status-error-dot);
}
.acds-btn--danger:hover:not(:disabled):not([aria-disabled="true"]) { filter: brightness(0.94); }
.acds-btn--danger:active { filter: brightness(0.88); }

/* Danger ghost — destructivo SECUNDARIO. No debe dominar la jerarquía visual.
   Úsalo cuando la acción destructiva no es la principal de la página (Desactivar,
   Anular, Quitar). El destructivo confirmado dentro de un modal puede ir relleno
   (--acds-danger). Señala peligro sin gritar. */
.acds-btn--danger-ghost {
  background: transparent;
  border-color: var(--acds-status-error-border);
  color: var(--acds-status-error-fg);
}
.acds-btn--danger-ghost:hover:not(:disabled):not([aria-disabled="true"]) { background: var(--acds-status-error-dot); border-color: var(--acds-status-error-dot); color: #fff; }
.acds-btn--danger-ghost:active { filter: brightness(0.92); }

/* Icon-only */
.acds-btn--icon {
  width: 28px;
  padding: 0;
}
.acds-btn--icon.acds-btn--sm { width: 24px; }
.acds-btn--icon.acds-btn--lg { width: 36px; }

/* -------------------------------------------------------------
   FORM CONTROLS — .acds-input, .acds-select, .acds-textarea
   ------------------------------------------------------------- */
.acds-input,
.acds-select,
.acds-textarea {
  display: block;
  width: 100%;
  height: 32px;
  padding: 0 10px;
  font-family: var(--acds-font-sans);
  font-size: var(--acds-fs-13);
  line-height: 1.4;
  color: var(--acds-fg-default);
  background: var(--acds-bg-surface);
  border: 1px solid var(--acds-border-default);
  border-radius: var(--acds-radius-sm);
  box-shadow: var(--acds-shadow-xs);
  transition: border-color var(--acds-duration-fast) var(--acds-ease-standard),
              box-shadow var(--acds-duration-fast) var(--acds-ease-standard);
}

.acds-input::placeholder,
.acds-textarea::placeholder { color: var(--acds-fg-subtle); }

.acds-input:hover:not(:disabled),
.acds-select:hover:not(:disabled),
.acds-textarea:hover:not(:disabled) { border-color: var(--acds-border-strong); }

.acds-input:focus,
.acds-select:focus,
.acds-textarea:focus {
  outline: none;
  border-color: var(--acds-border-focus);
  box-shadow: var(--acds-shadow-focus);
}

.acds-input:disabled,
.acds-select:disabled,
.acds-textarea:disabled {
  background-color: var(--acds-bg-sunken);
  color: var(--acds-fg-disabled);
  cursor: not-allowed;
}

.acds-textarea {
  height: auto;
  min-height: 64px;
  padding: 8px 10px;
  resize: vertical;
}

.acds-select {
  appearance: none;
  -webkit-appearance: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none' stroke='%236b7384' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'><path d='M3 4.5l3 3 3-3'/></svg>");
  background-repeat: no-repeat;
  background-position: right 10px center;
  padding-right: 28px;
}

/* Mono input for technical values */
.acds-input--mono { font-family: var(--acds-font-mono); font-size: 12px; font-variant-numeric: tabular-nums; }

/* Sizes */
.acds-input--sm, .acds-select--sm { height: 26px; font-size: var(--acds-fs-12); padding: 0 8px; }
.acds-input--lg, .acds-select--lg { height: 36px; font-size: var(--acds-fs-14); }

/* Validation states */
.acds-input[aria-invalid="true"],
.acds-select[aria-invalid="true"],
.acds-textarea[aria-invalid="true"] {
  border-color: var(--acds-status-error-dot);
}
.acds-input[aria-invalid="true"]:focus,
.acds-select[aria-invalid="true"]:focus,
.acds-textarea[aria-invalid="true"]:focus {
  box-shadow: var(--acds-shadow-focus-error);
}

/* -------------------------------------------------------------
   FIELD — wrappers for label + control + help/error
   ------------------------------------------------------------- */
.acds-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.acds-field__label {
  font-size: var(--acds-fs-12);
  font-weight: var(--acds-fw-medium);
  color: var(--acds-fg-default);
}
.acds-field__hint {
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
}
.acds-field__error {
  font-size: var(--acds-fs-12);
  color: var(--acds-status-error-fg);
  display: flex;
  align-items: center;
  gap: 4px;
}
.acds-field__success {
  font-size: var(--acds-fs-12);
  color: var(--acds-status-success-fg);
}

.acds-field-row {
  display: grid;
  grid-template-columns: 200px 1fr;
  gap: 12px 24px;
  align-items: start;
  padding: 12px 0;
  border-bottom: 1px solid var(--acds-border-subtle);
}
.acds-field-row:last-child { border-bottom: none; }
.acds-field-row__label {
  font-size: var(--acds-fs-13);
  font-weight: var(--acds-fw-medium);
  color: var(--acds-fg-default);
  padding-top: 8px;
}
.acds-field-row__hint {
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
  margin-top: 2px;
}

@media (max-width: 767px) {
  .acds-field-row {
    grid-template-columns: 1fr;
    gap: 6px;
  }
  .acds-field-row__label { padding-top: 0; }
}

/* -------------------------------------------------------------
   HELP TEXT + RECOMMENDATION — microcopy inline (premium-playbook §7.quater)
   ------------------------------------------------------------- */
/* Microcopy help-first, block-level y standalone bajo un control (distinto de
   .acds-field__hint, que vive dentro del wrapper .acds-field). Dimensión #10 (non-dev). */
.acds-help-text {
  margin: 4px 0 0;
  font-size: var(--acds-fs-12);
  line-height: 1.5;
  color: var(--acds-fg-muted);
}
.acds-help-text strong { color: var(--acds-fg-default); font-weight: var(--acds-fw-medium); }

/* Nota "nuestra recomendación": justifica la opción marcada con .acds-badge--accent.
   Acento izquierdo sobrio (no un callout ruidoso). Copy canónico:
   <strong>Nuestra recomendación:</strong> {opción} — {razón}. {cuándo cambiarla}. */
.acds-recommendation {
  margin: 6px 0 0;
  padding: 6px 10px;
  border-left: 2px solid var(--acds-accent-bg);
  background: var(--acds-accent-bg-subtle);
  border-radius: 0 var(--acds-radius-sm) var(--acds-radius-sm) 0;
  font-size: var(--acds-fs-12);
  line-height: 1.5;
  color: var(--acds-fg-default);
}
.acds-recommendation strong { color: var(--acds-accent-fg); font-weight: var(--acds-fw-semibold); }

/* -------------------------------------------------------------
   BADGE — .acds-badge
   ------------------------------------------------------------- */
.acds-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 20px;
  padding: 0 8px;
  font-size: var(--acds-fs-11);
  font-weight: var(--acds-fw-medium);
  line-height: 1;
  letter-spacing: var(--acds-tracking-normal);
  border: 1px solid transparent;
  border-radius: var(--acds-radius-xs);
  white-space: nowrap;
  background: var(--acds-status-pending-bg);
  border-color: var(--acds-status-pending-border);
  color: var(--acds-status-pending-fg);
}

.acds-badge__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
  flex-shrink: 0;
}

.acds-badge--processing { background: var(--acds-status-processing-bg); border-color: var(--acds-status-processing-border); color: var(--acds-status-processing-fg); }
.acds-badge--processing .acds-badge__dot { background: var(--acds-status-processing-dot); }

.acds-badge--success { background: var(--acds-status-success-bg); border-color: var(--acds-status-success-border); color: var(--acds-status-success-fg); }
.acds-badge--success .acds-badge__dot { background: var(--acds-status-success-dot); }

.acds-badge--skipped { background: var(--acds-status-skipped-bg); border-color: var(--acds-status-skipped-border); color: var(--acds-status-skipped-fg); }
.acds-badge--skipped .acds-badge__dot { background: var(--acds-status-skipped-dot); }

.acds-badge--error { background: var(--acds-status-error-bg); border-color: var(--acds-status-error-border); color: var(--acds-status-error-fg); }
.acds-badge--error .acds-badge__dot { background: var(--acds-status-error-dot); }

.acds-badge--warning { background: var(--acds-status-warning-bg); border-color: var(--acds-status-warning-border); color: var(--acds-status-warning-fg); }
.acds-badge--warning .acds-badge__dot { background: var(--acds-status-warning-dot); }

.acds-badge--provisional { background: var(--acds-status-provisional-bg); border-color: var(--acds-status-provisional-border); color: var(--acds-status-provisional-fg); }
.acds-badge--provisional .acds-badge__dot { background: var(--acds-status-provisional-dot); }

.acds-badge--voided { background: var(--acds-status-voided-bg); border-color: var(--acds-status-voided-border); color: var(--acds-status-voided-fg); text-decoration: line-through; text-decoration-thickness: 1px; }
.acds-badge--voided .acds-badge__dot { background: var(--acds-status-voided-dot); }

/* Accent / Pro chips (audit fix 2026-05-21) — accent = recomendado/default; pro = tier gating (alias --acds-pro-*) */
.acds-badge--accent { background: var(--acds-accent-bg-subtle); border-color: var(--acds-accent-200); color: var(--acds-accent-fg); }
.acds-badge--pro    { background: var(--acds-pro-bg); border-color: var(--acds-pro-border); color: var(--acds-pro-fg); }

/* Domain accent badges */
.acds-badge--doc-boleta  { background: var(--acds-doc-boleta-bg);  color: var(--acds-doc-boleta-fg);  border-color: transparent; }
.acds-badge--doc-factura { background: var(--acds-doc-factura-bg); color: var(--acds-doc-factura-fg); border-color: transparent; }
.acds-badge--doc-nc      { background: var(--acds-doc-nc-bg);      color: var(--acds-doc-nc-fg);      border-color: transparent; }
.acds-badge--doc-guia    { background: var(--acds-doc-guia-bg);    color: var(--acds-doc-guia-fg);    border-color: transparent; }

.acds-badge--bx       { background: var(--acds-courier-bx-bg);      color: var(--acds-courier-bx-fg);      border-color: transparent; }
.acds-badge--starken  { background: var(--acds-courier-starken-bg); color: var(--acds-courier-starken-fg); border-color: transparent; }
.acds-badge--chilexp  { background: var(--acds-courier-chilexp-bg); color: var(--acds-courier-chilexp-fg); border-color: transparent; }
.acds-badge--correos  { background: var(--acds-courier-correos-bg); color: var(--acds-courier-correos-fg); border-color: transparent; }

.acds-badge--jpeg { background: var(--acds-fmt-jpeg-bg); color: var(--acds-fmt-jpeg-fg); border-color: transparent; }
.acds-badge--webp { background: var(--acds-fmt-webp-bg); color: var(--acds-fmt-webp-fg); border-color: transparent; }
.acds-badge--avif { background: var(--acds-fmt-avif-bg); color: var(--acds-fmt-avif-fg); border-color: transparent; }
.acds-badge--png  { background: var(--acds-fmt-png-bg);  color: var(--acds-fmt-png-fg);  border-color: transparent; }

/* -------------------------------------------------------------
   HUB PRIMITIVES — agregadas en audit fix 2026-05-21 (P0 INV-2).
   Estaban documentadas en components.md / patterns.md sin regla CSS.
   Los composites ricos (acds-runner-status, acds-radio-card, acds-engine-card,
   acds-tbl--compact, acds-kpi--display) siguen como patrón documentado
   pendiente de promover — ver nota en components.md.
   ------------------------------------------------------------- */

/* Status dot — punto semántico standalone (distinto de acds-badge__dot) */
.acds-dot {
  display: inline-block;
  width: 8px; height: 8px;
  border-radius: var(--acds-radius-pill);
  background: var(--acds-fg-subtle);
  flex: none;
  vertical-align: middle;
}
.acds-dot--success    { background: var(--acds-status-success-dot); }
.acds-dot--processing { background: var(--acds-status-processing-dot); }
.acds-dot--pending    { background: var(--acds-status-pending-dot); }
.acds-dot--error      { background: var(--acds-status-error-dot); }
.acds-dot--warning    { background: var(--acds-status-warning-dot); }

/* Texto secundario inline */
.acds-muted { color: var(--acds-fg-muted); }

/* Fila de botones (footer de card, toolbars) */
.acds-button-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--acds-sp-4); }

/* Lista con viñetas (descripciones de feature) */
.acds-bullet-list { margin: 0; padding-left: var(--acds-sp-6); list-style: disc; }
.acds-bullet-list li { margin: var(--acds-sp-1) 0; }

/* Card genérica — versión simple de acds-surface (sin head/body/foot) */
.acds-card {
  background: var(--acds-bg-surface);
  border: 1px solid var(--acds-border-default);
  border-radius: var(--acds-radius-lg);
  padding: var(--acds-sp-7);
}

/* Pro-gate — card con contenido de función Pro (acento izquierdo) */
.acds-pro-gate { border-left: 3px solid var(--acds-pro-fg); }

/* Async banner — estado de operación en curso (role="status") */
.acds-async-banner {
  display: flex; align-items: center; gap: var(--acds-sp-4);
  padding: var(--acds-sp-4) var(--acds-sp-6);
  background: var(--acds-status-processing-bg);
  border: 1px solid var(--acds-status-processing-border);
  border-radius: var(--acds-radius-md);
  color: var(--acds-status-processing-fg);
  font-size: var(--acds-fs-13);
}

/* -------------------------------------------------------------
   SURFACE / CARD — .acds-surface
   ------------------------------------------------------------- */
.acds-surface {
  background: var(--acds-bg-surface);
  border: 1px solid var(--acds-border-subtle);
  border-radius: var(--acds-radius-lg);
  box-shadow: var(--acds-shadow-xs);
}
.acds-surface__head {
  padding: 14px 16px;
  border-bottom: 1px solid var(--acds-border-subtle);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.acds-surface__title {
  font-size: var(--acds-fs-14);
  font-weight: var(--acds-fw-semibold);
  color: var(--acds-fg-strong);
}
.acds-surface__lede {
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
  margin-top: 2px;
}
.acds-surface__body { padding: 16px; }
/* Premium-by-default: si por error se mete contenido directo en .acds-surface sin
   __head/__body/__foot, igual respira (no queda pegado a los bordes). Lo correcto
   sigue siendo usar __body. :has() soportado en navegadores evergreen desde 2023. */
.acds-surface:not(:has(> .acds-surface__head)):not(:has(> .acds-surface__body)):not(:has(> .acds-surface__foot)) {
  padding: var(--acds-sp-6);
}
.acds-surface__foot {
  padding: 12px 16px;
  border-top: 1px solid var(--acds-border-subtle);
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  background: var(--acds-bg-app);
  border-bottom-left-radius: var(--acds-radius-lg);
  border-bottom-right-radius: var(--acds-radius-lg);
}

/* -------------------------------------------------------------
   NOTICE — .acds-notice
   Variants: info, success, warning, error
   ------------------------------------------------------------- */
.acds-notice {
  display: flex;
  gap: 12px;
  padding: 12px 14px 12px 12px;
  border: 1px solid var(--acds-border-subtle);
  border-left-width: 3px;
  border-radius: var(--acds-radius-sm);
  background: var(--acds-bg-surface);
  font-size: var(--acds-fs-13);
  color: var(--acds-fg-default);
}
.acds-notice__icon { flex-shrink: 0; margin-top: 1px; color: var(--acds-fg-muted); }
.acds-notice__title { font-weight: var(--acds-fw-semibold); margin-bottom: 2px; }
.acds-notice__body  { color: var(--acds-fg-muted); font-size: var(--acds-fs-12); line-height: var(--acds-lh-normal); }
.acds-notice__actions { display: flex; gap: 8px; margin-top: 8px; }

.acds-notice--info { background: var(--acds-status-processing-bg); border-color: var(--acds-status-processing-border); border-left-color: var(--acds-status-processing-dot); }
.acds-notice--info .acds-notice__icon { color: var(--acds-status-processing-fg); }

.acds-notice--success { background: var(--acds-status-success-bg); border-color: var(--acds-status-success-border); border-left-color: var(--acds-status-success-dot); }
.acds-notice--success .acds-notice__icon { color: var(--acds-status-success-fg); }

.acds-notice--warning { background: var(--acds-status-warning-bg); border-color: var(--acds-status-warning-border); border-left-color: var(--acds-status-warning-dot); }
.acds-notice--warning .acds-notice__icon { color: var(--acds-status-warning-fg); }

.acds-notice--error { background: var(--acds-status-error-bg); border-color: var(--acds-status-error-border); border-left-color: var(--acds-status-error-dot); }
.acds-notice--error .acds-notice__icon { color: var(--acds-status-error-fg); }

/* -------------------------------------------------------------
   TABLE — .acds-tbl
   Dense WP-Admin context. 40px standard row.
   ------------------------------------------------------------- */
.acds-tbl {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--acds-fs-13);
}
.acds-tbl thead th {
  height: 36px;
  padding: 0 12px;
  background: var(--acds-bg-sunken);
  border-bottom: 1px solid var(--acds-border-default);
  text-align: left;
  font-size: var(--acds-fs-11);
  font-weight: var(--acds-fw-semibold);
  letter-spacing: var(--acds-tracking-caps);
  text-transform: uppercase;
  color: var(--acds-fg-muted);
  white-space: nowrap;
}
.acds-tbl tbody td {
  height: var(--acds-layout-row);
  padding: 0 12px;
  border-bottom: 1px solid var(--acds-border-subtle);
  color: var(--acds-fg-default);
  vertical-align: middle;
}
.acds-tbl tbody tr:hover td { background: var(--acds-bg-hover); }
.acds-tbl tbody tr:last-child td { border-bottom: none; }

.acds-tbl .acds-num,
.acds-tbl th.acds-num,
.acds-tbl td.acds-num {
  text-align: right;
  font-variant-numeric: tabular-nums;
  font-family: var(--acds-font-mono);
  font-size: 12px;
}
.acds-tbl th.acds-tbl__sort {
  cursor: pointer;
  user-select: none;
}
.acds-tbl th.acds-tbl__sort:hover { color: var(--acds-fg-default); }
.acds-tbl th.acds-tbl__sort[aria-sort="ascending"]::after  { content: ' ↑'; color: var(--acds-fg-default); }
.acds-tbl th.acds-tbl__sort[aria-sort="descending"]::after { content: ' ↓'; color: var(--acds-fg-default); }

/* Compact row */
.acds-tbl--sm tbody td { height: var(--acds-layout-row-sm); }

/* -------------------------------------------------------------
   KPI — .acds-kpi (dashboard tile)
   ------------------------------------------------------------- */
.acds-kpi {
  background: var(--acds-bg-surface);
  border: 1px solid var(--acds-border-subtle);
  border-radius: var(--acds-radius-lg);
  padding: 14px 16px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.acds-kpi__label {
  font-size: var(--acds-fs-12);
  font-weight: var(--acds-fw-medium);
  color: var(--acds-fg-muted);
}
.acds-kpi__value {
  font-size: var(--acds-fs-32);
  font-weight: var(--acds-fw-semibold);
  font-variant-numeric: tabular-nums;
  letter-spacing: var(--acds-tracking-tight);
  color: var(--acds-fg-strong);
  line-height: 1.1;
}
.acds-kpi__delta {
  font-size: var(--acds-fs-12);
  font-weight: var(--acds-fw-medium);
  font-variant-numeric: tabular-nums;
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.acds-kpi__delta--up   { color: var(--acds-status-success-fg); }
.acds-kpi__delta--down { color: var(--acds-status-error-fg); }
.acds-kpi__delta--flat { color: var(--acds-fg-muted); }
.acds-kpi__sub {
  font-size: var(--acds-fs-11);
  color: var(--acds-fg-subtle);
  font-family: var(--acds-font-mono);
  font-variant-numeric: tabular-nums;
}

/* -------------------------------------------------------------
   LINK — .acds-link
   ------------------------------------------------------------- */
.acds-link {
  color: var(--acds-accent-fg);
  text-decoration: none;
  cursor: pointer;
}
.acds-link:hover { text-decoration: underline; text-underline-offset: 2px; }
.acds-link:focus-visible {
  outline: none;
  box-shadow: var(--acds-shadow-focus);
  border-radius: 2px;
}

/* -------------------------------------------------------------
   CODE — .acds-code (inline)
   ------------------------------------------------------------- */
.acds-code {
  font-family: var(--acds-font-mono);
  font-size: 0.92em;
  padding: 1px 5px;
  background: var(--acds-bg-sunken);
  border: 1px solid var(--acds-border-subtle);
  border-radius: var(--acds-radius-xs);
  color: var(--acds-fg-strong);
}

/* -------------------------------------------------------------
   TOAST / SNACKBAR
   ------------------------------------------------------------- */
.acds-toast-region {
  position: fixed;
  bottom: 20px;
  right: 20px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  z-index: var(--acds-z-toast);
  pointer-events: none;
}
.acds-toast {
  pointer-events: auto;
  min-width: 280px;
  max-width: 400px;
  padding: 10px 12px;
  background: var(--acds-bg-surface);
  border: 1px solid var(--acds-border-default);
  border-left: 3px solid var(--acds-status-processing-dot);
  border-radius: var(--acds-radius-md);
  box-shadow: var(--acds-shadow-md);
  display: flex;
  align-items: flex-start;
  gap: 8px;
  font-size: var(--acds-fs-13);
}
.acds-toast--success { border-left-color: var(--acds-status-success-dot); }
.acds-toast--error   { border-left-color: var(--acds-status-error-dot); }
.acds-toast--warning { border-left-color: var(--acds-status-warning-dot); }
.acds-toast__title { font-weight: var(--acds-fw-semibold); margin-bottom: 1px; }
.acds-toast__body  { color: var(--acds-fg-muted); font-size: var(--acds-fs-12); }
.acds-toast__close {
  background: transparent; border: 0; cursor: pointer;
  color: var(--acds-fg-subtle); padding: 2px; margin: -2px;
  border-radius: var(--acds-radius-xs);
}
.acds-toast__close:hover { color: var(--acds-fg-default); background: var(--acds-bg-hover); }

/* -------------------------------------------------------------
   MODAL / DIALOG
   ------------------------------------------------------------- */
.acds-overlay {
  position: fixed;
  inset: 0;
  background: var(--acds-bg-overlay);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: var(--acds-z-overlay);
  padding: 16px;
}
.acds-modal {
  width: 100%;
  max-width: 480px;
  background: var(--acds-bg-surface);
  border: 1px solid var(--acds-border-default);
  border-radius: var(--acds-radius-lg);
  box-shadow: var(--acds-shadow-lg);
  display: flex;
  flex-direction: column;
  max-height: calc(100vh - 32px);
}
.acds-modal__head {
  padding: 16px 20px 12px;
  border-bottom: 1px solid var(--acds-border-subtle);
}
.acds-modal__title { font-size: var(--acds-fs-17); font-weight: var(--acds-fw-semibold); color: var(--acds-fg-strong); }
.acds-modal__lede  { font-size: var(--acds-fs-13); color: var(--acds-fg-muted); margin-top: 4px; }
.acds-modal__body  { padding: 16px 20px; overflow: auto; }
.acds-modal__foot  {
  padding: 12px 20px;
  border-top: 1px solid var(--acds-border-subtle);
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  background: var(--acds-bg-app);
  border-bottom-left-radius: var(--acds-radius-lg);
  border-bottom-right-radius: var(--acds-radius-lg);
}

@media (max-width: 639px) {
  .acds-overlay { padding: 0; align-items: stretch; }
  .acds-modal { max-width: 100%; max-height: 100vh; border-radius: 0; }
}

/* -------------------------------------------------------------
   EMPTY STATE
   ------------------------------------------------------------- */
.acds-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 48px 24px;
  gap: 4px;
}
.acds-empty__art {
  width: 56px;
  height: 56px;
  margin-bottom: 12px;
  color: var(--acds-fg-subtle);
}
.acds-empty__title { font-size: var(--acds-fs-15); font-weight: var(--acds-fw-semibold); color: var(--acds-fg-strong); }
.acds-empty__body { font-size: var(--acds-fs-13); color: var(--acds-fg-muted); max-width: 360px; }
.acds-empty__cta { margin-top: 16px; }

/* -------------------------------------------------------------
   SKELETON / LOADING
   ------------------------------------------------------------- */
@keyframes acds-shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}
.acds-skeleton {
  background: linear-gradient(
    90deg,
    var(--acds-bg-sunken) 0%,
    var(--acds-neutral-150) 50%,
    var(--acds-bg-sunken) 100%
  );
  background-size: 200% 100%;
  animation: acds-shimmer 1.4s linear infinite;
  border-radius: var(--acds-radius-xs);
  display: block;
}
.acds-skeleton--text { height: 12px; margin: 4px 0; }
.acds-skeleton--circle { border-radius: 50%; }

/* Dot ellipsis (button loading) */
.acds-dots { display: inline-flex; gap: 3px; align-items: center; }
.acds-dots span {
  width: 4px; height: 4px; border-radius: 50%;
  background: currentColor;
  animation: acds-dot 1.2s infinite ease-in-out;
}
.acds-dots span:nth-child(2) { animation-delay: 0.15s; }
.acds-dots span:nth-child(3) { animation-delay: 0.30s; }
@keyframes acds-dot {
  0%, 60%, 100% { opacity: 0.25; }
  30% { opacity: 1; }
}

/* -------------------------------------------------------------
   WIZARD / STEPPER
   ------------------------------------------------------------- */
.acds-stepper {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 12px 0;
  border-bottom: 1px solid var(--acds-border-subtle);
  font-size: var(--acds-fs-13);
}
.acds-stepper__step {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: var(--acds-fg-muted);
}
.acds-stepper__step--active { color: var(--acds-fg-strong); font-weight: var(--acds-fw-medium); }
.acds-stepper__step--done { color: var(--acds-status-success-fg); }
.acds-stepper__num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px; height: 22px;
  border-radius: 50%;
  border: 1px solid var(--acds-border-default);
  background: var(--acds-bg-surface);
  font-size: var(--acds-fs-11);
  font-weight: var(--acds-fw-semibold);
  font-variant-numeric: tabular-nums;
}
.acds-stepper__step--active .acds-stepper__num { border-color: var(--acds-accent-bg); background: var(--acds-accent-bg); color: #fff; }
.acds-stepper__step--done .acds-stepper__num   { border-color: var(--acds-status-success-dot); background: var(--acds-status-success-dot); color: #fff; }
.acds-stepper__sep {
  flex: 1;
  height: 1px;
  background: var(--acds-border-default);
  max-width: 48px;
}

/* -------------------------------------------------------------
   FILE UPLOAD / DROPZONE
   ------------------------------------------------------------- */
.acds-dropzone {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 32px 24px;
  border: 1.5px dashed var(--acds-border-strong);
  border-radius: var(--acds-radius-lg);
  background: var(--acds-bg-sunken);
  text-align: center;
  gap: 6px;
  transition: border-color var(--acds-duration-base) var(--acds-ease-standard),
              background var(--acds-duration-base) var(--acds-ease-standard);
}
.acds-dropzone--active {
  border-color: var(--acds-accent-bg);
  background: var(--acds-accent-bg-subtle);
}
.acds-dropzone__title { font-size: var(--acds-fs-13); font-weight: var(--acds-fw-medium); color: var(--acds-fg-default); }
.acds-dropzone__hint  { font-size: var(--acds-fs-12); color: var(--acds-fg-muted); }

/* -------------------------------------------------------------
   TABS — 3 styles: underline, pill, segmented
   ------------------------------------------------------------- */
.acds-tabs {
  display: flex;
  gap: 0;
  border-bottom: 1px solid var(--acds-border-default);
}
.acds-tabs__tab {
  padding: 8px 12px;
  font-size: var(--acds-fs-13);
  font-weight: var(--acds-fw-medium);
  color: var(--acds-fg-muted);
  background: transparent;
  border: 0;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  cursor: pointer;
  transition: color var(--acds-duration-fast) var(--acds-ease-standard);
}
.acds-tabs__tab:hover { color: var(--acds-fg-default); }
.acds-tabs__tab[aria-selected="true"] {
  color: var(--acds-accent-fg);
  border-bottom-color: var(--acds-accent-bg);
}
.acds-tabs__tab:focus-visible { outline: none; box-shadow: var(--acds-shadow-focus); border-radius: 2px; }

/* Pill */
.acds-tabs--pill { border-bottom: none; gap: 4px; }
.acds-tabs--pill .acds-tabs__tab {
  border-radius: var(--acds-radius-pill);
  padding: 6px 12px;
  border-bottom: none;
  margin-bottom: 0;
}
.acds-tabs--pill .acds-tabs__tab[aria-selected="true"] {
  background: var(--acds-accent-bg);
  color: #fff;
  border-bottom-color: transparent;
}

/* Segmented */
.acds-tabs--segmented {
  border-bottom: none;
  background: var(--acds-bg-sunken);
  border: 1px solid var(--acds-border-subtle);
  padding: 2px;
  border-radius: var(--acds-radius-md);
  display: inline-flex;
  gap: 0;
}
.acds-tabs--segmented .acds-tabs__tab {
  padding: 4px 10px;
  border-radius: var(--acds-radius-sm);
  border-bottom: none;
  margin-bottom: 0;
  font-size: var(--acds-fs-12);
}
.acds-tabs--segmented .acds-tabs__tab[aria-selected="true"] {
  background: var(--acds-bg-surface);
  color: var(--acds-fg-strong);
  box-shadow: var(--acds-shadow-xs);
  border-bottom-color: transparent;
}

/* -------------------------------------------------------------
   PAGINATION
   ------------------------------------------------------------- */
.acds-pagination {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 12px;
  border-top: 1px solid var(--acds-border-subtle);
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
}
.acds-pagination__pages { display: inline-flex; gap: 2px; }
.acds-pagination__btn {
  min-width: 26px; height: 26px;
  padding: 0 6px;
  border: 1px solid transparent;
  border-radius: var(--acds-radius-xs);
  background: transparent;
  font-family: var(--acds-font-mono);
  font-size: var(--acds-fs-12);
  font-variant-numeric: tabular-nums;
  color: var(--acds-fg-default);
  cursor: pointer;
}
.acds-pagination__btn:hover:not(:disabled) { background: var(--acds-bg-hover); }
.acds-pagination__btn[aria-current="page"] {
  background: var(--acds-accent-bg);
  color: #fff;
}
.acds-pagination__btn:disabled { color: var(--acds-fg-disabled); cursor: not-allowed; }

/* -------------------------------------------------------------
   BREADCRUMB
   ------------------------------------------------------------- */
.acds-crumbs {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
}
.acds-crumbs__sep { color: var(--acds-fg-subtle); }
.acds-crumbs__item { color: var(--acds-fg-muted); text-decoration: none; }
.acds-crumbs__item:hover { color: var(--acds-fg-default); }
.acds-crumbs__item[aria-current="page"] { color: var(--acds-fg-default); font-weight: var(--acds-fw-medium); }

/* -------------------------------------------------------------
   COMMAND PALETTE (⌘K)
   ------------------------------------------------------------- */
.acds-cmdk {
  width: 100%;
  max-width: 560px;
  background: var(--acds-bg-surface);
  border: 1px solid var(--acds-border-default);
  border-radius: var(--acds-radius-lg);
  box-shadow: var(--acds-shadow-lg);
  display: flex;
  flex-direction: column;
  max-height: 480px;
  overflow: hidden;
}
.acds-cmdk__input {
  height: 44px;
  padding: 0 14px;
  border: 0;
  border-bottom: 1px solid var(--acds-border-subtle);
  font-size: var(--acds-fs-14);
  font-family: var(--acds-font-sans);
  color: var(--acds-fg-default);
  background: transparent;
  outline: none;
  width: 100%;
}
.acds-cmdk__list {
  list-style: none;
  margin: 0; padding: 6px 0;
  overflow: auto;
}
.acds-cmdk__group {
  padding: 6px 14px 4px;
  font-size: var(--acds-fs-11);
  font-weight: var(--acds-fw-semibold);
  letter-spacing: var(--acds-tracking-caps);
  text-transform: uppercase;
  color: var(--acds-fg-subtle);
}
.acds-cmdk__item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 14px;
  font-size: var(--acds-fs-13);
  color: var(--acds-fg-default);
  cursor: pointer;
}
.acds-cmdk__item[aria-selected="true"] { background: var(--acds-bg-hover); }
.acds-cmdk__item-icon { color: var(--acds-fg-muted); flex-shrink: 0; }
.acds-cmdk__item-shortcut { margin-left: auto; }

/* -------------------------------------------------------------
   FILTER CHIPS / DROPDOWN
   ------------------------------------------------------------- */
.acds-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 26px;
  padding: 0 8px 0 10px;
  border: 1px dashed var(--acds-border-strong);
  border-radius: var(--acds-radius-pill);
  background: transparent;
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-default);
  cursor: pointer;
}
.acds-chip:hover { background: var(--acds-bg-hover); }
.acds-chip--applied {
  border-style: solid;
  border-color: var(--acds-accent-bg);
  background: var(--acds-accent-bg-subtle);
  color: var(--acds-accent-fg);
}

/* -------------------------------------------------------------
   MENU / DROPDOWN
   ------------------------------------------------------------- */
.acds-menu {
  background: var(--acds-bg-surface);
  border: 1px solid var(--acds-border-default);
  border-radius: var(--acds-radius-md);
  box-shadow: var(--acds-shadow-md);
  padding: 4px;
  min-width: 180px;
  font-size: var(--acds-fs-13);
}
.acds-menu__item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 8px;
  border-radius: var(--acds-radius-sm);
  color: var(--acds-fg-default);
  cursor: pointer;
}
.acds-menu__item:hover { background: var(--acds-bg-hover); }
.acds-menu__item--danger { color: var(--acds-status-error-fg); }
.acds-menu__item-shortcut { margin-left: auto; color: var(--acds-fg-subtle); font-size: var(--acds-fs-11); }
.acds-menu__sep { height: 1px; background: var(--acds-border-subtle); margin: 4px 2px; }
.acds-menu__group {
  font-size: var(--acds-fs-11);
  font-weight: var(--acds-fw-semibold);
  letter-spacing: var(--acds-tracking-caps);
  text-transform: uppercase;
  color: var(--acds-fg-subtle);
  padding: 6px 8px 2px;
}

/* ============================================================
   Australcode Admin Kit — extras.css (FUENTE, AC-1 / 8.109)
   Se escribe en naming acds-* / variables sin prefijo (igual que
   assets/css/*) — build-kit.sh transforma TODO junto a acds-*.
   Secciones: A componentes promovidos (ex "pendientes" de
   components.md) · B superficies Freemius · C página Familia ·
   D integración WP-admin (L-028/L-029/page shell).
   ============================================================ */

/* ------------------------------------------------------------
   A.1 Status dot — canon L-006 (promovido desde AUI .acimg-dot)
   NUNCA emoji Unicode para estado (✅❌⚠️ prohibidos).
   ------------------------------------------------------------ */
.acds-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
}
.acds-dot--ok       { background: var(--acds-status-success-dot); }
.acds-dot--warn     { background: var(--acds-status-warning-dot); }
.acds-dot--error    { background: var(--acds-status-error-dot); }
.acds-dot--inactive { background: var(--acds-neutral-300); }
.acds-dot--info     { background: var(--acds-status-processing-dot); }
/* alias semánticos (patrón AUI v0.23.12 — código que lee correcto) */
.acds-dot--success  { background: var(--acds-status-success-dot); }
.acds-dot--pending  { background: var(--acds-neutral-300); }
.acds-dot--warning  { background: var(--acds-status-warning-dot); }
.acds-dot--danger   { background: var(--acds-status-error-dot); }

/* ------------------------------------------------------------
   A.1.b Surface accent — borde-accent izquierdo sobre .acds-surface
   (promovido desde acprv .acds-card--accent; patrón reusable, hermano
   de la variante --acds-danger que los plugins ponen local sobre surface).
   ------------------------------------------------------------ */
.acds-surface--accent { border-left: 3px solid var(--acds-accent-500); }

/* ------------------------------------------------------------
   A.2 Runner status footer — bulk ops / async jobs (components.md)
   ------------------------------------------------------------ */
.acds-runner-status {
  display: flex;
  align-items: center;
  gap: var(--acds-sp-6);
  padding: var(--acds-sp-4) var(--acds-sp-6);
  border-top: 1px solid var(--acds-border-subtle);
  background: var(--acds-bg-sunken);
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
}
.acds-runner-status > span {
  display: inline-flex;
  align-items: center;
  gap: var(--acds-sp-3);
}
.acds-runner-status .acds-mono { margin-left: auto; color: var(--acds-fg-default); }

/* ------------------------------------------------------------
   A.3 Radio cards — selección excluyente rica (components.md)
   ------------------------------------------------------------ */
.acds-radio-card {
  display: block;
  padding: var(--acds-sp-5) var(--acds-sp-6);
  border: 1px solid var(--acds-border-default);
  border-radius: var(--acds-radius-md);
  background: var(--acds-bg-surface);
  cursor: pointer;
  transition: border-color var(--acds-duration-fast) var(--acds-ease-standard),
              box-shadow var(--acds-duration-fast) var(--acds-ease-standard);
}
.acds-radio-card:hover { border-color: var(--acds-border-strong); }
.acds-radio-card:has(input:checked) {
  border-color: var(--acds-accent-500);
  box-shadow: 0 0 0 1px var(--acds-accent-500);
  background: var(--acds-accent-50);
}
.acds-radio-card:has(input:focus-visible) { box-shadow: var(--acds-shadow-focus); }
.acds-radio-card input[type="radio"] {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}
.acds-radio-card__title {
  display: flex;
  align-items: center;
  gap: var(--acds-sp-3);
  font-size: var(--acds-fs-13);
  font-weight: var(--acds-fw-semibold);
  color: var(--acds-fg-strong);
}
.acds-radio-card__meta { margin-top: var(--acds-sp-1); color: var(--acds-fg-muted); }
.acds-radio-card__desc {
  margin-top: var(--acds-sp-2);
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
  line-height: var(--acds-lh-snug);
}

/* ------------------------------------------------------------
   A.4 Engine / provider cards — diagnóstico (components.md)
   ------------------------------------------------------------ */
.acds-engine-card {
  border: 1px solid var(--acds-border-default);
  border-radius: var(--acds-radius-md);
  background: var(--acds-bg-surface);
  overflow: hidden;
}
.acds-engine-card--active { border-left: 3px solid var(--acds-accent-500); }
.acds-engine-card--unavailable { opacity: 0.6; }
.acds-engine-card__head {
  display: flex;
  align-items: center;
  gap: var(--acds-sp-4);
  padding: var(--acds-sp-4) var(--acds-sp-6);
  border-bottom: 1px solid var(--acds-border-subtle);
  flex-wrap: wrap;
}
.acds-engine-card__name {
  font-family: var(--acds-font-mono);
  font-size: var(--acds-fs-13);
  font-weight: var(--acds-fw-semibold);
  color: var(--acds-fg-strong);
}
.acds-engine-card__matrix { padding: var(--acds-sp-3) var(--acds-sp-6) var(--acds-sp-5); }

/* ------------------------------------------------------------
   A.5 Tabla compacta + KPI display (components.md)
   ------------------------------------------------------------ */
.acds-tbl--compact th,
.acds-tbl--compact td {
  height: 30px;
  padding-top: 2px;
  padding-bottom: 2px;
  font-size: var(--acds-fs-12);
}
.acds-kpi--display { border-left: 3px solid var(--acds-accent-500); }
.acds-kpi--display .acds-kpi__value {
  font-family: var(--acds-font-mono);
  font-size: var(--acds-fs-32);
  font-weight: var(--acds-fw-semibold);
  line-height: var(--acds-lh-tight);
}
.acds-kpi--display .acds-kpi__sub {
  display: block;
  margin-top: var(--acds-sp-1);
  color: var(--acds-fg-muted);
}

/* ------------------------------------------------------------
   Icon slot del KPI — caja sutil + icono stroke monocromo, para
   escaneabilidad sin romper el data-first. De-fork bsale (2026-06-25).
   El SVG (stroke, currentColor) lo pone el markup; el modifier define el tono.
   Semántica (usar consistente, no por gusto): base (accent) = métrica estándar ·
   --acds-muted = métrica secundaria/contextual neutra · --acds-danger = alerta, SOLO cuando
   el valor es problemático (ej. errores > 0). Varios KPIs del mismo rango → mismo tono.
   ------------------------------------------------------------ */
.acds-kpi__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: var(--acds-radius-md);
  background: var(--acds-accent-50);
  color: var(--acds-accent-600);
  margin-bottom: var(--acds-sp-1);
}
.acds-kpi__icon svg {
  width: 19px;
  height: 19px;
  stroke-width: 1.75;
}
.acds-kpi__icon--muted {
  background: var(--acds-neutral-100);
  color: var(--acds-fg-muted);
}
.acds-kpi__icon--danger {
  background: var(--acds-status-error-bg);
  color: var(--acds-status-error-fg);
}

/* ------------------------------------------------------------
   Botón con icono SVG inline (stroke): tamaño consistente por tamaño de botón.
   El acds-btn ya da gap inline-flex; esto solo dimensiona el SVG. De-fork bsale.
   ------------------------------------------------------------ */
.acds-btn svg { width: 16px; height: 16px; flex: none; }
.acds-btn--sm svg { width: 14px; height: 14px; }
.acds-btn--lg svg { width: 18px; height: 18px; }

/* ------------------------------------------------------------
   Action card — card de acción en grid con altura uniforme y el botón
   anclado al fondo (footer). Resuelve cards desiguales cuando el contenido
   varía entre tarjetas. De-fork bsale (2026-06-25). Aplicar sobre .acds-surface
   dentro de un grid align-items:stretch (default); el __body empuja el __foot.
   NO usar height:100% acá: el stretch del grid ya da la altura del row; un
   height:100% se resuelve contra el grid de altura auto (circular) y DESBORDA
   la card sobre la sección siguiente (medido: overlap 34px, bsale 2026-06-25).
   ------------------------------------------------------------ */
.acds-action-card {
  display: flex;
  flex-direction: column;
}
.acds-action-card__body { flex: 1 1 auto; }
.acds-action-card__foot {
  margin-top: var(--acds-sp-6);
  display: flex;
  align-items: center;
  gap: var(--acds-sp-4);
}

/* ------------------------------------------------------------
   Acción bloqueada — comunica el MOTIVO (icono candado + texto) en vez de
   un botón disabled mudo. Va donde iría el botón cuando la acción no aplica.
   De-fork bsale (2026-06-25).
   ------------------------------------------------------------ */
.acds-locked {
  display: inline-flex;
  align-items: center;
  gap: var(--acds-sp-3);
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
  line-height: var(--acds-lh-snug);
}
.acds-locked svg { width: 14px; height: 14px; flex: none; color: var(--acds-fg-subtle); }

/* ------------------------------------------------------------
   Grid de surfaces/cards — el `gap` del grid maneja el espaciado y NEUTRALIZA el
   auto-margin entre surfaces consecutivas (`.acds-surface + .acds-surface`, §gap-superficies):
   ese margin es para apilado en flujo normal y dentro de un grid empuja los items
   y les come altura → cards desiguales + overlap con la sección siguiente
   (medido en bsale 2026-06-25: top 380 vs 396, alturas 201 vs 185). Usar SIEMPRE
   `.acds-grid` para grids de surfaces en vez de un `display:grid` inline.
   Uso: <div class="acds-grid" style="grid-template-columns:repeat(auto-fit,minmax(240px,1fr))">
   ------------------------------------------------------------ */
.acds-grid {
  display: grid;
  gap: var(--acds-sp-6);
  align-items: stretch;
}
.acds-grid > .acds-surface + .acds-surface,
.acds-grid > .acds-card + .acds-card,
.acds-grid > .acds-surface + .acds-card,
.acds-grid > .acds-card + .acds-surface { margin-top: 0; }

/* ------------------------------------------------------------
   B.1 License box — estado de licencia Freemius (AC-1, nuevo)
   Estados: --acds-active / --acds-expired / --acds-free. El CTA usa
   $fs->get_upgrade_url() / Account page nativa del SDK.
   ------------------------------------------------------------ */
.acds-license-box {
  display: flex;
  align-items: center;
  gap: var(--acds-sp-5);
  padding: var(--acds-sp-5) var(--acds-sp-6);
  border: 1px solid var(--acds-border-default);
  border-radius: var(--acds-radius-md);
  background: var(--acds-bg-surface);
}
.acds-license-box__state {
  display: inline-flex;
  align-items: center;
  gap: var(--acds-sp-3);
  font-weight: var(--acds-fw-semibold);
  font-size: var(--acds-fs-13);
}
.acds-license-box__detail {
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
}
.acds-license-box__detail .acds-mono { color: var(--acds-fg-default); }
.acds-license-box__actions { margin-left: auto; display: flex; gap: var(--acds-sp-3); }
.acds-license-box--active  { border-left: 3px solid var(--acds-status-success-dot); }
.acds-license-box--expired { border-left: 3px solid var(--acds-status-warning-dot); background: var(--acds-status-warning-bg); }
.acds-license-box--free    { border-left: 3px solid var(--acds-neutral-300); }

/* ------------------------------------------------------------
   B.2 Upgrade CTA contextual — upsell sobrio (AC-1, nuevo)
   Página dedicada / sección — NUNCA admin notices globales.
   ------------------------------------------------------------ */
.acds-upgrade {
  padding: var(--acds-sp-6) var(--acds-sp-7);
  border: 1px solid var(--acds-pro-border);
  border-radius: var(--acds-radius-md);
  background: var(--acds-pro-bg);
}
.acds-upgrade__title {
  display: flex;
  align-items: center;
  gap: var(--acds-sp-3);
  font-size: var(--acds-fs-14);
  font-weight: var(--acds-fw-semibold);
  color: var(--acds-fg-strong);
  margin-bottom: var(--acds-sp-2);
}
.acds-upgrade__body { font-size: var(--acds-fs-13); color: var(--acds-fg-default); margin-bottom: var(--acds-sp-4); }
.acds-upgrade__body ul { margin: var(--acds-sp-2) 0 0 var(--acds-sp-5); }

/* pill PRO — marca features gateadas inline */
.acds-pro-pill {
  display: inline-flex;
  align-items: center;
  padding: 0 var(--acds-sp-3);
  height: 16px;
  border-radius: var(--acds-radius-pill);
  background: var(--acds-pro-bg);
  border: 1px solid var(--acds-pro-border);
  color: var(--acds-pro-fg);
  font-size: 10px;
  font-weight: var(--acds-fw-bold);
  letter-spacing: var(--acds-tracking-caps);
  text-transform: uppercase;
  vertical-align: middle;
}

/* pro-gate refinado: feature visible pero bloqueada, CTA centrado */
.acds-pro-gate { position: relative; }
.acds-pro-gate__body { opacity: 0.55; pointer-events: none; user-select: none; }
.acds-pro-gate__cta {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--acds-sp-3);
  text-align: center;
}

/* ------------------------------------------------------------
   C. Página "Familia Australcode" — cross-promo limpio (AC-1)
   Patrón AM depurado: página dedicada, CERO admin notices.
   ------------------------------------------------------------ */
.acds-family {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: var(--acds-sp-5);
}
.acds-family-card {
  display: flex;
  gap: var(--acds-sp-4);
  padding: var(--acds-sp-5);
  border: 1px solid var(--acds-border-default);
  border-radius: var(--acds-radius-md);
  background: var(--acds-bg-surface);
}
.acds-family-card__icon {
  width: 48px;
  height: 48px;
  border-radius: var(--acds-radius-sm);
  flex-shrink: 0;
}
.acds-family-card__name {
  font-size: var(--acds-fs-13);
  font-weight: var(--acds-fw-semibold);
  color: var(--acds-fg-strong);
}
.acds-family-card__desc {
  margin-top: var(--acds-sp-1);
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
  line-height: var(--acds-lh-snug);
}
.acds-family-card__action { margin-top: var(--acds-sp-3); }

/* ------------------------------------------------------------
   A.6 Page header — canon L-003 (documentado en components.md,
   promovido al CSS recién acá). Mark + título + versión + acciones.
   SIEMPRE seguido de <hr class="wp-header-end"> (L-029).
   ------------------------------------------------------------ */
.acds-page-header {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  column-gap: var(--acds-sp-4);
  row-gap: 0;
  padding-bottom: var(--acds-sp-5);
  border-bottom: 1px solid var(--acds-border-subtle);
  margin-bottom: var(--acds-sp-6);
}
.acds-page-header__mark { width: 26px; height: 26px; color: var(--acds-accent-500); }
.acds-page-header__title {
  font-size: var(--acds-fs-17);
  font-weight: var(--acds-fw-semibold);
  color: var(--acds-fg-strong);
  margin: 0;
  padding: 0;
  line-height: var(--acds-lh-tight);
}
.acds-page-header__version {
  font-size: var(--acds-fs-11);
  background: var(--acds-accent-50);
  color: var(--acds-accent-600);
  border: 1px solid var(--acds-accent-200);
  padding: 2px var(--acds-sp-3);
  border-radius: var(--acds-radius-pill);
}
.acds-page-header__actions { margin-left: auto; display: flex; gap: var(--acds-sp-3); }
.acds-page-header__lede {
  flex-basis: 100%;
  margin: var(--acds-sp-2) 0 0;
  font-size: var(--acds-fs-13);
  color: var(--acds-fg-muted);
  line-height: var(--acds-lh-normal);
  max-width: 720px;
}

/* ------------------------------------------------------------
   A.7 Section header — Opción 2 / app-bar (decisión 8.121).
   El page-header (A.6) es la barra de identidad del PLUGIN (icon-256 +
   nombre + versión + tabs); el section-header es el encabezado de la VISTA
   dentro del contenido: nombre de sección (H2) + lede + acciones. Universal:
   funciona con o sin tabs (no depende del tab activo). Va DESPUÉS del
   page-header + su <hr class="wp-header-end">. Parcial: section-header.php.
   ------------------------------------------------------------ */
.acds-section-head {
  display: flex;
  flex-wrap: wrap;                 /* B-155: las acciones bajan de fila cuando no caben cómodas */
  justify-content: space-between;
  align-items: flex-start;
  gap: var(--acds-sp-3) var(--acds-sp-6);    /* row-gap sp-3 al wrappear / column-gap sp-6 inline */
  margin: var(--acds-sp-7) 0 var(--acds-sp-2);
}
.acds-section-head__main { flex: 1 1 44rem; min-width: 0; }   /* B-155: basis 44rem dispara el wrap responsivo (acciones bajan ≤~1000px, inline ≥~1040px); min-width:0 = truncado del título + sin overflow en mobile */
.acds-section-title {
  margin: 0;
  font-size: var(--acds-fs-17);
  font-weight: var(--acds-fw-semibold);
  color: var(--acds-fg-strong);
  line-height: var(--acds-lh-snug);
}
.acds-section-lede {
  margin: var(--acds-sp-2) 0 0;
  font-size: var(--acds-fs-13);
  color: var(--acds-fg-muted);
  line-height: var(--acds-lh-normal);
  max-width: 720px;
}
.acds-section-actions { flex: 0 0 auto; display: flex; gap: var(--acds-sp-3); }

/* ------------------------------------------------------------
   D. Integración WP-admin
   ------------------------------------------------------------ */
/* L-029 — el header custom cierra con <hr class="wp-header-end">
   (WP reubica los admin notices después del primer h1/wp-header-end;
   sin esto caen DENTRO del header flex y lo rompen). */
.acds-root hr.wp-header-end {
  visibility: hidden;
  margin: 0;
  border: 0;
  height: 0;
}
.acds-root .notice { margin: var(--acds-sp-4) 0 var(--acds-sp-5); }

/* L-028 — submit_button() de WP inyecta .button-primary azul WP que
   pisa al CTA del kit en cascada. Override scoped al root del kit. */
.acds-root .button.button-primary {
  background: var(--acds-accent-bg);
  border-color: var(--acds-accent-bg);
  color: var(--acds-fg-on-accent);
  box-shadow: none;
  text-shadow: none;
}
.acds-root .button.button-primary:hover,
.acds-root .button.button-primary:focus {
  background: var(--acds-accent-bg-hover);
  border-color: var(--acds-accent-bg-hover);
  color: var(--acds-fg-on-accent);
}
.acds-root .button.button-primary:active { background: var(--acds-accent-bg-active); }
.acds-root .button.button-primary:focus { box-shadow: var(--acds-shadow-focus); }
.acds-root .button.button-primary[disabled],
.acds-root .button.button-primary:disabled {
  background: var(--acds-neutral-200) !important;
  border-color: var(--acds-neutral-200) !important;
  color: var(--acds-fg-disabled) !important;
}

/* Page shell — padding garantizado (premium-playbook: la página nunca
   pega contra los bordes del #wpbody). */
.acds-wrap {
  max-width: var(--acds-layout-container);
  padding: var(--acds-sp-6) var(--acds-sp-7) var(--acds-sp-9);
}

/* L-042 — Ritmo vertical entre superficies apiladas: el kit GARANTIZA el gap
   entre cards/surfaces consecutivas en flujo normal, NO plugin a plugin
   (gap detectado en acbis 1.0.0 Settings — varias .acds-surface pegadas sin
   separación; mismo patrón de fix que L-036). Los layouts horizontales usan
   grid/flex con su propio gap (ej. .acds-family), no adyacencia, así que esta
   regla no los toca. */
.acds-surface + .acds-surface,
.acds-card + .acds-card,
.acds-surface + .acds-card,
.acds-card + .acds-surface { margin-top: var(--acds-sp-6); }

/* L-036 — wp-admin subraya todo <a> de #wpbody-content (WP 5.3+): los
   primitives que pueden renderear como anchor (botones del header, tabs,
   acciones de card) resetean text-decoration EN EL KIT, no plugin a plugin.
   Detectado en acbis 1.0.0 (3 páginas + screenshots del listing); AUI no lo
   exhibió por elección de elemento — el gap sobrevive según el consumidor. */
.acds-root a.acds-btn,
.acds-root .acds-tabs__tab,
.acds-root .acds-family-card__action a { text-decoration: none; }

/* B-153 — extiende L-036: el botón como <a> también hereda el color:hover del theme.
   El kit solo fija `color` en el estado base del botón; en hover/focus/active el color cae
   al base y un theme con `a:active,a:hover{color:#…}` (0,1,1) lo gana → texto del link-color
   sobre el botón de accent. Reafirmar el color on-accent (primary/danger) y neutro
   (secondary/ghost) en TODOS los estados interactivos, family-wide. Medido en tigovapev2
   (Bricks, a:hover #1838d6); el audit en sandbox limpio no lo caza (sin a:hover de theme).
   Especificidad .acds-root a.acds-btn--x:hover = (0,3,1) > a:hover del theme (0,1,1). Origen acimg
   0.40.0 HUB-SUG-2. */
.acds-root a.acds-btn--primary:hover, .acds-root a.acds-btn--primary:focus,
.acds-root a.acds-btn--primary:focus-visible, .acds-root a.acds-btn--primary:active,
.acds-root a.acds-btn--danger:hover, .acds-root a.acds-btn--danger:focus,
.acds-root a.acds-btn--danger:focus-visible, .acds-root a.acds-btn--danger:active {
  color: var(--acds-fg-on-accent);
}
.acds-root a.acds-btn--secondary:hover, .acds-root a.acds-btn--secondary:focus, .acds-root a.acds-btn--secondary:active,
.acds-root a.acds-btn--ghost:hover, .acds-root a.acds-btn--ghost:focus, .acds-root a.acds-btn--ghost:active {
  color: var(--acds-fg-default);
}

/* B-154 — el page wrapper del kit hereda el `.wrap` de WP (margin:10px 20px 0 2px → 2px izq,
   padding:0): las secciones quedan flush al borde. Dar al kit su propio gutter de página en
   lugar de depender del `.wrap`. Target `.acds-root.wrap` — el page wrapper SIEMPRE lleva
   `.wrap` + `.acds-root`, así NO afecta los `.acds-root` embebidos sin `.wrap`. Especificidad
   (0,2,0) > `.wrap` base (0,1,0). Origen acimg 0.40.0 HUB-SUG-3 (valor validado por el parche
   local de acimg). */
.acds-root.wrap { padding: 4px 20px 24px 16px; }

/* B-139 — Primitivo savebar (barra de guardado al final del flujo). Una sticky bottom-bar flota y
   tapa el contenido cuando el form supera la altura del viewport (acbis F-101, 3 superficies rotas).
   Canon de familia (= ACF Pro / WC settings): la barra CIERRA el form en flujo normal, NO flota.
   Réplica del patrón validado en acbis v1.6.x. (Único cambio deliberado vs acbis: `__hint` en
   `--acds-fg-muted` — token idiomático del DS para texto secundario; acbis lo dejó en fg-default.)
   Markup + patrón "página admin multi-acción" (`form=`) → references/components.md. */
.acds-root .acds-savebar {
  margin-top: var(--acds-sp-6);
  background: color-mix(in srgb, var(--acds-bg-surface) 94%, transparent);
  backdrop-filter: saturate(180%) blur(8px);
  border: 1px solid var(--acds-border-default);
  border-radius: var(--acds-radius-lg);
  padding: 12px 18px;
  display: flex;
  align-items: center;
  gap: 14px;
  box-shadow: var(--acds-shadow-xs);
}
.acds-root .acds-savebar__hint { font-size: var(--acds-fs-12); color: var(--acds-fg-muted); }
.acds-root .acds-savebar__actions { margin-left: auto; display: flex; gap: 10px; }

/* F-003 — wp-list-table con table-layout:fixed parte caracteres en mobile estrecho
   (≤600). Patrón Stripe: scroll horizontal en bloque, no char-break. En el kit para
   toda la familia, no plugin a plugin. Origen: australcode-points-rewards 2026-06-10
   HU-3 (fix 003). ACOTADO (B-096): scroll SOLO para tablas markup-manual SIN toggle
   nativo — las WP_List_Table con `.column-primary` usan el toggle reveal del bloque
   de abajo, no scroll (las dos estrategias son mutuamente excluyentes por markup).
   B-121 (2× uniform-images: CatalogWatchPage/MultiSitePage): extiende el scroll a las
   `.widefat` que NO son WP_List_Table (settings + tablas de datos markup-manual). El
   `:not(.wp-list-table)` es deliberado: toda WP_List_Table también lleva `.widefat`, y
   sin la exclusión el scroll pisaría el toggle `.column-primary` del bloque de abajo. */
@media screen and (max-width: 600px) {
  .acds-root .wp-list-table:not(:has(.column-primary)),
  .acds-root .widefat:not(.wp-list-table) {
    display: block;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    table-layout: auto;
    white-space: nowrap;
  }
}

/* B-096 / L-047 — Reponer el responsive del toggle `▾` de WP_List_Table que el
   restyle de densidad del kit pisa <782px. WP oculta las columnas no-primarias y las
   revela bajo el toggle de la columna primaria; el restyle de padding pisa la posición
   que WP usa para ese toggle. Agnóstico de columnas → toda la familia lo hereda.
   REQUISITO: el plugin declara get_default_primary_column_name() (PHP) para anclar el
   toggle a su columna identificadora. Origen: acbis F-001 → kit (HU-1). Mismo patrón
   kit-level que L-036/L-042 (el fix vive en el kit, no plugin a plugin). */
@media screen and (max-width: 782px) {
  .acds-root .wp-list-table tbody td,
  .acds-root .wp-list-table tbody th { padding: 12px 16px; }

  .acds-root .wp-list-table td.column-primary { position: relative; padding-right: 56px; }

  .acds-root .wp-list-table .toggle-row {
    position: absolute;
    right: 12px;
    top: 10px;
    width: 36px;
    height: 36px;
  }
  .acds-root .wp-list-table .toggle-row::before {
    color: var(--acds-fg-muted);
    content: "\f140"; /* dashicons-arrow-down-alt2 */
  }
  .acds-root .wp-list-table tr.is-expanded .toggle-row::before { content: "\f142"; }

  /* Labels que WP core inyecta vía ::before en las columnas reveladas:
     jerarquía tipográfica del DS, agnóstico del nombre de columna. */
  .acds-root .wp-list-table td:not(.column-primary)::before {
    font-weight: var(--acds-fw-semibold);
    color: var(--acds-fg-muted);
    text-transform: uppercase;
    font-size: var(--acds-fs-11);
    letter-spacing: var(--acds-tracking-caps);
  }
}

/* ------------------------------------------------------------
   Checklist de onboarding — vertical, estados done/current/pending.
   Promovido del de-fork de bsale (audit 2026-06-24): un checklist real
   (estado + qué falta + CTA inline SOLO en el paso actual) reemplaza el
   chip-row plano "N de M pasos". Reusable para el onboarding de cualquier
   hermano. Pensado para vivir dentro de `.acds-surface--accent` (hero).
   ------------------------------------------------------------ */
.acds-checklist__progress {
  height: 4px;
  background: var(--acds-neutral-100);
  border-radius: var(--acds-radius-pill);
  overflow: hidden;
  margin-bottom: var(--acds-sp-5);
}
.acds-checklist__progress > span {
  display: block;
  height: 100%;
  background: var(--acds-accent-500);
  transition: width var(--acds-duration-base) var(--acds-ease-out);
}
.acds-checklist__item {
  display: flex;
  gap: var(--acds-sp-5);
  align-items: center;
  padding: var(--acds-sp-4) 0;
  border-top: 1px solid var(--acds-neutral-100);
}
.acds-checklist__item:first-of-type { border-top: none; }
.acds-checklist__marker {
  flex: none;
  width: 20px;
  height: 20px;
  border-radius: var(--acds-radius-pill);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--acds-fs-11);
  font-weight: var(--acds-fw-medium);
}
.acds-checklist__body { flex: 1; min-width: 0; }
.acds-checklist__title { font-size: var(--acds-fs-13); color: var(--acds-fg-default); }
.acds-checklist__desc {
  margin-top: var(--acds-sp-1);
  font-size: var(--acds-fs-12);
  color: var(--acds-fg-muted);
  line-height: var(--acds-lh-snug);
}
.acds-checklist__action { flex: none; }
.acds-checklist__item--done .acds-checklist__marker {
  background: var(--acds-accent-500);
  color: var(--acds-neutral-0);
}
.acds-checklist__item--done .acds-checklist__title {
  color: var(--acds-fg-strong);
  font-weight: var(--acds-fw-medium);
}
.acds-checklist__item--current .acds-checklist__marker {
  background: var(--acds-accent-50);
  border: 1.5px solid var(--acds-accent-500);
  color: var(--acds-accent-700);
}
.acds-checklist__item--current .acds-checklist__title {
  color: var(--acds-fg-strong);
  font-weight: var(--acds-fw-medium);
}
.acds-checklist__item--pending .acds-checklist__marker {
  border: 1.5px solid var(--acds-border-default);
  color: transparent;
}

/* ------------------------------------------------------------
   Card destacada (onboarding / hero) — borde accent completo, sin gritar.
   De-fork bsale (audit 2026-06-24): variante full-border del left-border de
   `--acds-accent`, para enmarcar el onboarding card sin un acento lateral fuerte.
   ------------------------------------------------------------ */
.acds-surface--highlight,
.acds-card--highlight {
  border-color: var(--acds-accent-200);
}

/* B-149 / L-058 — Card-collapse mobile (≤600) para tablas CUSTOM (no `WP_List_Table`).
   B-096/L-047 da el toggle-reveal de WP_List_Table y B-121 el scroll-x de `.widefat`
   markup-manual; ninguno da el card-collapse (label: value apilado), que lee mejor que
   el scroll en tablas de log de pocas columnas. Opt-in por tabla: el plugin agrega la
   clase `acds-table-cards` a `<table>` + `data-label="<header>"` por `<td>` (label que se
   inyecta vía ::before) + `acds-cell-key` en la métrica clave. Las tablas custom que un
   plugin construye a mano no heredan ningún card-collapse → cada uno lo reinventa opt-in
   y olvida tablas (acrwd: Tiers/Campaigns olvidadas, F-001; acbis "Recent recovered
   sales", 2º caso). Mismo patrón kit-level que F-003/B-096. */
@media screen and (max-width: 600px) {
  .acds-root table.acds-table-cards,
  .acds-root table.acds-table-cards tbody,
  .acds-root table.acds-table-cards tr,
  .acds-root table.acds-table-cards td { display: block; }

  /* thead oculto accesiblemente: el data-label de cada celda lo reemplaza. */
  .acds-root table.acds-table-cards thead {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    border: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
  }

  .acds-root table.acds-table-cards tr {
    margin-bottom: 12px;
    padding: 4px 16px;
    background: var(--acds-bg-surface);
    border: 1px solid var(--acds-border-default);
    border-radius: var(--acds-radius-md);
  }

  .acds-root table.acds-table-cards td {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 16px;
    padding: 8px 0;
    text-align: right;
    white-space: normal;
    border: 0;
    border-bottom: 1px solid var(--acds-border-subtle);
  }
  .acds-root table.acds-table-cards td:last-child { border-bottom: 0; }

  /* Label desde data-label: misma jerarquía que el ::before de B-096. */
  .acds-root table.acds-table-cards td[data-label]::before {
    content: attr(data-label);
    flex: 0 0 auto;
    text-align: left;
    font-weight: var(--acds-fw-semibold);
    color: var(--acds-fg-muted);
    text-transform: uppercase;
    font-size: var(--acds-fs-11);
    letter-spacing: var(--acds-tracking-caps);
  }

  /* Métrica clave destacada. */
  .acds-root table.acds-table-cards td.acds-cell-key {
    font-weight: var(--acds-fw-semibold);
    font-size: var(--acds-fs-14);
    color: var(--acds-fg-default);
  }
}

/* ============================================================
   LISTING CHROME — de-fork Fase 2 (bsale products/documents, 2026-06-25)
   Patrones recurrentes de toda vista de listado (products, documents, logs,
   audit, traceability) que cada plugin venía reinventando con clases propias.
   Promovidos al kit pulidos + premium. acds-* → acds-* en build.
   ============================================================ */

/* acds-listing-meta — resumen breve sobre una tabla ("1.284 documentos emitidos").
   Inline para que el texto fluya; número en mono tabular destacado; segmentos
   múltiples separados por middot tenue. Reemplaza el acbsl-stats-mini que el
   plugin reinventaba. */
.acds-listing-meta {
  margin: 0 0 var(--acds-sp-4);
  font-size: var(--acds-fs-13);
  color: var(--acds-fg-muted);
  line-height: 1.5;
}
.acds-listing-meta__num {
  font-family: var(--acds-font-mono);
  font-variant-numeric: tabular-nums;
  font-weight: var(--acds-fw-semibold);
  color: var(--acds-fg-strong);
}
.acds-listing-meta__item + .acds-listing-meta__item::before {
  content: "·";
  margin: 0 8px;
  color: var(--acds-fg-subtle);
}

/* acds-filterbar — toolbar de búsqueda/filtros sobre una tabla. La barra y el
   <form> interno comparten el flex; wrap a columna en móvil. __search crece
   hasta un máximo legible. Reemplaza el acbsl-filters reinventado por plugin. */
.acds-filterbar,
.acds-filterbar form {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--acds-sp-3);
}
.acds-filterbar { margin: 0 0 var(--acds-sp-4); }
/* El <form> llena la barra (sin esto queda shrink-to-fit como flex-item y el
   grow del __search no tiene espacio → el botón wrapea a otra fila). Sus
   controles hacen el flex interno sobre el ancho completo. */
.acds-filterbar > form { flex: 1 1 100%; min-width: 0; }
.acds-filterbar__search { flex: 1 1 240px; min-width: 0; max-width: 360px; }
/* Los inputs/selects del kit traen min-height 40; los botones 24–28 → en un
   toolbar horizontal quedan desalineados. Igualar los botones del filterbar al
   alto del input (40) para una fila uniforme. */
.acds-filterbar .acds-btn { min-height: 40px; }
@media screen and (max-width: 600px) {
  .acds-filterbar,
  .acds-filterbar form { flex-direction: column; align-items: stretch; }
  .acds-filterbar__search { max-width: none; }
}

/* acds-pagination (extensión) — components.css ya da __pages/__btn; acá el cluster
   izquierdo: info "Mostrando X–Y de Z" + selector de filas por página. __meta
   agrupa ambos a la izquierda del space-between. Reemplaza
   acbsl-pagination-info / -per-page. */
.acds-pagination__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 16px;
}
.acds-pagination__info strong {
  color: var(--acds-fg-default);
  font-variant-numeric: tabular-nums;
}
.acds-pagination__per-page {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.acds-pagination__per-page a,
.acds-pagination__per-page strong {
  font-family: var(--acds-font-mono);
  font-variant-numeric: tabular-nums;
  font-size: var(--acds-fs-12);
}
.acds-pagination__per-page strong { color: var(--acds-fg-strong); }
.acds-pagination__per-page a {
  color: var(--acds-fg-muted);
  text-decoration: none;
  padding: 2px 5px;
  border-radius: var(--acds-radius-xs);
}
.acds-pagination__per-page a:hover {
  background: var(--acds-bg-hover);
  color: var(--acds-fg-default);
}
/* WP paginate_links() emite .page-numbers (a + span.current + span.dots). Se
   estilan como los __btn del kit para que cualquier plugin use paginate_links()
   sin reinventar el markup de paginación (antes: acbsl-pagination-links). */
.acds-pagination__pages .page-numbers {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 26px;
  height: 26px;
  padding: 0 6px;
  border: 1px solid transparent;
  border-radius: var(--acds-radius-xs);
  font-family: var(--acds-font-mono);
  font-size: var(--acds-fs-12);
  font-variant-numeric: tabular-nums;
  color: var(--acds-fg-default);
  text-decoration: none;
}
.acds-pagination__pages a.page-numbers:hover { background: var(--acds-bg-hover); }
.acds-pagination__pages .page-numbers.current {
  background: var(--acds-accent-bg);
  color: #fff;
}
.acds-pagination__pages .page-numbers.dots {
  background: transparent;
  color: var(--acds-fg-subtle);
}

/* acds-row — estados de fila en acds-tbl. --acds-voided: registro anulado (documentos
   NC / boletas anuladas). Atenúa la fila + tacha SOLO el folio (acds-row__strike),
   que sigue legible. Patrón de familia para cualquier tabla con registros
   anulados/inactivos. Reemplaza acbsl-row-voided. */
.acds-tbl tbody tr.acds-row--voided td { color: var(--acds-fg-subtle); }
.acds-tbl tbody tr.acds-row--voided .acds-mono { color: var(--acds-fg-muted); }
.acds-tbl tbody tr.acds-row--voided .acds-row__strike { text-decoration: line-through; }
