/*
Version: 0.1.0
Text Domain: soyfan
*/
/* ===== Header fijo — reserva global cuando exista header ===== */
:root{ --cb-head-h: 0px; }            /* fallback; el JS lo actualiza con la altura real */
body.admin-bar{ --wp-admin-bar-h: 32px; }
@media (max-width:782px){
  body.admin-bar{ --wp-admin-bar-h: 46px; }
}

/* Reserva en TODAS las páginas donde el header esté activo (.has-cb-head en <html>) */
.has-cb-head body{
  padding-top: var(--cb-head-h);
}
@supports (padding: max(0px)){
  .has-cb-head body{
    padding-top: calc(var(--cb-head-h) + env(safe-area-inset-top));
  }
}

/* Suma la barra de admin cuando existe */
.has-cb-head body.admin-bar{
  padding-top: calc(var(--cb-head-h) + var(--wp-admin-bar-h, 0px));
}
@supports (padding: max(0px)){
  .has-cb-head body.admin-bar{
    padding-top: calc(var(--cb-head-h) + var(--wp-admin-bar-h, 0px) + env(safe-area-inset-top));
  }
}

/* El header no puede medir menos que la reserva */
#cb-chrome-head{ min-height: var(--cb-head-h); }

/* Anclas (#id) no quedan ocultas detrás del header */
.has-cb-head [id]{
  scroll-margin-top: calc(var(--cb-head-h) + var(--wp-admin-bar-h, 0px) + 12px);
}

/* Evitá colapso de márgenes del primer bloque */
.has-cb-head #site-content, .has-cb-head main{ display: flow-root; }
.has-cb-head #site-content > :first-child,
.has-cb-head main > :first-child{ margin-top: 6px; }




/* ======================================================================
   SOYFAN · MENU DASHBOARD (CSS)
   – Escopado dentro de .sf-dash
   – Tema por --brand
   – Móvil: bottom bar con 5 botones (centro = menú)
   – Logo dual: logo completo ↔ favicon al plegar (transición suave)
   ====================================================================== */

/* Scope & tokens */
.sf-dash{position:relative; isolation:isolate;}
.sf-dash{
  /* Layout/base */
  --aside-w:292px; --aside-w-compact:86px; --gap:20px;
  --radius:18px; --border:rgba(17,24,39,.08);
  --card:#ffffff; --shadow:0 10px 30px rgba(2,6,23,.10);
  --text:#0f172a; --muted:#64748b;
  --bb-h:66px; /* altura bottom bar */

  /* Posición/left del aside + tab (CSS-driven) */
  --aside-left: 24px;  /* si cambiás el left del aside, ajustá esta var */
  --tab-gap: 14px;     /* mitad del ancho del tab aprox. */
  --tab-left: calc(var(--aside-left) + var(--aside-w) - var(--tab-gap));

  /* ======= TEMA (cambiar SOLO esta variable) ======= */
  --brand: #FF421C;

  /* Paleta derivada automáticamente desde --brand */
  --brand-2: color-mix(in oklab, var(--brand) 82%, white 18%);
  --accent: var(--brand);
  --accent-2: var(--brand-2);
  --hover:  color-mix(in oklab, var(--brand) 10%, transparent);
  --active: color-mix(in oklab, var(--brand) 18%, transparent);
}
.sf-dash[data-compact="1"]{
  /* cuando está plegado, recalculamos el left del tab contra el ancho compacto */
  --tab-left: calc(var(--aside-left) + var(--aside-w-compact) - var(--tab-gap));
}

/* Propagar el tema a componentes internos sin afectar otros shortcodes */
.sf-dash,
.sf-dash .sf-root{
  --accent: var(--brand);
  --accent-2: var(--brand-2);
}

/* Tipografía del MENÚ (aside, solapita y bottom bar) */
.sf-dash .sf-aside,
.sf-dash .sf-aside * ,
.sf-dash .sf-tab,
.sf-dash .sf-bottombar{
  font-family:"Albert Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI",
               Roboto, Ubuntu, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif;
}

/* FIX: que los íconos usen la fuente correcta */
.sf-dash .dashicons,
.sf-dash .dashicons::before{
  font-family: "dashicons" !important;
  font-style: normal !important;
  font-weight: normal !important;
  speak: never;
}

/* ===== Aside flotante ===== */
.sf-dash .sf-aside{
  position:fixed; z-index:1000; left:var(--aside-left); top:24px; bottom:24px;
  width:var(--aside-w); background:var(--card);
  border:1px solid var(--border); border-radius:22px; box-shadow:var(--shadow);
  display:flex; flex-direction:column; overflow:hidden;
  /* Animaciones */
  transition: width .26s cubic-bezier(.22,1,.36,1), transform .25s ease, top .2s ease;
}
/* Plegado */
.sf-dash[data-compact="1"] .sf-aside{ width:var(--aside-w-compact); }

/* Solapita (PC) – elemento FUERA del aside, posición fija */
.sf-dash .sf-tab{
  position:fixed; z-index:1001;
  width:28px; height:54px; border-radius:12px;
  background:#fff; border:1px solid var(--border); box-shadow:var(--shadow);
  display:grid; place-items:center; cursor:pointer;
  transition: transform .26s cubic-bezier(.22,1,.36,1), opacity .2s ease;
  /* LEFT seguro, ligado al ancho del aside (normal/compacto) */
  left: var(--tab-left) !important;
}
.sf-dash .sf-tab .dashicons{font-size:18px; color:var(--muted);}
.sf-dash[data-compact="1"] .sf-tab{ transform: translateX(-6px) rotate(180deg); }

/* ===========================
   Head: LOGO DUAL con transición
   – .sf-logo__full (logo rectangular)
   – .sf-logo__mini (favicon/ícono Brand)
   =========================== */
.sf-dash .sf-head{
  padding:14px 14px 6px;
  display:flex; justify-content:center; align-items:center;
}
.sf-dash .sf-logo{
  position:relative; width:100%; height:48px;
  display:grid; place-items:center; overflow:hidden;
}
.sf-dash .sf-logo img{
  position:absolute; inset:auto; /* sólo para transición */
  max-height:50px; width:auto; object-fit:contain; border-radius:0;
  transition: opacity .18s ease, transform .18s ease, filter .18s ease;
  will-change: opacity, transform, filter;
}
/* Expandido: se ve el logo completo, el mini queda oculto */
.sf-dash .sf-logo .sf-logo__full{ opacity:1; transform:translateY(0) scale(1); filter:none; }
.sf-dash .sf-logo .sf-logo__mini{ opacity:0; transform:translateY(4px) scale(.85); filter:blur(.2px); }
/* Compacto: ocultar logo y mostrar favicon */
.sf-dash[data-compact="1"] .sf-logo .sf-logo__full{
  opacity:0; transform:translateY(4px) scale(.98); filter:blur(.2px);
}
.sf-dash[data-compact="1"] .sf-logo .sf-logo__mini{
  opacity:1; transform:translateY(0) scale(1); filter:none; max-height:35px;
}
/* Accesibilidad: reducir movimiento */
@media (prefers-reduced-motion: reduce){
  .sf-dash .sf-logo img{ transition:none; }
}

