/* ============================================================
   CosplayerID — style-night.css
   Tema: Oscuro
   Activacion: <html data-theme="dark"> (gestionado desde header.php
   via current_theme() + toggle en /dashboard/settings).
   Tambien soporta body.night como compat heredada.

   ESTRATEGIA:
   1) Redefinir los design tokens de Tailwind v4 (--color-paper-*,
      --color-ink-*, --color-paper-card, etc.) bajo [data-theme="dark"].
      Como Tailwind compila utilities como var(--color-paper-50), TODAS
      las clases ya escritas (bg-paper-50, text-ink-900, border-paper-200)
      cambian automaticamente sin tocar HTML.
   2) Mantener vars legacy --clr-* para auth-card, footer, navbar viejos.
   3) Overrides puntuales para hex hardcoded en CSS scoped (.pg-*, .t10-*,
      .cf-*) y para usos de bg-white donde queremos card oscura
      (no podemos redefinir --color-white global porque rompe text-white
      en botones con fondo de color).
   ============================================================ */

body.night,
[data-theme="dark"] {
  /* ---------- Legacy clr-* (auth, navbar, footer, formularios) ---------- */
  --clr-primary:        #c084fc;
  --clr-primary-dark:   #a855f7;
  --clr-primary-light:  #e9d5ff;
  --clr-secondary:      #f472b6;
  --clr-secondary-dark: #ec4899;
  --clr-accent:         #22d3ee;

  --clr-bg:             #0a0a0f;
  --clr-bg-2:           #111118;
  --clr-bg-3:           #1a1a24;
  --clr-bg-card:        #13131c;

  --clr-text:           #f1f0ff;
  --clr-text-2:         #a09ec0;
  --clr-text-3:         #5c5a7a;
  --clr-text-inv:       #0a0a0f;

  --clr-border:         #1e1e2e;
  --clr-border-2:       #2a2a3e;

  --shadow-sm:  0 1px 3px rgba(0,0,0,.3),  0 1px 2px rgba(0,0,0,.2);
  --shadow-md:  0 4px 12px rgba(0,0,0,.4), 0 2px 4px rgba(0,0,0,.2);
  --shadow-lg:  0 8px 24px rgba(0,0,0,.5), 0 4px 8px rgba(0,0,0,.3);

  /* ---------- Tailwind design tokens — invertidos para dark ----------
     Estos pisan las definiciones de input.css @theme. Al ser CSS vars,
     toda utility ya emitida (bg-paper-50, text-ink-900) se actualiza. */

  /* paper-* — escala de superficies (claro → oscuro) */
  --color-paper-50:  #13131c;   /* fondo card base */
  --color-paper-100: #181822;
  --color-paper-200: #20202e;
  --color-paper-300: #2a2a3a;

  /* paper-card/sunk/line — superficies dashboard */
  --color-paper-card: #13131c;
  --color-paper-sunk: #0e0e16;
  --color-paper-line: #2a2a3a;

  /* canvas + surface — fondos globales */
  --color-canvas:  #0a0a0f;
  --color-surface: #13131c;

  /* ink-* — escala de texto (oscuro → claro) — INVERTIDA */
  --color-ink:    #f1f0ff;
  --color-ink-2:  #c8c5e0;
  --color-ink-3:  #8a87a8;

  --color-ink-50:  oklch(0.16 0.01 270);
  --color-ink-100: oklch(0.20 0.01 270);
  --color-ink-200: oklch(0.26 0.01 270);
  --color-ink-300: oklch(0.36 0.01 270);
  --color-ink-400: oklch(0.50 0.01 270);
  --color-ink-500: oklch(0.62 0.008 270);
  --color-ink-600: oklch(0.74 0.005 270);
  --color-ink-700: oklch(0.84 0.004 270);
  --color-ink-800: oklch(0.92 0.003 270);
  --color-ink-900: oklch(0.97 0.002 270);

  --color-ink-soft:   #d4d1ec;
  --color-ink-muted:  #8a87a8;
  --color-ink-faint:  #54526c;

  /* lines del sitio */
  --color-line:   #20202e;
  --color-line-2: #2a2a3a;

  /* accent / acento del dashboard — un poco mas claro en dark */
  --color-accent:      #8b7dff;
  --color-accent-soft: #1a1832;

  /* sombras — mas profundas en dark (no perfectas pero suficientes) */
  --shadow-card:      0 1px 2px rgba(0,0,0,.4),  0 6px 16px -8px rgba(0,0,0,.5);
  --shadow-cardhover: 0 2px 4px rgba(0,0,0,.5),  0 18px 32px -14px rgba(0,0,0,.6);
  --shadow-soft:      0 1px 2px rgba(0,0,0,.3),  0 1px 3px rgba(0,0,0,.3);

  /* Tailwind neutral-* scale — invertida.
     Usada en /dashboard/profile y otras paginas que prefieren la
     paleta neutral de Tailwind (gris puro) sobre la ink (oklch tinted).
     Sin esto bg-neutral-50, text-neutral-900, etc. quedan en light. */
  --color-neutral-50:  #18181a;
  --color-neutral-100: #1f1f23;
  --color-neutral-200: #2a2a30;
  --color-neutral-300: #3a3a42;
  --color-neutral-400: #6b6b75;
  --color-neutral-500: #9a9aa5;
  --color-neutral-600: #b5b5c0;
  --color-neutral-700: #d4d4dc;
  --color-neutral-800: #e8e8ef;
  --color-neutral-900: #f1f0ff;
  --color-neutral-950: #fafafa;
}

/* ============================================================
   Compat heredada — bloques que NO usan vars (legacy)
   ============================================================ */
body.night .navbar {
  background: rgba(10,10,15,0.92);
  border-bottom-color: var(--clr-border);
}
body.night .skeleton,
[data-theme="dark"] .skeleton {
  background: linear-gradient(
    90deg,
    var(--clr-bg-3) 25%,
    var(--clr-border-2) 50%,
    var(--clr-bg-3) 75%
  );
  background-size: 200% 100%;
}
body.night .auth-card,
[data-theme="dark"] .auth-card {
  background: var(--clr-bg-2);
  border-color: var(--clr-border);
}
body.night .form-input,
[data-theme="dark"] .form-input {
  background: var(--clr-bg-3);
  border-color: var(--clr-border);
  color: var(--clr-text);
}
body.night .form-input:focus,
[data-theme="dark"] .form-input:focus {
  background: var(--clr-bg-2);
  border-color: var(--clr-primary);
}
body.night .navbar__search-input,
[data-theme="dark"] .navbar__search-input {
  background: var(--clr-bg-3);
  border-color: var(--clr-border);
  color: var(--clr-text);
}
body.night .filter-tabs,
[data-theme="dark"] .filter-tabs { background: var(--clr-bg-2); }
body.night .filter-tab.active,
[data-theme="dark"] .filter-tab.active { background: var(--clr-bg-3); }
body.night .footer,
[data-theme="dark"] .footer { background: var(--clr-bg-2); border-top-color: var(--clr-border); }

/* ============================================================
   bg-white → fondo oscuro SOLO donde representa card/panel
   ------------------------------------------------------------
   No redefinimos --color-white global porque rompe text-white
   en botones con fondo colored. En vez de eso, pisamos casos
   especificos donde bg-white = superficie de tarjeta.
   ============================================================ */
[data-theme="dark"] .pg-card,
[data-theme="dark"] .t10-card,
[data-theme="dark"] .cf-card {
  background: var(--color-paper-card) !important;
  border-color: var(--color-paper-line);
}

/* Density stepper del grid (selector real: [data-pg-stepper]) */
[data-theme="dark"] [data-pg-stepper] {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
}

/* Toggle wrappers reales del Top 10 y Cover Flow.
   El HTML usa .t10__toggle y .cf__toggle (NO data-stepper). */
[data-theme="dark"] .t10__toggle,
[data-theme="dark"] .cf__toggle {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
  box-shadow: 0 1px 0 rgba(0,0,0,.3), 0 4px 14px -8px rgba(0,0,0,.5);
}

/* ============================================================
   profiles_grid (.pg-*) — overrides de hex hardcoded
   ============================================================ */
[data-theme="dark"] .pg-skel {
  background: linear-gradient(90deg, #20202e 0%, #2a2a3a 40%, #20202e 80%);
}
[data-theme="dark"] .pg-stat:hover:not(:disabled) { color: var(--color-ink-900); }
[data-theme="dark"] .pg-density-btn:not(:disabled):hover {
  background: var(--color-paper-200);
  color: var(--color-ink-900);
}
[data-theme="dark"] .pg-avatar-ring {
  box-shadow: 0 0 0 2px var(--color-paper-card), 0 2px 8px rgba(0,0,0,.5);
}

/* ------------------------------------------------------------
   Category pill (bottom-left del thumb): el partial emite
   `bg-white/95 text-ink-900`. En dark, `--color-ink-900` se
   invierte a oklch(0.97 ...) ≈ blanco, y queda invisible sobre
   el bg-white literal. Pisamos el FONDO de la pill (texto ya es
   claro por el override de --color-ink-900) y agregamos un
   border sutil para separarla del thumb.
   ------------------------------------------------------------ */
[data-theme="dark"] .pg-card .bg-white\/95.text-ink-900 {
  background-color: rgba(13,13,20,0.82) !important;
  box-shadow: 0 1px 3px rgba(0,0,0,.45), inset 0 0 0 1px rgba(255,255,255,.06);
}

/* ------------------------------------------------------------
   TOP badge — refuerzo de contraste en dark.
   Los gradientes (gold/silver/bronze) son fondos claros fijos;
   el texto literal ya está bien (#5a3a00 / white) en gold y
   bronze, pero un drop-shadow sutil ayuda a separar el pill
   del bg oscuro que rodea el thumb.
   ------------------------------------------------------------ */
[data-theme="dark"] .pg-card .bg-gradient-to-br.rounded-full {
  filter: drop-shadow(0 1px 3px rgba(0,0,0,.55));
}

/* TOP 2 (silver): el partial emite text-ink-900, que en dark se
   invierte a casi blanco — invisible sobre plata. Forzamos el
   mismo color oscuro que en light mode (literal, no token). */
[data-theme="dark"] .pg-card .pg-top-silver {
  color: #1a1822 !important;
}

/* TOP 4+ (ink): el partial emite bg-ink-900 text-white. En dark
   ink-900 se invierte a casi blanco -> fondo blanco + texto blanco
   = invisible. Forzamos fondo oscuro literal igual que en light. */
[data-theme="dark"] .pg-card .pg-top-ink {
  background: #1a1822 !important;
  color: #ffffff !important;
}

/* ============================================================
   NSFW gate overlay (_nsfw_gate.php) — sobre el blur del thumb.
   En light usa from/via/to-ink-900/* — un velo gris-oscuro.
   En dark, ink-900 se invierte a casi blanco y el gradient
   queda BLANQUECINO sobre la imagen — anti-tema y feo. Pisamos
   con un degradado fucsia (brand del sitio) que mantiene el
   look erotico/dark y el texto blanco sigue legible.
   ============================================================ */
[data-theme="dark"] [data-nsfw-gate],
[data-theme="dark"] [data-nsfw-veil] {
  background-image: linear-gradient(
    180deg,
    rgba(196, 42, 135, 0.30) 0%,
    rgba(196, 42, 135, 0.48) 55%,
    rgba(120, 20, 75, 0.78) 100%
  ) !important;
}

/* ============================================================
   NSFW modal (_nsfw_modal.php) — gate +18 global.
   El partial usa bg-white literal + bg-ink-900/60 para el
   backdrop, y bg-ink-900 para el CTA Register. En dark todos
   esos colores se invierten o quedan demasiado claros.
   ============================================================ */

/* Backdrop: bg-ink-900/60 invertido = casi blanco/60. Lo bajamos
   a un negro real con buena opacidad (selector directo al id). */
[data-theme="dark"] #nsfwModal {
  background-color: rgba(0, 0, 0, 0.72) !important;
}

