/* ════════════════════════════════════════════════════════════════════
 * KYVEN v2.1 GENEVA CREAM · GC-3.1 Text Inversion + Specificity Boost
 *
 * Reglas con scope html[data-geneva-mode="on"] + :is() boost:
 * - Flag OFF: atributo no existe → ZERO match → cero cambio
 * - Flag ON: aplica color · specificity boost garantiza cascade win
 *
 * Specificity técnica:
 * - Outer html[data-geneva-mode="on"] = (0,0,1,1) = 11
 * - Inner :is(REAL_SELECTORS, #_kvn-b1_#_kvn-b2_#_kvn-b3_) = (0,3,0,0) = 300
 * - Total = (0,3,1,1) = 311
 * - Supera overrides con specificity hasta (0,3,X,X) = 3XX
 *
 * Fase: Camino B Semana 4 · GC-3.1
 * Patch: 2026-06-XX
 * ════════════════════════════════════════════════════════════════════ */

/* ═══════════ PATRÓN 1 · cream translúcido rgba(230,226,218,0.92) ═══════════ */
html[data-geneva-mode="on"] :is(
  .brief-greet-sub,
  .brief-sec-title,
  .brief-sec-meta,
  .section-label,
  .section-meta,
  .ins-v5-hero-day-eb,
  .ins-v5-ai-sh-meta,
  .ins-v5-sh-meta,
  .gpmi-badge-name,
  .gpmi-badge-sub,
  .drk-fullscreen-subtitle,
  .msg-time,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, rgba(230,226,218,0.92)) !important;
  -webkit-text-fill-color: var(--kvn-text-body, rgba(230,226,218,0.92)) !important;
  background-image: none !important;
  -webkit-background-clip: border-box !important;
  background-clip: border-box !important;
}

/* ═══════════ PATRÓN 2 · gold mate sutil rgb(168,136,87) ═══════════ */
html[data-geneva-mode="on"] :is(
  #brief-streak-num-int,
  .add-btn-plus,
  .drk-back-btn,
  .drk-fullscreen-title,
  .ins-v5-ai-card-label,
  .brief-dz-label,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-gold-mate-dim, #8A6E45) !important;
  -webkit-text-fill-color: var(--kvn-gold-mate-dim, #8A6E45) !important;
}

/* ═══════════ PATRÓN 3 · cream-strong translúcido rgba(245,241,232,0.72) ═══════════ */
html[data-geneva-mode="on"] :is(
  .mgr-context-meta,
  .mgr-context-sublabel,
  .ins-v5-obj-blk-lbl,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-muted, rgba(245,241,232,0.72)) !important;
  -webkit-text-fill-color: var(--kvn-text-muted, rgba(245,241,232,0.72)) !important;
}

/* ═══════════ PATRÓN 4 · cream puro rgb(235,231,221) contrast 1.00 ═══════════ */
/* CRÍTICO · chat messages cream sobre cream bg */
html[data-geneva-mode="on"] :is(
  .chat-msg-user,
  .chat-msg-user p,
  .ins-v5-weekly-btn,
  .ins-v5-weekly-btn span,
  .ins-v5-hero-num,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}

/* ═══════════ PATRÓN 5 · sage pastel rgb(168,201,182) pillar names ═══════════ */
html[data-geneva-mode="on"] :is(
  .ins-v5-pillar-name,
  .ins-v5-pillar-title,
  .ins-v5-obj-tag.covered,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-sage-on-cream, #5E8472) !important;
  -webkit-text-fill-color: var(--kvn-sage-on-cream, #5E8472) !important;
}

/* ═══════════ PATRÓN 6 · gold light rgb(224,195,120) menu options ═══════════ */
html[data-geneva-mode="on"] :is(
  .mgr-context-label,
  .ins-saturated-badge,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, rgb(224,195,120)) !important;
  -webkit-text-fill-color: var(--kvn-text-body, rgb(224,195,120)) !important;
}

/* ═══════════ PATRÓN 7 · cream translúcido rgba(230,226,218,0.74) ═══════════ */
html[data-geneva-mode="on"] :is(
  .time-hour,
  button.sugg,
  .sugg,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-muted, rgba(230,226,218,0.74)) !important;
  -webkit-text-fill-color: var(--kvn-text-muted, rgba(230,226,218,0.74)) !important;
}

/* ═══════════ PATRÓN 8 · clay alert rgba(216,119,90,0.92) ═══════════ */
html[data-geneva-mode="on"] :is(
  .ins-v5-ai-card-tag.alerta,
  .ins-v5-obj-tag.missing,
  .ins-v5-pillar-alert,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-metric-alert, rgba(216,119,90,0.92)) !important;
  -webkit-text-fill-color: var(--kvn-metric-alert, rgba(216,119,90,0.92)) !important;
}

