/* ============================================================
   Richard Links v2 — Shell (sidebar + topbar) inspirado en Bitly
   Funciona encima de assets/style.css; este archivo solo añade
   chrome nuevo + utilities. Las clases existentes (.card, .kpis,
   .bd, .map-wrap, .bars, etc.) siguen funcionando intactas.
   ============================================================ */

:root{
    --rs-sidebar-w: 64px;
    --rs-sidebar-w-open: 232px;
    --rs-topbar-h: 60px;
    --rs-bg: #fafaf5;
    --rs-bg-soft: #f4f1e8;
    --rs-card: #ffffff;
    --rs-text: #1a1a1a;
    --rs-text-muted: #3f4750;        /* AA: 9.45:1 sobre #fff */
    --rs-text-muted-soft: #5a6470;   /* AA: 6.5:1, para texto >14px */
    --rs-line: #e5e7eb;
    --rs-line-strong: #d4d4d0;
    --rs-accent: #1c4030;
    --rs-accent-light: #4f9e78;
    /* Sistema de status — consolidado P2 audit */
    --rs-success: #16a34a;       /* Verde "success" estándar — login, export, activo */
    --rs-success-soft: rgba(22,163,74,.10);
    --rs-warning: #d97706;       /* Ámbar — pendiente, regenerar */
    --rs-warning-soft: rgba(217,119,6,.10);
    --rs-danger: #dc2626;        /* Rojo — eliminar, error */
    --rs-danger-soft: rgba(220,38,38,.10);
    --rs-info: #2f6fea;          /* Azul — info, link */
    --rs-info-soft: rgba(47,111,234,.10);
    --rs-warm: #c97844;
    --rs-blue: #2f6fea;
    --rs-blue-hover: #2356c4;
    --rs-blue-soft: #e8f0fe;
    --rs-sidebar-bg: #0f1115;
    --rs-sidebar-text: #9ca3af;
    --rs-sidebar-hover: rgba(255,255,255,.06);
    --rs-sidebar-active: rgba(79,158,120,.18);
    --rs-sidebar-active-bar: var(--rs-accent-light);
    --rs-radius: 10px;
    --rs-radius-lg: 14px;
    --rs-shadow-sm: 0 1px 2px rgba(0,0,0,.04);
    --rs-shadow: 0 2px 8px rgba(0,0,0,.06);
}

/* ============================================================
   DARK MODE — redefinimos las MISMAS variables.
   Toda la UI consume var(--rs-*), entonces el switch es automático.
   Estrategia: [data-theme="dark"] en <html>, controlado por JS.
============================================================ */
[data-theme="dark"]{
    /* Variables admin v2 (las nuevas) */
    --rs-bg: #0f1115;
    --rs-bg-soft: #161b22;
    --rs-card: #1c2128;
    --rs-text: #e6edf3;
    --rs-text-muted: #a8b1bd;        /* AA dark: 9.6:1 sobre #0f1115 */
    --rs-text-muted-soft: #8b949e;   /* AA dark: 6.66:1, para texto >14px */
    --rs-line: #30363d;
    --rs-line-strong: #484f58;
    --rs-accent: #2d6a4f;
    --rs-accent-light: #52b788;
    /* Status colors dark — más brillantes para contraste sobre dark bg */
    --rs-success: #4ade80;
    --rs-success-soft: rgba(74,222,128,.15);
    --rs-warning: #fbbf24;
    --rs-warning-soft: rgba(251,191,36,.15);
    --rs-danger: #f87171;
    --rs-danger-soft: rgba(248,113,113,.15);
    --rs-info: #60a5fa;
    --rs-info-soft: rgba(96,165,250,.15);
    --rs-warm: #e08050;
    --rs-blue: #388bfd;
    --rs-blue-hover: #58a6ff;
    --rs-blue-soft: #1c3a6e;
    --rs-sidebar-bg: #090c10;
    --rs-sidebar-text: #8b949e;
    --rs-sidebar-hover: rgba(255,255,255,.06);
    --rs-sidebar-active: rgba(82,183,136,.15);
    --rs-sidebar-active-bar: var(--rs-accent-light);
    --rs-shadow-sm: 0 1px 2px rgba(0,0,0,.3);
    --rs-shadow: 0 2px 8px rgba(0,0,0,.5);

    /* Bridge a variables LEGACY del style.css/theme-richard.css de producción.
       !important obligatorio porque theme-richard.css las declara con !important. */
    --bg: #0f1115 !important;
    --card: #1c2128 !important;
    --card-2: #161b22 !important;
    --ink: #e6edf3 !important;
    --ink-soft: #d0d7de !important;
    --ink-subtle: #a0a8b1 !important;
    --muted: #8b949e !important;
    --line: #30363d !important;
    --line-strong: #484f58 !important;
    --text: #e6edf3 !important;
    --primary: #e6edf3 !important;
    --primary-d: #ffffff !important;
    --on-primary: #0f1115 !important;
    --slug-bg: #1c2128 !important;
    --slug-fg: #e6edf3 !important;
    --shadow-card: 0 1px 3px rgba(0,0,0,.4) !important;

    /* color-scheme: hint al browser para scrollbars / form controls nativos */
    color-scheme: dark;
}

[data-theme="light"]{
    /* En light, restaurar las variables legacy a sus valores originales.
       !important para sobrescribir tanto theme-richard.css como la @media
       (prefers-color-scheme: dark) del legacy cuando OS está en dark pero
       el usuario quiere light. */
    --bg: #F0F7F3 !important;
    --card: #FFFFFF !important;
    --ink: #1d1a16 !important;
    --ink-soft: #2a2620 !important;
    --ink-subtle: #463f37 !important;
    --muted: #6b7280 !important;
    --line: #E5E7EB !important;
    --line-strong: #D1D5DB !important;
    --text: #1a1a1a !important;
    --primary: #000000 !important;
    --primary-d: #1A1A1A !important;
    --on-primary: #FFFFFF !important;
    --slug-bg: #000 !important;
    --slug-fg: #fff !important;
    --shadow-card: 0 1px 3px rgba(0,0,0,.04) !important;
    color-scheme: light;
}

/* Transición suave entre modos. T2·f: limitada a bloques grandes (no a todos los nodos)
   — antes corrían cientos de transitions en paralelo en Android mid-range. */
html.theme-transition,
html.theme-transition body,
html.theme-transition .rs-shell,
html.theme-transition .rs-sidebar,
html.theme-transition .rs-topbar,
html.theme-transition .rs-content,
html.theme-transition .rs-card,
html.theme-transition .rs-kpi,
html.theme-transition .rs-input,
html.theme-transition .rs-btn,
html.theme-transition .rs-btn-secondary,
html.theme-transition .rs-btn-ghost,
html.theme-transition .rs-table,
html.theme-transition .rs-pill,
html.theme-transition .rs-badge,
html.theme-transition .rs-link-card,
html.theme-transition .rs-recent-link,
html.theme-transition .rs-insight,
html.theme-transition .rs-sidebar-item,
html.theme-transition .rs-topbar-btn{
    transition: background-color .2s ease, border-color .2s ease, color .2s ease !important;
}

/* ---------- Reset / base ---------- */
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0;
    background-color:var(--rs-bg);color:var(--rs-text);
    font-family:-apple-system,BlinkMacSystemFont,Inter,"Segoe UI",Roboto,sans-serif;
    font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}