/* Card interno (única div hija): pisamos bg-white literal a la
   superficie de tarjeta dark. */
[data-theme="dark"] #nsfwModal > div {
  background-color: var(--color-paper-card) !important;
  border: 1px solid var(--color-paper-line);
}

/* CTA (anchor con bg-ink-900): el modal tiene un solo <a>, sea el
   destino /register (visitor) o /dashboard/settings#nsfw (user sin
   NSFW activo). En dark, bg-ink-900 se invierte a casi blanco e
   invisibiliza el texto blanco. Lo pisamos con brand fucsia para
   ambos casos via selector generico al unico anchor del modal. */
[data-theme="dark"] #nsfwModal a {
  background-color: #c42a87 !important;
  color: #fff !important;
}
[data-theme="dark"] #nsfwModal a:hover {
  background-color: #a82273 !important;
}

/* Botón Cancel: hover:bg-paper-50 invertido queda muy claro.
   Lo bajamos a paper-200 (superficie elevada del dark). */
[data-theme="dark"] #nsfwModal button[data-nsfw-modal-cancel]:hover {
  background-color: var(--color-paper-200) !important;
}

/* ============================================================
   profiles_top10 (.t10-*) — overrides puntuales
   ============================================================ */
[data-theme="dark"] .t10__title { color: var(--color-ink-900); }
[data-theme="dark"] .t10__sparkle { color: #c084fc; filter: drop-shadow(0 2px 8px rgba(192,132,252,.4)); }
[data-theme="dark"] .t10__sub { color: var(--color-ink-muted); }
/* sbtn default transparent — solo color icono. Hover: fill discreto.
   NO le pongo background default (rompe el look de "pill segmentado") */
[data-theme="dark"] .t10__sbtn {
  color: var(--color-ink-muted);
}
[data-theme="dark"] .t10__sbtn:hover {
  background: var(--color-paper-200);
  color: var(--color-ink-900);
}
[data-theme="dark"] .t10__sbtn:focus-visible { outline-color: var(--color-ink-900); }
[data-theme="dark"] .t10__dots i { background: var(--color-paper-300); }
[data-theme="dark"] .t10__dots i.on { background: var(--color-ink-900); }
/* Numeros gigantes 1-10 outline (selector REAL: .t10__num, no rank-num).
   stroke #1a1a1a literal → invisible en dark. Subimos stroke a 3px y
   color a ink-500 para que se lean sin competir con las cards. */
[data-theme="dark"] .t10__num {
  -webkit-text-stroke: 3px var(--color-ink-500);
}
[data-theme="dark"] .t10__card-inner {
  background: var(--color-paper-card);
}

/* ============================================================
   cover_flow (.cf-*) — overrides puntuales
   ============================================================ */
[data-theme="dark"] .cf__title { color: var(--color-ink-900); }
[data-theme="dark"] .cf__sub { color: var(--color-ink-muted); }
[data-theme="dark"] .cf__sbtn {
  color: var(--color-ink-muted);
}
[data-theme="dark"] .cf__sbtn:hover {
  background: var(--color-paper-200);
  color: var(--color-ink-900);
}
[data-theme="dark"] .cf__dots i { background: var(--color-paper-300); }
[data-theme="dark"] .cf__dots i.on { background: var(--color-ink-900); }

/* ============================================================
   NAVBAR — overrides scoped
   ------------------------------------------------------------
   El navbar usa bg-white (sticky + dropdown + mobile panel) y
   tambien bg-white como "pill activo" en theme/locale toggles.
   Como no podemos redefinir --color-white global (rompe text-white
   en botones colored), pisamos los descendant selectors aqui.
   ============================================================ */

/* Sticky nav background — usa bg-white/90 backdrop-blur */
[data-theme="dark"] nav[data-cn-root].bg-white\/90 {
  background-color: rgba(13,13,20,0.85) !important;
  border-bottom-color: var(--color-paper-line) !important;
}

/* Avatar dropdown panel + mobile menu panel */
[data-theme="dark"] nav[data-cn-root] .bg-white {
  background-color: var(--color-paper-card);
}
[data-theme="dark"] #navMobilePanel,
[data-theme="dark"] #navMobilePanel .bg-white {
  background-color: var(--color-paper-card) !important;
}

/* Search input focus state — vuelve "blanco" al hacer focus,
   en dark debe ser una superficie ligeramente mas clara. */
[data-theme="dark"] nav[data-cn-root] input[data-cn-search-input]:focus,
[data-theme="dark"] #navMobilePanel input[data-cn-search-input]:focus {
  background-color: var(--color-paper-200) !important;
}

/* ============================================================
   Notifications bell + badge — vars internas --cidnot-*
   ------------------------------------------------------------
   El componente define vars locales --cidnot-surface (#fff),
   --cidnot-ink (oklch oscuro), --cidnot-hair, etc. Redefinir
   para dark — descendientes que las usan migran solos.
   ============================================================ */
[data-theme="dark"] .cidnot-bell,
[data-theme="dark"] .cidnot-panel,
[data-theme="dark"] .cidnot-scrim {
  --cidnot-surface:     #13131c;
  --cidnot-surface-2:   #181822;
  --cidnot-ink:         #f1f0ff;
  --cidnot-ink-soft:    #c8c5e0;
  --cidnot-ink-faint:   #8a87a8;
  --cidnot-hair:        #2a2a3a;
  --cidnot-hair-strong: #3a3a4d;
}
[data-theme="dark"] .cidnot-bell { color: var(--color-ink-700); }
[data-theme="dark"] .cidnot-bell:hover { color: var(--color-ink-900); }
[data-theme="dark"] .cidnot-panel {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
  color: var(--color-ink-700);
}
[data-theme="dark"] .cidnot-scrim { background: rgba(0,0,0,.55); }

/* Navbar search input — focus:bg-white se aplica al escribir.
   Selector real: #navSearch (no data-cn-search-input). */
[data-theme="dark"] #navSearch,
[data-theme="dark"] #navSearch:focus {
  background-color: var(--color-paper-200) !important;
  border-color: var(--color-paper-line) !important;
  color: var(--color-ink-900);
}
[data-theme="dark"] #navSearch:focus {
  border-color: var(--color-brand-500) !important;
  box-shadow: 0 0 0 2px rgba(124,58,237,.20) !important;
}
[data-theme="dark"] #navSearch::placeholder {
  color: var(--color-ink-faint);
}

/* ============================================================
   Modal confirmAction (Dar puntos / Boost / etc) — #confirmSheet
   ------------------------------------------------------------
   Sheet bg-white literal + warning bg-rose-50 claro. Pisar. */
[data-theme="dark"] #confirmSheet {
  background-color: var(--color-paper-card) !important;
  border-color: var(--color-paper-line) !important;
}
[data-theme="dark"] #cfWarning {
  background-color: rgba(244,63,94,.12) !important;
  border-color: rgba(244,63,94,.30) !important;
  color: #fda4af !important;
}
/* Botones del confirmSheet — cancel hover */
[data-theme="dark"] #cfCancel {
  color: var(--color-ink-muted);
}
[data-theme="dark"] #cfCancel:hover {
  background-color: var(--color-paper-200);
}

/* ============================================================
   Modal Reportar perfil — #reportModal
   ------------------------------------------------------------
   Inputs/select/textarea con bg-white literal. card-show ya
   cambia via profile-show-root scope. */
[data-theme="dark"] #reportModal input.bg-white,
[data-theme="dark"] #reportModal select.bg-white,
[data-theme="dark"] #reportModal textarea.bg-white {
  background-color: var(--color-paper-200) !important;
  color: var(--color-ink-900) !important;
  border-color: var(--color-paper-line) !important;
}
[data-theme="dark"] #reportModal input::placeholder,
[data-theme="dark"] #reportModal textarea::placeholder,
[data-theme="dark"] #reportModal select option {
  color: var(--color-ink-faint);
}
[data-theme="dark"] #reportModal input:focus,
[data-theme="dark"] #reportModal select:focus,
[data-theme="dark"] #reportModal textarea:focus {
  border-color: var(--color-brand-500) !important;
}
/* Card amarilla "Necesitamos tus datos..." (bg-amber-50 border-amber-200) */
[data-theme="dark"] #reportModal .bg-amber-50.border-amber-200 {
  background-color: rgba(234,179,8,.12) !important;
  border-color: rgba(234,179,8,.30) !important;
  color: #fcd34d !important;
}

/* ============================================================
   Toast/Notify global de profile-show (#notif + #notifBox)
   ------------------------------------------------------------
   El toast tiene bg-white literal + border-[var(--line)]. Aparece
   tras toda accion exitosa (boost, gift, follow, copy, etc).
   Texto colored ya cambia via tokens — solo el wrapper sigue claro. */
[data-theme="dark"] #notifBox {
  background-color: var(--color-paper-card) !important;
  border-color: var(--color-paper-line) !important;
  box-shadow: 0 4px 16px rgba(0,0,0,.5), 0 1px 3px rgba(0,0,0,.4);
}
[data-theme="dark"] #notifMsg {
  color: var(--color-ink-muted) !important;
}

/* ============================================================
   /explore — overrides scoped
   ------------------------------------------------------------
   La pagina usa bg-white para: search input, KBD, predictive
   dropdown, tagsMenu, mobile toggle bars, mobile alpha bar,
   empty state icon. Y bg-white/40 + bg-white/30 para los row
   bars (filtros y filtros activos). Ningun "bg-white" en
   explore es para texto sobre fondo colored.
   ============================================================ */

/* Search input + KBD ⌘K */
[data-theme="dark"] #searchInput.bg-white,
[data-theme="dark"] #searchWrap input.bg-white {
  background-color: var(--color-paper-100) !important;
  color: var(--color-ink-900);
}
[data-theme="dark"] #searchWrap kbd.bg-white {
  background-color: var(--color-paper-200) !important;
  color: var(--color-ink-muted);
}

/* Predictive search dropdown */
[data-theme="dark"] #predictive.bg-white,
[data-theme="dark"] #predictive {
  background-color: var(--color-paper-card) !important;
  border-color: var(--color-paper-line);
}

/* Filter chips bar + active filters bar (bg-white/40, /30 semi-trans) */
[data-theme="dark"] .border-t.bg-white\/40,
[data-theme="dark"] .border-t.bg-white\/30 {
  background-color: rgba(13,13,20,0.5) !important;
}

/* Tags dropdown */
[data-theme="dark"] #tagsMenu.bg-white,
[data-theme="dark"] #tagsMenu {
  background-color: var(--color-paper-card) !important;
  border-color: var(--color-paper-line);
}

/* Mobile toggle row + mobile alpha row */
[data-theme="dark"] .ex-toggles-mobile.bg-white,
[data-theme="dark"] .ex-alpha-mobile.bg-white,
[data-theme="dark"] .ex-toggles-mobile,
[data-theme="dark"] .ex-alpha-mobile {
  background-color: var(--color-paper-card);
  border-color: var(--color-paper-line);
}

/* Empty state icon container */
[data-theme="dark"] main .inline-flex.bg-white.border-line {
  background-color: var(--color-paper-100) !important;
  border-color: var(--color-paper-line);
}

/* Botones inline reset + load more — en light tienen
   background:var(--color-ink); color:white. En dark, ink se
   invierte a claro, asi que texto blanco quedaria invisible.
   Pisamos: fondo claro + texto oscuro (mantiene el "invertido
   al fondo" del light). */