/* Divider */
.sf-dash .sf-divider{height:1px; background:#e5e7eb; margin:12px 14px;}

/* Usuario: avatar + nombre al lado */
.sf-dash .sf-user{display:flex; align-items:center; gap:12px; padding:10px 14px 12px;}
.sf-dash .sf-avatar{width:42px; height:42px; border-radius:50%; overflow:hidden; flex:0 0 42px; border:1px solid #e5e7eb;}
.sf-dash .sf-avatar img{width:100%; height:100%; object-fit:cover;}
.sf-dash .sf-username{font-weight:700; color:var(--text); font-size:13px; line-height:1.2;}
.sf-dash[data-compact="1"] .sf-username{display:none;}

/* Navegación */
.sf-dash .sf-nav{list-style:none; margin:8px 8px 0; padding:0; overflow:auto;}
.sf-dash .sf-item{margin:4px 0;}
.sf-dash .sf-link{display:flex; align-items:center; gap:12px; padding:10px 12px; border-radius:14px; text-decoration:none; color:var(--text);}
.sf-dash .sf-link:hover{background:var(--hover);}
.sf-dash .sf-item.is-active>.sf-link{
  background:var(--active); color:var(--accent); font-weight:600; position:relative;
}
.sf-dash .sf-item.is-active>.sf-link::after{
  content:''; position:absolute; right:6px; width:6px; height:22px; border-radius:6px;
  background:linear-gradient(180deg,var(--accent),var(--accent-2));
}
.sf-dash .sf-ico{
  font-size:18px; width:20px; height:20px;
  display:inline-flex; align-items:center; justify-content:center;
  color: var(--accent);
}
.sf-dash .sf-label{font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.sf-dash[data-compact="1"] .sf-label{display:none;}

/* Submenú */
.sf-dash .has-children>.sf-link{position:relative;}
.sf-dash .caret{margin-left:auto; color:#9aa2af; transition:transform .22s ease;}
.sf-dash .is-open>.sf-link .caret{transform:rotate(90deg);}
.sf-dash .sf-sub{list-style:none; margin:4px 0 8px 34px; padding:0; max-height:0; overflow:hidden; transition:max-height .28s ease;}
.sf-dash .is-open>.sf-sub{max-height:800px;}
.sf-dash[data-compact="1"] .sf-sub{display:none;}

/* Footer */
.sf-dash .sf-footer{margin-top:auto; padding:10px; display:flex; justify-content:flex-end;}
.sf-dash[data-compact="1"] .sf-footer{justify-content:center;}
.sf-dash .sf-logout{
  color:#9aa2af; text-decoration:none; padding:8px; border-radius:10px;
  width:42px; height:42px; display:grid; place-items:center;
}
.sf-dash .sf-logout:hover{background:#f3f4f6;}

/* Contenido (despega del aside en PC) */
.sf-dash .sf-content{
  padding:24px; margin-left:calc(24px + var(--aside-w) + 20px);
  transition: margin-left .26s cubic-bezier(.22,1,.36,1), padding-bottom .2s ease;
}
.sf-dash[data-compact="1"] .sf-content{margin-left:calc(24px + var(--aside-w-compact) + 20px);}

/* ======= MÓVIL: off-canvas con overlay + bottom bar ======= */
@media (max-width: 768px){
  .sf-dash .sf-aside{
    left:0; top:0; bottom:0; width:min(84vw, 330px); border-radius:0; box-shadow:var(--shadow);
    transform:translateX(-100%); transition:transform .25s ease;
  }
  .sf-dash[data-mobile-open="1"] .sf-aside{ transform:translateX(0); }
  .sf-dash .sf-content{
    margin-left:0; padding:18px;
    padding-top:12px;
    padding-bottom: calc(var(--bb-h) + env(safe-area-inset-bottom, 0px) + 12px); /* despega del bottom bar */
  }
  .sf-dash .sf-tab{ display:none; } /* sin solapita en móvil */
}

/* Overlay móvil */
.sf-dash .sf-ov{display:none; position:fixed; inset:0; background:rgba(0,0,0,.35); z-index:999;}
.sf-dash[data-mobile-open="1"] .sf-ov{display:block;}

/* ===== Bottom Bar (móvil) ===== */
.sf-dash .sf-bottombar{
  position:fixed; left:0; right:0;
  bottom:0; z-index:998; /* debajo del overlay para poder cerrarlo */
  height:var(--bb-h);
  background:#fff; border-top:1px solid var(--border);
  display:grid; grid-template-columns: repeat(5, 1fr);
  align-items:center; justify-items:center;
  padding:6px max(8px, env(safe-area-inset-left)) calc(6px + env(safe-area-inset-bottom)) max(8px, env(safe-area-inset-right));
  box-shadow:0 -10px 30px rgba(2,6,23,.06);
}
@media (min-width: 769px){
  .sf-dash .sf-bottombar{ display:none; }
}

.sf-dash .sf-bbtn{
  width:48px; height:44px; border-radius:14px;
  display:grid; place-items:center; text-decoration:none; border:1px solid transparent;
  color:#0f172a; background:transparent; cursor:pointer;
  transition: transform .18s ease, background .18s ease, border-color .18s ease, box-shadow .18s ease;
}
.sf-dash .sf-bbtn .dashicons{ font-size:22px; line-height:1; }
.sf-dash .sf-bbtn:active{ transform: translateY(1px); }
.sf-dash .sf-bbtn:hover{ background:var(--hover); }

/* Slots vacíos si no hay suficientes atajos */
.sf-dash .sf-bbtn--empty{ opacity:0; pointer-events:none; }

/* Botón central FAB */
.sf-dash .sf-bbtn--main{
  width:58px; height:58px; border-radius:20px; margin-top:-18px;
  background:linear-gradient(135deg,var(--accent-2),var(--accent));
  color:#fff; border:none; box-shadow:0 8px 24px rgba(37,99,235,.26);
}
.sf-dash .sf-bbtn--main:hover{ filter:saturate(1.05); box-shadow:0 10px 26px rgba(37,99,235,.30); }
.sf-dash .sf-bbtn--main .dashicons{ font-size:22px; }

/* ===== Modal de contraseña ===== */
.sf-pass-modal{
  display:none; position:fixed; inset:0; background:rgba(0,0,0,.45);
  align-items:center; justify-content:center; z-index:1200;
}
.sf-pass-modal[aria-hidden="false"]{ display:flex; }
.sf-pass-box{
  background:#fff; padding:28px 24px; border-radius:16px; width:92%;
  max-width:360px; box-shadow:var(--shadow); text-align:center;
}
.sf-pass-box h2{ margin:0 0 10px; font-size:18px; }
.sf-pass-box input{
  width:140px; text-align:center; font-size:24px; letter-spacing:8px;
  padding:8px; border:1px solid #e5e7eb; border-radius:8px;
}
.sf-pass-box button{
  margin-top:12px;
  background:linear-gradient(135deg,var(--accent-2),var(--accent));
  color:#fff; border:none; padding:10px 20px; border-radius:10px; font-weight:700; cursor:pointer;
}
.sf-pass-error{ color:#dc2626; font-size:12px; margin-top:8px; }














/* ======================================================================
   CEBRA · CORE UNIFICADO — HOJA DE ESTILO CB
   v4.3.1 · combos mobile + textarea + date input (icono a derecha, sin D/M/A)
   ====================================================================== */

/* =========================
 * 1) TOKENS Y TEMA
 * ========================= */
@import url('https://fonts.googleapis.com/css2?family=Albert+Sans:wght@400;600;700;800;900&display=swap');

:root{
  /* Tema base */
  --accent:#2563eb; --accent-dark:#1d4ed8;
  --danger:#dc2626; --ok:#16a34a; --ok-dark:#15803d;

  /* Derivados y estados */
  --accent-hov:   color-mix(in srgb, var(--accent) 88%, #000 12%);
  --accent-press: color-mix(in srgb, var(--accent) 76%, #000 24%);
  --warn:#f59e0b; --warn-dark: color-mix(in srgb, var(--warn) 86%, #000 14%);
  --danger-dark: color-mix(in srgb, var(--danger) 86%, #000 14%);

  /* Tipografía y escala */
  --text:#111827; --muted:#6b7280; --border:#e5e7eb; --hover:#f3f4f6; --radius:14px;
  --font-sans: "Albert Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI",
               Roboto, Ubuntu, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif;
  --font-size: 16px; --line: 1.5;

  /* Campos y botones */
  --field-h: 46px;
  --cb-btn-py: 8px; --cb-btn-px: 16px; --cb-btn-fs: 13px; --cb-btn-radius: 10px;
  --cb-btn-icon: 36px; --cb-btn-icon-fs: 15px;

  /* Tabla */
  --cb-th-bg: var(--hover); --cb-cell-py: 10px; --cb-cell-px: 12px;
  --cb-table-fs: 14px; --cb-col-min: 120px; --cb-col-min-field: 200px; --cb-col-tight: 72px;
  --thead-h: 44px; --row-h: 46px;

  /* Carga (overlay + skeleton) */
  --cb-loading-bg: rgba(255,255,255,.75);
  --cb-skeleton: #f3f4f6; --cb-skeleton-ink: #e5e7eb;
  --cb-spin-w: 2px;

  /* Toasts */
  --toast-bg:#111827; --toast-fg:#fff; --toast-ok:#065f46; --toast-warn:#92400e; --toast-err:#7f1d1d;

  /* Modales y tabs */
  --cb-modal-dur: 260ms; --cb-modal-ease: cubic-bezier(.22,.61,.36,1);
  --tab-dur: 260ms; --tab-ease: cubic-bezier(.22,.61,.36,1);

  /* Espaciados y capas */
  --stack-gap: 18px;
  --z-sticky: 5; --z-toast: 10000;
  --z-dropdown: 10060;

  /* Combobox */
  --cb-combo-gap: 6px;
  --cb-combo-max-h: 240px;

  /* Textarea */
  --cb-textarea-min-h: 140px;
  --cb-textarea-max-h: min(50vh, 520px);
  --cb-textarea-line: 1.45;

  /* Afijos de input (iconos a la derecha) */
  --cb-input-affix-w: 40px;

  /* Date input */
  --cb-date-icon-w: var(--cb-input-affix-w);

  /* Gutter móvil */
  --page-gutter: 16px;


}

/* =========================
 * 2) BASE / RESET
 * ========================= */
html, body { width:100%; max-width:100%; overflow-x:hidden; }
html { -webkit-text-size-adjust:100%; text-size-adjust:100%; }
html, body, button, input, select, textarea {
  font-family: var(--font-sans) !important; font-size: var(--font-size); line-height: var(--line);
}
.cb-root, .cb-card{ font-family: var(--font-sans); color: var(--text); }
.cb-root{ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
[hidden], .cb-card[hidden]{ display:none!important; }

/* Accesibilidad: focus consistente */
:where(.cb-root, .cb-card) :focus-visible{
  outline: 2px solid color-mix(in srgb, var(--accent) 60%, transparent);
  outline-offset: 2px; border-radius: 8px;
}

/* Checkboxes al color del tema */
.cb-root input[type="checkbox"]:not([role="switch"]),
.cb-card input[type="checkbox"]:not([role="switch"]){ accent-color: var(--accent); }

/* =========================
 * 3) CARDS / BLOQUES
 * ========================= */
.cb-card{
  background:#fff; border:1px solid var(--border); border-radius:var(--radius);
  padding:24px; box-shadow:0 1px 3px rgba(0,0,0,.05);
  margin-bottom: var(--stack-gap);
  overflow: visible;
}
.cb-title{ font:800 22px/1.2 var(--font-sans); margin:0 0 18px; letter-spacing:.2px; }
.cb-header{ display:flex; align-items:center; gap:14px; flex-wrap:wrap; margin:6px 0 18px; overflow:visible; }
.cb-header .cb-title{ margin:0; }
.cb-push{ margin-left:auto; }
.cb-stack > * + *{ margin-top: var(--stack-gap); }

/* =========================
 * 4) BOTONES
 * ========================= */
.cb-btn, .cb-btn.nohover{
  display:inline-flex!important; align-items:center!important; justify-content:center!important;
  background:var(--accent)!important; color:#fff!important; border:none!important;
  padding:var(--cb-btn-py) var(--cb-btn-px)!important; font:700 var(--cb-btn-fs)/1.1 var(--font-sans)!important;
  border-radius:var(--cb-btn-radius)!important; cursor:pointer!important; text-decoration:none!important;
  line-height:1!important; transition:transform .08s ease, box-shadow .2s ease, background .15s ease; gap:.55em; touch-action:manipulation;
  box-shadow:0 1px 0 rgba(0,0,0,.04), 0 1px 2px rgba(0,0,0,.06);
}
.cb-btn:hover{ background:var(--accent-hov)!important; transform:translateY(-1px); box-shadow:0 6px 16px rgba(0,0,0,.08); }
.cb-btn:active{ background:var(--accent-press)!important; transform:translateY(0); box-shadow:0 2px 6px rgba(0,0,0,.08); }

.cb-btn.sec{ background:#fff!important; color:var(--text)!important; border:1px solid var(--border)!important; }
.cb-btn.sec:hover{ background:color-mix(in srgb, var(--accent) 10%, #fff 90%)!important; color:var(--accent)!important; }
.cb-btn.warn{ background:var(--warn)!important; color:#fff!important; }
.cb-btn.warn:hover{ background:var(--warn-dark)!important; }
.cb-btn.danger{ background:var(--danger)!important; color:#fff!important; }
.cb-btn.danger:hover{ background:var(--danger-dark)!important; }
.cb-btn.success{ background:var(--ok)!important; color:#fff!important; }
.cb-btn.success:hover{ background:var(--ok-dark)!important; }
.cb-btn:disabled{ opacity:.6!important; cursor:not-allowed!important; transform:none; box-shadow:none; }
.cb-pill{ border-radius:999px!important; }
.cb-btn--sm{ --cb-btn-py:6px; --cb-btn-px:12px; --cb-btn-fs:12px; }
.cb-btn--lg{ --cb-btn-py:12px; --cb-btn-px:20px; --cb-btn-fs:15px; }
.cb-btn.only-icon{
  width:var(--cb-btn-icon)!important; height:var(--cb-btn-icon)!important; padding:0!important; gap:0;
   font-size:0; line-height:1;
}
.cb-btn i{ margin:0!important; line-height:1!important; pointer-events:none!important; font-size:var(--cb-btn-icon-fs); }

/* Botones icon-only en celdas */
.cb-actions .cb-btn.only-icon{
  width:34px!important; height:34px!important; padding:0!important; border-radius:8px!important;
}

/* =========================
 * 5) ESTADO DE CARGA
 * ========================= */
@keyframes cb-spin { to { transform: rotate(360deg); } }
@keyframes cb-shimmer { to { background-position: 240px 0, 0 0; } }

.cb-card, .cb-block, .cb-panel { position: relative; }

.cb-card[aria-busy="true"], .cb-block[aria-busy="true"], .cb-panel[aria-busy="true"]{ --_blur:.5px; }
.cb-card[aria-busy="true"] > *, .cb-block[aria-busy="true"] > *, .cb-panel[aria-busy="true"] > *{ opacity:.35; }

.cb-card[aria-busy="true"]::after, .cb-block[aria-busy="true"]::after, .cb-panel[aria-busy="true"]::after{
  content:""; position:absolute; inset:0; background: var(--cb-loading-bg);
  backdrop-filter: blur(var(--_blur)); border-radius: var(--radius); z-index: var(--z-toast);
}
.cb-card[aria-busy="true"]::before, .cb-block[aria-busy="true"]::before, .cb-panel[aria-busy="true"]::before{
  content:""; position:absolute; left:50%; top:50%; width:22px; height:22px; margin:-11px 0 0 -11px;
  border-radius:50%; border: var(--cb-spin-w) solid var(--accent); border-right-color: transparent;
  animation: cb-spin .75s linear infinite; z-index: calc(var(--z-toast) + 1);
}

/* Skeleton en tablas */
.cb-table { position: relative; }
.cb-table thead th{ height: var(--thead-h); }
.cb-table tbody tr{ height: var(--row-h); }
.cb-table[aria-busy="true"] tbody { opacity:0; }
.cb-table[aria-busy="true"]::after{
  content:""; position:absolute; left:0; right:0; top: var(--thead-h); bottom: 0;
  background:
   linear-gradient(90deg, transparent 0, rgba(0,0,0,.05) 50%, transparent 100%) 0/240px 100%,
   repeating-linear-gradient(transparent 0, transparent var(--row-h),
                             var(--cb-skeleton-ink) var(--row-h),
                             var(--cb-skeleton-ink) calc(var(--row-h) + 1px));
  animation: cb-shimmer 1.2s infinite linear;
  z-index: 9999;
  border-bottom-left-radius: var(--radius); border-bottom-right-radius: var(--radius);
}

/* Spinner en botones ocupados */
.cb-btn[aria-busy="true"]{ position:relative; pointer-events:none; }
.cb-btn[aria-busy="true"] > .cb-btn__label{ opacity:0; }
.cb-btn[aria-busy="true"]::after{
  content:""; position:absolute; left:50%; top:50%; width:1em; height:1em; margin:-.5em 0 0 -.5em;
  border-radius:50%; border: 2px solid currentColor; border-right-color: transparent; animation: cb-spin .75s linear infinite;
}

/* =========================
 * 6) UTILIDADES
 * ========================= */
.cb-tar{ text-align:right!important; }
.cb-scroll-x{ overflow-x:auto; overflow-y:visible; -webkit-overflow-scrolling:touch; }
.cb-no-truncate{ max-width:none!important; white-space:normal!important; overflow:visible!important; }
.cb-actions--wrap{ flex-wrap:wrap!important; justify-content:center!important; }
.cb-negative{ color:var(--danger)!important; }
.cb-positive{ color:var(--ok)!important; }
.cb-sr-only{ position:absolute!important; width:1px!important; height:1px!important; padding:0!important; margin:-1px!important; overflow:hidden!important; clip:rect(0,0,0,0)!important; white-space:nowrap!important; border:0!important; }

/* =========================
 * 7) FORMULARIOS + SEARCHBAR
 * ========================= */
.cb-field{ display:block; margin-bottom:16px; }
.cb-field > label{ display:block; margin-bottom:6px; font:700 13.5px/1.2 var(--font-sans); color:var(--text); }
label.cb-field{ display:block; font:700 13.5px/1.2 var(--font-sans); color:var(--text); }

/* Mantener separación uniforme (incluye date-wrap) */
label.cb-field > :is(input, select, textarea, .cb-input, .cb-select, .cb-combo, .cb-date-wrap){
  display:block; margin-top:6px;
}

.cb-field small, .cb-help{ display:block; margin-top:4px; color:var(--muted); font-size:12.5px; }

/* Inputs/selects base */
.cb-input, .cb-select{
  width:100%!important; min-width:0; box-sizing:border-box; height:var(--field-h);
  padding:0 12px!important; font-size:16px!important; border:1px solid var(--border)!important;
  border-radius:10px!important; background:#fff; line-height:1.2;
  transition:border-color .2s ease, box-shadow .2s ease; color:var(--text);
}
.cb-input::placeholder{ color:var(--muted); }
.cb-input:focus, .cb-select:focus{ outline:none; border-color:var(--accent)!important; box-shadow:0 0 0 2px rgba(37,99,235,.14); }
.cb-input[readonly], .cb-select[readonly], .cb-input:disabled, .cb-select:disabled{ background:#f9fafb; color:#9ca3af; }

/* ▼ Mejora flecha del <select> (PC y compatible en móviles) */
.cb-select{
  -webkit-appearance:none; -moz-appearance:none; appearance:none;
  /* Dejo más aire a la derecha para la flecha */
  padding-right: calc(12px + var(--cb-input-affix-w)) !important;

  /* Flecha SVG como background */
  background-repeat:no-repeat;
  background-position: calc(100% - var(--cb-select-arrow-x, 10px)) 50%;
  background-size: var(--cb-select-arrow-size, 14px) var(--cb-select-arrow-size, 14px);
  background-image: url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' \
stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'>\
<polyline points='6 9 12 15 18 9'/></svg>");
}
/* Hover/focus: cambia el color de la flecha (coherente con tus tokens) */
.cb-select:hover{
  background-image: url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' \
stroke='%232563eb' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'>\
<polyline points='6 9 12 15 18 9'/></svg>");
}
.cb-select:focus{
  background-image: url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' \
stroke='%23111827' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'>\
<polyline points='6 9 12 15 18 9'/></svg>");
}
/* Disabled */
.cb-select:disabled{
  background-image: url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' \
stroke='%239ca3af' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'>\
<polyline points='6 9 12 15 18 9'/></svg>");
}

/* Ocultar flecha heredada en IE/Edge legado */
.cb-select::-ms-expand{ display:none; }

/* Fix inputs number */
input[type=number].cb-input::-webkit-outer-spin-button,
input[type=number].cb-input::-webkit-inner-spin-button{ -webkit-appearance:none; margin:0; }
input[type=number].cb-input{ -moz-appearance:textfield; }

/* ========= FECHAS (bloque único) ========= */
.cb-date-wrap{ position:relative; isolation:isolate; }
.cb-date-wrap > .cb-input.cb-date{
  padding-right: calc(12px + var(--cb-date-icon-w)) !important; /* espacio para icono */
  -webkit-appearance:none; appearance:none;
  height:var(--field-h); display:inline-flex; align-items:center; background-clip:padding-box;
  line-height:1.2; min-width:0;
}
/* Icono a la derecha (abre por JS con showPicker/focus) */
.cb-date-wrap .cb-input-icon{
  position:absolute; right:6px; top:50%; transform:translateY(-50%);
  width:var(--cb-date-icon-w); height:calc(var(--field-h) - 2px);
  display:inline-flex; align-items:center; justify-content:center;
  border:0; background:transparent; padding:0; cursor:pointer; color:var(--muted);
}
.cb-date-wrap .cb-input-icon:hover{ color:var(--text); }
.cb-date-wrap .cb-input:disabled ~ .cb-input-icon,
.cb-date-wrap .cb-input[readonly] ~ .cb-input-icon{ opacity:.45; pointer-events:none; }
/* Ocultar indicador nativo (evita doble icono) */
.cb-date-wrap input[type="date"].cb-input.cb-date::-webkit-calendar-picker-indicator{
  opacity:0; display:none; -webkit-appearance:none; appearance:none;
}
/* Ajustes tipográficos del date */
input[type="date"].cb-input.cb-date::-webkit-datetime-edit{ padding:0; line-height:1.2; }
input[type="date"].cb-input.cb-date::-webkit-datetime-edit-fields-wrapper{ padding:0; }
input[type="date"].cb-input.cb-date::-webkit-datetime-edit-text{ padding:0; }
input[type="date"].cb-input.cb-date::-webkit-date-and-time-value{ text-align:left; }

/* Searchbar */
.cb-filters{
  display:flex; align-items:center; flex-wrap:wrap; gap:10px;
  width:100%; margin:0 0 10px 0; overflow:visible;
}
.cb-filters .cb-input{ flex:1 1 auto; min-width:0; }
.cb-filters .cb-btn.only-icon{ flex:0 0 auto; }

/* Clear ✖ */
.cb-searchwrap{ position:relative; flex:1 1 auto; min-width:0; }
.cb-searchwrap > .cb-input{ padding-right:40px!important; }
.cb-searchwrap .cb-clear{
  position:absolute; right:6px; top:50%; transform:translateY(-50%);
  display:none;
}
.cb-searchwrap .cb-clear.show{ display:inline-flex; }



/* =========================
 * 9) TABLAS
 * ========================= */
.cb-table{ width:100%; border-collapse:collapse; font-size:var(--cb-table-fs); table-layout:auto; }
.cb-table th,.cb-table td{ padding:var(--cb-cell-py) var(--cb-cell-px)!important; border-bottom:1px solid var(--border)!important; vertical-align:middle; white-space:nowrap; text-align:left!important; min-width:var(--cb-col-min); }
.cb-table th{ font-weight:700!important; background:var(--cb-th-bg)!important; text-align:left!important; }
.cb-table tr:hover td{ background:color-mix(in srgb, var(--hover) 60%, transparent); }

/* Columnas compactas */
.cb-table .cb-col-tight,.cb-table th.cb-col-tight,.cb-table td.cb-col-tight{ min-width:var(--cb-col-tight)!important; }

/* Celdas con campos (incluye combobox) */
.cb-table td:has(:is(input,select,textarea,.cb-combo)):not(:has(input[type="checkbox"])){ min-width:var(--cb-col-min-field); }


/* Columna de checkbox compacta */
.cb-table th.col-check,.cb-table td.col-check{ text-align:left!important; min-width:44px!important; width:44px!important; max-width:44px!important; padding-left:6px!important; padding-right:4px!important; }
.cb-table :is(td,th) input[type="checkbox"]{ display:block; inline-size:18px; block-size:18px; margin-inline-start:0; margin-inline-end:auto; }

/* Acciones en celda */
.cb-actions{ display:flex!important; flex-direction:row!important; justify-content:center!important; align-items:center!important; gap:8px!important; flex-wrap:nowrap!important; white-space:nowrap!important; text-align:center!important; margin:12px 0!important; }
.cb-table td.cb-actions{ display:table-cell!important; padding:var(--cb-cell-py) var(--cb-cell-px)!important; margin:0!important; white-space:nowrap!important; }
.cb-table td.cb-actions>.cb-btn+.cb-btn{ margin-left:8px!important; }

/* Estado vacío */
.cb-table .cb-empty-row td{ padding:20px!important; text-align:center!important; color:var(--muted)!important; background:#fafafa!important; font:700 13.5px/1.25 var(--font-sans); }

/* Importes/Números: negrita + colores por signo */
.cb-table .cb-num{ font-weight:800!important; font-variant-numeric:tabular-nums; }
.cb-table .cb-positive{ color:var(--good,#16a34a)!important; }
.cb-table .cb-negative{ color:var(--bad,#dc2626)!important; }
.cb-table .cb-zero{ color:var(--muted)!important; }

/* =========================
 * 10) BARRAS DE ACCIÓN PARA TABLAS
 * ========================= */
.cb-table-actions{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:8px 0 14px; }
.cb-table-actions--bottom{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin:12px 0 0; }
.cb-table-actions .cb-actions--wrap{ gap:8px; }


/* =========================
 * 12) TABS
 * ========================= */
.cb-tabs{ margin-top:6px; }
.cb-tabbar{
  position:sticky; top:0; z-index:var(--z-sticky);
  display:flex; gap:10px; overflow-x:auto; padding:8px 0 10px; margin-bottom:18px;
  border-bottom:1px solid var(--border); background:#fff; -webkit-overflow-scrolling:touch; scroll-snap-type:x mandatory;
}
.cb-tabbar :is(button, .cb-btn){
  flex:0 0 auto; scroll-snap-align:start; background:var(--hover)!important; color:var(--text)!important; border:none!important;
  border-radius:999px!important; padding:10px 14px!important; font-size:14px!important; transition:background .2s var(--tab-ease), transform .2s var(--tab-ease);
}
.cb-tabbar :is(button, .cb-btn):hover{ background:color-mix(in srgb, var(--accent) 14%, var(--hover))!important; }
.cb-tabbar .act{ background:var(--accent)!important; color:#fff!important; }
.cb-tabpanel{ display:none; }
.cb-tabpanel.act{ display:block; animation: cbTabIn var(--tab-dur) var(--tab-ease) both; }
@keyframes cbTabIn{ from{ opacity:0; transform: translateY(6px); } to{ opacity:1; transform: translateY(0); } }

/* =========================
 * 13) PAGINADORES
 * ========================= */
.cb-pager, #cb-pager, #pay-pager{
  display:flex; align-items:center; justify-content:center; gap:6px; margin-top:16px;
}
.cb-pager button, #cb-pager button, #pay-pager button{
  background:var(--hover)!important; color:var(--text)!important; border:none!important;
  height:34px; min-width:34px; padding:0 10px!important; border-radius:8px!important; cursor:pointer!important;
  font-weight:700; font-size:13px; display:inline-flex; align-items:center; justify-content:center;
}
.cb-pager button:hover{ background:color-mix(in srgb, var(--accent) 14%, var(--hover))!important; }
.cb-pager .act, #cb-pager .act, #pay-pager .act{ background:var(--accent)!important; color:#fff!important; }
.cb-pager .cb-pager__btn{ width:34px; padding:0!important; }
.cb-pager .cb-pager__btn i{ font-size:14px; line-height:1; }
.cb-pager .cb-pager__current{ min-width:38px; padding:0 10px!important; }



/* =========================
 * 11) CHIPS
 * ========================= */
.cb-chip{
  display:inline-flex; align-items:center; gap:6px;
  border:1px solid var(--border); border-radius:999px;
  padding:4px 10px; font:800 12px/1 var(--font-sans); color:#374151; background:#f9fafb; white-space:nowrap;
}
.cb-chip i{ font-size:12px; }
.cb-chip.is-off{ color:#6b7280; background:#f3f4f6; border-color:#e5e7eb; opacity:.95; }
.cb-chip.good{ color:#065f46; background:#d1fae5; border-color:#a7f3d0; }
.cb-chip.bad { color:#991b1b; background:#fee2e2; border-color:#fecaca; }
.cb-chip.neu { color:#374151; background:#f3f4f6; border-color:#e5e7eb; }
.cb-chip.warn{ color:#92400e; background:#fef3c7; border-color:#fde68a; }

/* Barra de chips */
.cb-chipbar{
  display:flex; flex-wrap:wrap; gap:8px;
  margin:12px 0 14px;
}
.cb-filters + .cb-chipbar{ margin-top: 10px !important; }
.cb-chipbar + .cb-chipbar{ margin-top: 8px; }
.cb-chipbar:empty{ display:none; }

.cb-chipbar button{
  border:1px solid var(--border); background:#fff; color:#374151;
  padding:8px 12px; border-radius:999px; font:700 13px/1 var(--font-sans); cursor:pointer;
}
.cb-chipbar button.act{ background:var(--accent); color:#fff; border-color:var(--accent); }


/* =========================
 * 14) MÉTRICAS / KPI
 * ========================= */
.cb-metrics{
  display:grid; gap:16px; grid-template-columns:repeat(auto-fit, minmax(200px, 1fr));
  margin-bottom:16px;
}
.cb-metric{
  position:relative; background:#fff; border:1px solid var(--border); border-radius:12px;
  padding:14px 16px; box-shadow:0 1px 2px rgba(0,0,0,.06);
  display:grid; grid-template-areas: "icon num" "icon lbl"; grid-template-columns:48px 1fr; column-gap:12px; row-gap:6px; align-items:center;
}
.cb-metric i{
  grid-area:icon; width:42px; height:42px; border-radius:12px; margin:0;
  background: color-mix(in srgb, var(--accent) 12%, #fff 88%); color: var(--accent);
  display:flex; align-items:center; justify-content:center; font-size:18px; border:1px solid color-mix(in srgb, var(--accent) 18%, #fff 82%);
}
.cb-metric .num{
  grid-area:num; font:900 clamp(22px, 3.1vw, 34px)/1 var(--font-sans);
  color:var(--accent); letter-spacing:.2px; font-variant-numeric: tabular-nums; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.cb-metric .lbl{
  grid-area:lbl; font:700 12.5px/1.2 var(--font-sans); color:#6b7280; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.cb-metric:hover{ box-shadow:0 6px 18px rgba(37,99,235,.06); transform:translateY(-1px); transition:box-shadow .2s ease, transform .2s ease; }


@media (max-width:640px){
  .cb-metrics{display:flex!important;overflow-x:auto;padding:4px 12px;scroll-snap-type:x mandatory;scrollbar-width:none}
  .cb-metrics::-webkit-scrollbar{display:none}
  .cb-metric{flex:0 0 84%;min-width:240px;scroll-snap-align:start}
  .cb-metric:hover{transform:none;box-shadow:0 1px 2px rgba(0,0,0,.06)}
}



/* =========================
 * 15) GRIDS SECUNDARIOS / CAJAS
 * ========================= */
.cb-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:20px; margin-bottom:20px; }
.cb-box{ background:#fff; border:1px solid var(--border); border-radius:var(--radius); padding:18px; text-align:center; }
.cb-box .num{ font:900 clamp(22px, 3vw, 34px)/1 var(--font-sans); color:var(--accent); margin:0; }
.cb-box .lbl{ font:700 12.5px/1.2 var(--font-sans); margin-top:6px; color:#374151; }

/* =========================
 * 16) PERFIL / FICHA
 * ========================= */
.cb-profile{ display:grid; grid-template-columns:1fr auto; gap:14px; align-items:center; margin:0 0 10px; }
.cb-profile-id{ display:flex; align-items:center; gap:12px; min-width:0; }
.cb-avatar{
  width:56px; height:56px; border-radius:999px; background:var(--hover); border:1px solid var(--border);
  display:flex; align-items:center; justify-content:center; font:800 20px/1 var(--font-sans); color:var(--accent); flex:0 0 auto;
}
.cb-chiprow{ display:flex; flex-wrap:wrap; gap:8px; margin-top:.5rem;}
.cb-subgrid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:14px; margin:4px 0 12px; }
.cb-subcard{ background:#fff; border:1px solid var(--border); border-radius:12px; padding:14px; margin-bottom:12px; }
.cb-subcard.alt{ background:#f9fafb; }

.cb-subtitle{ font:800 12px/1.2 var(--font-sans); color:#6b7280; text-transform:uppercase; letter-spacing:.06em; margin-bottom:8px; }
.cb-kv{ display:flex; align-items:center; gap:8px; margin:6px 0; }
.cb-kv i{ width:16px; text-align:center; color:#6b7280; }

/* =========================
 * 17) ESTRELLAS
 * ========================= */
.cb-stars{ color:#f59e0b; font-size:16px; letter-spacing:1px; }

/* =========================
 * 18) TOASTS
 * ========================= */
.cb-toast-wrap{
  position:fixed; z-index:var(--z-toast); left:50%; bottom:18px; transform:translateX(-50%);
  display:flex; flex-direction:column; gap:10px; pointer-events:none;
}
.cb-toast{
  background:var(--toast-bg); color:var(--toast-fg); border-radius:12px; padding:12px 14px;
  box-shadow:0 8px 20px rgba(0,0,0,.18); font:700 14px/1.2 var(--font-sans);
  display:flex; align-items:center; gap:10px; min-width:240px; max-width:92vw; pointer-events:auto;
  opacity:0; transform:translateY(10px); transition:opacity .15s ease, transform .15s ease;
}
.cb-toast.ok{ background:var(--toast-ok); color:#ecfdf5; }
.cb-toast.warn{ background:var(--toast-warn); color:#fff7ed; }
.cb-toast.err{ background:var(--toast-err); color:#fee2e2; }
.cb-toast.show{ opacity:1; transform:translateY(0); }
.cb-toast .cb-actions{ display:flex!important; gap:8px!important; margin-left:auto; margin:0!important; }
.cb-toast .cb-btn{ --cb-btn-fs:12px; --cb-btn-py:8px; --cb-btn-px:12px; }

/* =========================
 * 19) VENTAS — mínimos
 * ========================= */
.cb-sale-table .col-product{ min-width:260px; }
@media (max-width:640px){ .cb-sale-table .col-product{ min-width:240px; } }

/* =========================
 * 20) COLUMNAS SIN TRUNCADO
 * ========================= */
.cb-table th.col-due, .cb-table td.col-due{
  max-width:none!important; white-space:nowrap!important; min-width:240px;
}

/* =========================
 * 21) MODALES — overflow seguro en móvil (scroll interno)
 * ========================= */
.cb-modal[hidden]{ display:none!important; }
.cb-modal{
  position:fixed; inset:0; z-index:9998;
  display:flex; align-items:center; justify-content:center;
  width:100vw; height:100vh;
  /* evita que el scroll interno del modal “arrastre” el body en iOS/Android */
  overscroll-behavior: contain;
  position:fixed; inset:0;
  z-index: 10120; /* antes: 9998 */
}
@supports (width: 100dvw){ .cb-modal{ width:100dvw; height:100dvh; } }

.cb-modal__backdrop{
  position:absolute; inset:0; background:rgba(15,23,42,.45);
  -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px);
  will-change: opacity;
}

.cb-modal__dialog{
  position:relative; z-index:1;
  width:min(640px,92vw);
  margin: var(--stack-gap);
  will-change: transform, opacity;
  /* clave: que el diálogo nunca supere la pantalla */
  display:flex; flex-direction:column; min-height:0;
  max-height: calc(100vh - (var(--stack-gap) * 2));
}
@supports (height: 100dvh){
  .cb-modal__dialog{ max-height: calc(100dvh - (var(--stack-gap) * 2)); }
}
@supports (width: 100dvw){ .cb-modal__dialog{ width:min(640px,92dvw); } }

.cb-modal__content.cb-card{
  margin:0; border-radius:16px;
  box-shadow:0 20px 60px rgba(2,6,23,.30);
  /* estructura en columna para header / body / footer */
  display:flex; flex-direction:column; min-height:0; max-height:100%;
  /* por defecto ocultamos overflow aquí y lo damos al body */
  overflow:hidden;
  /* evitar chain scrolling hacia el body */
  overscroll-behavior: contain;
}

/* Cuerpo scrollable (si existe en el markup) */
.cb-modal__body{
  flex:1 1 auto; min-height:0;
  overflow:auto;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;
  max-height: none; /* dejamos que lo limite el contenedor */
}

/* Fallback: si NO hay .cb-modal__body, que scrollee el propio .cb-modal__content */
.cb-modal__content.cb-card:not(:has(.cb-modal__body)){
  overflow:auto;
  -webkit-overflow-scrolling: touch;
}


/* Abrir modal: bloquear scroll del documento */
html.cb-modal-open, body.cb-modal-open{ overflow:hidden; }
html.cb-modal-open{ scrollbar-gutter:auto; }

/* Tamaños del diálogo por variantes */
.cb-modal--sm .cb-modal__dialog{ width:min(420px,92vw); }
.cb-modal--md .cb-modal__dialog{ width:min(640px,92vw); }
.cb-modal--lg .cb-modal__dialog{ width:min(840px,94vw); }
.cb-modal--xl .cb-modal__dialog{ width:min(1040px,96vw); }
@supports (width: 100dvw){
  .cb-modal--sm .cb-modal__dialog{ width:min(420px,92dvw); }
  .cb-modal--md .cb-modal__dialog{ width:min(640px,92dvw); }
  .cb-modal--lg .cb-modal__dialog{ width:min(840px,94dvw); }
  .cb-modal--xl .cb-modal__dialog{ width:min(1040px,96dvw); }
}

/* Animaciones entrada (sin cambios) */
.cb-modal:not([hidden]) .cb-modal__backdrop{
  animation: cbModalBackdropIn var(--cb-modal-dur) ease forwards;
}
.cb-modal:not([hidden]) .cb-modal__dialog{
  animation: cbModalDialogIn var(--cb-modal-dur) var(--cb-modal-ease) forwards;
}
@keyframes cbModalBackdropIn{ from{ opacity:0; } to{ opacity:1; } }
@keyframes cbModalDialogIn{ from{ opacity:0; transform: translateY(8px) scale(.98); } to{ opacity:1; transform: translateY(0)  scale(1); } }

/* =========================
 * 22) SWITCHES (unificado)
 * ========================= */
.cb-root input[role="switch"],.cb-card input[role="switch"]{-webkit-appearance:none;appearance:none;inline-size:44px;block-size:26px;border-radius:999px;background:#e5e7eb;border:1px solid var(--border);position:relative;cursor:pointer;vertical-align:middle;transition:background .2s ease,border-color .2s ease,box-shadow .2s ease}
.cb-root input[role="switch"]::after,.cb-card input[role="switch"]::after{content:"";position:absolute;top:50%;left:2px;inline-size:22px;block-size:22px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.12);transform:translateY(-50%);transition:left .2s ease,transform .2s ease}
.cb-root input[role="switch"]:checked,.cb-card input[role="switch"]:checked{background:color-mix(in srgb,var(--accent) 92%,#fff 8%);border-color:color-mix(in srgb,var(--accent) 85%,#fff 15%)}
.cb-root input[role="switch"]:checked::after,.cb-card input[role="switch"]:checked::after{left:calc(100% - 24px)}
.cb-root input[role="switch"]:focus-visible,.cb-card input[role="switch"]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.cb-root input[role="switch"][disabled],.cb-card input[role="switch"][disabled]{opacity:.5;cursor:not-allowed}
@media (prefers-reduced-motion:reduce){.cb-root input[role="switch"],.cb-root input[role="switch"]::after,.cb-card input[role="switch"],.cb-card input[role="switch"]::after{transition:none}}



/* =========================
 * 23) MOBILE (≤ 640px)
 * ========================= */
@media (max-width:640px){
  :root{
    --cb-btn-py: 12px; --cb-btn-px: 16px; --cb-btn-fs: 15px;
    --cb-btn-icon: 42px; --cb-btn-icon-fs: 18px;
    --cb-cell-py: 12px; --cb-cell-px: 12px;
    --field-h: 50px;
    --stack-gap: 12px;
    --cb-col-min: 100px;
    --cb-col-min-field: 160px;
    --page-gutter: 12px;

    /* dropdown más alto en móvil */
    --cb-combo-max-h: 320px;

    /* textarea más holgada en móvil */
    --cb-textarea-min-h: 160px;
    --cb-textarea-line: 1.5;

    /* icono táctil más ancho */
    --cb-input-affix-w: 42px;
    --cb-date-icon-w: var(--cb-input-affix-w);
  }

  .cb-root{ padding-left: var(--page-gutter); padding-right: var(--page-gutter); }

  .cb-card{
    border:1px solid var(--border); border-radius:12px; padding:14px; box-shadow:0 1px 2px rgba(0,0,0,.04);
    margin-left:0; margin-right:0; margin-bottom: var(--stack-gap);
  }

  .cb-scroll-x{ margin:0; padding:0; }

  .cb-table{ font-size: 13.5px; white-space:nowrap; }
  .cb-table .col-name, .cb-table .col-address{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:20ch; }

  .cb-table td.cb-actions{ display:table-cell!important; padding:var(--cb-cell-py) var(--cb-cell-px)!important; margin:0!important; white-space:nowrap!important; }
  .cb-table th.col-check, .cb-table td.col-check{ min-width:40px!important; width:40px!important; max-width:40px!important; padding-left:4px!important; padding-right:2px!important; }

  .cb-pager button{ height:32px; min-width:32px; font-size:12.5px; border-radius:8px!important; }
  .cb-pager .cb-pager__btn{ width:32px; }
}

/* =========================
 * 24) PREF. MOVIMIENTO
 * ========================= */
@media (prefers-reduced-motion: reduce){
  *{ transition:none!important; animation:none!important; }
  .cb-card[aria-busy="true"]::before, .cb-block[aria-busy="true"]::before, .cb-panel[aria-busy="true"]::before,
  .cb-btn[aria-busy="true"]::after, .cb-table[aria-busy="true"]::after{ animation:none!important; }
}

/* =========================
 * 25) ICONOS = COLOR DEL TEXTO
 * ========================= */
.cb-kv i, .cb-chip i { color: currentColor !important; }

/* =========================
 * 26) COMBOBOX
 * ========================= */
.cb-combo{ position:relative; isolation:isolate; }
.cb-combo-input{ padding-right:40px !important; }

.cb-combo .cb-combo-clear{
  position:absolute; right:6px; top:50%; transform:translateY(-50%);
  display:none; z-index: calc(var(--z-dropdown) + 1);
  touch-action:manipulation;
  -webkit-tap-highlight-color: rgba(0,0,0,.06);
}
.cb-combo .cb-combo-clear.is-visible{ display:inline-flex; }

.cb-combo-list{
  position:absolute; left:0; right:0; top:calc(100% + var(--cb-combo-gap));
  z-index: var(--z-dropdown);
  max-height: var(--cb-combo-max-h);
  overflow-y:auto; -webkit-overflow-scrolling:touch; touch-action: pan-y; overscroll-behavior: contain;
  scrollbar-gutter: stable both-edges; scrollbar-width: thin; scrollbar-color: #9aa0a6 #f3f4f6;
  background:#fff; border:1px solid var(--border); border-radius:10px;
  padding:6px; margin:0; list-style:none; box-sizing:border-box;
  box-shadow:0 8px 24px rgba(0,0,0,.08);
  will-change: transform, top, left, width, height; contain: layout paint;
}
.cb-combo-list.is-fixed{ position:fixed !important; transform: translateZ(0); pointer-events:auto; }
@supports (height: 100dvh){
  .cb-combo-list.is-fixed{ max-height: min(var(--cb-combo-max-h), calc(100dvh - 24px)); }
}
.cb-combo-list::-webkit-scrollbar{ width:10px; height:10px; }
.cb-combo-list::-webkit-scrollbar-track{ background:#f3f4f6; border-radius:8px; }
.cb-combo-list::-webkit-scrollbar-thumb{ background:#c7cbd1; border-radius:8px; border:2px solid #f3f4f6; }
.cb-combo-list::-webkit-scrollbar-thumb:active{ background:#9aa0a6; }
.cb-combo-list [role="option"]{
  padding:8px 10px; border-radius:8px; cursor:pointer;
  display:flex; align-items:center; justify-content:space-between; gap:8px; min-height:42px;
  user-select:none; -webkit-tap-highlight-color: rgba(0,0,0,.06);
}
@media (pointer: coarse){ .cb-combo-list [role="option"]{ padding:12px 12px; } }
.cb-combo-list [role="option"]:hover{ background: color-mix(in srgb, var(--accent) 12%, #fff 88%); }
.cb-combo-list [role="option"][aria-disabled="true"]{ cursor:default; opacity:.7; }
.cb-combo-list .is-act{ background: color-mix(in srgb, var(--accent) 12%, #fff 88%); }

/* =========================
 * 27) TEXTAREA
 * ========================= */
.cb-input.cb-textarea,
textarea.cb-input{
  height:auto !important;
  min-height: var(--cb-textarea-min-h);
  max-height: var(--cb-textarea-max-h);
  padding: 10px 12px !important;
  line-height: var(--cb-textarea-line);
  resize: vertical;
  overflow:auto;
}
.cb-input.cb-textarea::placeholder,
textarea.cb-input::placeholder{
  color: color-mix(in srgb, var(--muted) 88%, #000 12%);
}

























/* =========================================================
   CB · Comprobante con imágenes PRODUCTO — estilos modernizados (sin punteado)
   ========================================================= */

/* Fila de slots */
.cb-uploader-row{
  --slot:128px;
  display:flex; gap:10px; align-items:stretch; flex-wrap:wrap;
}

/* Slot base */
.cb-upload{
  position:relative; width:var(--slot); aspect-ratio:1/1; min-height:0;
  border:1px solid var(--border);
  border-radius: calc(var(--radius) - 2px);
  background:#fff;
  box-shadow:0 1px 2px rgba(2,6,23,.04);
  overflow:hidden;
  transition:border-color .16s, box-shadow .18s, transform .16s;
}
.cb-upload[aria-busy="true"]{ opacity:.97; }

/* Hover/Focus */
.cb-upload:hover,
.cb-upload:focus-within{
  border-color: color-mix(in srgb, var(--accent) 34%, var(--border));
  box-shadow:0 10px 26px rgba(2,6,23,.08);
  transform: translateY(-1px);
}

/* Drag over (sin fondo ni punteado) */
.cb-upload.is-over{
  border-color: var(--accent);
  box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 16%, transparent);
}

/* Área interactiva */
.cb-upload__drop{
  position:absolute; inset:0; display:grid; place-items:center; cursor:pointer; background:transparent; outline:0;
}

/* Ghost minimalista */
.cb-upload__ghost{
  display:grid; gap:6px; place-items:center; text-align:center;
  color: color-mix(in srgb, var(--muted) 88%, #000 12%);
  font:600 12px/1.25 var(--font-sans, system-ui);
}
.cb-upload__ghost i{ font-size:20px; opacity:.8; }

/* Imagen */
.cb-upload__img{
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; object-position:center; image-orientation:from-image; display:block;
}
.cb-upload__img[hidden]{ display:none !important; }

/* Ocultar ghost si hay imagen */
.cb-upload.is-uploading .cb-upload__ghost,
.cb-upload.is-published .cb-upload__ghost{ display:none; }
.cb-upload__drop:has(.cb-upload__img:not([hidden])) .cb-upload__ghost{ display:none; }

/* Badge (glass) */
.cb-upload__badge{
  position:absolute; z-index:2; top:6px; left:6px;
  background: color-mix(in srgb, #fff 78%, transparent);
  backdrop-filter: blur(6px) saturate(1.15);
  border:1px solid color-mix(in srgb, var(--border) 80%, transparent);
  border-radius:999px; padding:3px 8px;
  font:700 11.5px/1 var(--font-sans); color:var(--text);
}

/* Toolbar (glass solo para .sec; respetar variantes) */
.cb-upload__toolbar{
  position:absolute; z-index:3; right:6px; top:6px; display:flex; gap:6px;
  opacity:0; transform:translateY(-4px);
  transition:opacity .14s, transform .14s;
}
.cb-upload:hover .cb-upload__toolbar,
.cb-upload:focus-within .cb-upload__toolbar,
.cb-upload.is-published .cb-upload__toolbar{ opacity:1; transform:translateY(0); }

/* Botón secundario: glass */
.cb-upload__toolbar .cb-btn.sec{
  --cb-btn-fs:12px; --cb-btn-py:6px; --cb-btn-px:8px;
  background: color-mix(in srgb, #fff 82%, transparent) !important;
  border:1px solid color-mix(in srgb, var(--border) 80%, transparent) !important;
  color: var(--text) !important; box-shadow:none !important;
  backdrop-filter: blur(6px) saturate(1.1);
}

/* Papelera (danger) como antes: fondo rojo + icono BLANCO */
.cb-upload__toolbar .cb-btn.danger{
  background: var(--danger) !important;
  color:#fff !important;
  border:none !important;
  box-shadow:none !important;
}
.cb-upload__toolbar .cb-btn.danger i{ color:#fff !important; }

/* Chip “Publicado” (glass) */
.cb-upload__chip{
  position:absolute; z-index:2; left:6px; bottom:6px;
  background: color-mix(in srgb, #fff 78%, transparent);
  border:1px solid color-mix(in srgb, var(--border) 80%, transparent);
  border-radius:999px; padding:3px 8px;
  font:900 11.5px/1 var(--font-sans); color:#16a34a;
  backdrop-filter: blur(6px) saturate(1.15);
}

/* Progreso: oculto por defecto (evita “círculo perdido”) */
.cb-upload__prog{
  position:absolute; z-index:2; right:6px; bottom:6px; width:26px; height:26px; pointer-events:none;
  display:none;
}
.cb-upload.is-uploading .cb-upload__prog{ display:block; }
.cb-upload__ring{
  --p:0; --track:#e5e7eb; --fill: var(--accent);
  width:100%; height:100%; border-radius:50%;
  background: conic-gradient(var(--fill) calc(var(--p)*360deg), var(--track) 0);
  mask: radial-gradient(circle 10px, transparent 9px, #000 10px);
  transition: background .16s;
}

/* Nota */
.cb-upload-note{ display:inline-block; margin-top:6px; color:var(--muted); }

/* Ajuste Soyfan dashboard */
.sf-dash .cb-upload__img{
  width:100% !important; height:100% !important; max-width:none !important;
  object-fit:cover !important; object-position:center;
}

/* Mobile: carrusel con fade en bordes */
@media (max-width:560px){
  .cb-uploader-row{
    --slot:112px; flex-wrap:nowrap; overflow-x:auto; overflow-y:visible;
    gap:10px; padding:2px 4px 8px; scroll-snap-type:x mandatory; scroll-padding-left:4px;
    -webkit-overflow-scrolling:touch; touch-action:pan-x; overscroll-behavior-x:contain;
    mask-image: linear-gradient(to right, transparent 0, #000 18px, #000 calc(100% - 18px), transparent 100%);
  }
  .cb-uploader-row .cb-upload{ flex:0 0 var(--slot); scroll-snap-align:start; }
  .cb-uploader-row::-webkit-scrollbar{ display:none; } .cb-uploader-row{ scrollbar-width:none; }
}

/* A11y: reduced motion */
@media (prefers-reduced-motion:reduce){
  .cb-upload, .cb-upload__toolbar{ transition:none !important; transform:none !important; }
}