/* Override agresivo del legacy style.css que usaba var(--bg) — fuerza el repaint con data-theme */
[data-theme="dark"],
[data-theme="dark"] body{background-color:#0f1115 !important;color:#e6edf3}
[data-theme="light"],
[data-theme="light"] body{background-color:#fafaf5;color:#1a1a1a}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}

/* ---------- Shell layout (Grid 2x2) ---------- */
.rs-shell{
    display:grid;
    grid-template-columns:var(--rs-sidebar-w) 1fr;
    grid-template-rows:var(--rs-topbar-h) 1fr;
    grid-template-areas:"sidebar topbar" "sidebar content";
    min-height:100vh
}

/* ---------- Sidebar ---------- */
/* Sin overflow:hidden — los tooltips ::after se posicionan FUERA del sidebar
   (a left:58px) y se cortaban. Ahora flotan correctamente sobre el content. */
.rs-sidebar{
    grid-area:sidebar;background:var(--rs-sidebar-bg);
    display:flex;flex-direction:column;align-items:center;
    padding:14px 0 12px;height:100vh;position:sticky;top:0;
    overflow:visible;z-index:30
}
.rs-sidebar .brand{
    width:38px;height:38px;border-radius:9px;
    background:linear-gradient(135deg,#1a3a30,#1c4030);color:#fafaf6;
    display:flex;align-items:center;justify-content:center;
    font-family:Georgia,serif;font-weight:600;font-size:15px;
    margin-bottom:18px;flex-shrink:0;text-decoration:none
}
.rs-sidebar .create-btn{
    width:42px;height:42px;border-radius:50%;border:0;cursor:pointer;
    background:var(--rs-blue);color:#fff;
    display:flex;align-items:center;justify-content:center;
    margin-bottom:18px;flex-shrink:0;
    transition:background .15s,transform .12s;
    box-shadow:0 4px 12px rgba(47,111,234,.35)
}
.rs-sidebar .create-btn:hover{background:var(--rs-blue-hover);transform:translateY(-1px)}
/* Force white SVG inside the FAB. El SVG colapsaba a width:0 dentro del
   <button> flex (display:flex sin min-width). Fix: explicit min-width +
   flex-shrink:0 + color blanco forzado. */
.rs-sidebar .create-btn svg{
    width:22px !important;height:22px !important;min-width:22px;
    color:#fff;stroke:#fff !important;fill:none;flex-shrink:0
}
.rs-sidebar .create-btn svg path{stroke:#fff !important;stroke-width:2.5}
.rs-sidebar nav{display:flex;flex-direction:column;gap:4px;width:100%;align-items:center;flex:1}
.rs-sidebar-item{
    width:44px;height:44px;border-radius:10px;
    display:flex;align-items:center;justify-content:center;
    color:var(--rs-sidebar-text);cursor:pointer;
    transition:background .15s,color .15s;
    position:relative
}
.rs-sidebar-item:hover{background:var(--rs-sidebar-hover);color:#fff}
.rs-sidebar-item.active{background:var(--rs-sidebar-active);color:#fff}
.rs-sidebar-item.active::before{
    content:"";position:absolute;left:-12px;top:10px;bottom:10px;
    width:3px;border-radius:0 3px 3px 0;background:var(--rs-sidebar-active-bar)
}
.rs-sidebar-item svg{width:22px;height:22px;display:block}
/* Tooltip de texto al hover (sidebar colapsado) */
.rs-sidebar-item:hover::after{
    content:attr(data-label);
    position:absolute;left:58px;top:50%;transform:translateY(-50%);
    background:#1a1a1a;color:#fff;font-size:12px;padding:7px 11px;
    border-radius:7px;white-space:nowrap;pointer-events:none;z-index:50;
    box-shadow:0 6px 18px rgba(0,0,0,.25);font-weight:500
}
.rs-sidebar .divider{width:28px;height:1px;background:rgba(255,255,255,.08);margin:6px 0}

/* ---------- Topbar ---------- */
.rs-topbar{
    grid-area:topbar;background:#fff;border-bottom:1px solid var(--rs-line);
    display:flex;align-items:center;gap:14px;padding:0 24px;
    position:sticky;top:0;z-index:25
}
.rs-search{
    flex:1;max-width:540px;margin:0 auto;position:relative
}
.rs-search input{
    width:100%;height:38px;border-radius:10px;border:1px solid var(--rs-line);
    background:#f7f7f4;color:var(--rs-text);padding:0 12px 0 38px;
    font-size:14px;outline:none;transition:border-color .15s,background .15s
}
.rs-search input:focus{border-color:var(--rs-accent-light);background:#fff}
.rs-search .ico{position:absolute;left:11px;top:50%;transform:translateY(-50%);
    color:var(--rs-text-muted);pointer-events:none}
.rs-search .ico svg{width:18px;height:18px;display:block}
.rs-topbar-actions{display:flex;align-items:center;gap:6px}
.rs-topbar-btn{
    width:38px;height:38px;border-radius:10px;border:1px solid transparent;
    background:transparent;color:var(--rs-text);cursor:pointer;
    display:flex;align-items:center;justify-content:center;
    transition:background .15s,border-color .15s
}
.rs-topbar-btn:hover{background:#f4f1e8;border-color:var(--rs-line)}
.rs-topbar-btn svg{width:20px;height:20px}
.rs-topbar-btn.ai{color:var(--rs-accent-light)}
.rs-user{
    height:38px;padding:0 14px 0 6px;border-radius:10px;
    background:transparent;border:1px solid transparent;
    display:flex;align-items:center;gap:10px;cursor:pointer;
    transition:background .15s,border-color .15s
}
.rs-user:hover{background:#f4f1e8;border-color:var(--rs-line)}
.rs-user .avatar{
    width:30px;height:30px;border-radius:50%;background:var(--rs-accent);color:#fafaf6;
    display:flex;align-items:center;justify-content:center;
    font-size:11px;font-weight:700;letter-spacing:.04em
}
.rs-user .who{font-size:13px;font-weight:500;color:var(--rs-text);max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (max-width:1100px){.rs-user .who{max-width:140px}}
@media (max-width:780px){.rs-user .who{display:none}}
.rs-user details{position:relative}
.rs-user summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;outline:none}
.rs-user summary::-webkit-details-marker{display:none}
.rs-user-dropdown{
    position:absolute;right:0;top:calc(100% + 6px);
    background:#fff;border:1px solid var(--rs-line);border-radius:10px;
    box-shadow:var(--rs-shadow);min-width:220px;padding:6px;z-index:40
}
.rs-user-dropdown a{
    display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:7px;
    font-size:13px;color:var(--rs-text);text-decoration:none
}
.rs-user-dropdown a:hover{background:#f4f1e8}
.rs-user-dropdown a.danger{color:#dc2626}
.rs-user-dropdown a.danger:hover{background:rgba(220,38,38,.07)}
.rs-user-dropdown hr{border:0;border-top:1px solid var(--rs-line);margin:4px 0}

/* ---------- Content area ---------- */
.rs-content{
    grid-area:content;padding:28px 32px 60px;
    max-width:none;overflow-x:hidden
}
.rs-page-header{
    display:flex;align-items:flex-start;justify-content:space-between;
    gap:16px;flex-wrap:wrap;margin-bottom:24px
}
.rs-page-title{font-size:26px;font-weight:700;margin:0 0 4px;color:var(--rs-text);letter-spacing:-.01em}
.rs-page-subtitle{font-size:14px;color:var(--rs-text-muted);margin:0}

/* ---------- Cards / containers ---------- */
.rs-card{
    background:var(--rs-card);border:1px solid var(--rs-line);border-radius:var(--rs-radius-lg);
    padding:22px;box-shadow:var(--rs-shadow-sm)
}
.rs-card-padless{padding:0;overflow:hidden}
.rs-card .rs-card-head{
    display:flex;align-items:center;justify-content:space-between;
    padding:18px 22px;border-bottom:1px solid var(--rs-line);gap:12px;flex-wrap:wrap
}
.rs-card .rs-card-head h2,.rs-card .rs-card-head h3{margin:0;font-size:16px;font-weight:600}
.rs-card .rs-card-body{padding:22px}
.rs-card .rs-card-foot{padding:16px 22px;border-top:1px solid var(--rs-line);background:#fafaf5}

/* ---------- Buttons ---------- */
.rs-btn{
    display:inline-flex;align-items:center;justify-content:center;gap:8px;
    height:38px;padding:0 16px;border-radius:9px;
    background:var(--rs-blue);color:#fff;border:0;cursor:pointer;
    font-size:14px;font-weight:600;text-decoration:none;
    transition:background .15s,transform .12s,box-shadow .15s;
    box-shadow:0 1px 2px rgba(0,0,0,.06)
}
.rs-btn:hover{background:var(--rs-blue-hover)}
.rs-btn:active{transform:translateY(1px)}
.rs-btn-lg{height:44px;padding:0 22px;font-size:15px;border-radius:10px}
.rs-btn-sm{height:32px;padding:0 12px;font-size:13px;border-radius:8px}
.rs-btn-secondary{background:#fff;color:var(--rs-text);border:1px solid var(--rs-line);box-shadow:none}
.rs-btn-secondary:hover{background:#f4f1e8}
.rs-btn-ghost{background:transparent;color:var(--rs-blue);border:0;box-shadow:none;padding:0 10px}
.rs-btn-ghost:hover{background:var(--rs-blue-soft)}
.rs-btn-accent{background:var(--rs-accent);color:#fafaf6}
.rs-btn-accent:hover{background:#0f2820}
.rs-btn-danger{background:#dc2626;color:#fff}
.rs-btn-danger:hover{background:#b91c1c}
/* Acción con consecuencias pero NO destructiva (ej: regenerar token).
   Ambar comunica "ten cuidado" sin gritar "destruye datos". */
.rs-btn-warning{background:#f59e0b;color:#1a1a1a}
.rs-btn-warning:hover{background:#b45309;color:#fff}   /* AA: 5.94:1 sobre #b45309 */
.rs-btn-icon{width:34px;height:34px;padding:0;border-radius:8px;background:transparent;color:var(--rs-text-muted);border:1px solid transparent}
.rs-btn-icon:hover{background:#f4f1e8;color:var(--rs-text);border-color:var(--rs-line)}
.rs-btn-icon svg{width:16px;height:16px}

/* ---------- Labels: forzar sentence case en TODO el shell v2 ---------- */
/* style.css heredado tiene `label{text-transform:uppercase}` global. En las
   pantallas v2 queremos sentence case + sans-serif estándar — los allcaps
   monospace pierden legibilidad para frases largas. */
/* Cobertura amplia incluyendo tabs y cualquier descendiente de rs-shell. */
.rs-shell label,
.rs-shell .rs-card label,
.rs-shell .rs-quick-create label,
.rs-shell .rs-tabs label,
.rs-shell form label,
.rs-shell main label,
.rs-shell aside label,
.rs-shell section label,
.rs-shell div label{
    text-transform:none !important;
    letter-spacing:normal !important;
    font-family:-apple-system,BlinkMacSystemFont,Inter,"Segoe UI",Roboto,sans-serif !important
}
/* Helper text bajo un campo (texto descriptivo gris debajo del input). */
.rs-helper{font-size:12px;color:var(--rs-text-muted);margin:6px 0 0;line-height:1.5}
.rs-required-hint{font-size:11px;color:var(--rs-text-muted);margin-top:6px;display:block}
.rs-required-hint::before{content:"* ";color:#dc2626;font-weight:700}

/* ---------- Tabs (radio-style toggle) ---------- */
/* Active = forest green sólido + texto CREMA (alto contraste WCAG AA+).
   !important porque style.css heredado tiene reglas más específicas que pintan
   el label con currentColor del contenedor, dejando el texto del mismo tono
   que el fondo activo. Override intencional, no accidental. */
.rs-tabs{display:inline-flex;background:#f3f1ea;border-radius:10px;padding:4px;gap:4px;border:1px solid #e5e2d8;text-transform:none}
.rs-tabs input{display:none}
.rs-tabs label{
    padding:7px 16px;border-radius:8px;font-size:13px;font-weight:600;
    cursor:pointer;color:var(--rs-text-muted);transition:background .15s,color .15s,box-shadow .15s;
    display:inline-flex;align-items:center;gap:6px;
    text-transform:none !important;letter-spacing:0 !important;font-family:inherit !important
}
.rs-tabs input:checked + label{background:var(--rs-accent) !important;color:#fafaf6 !important;box-shadow:0 1px 4px rgba(28,64,48,.25)}
.rs-tabs input:checked + label svg{color:#fafaf6}
.rs-tabs label:hover{color:var(--rs-text)}
.rs-tabs input:checked + label:hover{color:#fafaf6 !important}

/* ---------- Range tabs (date filter, used in stats/analytics) ---------- */
.rs-range{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.rs-range a{padding:7px 14px;border-radius:8px;font-size:13px;color:var(--rs-text-muted);border:1px solid var(--rs-line);background:#fff;transition:background .12s,color .12s,border-color .12s}
.rs-range a:hover{background:#f4f1e8}
.rs-range a.on{background:var(--rs-accent);color:#fafaf6;border-color:var(--rs-accent)}
.rs-range-dates{
    display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-left:auto;
    background:#fff;border:1px solid var(--rs-line);border-radius:10px;padding:5px 10px
}
.rs-range-dates label{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--rs-text-muted)}
.rs-range-dates input[type=date]{
    background:#fafaf5;border:1px solid var(--rs-line);color:var(--rs-text);
    border-radius:7px;padding:5px 8px;font-size:13px
}
.rs-range-dates button{
    background:var(--rs-accent-light);color:#06150e;border:0;border-radius:7px;
    padding:7px 14px;font-weight:700;cursor:pointer;font-size:13px
}

/* ---------- Inputs ---------- */
.rs-input{
    width:100%;height:42px;padding:0 14px;border:1px solid var(--rs-line);
    border-radius:9px;background:#fff;color:var(--rs-text);font-size:14px;
    outline:none;transition:border-color .15s,box-shadow .15s
}
.rs-input:focus{border-color:var(--rs-blue);box-shadow:0 0 0 3px rgba(47,111,234,.12)}
.rs-input-lg{height:48px;font-size:15px;padding:0 16px}
.rs-input-group{display:flex;gap:8px;align-items:stretch}
.rs-input-prefix{
    display:flex;align-items:center;gap:8px;padding:0 14px;height:42px;
    background:#fafaf5;border:1px solid var(--rs-line);border-radius:9px;
    font-size:13px;color:var(--rs-text);font-weight:500;cursor:pointer
}
.rs-input-prefix .ico{color:var(--rs-text-muted);display:flex}
.rs-input-prefix .ico svg{width:14px;height:14px}

/* ---------- KPI tiles (used in Home / Analytics) ---------- */
.rs-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:24px}
.rs-kpi{
    background:#fff;border:1px solid var(--rs-line);border-radius:var(--rs-radius-lg);
    padding:18px 20px;display:flex;flex-direction:column;gap:6px
}
/* Sentence case por preferencia del usuario — más legible que small-caps */
.rs-kpi .label{font-size:12px;color:var(--rs-text-muted);font-weight:600;letter-spacing:0;text-transform:none}
.rs-kpi .value{font-size:30px;font-weight:700;color:var(--rs-text);letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.rs-kpi .delta{font-size:12px;color:var(--rs-text-muted);display:flex;align-items:center;gap:4px}
.rs-kpi .delta.up{color:#16a34a}
.rs-kpi .delta.down{color:#dc2626}

/* ---------- Empty state ---------- */
.rs-empty{padding:60px 24px;text-align:center;max-width:680px;margin:0 auto}
.rs-empty .illus{margin:0 auto 22px;color:#cdd0c8;width:140px;height:140px}
.rs-empty h2{font-size:22px;margin:0 0 10px;font-weight:700}
.rs-empty p{font-size:14px;color:var(--rs-text-muted);margin:0 0 22px;line-height:1.55}
.rs-empty .actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}

/* ---------- Confirmaciones de feature (no son toggles, son estados) ---------- */
/* Visual distinto a .rs-pill para evitar affordance de chip clickeable */
.rs-confirm{display:inline-flex;align-items:center;gap:5px;padding:2px 0;font-size:12px;color:#15803d;font-weight:500;border:0;background:transparent;cursor:default;pointer-events:none}
.rs-confirm::before{content:"✓";font-weight:700;color:#15803d;font-size:13px}

/* ---------- Badges ---------- */
.rs-badge{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.02em}
.rs-badge-new{background:var(--rs-blue-soft);color:var(--rs-blue)}
/* WCAG AA pasa para texto 11px (≥4.5:1) — colores ajustados T1·d */
.rs-badge-active{background:rgba(22,163,74,.14);color:#166534}   /* 4.85:1 sobre bg efectivo */
.rs-badge-paused{background:rgba(217,119,6,.14);color:#92400e}   /* 5.10:1 sobre bg efectivo */
.rs-badge-expired{background:#f3f4f6;color:#4b5563}              /* 5.92:1 sobre #f3f4f6 */

/* ---------- Onboarding checklist ---------- */
.rs-checklist{display:flex;flex-direction:column;gap:10px;margin-top:14px}
.rs-checklist .item{
    display:flex;align-items:flex-start;gap:12px;padding:12px;border:1px solid var(--rs-line);border-radius:10px;background:#fff
}
.rs-checklist .item.done{opacity:.55;background:#fafaf5}
.rs-checklist .item.done strong{text-decoration:line-through;text-decoration-thickness:1px;color:var(--rs-text-muted)}
.rs-checklist .check{
    width:22px;height:22px;border-radius:50%;border:2px solid var(--rs-line);flex-shrink:0;margin-top:2px;
    display:flex;align-items:center;justify-content:center;color:#fff;background:#fff
}
.rs-checklist .item.done .check{background:var(--rs-accent-light);border-color:var(--rs-accent-light)}
.rs-checklist .item.done .check::after{content:"✓";font-size:13px;font-weight:700}
.rs-checklist .item .body{flex:1}
.rs-checklist .item .body strong{display:block;margin-bottom:2px;font-size:14px}
.rs-checklist .item .body span{font-size:13px;color:var(--rs-text-muted)}
.rs-checklist .item .cta{margin-top:8px;display:inline-block}
.rs-progress{display:flex;align-items:center;gap:12px;margin-bottom:6px}
.rs-progress .ring{position:relative;width:46px;height:46px;flex-shrink:0}
.rs-progress .ring svg{width:46px;height:46px;transform:rotate(-90deg)}
.rs-progress .ring circle{fill:none;stroke-width:5}
.rs-progress .ring .bg{stroke:#eee9d8}
.rs-progress .ring .fg{stroke:var(--rs-accent-light);stroke-linecap:round;transition:stroke-dashoffset .4s}
.rs-progress .ring .pct{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:var(--rs-text)}

/* ---------- Links list ---------- */
/* Toolbar de la lista con secciones bien definidas:
   - Izquierda: checkbox + count
   - Centro-izq: bulk actions (compactadas en hover-reveal cuando hay items)
   - Derecha: view-toggle + filtro estado (NO se cortan en narrow viewports) */
.rs-list-toolbar{
    display:flex;align-items:center;gap:10px;flex-wrap:wrap;
    margin-bottom:14px;padding:10px 14px;background:#fff;border:1px solid var(--rs-line);border-radius:10px
}
.rs-list-toolbar .count{font-size:13px;color:var(--rs-text-muted);white-space:nowrap}
.rs-list-toolbar .spacer{flex:1;min-width:8px}
.rs-list-toolbar > select{flex-shrink:0;max-width:140px}
.rs-view-toggle{display:inline-flex;border:1px solid var(--rs-line);border-radius:8px;overflow:hidden;flex-shrink:0}
.rs-view-toggle button{
    width:34px;height:32px;background:#fff;border:0;cursor:pointer;color:var(--rs-text-muted);
    display:flex;align-items:center;justify-content:center
}
.rs-view-toggle button.on{background:var(--rs-accent);color:#fafaf6}
.rs-view-toggle button svg{width:16px;height:16px}
.rs-link-card{
    display:grid;grid-template-columns:auto 44px 1fr auto;gap:14px;align-items:center;
    padding:16px 18px;background:#fff;border:1px solid var(--rs-line);border-radius:12px;margin-bottom:10px;
    transition:border-color .15s,box-shadow .15s
}
/* A11y: cards clickeables son tabbable y respetan focus visible */
.rs-link-card[role="link"],
.rs-link-card[tabindex],
.rs-recent-link[role="link"],
.rs-recent-link[tabindex]{outline:none}
.rs-link-card[role="link"]:focus-visible,
.rs-link-card[tabindex]:focus-visible,
.rs-recent-link[role="link"]:focus-visible,
.rs-recent-link[tabindex]:focus-visible{
    outline:2px solid var(--rs-accent-light);
    outline-offset:2px;
    border-radius:12px
}
.rs-link-card:hover{border-color:var(--rs-line-strong);box-shadow:var(--rs-shadow-sm)}
.rs-link-card .check input{width:16px;height:16px;cursor:pointer}
.rs-link-card .favicon{
    width:44px;height:44px;border-radius:10px;background:#f4f1e8;
    display:flex;align-items:center;justify-content:center;flex-shrink:0;
    overflow:hidden;position:relative;
    font-family:Georgia,serif;font-weight:600;font-size:18px;color:var(--rs-accent)
}
.rs-link-card .favicon img{width:28px;height:28px;border-radius:6px}
/* Fallback: inicial del dominio cuando el favicon falla en cargar */
.rs-link-card .favicon .favicon-fallback{
    position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
    background:#f4f1e8;border-radius:10px;z-index:1
}
.rs-link-card .favicon img{position:relative;z-index:2}

/* Variante compacta para Home (Top performers): fila más esbelta + hover state */
.rs-link-card-compact{border-color:transparent !important;background:transparent !important;padding:12px 14px !important}
.rs-link-card-compact:hover{border-color:var(--rs-line) !important;background:#fff !important}
.rs-link-card-compact .actions{opacity:0;transition:opacity .15s}
.rs-link-card-compact:hover .actions{opacity:1}

/* ---------- Recent link (Home top performers) — layout flex simple ---------- */
/* Diseñado para columnas ESTRECHAS (~400-500px). Una fila: favicon | info | delta.
   Sin grid de 4 columnas — el grid colapsaba en el layout 2-col del Home. */
.rs-recent-link{
    display:flex;align-items:center;gap:12px;
    padding:10px 12px;border-radius:10px;cursor:pointer;
    border:1px solid transparent;transition:background .15s,border-color .15s;
    text-decoration:none;color:inherit
}
.rs-recent-link:hover{background:#fafaf5;border-color:var(--rs-line)}
.rs-recent-link .favicon{
    width:36px;height:36px;border-radius:8px;background:#f4f1e8;
    display:flex;align-items:center;justify-content:center;flex-shrink:0;
    position:relative;overflow:hidden;
    font-family:Georgia,serif;font-weight:600;font-size:15px;color:var(--rs-accent)
}
.rs-recent-link .favicon img{width:22px;height:22px;border-radius:4px;position:relative;z-index:2}
.rs-recent-link .favicon-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:1}
.rs-recent-link .info{flex:1;min-width:0;overflow:hidden}
.rs-recent-link .title{
    font-size:14px;font-weight:600;color:var(--rs-text);margin:0 0 2px;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block
}
.rs-recent-link .sub{
    font-size:12px;color:var(--rs-text-muted);
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block
}
.rs-recent-link .sub .short{color:var(--rs-blue);font-weight:500}
.rs-recent-link .sub .sep{margin:0 6px;opacity:.5}
.rs-recent-link .right{display:flex;align-items:center;gap:8px;flex-shrink:0}
.rs-recent-link .delta{font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}
.rs-recent-link .delta.up{color:#16a34a}
.rs-recent-link .delta.down{color:#dc2626}
/* Actions: visibles siempre con baja opacidad, hover sube a full. Antes era
   0→1 pero el usuario no descubría que existían acciones. */
.rs-recent-link .right .rs-btn-icon{opacity:.45;transition:opacity .15s,color .15s}
.rs-recent-link:hover .right .rs-btn-icon{opacity:1;color:var(--rs-accent)}
/* AFFORDANCE: chevron al hover + title underline para que la fila grite "soy clickable".
   Antes pasaba que el usuario clickeaba y SÍ navegaba, pero no percibía la fila como link. */
.rs-recent-link .chev{
    width:18px;height:18px;flex-shrink:0;color:var(--rs-text-muted);
    opacity:0;transform:translateX(-4px);transition:opacity .15s,transform .15s,color .15s
}
.rs-recent-link:hover .chev{opacity:1;transform:translateX(0);color:var(--rs-accent)}
.rs-recent-link:hover .title{color:var(--rs-accent)}
.rs-link-card .info{min-width:0}
.rs-link-card .title{font-size:15px;font-weight:600;color:var(--rs-text);margin:0 0 3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-link-card .short{
    display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--rs-blue);font-weight:500;
    background:var(--rs-blue-soft);padding:2px 8px;border-radius:6px;margin-right:8px
}
.rs-link-card .copy-btn{
    background:transparent;border:0;cursor:pointer;color:var(--rs-blue);padding:2px;
    display:inline-flex;align-items:center
}
.rs-link-card .copy-btn svg{width:13px;height:13px}
.rs-link-card .long{
    display:flex;align-items:center;gap:6px;font-size:12px;color:var(--rs-text-muted);
    margin-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap
}
.rs-link-card .long .arrow{color:var(--rs-text-muted);flex-shrink:0}
.rs-link-card .meta{
    display:flex;align-items:center;gap:18px;margin-top:8px;font-size:12px;color:var(--rs-text-muted)
}
.rs-link-card .meta > span{display:inline-flex;align-items:center;gap:5px}
.rs-link-card .meta svg{width:13px;height:13px;color:var(--rs-text-muted)}
.rs-link-card .actions{display:flex;gap:4px;align-items:center}
.rs-link-card .actions .rs-btn-icon{color:var(--rs-text-muted)}

/* ---------- Stat charts (sparkline / bars reused) ---------- */
.rs-spark{display:inline-block;vertical-align:middle;opacity:.85}

/* ---------- Map composition (keeps current fix) ---------- */
.map-wrap{display:grid;grid-template-columns:1fr 340px;gap:16px;margin-bottom:22px;align-items:stretch}
.map-wrap > .card,.map-wrap > .rs-card{display:flex;flex-direction:column;min-height:480px;padding:0;overflow:hidden;background:var(--rs-bg-soft)}
.map-wrap #world-map{flex:1;width:100%;height:auto;min-height:460px}
.map-side{background:#fff;border:1px solid var(--rs-line);border-radius:var(--rs-radius-lg);padding:16px 18px;display:flex;flex-direction:column;min-height:480px}
.map-side h3{margin:4px 0 10px;font-size:14px;font-weight:600}
.map-side h3+ul{margin:0 0 18px;padding:0;list-style:none}
.map-side .bd{margin:0 0 18px;padding:0;list-style:none}
.map-side .bd li{display:flex !important;align-items:center !important;gap:10px !important;margin:0 0 6px !important;padding:2px 0 !important;grid-template-columns:unset !important}
.map-side .bd li .k{flex:1 1 auto !important;min-width:0 !important;max-width:none !important;width:auto !important;overflow:hidden !important;text-overflow:ellipsis !important;white-space:nowrap !important;font-size:13px !important;color:var(--rs-text)}
.map-side .bd li .bar-bg{flex:0 0 64px !important;width:64px !important;height:5px !important;border-radius:3px;background:#eee9d8}
.map-side .bd li .bar-bg > span{display:block;height:100%;background:var(--rs-accent-light);border-radius:3px}
.map-side .bd li .c{flex:0 0 auto !important;width:auto !important;text-align:right !important;font-size:12px !important;min-width:32px !important;color:var(--rs-text-muted);font-variant-numeric:tabular-nums}
@media (max-width:920px){.map-wrap{grid-template-columns:1fr}.map-wrap > .card,.map-wrap > .rs-card,.map-side{min-height:auto}}

/* ---------- Insight callouts (Analytics) ---------- */
.rs-insight{
    display:flex;gap:14px;padding:18px 20px;background:linear-gradient(135deg,#f4f1e8,#fafaf5);
    border:1px solid var(--rs-line);border-radius:var(--rs-radius-lg);margin-bottom:16px
}
.rs-insight .ico{flex-shrink:0;color:var(--rs-accent-light)}
.rs-insight .body > strong{display:block;font-size:14px;margin-bottom:2px;color:var(--rs-text)}
.rs-insight .body span{font-size:13px;color:var(--rs-text-muted);line-height:1.55}
.rs-insight .body span strong{color:var(--rs-text);font-weight:600;display:inline !important}

/* ---------- Table (used in Domains, Integrations, Audit) ---------- */
.rs-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--rs-line);border-radius:var(--rs-radius-lg);overflow:hidden}
/* Headers en sentence case (sin uppercase ni letter-spacing).
   El uppercase legacy se sentía monospace y rompía el rythm con el resto del UI. */
.rs-table th{
    background:#fafaf5;text-align:left;padding:11px 16px;font-size:12px;font-weight:600;
    color:var(--rs-text-muted);border-bottom:1px solid var(--rs-line);
    text-transform:none !important;letter-spacing:normal !important;
    font-family:-apple-system,BlinkMacSystemFont,Inter,"Segoe UI",Roboto,sans-serif
}
.rs-table td{padding:14px 16px;border-bottom:1px solid var(--rs-line);font-size:14px}
.rs-table tbody tr:last-child td{border-bottom:0}
.rs-table tbody tr:hover{background:#fafaf5}
/* Filas/cards en estado no-activo: fondo gris frío + texto muted para
   que se distingan claramente sin necesidad de leer el badge. El hover
   restaura opacidad e ilumina, sugiriendo que sigue siendo interactivo. */
.rs-table tbody tr.is-paused,
.rs-table tbody tr.is-expired{background:#fafafa;color:#6b7280}
.rs-table tbody tr.is-paused td,
.rs-table tbody tr.is-expired td{color:#6b7280}
.rs-table tbody tr.is-paused td strong,
.rs-table tbody tr.is-expired td strong{color:#6b7280;font-weight:600}
/* !important para vencer la cascada legacy de h3/.title que aplicaba var(--rs-text)
   incluso con mayor specificity desde nuestro lado. La razón exacta no es 100% clara
   (posible cascade quirk con elementos h3 + class), pero !important garantiza el override. */
.rs-link-card.is-paused,
.rs-link-card.is-expired{background:#fafafa !important;border-color:#e5e7eb !important}
.rs-link-card.is-paused .title,
.rs-link-card.is-expired .title{color:#6b7280 !important}
.rs-link-card.is-paused .long,
.rs-link-card.is-expired .long{color:#9ca3af !important}
.rs-link-card.is-paused .meta,
.rs-link-card.is-expired .meta{color:#9ca3af !important}
.rs-link-card.is-paused .favicon,
.rs-link-card.is-expired .favicon{opacity:.55}
.rs-table tbody tr.is-paused:hover,
.rs-table tbody tr.is-expired:hover{background:#f3f4f6}
.rs-link-card.is-paused:hover,
.rs-link-card.is-expired:hover{background:#fff;border-color:var(--rs-line);box-shadow:var(--rs-shadow-sm)}
.rs-link-card.is-paused:hover .title,
.rs-link-card.is-expired:hover .title{color:var(--rs-text)}

/* ---------- Quick-create widget (Home) ---------- */
.rs-quick-create{
    background:#fff;border:1px solid var(--rs-line);border-radius:var(--rs-radius-lg);
    padding:24px;display:grid;grid-template-columns:1fr 320px;gap:30px;margin-bottom:24px
}
.rs-quick-create .limit{
    font-size:12px;color:var(--rs-text-muted);margin-bottom:14px;
    display:flex;align-items:center;gap:6px
}
.rs-quick-create .limit strong{color:var(--rs-text);font-weight:600}
.rs-quick-create .ai-side{
    background:linear-gradient(135deg,#eaf4ee,#fafaf5);border:1px solid var(--rs-line);
    border-radius:12px;padding:18px;display:flex;flex-direction:column;gap:10px
}
.rs-quick-create .ai-side h4{margin:0;font-size:14px;font-weight:600;display:flex;align-items:center;gap:6px}
.rs-quick-create .ai-side p{margin:0 0 8px;font-size:12px;color:var(--rs-text-muted)}
.rs-quick-create .ai-side button{
    text-align:left;padding:10px 12px;border:1px solid var(--rs-line);background:#fff;
    border-radius:8px;font-size:13px;color:var(--rs-text);cursor:pointer;
    display:flex;align-items:center;gap:8px;transition:border-color .15s,background .15s;
    width:100%;justify-content:space-between
}
.rs-quick-create .ai-side button > svg:first-child{flex-shrink:0}
.rs-quick-create .ai-side button::after{content:"→";color:var(--rs-text-muted);font-weight:600;flex-shrink:0;margin-left:auto}
.rs-quick-create .ai-side button:hover{border-color:var(--rs-accent-light);background:#f4f1e8}
.rs-quick-create .ai-side button:hover::after{color:var(--rs-accent)}
@media (max-width:900px){.rs-quick-create{grid-template-columns:1fr}}

/* ---------- Two-column dashboard layout ---------- */
/* align-items:start — cada columna toma su altura natural. Antes era stretch
   y la columna izquierda se estiraba dejando un "ghost block" cuando la derecha
   tenía más contenido (caso Home: top-performers vs insights+onboarding). */
.rs-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
@media (max-width:920px){.rs-grid-2{grid-template-columns:1fr}}

/* ---------- Misc utilities ---------- */
.rs-muted{color:var(--rs-text-muted)}
.rs-row{display:flex;align-items:center;gap:10px}
.rs-row.between{justify-content:space-between}
.rs-stack{display:flex;flex-direction:column;gap:14px}
.rs-h-divider{height:1px;background:var(--rs-line);margin:18px 0}
.rs-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:#f4f1e8;font-size:12px;color:var(--rs-text);border:1px solid var(--rs-line)}

/* Iconografía consistente (P2 audit) — stroke-width 1.8 por defecto
   en la shell. Iconos que necesitan más cuerpo (logos, marcadores) usan
   stroke-width="2.4" explícito para sobrescribir. Lucide standardizó
   en 1.8 — adoptamos lo mismo para coherencia visual. */
.rs-shell svg[stroke="currentColor"]:not([stroke-width="2.4"]):not([stroke-width="1.4"]):not([stroke-width="1.5"]):not([stroke-width="1.2"]):not([stroke-width="3"]):not([stroke-width="0.5"]){
    stroke-width:1.8
}
.rs-sidebar svg[stroke="currentColor"], .rs-topbar svg[stroke="currentColor"]{
    stroke-width:1.8
}

/* Sidebar context indicator (P2 audit) — pista visual debajo del item activo
   con el slug del enlace que estás viendo en stats.html */
.rs-sidebar-context{
    display:flex;align-items:center;gap:7px;padding:6px 14px 6px 38px;
    font-size:11px;color:var(--rs-sidebar-text);font-family:ui-monospace,monospace;
    background:rgba(255,255,255,.03);border-left:2px solid var(--rs-accent-light);
    margin:0 0 4px 12px;border-radius:0 6px 6px 0
}
.rs-sidebar-context .dot{width:5px;height:5px;border-radius:50%;background:var(--rs-accent-light);flex-shrink:0}
.rs-sidebar-context .lbl{color:#fff;font-weight:600;font-size:11.5px}

/* Bio widget en Home (P2 audit) */
.rs-bio-widget:hover .rs-card{border-color:var(--rs-accent-light) !important;transform:translateY(-1px)}
.rs-bio-widget:focus-visible{outline:2px solid var(--rs-accent-light);outline-offset:2px;border-radius:14px}

/* Cross-link Enlaces ↔ Campañas (P1 audit) */
.rs-campaign-chip{display:inline-flex;align-items:center;gap:5px;padding:2px 10px;border-radius:999px;
    background:rgba(47,111,234,.08);border:1px solid rgba(47,111,234,.25);color:var(--rs-blue);
    font-size:11px;font-weight:600;text-decoration:none;font-family:ui-monospace,monospace;
    transition:background .15s,border-color .15s}
.rs-campaign-chip:hover{background:rgba(47,111,234,.15);border-color:rgba(47,111,234,.45);text-decoration:none}
.rs-campaign-chip svg{width:11px;height:11px;flex-shrink:0}
[data-theme="dark"] .rs-campaign-chip{background:rgba(56,139,253,.12);border-color:rgba(56,139,253,.3);color:#79c0ff}
[data-theme="dark"] .rs-campaign-chip:hover{background:rgba(56,139,253,.2);border-color:rgba(56,139,253,.5)}

.rs-link-count{color:var(--rs-blue);text-decoration:none;font-size:13px;display:inline-flex;align-items:center;gap:2px}
.rs-link-count:hover{text-decoration:underline}
.rs-link-count strong{font-weight:700}
[data-theme="dark"] .rs-link-count{color:#79c0ff}

/* ============================================================
   LOADING STATES + OPTIMISTIC UI — botones, cards, skeletons
   Patrón: .is-loading sobre cualquier elemento desactiva pointer-events
   y muestra un spinner. Skeleton shimmer para listas en carga inicial.
============================================================ */
@keyframes rs-spin{to{transform:rotate(360deg)}}
@keyframes rs-shimmer{0%{background-position:-400px 0}100%{background-position:400px 0}}

.rs-btn.is-loading{position:relative;pointer-events:none;opacity:.7;color:transparent !important}
.rs-btn.is-loading::after{
    content:"";position:absolute;top:50%;left:50%;width:16px;height:16px;
    margin:-8px 0 0 -8px;border:2px solid currentColor;border-top-color:transparent;
    border-radius:50%;color:var(--rs-text);animation:rs-spin .6s linear infinite
}
.rs-btn-primary.is-loading::after, .rs-btn-danger.is-loading::after{color:#fff}

.rs-skeleton{display:inline-block;background:linear-gradient(90deg,
    var(--rs-bg-soft) 0%, var(--rs-line) 50%, var(--rs-bg-soft) 100%);
    background-size:800px 100%;animation:rs-shimmer 1.4s ease-in-out infinite;
    border-radius:6px;height:14px;width:100%}
.rs-skeleton.h-22{height:22px}
.rs-skeleton.h-40{height:40px}
.rs-skeleton.w-60{width:60%}
.rs-skeleton.w-40{width:40%}

/* Optimistic toast (top-right) */
.rs-toast{position:fixed;top:18px;right:18px;z-index:9999;background:var(--rs-card);
    border:1px solid var(--rs-line);border-left:3px solid var(--rs-accent-light);
    border-radius:8px;padding:12px 16px;box-shadow:0 8px 24px rgba(0,0,0,.12);
    font-size:13px;color:var(--rs-text);display:flex;align-items:center;gap:10px;
    transform:translateX(420px);opacity:0;
    transition:transform .25s, opacity .25s, top .3s cubic-bezier(.34,1.5,.5,1);
    max-width:380px;cursor:pointer}
.rs-toast.is-open{transform:translateX(0);opacity:1}
.rs-toast.danger{border-left-color:#dc2626}
.rs-toast.warning{border-left-color:#f59e0b}
.rs-toast .icon{flex-shrink:0;color:var(--rs-accent-light);width:18px;height:18px}
.rs-toast.danger .icon{color:#dc2626}
.rs-toast.warning .icon{color:#f59e0b}
.rs-toast .undo{margin-left:6px;background:transparent;border:0;color:var(--rs-blue);
    cursor:pointer;font-weight:600;text-decoration:underline;font-size:13px;padding:0}
.rs-toast .undo:hover{color:var(--rs-blue-hover)}

/* ============================================================
   RESPONSIVE — tablet (<960px) + mobile (<720px) + small (<480px)
   Estrategia mobile-first sin reescribir el desktop: el shell grid
   pasa de 2x2 a 1col stacked, el sidebar se transforma en topbar
   horizontal con hamburger, los KPIs colapsan a 2col y luego 1col.
============================================================ */

/* Hamburger: hidden en desktop por default, mostrado en mobile via @media */
.rs-mobile-hamburger{display:none}
.rs-sidebar-backdrop{display:none}

/* Tablet — <960px */
@media (max-width:960px){
    .rs-quick-create{grid-template-columns:1fr !important;gap:18px;padding:20px}
    .rs-quick-create .ai-side{order:2}
    .rs-grid-2{grid-template-columns:1fr !important;gap:14px}
    .rs-kpis{grid-template-columns:repeat(2, 1fr) !important}
    .map-wrap{grid-template-columns:1fr !important}
    .map-side{margin-top:14px}
    .editor-wrap{grid-template-columns:1fr !important}
    .pwd-grid{grid-template-columns:1fr !important}
}

/* Mobile — <720px — sidebar colapsa, topbar simplifica, KPIs 2col */
@media (max-width:720px){
    :root{--rs-sidebar-w:0px;--rs-topbar-h:56px}
    /* Shell: stacked instead of grid */
    .rs-shell{
        display:block !important;
        grid-template-columns:none !important;
        grid-template-rows:none !important;
        grid-template-areas:none !important
    }
    /* Sidebar pasa a un mobile drawer — oculto por default con translateX,
       no con left:-280 porque compite con position:sticky del desktop.
       transform es GPU-accelerated y deterministic. */
    .rs-sidebar{
        position:fixed !important;
        top:0 !important;left:0 !important;
        width:240px !important;height:100vh !important;
        z-index:200 !important;
        flex-direction:column !important;align-items:stretch !important;
        padding:14px 12px !important;
        transform:translateX(-100%) !important;
        transition:transform .25s ease !important;
        box-shadow:6px 0 24px rgba(0,0,0,.4) !important;
        overflow-y:auto !important
    }
    .rs-sidebar.is-open{transform:translateX(0) !important}
    /* Content full-width sin margen del sidebar */
    .rs-content,
    main.rs-content{
        margin-left:0 !important;
        width:100% !important;
        padding:16px 14px !important
    }
    .rs-topbar{
        position:sticky !important;
        top:0 !important;
        z-index:50 !important;
        width:100% !important;
        padding:0 12px !important
    }
    .rs-sidebar .brand{margin-bottom:8px}
    .rs-sidebar nav{flex:1;overflow-y:auto}
    .rs-sidebar-item{width:100% !important;justify-content:flex-start !important;padding:10px 12px !important;border-radius:8px}
    .rs-sidebar-item svg{margin-right:10px}
    .rs-sidebar-item::after{
        content:attr(data-label) !important;position:static !important;
        background:transparent !important;color:inherit !important;
        box-shadow:none !important;padding:0 !important;
        font-size:14px !important;font-weight:500;opacity:1 !important
    }
    /* Hamburger button — solo visible en mobile (CSS gate) */
    .rs-mobile-hamburger{
        display:inline-flex !important;
        align-items:center !important;justify-content:center !important;
        width:40px !important;height:40px !important;border-radius:8px !important;
        background:var(--rs-bg-soft) !important;border:1px solid var(--rs-line) !important;
        cursor:pointer;color:var(--rs-text) !important;flex-shrink:0 !important;margin-right:6px;
        padding:0 !important
    }
    .rs-mobile-hamburger:hover{background:var(--rs-line) !important;border-color:var(--rs-line-strong) !important}
    .rs-mobile-hamburger svg{width:22px !important;height:22px !important;min-width:22px !important;min-height:22px !important;display:block !important;stroke:currentColor !important;flex-shrink:0 !important}
    /* Backdrop cuando sidebar abierto */
    .rs-sidebar-backdrop{
        display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:150
    }
    .rs-sidebar-backdrop.is-open{display:block}

    /* Topbar mobile */
    .rs-topbar{padding:0 12px !important;gap:8px}
    .rs-search{max-width:none;flex:1}
    .rs-search input{font-size:13px}
    .rs-topbar-actions{gap:4px}
    .rs-user .who{display:none !important}
    .rs-topbar-btn{width:36px;height:36px}

    /* Content */
    .rs-content{padding:16px 12px !important}
    .rs-page-header{flex-direction:column;align-items:stretch !important;gap:12px}
    .rs-page-title{font-size:clamp(18px, 5vw, 24px) !important;line-height:1.2 !important}
    .rs-page-subtitle{font-size:13px}

    /* KPIs 2col en mobile */
    .rs-kpis{grid-template-columns:repeat(2, 1fr) !important;gap:10px}
    .rs-kpi{padding:14px 14px}
    .rs-kpi .label{font-size:11px;white-space:normal}
    .rs-kpi .value{font-size:24px}
    .rs-kpi .delta{font-size:11px;white-space:normal;line-height:1.3}

    /* List toolbar wrap */
    .rs-list-toolbar{padding:10px 12px}
    .rs-list-toolbar .toolbar-left,
    .rs-list-toolbar .toolbar-right{flex-wrap:wrap;width:100%}

    /* Link card stack on mobile */
    .rs-link-card{grid-template-columns:auto 1fr !important;gap:10px;padding:12px}
    .rs-link-card .check{align-self:start}
    .rs-link-card .actions{display:none}
    .rs-link-card:hover .actions{display:flex}

    /* Range filter wrap */
    .rs-range{flex-wrap:wrap;gap:4px}
    .rs-range-dates{flex-wrap:wrap}

    /* Insight body */
    .rs-insight{padding:14px 16px}
    .rs-insight .body span{font-size:12px}

    /* QR grid 2 columnas en mobile (no 4) */
    .qr-grid{grid-template-columns:1fr 1fr !important;gap:10px}
    .qr-card{padding:12px}
    .qr-img{width:auto !important;max-width:100% !important;height:auto !important;aspect-ratio:1}

    /* Stats title word-break — el "saludable o ya es obsesión?" sigue desbordando */
    body[data-page="links"] .rs-page-title,
    h1.rs-page-title{
        white-space:normal !important;
        overflow-wrap:break-word !important;
        word-break:break-word !important;
        hyphens:auto;max-width:100% !important
    }

    /* Analytics period tabs: scroll horizontal en lugar de wrap a 2 filas */
    .rs-range{
        flex-wrap:nowrap !important;
        overflow-x:auto !important;
        -webkit-overflow-scrolling:touch;
        scrollbar-width:none;padding-bottom:4px
    }
    .rs-range::-webkit-scrollbar{display:none}
    .rs-range > a{flex-shrink:0 !important;scroll-snap-align:start}
    .rs-range-dates{
        flex-direction:column !important;
        gap:8px !important;width:100%;
        order:99 /* las fechas al final, después del scroll de tabs */
    }
    .rs-range-dates label{width:100%}
    .rs-range-dates input[type="date"]{width:100% !important}

    /* Settings layout: nav vertical → horizontal scroll pills en mobile */
    .set-wrap{grid-template-columns:1fr !important;gap:14px !important}
    .set-nav{
        display:flex !important;
        flex-direction:row !important;
        overflow-x:auto !important;
        position:static !important;
        gap:4px !important;padding:6px !important;
        scrollbar-width:none
    }
    .set-nav::-webkit-scrollbar{display:none}
    .set-nav a{
        flex-shrink:0 !important;
        padding:8px 12px !important;
        border-radius:20px !important;
        font-size:13px !important;
        white-space:nowrap
    }

    /* Campaigns table: scroll horizontal + ocultar columnas secundarias */
    .rs-card-padless{overflow-x:auto !important;-webkit-overflow-scrolling:touch}
    .rs-card-padless .rs-table{min-width:600px}
    /* En tablet/mobile estrecho ocultar "Enlaces" y "Período" cols */
    body[data-page="campaigns"] .rs-table th:nth-child(3),
    body[data-page="campaigns"] .rs-table td:nth-child(3),
    body[data-page="campaigns"] .rs-table th:nth-child(5),
    body[data-page="campaigns"] .rs-table td:nth-child(5){
        display:none
    }

    /* Index page-header buttons: full-width split en mobile */
    .rs-page-header > .rs-row{
        width:100%;
        flex-wrap:wrap !important
    }
    .rs-page-header > .rs-row > .rs-btn,
    .rs-page-header > .rs-row > .rs-btn-secondary{
        flex:1 1 calc(50% - 4px);
        justify-content:center !important;
        min-width:0
    }
}

/* Small — <480px — KPIs colapsan a 1col, simplificación máxima */
@media (max-width:480px){
    .rs-kpis{grid-template-columns:1fr !important}
    .rs-page-title{font-size:clamp(16px, 4.5vw, 22px) !important}
    .rs-quick-create{padding:14px 12px}
    .rs-card{padding:14px 12px}
    .rs-h-page-title-actions{flex-wrap:wrap}
}

/* ============================================================
   DARK MODE OVERRIDES — selectors que tienen colores hardcoded
   en sus declaraciones (no usan var() — por eso necesitan override).
   El 90% de la UI se adapta sola por las variables; esto es el 10%.
============================================================ */

/* Topbar — era #fff hardcoded */
[data-theme="dark"] .rs-topbar{
    background:var(--rs-card);
    border-bottom-color:var(--rs-line)
}

/* Search input — era #f7f7f4 */
[data-theme="dark"] .rs-search input{
    background:var(--rs-bg-soft);
    color:var(--rs-text);
    border-color:var(--rs-line)
}
[data-theme="dark"] .rs-search input::placeholder{color:var(--rs-text-muted)}
[data-theme="dark"] .rs-search input:focus{background:var(--rs-card)}

/* Topbar buttons + user — era #f4f1e8 hover */
[data-theme="dark"] .rs-topbar-btn{color:var(--rs-text-muted)}
[data-theme="dark"] .rs-topbar-btn:hover,
[data-theme="dark"] .rs-user:hover{
    background:var(--rs-bg-soft);
    border-color:var(--rs-line);
    color:var(--rs-text)
}

/* User dropdown */
[data-theme="dark"] .rs-user-dropdown{
    background:var(--rs-card);
    border-color:var(--rs-line);
    box-shadow:0 8px 24px rgba(0,0,0,.5)
}
[data-theme="dark"] .rs-user-dropdown a{color:var(--rs-text)}
[data-theme="dark"] .rs-user-dropdown a:hover{background:var(--rs-bg-soft)}
[data-theme="dark"] .rs-user-dropdown hr{border-color:var(--rs-line)}
[data-theme="dark"] .rs-user-dropdown a.danger{color:#f87171}

/* Buttons secondary */
[data-theme="dark"] .rs-btn-secondary{
    background:var(--rs-card);
    border-color:var(--rs-line);
    color:var(--rs-text)
}
[data-theme="dark"] .rs-btn-secondary:hover{
    background:var(--rs-bg-soft);
    border-color:var(--rs-line-strong)
}
[data-theme="dark"] .rs-btn-icon{color:var(--rs-text-muted)}
[data-theme="dark"] .rs-btn-icon:hover{
    background:var(--rs-bg-soft);
    border-color:var(--rs-line);
    color:var(--rs-text)
}
[data-theme="dark"] .rs-btn-ghost:hover{background:var(--rs-bg-soft)}

/* Cards y paneles — várias clases tienen #fff hardcoded */
[data-theme="dark"] .rs-card,
[data-theme="dark"] .rs-kpi,
[data-theme="dark"] .rs-link-card,
[data-theme="dark"] .rs-quick-create{
    background:var(--rs-card);
    border-color:var(--rs-line)
}
[data-theme="dark"] .rs-card-head{border-bottom-color:var(--rs-line)}
[data-theme="dark"] .rs-card-foot{
    background:var(--rs-bg-soft);
    border-top-color:var(--rs-line)
}

/* Tables */
[data-theme="dark"] .rs-table{background:var(--rs-card);border-color:var(--rs-line)}
[data-theme="dark"] .rs-table th{
    background:var(--rs-bg-soft);
    color:var(--rs-text-muted);
    border-bottom-color:var(--rs-line)
}
[data-theme="dark"] .rs-table td{border-bottom-color:var(--rs-line);color:var(--rs-text)}
[data-theme="dark"] .rs-table tbody tr:hover{background:rgba(255,255,255,.03)}

/* Link cards */
[data-theme="dark"] .rs-link-card:hover{border-color:var(--rs-line-strong)}
[data-theme="dark"] .rs-link-card .favicon{background:var(--rs-bg-soft)}
[data-theme="dark"] .rs-link-card .short{background:var(--rs-blue-soft);color:#7eb6ff}
[data-theme="dark"] .rs-recent-link:hover{background:rgba(255,255,255,.04);border-color:var(--rs-line)}
[data-theme="dark"] .rs-recent-link .favicon{background:var(--rs-bg-soft)}

/* Paused/expired rows en dark — usamos overlay sutil en vez de #fafafa */
[data-theme="dark"] .rs-link-card.is-paused,
[data-theme="dark"] .rs-link-card.is-expired{
    background:rgba(255,255,255,.02) !important;
    border-color:#30363d !important
}
[data-theme="dark"] .rs-link-card.is-paused .title,
[data-theme="dark"] .rs-link-card.is-expired .title{color:#7d8590 !important}
[data-theme="dark"] .rs-link-card.is-paused .long,
[data-theme="dark"] .rs-link-card.is-expired .long{color:#656d76 !important}
[data-theme="dark"] .rs-table tbody tr.is-paused,
[data-theme="dark"] .rs-table tbody tr.is-expired{background:rgba(255,255,255,.02)}

/* Checklist items (Home onboarding) */
[data-theme="dark"] .rs-checklist .item{background:var(--rs-card);border-color:var(--rs-line)}
[data-theme="dark"] .rs-checklist .item.done{background:var(--rs-bg-soft)}
[data-theme="dark"] .rs-checklist .item.done .check{background:var(--rs-accent-light);border-color:var(--rs-accent-light)}

/* Quick create AI side y insights */
[data-theme="dark"] .rs-quick-create .ai-side{
    background:linear-gradient(135deg,#1a2f23,#1c2128);
    border-color:var(--rs-line)
}
[data-theme="dark"] .rs-quick-create .ai-side button{
    background:var(--rs-card);
    border-color:var(--rs-line);
    color:var(--rs-text)
}
[data-theme="dark"] .rs-quick-create .ai-side button:hover{
    background:var(--rs-bg-soft);
    border-color:var(--rs-accent-light)
}
[data-theme="dark"] .rs-insight{
    background:linear-gradient(135deg,#1a2f23,#1c2128);
    border-color:var(--rs-line)
}
[data-theme="dark"] .rs-insight .body > strong{color:var(--rs-text)}
[data-theme="dark"] .rs-insight .body span{color:var(--rs-text-muted)}
[data-theme="dark"] .rs-insight .body span strong{color:var(--rs-text)}

/* Inputs (input y select con .rs-input) */
[data-theme="dark"] .rs-input,
[data-theme="dark"] select.rs-input,
[data-theme="dark"] input.rs-input,
[data-theme="dark"] textarea.rs-input{
    background:var(--rs-bg-soft) !important;
    border-color:var(--rs-line) !important;
    color:var(--rs-text) !important
}
[data-theme="dark"] .rs-input::placeholder,
[data-theme="dark"] input::placeholder{color:var(--rs-text-muted) !important}
[data-theme="dark"] .rs-input:focus{
    background:var(--rs-card) !important;
    border-color:var(--rs-accent-light) !important
}
[data-theme="dark"] .rs-input-prefix{
    background:var(--rs-bg-soft) !important;
    border-color:var(--rs-line) !important;
    color:var(--rs-text-muted) !important
}
/* Search input dentro de .rs-search wrapper */
[data-theme="dark"] .rs-search input{
    background:var(--rs-bg-soft) !important;
    color:var(--rs-text) !important;
    border-color:var(--rs-line) !important
}

/* Bulk action bar — tiene bg:#fff hardcoded */
[data-theme="dark"] .rs-list-toolbar{
    background:var(--rs-card) !important;
    border-color:var(--rs-line) !important
}
[data-theme="dark"] .rs-list-toolbar .count{color:var(--rs-text-muted) !important}

/* View toggle */
[data-theme="dark"] .rs-view-toggle{
    border-color:var(--rs-line);
    background:var(--rs-bg-soft)
}
[data-theme="dark"] .rs-view-toggle button{
    background:transparent;
    color:var(--rs-text-muted)
}
[data-theme="dark"] .rs-view-toggle button.on{
    background:var(--rs-accent);
    color:#fafaf6
}

/* Range filter (analytics) */
[data-theme="dark"] .rs-range a{
    background:var(--rs-card) !important;
    border-color:var(--rs-line) !important;
    color:var(--rs-text-muted) !important
}
[data-theme="dark"] .rs-range a.on{
    background:var(--rs-accent) !important;
    color:#fafaf6 !important;
    border-color:var(--rs-accent) !important
}
[data-theme="dark"] .rs-range-dates,
[data-theme="dark"] form.rs-range-dates{
    background:var(--rs-card) !important;
    border-color:var(--rs-line) !important;
    color:var(--rs-text) !important
}
[data-theme="dark"] .rs-range-dates label{color:var(--rs-text-muted) !important}
[data-theme="dark"] .rs-range-dates input[type=date],
[data-theme="dark"] input[type=date]{
    background:var(--rs-bg-soft) !important;
    border-color:var(--rs-line) !important;
    color:var(--rs-text) !important;
    color-scheme:dark
}
[data-theme="dark"] .rs-range-dates button,
[data-theme="dark"] form button[type="submit"]:not(.rs-btn){
    background:var(--rs-accent) !important;
    color:#fafaf6 !important;
    border-color:var(--rs-accent) !important
}

/* Tabs */
[data-theme="dark"] .rs-tabs{
    background:var(--rs-bg-soft);
    border-color:var(--rs-line)
}
[data-theme="dark"] .rs-tabs label{color:var(--rs-text-muted)}
[data-theme="dark"] .rs-tabs input:checked + label{
    background:var(--rs-accent) !important;
    color:#fafaf6 !important
}

/* Badges + pills */
[data-theme="dark"] .rs-pill{
    background:var(--rs-bg-soft);
    color:var(--rs-text);
    border-color:var(--rs-line)
}
/* Dark: badges con bg .18+ y color brighter para 4.5:1+ — T1·d */
[data-theme="dark"] .rs-badge-active{background:rgba(82,183,136,.18);color:#86efac}    /* 7.2:1 */
[data-theme="dark"] .rs-badge-paused{background:rgba(251,191,36,.18);color:#fde68a}    /* 9.8:1 */
[data-theme="dark"] .rs-badge-expired{background:rgba(255,255,255,.06);color:#9ca3af}  /* 6.4:1 */

/* Progress ring (Home) */
[data-theme="dark"] .rs-progress .ring .bg{stroke:#2d333b}
[data-theme="dark"] .rs-progress .ring .fg{stroke:var(--rs-accent-light)}

/* Sidebar tooltip */
[data-theme="dark"] .rs-sidebar-item:hover::after{
    background:#2d333b;
    color:#e6edf3;
    box-shadow:0 6px 18px rgba(0,0,0,.6)
}

/* Search results / dropdowns inline */
[data-theme="dark"] code{background:var(--rs-bg-soft);color:#e6edf3;border-color:var(--rs-line)}

/* Map en dark — más contraste entre países (tierra) y fronteras visibles.
   Estrategia: tierra gris-azulado (#2d3748), fronteras blanquecinas (#475569),
   océano más oscuro (#161b27) para que la tierra "salte" hacia el espectador. */
[data-theme="dark"] #world-map,
[data-theme="dark"] #world-map-global,
[data-theme="dark"] [id^="world-map"]{
    border-radius:var(--rs-radius);
    background:#161b27 !important
}
[data-theme="dark"] #world-map-global svg,
[data-theme="dark"] #world-map svg{background:transparent !important}
[data-theme="dark"] .jvm-region{
    fill:#2d3748 !important;
    stroke:#475569 !important;
    stroke-width:0.6
}
[data-theme="dark"] .jvm-region:hover{fill:#3a4658 !important}
[data-theme="dark"] .jvm-marker{
    fill:#34d399 !important;
    stroke:#0f1115 !important;
    stroke-width:1.5
}
[data-theme="dark"] .jvm-marker:hover{
    fill:#6ee7b7 !important;
    stroke:#fff !important
}
/* Map card container en dark — borde sutil para que no flote */
[data-theme="dark"] .map-wrap .rs-card{
    background:#161b27 !important;
    border:1px solid var(--rs-line)
}
/* Map tooltip más brillante en dark */
[data-theme="dark"] .jvm-tooltip{
    background:rgba(15,17,21,.95) !important;
    border:1px solid rgba(255,255,255,.12) !important;
    color:#f1f5f9 !important;
    backdrop-filter:blur(8px)
}
/* Zoom buttons del mapa (jsVectorMap) — estilo moderno en AMBOS modos.
   Por defecto vienen como texto + / − crudo. Los convertimos en botones
   redondos con stroke estilo SVG icons. */
.jvm-zoom-btn{
    width:30px !important;height:30px !important;
    background:#fff !important;color:#1a1a1a !important;
    border:1px solid #d4d4d0 !important;
    border-radius:8px !important;
    display:flex !important;align-items:center;justify-content:center;
    font-size:18px !important;font-weight:500 !important;
    line-height:1 !important;padding:0 !important;
    cursor:pointer;transition:background .12s,border-color .12s;
    box-shadow:0 1px 2px rgba(0,0,0,.04);
    /* Tabular numbers — el +/− queda centrado */
    font-family:-apple-system,BlinkMacSystemFont,Inter,sans-serif
}
.jvm-zoom-btn:hover{background:#f4f1e8 !important;border-color:#9a9080 !important}
.jvm-zoomin{top:10px !important;left:10px !important}
.jvm-zoomout{top:46px !important;left:10px !important}

/* Dark mode: botones zoom con bg card y bordes sutiles */
[data-theme="dark"] .jvm-zoom-btn{
    background:var(--rs-card) !important;
    color:var(--rs-text) !important;
    border:1px solid var(--rs-line) !important;
    box-shadow:0 1px 2px rgba(0,0,0,.3)
}
[data-theme="dark"] .jvm-zoom-btn:hover{
    background:var(--rs-bg-soft) !important;
    border-color:var(--rs-line-strong) !important
}

/* Theme toggle button — neutro, mismo peso visual que los demás topbar-btn.
   La discoverabilidad la cubre el tooltip dinámico + el icono correcto del estado.
   Width/height heredan de .rs-topbar-btn (38px). Sin overrides de color.
   Sin animaciones rotate/scale (eliminadas a petición del usuario). */
#theme-toggle:focus-visible{
    outline:2px solid var(--rs-accent-light);
    outline-offset:2px
}
/* OJO: NO usar `display:block !important` aquí — mataría el `style="display:none"`
   inline del icono opuesto (sun en light, moon en dark) y mostraría AMBOS iconos.
   Solo width/height/min-width/min-height con !important para evitar width:0 en flex. */
#theme-toggle svg{
    width:20px !important;height:20px !important;
    min-width:20px !important;min-height:20px !important;
    flex-shrink:0 !important
}

/* View-toggle SVG (Lista/Compacta/Cuadrícula buttons) — mismo fix */
.rs-view-toggle button svg{
    width:16px !important;height:16px !important;
    min-width:16px !important;min-height:16px !important;
    display:block !important;flex-shrink:0 !important
}

/* Sidebar create-btn FAB SVG — preventivo */
.rs-sidebar .create-btn svg{
    width:22px !important;height:22px !important;
    min-width:22px !important;min-height:22px !important;
    display:block !important;flex-shrink:0 !important
}

/* Topbar btns SVG — preventivo width:0 fix.
   OJO: NO usar `display:block !important` aquí — interferiría con `style="display:none"`
   inline de iconos toggleables (theme-icon-sun / theme-icon-moon). Sin !important basta. */
.rs-topbar-btn svg{
    width:18px !important;height:18px !important;
    min-width:18px !important;min-height:18px !important;
    flex-shrink:0 !important
}

/* "Cosas inteligentes" / panel side de quick-create — jerarquía consistente */
.rs-quick-create .ai-side h4{
    font-family:Fraunces,Newsreader,Georgia,serif;
    font-size:15px;font-weight:600;
    color:var(--rs-text);
    display:flex;align-items:center;gap:8px;margin:0 0 6px
}
[data-theme="dark"] .rs-quick-create .ai-side h4{color:var(--rs-text)}

/* Date pickers nativos — fuerza color-scheme y bg dark explícito */
input[type="date"],
input[type="datetime-local"],
input[type="time"]{color-scheme:light}
[data-theme="dark"] input[type="date"],
[data-theme="dark"] input[type="datetime-local"],
[data-theme="dark"] input[type="time"]{
    color-scheme:dark !important;
    background:var(--rs-bg-soft) !important;
    color:var(--rs-text) !important;
    border-color:var(--rs-line) !important
}
/* WebKit calendar picker indicator en dark */
[data-theme="dark"] input[type="date"]::-webkit-calendar-picker-indicator,
[data-theme="dark"] input[type="datetime-local"]::-webkit-calendar-picker-indicator{
    filter:invert(.85);opacity:.7;cursor:pointer
}
[data-theme="dark"] input[type="date"]::-webkit-calendar-picker-indicator:hover{opacity:1}

/* Tooltip de jsVectorMap — visible y bien contrasted en AMBOS modes */
.jvm-tooltip{
    z-index:9999 !important;
    pointer-events:none;
    box-shadow:0 8px 24px rgba(0,0,0,.18) !important
}
[data-theme="dark"] .jvm-tooltip{
    box-shadow:0 8px 24px rgba(0,0,0,.5) !important
}

/* Mapa en LIGHT mode — backgrounds + markers consistentes */
.map-wrap .rs-card{padding:0;overflow:hidden}
#world-map,
#world-map-global,
[id^="world-map"]{min-height:340px;height:380px}
#world-map svg,
#world-map-global svg,
[id^="world-map"] svg{width:100%;height:100%;display:block}

/* Legacy cards con bg hardcoded — overrides explícitos en dark.
   Estos elementos vienen de style.css de producción y no usan var(--card). */
[data-theme="dark"] .map-side,
[data-theme="dark"] .map-wrap,
[data-theme="dark"] .stat,
[data-theme="dark"] .stats-grid > div,
[data-theme="dark"] .container > .card,
[data-theme="dark"] aside.map-side{
    background:var(--rs-card) !important;
    border-color:var(--rs-line) !important;
    color:var(--rs-text)
}
[data-theme="dark"] .map-side h3,
[data-theme="dark"] aside h3{color:var(--rs-text)}
[data-theme="dark"] .bd{background:var(--rs-card) !important;border-color:var(--rs-line) !important}
[data-theme="dark"] .bd li{border-bottom-color:var(--rs-line) !important;color:var(--rs-text)}
[data-theme="dark"] .bd li .k{color:var(--rs-text)}
[data-theme="dark"] .bd li .c{color:var(--rs-text-muted)}
[data-theme="dark"] .bd li .bar-bg{background:var(--rs-bg-soft) !important}
[data-theme="dark"] .bd li .bar-bg > span{background:var(--rs-accent-light) !important}

/* QR codes en dark — fondo blanco SOLO en el .qr-img (área del PNG), card oscura.
   Marco visible alrededor del QR para que no parezca un parche flotante. */
[data-theme="dark"] .qr-card{
    background:var(--rs-card) !important;
    border-color:var(--rs-line) !important;
    color:var(--rs-text) !important
}
[data-theme="dark"] .qr-card .label{color:var(--rs-text) !important}
[data-theme="dark"] .qr-card .short{color:var(--rs-accent-light) !important}
[data-theme="dark"] .qr-card .meta-clicks{color:var(--rs-text-muted) !important}
[data-theme="dark"] .qr-card .badge-top{background:rgba(255,255,255,.06) !important;color:var(--rs-text) !important}
[data-theme="dark"] .qr-card.is-branded .badge-top{background:rgba(82,183,136,.18) !important;color:var(--rs-accent-light) !important}
[data-theme="dark"] .qr-card .platform{background:var(--rs-bg-soft) !important;border-color:var(--rs-line) !important}
[data-theme="dark"] .qr-img{
    background:#fff !important;
    border:1px solid var(--rs-line-strong) !important;
    box-shadow:0 0 0 4px rgba(255,255,255,.04)
}
[data-theme="dark"] .qr-modal-card{
    background:var(--rs-card) !important;
    color:var(--rs-text) !important
}
[data-theme="dark"] .qr-modal h3{color:var(--rs-text) !important}
[data-theme="dark"] .qr-modal .sub{color:var(--rs-text-muted) !important}
[data-theme="dark"] .qr-modal .big-qr{background:#fff !important;border-color:var(--rs-line-strong) !important}
[data-theme="dark"] .qr-modal .close-btn{background:var(--rs-bg-soft) !important;color:var(--rs-text-muted) !important}
[data-theme="dark"] .qr-modal .close-btn:hover{background:var(--rs-line) !important;color:var(--rs-text) !important}

/* Bio phone (pages.html) — separar del bg dark con un wrapper sutil */
[data-theme="dark"] .bio-phone{
    box-shadow:0 0 0 1px rgba(255,255,255,.08), 0 12px 40px rgba(0,0,0,.6) !important
}

/* Integrations cards en dark — los .logo tienen bg pastel hardcoded */
[data-theme="dark"] .int-card{
    background:var(--rs-card) !important;
    border-color:var(--rs-line) !important;
    color:var(--rs-text) !important
}
[data-theme="dark"] .int-card h4{color:var(--rs-text) !important}
[data-theme="dark"] .int-card p{color:var(--rs-text-muted) !important}
[data-theme="dark"] .int-card .logo{
    background:rgba(255,255,255,.06) !important;
    border:1px solid rgba(255,255,255,.04)
}
/* Excepción: logos con gradient propio (Meta Pixel) mantienen su color */
[data-theme="dark"] .int-card .logo[style*="gradient"]{
    background:initial !important;
    border:0
}
/* API token card en dark (era linear-gradient crema) */
[data-theme="dark"] .rs-card[style*="background:linear-gradient(135deg,#fafaf5"]{
    background:linear-gradient(135deg,var(--rs-card),var(--rs-bg-soft)) !important
}

/* Bio link card en dark (pages.html editor) */
[data-theme="dark"] .bio-link-card{
    background:var(--rs-card) !important;
    border-color:var(--rs-line) !important
}
[data-theme="dark"] .bio-link-card:hover{border-color:var(--rs-line-strong) !important}
[data-theme="dark"] .bio-link-card .ico{background:var(--rs-bg-soft) !important;color:var(--rs-text-muted) !important}
[data-theme="dark"] .bio-link-card .grip{color:var(--rs-text-muted) !important}

/* Pages editor field labels (sentence case override completo en dark) */
[data-theme="dark"] .editor-wrap label{color:var(--rs-text) !important}
[data-theme="dark"] .editor-wrap .field-hint{color:var(--rs-text-muted) !important}

/* Page subtitle adicional muted en dark */
[data-theme="dark"] .rs-page-subtitle code,
[data-theme="dark"] .rs-muted code,
[data-theme="dark"] code{background:var(--rs-bg-soft) !important;color:var(--rs-text) !important;border:1px solid var(--rs-line);padding:1px 5px;border-radius:4px;font-size:.9em}

/* Stats: scroll-chart en dark con barras visible */
[data-theme="dark"] .rs-chart-scroll{background:var(--rs-card)}
[data-theme="dark"] .bars{background:var(--rs-card) !important;border-color:var(--rs-line) !important}
[data-theme="dark"] .bars .bar .fill{background:var(--rs-accent-light) !important}
[data-theme="dark"] .bars .lab{color:var(--rs-text-muted) !important}
[data-theme="dark"] .bd li .pct{color:var(--rs-text-muted)}

/* Settings sidebar (set-nav) — items inactivos legibles, item activo NO azul */
[data-theme="dark"] .set-nav{
    background:var(--rs-card) !important;
    border-color:var(--rs-line) !important
}
[data-theme="dark"] .set-nav a{
    color:var(--rs-text-muted) !important;
    border-left:3px solid transparent !important;
    border-radius:0 8px 8px 0 !important;
    padding-left:9px !important
}
[data-theme="dark"] .set-nav a:hover{
    background:rgba(255,255,255,.04) !important;
    color:var(--rs-text) !important
}
[data-theme="dark"] .set-nav a.on{
    background:rgba(82,183,136,.12) !important;
    color:var(--rs-text) !important;
    border-left-color:var(--rs-accent-light) !important
}
[data-theme="dark"] .set-nav a.on svg{color:var(--rs-accent-light) !important}
[data-theme="dark"] .set-nav a svg{color:var(--rs-text-muted) !important}
[data-theme="dark"] .set-nav a:hover svg{color:var(--rs-text) !important}

/* Light mode también necesita el ajuste para que active no sea ese azul tan brillante */
.set-nav a.on{
    background:rgba(28,64,48,.06);
    color:var(--rs-accent);
    border-left:3px solid var(--rs-accent);
    border-radius:0 8px 8px 0;
    padding-left:9px
}
.set-nav a.on svg{color:var(--rs-accent)}

/* Inputs nativos hardcoded (#f7f7f4 era el cream del create form) */
[data-theme="dark"] input[type="url"],
[data-theme="dark"] input[type="text"]:not(.rs-input),
[data-theme="dark"] input[type="email"],
[data-theme="dark"] input[type="password"],
[data-theme="dark"] input[type="search"]:not(.rs-input),
[data-theme="dark"] textarea,
[data-theme="dark"] select:not(.rs-input){
    background:var(--rs-bg-soft) !important;
    color:var(--rs-text) !important;
    border-color:var(--rs-line) !important
}
[data-theme="dark"] input::placeholder,
[data-theme="dark"] textarea::placeholder{color:var(--rs-text-muted) !important}

/* Helper text + hints */
[data-theme="dark"] .rs-muted{color:var(--rs-text-muted)}
[data-theme="dark"] .field-hint,
[data-theme="dark"] .hint{color:var(--rs-text-muted)}

/* Banner v2 preview (solo /preview) — adaptar amber sobre dark */
[data-theme="dark"] [style*="background:#fff3cd"],
[data-theme="dark"] [style*="background: #fff3cd"]{
    background:rgba(201,120,68,.12) !important;
    border-color:#5a4423 !important
}
[data-theme="dark"] [style*="background:#fef3c7"],
[data-theme="dark"] [style*="background: #fef3c7"]{
    background:rgba(245,158,11,.12) !important;
    color:#fbbf24 !important;
    border-color:#5a4423 !important
}