[data-theme="dark"] #btnResetEmpty,
[data-theme="dark"] #btnLoadMore {
  background: var(--color-ink-900) !important;
  color: var(--color-paper-card) !important;
  border-color: var(--color-ink-900) !important;
}

/* Sticky letter divider en grid alfabetico */
[data-theme="dark"] .sticky-letter {
  background: linear-gradient(180deg, var(--color-paper-card) 0%, var(--color-paper-card) 70%, transparent 100%);
}

/* Chip base — usa bg-paper-50/100 + border-line, ya cambian.
   Solo refuerza el active state que pinta con fondo ink. */
[data-theme="dark"] .chip.active,
[data-theme="dark"] .chip[aria-pressed="true"] {
  background: var(--color-ink-900);
  color: var(--color-paper-card);
  border-color: var(--color-ink-900);
}

/* ============================================================
   HERO module (.hero-mod) — partial self-contained
   ------------------------------------------------------------
   El hero tiene su propio <style> con vars locales (--bg-base,
   --surface, --text-main, etc.) y MUCHOS hex literales en
   estados focus/status/cta. Pisamos las vars locales + hex
   hardcoded sin tocar el partial.
   ============================================================ */
[data-theme="dark"] .hero-mod {
  /* Surfaces */
  --bg-base:    #0a0a0f;
  --surface:    rgba(19,19,28,.65);
  --text-main:  #f1f0ff;
  --text-mute:  #8a87a8;
  --border:     rgba(241,240,255,.08);
  --border-lite:rgba(241,240,255,.04);

  /* Shadows mas profundas */
  --shadow-sm:  0 2px 8px rgba(0,0,0,.4);
  --shadow-md:  0 8px 24px rgba(0,0,0,.5);
  --shadow-lg:  0 12px 40px rgba(0,0,0,.55);
  --shadow-pop: 0 20px 40px -10px rgba(0,0,0,.7);

  /* Brand colors — mantienen, son legibles en ambos modos */
}

/* Mesh radial gradients — un poco mas intensos en dark */
[data-theme="dark"] .hero-mod .mesh {
  background:
    radial-gradient(circle at 15% 50%, rgba(139,49,255,.16), transparent 50%),
    radial-gradient(circle at 85% 30%, rgba(255,27,107,.14), transparent 50%);
}

/* Badge "WIKICOSPLAY" / status — fondo blanco hardcoded */
[data-theme="dark"] .hero-mod .badge {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
  color: var(--color-ink);
}

/* Tooltip — fondo blanco/translucido hardcoded + arrow */
[data-theme="dark"] .hero-mod .tooltip {
  background: rgba(19,19,28,.95);
  border-color: var(--color-paper-line);
  color: var(--color-ink);
}
[data-theme="dark"] .hero-mod .tooltip::after {
  border-top-color: rgba(19,19,28,.95);
}

/* Headline — gradient text hardcoded en negros */
[data-theme="dark"] .hero-mod h1.headline {
  background: linear-gradient(180deg, #f1f0ff 0%, #a09ec0 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}

/* Field wrapper focus — bg blanco hardcoded */
[data-theme="dark"] .hero-mod .field-wrapper:focus-within {
  background: var(--color-paper-100);
}
/* Field wrapper inset highlight blanco hardcoded — eliminar en dark */
[data-theme="dark"] .hero-mod .field-wrapper,
[data-theme="dark"] .hero-mod .module {
  box-shadow: var(--shadow-md), inset 0 1px 0 rgba(241,240,255,.05);
}

/* Input placeholder color hardcoded */
[data-theme="dark"] .hero-mod .input::placeholder {
  color: var(--color-ink-faint);
}

/* Status default state — bg blanco hardcoded */
[data-theme="dark"] .hero-mod .status {
  background: var(--color-paper-200);
}

/* Status estados (available/taken/reserved/loading) — los hex
   de fondo son pastel claros, en dark deben oscurecerse para
   que el texto colored siga legible. */
[data-theme="dark"] .hero-mod .status[data-state="available"] { background: rgba(5,150,105,.18); }
[data-theme="dark"] .hero-mod .status[data-state="taken"]     { background: rgba(225,29,72,.18); }
[data-theme="dark"] .hero-mod .status[data-state="reserved"]  { background: rgba(217,119,6,.18); }
[data-theme="dark"] .hero-mod .status[data-state="loading"]   { background: rgba(124,58,237,.18); }

/* CTA estado disabled — fondo y color hardcoded */
[data-theme="dark"] .hero-mod .cta {
  background: var(--color-paper-200);
  color: var(--color-ink-faint);
  box-shadow: inset 0 0 0 1px rgba(241,240,255,.05);
}
/* CTA primary y warn ya tienen gradients vivos, se ven bien en ambos modos */

/* ============================================================
   PROFILE SHOW (.profile-show-root) — scope dedicado
   ------------------------------------------------------------
   La pagina del cosplayer tiene su propio scope con vars locales
   (--bg, --paper, --line, --ink, --color-ink-*, --color-paper-*).
   Las redefinimos para dark — casi todo el partial migra solo.
   Mantenemos brand colors (violet, pink, gold) intactos: legibles
   en ambos modos y dan identidad a la marca.
   ============================================================ */
[data-theme="dark"] .profile-show-root {
  /* Vars literales del demo */
  --bg:     #0a0a0f;
  --paper:  #13131c;
  --line:   #2a2a3a;
  --line-2: #20202e;
  --ink:    #f1f0ff;
  --ink-2:  #c8c5e0;
  --ink-3:  #8a87a8;
  /* --violet, --pink se mantienen (brand) */

  /* Color-ink-* locales — invertidos COMPLETA (300-900) */
  --color-ink-900: #f1f0ff;
  --color-ink-800: #e2e0f0;
  --color-ink-700: #c8c5e0;
  --color-ink-600: #b0adc8;
  --color-ink-500: #8a87a8;
  --color-ink-400: #6c6986;
  --color-ink-300: #54526c;

  /* Color-paper-* locales — invertidos */
  --color-paper-100: #181822;
  --color-paper-200: #20202e;
  --color-paper-300: #2a2a3a;

  /* Track del conic-gradient (pring) — usado como fallback de --track */
  --track: #20202e;

  /* Sombras mas profundas */
  --shadow-soft: 0 1px 2px rgba(0,0,0,.4), 0 4px 16px rgba(0,0,0,.5);
  --shadow-pop:  0 16px 48px rgba(124,58,237,.30), 0 4px 12px rgba(0,0,0,.5);
}

/* chip-show — background:#fff hardcoded */
[data-theme="dark"] .profile-show-root .chip-show {
  background: var(--color-paper-100);
  border-color: var(--line);
  color: var(--ink-2);
}

/* glass / glass-dark — backgrounds blanco/negro hardcoded */
[data-theme="dark"] .profile-show-root .glass {
  background: rgba(19,19,28,.72);
}
[data-theme="dark"] .profile-show-root .glass-dark {
  background: rgba(0,0,0,.55);
}

/* ring-grad — usa #fff como inner/outer del borde gradient.
   En dark el #fff queda como halo blanco brillante sobre fondo
   oscuro. Lo bajamos al fondo card. */
[data-theme="dark"] .profile-show-root .ring-grad {
  box-shadow: 0 0 0 3px var(--paper), 0 0 0 5px transparent;
  background:
    linear-gradient(var(--paper), var(--paper)) padding-box,
    linear-gradient(135deg,#a855f7,#ec4899,#f59e0b) border-box;
}

/* ph-stripes (placeholder) — papers claros hardcoded */
[data-theme="dark"] .profile-show-root .ph-stripes {
  background-image: repeating-linear-gradient(135deg,
    var(--color-paper-100) 0 14px,
    var(--color-paper-200) 14px 28px);
}

/* grad-mesh — gradient con pasteles, en dark sobre fondo oscuro
   los pasteles quedan muy luminosos. Bajamos opacity de los
   radiales y dropeamos el linear-gradient base (era pastel solido
   rosa/peach). */
[data-theme="dark"] .profile-show-root .grad-mesh {
  background:
    radial-gradient(60% 80% at 20% 20%, rgba(168,85,247,.40), transparent 60%),
    radial-gradient(50% 70% at 80% 30%, rgba(236,72,153,.35), transparent 60%),
    radial-gradient(60% 80% at 60% 90%, rgba(245,158,11,.30), transparent 60%),
    var(--paper);
}

/* Shimmer overlays — bajar el rgba(255,255,255,.7/.45) */
[data-theme="dark"] .profile-show-root .shimmer-show {
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.10), transparent);
}

/* card-show, btn-show, pop-show ya usan vars (--paper, --line, --ink)
   redefinidas arriba. NO requieren overrides adicionales. */

/* === _gamification_hub — progress rings (.pring) ===
   Bug: .pring-inner tiene background:#fff hardcoded. En dark queda
   circulo blanco sobre fondo oscuro. Y el track del conic-gradient
   usa --track con fallback #f1eee6 (claro). */
[data-theme="dark"] .profile-show-root .pring > .pring-inner {
  background: var(--paper);
}
/* El conic-gradient ya leera --track desde el scope (redefinido arriba) */

/* === _gamification_hub — desactivar blobs decorativos en dark ===
   El HTML tiene 2 div.absolute con blur-2xl + gradientes pastel
   (from-violet-200/40 to-pink-200/30 y from-amber-200/40 to-rose-200/30).
   Pensados para fondo blanco — en dark generan halos claros que
   lavan los textos "Boosts/Regalos/Tokens..." y "Ultimos regalos". */
[data-theme="dark"] .profile-show-root .card-show .absolute.blur-2xl {
  background: none !important;
  background-image: none !important;
}

/* === _gamification_hub — tip-body (tooltip "Cómo funciona?") ===
   Usa chip-show que ya pisamos. Solo agregar contrast extra. */
[data-theme="dark"] .profile-show-root .tip > .tip-body {
  color: var(--ink);
}

/* === _qr_share — section con style inline blanco ===
   El HTML usa: style="background: linear-gradient(160deg,#ffffff, #faf6ff)"
   Pisar con attribute selector + !important (es el unico modo sin
   tocar el partial). Match estable por ese fragmento del gradient. */
[data-theme="dark"] .profile-show-root section[style*="#ffffff"][style*="#faf6ff"] {
  background: linear-gradient(160deg, var(--paper) 0%, var(--color-paper-100) 100%) !important;
  border-color: var(--line) !important;
}

/* === _ranks — circulo interno del medallon ===
   El HTML usa: <div class="w-12 h-12 rounded-full bg-white ...">
   bg-white → fondo blanco brillante en dark. Pisar al paper oscuro. */
[data-theme="dark"] .profile-show-root .rank-ring > .bg-white {
  background-color: var(--paper) !important;
}

/* === _give_points — section completa ===
   El HTML usa style inline: background: linear-gradient(135deg, #ecfdf5, #f0fdfa 60%, #ffffff)
   + clases text-emerald-700, bg-emerald-* hardcoded.
   Pisamos el fondo + reasignamos emeralds para que contrasten en dark. */
[data-theme="dark"] .profile-show-root section[style*="#ecfdf5"][style*="#f0fdfa"] {
  background: linear-gradient(135deg, rgba(16,185,129,.12), rgba(14,165,233,.08) 60%, var(--paper)) !important;
  border-color: rgba(16,185,129,.35) !important;
}

/* Dentro de esa section, los text-emerald-700 se oscurecen mucho en dark.
   Apuntamos por class context: dentro de la card de give_points,
   text-emerald-700 → emerald-300 (claro y vivo). */
[data-theme="dark"] .profile-show-root section[style*="#ecfdf5"] .text-emerald-700 {
  color: #6ee7b7 !important;
}
[data-theme="dark"] .profile-show-root section[style*="#ecfdf5"] .text-emerald-600 {
  color: #34d399 !important;
}

/* Input wrapper de cantidad (bg-white border-emerald-200) */
[data-theme="dark"] .profile-show-root section[style*="#ecfdf5"] .bg-white.border-emerald-200 {
  background-color: var(--paper) !important;
  border-color: rgba(16,185,129,.4) !important;
}
[data-theme="dark"] .profile-show-root section[style*="#ecfdf5"] #ptsInput {
  color: #6ee7b7 !important;
}
/* Botones +/- estado */
[data-theme="dark"] .profile-show-root section[style*="#ecfdf5"] .bg-white.border-emerald-200 button {
  color: #34d399;
}