/* ═══════════ PATRÓN 9 · sage muy claro rgb(195,222,201) ═══════════ */
/* FASE 1 (7 jun): el nombre del greeting (.brief-greet em / .brief-greeting-block em)
   se EXTRAE de aquí a PATRÓN 9b (gold-mate). bioage-num y obj-state.prog siguen sage. */
html[data-geneva-mode="on"] :is(
  .ins-v5-bioage-num,
  .ins-v5-obj-state.prog,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-sage-on-cream, #5E8472) !important;
  -webkit-text-fill-color: var(--kvn-sage-on-cream, #5E8472) !important;
}

/* ═══════════ PATRÓN 9b · FASE 1 · nombre greeting → gold-mate ═══════════
   sage forest-spa → gold-mate #C8A45A · aprobado visualmente por Carlos.
   Mantiene el truco de IDs fantasma (3,1,1) para ganar la cascada.
   Separado de PATRÓN 9 para NO afectar bioage-num / obj-state.prog. */
html[data-geneva-mode="on"] :is(
  .brief-greet em,
  .brief-greeting-block em,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: #C8A45A !important;
  -webkit-text-fill-color: #C8A45A !important;
}

/* ═══════════ PATRÓN 10 · gold cream rgba(200,164,90,0.85) ═══════════ */
html[data-geneva-mode="on"] :is(
  .msg-close-night,
  .ins-v5-obj-state.dev,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-gold-mate, rgba(200,164,90,0.85)) !important;
  -webkit-text-fill-color: var(--kvn-gold-mate, rgba(200,164,90,0.85)) !important;
}

/* ═══════════ PATRÓN 11 · ELEMENTOS ESPECÍFICOS POR ID/SELECTOR ═══════════ */

/* "AHORA · XX:XX" marker · gold dim */
html[data-geneva-mode="on"] :is(
  .now-marker-time,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-gold-mate-dim, rgb(138,110,69)) !important;
}

/* Strong cream sobre cream · bioage numbers, "37.0", "38" */
html[data-geneva-mode="on"] :is(
  #brief-pgr-done,
  .ins-v5-hero-bioage strong,
  .ins-v5-bioage-row strong,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}

/* "Añadir al protocolo" CTA + Compound name input */
html[data-geneva-mode="on"] :is(
  .add-btn span,
  #mgr-ctx-name,
  .mgr-context-name,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}

/* ═══════════ SAFETY · pseudo-elements ::before de eyebrows ═══════════ */
html[data-geneva-mode="on"] :is(
  .brief-sec-title,
  .section-label,
  .ins-v5-hero-day-eb,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
)::before {
  background-color: var(--kvn-text-body, currentColor) !important;
}

/* ═══════════ PATRÓN 12 · CIERRE FINAL · UNICORNIO 100% ═══════════ */
/* GC-3.2 patch · 8 elementos restantes identificados por auditoría runtime cross-tab */
/* Mismo approach :is() boost specificity garantiza cascade win */

/* 12a · Header h1 "Buenos días, Carlos" PROTOCOLO + container greeting */
/* IMPORTANTE: usa #brief-greet (ID específico) para NO afectar .id-name (PERFIL hero) */
html[data-geneva-mode="on"] :is(
  #brief-greet,
  .brief-greeting-block,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
  background-image: none !important;
  -webkit-background-clip: border-box !important;
  background-clip: border-box !important;
}

/* 12b · Schedule progress counters (time-count + brief-pgr-total) */
html[data-geneva-mode="on"] :is(
  .time-count,
  #brief-pgr-total,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, rgba(230,226,218,0.92)) !important;
  -webkit-text-fill-color: var(--kvn-text-body, rgba(230,226,218,0.92)) !important;
}

/* 12c · Chat bubble Dr.K texto cuerpo · cobertura amplia */
/* CRÍTICO: solo elementos chat que tengan color cream computado sobre cream bg */
/* Si el bubble Dr.K tiene bg verde Patek, el cream interior debe preservarse */
/* Esta regla aplica color dark SOLO si no hay otro override · pero el boost specificity garantiza ganar */
html[data-geneva-mode="on"] :is(
  .chat-msg-ai,
  .chat-msg-ai p,
  .chat-bubble-ai,
  .chat-bubble-ai p,
  .chat-bubble-text,
  .chat-bubble-text p,
  .chat-msg-drk,
  .chat-msg-drk p,
  .drk-msg,
  .drk-msg p,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}

/* 12d · DÍAS ACTIVOS streak sub-label */
html[data-geneva-mode="on"] :is(
  .brief-streak-sub,
  .brief-streak-label,
  [class*="streak-sub"],
  [class*="streak-label"],
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, rgba(230,226,218,0.92)) !important;
  -webkit-text-fill-color: var(--kvn-text-body, rgba(230,226,218,0.92)) !important;
}