/* Boton "Saldo" interno (bg-emerald-500) — mantiene su color vivo,
   solo asegurar texto blanco. Ya esta. */

/* === _claim_profile — section con style inline violeta-blanco ===
   HTML: style="background: linear-gradient(135deg, #f5f3ff, #fdf4ff 60%, #ffffff)"
   + border-violet-200/60 + text-violet-700.
   Mismo patron que _give_points (gradient tintado + emerald→300). */
[data-theme="dark"] .profile-show-root section[style*="#f5f3ff"][style*="#fdf4ff"] {
  background: linear-gradient(135deg, rgba(124,58,237,.14), rgba(236,72,153,.10) 60%, var(--paper)) !important;
  border-color: rgba(124,58,237,.35) !important;
}
[data-theme="dark"] .profile-show-root section[style*="#f5f3ff"] .text-violet-700 {
  color: #c4b5fd !important;
}

/* === _support — boost card "MÁS POPULAR" ===
   JS inyecta border-2 border-violet-200 al popular. violet-200 es
   pastel claro → en dark se ve como cerco blanquecino. Bajar a un
   violet con suficiente saturacion pero sin perder dark mood. */
[data-theme="dark"] .profile-show-root .boost-pkg.border-violet-200 {
  border-color: var(--color-brand-500) !important;
}
[data-theme="dark"] .profile-show-root .boost-pkg:hover {
  background-color: rgba(124,58,237,.08) !important;
}

/* === _support — card "DAR MARCO NEON" ===
   HTML: rounded-2xl bg-gradient-to-br from-amber-50 to-rose-50
         border border-amber-200/60
   Mismo patron que _give_points / _claim_profile: gradient tintado
   sobre paper oscuro + textos amber/rose remapeados a tonos claros. */
[data-theme="dark"] .profile-show-root .from-amber-50.to-rose-50 {
  background-image: linear-gradient(to bottom right, rgba(245,158,11,.12), rgba(244,63,94,.10)) !important;
  background-color: var(--paper) !important;
  border-color: rgba(245,158,11,.30) !important;
}
/* Textos rose/amber dentro de la card del marco neon */
[data-theme="dark"] .profile-show-root .from-amber-50.to-rose-50 .text-rose-600 {
  color: #fda4af !important;
}
[data-theme="dark"] .profile-show-root .from-amber-50.to-rose-50 .text-amber-700 {
  color: #fcd34d !important;
}
/* Progress bar interno (bg-white/70) */
[data-theme="dark"] .profile-show-root .from-amber-50.to-rose-50 .bg-white\/70 {
  background-color: rgba(255,255,255,.08) !important;
}

/* ============================================================
   ============================================================
   POLISH PASS — fixes de contraste reportados
   ============================================================
   ============================================================ */

/* ============================================================
   HOME — boton "Ver mas" del profiles_grid (.pg-seeall)
   ------------------------------------------------------------
   Clase: bg-ink-900 text-white. En dark queremos boton oscuro
   coherente con la card (no invertido). Hover: gradient brand.
   ============================================================ */
[data-theme="dark"] .pg-seeall.bg-ink-900 {
  background-color: var(--color-paper-card) !important;
  color: var(--color-ink-700) !important;
  border: 1px solid var(--color-paper-line);
}
[data-theme="dark"] .pg-seeall.bg-ink-900:hover {
  background-color: var(--color-brand-500) !important;
  color: #fff !important;
  border-color: var(--color-brand-500);
}

/* ============================================================
   TOP 10 (.t10) + COVER FLOW (.cf) — wrapper bg + titulo
   ------------------------------------------------------------
   El wrapper tiene background-color:#fff hardcoded + SVG pattern
   con stroke amarillo/magenta sobre blanco. En dark el pattern
   se ve mal — dropeo la imagen y dejo color liso.
   El titulo tiene color:#14110d hardcoded → invisible en dark.
   ============================================================ */
[data-theme="dark"] .t10,
[data-theme="dark"] .cf {
  background-color: var(--color-canvas);
  background-image: none;
}
[data-theme="dark"] .t10__title,
[data-theme="dark"] .cf__title {
  color: var(--color-ink-900);
}
[data-theme="dark"] .t10__title-pill {
  background: var(--color-paper-card);
  color: var(--color-ink-900);
  border-color: var(--color-paper-line);
}

/* Cover Flow "Ver mas" boton — border/bg/color hardcoded.
   Mismo patron que pg-seeall: oscuro coherente con card,
   hover brand violet. */
[data-theme="dark"] .cf__see-all {
  background: var(--color-paper-card);
  color: var(--color-ink-700);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] .cf__see-all:hover {
  background: var(--color-brand-500);
  color: #fff;
  border-color: var(--color-brand-500);
}

/* ============================================================
   EXPLORE — ios-switch (Verificados / NSFW)
   ------------------------------------------------------------
   Background #e5e2da + knob:white hardcoded.
   ============================================================ */
[data-theme="dark"] .ios-switch {
  background: var(--color-paper-200);
}
[data-theme="dark"] .ios-switch .knob {
  background: var(--color-ink-800);
  box-shadow: 0 1px 2px rgba(0,0,0,.4), 0 1px 3px rgba(0,0,0,.3);
}
/* ios-switch.on usa var(--color-accent) y var(--color-nsfw) — ya cambian */

/* ============================================================
   EXPLORE — scrubber A-Z (sidebar derecho)
   ------------------------------------------------------------
   .scrubber-letter.dim usa #c9c4b8 (claro). En dark queda muy
   brillante. Mapeamos a ink-300.
   ============================================================ */
[data-theme="dark"] .scrubber-letter { color: var(--color-ink-muted); }
[data-theme="dark"] .scrubber-letter.dim { color: var(--color-ink-faint); }
[data-theme="dark"] .scrubber-letter:hover,
[data-theme="dark"] .scrubber-letter.active { color: var(--color-accent); }
[data-theme="dark"] .magnifier {
  background: var(--color-ink-900);
  color: var(--color-paper-card);
}

/* ============================================================
   EXPLORE — pagi-btn (paginacion)
   ============================================================ */
[data-theme="dark"] .pagi-btn {
  background: var(--color-paper-card);
  color: var(--color-ink-700);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] .pagi-btn:hover {
  background: var(--color-paper-200);
  color: var(--color-ink-900);
}
[data-theme="dark"] .pagi-btn.current {
  background: var(--color-ink-900);
  color: var(--color-paper-card);
  border-color: var(--color-ink-900);
}

/* ============================================================
   CARDS — iniciales del avatar fallback grande
   ------------------------------------------------------------
   La card usa: bg-gradient-to-br from-paper-200 to-paper-300
   text-ink-400 — en dark text-ink-400 es gris medio sobre
   paper-200/300 oscuros → poco contraste. Subir a ink-800.
   ============================================================ */
[data-theme="dark"] .pg-card .from-paper-200.to-paper-300 {
  color: var(--color-ink-800) !important;
}

/* ============================================================
   /random — body wrapper hardcoded
   ============================================================ */