/* 12e · "Añadir al protocolo" CTA span */
html[data-geneva-mode="on"] :is(
  .add-btn,
  .add-btn span,
  .add-btn-label,
  [class*="add-btn"] span:not(.add-btn-plus),
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}

/* 12f · Drk pulse notification overlay (Nueva recomendación) */
/* IMPORTANTE: solo cuando overlay está visible · si oculto/hide no afecta */
/* El pulse-card tiene bg verde Patek (#475C53) interno donde cream es correcto */
/* PERO los textos del pulse-overlay que están fuera de la card-bg necesitan dark */
html[data-geneva-mode="on"] :is(
  .drk-pulse-name,
  .drk-pulse-header,
  .drk-pulse-meta,
  .drk-pulse-meta-bottom,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, rgba(230,226,218,0.92)) !important;
  -webkit-text-fill-color: var(--kvn-text-body, rgba(230,226,218,0.92)) !important;
}

/* 12g · SAFETY · cualquier h1/h2/h3 hero-title SOLO en PROTOCOLO scope */
/* No usar selector global .kv-hero-title porque afecta PERFIL hero (sobre card verde) */
/* En su lugar específico al tab-protocol */
html[data-geneva-mode="on"] #tab-protocol :is(
  .kv-hero-title:not(.id-name),
  h1.brief-greet,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}

/* FIN PATRÓN 12 · GC-3.2 cierre unicornio 100% */

/* ═══════════ PATRÓN 13 · GC-3.3 cierre críticos + pulse fix ═══════════ */

/* 13a · DRK PULSE FIX (edge case latente) */
/* Estos elementos están DENTRO de .drk-pulse-card con bg verde Patek */
/* Sobreescriben el patrón 12f que los pintó dark · vuelven a cream sobre verde */
html[data-geneva-mode="on"] :is(
  .drk-pulse-card .drk-pulse-name,
  .drk-pulse-card .drk-pulse-header,
  .drk-pulse-card .drk-pulse-meta,
  .drk-pulse-card .drk-pulse-meta-bottom,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-cream-on-card, rgba(245,241,232,1)) !important;
  -webkit-text-fill-color: var(--kvn-cream-on-card, rgba(245,241,232,1)) !important;
}

/* 13b · "DÍAS ACTIVOS" sub-label streak counter (PROTOCOLO) */
/* Selector amplio porque el span no tiene clase específica */
/* Atacamos por contexto: span dentro de .brief-streak-blk */
html[data-geneva-mode="on"] :is(
  .brief-streak-blk span:not([class*="num"]):not(strong):not(em),
  [class*="streak"] span:not([class*="num"]):not(strong):not(em),
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, rgba(230,226,218,0.92)) !important;
  -webkit-text-fill-color: var(--kvn-text-body, rgba(230,226,218,0.92)) !important;
}

/* 13c · "Añadir al protocolo" CTA span + variantes (cobertura amplia) */
/* GC-3.2 ya cubrió .add-btn span pero no captó algunos casos · refuerzo */
html[data-geneva-mode="on"] :is(
  button.add-btn span,
  button[id*="add"] span,
  .add-btn > span:not(.add-btn-plus):not([class*="icon"]),
  [class*="add-btn"] > span:not(.add-btn-plus):not([class*="icon"]),
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}

/* 13d · Footer "NOTA · GPMI" PROTOCOLO + body text (low contrast 1.60) */
/* El gold mate sobre cream es Patek subtle PERO el body text necesita más contraste */
html[data-geneva-mode="on"] :is(
  .alert-n5-label-text,
  .alert-n5 strong,
  .alert-n5 p,
  .alert-n5 div:not([class*="label"]):not([class*="bg"]),
  [class*="alert-n5"]:not([class*="card"]) strong,
  [class*="alert-n5"]:not([class*="card"]) p,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, rgb(168,136,87)) !important;
  -webkit-text-fill-color: var(--kvn-text-body, rgb(168,136,87)) !important;
}

/* Eyebrow "● NOTA · GPMI" mantener gold mate más dim para legibilidad */
html[data-geneva-mode="on"] :is(
  .alert-n5-label-text::first-letter,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-gold-mate-dim, #8A6E45) !important;
}

/* FIN PATRÓN 13 · GC-3.3 cierre críticos */

/* ═══════════ PATRÓN 14 · GC-3.3.1 micro-patch cierre final ═══════════ */

/* 14a · "Añadir al protocolo" CTA · solo #save-cpd-btn (bg gold) */
/* (era button.btn-p amplio · alcanzaba #ob-save-btn de login bg forest = texto invisible) */
html[data-geneva-mode="on"] :is(
  button#save-cpd-btn,
  button#save-cpd-btn span,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}

/* 14a-2 · login btn bg forest · texto cream legible (defensiva contra cualquier
   pattern futuro que vuelva a forzar dark sobre .btn-p amplio). */
html[data-geneva-mode="on"] :is(
  button#ob-save-btn,
  button#ob-save-btn span,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-cream-on-card, #EBE7DD) !important;
  -webkit-text-fill-color: var(--kvn-cream-on-card, #EBE7DD) !important;
}

/* 14b · ::first-letter de "● NOTA · GPMI" eyebrow · fix sintaxis CSS */
/* GC-3.3 patrón 13d último sub-bloque era no-op por ::first-letter en :is() */
/* Sacar pseudo-element fuera de :is() para que aplique */
html[data-geneva-mode="on"] .alert-n5-label-text::first-letter {
  color: var(--kvn-gold-mate-dim, #8A6E45) !important;
}

/* FIN PATRÓN 14 · GC-3.3.1 cierre quirúrgico */

/* ═══════════ PATRÓN 15 · GC-3.4 cierre bugs medios pre-Elite ═══════════ */
/* Selectores verificados runtime contra DOM real */
/* Tokens verificados existentes en sistema Geneva */

/* 15a · INSIGHTS WEEKLY eyebrows críticas N5 (verificado · existe 2x) */
/* Gold-mate (1.60) → text-body (2.82) para mejor jerarquía informacional */
html[data-geneva-mode="on"] :is(
  .ins-v5-note-eb,
  [class*="ins-v5"][class*="note-eb"],
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, #404D45) !important;
  -webkit-text-fill-color: var(--kvn-text-body, #404D45) !important;
}

/* 15b · DR.K suggs SIN .priority Y SIN .sugg-action · bg verde Patek = cream */
/* CRÍTICO: excluir .sugg-action porque .sugg.sugg-action.primary tiene bg gold sólido */
/* (forzar cream sobre gold = invisible · regresión peor que el bug original) */
html[data-geneva-mode="on"] :is(
  .sugg:not(.priority):not(.sugg-action),
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-cream-on-card, rgb(235,231,221)) !important;
  -webkit-text-fill-color: var(--kvn-cream-on-card, rgb(235,231,221)) !important;
}

/* 15c · BIO Kyven Band pill gold · selector REAL verificado DOM */
/* DOM real: <div class="wearable-pill gold">2027 · COMING SOON</div> en .wearable-card.kyven */
/* (5 selectores spec original eran fantasma · no matcheaban nada) */
html[data-geneva-mode="on"] :is(
  .wearable-card.kyven .wearable-pill.gold,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-cream-on-card, rgba(245,241,232,0.92)) !important;
  -webkit-text-fill-color: var(--kvn-cream-on-card, rgba(245,241,232,0.92)) !important;
}

/* FIN PATRÓN 15 · GC-3.4 cierre bugs medios */

/* ═══════════ PATRÓN 16 · GC-3.7 · AUDITORÍA RUNTIME WCAG EXHAUSTIVA ═══════════
 * Selectores VERIFICADOS contra DOM real (auditor de contraste headless por pantalla).
 * Cubre texto cream/paper INVISIBLE (contraste 1.0-1.5) que la allowlist GC-3.1→3.4
 * no capturaba: FICHA CLÍNICA · PERFIL/AJUSTES notificaciones · BIO Dr.K · banner email.
 * NO incluye botones .active/.on (fondo sage/dark · texto claro ya correcto = falso positivo). */

/* 16a · FICHA CLÍNICA · header del compuesto (título INVISIBLE contraste 1.0) + secciones */
html[data-geneva-mode="on"] :is(
  #detail-name, .fd-name,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}
html[data-geneva-mode="on"] :is(
  #detail-sub, .fd-sub, .fd-sec-meta,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, #404D45) !important;
  -webkit-text-fill-color: var(--kvn-text-body, #404D45) !important;
}
/* eyebrows gold de la ficha (PÉPTIDOS · 01 · MECANISMO) → gold mate dim legible */
html[data-geneva-mode="on"] :is(
  #detail-category, .fd-cat, .fd-sec-lbl,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-gold-mate-dim, #8A6E45) !important;
  -webkit-text-fill-color: var(--kvn-gold-mate-dim, #8A6E45) !important;
  opacity: 1 !important;
}

/* 16b · PERFIL · AJUSTES · sección notificaciones (.b4-notif-*) + banners (INVISIBLE 1.0-1.1) */
html[data-geneva-mode="on"] :is(
  .b4-notif-title, .b4-notif-type-name, .kv-set-banner-name, .b4-notif-btn,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}
html[data-geneva-mode="on"] :is(
  .b4-notif-body, .b4-notif-type-time, .kv-set-banner-desc, .kyven-descriptor,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, #404D45) !important;
  -webkit-text-fill-color: var(--kvn-text-body, #404D45) !important;
}
/* "MODO KYVEN · DND" sage line + eyebrows gold de ajustes/guía */
html[data-geneva-mode="on"] :is(
  .b4-honest-line,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-sage-on-cream, #5E8472) !important;
  -webkit-text-fill-color: var(--kvn-sage-on-cream, #5E8472) !important;
}
html[data-geneva-mode="on"] :is(
  .guide-block-title, .psec-lbl,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-gold-mate-dim, #8A6E45) !important;
  -webkit-text-fill-color: var(--kvn-gold-mate-dim, #8A6E45) !important;
}

/* 16c · BIO · Dr.K interpretación (#brief-dz-text INVISIBLE 1.09) + brief eyebrow nocturno */
html[data-geneva-mode="on"] :is(
  #brief-dz-text, .brief-dz-text,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, #404D45) !important;
  -webkit-text-fill-color: var(--kvn-text-body, #404D45) !important;
}
html[data-geneva-mode="on"] :is(
  #brief-eyebrow, .brief-eyebrow,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}
/* NOTA: .wearable-name/.wearable-sub NO se invierten · se usan en cards de marca con
 * fondo oscuro (WHOOP) donde el texto claro es correcto · invertir = dark-sobre-dark. */

/* 16d · BANNER "confirma tu email" · en geneva el fondo es cream (mi fix GC-3.7) → texto dark
 * (en dark theme NO aplica · banner oscuro + texto claro sigue correcto) */
html[data-geneva-mode="on"] :is(
  #ecb-text,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, #404D45) !important;
  -webkit-text-fill-color: var(--kvn-text-body, #404D45) !important;
}

/* FIN PATRÓN 16 · GC-3.7 auditoría WCAG exhaustiva */

/* ═══════════ PATRÓN 17 · GC-3.7b · INSIGHTS · texto INVISIBLE sobre cream ═══════════
 * Auditado headless stubbeando el render del radar (que cuelga · #ins-radar-canvas RAF).
 * Card-headers/hero de insights con color cream/paper sobre fondo cream (contraste 1.0-1.05).
 * SOLO elementos sobre CREAM · los eyebrows sobre card Patek green (.ins-v5-empty-eb ·
 * "CALIBRANDO"/"TENDENCIA DE LA SEMANA") NO se tocan aquí (necesitan brillo, no dark · pendiente). */
html[data-geneva-mode="on"] :is(
  .ins-v5-ai-sh-title, .ins-v5-ai-sh-title span, .ins-v5-ai-sh-title strong,
  .ins-v5-sh-title, .ins-v5-sh-title strong,
  .ins-v5-hero-day-quote, .ins-v5-hero-day-quote strong,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}
html[data-geneva-mode="on"] :is(
  .ins-v5-hero-day-sig,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-muted, #6B7A72) !important;
  -webkit-text-fill-color: var(--kvn-text-muted, #6B7A72) !important;
}

/* FIN PATRÓN 17 · GC-3.7b insights cream */

/* ═══════════ PATRÓN 18 · GC-3.7c · INSIGHTS · eyebrows sobre CARD VERDE Patek ═══════════
 * Bloques empty-state (.ins-v5-empty) tienen fondo verde Patek (#3F5249 · medido runtime).
 * El eyebrow gold (● CALIBRANDO · TU EXPEDIENTE VIVO) queda en contraste 3.54 → "muy sutil".
 * Aquí NO se invierte a dark (sería peor sobre verde) · se SUBE el brillo del gold + cream el body. */
html[data-geneva-mode="on"] :is(
  .ins-v5-empty-eb,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: #E0C378 !important;            /* gold más brillante · legible sobre verde Patek */
  -webkit-text-fill-color: #E0C378 !important;
  opacity: 1 !important;
}
html[data-geneva-mode="on"] :is(
  .ins-v5-empty .ins-v5-empty-tit,
  .ins-v5-empty-tit,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-cream-on-card, rgb(235,231,221)) !important;
  -webkit-text-fill-color: var(--kvn-cream-on-card, rgb(235,231,221)) !important;
}

/* FIN PATRÓN 18 · GC-3.7c insights card verde */

/* PATRÓN 19 (header glass) REVERTIDO a petición de Carlos · header limpio de antes.
 * theme-color #3F5249 (setChrome geneva-aware en JS) se mantiene salvo indicación. */

/* ═══════════ PATRÓN 20 · GC-3.7e · CONSTANCIA 30 DÍAS · barras invisibles ═══════════
 * .grid-30 .gd.empty usa rgba(230,226,218,0.06) = 6% sobre cream = INVISIBLE.
 * Subir a dark-olive 20% para que las 30 barras se vean. (.gd.low ya es gold visible.) */
:root[data-geneva-mode="on"] .grid-30 .gd.empty,
:root[data-geneva-mode="on"] .gd.empty {
  background: rgba(42, 59, 51, 0.60) !important;   /* GC-3.7h · medido: 0.45 daba cr 2.33 · 0.60 → cr ~3.2 sobre cream */
  opacity: 1 !important;                            /* el .gd.empty base tiene opacity:0.5 que componía y bajaba el contraste real */
}

/* FIN PATRÓN 20 · GC-3.7e constancia */

/* ═══════════ PATRÓN 21 · GC-3.7f · PROTOCOLO · CATEGORÍAS · cards/nombres invisibles ═══════════
 * Las cards .cmp tienen bg casi transparente (rgba(255,255,255,0.035)) sobre cream → invisibles,
 * y .cmp-name (nombre del compuesto) es cream sobre cream = contraste 1.0. Auditado runtime. */
/* SCOPE a .cmp (cards categorías/manage · fondo transparente sobre cream) · NO a
 * .compound-card .cmp-name de HOY (cards verde Patek · texto claro correcto). */
:root[data-geneva-mode="on"] :is(
  .cmp .cmp-name,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}
:root[data-geneva-mode="on"] :is(
  .cmp .cmp-dose,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, #404D45) !important;
  -webkit-text-fill-color: var(--kvn-text-body, #404D45) !important;
}
:root[data-geneva-mode="on"] :is(
  .cat-name, .cmp .cmp-tag,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-gold-mate-dim, #8A6E45) !important;
  -webkit-text-fill-color: var(--kvn-gold-mate-dim, #8A6E45) !important;
  opacity: 1 !important;
}
/* definición de las cards .cmp (eran invisibles sobre cream) · sutil tinte Patek + borde */
:root[data-geneva-mode="on"] .cmp {
  background: rgba(63, 82, 73, 0.05) !important;
  border: 0.5px solid rgba(42, 59, 51, 0.14) !important;
}

/* FIN PATRÓN 21 · GC-3.7f categorías */

/* ═══════════ PATRÓN 22 · GC-3.7g · BARRIDO FINAL · invisibles restantes ═══════════
 * Auditados por barrido WCAG headless en todas las subvistas (sprint final).
 * BIO REGISTRAR/ANALÍTICAS títulos · form-sub · empty states · leyenda SEMANA. */
/* BIO · títulos de vista (.bio-form-title span = cream 1.0 · "Registrar métricas"/"Analíticas") · em accent se mantiene gold */
:root[data-geneva-mode="on"] :is(
  .bio-form-title, .bio-form-title span,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}
/* subtítulos de formulario (.form-sub) + empty states (texto · NO los modificadores de icono/pilar) */
:root[data-geneva-mode="on"] :is(
  .form-sub,
  .empty:not(.ins-pillar-icon):not(.ins-pillar-fill):not(.ins-pillar-score),
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, #404D45) !important;
  -webkit-text-fill-color: var(--kvn-text-body, #404D45) !important;
}
/* PROTOCOLO SEMANA · leyenda de frecuencia (color inline var(--paper-mute) en el contenedor
 * sobre cream · "Diario/Entreno/Semanal/No toca") · !important vence al inline */
:root[data-geneva-mode="on"] .week-grid-wrap > div:not(.week-grid-inner),
:root[data-geneva-mode="on"] .week-grid-wrap > div:not(.week-grid-inner) span:not([style*="background"]) {
  color: var(--kvn-text-body, #404D45) !important;
  -webkit-text-fill-color: var(--kvn-text-body, #404D45) !important;
}

/* FIN PATRÓN 22 · GC-3.7g barrido final */

/* ═══════════ PATRÓN 23 · GC-3.7h · BUG4 wearable cards + BUG5 chat empty state ═══════════ */
/* BUG4 · cards wearable disponibles (.wearable-card base usa var(--forest)=cream en geneva ·
 * texto claro invisible). Darles fondo Patek green como Kyven Band → texto claro legible. */
:root[data-geneva-mode="on"] .wearable-card:not(.kyven) {
  background: #3F5249 !important;
  border-color: rgba(201, 169, 97, 0.28) !important;
}
/* BUG5 · DR.K chat empty state · greeting/wordmark/tagline/stats cream sobre cream = invisible */
:root[data-geneva-mode="on"] :is(
  #tab-chat .drk-empty-greeting, #tab-chat .drk-empty-wordmark, #tab-chat .drk-empty-meta,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}
:root[data-geneva-mode="on"] :is(
  #tab-chat .drk-empty-tagline, #tab-chat .drk-empty-prompt, #tab-chat .drk-empty-chip.primary,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, #404D45) !important;
  -webkit-text-fill-color: var(--kvn-text-body, #404D45) !important;
}
/* FIX CHAT · chip.secondary EXCLUIDO de la regla oscura de arriba: su fondo es verde
   oscuro (rgb(63,82,73)) · texto oscuro = invisible. Va con texto cream (regla al final). */

/* FIN PATRÓN 23 · GC-3.7h wearable + chat empty */

/* ═══════════ PATRÓN 24 · GC-3.8 · ONBOARDING VIEJO (#onboard-modal) en GENEVA ═══════════
 * El onboarding legacy (al que llega "Ya tienes cuenta · Inicia sesión" vía goToLogin · paso 9)
 * NO estaba adaptado a Geneva → texto cream/paper sobre cream = INVISIBLE (login inusable).
 * Scopeado a #onboard-modal · solo geneva · no toca V2, app, ni dark. NO toca inputs ni .btn-p
 * (tienen su propio fondo · el botón gris es el estado disabled normal). */
:root[data-geneva-mode="on"] #onboard-modal :is(
  .modal-title, .modal-title em, .anchor-title, .anchor-title em,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-dark, #2A3B33) !important;
  -webkit-text-fill-color: var(--kvn-text-dark, #2A3B33) !important;
}
:root[data-geneva-mode="on"] #onboard-modal :is(
  .modal-sub, .reg-form-label, .legal-check-text, .pwd-strength-label,
  .auth-divider-text, .legal-footer, .anchor-meta, .btn-s,
  .sso-button, .sso-button span,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-text-body, #404D45) !important;
  -webkit-text-fill-color: var(--kvn-text-body, #404D45) !important;
}
:root[data-geneva-mode="on"] #onboard-modal :is(
  .modal-eye, .ob-step2-progress, .ob-progress,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-gold-mate-dim, #8A6E45) !important;
  -webkit-text-fill-color: var(--kvn-gold-mate-dim, #8A6E45) !important;
}

/* FIN PATRÓN 24 · GC-3.8 onboarding viejo geneva */

/* FIN PATRONES GC-3.1 */

/* ═══════════ PATRÓN INS-DARK · FASE 1 ciclo 4 · 8 jun 2026 ═══════════
 * Las cards INSIGHTS (.ins-v5-hero-day · .ins-v5-ai-card · .ins-v5-note-card)
 * pasan a bg Patek OSCURO en geneva-on (overrides ciclo 4). Los textos de
 * dentro estaban gobernados por PATRÓN 1/2/17 con color dark/cream-0.82/muted
 * (asumían card cream) → sobre Patek oscuro quedan invisibles.
 * Aquí se fuerzan a cream/gold con el mismo truco de phantom-IDs (3,1,1) para
 * ganar a PATRÓN 1/2/17. NO toca .ins-v5-ai-sh-title/-sh-meta (header sobre cream). */

/* cuerpo · cream legible sobre Patek */
html[data-geneva-mode="on"] :is(
  .ins-v5-hero-day-quote, .ins-v5-hero-day-quote strong,
  .ins-v5-ai-card-body, .ins-v5-ai-card-title,
  .ins-v5-note-tit, .ins-v5-note-body,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: rgba(235,231,221,0.92) !important;
  -webkit-text-fill-color: rgba(235,231,221,0.92) !important;
}

/* eyebrows / firmas / números clave · gold-bright */
html[data-geneva-mode="on"] :is(
  .ins-v5-hero-day-eb, .ins-v5-ai-card-h, .ins-v5-ai-card-label,
  .ins-v5-hero-day-sig, .ins-v5-hero-day-sig em, .ins-v5-note-eb,
  .ins-v5-hero-day-quote b, .ins-v5-hero-day-quote strong em,
  .ins-v5-ai-card b, .ins-v5-ai-card strong,
  .ins-v5-note-card b, .ins-v5-note-card strong,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: #D4B36C !important;
  -webkit-text-fill-color: #D4B36C !important;
}

/* FIN PATRÓN INS-DARK */

/* ═══════════ PATRÓN INS-DARK-v2 · FASE 1 ciclo 5 · 8 jun 2026 ═══════════
 * Más cards INSIGHTS pasan a Patek oscuro (overrides ciclo 5). Sus hijos de
 * texto (clases REALES · el task adivinó nombres inexistentes) se fuerzan a
 * cream/gold/muted con phantom-IDs (3,1,1). Clases verificadas en render real.
 * KO ORB · Weekly Brain · Edad biológica · Correlac · Discovery · Objetivos · Spark. */

/* cuerpo · cream 0.92 (titles + bodies + subs) */
html[data-geneva-mode="on"] :is(
  .ko-tit,
  .kwb-tit, .kwb-narrative, .kwb-disc-tit, .kwb-disc-body,
  .kba-vs, .kba-note,
  .ins-v5-corr-hero-quote,
  .ins-v5-disc-title, .ins-v5-disc-body,
  .ins-v5-obj-name, .ins-v5-obj-desc,
  .ins-v5-spk-card-tit, .ins-v5-spk-card-sub,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: rgba(235,231,221,0.92) !important;
  -webkit-text-fill-color: rgba(235,231,221,0.92) !important;
}

/* eyebrows + números clave · gold-bright #D4B36C */
html[data-geneva-mode="on"] :is(
  .ko-eb, .ko-center-num, .ko-delta-val,
  .kwb-eb, .kwb-disc-eb,
  .kba-eb, .kba-num,
  .ins-v5-corr-eb, .ins-v5-corr-st-val,
  .ins-v5-disc-eb,
  .ins-v5-obj-drk-tag, .ins-v5-obj-drk-num,
  .ko-card b, .ko-card strong, .kwb-card b, .kwb-card strong,
  .kba-card b, .kba-card strong, .ins-v5-corr-hero b, .ins-v5-corr-hero strong,
  .ins-v5-disc-featured b, .ins-v5-disc-featured strong,
  .ins-v5-obj-card b, .ins-v5-obj-card strong,
  .ins-v5-spk-card b, .ins-v5-spk-card strong,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: #D4B36C !important;
  -webkit-text-fill-color: #D4B36C !important;
}

/* meta pequeña · cream 0.60 (labels/footers/refs · legible pero secundario) */
html[data-geneva-mode="on"] :is(
  .ko-delta-lbl, .kwb-week,
  .ins-v5-corr-st-lbl,
  .ins-v5-disc-mag, .ins-v5-disc-conf, .ins-v5-disc-evid, .ins-v5-disc-ref,
  .ins-v5-obj-blk-lbl, .ins-v5-spk-card-foot,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: rgba(235,231,221,0.60) !important;
  -webkit-text-fill-color: rgba(235,231,221,0.60) !important;
}

/* FIN PATRÓN INS-DARK-v2 */

/* ═══════════ PATRÓN INS-DARK-v3 · ciclo 10 FIX A · .brief-dz interior ═══════════
 * La card Dr.K interpretación (.brief-dz, BIO HOY) pasó a bg Patek oscuro (ciclo 8).
 * Sus textos los gobernaban PATRÓN 2 (.brief-dz-label → gold-dim #8A6E45) y
 * PATRÓN 16c (.brief-dz-text → #404D45 dark) asumiendo card clara → invisibles
 * sobre Patek. Se fuerzan a gold/cream con phantom-ID (gana por orden de fuente). */
html[data-geneva-mode="on"] :is(
  .brief-dz-label,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: #D4B36C !important;
  -webkit-text-fill-color: #D4B36C !important;
  font-weight: 500 !important;
}
html[data-geneva-mode="on"] :is(
  .brief-dz-text, .brief-dz-text em, .brief-dz-content .brief-dz-text,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: rgba(235,231,221,0.92) !important;
  -webkit-text-fill-color: rgba(235,231,221,0.92) !important;
}
html[data-geneva-mode="on"] :is(
  .brief-dz-text strong, .brief-dz-text b,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: #D4B36C !important;
  -webkit-text-fill-color: #D4B36C !important;
}

/* FIN PATRÓN INS-DARK-v3 */

/* ═══ FIX CHAT · chips bienvenida secundarios ═══
   Fondo verde oscuro (rgb(63,82,73)) → necesita texto cream legible.
   Boost phantom-ID (3,2,0) para ganar la cascada Geneva con garantía. */
:root[data-geneva-mode="on"] :is(
  #tab-chat .drk-empty-chip.secondary,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: rgb(235, 231, 221) !important;
  -webkit-text-fill-color: rgb(235, 231, 221) !important;
}
/* FIN FIX CHAT chips */

/* ═══════════ N4b · DRK BACK BUTTON CHEVRON · WCAG AAA 6.76:1 (jun 11 v3) ═══════════
 * PROBLEMA: PATRÓN 2 Geneva phantom-ID 3,0,0 fuerza --kvn-gold-mate-dim #8A6E45
 *           sobre bg #3F5249 = contraste 1.75:1 = chevron invisible en DR.K fullscreen.
 *           Confirmado en iPhone real por Carlos (captura 11 jun 10:45).
 *
 * INTENTOS PREVIOS:
 *   - Sprint inicial: color: var(--gold) en #tab-chat .drk-back-btn → perdió cascada
 *   - Mini-fix N4b (10:30): nunca llegó al CSS · archivo intacto
 *
 * FIX DEFINITIVO: phantom-ID 3,0,0 dentro de :is() + override en cream #EBE7DD
 *                 sobre patek-green #3F5249 = contraste 6.76:1 AAA.
 *                 Override -webkit-text-fill-color también (iOS Safari).
 *                 Scope estricto a #tab-chat para no tocar .drk-pulse-close u otros. */
html[data-geneva-mode="on"] :is(
  #tab-chat .drk-back-btn,
  #tab-chat button.drk-back-btn,
  #_kvn-b1_#_kvn-b2_#_kvn-b3_
) {
  color: var(--kvn-cream-on-card, #EBE7DD) !important;
  -webkit-text-fill-color: var(--kvn-cream-on-card, #EBE7DD) !important;
}
/* FIN N4b */