[data-theme="dark"] body.random-body {
  background: var(--color-canvas);
  color: var(--color-ink);
}
[data-theme="dark"] body.random-body .rd-chip {
  background: rgba(19,19,28,.72);
  color: var(--color-ink);
  border-color: rgba(241,240,255,.08);
}
[data-theme="dark"] body.random-body .rd-chip:hover {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] .rd-skeleton {
  background: linear-gradient(90deg, #20202e 0%, #2a2a3a 40%, #20202e 80%);
}

/* ============================================================
   /fanpass — scope .fanpass-root con vars locales
   ------------------------------------------------------------
   IMPORTANTE: las vars --fp-* las definimos en AMBOS contextos
   (body.fanpass-body Y .fanpass-root) porque la regla del
   background del body vive en body.fanpass-body — el body NO
   esta dentro de .fanpass-root, asi que necesita ver las vars
   en su propio scope. .fanpass-root tambien las necesita para
   los descendientes scoped.
   ============================================================ */
[data-theme="dark"] body.fanpass-body,
[data-theme="dark"] .fanpass-root {
  --fp-bg:            #0a0a0f;
  --fp-surface:       #13131c;
  --fp-surface-2:     #181822;
  --fp-text:          #f1f0ff;
  --fp-muted:         #8a87a8;
  --fp-faint:         #54526c;
  --fp-border:        #2a2a3a;
  --fp-border-strong: #3a3a4d;
  /* fp-accent / fp-accent-2 mantienen (rosa de marca) */
  --fp-accent-soft:   rgba(255,45,120,.14);
  --fp-shadow-sm:     0 1px 2px rgba(0,0,0,.4);
  --fp-shadow:        0 1px 2px rgba(0,0,0,.4), 0 10px 28px -16px rgba(0,0,0,.55);
  --fp-shadow-lg:     0 24px 60px -24px rgba(0,0,0,.7);
}

/* ============================================================
   /dashboard — body.dashboard-body (settings y otras dash pages)
   ------------------------------------------------------------
   Background gradient con oklch claros literales. Color #ink
   tambien literal. Pisar ambos.
   ============================================================ */
[data-theme="dark"] body.dashboard-body {
  background:
    radial-gradient(1200px 600px at -10% -20%, oklch(0.25 0.05 280 / 0.5), transparent 60%),
    radial-gradient(900px 500px at 110% 0%,   oklch(0.25 0.04 200 / 0.4), transparent 55%),
    var(--color-canvas);
  color: var(--color-ink);
}
[data-theme="dark"] body.dashboard-body .mod-card:hover {
  border-color: var(--color-paper-line);
  box-shadow: 0 1px 2px rgba(0,0,0,.4), 0 12px 32px rgba(0,0,0,.55);
}
[data-theme="dark"] body.dashboard-body .mod-card:hover .chev-pill {
  background: var(--color-ink-900);
  color: var(--color-paper-card);
}

/* === /dashboard — cards (greeting + module grid) ===
   Las cards usan bg-white/85 backdrop-blur con border-ink-200/70.
   bg-white/85 es blanco translucido literal → en dark queda toda
   la pagina blanca. Pisar al patron paper-card oscuro. */
[data-theme="dark"] body.dashboard-body .dash-summary,
[data-theme="dark"] body.dashboard-body .mod-card {
  background-color: var(--color-paper-card) !important;
  border-color: var(--color-paper-line) !important;
}

/* Blobs decorativos del dash-summary (bg-accent-100/50 blur-3xl).
   En light son halos suaves; en dark son washes brillantes que
   lavan el texto. Bajar opacity drasticamente. */
[data-theme="dark"] body.dashboard-body .dash-summary .blur-3xl {
  opacity: 0.20 !important;
}

/* Icon wrap (style inline oklch claro): bajar fuerte para dark.
   Bajamos brightness mas y subimos saturacion para mantener hue. */
[data-theme="dark"] body.dashboard-body .mod-card .icon-wrap {
  filter: brightness(0.40) saturate(1.6);
}
/* Glow del hover — oklch claro hardcoded en style inline.
   Bajar mucho para que sea sutil ambient glow, no flash blanco. */
[data-theme="dark"] body.dashboard-body .mod-card .glow {
  filter: brightness(0.25) saturate(1.4);
}
[data-theme="dark"] body.dashboard-body .mod-card:hover .glow {
  opacity: 0.35 !important;
}

/* === Botones "Crear perfil" / cta de las module cards ===
   Usan: bg-accent-50 text-accent-700 hover:bg-accent-100.
   Las vars accent-50/100/700 no redefini global → siguen claras.
   Pisar scoped al dashboard. */
[data-theme="dark"] body.dashboard-body .mod-card .bg-accent-50.text-accent-700 {
  background-color: rgba(124,58,237,.18) !important;
  color: #c4b5fd !important;
}
[data-theme="dark"] body.dashboard-body .mod-card .bg-accent-50.text-accent-700:hover {
  background-color: rgba(124,58,237,.28) !important;
}

/* === /dashboard/profile y otras paginas dashboard con bg-white ===
   La pagina usa bg-white literal en multiples cards (wallet card,
   main card, sub cards, coste-card). Pisar todos los bg-white dentro
   del dashboard-body al paper-card oscuro. */
[data-theme="dark"] body.dashboard-body .bg-white {
  background-color: var(--color-paper-card);
}
[data-theme="dark"] body.dashboard-body .bg-neutral-50 {
  background-color: var(--color-neutral-100);
}

/* mp-card tiene background: #fff hardcoded (CSS directo, no Tailwind) */
[data-theme="dark"] body.dashboard-body .mp-card {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
}

/* Halos decorativos del empty-state (gradients oklch claros) */
[data-theme="dark"] body.dashboard-body .mp-empty-wallet {
  background: linear-gradient(135deg, rgba(124,58,237,.06), rgba(236,72,153,.04));
}
[data-theme="dark"] body.dashboard-body .mp-empty-halo-back {
  background: radial-gradient(circle at 30% 30%, rgba(124,58,237,.30), rgba(124,58,237,.18) 70%);
}
[data-theme="dark"] body.dashboard-body .mp-empty-halo-front {
  background: linear-gradient(135deg, rgba(124,58,237,.14), rgba(124,58,237,.10));
  border-color: rgba(124,58,237,.25);
}
[data-theme="dark"] body.dashboard-body .mp-coin-pill {
  background: linear-gradient(135deg, rgba(245,158,11,.22), rgba(234,88,12,.18));
}

/* ============================================================
   /dashboard/wallet — tokens mw-* (TODOS hardcoded en hex)
   ------------------------------------------------------------
   El wallet tiene su propio sistema mw-text-ink-*, mw-bg-*,
   mw-border-* con hex literales. Sin esto los textos son
   negros sobre fondo oscuro.
   ============================================================ */
[data-theme="dark"] .mw-text-ink-900 { color: #f1f0ff; }
[data-theme="dark"] .mw-text-ink-800 { color: #e2e0f0; }
[data-theme="dark"] .mw-text-ink-700 { color: #c8c5e0; }
[data-theme="dark"] .mw-text-ink-600 { color: #b0adc8; }
[data-theme="dark"] .mw-text-ink-500 { color: #8a87a8; }
[data-theme="dark"] .mw-text-ink-400 { color: #6c6986; }
[data-theme="dark"] .mw-text-ink-300 { color: #54526c; }

[data-theme="dark"] .mw-bg-ink-50      { background: #181822; }
[data-theme="dark"] .mw-bg-ink-100     { background: #20202e; }
[data-theme="dark"] .mw-bg-ink-200     { background: #2a2a3a; }
[data-theme="dark"] .mw-border-ink-100 { border-color: #2a2a3a; }
[data-theme="dark"] .mw-border-ink-200 { border-color: #3a3a4d; }
[data-theme="dark"] .mw-bg-card        { background: var(--color-paper-card); }

/* Accent + ok/warn — mantienen los hue, pero soft variants
   con fondo claro pastel pasa a tintado oscuro. */
[data-theme="dark"] .mw-text-accent     { color: #8b7dff; }
[data-theme="dark"] .mw-text-accent-ink { color: #c9b8ff; }
[data-theme="dark"] .mw-bg-accent-soft  { background: rgba(108,78,224,.15); }
[data-theme="dark"] .mw-bg-ok-soft      { background: rgba(20,163,106,.15); }
[data-theme="dark"] .mw-border-accent-ring { border-color: rgba(216,205,255,.25); }

/* Warn / Bad — los soft pastel (#fbecd2, #fae3e1) en dark mode resaltan
   demasiado: parecen "alerta brillante" sobre fondo oscuro. Reemplazamos
   por tintado oscuro con el mismo hue (10-12% opacidad sobre transparent)
   y bumpeamos el text color a tono mas claro para que siga contrastando. */
[data-theme="dark"] .mw-bg-warn-soft { background: rgba(196,122,22,.12); }
[data-theme="dark"] .mw-bg-bad-soft  { background: rgba(200,66,58,.12); }
[data-theme="dark"] .mw-text-warn    { color: #f5b454; }
[data-theme="dark"] .mw-text-bad     { color: #f08079; }

/* === Wallet — .mw-card (clase principal de todas las cards) ===
   CSS directo en input.css: background: #fff; border: 1px solid #f1ede3.
   Es el wrapper de: saldo grande, sidebar puntos, ledger, statboxes.
   Mi override anterior solo cubrio .mw-bg-card (otra clase). */
[data-theme="dark"] .mw-card {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
  box-shadow: 0 1px 0 0 rgba(0,0,0,.3), 0 1px 3px 0 rgba(0,0,0,.4);
}

/* bg-white scoped al wallet-body (cards del listado de transacciones,
   mobile sticky bar, etc.). Mismo patron que dashboard-body. */
[data-theme="dark"] body.wallet-body .bg-white {
  background-color: var(--color-paper-card);
}
[data-theme="dark"] body.wallet-body .bg-white\/85 {
  background-color: rgba(19,19,28,0.85);
}

/* Boton primario Recargar Tokens (background: #1a1816 literal — negro).
   En dark usamos brand violet vivo como CTA principal (coherente
   con pg-seeall, cf__see-all del home). */
[data-theme="dark"] .mw-btn-primary {
  background: var(--color-brand-500);
  color: #fff;
}
[data-theme="dark"] .mw-btn-primary:hover {
  background: var(--color-brand-600);
  color: #fff;
}

/* Boton outline (Detalles, Solicitar retiro, Subir/Reemplazar)
   Original: background:#fff color:#1a1816 border:#e6e1d6 hardcoded. */
[data-theme="dark"] .mw-btn-outline {
  background: var(--color-paper-card);
  color: var(--color-ink-700);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] .mw-btn-outline:hover {
  background: var(--color-paper-200);
  color: var(--color-ink-900);
  border-color: var(--color-paper-300);
}

/* Stat tile (TOKENS GANADOS/COMPRADOS/GASTADOS/RETIRADOS) — bg:#fff */
[data-theme="dark"] .mw-stat-tile {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
  box-shadow: 0 1px 0 0 rgba(0,0,0,.3), 0 1px 3px 0 rgba(0,0,0,.4);
}

/* Toggle MXN/USD (.mw-seg) — container y pill activo blancos */
[data-theme="dark"] .mw-seg {
  background: var(--color-paper-100);
}
[data-theme="dark"] .mw-seg button {
  color: var(--color-ink-muted);
}
[data-theme="dark"] .mw-seg button.is-active {
  background: var(--color-paper-card);
  color: var(--color-ink-900);
  box-shadow: 0 1px 2px rgba(0,0,0,.3), 0 1px 4px rgba(0,0,0,.4);
}

/* ============================================================
   /dashboard/wallet/recharge + /withdraw — mw-flow-* completo
   ------------------------------------------------------------
   El flow es un wizard standalone (sin navbar) con su propio set
   de tokens mw-flow-* todos hardcoded en hex. Pisamos el set
   completo (~15 tokens) para dark. */
[data-theme="dark"] body.wallet-flow-body { background: var(--color-canvas); }

[data-theme="dark"] .mw-flow { color: var(--color-ink); }

/* Topbar + footer translucidos blancos */
[data-theme="dark"] .mw-flow-topbar {
  background: rgba(13,13,20,.85);
  border-bottom-color: var(--color-paper-line);
}
[data-theme="dark"] .mw-flow-footer {
  background: rgba(13,13,20,.95);
  border-top-color: var(--color-paper-line);
}

/* Stepper progress bar */
[data-theme="dark"] .mw-flow-step { background: var(--color-paper-200); }
/* is-active ya usa #5a3ed4 (brand violet) — se ve bien */

/* Card base + variant 2xl */
[data-theme="dark"] .mw-flow-card {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
}

/* Amount input grande */
[data-theme="dark"] .mw-flow-amount {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] .mw-flow-amount input {
  color: var(--color-ink-900);
}
[data-theme="dark"] .mw-flow-amount input::placeholder {
  color: var(--color-ink-faint);
}
[data-theme="dark"] .mw-flow-amount:focus-within {
  border-color: var(--color-brand-500);
  box-shadow: 0 0 0 4px rgba(124,58,237,.20);
}

/* Color tokens — invertidos */
[data-theme="dark"] .mw-flow-text-ink-900 { color: #f1f0ff; }
[data-theme="dark"] .mw-flow-text-ink-800 { color: #e2e0f0; }
[data-theme="dark"] .mw-flow-text-ink-700 { color: #c8c5e0; }
[data-theme="dark"] .mw-flow-text-ink-600 { color: #b0adc8; }
[data-theme="dark"] .mw-flow-text-ink-500 { color: #8a87a8; }
[data-theme="dark"] .mw-flow-text-ink-400 { color: #6c6986; }
[data-theme="dark"] .mw-flow-text-ink-300 { color: #54526c; }

[data-theme="dark"] .mw-flow-bg-ink-50      { background: #181822; }
[data-theme="dark"] .mw-flow-bg-ink-100     { background: #20202e; }
[data-theme="dark"] .mw-flow-border-ink-100 { border-color: #2a2a3a; }
[data-theme="dark"] .mw-flow-border-ink-200 { border-color: #3a3a4d; }

/* Accent soft variant */
[data-theme="dark"] .mw-flow-bg-accent-soft {
  background: rgba(90,62,212,.18);
}
[data-theme="dark"] .mw-flow-text-accent     { color: #a78bfa; }
[data-theme="dark"] .mw-flow-text-accent-ink { color: #c4b5fd; }

/* hover:mw-flow-bg-ink-100 (utility hover scoped al flow) */
[data-theme="dark"] .mw-flow .hover\:mw-flow-bg-ink-100:hover {
  background: var(--color-paper-200);
}

/* bg-white literales dentro del wallet-flow (info box, etc.) */
[data-theme="dark"] body.wallet-flow-body .bg-white {
  background-color: var(--color-paper-card);
}

/* Currency picker segmented (MONEDA card + toggle MXN/USD) */
[data-theme="dark"] .mw-flow-cur {
  background: var(--color-paper-100);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] .mw-flow-cur-track {
  background: var(--color-paper-200);
}
[data-theme="dark"] .mw-flow-cur-thumb {
  background: var(--color-paper-card);
  box-shadow: 0 1px 2px rgba(0,0,0,.4);
}
[data-theme="dark"] .mw-flow-cur-btn {
  color: var(--color-ink-muted);
}
[data-theme="dark"] .mw-flow-cur-btn.is-active {
  color: var(--color-ink-900);
}

/* Quick chips ($100, $250, $500, $1000, $2500, $5000) */
[data-theme="dark"] .mw-flow-chip {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
  color: var(--color-ink-700);
}
[data-theme="dark"] .mw-flow-chip:hover {
  border-color: var(--color-paper-300);
  color: var(--color-ink-900);
}
[data-theme="dark"] .mw-flow-chip.is-active {
  border-color: var(--color-brand-500);
  background: rgba(124,58,237,.18);
  color: #c4b5fd;
}

/* Method row (paso 2: PayPal/Transferencia/Oxxo) */
[data-theme="dark"] .mw-flow-method {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] .mw-flow-method:hover {
  border-color: var(--color-paper-300);
}
[data-theme="dark"] .mw-flow-method.is-active {
  border-color: var(--color-brand-500);
  background: rgba(124,58,237,.18);
}
[data-theme="dark"] .mw-flow-method-radio {
  border-color: var(--color-ink-muted);
}

/* Drop area (comprobante) */
[data-theme="dark"] .mw-flow-drop {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] .mw-flow-drop:hover {
  border-color: var(--color-paper-300);
}
[data-theme="dark"] .mw-flow-drop.is-filled {
  border-color: #a78bfa;
  background: rgba(124,58,237,.14);
}

/* Input estandar */
[data-theme="dark"] .mw-flow-input {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
  color: var(--color-ink-900);
}
[data-theme="dark"] .mw-flow-input::placeholder {
  color: var(--color-ink-faint);
}
[data-theme="dark"] .mw-flow-input:focus {
  border-color: var(--color-brand-500);
  box-shadow: 0 0 0 4px rgba(124,58,237,.20);
}

/* === Preview card "RECIBIRAS" (style inline) ===
   El JS inyecta: style="background:linear-gradient(135deg,#f1eefe,#fff);
                          border:1px solid #e4dcfd"
   Pisar con attribute selector + !important. */
[data-theme="dark"] body.wallet-flow-body div[style*="#f1eefe"][style*="#fff"] {
  background: linear-gradient(135deg, rgba(124,58,237,.18), var(--color-paper-card)) !important;
  border-color: rgba(124,58,237,.35) !important;
}

/* === Shield icon top-right (bg-emerald-50 text-emerald-600) ===
   Emerald-50 es pastel claro hardcoded por Tailwind. */
[data-theme="dark"] body.wallet-flow-body .bg-emerald-50.text-emerald-600 {
  background-color: rgba(16,185,129,.18) !important;
  color: #6ee7b7 !important;
}

/* === Mensajes de validacion (style inline) ===
   El JS inyecta cards con style="background:#ffe4e6..." (rojo error),
   "background:#fef3c7..." (amarillo warning). Pisar a tintados oscuros. */
[data-theme="dark"] body.wallet-flow-body div[style*="#ffe4e6"][style*="#fecdd3"] {
  background: rgba(244,63,94,.14) !important;
  border-color: rgba(244,63,94,.35) !important;
  color: #fda4af !important;
}
[data-theme="dark"] body.wallet-flow-body div[style*="#fef3c7"][style*="#fde68a"] {
  background: rgba(234,179,8,.14) !important;
  border-color: rgba(234,179,8,.35) !important;
  color: #fcd34d !important;
}

/* === Boton CTA "Continuar" disabled state ===
   El override final se hace INLINE en flow.php via $extra_head.
   Externo no pegaba por algun cache/cascade scenario imposible
   de diagnosticar. Inline garantiza override absoluto. */

/* ============================================================
   Scroll-to-top button (#scrollTop) — global del footer
   ------------------------------------------------------------
   Clase: bg-ink text-paper-card. En dark ink se invirtio a
   claro y paper-card a oscuro → fondo blanco con icono oscuro.
   Invertimos: card oscuro con icono claro, hover brand pink.
   ============================================================ */
[data-theme="dark"] #scrollTop {
  background-color: var(--color-paper-card) !important;
  color: var(--color-ink-900) !important;
  border: 1px solid var(--color-paper-line);
}
[data-theme="dark"] #scrollTop:hover {
  background-color: var(--color-pink) !important;
  color: #fff !important;
  border-color: var(--color-pink);
}

/* ============================================================
   PATRON GLOBAL — .bg-ink + .text-white (Tailwind utilities)
   ------------------------------------------------------------
   Usado en: W/ logo de explore, active filter pills (NSFW 18+,
   Verificado, tags), letter-bubble decorativa, badges en boost
   "Saldo" del give_points, y multiples lugares mas.
   En dark: bg-ink se invirtio a claro + text-white blanco =
   invisible. Pisar globalmente al patron combinado.
   NO afecta .text-white solo (botones con gradient, CTA brand). */
[data-theme="dark"] .bg-ink.text-white {
  background-color: var(--color-paper-card) !important;
  color: var(--color-ink-900) !important;
}

/* === Explore — letter-bubble (CSS directo, no Tailwind) ===
   Usa background: var(--color-ink); color: white; literal.
   Como no es clase Tailwind, el patron global no la pisa. */
[data-theme="dark"] .letter-bubble {
  background: var(--color-paper-card);
  color: var(--color-ink-900);
  box-shadow: 0 2px 6px rgba(0,0,0,.5);
}

/* === Explore — scrubber A-Z (wrapper) ===
   Tenia background: rgba(255,255,255,.7) hardcoded → blanco
   translucido. Antes solo pisaba .scrubber-letter. */
[data-theme="dark"] .scrubber {
  background: rgba(19,19,28,.75);
  border-color: var(--color-paper-line);
  box-shadow: 0 8px 24px -10px rgba(0,0,0,.5);
}

/* === Predictive search — highlight <mark> con bg-yellow-100 ===
   El JS inyecta <mark class="bg-yellow-100 text-ink ..."> para
   marcar el match. text-ink en dark = claro, bg-yellow-100 sigue
   amarillo claro → claro sobre claro = invisible. */
[data-theme="dark"] .predictive mark.bg-yellow-100 {
  background-color: rgba(234,179,8,.35) !important;
  color: var(--color-ink-900) !important;
}

/* === /random — botones header (Mezclar + Densidad) ===
   #shuffleBtn: bg-ink text-canvas → ambos vars invertidos en dark
   → claro con texto oscuro. #viewBtn: bg-white border-line → blanco.
   Pisar ambos al patron dark normal (paper-card + ink-700). */
[data-theme="dark"] #shuffleBtn,
[data-theme="dark"] #viewBtn {
  background-color: var(--color-paper-card) !important;
  color: var(--color-ink-700) !important;
  border-color: var(--color-paper-line) !important;
}
[data-theme="dark"] #shuffleBtn:hover {
  background-color: var(--color-brand-500) !important;
  color: #fff !important;
}
[data-theme="dark"] #viewBtn:hover {
  background-color: var(--color-paper-200) !important;
  color: var(--color-ink-900) !important;
}

/* ============================================================
   /dashboard/settings — fixes scoped
   ============================================================ */

/* Theme toggle (botones Claro/Oscuro): el activo usa #ffffff literal.
   Hacer mas diferenciado en dark — usar paper-200 (1 tono mas claro
   que el card) + acento brand violeta en border. */
[data-theme="dark"] .s-theme-opt[aria-pressed="true"] {
  background: var(--color-paper-200);
  color: var(--color-ink-900);
  box-shadow: 0 1px 2px rgba(0,0,0,.4), 0 0 0 1.5px var(--color-brand-500);
}

/* Toggle iOS-like (track + knob) — track #e4ddd0 cream, knob blanco.
   Knob mas tenue para no encandilar el OFF state. */
[data-theme="dark"] .s-toggle {
  background: #1f1f2c;
  box-shadow: inset 0 0 0 1px rgba(241,240,255,0.06);
}
[data-theme="dark"] .s-toggle::after {
  background: #6c6986;
  box-shadow: 0 2px 4px rgba(0,0,0,.5);
}
[data-theme="dark"] .s-toggle[aria-checked="true"]::after {
  background: #ffffff;
}
/* aria-checked=true track ya usa #c42a87 brand pink */

/* Chips de lenguaje (Español/English activos):
   Hacer mas diferenciado — usar accent brand violeta border + paper-200. */
[data-theme="dark"] .s-chip[aria-pressed="true"] {
  background-color: var(--color-paper-200) !important;
  color: var(--color-ink-900) !important;
  border-color: var(--color-brand-500) !important;
  box-shadow: 0 0 0 1px var(--color-brand-500);
}

/* Modal eliminar cuenta — boton "Enviar codigo" usa bg-ink text-paper-card */
[data-theme="dark"] .s-modal-card .bg-ink.text-paper-card {
  background-color: var(--color-paper-card) !important;
  color: var(--color-ink-900) !important;
}
[data-theme="dark"] .s-modal-card .bg-ink.hover\:bg-ink-soft:hover {
  background-color: var(--color-brand-500) !important;
  color: #fff !important;
}

/* Modal warning card amarilla "Por tu seguridad..." — bg-warn-soft/60
   border-warn/30 — se ve dorado muy claro. Pisar a tintado sutil. */
[data-theme="dark"] .s-modal-card .bg-warn-soft\/60,
[data-theme="dark"] .s-modal-card [class*="bg-warn-soft"] {
  background-color: rgba(234,179,8,.10) !important;
  border-color: rgba(234,179,8,.25) !important;
}
[data-theme="dark"] .s-modal-card .text-warn {
  color: #fcd34d !important;
}

/* Boton "No, conservar mi cuenta" — bg-paper-sunk hover:bg-paper-line.
   Ya cambian via tokens pero asegurar contraste sobre el modal dark. */
[data-theme="dark"] .s-modal-card .bg-paper-sunk {
  background-color: var(--color-paper-200) !important;
}
[data-theme="dark"] .s-modal-card .bg-paper-sunk:hover {
  background-color: var(--color-paper-300) !important;
}

/* Privacidad — gender cards activas (.s-pref-card[data-on="true"]):
   background: linear-gradient(180deg, #fff2f9 0%, #ffffff 60%) hardcoded
   → gradient rosa-blanco en dark queda blanco brillante. */
[data-theme="dark"] .s-pref-card[data-on="true"] {
  background: linear-gradient(180deg, rgba(196,42,135,.18) 0%, var(--color-paper-200) 60%) !important;
  border-color: rgba(196,42,135,.45) !important;
}

/* Toggle knob ON (aria-checked=true) — antes #ffffff blanco brillante.
   Bajar a un blanco apenas tintado para que destaque sobre track pink
   sin encandilar. */
[data-theme="dark"] .s-toggle[aria-checked="true"]::after {
  background: #f1f0ff;
}
/* Knob OFF tambien mas oscuro — antes #6c6986 era muy claro */
[data-theme="dark"] .s-toggle::after {
  background: #3a3a4d;
}

/* Modal cambiar contraseña — inputs .s-field con bg #f4f1ea cream.
   Pisar para dark. */
[data-theme="dark"] .s-modal-card .s-field,
[data-theme="dark"] .s-field {
  background: var(--color-paper-200);
  color: var(--color-ink-900);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] .s-field::placeholder {
  color: var(--color-ink-faint);
}
[data-theme="dark"] .s-field:focus {
  background: var(--color-paper-100);
  border-color: var(--color-brand-500);
  box-shadow: 0 0 0 3px rgba(124,58,237,.20);
  outline: none;
}

/* Modal 2FA "Vincular app autenticadora" — vars --tf-* inline.
   --tf-card: #ffffff hardcoded. Redefinir en dark. */
[data-theme="dark"] .tf-modal {
  --tf-card: #13131c;
  --tf-bg-soft: #20202e;
  --tf-line: #2a2a3a;
  --tf-ink: #f1f0ff;
  --tf-muted: #8a87a8;
  background: var(--tf-card);
  border-color: rgba(42,42,58,.8);
  /* Inset blanco arriba — quitar en dark, deja line definida */
  box-shadow:
    0 1px 0 rgba(241,240,255,.05) inset,
    0 30px 60px -20px rgba(0,0,0,.7),
    0 10px 24px -10px rgba(0,0,0,.5);
}
[data-theme="dark"] .tf-backdrop {
  background: rgba(0,0,0,.55);
}

/* QR code card + manual code card dentro del modal 2FA — son white-ish */
[data-theme="dark"] .tf-modal .bg-white,
[data-theme="dark"] .tf-modal [style*="background:#fff"],
[data-theme="dark"] .tf-modal [style*="background: #fff"] {
  background-color: var(--color-paper-card) !important;
}

/* OTP cells (paso 2 del modal 2FA) — background: #fff hardcoded. */
[data-theme="dark"] .tf-otp-input {
  background: var(--color-paper-200);
  color: var(--color-ink-900);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] .tf-otp-input.filled {
  background: var(--color-paper-100);
}

/* Manual code card (paso 1) — background #fbfbf8 cream, border dashed claro */
[data-theme="dark"] .tf-manual-code {
  background: var(--color-paper-200);
  border-color: var(--color-paper-line);
}

/* Autofill del browser sobre inputs password — Chrome pinta amarillo
   por defecto cuando hay autocompletado. Pisar via -webkit-autofill. */
[data-theme="dark"] .s-field:-webkit-autofill,
[data-theme="dark"] .s-field:-webkit-autofill:hover,
[data-theme="dark"] .s-field:-webkit-autofill:focus,
[data-theme="dark"] .tf-otp-input:-webkit-autofill {
  -webkit-box-shadow: 0 0 0 1000px var(--color-paper-200) inset !important;
  -webkit-text-fill-color: var(--color-ink-900) !important;
  caret-color: var(--color-ink-900) !important;
  transition: background-color 9999s ease-out 0s;
}

/* ============================================================
   /dashboard/profile — menu contextual + modal confirm + toast
   El JS construye estos elementos inline con clases Tailwind
   hardcoded (bg-white, text-neutral-700, hover:bg-red-50, etc.).
   Sin overrides el dropdown y los modales quedan con texto
   blanco sobre fondo blanco al hover.
   ============================================================ */

/* MENU CONTEXTUAL (.mp-menu) — items normales y peligrosos.
   Markup que el JS inyecta:
   - normal:  class="... text-neutral-700 hover:bg-neutral-50"
   - danger:  class="... text-red-600 hover:bg-red-50"
   El bg-white del contenedor ya lo cubre la regla genérica. */
[data-theme="dark"] body.dashboard-body .mp-menu {
  background: var(--color-paper-card);
  border-color: var(--color-paper-line);
}
[data-theme="dark"] body.dashboard-body .mp-menu [data-mp-menu-act] {
  color: var(--color-ink-700);
}
[data-theme="dark"] body.dashboard-body .mp-menu [data-mp-menu-act].text-red-600 {
  color: #fca5a5;  /* red-300 — legible sobre fondo oscuro */
}
[data-theme="dark"] body.dashboard-body .mp-menu [data-mp-menu-act]:hover {
  background: var(--color-paper-200);
  color: var(--color-ink-900);
}
[data-theme="dark"] body.dashboard-body .mp-menu [data-mp-menu-act].text-red-600:hover {
  background: rgba(239, 68, 68, 0.15);
  color: #fecaca;  /* red-200 */
}
[data-theme="dark"] body.dashboard-body .mp-menu .bg-neutral-100 {
  background: var(--color-paper-line);
}

/* MODAL DE CONFIRMACION (mount #mp-confirm-mount) — el JS construye:
   - card:    bg-white text-neutral-900
   - desc:    text-neutral-500 / text-neutral-600
   - btn cancel: bg-white text-neutral-700 border-neutral-200 hover:bg-neutral-50
   - btn ok:  cfg.ctaCls (bg-orange-500 o bg-red-500, ya legibles) */
[data-theme="dark"] body.dashboard-body #mp-confirm-mount .bg-white {
  background: var(--color-paper-card);
}
[data-theme="dark"] body.dashboard-body #mp-confirm-mount .text-neutral-900 {
  color: var(--color-ink-900);
}
[data-theme="dark"] body.dashboard-body #mp-confirm-mount .text-neutral-600 {
  color: var(--color-ink-700);
}
[data-theme="dark"] body.dashboard-body #mp-confirm-mount .text-neutral-500 {
  color: var(--color-ink-500);
}
[data-theme="dark"] body.dashboard-body #mp-confirm-mount .text-neutral-700 {
  color: var(--color-ink-800);
}
[data-theme="dark"] body.dashboard-body #mp-confirm-mount .border-neutral-200 {
  border-color: var(--color-paper-line);
}
[data-theme="dark"] body.dashboard-body #mp-confirm-mount [data-mp-confirm-dismiss].bg-white:hover,
[data-theme="dark"] body.dashboard-body #mp-confirm-mount .hover\:bg-neutral-50:hover {
  background: var(--color-paper-200);
}

/* TOAST (#mp-toast) — generado inline con bg-neutral-900 text-white.
   En dark eso queda negro sobre fondo oscuro = invisible. Invertimos. */
[data-theme="dark"] #mp-toast {
  background: var(--color-paper-card) !important;
  color: var(--color-ink-900) !important;
  border: 1px solid var(--color-paper-line);
}

/* ============================================================
   /dashboard/profile/{id}/edit — editor de perfil .cw-edit-root
   ------------------------------------------------------------
   .cw-edit-root define su propio mini-sistema de variables CSS
   (--bg, --card, --border, --ink, --ink-2, --ink-muted, etc.)
   con valores claros oklch(). Las pisamos en dark para que todo
   el subtree del editor herede colores oscuros sin tocar cada
   regla individual.
   ============================================================ */
[data-theme="dark"] .cw-edit-root {
  --bg:            oklch(0.16 0.012 280);  /* fondo general */
  --card:          oklch(0.20 0.014 280);  /* cards / panels */
  --border:        oklch(0.30 0.012 280);
  --border-strong: oklch(0.40 0.014 280);
  --ink:           oklch(0.94 0.005 280);  /* texto principal */
  --ink-2:         oklch(0.78 0.008 280);  /* texto secundario */
  --ink-muted:     oklch(0.60 0.010 280);  /* texto muted */
  --accent-soft:   oklch(0.30 0.10 320);   /* fondo violeta soft */
}

/* NSFW theme en dark — gradientes radiales reducidos a tonos oscuros */
[data-theme="dark"] .cw-edit-root.nsfw {
  background:
    radial-gradient(1100px 600px at 12% -8%, oklch(0.22 0.10 24 / .55), transparent 60%),
    radial-gradient(900px 500px at 100% 0%, oklch(0.20 0.09 8 / .50), transparent 55%),
    radial-gradient(700px 700px at 50% 120%, oklch(0.22 0.08 30 / .45), transparent 60%),
    oklch(0.16 0.015 30);
}

/* ============================================================
   Overrides puntuales — clases con valores oklch() / bg-neutral-900
   hardcoded que NO heredan de las variables CSS del editor.
   Necesitan reglas explicitas en dark mode.
   ============================================================ */

/* Modal confirm: boton "Suspender" (suspend) usa bg-neutral-900 text-white.
   En dark eso queda negro sobre fondo casi negro = invisible. Invertimos. */
[data-theme="dark"] body.dashboard-body #mp-confirm-mount [data-mp-confirm-ok].bg-neutral-900 {
  background: var(--color-paper-200) !important;
  color: var(--color-ink-900) !important;
  border: 1px solid var(--color-paper-line);
}
[data-theme="dark"] body.dashboard-body #mp-confirm-mount [data-mp-confirm-ok].bg-neutral-900:hover {
  background: var(--color-paper-line) !important;
}

/* Editor: Danger zone usa fondo oklch(0.995 0.01 25) — rosa-blanco hardcoded */
[data-theme="dark"] .cw-edit-root .cwe-danger {
  background: oklch(0.20 0.06 25);     /* rojo muy oscuro tintado */
  border-color: oklch(0.45 0.18 25);   /* borde rojo medio */
}
[data-theme="dark"] .cw-edit-root .cwe-danger p {
  color: var(--ink-2);                 /* hereda nuestra var redefinida */
}

/* Editor: Footer sticky usa background: oklch(0.99 0.005 80 / .9) (casi blanco)
   Lo pisamos con paper-card del theme dark + alpha para mantener efecto blur. */
[data-theme="dark"] .cw-edit-root .cwe-footer {
  background: oklch(0.18 0.012 280 / .92);
  border-top-color: var(--border);
}

/* ============================================================
   Editor — Módulo Gallery (cwe-tile / cwe-icon-btn / cwe-tile-add)
   ------------------------------------------------------------
   Muchas reglas usan rgba(255,255,255,...) o oklch(0.97...)
   literal en vez de variables. Cubrimos cada caso explícito.
   ============================================================ */

/* Botones de acción sobre cada thumb (hover icons: delete, replace, etc) */
[data-theme="dark"] .cw-edit-root .cwe-icon-btn {
  background: rgba(20, 19, 30, 0.78);
  color: var(--ink);
}
[data-theme="dark"] .cw-edit-root .cwe-icon-btn:hover {
  background: rgba(40, 38, 56, 0.95);
}

/* Tile base (background del slot vacío mientras carga) */
[data-theme="dark"] .cw-edit-root .cwe-tile {
  background: oklch(0.22 0.012 280);
}

/* Botón "Añadir imagen" — fondo dashed con stripes */
[data-theme="dark"] .cw-edit-root .cwe-tile-add {
  background: repeating-linear-gradient(
    45deg,
    oklch(0.22 0.012 280),
    oklch(0.22 0.012 280) 10px,
    oklch(0.24 0.014 280) 10px,
    oklch(0.24 0.014 280) 20px
  );
}

/* Badge de costo dentro de tile-add (+5 tokens / Gratis) */
[data-theme="dark"] .cw-edit-root .cost-free {
  background: oklch(0.35 0.10 155);
  color: oklch(0.92 0.08 155);
}
[data-theme="dark"] .cw-edit-root .cost-paid {
  background: oklch(0.30 0.10 320);
  color: oklch(0.85 0.12 320);
}

/* Estado de cola (uploading / pending state visible) */
[data-theme="dark"] .cw-edit-root .cwe-tile .queue-state {
  background: oklch(0.22 0.012 280);
  color: var(--ink-muted);
}

/* Overlay de progreso (% sobre la imagen) */
[data-theme="dark"] .cw-edit-root .cwe-pct {
  background: rgba(20, 19, 30, 0.75);
  color: var(--ink);
}

/* Overlay de error en upload */
[data-theme="dark"] .cw-edit-root .cwe-tile .fail-overlay {
  background: oklch(0.25 0.10 22 / .92);
}
[data-theme="dark"] .cw-edit-root .cwe-tile .fail-overlay .msg {
  color: oklch(0.85 0.18 22);
}

/* Botones mini (remove dentro de tile) */
[data-theme="dark"] .cw-edit-root .cwe-mini-btn.remove {
  background: var(--card);
  color: var(--ink-2);
  border-color: var(--border);
}

/* Botón ghost hover (panel acciones) */
[data-theme="dark"] .cw-edit-root .cwe-btn-ghost:hover {
  background: var(--card);
}

/* Badges de clasificación (sfw / nsfw) — fondos muy claros */
[data-theme="dark"] .cw-edit-root .cwe-cls-badge.sfw {
  background: oklch(0.32 0.10 155);
  color: oklch(0.85 0.12 155);
}
[data-theme="dark"] .cw-edit-root .cwe-cls-badge.nsfw {
  background: oklch(0.32 0.10 22);
  color: oklch(0.85 0.15 22);
}

/* Toast cancel button (oklch claro hardcoded) */
[data-theme="dark"] .cw-edit-root .cwe-toast .t-btn.cancel {
  background: var(--card);
  color: var(--ink-2);
  border-color: var(--border);
}

/* Badge plataforma (link NSFW marker) */
[data-theme="dark"] .cw-edit-root .cwe-plat-badge {
  background: oklch(0.32 0.10 22);
  color: oklch(0.85 0.15 22);
}

/* ============================================================
   /dashboard/profile/create — wizard de creacion .cw-root
   ------------------------------------------------------------
   Mismo patron que el editor: el wizard define su propio sistema
   de variables CSS en input.css (.cw-root). Pisamos solo las
   variables en dark mode → toda la subarbol del wizard hereda
   colores oscuros sin tocar cada regla.
   Variables del wizard:
     --bg / --bg-soft / --bg-card → backgrounds
     --border / --border-strong   → bordes
     --ink / --ink-soft / --ink-muted → texto
     --accent / --accent-soft / --accent-ink / --accent-2 → acentos
     --ok / --warn / --err → estados (se mantienen, leen bien en dark)
   ============================================================ */
[data-theme="dark"] .cw-root {
  --bg:            oklch(0.16 0.012 280);
  --bg-soft:       oklch(0.19 0.013 280);
  --bg-card:       oklch(0.20 0.014 280);
  --border:        oklch(0.30 0.012 280);
  --border-strong: oklch(0.40 0.014 280);
  --ink:           oklch(0.94 0.005 280);
  --ink-soft:      oklch(0.78 0.008 280);
  --ink-muted:     oklch(0.60 0.010 280);
  /* accent-soft: usado en .cw-section-num como background del circulo numerado.
     En light era casi blanco-violeta, en dark sube a violeta medio para que
     el numero se distinga del fondo oscuro del card. */
  --accent-soft:   oklch(0.45 0.18 320);
  --accent-ink:    oklch(0.98 0.02 320);
}

/* NSFW theme en dark — el selector REAL es #cw-app[data-nsfw] + body.cw-nsfw-on
   (NO .cw-root.nsfw como tenia antes — bug que dejaba el NSFW dark sin pisar).
   Redefinimos las mismas vars que el theme NSFW light pero a tonos
   oscuros tintados de rojo/coral. */
[data-theme="dark"] #cw-app[data-nsfw] {
  --bg:            oklch(0.18 0.05 22);
  --bg-soft:       oklch(0.21 0.06 22);
  --bg-card:       oklch(0.22 0.05 22);
  --border:        oklch(0.32 0.06 22);
  --border-strong: oklch(0.42 0.08 22);
  --accent:        oklch(0.65 0.22 18);
  --accent-soft:   oklch(0.40 0.16 18);
  --accent-ink:    oklch(0.98 0.02 18);
}

/* body.cw-nsfw-on en dark — el wash de page (radial gradients) y el stepper.
   El light usa oklch claros + !important, asi que necesitamos pisar igual. */
[data-theme="dark"] body.cw-nsfw-on {
  background:
    radial-gradient(80vw 60vh at 80% -10%, oklch(0.25 0.12 22 / 0.55), transparent 60%),
    radial-gradient(70vw 50vh at -10% 110%, oklch(0.22 0.10 350 / 0.45), transparent 60%),
    oklch(0.16 0.04 22) !important;
}
[data-theme="dark"] body.cw-nsfw-on .cw-stepper {
  background: oklch(0.20 0.05 22 / 0.85);
  border-bottom-color: oklch(0.30 0.06 22);
}
[data-theme="dark"] body.cw-nsfw-on #cw-app .cw-card {
  background: oklch(0.22 0.04 22);
  border-color: oklch(0.32 0.06 22);
}

/* Step 2 — shimmer (gradiente animado en los slots de upload).
   En light usa blanco puro oklch(1 0 0) y casi-blanco en bordes.
   Sobre fondo dark eso quema la vista. Lo bajamos a fucsia muy
   oscuro semi-transparente: apenas perceptible pero con tinte de
   marca (accent violeta del wizard). */
[data-theme="dark"] .cw-skel::before {
  background: linear-gradient(
    110deg,
    transparent 30%,
    oklch(0.28 0.10 320 / 0.35) 45%,
    oklch(0.34 0.14 320 / 0.55) 50%,
    oklch(0.28 0.10 320 / 0.35) 55%,
    transparent 70%
  );
}

/* Step 2 — hover/dragover de los slots avatar/banner/featured.
   En light el hover pinta el slot en rosa palido oklch(0.97 0.02 320)
   y dragover en oklch(0.96 0.05 320). Sobre dark eso es un flash
   blanco/lavanda quemado. Sustituimos por fucsia oscuro muy sutil
   que mantiene el feedback de hover sin agredir la vista. */
[data-theme="dark"] .cw-slot:hover {
  background: oklch(0.25 0.06 320);
}
[data-theme="dark"] .cw-slot[data-dragover] {
  background: oklch(0.30 0.10 320);
}
[data-theme="dark"] .cw-slot[data-error] {
  background: oklch(0.25 0.08 25);   /* mismo trick para estado error */
}

/* Step 2 — botones de accion sobre cada thumb (replace / remove).
   En light: background blanco casi opaco oklch(1 0 0 / 0.95) + color var(--ink) (oscuro)
   En dark: blanco sobre blanco invisible. Mismo trick que .cwe-icon-btn del editor:
   fondo oscuro semi-transparente + icono claro. Hover sube opacidad. */
[data-theme="dark"] .cw-slot-actions button {
  background: rgba(20, 19, 30, 0.78);
  border-color: rgba(255, 255, 255, 0.08);
  color: oklch(0.94 0.005 280);
}
[data-theme="dark"] .cw-slot-actions button:hover {
  background: rgba(40, 38, 56, 0.95);
}
[data-theme="dark"] .cw-slot-actions button[data-remove]:hover {
  color: oklch(0.72 0.20 25);          /* rojo accesible sobre dark */
}

/* Overrides puntuales — clases del wizard FUERA del scope .cw-root.
   No heredan las variables redefinidas arriba. Las pisamos directo.
   ---
   .cw-page-bg = wrapper outermost (envuelve back-link + cw-root)
   .cw-back-link = link "← Volver a mis perfiles" fuera de la card */
[data-theme="dark"] .cw-page-bg {
  background: oklch(0.14 0.012 280);
}
[data-theme="dark"] body.cw-nsfw-on .cw-page-bg {
  background:
    radial-gradient(80vw 60vh at 80% -10%, oklch(0.25 0.10 22 / 0.45), transparent 60%),
    radial-gradient(70vw 50vh at -10% 110%, oklch(0.22 0.10 350 / 0.40), transparent 60%),
    oklch(0.16 0.04 22);
}
[data-theme="dark"] .cw-back-link {
  color: oklch(0.78 0.008 280);
}
[data-theme="dark"] .cw-back-link:hover {
  background: oklch(0.22 0.012 280);
  color: oklch(0.94 0.005 280);
}

/* Stepper — pills inactivos casi invisibles en dark porque --bg-soft
   queda demasiado cerca de --bg. Subimos contraste con bg explicito
   + border visible. Active/done ya funcionan bien con las vars. */
[data-theme="dark"] .cw-root .cw-step-pill {
  background: oklch(0.22 0.014 280);          /* mas claro que --bg */
  border-color: oklch(0.28 0.012 280);
}
[data-theme="dark"] .cw-root .cw-step-pill[data-active] {
  background: oklch(0.26 0.020 280);          /* destaca activo */
  border-color: var(--accent);
}

/* Boton Continue (cw-btn-primary) — bug clasico: background: var(--ink)
   color: white. En dark --ink es casi blanco → blanco sobre blanco.
   Invertimos: usar accent como fondo para que destaque siempre. */
[data-theme="dark"] .cw-root .cw-btn-primary {
  background: var(--accent);
  color: oklch(0.98 0 0);
}
[data-theme="dark"] .cw-root .cw-btn-primary:hover {
  background: oklch(0.68 0.22 320);            /* accent un poco mas claro */
  color: oklch(0.98 0 0);
}
[data-theme="dark"] .cw-root .cw-btn-primary:disabled,
[data-theme="dark"] .cw-root .cw-btn-primary[disabled] {
  background: oklch(0.30 0.014 280);
  color: oklch(0.55 0.010 280);
  cursor: not-allowed;
}
/* ============================================================
   ADS in-feed — dark mode overrides
   ----------------------------------------------------------------
   El card de anuncio en /explore (_ad_card_infeed.php) y el badge
   "Anuncio" en /random (_random_ad_card.php) estaban hardcoded a
   blanco/cream. En modo claro queda bien, pero en dark hace pop
   discordante contra las cards oscuras del grid.

   /explore: ajustamos fondo del card, ad-veil, ad-label, badge
             "Sponsored" (bg-white/85) y el footer "Patrocinado".
   /random : solo el badge "Anuncio" porque el thumb no lleva
             más UI propia.
   ============================================================ */
[data-theme="dark"] .ad-card {
  background: linear-gradient(180deg, oklch(0.20 0.012 280), oklch(0.16 0.010 280) 70%);
  border-color: oklch(0.32 0.014 280);
}
[data-theme="dark"] .ad-card .ad-label {
  background: oklch(0.24 0.014 280 / .92);
  color: oklch(0.94 0.005 280);
  border-color: oklch(0.32 0.014 280);
}
/* Badge "Sponsored" (Tailwind bg-white/85 text-ink-2 hardcoded en el template) */
[data-theme="dark"] .ad-card .bg-white\/85 {
  background-color: oklch(0.24 0.014 280 / .92) !important;
  color: oklch(0.85 0.005 280) !important;
}
/* Footer "Patrocinado": text-ink-3 y border-line en el contenedor */
[data-theme="dark"] .ad-card .border-line {
  border-color: oklch(0.30 0.014 280);
}

/* ===== /random ad badge ===== */
/* Único elemento con UI propia en _random_ad_card.php */
[data-theme="dark"] li[data-ad-id] .bg-white\/85 {
  background-color: oklch(0.24 0.014 280 / .92) !important;
  color: oklch(0.94 0.005 280) !important;
}

/* Boton "Ver mas" del card de anuncio. var(--color-ink) en dark se invierte
   a casi blanco -> default queda blanco sobre blanco. Forzamos contraste. */
[data-theme="dark"] .ad-card .ad-cta {
  background: oklch(0.30 0.014 280);
  color: oklch(0.96 0.005 280);
}
[data-theme="dark"] .ad-card .ad-cta:hover {
  background: var(--accent);
  color: oklch(0.98 0 0);
}

/* Boost bar (.xp-track) en explore-card. En modo claro el track #efece4
   funciona; en dark se vuelve un bloque blanco molesto. Estrategia:
   - Con boost > 0% -> track oscuro distinguible del fill (que conserva
     su gradient accent).
   - Sin boost (width:0%) -> track transparente para que no contamine.
   :has() detecta el ancho inline rendered en el .xp-fill. */
[data-theme="dark"] .xp-track {
  background: oklch(0.26 0.014 280);
}
[data-theme="dark"] .xp-track:has(.xp-fill[style*="width:0%"]) {
  background: transparent;
}

/* Comentarios (show.php _comments.php) — wrapper del textarea aplica
   Tailwind focus-within:bg-white. En dark el blanco al focus es un
   bloque chocante. Forzamos un tono dark + border accent al enfocar.
   Selector :has() targetea solo el wrapper que contiene #commentBox. */
[data-theme="dark"] .card-show :has(> #commentBox):focus-within {
  background-color: oklch(0.22 0.014 280) !important;
  border-color: oklch(0.55 0.20 320) !important;
}
[data-theme="dark"] #commentBox {
  color: oklch(0.94 0.005 280);
}
