    html, body { height: 100%; overflow: hidden; font-family: 'Nunito', sans-serif; }
    body { background: var(--bg-main); color: var(--text-main); }

    /* ═══════════════════════════════════════════════════════════
       WELCOME CINEMATIC — overlay tras login exitoso
       Logo Pio escala + sparks naranjas + saludo + exit suave.
       ~2.6s total. Skippable (botón / Esc / click fuera). */
    .pf-welcome {
      position: fixed; inset: 0; z-index: 99999;
      display: flex; align-items: center; justify-content: center;
      background:
        radial-gradient(ellipse 50% 50% at 50% 50%, rgba(255, 138, 0, 0.18), transparent 60%),
        rgba(8, 12, 24, 0.92);
      backdrop-filter: blur(16px);
      -webkit-backdrop-filter: blur(16px);
      opacity: 0;
      transition: opacity 0.22s ease;
      cursor: pointer;
      overflow: hidden;
      /* GPU hints: forzar compositing layer ANTES de animar para
         evitar el jank del primer frame. Edgar: 'el inicio va
         trabado y después muy fluido' — clásico de animaciones que
         pintan en CPU el primer frame y crean su layer demasiado
         tarde. translateZ + will-change le dicen al browser
         'prepara el GPU layer YA'. */
      transform: translateZ(0);
      will-change: opacity;
    }
    .pf-welcome--in  { opacity: 1; }
    .pf-welcome--out { opacity: 0; transition: opacity 0.55s ease; }

    /* Skip button — glassmorphism premium, esquina superior derecha.
       z-index 100005 para estar sobre TODO (incluido el Pio fly y el
       popover) en cualquier fase. */
    .pf-welcome-skip {
      position: fixed; top: 22px; right: 22px;
      z-index: 2147483005;
      display: inline-flex; align-items: center; gap: 8px;
      background: rgba(255, 255, 255, 0.08);
      border: 1px solid rgba(255, 255, 255, 0.18);
      color: rgba(241, 245, 249, 0.85);
      padding: 9px 16px 9px 18px;
      border-radius: 999px;
      font-family: inherit;
      font-size: 12px; font-weight: 800;
      letter-spacing: 0.6px;
      text-transform: uppercase;
      cursor: pointer;
      backdrop-filter: blur(18px) saturate(140%);
      -webkit-backdrop-filter: blur(18px) saturate(140%);
      box-shadow:
        0 4px 16px rgba(0, 0, 0, 0.18),
        inset 0 1px 0 rgba(255, 255, 255, 0.12);
      transition: background 0.18s ease, color 0.18s ease,
                  border-color 0.18s ease, transform 0.15s ease,
                  box-shadow 0.18s ease;
      opacity: 0;
      animation: pf-welcome-skip-in 0.5s ease 1.6s forwards;
    }
    .pf-welcome-skip:hover {
      background: rgba(255, 255, 255, 0.16);
      border-color: rgba(255, 255, 255, 0.32);
      color: #FFFFFF;
      transform: translateY(-1px);
      box-shadow:
        0 8px 24px rgba(0, 0, 0, 0.28),
        inset 0 1px 0 rgba(255, 255, 255, 0.20);
    }
    .pf-welcome-skip:active { transform: translateY(0); }
    .pf-welcome-skip svg { opacity: 0.85; }
    @keyframes pf-welcome-skip-in {
      to { opacity: 1; }
    }

    /* Stage central donde viven logo + texto + sparks. translateZ
       fuerza GPU layer para que las animaciones internas tengan su
       compositing pre-armado. */
    .pf-welcome-stage {
      position: relative;
      display: flex; flex-direction: column; align-items: center;
      gap: 14px;
      max-width: 90vw;
      text-align: center;
      cursor: default;
      transform: translateZ(0);
      will-change: transform, opacity;
    }

    /* Halo radial detrás del logo — pulse cálido */
    .pf-welcome-halo {
      position: absolute;
      top: -40px; left: 50%;
      width: 280px; height: 280px;
      margin-left: -140px;
      border-radius: 50%;
      background: radial-gradient(circle, rgba(255, 138, 0, 0.45), rgba(255, 138, 0, 0.10) 40%, transparent 70%);
      filter: blur(20px);
      transform: scale(0) translateZ(0);
      animation: pf-welcome-halo 1.4s cubic-bezier(0.18, 0.89, 0.32, 1.28) 0.05s forwards,
                 pf-welcome-halo-breathe 2.4s ease-in-out 1.5s infinite;
      pointer-events: none;
      will-change: transform, opacity;
    }
    @keyframes pf-welcome-halo {
      0%   { transform: scale(0);   opacity: 0; }
      55%  { transform: scale(1.2); opacity: 1; }
      100% { transform: scale(1);   opacity: 0.85; }
    }
    @keyframes pf-welcome-halo-breathe {
      0%, 100% { opacity: 0.85; transform: scale(1); }
      50%      { opacity: 1;    transform: scale(1.08); }
    }

    /* Logo Pio — escala dramática con bounce + ligera rotación.
       Delay 0.10s (antes 0.25s) — más responsive. */
    .pf-welcome-logo {
      width: 110px; height: auto;
      position: relative;
      z-index: 2;
      transform: scale(0) rotate(-18deg) translateZ(0);
      animation: pf-welcome-logo-in 0.95s cubic-bezier(0.18, 0.89, 0.32, 1.28) 0.10s forwards,
                 pf-welcome-logo-float 3.2s ease-in-out 1.2s infinite;
      filter: drop-shadow(0 12px 30px rgba(255, 138, 0, 0.45));
      will-change: transform, opacity;
    }
    @keyframes pf-welcome-logo-in {
      0%   { transform: scale(0)    rotate(-18deg); opacity: 0; }
      55%  { transform: scale(1.18) rotate(6deg);   opacity: 1; }
      75%  { transform: scale(0.96) rotate(-2deg); }
      100% { transform: scale(1)    rotate(0);     opacity: 1; }
    }
    @keyframes pf-welcome-logo-float {
      0%, 100% { transform: translateY(0); }
      50%      { transform: translateY(-6px); }
    }

    /* Wordmark "piofly" debajo del logo */
    .pf-welcome-brand {
      position: relative;
      z-index: 2;
      display: inline-flex;
      font-size: 30px; font-weight: 900;
      letter-spacing: -0.6px;
      margin-top: -2px;
      opacity: 0;
      transform: translateY(10px);
      animation: pf-welcome-text-in 0.55s cubic-bezier(0.22, 1, 0.36, 1) 0.85s forwards;
    }
    .pf-welcome-brand span:first-child { color: #F1F5F9; }
    .pf-welcome-brand span:last-child  { color: var(--accent); }

    /* Título: "¡Bienvenido, [Nombre]!" */
    .pf-welcome-title {
      position: relative;
      z-index: 2;
      font-size: clamp(24px, 4vw, 34px);
      font-weight: 900;
      color: #F1F5F9;
      letter-spacing: -0.5px;
      margin: 18px 0 0;
      opacity: 0;
      transform: translateY(14px);
      animation: pf-welcome-text-in 0.6s cubic-bezier(0.22, 1, 0.36, 1) 1.1s forwards;
    }
    /* Sub: contextual */
    .pf-welcome-sub {
      position: relative;
      z-index: 2;
      font-size: clamp(14px, 2vw, 16.5px);
      color: rgba(241, 245, 249, 0.70);
      font-weight: 600;
      margin: 0;
      opacity: 0;
      transform: translateY(10px);
      animation: pf-welcome-text-in 0.6s cubic-bezier(0.22, 1, 0.36, 1) 1.35s forwards;
    }
    @keyframes pf-welcome-text-in {
      to { opacity: 1; transform: translateY(0); }
    }

    /* ── First-time variant: TOUR GUIADO EN 4 FASES ──
       Edgar 2026-05-29: 'que esté la bienvenida con el blur, y que
       el pajaro se mueva a la parte del tema del chat, le diga que
       le pique, y que elija un color'.

       Estructura:
         .pf-welcome--phase1 → bienvenida normal (blur fuerte, opaco)
         .pf-welcome--phase2 → Pio vuela: textos fade-out, logo se
                               traslada al botón con scale, blur reduce.
         .pf-welcome--phase3 → popover abierto + bubble + interacción.
         .pf-welcome--celebrate → click confirmado, brinco final. */

    /* FASE 1: overlay opaco. backdrop-filter arranca en 0 y sube a
       20px PROGRESIVAMENTE — es el render más caro de todo el
       cinematic y aplicarlo al instante en el primer frame causaba
       jank perceptible. Con transition de 0.50s con 0.10s delay, el
       primer frame es barato (sin blur) y el blur se construye
       después de que el overlay ya hizo fade-in. */
    .pf-welcome--firsttime.pf-welcome--phase1 {
      background:
        radial-gradient(ellipse 70% 70% at 50% 45%, rgba(255, 138, 0, 0.18), transparent 60%),
        rgba(8, 12, 24, 0.88);
      backdrop-filter: blur(0px);
      -webkit-backdrop-filter: blur(0px);
      transition: background 0.40s ease,
                  backdrop-filter 0.50s ease 0.10s,
                  -webkit-backdrop-filter 0.50s ease 0.10s;
    }
    .pf-welcome--firsttime.pf-welcome--phase1.pf-welcome--in {
      backdrop-filter: blur(20px);
      -webkit-backdrop-filter: blur(20px);
    }
    /* Variant: title + sub un poco más grandes */
    .pf-welcome--firsttime .pf-welcome-title {
      font-size: clamp(28px, 4.5vw, 38px);
    }
    .pf-welcome--firsttime .pf-welcome-sub {
      max-width: 460px;
      margin: 8px auto 0;
      line-height: 1.5;
    }

    /* ═══════════════════════════════════════════════════════
       FASE TOUR — Edgar 2026-05-29: 'que vaya hasta temas del chat
       y te paseé por todo mi dashboard'. Tour multi-paso (welcome
       → feed → sidebar → header → resumen → chat → themes).
       Overlay completamente transparente (sin tinte), highlight
       ring naranja sobre cada target.
    ═══════════════════════════════════════════════════════ */
    .pf-welcome--firsttime.pf-welcome--phase-tour {
      background: transparent;
      backdrop-filter: none;
      -webkit-backdrop-filter: none;
      pointer-events: auto;
      cursor: default;
      transition: background 0.45s ease;
    }
    /* Dim del resto del dashboard se aplica vía box-shadow gigante en
       .pf-tour-highlight (spotlight pattern). El overlay se queda
       transparente para no doblar el dim. Si el paso NO tiene target
       (welcome o si el target está hidden), no hay spotlight y el
       overlay phase-tour queda 100% transparente — correcto, porque
       la fase 1 (welcome) ya tiene su propio blur+dim. */
    .pf-welcome--firsttime.pf-welcome--phase-tour .pf-welcome-stage {
      opacity: 0;
      transform: scale(0.94);
      transition: opacity 0.45s ease, transform 0.55s cubic-bezier(0.22, 1, 0.36, 1);
      pointer-events: none;
    }
    .pf-welcome--firsttime.pf-welcome--phase-tour .pf-welcome-stage * {
      animation-play-state: paused !important;
    }

    /* HIGHLIGHT RING + SPOTLIGHT DIM — Edgar: 'cuando se está
       presentando la sección específica de cada paso que el resto
       de la web como que se oscurezca un poco para hacer un poquito
       más de énfasis en los pasos'.

       Técnica clásica: box-shadow con spread gigante (9999px) en
       color oscuro semitransparente → todo lo que está fuera del
       rectángulo del highlight queda oscurecido, el interior queda
       NÍTIDO. El target detrás del highlight se ve perfecto, el
       resto del dashboard queda apagado. */
    .pf-tour-highlight {
      position: fixed;
      z-index: 2147483000;
      pointer-events: none;
      border-radius: 16px;
      background: transparent;
      box-shadow:
        0 0 0 9999px rgba(8, 12, 24, 0.62),  /* dim circundante */
        inset 0 0 0 3px rgba(255, 138, 0, 0.85),  /* ring interno */
        inset 0 0 30px rgba(255, 138, 0, 0.18),  /* glow interno suave */
        0 0 60px rgba(255, 138, 0, 0.40);  /* glow externo */
      transition:
        left 0.55s cubic-bezier(0.22, 1, 0.36, 1),
        top 0.55s cubic-bezier(0.22, 1, 0.36, 1),
        width 0.55s cubic-bezier(0.22, 1, 0.36, 1),
        height 0.55s cubic-bezier(0.22, 1, 0.36, 1),
        opacity 0.32s ease;
      animation: pf-tour-highlight-pulse 2.6s ease-in-out infinite;
    }
    @keyframes pf-tour-highlight-pulse {
      0%, 100% {
        box-shadow:
          0 0 0 9999px rgba(8, 12, 24, 0.62),
          inset 0 0 0 3px rgba(255, 138, 0, 0.85),
          inset 0 0 30px rgba(255, 138, 0, 0.18),
          0 0 60px rgba(255, 138, 0, 0.40);
      }
      50% {
        box-shadow:
          0 0 0 9999px rgba(8, 12, 24, 0.62),
          inset 0 0 0 3px rgba(255, 138, 0, 0.95),
          inset 0 0 40px rgba(255, 138, 0, 0.28),
          0 0 80px rgba(255, 138, 0, 0.55);
      }
    }
    .pf-tour-highlight.is-leaving {
      opacity: 0;
      transition: opacity 0.32s ease;
    }

    /* NAVEGACIÓN DEL TOUR — bottom center. Glassmorphism + dots de
       progreso + botones prev/next. Edgar 2026-06-30: en mobile sube
       a posición mid en pasos chat/themes con MOVIMIENTO ANIMADO
       (transition), no fade in/out. */
    .pf-tour-nav {
      position: fixed;
      bottom: 32px;
      left: 50%;
      transform: translateX(-50%);
      z-index: 2147483006;
      max-width: calc(100vw - 32px);
      display: flex;
      align-items: center;
      gap: 16px;
      padding: 10px 14px;
      background: rgba(15, 23, 42, 0.85);
      border: 1px solid rgba(255, 255, 255, 0.12);
      border-radius: 999px;
      backdrop-filter: blur(20px) saturate(140%);
      -webkit-backdrop-filter: blur(20px) saturate(140%);
      box-shadow:
        0 12px 32px rgba(0, 0, 0, 0.40),
        inset 0 1px 0 rgba(255, 255, 255, 0.12);
      opacity: 0;
      animation: pf-tour-nav-in 0.55s cubic-bezier(0.34, 1.56, 0.64, 1) 0.30s forwards;
      /* Transition para el movimiento ENTRE posiciones (no in/out).
         Usa bottom porque calc() permite numérico en ambos states. */
      transition: bottom 0.65s cubic-bezier(0.45, 0.05, 0.20, 1);
    }
    /* MOBILE: sube el nav encima del chat-bar y compacta tamaño */
    @media (max-width: 760px) {
      .pf-tour-nav {
        bottom: 88px;
        padding: 8px 10px;
        gap: 10px;
      }
      .pf-tour-nav-btn { width: 34px; height: 34px; }
      .pf-tour-next { padding: 0 12px; min-width: 30px; }
      .pf-tour-dot { width: 7px; height: 7px; }
      /* Paso 6 (themes): Edgar 'bajalo más' (iter 4): 470 → 560px.
         Ahora el nav está casi pegado al bubble (zona low del viewport). */
      .pf-tour-nav--top {
        bottom: calc(100vh - 560px) !important;
      }
      /* Paso 5 (chat) — Edgar 2026-06-30: tour-nav sube a 140px para
         dejar GAP visible entre nav y chat-bar (~76px de aire). El
         chat-bar abajo queda completamente libre y visible. */
      .pf-tour-nav--mid {
        bottom: 140px !important;
      }
    }
    @keyframes pf-tour-nav-in {
      from { opacity: 0; transform: translateX(-50%) translateY(12px); }
      to   { opacity: 1; transform: translateX(-50%) translateY(0); }
    }
    .pf-tour-nav.is-leaving {
      opacity: 0;
      transform: translateX(-50%) translateY(8px);
      transition: opacity 0.25s ease, transform 0.30s ease;
      animation: none;
    }
    .pf-tour-nav-btn {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      width: 40px;
      height: 40px;
      padding: 0;
      background: rgba(255, 255, 255, 0.08);
      border: 1px solid rgba(255, 255, 255, 0.14);
      color: rgba(241, 245, 249, 0.92);
      border-radius: 50%;
      cursor: pointer;
      transition: all 0.18s ease;
    }
    .pf-tour-nav-btn:hover:not(:disabled) {
      background: var(--accent);
      border-color: var(--accent);
      color: #FFFFFF;
      transform: scale(1.06);
      box-shadow: var(--shadow-accent);
    }
    .pf-tour-nav-btn:active:not(:disabled) { transform: scale(0.96); }
    .pf-tour-nav-btn:disabled {
      opacity: 0.35;
      cursor: not-allowed;
    }
    .pf-tour-next {
      min-width: 36px;
      width: auto;
      padding: 0 14px;
      gap: 6px;
    }
    .pf-tour-dots {
      display: flex;
      align-items: center;
      gap: 8px;
    }
    .pf-tour-dot {
      width: 8px;
      height: 8px;
      border-radius: 50%;
      background: rgba(255, 255, 255, 0.20);
      transition: all 0.20s ease;
      cursor: pointer;
    }
    .pf-tour-dot.is-done {
      background: color-mix(in srgb, var(--accent) 55%, transparent);
    }
    .pf-tour-dot.is-active {
      background: var(--accent);
      transform: scale(1.50);
      box-shadow: 0 0 12px color-mix(in srgb, var(--accent) 80%, transparent);
    }
    .pf-tour-dot:hover {
      transform: scale(1.30);
      background: color-mix(in srgb, var(--accent) 85%, transparent);
    }

    /* BUBBLE TAILS — la cola del bubble cambia según donde está el
       Pio respecto al bubble. La cola siempre apunta HACIA Pio. */
    .pf-welcome-bubble-tail {
      position: absolute;
      width: 22px;
      height: 12px;
      background: #FFB85C;
      filter: drop-shadow(0 4px 6px rgba(255, 105, 0, 0.30));
      transition: all 0.20s ease;
    }
    .pf-welcome-bubble--bottom .pf-welcome-bubble-tail {
      bottom: -10px; left: 50%; margin-left: -11px;
      clip-path: polygon(0 0, 100% 0, 50% 100%);
    }
    .pf-welcome-bubble--top .pf-welcome-bubble-tail {
      top: -10px; left: 50%; margin-left: -11px;
      clip-path: polygon(50% 0, 0 100%, 100% 100%);
    }
    .pf-welcome-bubble--left .pf-welcome-bubble-tail {
      left: -10px; top: 50%; margin-top: -6px;
      width: 12px; height: 22px;
      background: linear-gradient(135deg, #FF6B00 0%, #FF8A00 60%, #FFB85C 100%);
      clip-path: polygon(0 50%, 100% 0, 100% 100%);
    }
    .pf-welcome-bubble--right .pf-welcome-bubble-tail {
      right: -10px; top: 50%; margin-top: -6px;
      left: auto;
      width: 12px; height: 22px;
      background: linear-gradient(135deg, #FF6B00 0%, #FF8A00 60%, #FFB85C 100%);
      clip-path: polygon(100% 50%, 0 0, 0 100%);
    }

    /* TYPEWRITER caret — el cursor pulsante mientras Pio "escribe" */
    .pf-typewriter-caret {
      display: inline-block;
      width: 3px;
      height: 0.95em;
      vertical-align: text-bottom;
      background: currentColor;
      margin-left: 2px;
      border-radius: 1px;
      animation: pf-caret-blink 0.95s steps(2, end) infinite;
      opacity: 0.85;
    }
    .pf-typewriter-caret.is-done {
      animation: pf-caret-fade 0.85s ease forwards;
    }
    @keyframes pf-caret-blink {
      50% { opacity: 0; }
    }
    @keyframes pf-caret-fade {
      to { opacity: 0; width: 0; margin: 0; }
    }

    /* Stagger reveal de cards/divider/upload del welcome-state */
    .pf-fade-in {
      opacity: 0;
      animation: pf-fade-in 0.55s cubic-bezier(0.22, 1, 0.36, 1) forwards;
    }
    @keyframes pf-fade-in {
      to { opacity: 1; }
    }
    .pf-stagger-in {
      opacity: 0;
      transform: translateY(14px) scale(0.96);
      animation: pf-stagger-in 0.50s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
    }
    @keyframes pf-stagger-in {
      to { opacity: 1; transform: translateY(0) scale(1); }
    }

    /* FASE 2/3 (legacy, ya no se usan los nombres pero las clases
       sobreviven en el theme picker). Mantengo selectores genéricos
       para el último paso (themes). */
    .pf-welcome--firsttime.pf-welcome--phase-tour.pf-welcome--celebrate ~ .pf-welcome-bubble {
      opacity: 0;
      transition: opacity 0.25s ease;
    }
    /* FASE 2/3: blur off, tinte oscuro sutil, dashboard nítido.
       Edgar 2026-05-29: el overlay TIENE pointer-events:auto para
       BLOQUEAR clicks fuera del popover/skip. Si el user clickea el
       área transparente del overlay → no pasa nada (no se escapa
       el click al dashboard). Patrón de modal foco-trapped tipo
       Stripe/Linear/Notion. Antes era pointer-events:none → el user
       podía clickear cards/botones detrás y el onboarding quedaba
       fantasma encima. Bug crítico. */
    .pf-welcome--firsttime.pf-welcome--phase2,
    .pf-welcome--firsttime.pf-welcome--phase3 {
      background: rgba(8, 12, 24, 0.22);
      backdrop-filter: none;
      -webkit-backdrop-filter: none;
      pointer-events: auto;
      cursor: default;
      transition: background 0.45s ease;
    }
    /* Click en el área transparente del overlay (fuera del popover/
       skip) → el popover hace un shake sutil para guiar al user:
       'tienes que elegir o saltar'. JS añade .pf-shake al popover. */
    .sys-themes-popover.pf-shake {
      animation: pf-popover-shake 0.45s cubic-bezier(0.36, 0.07, 0.19, 0.97) !important;
    }
    @keyframes pf-popover-shake {
      0%, 100% { transform: translateX(0); }
      15%      { transform: translateX(-6px); }
      30%      { transform: translateX(6px); }
      45%      { transform: translateX(-4px); }
      60%      { transform: translateX(4px); }
      75%      { transform: translateX(-2px); }
      90%      { transform: translateX(2px); }
    }

    /* Stage (texto + logo viejo del centro) hace fade-out completo en
       fase 2. El logo del stage YA NO se mueve al picker — vive como
       elemento separado .pf-welcome-pio-fly. Aquí solo desvanecemos. */
    .pf-welcome--firsttime.pf-welcome--phase2 .pf-welcome-stage,
    .pf-welcome--firsttime.pf-welcome--phase3 .pf-welcome-stage {
      opacity: 0;
      transform: scale(0.94);
      transition: opacity 0.45s ease, transform 0.55s cubic-bezier(0.22, 1, 0.36, 1);
      pointer-events: none;
    }
    .pf-welcome--firsttime.pf-welcome--phase2 .pf-welcome-stage *,
    .pf-welcome--firsttime.pf-welcome--phase3 .pf-welcome-stage * {
      animation-play-state: paused !important;
    }

    /* ═══════════════════════════════════════════════
       PIO FLY — el Pio que vuela al picker.
       Vive FUERA del overlay (en document.body) con
       position:fixed + z-index alto. Ya no queda
       'debajo' del popover (era el bug de Edgar).
    ═══════════════════════════════════════════════ */
    .pf-welcome-pio-fly {
      position: fixed;
      /* z-index máximo signed int 32-bit — supera CUALQUIER otro elemento
         del dashboard y CUALQUIER stacking context creado por filter/
         transform en elementos del paso. Edgar reportó que Pio se veía
         'detrás del box del paso' — esto lo blinda.
         Edgar 2026-06-26: subido a 2147483006 (arriba del bubble 2147483002)
         para que Pio NUNCA quede tapado por el card del paso. */
      z-index: 2147483006;
      width: 110px;
      height: auto;
      transform: translate(-50%, -50%);
      pointer-events: none;
      opacity: 0;
      filter:
        drop-shadow(0 0 30px rgba(255, 138, 0, 0.85))
        drop-shadow(0 10px 22px rgba(255, 138, 0, 0.40));
      transition:
        left 1.20s cubic-bezier(0.22, 1, 0.36, 1),
        top 1.20s cubic-bezier(0.22, 1, 0.36, 1),
        width 1.20s cubic-bezier(0.22, 1, 0.36, 1),
        opacity 0.32s ease;
      will-change: left, top, width;
    }
    .pf-welcome-pio-fly.is-visible { opacity: 1; }
    .pf-welcome-pio-fly.is-bobbing {
      animation: pf-pio-bob 2.0s ease-in-out infinite;
    }
    @keyframes pf-pio-bob {
      0%, 100% { transform: translate(-50%, -50%) translateY(0); }
      50%      { transform: translate(-50%, calc(-50% - 5px)); }
    }
    .pf-welcome-pio-fly.is-celebrating {
      animation: pf-pio-celebrate 0.55s cubic-bezier(0.34, 1.56, 0.64, 1) !important;
    }
    @keyframes pf-pio-celebrate {
      0%   { transform: translate(-50%, -50%) rotate(0); }
      40%  { transform: translate(-50%, calc(-50% - 26px)) rotate(-14deg); }
      70%  { transform: translate(-50%, calc(-50% - 12px)) rotate(8deg); }
      100% { transform: translate(-50%, -50%) rotate(0); }
    }
    .pf-welcome-pio-fly.is-leaving {
      opacity: 0;
      transition: opacity 0.32s ease;
    }

    /* Halo dedicado que viaja PEGADO al Pio fly. Aparece al iniciar
       fase 2, pulsa en fase 3 cuando aterriza. Su position es la
       misma del Pio fly (centro), z-index uno menos para quedar
       detrás de Pio pero encima de overlay/popover. */
    .pf-welcome-pio-halo {
      position: fixed;
      /* Edgar 2026-06-26: halo va PEGADO al pio (que ahora es 2147483006),
         por debajo de él pero arriba del bubble. */
      z-index: 2147483005;
      width: 160px;
      height: 160px;
      transform: translate(-50%, -50%);
      pointer-events: none;
      border-radius: 50%;
      background: radial-gradient(circle,
        rgba(255, 138, 0, 0.45) 0%,
        rgba(255, 138, 0, 0.18) 35%,
        transparent 70%);
      filter: blur(16px);
      opacity: 0;
      transition:
        left 1.20s cubic-bezier(0.22, 1, 0.36, 1),
        top 1.20s cubic-bezier(0.22, 1, 0.36, 1),
        opacity 0.45s ease;
    }
    .pf-welcome-pio-halo.is-visible { opacity: 1; }
    .pf-welcome-pio-halo.is-pulsing {
      animation: pf-halo-pulse 2.4s ease-in-out infinite;
    }
    @keyframes pf-halo-pulse {
      0%, 100% { transform: translate(-50%, -50%) scale(1);    opacity: 0.85; }
      50%      { transform: translate(-50%, -50%) scale(1.18); opacity: 1; }
    }
    .pf-welcome-pio-halo.is-celebrating {
      animation: pf-halo-celebrate 0.55s ease-out !important;
    }
    @keyframes pf-halo-celebrate {
      0%   { transform: translate(-50%, -50%) scale(1);    opacity: 0.85; }
      50%  { transform: translate(-50%, -50%) scale(2.20); opacity: 1; }
      100% { transform: translate(-50%, -50%) scale(1);    opacity: 0.85; }
    }
    .pf-welcome-pio-halo.is-leaving {
      opacity: 0;
      transition: opacity 0.32s ease;
    }

    /* ═══════════════════════════════════════════════
       BUBBLE PREMIUM — Glassmorphism + label + texto +
       tail triangular limpio. Multi-layer shadows.

       Edgar 2026-06-26: bubble queda DEBAJO de Pio (z 2147483002 vs Pio 2147483006).
       Antes el card tapaba a la mascota cuando llegaba antes.
       Además se le añadió transition de left/top sincronizada con la del pio-fly
       (1.20s mismo easing) para que viajen JUNTOS y nunca llegue uno antes que otro.
    ═══════════════════════════════════════════════ */
    .pf-welcome-bubble {
      position: fixed;
      z-index: 2147483002;
      width: 270px;
      background: linear-gradient(135deg, #FF6B00 0%, #FF8A00 60%, #FFB85C 100%);
      color: #FFFFFF;
      border-radius: 18px;
      box-shadow:
        0 18px 50px rgba(255, 105, 0, 0.40),
        0 6px 14px rgba(0, 0, 0, 0.20),
        inset 0 1px 0 rgba(255, 255, 255, 0.30),
        inset 0 -1px 0 rgba(0, 0, 0, 0.10);
      pointer-events: none;
      opacity: 0;
      transform: translateY(10px) scale(0.94);
      animation: pf-welcome-bubble-in 0.50s cubic-bezier(0.34, 1.56, 0.64, 1) 0.55s forwards;
      transition:
        left 1.20s cubic-bezier(0.22, 1, 0.36, 1),
        top  1.20s cubic-bezier(0.22, 1, 0.36, 1);
      will-change: left, top;
    }
    @keyframes pf-welcome-bubble-in {
      to { opacity: 1; transform: translateY(0) scale(1); }
    }
    .pf-welcome-bubble.is-leaving {
      opacity: 0;
      transform: translateY(-6px) scale(0.96);
      animation: none;
      transition: opacity 0.25s ease, transform 0.30s ease;
    }
    .pf-welcome-bubble-inner {
      padding: 14px 18px 15px;
      display: flex;
      flex-direction: column;
      gap: 4px;
    }
    .pf-welcome-bubble-label {
      display: inline-flex;
      align-items: center;
      gap: 7px;
      font-size: 11px;
      font-weight: 800;
      letter-spacing: 1.4px;
      text-transform: uppercase;
      color: rgba(255, 255, 255, 0.92);
    }
    /* Contador de paso: 1/7 — push a la derecha del label con
       margin-left:auto. Subtle pero visible. */
    .pf-welcome-bubble-counter {
      margin-left: auto;
      padding: 2px 7px;
      background: rgba(255, 255, 255, 0.20);
      border-radius: 999px;
      font-size: 10px;
      font-weight: 900;
      letter-spacing: 0.5px;
      color: rgba(255, 255, 255, 0.95);
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15);
    }
    .pf-welcome-bubble-dot {
      width: 6px;
      height: 6px;
      border-radius: 50%;
      background: #FFFFFF;
      box-shadow: 0 0 10px rgba(255, 255, 255, 0.85);
      animation: pf-bubble-dot 1.5s ease-in-out infinite;
    }
    @keyframes pf-bubble-dot {
      0%, 100% { transform: scale(1);   opacity: 1;   }
      50%      { transform: scale(1.4); opacity: 0.65; }
    }
    .pf-welcome-bubble-text {
      display: block;
      font-size: 16px;
      font-weight: 800;
      letter-spacing: -0.30px;
      line-height: 1.30;
      color: #FFFFFF;
      text-shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
    }
    /* Tail triangular limpio (clip-path), apunta hacia abajo */
    .pf-welcome-bubble-tail {
      position: absolute;
      bottom: -10px;
      left: 50%;
      margin-left: -11px;
      width: 22px;
      height: 12px;
      background: #FFB85C;
      clip-path: polygon(0 0, 100% 0, 50% 100%);
      filter: drop-shadow(0 4px 6px rgba(255, 105, 0, 0.30));
    }

    /* ═══════════════════════════════════════════════
       POPOVER ring premium — pulse naranja prominente
       para guiar el ojo al picker. Ring sólido interno
       + glow expansivo animado.
    ═══════════════════════════════════════════════ */
    .sys-themes-popover.is-onboarding-pulse {
      box-shadow:
        0 0 0 2px rgba(255, 138, 0, 0.75),
        0 24px 60px rgba(0, 0, 0, 0.40),
        0 0 80px rgba(255, 138, 0, 0.25);
      animation: pf-popover-pulse 2.2s ease-in-out infinite;
    }
    @keyframes pf-popover-pulse {
      0%, 100% {
        box-shadow:
          0 0 0 2px rgba(255, 138, 0, 0.70),
          0 24px 60px rgba(0, 0, 0, 0.40),
          0 0 0 0 rgba(255, 138, 0, 0.55);
      }
      50% {
        box-shadow:
          0 0 0 2px rgba(255, 138, 0, 0.90),
          0 24px 60px rgba(0, 0, 0, 0.40),
          0 0 0 16px rgba(255, 138, 0, 0);
      }
    }
    /* Swatches durante el onboarding: hover mejorado con ring */
    .sys-themes-popover.is-onboarding-pulse .sys-themes-color-tile {
      transition: transform 0.18s cubic-bezier(0.34, 1.56, 0.64, 1),
                  box-shadow 0.18s ease;
    }
    .sys-themes-popover.is-onboarding-pulse .sys-themes-color-tile:hover {
      transform: scale(1.18) translateY(-2px);
      box-shadow:
        0 0 0 3px rgba(255, 255, 255, 0.18),
        0 0 0 6px var(--tile-color, rgba(255, 138, 0, 0.55)),
        0 8px 20px rgba(0, 0, 0, 0.30);
    }

    /* FASE 4: celebración — el overlay se desvanece, el bubble sale */
    .pf-welcome--celebrate .pf-welcome-bubble,
    .pf-welcome--celebrate ~ .pf-welcome-bubble {
      opacity: 0;
      transform: translateY(-6px) scale(0.96);
      transition: opacity 0.25s ease, transform 0.30s ease;
    }

    /* Pulse contextual sobre la card destino al cerrar el welcome.
       Aplicado por JS según ?intro=business|idea. Se autorremueve a
       los ~3.2s. */
    .pf-onboarding-pulse {
      position: relative;
      animation: pf-card-pulse 1.4s ease-in-out 3;
    }
    @keyframes pf-card-pulse {
      0%, 100% {
        box-shadow: 0 0 0 0 rgba(255, 138, 0, 0);
        transform: scale(1);
      }
      35% {
        box-shadow: 0 0 0 6px rgba(255, 138, 0, 0.45),
                    0 12px 28px rgba(255, 138, 0, 0.32);
        transform: scale(1.025);
      }
    }

    /* Container de las 14 chispas */
    .pf-welcome-sparks {
      position: absolute;
      top: 30px; left: 50%;
      width: 0; height: 0;
      pointer-events: none;
      z-index: 1;
    }
    /* Cada chispa: punto que sale desde el centro hacia un ángulo */
    .pf-welcome-spark {
      position: absolute; top: 0; left: 0;
      width: var(--size); height: var(--size);
      margin: calc(var(--size) * -0.5) 0 0 calc(var(--size) * -0.5);
      background: #FFA333;
      border-radius: 50%;
      box-shadow: 0 0 12px rgba(255, 138, 0, 0.85);
      opacity: 0;
      animation: pf-welcome-spark var(--dur) cubic-bezier(0.22, 1, 0.36, 1) var(--delay) forwards;
    }
    @keyframes pf-welcome-spark {
      0%   { opacity: 0; transform: rotate(var(--angle)) translateX(0)            scale(0.5); }
      20%  { opacity: 1; }
      100% { opacity: 0; transform: rotate(var(--angle)) translateX(var(--dist)) scale(0.2); }
    }

    /* Móvil: logo más pequeño, halo proporcional */
    @media (max-width: 520px) {
      .pf-welcome-logo  { width: 88px; }
      .pf-welcome-halo  { width: 220px; height: 220px; margin-left: -110px; top: -30px; }
      .pf-welcome-brand { font-size: 26px; }
      .pf-welcome-skip  { top: 14px; right: 14px; padding: 7px 14px; }
    }


    /* ═══════════════════════════════════════════════════════════
       GOODBYE CINEMATIC — variante del welcome al cerrar sesión.
       Reusamos toda la estructura/keyframes; solo retocamos el
       fondo para que se sienta más "noche que cae" (azul más
       profundo, halo más tenue). */
    .pf-welcome--goodbye {
      background:
        radial-gradient(ellipse 50% 50% at 50% 50%, rgba(255, 138, 0, 0.12), transparent 60%),
        rgba(5, 8, 18, 0.96);
    }
    .pf-welcome--goodbye .pf-welcome-halo {
      background: radial-gradient(circle, rgba(255, 138, 0, 0.32), rgba(255, 138, 0, 0.06) 40%, transparent 70%);
    }

    /* ═══════════════════════════════════════════════════════════
       STREAK CINEMATIC — felicita al subir de racha.
       Reusa el overlay/halo/sparks del welcome, agrega flama grande
       arriba y número con count-up. */
    .pf-streak-flame {
      position: relative;
      z-index: 2;
      font-size: 64px;
      line-height: 1;
      color: #FF8A00;
      text-shadow:
        0 0 22px rgba(255, 138, 0, 0.65),
        0 0 44px rgba(255, 138, 0, 0.35);
      transform: scale(0) rotate(-12deg);
      animation: pf-streak-flame-in 0.85s cubic-bezier(0.18, 0.89, 0.32, 1.28) 0.2s forwards,
                 pf-streak-flame-flicker 1.4s ease-in-out 1.2s infinite;
    }
    .pf-streak-flame i { display: block; }
    @keyframes pf-streak-flame-in {
      0%   { opacity: 0; transform: scale(0)    rotate(-12deg); }
      55%  { opacity: 1; transform: scale(1.22) rotate(8deg); }
      80%  { transform: scale(0.96) rotate(-3deg); }
      100% { opacity: 1; transform: scale(1)    rotate(0); }
    }
    @keyframes pf-streak-flame-flicker {
      0%, 100% { transform: scale(1)    rotate(0);     filter: brightness(1); }
      50%      { transform: scale(1.05) rotate(-2deg); filter: brightness(1.15); }
    }
    .pf-streak-number {
      position: relative;
      z-index: 2;
      font-size: clamp(72px, 11vw, 110px);
      font-weight: 900;
      letter-spacing: -3px;
      color: #FFFFFF;
      line-height: 1;
      margin: 6px 0 2px;
      opacity: 0;
      transform: translateY(14px);
      animation: pf-welcome-text-in 0.45s cubic-bezier(0.22, 1, 0.36, 1) 0.55s forwards;
      text-shadow: 0 6px 26px rgba(255, 138, 0, 0.45);
      font-variant-numeric: tabular-nums;
    }
    /* Bump cuando termina el count-up — celebra que llegó al número final.
       CRÍTICO: este selector OVERRIDE el `animation` del selector base
       (pf-welcome-text-in). Si la nueva animation no tiene `forwards` y
       sus keyframes no preservan opacity:1 + translateY(0), el número se
       queda en el estado base del selector (opacity:0 + translateY(14px))
       → desaparece. Aquí preservamos ambos explícitamente. */
    .pf-streak-number--landed {
      animation: pf-streak-number-bump 0.45s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
    }
    @keyframes pf-streak-number-bump {
      0%   { opacity: 1; transform: translateY(0) scale(1);    }
      50%  { opacity: 1; transform: translateY(0) scale(1.12); }
      100% { opacity: 1; transform: translateY(0) scale(1);    }
    }
    .pf-streak-unit {
      position: relative;
      z-index: 2;
      font-size: clamp(13px, 1.6vw, 15px);
      font-weight: 800;
      letter-spacing: 1.4px;
      text-transform: uppercase;
      color: rgba(255, 163, 51, 0.85);
      margin: 0 0 6px;
      opacity: 0;
      transform: translateY(8px);
      animation: pf-welcome-text-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) 0.8s forwards;
    }
    .pf-streak-title {
      margin-top: 14px;
    }
    /* En el streak, el halo y los sparks usan posición específica para
       acomodar la flama arriba (no el logo). */
    .pf-streak .pf-welcome-halo {
      top: -10px;
      width: 320px; height: 320px;
      margin-left: -160px;
    }
    .pf-streak .pf-welcome-sparks {
      top: 50px;
    }

    /* Mientras el número vuela al header, el resto del overlay se desvanece
       suavemente — el ojo sigue al número que viaja. La flama se queda un
       beat más para anclar emocionalmente. */
    .pf-streak--flying-out .pf-welcome-halo,
    .pf-streak--flying-out .pf-welcome-sparks,
    .pf-streak--flying-out .pf-streak-unit,
    .pf-streak--flying-out .pf-welcome-title,
    .pf-streak--flying-out .pf-welcome-sub,
    .pf-streak--flying-out .pf-welcome-skip {
      opacity: 0;
      transition: opacity 0.35s ease-out;
    }
    .pf-streak--flying-out .pf-streak-flame {
      opacity: 0;
      transform: scale(0.85);
      transition: opacity 0.5s ease-out 0.15s, transform 0.5s cubic-bezier(0.55,0,0.55,1) 0.15s;
    }

    /* ════════════════════════════════════════════════════
       RACHA PERDIDA — variant empático del streak cinematic.
       Edgar: 'ponme la de racha perdida porque yo ya perdí
       mi racha pero no me salió nada'.

       NO es punitivo. El user ya se siente mal por perderla;
       Pio reconoce la pérdida con cariño. Paleta SLATE/azul
       en lugar de naranja brillante: respiración, no celebración.
    ════════════════════════════════════════════════════ */
    .pf-streak.pf-streak-lost .pf-welcome-halo {
      background: radial-gradient(circle,
        rgba(148, 163, 184, 0.32),
        rgba(100, 116, 139, 0.10) 40%,
        transparent 70%) !important;
    }
    .pf-streak-lost .pf-streak-flame {
      color: #64748B;
      text-shadow:
        0 0 16px rgba(100, 116, 139, 0.45),
        0 0 30px rgba(148, 163, 184, 0.20);
      opacity: 0.65;
    }
    .pf-streak-lost .pf-streak-number {
      color: rgba(241, 245, 249, 0.62);
      text-shadow: 0 4px 20px rgba(100, 116, 139, 0.35);
    }
    .pf-streak-lost .pf-streak-unit {
      color: rgba(148, 163, 184, 0.75);
    }
    .pf-streak-lost .pf-streak-title {
      color: #E2E8F0;
    }
    .pf-streak-lost .pf-welcome-sub {
      color: rgba(203, 213, 225, 0.78);
      max-width: 460px;
      margin: 10px auto 0;
      line-height: 1.55;
    }
    /* Sparks más sutiles + más lentas */
    .pf-streak-lost .pf-welcome-spark {
      background: #94A3B8;
      box-shadow: 0 0 8px rgba(148, 163, 184, 0.55);
      opacity: 0.55;
    }

    /* CTA "Empezar de nuevo" */
    .pf-streak-lost-cta {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      padding: 12px 24px;
      margin-top: 22px;
      background: var(--accent);
      color: #FFFFFF;
      border: none;
      border-radius: var(--r-md);
      font-family: inherit;
      font-size: 14px;
      font-weight: 800;
      cursor: pointer;
      box-shadow: var(--shadow-accent);
      transition: var(--tr);
      opacity: 0;
      transform: translateY(10px);
      animation: pf-welcome-text-in 0.55s cubic-bezier(0.22, 1, 0.36, 1) 1.4s forwards;
    }
    .pf-streak-lost-cta:hover {
      background: var(--accent-mid);
      transform: translateY(-1px);
      box-shadow: 0 8px 22px color-mix(in srgb, var(--accent) 38%, transparent);
    }
    .pf-streak-lost-cta:active {
      transform: translateY(0);
    }

    /* Clone que vuela del centro al contador del header */
    .pf-streak-flying {
      position: fixed;
      z-index: 100000;
      pointer-events: none;
      font-family: 'Nunito', sans-serif;
      font-weight: 900;
      line-height: 1;
      letter-spacing: -3px;
      color: #FFFFFF;
      text-shadow:
        0 0 18px rgba(255, 138, 0, 0.85),
        0 6px 26px rgba(255, 138, 0, 0.45);
      font-variant-numeric: tabular-nums;
      transform: translate(-50%, -50%) scale(1);
      transition:
        transform 0.75s cubic-bezier(0.55, 0, 0.20, 1),
        font-size 0.75s cubic-bezier(0.55, 0, 0.20, 1),
        opacity 0.30s ease 0.45s;
      will-change: transform, font-size, opacity;
    }

    /* Bump del contador del header cuando aterriza el número del overlay */
    @keyframes pf-hstat-bump {
      0%   { transform: scale(1);    color: inherit; }
      35%  { transform: scale(1.32); color: #FFB341; }
      70%  { transform: scale(0.96); }
      100% { transform: scale(1);    color: inherit; }
    }
    .hstat--bump {
      animation: pf-hstat-bump 0.7s cubic-bezier(0.34, 1.56, 0.64, 1);
      transform-origin: center;
    }
    .hstat--bump i,
    .hstat--bump .hstat-text {
      animation: pf-hstat-bump 0.7s cubic-bezier(0.34, 1.56, 0.64, 1);
    }

    /* ── PAGE LAYOUT ── */
    .ideas-page {
      display: grid;
      grid-template-columns: 272px 1fr 312px;
      /* 100dvh = viewport dinámico: respeta la barra del navegador móvil y
         el teclado. Se deja 100vh antes como fallback para navegadores viejos.

         Edgar 2026-07-03: en desktop (min-width:961px), el layout ahora ocupa
         100dvh completo. El header queda position:fixed cubriendo solo la
         columna central (regla mas abajo). Los sidebars ganan altura arriba.
         En mobile (max-width:960px) el header vuelve a sticky full-width y
         .ideas-page vuelve a restar --header-h — override en el media query. */
      height: 100vh;
      height: 100dvh;
      background: var(--bg-main);
    }

    /* ── HEADER: fixed centrado sobre la columna central (desktop wide) ──
       Sidebars 272px (izq) + 312px (der). Header cubre entre esas dos.
       Edgar 2026-07-03: sidebars edge-to-edge del viewport, header adentro. */
    @media (min-width: 961px) {
      .header {
        position: fixed;
        top: 0;
        left: 272px;
        right: 312px;
        z-index: 200;
      }
      /* Empuja el contenido del workspace debajo del header fixed. */
      .workspace {
        padding-top: var(--header-h);
      }
    }

    /* Breakpoint intermedio (1200px): portfolio se compacta a 72px. */
    @media (min-width: 961px) and (max-width: 1200px) {
      .header {
        left: 72px;
        right: 280px;
      }
    }

    /* Mobile (960px): el layout viejo se restaura — header full-width sticky,
       .ideas-page resta --header-h. Los sidebars son drawers fixed. */
    @media (max-width: 960px) {
      .ideas-page {
        height: calc(100vh - var(--header-h));
        height: calc(100dvh - var(--header-h));
      }
      .workspace {
        padding-top: 0;
      }
    }

    /* ── PORTFOLIO SIDEBAR — dark premium ── */
    .portfolio {
      background: var(--sidebar-bg);
      border-right: 1px solid var(--sidebar-border);
      display: flex; flex-direction: column;
      overflow: hidden;
      box-shadow: var(--shadow-sidebar);
      color: var(--sidebar-text);
    }
    .pf-scroll {
      flex: 1; overflow-y: auto;
      display: flex; flex-direction: column;
    }
    .pf-scroll::-webkit-scrollbar { width: 4px; }
    .pf-scroll::-webkit-scrollbar-thumb { background: var(--sidebar-border-mid); border-radius: 4px; }
    .pf-section {
      padding: 16px 12px 12px;
    }
    .pf-section + .pf-section {
      border-top: 1px solid var(--sidebar-border);
      margin-top: 4px;
      padding-top: 18px;
    }
    .pf-section-head {
      padding: 0 6px 12px;
    }
    /* Empty-state del portfolio. Diseñado para sentirse simétrico con la
       card madre (sección): mismo margen horizontal que .pf-section-head
       (6px), padding interno compacto, y vive justo debajo de la lista
       como continuación natural — NO como caja flotante separada. */
    /* Edgar 2026-06-29: empty state con icon + microcopy en 2 líneas. */
    /* Edgar 2026-06-30: empty state SUTIL — sin borde, sin background,
       sin parecer botón. Pattern Notion/Linear/Stripe: solo texto en
       gris muy claro + ícono opacado, alineado a la izquierda. */
    .pf-mini-empty {
      margin: 4px 14px 0;
      padding: 4px 0;
      font-size: 11.5px;
      font-weight: 500;
      letter-spacing: 0.2px;
      color: var(--sidebar-text-muted);
      text-align: left;
      border: 0;
      border-radius: 0;
      background: transparent;
      opacity: 0.55;
      display: flex; flex-direction: row; align-items: center; justify-content: flex-start; gap: 8px;
    }
    .pf-mini-empty__icon {
      width: 18px !important;
      height: 18px !important;
      background: transparent !important;
      color: var(--sidebar-text-muted) !important;
      font-size: 12px !important;
      opacity: 0.6 !important;
    }
    .pf-list:empty {
      padding: 0 !important;
      min-height: 0 !important;
      flex: 0 0 auto !important;
    }
    .pf-mini-empty__icon {
      width: 28px; height: 28px;
      display: inline-flex; align-items: center; justify-content: center;
      border-radius: 50%;
      background: color-mix(in srgb, var(--accent) 12%, transparent);
      color: var(--accent);
      font-size: 14px;
      opacity: 0.85;
    }
    .pf-mini-empty__hint {
      font-size: 10.5px;
      font-weight: 500;
      opacity: 0.75;
      letter-spacing: 0.2px;
      margin-top: -1px;
    }
    /* Variante inline (sigue existiendo si algún caller la usa) */
    .pf-mini-empty--inline {
      margin: 2px 6px 8px;
      padding: 10px 12px;
      opacity: 0.85;
    }

    /* ─── TRASH DRAWER ───
       Footer del sidebar (fuera del pf-scroll). Aloja Archivados y
       Eliminados combinando ideas + negocios. Separador visual claro
       para que el ojo entienda "esto es almacén, no lista activa". */
    /* Edgar 2026-07-02: drawer completamente eliminado del layout.
       Los chips son el ÚNICO switch de vista. */
    .pf-trash-drawer { display: none !important; }

    /* Edgar 2026-07-02: cuando el sidebar está en un modo distinto de 'all',
       damos hint visual sutil (border-left teñido) para que el user sepa
       que no está en la vista normal. Sutil, no invasivo. */
    .portfolio[data-pf-filter="archived"] .pf-title,
    .portfolio[data-pf-filter="deleted"]  .pf-title,
    .portfolio[data-pf-filter="fav"]      .pf-title {
      opacity: 0.85;
    }
    .portfolio[data-pf-filter="archived"] .pf-title i { color: #94A3B8; }
    .portfolio[data-pf-filter="deleted"]  .pf-title i { color: #EF4444; }
    .portfolio[data-pf-filter="fav"]      .pf-title i { color: #F59E0B; }
    /* Placeholder empty adaptado: cuando estamos en modos no-activos y
       la lista está vacía, mostrar el mensaje sin el hint de "pica + arriba". */
    .portfolio[data-pf-filter="archived"] .pf-mini-empty__hint,
    .portfolio[data-pf-filter="deleted"]  .pf-mini-empty__hint,
    .portfolio[data-pf-filter="fav"]      .pf-mini-empty__hint { display: none; }

    /* Responsive (móvil <= 720px): título de sección puede truncar. */
    @media (max-width: 720px) {
      .portfolio .pf-title span[data-i18n] {
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        max-width: 140px;
      }
    }
    /* Dentro del drawer los bloques no necesitan margen extra: el padding
       del drawer ya separa visualmente. */
    .pf-trash-drawer .pf-archived,
    .pf-trash-drawer .pf-deleted { margin: 0; }
    .pf-trash-drawer .pf-archived + .pf-deleted { margin-top: 4px; }
    .pf-header {
      padding: 20px 18px 16px;
      border-bottom: 1px solid var(--sidebar-border);
      flex-shrink: 0;
    }
    .pf-title-row {
      display: flex; align-items: center; justify-content: space-between;
      margin-bottom: 14px;
    }
    .pf-title {
      font-size: 10px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1.2px; color: var(--sidebar-text-soft);
      display: inline-flex; align-items: center; gap: 6px;
    }
    .pf-title i { color: var(--accent); font-size: 12px; }
    /* Edgar 2026-06-29: botón "+ Nueva carpeta" icon-only inline en el
       title-row. Diseño discreto — no compite con el botón principal de
       "Nueva idea". Hover destaca al tema. */
    .pf-newfolder-btn {
      width: 26px; height: 26px;
      display: inline-flex; align-items: center; justify-content: center;
      margin-left: auto;
      margin-right: 6px;
      background: transparent;
      border: 0;
      border-radius: 6px;
      color: var(--sidebar-text-soft);
      cursor: pointer;
      font-size: 13px;
      transition: background 0.15s, color 0.15s, transform 0.12s;
    }
    .pf-newfolder-btn:hover {
      background: color-mix(in srgb, var(--accent) 14%, transparent);
      color: var(--accent);
      transform: translateY(-1px);
    }
    .pf-newfolder-btn:active { transform: translateY(0); }

    /* Estado: input inline editable para crear/renombrar carpeta */
    .pf-folder-input {
      width: 100%;
      background: color-mix(in srgb, var(--text-soft, #fff) 8%, transparent);
      border: 1.5px solid var(--accent);
      border-radius: 6px;
      color: var(--sidebar-text);
      font-family: inherit;
      font-size: 11px;
      font-weight: 800;
      letter-spacing: 0.5px;
      text-transform: uppercase;
      padding: 5px 9px;
      outline: none;
      box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);
    }

    /* DRAG & DROP visual feedback */
    .pf-item[draggable="true"] {
      cursor: grab;
    }
    .pf-item.is-dragging {
      opacity: 0.4;
      cursor: grabbing;
    }
    /* Carpeta destino mientras hover con item arrastrándose */
    .pf-group.is-drop-target,
    .pf-group.is-drop-target > .pf-group-header {
      background: color-mix(in srgb, var(--accent) 14%, transparent);
      border-radius: 8px;
    }
    .pf-group.is-drop-target > .pf-group-header { color: var(--accent); }
    /* Zona raíz (lista plana) destacada cuando arrastramos un item DESDE
       una carpeta — para sacarlo a la raíz. */
    .pf-list.is-drop-root {
      outline: 2px dashed color-mix(in srgb, var(--accent) 40%, transparent);
      outline-offset: -4px;
      border-radius: 8px;
    }
    /* Item destino para "soltar item sobre item = crear carpeta" */
    .pf-item.is-drop-merge {
      box-shadow: 0 0 0 2px var(--accent), 0 0 24px color-mix(in srgb, var(--accent) 35%, transparent);
      border-radius: 11px;
      transform: scale(1.02);
      transition: transform 0.15s, box-shadow 0.15s;
    }

    /* Edgar 2026-06-29: counter chip más limpio — pill redondeado con
       bg sutil que sigue el tema en vez del border duro. */
    .pf-count {
      font-size: 10.5px; font-weight: 800; color: var(--sidebar-text-soft);
      background: color-mix(in srgb, var(--sidebar-text-soft) 12%, transparent);
      border: 0;
      border-radius: 999px;
      padding: 2px 9px;
      min-width: 22px; text-align: center;
      font-variant-numeric: tabular-nums;
      line-height: 1.5;
    }
    .pf-new-btn {
      width: 100%; display: flex; align-items: center; justify-content: center; gap: 8px;
      padding: 12px 18px;
      background: var(--accent); color: white;
      border-radius: var(--r-md);
      font-size: 14px; font-weight: 800;
      transition: var(--tr);
      box-shadow: var(--shadow-accent);
    }
    .pf-new-btn:hover {
      background: var(--accent-mid);
      transform: translateY(-1px);
      box-shadow: 0 4px 16px rgba(255,138,0,0.4), inset 0 1px 0 rgba(255,255,255,0.2);
    }
    /* Edgar 2026-06-29: subir negocio — usa el accent del tema (mismo
       lenguaje visual que "Nueva idea") pero como variante SECUNDARIA
       — outline + accent text, no fill completo. Diferencia jerárquica
       sin ruido cromático (antes rosa + azul era ruidoso). */
    .pf-new-btn--neg {
      background: color-mix(in srgb, var(--accent) 12%, transparent);
      color: var(--accent);
      border: 1.5px solid color-mix(in srgb, var(--accent) 35%, transparent);
      box-shadow: none;
    }
    .pf-new-btn--neg:hover {
      background: color-mix(in srgb, var(--accent) 20%, transparent);
      border-color: var(--accent);
      box-shadow: 0 4px 12px color-mix(in srgb, var(--accent) 25%, transparent);
    }

    /* Convert button (en pio-bar, cuando es idea) */
    .convert-btn {
      display: none; align-items: center; gap: 8px;
      padding: 12px 18px;
      background: linear-gradient(135deg, var(--primary), var(--primary-mid));
      color: white; border: none; border-radius: var(--r-md);
      font-size: 14px; font-weight: 800;
      box-shadow: var(--shadow-primary);
      transition: var(--tr); cursor: pointer;
    }
    .convert-btn:hover { transform: translateY(-1px); box-shadow: 0 6px 18px rgba(0,143,200,0.35); }
    .convert-btn.visible { display: inline-flex; }
    .convert-btn i { font-size: 15px; }
    /* Edgar 2026-06-30: padding lateral 10 → 6px para que los items
       queden ALINEADOS exactamente con el botón '+ Nueva idea'.
       Cálculo: section 12 + list 6 = 18px (igual que section 12 +
       section-head 6 = 18px del botón). SIMETRÍA total. */
    .pf-list {
      flex: 1; overflow-y: auto;
      padding: 10px 6px;
    }
    .pf-list::-webkit-scrollbar { width: 4px; }
    .pf-list::-webkit-scrollbar-thumb { background: var(--sidebar-border-mid); border-radius: 4px; }
    .pf-empty {
      flex: 1; display: flex; flex-direction: column;
      align-items: center; justify-content: center;
      gap: 10px; padding: 32px 20px; text-align: center;
      color: var(--sidebar-text-muted);
    }
    .pf-empty i { font-size: 32px; color: var(--sidebar-text-soft); opacity: 0.6; }
    .pf-empty p { font-size: 13px; line-height: 1.55; }
    /* ═════════════════════════════════════════════════════
       PF-ITEM — Cards del sidebar (ideas, negocios, archivados,
       eliminados). Edgar 2026-06-XX: 'se ven como si fueran dos
       cards con CSS barato, parecen botones sencillos. Me
       gustaría que se vean pros, porque cada uno es único y
       profesional'.

       Upgrade pro estilo Linear/Notion:
         - Background sutil con tint del sidebar (se sienten como
           cards reales, no como filas de menú)
         - Border 1px sólido de color sidebar-border para definición
         - Padding más respirado (12×14)
         - Hover: lift sutil + shadow profunda + border accent
         - Active: gradient lateral + ring accent inset + shadow
    ═════════════════════════════════════════════════════ */
    /* ════════════════════════════════════════════════════════════
       CHAT VOICE — Web Speech API dictation (Edgar 2026-06-30)
       ════════════════════════════════════════════════════════════ */
    .cb-voice-btn {
      width: 38px; height: 38px;
      display: inline-flex; align-items: center; justify-content: center;
      background: transparent;
      border: 1px solid rgba(255, 255, 255, 0.08);
      border-radius: 10px;
      color: var(--text-soft);
      cursor: pointer;
      transition: all 0.18s cubic-bezier(0.32, 0.72, 0, 1);
      margin-right: 6px;
      flex-shrink: 0;
      position: relative;
    }
    .cb-voice-btn:hover {
      background: rgba(255, 255, 255, 0.05);
      color: var(--accent);
      border-color: color-mix(in srgb, var(--accent) 30%, transparent);
    }
    .cb-voice-btn i { font-size: 18px; transition: opacity 0.16s ease; }
    .cb-voice-icon-listening { display: none; position: absolute; }
    .cb-voice-pulse { display: none; }
    /* Listening state — rojo + pulse animado */
    .cb-voice-btn.is-listening {
      background: rgba(239, 68, 68, 0.18);
      border-color: rgba(239, 68, 68, 0.50);
      color: #F87171;
    }
    .cb-voice-btn.is-listening .cb-voice-icon-idle { display: none; }
    .cb-voice-btn.is-listening .cb-voice-icon-listening {
      display: inline-block; color: #F87171;
      animation: cb-voice-mic-pulse 1.2s ease-in-out infinite;
    }
    .cb-voice-btn.is-listening .cb-voice-pulse {
      display: block;
      position: absolute;
      inset: -3px;
      border-radius: 12px;
      border: 2px solid rgba(239, 68, 68, 0.40);
      animation: cb-voice-ring 1.2s ease-out infinite;
      pointer-events: none;
    }
    @keyframes cb-voice-mic-pulse {
      0%, 100% { transform: scale(1); opacity: 1; }
      50%      { transform: scale(1.18); opacity: 0.85; }
    }
    @keyframes cb-voice-ring {
      0%   { transform: scale(1);   opacity: 1; }
      100% { transform: scale(1.5); opacity: 0; }
    }

    /* ════════════════════════════════════════════════════════════
       CHAT ATTACHMENTS — Edgar 2026-06-30 (foto / PDF / canvas)
       ════════════════════════════════════════════════════════════ */
    .cb-attach-btn {
      width: 38px; height: 38px;
      display: inline-flex; align-items: center; justify-content: center;
      background: transparent;
      border: 1px solid rgba(255, 255, 255, 0.08);
      border-radius: 10px;
      color: var(--text-soft);
      cursor: pointer;
      transition: all 0.18s cubic-bezier(0.32, 0.72, 0, 1);
      margin-right: 6px;
      flex-shrink: 0;
    }
    .cb-attach-btn:hover {
      background: rgba(255, 255, 255, 0.05);
      color: var(--accent);
      border-color: color-mix(in srgb, var(--accent) 30%, transparent);
    }
    .cb-attach-btn i { font-size: 18px; }

    /* ════════════════════════════════════════════════════════════
       ATTACH MENU PREMIUM — Edgar 2026-06-30
       Cada opción con su ícono con color tech distintivo, depth,
       subtitle, lift hover. Estilo Notion/Linear profesional.
       ════════════════════════════════════════════════════════════ */
    .cb-attach-menu {
      min-width: 240px;
      padding: 6px;
    }
    @keyframes cb-attach-in {
      from { opacity: 0; transform: translateY(6px) scale(0.96); }
      to   { opacity: 1; transform: translateY(0) scale(1); }
    }
    /* Item del attach menu — más alto que el kebab para acomodar
       title + subtitle. Hover con lift sutil. */
    .cb-attach-menu .cb-attach-opt {
      display: flex;
      align-items: center;
      gap: 11px;
      padding: 9px 10px;
      border-radius: 8px;
    }
    .cb-attach-menu .cb-attach-opt:hover {
      background: rgba(255, 255, 255, 0.05) !important;
      transform: translateX(2px);
    }
    /* Container del ícono — cuadrado con bg sutil + color del feature */
    .cb-attach-menu .cb-attach-opt > i {
      width: 32px;
      height: 32px;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      flex-shrink: 0;
      border-radius: 8px;
      font-size: 16px !important;
      background: rgba(255, 255, 255, 0.04);
      border: 1px solid rgba(255, 255, 255, 0.06);
      transition: all 0.22s cubic-bezier(0.32, 0.72, 0, 1);
      position: relative;
      overflow: hidden;
    }
    .cb-attach-menu .cb-attach-opt:hover > i {
      transform: scale(1.08);
    }
    /* Cada feature con SU paleta tech (mismo lenguaje que hstat) */
    /* CÁMARA — cyan tech */
    .cb-attach-menu .cb-attach-opt[data-attach="camera"] > i {
      color: #5EEAD4 !important;
      background: linear-gradient(135deg, rgba(6, 182, 212, 0.18), rgba(20, 184, 166, 0.06));
      border-color: rgba(20, 184, 166, 0.22);
    }
    .cb-attach-menu .cb-attach-opt[data-attach="camera"]:hover > i {
      box-shadow: 0 0 18px rgba(6, 182, 212, 0.30);
      border-color: rgba(20, 184, 166, 0.45);
    }
    /* GALERÍA — púrpura tech */
    .cb-attach-menu .cb-attach-opt[data-attach="image"] > i {
      color: #C4B5FD !important;
      background: linear-gradient(135deg, rgba(139, 92, 246, 0.18), rgba(167, 139, 250, 0.06));
      border-color: rgba(167, 139, 250, 0.22);
    }
    .cb-attach-menu .cb-attach-opt[data-attach="image"]:hover > i {
      box-shadow: 0 0 18px rgba(139, 92, 246, 0.30);
      border-color: rgba(167, 139, 250, 0.45);
    }
    /* DIBUJAR — naranja Piofly brand */
    .cb-attach-menu .cb-attach-opt[data-attach="canvas"] > i {
      color: #FBBF24 !important;
      background: linear-gradient(135deg, rgba(251, 191, 36, 0.18), rgba(255, 138, 0, 0.06));
      border-color: rgba(251, 191, 36, 0.22);
    }
    .cb-attach-menu .cb-attach-opt[data-attach="canvas"]:hover > i {
      box-shadow: 0 0 18px rgba(251, 191, 36, 0.32);
      border-color: rgba(251, 191, 36, 0.50);
    }
    /* PDF — rojo (documentos) */
    .cb-attach-menu .cb-attach-opt[data-attach="pdf"] > i {
      color: #FCA5A5 !important;
      background: linear-gradient(135deg, rgba(239, 68, 68, 0.18), rgba(251, 113, 133, 0.06));
      border-color: rgba(251, 113, 133, 0.22);
    }
    .cb-attach-menu .cb-attach-opt[data-attach="pdf"]:hover > i {
      box-shadow: 0 0 18px rgba(239, 68, 68, 0.30);
      border-color: rgba(251, 113, 133, 0.45);
    }
    /* Text wrapper — title + subtitle */
    .cb-attach-text {
      display: flex;
      flex-direction: column;
      gap: 1px;
      min-width: 0;
      flex: 1;
    }
    .cb-attach-title {
      font-size: 13px;
      font-weight: 600;
      color: #E5E7EB;
      letter-spacing: 0.005em;
      line-height: 1.2;
    }
    .cb-attach-sub {
      font-size: 11px;
      font-weight: 500;
      color: rgba(255, 255, 255, 0.45);
      letter-spacing: 0.1px;
      line-height: 1.2;
    }
    .cb-attach-menu .cb-attach-opt:hover .cb-attach-title { color: #FFFFFF; }
    .cb-attach-menu .cb-attach-opt:hover .cb-attach-sub  { color: rgba(255, 255, 255, 0.65); }
    /* Section header del attach menu */
    .cb-attach-menu .pf-menu-section {
      padding: 6px 10px 4px;
      font-size: 9.5px;
      font-weight: 800;
      letter-spacing: 1.4px;
      text-transform: uppercase;
      color: rgba(255, 255, 255, 0.40);
    }
    /* Light theme */
    [data-theme="light"] .cb-attach-title { color: #1F2937; }
    [data-theme="light"] .cb-attach-sub   { color: rgba(0, 0, 0, 0.50); }
    [data-theme="light"] .cb-attach-menu .cb-attach-opt:hover { background: rgba(0, 0, 0, 0.05) !important; }
    [data-theme="light"] .cb-attach-menu .pf-menu-section { color: rgba(0, 0, 0, 0.45); }

    /* Edgar 2026-07-02: chip thumbnail estilo Claude.ai/ChatGPT.
       Preview antiguo (banda naranja larga) reemplazado por chip cuadrado
       72×72 inline en la fila del textarea. Click en imagen abre lightbox. */
    .cb-attach-preview.cb-attach-preview--chip {
      position: relative;
      width: 72px; height: 72px;
      flex-shrink: 0;
      border-radius: 12px;
      overflow: visible; /* para que el botón × pueda salir del borde */
      background: transparent;
      border: 0;
      padding: 0;
      margin: 0 6px 0 0;
      animation: cb-attach-in 0.22s cubic-bezier(0.18, 0.89, 0.32, 1.28);
      transition: transform 0.15s ease;
    }
    .cb-attach-preview.cb-attach-preview--chip:hover {
      transform: scale(1.03);
    }
    .cb-attach-preview.cb-attach-preview--chip .cb-chip-img {
      width: 100%; height: 100%;
      object-fit: cover;
      border-radius: 12px;
      cursor: zoom-in;
      display: block;
      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
      border: 1px solid rgba(255, 255, 255, 0.08);
    }
    .cb-attach-preview.cb-attach-preview--chip .cb-chip-badge {
      position: absolute;
      bottom: 4px; left: 4px;
      width: 18px; height: 18px;
      border-radius: 50%;
      background: rgba(0, 0, 0, 0.65);
      color: #fff;
      display: flex; align-items: center; justify-content: center;
      font-size: 11px;
      pointer-events: none;
    }
    .cb-attach-preview.cb-attach-preview--chip .cb-chip-pdf {
      width: 100%; height: 100%;
      display: flex; flex-direction: column;
      align-items: center; justify-content: center; gap: 2px;
      border-radius: 12px;
      background: linear-gradient(135deg, #EF4444, #DC2626);
      color: #fff;
      cursor: pointer;
      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
    }
    .cb-attach-preview.cb-attach-preview--chip .cb-chip-pdf i { font-size: 28px; }
    .cb-attach-preview.cb-attach-preview--chip .cb-chip-pdf-label {
      font-size: 9px; font-weight: 800; letter-spacing: 0.6px;
    }
    .cb-attach-preview.cb-attach-preview--chip .cb-chip-pdf-name {
      position: absolute;
      left: 0; right: 0; bottom: 0;
      padding: 3px 4px;
      background: rgba(0, 0, 0, 0.7);
      color: #fff;
      font-size: 9px;
      text-align: center;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      border-radius: 0 0 12px 12px;
      pointer-events: none;
    }
    .cb-attach-preview.cb-attach-preview--chip .cb-chip-x {
      position: absolute;
      top: -6px; right: -6px;
      width: 22px; height: 22px;
      border-radius: 50%;
      background: #0F1419;
      color: #fff;
      border: 2px solid var(--surface, #1E293B);
      display: flex; align-items: center; justify-content: center;
      font-size: 11px;
      cursor: pointer;
      box-shadow: 0 2px 6px rgba(0, 0, 0, 0.4);
      z-index: 2;
      transition: transform 0.15s ease, background 0.15s ease;
    }
    .cb-attach-preview.cb-attach-preview--chip .cb-chip-x:hover {
      background: #DC2626;
      transform: scale(1.1);
    }
    /* Legacy preview (compat con otros usos) — mantenemos por seguridad */
    .cb-attach-preview:not(.cb-attach-preview--chip):not(.cb-attach-preview--strip) {
      display: flex; align-items: center; gap: 10px;
      padding: 8px 10px;
      background: rgba(255, 138, 0, 0.08);
      border: 1px solid rgba(255, 138, 0, 0.25);
      border-radius: 10px;
      margin: 0 0 8px;
      animation: cb-attach-in 0.20s cubic-bezier(0.18, 0.89, 0.32, 1.28);
    }

    /* Edgar 2026-07-03: preview STRIP - banda arriba del chat con chips
       chiquitos (48px). Reemplaza el chip 72x72 inline del input. */
    .cb-attach-preview--strip {
      display: flex;
      align-items: center;
      gap: 8px;
      padding: 8px 14px 6px;
      animation: cb-attach-in 0.22s cubic-bezier(0.18, 0.89, 0.32, 1.28);
    }
    .cb-chip-mini {
      position: relative;
      width: 48px; height: 48px;
      border-radius: 10px;
      overflow: visible;
      flex-shrink: 0;
      cursor: zoom-in;
      transition: transform 0.15s ease;
    }
    .cb-chip-mini:hover { transform: scale(1.06); }
    .cb-chip-mini-img {
      width: 100%; height: 100%;
      object-fit: cover;
      border-radius: 10px;
      display: block;
      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
      border: 1px solid rgba(255, 255, 255, 0.10);
    }
    /* PDF chip mini: pill horizontal con icono + nombre + size */
    .cb-chip-mini--pdf {
      width: auto;
      max-width: 260px;
      height: 48px;
      display: flex;
      align-items: center;
      gap: 8px;
      padding: 8px 12px 8px 10px;
      background: linear-gradient(135deg, #EF4444, #DC2626);
      color: #fff;
      cursor: pointer;
    }
    .cb-chip-mini-icon { font-size: 22px; flex-shrink: 0; }
    .cb-chip-mini-meta {
      display: flex; flex-direction: column;
      min-width: 0;
    }
    .cb-chip-mini-name {
      font-size: 12px;
      font-weight: 700;
      max-width: 180px;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    .cb-chip-mini-size {
      font-size: 10px;
      opacity: 0.85;
      font-weight: 500;
    }
    /* Boton X sobrepuesto en corner superior derecho */
    .cb-attach-preview--strip .cb-chip-x {
      position: absolute;
      top: -6px; right: -6px;
      width: 20px; height: 20px;
      border-radius: 50%;
      background: #0F1419;
      color: #fff;
      border: 2px solid var(--surface, #1E293B);
      display: flex; align-items: center; justify-content: center;
      font-size: 10px;
      cursor: pointer;
      box-shadow: 0 2px 6px rgba(0, 0, 0, 0.4);
      z-index: 2;
      transition: transform 0.15s ease, background 0.15s ease;
    }
    .cb-attach-preview--strip .cb-chip-x:hover {
      background: #DC2626;
      transform: scale(1.15);
    }

    /* ═══════════ IN-CHAT: attachment dentro del bubble user ═══════════ */
    .fum-bubble.has-attach {
      padding: 6px !important;
      max-width: min(360px, 88%) !important;
    }
    .fum-bubble.fum-bubble--media-only {
      background: transparent !important;
      padding: 0 !important;
      border: 0 !important;
      box-shadow: none !important;
      max-width: min(360px, 88%) !important;
    }
    .fum-attach-img {
      display: block;
      max-width: 100%;
      max-height: 340px;
      width: auto; height: auto;
      border-radius: 14px;
      cursor: zoom-in;
      object-fit: cover;
      box-shadow: 0 2px 10px rgba(0, 0, 0, 0.20);
      transition: transform 0.15s ease;
    }
    .fum-attach-img:hover { transform: scale(1.01); }
    .fum-bubble.has-attach:not(.fum-bubble--media-only) .fum-attach-img {
      border-radius: 10px 10px 6px 6px;
      margin-bottom: 6px;
    }
    .fum-attach-text {
      padding: 6px 10px 8px;
      font-size: 14px;
      line-height: 1.45;
      word-break: break-word;
    }
    .fum-attach-pdf {
      display: flex; align-items: center; gap: 10px;
      padding: 10px 12px;
      background: rgba(255, 255, 255, 0.10);
      border: 1px solid rgba(255, 255, 255, 0.14);
      border-radius: 12px;
      cursor: pointer;
      transition: background 0.15s ease;
      min-width: 220px;
      max-width: 100%;
    }
    .fum-attach-pdf:hover { background: rgba(255, 255, 255, 0.16); }
    .fum-attach-pdf-icon {
      width: 40px; height: 48px;
      border-radius: 6px;
      background: linear-gradient(135deg, #EF4444, #DC2626);
      color: #fff;
      display: flex; align-items: center; justify-content: center;
      font-size: 22px;
      flex-shrink: 0;
    }
    .fum-attach-pdf-meta {
      flex: 1; min-width: 0;
      display: flex; flex-direction: column; gap: 2px;
    }
    .fum-attach-pdf-meta strong {
      font-size: 13px; font-weight: 700;
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    }
    .fum-attach-pdf-meta span {
      font-size: 11px; opacity: 0.7;
    }
    .fum-attach-pdf-open {
      font-size: 16px; opacity: 0.6; flex-shrink: 0;
    }

    /* ═══════════ LIGHTBOX: viewer fullscreen ═══════════ */
    .pf-lightbox {
      position: fixed; inset: 0;
      background: rgba(0, 0, 0, 0.92);
      z-index: 10000;
      display: flex; flex-direction: column;
      opacity: 0;
      transition: opacity 0.22s ease;
      overscroll-behavior: contain;
    }
    .pf-lightbox--in { opacity: 1; }
    .pf-lightbox-topbar {
      display: flex; align-items: center; gap: 12px;
      padding: 12px 16px;
      padding-top: max(12px, env(safe-area-inset-top));
      color: #fff;
      background: linear-gradient(180deg, rgba(0,0,0,0.55), transparent);
      z-index: 2;
    }
    .pf-lightbox-name {
      flex: 1; min-width: 0;
      font-size: 14px; font-weight: 600;
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
      opacity: 0.9;
    }
    .pf-lightbox-dl,
    .pf-lightbox-close {
      width: 40px; height: 40px;
      border-radius: 50%;
      background: rgba(255, 255, 255, 0.12);
      color: #fff;
      border: 0;
      cursor: pointer;
      display: flex; align-items: center; justify-content: center;
      font-size: 18px;
      transition: background 0.15s ease, transform 0.15s ease;
      text-decoration: none;
    }
    .pf-lightbox-dl:hover,
    .pf-lightbox-close:hover {
      background: rgba(255, 255, 255, 0.22);
      transform: scale(1.05);
    }
    .pf-lightbox-stage {
      flex: 1;
      display: flex; align-items: center; justify-content: center;
      padding: 12px 24px 24px;
      overflow: hidden;
      cursor: zoom-out;
    }
    .pf-lightbox-img {
      max-width: 95vw;
      max-height: calc(100vh - 90px);
      object-fit: contain;
      border-radius: 8px;
      box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
      touch-action: pinch-zoom;
    }
    .pf-lightbox-pdf {
      width: 95vw;
      height: calc(100vh - 100px);
      border: 0;
      border-radius: 8px;
      background: #fff;
    }

    /* ═══════════ RESPONSIVE (<= 640px) ═══════════ */
    @media (max-width: 640px) {
      .cb-attach-preview.cb-attach-preview--chip {
        width: 56px; height: 56px;
      }
      .cb-attach-preview.cb-attach-preview--chip .cb-chip-pdf i { font-size: 22px; }
      .cb-attach-preview.cb-attach-preview--chip .cb-chip-pdf-label { font-size: 8px; }
      .cb-attach-preview.cb-attach-preview--chip .cb-chip-x {
        width: 24px; height: 24px;
        top: -4px; right: -4px;
      }
      .fum-bubble.has-attach { max-width: 88% !important; }
      .fum-attach-img { max-height: 60vh; }
      .fum-attach-pdf { min-width: 180px; padding: 8px 10px; }
      .fum-attach-pdf-icon { width: 34px; height: 42px; font-size: 18px; }
      .pf-lightbox-topbar { padding: 10px 12px; padding-top: max(10px, env(safe-area-inset-top)); }
      .pf-lightbox-name { font-size: 13px; }
      .pf-lightbox-dl,
      .pf-lightbox-close { width: 36px; height: 36px; font-size: 16px; }
      .pf-lightbox-stage { padding: 8px 12px 16px; }
    }
    @media (prefers-reduced-motion: reduce) {
      .cb-attach-preview.cb-attach-preview--chip,
      .fum-attach-img,
      .pf-lightbox { transition: none !important; animation: none !important; }
    }
    .cb-prev-img {
      width: 44px; height: 44px;
      object-fit: cover;
      border-radius: 7px;
      flex-shrink: 0;
    }
    .cb-prev-icon {
      width: 44px; height: 44px;
      display: inline-flex; align-items: center; justify-content: center;
      background: rgba(239, 68, 68, 0.15);
      border-radius: 7px;
      color: #F87171;
      font-size: 22px;
      flex-shrink: 0;
    }
    .cb-prev-meta {
      flex: 1; min-width: 0;
      display: flex; flex-direction: column; gap: 1px;
    }
    .cb-prev-meta strong {
      font-size: 12.5px; font-weight: 700;
      color: var(--text-main);
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    }
    .cb-prev-meta span {
      font-size: 10.5px; color: var(--text-muted); opacity: 0.7;
    }
    .cb-prev-remove {
      width: 26px; height: 26px;
      display: inline-flex; align-items: center; justify-content: center;
      background: rgba(255, 255, 255, 0.08);
      border: 0;
      border-radius: 7px;
      color: var(--text-soft);
      cursor: pointer;
      transition: all 0.16s ease;
    }
    .cb-prev-remove:hover {
      background: rgba(239, 68, 68, 0.20);
      color: #F87171;
    }

    /* Drag over en chat-bar */
    .chat-bar.cb-drag-over {
      box-shadow: 0 0 0 3px rgba(255, 138, 0, 0.30), inset 0 0 0 2px rgba(255, 138, 0, 0.40);
    }

    /* ════════════════════════════════════════════════════════════
       CANVAS MODAL — Paint estilo (colores, borrador, texto, undo/redo)
       ════════════════════════════════════════════════════════════ */
    .cb-canvas-modal {
      position: fixed; inset: 0; z-index: 9998;
      background: rgba(0, 0, 0, 0.65);
      backdrop-filter: blur(8px);
      display: flex; align-items: center; justify-content: center;
      padding: 16px;
      opacity: 0;
      transition: opacity 0.22s ease;
    }
    .cb-canvas-modal.is-open { opacity: 1; }
    .cb-canvas-shell {
      width: 100%; max-width: 920px;
      max-height: calc(100vh - 32px);
      background: rgba(20, 25, 38, 0.98);
      border: 1px solid rgba(255, 255, 255, 0.10);
      border-radius: 16px;
      box-shadow: 0 30px 80px -20px rgba(0, 0, 0, 0.70);
      display: flex; flex-direction: column;
      overflow: hidden;
      transform: scale(0.96);
      transition: transform 0.22s cubic-bezier(0.18, 0.89, 0.32, 1.28);
    }
    .cb-canvas-modal.is-open .cb-canvas-shell { transform: scale(1); }
    .cb-canvas-head {
      display: flex; align-items: center; gap: 8px;
      padding: 10px 14px;
      border-bottom: 1px solid rgba(255, 255, 255, 0.06);
    }
    .cb-canvas-title {
      font-size: 14px; font-weight: 700; color: var(--text-main);
      letter-spacing: 0.2px;
    }
    .cb-canvas-spacer { flex: 1; }
    .cb-canvas-btn {
      width: 32px; height: 32px;
      display: inline-flex; align-items: center; justify-content: center;
      background: transparent;
      border: 1px solid rgba(255, 255, 255, 0.08);
      border-radius: 8px;
      color: #E5E7EB;
      cursor: pointer;
      transition: all 0.16s ease;
    }
    .cb-canvas-btn:hover {
      background: rgba(255, 255, 255, 0.07);
      border-color: rgba(255, 255, 255, 0.18);
    }
    .cb-canvas-btn i { font-size: 14px; }
    .cb-canvas-close { color: var(--text-muted); }
    .cb-canvas-wrap {
      flex: 1; overflow: auto;
      display: flex; align-items: center; justify-content: center;
      padding: 16px;
      background: #0d1117;
    }
    #cb-canvas {
      max-width: 100%; max-height: 100%;
      background: #1a1f2e;
      border-radius: 8px;
      box-shadow: 0 4px 16px rgba(0, 0, 0, 0.30);
      cursor: crosshair;
      touch-action: none;
    }
    .cb-canvas-toolbar {
      display: flex; align-items: center; gap: 12px;
      padding: 10px 14px;
      border-top: 1px solid rgba(255, 255, 255, 0.06);
      flex-wrap: wrap;
    }
    .cb-canvas-tools, .cb-canvas-colors {
      display: flex; gap: 4px;
    }
    .cb-canvas-tool {
      width: 32px; height: 32px;
      background: transparent;
      border: 1px solid rgba(255, 255, 255, 0.08);
      border-radius: 8px;
      color: #E5E7EB;
      cursor: pointer;
      display: inline-flex; align-items: center; justify-content: center;
      transition: all 0.16s ease;
    }
    .cb-canvas-tool:hover { background: rgba(255, 255, 255, 0.07); }
    .cb-canvas-tool i { font-size: 14px; }
    .cb-canvas-tool--active {
      background: color-mix(in srgb, var(--accent) 20%, transparent);
      border-color: var(--accent);
      color: var(--accent-light);
    }
    .cb-canvas-color {
      width: 24px; height: 24px;
      border-radius: 50%;
      border: 2px solid rgba(255, 255, 255, 0.15);
      cursor: pointer;
      transition: all 0.16s ease;
    }
    .cb-canvas-color:hover { transform: scale(1.15); }
    .cb-canvas-color--active {
      border-color: var(--accent);
      transform: scale(1.10);
      box-shadow: 0 0 0 2px rgba(255, 138, 0, 0.40);
    }
    .cb-canvas-size {
      flex: 1; max-width: 140px;
      display: flex; align-items: center;
    }
    #cb-brush-size {
      width: 100%;
      accent-color: var(--accent);
    }
    .cb-canvas-send {
      display: inline-flex; align-items: center; gap: 8px;
      padding: 9px 16px;
      background: var(--accent);
      border: 0;
      border-radius: 999px;
      color: #FFFFFF;
      font-size: 13px; font-weight: 700;
      cursor: pointer;
      transition: all 0.18s cubic-bezier(0.32, 0.72, 0, 1);
      box-shadow: 0 2px 10px rgba(255, 138, 0, 0.35);
      margin-left: auto;
    }
    .cb-canvas-send:hover {
      transform: translateY(-1px);
      box-shadow: 0 6px 18px rgba(255, 138, 0, 0.50);
      filter: brightness(1.08);
    }
    .cb-canvas-send i { font-size: 13px; }

    /* ════════════════════════════════════════════════════════════
       CANVAS MOBILE — Edgar 2026-06-30 rediseño responsive premium
       ════════════════════════════════════════════════════════════ */
    @media (max-width: 760px) {
      .cb-canvas-modal {
        padding: 0;
        background: rgba(0, 0, 0, 0.85);
      }
      .cb-canvas-shell {
        max-width: 100%;
        max-height: 100dvh;
        height: 100dvh;
        border-radius: 0;
        border: 0;
        display: flex;
        flex-direction: column;
      }
      /* HEAD compacta con touch-friendly buttons */
      .cb-canvas-head {
        padding: 10px 12px;
        gap: 6px;
        min-height: 52px;
      }
      .cb-canvas-title {
        font-size: 15px;
        font-weight: 800;
      }
      .cb-canvas-btn {
        width: 38px;
        height: 38px;
        border-radius: 10px;
      }
      .cb-canvas-btn i { font-size: 16px; }
      /* WRAP del canvas — máximo espacio disponible */
      .cb-canvas-wrap {
        flex: 1;
        padding: 8px;
        min-height: 0;
        background: #0a0f1c;
      }
      #cb-canvas {
        width: 100%;
        height: 100%;
        max-width: none;
        max-height: none;
        border-radius: 12px;
        touch-action: none;
      }
      /* TOOLBAR rediseñada en 2 filas para mobile */
      .cb-canvas-toolbar {
        flex-direction: column;
        gap: 10px;
        padding: 12px;
        border-top: 1px solid rgba(255, 255, 255, 0.08);
        background: rgba(10, 15, 28, 0.98);
        backdrop-filter: blur(20px) saturate(160%);
      }
      /* FILA 1: tools + slider de tamaño */
      .cb-canvas-tools {
        order: 1;
        gap: 6px;
        width: 100%;
        justify-content: center;
      }
      .cb-canvas-tool {
        width: 44px;
        height: 44px;
        border-radius: 12px;
        background: rgba(255, 255, 255, 0.05);
      }
      .cb-canvas-tool i { font-size: 18px; }
      .cb-canvas-size {
        order: 2;
        max-width: 100%;
        width: 100%;
        padding: 0 6px;
      }
      #cb-brush-size {
        height: 28px;
      }
      /* FILA 2: colores en grid */
      .cb-canvas-colors {
        order: 3;
        display: grid;
        grid-template-columns: repeat(10, 1fr);
        gap: 6px;
        width: 100%;
        padding: 4px 0;
      }
      .cb-canvas-color {
        width: 100%;
        height: 30px;
        max-width: 32px;
        margin: 0 auto;
        border-radius: 50%;
      }
      .cb-canvas-color--active {
        transform: scale(1.18) !important;
        box-shadow: 0 0 0 2px rgba(255, 138, 0, 0.55), 0 4px 12px rgba(0,0,0,0.4) !important;
      }
      /* FILA 3: send button gigante full-width */
      .cb-canvas-send {
        order: 4;
        margin-left: 0;
        width: 100%;
        justify-content: center;
        padding: 14px 18px;
        font-size: 14.5px;
        font-weight: 800;
        border-radius: 999px;
        gap: 10px;
        box-shadow: 0 4px 20px rgba(255, 138, 0, 0.45);
      }
      .cb-canvas-send i { font-size: 15px; }
    }
    /* Pantallas muy chicas: ajustes extra */
    @media (max-width: 380px) {
      .cb-canvas-colors {
        grid-template-columns: repeat(5, 1fr);
      }
      .cb-canvas-color { height: 34px; max-width: 36px; }
    }

    /* ════════════════════════════════════════════════════════════
       CAMERA LIVE (desktop modal) — Edgar 2026-06-30
       ════════════════════════════════════════════════════════════ */
    .cb-camera-shell { max-width: 720px; }
    .cb-camera-stage {
      position: relative;
      flex: 1;
      background: #000;
      display: flex; align-items: center; justify-content: center;
      min-height: 360px;
      overflow: hidden;
    }
    #cb-camera-video {
      width: 100%; height: 100%;
      object-fit: cover;
      max-height: 60vh;
    }
    .cb-camera-loading {
      position: absolute;
      color: #E5E7EB;
      font-size: 13px;
      font-weight: 600;
      letter-spacing: 0.2px;
    }
    .cb-camera-toolbar {
      display: flex; align-items: center; justify-content: center;
      padding: 16px;
      background: rgba(0, 0, 0, 0.92);
    }
    .cb-camera-shutter {
      width: 64px; height: 64px;
      position: relative;
      background: transparent;
      border: 0;
      padding: 0;
      cursor: pointer;
      display: inline-flex; align-items: center; justify-content: center;
      transition: transform 0.16s cubic-bezier(0.32, 0.72, 0, 1);
    }
    .cb-camera-shutter:hover { transform: scale(1.04); }
    .cb-camera-shutter:active { transform: scale(0.94); }
    .cb-camera-shutter-ring {
      position: absolute; inset: 0;
      border: 3px solid #FFFFFF;
      border-radius: 50%;
    }
    .cb-camera-shutter-dot {
      width: 50px; height: 50px;
      background: #FFFFFF;
      border-radius: 50%;
      transition: all 0.16s cubic-bezier(0.32, 0.72, 0, 1);
    }
    .cb-camera-shutter:active .cb-camera-shutter-dot {
      background: var(--accent);
      transform: scale(0.85);
    }

    /* ════════════════════════════════════════════════════════════
       AUDIO RECORDER — mensaje de voz tipo WhatsApp
       ════════════════════════════════════════════════════════════ */
    .cb-audio-shell { max-width: 500px; }
    .cb-audio-stage {
      flex: 1;
      padding: 32px 20px;
      display: flex; flex-direction: column; align-items: center;
      gap: 18px;
      min-height: 320px;
    }
    .cb-audio-visualizer {
      width: 140px; height: 140px;
      border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      background: rgba(255, 138, 0, 0.08);
      border: 2px solid rgba(255, 138, 0, 0.20);
      transition: all 0.3s ease;
    }
    .cb-audio-visualizer.is-recording {
      background: rgba(239, 68, 68, 0.12);
      border-color: rgba(239, 68, 68, 0.50);
      animation: cb-audio-pulse 1.6s ease-in-out infinite;
    }
    @keyframes cb-audio-pulse {
      0%, 100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.50); transform: scale(1); }
      50%      { box-shadow: 0 0 0 18px rgba(239, 68, 68, 0); transform: scale(1.05); }
    }
    .cb-audio-wave {
      width: 80px; height: 80px;
      background: radial-gradient(circle, var(--accent) 0%, transparent 70%);
      border-radius: 50%;
      opacity: 0.6;
    }
    .cb-audio-visualizer.is-recording .cb-audio-wave {
      background: radial-gradient(circle, #EF4444 0%, transparent 70%);
      animation: cb-audio-wave-dance 1.2s ease-in-out infinite;
    }
    @keyframes cb-audio-wave-dance {
      0%, 100% { transform: scale(0.85); opacity: 0.6; }
      50%      { transform: scale(1.10); opacity: 0.95; }
    }
    .cb-audio-timer {
      font-size: 28px; font-weight: 700;
      color: #E5E7EB;
      font-variant-numeric: tabular-nums;
      letter-spacing: 1px;
    }
    .cb-audio-hint {
      font-size: 13px; font-weight: 500;
      color: var(--text-muted);
      opacity: 0.8;
    }
    .cb-audio-transcript {
      font-size: 13.5px;
      color: #E5E7EB;
      background: rgba(255, 255, 255, 0.04);
      border: 1px solid rgba(255, 255, 255, 0.08);
      border-radius: 10px;
      padding: 12px 14px;
      max-height: 100px;
      overflow-y: auto;
      width: 100%;
      max-width: 380px;
      line-height: 1.5;
    }
    #cb-audio-preview {
      width: 100%;
      max-width: 380px;
      margin-top: 4px;
      border-radius: 8px;
    }
    .cb-audio-toolbar {
      display: flex; align-items: center; justify-content: center; gap: 14px;
      padding: 16px 20px;
      border-top: 1px solid rgba(255, 255, 255, 0.06);
    }
    .cb-audio-rec-btn {
      width: 56px; height: 56px;
      background: var(--accent);
      border: 0;
      border-radius: 50%;
      color: #FFFFFF;
      cursor: pointer;
      display: inline-flex; align-items: center; justify-content: center;
      transition: all 0.22s cubic-bezier(0.32, 0.72, 0, 1);
      box-shadow: 0 4px 16px rgba(255, 138, 0, 0.40);
    }
    .cb-audio-rec-btn i { font-size: 22px; }
    .cb-audio-icon-stop { display: none; }
    .cb-audio-rec-btn:hover { transform: scale(1.05); filter: brightness(1.08); }
    .cb-audio-rec-btn:active { transform: scale(0.96); }
    .cb-audio-rec-btn.is-recording {
      background: #EF4444;
      box-shadow: 0 4px 20px rgba(239, 68, 68, 0.45);
      animation: cb-audio-btn-pulse 1.4s ease-in-out infinite;
    }
    .cb-audio-rec-btn.is-recording .cb-audio-icon-mic { display: none; }
    .cb-audio-rec-btn.is-recording .cb-audio-icon-stop { display: inline-block; }
    @keyframes cb-audio-btn-pulse {
      0%, 100% { box-shadow: 0 4px 16px rgba(239, 68, 68, 0.45); }
      50%      { box-shadow: 0 4px 28px rgba(239, 68, 68, 0.65); }
    }
    .cb-audio-trash, .cb-audio-send {
      display: inline-flex; align-items: center; justify-content: center;
      gap: 7px;
      padding: 10px 16px;
      background: rgba(255, 255, 255, 0.05);
      border: 1px solid rgba(255, 255, 255, 0.10);
      border-radius: 999px;
      color: #E5E7EB;
      font-size: 13px; font-weight: 600;
      cursor: pointer;
      transition: all 0.18s ease;
    }
    .cb-audio-trash {
      width: 44px; height: 44px; padding: 0;
      color: #F87171;
      border-color: rgba(239, 68, 68, 0.25);
    }
    .cb-audio-trash:hover {
      background: rgba(239, 68, 68, 0.15);
      border-color: rgba(239, 68, 68, 0.50);
    }
    .cb-audio-send {
      background: var(--accent);
      color: #FFFFFF;
      border-color: var(--accent);
      box-shadow: 0 2px 10px rgba(255, 138, 0, 0.30);
    }
    .cb-audio-send:hover {
      transform: translateY(-1px);
      filter: brightness(1.08);
      box-shadow: 0 6px 18px rgba(255, 138, 0, 0.42);
    }

    @media (max-width: 760px) {
      .cb-camera-shell, .cb-audio-shell {
        max-width: 100%; max-height: 100vh; border-radius: 0;
      }
      .cb-audio-stage { padding: 24px 16px; gap: 14px; }
      .cb-audio-visualizer { width: 120px; height: 120px; }
      .cb-audio-wave { width: 70px; height: 70px; }
      .cb-audio-timer { font-size: 24px; }
    }

    /* ════════════════════════════════════════════════════════════
       SIDEBAR HEADER — Edgar 2026-06-30
       Edgar: 'PROJECTS tiene que tener los mismos estilos que SUMMARY'.
       → Aplica EXACTAMENTE los mismos values del .ep-header / .ep-title
       del exec-panel para que sean visualmente idénticos.
       ════════════════════════════════════════════════════════════ */
    .pf-header {
      padding: 18px 20px 14px;
      border-bottom: 1px solid var(--border-soft);
      flex-shrink: 0;
      display: flex; align-items: center; justify-content: space-between;
    }
    .pf-header-title {
      font-size: 11px;
      font-weight: 800;
      text-transform: uppercase;
      letter-spacing: 1.1px;
      color: var(--text-muted);
    }
    /* Edgar 2026-06-30: dot verde eliminado (tanto de PROYECTOS
       como del SUMMARY abajo). */
    .pf-header::after { display: none !important; }
    /* Edgar 2026-06-30 (3ra iteración): IGUALAR pixel-a-pixel con .ep-header
       cuando hay chat-theme activo. Antes solo replicaba el border-color y
       quedaba con padding/background/backdrop distintos → desalineación
       visible entre PROYECTOS y RESUMEN. Ahora replico los 4 valores:
       border-bottom, background, backdrop-filter y padding 20px 24px. */
    body[data-chat-theme] .pf-header {
      border-bottom: 1px solid var(--ws-border) !important;
      background: rgba(255, 255, 255, 0.01) !important;
      backdrop-filter: blur(12px) !important;
      -webkit-backdrop-filter: blur(12px) !important;
      padding: 20px 24px !important;
    }
    body[data-chat-theme] .pf-header-title {
      color: var(--ws-chat-accent-light) !important;
      font-size: 11px !important;
      letter-spacing: 1.5px !important;
      font-weight: 900 !important;
      text-shadow: 0 0 10px rgba(255, 138, 0, 0.1);
    }

    /* Edgar 2026-07-02: reglas del trash drawer eliminadas —
       el drawer fue removido del layout (chips = single switch de vista). */

    /* ════════════════════════════════════════════════════════════
       PORTFOLIO TOOLBAR — search + chips + sort + view toggle
       Edgar 2026-06-30: Fase 2 organización tipo Discord/Linear.
       ════════════════════════════════════════════════════════════ */
    .pf-toolbar {
      padding: 12px 12px 10px;
      border-bottom: 1px solid rgba(255, 255, 255, 0.06);
      margin-bottom: 8px;
      display: flex;
      flex-direction: column;
      gap: 8px;
    }

    /* SEARCH BAR */
    .pf-search {
      position: relative;
      display: flex;
      align-items: center;
    }
    .pf-search-icon {
      position: absolute;
      left: 14px;
      font-size: 14px;
      color: var(--sidebar-text-muted);
      opacity: 0.85;
      pointer-events: none;
      transition: color 0.18s ease, opacity 0.18s ease;
    }
    /* Edgar 2026-07-03: se ve mas como boton/pill (menos como input feo).
       Radius redondo, bg mas definido, border visible pero elegante, shadow
       sutil, y hover/focus con feedback claro tipo boton. */
    .pf-search-input {
      width: 100%;
      height: 36px;
      padding: 0 36px 0 38px;
      font: inherit;
      font-size: 13px;
      font-weight: 600;
      background: rgba(255, 255, 255, 0.06);
      border: 1px solid rgba(255, 255, 255, 0.12);
      border-radius: 999px;
      color: var(--sidebar-text);
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04),
                  0 1px 2px rgba(0, 0, 0, 0.08);
      transition: background 0.18s cubic-bezier(0.32, 0.72, 0, 1),
                  border-color 0.18s cubic-bezier(0.32, 0.72, 0, 1),
                  box-shadow 0.18s cubic-bezier(0.32, 0.72, 0, 1);
      outline: none;
      cursor: text;
    }
    .pf-search-input:hover {
      background: rgba(255, 255, 255, 0.09);
      border-color: rgba(255, 255, 255, 0.18);
    }
    .pf-search-input:hover + .pf-search-clear,
    .pf-search:hover .pf-search-icon {
      opacity: 1;
    }
    .pf-search-input:focus {
      background: rgba(255, 255, 255, 0.10);
      border-color: rgba(255, 138, 0, 0.55);
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04),
                  0 0 0 3px rgba(255, 138, 0, 0.15);
    }
    /* Light mode override: fondo mas claro visible sobre sidebar blanco */
    html:not([data-theme]) .pf-search-input {
      background: rgba(15, 23, 42, 0.04);
      border-color: rgba(15, 23, 42, 0.10);
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6),
                  0 1px 2px rgba(15, 23, 42, 0.04);
    }
    html:not([data-theme]) .pf-search-input:hover {
      background: rgba(15, 23, 42, 0.06);
      border-color: rgba(15, 23, 42, 0.16);
    }
    html:not([data-theme]) .pf-search-input:focus {
      background: #fff;
      border-color: rgba(255, 138, 0, 0.6);
    }
    .pf-search-input::placeholder {
      color: var(--sidebar-text-muted);
      opacity: 0.55;
    }
    .pf-search-input:focus {
      background: rgba(255, 255, 255, 0.06);
      border-color: rgba(255, 138, 0, 0.35);
      box-shadow: 0 0 0 3px rgba(255, 138, 0, 0.12);
    }
    .pf-search-clear {
      position: absolute;
      right: 6px;
      width: 22px;
      height: 22px;
      display: flex;
      align-items: center;
      justify-content: center;
      background: rgba(255, 255, 255, 0.08);
      border: 0;
      border-radius: 6px;
      color: var(--sidebar-text-muted);
      cursor: pointer;
      transition: all 0.16s ease;
      font-size: 11px;
    }
    .pf-search-clear:hover {
      background: rgba(255, 255, 255, 0.14);
      color: var(--sidebar-text);
    }

    /* TOOLBAR ROW (chips + actions) */
    .pf-toolbar-row {
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 8px;
    }
    .pf-chips {
      display: flex;
      gap: 4px;
      flex: 1;
      min-width: 0;
      overflow-x: auto;
      scrollbar-width: none;
    }
    .pf-chips::-webkit-scrollbar { display: none; }
    .pf-chip {
      display: inline-flex;
      align-items: center;
      gap: 5px;
      height: 26px;
      padding: 0 9px;
      font-size: 11.5px;
      font-weight: 600;
      letter-spacing: 0.1px;
      background: transparent;
      border: 1px solid transparent;
      border-radius: 999px;
      color: var(--sidebar-text-muted);
      cursor: pointer;
      transition: all 0.18s cubic-bezier(0.32, 0.72, 0, 1);
      white-space: nowrap;
      flex-shrink: 0;
    }
    .pf-chip i { font-size: 12px; }
    .pf-chip:hover {
      background: rgba(255, 255, 255, 0.05);
      color: var(--sidebar-text);
    }
    .pf-chip--active {
      background: color-mix(in srgb, var(--accent) 14%, transparent);
      color: var(--accent-light);
      border-color: color-mix(in srgb, var(--accent) 28%, transparent);
    }
    .pf-chip-count {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      min-width: 16px;
      height: 16px;
      padding: 0 4px;
      background: rgba(255, 255, 255, 0.08);
      border-radius: 999px;
      font-size: 9.5px;
      font-weight: 700;
      color: var(--sidebar-text);
    }
    .pf-chip--active .pf-chip-count {
      background: color-mix(in srgb, var(--accent) 32%, transparent);
      color: var(--accent-light);
    }

    /* TOOLBAR ACTIONS (sort + view) */
    .pf-tb-actions {
      display: flex;
      gap: 4px;
      flex-shrink: 0;
    }
    .pf-tb-btn {
      width: 26px;
      height: 26px;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      background: transparent;
      border: 1px solid transparent;
      border-radius: 7px;
      color: var(--sidebar-text-muted);
      cursor: pointer;
      transition: all 0.18s cubic-bezier(0.32, 0.72, 0, 1);
      font-size: 13px;
      position: relative;
    }
    .pf-tb-btn:hover {
      background: rgba(255, 255, 255, 0.06);
      color: var(--sidebar-text);
    }
    .pf-tb-btn.is-active {
      background: rgba(255, 255, 255, 0.08);
      color: var(--accent-light);
    }
    .pf-tb-btn i { font-size: 13px; }

    /* VIEW TOGGLE — swap iconos según vista actual */
    #pf-view-btn .pf-view-icon-grid { display: none; }
    #pf-view-btn[data-view="grid"] .pf-view-icon-list { display: none; }
    #pf-view-btn[data-view="grid"] .pf-view-icon-grid { display: inline-block; }

    /* SORT DROPDOWN */
    .pf-sort-wrap { position: relative; }
    .pf-sort-menu {
      position: absolute;
      top: 100%;
      right: 0;
      margin-top: 6px;
      min-width: 160px;
      background: rgba(20, 25, 38, 0.92);
      backdrop-filter: blur(20px) saturate(160%);
      border: 1px solid rgba(255, 255, 255, 0.10);
      border-radius: 10px;
      padding: 5px;
      box-shadow:
        0 18px 44px -14px rgba(0, 0, 0, 0.45),
        0 5px 14px -8px rgba(0, 0, 0, 0.30);
      z-index: 100;
      animation: pf-sort-in 0.18s cubic-bezier(0.18, 0.89, 0.32, 1.28);
    }
    @keyframes pf-sort-in {
      from { opacity: 0; transform: translateY(-6px) scale(0.96); }
      to   { opacity: 1; transform: translateY(0) scale(1); }
    }
    .pf-sort-opt {
      display: flex;
      align-items: center;
      gap: 9px;
      width: 100%;
      padding: 8px 10px;
      background: transparent;
      border: 0;
      border-radius: 6px;
      color: #E5E7EB;
      font-size: 12.5px;
      font-weight: 500;
      text-align: left;
      cursor: pointer;
      transition: background 0.16s ease;
    }
    .pf-sort-opt:hover { background: rgba(255, 255, 255, 0.07); }
    .pf-sort-opt i { font-size: 13px; color: rgba(255, 255, 255, 0.55); }
    .pf-sort-opt--active {
      background: color-mix(in srgb, var(--accent) 12%, transparent);
      color: var(--accent-light);
    }
    .pf-sort-opt--active i { color: var(--accent-light); }

    /* RESULT INFO — "Mostrando 3 de 7" cuando hay filtro activo */
    .pf-result-info {
      font-size: 10.5px;
      color: var(--sidebar-text-muted);
      opacity: 0.7;
      padding: 0 2px;
      letter-spacing: 0.1px;
    }

    /* GRID VIEW — alternativa a la lista densa */
    .pf-list--grid {
      display: grid !important;
      grid-template-columns: repeat(2, 1fr);
      gap: 6px;
    }
    .pf-list--grid .pf-item {
      flex-direction: column;
      align-items: flex-start;
      padding: 10px;
      gap: 8px;
      min-height: 88px;
      margin-bottom: 0;
    }
    .pf-list--grid .pf-item .pfi-body {
      width: 100%;
    }
    .pf-list--grid .pfi-emoji {
      width: 32px; height: 32px;
      font-size: 15px;
    }
    .pf-list--grid .pfi-menu-btn {
      position: absolute;
      top: 6px;
      right: 6px;
    }

    /* DRAG & DROP states */
    .pf-item[draggable="true"] { cursor: grab; }
    .pf-item.is-dragging {
      opacity: 0.45;
      cursor: grabbing;
      transform: scale(0.96);
    }
    .pf-drop-zone {
      position: relative;
    }
    .pf-drop-zone.is-drop-hover::after {
      content: '';
      position: absolute;
      inset: 2px;
      border: 2px dashed var(--accent);
      border-radius: 10px;
      background: color-mix(in srgb, var(--accent) 6%, transparent);
      pointer-events: none;
      animation: pf-drop-pulse 1s ease-in-out infinite;
    }
    @keyframes pf-drop-pulse {
      0%, 100% { opacity: 0.7; }
      50%      { opacity: 1; }
    }

    /* RESPONSIVE — toolbar compactado en mobile drawer */
    @media (max-width: 960px) {
      .pf-toolbar {
        padding: 10px 10px 8px;
      }
      .pf-search-input { height: 36px; font-size: 14px; }
      .pf-chip { height: 28px; padding: 0 10px; font-size: 12px; }
      .pf-tb-btn { width: 28px; height: 28px; }
      .pf-list--grid { grid-template-columns: 1fr; }
    }

    /* Edgar 2026-06-30: items COMPACTOS estilo Linear/Discord —
       cuando tengas 20+ items la lista debe caber sin scroll
       infinito. Padding reducido, emoji más chico, mejor jerarquía. */
    .pf-item {
      display: flex; align-items: center; gap: 9px;
      padding: 7px 9px;
      border-radius: 8px;
      cursor: pointer;
      position: relative;
      margin-bottom: 2px;
      background: transparent;
      border: 1px solid transparent;
      box-shadow: none;
      transition:
        background 0.16s cubic-bezier(0.32, 0.72, 0, 1),
        border-color 0.16s cubic-bezier(0.32, 0.72, 0, 1),
        transform 0.12s cubic-bezier(0.32, 0.72, 0, 1);
      touch-action: manipulation;
      -webkit-tap-highlight-color: transparent;
    }
    @media (hover: hover) and (pointer: fine) {
      .pf-item:hover {
        background: rgba(255, 255, 255, 0.04);
        border-color: transparent;
        box-shadow: none;
        transform: none;
      }
    }
    .pf-item:active {
      transform: none;
      background: rgba(255, 255, 255, 0.06);
    }
    /* Item activo — bar lateral + bg tintado del accent */
    .pf-item--active {
      background: color-mix(in srgb, var(--accent) 9%, transparent) !important;
      border-color: transparent !important;
      box-shadow: inset 3px 0 0 var(--accent) !important;
    }

    /* Animación de entrada cuando se crea un negocio nuevo */
    @keyframes pf-item-enter {
      0%   { opacity: 0; transform: translateX(-22px) scale(0.94); }
      55%  { opacity: 1; transform: translateX(0) scale(1.04); }
      100% { opacity: 1; transform: translateX(0) scale(1); }
    }
    @keyframes pf-item-glow {
      0%   { box-shadow: 0 0 0 0 var(--accent-soft), 0 0 0 0 rgba(255,138,0,0.0); }
      40%  { box-shadow: 0 0 0 4px var(--accent-soft), 0 0 22px rgba(255,138,0,0.30); }
      100% { box-shadow: 0 0 0 0 transparent, 0 0 0 0 rgba(255,138,0,0.0); }
    }
    .pf-item--enter {
      animation: pf-item-enter 0.55s cubic-bezier(0.34, 1.56, 0.64, 1),
                 pf-item-glow 1.6s ease-out 0.2s;
    }
    .pf-item--enter .pfi-emoji {
      animation: pf-emoji-pop 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) 0.15s both;
    }
    @keyframes pf-emoji-pop {
      0%   { transform: scale(0); }
      60%  { transform: scale(1.2) rotate(8deg); }
      100% { transform: scale(1) rotate(0); }
    }
    .pf-item--active::before {
      display: none;
    }
    .pf-item--active .pfi-title { color: var(--accent-light); }
    /* Edgar 2026-06-30: emoji COMPACTO (28px). Antes 40px era
       demasiado grande para listas densas. */
    .pfi-emoji {
      width: 28px; height: 28px; flex-shrink: 0;
      display: flex; align-items: center; justify-content: center;
      background: color-mix(in srgb, var(--accent) 10%, rgba(255,255,255,0.025));
      border: 1px solid transparent;
      border-radius: 7px;
      color: var(--accent-light);
      font-size: 14px;
      transition: all 0.16s cubic-bezier(0.32, 0.72, 0, 1);
    }
    .pf-item:hover .pfi-emoji {
      background: color-mix(in srgb, var(--accent) 16%, rgba(255,255,255,0.04));
    }
    .pf-item--active .pfi-emoji {
      background: color-mix(in srgb, var(--accent) 22%, transparent);
      color: var(--accent);
    }
    .pfi-body { flex: 1; min-width: 0; }
    .pfi-title-row {
      display: flex; align-items: center; gap: 6px;
      min-width: 0;
    }
    /* Edgar 2026-06-30: jerarquía Linear/Discord — título 13.5px
       weight 600 (no 800), meta 10.5px gris muted más sutil. */
    .pfi-title {
      font-size: 13.5px; font-weight: 600; color: var(--sidebar-text);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      flex: 1; min-width: 0;
      letter-spacing: -0.10px;
      line-height: 1.25;
    }
    .pfi-meta {
      font-size: 10.5px;
      color: var(--sidebar-text-muted);
      margin-top: 1px;
      font-weight: 500;
      letter-spacing: 0.05px;
      display: flex;
      align-items: center;
      gap: 5px;
      opacity: 0.75;
    }
    /* Dot de estado a la izquierda del meta — animado para items
       activos en config, estático para los demás. */
    .pfi-meta::before {
      content: '';
      width: 6px;
      height: 6px;
      border-radius: 50%;
      background: var(--sidebar-text-muted);
      flex-shrink: 0;
      opacity: 0.65;
    }
    .pf-item--active .pfi-meta::before {
      background: var(--accent);
      opacity: 1;
      box-shadow: 0 0 8px color-mix(in srgb, var(--accent) 80%, transparent);
      animation: pfi-meta-dot-pulse 2.0s ease-in-out infinite;
    }
    @keyframes pfi-meta-dot-pulse {
      0%, 100% { transform: scale(1);    opacity: 1;   }
      50%      { transform: scale(1.30); opacity: 0.75; }
    }
    /* Estrella de favorito — vive del lado del botón ⋯ (a la derecha),
       no en el título. Edgar prefiere el título limpio y el badge de
       favorito en la zona de acciones. */
    .pfi-fav-mark {
      color: #FFB341;
      font-size: 13px;
      flex-shrink: 0;
      align-self: center;
      margin-right: 2px;
      filter: drop-shadow(0 0 6px rgba(255,179,65,0.45));
    }
    /* Chips de estado (Pausado/Cerrado) removidos — el concepto de
       estado del negocio se eliminó por redundancia con Archivar/Eliminar.
       Si en el futuro vuelve, restaurar estas reglas. */
    /* Botón ⋯ (más opciones) — reemplaza al trash directo */
    .pfi-menu-btn {
      opacity: 0; width: 26px; height: 26px; flex-shrink: 0;
      border: none; background: transparent;
      border-radius: var(--r-xs); display: flex; align-items: center; justify-content: center;
      color: var(--sidebar-text-muted); font-size: 14px;
      cursor: pointer;
      transition: var(--tr);
    }
    .pf-item:hover .pfi-menu-btn,
    .pfi-menu-btn:focus { opacity: 1; }
    .pfi-menu-btn:hover { background: rgba(255,255,255,0.06); color: var(--sidebar-text); }

    /* ── Sección de archivados (collapsible inline) ────────────── */
    .pf-archived {
      margin-top: 8px;
      border-top: 1px solid rgba(255,255,255,0.05);
      padding-top: 6px;
    }
    .pf-archived-toggle {
      width: 100%;
      background: transparent;
      border: none;
      display: flex; align-items: center; gap: 8px;
      padding: 7px 11px;
      border-radius: var(--r-xs);
      color: var(--sidebar-text-muted);
      font-family: inherit;
      font-size: 12px; font-weight: 700;
      letter-spacing: 0.3px;
      cursor: pointer;
      transition: background 0.15s, color 0.15s;
    }
    .pf-archived-toggle:hover { background: rgba(255,255,255,0.04); color: var(--sidebar-text); }
    .pf-archived-toggle > span { flex: 1; text-align: left; }
    .pf-archived-caret { transition: transform 0.2s; font-size: 10px; }
    .pf-archived--open .pf-archived-caret { transform: rotate(180deg); }
    /* Slide-down/up suave en lugar de display:none/block snap.
       max-height generoso para listas largas; el easing es elástico para
       conectar con el resto del lenguaje cinemático de la app. */
    .pf-archived-list {
      max-height: 0;
      overflow: hidden;
      opacity: 0;
      transform: translateY(-4px);
      margin-top: 0;
      transition:
        max-height 0.42s cubic-bezier(0.22, 1, 0.36, 1),
        opacity 0.28s ease-out,
        transform 0.32s cubic-bezier(0.22, 1, 0.36, 1),
        margin-top 0.32s ease-out;
    }
    .pf-archived--open .pf-archived-list {
      max-height: 80vh;
      opacity: 0.72;
      transform: translateY(0);
      margin-top: 4px;
    }
    /* Items archivados se ven más apagados */
    .pf-archived-list .pf-item { opacity: 0.85; }
    .pf-archived-list .pf-item .pfi-emoji { opacity: 0.7; }

    /* ── Sección "Eliminados" / Papelera ──────────────────────────
       Mismo patrón que archivados pero con acento ROJO sutil para
       señalar que es zona destructiva. Items con strike-through y
       fecha "hace X días". */
    .pf-deleted {
      margin-top: 6px;
      border-top: 1px solid rgba(239,68,68,0.10);
      padding-top: 6px;
    }
    .pf-deleted-toggle {
      width: 100%;
      background: transparent;
      border: none;
      display: flex; align-items: center; gap: 8px;
      padding: 7px 11px;
      border-radius: var(--r-xs);
      color: var(--sidebar-text-muted);
      font-family: inherit;
      font-size: 12px; font-weight: 700;
      letter-spacing: 0.3px;
      cursor: pointer;
      transition: background 0.15s, color 0.15s;
    }
    .pf-deleted-toggle > i:first-child { color: rgba(239,68,68,0.70); }
    .pf-deleted-toggle:hover { background: rgba(239,68,68,0.06); color: #FCA5A5; }
    .pf-deleted-toggle > span { flex: 1; text-align: left; }
    .pf-deleted-caret { transition: transform 0.2s; font-size: 10px; }
    .pf-deleted--open .pf-deleted-caret { transform: rotate(180deg); }
    /* Edgar 2026-07-03: header row con toggle + botón "Vaciar" a la derecha.
       Toggle mantiene 100% del ancho residual; botón es compacto e icónico
       en móvil (solo escoba), con texto en desktop. */
    .pf-deleted-header {
      display: flex; align-items: center; gap: 4px;
      width: 100%;
    }
    .pf-deleted-header .pf-deleted-toggle { flex: 1; }
    .pf-deleted-empty {
      display: inline-flex; align-items: center; gap: 5px;
      background: transparent;
      border: 1px solid transparent;
      border-radius: var(--r-xs);
      padding: 6px 9px;
      color: rgba(239,68,68,0.75);
      font-family: inherit;
      font-size: 11px; font-weight: 700;
      letter-spacing: 0.2px;
      cursor: pointer;
      transition: background 0.15s, color 0.15s, border-color 0.15s;
      flex-shrink: 0;
    }
    .pf-deleted-empty > i { font-size: 13px; }
    .pf-deleted-empty:hover {
      background: rgba(239,68,68,0.10);
      border-color: rgba(239,68,68,0.35);
      color: #FCA5A5;
    }
    .pf-deleted-empty:active { transform: scale(0.96); }
    /* Slide-down/up (mismo patrón que archivados) — easing elástico para
       seguir el lenguaje cinemático del resto de la app. */
    .pf-deleted-list {
      max-height: 0;
      overflow: hidden;
      opacity: 0;
      transform: translateY(-4px);
      margin-top: 0;
      transition:
        max-height 0.42s cubic-bezier(0.22, 1, 0.36, 1),
        opacity 0.28s ease-out,
        transform 0.32s cubic-bezier(0.22, 1, 0.36, 1),
        margin-top 0.32s ease-out;
    }
    .pf-deleted--open .pf-deleted-list {
      max-height: 80vh;
      opacity: 0.78;
      transform: translateY(0);
      margin-top: 4px;
    }
    /* Pulse cuando un item recién aterriza en la papelera — señala
       visualmente "el item que acabas de eliminar quedó aquí". */
    @keyframes pf-deleted-receive {
      0%   { background: rgba(239,68,68,0.00); transform: scale(1); }
      30%  { background: rgba(239,68,68,0.18); transform: scale(1.02); }
      100% { background: rgba(239,68,68,0.00); transform: scale(1); }
    }
    .pf-deleted--just-received .pf-deleted-toggle {
      animation: pf-deleted-receive 1.1s ease-out;
    }

    /* ═══════════════════════════════════════════════════════════
       Animación cinemática del soft delete — la card "cae" hacia
       la papelera con sparks naranjas. Misma escuela que el welcome
       cinematic: dramatic motion + brand sparks + smooth easing. */
    @keyframes pf-item-fall-to-trash {
      0%   {
        opacity: 1;
        transform: scale(1) translateY(0) rotate(0);
        box-shadow: 0 0 0 0 rgba(239,68,68,0);
      }
      18%  {
        opacity: 1;
        transform: scale(1.05) translateY(-3px) rotate(-1.5deg);
        box-shadow: 0 14px 30px rgba(239,68,68,0.30), 0 0 0 4px rgba(255,138,0,0.15);
      }
      55%  {
        opacity: 0.55;
        transform: scale(0.72) translateY(34px) rotate(-4deg);
        filter: blur(0.5px);
      }
      100% {
        opacity: 0;
        transform: scale(0.28) translateY(88px) rotate(-7deg);
        filter: blur(2px);
      }
    }
    .pf-item--deleting {
      animation: pf-item-fall-to-trash 0.62s cubic-bezier(0.45, 0, 0.55, 1) forwards;
      pointer-events: none;
      z-index: 100;
      position: relative;
    }

    /* Container de sparks que aparecen alrededor de la card al borrar */
    .pf-del-sparks {
      position: fixed;
      width: 0; height: 0;
      pointer-events: none;
      z-index: 99;
    }
    .pf-del-spark {
      position: absolute;
      top: 0; left: 0;
      width: var(--size); height: var(--size);
      margin: calc(var(--size) * -0.5) 0 0 calc(var(--size) * -0.5);
      background: #FFA333;
      border-radius: 50%;
      box-shadow: 0 0 10px rgba(255,138,0,0.85);
      opacity: 0;
      animation: pf-del-spark-burst var(--dur) cubic-bezier(0.22, 1, 0.36, 1) forwards;
    }
    @keyframes pf-del-spark-burst {
      0%   { opacity: 0; transform: rotate(var(--angle)) translateX(0) scale(0.5); }
      15%  { opacity: 1; }
      100% { opacity: 0; transform: rotate(var(--angle)) translateX(var(--dist)) scale(0.1); }
    }
    /* Item dentro de papelera — visualmente "tachado" pero legible */
    .pf-item--deleted {
      opacity: 0.65;
      cursor: default;
    }
    .pf-item--deleted .pfi-title {
      text-decoration: line-through;
      text-decoration-color: rgba(239,68,68,0.40);
      text-decoration-thickness: 1.5px;
    }
    .pf-item--deleted .pfi-emoji {
      background: rgba(239,68,68,0.06);
      filter: grayscale(0.5);
    }
    .pf-item--deleted .pfi-meta {
      color: rgba(239,68,68,0.55);
      font-weight: 700;
    }
    .pf-item--deleted:hover { opacity: 0.85; }
    .pf-item--deleted .pfi-menu-btn { opacity: 0.5; }
    .pf-item--deleted:hover .pfi-menu-btn { opacity: 1; color: var(--sidebar-text); }

    /* ═══════════════════════════════════════════════════════════
       CINEMATIC ACTIONS — cada acción tiene su propio momento.
       Mismo lenguaje que el welcome cinematic y el delete-to-trash:
       motion dramatic + sparks de brand + easing elástico.
       Lo importante: cada acción se SIENTE distinta.
    ═══════════════════════════════════════════════════════════ */

    /* ─── RENAME ─── flash naranja + título crossfade en el mismo lugar */
    @keyframes pf-item-rename-flash {
      0%   { box-shadow: 0 0 0 0 rgba(255,138,0,0); transform: scale(1); }
      30%  { box-shadow: 0 0 0 4px rgba(255,138,0,0.35), 0 8px 24px rgba(255,138,0,0.25); transform: scale(1.03); }
      70%  { box-shadow: 0 0 0 2px rgba(255,138,0,0.18); transform: scale(1.01); }
      100% { box-shadow: 0 0 0 0 rgba(255,138,0,0); transform: scale(1); }
    }
    .pf-item--renaming {
      animation: pf-item-rename-flash 0.85s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
      z-index: 10; position: relative;
    }
    @keyframes pf-title-morph-out {
      0%   { opacity: 1; transform: translateY(0); filter: blur(0); }
      100% { opacity: 0; transform: translateY(-6px); filter: blur(2px); }
    }
    @keyframes pf-title-morph-in {
      0%   { opacity: 0; transform: translateY(6px); filter: blur(2px); }
      100% { opacity: 1; transform: translateY(0); filter: blur(0); }
    }
    .pf-title--morph-out { animation: pf-title-morph-out 0.22s ease forwards; }
    .pf-title--morph-in  { animation: pf-title-morph-in 0.32s cubic-bezier(0.18, 0.89, 0.32, 1.28) forwards; }

    /* ─── ARCHIVE ─── fold suave + slide hacia abajo (no es destrucción, es guardar) */
    @keyframes pf-item-archive-fold {
      0%   { opacity: 1; transform: scale(1) translateY(0) rotateX(0deg); box-shadow: 0 0 0 0 rgba(96,165,250,0); }
      22%  { opacity: 1; transform: scale(1.02) translateY(-2px); box-shadow: 0 10px 24px rgba(96,165,250,0.25), 0 0 0 3px rgba(96,165,250,0.15); }
      60%  { opacity: 0.6;  transform: scale(0.88) translateY(20px) rotateX(45deg); }
      100% { opacity: 0; transform: scale(0.7) translateY(46px) rotateX(85deg); filter: blur(1.5px); }
    }
    .pf-item--archiving {
      animation: pf-item-archive-fold 0.58s cubic-bezier(0.45, 0, 0.55, 1) forwards;
      transform-origin: top center;
      pointer-events: none; z-index: 100; position: relative;
    }
    @keyframes pf-archived-receive {
      0%   { background: rgba(96,165,250,0.00); transform: scale(1); }
      30%  { background: rgba(96,165,250,0.18); transform: scale(1.02); }
      100% { background: rgba(96,165,250,0.00); transform: scale(1); }
    }
    .pf-archived--just-received .pf-archived-toggle {
      animation: pf-archived-receive 1.1s ease-out;
    }

    /* ─── UNARCHIVE ─── el item "salta" desde la sección archivada hacia arriba */
    @keyframes pf-item-unarchive-pop {
      0%   { opacity: 0; transform: scale(0.6) translateY(-30px) rotate(2deg); filter: blur(1.5px); }
      40%  { opacity: 1; transform: scale(1.08) translateY(4px) rotate(-1deg); filter: blur(0); }
      70%  { transform: scale(0.97) translateY(-1px); }
      100% { opacity: 1; transform: scale(1) translateY(0) rotate(0); }
    }
    .pf-item--unarchiving {
      animation: pf-item-unarchive-pop 0.72s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
      z-index: 10; position: relative;
    }

    /* Edgar 2026-07-03: animación específica para 'item aterriza en carpeta
       destino tras drop'. Antes se usaba pf-item-unarchive-pop (con blur
       y rotate — dramático de más para un move-to-folder). Nueva anim:
       cae desde arriba con overshoot suave, sin blur ni rotate. Feels
       professional. */
    @keyframes pf-item-drop-into-folder {
      0%   { opacity: 0; transform: translateY(-28px) scale(0.90); }
      55%  { opacity: 1; transform: translateY(4px) scale(1.04); }
      100% { opacity: 1; transform: translateY(0) scale(1); }
    }
    .pf-item--dropped-into-folder {
      animation: pf-item-drop-into-folder 0.55s cubic-bezier(0.34, 1.4, 0.64, 1) forwards;
      z-index: 10; position: relative;
    }
    /* Glow suave naranja mientras aterriza, luego se desvanece */
    @keyframes pf-item-drop-glow {
      0%   { box-shadow: 0 0 0 0 transparent; }
      40%  { box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 45%, transparent),
                       0 6px 24px color-mix(in srgb, var(--accent) 25%, transparent); }
      100% { box-shadow: 0 0 0 0 transparent; }
    }
    .pf-item--dropped-into-folder {
      animation: pf-item-drop-into-folder 0.55s cubic-bezier(0.34, 1.4, 0.64, 1) forwards,
                 pf-item-drop-glow 0.9s ease-out;
    }

    /* ─── RESTORE ─── el item sube desde la papelera con sparks VERDES (vida nueva) */
    @keyframes pf-item-restore-rise {
      0%   { opacity: 0; transform: scale(0.3) translateY(60px); filter: blur(2px); }
      35%  { opacity: 1; transform: scale(1.10) translateY(-6px); filter: blur(0); box-shadow: 0 12px 30px rgba(34,197,94,0.30), 0 0 0 4px rgba(34,197,94,0.18); }
      70%  { transform: scale(0.97) translateY(2px); }
      100% { opacity: 1; transform: scale(1) translateY(0); box-shadow: 0 0 0 0 rgba(34,197,94,0); }
    }
    .pf-item--restoring {
      animation: pf-item-restore-rise 0.80s cubic-bezier(0.22, 1, 0.36, 1) forwards;
      z-index: 10; position: relative;
    }
    .pf-restore-spark {
      position: absolute;
      top: 0; left: 0;
      width: var(--size); height: var(--size);
      margin: calc(var(--size) * -0.5) 0 0 calc(var(--size) * -0.5);
      background: #4ADE80;
      border-radius: 50%;
      box-shadow: 0 0 12px rgba(34,197,94,0.95);
      opacity: 0;
      animation: pf-del-spark-burst var(--dur) cubic-bezier(0.22, 1, 0.36, 1) forwards;
    }

    /* ─── MOVE TO GROUP ─── flash morado + slide del card + pulse del grupo destino */
    @keyframes pf-item-move-group {
      0%   { box-shadow: 0 0 0 0 rgba(168,85,247,0); transform: translateX(0) scale(1); }
      25%  { box-shadow: 0 8px 24px rgba(168,85,247,0.28), 0 0 0 4px rgba(168,85,247,0.20); transform: translateX(6px) scale(1.02); }
      55%  { transform: translateX(-3px) scale(1.01); }
      100% { box-shadow: 0 0 0 0 rgba(168,85,247,0); transform: translateX(0) scale(1); }
    }
    .pf-item--moving-group {
      animation: pf-item-move-group 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
      z-index: 10; position: relative;
    }
    @keyframes pf-group-receive {
      0%   { background: rgba(168,85,247,0.00); transform: scale(1); }
      30%  { background: rgba(168,85,247,0.18); transform: scale(1.02); }
      100% { background: rgba(168,85,247,0.00); transform: scale(1); }
    }
    .pf-group--just-received > .pf-group-header,
    .pf-group--just-received .pf-group-toggle {
      animation: pf-group-receive 1.1s ease-out;
    }

    /* ─── Sección "Sin grupo" / lista normal — pulse genérico cuando un item aterriza ahí */
    @keyframes pf-list-receive {
      0%   { box-shadow: inset 0 0 0 0 rgba(255,138,0,0); }
      30%  { box-shadow: inset 0 0 0 2px rgba(255,138,0,0.30); }
      100% { box-shadow: inset 0 0 0 0 rgba(255,138,0,0); }
    }
    .pf-list--just-received {
      animation: pf-list-receive 1.1s ease-out;
      border-radius: var(--r-sm, 8px);
    }

    /* ─── HEADER de "Eliminados" — nota sutil del countdown global */
    .pf-deleted-note {
      font-size: 11px;
      font-weight: 600;
      color: rgba(239,68,68,0.55);
      padding: 2px 11px 6px;
      letter-spacing: 0.2px;
      font-style: italic;
    }
    .pf-deleted-note i { font-size: 11px; margin-right: 4px; vertical-align: -1px; }

    /* ─── CHIP por item: "X días" hasta hard-delete automático */
    .pfi-expire {
      display: inline-flex; align-items: center; gap: 4px;
      margin-left: 6px;
      padding: 1px 7px;
      border-radius: var(--r-sm);
      font-size: 10px; font-weight: 800;
      letter-spacing: 0.3px;
      background: rgba(239,68,68,0.10);
      color: rgba(239,68,68,0.80);
      border: 1px solid rgba(239,68,68,0.18);
      white-space: nowrap;
    }
    .pfi-expire i { font-size: 10px; }
    /* Urgencia: últimos 7 días → ámbar warning, último día → rojo fuerte */
    .pfi-expire--soon {
      background: rgba(245,158,11,0.14);
      color: #F59E0B;
      border-color: rgba(245,158,11,0.30);
    }
    .pfi-expire--urgent {
      background: rgba(239,68,68,0.22);
      color: #FCA5A5;
      border-color: rgba(239,68,68,0.45);
      animation: pf-expire-urgent-pulse 1.6s ease-in-out infinite;
    }
    @keyframes pf-expire-urgent-pulse {
      0%, 100% { box-shadow: 0 0 0 0 rgba(239,68,68,0.00); }
      50%      { box-shadow: 0 0 0 3px rgba(239,68,68,0.20); }
    }

    /* ═══════════════════════════════════════════════════════════
       HARD DELETE — animación dramática "se borra para siempre".
       Esto NO es lo mismo que el soft delete (cae a la papelera).
       Esto es disintegrate / vanish completo. Roja, agresiva, con
       shake breve + implosion + sparks rojos. Pio se persigna.
    ═══════════════════════════════════════════════════════════ */
    @keyframes pf-item-hard-delete {
      0%   { opacity: 1; transform: translateX(0) scale(1); box-shadow: 0 0 0 0 rgba(239,68,68,0); filter: blur(0); }
      8%   { transform: translateX(-3px) scale(1.01); }
      14%  { transform: translateX(3px) scale(1.01); }
      20%  { transform: translateX(-2px) scale(1.02); box-shadow: 0 0 0 4px rgba(239,68,68,0.35), 0 14px 30px rgba(239,68,68,0.4); }
      28%  { transform: translateX(2px) scale(1.04); filter: brightness(1.3); }
      45%  { opacity: 0.7; transform: scale(0.85) rotate(-3deg); filter: blur(1.5px) brightness(1.1); }
      75%  { opacity: 0.25; transform: scale(0.35) rotate(-10deg); filter: blur(4px); }
      100% { opacity: 0; transform: scale(0) rotate(-20deg); filter: blur(8px); }
    }
    .pf-item--hard-deleting {
      animation: pf-item-hard-delete 0.95s cubic-bezier(0.55, 0, 0.7, 0.2) forwards;
      transform-origin: center;
      pointer-events: none;
      z-index: 100;
      position: relative;
    }
    /* Sparks rojos para el hard delete — vidrio rojo + ceniza */
    .pf-hard-spark {
      position: absolute;
      top: 0; left: 0;
      width: var(--size); height: var(--size);
      margin: calc(var(--size) * -0.5) 0 0 calc(var(--size) * -0.5);
      background: linear-gradient(180deg, #EF4444, #7F1D1D);
      border-radius: 50%;
      box-shadow: 0 0 14px rgba(239,68,68,0.95);
      opacity: 0;
      animation: pf-del-spark-burst var(--dur) cubic-bezier(0.22, 1, 0.36, 1) forwards;
    }
    /* Flash rojo sobre toda la pantalla — muy breve, fuerte */
    @keyframes pf-screen-flash-red {
      0%   { opacity: 0; }
      18%  { opacity: 0.18; }
      100% { opacity: 0; }
    }
    .pf-screen-flash-red {
      position: fixed; inset: 0;
      pointer-events: none;
      z-index: 98;
      background: radial-gradient(ellipse at center, rgba(239,68,68,0.55), rgba(127,29,29,0.15) 60%, transparent 80%);
      animation: pf-screen-flash-red 0.5s ease-out forwards;
    }

    /* ── Toast de undo (tras soft delete) ──────────────────────────
       Aparece abajo a la izquierda del workspace. Persiste 8s o
       hasta que el usuario lo cierre. "Deshacer" restaura el item. */
    .pf-toast {
      position: fixed;
      bottom: 24px;
      left: 50%;
      transform: translateX(-50%) translateY(20px);
      z-index: 10001;
      display: flex;
      align-items: center;
      gap: 12px;
      padding: 12px 14px 12px 16px;
      max-width: 480px;
      background: var(--card-bg, #1A2233);
      color: var(--text-main);
      border: 1px solid rgba(255,255,255,0.08);
      border-radius: 12px;
      box-shadow:
        0 16px 40px rgba(0,0,0,0.45),
        0 4px 12px rgba(0,0,0,0.30);
      font-size: 14px;
      opacity: 0;
      transition: opacity 0.22s ease, transform 0.28s cubic-bezier(0.18, 0.89, 0.32, 1.28);
    }
    .pf-toast--in {
      opacity: 1;
      transform: translateX(-50%) translateY(0);
    }
    .pf-toast--out {
      opacity: 0;
      transform: translateX(-50%) translateY(20px);
    }
    .pf-toast-icon {
      color: rgba(239,68,68,0.85);
      font-size: 18px;
      flex-shrink: 0;
    }
    .pf-toast-text { flex: 1; min-width: 0; line-height: 1.4; }
    .pf-toast-text b { color: var(--text-main); font-weight: 800; }
    .pf-toast-undo {
      background: rgba(255,138,0,0.15);
      border: 1px solid rgba(255,138,0,0.35);
      color: #FFA333;
      padding: 6px 14px;
      border-radius: 8px;
      font-family: inherit;
      font-size: 13px;
      font-weight: 800;
      cursor: pointer;
      transition: background 0.12s, border-color 0.12s, transform 0.12s;
      flex-shrink: 0;
    }
    .pf-toast-undo:hover {
      background: rgba(255,138,0,0.24);
      border-color: rgba(255,138,0,0.55);
      color: #FFB341;
    }
    .pf-toast-close {
      background: transparent;
      border: none;
      color: var(--text-muted);
      width: 26px; height: 26px;
      border-radius: 6px;
      display: flex; align-items: center; justify-content: center;
      cursor: pointer;
      transition: background 0.12s, color 0.12s;
      flex-shrink: 0;
    }
    .pf-toast-close:hover { background: rgba(255,255,255,0.06); color: var(--text-main); }
    @media (max-width: 720px) {
      .pf-toast { max-width: 92vw; font-size: 13px; padding: 10px 12px; }
      .pf-toast-undo { padding: 5px 12px; font-size: 12px; }
    }

    /* ── Toast adaptado al tema del chat activo ────────────────────
       Mismo patrón que los modales (body[data-chat-theme]). El toast
       hereda el color accent del tema (naranja del restaurante, cyan
       del ecommerce, verde del fitness, etc.). El icono trash se
       mantiene rojo siempre — es señal universal de delete. */
    body[data-chat-theme] .pf-toast {
      background: color-mix(in srgb, var(--ws-chat-accent) 6%, var(--ws-chat-feed-bg, #1A2233));
      border-color: color-mix(in srgb, var(--ws-chat-accent) 24%, rgba(255,255,255,0.08));
      box-shadow:
        0 16px 40px rgba(0,0,0,0.50),
        0 4px 12px rgba(0,0,0,0.32),
        0 0 0 1px color-mix(in srgb, var(--ws-chat-accent) 8%, transparent),
        0 22px 52px -28px color-mix(in srgb, var(--ws-chat-accent) 45%, transparent);
    }
    body[data-chat-theme] .pf-toast-undo {
      background: color-mix(in srgb, var(--ws-chat-accent) 16%, transparent);
      border-color: color-mix(in srgb, var(--ws-chat-accent) 38%, transparent);
      color: var(--ws-chat-accent-light, var(--ws-chat-accent));
    }
    body[data-chat-theme] .pf-toast-undo:hover {
      background: color-mix(in srgb, var(--ws-chat-accent) 28%, transparent);
      border-color: color-mix(in srgb, var(--ws-chat-accent) 60%, transparent);
      color: #FFFFFF;
      transform: translateY(-1px);
    }
    body[data-chat-theme] .pf-toast-close:hover {
      background: color-mix(in srgb, var(--ws-chat-accent) 10%, rgba(255,255,255,0.04));
      color: var(--ws-chat-accent-light, var(--ws-chat-accent));
    }

    /* ── Botón de confirmación danger (modal hard-delete) ────────── */
    .modal-confirm--danger {
      background: #EF4444 !important;
      color: #FFFFFF !important;
    }
    .modal-confirm--danger:hover { background: #DC2626 !important; }

    /* ── Menú flotante ⋯ (rename / archive / favorite / delete) ──
       Hereda el lenguaje visual del picker de temas (sys-themes-popover):
       vidrio esmerilado con backdrop-filter, sombra profunda+difusa,
       inset highlight superior, border-radius mayor, animación elástica.
       Así ambos popovers de la app se sienten hermanos, no parientes
       lejanos. */
    .pf-menu {
      position: fixed;
      z-index: 9999;
      min-width: 220px;
      background: var(--bg-panel, #1A2233);
      border: 1px solid var(--border-soft, rgba(255,255,255,0.10));
      border-radius: var(--r-md);
      padding: 7px;
      box-shadow:
        0 18px 44px -14px rgba(0,0,0,0.45),
        0 5px 14px -8px rgba(0,0,0,0.30),
        inset 0 1px 0 rgba(255,255,255,0.06);
      animation: pf-menu-in 0.22s cubic-bezier(0.18, 0.89, 0.32, 1.28);
    }
    /* Glass effect (mismo patrón que sys-themes-popover) — fallback gracioso
       en navegadores sin backdrop-filter. */
    @supports (backdrop-filter: blur(10px)) {
      .pf-menu {
        background: rgba(255, 255, 255, 0.72);
        backdrop-filter: blur(26px) saturate(1.8);
        -webkit-backdrop-filter: blur(26px) saturate(1.8);
        border: 1px solid rgba(0, 0, 0, 0.07);
        box-shadow:
          0 18px 44px -14px rgba(0,0,0,0.30),
          0 5px 14px -8px rgba(0,0,0,0.22),
          inset 0 1px 0 rgba(255,255,255,0.55);
      }
      [data-theme="dark"] .pf-menu {
        background: rgba(17, 24, 39, 0.85);
        border: 1px solid rgba(255, 255, 255, 0.10);
        box-shadow:
          0 20px 48px -16px rgba(0,0,0,0.78),
          0 6px 16px -10px rgba(0,0,0,0.55),
          inset 0 1px 0 rgba(255,255,255,0.07);
      }
      /* Cuando hay tema del chat activo, el menú toma el TINTE del tema —
         mismo patrón que el sys-themes-popover. Edgar: 'estos se deben
         ajustar a los temas que tiene toda la página por los temas del
         chat'. La superficie tinta sutilmente con el accent, el halo de
         la sombra también respeta el tema. */
      body[data-chat-theme] .pf-menu {
        background: color-mix(in srgb, var(--ws-chat-accent) 11%, color-mix(in srgb, #000 25%, var(--ws-chat-feed-bg)));
        border: 1px solid color-mix(in srgb, var(--ws-chat-accent) 22%, rgba(255,255,255,0.08));
        box-shadow:
          inset 0 1px 0 rgba(255,255,255,0.06),
          0 10px 22px -10px rgba(0,0,0,0.55),
          0 28px 56px -18px rgba(0,0,0,0.70),
          0 22px 52px -28px color-mix(in srgb, var(--ws-chat-accent) 55%, transparent);
      }
    }
    /* Edgar 2026-06-30: con tema del chat activo, el hover ya NO
       cambia los íconos a color del tema (eso hacía que el menú
       compitiera con el brand). Solo tinta sutil del background.
       Texto e íconos quedan blanco/gris siempre — estilo Notion. */
    body[data-chat-theme] .pf-menu-item:hover {
      background: color-mix(in srgb, var(--ws-chat-accent) 8%, rgba(255,255,255,0.05)) !important;
    }
    body[data-chat-theme] .pf-menu-sep {
      border-top-color: color-mix(in srgb, var(--ws-chat-accent) 22%, rgba(255,255,255,0.08));
    }
    @keyframes pf-menu-in {
      from { opacity: 0; transform: translateY(8px) scale(0.94); }
      to   { opacity: 1; transform: translateY(0)   scale(1);    }
    }
    /* Section title — calcado del sys-themes-section-title (8px, tracking
       fuerte, opacity sutil). Diminuto pero presente. */
    .pf-menu-section {
      padding: 0 3px 6px;
      font-size: 8px;
      font-weight: 700;
      text-transform: uppercase;
      letter-spacing: 1.2px;
      color: var(--text-muted);
      opacity: 0.8;
    }
    /* Edgar 2026-06-30: menú contextual estilo Notion/Linear/Stripe.
       Texto BLANCO/gris claro, íconos sutiles muted, hover suave.
       Antes los textos eran del var(--text-main) que en algunos
       themes terminaba naranja, compitiendo con el brand. */
    .pf-menu-item {
      width: 100%;
      display: flex; align-items: center; gap: 11px;
      padding: 9px 11px;
      border: 0;
      background: transparent;
      color: #E5E7EB !important;
      font-family: inherit;
      font-size: 13.5px;
      font-weight: 500;
      border-radius: 8px;
      cursor: pointer;
      transition: background 0.18s cubic-bezier(0.32, 0.72, 0, 1),
                  color 0.18s cubic-bezier(0.32, 0.72, 0, 1) !important;
      text-align: left;
      letter-spacing: 0.005em;
    }
    .pf-menu-item:hover {
      background: rgba(255, 255, 255, 0.07) !important;
      color: #FFFFFF !important;
    }
    .pf-menu-item:active { background: rgba(255, 255, 255, 0.10) !important; }
    /* Light theme override */
    [data-theme="light"] .pf-menu-item { color: #1F2937 !important; }
    [data-theme="light"] .pf-menu-item:hover {
      background: rgba(0, 0, 0, 0.05) !important;
      color: #0F172A !important;
    }
    .pf-menu-item > i {
      font-size: 16px;
      color: rgba(255, 255, 255, 0.55) !important;
      flex-shrink: 0;
      transition: color 0.18s cubic-bezier(0.32, 0.72, 0, 1) !important;
    }
    .pf-menu-item:hover > i { color: rgba(255, 255, 255, 0.95) !important; }
    [data-theme="light"] .pf-menu-item > i { color: rgba(0, 0, 0, 0.45) !important; }
    [data-theme="light"] .pf-menu-item:hover > i { color: rgba(0, 0, 0, 0.85) !important; }
    .pf-menu-item > span { flex: 1; }
    /* Delete / danger — rojo más sutil (no rojo brillante) */
    .pf-menu-item--danger { color: #F87171 !important; }
    .pf-menu-item--danger > i { color: #F87171 !important; }
    .pf-menu-item--danger:hover {
      background: rgba(239, 68, 68, 0.12) !important;
      color: #FCA5A5 !important;
    }
    .pf-menu-item--danger:hover > i { color: #FCA5A5 !important; }
    /* Separador — calcado del .sys-themes-section + .sys-themes-section
       (margin + padding + border-top) en lugar de la línea full-width vieja. */
    .pf-menu-sep {
      height: 0;
      border-top: 1px solid var(--border-soft, rgba(255,255,255,0.08));
      margin: 7px 3px;
      padding: 0;
    }
    [data-theme="dark"] .pf-menu-sep { border-top-color: rgba(255,255,255,0.08); }
    /* Items de estado (negocios): el check a la izquierda + dot de color */
    .pf-menu-check {
      width: 14px; flex-shrink: 0;
      display: inline-flex; align-items: center; justify-content: center;
      color: #FF8A00; font-size: 13px;
    }
    .pf-menu-dot {
      width: 8px; height: 8px; border-radius: 50%;
      flex-shrink: 0;
      box-shadow: 0 0 0 2px rgba(255,255,255,0.06);
    }
    .pf-menu-dot--activo  { background: #22C55E; }
    .pf-menu-dot--pausado { background: #FBBF24; }
    .pf-menu-dot--cerrado { background: #94A3B8; }

    /* ── Grupos de negocios (sidebar) ──────────────────────────────
       Headers collapsibles que aparecen SOLO cuando algún negocio
       tiene grupo asignado. Cero estructura cuando no hace falta. */
    /* Edgar 2026-06-29: items raíz (sin carpeta) van como lista plana
       arriba SIN header — patrón ChatGPT/Linear/Notion. La ausencia
       de carpeta ya es información, no necesita label "Sin carpeta". */
    .pf-root-items {
      display: flex; flex-direction: column;
      gap: 4px;
    }
    /* Separación entre la lista raíz y la primera carpeta — visual
       cue de "estos sueltos, esos agrupados". */
    .pf-root-items + .pf-group { margin-top: 16px; }
    /* Edgar 2026-07-03: root items ahora van DEBAJO de las carpetas
       (patron Claude/ChatGPT). Separacion visual. */
    .pf-group + .pf-root-items { margin-top: 16px; }

    .pf-group {
      margin-bottom: 6px;
    }

    /* ═══════════════════════════════════════════════════════
       Edgar 2026-07-03: SECCIONES sidebar Destacados / Proyectos / Recientes
       Patrón Claude/ChatGPT: 3 secciones colapsables. Header con caret + icon
       + label + contador. Body con slide open/close. Sección vacía se omite
       en JS — no renderiza; aquí solo estilamos las visibles.
    ═══════════════════════════════════════════════════════ */
    .pf-section {
      margin-bottom: 14px;
    }
    .pf-section:last-child { margin-bottom: 0; }
    .pf-section-header {
      width: 100%;
      background: transparent;
      border: none;
      display: flex; align-items: center; gap: 8px;
      padding: 6px 8px;
      border-radius: var(--r-xs);
      color: var(--sidebar-text-muted);
      font-family: inherit;
      font-size: 11px; font-weight: 800;
      letter-spacing: 0.5px;
      text-transform: uppercase;
      cursor: pointer;
      transition: background 0.15s, color 0.15s;
    }
    .pf-section-header:hover {
      background: rgba(255,255,255,0.03);
      color: var(--sidebar-text);
    }
    .pf-section-caret {
      font-size: 10px;
      transition: transform 0.2s;
      opacity: 0.7;
    }
    .pf-section--open .pf-section-caret { transform: rotate(0deg); }
    .pf-section:not(.pf-section--open) .pf-section-caret { transform: rotate(-90deg); }
    .pf-section-icon {
      font-size: 13px;
      opacity: 0.85;
    }
    .pf-section-label {
      flex: 1;
      text-align: left;
    }
    .pf-section-count {
      background: rgba(255,255,255,0.06);
      color: var(--sidebar-text-muted);
      font-size: 10px;
      font-weight: 700;
      letter-spacing: 0;
      padding: 2px 7px;
      border-radius: 999px;
      min-width: 18px;
      text-align: center;
    }
    /* Edgar 2026-07-03: Drive-style — QUITADO el tinte dorado.
       Sidebar uniforme, todos los iconos con el mismo color muted. */
    /* .pf-section[data-section="favorites"] .pf-section-icon { color: #FBBF24; } */
    /* Body: slide open/close con grid-template-rows (mismo patrón que pf-group-list) */
    .pf-section-body {
      display: grid;
      grid-template-rows: 0fr;
      transition: grid-template-rows 0.28s cubic-bezier(0.2, 0.9, 0.3, 1.15);
    }
    .pf-section-body > * { min-height: 0; overflow: hidden; }
    .pf-section--open .pf-section-body {
      grid-template-rows: 1fr;
      margin-top: 4px;
    }
    /* Reset margin-top del primer .pf-group dentro de Proyectos (ya lo da la sección) */
    .pf-section[data-section="projects"] .pf-group:first-child { margin-top: 0; }
    /* En sección Recientes/Destacados los items van pegados sin margen del root-items */
    .pf-section[data-section="recents"] .pf-item,
    .pf-section[data-section="favorites"] .pf-item {
      margin: 3px 0;
    }
    /* Edgar 2026-07-03 Fase 2.B: subcarpetas anidadas hasta 3 niveles.
       Cada nivel indenta el header con guía vertical sutil (estilo VS Code).
       data-depth se pinta en el pf-group según el path del árbol. */
    .pf-group[data-depth="2"] {
      margin-left: 12px;
      border-left: 1px solid rgba(255, 255, 255, 0.06);
      padding-left: 8px;
    }
    .pf-group[data-depth="3"] {
      margin-left: 12px;
      border-left: 1px solid rgba(255, 255, 255, 0.06);
      padding-left: 8px;
    }
    /* Light mode: guía más sutil sobre sidebar blanco */
    html:not([data-theme]) .pf-group[data-depth="2"],
    html:not([data-theme]) .pf-group[data-depth="3"] {
      border-left-color: rgba(15, 23, 42, 0.10);
    }
    /* Header de subcarpetas se ve un poco más ligero para dar jerarquía */
    .pf-group[data-depth="2"] .pf-group-header,
    .pf-group[data-depth="3"] .pf-group-header {
      font-size: 10.5px;
      opacity: 0.9;
    }
    /* Edgar 2026-06-29: más aire entre carpetas — antes estaban
       apretadísimas (4px). Ahora 14px para que el ojo entienda
       que son grupos distintos. */
    .pf-group + .pf-group { margin-top: 14px; }
    .pf-group-header {
      display: flex; align-items: center; gap: 8px;
      padding: 7px 11px 6px;
      border-radius: var(--r-xs);
      color: var(--sidebar-text-muted);
      font-size: 11px;
      font-weight: 800;
      letter-spacing: 0.5px;
      text-transform: uppercase;
      cursor: pointer;
      transition: background 0.15s, color 0.15s;
      user-select: none;
    }
    /* Folder icon del header con menos énfasis — jerárquicamente menor que el label */
    .pf-group-folder-icon {
      opacity: 0.5;
      font-size: 12px;
      flex-shrink: 0;
    }
    .pf-group-header:hover { background: rgba(255,255,255,0.04); color: var(--sidebar-text); }
    .pf-group-caret {
      font-size: 10px;
      transition: transform 0.2s;
      flex-shrink: 0;
    }
    .pf-group:not(.pf-group--open) .pf-group-caret { transform: rotate(-90deg); }
    .pf-group-label {
      flex: 1; min-width: 0;
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
      padding: 2px 4px;
      border-radius: 4px;
      transition: background 0.12s;
    }
    .pf-group-header--clickable .pf-group-label:hover {
      background: rgba(255,138,0,0.10);
      color: #FF8A00;
    }
    /* Edgar 2026-06-30: el label de carpeta NO es clickable como
       botón de rename. Renombrar se hace por el menú ⋮. */
    .pf-group-header--clickable .pf-group-label:hover {
      background: transparent !important;
      color: inherit !important;
    }
    .pf-group-menu-btn {
      width: 22px;
      height: 22px;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      background: transparent;
      border: 0;
      border-radius: 6px;
      color: var(--sidebar-text-muted);
      cursor: pointer;
      transition: all 0.16s cubic-bezier(0.32, 0.72, 0, 1);
      opacity: 0;
      font-size: 13px;
      flex-shrink: 0;
    }
    .pf-group-menu-btn i { font-size: 13px; }
    .pf-group-header:hover .pf-group-menu-btn { opacity: 0.7; }
    .pf-group-menu-btn:hover {
      opacity: 1 !important;
      background: rgba(255, 255, 255, 0.08);
      color: var(--sidebar-text);
    }

    /* Folder/Item icon picker grid (dentro del menú) */
    .pf-folder-iconpicker,
    .pf-icon-picker,
    .pf-color-picker {
      margin-top: 6px;
      padding-top: 6px;
      border-top: 1px solid rgba(255, 255, 255, 0.06);
    }
    .pf-icon-picker-grid {
      display: grid;
      grid-template-columns: repeat(6, 1fr);
      gap: 4px;
      padding: 4px;
      max-height: 200px;
      overflow-y: auto;
    }
    .pf-icon-tile {
      width: 30px; height: 30px;
      display: inline-flex; align-items: center; justify-content: center;
      background: rgba(255, 255, 255, 0.04);
      border: 1px solid transparent;
      border-radius: 7px;
      color: var(--sidebar-text-muted);
      cursor: pointer;
      transition: all 0.16s cubic-bezier(0.32, 0.72, 0, 1);
    }
    .pf-icon-tile i { font-size: 14px; }
    .pf-icon-tile:hover {
      background: color-mix(in srgb, var(--accent) 16%, rgba(255,255,255,0.04));
      border-color: color-mix(in srgb, var(--accent) 35%, transparent);
      color: var(--accent-light);
      transform: scale(1.06);
    }
    .pf-color-picker-grid {
      display: grid;
      grid-template-columns: repeat(6, 1fr);
      gap: 6px;
      padding: 4px;
    }
    .pf-color-tile {
      width: 26px; height: 26px;
      border-radius: 50%;
      border: 2px solid rgba(255, 255, 255, 0.10);
      cursor: pointer;
      transition: all 0.16s cubic-bezier(0.32, 0.72, 0, 1);
      padding: 0;
      display: inline-flex;
      align-items: center;
      justify-content: center;
    }
    .pf-color-tile:hover {
      transform: scale(1.15);
      border-color: rgba(255, 255, 255, 0.30);
      box-shadow: 0 0 0 2px rgba(255, 138, 0, 0.30);
    }
    .pf-color-tile--reset {
      background: rgba(255, 255, 255, 0.05) !important;
      color: var(--sidebar-text-muted);
    }
    .pf-color-tile--reset i { font-size: 11px; }
    .pf-folder-icon-grid {
      display: grid;
      grid-template-columns: repeat(5, 1fr);
      gap: 4px;
      padding: 4px;
    }
    .pf-folder-icon-tile {
      width: 32px;
      height: 32px;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      background: rgba(255, 255, 255, 0.04);
      border: 1px solid transparent;
      border-radius: 7px;
      color: var(--sidebar-text-muted);
      cursor: pointer;
      transition: all 0.16s cubic-bezier(0.32, 0.72, 0, 1);
    }
    .pf-folder-icon-tile i { font-size: 15px; }
    .pf-folder-icon-tile:hover {
      background: color-mix(in srgb, var(--accent) 16%, rgba(255,255,255,0.04));
      border-color: color-mix(in srgb, var(--accent) 35%, transparent);
      color: var(--accent-light);
      transform: scale(1.06);
    }

    .pf-group-count {
      background: rgba(255,255,255,0.06);
      color: var(--sidebar-text-muted);
      padding: 1px 8px;
      border-radius: 999px;
      font-size: 10px;
      font-weight: 800;
      flex-shrink: 0;
    }
    /* Edgar 2026-06-30: items dentro de carpetas AL RAS de los lados
       (mismo width que el botón '+ Nueva idea'). Sin padding-left,
       sin línea vertical. La jerarquía se ve por el header de la
       carpeta arriba + el caret/indent del grupo. */
    /* Edgar 2026-07-03: animación de expansión cinemática (VSCode/Notion).
       Antes: display:none / display:block sin animación (feo, brusco).
       Ahora: grid-template-rows 1fr/0fr para animar height auto smooth.
       Fallback opacity + translateY para el body de la lista. */
    .pf-group-list {
      display: grid;
      grid-template-rows: 1fr;
      padding-left: 0;
      position: relative;
      transition: grid-template-rows 0.28s cubic-bezier(0.22, 1, 0.36, 1),
                  opacity 0.22s ease-out;
      opacity: 1;
    }
    .pf-group-list > * {
      min-height: 0;
    }
    .pf-group:not(.pf-group--open) .pf-group-list {
      grid-template-rows: 0fr;
      opacity: 0;
      pointer-events: none;
    }
    /* Wrapper interno para permitir overflow hidden sin cortar shadows */
    .pf-group-list-inner {
      overflow: hidden;
      transform-origin: top center;
    }
    .pf-group:not(.pf-group--open) .pf-group-list-inner {
      transform: translateY(-4px) scaleY(0.98);
    }
    .pf-group.pf-group--open .pf-group-list-inner {
      transform: translateY(0) scaleY(1);
      transition: transform 0.28s cubic-bezier(0.22, 1, 0.36, 1);
    }
    /* Auto-abrir con drag: pulso visual cuando esta a punto de abrirse */
    .pf-group.pf-group--auto-opening > .pf-group-header {
      animation: pf-group-hover-pulse 0.7s ease-in-out;
    }
    @keyframes pf-group-hover-pulse {
      0%   { transform: scale(1); }
      50%  { transform: scale(1.02); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 30%, transparent); }
      100% { transform: scale(1); }
    }

    /* Edgar 2026-07-03: carpeta 'saliendo' (source de un move) — fade+shrink */
    @keyframes pf-group-moving {
      0%   { opacity: 1; transform: scale(1); }
      100% { opacity: 0.35; transform: scale(0.94) translateX(-6px); }
    }
    .pf-group.pf-group--moving > .pf-group-header {
      animation: pf-group-moving 0.22s ease-out forwards;
    }

    /* Edgar 2026-07-03: carpeta que acaba de aterrizar en su nuevo parent.
       Cae desde arriba con overshoot suave + glow naranja. */
    @keyframes pf-group-dropped-into {
      0%   { opacity: 0; transform: translateY(-24px) scale(0.92); }
      55%  { opacity: 1; transform: translateY(3px) scale(1.03); }
      100% { opacity: 1; transform: translateY(0) scale(1); }
    }
    @keyframes pf-group-dropped-glow {
      0%   { box-shadow: 0 0 0 0 transparent; }
      40%  { box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 45%, transparent),
                       0 6px 24px color-mix(in srgb, var(--accent) 25%, transparent); }
      100% { box-shadow: 0 0 0 0 transparent; }
    }
    .pf-group.pf-group--dropped-into {
      animation: pf-group-dropped-into 0.55s cubic-bezier(0.34, 1.4, 0.64, 1),
                 pf-group-dropped-glow 0.9s ease-out;
      z-index: 5; position: relative;
    }

    /* Edgar 2026-07-03: análisis de gaps de animación en carpetas.
       Antes: crear/eliminar/archivar/renombrar/cambiar-icono/cambiar-color
       eran cambios BRUSCOS sin feedback visual. Ahora todos tienen anim. */

    /* CREAR carpeta — enter suave desde arriba */
    @keyframes pf-group-enter {
      0%   { opacity: 0; transform: translateY(-16px) scale(0.94); max-height: 0; }
      45%  { opacity: 1; max-height: 400px; }
      70%  { transform: translateY(2px) scale(1.02); }
      100% { opacity: 1; transform: translateY(0) scale(1); max-height: 400px; }
    }
    .pf-group.pf-group--entering {
      animation: pf-group-enter 0.5s cubic-bezier(0.34, 1.4, 0.64, 1);
      overflow: hidden;
    }

    /* ELIMINAR/ARCHIVAR carpeta — fade+shrink hacia arriba */
    @keyframes pf-group-exit {
      0%   { opacity: 1; max-height: 400px; transform: scale(1); }
      100% { opacity: 0; max-height: 0; transform: scale(0.94) translateX(-8px); margin-bottom: 0; }
    }
    .pf-group.pf-group--exiting {
      animation: pf-group-exit 0.3s cubic-bezier(0.4, 0, 1, 1) forwards;
      overflow: hidden;
      pointer-events: none;
    }

    /* RENOMBRAR carpeta — flash naranja en el header (confirmación) */
    @keyframes pf-group-flash {
      0%   { background: transparent; }
      40%  { background: color-mix(in srgb, var(--accent) 18%, transparent); }
      100% { background: transparent; }
    }
    .pf-group.pf-group--flashing > .pf-group-header {
      animation: pf-group-flash 0.65s ease-out;
      border-radius: 8px;
    }

    /* CAMBIO ICONO/COLOR — bounce sutil del icon dentro del header */
    @keyframes pf-group-icon-bounce {
      0%   { transform: scale(1); }
      40%  { transform: scale(1.35) rotate(-6deg); }
      70%  { transform: scale(0.92) rotate(3deg); }
      100% { transform: scale(1) rotate(0); }
    }
    .pf-group.pf-group--icon-changed .pf-group-folder-icon {
      animation: pf-group-icon-bounce 0.55s cubic-bezier(0.34, 1.56, 0.64, 1);
    }
    /* Empty state dentro de carpeta — invita a arrastrar */
    .pf-folder-empty {
      padding: 12px 14px;
      margin: 4px 0;
      font-size: 11px;
      font-weight: 600;
      color: var(--sidebar-text-muted);
      opacity: 0.7;
      text-align: center;
      border: 1px dashed color-mix(in srgb, var(--sidebar-text-soft) 22%, transparent);
      border-radius: 8px;
    }
    .pf-folder-empty i { font-size: 13px; margin-right: 4px; opacity: 0.6; }
    /* "Sin grupo" más sutil que los grupos reales (legacy — ya no se usa) */
    .pf-group--nogroup .pf-group-header {
      opacity: 0.7;
      cursor: pointer;
    }
    .pf-group--nogroup .pf-group-label { cursor: default; }
    .pf-group--nogroup .pf-group-header--clickable .pf-group-label:hover { background: transparent; color: inherit; }

    /* ── Group picker modal (chips de grupos existentes) ──────────── */
    .modal-box--wide { max-width: 460px; }
    .modal-body-text {
      font-size: 13px;
      color: var(--text-muted);
      margin: 0 0 12px;
      line-height: 1.5;
    }
    /* ─── Edgar 2026-07-03 (Fase 2.B rediseño): modal picker estilo ChatGPT ─── */
    .group-picker-body { padding-top: 4px; }

    /* Search input estilo pill (mismo lenguaje que sidebar) */
    .group-search-wrap {
      position: relative;
      margin-bottom: 12px;
    }
    .group-search-icon {
      position: absolute;
      left: 14px; top: 50%; transform: translateY(-50%);
      font-size: 14px;
      color: var(--text-muted);
      opacity: 0.85;
      pointer-events: none;
    }
    .group-search-input {
      width: 100%;
      height: 40px;
      padding: 0 14px 0 38px;
      font: inherit;
      font-size: 14px;
      font-weight: 500;
      background: rgba(255,255,255,0.05);
      border: 1px solid rgba(255,255,255,0.10);
      border-radius: 10px;
      color: var(--text);
      outline: none;
      transition: background 0.18s, border-color 0.18s;
    }
    .group-search-input:focus {
      background: rgba(255,255,255,0.08);
      border-color: rgba(255,138,0,0.5);
    }
    .group-search-input::placeholder { color: var(--text-muted); opacity: 0.7; }

    /* Botón "+ Crear nueva carpeta" prominente */
    .group-create-btn {
      display: flex; align-items: center; gap: 10px;
      width: 100%;
      padding: 12px 16px;
      background: rgba(255,138,0,0.08);
      border: 1px dashed rgba(255,138,0,0.35);
      border-radius: 10px;
      color: #FF8A00;
      font-family: inherit;
      font-size: 14px;
      font-weight: 700;
      cursor: pointer;
      margin-bottom: 12px;
      transition: background 0.18s, border-color 0.18s;
    }
    .group-create-btn:hover {
      background: rgba(255,138,0,0.14);
      border-color: rgba(255,138,0,0.55);
    }
    .group-create-btn i { font-size: 16px; }

    /* Form inline de crear (revealed cuando click "+ crear") */
    .group-create-form {
      display: flex; flex-direction: column; gap: 8px;
      padding: 12px;
      background: rgba(255,255,255,0.03);
      border: 1px solid rgba(255,255,255,0.08);
      border-radius: 10px;
      margin-bottom: 12px;
    }
    .group-create-input {
      margin: 0 !important;
      height: 40px;
    }
    .group-create-form-actions {
      display: flex; gap: 8px; justify-content: flex-end;
    }
    .group-create-form-cancel,
    .group-create-form-confirm {
      padding: 8px 14px;
      border-radius: 8px;
      font-family: inherit;
      font-size: 13px;
      font-weight: 600;
      cursor: pointer;
      border: 1px solid transparent;
      transition: background 0.15s;
    }
    .group-create-form-cancel {
      background: transparent;
      border-color: rgba(255,255,255,0.14);
      color: var(--text-muted);
    }
    .group-create-form-cancel:hover { background: rgba(255,255,255,0.05); }
    .group-create-form-confirm {
      background: #FF8A00;
      color: #fff;
    }
    .group-create-form-confirm:hover { background: #E67A00; }

    /* Lista scrolleable de carpetas */
    .group-list {
      display: flex; flex-direction: column;
      max-height: 300px;
      overflow-y: auto;
      border-radius: 10px;
      background: rgba(255,255,255,0.02);
      border: 1px solid rgba(255,255,255,0.05);
      padding: 4px;
    }
    .group-row {
      display: flex; align-items: center; gap: 10px;
      padding: 10px 12px;
      background: transparent;
      border: 0;
      border-radius: 8px;
      color: var(--text);
      font-family: inherit;
      font-size: 14px;
      font-weight: 500;
      cursor: pointer;
      text-align: left;
      transition: background 0.12s;
    }
    .group-row:hover { background: rgba(255,255,255,0.06); }
    .group-row-icon { font-size: 16px; color: #FF8A00; opacity: 0.85; flex-shrink: 0; }
    .group-row--clear .group-row-icon { color: var(--text-muted); }
    .group-row-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .group-row-tree {
      color: var(--text-muted);
      opacity: 0.5;
      font-size: 13px;
      flex-shrink: 0;
    }
    .group-row-path {
      color: var(--text-muted);
      opacity: 0.6;
      font-size: 11px;
      font-weight: 400;
      flex-shrink: 0;
      max-width: 40%;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    .group-list-empty {
      padding: 20px 12px;
      text-align: center;
      color: var(--text-muted);
      font-size: 13px;
      opacity: 0.7;
    }

    /* modal-actions--single para el caso de un solo botón (Cerrar) */
    .modal-actions--single { justify-content: center !important; }
    .modal-actions--single .modal-cancel {
      min-width: 120px;
    }

    /* Light mode overrides */
    html:not([data-theme]) .group-search-input {
      background: rgba(15,23,42,0.04);
      border-color: rgba(15,23,42,0.10);
    }
    html:not([data-theme]) .group-search-input:focus { background: #fff; }
    html:not([data-theme]) .group-list {
      background: rgba(15,23,42,0.02);
      border-color: rgba(15,23,42,0.06);
    }
    html:not([data-theme]) .group-row:hover { background: rgba(15,23,42,0.06); }
    html:not([data-theme]) .group-create-form {
      background: rgba(15,23,42,0.02);
      border-color: rgba(15,23,42,0.06);
    }

    .group-chips-label {
      font-size: 11px;
      font-weight: 800;
      text-transform: uppercase;
      letter-spacing: 0.8px;
      color: var(--text-muted);
      margin-top: 16px;
      margin-bottom: 8px;
    }
    .group-chips {
      display: flex; flex-wrap: wrap; gap: 6px;
      min-height: 32px;
    }
    .group-chip {
      display: inline-flex; align-items: center; gap: 5px;
      padding: 6px 12px;
      background: rgba(255,138,0,0.08);
      border: 1px solid rgba(255,138,0,0.22);
      color: #FFA333;
      border-radius: 999px;
      font-family: inherit;
      font-size: 13px;
      font-weight: 700;
      cursor: pointer;
      transition: background 0.12s, border-color 0.12s, transform 0.12s;
    }
    .group-chip:hover {
      background: rgba(255,138,0,0.16);
      border-color: rgba(255,138,0,0.40);
      transform: translateY(-1px);
    }
    .group-chip--clear {
      background: rgba(148,163,184,0.08);
      border-color: rgba(148,163,184,0.22);
      color: #94A3B8;
    }
    .group-chip--clear:hover {
      background: rgba(148,163,184,0.16);
      border-color: rgba(148,163,184,0.40);
      color: #CBD5E1;
    }
    .group-chips-empty {
      font-size: 12px;
      color: var(--text-muted);
      font-style: italic;
    }

    /* ── Input dentro del rename modal ── */
    .modal-input {
      width: 100%;
      padding: 12px 14px;
      border: 1.5px solid var(--border-soft);
      border-radius: 10px;
      background: var(--bg-main);
      color: var(--text-main);
      font-family: inherit;
      font-size: 15px;
      font-weight: 600;
      outline: none;
      transition: border-color 0.15s, box-shadow 0.15s;
      box-sizing: border-box;
    }
    .modal-input:focus {
      border-color: #FF8A00;
      box-shadow: 0 0 0 3px rgba(255,138,0,0.18);
    }
    .modal-input::placeholder { color: var(--text-muted); font-weight: 500; }
    .modal-confirm--primary {
      background: #FF8A00 !important;
      color: #FFFFFF !important;
    }
    .modal-confirm--primary:hover { background: #E67A00 !important; }
    .modal-icon--info {
      background: rgba(255,138,0,0.12) !important;
      color: #FF8A00;
      box-shadow: 0 0 0 6px rgba(255,138,0,0.08);
    }
    /* Modales se acoplan al tema del chat activo. Edgar: 'estos deberían
       acoplarse a los temas del chat también'. Cuando hay color activo,
       el botón primario, el icono info, y los highlights toman el accent
       del tema (mismo patrón que action card, menú flotante, etc). */
    body[data-chat-theme] .modal-confirm--primary {
      background: var(--ws-chat-accent) !important;
      color: #0F172A !important; /* dark text para contraste sobre accent pastel */
      box-shadow: 0 6px 18px color-mix(in srgb, var(--ws-chat-accent) 40%, transparent) !important;
    }
    body[data-chat-theme] .modal-confirm--primary:hover {
      background: var(--ws-chat-accent-light) !important;
      box-shadow: 0 8px 22px color-mix(in srgb, var(--ws-chat-accent) 55%, transparent) !important;
    }
    body[data-chat-theme] .modal-icon--info {
      background: color-mix(in srgb, var(--ws-chat-accent) 18%, transparent) !important;
      color: var(--ws-chat-accent) !important;
      box-shadow: 0 0 0 6px color-mix(in srgb, var(--ws-chat-accent) 12%, transparent) !important;
    }
    body[data-chat-theme] .modal-cancel:hover {
      border-color: var(--ws-chat-accent) !important;
    }

    /* ── WORKSPACE CENTER ── */
    .workspace {
      display: flex; flex-direction: column;
      background: var(--bg-main);
      overflow: hidden;
    }

    /* ═══════════════════════════════════════════════════════════
       MODO BLANCO (claro) — JERARQUÍA DE SUPERFICIES
       Problema: con todo en blanco-sobre-casi-blanco no se distinguen
       cuadros ni secciones. Solución de arquitecto: el LIENZO va gris
       suave; así los paneles, tarjetas y burbujas blancas resaltan con
       elevación clara. (Solo aplica en modo claro: html sin data-theme.) */
    html:not([data-theme]) .ideas-page,
    html:not([data-theme]) .workspace,
    html:not([data-theme]) .feed {
      background: #E8ECF1;
    }
    /* Tarjetas del feed + burbuja de Pio: blancas, con borde nítido y
       sombra de elevación para que se lean como cuadros sobre el lienzo. */
    html:not([data-theme]) .feed .ffm-bubble,
    html:not([data-theme]) .feed .context-card,
    html:not([data-theme]) .feed .feed-step-card,
    html:not([data-theme]) .feed .feed-input-card,
    html:not([data-theme]) .feed .feed-opts-card,
    html:not([data-theme]) .feed .feed-loc-card {
      background: #FFFFFF;
      border: 1px solid #DBE2EA;
      box-shadow: 0 1px 2px rgba(15,23,42,0.05), 0 4px 14px rgba(15,23,42,0.07);
    }
    /* Paneles laterales: borde más marcado para separarse del lienzo gris */
    html:not([data-theme]) .portfolio  { border-right: 1px solid #D2DAE3; }
    html:not([data-theme]) .exec-panel { border-left: 1px solid #D2DAE3; }
    /* Divisores de sección del sidebar visibles */
    html:not([data-theme]) .pf-section + .pf-section { border-top-color: #D7DEE7; }

    /* ═══════════════════════════════════════════════════════════
       WELCOME / EMPTY-STATE del workspace.
       Saludo + 4 cards de plática + card grande "Subir negocio".
       Se muestra cuando no hay idea/negocio activo (ver JS). */
    /* Welcome con apariencia "premium dark" SIEMPRE — independiente de
       que el modo sea Oscuro o Blanco. Las letras, jerarquía y
       superficies son consistentes; el tema de color solo cambia el
       matiz (los overrides body[data-chat-theme] sustituyen los hex). */
    .feed-welcome {
      flex: 1; min-height: 0; overflow-y: auto;
      display: flex; align-items: flex-start; justify-content: center;
      padding: 56px 24px 32px;
      background: #0E1626;
    }
    /* Sin esto, el atributo [hidden] se ignora porque .feed-welcome ya
       define display:flex con mayor especificidad que el [hidden] del
       UA → el welcome se quedaba visible sobre el chat. */
    .feed-welcome[hidden] { display: none !important; }
    .fw-inner {
      width: 100%; max-width: 640px;
      display: flex; flex-direction: column;
      gap: 16px;
    }
    .fw-greeting {
      font-size: 30px; font-weight: 800;
      color: #F1F5F9;
      letter-spacing: -0.5px; line-height: 1.15;
    }
    .fw-wave { display: inline-block; }
    .fw-sub {
      font-size: 15px; color: rgba(241,245,249,0.72);
      margin-bottom: 6px;
    }
    .fw-cards {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 10px;
    }
    @media (max-width: 600px) {
      .fw-cards { grid-template-columns: 1fr; }
    }
    .fw-card {
      display: flex; align-items: center; gap: 12px;
      padding: 14px 16px;
      background: #0A1220;
      border: 1px solid rgba(255,255,255,0.07);
      border-radius: var(--r-md);
      color: #F1F5F9;
      font: inherit; font-size: 14px; font-weight: 600;
      text-align: left; cursor: pointer;
      box-shadow: 0 2px 8px rgba(0,0,0,0.20);
      transition: var(--tr);
    }
    .fw-card:hover {
      border-color: var(--accent);
      transform: translateY(-1px);
      box-shadow: 0 6px 18px rgba(0,0,0,0.30);
    }
    /* Edgar 2026-06-30: íconos SVG con gradientes tecnológicos
       (en vez de emojis chatos). Cada card tiene su propia paleta:
       idea=púrpura, ciudad=cyan, cheap=verde, spy=naranja-rojo. */
    .fw-card-icon {
      width: 36px;
      height: 36px;
      flex-shrink: 0;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      border-radius: 10px;
      background: rgba(255,255,255,0.04);
      border: 1px solid rgba(255,255,255,0.06);
      transition: all 0.28s cubic-bezier(0.32, 0.72, 0, 1);
      position: relative;
      overflow: hidden;
    }
    .fw-card-icon i {
      font-size: 20px;
      line-height: 1;
      position: relative;
      z-index: 1;
      transition: transform 0.28s cubic-bezier(0.32, 0.72, 0, 1);
    }
    /* Glow halo detrás del ícono — se intensifica al hover */
    .fw-card-icon::before {
      content: '';
      position: absolute;
      inset: 0;
      border-radius: inherit;
      opacity: 0.7;
      transition: opacity 0.3s ease;
    }
    .fw-card:hover .fw-card-icon { transform: scale(1.06); }
    .fw-card:hover .fw-card-icon i { transform: scale(1.08); }
    .fw-card:hover .fw-card-icon::before { opacity: 1; }

    /* IDEA — púrpura/violeta tech (creatividad, brainstorm) */
    .fw-card-icon--idea::before {
      background: linear-gradient(135deg, rgba(139, 92, 246, 0.20), rgba(167, 139, 250, 0.10));
    }
    .fw-card-icon--idea i {
      color: #C4B5FD;
      filter: drop-shadow(0 0 6px rgba(139, 92, 246, 0.40));
    }
    .fw-card:hover .fw-card-icon--idea {
      border-color: rgba(167, 139, 250, 0.45);
      box-shadow: 0 0 20px rgba(139, 92, 246, 0.22);
    }

    /* CITY — cyan/teal tech (frescura, claridad, datos) */
    .fw-card-icon--city::before {
      background: linear-gradient(135deg, rgba(6, 182, 212, 0.20), rgba(20, 184, 166, 0.10));
    }
    .fw-card-icon--city i {
      color: #5EEAD4;
      filter: drop-shadow(0 0 6px rgba(6, 182, 212, 0.45));
    }
    .fw-card:hover .fw-card-icon--city {
      border-color: rgba(20, 184, 166, 0.45);
      box-shadow: 0 0 20px rgba(6, 182, 212, 0.22);
    }

    /* CHEAP — verde esmeralda (ahorro, crecimiento) */
    .fw-card-icon--cheap::before {
      background: linear-gradient(135deg, rgba(16, 185, 129, 0.22), rgba(52, 211, 153, 0.10));
    }
    .fw-card-icon--cheap i {
      color: #6EE7B7;
      filter: drop-shadow(0 0 6px rgba(16, 185, 129, 0.45));
    }
    .fw-card:hover .fw-card-icon--cheap {
      border-color: rgba(52, 211, 153, 0.45);
      box-shadow: 0 0 20px rgba(16, 185, 129, 0.22);
    }

    /* SPY — naranja-rojo (curiosidad, atención, competencia) */
    .fw-card-icon--spy::before {
      background: linear-gradient(135deg, rgba(251, 113, 133, 0.22), rgba(251, 146, 60, 0.10));
    }
    .fw-card-icon--spy i {
      color: #FCA5A5;
      filter: drop-shadow(0 0 6px rgba(251, 113, 133, 0.45));
    }
    .fw-card:hover .fw-card-icon--spy {
      border-color: rgba(251, 113, 133, 0.45);
      box-shadow: 0 0 20px rgba(251, 113, 133, 0.22);
    }

    .fw-card-label { line-height: 1.3; }

    .fw-divider {
      display: flex; align-items: center; gap: 12px;
      margin: 14px 0 4px;
      font-size: 12px; font-weight: 800;
      letter-spacing: 1.4px; text-transform: uppercase;
      color: rgba(241,245,249,0.42);
    }
    .fw-divider::before, .fw-divider::after {
      content: ''; flex: 1; height: 1px;
      background: rgba(255,255,255,0.07);
    }

    .fw-upload-card {
      display: flex; align-items: center; gap: 18px;
      padding: 20px 22px;
      background: #0A1220;
      border: 1px solid rgba(255,255,255,0.07);
      border-radius: var(--r-lg);
      box-shadow: 0 10px 28px rgba(0,0,0,0.30);
    }
    @media (max-width: 600px) {
      .fw-upload-card { flex-direction: column; align-items: stretch; gap: 14px; }
    }
    .fw-upload-text { flex: 1; min-width: 0; }
    .fw-upload-title {
      font-size: 16px; font-weight: 800; color: #F1F5F9;
      margin-bottom: 4px;
    }
    .fw-upload-sub {
      font-size: 14px; color: rgba(241,245,249,0.72);
      line-height: 1.45;
    }
    .fw-upload-sub strong { color: #F1F5F9; font-weight: 800; }
    .fw-upload-actions {
      display: flex; gap: 10px; flex-shrink: 0;
      flex-wrap: wrap;
    }
    /* ═════════════════════════════════════════════════════
       TICKET MODAL — Edgar: 'cada pedido se les guarde en su CRM,
       cada ticket así'. Modal con preview del ticket monospace +
       botón Imprimir (window.print con @media print styles).
    ═════════════════════════════════════════════════════ */
    .pf-ticket-modal {
      position: fixed;
      inset: 0;
      z-index: 100000;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 24px;
      background: rgba(8, 12, 24, 0.78);
      backdrop-filter: blur(18px) saturate(140%);
      -webkit-backdrop-filter: blur(18px) saturate(140%);
      opacity: 0;
      transition: opacity 0.28s ease;
    }
    .pf-ticket-modal.is-in { opacity: 1; }
    .pf-ticket-modal.is-out { opacity: 0; transition: opacity 0.28s ease; }
    .pf-ticket-modal-inner {
      width: 100%;
      max-width: 420px;
      max-height: 90vh;
      display: flex;
      flex-direction: column;
      background: var(--card-bg, var(--bg-panel));
      border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent);
      border-radius: var(--r-lg);
      box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45);
      transform: translateY(14px) scale(0.96);
      opacity: 0;
      transition: transform 0.40s cubic-bezier(0.22, 1, 0.36, 1),
                  opacity 0.32s ease;
      overflow: hidden;
    }
    .pf-ticket-modal.is-in .pf-ticket-modal-inner {
      transform: translateY(0) scale(1);
      opacity: 1;
    }
    .pf-ticket-modal-header {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 14px 18px;
      border-bottom: 1px solid color-mix(in srgb, var(--text-main) 10%, transparent);
    }
    .pf-ticket-modal-title {
      display: inline-flex;
      align-items: center;
      gap: 10px;
      font-size: 14px;
      font-weight: 800;
      letter-spacing: -0.2px;
      color: var(--text-main);
    }
    .pf-ticket-modal-title i { color: var(--accent); font-size: 18px; }
    .pf-ticket-modal-close {
      background: transparent;
      border: 1px solid color-mix(in srgb, var(--text-main) 14%, transparent);
      color: color-mix(in srgb, var(--text-main) 65%, transparent);
      width: 32px; height: 32px;
      border-radius: 50%;
      cursor: pointer;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      font-size: 14px;
      transition: var(--tr);
    }
    .pf-ticket-modal-close:hover {
      background: color-mix(in srgb, var(--text-main) 8%, transparent);
      color: var(--text-main);
    }
    .pf-ticket-modal-body {
      flex: 1;
      overflow-y: auto;
      padding: 22px 22px 18px;
      background: linear-gradient(180deg,
        color-mix(in srgb, var(--text-main) 4%, transparent),
        color-mix(in srgb, var(--text-main) 1%, transparent));
    }
    .pf-ticket-modal-actions {
      display: flex;
      gap: 10px;
      padding: 12px 18px;
      border-top: 1px solid color-mix(in srgb, var(--text-main) 10%, transparent);
      justify-content: flex-end;
    }
    .pf-ticket-btn {
      display: inline-flex;
      align-items: center;
      gap: 8px;
      padding: 10px 18px;
      border-radius: var(--r-md);
      font-family: inherit;
      font-size: 13px;
      font-weight: 800;
      cursor: pointer;
      border: none;
      transition: var(--tr);
    }
    .pf-ticket-btn--primary {
      background: var(--accent);
      color: #FFFFFF;
      box-shadow: var(--shadow-accent);
    }
    .pf-ticket-btn--primary:hover {
      background: var(--accent-mid);
      transform: translateY(-1px);
    }
    .pf-ticket-btn--secondary {
      background: transparent;
      color: color-mix(in srgb, var(--text-main) 65%, transparent);
      border: 1px solid color-mix(in srgb, var(--text-main) 18%, transparent);
    }
    .pf-ticket-btn--secondary:hover {
      color: var(--text-main);
      background: color-mix(in srgb, var(--text-main) 5%, transparent);
    }

    /* TICKET RENDER — monospace, fondo blanco, look real */
    .pf-ticket {
      background: #FFFFFF;
      color: #0F172A;
      padding: 22px 18px;
      font-family: 'Courier New', Courier, monospace;
      font-size: 12px;
      line-height: 1.50;
      max-width: 320px;
      margin: 0 auto;
      box-shadow:
        0 4px 14px rgba(0, 0, 0, 0.18),
        0 0 0 1px rgba(0, 0, 0, 0.06);
      border-radius: 4px;
    }
    .pf-tk-header { text-align: center; margin-bottom: 8px; }
    .pf-tk-name {
      font-size: 15px;
      font-weight: 900;
      letter-spacing: 1px;
      margin-bottom: 4px;
    }
    .pf-tk-meta {
      text-align: center;
      font-size: 11px;
      color: #334155;
    }
    .pf-tk-sep {
      text-align: center;
      color: #64748B;
      margin: 5px 0;
      font-size: 11px;
      letter-spacing: 0;
    }
    .pf-tk-line {
      display: flex;
      align-items: flex-start;
      gap: 4px;
      font-size: 12px;
    }
    .pf-tk-line--head { font-weight: 700; }
    .pf-tk-qty {
      width: 32px;
      flex-shrink: 0;
      text-align: left;
    }
    .pf-tk-desc {
      flex: 1;
      overflow: hidden;
      white-space: nowrap;
      text-overflow: ellipsis;
    }
    .pf-tk-amt {
      width: 64px;
      flex-shrink: 0;
      text-align: right;
    }
    .pf-tk-total {
      font-weight: 900;
      font-size: 13px;
      margin-top: 2px;
    }
    .pf-tk-footer {
      text-align: center;
      font-size: 12px;
      font-weight: 700;
      margin-top: 10px;
    }
    .pf-tk-footer--sm {
      font-size: 9.5px;
      color: #64748B;
      font-weight: 400;
      margin-top: 4px;
      letter-spacing: 0.3px;
    }

    /* IMPRESIÓN — al hacer window.print() solo el ticket es visible.
       Edgar: 'cada ticket así' — debe poder imprimirse limpio. */
    @media print {
      body.pf-printing-ticket > *:not(.pf-ticket-modal) { display: none !important; }
      body.pf-printing-ticket .pf-ticket-modal {
        position: static !important;
        background: transparent !important;
        backdrop-filter: none !important;
        padding: 0 !important;
      }
      body.pf-printing-ticket .pf-ticket-modal-inner {
        max-width: none !important;
        box-shadow: none !important;
        border: none !important;
        transform: none !important;
        opacity: 1 !important;
      }
      body.pf-printing-ticket .pf-ticket-modal-header,
      body.pf-printing-ticket .pf-ticket-modal-actions {
        display: none !important;
      }
      body.pf-printing-ticket .pf-ticket-modal-body {
        padding: 0 !important;
        background: transparent !important;
      }
      body.pf-printing-ticket .pf-ticket {
        box-shadow: none !important;
        border: none !important;
        max-width: none !important;
        padding: 0 !important;
      }
    }

    /* ═════════════════════════════════════════════════════
       SYS WELCOME OVERLAY — Cinematic la primera vez que el
       user entra al CRM de un negocio. Edgar: 'aparezca el
       Piofly dando la bienvenida a su CRM'.

       Cubre el sys-panel con blur + card centrada (Pio + título
       + sub + 2 CTAs). Estilo cinemático coherente con el
       welcome del login y el tour del onboarding.
    ═════════════════════════════════════════════════════ */
    .pf-sys-welcome {
      position: absolute;
      inset: 0;
      z-index: 1000;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 24px;
      background: rgba(8, 12, 24, 0.78);
      backdrop-filter: blur(20px) saturate(140%);
      -webkit-backdrop-filter: blur(20px) saturate(140%);
      opacity: 0;
      transition: opacity 0.35s ease;
      pointer-events: auto;
      overflow: hidden;
    }
    .pf-sys-welcome.is-in { opacity: 1; }
    .pf-sys-welcome.is-out { opacity: 0; transition: opacity 0.38s ease; }

    .pf-sys-welcome-skip {
      position: absolute;
      top: 22px; right: 22px;
      z-index: 2;
      display: inline-flex;
      align-items: center;
      gap: 8px;
      background: rgba(255, 255, 255, 0.08);
      border: 1px solid rgba(255, 255, 255, 0.18);
      color: rgba(241, 245, 249, 0.85);
      padding: 9px 16px;
      border-radius: 999px;
      font-family: inherit;
      font-size: 12px;
      font-weight: 800;
      letter-spacing: 0.6px;
      text-transform: uppercase;
      cursor: pointer;
      backdrop-filter: blur(18px) saturate(140%);
      -webkit-backdrop-filter: blur(18px) saturate(140%);
      transition: all 0.18s ease;
    }
    .pf-sys-welcome-skip:hover {
      background: rgba(255, 255, 255, 0.16);
      border-color: rgba(255, 255, 255, 0.30);
      color: #FFFFFF;
      transform: translateY(-1px);
    }

    .pf-sys-welcome-card {
      max-width: 520px;
      width: 100%;
      display: flex;
      flex-direction: column;
      align-items: center;
      text-align: center;
      gap: 14px;
      padding: 32px 28px 28px;
      background: var(--card-bg, var(--bg-panel));
      border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent);
      border-radius: var(--r-xl);
      box-shadow:
        0 30px 70px rgba(0, 0, 0, 0.45),
        0 0 0 1px color-mix(in srgb, var(--accent) 14%, transparent),
        inset 0 1px 0 rgba(255, 255, 255, 0.08);
      transform: translateY(20px) scale(0.94);
      opacity: 0;
      transition: transform 0.55s cubic-bezier(0.22, 1, 0.36, 1),
                  opacity 0.40s ease;
    }
    .pf-sys-welcome.is-in .pf-sys-welcome-card {
      transform: translateY(0) scale(1);
      opacity: 1;
    }

    /* Stage: contenedor del logo + halo + sparks */
    .pf-sys-welcome-stage {
      position: relative;
      width: 140px;
      height: 140px;
      display: flex;
      align-items: center;
      justify-content: center;
      margin-bottom: 8px;
      transform: translateZ(0);
    }
    .pf-sys-welcome-halo {
      position: absolute;
      inset: -30px;
      border-radius: 50%;
      background: radial-gradient(circle,
        color-mix(in srgb, var(--accent) 45%, transparent) 0%,
        color-mix(in srgb, var(--accent) 10%, transparent) 40%,
        transparent 70%);
      filter: blur(18px);
      transform: scale(0);
      animation: pf-welcome-halo 1.4s cubic-bezier(0.18, 0.89, 0.32, 1.28) 0.10s forwards,
                 pf-welcome-halo-breathe 2.4s ease-in-out 1.5s infinite;
      pointer-events: none;
    }
    .pf-sys-welcome-sparks {
      position: absolute;
      top: 50%; left: 50%;
      width: 0; height: 0;
      pointer-events: none;
    }
    .pf-sys-welcome-logo {
      position: relative;
      z-index: 2;
      width: 110px;
      height: auto;
      transform: scale(0) rotate(-18deg);
      animation: pf-welcome-logo-in 0.95s cubic-bezier(0.18, 0.89, 0.32, 1.28) 0.10s forwards,
                 pf-welcome-logo-float 3.2s ease-in-out 1.2s infinite;
      filter: drop-shadow(0 10px 28px color-mix(in srgb, var(--accent) 45%, transparent));
    }

    .pf-sys-welcome-label {
      font-size: 11px;
      font-weight: 800;
      letter-spacing: 1.6px;
      text-transform: uppercase;
      color: color-mix(in srgb, var(--accent) 78%, var(--text-main));
      opacity: 0;
      animation: pf-welcome-text-in 0.55s cubic-bezier(0.22, 1, 0.36, 1) 0.65s forwards;
    }
    .pf-sys-welcome-title {
      font-size: clamp(22px, 3vw, 28px);
      font-weight: 900;
      letter-spacing: -0.4px;
      color: var(--text-main);
      margin: 0;
      line-height: 1.20;
      opacity: 0;
      transform: translateY(10px);
      animation: pf-welcome-text-in 0.60s cubic-bezier(0.22, 1, 0.36, 1) 0.85s forwards;
    }
    .pf-sys-welcome-sub {
      font-size: 14px;
      font-weight: 600;
      color: color-mix(in srgb, var(--text-main) 70%, transparent);
      line-height: 1.55;
      margin: 0;
      max-width: 440px;
      opacity: 0;
      transform: translateY(10px);
      animation: pf-welcome-text-in 0.60s cubic-bezier(0.22, 1, 0.36, 1) 1.05s forwards;
    }

    .pf-sys-welcome-actions {
      display: flex;
      gap: 10px;
      margin-top: 10px;
      width: 100%;
      flex-wrap: wrap;
      justify-content: center;
      opacity: 0;
      animation: pf-welcome-text-in 0.55s cubic-bezier(0.22, 1, 0.36, 1) 1.30s forwards;
    }
    .pf-sys-welcome-cta {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      gap: 8px;
      padding: 12px 22px;
      border-radius: var(--r-md);
      font-family: inherit;
      font-size: 14px;
      font-weight: 800;
      cursor: pointer;
      transition: var(--tr);
      border: none;
    }
    .pf-sys-welcome-cta--primary {
      background: var(--accent);
      color: #FFFFFF;
      box-shadow: var(--shadow-accent);
    }
    .pf-sys-welcome-cta--primary:hover {
      background: var(--accent-mid);
      transform: translateY(-1px);
      box-shadow: 0 10px 24px color-mix(in srgb, var(--accent) 40%, transparent);
    }
    .pf-sys-welcome-cta--secondary {
      background: transparent;
      color: color-mix(in srgb, var(--text-main) 65%, transparent);
      border: 1px solid color-mix(in srgb, var(--text-main) 18%, transparent);
    }
    .pf-sys-welcome-cta--secondary:hover {
      color: var(--text-main);
      border-color: color-mix(in srgb, var(--text-main) 32%, transparent);
      background: color-mix(in srgb, var(--text-main) 4%, transparent);
    }

    @media (max-width: 520px) {
      .pf-sys-welcome-card { padding: 24px 20px 22px; }
      .pf-sys-welcome-stage { width: 110px; height: 110px; }
      .pf-sys-welcome-logo { width: 88px; }
      .pf-sys-welcome-title { font-size: 20px; }
      .pf-sys-welcome-sub { font-size: 13px; }
      .pf-sys-welcome-cta { flex: 1 1 100%; }
    }

    /* ═════════════════════════════════════════════════════
       CONTEXT SWITCH OVERLAY — Cinematic al cambiar de negocio/
       idea. Cubre el .workspace con un blur sutil + card centrada
       con icon + nombre + spinner. Estilo Linear/Notion: el user
       SIENTE que está cambiando a un sistema distinto, no
       trivializando un click.
    ═════════════════════════════════════════════════════ */
    .workspace { position: relative; }
    .pf-context-switch {
      position: absolute;
      inset: 0;
      z-index: 800;
      display: flex;
      align-items: center;
      justify-content: center;
      background: color-mix(in srgb, var(--bg-main) 78%, transparent);
      backdrop-filter: blur(14px) saturate(140%);
      -webkit-backdrop-filter: blur(14px) saturate(140%);
      opacity: 0;
      transition: opacity 0.28s ease;
      pointer-events: auto;
      cursor: progress;
    }
    .pf-context-switch.is-in { opacity: 1; }
    .pf-context-switch.is-out { opacity: 0; transition: opacity 0.38s ease; }
    .pf-ctx-card {
      display: flex;
      align-items: center;
      gap: 18px;
      padding: 18px 26px 18px 22px;
      background: var(--card-bg, var(--bg-panel));
      border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent);
      border-radius: var(--r-lg);
      box-shadow:
        0 24px 60px rgba(0, 0, 0, 0.45),
        0 0 0 1px color-mix(in srgb, var(--accent) 15%, transparent),
        inset 0 1px 0 rgba(255, 255, 255, 0.08);
      transform: translateY(14px) scale(0.94);
      opacity: 0;
      transition: transform 0.42s cubic-bezier(0.22, 1, 0.36, 1),
                  opacity 0.32s ease;
    }
    .pf-context-switch.is-in .pf-ctx-card {
      transform: translateY(0) scale(1);
      opacity: 1;
    }
    .pf-ctx-icon {
      flex-shrink: 0;
      width: 56px; height: 56px;
      display: flex;
      align-items: center;
      justify-content: center;
      background: linear-gradient(135deg,
        color-mix(in srgb, var(--accent) 32%, transparent),
        color-mix(in srgb, var(--accent) 16%, transparent));
      border: 1px solid color-mix(in srgb, var(--accent) 32%, transparent);
      border-radius: var(--r-md);
      color: var(--accent-light, var(--accent));
      font-size: 26px;
      box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.20),
        0 6px 18px color-mix(in srgb, var(--accent) 28%, transparent);
    }
    .pf-ctx-info {
      display: flex;
      flex-direction: column;
      gap: 4px;
      min-width: 180px;
      max-width: 320px;
    }
    .pf-ctx-label {
      font-size: 11px;
      font-weight: 800;
      letter-spacing: 1.5px;
      text-transform: uppercase;
      color: color-mix(in srgb, var(--accent) 78%, var(--text-main));
    }
    .pf-ctx-name {
      font-size: 19px;
      font-weight: 800;
      letter-spacing: -0.30px;
      color: var(--text-main);
      line-height: 1.20;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .pf-ctx-spinner {
      flex-shrink: 0;
      width: 22px; height: 22px;
      border: 2.5px solid color-mix(in srgb, var(--accent) 22%, transparent);
      border-top-color: var(--accent);
      border-radius: 50%;
      animation: pf-btn-spin 0.7s linear infinite;
      margin-left: 6px;
    }
    @media (max-width: 520px) {
      .pf-ctx-card { padding: 14px 18px; gap: 12px; }
      .pf-ctx-icon { width: 46px; height: 46px; font-size: 22px; }
      .pf-ctx-info { min-width: 140px; max-width: 220px; }
      .pf-ctx-name { font-size: 16px; }
    }

    /* Spinner inline genérico para botones en estado loading (auth
       modal, sub-acciones). Mantiene el color brand del botón, solo
       cambia el contenido. NO verde, NO palomita. Estilo Stripe/Linear. */
    .btn-inline-spinner {
      display: inline-block;
      width: 14px; height: 14px;
      margin-left: 8px;
      border: 2px solid rgba(255,255,255,0.32);
      border-top-color: #FFFFFF;
      border-radius: 50%;
      animation: pf-btn-spin 0.7s linear infinite;
      vertical-align: middle;
    }
    @keyframes pf-btn-spin { to { transform: rotate(360deg); } }
    .is-loading {
      cursor: wait !important;
      pointer-events: none;
      opacity: 0.92;
    }

    /* BUG REAL detrás de 'Ver mis negocios siempre aparece' (4 fixes
       previos fallaron por esto): el padre .fw-upload-actions tiene
       display:flex, lo que IGNORA el atributo [hidden] del hijo
       (memoria project_pitfalls.md). JS seteaba fwView.hidden=true
       correctamente, pero el browser seguía mostrando el botón. Sin
       este !important, ninguna lógica JS puede ocultar el botón.
       Edgar lo reportó 4 veces; ahora SÍ se oculta. */
    .fw-view-btn[hidden] {
      display: none !important;
    }
    .fw-upload-btn {
      display: inline-flex; align-items: center; gap: 8px;
      padding: 12px 18px;
      border-radius: var(--r-md);
      background: var(--accent); color: #fff;
      border: none;
      font: inherit; font-size: 14px; font-weight: 800;
      cursor: pointer;
      box-shadow: var(--shadow-accent);
      transition: var(--tr);
    }
    .fw-upload-btn:hover { transform: translateY(-1px); filter: brightness(1.05); }
    .fw-upload-btn:active { transform: translateY(0); }
    /* Botón secundario "Ver mis negocios" — solo aparece si ya hay negocios */
    .fw-view-btn {
      display: inline-flex; align-items: center; gap: 8px;
      padding: 12px 18px;
      border-radius: var(--r-md);
      background: transparent;
      color: #F1F5F9;
      border: 1.5px solid rgba(255,255,255,0.16);
      font: inherit; font-size: 14px; font-weight: 800;
      cursor: pointer;
      transition: var(--tr);
    }
    .fw-view-btn:hover {
      border-color: var(--accent);
      color: var(--accent);
      background: var(--accent-soft);
      transform: translateY(-1px);
    }
    .fw-view-btn:active { transform: translateY(0); }

    /* ─── Modo BLANCO (claro, sin tema de color): el welcome adopta la
       apariencia clara para que combine con el resto de la app. Aplica
       solo cuando <html> no tiene data-theme (los temas de color fuerzan
       data-theme="dark", así que esos rules no se ven afectados). */
    html:not([data-theme]) .feed-welcome { background: #F1F5F9; }
    html:not([data-theme]) .feed-welcome .fw-greeting,
    html:not([data-theme]) .feed-welcome .fw-upload-title { color: #0F172A; }
    html:not([data-theme]) .feed-welcome .fw-sub,
    html:not([data-theme]) .feed-welcome .fw-upload-sub { color: #475569; }
    html:not([data-theme]) .feed-welcome .fw-upload-sub strong { color: #0F172A; }
    html:not([data-theme]) .feed-welcome .fw-card {
      background: #FFFFFF;
      border-color: #E2E8F0;
      color: #0F172A;
      box-shadow: 0 1px 3px rgba(15,23,42,0.06), 0 4px 12px rgba(15,23,42,0.05);
    }
    html:not([data-theme]) .feed-welcome .fw-card:hover {
      border-color: var(--accent);
      box-shadow: 0 6px 18px rgba(15,23,42,0.10);
    }
    html:not([data-theme]) .feed-welcome .fw-divider { color: #94A3B8; }
    html:not([data-theme]) .feed-welcome .fw-divider::before,
    html:not([data-theme]) .feed-welcome .fw-divider::after { background: #E2E8F0; }
    html:not([data-theme]) .feed-welcome .fw-upload-card {
      background: #FFFFFF;
      border-color: #E2E8F0;
      box-shadow: 0 10px 28px rgba(15,23,42,0.08);
    }
    html:not([data-theme]) .feed-welcome .fw-view-btn {
      color: #0F172A;
      border-color: #CBD5E1;
    }
    html:not([data-theme]) .feed-welcome .fw-view-btn:hover {
      border-color: var(--accent);
      color: var(--accent);
      background: var(--accent-soft);
    }

    /* ─── Welcome board tematizado con el color del chat activo ───
       Adopta el lienzo oscuro del tema (--ws-chat-feed-bg), las cards
       el bubble-bg, el botón "Ver" outline temático, y el botón primario
       el acento del tema. Solo aplica cuando hay un tema de color. */
    body[data-chat-theme] .feed-welcome {
      background: var(--ws-chat-feed-bg);
    }
    body[data-chat-theme] .feed-welcome .fw-greeting,
    body[data-chat-theme] .feed-welcome .fw-upload-title { color: var(--ws-text-main); }
    body[data-chat-theme] .feed-welcome .fw-sub,
    body[data-chat-theme] .feed-welcome .fw-upload-sub { color: var(--ws-text-soft); }
    body[data-chat-theme] .feed-welcome .fw-upload-sub strong { color: var(--ws-text-main); }
    body[data-chat-theme] .feed-welcome .fw-card {
      background: var(--ws-chat-bubble-bg);
      border-color: var(--ws-border);
      color: var(--ws-text-main);
      box-shadow: 0 2px 8px rgba(0,0,0,0.20);
    }
    body[data-chat-theme] .feed-welcome .fw-card:hover {
      border-color: var(--ws-chat-accent);
      background: var(--ws-surface-hover);
      box-shadow: 0 6px 18px rgba(0,0,0,0.30);
    }
    body[data-chat-theme] .feed-welcome .fw-divider { color: var(--ws-chat-accent-light); }
    body[data-chat-theme] .feed-welcome .fw-divider::before,
    body[data-chat-theme] .feed-welcome .fw-divider::after { background: var(--ws-border); }
    body[data-chat-theme] .feed-welcome .fw-upload-card {
      background: var(--ws-chat-bubble-bg);
      border-color: var(--ws-border);
      box-shadow: 0 10px 28px rgba(0,0,0,0.30);
    }
    body[data-chat-theme] .feed-welcome .fw-view-btn {
      background: transparent;
      color: var(--ws-text-main);
      border-color: var(--ws-border-strong);
    }
    body[data-chat-theme] .feed-welcome .fw-view-btn:hover {
      border-color: var(--ws-chat-accent);
      color: var(--ws-chat-accent-light);
      background: color-mix(in srgb, var(--ws-chat-accent) 14%, transparent);
    }
    body[data-chat-theme] .feed-welcome .fw-upload-btn {
      background: var(--ws-chat-accent);
      color: #0F172A;
      box-shadow: 0 6px 18px color-mix(in srgb, var(--ws-chat-accent) 35%, transparent);
    }
    body[data-chat-theme] .feed-welcome .fw-upload-btn:hover { filter: brightness(1.05); transform: translateY(-1px); }

    /* Pio bar */
    /* Barra Pio: OCULTA en desktop. La identidad "Pio" se removió y los
       botones de acción se movieron al panel Resumen → el chat gana todo
       ese espacio. Solo reaparece en móvil (ver media query) para los
       botones que abren los drawers. */
    /* ── FÉNIX IDENTITY BAR ── */
    /* Oculta en desktop — solo visible en móvil/tablet vía media query */
    .pio-bar {
      height: 64px; flex-shrink: 0;
      display: none; align-items: center; justify-content: space-between;
      padding: 0 16px;
      background: var(--bg-panel);
      border-bottom: 1px solid var(--border-soft);
      box-shadow: 0 1px 0 var(--border-soft);
    }
    /* Lado izquierdo: avatar + info del contacto */
    .fb-identity {
      display: flex; align-items: center; gap: 12px;
      min-width: 0; flex: 1;
    }
    .fb-avatar-wrap {
      position: relative; flex-shrink: 0;
    }
    .fb-avatar {
      width: 40px; height: 40px;
      display: flex; align-items: center; justify-content: center;
    }
    .fb-avatar img { width: 34px; height: 34px; object-fit: contain; }
    .fb-online-dot {
      position: absolute; bottom: 0; right: 0;
      width: 11px; height: 11px; border-radius: 50%;
      background: #22C55E;
      border: 2px solid var(--bg-panel);
      animation: fb-pulse 2.4s ease-in-out infinite;
    }
    @keyframes fb-pulse {
      0%, 100% { box-shadow: 0 0 0 0 rgba(34,197,94,0.5); }
      50%       { box-shadow: 0 0 0 4px rgba(34,197,94,0); }
    }
    .fb-info { min-width: 0; }
    .fb-name {
      font-size: 15px; font-weight: 800;
      color: var(--text-main); line-height: 1.2;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .fb-role {
      font-size: 12px; color: var(--text-soft); font-weight: 500;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    /* Lado derecho: botones iconónicos compactos */
    .fb-actions {
      display: flex; align-items: center; gap: 4px; flex-shrink: 0;
    }
    .fb-icon-btn {
      width: 38px; height: 38px;
      border-radius: 50%;
      border: none; background: transparent;
      color: var(--text-soft);
      display: flex; align-items: center; justify-content: center;
      font-size: 18px;
      transition: background 0.15s, color 0.15s, transform 0.15s;
      -webkit-tap-highlight-color: transparent;
      cursor: pointer;
    }
    .fb-icon-btn:active {
      background: var(--bg-soft);
      color: var(--accent);
      transform: scale(0.9);
    }
    .fb-icon-btn.is-active {
      color: var(--accent);
      background: color-mix(in srgb, var(--accent) 12%, transparent);
    }
    /* Dot indicador de color en botón paleta de pio-bar */
    .fb-palette-dot {
      position: absolute;
      top: 4px; right: 4px;
      width: 7px; height: 7px;
      border-radius: 50%;
      background: #64748B;
      border: 1.5px solid var(--bg-panel);
      pointer-events: none;
    }
    /* Alias compat (el JS aún puede usar .fb-left / .fb-right) */
    .fb-left, .fb-right { display: none; }
    .fb-menu-btn, .fb-panel-btn { display: none; }
    .fb-idea-label { display: none; }

    /* ── BOTTOM NAVIGATION (hidden on desktop) ── */
    .ws-bottom-nav { display: none; }


    /* Feed */
    .feed {
      flex: 1; overflow-y: auto;
      padding: 28px 28px 20px;
      display: flex; flex-direction: column; gap: 14px;
      background: var(--bg-main);
    }
    .feed::-webkit-scrollbar { width: 6px; }
    .feed::-webkit-scrollbar-thumb { background: var(--border-mid); border-radius: 6px; }
    .feed::-webkit-scrollbar-thumb:hover { background: var(--border-strong); }

    /* Feed item enter animation */
    .feed-enter {
      opacity: 0; transform: translateY(10px);
      transition: opacity 0.3s ease, transform 0.3s ease;
    }
    .feed-enter.feed-visible { opacity: 1; transform: translateY(0); }

    /* 1. Bounce en mensaje de Pio */
    .feed-pio-msg.feed-visible .ffm-bubble {
      animation: msg-bounce 0.45s cubic-bezier(0.34, 1.56, 0.64, 1) both;
    }
    @keyframes msg-bounce {
      0%   { transform: scale(0.94) translateY(4px); opacity: 0; }
      100% { transform: scale(1)    translateY(0);   opacity: 1; }
    }

    /* 2. Step card slide-in desde abajo */
    .feed-step-card.feed-visible {
      animation: step-slide 0.4s cubic-bezier(0.22, 1, 0.36, 1) both;
    }
    @keyframes step-slide {
      0%   { transform: translateY(16px) scale(0.98); opacity: 0; }
      100% { transform: translateY(0)    scale(1);    opacity: 1; }
    }

    /* 3. Panel derecho — flash al cambiar paso */
    .ep-current {
      animation: ep-flash 0.35s ease both;
    }
    @keyframes ep-flash {
      0%   { opacity: 0; transform: scale(0.97); }
      100% { opacity: 1; transform: scale(1); }
    }

    /* ═════════════════════════════════════
       MENSAJES — 4 tipos
       1) Pio normal — limpio, borde suave
       2) Acción — fondo naranja muy suave
       3) Usuario — azul con texto blanco, derecha
       4) Sistema/progreso — discreto, pequeño
    ═════════════════════════════════════ */
    .feed-pio-msg { display: flex; align-items: flex-start; gap: 12px; max-width: 100%; }
    .ffm-cursor {
      display: inline-block; color: var(--accent);
      animation: cursor-blink 0.55s step-end infinite;
      font-size: 14px; line-height: 1; margin-left: 1px;
    }
    @keyframes cursor-blink {
      0%, 100% { opacity: 1; }
      50%       { opacity: 0; }
    }
    .ffm-avatar {
      display: none !important;
      align-items: center;
      justify-content: center;
      width: 38px;
      height: 38px;
      border-radius: 50%;
      background: var(--bg-panel);
      border: 2px solid var(--accent);
      box-shadow: 0 0 10px color-mix(in srgb, var(--accent) 30%, transparent);
      overflow: hidden;
      flex-shrink: 0;
      transition: border-color 0.25s, box-shadow 0.25s;
      margin-top: 2px;
    }
    .ffm-avatar img {
      width: 24px;
      height: 24px;
      object-fit: contain;
    }

    /* Badge "IA" para mensajes generados por el modelo */
    .ai-badge {
      display: inline-flex; align-items: center; gap: 5px;
      margin-top: 10px;
      padding: 3px 9px;
      border-radius: var(--r-pill);
      font-size: 10px; font-weight: 800;
      background: var(--primary-soft);
      color: var(--primary-dark);
      text-transform: uppercase;
      letter-spacing: 0.8px;
      width: fit-content;
    }
    [data-theme="dark"] .ai-badge { color: var(--primary-light); }
    .ai-badge i { font-size: 11px; }

    /* 1) Pio normal */
    .ffm-bubble {
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: 18px 18px 18px 4px; /* Sleek, asymmetrical modern bubble */
      padding: 14px 18px;
      font-size: 15px; line-height: 1.6; color: var(--text-main);
      box-shadow: var(--shadow-xs);
      max-width: 760px;
      transition: all 0.2s ease;
    }
    [data-theme="dark"] .ffm-bubble {
      background: rgba(255, 255, 255, 0.02) !important;
      border-color: rgba(255, 255, 255, 0.06) !important;
      backdrop-filter: blur(10px);
      -webkit-backdrop-filter: blur(10px);
      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.18);
    }

    /* Micro-acciones dentro de la burbuja (CTAs contextuales) */
    .ffm-actions {
      display: flex; flex-wrap: wrap; gap: 8px;
      margin-top: 12px; padding-top: 12px;
      border-top: 1px solid rgba(255,255,255,0.10);
    }
    [data-theme="light"] .ffm-actions { border-top-color: rgba(0,0,0,0.08); }
    .ffm-action-btn {
      display: inline-flex; align-items: center; gap: 7px;
      padding: 7px 14px;
      border-radius: 999px;
      background: var(--accent-soft);
      border: 1.5px solid var(--accent);
      color: var(--accent-light, var(--accent));
      font: inherit;
      font-size: 13px; font-weight: 700;
      cursor: pointer;
      transition: var(--tr-fast);
      white-space: nowrap;
    }
    .ffm-action-btn i { font-size: 14px; }
    .ffm-action-btn:hover {
      background: var(--accent);
      color: white;
      transform: translateY(-1px);
      box-shadow: 0 4px 12px var(--accent-soft);
    }

    /* Polish del chat dentro del sys-panel (fondo, glow, contraste) */
    .sys-panel .sys-chat .ffm-bubble {
      box-shadow: 0 0 0 1px rgba(255,255,255,0.04), 0 6px 18px rgba(0,0,0,0.30) !important;
    }
    .sys-panel .sys-chat .ffm-bubble + .ffm-bubble {
      margin-top: 8px;
    }
    .sys-panel .sys-chat .feed-pio-msg {
      margin-bottom: 14px;
    }
    .sys-panel .sys-chat .feed-user-msg {
      margin-bottom: 14px;
    }
    /* Glow sutil en burbuja con acciones para llamar la atención */
    .sys-panel .sys-chat .ffm-bubble:has(.ffm-actions) {
      border: 1px solid var(--accent-soft) !important;
      box-shadow: 0 0 0 1px var(--accent-soft), 0 8px 24px rgba(0,0,0,0.35) !important;
    }
    /* Tipografía un poco más brillante */
    .sys-panel .sys-chat .ffm-bubble {
      color: var(--text-main) !important;
      font-weight: 500;
    }

    /* Label interno */
    .ffm-label {
      display: inline-flex; align-items: center; gap: 5px;
      font-size: 11px; font-weight: 800;
      text-transform: uppercase; letter-spacing: 0.9px;
      color: var(--accent-dark); margin-bottom: 6px;
    }
    .ffm-label i { font-size: 12px; }

    /* 2) Acción — naranja suave */
    .ffm-bubble--action {
      background: var(--accent-soft);
      border: 1px solid rgba(255, 138, 0, 0.22);
      border-left: 3px solid var(--accent);
      border-radius: var(--r-md);
      padding: 13px 16px;
      font-size: 15px; line-height: 1.6; color: var(--text-main);
      box-shadow: 0 2px 8px rgba(255, 138, 0, 0.08);
      max-width: 760px;
    }
    [data-theme="dark"] .ffm-bubble--action {
      background: var(--accent-soft);
      border-color: rgba(255, 138, 0, 0.28);
    }

    /* Importante = acción (alias) */
    .ffm-bubble--important {
      background: var(--accent-soft);
      border: 1px solid rgba(255, 138, 0, 0.22);
      border-left: 3px solid var(--accent);
      border-radius: var(--r-md);
      padding: 13px 16px;
      font-size: 15px; line-height: 1.6; color: var(--text-main);
      box-shadow: 0 2px 8px rgba(255, 138, 0, 0.08);
      max-width: 760px;
    }

    /* Typing indicator */
    .feed-typing { display: flex; align-items: center; gap: 12px; max-width: 100%; }
    .ft-avatar {
      display: none !important;
      align-items: center;
      justify-content: center;
      width: 38px;
      height: 38px;
      border-radius: 50%;
      background: var(--bg-panel);
      border: 2px solid var(--accent);
      box-shadow: 0 0 10px color-mix(in srgb, var(--accent) 30%, transparent);
      overflow: hidden;
      flex-shrink: 0;
      transition: border-color 0.25s, box-shadow 0.25s;
    }
    .ft-avatar img {
      width: 24px;
      height: 24px;
      object-fit: contain;
    }
    .ft-dots {
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: var(--r-md);
      padding: 11px 16px;
      display: flex; align-items: center; gap: 0;
      box-shadow: var(--shadow-xs);
    }
    .ft-label {
      font-size: 13px; font-weight: 600; color: var(--text-soft);
      animation: label-pulse 1.6s ease-in-out infinite;
    }
    .ft-dot-1, .ft-dot-2, .ft-dot-3 {
      width: 7px; height: 7px; border-radius: 50%;
      background: var(--accent); display: none;
    }
    .ft-dot-1 { animation: dot-bounce 1.2s ease-in-out 0s    infinite; }
    .ft-dot-2 { animation: dot-bounce 1.2s ease-in-out 0.2s  infinite; }
    .ft-dot-3 { animation: dot-bounce 1.2s ease-in-out 0.4s  infinite; }
    @keyframes dot-bounce {
      0%, 80%, 100% { transform: scale(0.7); opacity: 0.4; }
      40%           { transform: scale(1.2); opacity: 1;   }
    }
    @keyframes label-pulse {
      0%, 100% { opacity: 0.5; }
      50%       { opacity: 1; }
    }

    /* 3) User message — azul sólido, derecha */
    .feed-user-msg { display: flex; justify-content: flex-end; }
    .fum-bubble {
      background: var(--primary);
      color: white;
      border-radius: 18px 18px 4px 18px; /* Elegant modern asymmetrical shape */
      padding: 12px 18px;
      font-size: 15px; line-height: 1.55; font-weight: 600;
      max-width: 520px;
      box-shadow: 0 4px 14px rgba(0, 143, 200, 0.22);
      transition: all 0.2s ease;
    }

    /* 4) System/progress — discreto */
    .feed-system-msg {
      font-size: 12px; font-weight: 600;
      color: var(--text-muted);
      padding: 4px 12px;
      text-align: center;
    }

    /* Step card — premium execution card */
    .feed-step-card {
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: var(--r-lg);
      box-shadow: var(--shadow-sm);
      max-width: 760px;
      overflow: hidden;
      position: relative;
    }
    .feed-step-card::before {
      content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px;
      background: linear-gradient(90deg, var(--accent), var(--accent-light));
    }
    .fsc-head {
      display: flex; align-items: center; justify-content: space-between;
      padding: 16px 20px 0;
    }
    .fsc-badge {
      font-size: 10px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1px; color: var(--accent-dark);
      background: var(--accent-soft);
      padding: 3px 9px; border-radius: var(--r-pill);
    }
    .fsc-status {
      font-size: 12px; font-weight: 700; color: var(--text-muted);
      display: flex; align-items: center; gap: 5px;
    }
    .fsc-status--active { color: var(--primary); }
    .fsc-status--done { color: var(--green); }
    .fsc-status--loading { color: var(--text-muted); }
    .fsc-title {
      padding: 10px 20px 0;
      font-size: 17px; font-weight: 800; color: var(--text-main); line-height: 1.3;
    }
    .fsc-guidance {
      padding: 12px 20px 0;
      font-size: 14px; line-height: 1.7; color: var(--text-soft);
    }
    .fsc-tasks {
      padding: 14px 20px 18px;
      list-style: none;
      display: flex; flex-direction: column; gap: 10px;
    }
    .fsc-tasks li {
      display: flex; gap: 12px; align-items: flex-start;
      font-size: 14px; color: var(--text-main); line-height: 1.5;
    }
    .fsc-tasks li::before {
      content: '';
      width: 7px; height: 7px; border-radius: 50%;
      background: var(--accent); flex-shrink: 0;
      margin-top: 7px;
      box-shadow: 0 0 0 3px var(--accent-soft);
    }
    .fsc-complete-btn {
      margin: 0 20px 20px;
      display: inline-flex; align-items: center; gap: 8px;
      padding: 11px 20px;
      background: var(--accent); color: white;
      border-radius: var(--r-sm);
      font-size: 14px; font-weight: 800;
      transition: var(--tr);
      box-shadow: var(--shadow-accent);
    }
    .fsc-complete-btn:hover { background: var(--accent-mid); transform: translateY(-1px); }
    /* Loading skeleton */
    .fsc-skeleton {
      height: 13px; background: var(--bg-alt);
      border-radius: 4px; margin: 4px 0;
      animation: shimmer 1.4s infinite;
    }
    .fsc-skeleton--short { width: 60%; }
    @keyframes shimmer {
      0%, 100% { opacity: 0.6; }
      50% { opacity: 1; }
    }

    /* Locked step preview */
    .feed-locked {
      display: flex; align-items: center; gap: 12px;
      padding: 11px 16px;
      background: var(--bg-alt);
      border: 1px solid var(--border);
      border-radius: var(--r-sm);
      max-width: 680px;
      opacity: 0.65;
    }
    .fl-icon {
      width: 30px; height: 30px; border-radius: 50%;
      background: var(--border); color: var(--text-light);
      display: flex; align-items: center; justify-content: center;
      font-size: 13px; flex-shrink: 0;
    }
    .fl-info { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0; }
    .fl-num { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.8px; color: var(--text-light); }
    .fl-title { font-size: 13px; font-weight: 600; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .fl-preview { font-size: 12px; color: var(--text-light); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

    /* Completion separator (system/progress msg) */
    .feed-sep {
      display: flex; align-items: center; gap: 10px;
      max-width: 760px;
    }
    .feed-sep::before, .feed-sep::after {
      content: ''; flex: 1; height: 1px; background: var(--border-soft);
    }
    .feed-sep span {
      font-size: 11px; font-weight: 800; color: var(--green-dark);
      text-transform: uppercase; letter-spacing: 1px;
      padding: 4px 12px;
      background: var(--green-soft); border-radius: var(--r-pill);
    }
    [data-theme="dark"] .feed-sep span { color: #6EE7B7; }

    /* New idea input card */
    .feed-input-card {
      background: var(--white);
      border: 1px solid var(--border);
      border-radius: var(--r-md);
      padding: 20px;
      max-width: 500px;
      box-shadow: var(--shadow-sm);
      /* margin-bottom defensivo: cuando hay chips arriba, el input queda más
         abajo y puede quedar pegado al borde inferior del feed scroll.
         Este respiro garantiza que se vea cómodo y se pueda hacer focus. */
      margin-bottom: 12px;
      position: relative;
    }
    /* En modo dark de workspace o themed, asegurar el input es legible
       (color por default puede chocar con el bg blanco original). */
    .fic-input { position: relative; z-index: 1; }
    .fic-input {
      width: 100%;
      border: 1.5px solid var(--border); border-radius: var(--r-sm);
      padding: 11px 14px;
      font-family: inherit; font-size: 14px; color: var(--text);
      background: var(--bg); outline: none;
      margin-bottom: 10px;
      transition: border-color 0.15s;
    }
    .fic-input:focus { border-color: var(--gold); background: var(--white); }
    .fic-btn {
      width: 100%;
      background: var(--gold); color: white;
      border-radius: var(--r-sm);
      padding: 10px 20px;
      font-size: 14px; font-weight: 700;
      display: flex; align-items: center; justify-content: center; gap: 8px;
      transition: var(--tr);
    }
    .fic-btn:hover { background: var(--gold-dark); }
    .fic-hint { font-size: 12px; color: var(--text-light); margin-top: 10px; text-align: center; }

    /* Header chiquito arriba de los chips */
    .fic-label {
      font-size: 13px; font-weight: 700;
      color: var(--text-soft, #475569);
      margin-bottom: 12px;
      letter-spacing: 0.01em;
    }
    /* Grid de chips presets — wrap natural, gap cómodo, tap-friendly */
    .fic-chips {
      display: flex; flex-wrap: wrap;
      gap: 7px;
      margin-bottom: 14px;
    }
    .fic-chip {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 7px 11px;
      border-radius: 999px;
      background: var(--bg-soft, #F1F5F9);
      border: 1px solid var(--border-soft, #E2E8F0);
      color: var(--text-main, #0F172A);
      font-family: inherit;
      font-size: 12px; font-weight: 700;
      cursor: pointer;
      transition: background 0.16s ease, border-color 0.16s ease, transform 0.12s ease, color 0.16s ease;
      letter-spacing: 0.01em;
    }
    .fic-chip i { font-size: 13px; color: var(--gold, #FF8A00); }
    .fic-chip:hover {
      background: rgba(255, 138, 0, 0.10);
      border-color: rgba(255, 138, 0, 0.40);
      transform: translateY(-1px);
    }
    .fic-chip--picked {
      background: var(--gold, #FF8A00) !important;
      border-color: var(--gold, #FF8A00) !important;
      color: white !important;
      transform: scale(0.96);
      box-shadow: 0 4px 12px rgba(255, 138, 0, 0.35);
    }
    .fic-chip--picked i { color: white !important; }

    /* Divider "O escríbela" entre chips e input */
    .fic-divider {
      display: flex; align-items: center; gap: 10px;
      margin: 6px 0 12px;
      color: var(--text-muted, #94A3B8);
      font-size: 11px; font-weight: 700;
      letter-spacing: 1px;
      text-transform: uppercase;
    }
    .fic-divider::before,
    .fic-divider::after {
      content: ''; flex: 1; height: 1px;
      background: var(--border-soft, #E2E8F0);
    }

    /* Cards de opciones tipo formulario (estilo landing), grid 2 columnas */
    .feed-opts-card {
      display: grid;
      grid-template-columns: repeat(2, 1fr);
      gap: 8px;
      max-width: 620px;
    }
    @media (max-width: 600px) {
      .feed-opts-card { grid-template-columns: 1fr; }
    }
    .feed-opt {
      display: flex; align-items: center; gap: 14px;
      padding: 14px 16px;
      border-radius: var(--r-md);
      border: 1.5px solid var(--border-soft);
      background: var(--bg-panel);
      color: var(--text-main);
      font-family: inherit;
      cursor: pointer;
      text-align: left;
      transition: var(--tr-fast);
      width: 100%;
    }
    .feed-opt:hover:not(:disabled) {
      border-color: var(--accent);
      background: var(--accent-soft);
      transform: translateX(2px);
    }
    .feed-opt:disabled { opacity: 0.5; cursor: default; transform: none; }
    .feed-opt--selected {
      background: var(--accent-soft) !important;
      border-color: var(--accent) !important;
      opacity: 1 !important;
    }
    .feed-opt-icon {
      width: 38px; height: 38px; flex-shrink: 0;
      display: flex; align-items: center; justify-content: center;
      font-size: 22px;
      border-radius: var(--r-sm);
      background: var(--accent-soft);
    }
    .feed-opt--selected .feed-opt-icon { background: var(--accent); color: white; }
    .feed-opt-body { flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
    .feed-opt-title { font-size: 15px; font-weight: 800; color: var(--text-main); line-height: 1.25; }
    .feed-opt-sub { font-size: 13px; font-weight: 500; color: var(--text-soft); line-height: 1.4; }
    .feed-opt-arr { font-size: 16px; color: var(--text-muted); flex-shrink: 0; transition: var(--tr-fast); }
    .feed-opt:hover:not(:disabled) .feed-opt-arr { color: var(--accent); transform: translateX(2px); }
    /* Color de los íconos por categoría — mismo schema que el form */
    .feed-opt-icon--green  { background: rgba(22,163,74,0.14);   color: #16A34A; }
    .feed-opt-icon--orange { background: rgba(249,115,22,0.14);  color: #F97316; }
    .feed-opt-icon--blue   { background: rgba(0,143,200,0.14);   color: #008FC8; }
    .feed-opt-icon--purple { background: rgba(139,92,246,0.14);  color: #8B5CF6; }
    .feed-opt-icon--yellow { background: rgba(234,179,8,0.14);   color: #EAB308; }
    .feed-opt-icon--red    { background: rgba(239,68,68,0.14);   color: #EF4444; }
    .feed-opt-icon--pink   { background: rgba(236,72,153,0.14);  color: #EC4899; }
    .feed-opt--selected .feed-opt-icon--green  { background: #16A34A; color: white; }
    .feed-opt--selected .feed-opt-icon--orange { background: #F97316; color: white; }
    .feed-opt--selected .feed-opt-icon--blue   { background: #008FC8; color: white; }
    .feed-opt--selected .feed-opt-icon--purple { background: #8B5CF6; color: white; }
    .feed-opt--selected .feed-opt-icon--yellow { background: #EAB308; color: white; }
    .feed-opt--selected .feed-opt-icon--red    { background: #EF4444; color: white; }
    .feed-opt--selected .feed-opt-icon--pink   { background: #EC4899; color: white; }

    /* Card de ubicación (GPS + online + input) — espejo del paso 4 del form */
    .feed-loc-card {
      display: flex; flex-direction: column; gap: 10px;
      max-width: 540px;
    }
    .feed-loc-divider {
      display: flex; align-items: center; gap: 12px;
      font-size: 11px; font-weight: 700; text-transform: uppercase;
      letter-spacing: 1px; color: var(--text-muted);
      margin: 6px 0;
    }
    .feed-loc-divider::before, .feed-loc-divider::after {
      content: ''; flex: 1; height: 1px; background: var(--border-soft);
    }
    .feed-loc-input-row {
      display: flex; align-items: center; gap: 10px;
      padding: 12px 14px;
      border-radius: var(--r-md);
      border: 1.5px solid var(--border-soft);
      background: var(--bg-panel);
      transition: var(--tr-fast);
    }
    .feed-loc-input-row:focus-within { border-color: var(--accent); background: var(--accent-soft); }
    .feed-loc-input-row i { color: var(--accent); font-size: 18px; flex-shrink: 0; }
    .feed-loc-input {
      flex: 1; border: none; outline: none; background: transparent;
      font-family: inherit; font-size: 14px; color: var(--text-main);
    }
    .feed-loc-submit {
      padding: 6px 14px; border-radius: var(--r-sm);
      background: var(--accent); color: white;
      font-size: 13px; font-weight: 700;
      cursor: pointer; transition: var(--tr-fast);
    }
    .feed-loc-submit:disabled { opacity: 0.4; cursor: default; }
    .feed-loc-submit:hover:not(:disabled) { background: var(--accent-dark); }

    /* Chat bar — premium floating input */
    .chat-bar {
      flex-shrink: 0;
      background: transparent;
      /* safe-area: el input no queda tapado por la barra/indicador del iPhone */
      padding: 12px 24px calc(20px + env(safe-area-inset-bottom, 0px));
    }
    .cb-hint {
      font-size: 11px; font-weight: 700; color: var(--text-muted);
      text-transform: uppercase; letter-spacing: 0.9px;
      margin-bottom: 8px; padding-left: 4px;
    }
    .cb-row {
      display: flex; align-items: center; gap: 0;
      background: var(--bg-panel);
      border: 1.5px solid var(--border-soft);
      border-radius: var(--r-lg);
      box-shadow: var(--shadow-md);
      padding: 7px 7px 7px 20px;
      transition: border-color 0.2s, box-shadow 0.2s;
    }
    .cb-row:focus-within {
      border-color: var(--accent);
      box-shadow: var(--shadow-md), 0 0 0 4px var(--accent-glow);
    }
    /* Edgar 2026-07-02: cb-input ahora es <textarea> que auto-crece.
       Estilos preservan apariencia de "input line" en el estado colapsado. */
    .cb-input {
      flex: 1;
      border: none; outline: none; background: transparent;
      font-family: inherit; font-size: 15px; color: var(--text-main);
      padding: 7px 0;
      resize: none;              /* usuario no arrastra la esquina */
      min-height: 22px;          /* 1 línea */
      max-height: 200px;         /* techo (~9 líneas) — luego scroll interno */
      line-height: 1.4;
      overflow-y: hidden;        /* autoGrow lo cambia a auto si excede */
      /* Restaurar look inline (textarea browser default es block con margin) */
      display: inline-block;
      vertical-align: middle;
      /* Sin bordes de foco típicos de textarea */
      box-shadow: none;
    }
    .cb-input::placeholder { color: var(--text-muted); }
    .cb-input:disabled { opacity: 0.5; cursor: not-allowed; }
    .cb-send {
      width: 40px; height: 40px; flex-shrink: 0;
      background: var(--accent); color: white;
      border-radius: var(--r-md);
      display: flex; align-items: center; justify-content: center;
      font-size: 16px;
      transition: var(--tr);
      box-shadow: var(--shadow-accent);
    }
    .cb-send:hover:not(:disabled) { background: var(--accent-mid); transform: scale(1.05); }
    .cb-send:disabled { opacity: 0.35; cursor: not-allowed; background: var(--border-mid); box-shadow: none; }

    /* ══ CHIPS SLOT — controles estructurados encima de la barra de chat ══ */
    .cb-chips-slot:empty { display: none; }
    .cb-chips-slot {
      padding: 0 4px 10px;
      display: flex; flex-direction: column; gap: 8px;
      animation: chips-rise 0.28s cubic-bezier(0.22, 1, 0.36, 1) both;
    }
    @keyframes chips-rise {
      from { opacity: 0; transform: translateY(8px); }
      to   { opacity: 1; transform: translateY(0); }
    }

    /* Fila de chips (single select) */
    .cb-chips-row {
      display: flex; flex-wrap: wrap; gap: 7px;
    }
    .cb-chip {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 7px 14px;
      background: var(--bg-panel);
      border: 1.5px solid var(--border-soft);
      border-radius: var(--r-pill);
      font-family: inherit; font-size: 13px; font-weight: 600;
      color: var(--text-main);
      cursor: pointer;
      transition: border-color 0.15s, background 0.15s, transform 0.1s, box-shadow 0.15s;
      white-space: nowrap;
      box-shadow: var(--shadow-xs);
    }
    .cb-chip:hover {
      border-color: var(--accent);
      background: var(--accent-soft);
      transform: translateY(-1px);
      box-shadow: 0 3px 10px var(--accent-glow);
    }
    .cb-chip.selected {
      background: var(--accent);
      border-color: var(--accent);
      color: white;
      box-shadow: 0 3px 10px var(--accent-glow);
    }
    .cb-chip.selected:hover { background: var(--accent-mid); }
    /* Multi-select: checkmark en selected */
    .cb-chip[data-multi].selected::before {
      content: '✓';
      font-size: 11px; font-weight: 900;
    }

    /* Botón de confirmar para multi-select */
    .cb-chips-confirm {
      align-self: flex-start;
      display: inline-flex; align-items: center; gap: 7px;
      padding: 8px 18px;
      background: var(--accent); color: white;
      border-radius: var(--r-pill);
      font-family: inherit; font-size: 13px; font-weight: 700;
      cursor: pointer;
      transition: background 0.15s, transform 0.1s, opacity 0.15s;
      box-shadow: var(--shadow-accent);
      opacity: 0;
      pointer-events: none;
    }
    .cb-chips-confirm.visible { opacity: 1; pointer-events: auto; }
    .cb-chips-confirm:hover { background: var(--accent-mid); transform: translateY(-1px); }

    /* Numeric mini-form */
    .cb-numeric-form {
      display: flex; flex-direction: column; gap: 8px;
      background: var(--bg-panel);
      border: 1.5px solid var(--border-soft);
      border-radius: var(--r-lg);
      padding: 14px 16px;
      box-shadow: var(--shadow-xs);
    }
    .cb-numeric-row {
      display: flex; align-items: center; justify-content: space-between; gap: 12px;
    }
    .cb-numeric-label {
      font-size: 13px; font-weight: 600; color: var(--text-main); flex: 1;
    }
    .cb-numeric-ctrl {
      display: flex; align-items: center; gap: 0;
      border: 1.5px solid var(--border-soft);
      border-radius: var(--r-md);
      overflow: hidden;
      background: var(--bg);
    }
    .cb-numeric-btn {
      width: 32px; height: 32px;
      display: flex; align-items: center; justify-content: center;
      font-size: 17px; font-weight: 700; color: var(--text-soft);
      cursor: pointer; transition: background 0.12s, color 0.12s;
      border: none; background: transparent; font-family: inherit;
    }
    .cb-numeric-btn:hover { background: var(--accent-soft); color: var(--accent-dark); }
    .cb-numeric-val {
      min-width: 36px; text-align: center;
      font-size: 14px; font-weight: 800; color: var(--text-main);
      border: none; background: transparent; outline: none;
      font-family: inherit;
    }
    .cb-numeric-submit {
      align-self: flex-end;
      display: inline-flex; align-items: center; gap: 7px;
      padding: 9px 20px;
      background: var(--accent); color: white;
      border-radius: var(--r-pill);
      font-family: inherit; font-size: 13px; font-weight: 700;
      cursor: pointer;
      transition: background 0.15s, transform 0.1s;
      box-shadow: var(--shadow-accent);
    }
    .cb-numeric-submit:hover { background: var(--accent-mid); transform: translateY(-1px); }

    /* Dark mode adjustments */
    [data-theme="dark"] .cb-chip { background: var(--bg-alt); }
    [data-theme="dark"] .cb-numeric-form { background: var(--bg-alt); }
    [data-theme="dark"] .cb-numeric-ctrl { background: var(--bg); }

    /* ── EXECUTIVE PANEL — resumen ejecutivo ── */
    .exec-panel {
      background: var(--bg-panel);
      border-left: 1px solid var(--border-soft);
      display: flex; flex-direction: column;
      overflow: hidden;
    }
    .ep-header {
      padding: 18px 20px 14px;
      border-bottom: 1px solid var(--border-soft);
      flex-shrink: 0;
      display: flex; align-items: center; justify-content: space-between;
    }
    .ep-title { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1.1px; color: var(--text-muted); }
    /* Edgar 2026-06-30: dot verde eliminado del header SUMMARY. */
    .ep-header::after { display: none !important; }
    @keyframes pulse-dot {
      0%, 100% { opacity: 1; }
      50% { opacity: 0.4; }
    }
    /* Acciones arriba del panel Resumen — "Ir al sistema" entra al CRM.
       Si ningún botón está visible, el bloque colapsa a 0 (sin hueco). */
    .ep-actions {
      flex-shrink: 0;
      padding: 0 16px;
      display: flex; flex-direction: column;
    }
    .ep-actions .open-sys-btn,
    .ep-actions .convert-btn {
      width: 100%; justify-content: center;
      padding: 11px 16px; font-size: 13px;
      margin-top: 14px;
    }
    .ep-body { flex: 1; overflow-y: auto; padding: 18px 20px; display: flex; flex-direction: column; gap: 18px; }
    .ep-body::-webkit-scrollbar { width: 4px; }
    .ep-body::-webkit-scrollbar-thumb { background: var(--border-mid); border-radius: 4px; }
    .ep-empty {
      display: flex; flex-direction: column; align-items: center;
      gap: 12px; padding: 48px 20px; text-align: center;
      color: var(--text-muted);
    }
    .ep-empty i { font-size: 36px; color: var(--border-strong); }
    .ep-empty p { font-size: 13px; line-height: 1.55; }
    /* Animación de entrada del exec panel cuando se crea un negocio */
    @keyframes ep-rise {
      from { opacity: 0; transform: translateY(14px); }
      to   { opacity: 1; transform: translateY(0); }
    }
    .ep-body--enter > * {
      opacity: 0;
      animation: ep-rise 0.55s cubic-bezier(0.22, 1, 0.36, 1) both;
    }
    .ep-body--enter > *:nth-child(1) { animation-delay: 0.10s; }
    .ep-body--enter > *:nth-child(2) { animation-delay: 0.25s; }
    .ep-body--enter > *:nth-child(3) { animation-delay: 0.40s; }
    .ep-body--enter > *:nth-child(4) { animation-delay: 0.55s; }
    .ep-body--enter > *:nth-child(5) { animation-delay: 0.70s; }

    .ep-idea-hero {
      display: flex; align-items: center; gap: 12px;
      padding-bottom: 16px;
      border-bottom: 1px solid var(--border-soft);
    }
    .ep-emoji {
      width: 44px; height: 44px; border-radius: var(--r-md);
      background: var(--accent-soft);
      display: flex; align-items: center; justify-content: center;
      font-size: 22px; color: var(--accent-dark);
      border: 1px solid rgba(255,138,0,0.18);
    }
    .ep-idea-name { font-size: 15px; font-weight: 800; color: var(--text-main); line-height: 1.3; flex: 1; }
    .ep-progress-block { display: flex; flex-direction: column; gap: 8px; }
    .ep-progress-label { display: flex; justify-content: space-between; font-size: 12px; color: var(--text-soft); font-weight: 700; }
    .ep-bar { height: 8px; background: var(--bg-soft); border-radius: var(--r-pill); overflow: hidden; border: 1px solid var(--border-soft); }
    .ep-bar-fill {
      height: 100%;
      background: linear-gradient(90deg, var(--accent), var(--accent-light));
      border-radius: var(--r-pill);
      transition: width 0.5s cubic-bezier(0.22, 1, 0.36, 1);
      box-shadow: 0 0 8px var(--accent-glow);
    }
    .ep-steps { display: flex; flex-direction: column; gap: 4px; }
    .ep-step {
      display: flex; align-items: center; gap: 10px;
      font-size: 13px; color: var(--text-muted);
      padding: 9px 11px; border-radius: var(--r-sm);
      transition: var(--tr-fast);
    }
    .ep-step i { font-size: 15px; flex-shrink: 0; }
    .ep-step--done {
      color: var(--green-dark); background: var(--green-soft);
    }
    .ep-step--active {
      color: var(--accent-dark); background: var(--accent-soft);
      font-weight: 700;
      border: 1px solid rgba(255, 138, 0, 0.18);
    }
    [data-theme="dark"] .ep-step--done { color: #6EE7B7; }
    [data-theme="dark"] .ep-step--active { color: var(--accent-light); }
    .ep-step--locked { opacity: 0.55; }
    .ep-meta { display: flex; flex-direction: column; gap: 8px; padding-top: 8px; border-top: 1px solid var(--border-soft); }
    .ep-meta-row { display: flex; justify-content: space-between; font-size: 12px; }
    .ep-meta-label { color: var(--text-muted); }
    .ep-meta-val { color: var(--text-main); font-weight: 700; }

    /* Paso actual — checklist */
    .ep-current {
      background: linear-gradient(135deg, var(--accent-soft), var(--accent-softer));
      border: 1px solid rgba(255, 138, 0, 0.18);
      border-radius: var(--r-md);
      padding: 14px 14px;
      display: flex; flex-direction: column; gap: 10px;
      box-shadow: 0 2px 8px rgba(255, 138, 0, 0.06);
    }
    .ep-current-label {
      font-size: 10px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1.1px; color: var(--accent-dark);
    }
    .ep-current-title {
      font-size: 14px; font-weight: 800; color: var(--text-main); line-height: 1.3;
    }
    .ep-step--active .ep-step-row { cursor: pointer; user-select: none; width: 100%; }
    .ep-step--active .ep-step-row:hover { opacity: 0.85; }
    .ep-chevron {
      margin-left: auto; font-size: 12px; color: var(--gold-dark);
      transition: transform 0.2s ease; flex-shrink: 0;
    }
    .ep-chevron.open { transform: rotate(180deg); }
    .ep-checklist {
      display: flex; flex-direction: column; gap: 7px;
      overflow: hidden;
      max-height: 0;
      opacity: 0;
      transition: max-height 0.3s ease, opacity 0.25s ease, margin-top 0.2s ease;
      margin-top: 0;
      padding-left: 24px;
    }
    .ep-checklist.expanded {
      max-height: 200px;
      opacity: 1;
      margin-top: 8px;
    }
    .ep-check-item {
      display: flex; align-items: flex-start; gap: 8px;
      font-size: 12px; color: var(--text-mid); line-height: 1.4;
    }
    .ep-check-box {
      width: 15px; height: 15px; border-radius: 4px; flex-shrink: 0;
      border: 1.5px solid var(--border-mid);
      background: rgba(0, 0, 0, 0.25); margin-top: 1px;
      transition: border-color 0.2s, background-color 0.2s;
    }

    /* ── MODALS (eliminar / salir / confirmar) ──
       Tintados con el tema de chat activo (--ws-chat-accent) y con
       animaciones de entrada/salida consistentes entre todos los modales. */
    @keyframes modalOverlayIn  { from { opacity: 0; } to { opacity: 1; } }
    @keyframes modalOverlayOut { from { opacity: 1; } to { opacity: 0; } }
    @keyframes modalBoxIn {
      from { opacity: 0; transform: translateY(18px) scale(0.93); }
      to   { opacity: 1; transform: translateY(0) scale(1); }
    }
    @keyframes modalBoxOut {
      from { opacity: 1; transform: translateY(0) scale(1); }
      to   { opacity: 0; transform: translateY(10px) scale(0.96); }
    }
    @keyframes modalIconPop {
      0%   { transform: scale(0.3); opacity: 0; }
      60%  { transform: scale(1.14); opacity: 1; }
      100% { transform: scale(1); }
    }
    @keyframes modalBtnIn {
      from { opacity: 0; transform: translateY(9px); }
      to   { opacity: 1; transform: translateY(0); }
    }

    .modal-overlay {
      display: none; position: fixed; inset: 0; z-index: 500;
      background: rgba(0,0,0,0.5);
      align-items: center; justify-content: center;
      backdrop-filter: blur(2px);
    }
    .modal-overlay.open    { display: flex; animation: modalOverlayIn 0.18s ease both; }
    .modal-overlay.closing { display: flex; animation: modalOverlayOut 0.2s ease both; }

    .modal-box {
      background: var(--white); border-radius: var(--r-lg);
      padding: 32px 28px; max-width: 360px; width: 90%;
      text-align: center;
      border-top: 3px solid var(--ws-chat-accent, var(--gold));
      box-shadow: var(--shadow-lg),
                  0 0 0 1px var(--border),
                  0 20px 55px -14px var(--ws-chat-accent-light, rgba(0,0,0,0.35));
    }
    .modal-overlay.open .modal-box    { animation: modalBoxIn 0.3s cubic-bezier(0.22,1,0.36,1) both; }
    .modal-overlay.closing .modal-box { animation: modalBoxOut 0.18s ease both; }

    .modal-icon { font-size: 36px; margin-bottom: 14px; }
    /* Badges circulares para el ícono del modal (SVG, sin emojis) */
    .modal-icon--warn, .modal-icon--danger, .modal-icon--info {
      width: 56px; height: 56px; margin: 0 auto 16px;
      display: flex; align-items: center; justify-content: center;
      border-radius: 50%;
    }
    .modal-icon--warn   { background: #fef3c7; color: #d97706; box-shadow: 0 0 0 6px rgba(217,119,6,0.10); }
    .modal-icon--danger { background: rgba(229,57,53,0.12); color: var(--red); box-shadow: 0 0 0 6px rgba(229,57,53,0.07); }
    .modal-overlay.open .modal-icon--warn,
    .modal-overlay.open .modal-icon--danger,
    .modal-overlay.open .modal-icon--info {
      animation: modalIconPop 0.42s cubic-bezier(0.34,1.56,0.64,1) 0.08s both;
    }

    .modal-title { font-size: 18px; font-weight: 800; color: var(--text); margin-bottom: 8px; }
    .modal-body { font-size: 14px; color: var(--text-muted); line-height: 1.6; margin-bottom: 24px; }
    .modal-actions { display: flex; gap: 10px; }

    .modal-cancel, .modal-confirm {
      flex: 1; padding: 10px; border-radius: var(--r-sm);
      font-size: 14px; font-weight: 700;
      border: 1px solid transparent;
      transition: var(--tr);
    }
    .modal-overlay.open .modal-cancel  { animation: modalBtnIn 0.32s ease 0.14s both; }
    .modal-overlay.open .modal-confirm { animation: modalBtnIn 0.32s ease 0.21s both; }

    .modal-cancel {
      background: var(--bg-alt); border-color: var(--border);
      color: var(--text-mid);
    }
    .modal-cancel:hover {
      border-color: var(--ws-chat-accent, var(--border-mid));
      background: var(--bg);
      transform: translateY(-1px);
    }
    .modal-cancel:active { transform: translateY(0); }
    .modal-confirm {
      background: var(--red); color: white;
    }
    .modal-confirm:hover  { opacity: 0.92; transform: translateY(-1px); box-shadow: 0 6px 16px -6px rgba(229,57,53,0.6); }
    .modal-confirm:active { transform: translateY(0); box-shadow: none; }

    /* ── SIDEBAR OVERLAY (mobile) ── */
    .sidebar-overlay { display: none; }

    /* ── PLAN CARD ── */
    .feed-plan-card {
      background: var(--white);
      border: 1px solid var(--border);
      border-left: 4px solid var(--gold);
      border-radius: 0 var(--r-md) var(--r-md) 0;
      box-shadow: var(--shadow-sm);
      max-width: 680px;
      overflow: hidden;
    }
    .fpc-header {
      display: flex; align-items: center; gap: 6px;
      padding: 14px 18px 4px;
      font-size: 10px; font-weight: 700; text-transform: uppercase;
      letter-spacing: 0.9px; color: var(--gold);
    }
    .fpc-title {
      padding: 4px 18px 6px;
      font-size: 18px; font-weight: 800; color: var(--text); line-height: 1.25;
    }
    .fpc-desc {
      padding: 0 18px 14px;
      font-size: 14px; color: var(--text-mid); line-height: 1.65;
    }
    .fpc-stats {
      display: grid; grid-template-columns: repeat(3, 1fr);
      gap: 1px; background: var(--border);
      border-top: 1px solid var(--border);
      border-bottom: 1px solid var(--border);
      margin-bottom: 14px;
    }
    .fpc-stat {
      padding: 11px 14px;
      background: var(--bg-alt);
      display: flex; flex-direction: column; gap: 3px;
    }
    .fpc-stat-label {
      font-size: 10px; font-weight: 700; text-transform: uppercase;
      letter-spacing: 0.7px; color: var(--text-muted);
    }
    .fpc-stat-val {
      font-size: 13px; font-weight: 800; color: var(--text);
    }
    .fpc-section { padding: 0 18px 12px; }
    .fpc-section-label {
      display: flex; align-items: center; gap: 5px;
      font-size: 11px; font-weight: 700; text-transform: uppercase;
      letter-spacing: 0.7px; color: var(--text-muted); margin-bottom: 6px;
    }
    .fpc-section-body {
      font-size: 14px; color: var(--text-mid); line-height: 1.6;
    }
    .fpc-first-step .fpc-section-body {
      color: var(--text); font-weight: 600;
      background: var(--gold-bg); border-left: 3px solid var(--gold);
      padding: 10px 13px; border-radius: 0 var(--r-sm) var(--r-sm) 0;
    }
    .fpc-steps-head {
      padding: 12px 18px 8px;
      font-size: 10px; font-weight: 700; text-transform: uppercase;
      letter-spacing: 0.8px; color: var(--text-muted);
      border-top: 1px solid var(--border);
    }
    .fpc-steps {
      padding: 0 18px 18px;
      list-style: none;
      display: flex; flex-direction: column; gap: 9px;
    }
    .fpc-steps li {
      display: flex; gap: 10px; align-items: flex-start;
      font-size: 13px; color: var(--text); line-height: 1.5;
    }
    .fpc-step-num {
      width: 22px; height: 22px; border-radius: 50%;
      background: var(--gold-bg); border: 1.5px solid var(--gold);
      color: var(--gold-dark); font-size: 11px; font-weight: 800;
      display: flex; align-items: center; justify-content: center;
      flex-shrink: 0; margin-top: 1px;
    }

    /* ── TOUR ── */
    .ob-tour {
      position: fixed; inset: 0; z-index: 998;
      background: rgba(0,0,0,0.52);
      display: none;
      pointer-events: auto; /* bloquea TODOS los clicks fuera del card */
    }
    body.ob-tour-active {
      overflow: hidden;
    }
    .ob-tour-card {
      position: fixed;
      top: 40px;
      left: 14px;
      width: 320px;
      background: #FFFFFF; border-radius: 18px;
      padding: 18px 20px;
      box-shadow: 0 12px 40px rgba(0,0,0,0.28), 0 2px 8px rgba(0,0,0,0.12);
      display: flex; gap: 14px; align-items: flex-start;
      z-index: 1001;
      transition:
        opacity 0.28s ease,
        left 0.55s cubic-bezier(0.22, 1, 0.36, 1),
        top  0.55s cubic-bezier(0.22, 1, 0.36, 1);
      border: 1px solid rgba(0,0,0,0.06);
      color-scheme: light;
    }
    .ob-tour-mascot { width: 40px; height: 40px; flex-shrink: 0; }
    .ob-tour-mascot img { width: 100%; object-fit: contain; }
    .ob-tour-content { flex: 1; display: flex; flex-direction: column; min-width: 0; }
    .ob-tour-l1 {
      font-size: 15px; font-weight: 800;
      color: #0F172A !important; line-height: 1.45;
    }
    .ob-tour-l2 {
      font-size: 13px; font-weight: 500;
      color: #475569 !important; margin-top: 5px; line-height: 1.5; min-height: 18px;
    }
    .ob-tour-btn {
      margin-top: 16px; align-self: flex-start;
      display: inline-flex; align-items: center; gap: 7px;
      padding: 10px 18px;
      background: #FF8A00 !important; color: #FFFFFF !important;
      border-radius: 10px; font-size: 13px; font-weight: 800;
      border: none; cursor: pointer;
      box-shadow: 0 4px 12px rgba(255,138,0,0.35);
      transition: background 0.15s, transform 0.15s;
    }
    .ob-tour-btn:hover { background: #E67A00 !important; transform: translateY(-1px); }
    .ob-tour-auto {
      margin-top: 12px;
      height: 3px; background: #E2E8F0; border-radius: 3px; overflow: hidden;
    }
    .ob-tour-auto-fill {
      height: 100%; background: #FF8A00; border-radius: 3px; width: 0;
      transition: width 2s linear;
    }
    /* Spotlit section — se ve sobre el overlay pero NO se puede interactuar */
    .ob-spotlit {
      position: relative !important;
      z-index: 999 !important;
      outline: 3px solid var(--gold);
      outline-offset: -2px;
      box-shadow: 0 0 0 6px rgba(245,151,27,0.18) !important;
      transition: box-shadow 0.3s ease, outline 0.3s ease;
      pointer-events: none !important; /* solo es visual — no clickeable */
    }
    .ob-spotlit * { pointer-events: none !important; }
    /* Step activo pulsando en demo del exec panel */
    .ob-demo-glow {
      animation: ob-demo-pulse 1.8s ease-in-out infinite !important;
    }
    @keyframes ob-demo-pulse {
      0%, 100% { box-shadow: none; }
      50%       { box-shadow: 0 0 0 5px rgba(245,151,27,0.22); }
    }

    /* ── RESPONSIVE ── */
    .fb-menu-btn {
      display: none; align-items: center; justify-content: center;
      width: 44px; height: 44px; flex-shrink: 0;
      background: linear-gradient(135deg, #fff8f0, #fff3e0);
      border: none; border-radius: 14px;
      box-shadow: 0 2px 8px rgba(245,151,27,0.18), inset 0 1px 0 rgba(255,255,255,0.9);
      font-size: 22px; color: var(--gold-dark);
      transition: box-shadow 0.2s, transform 0.15s; cursor: pointer;
    }
    .fb-menu-btn:active { transform: scale(0.93); box-shadow: 0 1px 4px rgba(245,151,27,0.15); }

    .fb-panel-btn {
      display: none; align-items: center; justify-content: center;
      width: 44px; height: 44px;
      background: linear-gradient(135deg, #fff8f0, #fff3e0);
      border: none; border-radius: 14px;
      box-shadow: 0 2px 8px rgba(245,151,27,0.18), inset 0 1px 0 rgba(255,255,255,0.9);
      font-size: 22px; color: var(--gold-dark);
      transition: box-shadow 0.2s, transform 0.15s; cursor: pointer;
    }
    .fb-panel-btn:active { transform: scale(0.93); box-shadow: 0 1px 4px rgba(245,151,27,0.15); }

    .bnav-toggle { display: none; }

    @media (max-width: 960px) {
      /* ═ FÉNIX BAR EN MÓVIL ═ */
      .pio-bar {
        display: flex !important;
        height: 62px;
        padding: 0 14px 0 16px;
      }
      /* Ajustar altura de ideas-page a 100dvh completa con soporte para bottom-nav dinámico */
      .ideas-page {
        grid-template-columns: 1fr;
        height: 100dvh;
        transition: padding-bottom 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
        padding-bottom: 0;
      }
      .ideas-page.with-bnav {
        padding-bottom: 68px; /* Evita superposición con el bottom-nav desplegado */
      }
      .header { display: none; }
      .header-logo { display: none; }
      
      /* Animación de deslizamiento vertical para el bottom-nav */
      .bottom-nav {
        display: flex !important;
        position: fixed;
        bottom: 0; left: 0; right: 0;
        z-index: 300;
        height: 68px;
        transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
        pointer-events: auto; /* Permite clicks/taps cuando el menú está desplegado */
      }
      .bottom-nav.collapsed {
        transform: translateY(100%);
        pointer-events: none !important; /* Resuelve el bug de Webkit/Safari móvil donde la caja invisible sigue bloqueando los toques del chat-bar */
      }

      /* Edgar 2026-06-30: bnav-toggle DESACTIVADO. Reemplazado por
         auto-hide on scroll + keyboard (más profesional). */
      .bnav-toggle { display: none !important; }
      .bnav-toggle--legacy-only {
        display: flex;
        position: fixed;
        bottom: 68px; /* sits right above bottom-nav when expanded */
        left: 50%;
        transform: translateX(-50%);
        width: 44px;
        height: 22px;
        background: var(--bg-panel);
        border: 1.5px solid var(--border-soft);
        border-bottom: none;
        border-radius: 12px 12px 0 0;
        align-items: center;
        justify-content: center;
        box-shadow: 0 -4px 10px rgba(0, 0, 0, 0.1);
        z-index: 310;
        transition: bottom 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background 0.2s, border-color 0.2s;
        cursor: pointer;
        outline: none;
      }
      .bnav-toggle i {
        font-size: 13px;
        color: var(--text-soft);
        transition: transform 0.35s ease;
      }
      .bnav-toggle.collapsed {
        bottom: 0px;
        border: 1.5px solid var(--border-soft);
        box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.15);
      }
      .bnav-toggle.collapsed i {
        transform: rotate(180deg); /* flips the arrow to point upwards */
      }
      
      /* Sincronización con el tema de acento de sector del workspace */
      body[data-chat-theme] .bnav-toggle:hover,
      body[data-chat-theme] .bnav-toggle:active {
        border-color: var(--ws-chat-accent);
      }
      body[data-chat-theme] .bnav-toggle:hover i,
      body[data-chat-theme] .bnav-toggle:active i {
        color: var(--ws-chat-accent);
      }
      .ffm-avatar  { display: none !important; } /* Ocultar el avatar del mentor al lado de cada mensaje en móvil */
      .feed-pio-msg { max-width: 100%; }
      .ffm-bubble  { max-width: 100%; }
      .feed        { padding: 26px 14px 12px; gap: 10px; }
      .ft-avatar   { display: none !important; } /* Ocultar el avatar del typing indicator en móvil */
      .ft-label    { display: none; }
      .ft-dot-1, .ft-dot-2, .ft-dot-3 { display: inline-block; }
      .ft-dots     { gap: 5px; padding: 9px 13px; }
      .fb-idea-label          { display: none !important; }
      /* Mobile: compact bubbles, lighter borders */
      .ffm-bubble             { font-size: 15px; padding: 10px 13px; border-radius: var(--r-sm); }
      .ffm-bubble--important,
      .ffm-bubble--action     { font-size: 15px; padding: 11px 13px; border-radius: var(--r-sm); border-left-width: 3px; }
      .fum-bubble             { font-size: 15px; padding: 10px 14px; border-radius: var(--r-sm); max-width: 85%; }
      .cb-input               { font-size: 16px; } /* 16px evita el auto-zoom de iOS al enfocar */
      .cb-hint                { font-size: 11px; }
      /* Ocultar botones legacy de los drawers (ahora gestionados por bottom-nav) */
      .fb-icon-btn  { display: flex; }

      /* Portfolio drawer — slides in from left.
         Edgar 2026-06-29: usar height: 100dvh en vez de bottom: 0
         para evitar el bug de Chrome/Safari Mobile donde el browser
         bar se duplica empujando el bottom-nav fuera de pantalla.
         overscroll-behavior: contain previene que el scroll interno
         dispare resize del viewport del browser. */
      .portfolio {
        position: fixed; top: 0; left: 0;
        width: 100%;
        height: 100vh;
        height: 100dvh;
        z-index: 300;
        transform: translateX(-105%);
        transition: transform 0.42s cubic-bezier(0.4, 0, 0.2, 1);
        overflow-y: auto;
        overscroll-behavior: contain;
        -webkit-overflow-scrolling: touch;
        display: flex !important; flex-direction: column;
        border-right: 1px solid var(--border);
        border-top: 1px solid var(--border);
        border-radius: 0;
        /* Edgar 2026-06-30: padding-bottom para que el theme footer
           ('Temas del chat') no quede tapado por el bottom-nav. */
        padding-bottom: 76px;
      }
      .portfolio.drawer-open { transform: translateX(0); }

      /* Exec panel drawer — mismo fix que portfolio */
      .exec-panel {
        position: fixed; top: 0; right: 0;
        width: 100%;
        padding-bottom: 76px;  /* espacio para bottom-nav */
        height: 100vh;
        height: 100dvh;
        z-index: 300;
        transform: translateX(105%);
        transition: transform 0.42s cubic-bezier(0.4, 0, 0.2, 1);
        overflow-y: auto;
        overscroll-behavior: contain;
        -webkit-overflow-scrolling: touch;
        display: flex !important; flex-direction: column;
        border-left: 1px solid var(--border);
        border-top: 1px solid var(--border);
        border-radius: 0;
      }
      .exec-panel.drawer-open { transform: translateX(0); }

      /* Edgar 2026-06-29: cuando un drawer está abierto, bloqueamos
         el scroll del body para que el browser bar de Chrome/Safari
         NO se muestre/oculte dinámicamente (causaba el bug del doble
         espacio inferior + bottom-nav fuera de viewport). */
      body.has-drawer-open {
        overflow: hidden;
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        width: 100%;
        height: 100dvh;
      }

      /* Backdrop */
      .sidebar-overlay {
        display: none; position: fixed;
        top: 0; left: 0; right: 0; bottom: 0;
        background: rgba(0,0,0,0.38); z-index: 299;
      }
      .sidebar-overlay.active { display: block; }

      /* ═ BOTTOM NAVIGATION ═ */
      :root { --bnav-h: 62px; }
      .ws-bottom-nav {
        display: flex !important;
        position: fixed;
        bottom: 0; left: 0; right: 0;
        height: var(--bnav-h, 62px);
        background: var(--bg-panel);
        border-top: 1px solid var(--border-soft);
        box-shadow: 0 -2px 16px rgba(0,0,0,0.10);
        z-index: 400;
        padding: 0 4px;
        padding-bottom: env(safe-area-inset-bottom, 0px);
        /* Safari iOS safe area */
        align-items: stretch;
        justify-content: stretch;
        gap: 0;
      }
      .ws-bn-tab {
        flex: 1;
        display: flex; flex-direction: column;
        align-items: center; justify-content: center;
        gap: 3px;
        background: transparent; border: none;
        padding: 6px 2px 8px;
        cursor: pointer;
        -webkit-tap-highlight-color: transparent;
        position: relative;
        transition: color 0.18s;
        color: var(--text-soft);
      }
      .ws-bn-icon-wrap {
        position: relative;
        width: 40px; height: 32px;
        display: flex; align-items: center; justify-content: center;
        border-radius: var(--r-lg);
        transition: background 0.2s, transform 0.18s;
      }
      .ws-bn-tab i {
        font-size: 22px;
        transition: transform 0.22s cubic-bezier(0.34, 1.56, 0.64, 1);
      }
      /* Tap feedback */
      .ws-bn-tab:active .ws-bn-icon-wrap {
        transform: scale(0.88);
      }
      .ws-bn-tab:active i {
        transform: scale(0.9);
      }
      .ws-bn-label {
        font-size: 10px; font-weight: 700;
        letter-spacing: 0.1px;
        transition: color 0.18s;
        white-space: nowrap;
      }
      /* Estado activo: pill de fondo con glow del acento */
      .ws-bn-tab.active {
        color: var(--accent);
      }
      .ws-bn-tab.active .ws-bn-icon-wrap {
        background: color-mix(in srgb, var(--accent) 14%, transparent);
      }
      .ws-bn-tab.active i {
        transform: scale(1.08);
        filter: drop-shadow(0 0 6px color-mix(in srgb, var(--accent) 55%, transparent));
      }
      /* Badge de notificación */
      .ws-bn-badge {
        position: absolute;
        top: 2px; right: 2px;
        min-width: 16px; height: 16px;
        background: #EF4444;
        color: #fff;
        font-size: 9px; font-weight: 800;
        border-radius: 8px;
        display: flex; align-items: center; justify-content: center;
        padding: 0 4px;
        border: 2px solid var(--bg-panel);
        line-height: 1;
      }
      /* Modo oscuro y Negro AMOLED */
      [data-theme="dark"]  .ws-bottom-nav,
      [data-theme="negro"] .ws-bottom-nav {
        background: var(--bg-panel);
        border-top-color: rgba(255,255,255,0.07);
        box-shadow: 0 -1px 0 rgba(255,255,255,0.04),
                    0 -8px 24px rgba(0,0,0,0.35);
      }
      [data-theme="negro"] .ws-bottom-nav { background: #000; }
      /* Asegurar que el workspace tiene altura correcta con los dos elementos nuevos */
      .workspace { overflow: hidden; }
    } /* end @media (max-width: 960px) */

    /* ── PANEL ENTER ANIMATIONS (onboarding) ── */
    .ob-slide-left  { animation: ob-panel-left  0.55s cubic-bezier(0.22,1,0.36,1) both; }
    .ob-slide-right { animation: ob-panel-right 0.55s cubic-bezier(0.22,1,0.36,1) 0.1s both; }
    .ob-fade-up     { animation: ob-panel-up    0.5s  cubic-bezier(0.22,1,0.36,1) 0.05s both; }
    @keyframes ob-panel-left  { from { transform: translateX(-28px); opacity: 0; } to { transform: none; opacity: 1; } }
    @keyframes ob-panel-right { from { transform: translateX(28px);  opacity: 0; } to { transform: none; opacity: 1; } }
    @keyframes ob-panel-up    { from { transform: translateY(14px);  opacity: 0; } to { transform: none; opacity: 1; } }

    /* ── WELCOME OVERLAY ── */
    .ob-welcome {
      position: fixed; inset: 0; z-index: 1000;
      background: #FFF8F2;
      display: flex; align-items: center; justify-content: center;
      opacity: 1;
      transition: opacity 0.5s ease;
      color-scheme: light;
    }
    /* Forzar colores light (no heredan del tema) */
    .ob-welcome .ob-line1    { color: #0F172A !important; }
    .ob-welcome .ob-line2    { color: #475569 !important; }
    .ob-welcome .ob-entering { color: #64748B !important; }
    .ob-welcome.hiding { opacity: 0; pointer-events: none; }
    .ob-welcome-inner {
      display: flex; align-items: center; gap: 56px;
      max-width: 780px; width: 90%;
    }
    .ob-mascot {
      flex-shrink: 0;
      width: 180px; height: 180px;
      display: flex; align-items: center; justify-content: center;
    }
    .ob-mascot img {
      width: 100%; height: 100%; object-fit: contain;
      animation: ob-float 3s ease-in-out infinite;
    }
    .ob-mascot.ob-exit img {
      animation: ob-mascot-exit 0.65s cubic-bezier(0.34,1.56,0.64,1) forwards;
    }
    @keyframes ob-mascot-exit {
      0%   { transform: translateX(0)    scale(1);    opacity: 1; }
      35%  { transform: translateX(0)    scale(1.13); opacity: 1; }
      100% { transform: translateX(48px) scale(0.82); opacity: 0; }
    }
    .ob-entering {
      font-size: 15px; font-weight: 600; color: var(--text-muted);
      opacity: 0; transition: opacity 0.35s ease; margin-top: 2px;
    }
    @keyframes ob-float {
      0%, 100% { transform: translateY(0); }
      50%       { transform: translateY(-10px); }
    }
    .ob-text { display: flex; flex-direction: column; gap: 16px; }
    .ob-line1 {
      font-size: clamp(1.6rem, 3vw, 2.2rem);
      font-weight: 800; color: var(--text);
      line-height: 1.2;
      opacity: 0; transform: translateY(12px);
      animation: ob-rise 0.6s cubic-bezier(0.22,1,0.36,1) 0.2s forwards;
    }
    .ob-line2 {
      font-size: clamp(1rem, 2vw, 1.25rem);
      font-weight: 600; color: var(--text-muted);
      opacity: 0; transform: translateY(12px);
      animation: ob-rise 0.6s cubic-bezier(0.22,1,0.36,1) 1.3s forwards;
    }
    .ob-cta {
      display: inline-flex; align-items: center; gap: 9px;
      padding: 14px 28px;
      background: var(--gold); color: white;
      border-radius: 14px;
      font-size: 15px; font-weight: 700;
      box-shadow: 0 4px 18px rgba(245,151,27,0.35);
      opacity: 0; transform: translateY(12px);
      animation: ob-rise 0.6s cubic-bezier(0.22,1,0.36,1) 2.1s forwards;
      transition: background 0.15s, transform 0.15s, box-shadow 0.15s;
      align-self: flex-start;
      margin-top: 8px;
    }
    .ob-cta:hover {
      background: var(--gold-dark);
      transform: translateY(-2px);
      box-shadow: 0 6px 24px rgba(245,151,27,0.45);
    }
    @keyframes ob-rise {
      to { opacity: 1; transform: translateY(0); }
    }
    @media (max-width: 600px) {
      .ob-welcome-inner { flex-direction: column; gap: 28px; text-align: center; }
      .ob-mascot { width: 130px; height: 130px; }
      .ob-cta { align-self: center; }
    }

    /* ═════════════════════════════════════════════════════════
       BUILD SIMULATION — al terminar Phase 1 del upload negocio
    ═════════════════════════════════════════════════════════ */
    .build-sim {
      display: none;
      position: fixed; inset: 0; z-index: 9999;
      background: var(--bg-main);
      overflow-y: auto;
      padding: 40px 24px;
    }
    .build-sim.open { display: block; animation: bs-fade-in 0.45s ease; }
    @keyframes bs-fade-in { from { opacity: 0; } to { opacity: 1; } }

    .bs-inner {
      max-width: 960px; margin: 0 auto;
      display: flex; flex-direction: column; gap: 28px;
    }

    .bs-header-block { text-align: center; padding: 12px 0; }
    .bs-dot-row {
      display: inline-flex; gap: 6px; margin-bottom: 18px;
    }
    .bs-dot {
      width: 8px; height: 8px; border-radius: 50%;
      background: var(--ws-chat-accent, var(--accent));
      animation: bs-dot-pulse 1.4s ease-in-out infinite;
    }
    .bs-dot:nth-child(2) { animation-delay: 0.2s; }
    .bs-dot:nth-child(3) { animation-delay: 0.4s; }
    @keyframes bs-dot-pulse {
      0%, 100% { opacity: 0.3; transform: scale(0.7); }
      50% { opacity: 1; transform: scale(1); }
    }
    .bs-title {
      font-size: 24px; font-weight: 800; color: var(--text-main);
      letter-spacing: -0.3px; margin-bottom: 8px;
    }
    .bs-subtitle { font-size: 14px; color: var(--text-soft); }

    .bs-grid {
      display: grid; grid-template-columns: 1fr 1fr; gap: 20px;
    }
    @media (max-width: 720px) { .bs-grid { grid-template-columns: 1fr; } }

    .bs-card {
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: var(--r-md);
      padding: 22px 24px;
      box-shadow: var(--shadow-sm);
    }
    [data-theme="dark"] .bs-card { background: var(--card-bg); }

    .bs-card-head {
      display: flex; align-items: center; gap: 8px;
      font-size: 11px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1px; color: var(--text-muted);
      margin-bottom: 18px;
    }
    .bs-card-head i { color: var(--ws-chat-accent, var(--accent)); font-size: 13px; }

    /* Mapa: campos revelados en secuencia */
    .bs-field {
      display: flex; align-items: flex-start; gap: 14px;
      padding: 11px 0;
      border-bottom: 1px solid var(--border-soft);
      opacity: 0; transform: translateX(-6px);
      animation: bs-field-in 0.55s cubic-bezier(0.22, 1, 0.36, 1) forwards;
    }
    .bs-field:last-child { border-bottom: none; }
    .bs-fields .bs-field:nth-child(1) { animation-delay: 0.8s; }
    .bs-fields .bs-field:nth-child(2) { animation-delay: 1.6s; }
    .bs-fields .bs-field:nth-child(3) { animation-delay: 2.4s; }
    .bs-fields .bs-field:nth-child(4) { animation-delay: 3.2s; }
    .bs-fields .bs-field:nth-child(5) { animation-delay: 4.0s; }
    @keyframes bs-field-in { to { opacity: 1; transform: translateX(0); } }

    .bs-field-label {
      font-size: 11px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 0.9px; color: var(--text-muted);
      min-width: 82px; padding-top: 3px; flex-shrink: 0;
    }
    .bs-field-value {
      font-size: 14px; color: var(--text-main); font-weight: 600;
      line-height: 1.5; flex: 1;
    }

    /* Sistema detectado: módulos activándose */
    .bs-module {
      display: flex; align-items: center; gap: 11px;
      padding: 11px 13px; border-radius: var(--r-sm);
      font-size: 14px; font-weight: 600;
      color: var(--text-muted);
      background: transparent;
      margin-bottom: 6px;
      opacity: 0.35; transform: translateY(4px);
      transition: opacity 0.45s, transform 0.45s, background 0.35s, color 0.35s;
    }
    .bs-module i { font-size: 16px; color: var(--text-light); transition: color 0.35s; }
    .bs-module.active {
      opacity: 1; transform: translateY(0);
      color: var(--text-main);
      background: var(--green-soft);
    }
    .bs-module.active i { color: var(--ws-chat-accent, var(--green)); }
    [data-theme="dark"] .bs-module.active { color: #6EE7B7; }
    /* Con tema de chat activo: el módulo detectado toma el color del tema
       (ej. ecommerce → cian, servicios → morado) en vez del verde fijo. */
    body[data-chat-theme] .bs-module.active {
      background: transparent;
      border: 1px solid var(--ws-chat-accent);
      color: var(--ws-chat-accent-light);
    }

    /* Chat — mensajes secuenciales */
    .bs-chat {
      display: flex; flex-direction: column; gap: 10px;
      max-width: 620px; margin: 0 auto;
      width: 100%;
    }
    .bs-chat-msg {
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-left: 3px solid var(--accent);
      border-radius: var(--r-sm);
      padding: 12px 16px;
      font-size: 14px; color: var(--text-main); line-height: 1.55;
      opacity: 0; transform: translateY(6px);
      animation: bs-msg-in 0.4s cubic-bezier(0.22, 1, 0.36, 1) forwards;
    }
    [data-theme="dark"] .bs-chat-msg { background: var(--card-bg); }
    @keyframes bs-msg-in { to { opacity: 1; transform: translateY(0); } }

    /* CTA final */
    .bs-cta-wrap {
      text-align: center; padding: 12px 0 40px;
      opacity: 0;
      animation: bs-msg-in 0.6s cubic-bezier(0.22, 1, 0.36, 1) 8.2s forwards;
    }
    .bs-done {
      font-size: 22px; font-weight: 900; color: var(--text-main);
      margin-bottom: 18px; letter-spacing: -0.3px;
      display: none; /* ahora el título lo reemplaza con "Ya lo tengo." */
    }
    /* Transiciones de texto del header */
    .bs-title, .bs-subtitle {
      transition: opacity 0.4s ease;
    }
    .bs-cta {
      display: inline-flex; align-items: center; gap: 10px;
      padding: 14px 30px;
      background: var(--accent); color: white;
      border: none; border-radius: var(--r-md);
      font-size: 15px; font-weight: 800;
      cursor: pointer; font-family: inherit;
      box-shadow: 0 10px 30px var(--accent-glow);
      transition: transform 0.15s, box-shadow 0.2s;
    }
    .bs-cta:hover { transform: translateY(-2px); box-shadow: 0 14px 36px var(--accent-glow); }
    .bs-cta i { font-size: 17px; }

    /* ═════════════════════════════════════════════════════════
       OPEN SYSTEM BUTTON (pio-bar)
    ═════════════════════════════════════════════════════════ */
    .open-sys-btn {
      display: none; align-items: center; gap: 8px;
      padding: 9px 16px;
      background: linear-gradient(135deg, var(--accent), var(--accent-mid));
      color: white; border: none; border-radius: var(--r-sm);
      font-size: 13px; font-weight: 800;
      box-shadow: var(--shadow-accent);
      transition: var(--tr); cursor: pointer;
    }
    .open-sys-btn:hover { transform: translateY(-1px); box-shadow: 0 6px 18px var(--accent-glow); }
    .open-sys-btn.visible { display: inline-flex; }
    .open-sys-btn i { font-size: 15px; }

    /* ═════════════════════════════════════════
       AUTH MODAL — al entrar al sistema por primera vez
    ═════════════════════════════════════════ */
    /* ─── Modal de auth UNIFICADO con el landing login/registro ───
       Card SIEMPRE dark (sin importar modo) + logo + wordmark pio/fly
       + naranja de marca. Coincide visualmente con landing/login.php. */
    .auth-card { background: #1A2233 !important; border: 1px solid rgba(255,255,255,0.06); }
    [data-theme="dark"] .auth-card { background: #1A2233 !important; }
    .auth-brand {
      display: flex; align-items: center; justify-content: center;
      gap: 8px;
      margin: 0 auto 18px;
    }
    .auth-brand img { height: 36px; width: auto; display: block; }
    .auth-brand-text {
      font-size: 22px; font-weight: 800;
      letter-spacing: -0.4px; line-height: 1;
      display: inline-flex;
    }
    .auth-brand-text span:first-child { color: #F1F5F9; }
    .auth-brand-text span:last-child  { color: #FF8A00; }
    .auth-modal .auth-title    { color: #F1F5F9 !important; }
    .auth-modal .auth-subtitle { color: rgba(241,245,249,0.72) !important; }
    .auth-modal .auth-features { background: rgba(255,255,255,0.03) !important; border: 1px solid rgba(255,255,255,0.06); }
    .auth-modal .auth-feat     { color: rgba(241,245,249,0.85) !important; }
    .auth-modal .auth-input {
      background: rgba(255,255,255,0.03) !important;
      border-color: rgba(255,255,255,0.08) !important;
      color: #F1F5F9 !important;
    }
    .auth-modal .auth-input::placeholder { color: rgba(241,245,249,0.32) !important; }
    .auth-modal .auth-input:focus { border-color: #FF8A00 !important; box-shadow: 0 0 0 3px rgba(255,138,0,0.18); }
    .auth-modal .auth-divider { color: rgba(241,245,249,0.42) !important; }
    .auth-modal .auth-divider::before, .auth-modal .auth-divider::after { background: rgba(255,255,255,0.08) !important; }
    .auth-modal .auth-foot { color: rgba(241,245,249,0.55) !important; }
    .auth-modal .auth-btn--apple { background: #0F172A; color: #fff; border-color: rgba(255,255,255,0.12); }
    .auth-modal .auth-btn--apple:hover { background: #1E293B; }
    /* El botón "Continuar con Google" se queda blanco (branded Google). */

    .auth-modal {
      display: none;
      position: fixed; inset: 0; z-index: 10000;
      background: rgba(15, 23, 42, 0.7);
      backdrop-filter: blur(8px);
      align-items: center; justify-content: center;
      padding: 20px;
    }
    .auth-modal.open { display: flex; animation: auth-fade-in 0.3s ease; }
    .auth-modal.is-closing { display: flex; animation: auth-fade-out 0.24s ease forwards; }
    .auth-modal.is-closing .auth-card { animation: auth-card-out 0.24s cubic-bezier(0.4, 0, 1, 1) forwards; }
    @keyframes auth-fade-in { from { opacity: 0; } to { opacity: 1; } }
    @keyframes auth-fade-out { from { opacity: 1; } to { opacity: 0; } }
    @keyframes auth-card-out {
      from { opacity: 1; transform: translateY(0) scale(1); }
      to   { opacity: 0; transform: translateY(8px) scale(0.97); }
    }

    .auth-card {
      position: relative;
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: var(--r-lg);
      padding: 32px 28px;
      max-width: 440px; width: 100%;
      box-shadow: var(--shadow-xl);
      animation: auth-card-in 0.4s cubic-bezier(0.22, 1, 0.36, 1);
    }
    .auth-modal-close {
      position: absolute; top: 12px; right: 12px;
      width: 34px; height: 34px;
      border: 1px solid rgba(255,255,255,0.08);
      background: rgba(255,255,255,0.04);
      color: rgba(241,245,249,0.62);
      border-radius: 10px;
      display: flex; align-items: center; justify-content: center;
      cursor: pointer;
      transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
    }
    .auth-modal-close:hover {
      background: rgba(255,138,0,0.10);
      color: #FF8A00;
      border-color: rgba(255,138,0,0.32);
      transform: rotate(90deg);
    }
    [data-theme="dark"] .auth-card { background: var(--card-bg); }
    @keyframes auth-card-in {
      from { opacity: 0; transform: translateY(16px) scale(0.97); }
      to   { opacity: 1; transform: translateY(0) scale(1); }
    }

    /* El modal de auth NO sigue el tema del chat — siempre usa el naranja
       de marca para mantener consistencia visual con el resto de la app
       (login en landing, botón "Crear cuenta" del navbar, etc.). */
    .auth-icon {
      width: 64px; height: 64px; border-radius: 50%;
      background: linear-gradient(135deg, #FFE5C7, #FFF3E0);
      color: #FF8A00;
      display: flex; align-items: center; justify-content: center;
      font-size: 30px; margin: 0 auto 16px;
    }
    .auth-title {
      font-size: 22px; font-weight: 800; color: var(--text-main);
      text-align: center; letter-spacing: -0.3px; margin-bottom: 6px;
    }
    .auth-subtitle {
      font-size: 14px; color: var(--text-soft);
      text-align: center; line-height: 1.5; margin-bottom: 18px;
    }
    .auth-features {
      display: flex; flex-direction: column; gap: 6px;
      background: var(--bg-soft);
      padding: 12px 14px; border-radius: var(--r-sm);
      margin-bottom: 22px;
    }
    .auth-feat {
      display: flex; align-items: center; gap: 9px;
      font-size: 13px; color: var(--text-soft); font-weight: 600;
    }
    .auth-feat i { color: var(--green); font-size: 14px; }
    [data-theme="dark"] .auth-feat i { color: #6EE7B7; }

    .auth-btn {
      display: flex; align-items: center; justify-content: center; gap: 10px;
      width: 100%; padding: 12px 18px;
      border-radius: var(--r-sm);
      font-family: inherit; font-size: 14px; font-weight: 700;
      cursor: pointer; border: 1.5px solid var(--border-soft);
      background: var(--bg-panel); color: var(--text-main);
      margin-bottom: 8px;
      transition: var(--tr-fast);
    }
    .auth-btn:hover { border-color: var(--text-soft); transform: translateY(-1px); }
    .auth-btn i { font-size: 18px; }
    .auth-btn--google { background: white; color: #0F172A; border-color: #E2E8F0; }
    .auth-btn--google:hover { background: #F8FAFC; border-color: #CBD5E1; }
    .auth-btn--apple { background: #0F172A; color: white; border-color: #0F172A; }
    .auth-btn--apple:hover { background: #1E293B; }
    .auth-btn--email {
      background: #FF8A00; color: white; border-color: #FF8A00;
      box-shadow: 0 4px 14px rgba(255,138,0,0.32);
    }
    .auth-btn--email:hover { background: #E67A00; border-color: #E67A00; }

    .auth-divider {
      display: flex; align-items: center; gap: 12px;
      margin: 14px 0;
      font-size: 11px; font-weight: 700; text-transform: uppercase;
      color: var(--text-muted); letter-spacing: 1px;
    }
    .auth-divider::before, .auth-divider::after {
      content: ''; flex: 1; height: 1px; background: var(--border-soft);
    }

    .auth-input {
      width: 100%; padding: 11px 14px;
      border: 1.5px solid var(--border-soft); border-radius: var(--r-sm);
      background: var(--bg-main); color: var(--text-main);
      font-family: inherit; font-size: 14px; outline: none;
      margin-bottom: 8px;
      transition: border-color 0.15s;
    }
    .auth-input:focus { border-color: #FF8A00; }
    .auth-input::placeholder { color: var(--text-muted); }

    /* ── Botón Google: host directo (sin overlay trick) ───────────────
       Antes había un overlay con opacity:0.001 para superponer un botón
       custom estilo dark. Google Identity Services detecta esa técnica
       como posible clickjacking y RECHAZA silenciosamente el flujo OAuth
       — la razón de que "no servía continuar con Google". Ahora el host
       muestra el botón oficial filled_black de Google, visible y nativo. */
    .auth-google-host {
      display: flex;
      justify-content: center;
      margin-bottom: 8px;
      min-height: 44px;
    }
    /* Google inyecta su propio markup — solo nos aseguramos que el ancho
       del contenedor que crea no se desborde del card. */
    .auth-google-host > div { width: auto !important; max-width: 100%; }

    .auth-error {
      background: rgba(239,68,68,0.10);
      border: 1px solid rgba(239,68,68,0.32);
      color: #FECACA;
      border-radius: 8px;
      padding: 9px 12px;
      font-size: 13px;
      font-weight: 700;
      margin: -2px 0 10px;
      line-height: 1.45;
    }
    .auth-error[hidden] { display: none; }

    .auth-foot {
      text-align: center; font-size: 13px; color: var(--text-muted);
      margin-top: 16px;
    }
    .auth-foot a {
      color: #FF8A00; font-weight: 700; cursor: pointer;
      text-decoration: none;
    }
    .auth-foot a:hover { text-decoration: underline; }

    /* "Más tarde" — botón ghost. Solo visible en milestone (context),
       refuerza que el modal no es muro. Discreto pero accesible. */
    .auth-later {
      width: 100%;
      margin-top: 10px;
      padding: 10px 14px;
      background: transparent;
      border: 1px solid var(--border-soft);
      border-radius: 10px;
      color: var(--text-muted);
      font-family: inherit;
      font-size: 13px;
      font-weight: 600;
      cursor: pointer;
      transition: background 0.15s, color 0.15s, border-color 0.15s;
    }
    .auth-later:hover {
      background: rgba(255,255,255,0.04);
      color: var(--text-main);
      border-color: var(--border-mid);
    }
    .auth-later[hidden] { display: none; }

    /* Pulse cuando Pio lo señala por primera vez */
    .open-sys-btn--pulsing {
      animation: open-sys-pulse 1.6s ease-in-out infinite;
      position: relative;
      z-index: 50;
    }
    @keyframes open-sys-pulse {
      0%, 100% { box-shadow: 0 0 0 0 rgba(255,138,0, 0.55), var(--shadow-accent); transform: scale(1); }
      50%      { box-shadow: 0 0 0 14px rgba(255,138,0, 0), var(--shadow-accent); transform: scale(1.04); }
    }

    /* Spotlight genérico — Pio lo aplica cuando guía al usuario a un botón */
    .ui-spotlight {
      position: relative;
      z-index: 80;
      animation: ui-spotlight-pulse 1.4s ease-in-out infinite;
      border-radius: var(--r-sm) !important;
    }
    @keyframes ui-spotlight-pulse {
      0%, 100% {
        box-shadow: 0 0 0 0 rgba(255,138,0, 0.55),
                    0 0 0 0 rgba(255,138,0, 0);
      }
      50% {
        box-shadow: 0 0 0 8px rgba(255,138,0, 0),
                    0 0 28px 4px rgba(255,138,0, 0.55);
      }
    }
    .ui-spotlight::after {
      content: '';
      position: absolute;
      inset: -6px;
      border: 2px solid var(--accent);
      border-radius: inherit;
      pointer-events: none;
      animation: ui-spotlight-ring 1.4s ease-in-out infinite;
    }
    @keyframes ui-spotlight-ring {
      0%, 100% { opacity: 0.7; transform: scale(1); }
      50%      { opacity: 0;   transform: scale(1.18); }
    }

    /* Tooltip "Tócalo tú" */
    .first-press-tip {
      position: fixed; z-index: 51;
      background: var(--bg-panel);
      color: var(--text-main);
      padding: 12px 16px;
      border-radius: var(--r-md);
      border: 1.5px solid var(--accent);
      box-shadow: 0 12px 32px rgba(0,0,0,0.22), 0 0 0 4px rgba(255,138,0,0.12);
      font-size: 14px; line-height: 1.4;
      max-width: 220px;
      animation: fpt-bounce 0.45s cubic-bezier(0.34, 1.56, 0.64, 1);
    }
    [data-theme="dark"] .first-press-tip { background: var(--card-bg); }
    .first-press-tip b { color: var(--accent); }
    .fpt-arrow {
      position: absolute; top: -7px; left: 50%;
      transform: translateX(-50%) rotate(45deg);
      width: 14px; height: 14px;
      background: var(--bg-panel);
      border-top: 1.5px solid var(--accent);
      border-left: 1.5px solid var(--accent);
    }
    [data-theme="dark"] .fpt-arrow { background: var(--card-bg); }
    @keyframes fpt-bounce {
      0%   { opacity: 0; transform: translateY(-12px) scale(0.92); }
      100% { opacity: 1; transform: translateY(0)     scale(1);    }
    }

    /* ═════════════════════════════════════════════════════════
       TRANSICIONES DE ENTRADA AL SYS PANEL
    ═════════════════════════════════════════════════════════ */
    .header       { transition: transform 0.45s cubic-bezier(0.7, 0, 0.3, 1), opacity 0.35s ease; }
    .portfolio    { transition: transform 0.45s cubic-bezier(0.7, 0, 0.3, 1), opacity 0.35s ease; }
    .exec-panel   { transition: transform 0.45s cubic-bezier(0.7, 0, 0.3, 1), opacity 0.35s ease; }
    .workspace    { transition: opacity 0.35s ease; }

    body.sys-open .header     { transform: translateY(-110%); opacity: 0; pointer-events: none; }
    body.sys-open .portfolio  { transform: translateX(-110%); opacity: 0; pointer-events: none; }
    body.sys-open .exec-panel { transform: translateX(110%); opacity: 0; pointer-events: none; }
    body.sys-open .workspace  { opacity: 0; pointer-events: none; }

    /* ═════════════════════════════════════════════════════════
       SYS PANEL — vista fullscreen (panel administrativo)
    ═════════════════════════════════════════════════════════ */
     .sys-panel {
       display: none;
       position: fixed; inset: 0; z-index: 9999;
       background: var(--bg-main);
       flex-direction: column;
       font-family: 'Nunito', sans-serif;
       opacity: 0;
       transition: opacity 0.35s ease;

       /* Fallback values for businesses without a detected sector */
       --sector-accent:           #FF7A00;
       --sector-accent-soft:      rgba(255, 122, 0, 0.12);
       --sector-accent-light:     #FFA857;
       --sector-nav-bg:           #0B0F19; /* Deep luxurious midnight navy */
       --sector-nav-border:       rgba(255,255,255,0.05);
       --sector-header-bg:        #0F172A; /* Premium slate-900 header */
       --sector-content-bg:       #090D16; /* Clean midnight black backdrop */
       --sector-card-bg:          #131C2E; /* Exquisite deep navy card surface */
       --sector-soft-bg:          #1E293B; /* Soft slate elements */
       --sector-chat-bubble-bg:   #131C2E; /* Matching chat surfaces */

       /* Local variables utilized by internal layout & components */
       --accent:         var(--sector-accent) !important;
       --accent-soft:    var(--sector-accent-soft) !important;
       --accent-dark:    var(--sector-accent) !important;
       --accent-light:   var(--sector-accent-light) !important;
       --primary:        var(--sector-accent) !important;
       --primary-soft:   var(--sector-accent-soft) !important;
       --bg-main:        var(--sector-content-bg) !important;
       --bg-panel:       var(--sector-card-bg) !important;
       --bg-soft:        var(--sector-soft-bg) !important;
       --bg-elevated:    var(--sector-card-bg) !important;
       --card-bg:        var(--sector-card-bg) !important;
       --sidebar-bg:     var(--sector-nav-bg) !important;
       --sidebar-panel:  var(--sector-nav-bg) !important;
       --sidebar-hover:  rgba(255,255,255,0.05) !important;
       --sidebar-active: var(--sector-accent-soft) !important;
       --text-main:      #F8FAFC !important; /* Premium off-white */
       --text-soft:      rgba(248,250,252,0.85) !important;
       --text-muted:     rgba(248,250,252,0.55) !important;
       --border-soft:    rgba(255,255,255,0.06) !important;
       --border-mid:     rgba(255,255,255,0.10) !important;
       --border-strong:  rgba(255,255,255,0.18) !important;
       --shadow-xs:      0 1px 2px rgba(0,0,0,0.45) !important;
       --shadow-sm:      0 2px 8px rgba(0,0,0,0.50) !important;
       --shadow-md:      0 6px 20px rgba(0,0,0,0.55) !important;
       --shadow-xl:      0 20px 50px rgba(0,0,0,0.70) !important;
     }
    .sys-panel.mounted  { display: flex; }
    .sys-panel.open     { opacity: 1; }

    /* Entrada animada por columna */
    .sys-header,
    .sys-nav,
    .sys-content,
    .sys-chat {
      opacity: 0;
      transition: opacity 0.4s ease, transform 0.45s cubic-bezier(0.22, 1, 0.36, 1);
    }
    .sys-header  { transform: translateY(-16px); }
    .sys-nav     { transform: translateX(-24px); }
    .sys-content { transform: translateY(14px); }
    .sys-chat    { transform: translateX(24px); }

    .sys-panel.open .sys-header  { opacity: 1; transform: none; transition-delay: 0.05s; }
    .sys-panel.open .sys-nav     { opacity: 1; transform: none; transition-delay: 0.15s; }
    .sys-panel.open .sys-content { opacity: 1; transform: none; transition-delay: 0.25s; }
    .sys-panel.open .sys-chat    { opacity: 1; transform: none; transition-delay: 0.1s; }

    /* Header minimal — sin border-bottom: el border-bottom creaba una
       línea fea bajo el área del brand (.sys-header-brand) que comparte
       background con el chat panel — el border atravesaba esa zona
       continua y se veía como un corte raro. La separación visual con
       el contenido viene del cambio de bg natural entre las columnas. */
    .sys-header {
      height: 56px; flex-shrink: 0;
      display: flex; align-items: center; gap: 14px;
      padding: 0 20px;
      background: var(--bg-panel);
    }
    .sys-back {
      width: 36px; height: 36px; border-radius: var(--r-sm);
      display: flex; align-items: center; justify-content: center;
      background: var(--bg-soft); border: 1px solid var(--border-soft);
      color: var(--text-soft); font-size: 18px;
      transition: var(--tr-fast); cursor: pointer;
    }
    .sys-back:hover { background: var(--accent-soft); color: var(--accent); border-color: var(--accent); }
    .sys-title-wrap { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
    /* Identidad Piofly — BARRA PROPIA: ocupa el ancho de la columna del
       chat (340px), full-height y con el fondo del chat, así se ve como
       una barra separada de "Panel administrativo". */
    .sys-header-brand {
      display: flex; align-items: center; gap: 7px;
      flex-shrink: 0;
      width: 340px;
      align-self: stretch;
      margin-left: auto;          /* SIEMPRE pegado al borde derecho, sin importar
                                     qué haya antes (chip demo, etc.) */
      margin-right: -20px;        /* cancela el padding del header → llega al borde */
      padding-left: 18px;
      justify-content: flex-start;
    }
    .sys-panel:not([data-theme-mode="claro"]) .sys-header-brand {
      background: var(--sector-chat-bubble-bg);
      border-left: 1px solid var(--sector-nav-border);
    }
    .sys-header-brand img { height: 32px; width: auto; display: block; }
    .sys-header-brand .header-logo-text { font-size: 18px; letter-spacing: -0.3px; }

    /* Cabecera "piofly" arriba del chat — SOLO en móvil. En desktop está
       oculta porque ya vive en la barra del CRM (.sys-header-brand). */
    .sys-chat-mobile-head { display: none; }
    @media (max-width: 960px) {
      .sys-chat-mobile-head {
        display: flex; align-items: center; gap: 8px;
        padding: 10px 16px;
        background: var(--sector-chat-bubble-bg, var(--bg-panel));
        border-bottom: 1px solid rgba(255,255,255,0.06);
        flex-shrink: 0;
      }
      .sys-chat-mobile-head img { height: 30px; width: auto; display: block; }
      .sys-chat-mobile-head .header-logo-text {
        font-size: 18px; letter-spacing: -0.3px; line-height: 1;
      }
      /* En móvil, el piofly del header global del CRM se esconde para
         evitar duplicarlo. Lo muestra solo la cabecera del chat. */
      .sys-header-brand { display: none !important; }
    }
    .sys-title-icon {
      width: 32px; height: 32px; border-radius: var(--r-sm);
      display: flex; align-items: center; justify-content: center;
      background: var(--accent-soft); color: var(--accent-dark); font-size: 15px;
    }
    .sys-title {
      font-size: 16px; font-weight: 800; color: var(--text-main);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .sys-title-sub { font-size: 12px; color: var(--text-muted); font-weight: 600; }

    /* ── Chip demo INLINE en el header (modo anonymous) ──────────────
       Vive en el espacio del header entre el título del negocio y la
       marca Piofly. Patrón: pill OSCURA que contrasta con el bg del
       header (que es slate). El naranja vive solo en el CTA. Sin glow,
       sin pulse — solidez, no brillo.

       Layout: margin-left:auto + brand también con margin-left:auto →
       las dos auto-margins se reparten el espacio sobrante, así el
       chip queda CENTRADO en el hueco entre título y marca Piofly. */
    .sys-demo-banner {
      display: inline-flex;
      align-items: center;
      gap: 10px;
      padding: 5px 5px 5px 14px;
      max-width: 480px;
      margin: 0 12px 0 auto;
      background: rgba(0, 0, 0, 0.38);             /* MÁS OSCURO que el header */
      border: 1px solid rgba(255, 255, 255, 0.06);
      border-radius: 999px;
      font-size: 13px;
      line-height: 1.3;
      color: var(--text-main);
      flex-shrink: 0;
      animation: sys-demo-fade-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) 0.6s both;
    }
    .sys-demo-banner[hidden] { display: none; }
    @keyframes sys-demo-fade-in {
      from { opacity: 0; transform: translateY(-6px); }
      to   { opacity: 1; transform: translateY(0); }
    }
    .sys-demo-banner:hover {
      background: rgba(0, 0, 0, 0.48);
      border-color: rgba(255, 255, 255, 0.10);
    }
    .sys-demo-icon {
      color: #FFA333;                              /* naranja solo en el ícono */
      font-size: 14px;
      line-height: 1;
      flex-shrink: 0;
    }
    .sys-demo-text {
      color: rgba(241, 245, 249, 0.92);
      font-weight: 600;
      letter-spacing: 0.1px;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      min-width: 0;
    }
    .sys-demo-cta {
      background: #FF8A00; color: white;
      border: none;
      padding: 6px 14px;
      border-radius: 999px;
      font-family: inherit; font-size: 13px; font-weight: 800;
      letter-spacing: 0.2px;
      cursor: pointer;
      transition: background 0.15s ease, transform 0.12s ease;
      flex-shrink: 0;
    }
    .sys-demo-cta:hover {
      background: #E67A00;
      transform: translateY(-1px);
    }
    .sys-demo-cta:active { transform: translateY(0); }
    .sys-demo-close {
      background: transparent;
      border: none;
      color: rgba(241, 245, 249, 0.48);
      width: 22px; height: 22px;
      border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      cursor: pointer;
      transition: background 0.15s ease, color 0.15s ease;
      flex-shrink: 0;
    }
    .sys-demo-close:hover {
      background: rgba(255, 255, 255, 0.08);
      color: var(--text-main);
    }
    /* Ajustes de header cuando el chip está visible: el title-wrap deja
       de tener flex:1 brutal para que el chip ocupe su espacio natural. */
    .sys-header:has(.sys-demo-banner:not([hidden])) .sys-title-wrap { flex: 0 1 auto; }
    /* Tablet: comprimimos el texto del chip pero mantenemos el CTA */
    @media (max-width: 960px) {
      .sys-demo-banner { max-width: 320px; font-size: 12px; padding-left: 11px; }
      .sys-demo-text { max-width: 180px; }
    }
    /* Móvil: ocultamos el chip del header (el header móvil es muy
       angosto). Para mobile usamos solo el banner del welcome. */
    @media (max-width: 720px) {
      .sys-demo-banner { display: none !important; }
    }

    /* Layout 3 columnas */
    .sys-layout {
      flex: 1; display: grid;
      grid-template-columns: 240px 1fr 340px;
      overflow: hidden;
    }

    /* LEFT: nav */
    .sys-nav {
      background: var(--bg-panel);
      border-right: 1px solid var(--border-soft);
      padding: 16px 12px;
      display: flex; flex-direction: column; gap: 2px;
      overflow-y: auto;
    }
    .sys-nav-group {
      font-size: 10px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1px; color: var(--text-muted);
      padding: 10px 12px 6px;
    }
    .sys-nav-item {
      display: flex; align-items: center; gap: 11px;
      padding: 10px 12px; border-radius: var(--r-sm);
      font-size: 14px; font-weight: 600; color: var(--text-soft);
      background: transparent; border: 1px solid transparent;
      transition: var(--tr-fast); cursor: pointer;
      text-align: left;
    }
    .sys-nav-item i { font-size: 17px; color: var(--text-muted); flex-shrink: 0; transition: color 0.15s; }
    .sys-nav-item:hover { background: var(--bg-soft); color: var(--text-main); }
    .sys-nav-item:hover i { color: var(--accent); }
    .sys-nav-item.active {
      background: var(--accent-soft); color: var(--accent-dark);
      border-color: rgba(255, 138, 0, 0.22);
      font-weight: 700;
    }
    .sys-nav-item.active i { color: var(--accent); }
    .sys-nav-label { flex: 1; min-width: 0; }
    .sug-nav-badge {
      display: none;
      font-size: 10px; font-weight: 800;
      padding: 2px 7px; border-radius: var(--r-pill);
      background: var(--accent); color: white;
      flex-shrink: 0;
    }
    .sug-nav-badge.visible { display: inline-flex; align-items: center; }
    .sys-nav-item.active .sug-nav-badge { background: white; color: var(--accent); }
    [data-theme="dark"] .sys-nav-item.active { color: var(--accent-light); }

    /* Badge "PRÓX." para items futuros (Reservas, Promociones, Fidelidad,
       Facturación CFDI). Discreto pero claro. */
    .sys-nav-soon {
      font-size: 9px; font-weight: 800;
      padding: 2px 6px; border-radius: 4px;
      background: rgba(148, 163, 184, 0.18);
      color: var(--text-soft, #94A3B8);
      letter-spacing: .4px;
      flex-shrink: 0;
    }
    .sys-nav-item.is-soon { opacity: 0.85; }
    .sys-nav-item.is-soon:hover { opacity: 1; }
    .sys-nav-item.is-soon.active .sys-nav-soon {
      background: rgba(255, 138, 0, 0.20);
      color: var(--accent, #FF8A00);
    }

    /* Placeholder "Próximamente" en main cuando se entra a un item soon */
    .sec-soon {
      display: flex; flex-direction: column;
      align-items: center; justify-content: center;
      padding: 60px 24px;
      text-align: center;
      gap: 14px;
    }
    .sec-soon-icon {
      width: 88px; height: 88px;
      border-radius: 22px;
      background: linear-gradient(135deg, rgba(255,138,0,0.12), rgba(255,138,0,0.04));
      display: flex; align-items: center; justify-content: center;
      box-shadow: 0 12px 32px rgba(255,138,0,0.10);
    }
    .sec-soon-icon i {
      font-size: 42px;
      color: var(--accent, #FF8A00);
    }
    .sec-soon-pill {
      font-size: 11px; font-weight: 800;
      padding: 5px 14px; border-radius: 999px;
      background: rgba(255,138,0,0.14);
      color: var(--accent, #FF8A00);
      letter-spacing: .6px;
      text-transform: uppercase;
    }
    .sec-soon-title {
      margin: 6px 0 0;
      font-size: 26px; font-weight: 900;
      color: var(--text-main, #F1F5F9);
      letter-spacing: -.5px;
    }
    .sec-soon-desc {
      margin: 0;
      max-width: 480px;
      font-size: 14.5px; line-height: 1.55;
      color: var(--text-soft, #94A3B8);
    }
    .sec-soon-hint {
      margin-top: 8px;
      display: inline-flex; align-items: center; gap: 8px;
      padding: 10px 16px;
      background: var(--bg-soft, rgba(255,255,255,0.05));
      border: 1px solid var(--border-soft, rgba(255,255,255,0.08));
      border-radius: 12px;
      font-size: 12.5px;
      color: var(--text-soft, #94A3B8);
    }
    .sec-soon-hint i { color: var(--accent, #FF8A00); font-size: 14px; }

    /* ═══════════════════════════════════════
       SECTOR THEMES — todo el sys-panel se tinta con el color del sector.
       Se sobreescriben los CSS vars globales dentro del panel para que
       header, sidebar, content y chat respeten el theme automáticamente.
    ═══════════════════════════════════════ */
    /* .sys-panel[data-sector] is deprecated; local variables are now defined with !important directly in the base .sys-panel class for robust fallback behavior */
    /* Theming explícito para componentes internos del sys-panel */
    .sys-panel .kpi {
      background: var(--bg-panel) !important;
      border-color: var(--border-soft) !important;
    }
    .sys-panel .kpi-label,
    .sys-panel .kpi-delta--flat {
      color: var(--text-muted) !important;
    }
    .sys-panel .kpi-value {
      color: var(--text-main) !important;
    }
    .sys-panel .kpi-icon,
    .sys-panel .kpi-icon--blue,
    .sys-panel .kpi-icon--orange,
    .sys-panel .kpi-icon--purple,
    .sys-panel .kpi-icon--green {
      background: var(--accent-soft) !important;
      color: var(--accent-light) !important;
    }
    .sys-panel .sec-card {
      background: var(--bg-panel) !important;
      border-color: var(--border-soft) !important;
      color: var(--text-soft) !important;
    }
    .sys-panel .sec-card-title {
      color: var(--text-main) !important;
    }
    .sys-panel .sec-card-title i {
      color: var(--accent-light) !important;
    }
    .sys-panel .sec-card-meta {
      color: var(--text-muted) !important;
    }
    .sys-panel .sec-card-meta--filled {
      background: var(--accent-soft) !important;
      color: var(--accent-light) !important;
    }
    .sys-panel .sec-card-body {
      color: var(--text-soft) !important;
    }
    .sys-panel .sec-subhead {
      border-bottom-color: var(--border-soft) !important;
    }
    .sys-panel .sec-subhead i,
    .sys-panel .sec-subhead-title {
      color: var(--accent-light) !important;
    }
    .sys-panel .sec-subhead-sub {
      color: var(--text-muted) !important;
    }
    .sys-panel .sec-head .sec-title {
      color: var(--text-main) !important;
    }
    .sys-panel .sec-head .sec-sub {
      color: var(--text-muted) !important;
    }
    .sys-panel .sec-empty {
      color: var(--text-muted) !important;
    }
    /* Charts y bars */
    .sys-panel .dash-bar--highlight {
      background: var(--accent) !important;
    }
    .sys-panel .dash-chart-bar {
      background: var(--accent-soft) !important;
    }
    /* Botones internos */
    .sys-panel .sec-btn {
      background: var(--bg-soft) !important;
      border-color: var(--border-soft) !important;
      color: var(--text-main) !important;
    }
    .sys-panel .sec-btn:hover {
      background: var(--accent-soft) !important;
      color: var(--accent-light) !important;
      border-color: var(--accent) !important;
    }
    /* SYSTEM THEMES — comparten paleta con los TEMAS DEL CHAT.
       Edgar: 'que no concuerden los colores del CRM se sentía como
       3 mundos distintos. Establece un lazo CSS común con el tema
       del chat, porque los temas del chat están bien padres'.

       Solución: una sola regla que REUSA las variables del chat
       (--ws-chat-feed-bg, --ws-chat-bubble-bg, --ws-chat-accent).
       El sys-panel hereda el "mundo" cálido/frío del chat, pero:
       - Las CARDS se quedan slate neutro (#1A2233) para que los KPIs
         destaquen sobre el bg tinted del tema. Sin esto, todo se ve
         del mismo color y no puedes 'identificar' elementos.
       - El HEADER usa una mezcla del accent (22%) sobre slate, para
         tener tinte del tema sin saturar.
       - El NAV usa el mismo --ws-chat-bubble-bg (cálido oscuro) —
         conecta con el bubble del chat lateral.

       Resultado: un solo lenguaje visual entre chat ↔ CRM, con
       jerarquía de legibilidad en el dashboard. */
    /* SYS-PANEL THEMING — paleta del chat + boost perceptual de lightness:
       Edgar: ecommerce 'me encantó así' (feed-bg #134353 ya luminoso),
       pero eventos 'no se distingue' (feed-bg #181009 casi negro).

       Solución: oklch() boost perceptualmente uniforme. Garantiza que
       las cards SIEMPRE estén un step visible más claras que el canvas,
       sin importar qué tan oscuro sea el feed-bg del tema. Fallback con
       color-mix(white) para browsers sin oklch from-syntax.

       Estructura:
       - CANVAS:   bubble-bg del chat (versión más oscura del tema)
       - CARDS:    feed-bg con lightness boost +0.05 oklch → siempre visible
       - SOFT:     feed-bg con boost +0.10
       - NAV:      bubble-bg
       - HEADER:   feed-bg + 30% accent → identifica el tema */
    .sys-panel[data-theme-color] {
      --sector-content-bg:       var(--ws-chat-bubble-bg);
      /* Fallback color-mix con white (compatibilidad amplia) */
      --sector-card-bg:          color-mix(in srgb, white 7%, var(--ws-chat-feed-bg));
      --sector-soft-bg:          color-mix(in srgb, white 12%, var(--ws-chat-feed-bg));
      --sector-chat-bubble-bg:   var(--ws-chat-bubble-bg);
      --sector-nav-bg:           var(--ws-chat-bubble-bg);
      --sector-header-bg:        color-mix(in srgb, var(--ws-chat-accent) 30%, var(--ws-chat-feed-bg));

      --sector-accent:           var(--ws-chat-accent);
      --sector-accent-light:     var(--ws-chat-accent-light);
      --sector-accent-soft:      color-mix(in srgb, var(--ws-chat-accent) 20%, transparent);
      --sector-nav-border:       color-mix(in srgb, var(--ws-chat-accent) 25%, transparent);
    }
    /* Override con oklch en browsers que lo soportan (Chrome 111+, Safari
       16.4+, Firefox 128+) — perceptualmente más uniforme que white mix. */
    @supports (color: oklch(from white l c h)) {
      .sys-panel[data-theme-color] {
        --sector-card-bg: oklch(from var(--ws-chat-feed-bg) calc(l + 0.05) c h);
        --sector-soft-bg: oklch(from var(--ws-chat-feed-bg) calc(l + 0.10) c h);
      }
    }

    /* NOTA: 'modo Blanco + tema-color' es una combinación PROHIBIDA por
       diseño. El JS del picker enforza la regla: si eliges Blanco,
       se quita el color; si eliges un color, se forza Oscuro. Por eso
       no hay override CSS aquí — esa combinación nunca debe llegar al
       DOM. Si alguna vez se filtra, el override de
       .sys-panel[data-theme-mode='claro'] (modo blanco puro) ya da
       fallback razonable. */

    /* Aplicar el theme del sector a sus paneles internos.
       Usamos !important porque el dark-theme global setea estas vars con
       igual specificity y a veces gana por orden en el archivo. */
    .sys-panel .sys-header {
      background: var(--sector-header-bg) !important;
      /* border-bottom REMOVIDO — creaba una línea horizontal fea que
         cortaba la zona del brand (que comparte bg con el chat panel
         de abajo). La separación visual viene del cambio natural de
         backgrounds entre las columnas, no necesita un border explícito. */
    }
    .sys-panel .sys-title { color: var(--text-main) !important; }
    .sys-panel .sys-title-sub { color: var(--text-muted) !important; }
    .sys-panel .sys-title-icon {
      background: var(--accent-soft) !important;
      color: var(--accent-light) !important;
    }
    .sys-panel .sys-back {
      background: var(--bg-soft) !important;
      border-color: var(--border-soft) !important;
      color: var(--text-soft) !important;
    }
    .sys-panel .sys-back:hover {
      background: var(--accent-soft) !important;
      color: var(--accent-light) !important;
      border-color: var(--accent) !important;
    }

    .sys-panel .sys-nav {
      background: var(--sector-nav-bg) !important;
      border-right: 1px solid var(--sector-nav-border) !important;
      /* Firefox */
      scrollbar-width: thin;
      scrollbar-color: var(--accent-soft) transparent;
    }
    /* Webkit scrollbar tematizado para sidebar y content del sys-panel */
    .sys-panel .sys-nav::-webkit-scrollbar,
    .sys-panel .sys-content::-webkit-scrollbar,
    .sys-panel .sys-chat-feed-slot > #feed::-webkit-scrollbar {
      width: 8px;
    }
    .sys-panel .sys-nav::-webkit-scrollbar-track,
    .sys-panel .sys-content::-webkit-scrollbar-track,
    .sys-panel .sys-chat-feed-slot > #feed::-webkit-scrollbar-track {
      background: transparent;
    }
    .sys-panel .sys-nav::-webkit-scrollbar-thumb,
    .sys-panel .sys-content::-webkit-scrollbar-thumb,
    .sys-panel .sys-chat-feed-slot > #feed::-webkit-scrollbar-thumb {
      background: var(--accent-soft);
      border-radius: 999px;
      border: 2px solid transparent;
      background-clip: padding-box;
      transition: background 0.15s;
    }
    .sys-panel .sys-nav::-webkit-scrollbar-thumb:hover,
    .sys-panel .sys-content::-webkit-scrollbar-thumb:hover,
    .sys-panel .sys-chat-feed-slot > #feed::-webkit-scrollbar-thumb:hover {
      background: var(--accent);
      background-clip: padding-box;
    }
    /* Scrollbar del content y chat también */
    .sys-panel .sys-content,
    .sys-panel .sys-chat-feed-slot > #feed {
      scrollbar-width: thin;
      scrollbar-color: var(--accent-soft) transparent;
    }
    /* Nav y header del sys-panel usan los nuevos sector-nav-bg / sector-header-bg
       que ya están tinted-sutiles (15-25% del accent sobre slate). El !important
       conserva el override sobre el dark-theme global. */
    .sys-panel[data-theme-color] .sys-nav    { background: var(--sector-nav-bg) !important; }
    .sys-panel[data-theme-color] .sys-header { background: var(--sector-header-bg) !important; }
    /* Temating del área central solamente — el chat lateral se queda neutral
       para que las burbujas se lean bien con cualquier theme */
    .sys-panel .sys-content {
      background: var(--sector-content-bg) !important;
    }

    /* Burbujas del chat: casi negro con el tinte del tema (no se pierde el sector).
       El usuario sigue azul sólido — sin gradiente. */
    .sys-panel .sys-chat .ffm-bubble {
      background: var(--sector-chat-bubble-bg) !important;
      border-color: var(--border-soft) !important;
      color: var(--text-main) !important;
    }
    .sys-panel .sys-chat .ffm-bubble--important,
    .sys-panel .sys-chat .ffm-bubble--action {
      background: var(--accent-soft) !important;
      border-color: var(--border-soft) !important;
      border-left: 3px solid var(--accent) !important;
      color: var(--text-main) !important;
    }
    .sys-panel .sys-chat .fum-bubble {
      background: var(--accent) !important;
      color: #0F172A !important;
      font-weight: 700 !important;
      box-shadow: 0 4px 12px var(--accent-soft) !important;
    }
    .sys-panel .sys-chat .ft-dots {
      background: var(--sector-chat-bubble-bg) !important;
      border-color: var(--border-soft) !important;
    }
    .sys-panel .sys-chat .ft-label {
      color: var(--text-soft) !important;
    }
    .sys-panel .sys-nav-group {
      color: var(--text-muted) !important;
    }
    .sys-panel .sys-nav-item {
      color: var(--text-soft) !important;
      background: transparent;
      border-color: transparent;
    }
    .sys-panel .sys-nav-item i {
      color: var(--text-muted) !important;
    }
    .sys-panel .sys-nav-item:hover {
      background: var(--sidebar-hover) !important;
      color: var(--text-main) !important;
    }
    .sys-panel .sys-nav-item:hover i {
      color: var(--accent-light) !important;
    }
    .sys-panel .sys-nav-item.active {
      background: var(--sidebar-active) !important;
      color: var(--accent-light) !important;
      border-color: var(--sector-nav-border) !important;
      font-weight: 700;
    }
    .sys-panel .sys-nav-item.active i {
      color: var(--accent-light) !important;
    }
    .sys-panel .sug-nav-badge {
      background: var(--accent) !important;
      color: #fff;
    }
    .sys-panel .sys-nav-item.active .sug-nav-badge {
      background: var(--accent-light) !important;
      color: var(--sector-nav-bg) !important;
    }

    /* ─── Theme mode overrides (oscuro/claro/negro) ─── */
    .sys-panel[data-theme-mode="claro"] {
      --bg-main:        #F6F9FC !important; /* Stripe premium light background */
      --bg-panel:       #FFFFFF !important;
      --bg-soft:        #F1F5F9 !important;
      --bg-elevated:    #FFFFFF !important;
      --card-bg:        #FFFFFF !important;
      --sidebar-bg:     #FFFFFF !important; /* Pure white sidebar */
      --sidebar-panel:  #FFFFFF !important;
      --sidebar-hover:  rgba(0,0,0,0.025) !important;
      --sidebar-active: var(--accent-soft) !important;
      --text-main:      #0F172A !important;
      --text-soft:      #334155 !important;
      --text-muted:     #64748B !important;
      --border-soft:    rgba(0,0,0,0.05) !important;
      --border-mid:     rgba(0,0,0,0.08) !important;
      --border-strong:  rgba(0,0,0,0.15) !important;
      --shadow-xs:      0 1px 2px rgba(0,0,0,0.01) !important;
      --shadow-sm:      0 2px 8px rgba(0,0,0,0.02) !important;
      --shadow-md:      0 8px 24px rgba(149,157,165,0.08) !important;
      --shadow-xl:      0 20px 48px rgba(149,157,165,0.12) !important;

      --sector-nav-bg:     #FFFFFF !important;
      --sector-header-bg:  #FFFFFF !important;
      --sector-nav-border: rgba(0,0,0,0.05) !important;
      --sector-content-bg: #F6F9FC !important;
      --sector-card-bg:    #FFFFFF !important;
      --sector-soft-bg:    #F1F5F9 !important;
      --sector-chat-bubble-bg: #FFFFFF !important;
    }
    .sys-panel[data-theme-mode="claro"] .sys-nav-group { color: #94A3B8 !important; }
    .sys-panel[data-theme-mode="claro"] .sys-nav-item { color: #475569 !important; }
    .sys-panel[data-theme-mode="claro"] .sys-nav-item i { color: #94A3B8 !important; }
    .sys-panel[data-theme-mode="claro"] .sys-nav-item:hover { background: rgba(0,0,0,0.03) !important; color: #0F172A !important; }
    .sys-panel[data-theme-mode="claro"] .sys-nav-item:hover i { color: var(--accent) !important; }
    .sys-panel[data-theme-mode="claro"] .sys-nav-item.active { background: var(--accent-soft) !important; color: var(--accent) !important; border-color: rgba(0,0,0,0.04) !important; }
    .sys-panel[data-theme-mode="claro"] .sys-nav-item.active i { color: var(--accent) !important; }
    .sys-panel[data-theme-mode="claro"] .sys-title { color: #0F172A !important; }
    .sys-panel[data-theme-mode="claro"] .sys-title-sub { color: #64748B !important; }
    .sys-panel[data-theme-mode="claro"] .sys-back { background: #FFFFFF !important; border-color: rgba(0,0,0,0.05) !important; color: #475569 !important; box-shadow: 0 1px 3px rgba(0,0,0,0.02), 0 4px 12px rgba(0,0,0,0.02) !important; }

    /* Light mode layout & card elevation overrides */
    .sys-panel[data-theme-mode="claro"] .sys-nav {
      background: var(--sidebar-bg) !important;
      border-right: 1px solid var(--border-soft) !important;
    }
    .sys-panel[data-theme-mode="claro"] .sys-header {
      background: var(--bg-panel) !important;
      border-bottom: 1px solid var(--border-soft) !important;
    }
    .sys-panel[data-theme-mode="claro"] .sys-content {
      background: var(--bg-main) !important;
    }
    .sys-panel[data-theme-mode="claro"] .kpi {
      background: #FFFFFF !important;
      border-color: rgba(0,0,0,0.04) !important;
      box-shadow: 0 4px 12px rgba(149,157,165,0.03), 0 1px 3px rgba(0,0,0,0.01) !important;
    }
    .sys-panel[data-theme-mode="claro"] .sec-card {
      background: #FFFFFF !important;
      border-color: rgba(0,0,0,0.04) !important;
      box-shadow: 0 4px 18px rgba(149,157,165,0.04), 0 1px 3px rgba(0,0,0,0.02) !important;
    }
    .sys-panel[data-theme-mode="claro"] .sec-btn {
      background: #FFFFFF !important;
      border-color: rgba(0,0,0,0.08) !important;
      color: #334155 !important;
      box-shadow: 0 1px 2px rgba(0,0,0,0.02) !important;
    }
    .sys-panel[data-theme-mode="claro"] .sec-btn:hover {
      background: var(--accent-soft) !important;
      color: var(--accent) !important;
      border-color: rgba(255,122,0,0.15) !important;
    }
    .sys-panel[data-theme-mode="claro"] .kpi-icon,
    .sys-panel[data-theme-mode="claro"] .kpi-icon--blue,
    .sys-panel[data-theme-mode="claro"] .kpi-icon--orange,
    .sys-panel[data-theme-mode="claro"] .kpi-icon--purple,
    .sys-panel[data-theme-mode="claro"] .kpi-icon--green {
      background: var(--accent-soft) !important;
      color: var(--accent) !important;
    }
    .sys-panel[data-theme-mode="claro"] .sec-card-meta--filled {
      background: var(--accent-soft) !important;
      color: var(--accent) !important;
    }

    /* Light mode chat overrides */
    .sys-panel[data-theme-mode="claro"] .sys-chat-head {
      background: #FFFFFF !important;
      border-bottom: 1px solid rgba(0,0,0,0.05) !important;
    }
    .sys-panel[data-theme-mode="claro"] .sys-chat-head-title {
      color: #0F172A !important;
    }
    .sys-panel[data-theme-mode="claro"] .sys-chat-head-sub {
      color: #64748B !important;
    }
    .sys-panel[data-theme-mode="claro"] .sys-chat .ffm-bubble {
      background: #FFFFFF !important;
      border-color: rgba(0,0,0,0.05) !important;
      color: #1E293B !important;
      box-shadow: 0 2px 10px rgba(0,0,0,0.01), 0 8px 24px rgba(149,157,165,0.05) !important;
    }
    .sys-panel[data-theme-mode="claro"] .sys-chat .ffm-bubble--important,
    .sys-panel[data-theme-mode="claro"] .sys-chat .ffm-bubble--action {
      background: var(--accent-soft) !important;
      border-color: rgba(255,122,0,0.12) !important;
      border-left: 4px solid var(--accent) !important;
      color: #0F172A !important;
    }
    .sys-panel[data-theme-mode="claro"] .sys-chat .fum-bubble {
      background: var(--accent) !important;
      color: #FFFFFF !important;
      font-weight: 700 !important;
      box-shadow: 0 4px 12px rgba(255,122,0,0.20) !important;
    }
    .sys-panel[data-theme-mode="claro"] .sys-chat .ft-dots {
      background: #FFFFFF !important;
      border-color: rgba(0,0,0,0.05) !important;
    }
    .sys-panel[data-theme-mode="claro"] .sys-chat .ft-label {
      color: #64748B !important;
    }
    .sys-panel[data-theme-mode="claro"] .cb-row {
      background: #FFFFFF !important;
      border-color: rgba(0,0,0,0.06) !important;
      color: #0F172A !important;
      box-shadow: 0 2px 12px rgba(0,0,0,0.02) !important;
    }
    .sys-panel[data-theme-mode="claro"] .cb-row:focus-within {
      border-color: var(--accent) !important;
      box-shadow: 0 0 0 4px var(--accent-soft), 0 2px 12px rgba(0,0,0,0.02) !important;
    }
    .sys-panel[data-theme-mode="claro"] .cb-input {
      color: #0F172A !important;
    }
    .sys-panel[data-theme-mode="claro"] .cb-input::placeholder {
      color: #94A3B8 !important;
    }

    .sys-panel[data-theme-mode="negro"] {
      --bg-main:        #000000 !important;
      --bg-panel:       #0A0A0A !important;
      --bg-soft:        #121212 !important;
      --bg-elevated:    #0A0A0A !important;
      --card-bg:        #0A0A0A !important;
      --sidebar-bg:     #000000 !important;
      --sidebar-panel:  #000000 !important;
      --sidebar-hover:  rgba(255,255,255,0.04) !important;
      --sidebar-active: var(--accent-soft) !important;
      --text-main:      #F8FAFC !important;
      --text-soft:      rgba(248,250,252,0.85) !important;
      --text-muted:     rgba(248,250,252,0.50) !important;
      --border-soft:    rgba(255,255,255,0.05) !important;
      --border-mid:     rgba(255,255,255,0.09) !important;
      --border-strong:  rgba(255,255,255,0.18) !important;

      --sector-nav-bg:     #000000 !important;
      --sector-header-bg:  #0A0A0A !important;
      --sector-nav-border: rgba(255,255,255,0.05) !important;
      --sector-content-bg: #000000 !important;
      --sector-card-bg:    #0A0A0A !important;
      --sector-soft-bg:    #121212 !important;
      --sector-chat-bubble-bg: #0A0A0A !important;
    }

    /* ─── Footer del theme picker en el workspace (.portfolio) ─── */
    .portfolio { display: flex; flex-direction: column; }
    .ws-themes-footer {
      /* Edgar 2026-07-04: padding vertical igual al de .chat-bar (12px arriba,
         20px+safe abajo) para que "Temas del chat" quede a la misma altura que
         "Escribe aquí". Flex column + gap para separar los 2 botones (antes se
         veían pegados como uno). */
      padding: 12px 14px calc(20px + env(safe-area-inset-bottom, 0px));
      border-top: 1px solid var(--border-soft);
      flex-shrink: 0;
      margin-top: auto;
      display: flex;
      flex-direction: column;
      gap: 8px;
    }
    .ws-themes-footer .sys-themes-trigger {
      width: 100%;
      display: flex; align-items: center; gap: 10px;
      padding: 10px 12px;
      border-radius: 10px;
      background: rgba(255,255,255,0.025);
      border: 1px solid var(--border-soft);
      cursor: pointer; font: inherit; color: inherit;
      transition: background 0.15s, border-color 0.15s, transform 0.12s;
    }
    .ws-themes-footer .sys-themes-trigger:hover {
      background: rgba(255,255,255,0.05);
      border-color: rgba(255,255,255,0.14);
    }
    .ws-themes-footer .sys-themes-trigger:active { transform: translateY(1px); }
    [data-theme="light"] .ws-themes-footer .sys-themes-trigger {
      background: rgba(0,0,0,0.025);
    }
    [data-theme="light"] .ws-themes-footer .sys-themes-trigger:hover { background: rgba(0,0,0,0.05); }
    .ws-themes-footer .sys-themes-trigger i { font-size: 15px; color: var(--accent); flex-shrink: 0; }
    .ws-themes-footer .sys-themes-trigger-label {
      flex: 1;
      font-size: 11px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1.4px; color: var(--text-soft);
      text-align: left;
    }
    .ws-themes-footer .sys-themes-trigger-dot {
      width: 18px; height: 18px;
      border-radius: 50% !important; /* Circular dot for a high-end picker */
      background: #64748B;
      box-shadow:
        inset 0 0 0 1px rgba(255,255,255,0.18),
        0 1px 3px rgba(0,0,0,0.25);
      flex-shrink: 0;
      transition: transform 0.15s, background 0.2s;
    }
    .ws-themes-footer .sys-themes-trigger:hover .sys-themes-trigger-dot { transform: scale(1.10); }

    /* ─── Theming del chat del workspace (solo el feed + burbujas) ───
       Paleta calibrada para uso prolongado (Edgar: 'que no canse al usuario,
       hacérselo sentir bien con estilo'). Principios:
       - BG con poca saturación (idealmente <30% HSL) — el ojo no "vibra"
       - Accent legible pero no fluorescente (luminance media-alta)
       - Bubble bg muy oscuro para máximo contraste con texto blanco
       Mantenidos intactos por feedback de Edgar: contenido, realestate,
       ecommerce (los que NO le cansan). */
    .workspace[data-chat-theme="eventos"]     { --ws-chat-feed-bg: #181009; --ws-chat-bubble-bg: #0C0805; --ws-chat-accent: #FF9F33; --ws-chat-accent-light: #FFC987; }
    .workspace[data-chat-theme="contenido"]   { --ws-chat-feed-bg: #2E1212; --ws-chat-bubble-bg: #1F0707; --ws-chat-accent: #FCA5A5; --ws-chat-accent-light: #FECACA; }
    .workspace[data-chat-theme="realestate"]  { --ws-chat-feed-bg: #1A2750; --ws-chat-bubble-bg: #080C20; --ws-chat-accent: #93C5FD; --ws-chat-accent-light: #DBEAFE; }
    .workspace[data-chat-theme="fitness"]     { --ws-chat-feed-bg: #0E2A1A; --ws-chat-bubble-bg: #06140C; --ws-chat-accent: #86E0B5; --ws-chat-accent-light: #B7E8D0; }
    .workspace[data-chat-theme="restaurante"] { --ws-chat-feed-bg: #2D1A10; --ws-chat-bubble-bg: #150A04; --ws-chat-accent: #FDBA74; --ws-chat-accent-light: #FED7AA; }
    .workspace[data-chat-theme="educacion"]   { --ws-chat-feed-bg: #2E2010; --ws-chat-bubble-bg: #1A1206; --ws-chat-accent: #F0CC65; --ws-chat-accent-light: #F7DE92; }
    .workspace[data-chat-theme="ecommerce"]   { --ws-chat-feed-bg: #134353; --ws-chat-bubble-bg: #061720; --ws-chat-accent: #67E8F9; --ws-chat-accent-light: #A5F3FC; }
    .workspace[data-chat-theme="servicios"]   { --ws-chat-feed-bg: #221340; --ws-chat-bubble-bg: #0D041A; --ws-chat-accent: #C9A8F0; --ws-chat-accent-light: #D8C0F0; }
    .workspace[data-chat-theme="saas"]        { --ws-chat-feed-bg: #1A1939; --ws-chat-bubble-bg: #07071A; --ws-chat-accent: #B0BCF2; --ws-chat-accent-light: #C7D2FE; }
    .workspace[data-chat-theme="rosa"]        { --ws-chat-feed-bg: #261020; --ws-chat-bubble-bg: #14060E; --ws-chat-accent: #E8AAC8; --ws-chat-accent-light: #FBCFE8; }

    /* Mismas variables de acento en <body> — para que overlays fuera del
       workspace (la pantalla de carga "Estoy armando tu sistema") sigan
       el color del tema del chat que el usuario eligió. */
    body[data-chat-theme="eventos"]     { --ws-chat-accent: #FF9F33; --ws-chat-accent-light: #FFC987; --ws-chat-feed-bg: #181009; --ws-chat-bubble-bg: #0C0805; }
    body[data-chat-theme="contenido"]   { --ws-chat-accent: #FCA5A5; --ws-chat-accent-light: #FECACA; --ws-chat-feed-bg: #2E1212; --ws-chat-bubble-bg: #1F0707; }
    body[data-chat-theme="realestate"]  { --ws-chat-accent: #93C5FD; --ws-chat-accent-light: #DBEAFE; --ws-chat-feed-bg: #1A2750; --ws-chat-bubble-bg: #080C20; }
    body[data-chat-theme="fitness"]     { --ws-chat-accent: #86E0B5; --ws-chat-accent-light: #B7E8D0; --ws-chat-feed-bg: #0E2A1A; --ws-chat-bubble-bg: #06140C; }
    body[data-chat-theme="restaurante"] { --ws-chat-accent: #FDBA74; --ws-chat-accent-light: #FED7AA; --ws-chat-feed-bg: #2D1A10; --ws-chat-bubble-bg: #150A04; }
    body[data-chat-theme="educacion"]   { --ws-chat-accent: #F0CC65; --ws-chat-accent-light: #F7DE92; --ws-chat-feed-bg: #2E2010; --ws-chat-bubble-bg: #1A1206; }
    body[data-chat-theme="ecommerce"]   { --ws-chat-accent: #67E8F9; --ws-chat-accent-light: #A5F3FC; --ws-chat-feed-bg: #134353; --ws-chat-bubble-bg: #061720; }
    body[data-chat-theme="servicios"]   { --ws-chat-accent: #C9A8F0; --ws-chat-accent-light: #D8C0F0; --ws-chat-feed-bg: #221340; --ws-chat-bubble-bg: #0D041A; }
    body[data-chat-theme="saas"]        { --ws-chat-accent: #B0BCF2; --ws-chat-accent-light: #C7D2FE; --ws-chat-feed-bg: #1A1939; --ws-chat-bubble-bg: #07071A; }
    body[data-chat-theme="rosa"]        { --ws-chat-accent: #E8AAC8; --ws-chat-accent-light: #FBCFE8; --ws-chat-feed-bg: #261020; --ws-chat-bubble-bg: #14060E; }

    /* Aplicar tema solo al feed + burbujas del workspace */
    .workspace[data-chat-theme] > .feed { background: var(--ws-chat-feed-bg) !important; }
    .workspace[data-chat-theme] > .feed .ffm-bubble {
      background: var(--ws-chat-bubble-bg) !important;
      border-color: rgba(255,255,255,0.06) !important;
      color: #F1F5F9 !important;
      box-shadow: 0 0 0 1px rgba(255,255,255,0.04), 0 6px 18px rgba(0,0,0,0.30) !important;
    }
    .workspace[data-chat-theme] > .feed .fum-bubble {
      background: var(--ws-chat-accent) !important;
      color: #0F172A !important; /* Premium dark contrast on pastel accents */
      font-weight: 700 !important;
      box-shadow: 0 6px 18px rgba(0, 0, 0, 0.25) !important;
    }
    .workspace[data-chat-theme] > .feed .ft-dots {
      background: var(--ws-chat-bubble-bg) !important;
      border-color: rgba(255,255,255,0.06) !important;
    }
    .workspace[data-chat-theme] > .feed .ft-label { color: rgba(241,245,249,0.78) !important; }
    .workspace[data-chat-theme] > .feed .ffm-action-btn {
      background: rgba(255,255,255,0.05) !important;
      border-color: var(--ws-chat-accent) !important;
      color: var(--ws-chat-accent-light) !important;
    }
    .workspace[data-chat-theme] > .feed .ffm-action-btn:hover {
      background: var(--ws-chat-accent) !important;
      color: var(--ws-chat-feed-bg) !important;
    }

    /* ─── Tarjetas del Feed Tematizadas (Contexto actual, Pasos, Inputs, etc.) ─── */
    .workspace[data-chat-theme] > .feed .context-card,
    .workspace[data-chat-theme] > .feed .feed-step-card,
    .workspace[data-chat-theme] > .feed .feed-input-card,
    .workspace[data-chat-theme] > .feed .feed-opts-card,
    .workspace[data-chat-theme] > .feed .feed-loc-card,
    .workspace[data-chat-theme] > .feed .feed-locked {
      background: var(--ws-chat-bubble-bg) !important;
      border-color: var(--ws-border) !important;
      box-shadow: 0 4px 24px rgba(0, 0, 0, 0.25) !important;
    }
    
    /* Indicador superior del step card */
    .workspace[data-chat-theme] > .feed .feed-step-card::before {
      background: linear-gradient(90deg, var(--ws-chat-accent), var(--ws-chat-accent-light)) !important;
    }

    /* Cabeceras de tarjetas */
    .workspace[data-chat-theme] > .feed .context-card-head,
    .workspace[data-chat-theme] > .feed .fsc-head,
    .workspace[data-chat-theme] > .feed .fic-head {
      color: var(--ws-chat-accent-light) !important;
    }
    .workspace[data-chat-theme] > .feed .context-card-head i,
    .workspace[data-chat-theme] > .feed .fsc-complete-icon {
      color: var(--ws-chat-accent) !important;
    }

    /* Textos principales */
    .workspace[data-chat-theme] > .feed .context-item-value,
    .workspace[data-chat-theme] > .feed .fsc-title,
    .workspace[data-chat-theme] > .feed .fsc-subtitle,
    .workspace[data-chat-theme] > .feed .fic-title,
    .workspace[data-chat-theme] > .feed .feed-opt-title {
      color: var(--ws-text-main) !important;
    }

    /* Textos secundarios / sutiles */
    .workspace[data-chat-theme] > .feed .context-item-label,
    .workspace[data-chat-theme] > .feed .ctx-hint,
    .workspace[data-chat-theme] > .feed .ctx-line-hint,
    .workspace[data-chat-theme] > .feed .feed-opt-sub {
      color: var(--ws-text-muted) !important;
    }

    /* Separadores y bordes de ítems internos */
    .workspace[data-chat-theme] > .feed .context-item,
    .workspace[data-chat-theme] > .feed .context-item + .context-item,
    .workspace[data-chat-theme] > .feed .fsc-divider,
    .workspace[data-chat-theme] > .feed .fic-divider {
      border-color: var(--ws-border) !important;
    }

    /* Opciones (.feed-opt) y botones interactivos en chat tematizado */
    .workspace[data-chat-theme] > .feed .feed-opt {
      background: rgba(255, 255, 255, 0.03) !important;
      border-color: rgba(255, 255, 255, 0.08) !important;
      color: #F1F5F9 !important;
      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important;
      transition: all 0.2s ease-in-out !important;
    }
    .workspace[data-chat-theme] > .feed .feed-opt:hover:not(:disabled) {
      background: rgba(255, 255, 255, 0.08) !important;
      border-color: var(--ws-chat-accent) !important;
      color: #FFF !important;
      transform: translateX(4px) !important;
    }
    .workspace[data-chat-theme] > .feed .feed-opt--selected {
      background: rgba(255, 255, 255, 0.09) !important;
      border-color: var(--ws-chat-accent) !important;
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
    }
    .workspace[data-chat-theme] > .feed .feed-opt-icon {
      background: rgba(255, 255, 255, 0.04) !important;
      color: var(--ws-chat-accent) !important;
    }
    .workspace[data-chat-theme] > .feed .feed-opt--selected .feed-opt-icon {
      background: var(--ws-chat-accent) !important;
      color: var(--ws-chat-feed-bg) !important;
    }

    /* Líneas editables de contexto interactivo (hover) */
    .workspace[data-chat-theme] > .feed .context-item.ctx-line:hover {
      background: var(--ws-surface-hover) !important;
      border-color: var(--ws-border) !important;
    }

    /* Botones de acción y inputs internos */
    .workspace[data-chat-theme] > .feed .context-edit,
    .workspace[data-chat-theme] > .feed .fsc-complete-btn {
      border-color: var(--ws-border) !important;
      background: var(--ws-surface) !important;
      color: var(--ws-text-soft) !important;
    }
    .workspace[data-chat-theme] > .feed .context-edit:hover,
    .workspace[data-chat-theme] > .feed .fsc-complete-btn:hover {
      background: var(--ws-chat-accent) !important;
      color: #0F172A !important;
      border-color: var(--ws-chat-accent) !important;
    }

    /* Tarjetas de pasos bloqueadas (locked) */
    .workspace[data-chat-theme] > .feed .feed-locked .fl-icon {
      color: var(--ws-chat-accent-light) !important;
    }
    .workspace[data-chat-theme] > .feed .feed-locked p {
      color: var(--ws-text-muted) !important;
    }
    /* Scrollbar del feed con accent */
    .workspace[data-chat-theme] > .feed::-webkit-scrollbar { width: 8px; }
    .workspace[data-chat-theme] > .feed::-webkit-scrollbar-track { background: transparent; }
    .workspace[data-chat-theme] > .feed::-webkit-scrollbar-thumb {
      background: var(--ws-chat-accent); border-radius: 999px;
      border: 2px solid transparent; background-clip: padding-box;
      opacity: 0.45;
    }
    .workspace[data-chat-theme] > .feed::-webkit-scrollbar-thumb:hover { opacity: 0.85; }

    /* ─── Theme también tiñe sidebar (.portfolio) y topbar (.header) ─── */
    body[data-chat-theme="eventos"]     { --ws-chat-feed-bg: #1F1005; --ws-chat-bubble-bg: #0F0904; --ws-chat-accent: #FF8A00; --ws-chat-accent-light: #FFB85C; }
    body[data-chat-theme="contenido"]   { --ws-chat-feed-bg: #2E1212; --ws-chat-bubble-bg: #1F0707; --ws-chat-accent: #FCA5A5; --ws-chat-accent-light: #FECACA; }
    body[data-chat-theme="realestate"]  { --ws-chat-feed-bg: #1A2750; --ws-chat-bubble-bg: #080C20; --ws-chat-accent: #93C5FD; --ws-chat-accent-light: #DBEAFE; }
    body[data-chat-theme="fitness"]     { --ws-chat-feed-bg: #0F3D22; --ws-chat-bubble-bg: #061A0E; --ws-chat-accent: #6EE7B7; --ws-chat-accent-light: #A7F3D0; }
    body[data-chat-theme="restaurante"] { --ws-chat-feed-bg: #4A2412; --ws-chat-bubble-bg: #1D0E05; --ws-chat-accent: #FDBA74; --ws-chat-accent-light: #FED7AA; }
    body[data-chat-theme="educacion"]   { --ws-chat-feed-bg: #4D3514; --ws-chat-bubble-bg: #1F1607; --ws-chat-accent: #FCD34D; --ws-chat-accent-light: #FDE68A; }
    body[data-chat-theme="ecommerce"]   { --ws-chat-feed-bg: #134353; --ws-chat-bubble-bg: #061720; --ws-chat-accent: #67E8F9; --ws-chat-accent-light: #A5F3FC; }
    body[data-chat-theme="servicios"]   { --ws-chat-feed-bg: #331957; --ws-chat-bubble-bg: #110620; --ws-chat-accent: #D8B4FE; --ws-chat-accent-light: #E9D5FF; }
    body[data-chat-theme="saas"]        { --ws-chat-feed-bg: #25234D; --ws-chat-bubble-bg: #08081E; --ws-chat-accent: #A5B4FC; --ws-chat-accent-light: #C7D2FE; }

    /* ═════════════════════════════════════════════════════════════
       VARIABLES DERIVADAS para cada tema (calculadas, no hardcoded)
       ═════════════════════════════════════════════════════════════ */
    body[data-chat-theme] {
      /* Colores compartidos por todos los temas */
      --ws-border:        rgba(255,255,255,0.07);
      --ws-border-strong: rgba(255,255,255,0.14);
      --ws-text-main:     #F1F5F9;
      --ws-text-soft:     rgba(241,245,249,0.72);
      --ws-text-muted:    rgba(241,245,249,0.42);
      --ws-surface:       rgba(255,255,255,0.03);
      --ws-surface-hover: rgba(255,255,255,0.06);
    }

    /* ═════════════════════════════════════════════════════════════
       SIDEBAR / PORTFOLIO — se acopla al tema de color del chat
       ═════════════════════════════════════════════════════════════ */
    body[data-chat-theme] .portfolio {
      background: var(--ws-chat-bubble-bg) !important;
      border-right: 1px solid var(--ws-border) !important;
      color: var(--ws-text-main) !important;
    }
    body[data-chat-theme] .portfolio .pf-section-head,
    body[data-chat-theme] .portfolio .pf-title-row,
    body[data-chat-theme] .portfolio .pf-section-divider { border-color: var(--ws-border) !important; }
    body[data-chat-theme] .portfolio .pf-title,
    body[data-chat-theme] .portfolio .pf-section-head { color: var(--ws-chat-accent-light) !important; }
    body[data-chat-theme] .portfolio .pf-count { background: var(--ws-surface) !important; color: var(--ws-text-soft) !important; }
    body[data-chat-theme] .portfolio .pf-empty { color: var(--ws-text-muted) !important; }
    body[data-chat-theme] .portfolio .pf-item { background: transparent !important; border-color: transparent !important; color: var(--ws-text-main) !important; }
    body[data-chat-theme] .portfolio .pf-item:hover { background: var(--ws-surface) !important; }
    /* Edgar 2026-07-03: unificar el active state con el modo normal. */
    body[data-chat-theme] .portfolio .pf-item--active {
      background: color-mix(in srgb, var(--ws-chat-accent, var(--accent, #FF8A00)) 10%, transparent) !important;
      border-color: transparent !important;
      box-shadow: inset 3px 0 0 var(--ws-chat-accent, var(--accent, #FF8A00)) !important;
    }
    body[data-chat-theme] .portfolio .pfi-title { color: var(--ws-text-main) !important; }
    body[data-chat-theme] .portfolio .pfi-meta  { color: var(--ws-text-soft) !important; }
    body[data-chat-theme] .portfolio .pfi-emoji { background: var(--ws-chat-bubble-bg) !important; }

    /* ═════════════════════════════════════════════════════════════
       HEADER / TOPBAR — se acopla al tema de color del chat
       ═════════════════════════════════════════════════════════════ */
    body[data-chat-theme] .header {
      background: var(--ws-chat-bubble-bg) !important;
      border-bottom: 1px solid var(--ws-border) !important;
      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15) !important;
    }
    body[data-chat-theme] .header-logo-text span:first-child {
      color: var(--ws-text-main) !important;
    }
    body[data-chat-theme] .header-nav a {
      color: var(--ws-text-soft) !important;
    }
    body[data-chat-theme] .header-nav a:hover {
      color: var(--ws-chat-accent-light) !important;
      background: var(--ws-surface-hover) !important;
    }
    body[data-chat-theme] .header-nav a.active {
      color: var(--ws-chat-accent-light) !important;
      background: var(--ws-surface-hover) !important;
      border-color: rgba(255, 255, 255, 0.05) !important;
      box-shadow: inset 0 -2px 0 var(--ws-chat-accent) !important;
    }
    body[data-chat-theme] .header-avatar {
      box-shadow: 0 0 0 2px var(--ws-border) !important;
    }
    body[data-chat-theme] .header-avatar:hover {
      box-shadow: 0 0 0 2px var(--ws-chat-accent) !important;
    }
    body[data-chat-theme] .header-hamburger:hover {
      background: var(--ws-surface-hover) !important;
      color: var(--ws-chat-accent) !important;
      border-color: var(--ws-chat-accent) !important;
    }
    body[data-chat-theme] .hstat {
      background: var(--ws-surface) !important;
      border-color: var(--ws-border) !important;
      color: var(--ws-text-soft) !important;
    }
    body[data-chat-theme] .hstat:hover {
      border-color: var(--ws-border-strong) !important;
      background: var(--ws-surface-hover) !important;
    }
    body[data-chat-theme] .theme-toggle {
      background: var(--ws-surface) !important;
      border-color: var(--ws-border) !important;
      color: var(--ws-text-soft) !important;
    }
    body[data-chat-theme] .theme-toggle:hover {
      background: var(--ws-surface-hover) !important;
      color: var(--ws-chat-accent) !important;
    }

    /* ═════════════════════════════════════════════════════════════
       WORKSPACE (zona central donde vive Pio + chat)
       ═════════════════════════════════════════════════════════════ */
    body[data-chat-theme] .workspace { background: var(--ws-chat-feed-bg) !important; }

    /* Pio bar (la barra superior del workspace con avatar y nombre) */
    body[data-chat-theme] .pio-bar {
      background: var(--ws-chat-bubble-bg) !important;
      border-bottom: 1px solid var(--ws-border) !important;
      color: var(--ws-text-main) !important;
    }
    body[data-chat-theme] .pio-bar .fb-name { color: var(--ws-text-main) !important; }
    body[data-chat-theme] .pio-bar .fb-role { color: var(--ws-text-soft) !important; }

    /* Input bar de abajo (escribe aquí…) */
    body[data-chat-theme] .chat-bar,
    body[data-chat-theme] .composer,
    body[data-chat-theme] .cb-wrap { 
      background: transparent !important; /* Seamless transparent overlay so only row floats */
      border-top-color: transparent !important; 
      box-shadow: none !important;
    }
    body[data-chat-theme] .cb-row {
      background: var(--ws-chat-bubble-bg) !important;
      border-color: var(--ws-border) !important;
      box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4) !important;
      backdrop-filter: blur(12px);
    }
    body[data-chat-theme] .cb-row:focus-within {
      border-color: var(--ws-chat-accent) !important;
      box-shadow: 0 0 0 4px var(--accent-glow), 0 8px 30px rgba(0, 0, 0, 0.45) !important;
    }
    body[data-chat-theme] .cb-input { color: var(--ws-text-main) !important; }
    body[data-chat-theme] .cb-input::placeholder { color: var(--ws-text-muted) !important; }
    body[data-chat-theme] .cb-send { background: var(--ws-chat-accent) !important; color: #0F172A !important; }
    body[data-chat-theme] .cb-send:hover:not(:disabled) { filter: brightness(1.1); }
    body[data-chat-theme] .chat-hint { color: var(--ws-text-muted) !important; }

    /* ═════════════════════════════════════════════════════════════
       EXEC PANEL (panel derecho "RESUMEN") — se acopla al tema de color,
       igual que el sidebar y el navbar: mismo fondo oscuro del tema.
       ═════════════════════════════════════════════════════════════ */
    body[data-chat-theme] .exec-panel {
      background: var(--ws-chat-bubble-bg) !important;
      border-left: 1px solid var(--ws-border) !important;
      color: var(--ws-text-main) !important;
      position: relative;
      transition: all 0.3s ease;
    }
    body[data-chat-theme] .ep-header { 
      border-bottom: 1px solid var(--ws-border) !important; 
      background: rgba(255, 255, 255, 0.01) !important;
      backdrop-filter: blur(12px) !important;
      -webkit-backdrop-filter: blur(12px) !important;
      padding: 20px 24px !important;
    }
    body[data-chat-theme] .ep-title {
      color: var(--ws-chat-accent-light) !important;
      font-size: 11px !important;
      letter-spacing: 1.5px !important;
      font-weight: 900 !important;
      text-shadow: 0 0 10px rgba(255, 138, 0, 0.1);
    }
    body[data-chat-theme] .ep-body {
      padding: 24px !important;
      display: flex;
      flex-direction: column;
      gap: 20px !important;
    }
    body[data-chat-theme] .ep-subtitle {
      color: var(--ws-text-soft) !important;
      font-size: 12px !important;
      line-height: 1.5 !important;
    }
    body[data-chat-theme] .ep-empty {
      padding: 64px 24px !important;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 16px !important;
      color: var(--ws-text-muted) !important;
      text-align: center;
    }
    body[data-chat-theme] .ep-empty i {
      font-size: 42px !important;
      color: var(--ws-chat-accent) !important;
      background: rgba(255, 255, 255, 0.02) !important;
      border: 1px solid var(--ws-border) !important;
      width: 76px;
      height: 76px;
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
      box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 15px rgba(0, 0, 0, 0.15) !important;
      margin-bottom: 8px;
      opacity: 0.8;
      animation: empty-pulse 3.5s infinite ease-in-out;
    }
    @keyframes empty-pulse {
      0%, 100% { transform: translateY(0) scale(1); opacity: 0.6; }
      50% { transform: translateY(-4px) scale(1.04); opacity: 0.95; box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.2), 0 8px 25px rgba(255, 138, 0, 0.1) !important; }
    }
    body[data-chat-theme] .ep-empty p {
      font-size: 14px !important;
      line-height: 1.6 !important;
      max-width: 220px;
      font-weight: 500;
    }
    /* ─── Modo OSCURO (sin tema de color): misma tipografía y elevación
       premium del panel Resumen que con un tema de color activo. Solo
       cambia el matiz — usa el naranja de marca en vez de --ws-chat-accent. */
    [data-theme="dark"] body:not([data-chat-theme]) .ep-header,
    [data-theme="dark"] body:not([data-chat-theme]) .pf-header {
      border-bottom: 1px solid rgba(255,255,255,0.06) !important;
      background: rgba(255,255,255,0.01) !important;
      backdrop-filter: blur(12px) !important;
      -webkit-backdrop-filter: blur(12px) !important;
      padding: 20px 24px !important;
    }
    [data-theme="dark"] body:not([data-chat-theme]) .ep-title,
    [data-theme="dark"] body:not([data-chat-theme]) .pf-header-title {
      color: var(--accent-light) !important;
      font-size: 11px !important;
      letter-spacing: 1.5px !important;
      font-weight: 900 !important;
      text-shadow: 0 0 10px rgba(255,138,0,0.10);
    }
    [data-theme="dark"] body:not([data-chat-theme]) .ep-body {
      padding: 24px !important;
      display: flex; flex-direction: column;
      gap: 20px !important;
    }
    [data-theme="dark"] body:not([data-chat-theme]) .ep-subtitle {
      color: rgba(241,245,249,0.72) !important;
      font-size: 12px !important;
      line-height: 1.5 !important;
    }
    [data-theme="dark"] body:not([data-chat-theme]) .ep-empty {
      padding: 64px 24px !important;
      display: flex; flex-direction: column;
      align-items: center; justify-content: center;
      gap: 16px !important;
      color: rgba(241,245,249,0.42) !important;
    }
    [data-theme="dark"] body:not([data-chat-theme]) .ep-empty i {
      font-size: 42px !important;
      color: var(--accent) !important;
      background: rgba(255,255,255,0.02) !important;
      border: 1px solid rgba(255,255,255,0.07) !important;
      width: 76px; height: 76px;
      border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      box-shadow: inset 0 2px 8px rgba(0,0,0,0.20), 0 4px 15px rgba(0,0,0,0.15) !important;
      margin-bottom: 8px;
      opacity: 0.85;
      animation: empty-pulse 3.5s infinite ease-in-out;
    }
    [data-theme="dark"] body:not([data-chat-theme]) .ep-empty p {
      font-size: 14px !important;
      line-height: 1.6 !important;
      max-width: 220px;
      font-weight: 500;
      text-align: center;
    }
    /* ─── Botón "Guardar consejo" en cada burbuja de Pio ───
       Vive dentro de .ffm-bubble (que tiene position relative cuando se
       agrega aquí). Sutil al hover; marcado al guardar. */
    .ffm-bubble { position: relative; }
    .ffm-save-btn {
      position: absolute; top: 7px; right: 7px;
      width: 26px; height: 26px;
      display: flex; align-items: center; justify-content: center;
      background: rgba(255,255,255,0.04);
      border: 1px solid rgba(255,255,255,0.08);
      color: rgba(241,245,249,0.50);
      border-radius: var(--r-xs);
      cursor: pointer;
      font-size: 13px;
      opacity: 0;
      transition: opacity 0.15s, color 0.15s, background 0.15s, border-color 0.15s;
    }
    .feed-pio-msg:hover .ffm-save-btn,
    .ffm-save-btn:focus,
    .ffm-save-btn.is-saved { opacity: 1; }
    .ffm-save-btn:hover {
      color: var(--accent-light);
      background: rgba(255,138,0,0.10);
      border-color: var(--accent);
    }
    .ffm-save-btn.is-saved {
      color: var(--accent);
      border-color: var(--accent);
      background: rgba(255,138,0,0.14);
    }
    .ffm-save-btn.is-saved i { animation: ffm-save-pop 0.4s cubic-bezier(0.34,1.56,0.64,1); }
    /* Bubbles de onboarding nunca muestran el botón guardar — son preguntas
       del slot-filling para armar el negocio, no consejos. Defense in depth:
       aun si el JS no lo skip-ea, el CSS lo oculta. */
    .ffm-bubble--onboarding .ffm-save-btn { display: none !important; }
    @keyframes ffm-save-pop {
      0%   { transform: scale(0.6); }
      60%  { transform: scale(1.25); }
      100% { transform: scale(1); }
    }

    /* ─── "Consejos guardados" en el panel Resumen ─── */
    .ep-notes {
      background: rgba(255,255,255,0.02);
      border: 1px solid rgba(255,255,255,0.07);
      border-radius: 12px;
      padding: 12px 14px;
      margin-top: 14px;
    }
    .ep-notes-head {
      display: flex; align-items: center; gap: 9px;
      cursor: pointer;
      user-select: none;
      padding: 2px 0;
    }
    .ep-notes-head i.ph-bookmark-simple { color: var(--accent); font-size: 14px; }
    .ep-notes-title {
      flex: 1;
      font-size: 12px; font-weight: 800;
      text-transform: uppercase;
      letter-spacing: 1.1px;
      color: var(--text-main);
    }
    .ep-notes-count {
      background: var(--accent-soft); color: var(--accent);
      padding: 2px 9px; border-radius: 999px;
      font-size: 11px; font-weight: 800;
      min-width: 22px; text-align: center;
    }
    .ep-notes-caret { color: var(--text-muted); font-size: 12px; transition: transform 0.2s; }
    .ep-notes[data-collapsed="true"] .ep-notes-caret { transform: rotate(-90deg); }
    .ep-notes[data-collapsed="true"] .ep-notes-list { display: none; }
    .ep-notes-list {
      margin-top: 12px;
      display: flex; flex-direction: column; gap: 8px;
      max-height: 280px;          /* ~4 notas visibles antes de scroll */
      overflow-y: auto;
      padding-right: 6px;          /* aire para que la scrollbar no tape la X */
    }
    .ep-notes-list::-webkit-scrollbar { width: 5px; }
    .ep-notes-list::-webkit-scrollbar-track { background: transparent; }
    .ep-notes-list::-webkit-scrollbar-thumb {
      background: rgba(255,255,255,0.10);
      border-radius: var(--r-xs);
    }
    .ep-notes-list::-webkit-scrollbar-thumb:hover { background: rgba(255,138,0,0.40); }
    /* Firefox */
    .ep-notes-list { scrollbar-width: thin; scrollbar-color: rgba(255,255,255,0.10) transparent; }
    .ep-note {
      background: rgba(255,255,255,0.03);
      border-left: 3px solid var(--accent);
      border-radius: 6px;
      padding: 10px 36px 10px 12px;
      position: relative;
      font-size: 13px; line-height: 1.5;
      color: var(--text-main);
    }
    .ep-note-text { white-space: pre-wrap; }
    .ep-note-meta {
      font-size: 10px;
      color: var(--text-muted);
      margin-top: 5px;
      text-transform: uppercase;
      letter-spacing: 0.5px;
    }
    .ep-note-del {
      position: absolute; top: 6px; right: 6px;
      width: 24px; height: 24px;
      display: flex; align-items: center; justify-content: center;
      background: transparent; border: none;
      color: var(--text-muted);
      cursor: pointer;
      border-radius: 6px;
      font-size: 13px;
      z-index: 2;                          /* siempre encima del texto */
      transition: var(--tr-fast);
    }
    .ep-note-del:hover { color: #EF4444; background: rgba(239,68,68,0.12); }
    .ep-note-del:active { transform: scale(0.9); }
    .ep-note-del > i { pointer-events: none; }  /* clicks pasan al button, no al icono */

    body[data-chat-theme] .ep-meta {
      color: var(--ws-text-soft) !important;
      border-top-color: var(--ws-border) !important;
    }
    body[data-chat-theme] .ep-step,
    body[data-chat-theme] .ep-card { 
      background: rgba(255, 255, 255, 0.02) !important; 
      border: 1px solid var(--ws-border) !important; 
      color: var(--ws-text-main) !important; 
      border-radius: 12px !important;
      padding: 14px 16px !important;
      transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) !important;
      position: relative;
      overflow: hidden;
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1) !important;
    }
    body[data-chat-theme] .ep-step:hover:not(.ep-step--locked),
    body[data-chat-theme] .ep-card:hover { 
      background: rgba(255, 255, 255, 0.05) !important; 
      border-color: var(--ws-chat-accent-light) !important;
      transform: translateY(-2px) !important;
      box-shadow: 0 10px 28px rgba(0, 0, 0, 0.25), 0 0 15px rgba(255, 138, 0, 0.05) !important;
    }
    body[data-chat-theme] .ep-step--active,
    body[data-chat-theme] .ep-step--current {
      background: rgba(255, 255, 255, 0.03) !important;
      border-color: var(--ws-chat-accent) !important;
      color: var(--ws-text-main) !important;
      font-weight: 600 !important;
      box-shadow: 
        0 8px 24px rgba(0, 0, 0, 0.2), 
        inset 4px 0 0 0 var(--ws-chat-accent) !important; /* Gorgeous glowing left accent border */
      padding-left: 20px !important; /* Shift slightly for premium asymmetry */
    }
    body[data-chat-theme] .ep-step-num { 
      background: var(--ws-chat-accent) !important; 
      color: var(--ws-chat-feed-bg) !important; 
      font-weight: 800 !important;
    }
    body[data-chat-theme] .ep-done-icon { 
      color: var(--ws-chat-accent) !important; 
      filter: drop-shadow(0 0 4px var(--ws-chat-accent));
    }
    
    /* Adaptaciones premium de componentes internos del resumen */
    body[data-chat-theme] .ep-emoji {
      background: rgba(255, 255, 255, 0.03) !important;
      color: var(--ws-chat-accent) !important;
      border: 1px solid var(--ws-border-strong) !important;
      box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25), 0 0 15px rgba(255, 138, 0, 0.05) !important;
      border-radius: 12px !important;
      transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), box-shadow 0.3s ease;
    }
    body[data-chat-theme] .ep-idea-hero:hover .ep-emoji {
      transform: scale(1.08) rotate(4deg);
      box-shadow: 0 12px 28px rgba(0, 0, 0, 0.35), 0 0 25px rgba(255, 138, 0, 0.15) !important;
    }
    body[data-chat-theme] .ep-bar {
      background: rgba(255, 255, 255, 0.02) !important;
      border: 1px solid var(--ws-border) !important;
      height: 10px !important;
      border-radius: 6px !important;
      overflow: hidden;
      position: relative;
    }
    body[data-chat-theme] .ep-bar-fill {
      background: linear-gradient(90deg, var(--ws-chat-accent), var(--ws-chat-accent-light)) !important;
      box-shadow: 0 0 12px var(--ws-chat-accent) !important;
      border-radius: 6px !important;
      position: relative;
      overflow: hidden;
    }
    body[data-chat-theme] .ep-bar-fill::after {
      content: '';
      position: absolute;
      top: 0; left: 0; right: 0; bottom: 0;
      background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);
      transform: translateX(-100%);
      animation: bar-shine 3s infinite ease-in-out;
    }
    @keyframes bar-shine {
      0% { transform: translateX(-100%); }
      50% { transform: translateX(100%); }
      100% { transform: translateX(100%); }
    }
    body[data-chat-theme] .ep-checklist {
      border-left: 1px dashed rgba(255, 255, 255, 0.15) !important;
      margin-left: 8px !important;
      padding-left: 20px !important;
      gap: 10px !important;
    }
    body[data-chat-theme] .ep-check-item {
      color: var(--ws-text-soft) !important;
      font-size: 13px !important;
      display: flex;
      align-items: center;
      gap: 10px !important;
      transition: color 0.2s ease;
    }
    body[data-chat-theme] .ep-check-item:hover {
      color: var(--ws-text-main) !important;
    }
    body[data-chat-theme] .ep-check-box {
      border-color: rgba(255, 255, 255, 0.3) !important;
      background: rgba(0, 0, 0, 0.2) !important;
      border-radius: 6px !important; /* Rounded checkboxes look modern */
      width: 16px !important;
      height: 16px !important;
      display: flex;
      align-items: center;
      justify-content: center;
      transition: all 0.2s ease !important;
      position: relative;
    }
    body[data-chat-theme] .ep-check-box::after {
      content: '';
      width: 6px;
      height: 6px;
      border-radius: 50%;
      background: var(--ws-chat-accent);
      opacity: 0.7;
      box-shadow: 0 0 8px var(--ws-chat-accent);
      transition: transform 0.2s ease;
    }
    body[data-chat-theme] .ep-check-item:hover .ep-check-box {
      border-color: var(--ws-chat-accent) !important;
      box-shadow: 0 0 8px rgba(255, 138, 0, 0.2) !important;
    }
    body[data-chat-theme] .ep-check-item:hover .ep-check-box::after {
      transform: scale(1.3);
      opacity: 1;
    }
    body[data-chat-theme] .ep-step--done {
      background: rgba(16, 185, 129, 0.03) !important;
      border-color: rgba(16, 185, 129, 0.25) !important;
      color: #D1FAE5 !important;
      box-shadow: 0 4px 12px rgba(16, 185, 129, 0.05) !important;
    }
    body[data-chat-theme] .ep-step--done i {
      color: #34D399 !important; /* Solid emerald green check */
      filter: drop-shadow(0 0 6px rgba(52, 211, 153, 0.4));
    }
    body[data-chat-theme] .ep-step--locked { 
      opacity: 0.45 !important;
      background: rgba(0, 0, 0, 0.15) !important;
      border-color: rgba(255, 255, 255, 0.03) !important;
      cursor: not-allowed !important;
    }
    body[data-chat-theme] .ep-current {
      background: linear-gradient(135deg, rgba(16, 185, 129, 0.08), rgba(5, 150, 105, 0.03)) !important;
      border: 1px solid rgba(16, 185, 129, 0.2) !important;
      border-radius: 14px !important;
      padding: 16px !important;
      box-shadow: 0 8px 32px rgba(16, 185, 129, 0.08) !important;
      animation: banner-glow-pulse 3s infinite alternate;
    }
    @keyframes banner-glow-pulse {
      0% { box-shadow: 0 8px 32px rgba(16, 185, 129, 0.08); }
      100% { box-shadow: 0 8px 32px rgba(16, 185, 129, 0.16), 0 0 15px rgba(16, 185, 129, 0.1); }
    }
    body[data-chat-theme] .ep-current-label {
      color: #34D399 !important;
      font-size: 11px !important;
      font-weight: 800 !important;
      letter-spacing: 1.2px !important;
      text-transform: uppercase !important;
      text-shadow: 0 0 8px rgba(52, 211, 153, 0.3);
    }

    /* ═════════════════════════════════════════════════════════════
       SCROLLBARS dentro de áreas temizadas
       ═════════════════════════════════════════════════════════════ */
    body[data-chat-theme] .portfolio::-webkit-scrollbar,
    body[data-chat-theme] .exec-panel::-webkit-scrollbar { width: 8px; }
    body[data-chat-theme] .portfolio::-webkit-scrollbar-track,
    body[data-chat-theme] .exec-panel::-webkit-scrollbar-track { background: transparent; }
    body[data-chat-theme] .portfolio::-webkit-scrollbar-thumb,
    body[data-chat-theme] .exec-panel::-webkit-scrollbar-thumb {
      background: var(--ws-border-strong); border-radius: 999px;
    }
    body[data-chat-theme] .portfolio::-webkit-scrollbar-thumb:hover,
    body[data-chat-theme] .exec-panel::-webkit-scrollbar-thumb:hover { background: var(--ws-chat-accent); }

    /* ═════════════════════════════════════════════════════════════
       Botón "Temas del chat" (en el footer del sidebar) — siempre visible
       ═════════════════════════════════════════════════════════════ */
    body[data-chat-theme] .ws-themes-footer {
      /* Sin fondo propio: el footer es solo un contenedor con divisor.
         Así el botón "Temas del chat" no queda como caja-dentro-de-caja. */
      background: transparent !important;
      border-top: 1px solid var(--ws-border) !important;
    }
    body[data-chat-theme] .ws-themes-footer .sys-themes-trigger {
      background: var(--ws-surface) !important;
      border-color: var(--ws-border) !important;
      color: var(--ws-text-main) !important;
    }
    body[data-chat-theme] .ws-themes-footer .sys-themes-trigger:hover {
      background: var(--ws-surface-hover) !important;
      border-color: var(--ws-chat-accent) !important;
    }

    /* Ajusta los botones grandes (Nueva idea, Subir negocio) para que destaquen */
    body[data-chat-theme] .portfolio .pf-btn-primary,
    body[data-chat-theme] .portfolio .pf-new-btn {
      box-shadow: 0 8px 20px rgba(0,0,0,0.25) !important;
    }

    /* ═════════════════════════════════════════════════════════════
       POLISH PRO — separadores sutiles entre zonas (estilo Linear/Stripe)
       ═════════════════════════════════════════════════════════════ */
    /* El sidebar y el exec-panel tienen un borde más definido contra el chat */
    body[data-chat-theme] .portfolio { box-shadow: inset -1px 0 0 var(--ws-border) !important; }
    body[data-chat-theme] .exec-panel { box-shadow: inset 1px 0 0 var(--ws-border) !important; }

    /* La pio-bar y el área del input tienen una "elevación" sutil sobre el feed */
    body[data-chat-theme] .pio-bar  { box-shadow: 0 1px 0 var(--ws-border) !important; }
    body[data-chat-theme] .chat-bar,
    body[data-chat-theme] .cb-wrap,
    body[data-chat-theme] .composer { box-shadow: 0 -1px 0 var(--ws-border) !important; }

    /* Selección de texto usa accent del tema (detalle premium que pocos hacen) */
    body[data-chat-theme] .workspace ::selection,
    body[data-chat-theme] .portfolio ::selection,
    body[data-chat-theme] .exec-panel ::selection {
      background: var(--ws-chat-accent) !important;
      color: var(--ws-chat-bubble-bg) !important;
    }

    /* Cursor de texto / inputs usa accent */
    body[data-chat-theme] input:focus,
    body[data-chat-theme] textarea:focus { caret-color: var(--ws-chat-accent) !important; }

    /* ─── Theme picker footer (al pie del sidebar del sys-panel) ─── */
    .sys-nav { padding-bottom: 6px; }
    /* El botón de temas del system panel ahora reutiliza .ws-themes-footer
       (el mismo del chat) — un solo estilo, sin inconsistencias. Los estilos
       propios de .sys-themes-footer se eliminaron para que ambos botones
       sean idénticos lado a lado. */

    /* ─── Popover de temas (aparece arriba del picker) ─── */
    /* ═════════════════════════════════════════════════════════════
       THEME PICKER POPOVER — diseño pro tipo Linear/Notion
       ═════════════════════════════════════════════════════════════ */
    .sys-themes-popover {
      position: fixed;
      z-index: 9999;
      width: 200px;
      background: var(--bg-panel) !important;
      border: 1px solid var(--border-soft) !important;
      border-radius: var(--r-md);
      padding: 11px;
      box-shadow: var(--shadow-xl) !important;
      display: none;
      transform-origin: bottom center;
    }
    /* Vidrio esmerilado: translúcido + blur fuerte, con un filo superior que
       atrapa la luz (inset highlight) para que flote sobre el fondo. */
    @supports (backdrop-filter: blur(10px)) {
      .sys-themes-popover {
        background: rgba(255, 255, 255, 0.72) !important;
        backdrop-filter: blur(26px) saturate(1.8);
        -webkit-backdrop-filter: blur(26px) saturate(1.8);
        border: 1px solid rgba(0, 0, 0, 0.07) !important;
        box-shadow:
          0 18px 44px -14px rgba(0,0,0,0.30),
          0 5px 14px -8px rgba(0,0,0,0.22),
          inset 0 1px 0 rgba(255,255,255,0.55) !important;
      }
      [data-theme="dark"] .sys-themes-popover {
        background: rgba(17, 24, 39, 0.85) !important;
        border: 1px solid rgba(255, 255, 255, 0.10) !important;
        box-shadow:
          0 20px 48px -16px rgba(0,0,0,0.78),
          0 6px 16px -10px rgba(0,0,0,0.55),
          inset 0 1px 0 rgba(255,255,255,0.07) !important;
      }
    }
    /* Despliegue al abrir y bajada al cerrar — mismo carácter que el menú
       de perfil (.user-dropdown): easing con leve overshoot.
       La animación se dispara recién cuando el JS añade .is-positioned
       (ya calculado su lugar) — así el despliegue completo se ve en
       pantalla y no arranca a medias fuera de vista. */
    .sys-themes-popover.open { display: block; }
    .sys-themes-popover.open.is-positioned {
      animation: sys-themes-pop 0.26s cubic-bezier(0.18, 0.89, 0.32, 1.28) both;
    }
    .sys-themes-popover.closing {
      display: block;
      animation: sys-themes-pop-out 0.15s ease both;
      pointer-events: none;
    }
    @keyframes sys-themes-pop {
      from { opacity: 0; transform: translateY(16px) scale(0.9); }
      to   { opacity: 1; transform: translateY(0)   scale(1);   }
    }
    @keyframes sys-themes-pop-out {
      from { opacity: 1; transform: translateY(0)    scale(1);    }
      to   { opacity: 0; transform: translateY(12px) scale(0.94); }
    }

    /* Título de cada sección — diminuto, espaciado, sutil */
    .sys-themes-section-title {
      font-size: 8px;
      font-weight: 700;
      text-transform: uppercase;
      letter-spacing: 1.2px;
      color: var(--text-muted) !important;
      opacity: 0.8;
      margin: 0 3px 6px;
    }

    /* Con un tema de chat activo, el propio popover de temas se tiñe con
       el color del tema — borde, títulos de sección y el anillo del color
       seleccionado siguen el acento del tema. */
    /* El fondo del popover usa el MISMO color del tema (la base oscura del
       feed del chat), realzado con algo de acento — así combina con el tema,
       no se ve gris. */
    /* Superficie de menú premium: NO un borde de color (eso lo hace ver
       como alerta) sino una superficie tintada con degradado sutil y una
       sombra profunda y difusa. El tema se siente en el color de la
       superficie y en un halo ambiental tenue, no en un contorno. */
    /* Edgar 2026-07-03: unifica el look premium con vidrio esmerilado y
       highlight superior — igual que el modo sin tema. Antes se veia flat
       y transparente. Ahora mantiene el vidrio + tint sutil del accent
       del tema para que combine. */
    body[data-chat-theme] .sys-themes-popover {
      background: color-mix(in srgb, var(--ws-chat-accent) 8%, rgba(17, 24, 39, 0.85)) !important;
      backdrop-filter: blur(26px) saturate(1.8) !important;
      -webkit-backdrop-filter: blur(26px) saturate(1.8) !important;
      border: 1px solid color-mix(in srgb, var(--ws-chat-accent) 22%, rgba(255,255,255,0.10)) !important;
      box-shadow:
        inset 0 1px 0 rgba(255,255,255,0.09),
        0 20px 48px -16px rgba(0,0,0,0.78),
        0 6px 16px -10px rgba(0,0,0,0.55),
        0 22px 52px -28px color-mix(in srgb, var(--ws-chat-accent) 55%, transparent) !important;
    }
    body[data-chat-theme] .sys-themes-section-title {
      color: color-mix(in srgb, var(--ws-chat-accent-light) 58%, #7b8694) !important;
    }
    body[data-chat-theme] .sys-themes-section + .sys-themes-section {
      border-top-color: color-mix(in srgb, var(--ws-chat-accent) 26%, transparent) !important;
    }
    body[data-chat-theme] .sys-themes-section:first-of-type .sys-themes-option {
      background: color-mix(in srgb, var(--ws-chat-accent) 9%, rgba(255,255,255,0.025)) !important;
      border-color: color-mix(in srgb, var(--ws-chat-accent) 22%, transparent) !important;
    }
    body[data-chat-theme] .sys-themes-section:first-of-type .sys-themes-option:hover {
      background: color-mix(in srgb, var(--ws-chat-accent) 16%, rgba(255,255,255,0.04)) !important;
      border-color: color-mix(in srgb, var(--ws-chat-accent) 40%, transparent) !important;
    }
    /* Texto BLANCO en los labels cuando hay tema activo — el bg del popover
       es oscuro tinted del tema, los labels negros eran ilegibles. Edgar:
       'Oscuro y Blanco deberían estar en blanco no en negro porque no se
       logra distinguir'. */
    body[data-chat-theme] .sys-themes-option,
    body[data-chat-theme] .sys-themes-option-label {
      color: #F1F5F9 !important;
    }
    body[data-chat-theme] .sys-themes-option.is-active,
    body[data-chat-theme] .sys-themes-option.is-active .sys-themes-option-label {
      color: #FFFFFF !important;
    }
    body[data-chat-theme] .sys-themes-color-tile.is-active {
      box-shadow: 0 0 0 2px var(--bg-panel), 0 0 0 4px var(--ws-chat-accent) !important;
    }
    .sys-themes-section + .sys-themes-section {
      margin-top: 9px;
      padding-top: 9px;
      border-top: 1px solid var(--border-soft) !important;
    }

    .sys-themes-list {
      display: flex; flex-direction: column;
      gap: 4px;
    }
    /* Edgar 2026-06-30: Dark/Light side-by-side en la MISMA FILA. */
    .sys-themes-section:first-of-type .sys-themes-list {
      flex-direction: row;
      gap: 4px;
    }
    /* Edgar 2026-06-30: Dark/Light estilo LISTA tipo kebab menu
       (no botones con depth). Mismo lenguaje: texto blanco, hover
       sutil, padding cómodo, font-size 13.5px, weight 500. */
    .sys-themes-section:first-of-type .sys-themes-option {
      flex: 1;
      justify-content: flex-start;
      padding: 9px 11px;
      font-size: 13px;
      font-weight: 500;
      gap: 9px;
      border-radius: 8px;
      background: transparent !important;
      border: 0 !important;
      box-shadow: none !important;
      transition: background 0.18s cubic-bezier(0.32, 0.72, 0, 1),
                  color 0.18s cubic-bezier(0.32, 0.72, 0, 1) !important;
    }
    .sys-themes-section:first-of-type .sys-themes-option:hover {
      background: rgba(255, 255, 255, 0.07) !important;
      border-color: transparent !important;
      transform: none !important;
      box-shadow: none !important;
    }
    .sys-themes-section:first-of-type .sys-themes-option:active {
      background: rgba(255, 255, 255, 0.10) !important;
      transform: none !important;
      box-shadow: none !important;
    }
    [data-theme="light"] .sys-themes-section:first-of-type .sys-themes-option:hover {
      background: rgba(0, 0, 0, 0.05) !important;
    }

    /* Edgar 2026-06-30: option mismo lenguaje que kebab menu item.
       Texto blanco fijo (no var--text-main que tinta naranja en
       algunos themes), font 500, padding cómodo. */
    .sys-themes-option {
      display: flex; align-items: center; gap: 9px;
      width: 100%;
      padding: 9px 11px;
      border-radius: 8px;
      border: 0;
      background: transparent;
      color: #E5E7EB !important;
      font: inherit;
      font-size: 13px;
      font-weight: 500;
      cursor: pointer;
      transition: background 0.18s cubic-bezier(0.32, 0.72, 0, 1),
                  color 0.18s cubic-bezier(0.32, 0.72, 0, 1);
      text-align: left;
    }
    .sys-themes-option:hover {
      background: rgba(255, 255, 255, 0.07) !important;
      color: #FFFFFF !important;
    }
    .sys-themes-option.is-active {
      background: rgba(255, 255, 255, 0.05) !important;
      color: #FFFFFF !important;
    }
    [data-theme="light"] .sys-themes-option { color: #1F2937 !important; }
    [data-theme="light"] .sys-themes-option:hover {
      background: rgba(0, 0, 0, 0.05) !important;
      color: #0F172A !important;
    }
    [data-theme="light"] .sys-themes-option.is-active {
      background: rgba(0, 0, 0, 0.04) !important;
      color: #0F172A !important;
    }
    /* Con tema de chat activo, la opción seleccionada toma el acento del tema */
    body[data-chat-theme] .sys-themes-option.is-active {
      background: color-mix(in srgb, var(--ws-chat-accent) 16%, transparent) !important;
      border-color: var(--ws-chat-accent) !important;
      color: var(--text-main) !important;
    }
    body[data-chat-theme] .sys-themes-option.is-active .sys-themes-option-check {
      color: var(--ws-chat-accent) !important;
    }
    .sys-themes-option-swatch {
      width: 13px; height: 13px;
      border-radius: 50% !important;
      flex-shrink: 0;
      box-shadow: inset 0 0 0 1px rgba(255,255,255,0.16);
    }
    .sys-themes-option-label {
      flex: 0 1 auto;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      letter-spacing: 0.01em;
    }
    .sys-themes-option-check {
      display: flex; align-items: center; justify-content: center;
      width: 12px; height: 12px;
      color: var(--text-main) !important;
      flex-shrink: 0;
    }
    .sys-themes-option-check svg { width: 11px; height: 11px; }

    /* Edgar 2026-06-30: color tiles SUTILES — sin depth exagerado,
       sin lift dramático. Mismo lenguaje que kebab menu (transitions
       cubic-bezier suaves, escalas mínimas). */
    .sys-themes-color-grid {
      display: grid;
      grid-template-columns: repeat(5, 22px);
      gap: 8px;
      justify-content: center;
      padding: 6px 4px;
    }
    .sys-themes-color-tile {
      width: 22px;
      height: 22px;
      border-radius: 50% !important;
      border: 0 !important;
      cursor: pointer;
      padding: 0;
      position: relative;
      display: flex; align-items: center; justify-content: center;
      transition: transform 0.18s cubic-bezier(0.32, 0.72, 0, 1),
                  box-shadow 0.18s cubic-bezier(0.32, 0.72, 0, 1) !important;
      box-shadow: none !important;
    }
    .sys-themes-color-tile:hover {
      transform: scale(1.15) !important;
      box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.12) !important;
    }
    .sys-themes-color-tile:active {
      transform: scale(1.05) !important;
    }
    .sys-themes-color-tile.is-active {
      transform: scale(1.0) !important;
      box-shadow:
        0 0 0 2px var(--bg-panel),
        0 0 0 4px var(--tile-color) !important;
    }
    .sys-themes-color-tile svg {
      position: relative;
      width: 10px; height: 10px;
      filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.45));
    }

    /* CENTER: content */
    .sys-content {
      overflow-y: auto;
      padding: 28px 36px;
      background: var(--bg-main);
    }
    .sys-content::-webkit-scrollbar { width: 6px; }
    .sys-content::-webkit-scrollbar-thumb { background: var(--border-mid); border-radius: 6px; }

    .sec-head {
      display: flex; align-items: flex-start; justify-content: space-between;
      gap: 18px; margin-bottom: 24px;
    }
    .sec-title-group { flex: 1; min-width: 0; }
    .sec-title {
      font-size: 24px; font-weight: 800; color: var(--text-main);
      letter-spacing: -0.3px; line-height: 1.2;
    }
    .sec-sub {
      font-size: 14px; color: var(--text-soft);
      margin-top: 5px; line-height: 1.5;
    }
    /* Pestañas internas de las secciones consolidadas del CRM */
    .sys-tabs {
      display: flex; gap: 2px; flex-wrap: wrap;
      margin: 0 0 22px;
      border-bottom: 1px solid var(--sector-nav-border, rgba(255,255,255,0.09));
    }
    .sys-tab {
      padding: 9px 16px;
      background: transparent; border: none;
      border-bottom: 2px solid transparent;
      color: var(--text-soft, #94A3B8);
      font-family: inherit; font-size: 13px; font-weight: 700;
      cursor: pointer; margin-bottom: -1px;
      transition: color 0.15s, border-color 0.15s;
    }
    .sys-tab:hover { color: var(--text-main, #F1F5F9); }
    .sys-tab.is-active {
      color: var(--sector-accent-light, var(--accent, #FF8A00));
      border-bottom-color: var(--sector-accent-light, var(--accent, #FF8A00));
    }
    .sec-action {
      display: inline-flex; align-items: center; gap: 7px;
      padding: 9px 15px; border-radius: var(--r-sm);
      background: var(--accent); color: white;
      font-size: 13px; font-weight: 700;
      transition: var(--tr); cursor: pointer; border: none;
      box-shadow: var(--shadow-accent);
      flex-shrink: 0;
    }
    .sec-action:hover { background: var(--accent-mid); transform: translateY(-1px); }
    .sec-action i { font-size: 14px; }

    /* KPI grid */
    .kpi-grid {
      display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
      margin-bottom: 24px;
    }
    .kpi {
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: var(--r-md);
      padding: 16px 18px;
      transition: var(--tr);
    }
    .kpi:hover { border-color: var(--border-mid); box-shadow: var(--shadow-sm); }
    .kpi-head {
      display: flex; align-items: center; justify-content: space-between;
      margin-bottom: 8px;
    }
    .kpi-label {
      font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.8px;
      color: var(--text-muted);
    }
    .kpi-icon {
      width: 28px; height: 28px; border-radius: var(--r-xs);
      display: flex; align-items: center; justify-content: center;
      background: var(--accent-soft); color: var(--accent-dark); font-size: 14px;
    }
    .kpi-icon--blue  { background: var(--primary-soft); color: var(--primary); }
    .kpi-icon--green { background: var(--green-soft); color: var(--green-dark); }
    [data-theme="dark"] .kpi-icon--green { color: #6EE7B7; }
    .kpi-value {
      font-size: 22px; font-weight: 800; color: var(--text-main);
      letter-spacing: -0.3px; line-height: 1.1;
    }
    .kpi-value--muted { color: var(--text-muted); }
    .kpi-delta {
      font-size: 12px; font-weight: 700; margin-top: 4px;
    }
    .kpi-delta--up   { color: var(--green-dark); }
    .kpi-delta--flat { color: var(--text-muted); }

    /* Subsecciones dentro de un módulo */
    .mod-subsection-head {
      display: flex; align-items: center; gap: 8px;
      margin: 24px 0 10px;
      font-size: 11px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1px; color: var(--text-muted);
    }
    .mod-subsection-head i { color: var(--accent); font-size: 14px; }
    .mod-subsection-head:first-child { margin-top: 4px; }

    /* Estado de validación — card resaltada */
    .val-state {
      display: flex; align-items: center; gap: 14px;
      padding: 16px 18px;
      border-radius: var(--r-md);
      margin-bottom: 18px;
      border: 1px solid transparent;
    }
    .val-state-icon {
      width: 44px; height: 44px; border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      font-size: 20px; flex-shrink: 0;
      background: rgba(255,255,255,0.55);
    }
    [data-theme="dark"] .val-state-icon { background: rgba(0,0,0,0.25); }
    .val-state-body { flex: 1; min-width: 0; }
    .val-state-title { font-size: 15px; font-weight: 800; margin-bottom: 3px; }
    .val-state-text { font-size: 13px; opacity: 0.85; line-height: 1.5; }
    .val-state-pct {
      font-size: 22px; font-weight: 900; flex-shrink: 0;
    }
    .val-state--valid {
      background: var(--green-soft); color: var(--green-dark);
      border-color: rgba(16, 185, 129, 0.3);
    }
    [data-theme="dark"] .val-state--valid { color: #6EE7B7; }
    .val-state--doubt {
      background: var(--accent-soft); color: var(--accent-dark);
      border-color: rgba(255, 138, 0, 0.3);
    }
    [data-theme="dark"] .val-state--doubt { color: var(--accent-light); }
    .val-state--invalid {
      background: var(--red-soft); color: var(--red-dark);
      border-color: rgba(239, 68, 68, 0.3);
    }
    [data-theme="dark"] .val-state--invalid { color: #FCA5A5; }
    .val-state--empty {
      background: var(--bg-soft); color: var(--text-muted);
      border-color: var(--border-soft);
    }

    /* Section card */
    .sec-card {
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: var(--r-md);
      padding: 20px 22px;
      margin-bottom: 14px;
    }
    /* Sub-header para módulos únicos con secciones agrupadas */
    .sec-subhead {
      display: flex; align-items: center; gap: 10px;
      padding: 18px 4px 10px;
      margin-top: 6px;
      border-bottom: 1px solid var(--border-soft);
      margin-bottom: 12px;
    }
    .sec-subhead i { color: var(--accent); font-size: 16px; }
    .sec-subhead-title {
      font-size: 12px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1.3px; color: var(--text-main);
    }
    .sec-subhead-sub {
      font-size: 12px; color: var(--text-muted); font-weight: 500;
      margin-left: auto;
    }
    @media (max-width: 600px) {
      .sec-subhead { flex-wrap: wrap; }
      .sec-subhead-sub { margin-left: 26px; flex-basis: 100%; }
    }
    .sec-card-head {
      display: flex; align-items: center; justify-content: space-between;
      margin-bottom: 12px;
    }
    .sec-card-title {
      display: flex; align-items: center; gap: 10px;
      font-size: 15px; font-weight: 800; color: var(--text-main);
    }
    .sec-card-title i { color: var(--accent); font-size: 17px; }
    .sec-card-meta {
      font-size: 11px; font-weight: 700; text-transform: uppercase;
      letter-spacing: 0.8px; color: var(--text-muted);
      padding: 3px 9px; border-radius: var(--r-pill);
      background: var(--bg-soft);
    }
    .sec-card-meta--filled { background: var(--green-soft); color: var(--green-dark); }
    [data-theme="dark"] .sec-card-meta--filled { color: #6EE7B7; }
    .sec-card-body {
      font-size: 14px; color: var(--text-main); line-height: 1.6;
    }
    .sec-card-body--empty {
      color: var(--text-muted); font-style: italic;
    }
    .sec-card-actions {
      display: flex; gap: 8px; margin-top: 14px;
      padding-top: 14px;
      border-top: 1px solid var(--border-soft);
    }
    .sec-btn {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 7px 14px; border-radius: var(--r-sm);
      font-size: 13px; font-weight: 700;
      background: var(--bg-soft); color: var(--text-soft);
      border: 1px solid var(--border-soft);
      transition: var(--tr-fast); cursor: pointer;
    }
    .sec-btn:hover { border-color: var(--accent); color: var(--accent); background: var(--accent-soft); }
    .sec-btn i { font-size: 13px; }

    /* Variante primaria del sec-btn (acción principal: Guardar pedido) */
    .sec-btn--primary {
      background: var(--accent) !important;
      color: #fff !important;
      border-color: var(--accent) !important;
    }
    .sec-btn--primary:hover {
      filter: brightness(1.1);
      background: var(--accent) !important;
      color: #fff !important;
    }

    /* Botón de canal del form de Pedidos (activo) */
    .resto-canal-btn { opacity: 0.55; }
    .resto-canal-btn:hover { opacity: 0.85; }
    .resto-canal-btn--active {
      opacity: 1 !important;
      background: rgba(255,255,255,0.06) !important;
      box-shadow: 0 0 0 2px currentColor inset;
    }

    /* Two-col grid */
    .sec-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
    .sec-grid-2 .sec-card { margin-bottom: 0; }

    /* Empty state */
    .sec-empty {
      text-align: center; padding: 48px 24px;
      color: var(--text-muted);
    }
    .sec-empty i { font-size: 48px; color: var(--border-strong); margin-bottom: 12px; }
    .sec-empty-title { font-size: 15px; font-weight: 700; color: var(--text-soft); margin-bottom: 4px; }
    .sec-empty-text  { font-size: 13px; line-height: 1.5; max-width: 320px; margin: 0 auto; }

    /* ═══════════════════════════════════════
       DASHBOARD PREMIUM — centro de decisiones
    ═══════════════════════════════════════ */
    .dash-biz-badge {
      display: flex; align-items: center; justify-content: space-between;
      padding: 14px 18px; margin-bottom: 20px;
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: var(--r-md);
      transition: background 0.5s ease, border-color 0.4s ease, box-shadow 0.4s ease;
      position: relative;
    }
    /* Pulse de cambio del tipo de negocio */
    .dash-biz-badge--pulse {
      animation: dash-biz-pulse 1.1s cubic-bezier(0.22, 1, 0.36, 1);
      border-color: var(--accent);
    }
    @keyframes dash-biz-pulse {
      0%   { box-shadow: 0 0 0 0 rgba(255,138,0, 0.45); transform: scale(1); }
      30%  { box-shadow: 0 0 0 10px rgba(255,138,0, 0.32); transform: scale(1.015); }
      60%  { box-shadow: 0 0 0 18px rgba(255,138,0, 0); transform: scale(1); }
      100% { box-shadow: 0 0 0 0 rgba(255,138,0, 0); transform: scale(1); }
    }
    /* Particles flotantes detrás del badge cuando cambia */
    .dash-biz-badge--pulse::before {
      content: ''; position: absolute; inset: -8px;
      border-radius: var(--r-md);
      background: radial-gradient(circle at 50% 50%, rgba(255,138,0,0.18), transparent 70%);
      pointer-events: none;
      animation: dash-biz-glow 1.1s ease-out;
    }
    @keyframes dash-biz-glow {
      0%   { opacity: 0; transform: scale(0.92); }
      40%  { opacity: 1; transform: scale(1.05); }
      100% { opacity: 0; transform: scale(1.15); }
    }
    /* Cambio de valor del tipo (texto morpheando) */
    .dash-biz-value {
      transition: transform 0.45s cubic-bezier(0.22,1,0.36,1), color 0.45s;
    }
    .dash-biz-badge--pulse .dash-biz-value {
      animation: dash-biz-text-pop 0.7s cubic-bezier(0.34, 1.56, 0.64, 1);
      color: var(--accent);
    }
    @keyframes dash-biz-text-pop {
      0%   { transform: translateY(6px); opacity: 0; }
      40%  { transform: translateY(-2px); opacity: 1; }
      100% { transform: translateY(0); opacity: 1; }
    }
    .dash-biz-badge--pulse .dash-biz-icon {
      animation: dash-biz-icon-spin 0.8s cubic-bezier(0.22, 1, 0.36, 1);
    }
    @keyframes dash-biz-icon-spin {
      0%   { transform: rotate(-180deg) scale(0.6); opacity: 0; }
      60%  { transform: rotate(10deg)  scale(1.1); opacity: 1; }
      100% { transform: rotate(0)       scale(1);   opacity: 1; }
    }

    /* Shimmer ring en el content durante el cambio */
    .sys-content--shimmer {
      animation: dash-content-shimmer 1.2s ease-out;
    }
    @keyframes dash-content-shimmer {
      0%   { box-shadow: inset 0 0 0 0 rgba(255,138,0, 0); }
      30%  { box-shadow: inset 0 0 32px 0 rgba(255,138,0, 0.18); }
      100% { box-shadow: inset 0 0 0 0 rgba(255,138,0, 0); }
    }

    /* Stagger reveal de KPIs y cards al cambiar */
    .dash-fresh .kpi,
    .dash-fresh .dash-split > .sec-card,
    .dash-fresh > .sec-card {
      opacity: 0; transform: translateY(8px);
      animation: dash-fresh-in 0.55s cubic-bezier(0.22, 1, 0.36, 1) both;
    }
    .dash-fresh .kpi-grid .kpi:nth-child(1) { animation-delay: 0.05s; }
    .dash-fresh .kpi-grid .kpi:nth-child(2) { animation-delay: 0.12s; }
    .dash-fresh .kpi-grid .kpi:nth-child(3) { animation-delay: 0.19s; }
    .dash-fresh .kpi-grid .kpi:nth-child(4) { animation-delay: 0.26s; }
    .dash-fresh .dash-split > .sec-card:nth-child(1) { animation-delay: 0.32s; }
    .dash-fresh .dash-split > .sec-card:nth-child(2) { animation-delay: 0.38s; }
    .dash-fresh > .sec-card:nth-of-type(1) { animation-delay: 0.42s; }
    .dash-fresh > .sec-card:nth-of-type(2) { animation-delay: 0.48s; }
    .dash-fresh > .sec-card:nth-of-type(3) { animation-delay: 0.54s; }
    @keyframes dash-fresh-in {
      to { opacity: 1; transform: translateY(0); }
    }
    [data-theme="dark"] .dash-biz-badge { background: var(--card-bg); }
    .dash-biz-left {
      display: flex; align-items: center; gap: 12px;
    }
    .dash-biz-icon {
      width: 38px; height: 38px; border-radius: var(--r-sm);
      background: var(--accent-soft); color: var(--accent-dark);
      display: flex; align-items: center; justify-content: center;
      font-size: 18px; transition: background 0.5s, color 0.5s;
    }
    [data-theme="dark"] .dash-biz-icon { color: var(--accent-light); }
    .dash-biz-label {
      font-size: 11px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1px; color: var(--text-muted);
    }
    .dash-biz-value {
      font-size: 16px; font-weight: 800; color: var(--text-main);
      transition: opacity 0.3s;
    }
    .dash-biz-sub {
      font-size: 12px; color: var(--text-muted); font-weight: 500;
    }

    /* KPI deltas con color */
    .kpi-delta--up { color: var(--green-dark); }
    [data-theme="dark"] .kpi-delta--up { color: #6EE7B7; }
    .kpi-delta--down { color: var(--red-dark); }
    [data-theme="dark"] .kpi-delta--down { color: #FCA5A5; }
    .kpi-icon--purple { background: rgba(167, 139, 250, 0.15); color: #A78BFA; }
    [data-theme="dark"] .kpi-icon--purple { color: #C4B5FD; }
    .kpi-icon--orange { background: var(--accent-soft); color: var(--accent-dark); }
    [data-theme="dark"] .kpi-icon--orange { color: var(--accent-light); }

    /* Split: chart + insights side by side */
    .dash-split {
      display: grid; grid-template-columns: 1.4fr 1fr; gap: 14px;
      margin: 20px 0;
    }
    @media (max-width: 900px) { .dash-split { grid-template-columns: 1fr; } }

    /* Chart (CSS bars) */
    .dash-chart-bars {
      display: flex; align-items: flex-end; gap: 4px;
      height: 140px; padding: 8px 0;
      border-bottom: 1px solid var(--border-soft);
    }
    .dash-bar {
      flex: 1; background: var(--accent);
      border-radius: 3px 3px 0 0;
      opacity: 0.85;
      transition: height 0.6s cubic-bezier(0.22, 1, 0.36, 1), background 0.3s;
      position: relative;
    }
    .dash-bar:hover { opacity: 1; background: var(--accent-dark); }
    .dash-bar--highlight { background: var(--primary); }
    .dash-chart-axis {
      display: flex; justify-content: space-between;
      font-size: 10px; color: var(--text-muted);
      margin-top: 8px; font-weight: 600;
    }

    /* Pie donut (source chart) */
    .dash-pie-wrap {
      display: flex; align-items: center; gap: 18px;
      padding: 12px 0;
    }
    .dash-pie {
      width: 110px; height: 110px; flex-shrink: 0;
      position: relative;
    }
    .dash-pie svg { width: 100%; height: 100%; transform: rotate(-90deg); }
    .dash-pie-total {
      position: absolute; top: 50%; left: 50%;
      transform: translate(-50%, -50%);
      font-size: 13px; font-weight: 800; color: var(--text-main);
      text-align: center;
    }
    .dash-pie-legend {
      flex: 1; display: flex; flex-direction: column; gap: 7px;
    }
    .dash-pie-item {
      display: flex; align-items: center; gap: 8px;
      font-size: 13px; color: var(--text-soft); font-weight: 600;
    }
    .dash-pie-item::before {
      content: ''; width: 10px; height: 10px; border-radius: 50%;
      background: var(--_color, var(--accent)); flex-shrink: 0;
    }
    .dash-pie-item-val {
      margin-left: auto; color: var(--text-main); font-weight: 800;
    }

    /* Insights */
    .dash-insight {
      display: flex; gap: 10px; align-items: flex-start;
      padding: 11px 13px; border-radius: var(--r-sm);
      font-size: 13px; line-height: 1.45;
      background: var(--bg-soft);
      margin-bottom: 6px;
      border-left: 3px solid var(--text-muted);
    }
    .dash-insight-dot {
      width: 8px; height: 8px; border-radius: 50%;
      margin-top: 5px; flex-shrink: 0;
      background: var(--text-muted);
    }
    .dash-insight--good { border-left-color: var(--green); }
    .dash-insight--good .dash-insight-dot { background: var(--green); }
    .dash-insight--warn { border-left-color: var(--accent); }
    .dash-insight--warn .dash-insight-dot { background: var(--accent); }
    .dash-insight--bad  { border-left-color: var(--red); }
    .dash-insight--bad  .dash-insight-dot { background: var(--red); }

    /* Acciones recomendadas */
    .dash-action {
      display: flex; align-items: center; gap: 12px;
      padding: 12px 14px; border-radius: var(--r-sm);
      background: var(--bg-soft); border: 1px solid var(--border-soft);
      margin-bottom: 8px;
      transition: border-color 0.15s;
    }
    .dash-action:hover { border-color: var(--accent); }
    .dash-action-icon {
      width: 32px; height: 32px; border-radius: var(--r-xs);
      background: var(--accent-soft); color: var(--accent-dark);
      display: flex; align-items: center; justify-content: center;
      font-size: 15px; flex-shrink: 0;
    }
    .dash-action-text {
      flex: 1; font-size: 14px; color: var(--text-main); line-height: 1.45;
      font-weight: 600;
    }
    .dash-action-btn {
      display: inline-flex; align-items: center; gap: 5px;
      padding: 7px 13px; border-radius: var(--r-sm);
      background: var(--accent); color: white; border: none;
      font-size: 12px; font-weight: 800; cursor: pointer;
      flex-shrink: 0;
      transition: background 0.15s;
    }
    .dash-action-btn:hover { background: var(--accent-mid); }

    /* Eventos / calendario */
    .dash-event {
      display: flex; gap: 14px; align-items: center;
      padding: 14px; border-radius: var(--r-sm);
      background: var(--bg-soft);
      border: 1px solid var(--border-soft);
      margin-bottom: 8px;
    }
    .dash-event-date {
      width: 54px; height: 54px; border-radius: var(--r-sm);
      background: var(--accent); color: white;
      display: flex; flex-direction: column; align-items: center; justify-content: center;
      font-weight: 800; line-height: 1;
      flex-shrink: 0;
    }
    .dash-event-date-d { font-size: 18px; }
    .dash-event-date-m { font-size: 10px; text-transform: uppercase; margin-top: 2px; letter-spacing: 0.5px; }
    .dash-event-body { flex: 1; min-width: 0; }
    .dash-event-title { font-size: 14px; font-weight: 800; color: var(--text-main); margin-bottom: 4px; }
    .dash-event-meta { font-size: 12px; color: var(--text-muted); margin-bottom: 7px; }
    .dash-event-bar {
      height: 6px; background: var(--border-soft);
      border-radius: var(--r-pill); overflow: hidden;
    }
    .dash-event-fill {
      height: 100%; border-radius: var(--r-pill);
      background: linear-gradient(90deg, var(--accent), var(--accent-light));
    }

    /* Clientes snapshot */
    .dash-customers {
      display: flex; flex-direction: column; gap: 8px;
    }
    .dash-customer {
      display: flex; align-items: center; gap: 10px;
      padding: 10px 12px; border-radius: var(--r-sm);
      background: var(--bg-soft);
      font-size: 13px;
    }
    .dash-customer-avatar {
      width: 32px; height: 32px; border-radius: 50%;
      background: linear-gradient(135deg, var(--primary), var(--primary-mid));
      color: white; display: flex; align-items: center; justify-content: center;
      font-size: 12px; font-weight: 800; flex-shrink: 0;
    }
    .dash-customer-name { flex: 1; color: var(--text-main); font-weight: 600; }
    .dash-customer-meta { font-size: 12px; color: var(--text-muted); }
    .dash-customer-tag {
      font-size: 10px; font-weight: 800; text-transform: uppercase;
      padding: 2px 8px; border-radius: var(--r-pill);
      background: var(--accent-soft); color: var(--accent-dark);
    }
    .dash-customer-tag--freq { background: var(--green-soft); color: var(--green-dark); }
    [data-theme="dark"] .dash-customer-tag--freq { color: #6EE7B7; }

    /* Progress compact */
    .dash-progress-compact {
      display: flex; gap: 6px; flex-wrap: wrap;
    }
    .dash-prog-pill {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 5px 11px; border-radius: var(--r-pill);
      font-size: 11px; font-weight: 700;
      background: var(--bg-soft); color: var(--text-muted);
      border: 1px solid var(--border-soft);
    }
    .dash-prog-pill i { font-size: 11px; }
    .dash-prog-pill--done { background: var(--green-soft); color: var(--green-dark); border-color: transparent; }
    [data-theme="dark"] .dash-prog-pill--done { color: #6EE7B7; }
    .dash-prog-pill--progress { background: var(--accent-soft); color: var(--accent-dark); border-color: transparent; }
    [data-theme="dark"] .dash-prog-pill--progress { color: var(--accent-light); }

    /* Section headers within dashboard */
    .dash-section-head {
      display: flex; align-items: center; justify-content: space-between;
      margin-bottom: 10px; margin-top: 6px;
    }
    .dash-section-title {
      font-size: 11px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1px; color: var(--text-muted);
      display: flex; align-items: center; gap: 7px;
    }
    .dash-section-title i { color: var(--accent); font-size: 13px; }

    /* Shortcut tiles (dashboard) — antiguas, queda para compat */
    .dash-tiles {
      display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px;
      margin-top: 8px;
    }
    .dash-tile {
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: var(--r-md);
      padding: 16px 18px;
      cursor: pointer;
      transition: var(--tr);
      text-align: left;
      display: flex; flex-direction: column; gap: 6px;
    }
    .dash-tile:hover { border-color: var(--accent); transform: translateY(-2px); box-shadow: var(--shadow-md); }
    .dash-tile-icon {
      width: 36px; height: 36px; border-radius: var(--r-sm);
      background: var(--accent-soft); color: var(--accent-dark);
      display: flex; align-items: center; justify-content: center;
      font-size: 17px; margin-bottom: 4px;
    }
    .dash-tile-title { font-size: 14px; font-weight: 800; color: var(--text-main); }
    .dash-tile-sub   { font-size: 12px; color: var(--text-soft); line-height: 1.5; }
    .dash-tile-status {
      margin-top: 6px;
      display: inline-flex; align-items: center; gap: 5px;
      font-size: 11px; font-weight: 700;
      color: var(--text-muted);
    }
    .dash-tile-status i { font-size: 10px; }
    .dash-tile-status--done { color: var(--green-dark); }
    [data-theme="dark"] .dash-tile-status--done { color: #6EE7B7; }
    .dash-tile-status--progress { color: var(--accent-dark); }
    [data-theme="dark"] .dash-tile-status--progress { color: var(--accent-light); }

    /* RIGHT: contextual chat */
    .sys-chat {
      background: var(--bg-panel);
      border-left: 1px solid var(--border-soft);
      display: flex; flex-direction: column;
      overflow: hidden;
      min-width: 0;  /* flex children: permite que se reduzca debajo de su content min-size */
    }
    .sys-chat-feed-slot {
      flex: 1; overflow: hidden;
      display: flex; flex-direction: column;
      min-width: 0;
    }
    .sys-chat-feed-slot > #feed {
      flex: 1; padding: 20px 16px 16px; background: var(--bg-panel);
      overflow-x: hidden;  /* Edgar: 'se puede scrollear el chat vertical mas
                              a la derecha' — bloqueamos scroll horizontal. */
      overflow-y: auto;
      box-sizing: border-box;
    }
    /* Todas las cards del chat embebido en el sys-panel: que respeten el
       ancho del contenedor SIEMPRE. Sin esto, .resto-ob-card con max-width
       480px + width:100% desborda en sys-chat estrecho cuando el contenido
       (inputs, botones) tiene min-content > contenedor. */
    .sys-panel .sys-chat #feed,
    .sys-panel .sys-chat #feed * {
      max-width: 100% !important;
      box-sizing: border-box;
    }
    .sys-panel .sys-chat #feed .resto-ob-card,
    .sys-panel .sys-chat #feed .feed-input-card,
    .sys-panel .sys-chat #feed .feed-pio-msg,
    .sys-panel .sys-chat #feed .feed-user-msg {
      max-width: 100% !important;
      width: 100%;
    }
    /* Inputs y textareas: nunca sobrepasen el contenedor */
    .sys-panel .sys-chat #feed input,
    .sys-panel .sys-chat #feed textarea,
    .sys-panel .sys-chat #feed select {
      max-width: 100% !important;
      min-width: 0 !important;
      width: 100%;
    }
    /* Texto largo: rompe palabras antes de hacer scroll */
    .sys-panel .sys-chat #feed .ffm-bubble,
    .sys-panel .sys-chat #feed .fum-bubble,
    .sys-panel .sys-chat #feed .resto-ob-card {
      word-break: break-word;
      overflow-wrap: anywhere;
    }
    /* Chat del CRM (modo oscuro) — jerarquía correcta y descansada:
       el panel/feed es la superficie MÁS oscura (canvas calmado) y las
       burbujas de Pio van un tono más claro encima. Antes estaba
       invertido (burbujas casi negras sobre panel medio) → cansaba leer. */
    .sys-panel:not([data-theme-mode="claro"]) .sys-chat,
    .sys-panel:not([data-theme-mode="claro"]) .sys-chat-feed-slot > #feed {
      background: var(--sector-chat-bubble-bg) !important;
    }
    .sys-panel:not([data-theme-mode="claro"]) .sys-chat {
      border-left: 1px solid var(--sector-nav-border) !important;
    }
    .sys-panel:not([data-theme-mode="claro"]) .sys-chat .ffm-bubble {
      background: var(--sector-card-bg) !important;
      border-color: var(--sector-nav-border) !important;
    }
    .sys-chat-input-slot > .chat-bar {
      padding: 12px 14px 14px;
      border-top: 1px solid var(--border-soft);
    }
    .sys-chat-input-slot .cb-row { border-radius: var(--r-md); padding: 5px 5px 5px 14px; }
    .sys-chat-input-slot .cb-input { font-size: 14px; padding: 7px 0; }
    .sys-chat-input-slot .cb-send  { width: 32px; height: 32px; font-size: 14px; border-radius: var(--r-sm); }
    .sys-chat-head {
      padding: 16px 18px 12px;
      border-bottom: 1px solid var(--border-soft);
      flex-shrink: 0;
    }
    .sys-chat-head-row {
      display: flex; align-items: center; gap: 9px;
    }
    .sys-chat-head-icon {
      width: 28px; height: 28px; border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      background: linear-gradient(135deg, var(--primary-soft), var(--accent-soft));
      border: 1px solid var(--border-soft);
      font-size: 13px;
      overflow: hidden;
    }
    .sys-chat-head-icon--logo {
      width: 36px; height: 36px;
      background: transparent;
      border: none;
      padding: 0;
      overflow: visible;
    }
    .sys-chat-head-icon--logo img {
      width: 100%; height: 100%; object-fit: contain;
      display: block;
    }
    .sys-chat-head-title { font-size: 14px; font-weight: 800; color: var(--text-main); }
    .sys-chat-head-sub   { font-size: 12px; color: var(--text-muted); font-weight: 600; }
    /* Wordmark "piofly" en la cabecera del chat del sistema */
    .sys-chat-brand      { font-size: 17px; line-height: 1; letter-spacing: -0.3px; }
    .sys-chat-feed {
      flex: 1; overflow-y: auto;
      padding: 16px 16px 8px;
      display: flex; flex-direction: column; gap: 10px;
    }
    .sys-chat-feed::-webkit-scrollbar { width: 4px; }
    .sys-chat-feed::-webkit-scrollbar-thumb { background: var(--border-mid); border-radius: 4px; }
    .sys-chat-empty {
      text-align: center; padding: 40px 16px; color: var(--text-muted);
    }
    .sys-chat-empty i { font-size: 28px; color: var(--border-strong); margin-bottom: 10px; }
    .sys-chat-empty p { font-size: 13px; line-height: 1.55; }
    .sys-msg-bot, .sys-msg-user {
      font-size: 14px; line-height: 1.55;
      padding: 10px 13px; border-radius: var(--r-sm);
      max-width: 92%;
    }
    .sys-msg-bot {
      background: var(--bg-soft); border: 1px solid var(--border-soft);
      color: var(--text-main); align-self: flex-start;
    }
    .sys-msg-user {
      background: var(--primary); color: white;
      align-self: flex-end;
    }
    .sys-chat-input-wrap {
      padding: 12px 14px 14px;
      border-top: 1px solid var(--border-soft);
      flex-shrink: 0;
    }
    .sys-chat-row {
      display: flex; align-items: center; gap: 0;
      background: var(--bg-main);
      border: 1.5px solid var(--border-soft);
      border-radius: var(--r-md);
      padding: 5px 5px 5px 14px;
      transition: border-color 0.15s;
    }
    .sys-chat-row:focus-within { border-color: var(--accent); }
    .sys-chat-input {
      flex: 1; border: none; outline: none; background: transparent;
      font-family: inherit; font-size: 14px; color: var(--text-main);
      padding: 7px 0;
    }
    .sys-chat-input::placeholder { color: var(--text-muted); }
    .sys-chat-send {
      width: 32px; height: 32px; flex-shrink: 0;
      background: var(--accent); color: white;
      border-radius: var(--r-sm);
      display: flex; align-items: center; justify-content: center;
      font-size: 14px; cursor: pointer; border: none;
      transition: var(--tr);
    }
    .sys-chat-send:hover:not(:disabled) { background: var(--accent-mid); }
    .sys-chat-send:disabled { opacity: 0.35; cursor: not-allowed; }

    /* Responsive */
    @media (max-width: 1100px) {
      .sys-layout { grid-template-columns: 220px 1fr 300px; }
      .kpi-grid   { grid-template-columns: repeat(2, 1fr); }
    }
    @media (max-width: 960px) {
      .sys-layout { grid-template-columns: 1fr; }
      .sys-nav, .sys-chat { display: none; }
      .sys-content { padding: 20px 16px; }
      .sec-title { font-size: 20px; }
      .sec-grid-2 { grid-template-columns: 1fr; }
      .dash-tiles { grid-template-columns: 1fr 1fr; }
      .kpi-grid   { grid-template-columns: 1fr 1fr; }
      .sys-mobile-nav { display: flex !important; }
      .sys-mobile-chat-btn { display: flex !important; }
    }
    @media (max-width: 500px) {
      .kpi-grid   { grid-template-columns: 1fr !important; }
      .dash-tiles { grid-template-columns: 1fr !important; }
    }

    /* Mobile nav toggle (oculto por default) */
    .sys-mobile-nav, .sys-mobile-chat-btn, .sys-mobile-toolbar {
      display: none;
    }

    /* Evitar que las imágenes de los botones de toolbar crezcan descontroladamente */
    .sys-tb-btn img {
      width: 20px;
      height: 20px;
      object-fit: contain;
    }

    /* ═════════════════════════════════════════════════════════
       CHAT IDEA ACTIONS (botones dentro del mensaje de Pio)
    ═════════════════════════════════════════════════════════ */
    .chat-idea-actions {
      display: flex; gap: 6px; flex-wrap: wrap;
      margin-top: 12px; padding-top: 12px;
      border-top: 1px dashed var(--border-soft);
    }
    .chat-idea-btn {
      display: inline-flex; align-items: center; gap: 5px;
      padding: 7px 12px; border-radius: var(--r-sm);
      font-size: 12px; font-weight: 700;
      cursor: pointer; border: 1px solid var(--border-soft);
      background: var(--bg-panel); color: var(--text-soft);
      font-family: inherit;
      transition: var(--tr-fast);
    }
    .chat-idea-btn i { font-size: 13px; }
    .chat-idea-btn:hover { transform: translateY(-1px); }
    .chat-idea-btn--save {
      background: var(--accent); color: white; border-color: var(--accent);
      box-shadow: var(--shadow-accent);
    }
    .chat-idea-btn--save:hover { background: var(--accent-mid); }
    .chat-idea-btn--regen:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }
    .chat-idea-btn--delete:hover { border-color: var(--red); color: var(--red); background: var(--red-soft); }

    /* ═════════════════════════════════════════════════════════
       ACTION CARD (Pio pide ejecutar — rename/archive/delete/etc.)
       Aparece debajo de la burbuja con Confirmar/Cancelar.
       Estilo premium: header con icon-badge + título + sub, body
       con diff visual (pills antes→después), CTAs grandes. Color
       del texto adapta automáticamente al tema del bubble.
    ═════════════════════════════════════════════════════════ */
    .pf-action-card {
      margin-top: 14px;
      padding: 14px 14px 12px;
      border-radius: 14px;
      border: 1px solid rgba(255, 138, 0, 0.32);
      background:
        linear-gradient(180deg, rgba(255, 138, 0, 0.10), rgba(255, 138, 0, 0.03)),
        rgba(255, 255, 255, 0.02);
      box-shadow:
        0 8px 24px rgba(255, 138, 0, 0.10),
        inset 0 1px 0 rgba(255, 255, 255, 0.06);
      animation: pf-action-card-in 0.32s cubic-bezier(0.18, 0.89, 0.32, 1.28);
      color: inherit; /* hereda del bubble: oscuro en light, claro en dark */
    }
    @keyframes pf-action-card-in {
      from { opacity: 0; transform: translateY(8px) scale(0.96); }
      to   { opacity: 1; transform: translateY(0) scale(1); }
    }
    .pf-action-head {
      display: flex; align-items: center; gap: 10px;
      padding-bottom: 12px;
      border-bottom: 1px dashed rgba(255, 138, 0, 0.22);
      margin-bottom: 12px;
    }
    .pf-action-head-ico {
      width: 36px; height: 36px;
      border-radius: 10px;
      display: flex; align-items: center; justify-content: center;
      background: rgba(255, 138, 0, 0.18);
      color: #FF8A00;
      flex-shrink: 0;
      box-shadow: 0 0 0 1px rgba(255, 138, 0, 0.30);
    }
    .pf-action-head-ico i { font-size: 18px; }
    .pf-action-head-text { min-width: 0; }
    .pf-action-verb {
      font-size: 14px; font-weight: 800;
      color: #FF8A00;
      letter-spacing: 0.01em;
      line-height: 1.2;
    }
    .pf-action-sub {
      font-size: 11px; font-weight: 600;
      opacity: 0.62;
      margin-top: 2px;
      letter-spacing: 0.2px;
    }

    /* Body: diff visual con pills "antes → después" o target simple */
    .pf-action-body { padding: 2px 2px 12px; }
    .pf-action-diff {
      display: flex; align-items: center; gap: 10px;
      flex-wrap: wrap;
    }
    .pf-action-pill {
      display: inline-flex; align-items: center;
      max-width: 100%;
      padding: 6px 12px;
      border-radius: 999px;
      font-size: 13px; font-weight: 700;
      letter-spacing: 0.01em;
      line-height: 1.2;
      word-break: break-word;
    }
    .pf-action-pill--from {
      background: rgba(148, 163, 184, 0.18);
      color: inherit;
      opacity: 0.78;
      text-decoration: line-through;
      text-decoration-color: rgba(148, 163, 184, 0.55);
    }
    .pf-action-pill--to {
      background: rgba(34, 197, 94, 0.18);
      color: #4ADE80;
      box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.30);
    }
    .pf-action-arrow {
      font-size: 16px;
      color: #FF8A00;
      opacity: 0.85;
      flex-shrink: 0;
    }
    .pf-action-target {
      display: inline-flex; align-items: center; gap: 8px;
      padding: 6px 12px 6px 8px;
      border-radius: 999px;
      background: rgba(148, 163, 184, 0.14);
    }
    .pf-action-target-ico { font-size: 16px; color: #FF8A00; }
    .pf-action-target-name {
      font-size: 13px; font-weight: 700;
      color: inherit;
    }

    /* Variantes semánticas por tipo: tinte de borde + glow */
    .pf-action-card--soft_delete {
      border-color: rgba(239, 68, 68, 0.40);
      background:
        linear-gradient(180deg, rgba(239, 68, 68, 0.10), rgba(239, 68, 68, 0.03)),
        rgba(255, 255, 255, 0.02);
      box-shadow: 0 8px 24px rgba(239, 68, 68, 0.12), inset 0 1px 0 rgba(255, 255, 255, 0.06);
    }
    .pf-action-card--soft_delete .pf-action-head-ico { background: rgba(239, 68, 68, 0.18); color: #EF4444; box-shadow: 0 0 0 1px rgba(239, 68, 68, 0.35); }
    .pf-action-card--soft_delete .pf-action-head     { border-bottom-color: rgba(239, 68, 68, 0.22); }
    .pf-action-card--soft_delete .pf-action-verb     { color: #EF4444; }
    .pf-action-card--soft_delete .pf-action-arrow,
    .pf-action-card--soft_delete .pf-action-target-ico { color: #EF4444; }
    .pf-action-card--soft_delete .pf-action-btn--confirm { background: #EF4444; border-color: #EF4444; box-shadow: 0 4px 12px rgba(239, 68, 68, 0.32); }
    .pf-action-card--soft_delete .pf-action-btn--confirm:hover:not(:disabled) { background: #F87171; border-color: #F87171; }

    .pf-action-card--restore { border-color: rgba(34, 197, 94, 0.34); }
    .pf-action-card--restore .pf-action-head-ico { background: rgba(34, 197, 94, 0.18); color: #22C55E; box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.32); }
    .pf-action-card--restore .pf-action-verb     { color: #22C55E; }
    .pf-action-card--restore .pf-action-btn--confirm { background: #22C55E; border-color: #22C55E; box-shadow: 0 4px 12px rgba(34, 197, 94, 0.28); }
    .pf-action-card--restore .pf-action-btn--confirm:hover:not(:disabled) { background: #4ADE80; border-color: #4ADE80; }

    .pf-action-card--archive   .pf-action-head-ico,
    .pf-action-card--unarchive .pf-action-head-ico { background: rgba(96, 165, 250, 0.18); color: #60A5FA; box-shadow: 0 0 0 1px rgba(96, 165, 250, 0.32); }
    .pf-action-card--archive   .pf-action-verb,
    .pf-action-card--unarchive .pf-action-verb     { color: #60A5FA; }

    .pf-action-card--move_to_group .pf-action-head-ico { background: rgba(168, 85, 247, 0.18); color: #A855F7; box-shadow: 0 0 0 1px rgba(168, 85, 247, 0.32); }
    .pf-action-card--move_to_group .pf-action-verb     { color: #A855F7; }
    .pf-action-card--move_to_group .pf-action-arrow    { color: #A855F7; }

    /* Buttons */
    .pf-action-buttons {
      display: flex; gap: 10px; justify-content: flex-end;
      padding-top: 4px;
    }
    .pf-action-btn {
      display: inline-flex; align-items: center; justify-content: center;
      padding: 10px 18px; border-radius: 10px;
      font-size: 13px; font-weight: 800;
      cursor: pointer; border: 1px solid transparent;
      font-family: inherit;
      letter-spacing: 0.01em;
      transition: transform 0.14s ease, background 0.16s ease, border-color 0.16s ease, box-shadow 0.16s ease;
    }
    .pf-action-btn:disabled { cursor: not-allowed; opacity: 0.55; }
    .pf-action-btn--cancel {
      background: rgba(148, 163, 184, 0.12);
      color: inherit;
      opacity: 0.85;
      border-color: rgba(148, 163, 184, 0.25);
    }
    .pf-action-btn--cancel:hover:not(:disabled) {
      background: rgba(148, 163, 184, 0.20);
      transform: translateY(-1px);
      opacity: 1;
    }
    .pf-action-btn--confirm {
      background: #FF8A00;
      color: white;
      border-color: #FF8A00;
      box-shadow: 0 4px 12px rgba(255, 138, 0, 0.28);
    }
    .pf-action-btn--confirm:hover:not(:disabled) {
      background: #FFA333;
      border-color: #FFA333;
      transform: translateY(-1px);
      box-shadow: 0 6px 16px rgba(255, 138, 0, 0.36);
    }

    /* Estado finalizado: ya no es un CTA, es un recibo. Cambia background
       según el resultado (ok/cancelled/err) para que se lea de un vistazo. */
    .pf-action-card--done {
      animation: none;
      padding: 12px 14px;
      box-shadow: none;
      border-style: dashed;
    }
    .pf-action-card--ok {
      background: rgba(34, 197, 94, 0.08);
      border-color: rgba(34, 197, 94, 0.35);
    }
    .pf-action-card--cancelled {
      background: rgba(148, 163, 184, 0.08);
      border-color: rgba(148, 163, 184, 0.30);
    }
    .pf-action-card--err {
      background: rgba(239, 68, 68, 0.08);
      border-color: rgba(239, 68, 68, 0.35);
    }
    .pf-action-result {
      display: flex; align-items: center; gap: 8px;
      font-size: 13px; font-weight: 800;
      letter-spacing: 0.01em;
    }
    .pf-action-result i { font-size: 17px; }
    .pf-action-result--ok    { color: #22C55E; }
    .pf-action-result--err   { color: #EF4444; }

    /* Saved idea item en nav */
    .sys-nav-item .sys-saved-title {
      flex: 1; min-width: 0;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .sys-nav-item .sys-saved-progress {
      font-size: 10px; font-weight: 800;
      padding: 2px 7px; border-radius: var(--r-pill);
      background: var(--bg-soft); color: var(--text-muted);
      flex-shrink: 0;
    }
    .sys-nav-item.active .sys-saved-progress {
      background: var(--accent); color: white;
    }

    /* ═════════════════════════════════════════════
       MOTOR DE SUGERENCIAS (Growth Engine)
    ═════════════════════════════════════════════ */
    .sug-block { display: flex; flex-direction: column; gap: 12px; margin-bottom: 28px; }
    .sug-block-title {
      display: flex; align-items: center; gap: 8px;
      font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px;
      color: var(--text-muted);
      margin-bottom: 2px;
    }
    .sug-block-title i { color: var(--accent); font-size: 14px; }
    .sug-card {
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-left: 4px solid var(--accent);
      border-radius: var(--r-md);
      padding: 18px 20px;
      position: relative;
      box-shadow: var(--shadow-sm);
    }
    [data-theme="dark"] .sug-card { background: var(--card-bg); }
    .sug-card--urgente     { border-left-color: var(--red); }
    .sug-card--mejora      { border-left-color: var(--accent); }
    .sug-card--oportunidad { border-left-color: var(--primary); }

    .sug-head {
      display: flex; justify-content: space-between; align-items: center;
      margin-bottom: 10px;
    }
    .sug-type {
      font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.9px;
      display: inline-flex; align-items: center; gap: 6px;
      padding: 4px 11px; border-radius: var(--r-pill);
    }
    .sug-type::before {
      content: ''; width: 7px; height: 7px; border-radius: 50%;
    }
    .sug-card--urgente .sug-type {
      background: var(--red-soft); color: var(--red-dark);
    }
    .sug-card--urgente .sug-type::before { background: var(--red); }
    .sug-card--mejora .sug-type {
      background: var(--accent-soft); color: var(--accent-dark);
    }
    .sug-card--mejora .sug-type::before { background: var(--accent); }
    .sug-card--oportunidad .sug-type {
      background: var(--primary-soft); color: var(--primary-dark);
    }
    .sug-card--oportunidad .sug-type::before { background: var(--primary); }
    [data-theme="dark"] .sug-card--urgente .sug-type { color: #FCA5A5; }
    [data-theme="dark"] .sug-card--mejora .sug-type { color: var(--accent-light); }
    [data-theme="dark"] .sug-card--oportunidad .sug-type { color: var(--primary-light); }

    .sug-close {
      width: 26px; height: 26px; border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      background: transparent; color: var(--text-muted); cursor: pointer;
      border: none; font-size: 14px; font-family: inherit;
      transition: var(--tr-fast);
    }
    .sug-close:hover { background: var(--bg-soft); color: var(--text-main); }

    .sug-title {
      font-size: 16px; font-weight: 800; color: var(--text-main);
      margin-bottom: 8px; line-height: 1.3;
    }
    .sug-context {
      font-size: 14px; color: var(--text-soft); line-height: 1.55;
      margin-bottom: 10px;
    }
    .sug-example {
      background: var(--bg-soft);
      border-radius: var(--r-sm);
      padding: 10px 13px;
      font-size: 13px; color: var(--text-main); line-height: 1.55;
      margin-bottom: 12px;
    }
    .sug-example-label {
      font-weight: 800; color: var(--text-muted); text-transform: uppercase;
      font-size: 10px; letter-spacing: 0.8px; margin-right: 7px;
    }
    .sug-action {
      font-size: 14px; color: var(--text-main); font-weight: 600;
      line-height: 1.5; margin-bottom: 14px;
      display: flex; align-items: flex-start; gap: 8px;
    }
    .sug-action::before { content: '→'; color: var(--accent); font-weight: 800; flex-shrink: 0; }

    .sug-actions { display: flex; gap: 8px; flex-wrap: wrap; }
    .sug-btn {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 9px 15px; border-radius: var(--r-sm);
      font-size: 13px; font-weight: 800;
      cursor: pointer; font-family: inherit;
      transition: var(--tr-fast);
      border: 1px solid var(--border-soft);
      background: var(--bg-panel); color: var(--text-soft);
    }
    .sug-btn i { font-size: 14px; }
    .sug-btn--apply {
      background: var(--accent); color: white; border-color: var(--accent);
      box-shadow: 0 2px 8px rgba(255,138,0,0.25);
    }
    .sug-btn--apply:hover { background: var(--accent-mid); transform: translateY(-1px); }
    .sug-btn--skip:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }

    /* Stagger de aparición — como si se estuviera escribiendo línea por línea */
    .context-card.feed-enter .context-card-head {
      opacity: 0;
      animation: ctx-stagger-fade 0.55s cubic-bezier(0.22, 1, 0.36, 1) 0.2s forwards;
    }
    .context-card.feed-enter .context-items > .context-item {
      opacity: 0;
      transform: translateX(-8px);
      animation: ctx-stagger-slide 0.55s cubic-bezier(0.22, 1, 0.36, 1) forwards;
    }
    .context-card.feed-enter .context-items > .context-item:nth-child(1) { animation-delay: 0.7s;  }
    .context-card.feed-enter .context-items > .context-item:nth-child(2) { animation-delay: 1.2s;  }
    .context-card.feed-enter .context-items > .context-item:nth-child(3) { animation-delay: 1.7s;  }
    .context-card.feed-enter .context-items > .context-item:nth-child(4) { animation-delay: 2.2s;  }
    .context-card.feed-enter .context-items > .context-item:nth-child(5) { animation-delay: 2.7s;  }
    .context-card.feed-enter .ctx-hint {
      opacity: 0;
      animation: ctx-stagger-fade 0.5s cubic-bezier(0.22, 1, 0.36, 1) 3.1s forwards;
    }
    @keyframes ctx-stagger-fade {
      to { opacity: 1; }
    }
    @keyframes ctx-stagger-slide {
      to { opacity: 1; transform: translateX(0); }
    }

    /* Context card (info del formulario) */
    .context-card {
      background: var(--bg-panel);
      border: 1.5px solid var(--border-soft);
      border-radius: var(--r-md);
      padding: 16px 18px;
      max-width: 520px;
      box-shadow: var(--shadow-sm);
    }
    [data-theme="dark"] .context-card { background: var(--card-bg); }
    .context-card-head {
      display: flex; align-items: center; gap: 8px;
      font-size: 11px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1px; color: var(--text-muted);
      margin-bottom: 12px;
    }
    .context-card-head i { color: var(--accent); font-size: 14px; }
    .context-items { display: flex; flex-direction: column; gap: 8px; }
    .context-item {
      display: flex; align-items: flex-start; gap: 12px;
      font-size: 14px; padding: 6px 0;
    }
    .context-item + .context-item { border-top: 1px solid var(--border-soft); padding-top: 10px; }
    .context-item-label { color: var(--text-muted); font-weight: 600; min-width: 72px; flex-shrink: 0; }
    .context-item-value { color: var(--text-main); font-weight: 700; flex: 1; }
    .context-edit {
      margin-top: 14px;
      display: inline-flex; align-items: center; gap: 6px;
      padding: 7px 14px;
      background: transparent; border: 1px solid var(--border-soft);
      border-radius: var(--r-sm);
      font-size: 13px; font-weight: 700; color: var(--text-soft);
      cursor: pointer; font-family: inherit;
      transition: var(--tr-fast);
    }
    .context-edit:hover { border-color: var(--accent); color: var(--accent); background: var(--accent-soft); }
    .context-edit i { font-size: 13px; }
    /* Contexto interactivo — click en línea = popover */
    .context-card { position: relative; }
    .ctx-hint {
      font-size: 12px; color: var(--text-muted);
      margin-top: 12px; padding-left: 2px;
      font-style: italic;
    }
    .context-item.ctx-line {
      cursor: pointer;
      margin: 0 -8px;
      padding: 10px 10px !important;
      border-radius: var(--r-sm);
      border: 1px solid transparent;
      transition: background 0.15s, border-color 0.15s;
      position: relative;
    }
    .context-item.ctx-line + .context-item.ctx-line { border-top: none; padding-top: 10px !important; }
    .context-item.ctx-line:hover {
      background: var(--bg-soft);
      border-color: var(--border-soft);
    }
    .ctx-line-hint {
      margin-left: auto;
      font-size: 12px; color: var(--text-muted);
      opacity: 0; transition: opacity 0.15s;
    }
    .ctx-line:hover .ctx-line-hint { opacity: 1; }

    /* Pulse cuando Pio invita a editar el contexto (señal de que es interactivo) */
    .context-card--pulsing {
      animation: ctx-card-pulse 2.0s ease-in-out infinite;
      border-color: rgba(255,138,0, 0.55);
    }
    @keyframes ctx-card-pulse {
      0%, 100% { box-shadow: 0 0 0 0 rgba(255,138,0, 0.32), var(--shadow-sm); }
      50%      { box-shadow: 0 0 0 10px rgba(255,138,0, 0), var(--shadow-sm); }
    }
    .context-card--pulsing .ctx-line-hint {
      opacity: 1;
      color: var(--accent);
      animation: ctx-hint-bob 1.4s ease-in-out infinite;
    }
    @keyframes ctx-hint-bob {
      0%, 100% { transform: translateX(0); }
      50%      { transform: translateX(-3px); }
    }
    .context-card--pulsing .ctx-hint {
      color: var(--accent);
      font-weight: 700;
      font-style: normal;
    }

    /* Popover flotante — fixed para no quedar atrapado en overflow del feed */
    .ctx-popover {
      position: fixed; z-index: 200;
      background: var(--bg-panel);
      border: 1px solid var(--border-mid);
      border-radius: var(--r-md);
      padding: 14px;
      box-shadow: var(--shadow-xl);
      min-width: 280px;
      max-width: 420px;
      animation: ctx-pop-in 0.18s ease-out;
    }
    [data-theme="dark"] .ctx-popover { background: var(--card-bg); }
    @keyframes ctx-pop-in {
      from { opacity: 0; transform: translateY(-4px) scale(0.97); }
      to   { opacity: 1; transform: translateY(0) scale(1); }
    }
    .ctx-pop-title {
      font-size: 11px; font-weight: 800; text-transform: uppercase;
      letter-spacing: 1px; color: var(--text-muted); margin-bottom: 10px;
    }
    .ctx-pop-grid {
      display: grid; grid-template-columns: 1fr 1fr; gap: 6px;
    }
    .ctx-pop-btn {
      display: block; width: 100%;
      padding: 9px 12px; border-radius: var(--r-sm);
      border: 1px solid var(--border-soft);
      background: var(--bg-soft); color: var(--text-main);
      font-family: inherit; font-size: 13px; font-weight: 600;
      cursor: pointer; text-align: left;
      transition: var(--tr-fast);
    }
    .ctx-pop-btn:hover {
      border-color: var(--accent); color: var(--accent); background: var(--accent-soft);
    }
    .ctx-pop-btn--active {
      background: var(--accent) !important; color: white !important; border-color: var(--accent) !important;
    }
    .ctx-pop-btn--wide {
      display: flex; align-items: center; justify-content: flex-start;
      padding: 12px 14px;
    }
    .ctx-pop-btn--wide i { font-size: 16px; }
    .ctx-pop-more {
      margin-top: 10px; width: 100%;
      padding: 8px;
      background: transparent;
      border: 1px dashed var(--border-mid);
      border-radius: var(--r-sm);
      color: var(--text-soft);
      font-size: 12px; font-weight: 700;
      cursor: pointer; font-family: inherit;
      transition: var(--tr-fast);
    }
    .ctx-pop-more:hover { border-color: var(--accent); color: var(--accent); }
    .ctx-pop-search {
      width: 100%; padding: 9px 12px; margin-bottom: 10px;
      border: 1.5px solid var(--border-soft); border-radius: var(--r-sm);
      background: var(--bg-main); color: var(--text-main);
      font-family: inherit; font-size: 13px; outline: none;
      transition: border-color 0.15s;
    }
    .ctx-pop-search:focus { border-color: var(--accent); }
    .ctx-pop-scroll {
      max-height: 260px; overflow-y: auto;
    }
    .ctx-pop-scroll::-webkit-scrollbar { width: 4px; }
    .ctx-pop-scroll::-webkit-scrollbar-thumb { background: var(--border-mid); border-radius: 4px; }

    /* Continue card (botón "Listo, seguimos") */
    .feed-continue-card {
      max-width: 340px;
    }
    .feed-continue-card .fic-btn {
      width: auto;
      display: inline-flex;
      padding: 11px 22px;
    }

    /* Flash de "Actualizado" */
    .ctx-flash {
      position: absolute; top: 4px; right: 10px;
      background: var(--green-soft); color: var(--green-dark);
      font-size: 10px; font-weight: 800;
      padding: 3px 10px; border-radius: var(--r-pill);
      text-transform: uppercase; letter-spacing: 0.6px;
      opacity: 0; transform: translateY(-4px);
      transition: opacity 0.25s, transform 0.25s;
      pointer-events: none;
    }
    [data-theme="dark"] .ctx-flash { color: #6EE7B7; }
    .ctx-flash.show { opacity: 1; transform: translateY(0); }
    .context-actions { display: flex; gap: 8px; margin-top: 14px; }
    .context-save {
      background: var(--accent) !important;
      color: white !important;
      border-color: var(--accent) !important;
    }
    .context-save:hover { background: var(--accent-mid) !important; }

    /* Checklist view */
    .check-progress {
      padding: 14px 16px;
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: var(--r-md);
      margin-bottom: 16px;
    }
    .checklist {
      display: flex; flex-direction: column; gap: 8px;
    }
    .check-item {
      display: flex; align-items: flex-start; gap: 12px;
      padding: 12px 14px;
      background: var(--bg-panel);
      border: 1px solid var(--border-soft);
      border-radius: var(--r-md);
      cursor: pointer;
      transition: var(--tr-fast);
    }
    .check-item:hover { border-color: var(--border-mid); }
    .check-item.done { background: var(--bg-soft); }
    .check-box {
      width: 22px; height: 22px; border-radius: var(--r-xs);
      border: 2px solid var(--border-mid);
      display: flex; align-items: center; justify-content: center;
      flex-shrink: 0;
      color: white; font-size: 12px;
      transition: var(--tr-fast);
    }
    .check-item.done .check-box {
      background: var(--accent); border-color: var(--accent);
    }
    .check-text { font-size: 14px; line-height: 1.5; color: var(--text-main); padding-top: 1px; }
    .check-item.done .check-text {
      text-decoration: line-through; color: var(--text-muted);
    }

    /* ─── Wisdom toast (mensaje sabio estilo Pio Glassmorphic) ─── */
    .wisdom-toast {
      position: fixed;
      top: 84px; right: 24px;
      width: 380px; max-width: calc(100vw - 48px);
      background: rgba(255, 255, 255, 0.85);
      backdrop-filter: blur(20px) saturate(180%);
      -webkit-backdrop-filter: blur(20px) saturate(180%);
      border: 1px solid color-mix(in srgb, var(--accent) 24%, rgba(0, 0, 0, 0.08));
      border-radius: var(--r-lg);
      padding: 18px;
      box-shadow: 0 16px 36px rgba(0, 0, 0, 0.06),
                  inset 0 1px 0 rgba(255, 255, 255, 0.6),
                  0 0 25px color-mix(in srgb, var(--accent) 10%, transparent);
      z-index: 250;
      /* Estado inicial: invisible, pequeño, ligeramente abajo/derecha */
      transform: translate(20px, 30px) scale(0.6) rotate(-3deg);
      opacity: 0;
      pointer-events: auto;
      font-family: 'Nunito', sans-serif;
      color: var(--text-main, #0F172A);
    }
    
    [data-theme="dark"] .wisdom-toast {
      background: color-mix(in srgb, var(--accent) 8%, rgba(15, 23, 42, 0.65));
      border: 1px solid color-mix(in srgb, var(--accent) 30%, rgba(255, 255, 255, 0.08));
      box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45),
                  inset 0 1px 0 rgba(255, 255, 255, 0.08),
                  0 0 30px color-mix(in srgb, var(--accent) 15%, transparent),
                  0 24px 56px -30px color-mix(in srgb, var(--accent) 60%, transparent);
      color: #FFF;
    }

    [data-theme="negro"] .wisdom-toast {
      background: color-mix(in srgb, var(--accent) 8%, rgba(0, 0, 0, 0.85));
      border: 1px solid color-mix(in srgb, var(--accent) 25%, rgba(255, 255, 255, 0.06));
      box-shadow: 0 24px 60px rgba(0, 0, 0, 0.65),
                  inset 0 1px 0 rgba(255, 255, 255, 0.06),
                  0 0 30px color-mix(in srgb, var(--accent) 15%, transparent),
                  0 24px 56px -30px color-mix(in srgb, var(--accent) 60%, transparent);
      color: #FFF;
    }

    [data-chat-theme] .wisdom-toast {
      background: color-mix(in srgb, var(--ws-chat-accent, var(--accent)) 10%, color-mix(in srgb, #000 23%, var(--ws-chat-feed-bg, #0F172A))) !important;
      border-color: rgba(255,255,255,0.08) !important;
      box-shadow:
        inset 0 1px 0 rgba(255,255,255,0.06),
        0 12px 26px -10px rgba(0,0,0,0.50),
        0 32px 64px -18px rgba(0,0,0,0.62),
        0 24px 56px -30px color-mix(in srgb, var(--ws-chat-accent, var(--accent)) 60%, transparent) !important;
    }

    /* Entrada satisfactoria: 3 fases — pop dramático, overshoot, settle.
       Acompañada de un glow del border que pulsa al entrar. */
    .wisdom-toast.show {
      animation:
        wisdom-pop 0.85s cubic-bezier(0.34, 1.56, 0.64, 1) forwards,
        wisdom-glow 1.4s ease-out 0.2s forwards;
    }
    @keyframes wisdom-pop {
      0% {
        transform: translate(20px, 30px) scale(0.6) rotate(-3deg);
        opacity: 0;
        filter: blur(4px);
      }
      40% {
        transform: translate(-4px, -6px) scale(1.06) rotate(1.5deg);
        opacity: 1;
        filter: blur(0);
      }
      62% {
        transform: translate(2px, 2px) scale(0.97) rotate(-0.5deg);
      }
      82% {
        transform: translate(0, -1px) scale(1.015) rotate(0.2deg);
      }
      100% {
        transform: translate(0, 0) scale(1) rotate(0);
        opacity: 1;
      }
    }
    @keyframes wisdom-glow {
      0%   { box-shadow: 0 16px 36px rgba(0,0,0,0.06), inset 0 1px 0 rgba(255,255,255,0.6), 0 0 0 0 color-mix(in srgb, var(--accent) 50%, transparent); }
      30%  { box-shadow: 0 16px 36px rgba(0,0,0,0.06), inset 0 1px 0 rgba(255,255,255,0.6), 0 0 28px 4px color-mix(in srgb, var(--accent) 45%, transparent); }
      100% { box-shadow: 0 16px 36px rgba(0,0,0,0.06), inset 0 1px 0 rgba(255,255,255,0.6), 0 0 25px 0 color-mix(in srgb, var(--accent) 10%, transparent); }
    }
    /* Avatar de Pio: pop con bounce + ligera rotación. Empieza después
       del wisdom-pop para sentirse encadenado. */
    .wisdom-toast.show .wisdom-avatar {
      animation: wisdom-avatar-pop 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) 0.18s both;
    }
    @keyframes wisdom-avatar-pop {
      0%   { transform: scale(0) rotate(-180deg); }
      55%  { transform: scale(1.18) rotate(12deg); }
      80%  { transform: scale(0.94) rotate(-4deg); }
      100% { transform: scale(1) rotate(0); }
    }
    /* Icono de la cita: bounce in con stagger después del avatar */
    .wisdom-toast.show .wisdom-quote i {
      display: inline-block;
      animation: wisdom-icon-bounce 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) 0.42s both;
    }
    @keyframes wisdom-icon-bounce {
      0%   { transform: scale(0) translateY(8px); opacity: 0; }
      55%  { transform: scale(1.22) translateY(-3px); opacity: 1; }
      100% { transform: scale(1) translateY(0); opacity: 1; }
    }
    /* Texto: fade-up sutil con stagger */
    .wisdom-toast.show .wisdom-quote,
    .wisdom-toast.show .wisdom-author {
      animation: wisdom-text-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;
    }
    .wisdom-toast.show .wisdom-quote  { animation-delay: 0.38s; }
    .wisdom-toast.show .wisdom-author { animation-delay: 0.52s; }
    @keyframes wisdom-text-in {
      from { opacity: 0; transform: translateY(6px); }
      to   { opacity: 1; transform: translateY(0); }
    }
    /* Cuando se cierra: salida suave con scale-down */
    .wisdom-toast:not(.show) {
      transition: transform 0.3s cubic-bezier(0.55, 0, 0.55, 1), opacity 0.25s ease;
      transform: translateY(-8px) scale(0.92);
      opacity: 0;
    }
    
    .wisdom-head {
      display: flex; align-items: center; gap: 12px;
      margin-bottom: 14px;
    }
    
    .wisdom-avatar {
      width: 38px; height: 38px; flex-shrink: 0;
      border-radius: 50%;
      background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 15%, transparent) 0%, color-mix(in srgb, var(--accent) 25%, transparent) 100%);
      border: 1.5px solid var(--accent, rgba(255, 138, 0, 0.4));
      display: flex; align-items: center; justify-content: center;
      box-shadow: 0 0 12px color-mix(in srgb, var(--accent) 20%, transparent);
    }
    [data-chat-theme] .wisdom-avatar {
      background: linear-gradient(135deg, var(--ws-chat-accent, var(--accent)), var(--ws-chat-accent-light, var(--accent))) !important;
      border-color: var(--ws-chat-accent, var(--accent)) !important;
    }
    .wisdom-avatar img { width: 80%; height: 80%; object-fit: contain; }
    
    .wisdom-meta { flex: 1; min-width: 0; }
    
    .wisdom-name {
      font-size: 14px; font-weight: 800; color: var(--text-main, #0F172A);
      display: flex; align-items: center; gap: 6px;
    }
    [data-theme="dark"] .wisdom-name {
      color: #FFF;
    }
    [data-theme="negro"] .wisdom-name {
      color: #FFF;
    }
    
    .wisdom-name::after {
      content: '';
      width: 7px; height: 7px; border-radius: 50%;
      background: #10B981;
      border: 1px solid rgba(255, 255, 255, 0.9);
      box-shadow: 0 0 8px #10B981;
    }
    [data-theme="dark"] .wisdom-name::after {
      border-color: rgba(30, 41, 59, 0.9);
    }
    [data-theme="negro"] .wisdom-name::after {
      border-color: rgba(0, 0, 0, 0.9);
    }
    
    .wisdom-time { 
      font-size: 11px; 
      color: var(--text-soft, #475569); 
      margin-top: 1px; 
    }
    [data-theme="dark"] .wisdom-time {
      color: rgba(255, 255, 255, 0.45);
    }
    [data-theme="negro"] .wisdom-time {
      color: rgba(255, 255, 255, 0.35);
    }
    
    .wisdom-close {
      background: rgba(15, 23, 42, 0.05); border: none;
      color: var(--text-soft, #475569); cursor: pointer;
      width: 26px; height: 26px; border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
    }
    [data-theme="dark"] .wisdom-close {
      background: rgba(255, 255, 255, 0.06);
      color: rgba(255, 255, 255, 0.5);
    }
    [data-theme="negro"] .wisdom-close {
      background: rgba(255, 255, 255, 0.04);
      color: rgba(255, 255, 255, 0.4);
    }
    .wisdom-close i { font-size: 13px; }
    .wisdom-close:hover {
      background: color-mix(in srgb, var(--accent) 15%, transparent);
      color: var(--accent);
      transform: scale(1.1) rotate(90deg);
    }
    [data-theme="dark"] .wisdom-close:hover {
      background: color-mix(in srgb, var(--accent) 25%, transparent);
      color: #FFF;
    }
    [data-theme="negro"] .wisdom-close:hover {
      background: color-mix(in srgb, var(--accent) 25%, transparent);
      color: #FFF;
    }
    
    .wisdom-quote {
      font-size: 15px; line-height: 1.55; color: var(--text-main, #0F172A);
      font-style: normal; /* QUITALE LA LETRA ITALICA */
      padding: 4px 0;
      display: flex;
      align-items: flex-start;
      gap: 10px;
      font-weight: 600;
    }
    [data-theme="dark"] .wisdom-quote {
      color: #F1F5F9;
    }
    [data-theme="negro"] .wisdom-quote {
      color: #F1F5F9;
    }
    
    .wisdom-quote i {
      color: var(--accent, #FF8A00);
      margin-top: 3px;
      font-size: 18px;
      flex-shrink: 0;
      text-shadow: 0 0 10px var(--accent-glow, rgba(255, 138, 0, 0.3));
    }
    [data-chat-theme] .wisdom-quote i {
      color: var(--ws-chat-accent, var(--accent)) !important;
      text-shadow: 0 0 10px color-mix(in srgb, var(--ws-chat-accent, var(--accent)) 30%, transparent) !important;
    }
    
    .wisdom-author {
      margin-top: 12px;
      font-size: 11px; color: var(--text-soft, #475569);
      font-weight: 700;
      letter-spacing: 0.9px;
      text-transform: uppercase;
      text-align: right;
    }
    [data-theme="dark"] .wisdom-author {
      color: rgba(255, 255, 255, 0.5);
    }
    [data-theme="negro"] .wisdom-author {
      color: rgba(255, 255, 255, 0.35);
    }
    [data-chat-theme] .wisdom-author {
      color: color-mix(in srgb, var(--ws-chat-accent, var(--accent)) 60%, var(--text-soft)) !important;
    }
    @media (max-width: 600px) {
      .wisdom-toast { top: 76px; right: 16px; left: 16px; width: auto; }
    }

    /* ─── Privacy badge (debajo del theme picker en el sidebar) ─── */
    .privacy-badge {
      padding: 8px 16px 14px;
      font-size: 11px; line-height: 1.45;
      color: var(--text-muted);
      text-align: left;
      display: flex; align-items: flex-start; gap: 6px;
    }
    .privacy-badge i { color: #10B981; font-size: 13px; flex-shrink: 0; margin-top: 1px; }
    .privacy-badge b { color: var(--text-soft); }

    /* ==========================================
       NUEVOS ESTILOS RESTAURANTE & CRM PRO
       ========================================== */
    .resto-ob-card {
      padding: 18px;
      background: rgba(30, 41, 59, 0.45);
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
      border: 1px solid rgba(255, 255, 255, 0.08);
      border-radius: 16px;
      margin: 12px 0;
      box-shadow: 0 8px 32px 0 rgba(0,0,0,0.3);
      display: flex;
      flex-direction: column;
      gap: 14px;
      animation: feedEnter 0.4s ease forwards;
      max-width: 480px;
      width: 100%;
    }
    /* Fila premium de cualquier caja de onboarding (platillos, bebidas,
       categorías, insumos, equipo). UNA sola fuente de verdad para que
       todas las cajas se vean idénticas — sin inconsistencias. */
    .resto-ob-row {
      padding: 16px;
      background: linear-gradient(152deg, rgba(255,255,255,0.052), rgba(255,255,255,0.012));
      border: 1px solid rgba(255,138,0,0.18);
      border-radius: var(--r-md);
      box-shadow: 0 6px 22px rgba(0,0,0,0.30);
      display: flex;
      flex-direction: column;
      gap: 12px;
    }
    /* Variante horizontal: misma caja premium pero en fila — para canales,
       donde cada opción es un toggle (checkbox + comisión). */
    .resto-ob-row--inline {
      flex-direction: row;
      align-items: center;
      justify-content: space-between;
      padding: 13px 15px;
      gap: 10px;
      cursor: pointer;
      transition: border-color 0.15s, background 0.15s;
    }
    .resto-ob-row--inline.active {
      border-color: rgba(255,138,0,0.55);
      background: linear-gradient(152deg, rgba(255,138,0,0.12), rgba(255,138,0,0.02));
    }

    .resto-ob-title {
      font-size: 14px;
      font-weight: 700;
      color: #F8FAFC;
      border-bottom: 1px solid rgba(255, 255, 255, 0.06);
      padding-bottom: 8px;
      margin-bottom: 4px;
      display: flex;
      align-items: center;
      gap: 8px;
    }
    .resto-ob-label {
      font-size: 11px;
      font-weight: 600;
      color: #94A3B8;
      text-transform: uppercase;
      letter-spacing: 0.5px;
    }
    .resto-ob-input {
      padding: 10px 12px;
      border-radius: 10px;
      border: 1px solid rgba(255, 255, 255, 0.12);
      background: rgba(15, 23, 42, 0.6);
      color: #FFF;
      font-family: 'Nunito', sans-serif;
      font-size: 14px;
      outline: none;
      transition: all 0.2s ease;
    }
    .resto-ob-input:focus {
      border-color: #FF8A00;
      box-shadow: 0 0 0 2px rgba(255, 138, 0, 0.2);
      background: rgba(15, 23, 42, 0.8);
    }
    .resto-ob-submit {
      padding: 12px;
      border-radius: 10px;
      border: none;
      background: linear-gradient(135deg, #FF8A00 0%, #FF5C00 100%);
      color: #FFF;
      font-weight: 700;
      font-size: 14px;
      font-family: 'Nunito', sans-serif;
      cursor: pointer;
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 8px;
      transition: all 0.2s ease;
    }
    .resto-ob-submit:hover:not(:disabled) {
      transform: translateY(-1px);
      box-shadow: 0 4px 12px rgba(255, 92, 0, 0.35);
    }
    .resto-ob-submit:active:not(:disabled) {
      transform: translateY(0);
    }
    .resto-ob-submit:disabled {
      background: rgba(255, 255, 255, 0.08);
      color: rgba(255, 255, 255, 0.35);
      cursor: not-allowed;
    }
    .resto-stepper-row {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 10px 12px;
      background: rgba(255, 255, 255, 0.02);
      border: 1px solid rgba(255, 255, 255, 0.05);
      border-radius: 12px;
      gap: 12px;
    }
    .resto-stepper-controls {
      display: flex;
      align-items: center;
      gap: 12px;
      background: rgba(0, 0, 0, 0.2);
      padding: 3px;
      border-radius: 8px;
      border: 1px solid rgba(255,255,255,0.05);
    }
    .resto-stepper-btn {
      width: 28px;
      height: 28px;
      border-radius: 6px;
      border: none;
      background: rgba(255, 255, 255, 0.06);
      color: #FFF;
      font-weight: 700;
      cursor: pointer;
      display: flex;
      align-items: center;
      justify-content: center;
      transition: all 0.15s ease;
    }
    .resto-stepper-btn:hover {
      background: rgba(255, 255, 255, 0.15);
      color: #FF8A00;
    }
    .resto-stepper-val {
      font-size: 14px;
      font-weight: 800;
      color: #FFF;
      min-width: 20px;
      text-align: center;
    }
    .resto-ob-pill {
      padding: 6px 12px;
      border-radius: 8px;
      border: 1px solid rgba(255, 255, 255, 0.08);
      background: rgba(255, 255, 255, 0.04);
      color: #E2E8F0;
      font-size: 13px;
      cursor: pointer;
      transition: all 0.2s ease;
      display: flex;
      align-items: center;
      gap: 6px;
      user-select: none;
    }
    .resto-ob-pill.active {
      background: rgba(255, 138, 0, 0.15);
      border-color: #FF8A00;
      color: #FF9F2E;
      font-weight: 600;
    }
    .resto-ob-pill:hover {
      background: rgba(255, 255, 255, 0.08);
      border-color: rgba(255, 255, 255, 0.15);
    }

    /* Estilos del CRM - Empleados & Canales */
    .resto-emp-grid {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
      gap: 16px;
      margin-top: 16px;
    }
    .resto-emp-card {
      background: rgba(255, 255, 255, 0.03);
      border: 1px solid rgba(255, 255, 255, 0.06);
      border-radius: 16px;
      padding: 16px;
      display: flex;
      flex-direction: column;
      gap: 12px;
      position: relative;
      transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    }
    .resto-emp-card:hover {
      transform: translateY(-3px);
      background: rgba(255, 255, 255, 0.05);
      border-color: rgba(255, 138, 0, 0.25);
      box-shadow: 0 10px 25px -5px rgba(0,0,0,0.3);
    }
    .resto-emp-header {
      display: flex;
      align-items: center;
      gap: 12px;
    }
    .resto-emp-avatar {
      width: 44px;
      height: 44px;
      border-radius: 12px;
      background: linear-gradient(135deg, rgba(255,138,0,0.2) 0%, rgba(255,92,0,0.2) 100%);
      border: 1px solid rgba(255,138,0,0.3);
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 20px;
    }
    .resto-emp-info {
      flex: 1;
      min-width: 0;
    }
    .resto-emp-name {
      font-size: 15px;
      font-weight: 700;
      color: #FFF;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .resto-emp-role {
      font-size: 12px;
      color: #FF8A00;
      font-weight: 600;
      letter-spacing: 0.3px;
    }
    .resto-emp-badge-status {
      padding: 3px 8px;
      border-radius: 6px;
      font-size: 11px;
      font-weight: 700;
      text-transform: uppercase;
    }
    .resto-emp-badge-status.active {
      background: rgba(16, 185, 129, 0.15);
      color: #10B981;
    }
    .resto-emp-metrics {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 10px;
      padding: 8px 12px;
      background: rgba(0, 0, 0, 0.15);
      border-radius: 12px;
      border: 1px solid rgba(255,255,255,0.03);
    }
    .resto-emp-metric-label {
      font-size: 11px;
      color: #64748B;
      margin-bottom: 2px;
    }
    .resto-emp-metric-val {
      font-size: 13px;
      font-weight: 700;
      color: #F1F5F9;
    }
    .resto-emp-delete {
      position: absolute;
      top: 14px;
      right: 14px;
      background: rgba(239, 68, 68, 0.1);
      border: none;
      color: #EF4444;
      width: 26px;
      height: 26px;
      border-radius: 6px;
      cursor: pointer;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 14px;
      transition: all 0.2s ease;
      opacity: 0;
    }
    .resto-emp-card:hover .resto-emp-delete {
      opacity: 1;
    }
    .resto-emp-delete:hover {
      background: rgba(239, 68, 68, 0.25);
      transform: scale(1.05);
    }
    .resto-emp-form-card {
      background: rgba(255, 255, 255, 0.02);
      border: 1px dashed rgba(255, 255, 255, 0.15);
      border-radius: 16px;
      padding: 20px;
      display: flex;
      flex-direction: column;
      gap: 14px;
      margin-top: 20px;
    }

    /* Estilos para el listado dinámico de menú en onboarding */
    .resto-dynamic-row {
      padding: 12px;
      background: rgba(255, 255, 255, 0.02);
      border-radius: 12px;
      border: 1px solid rgba(255, 255, 255, 0.05);
      display: flex;
      flex-direction: column;
      gap: 8px;
      animation: feedEnter 0.25s ease forwards;
    }
    .resto-add-row-btn {
      background: rgba(255, 255, 255, 0.03);
      border: 1px dashed rgba(255, 255, 255, 0.15);
      color: #E2E8F0;
      padding: 10px;
      border-radius: 10px;
      font-weight: 600;
      font-size: 13px;
      font-family: 'Nunito', sans-serif;
      cursor: pointer;
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 6px;
      transition: all 0.2s ease;
    }
    .resto-add-row-btn:hover {
      background: rgba(255, 138, 0, 0.05);
      border-color: #FF8A00;
      color: #FF8A00;
    }
    .resto-row-delete-btn {
      background: rgba(239, 68, 68, 0.1);
      border: 1px solid rgba(239, 68, 68, 0.15);
      color: #EF4444;
      border-radius: 10px;
      width: 36px;
      height: 36px;
      display: flex;
      align-items: center;
      justify-content: center;
      cursor: pointer;
      transition: all 0.2s ease;
      flex-shrink: 0;
    }
    .resto-row-delete-btn:hover {
      background: rgba(239, 68, 68, 0.25);
      border-color: #EF4444;
      transform: scale(1.05);
    }

    @keyframes feedEnter {
      from { opacity: 0; transform: translateY(8px); }
      to { opacity: 1; transform: translateY(0); }
    }

    /* Progressive drawing effect for dynamic lists (plates, drinks, custom categories) */
    .resto-ob-card .plate-row, 
    .resto-ob-card .drk-row,
    .resto-ob-card .resto-dynamic-row {
      opacity: 0;
      transform: translateY(12px) scale(0.98);
      animation: restoRowDraw 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
    }
    
    .resto-ob-card .resto-ob-submit {
      opacity: 0;
      animation: restoSubmitFade 0.3s ease forwards;
    }
    
    @keyframes restoRowDraw {
      to {
        opacity: 1;
        transform: translateY(0) scale(1);
      }
    }
    
    @keyframes restoSubmitFade {
      to {
        opacity: 1;
      }
    }

    /* ─── ONBOARDING REAL-TIME COMPILER & BUBBLES ───
       Edgar 2026-06-26: usa var(--accent) en vez de #FF8A00 hardcoded
       para que cambie de color con el tema de chat (verde, rosa, etc).
       Fallback al naranja Piofly si no hay accent definido. */
    .ob-compiler-card {
      background: linear-gradient(160deg, rgba(30, 41, 59, 0.45), rgba(15, 23, 42, 0.30));
      border: 1px solid color-mix(in srgb, var(--accent, #FF8A00) 18%, transparent);
      backdrop-filter: blur(20px);
      -webkit-backdrop-filter: blur(20px);
      border-radius: 14px;
      padding: 13px;
      display: flex;
      flex-direction: column;
      gap: 10px;
      position: relative;
      overflow: hidden;
      box-shadow: 0 6px 24px 0 rgba(0, 0, 0, 0.32);
      animation: pulseGlow 4s ease-in-out infinite;
    }

    .ob-compiler-header {
      display: flex;
      align-items: center;
      gap: 9px;
      padding-bottom: 9px;
      border-bottom: 1px solid rgba(255, 255, 255, 0.06);
    }

    .ob-compiler-spinner-ring {
      width: 20px;
      height: 20px;
      border: 2px solid color-mix(in srgb, var(--accent, #FF8A00) 14%, transparent);
      border-radius: 50%;
      border-top-color: var(--accent, #FF8A00);
      animation: rotation 1.2s linear infinite;
      flex-shrink: 0;
    }

    .ob-compiler-header-text {
      display: flex;
      flex-direction: column;
    }

    .ob-compiler-subtitle {
      font-size: 8px;
      font-weight: 800;
      color: var(--accent, #FF8A00);
      text-transform: uppercase;
      letter-spacing: 2px;
      line-height: 1;
      margin-bottom: 2px;
    }
    
    .ob-compiler-title {
      font-size: 13px;
      font-weight: 800;
      color: #FFFFFF;
      margin: 0;
      line-height: 1.2;
    }

    .ob-compiler-status-msg {
      font-size: 10px;
      color: #94A3B8;
      line-height: 1.4;
      margin: 0;
      font-style: italic;
    }

    .ob-compiler-bubble-container {
      display: flex;
      flex-wrap: wrap;
      gap: 6px;
      align-content: flex-start;
      min-height: 0;
    }

    .ob-compiler-bubble {
      padding: 5px 10px;
      font-size: 11px;
      font-weight: 600;
      border-radius: var(--r-pill);
      display: inline-flex;
      align-items: center;
      gap: 5px;
      max-width: 100%;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      box-shadow: 0 3px 9px rgba(0,0,0,0.18);
      animation: obBubblePop 0.45s cubic-bezier(0.34, 1.56, 0.64, 1) both;
      cursor: default;
      transition: all 0.2s ease;
    }
    
    .ob-compiler-bubble:hover {
      transform: translateY(-2px) scale(1.02);
      box-shadow: 0 6px 16px rgba(0,0,0,0.25);
    }
    
    /* Bubble Themes */
    .ob-bubble--accent {
      background: rgba(255, 138, 0, 0.06);
      border: 1px solid rgba(255, 138, 0, 0.3);
      color: #FFB35A;
    }
    .ob-bubble--category {
      background: rgba(234, 179, 8, 0.06);
      border: 1px solid rgba(234, 179, 8, 0.3);
      color: #FDE047;
    }
    .ob-bubble--item {
      background: rgba(59, 130, 246, 0.06);
      border: 1px solid rgba(59, 130, 246, 0.3);
      color: #93C5FD;
    }
    .ob-bubble--inventory {
      background: rgba(20, 184, 166, 0.06);
      border: 1px solid rgba(20, 184, 166, 0.3);
      color: #99F6E4;
    }
    .ob-bubble--logistic {
      background: rgba(139, 92, 246, 0.06);
      border: 1px solid rgba(139, 92, 246, 0.3);
      color: #C4B5FD;
    }
    .ob-bubble--insight {
      background: rgba(244, 63, 94, 0.06);
      border: 1px solid rgba(244, 63, 94, 0.3);
      color: #FDA4AF;
    }
    
    .ob-bubble-badge {
      font-size: 9px;
      font-weight: 800;
      padding: 2px 6px;
      border-radius: 10px;
      background: rgba(255,255,255,0.1);
      color: #FFFFFF;
      flex-shrink: 0;
    }
    
    .ob-compiler-footer {
      display: flex;
      justify-content: space-between;
      align-items: center;
      padding-top: 9px;
      border-top: 1px solid rgba(255, 255, 255, 0.06);
      font-size: 10px;
      color: #64748B;
    }
    
    .ob-compiler-pulse-dot {
      width: 8px;
      height: 8px;
      border-radius: 50%;
      background: #10B981;
      animation: pulse-dot 1.8s ease-in-out infinite;
    }

    @keyframes pulseGlow {
      0%, 100% {
        box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.3), 0 0 15px rgba(255, 138, 0, 0.08);
        border-color: rgba(255, 138, 0, 0.15);
      }
      50% {
        box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.3), 0 0 25px rgba(255, 138, 0, 0.25);
        border-color: rgba(255, 138, 0, 0.35);
      }
    }

    @keyframes obBubblePop {
      0% {
        transform: scale(0.6) translateY(15px);
        opacity: 0;
        filter: blur(3px);
      }
      70% {
        transform: scale(1.05) translateY(-2px);
        opacity: 0.9;
      }
      100% {
        transform: scale(1) translateY(0);
        opacity: 1;
        filter: blur(0);
      }
    }
    
    @keyframes rotation {
      0% { transform: rotate(0deg); }
      100% { transform: rotate(360deg); }
    }

    /* ═════════════════════════════════════════════════════════
       PREMIUM RESPONSIVE UX OVERRIDES & DESIGN SYSTEM (MÓVIL E IPAD)
       Fundamentado en HIG de Apple, Material 3, Stripe, Linear y Notion.
    ═════════════════════════════════════════════════════════ */

    /* ────────────────────────────────────────────────────────
       1. BREAKPOINT IPAD PORTRAIT (768px a 900px)
       - Sidebar Portfolio Compacto (Solo Iconos)
       - Workspace y Resumen Ejecutivo Visibles en Paralelo
       ──────────────────────────────────────────────────────── */
    @media (min-width: 768px) and (max-width: 900px) {
      .ideas-page {
        grid-template-columns: 72px 1fr 280px !important;
        height: calc(100vh - var(--header-h)) !important;
        height: calc(100dvh - var(--header-h)) !important;
      }
      
      /* Ocultar elementos drawers móviles y botones de pio-bar */
      .pio-bar { display: none !important; }
      .ws-mobile-tabs { display: none !important; }
      
      /* Portfolio lateral compactado a iconos */
      .portfolio {
        width: 72px !important;
        transform: none !important;
        position: static !important;
        display: flex !important;
      }
      .portfolio .pf-title-row .pf-title {
        display: none !important;
      }
      .portfolio .pf-count {
        font-size: 9px !important;
        padding: 1px 5px !important;
        margin: 0 auto !important;
      }
      .portfolio .pf-section-head {
        display: flex !important;
        flex-direction: column !important;
        align-items: center !important;
        gap: 6px !important;
        padding: 0 0 10px 0 !important;
      }
      .portfolio .pf-title-row {
        justify-content: center !important;
        width: 100% !important;
        margin-bottom: 4px !important;
      }
      .portfolio .pf-title-row i {
        font-size: 18px !important;
        margin: 0 !important;
        color: var(--sidebar-text-muted);
      }
      
      /* Botones redondos sin etiqueta de texto en portfolio compacto */
      .portfolio .pf-new-btn {
        font-size: 0 !important;
        width: 36px !important;
        height: 36px !important;
        padding: 0 !important;
        display: flex !important;
        align-items: center !important;
        justify-content: center !important;
        border-radius: 50% !important;
      }
      .portfolio .pf-new-btn i {
        font-size: 16px !important;
        margin: 0 !important;
      }
      
      /* Listado de items compacto: solo emoji visible, sin texto ni botón ⋯ */
      .portfolio .pfi-body,
      .portfolio .pfi-del,
      .portfolio .pfi-menu-btn,
      .portfolio .pf-archived,
      .portfolio .pf-deleted {
        display: none !important;
      }
      .portfolio .pf-item {
        justify-content: center !important;
        padding: 10px 0 !important;
        margin: 2px 6px !important;
        border-radius: 50% !important;
      }
      .portfolio .pf-item .pfi-emoji {
        margin: 0 !important;
        width: 38px !important;
        height: 38px !important;
        font-size: 16px !important;
      }
      .portfolio .pf-mini-empty {
        display: none !important;
      }
      
      /* Temas del chat en footer compacto */
      .portfolio .ws-themes-footer {
        padding: 10px 0 !important;
        display: flex !important;
        justify-content: center !important;
      }
      .portfolio .sys-themes-trigger {
        padding: 8px !important;
        justify-content: center !important;
        width: 36px !important;
        height: 36px !important;
        border-radius: 50% !important;
      }
      .portfolio .sys-themes-trigger-label {
        display: none !important;
      }

      /* Panel de resumen derecho siempre visible en iPad */
      .exec-panel {
        width: 280px !important;
        transform: none !important;
        position: static !important;
        display: flex !important;
        border-left: 1px solid var(--border-soft) !important;
      }
    }

    /* ────────────────────────────────────────────────────────
       2. BREAKPOINT IPAD LANDSCAPE (901px a 1024px)
       - Grid semi-colapsado balanceado
       ──────────────────────────────────────────────────────── */
    @media (min-width: 901px) and (max-width: 1024px) {
      .ideas-page {
        grid-template-columns: 220px 1fr 280px !important;
      }
      .portfolio {
        width: 220px !important;
      }
      .exec-panel {
        width: 280px !important;
      }
    }

    /* ────────────────────────────────────────────────────────
       3. MEJORAS DE CÓMODA MOVILIDAD (max-width: 960px)
       - Segmented Tabs móviles centradas en pio-bar
       - Drawers limitados a un max-width del 85% para elegancia (Slack style)
       - Fondo borroso translúcido
       ──────────────────────────────────────────────────────── */
    @media (max-width: 960px) {
      /* Drawers que no ocupan el 100% de la pantalla para ver el fondo */
      body[data-chat-theme] .portfolio,
      .portfolio {
        position: fixed !important;
        top: 0 !important;
        left: 0 !important;
        bottom: 0 !important;
        width: 290px !important;
        max-width: 85% !important;
        transition: bottom 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.42s cubic-bezier(0.16, 1, 0.3, 1) !important;
        box-shadow: 10px 0 30px rgba(0,0,0,0.15) !important;
        z-index: 300 !important;
      }
      body[data-chat-theme] .exec-panel,
      .exec-panel {
        position: fixed !important;
        top: 0 !important;
        right: 0 !important;
        bottom: 0 !important;
        width: 320px !important;
        max-width: 85% !important;
        transition: bottom 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.42s cubic-bezier(0.16, 1, 0.3, 1) !important;
        box-shadow: -10px 0 30px rgba(0,0,0,0.15) !important;
        z-index: 300 !important;
      }

      /* Empujes dinámicos cuando el menú general (bottom-nav) está activo */
      .ideas-page.with-bnav body[data-chat-theme] .portfolio,
      .ideas-page.with-bnav .portfolio,
      .ideas-page.with-bnav body[data-chat-theme] .exec-panel,
      .ideas-page.with-bnav .exec-panel {
        bottom: 68px !important;
      }
      
      /* Backdrop de alta calidad en Glassmorphism */
      .sidebar-overlay {
        background: rgba(15, 23, 42, 0.4) !important;
        backdrop-filter: blur(4px) !important;
        -webkit-backdrop-filter: blur(4px) !important;
      }
      
      /* Ocultar botones de drawers viejos y Pio avatar estático */
      .pio-bar .fb-left,
      .pio-bar .fb-right {
        display: none !important;
      }
      .pio-bar {
        justify-content: center !important;
        background: var(--bg-panel) !important;
        border-bottom: 1px solid var(--border-soft) !important;
        padding: 0 12px !important;
      }
      
      /* Tabs segmentados al estilo iOS / Stripe */
      .ws-mobile-tabs {
        display: flex !important;
        align-items: center;
        justify-content: center;
        gap: 2px;
        background: var(--bg-soft);
        padding: 3px;
        border-radius: var(--r-md);
        border: 1px solid var(--border-soft);
        margin: 0 auto;
        width: 100%;
        max-width: 310px;
      }
      .ws-m-tab {
        flex: 1;
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 6px;
        padding: 7px 10px;
        background: transparent;
        border: none;
        border-radius: calc(var(--r-md) - 2px);
        font-size: 13px;
        font-weight: 800;
        color: var(--text-soft);
        cursor: pointer;
        transition: background 0.2s, color 0.2s, box-shadow 0.2s;
        -webkit-tap-highlight-color: transparent;
      }
      .ws-m-tab i {
        font-size: 15px;
      }
      .ws-m-tab.active {
        background: var(--white) !important;
        color: var(--accent-dark) !important;
        box-shadow: var(--shadow-sm);
      }
      [data-theme="dark"] .ws-m-tab.active {
        background: var(--bg-panel) !important;
        color: var(--accent-light) !important;
      }
      
      /* ────────────────────────────────────────────────────────
         4. EXPERIENCIA COMPLETA DEL CRM MÓVIL (SYS PANEL)
         - Toolbar flotante inferior para secciones/chat
         - Navigation y Pio Chat reconvertidos a Bottom Sheets
         ──────────────────────────────────────────────────────── */
      
      /* Contenedor principal de CRM */
      #sys-panel {
        position: fixed;
        inset: 0;
        z-index: 2000 !important;
      }
      
      /* Backdrop oscuro borroso de CRM */
      .sys-nav-overlay {
        display: none;
        position: fixed;
        inset: 0;
        background: rgba(15, 23, 42, 0.5) !important;
        backdrop-filter: blur(4px) !important;
        -webkit-backdrop-filter: blur(4px) !important;
        z-index: 1399 !important;
        animation: modalOverlayIn 0.2s ease both;
      }
      
      /* Cajón de navegación CRM móvil (Bottom Sheet) */
      #sys-panel .sys-nav {
        position: fixed !important;
        bottom: 0 !important;
        left: 0 !important;
        right: 0 !important;
        height: 65vh !important;
        background: var(--bg-panel) !important;
        border-top-left-radius: 20px !important;
        border-top-right-radius: 20px !important;
        box-shadow: 0 -12px 35px rgba(0,0,0,0.3) !important;
        border-top: 1px solid var(--border-soft) !important;
        border-right: none !important;
        z-index: 1400 !important;
        transform: translateY(105%) !important;
        transition: transform 0.38s cubic-bezier(0.16, 1, 0.3, 1), visibility 0.38s !important;
        display: flex !important;
        flex-direction: column !important;
        padding: 24px 20px !important;
        overflow-y: auto !important;
        visibility: hidden !important;
        pointer-events: none !important;
      }
      #sys-panel.sys-nav-drawer-open .sys-nav {
        transform: translateY(0) !important;
        visibility: visible !important;
        pointer-events: all !important;
      }
      
      /* Cajón de diálogo con Pio móvil en CRM (Bottom Sheet) */
      #sys-panel .sys-chat {
        position: fixed !important;
        bottom: 0 !important;
        left: 0 !important;
        right: 0 !important;
        height: 75vh !important;
        background: var(--bg-panel) !important;
        border-top-left-radius: 20px !important;
        border-top-right-radius: 20px !important;
        box-shadow: 0 -12px 35px rgba(0,0,0,0.3) !important;
        border-top: 1px solid var(--border-soft) !important;
        border-left: none !important;
        z-index: 1400 !important;
        transform: translateY(105%) !important;
        transition: transform 0.38s cubic-bezier(0.16, 1, 0.3, 1), visibility 0.38s !important;
        display: flex !important;
        flex-direction: column !important;
        overflow: hidden !important;
        visibility: hidden !important;
        pointer-events: none !important;
      }
      #sys-panel.sys-chat-drawer-open .sys-chat {
        transform: translateY(0) !important;
        visibility: visible !important;
        pointer-events: all !important;
      }
      #sys-panel.sys-nav-drawer-open .sys-nav-overlay,
      #sys-panel.sys-chat-drawer-open .sys-nav-overlay {
        display: block !important;
      }
      
      /* Indicadores táctiles de arrastre (HIG handles) en la cabecera de drawers */
      #sys-panel .sys-nav::before,
      #sys-panel .sys-chat::before {
        content: '';
        width: 36px; height: 5px;
        background: var(--border-mid);
        border-radius: 3px;
        margin: -10px auto 16px;
        flex-shrink: 0;
        opacity: 0.7;
      }
      
      /* Toolbar flotante de CRM móvil (Stripe style) */
      .sys-mobile-toolbar {
        display: flex !important;
        position: fixed !important;
        bottom: 20px !important;
        left: 50% !important;
        transform: translateX(-50%) !important;
        height: 52px !important;
        background: rgba(15, 23, 42, 0.85) !important;
        backdrop-filter: blur(12px) !important;
        -webkit-backdrop-filter: blur(12px) !important;
        border: 1px solid rgba(255, 255, 255, 0.08) !important;
        border-radius: var(--r-xl) !important;
        padding: 0 6px !important;
        align-items: center !important;
        gap: 6px !important;
        box-shadow: 0 10px 32px rgba(0,0,0,0.35), 0 0 0 1px rgba(255, 255, 255, 0.04) !important;
        z-index: 1398 !important;
        transition: transform 0.25s ease, opacity 0.2s !important;
      }
      
      /* Botones estéticos dentro del Toolbar */
      .sys-tb-btn {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 8px;
        height: 40px;
        padding: 0 14px;
        border-radius: var(--r-lg);
        border: none;
        background: transparent;
        color: rgba(255,255,255,0.75);
        font-family: inherit;
        font-size: 13px;
        font-weight: 800;
        cursor: pointer;
        transition: background 0.15s, color 0.15s;
        -webkit-tap-highlight-color: transparent;
      }
      .sys-tb-btn:active {
        background: rgba(255,255,255,0.1);
        color: #FFFFFF;
      }
      .sys-tb-btn i {
        font-size: 16px;
      }
      .sys-tb-btn img {
        width: 20px;
        height: 20px;
        object-fit: contain;
      }
      .sys-tb-btn--chat {
        color: #FFB35A;
      }
      .sys-tb-divider {
        width: 1px;
        height: 20px;
        background: rgba(255,255,255,0.15);
      }
      
      /* Estilos para que el input del chat dentro del drawer no se oculte al escribir */
      #sys-panel .sys-chat-input-slot {
        padding-bottom: 24px !important;
      }
    }

/* ═══════════════════════════════════════════════════════════════════
   PULSO DASHBOARD (Edgar 2026-06-10) — matchear killer paid de Eleventa
   4 KPIs últimos 30 días + 3 charts SVG. Look profesional tipo Linear.
═══════════════════════════════════════════════════════════════════ */
.pulso-wrap {
  margin-bottom: 22px;
  font-family: 'Nunito', system-ui, sans-serif;
}
.pulso-head {
  margin-bottom: 14px;
  padding: 0 2px;
}
.pulso-head__title {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 17px;
  font-weight: 900;
  color: var(--text);
  letter-spacing: -.3px;
}
.pulso-head__title i {
  color: var(--accent, #FF8A00);
  font-size: 20px;
  animation: pulso-beat 1.4s ease-in-out infinite;
}
@keyframes pulso-beat {
  0%,100% { transform: scale(1); }
  50%     { transform: scale(1.15); }
}
.pulso-head__sub {
  font-size: 12.5px;
  color: var(--text-soft);
  margin-top: 3px;
}

/* ── KPIs ── */
.pulso-kpis {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px;
  margin-bottom: 18px;
}
.pulso-kpi {
  position: relative;
  padding: 16px 18px;
  background: linear-gradient(135deg, var(--bg, #FFF) 0%, var(--bg-soft, #F3F4F6) 100%);
  border: 1px solid color-mix(in srgb, var(--c, var(--accent)) 18%, transparent);
  border-radius: 14px;
  box-shadow:
    0 1px 0 rgba(255,255,255,.4) inset,
    0 4px 16px rgba(15,23,42,.06);
  overflow: hidden;
  transition: transform .15s, box-shadow .2s;
}
.pulso-kpi:hover {
  transform: translateY(-2px);
  box-shadow:
    0 1px 0 rgba(255,255,255,.4) inset,
    0 8px 24px rgba(15,23,42,.10);
}
.pulso-kpi::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: var(--c, var(--accent));
}
.pulso-kpi__head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 8px;
}
.pulso-kpi__lbl {
  font-size: 11.5px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .5px;
  color: var(--text-soft);
}
.pulso-kpi__icon {
  width: 32px; height: 32px;
  background: color-mix(in srgb, var(--c, var(--accent)) 12%, transparent);
  color: var(--c, var(--accent));
  border-radius: 9px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  flex-shrink: 0;
}
.pulso-kpi__val {
  font-size: 26px;
  font-weight: 900;
  color: var(--text);
  letter-spacing: -.5px;
  line-height: 1.05;
  margin-bottom: 6px;
}
.pulso-kpi__delta {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 11.5px;
  font-weight: 700;
  color: var(--text-soft);
}
.pulso-kpi__delta.is-up   { color: #10B981; }
.pulso-kpi__delta.is-down { color: #EF4444; }
.pulso-kpi__delta i { font-size: 12px; }

/* ── Charts ── */
.pulso-charts {
  display: grid;
  grid-template-columns: 1fr 1.4fr;
  gap: 14px;
  margin-bottom: 14px;
}
.pulso-chart {
  background: var(--bg, #FFF);
  border: 1px solid color-mix(in srgb, var(--text-soft) 10%, transparent);
  border-radius: 14px;
  padding: 16px 18px;
  box-shadow: 0 2px 8px rgba(15,23,42,.04);
}
.pulso-chart__title {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 12.5px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .4px;
  color: var(--text-soft);
  margin-bottom: 12px;
}
.pulso-chart__title i {
  color: var(--accent, #FF8A00);
  font-size: 15px;
}
.pulso-chart--wide { width: 100%; }

.pulso-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  padding: 30px;
  color: var(--text-soft);
  font-size: 12.5px;
}
.pulso-empty i { font-size: 28px; opacity: .5; }

/* ── Pie ── */
.pulso-pie {
  display: grid;
  grid-template-columns: 200px 1fr;
  gap: 16px;
  align-items: center;
}
.pulso-pie__svg { width: 100%; }
.pulso-legend {
  display: flex;
  flex-direction: column;
  gap: 7px;
}
.pulso-legend__item {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 12px;
  color: var(--text-soft);
}
.pulso-legend__item strong { color: var(--text); margin-left: auto; font-weight: 900; }
.pulso-legend__dot {
  width: 12px; height: 12px;
  border-radius: 4px;
}

/* ── Bar ── */
.pulso-bar-svg { width: 100%; height: auto; }

/* ── HBar (top productos) ── */
.pulso-hbar {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.pulso-hbar__row {
  display: grid;
  grid-template-columns: 30px 1fr auto;
  gap: 10px;
  align-items: center;
  padding: 6px 0;
}
.pulso-hbar__rank {
  font-size: 18px;
  text-align: center;
  line-height: 1;
}
.pulso-hbar__num {
  display: inline-flex;
  width: 22px; height: 22px;
  background: var(--bg-soft, #F3F4F6);
  border-radius: 50%;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 900;
  color: var(--text-soft);
}
.pulso-hbar__main { min-width: 0; }
.pulso-hbar__lbl {
  font-size: 13px;
  font-weight: 700;
  color: var(--text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin-bottom: 4px;
}
.pulso-hbar__bar {
  height: 6px;
  background: var(--bg-soft, #F3F4F6);
  border-radius: 3px;
  overflow: hidden;
}
.pulso-hbar__fill {
  height: 100%;
  background: linear-gradient(90deg, var(--accent, #FF8A00), #FFA94D);
  border-radius: 3px;
  transition: width .4s ease;
}
.pulso-hbar__val {
  font-size: 12.5px;
  font-weight: 900;
  color: var(--text);
  white-space: nowrap;
}

@media (max-width: 800px) {
  .pulso-charts { grid-template-columns: 1fr; }
  .pulso-pie { grid-template-columns: 1fr; }
}

/* ═══════════════════════════════════════════════════════════════════
   BARRA DE PROGRESO DEL ONBOARDING CRM (Edgar 2026-06-10)
   "que parezca que te lo preguntan y se va rellenando cuando le pican
    a ir al sistema". 6 pasos arriba de cada sección, clickeables.
═══════════════════════════════════════════════════════════════════ */
.pf-crm-bar {
  background: linear-gradient(135deg,
    color-mix(in srgb, var(--accent, #FF8A00) 9%, transparent) 0%,
    color-mix(in srgb, var(--accent, #FF8A00) 3%, transparent) 100%);
  border: 1px solid color-mix(in srgb, var(--accent, #FF8A00) 22%, transparent);
  border-radius: 14px;
  padding: 12px 16px;
  margin-bottom: 14px;
  font-family: 'Nunito', system-ui, sans-serif;
}
.pf-crm-bar__head {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 12px;
}
.pf-crm-bar__title {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 13.5px;
  color: var(--text, #FFF);
}
.pf-crm-bar__title i {
  color: var(--accent, #FF8A00);
  font-size: 16px;
}
.pf-crm-bar__title strong {
  font-weight: 900;
  letter-spacing: -.2px;
  font-size: 14px;
}

/* Edgar 2026-06-12: mascota Pio grande junto al header — "te presenta
   el sistema" tipo cinematic welcome. Float continuo + glow accent. */
.pf-crm-bar__mascot {
  position: relative;
  width: 38px;
  height: 38px;
  flex-shrink: 0;
  animation: pf-crm-mascot-float 3.4s ease-in-out infinite;
}
.pf-crm-bar__mascot > img {
  position: relative;
  z-index: 1;
  width: 100%;
  height: 100%;
  object-fit: contain;
  filter: drop-shadow(0 4px 10px rgba(255,138,0,.40));
}
.pf-crm-bar__mascot-glow {
  position: absolute;
  inset: -6px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255,138,0,.30), transparent 65%);
  animation: pf-crm-mascot-glow 2.6s ease-in-out infinite;
  z-index: 0;
}
@keyframes pf-crm-mascot-float {
  0%, 100% { transform: translateY(0) rotate(-2deg); }
  50%      { transform: translateY(-3px) rotate(2deg); }
}
@keyf/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-03 v3: SIDEBAR REDESIGN - ESTILO ANGRIGRAVITY / CLAUDE / NOTION
   Referencia captura: "Projects" es un label tipo etiqueta discreto
   (texto muted, mixed-case). Los ITEMS e iconos en folders dominan
   con capsule backgrounds de bordes redondeados y texto limpio.
   Reglas al final para ganar por especificidad; !important es intencional.
   ═══════════════════════════════════════════════════════════════════ */

/* 1. ESTRUCTURA Y FONDO GLASSMORPHIC */
.portfolio {
  background: rgba(18, 18, 22, 0.76) !important;
  backdrop-filter: blur(24px) !important;
  -webkit-backdrop-filter: blur(24px) !important;
  border-right: 1px solid rgba(255, 255, 255, 0.04) !important;
  box-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.01), 0 0 24px rgba(0, 0, 0, 0.2) !important;
  padding: 14px 10px !important;
}

/* Light mode fallback */
html:not([data-theme]) .portfolio {
  background: rgba(255, 255, 255, 0.85) !important;
  backdrop-filter: blur(24px) !important;
  -webkit-backdrop-filter: blur(24px) !important;
  border-right: 1px solid rgba(15, 23, 42, 0.06) !important;
  box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.01), 0 0 24px rgba(0, 0, 0, 0.05) !important;
}

/* Adaptación al Tema de Color del Chat */
body[data-chat-theme] .portfolio {
  background: color-mix(in srgb, var(--ws-chat-bubble-bg) 82%, transparent) !important;
  backdrop-filter: blur(24px) !important;
  -webkit-backdrop-filter: blur(24px) !important;
  border-right: 1px solid var(--ws-border) !important;
}

/* 2. ATAJO DE BÚSQUEDA (Ctrl K) Y ESTILOS DE ENFOQUE */
.pf-search {
  position: relative;
  margin-bottom: 12px;
}
.pf-search-shortcut {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  pointer-events: none;
  font-size: 9px;
  font-weight: 700;
  color: var(--sidebar-text-muted);
  background: rgba(255, 255, 255, 0.07);
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 4px;
  padding: 1.5px 5px;
  opacity: 0.7;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1);
  font-family: inherit;
  letter-spacing: 0.5px;
}
html:not([data-theme]) .pf-search-shortcut {
  background: rgba(15, 23, 42, 0.05);
  border-color: rgba(15, 23, 42, 0.1);
}
.pf-search-input:focus ~ .pf-search-shortcut {
  opacity: 0;
  transform: translateY(-50%) scale(0.85);
}
.portfolio .pf-search-input {
  background: rgba(255, 255, 255, 0.04) !important;
  border: 1px solid rgba(255, 255, 255, 0.08) !important;
  border-radius: 99px !important;
  padding: 0 54px 0 34px !important;
  height: 34px !important;
  font-size: 13px !important;
  color: var(--sidebar-text) !important;
  transition: all 0.22s cubic-bezier(0.32, 0.72, 0, 1) !important;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.01) !important;
}
.portfolio .pf-search-input:hover {
  background: rgba(255, 255, 255, 0.07) !important;
  border-color: rgba(255, 255, 255, 0.14) !important;
}
.portfolio .pf-search-input:focus {
  background: rgba(255, 255, 255, 0.08) !important;
  border-color: var(--accent) !important;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent) !important;
}
.portfolio .pf-search-icon {
  left: 12px !important;
  font-size: 13px !important;
  opacity: 0.6 !important;
}

/* 3. FILTROS EN BARRA DE HERRAMIENTAS */
.pf-toolbar {
  margin-bottom: 12px !important;
}
.pf-chips {
  gap: 6px !important;
  padding: 2px 0 !important;
}
.portfolio .pf-chip {
  height: 24px !important;
  padding: 0 9px !important;
  font-size: 11px !important;
  font-weight: 550 !important;
  background: transparent !important;
  border: 1px solid transparent !important;
  border-radius: 99px !important;
  color: var(--sidebar-text-muted) !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
}
.portfolio .pf-chip:hover {
  background: rgba(255, 255, 255, 0.04) !important;
  color: var(--sidebar-text) !important;
}
html:not([data-theme]) .portfolio .pf-chip:hover {
  background: rgba(15, 23, 42, 0.04) !important;
}
.portfolio .pf-chip--active {
  background: color-mix(in srgb, var(--accent) 10%, rgba(255, 255, 255, 0.02)) !important;
  color: var(--accent-light) !important;
  border-color: color-mix(in srgb, var(--accent) 22%, transparent) !important;
}
.portfolio .pf-chip-count {
  min-width: 14px !important;
  height: 14px !important;
  font-size: 8.5px !important;
  font-weight: 700 !important;
  background: rgba(255, 255, 255, 0.06) !important;
  color: var(--sidebar-text-muted) !important;
  padding: 0 4px !important;
  border-radius: 4px !important;
}
.portfolio .pf-chip--active .pf-chip-count {
  background: color-mix(in srgb, var(--accent) 24%, transparent) !important;
  color: var(--accent-light) !important;
}

/* 4. SECCIONES Y ENCABEZADOS */
.portfolio .pf-section {
  padding: 0 !important;
  margin-bottom: 8px !important;
  border-top: none !important;
}
.portfolio .pf-section + .pf-section {
  margin-top: 10px !important;
  border-top: none !important;
}
.portfolio .pf-section-row {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  padding: 4px 4px 6px !important;
}
.portfolio .pf-section-header {
  background: transparent !important;
  border: none !important;
  padding: 0 !important;
  font-size: 12.5px !important;
  font-weight: 600 !important;
  letter-spacing: -0.1px !important;
  text-transform: none !important;
  color: var(--sidebar-text-muted) !important;
  cursor: pointer;
  display: inline-flex !important;
  align-items: center !important;
  gap: 4px !important;
  opacity: 0.65;
  transition: opacity 0.2s cubic-bezier(0.32, 0.72, 0, 1);
}
.portfolio .pf-section-row:hover .pf-section-header {
  opacity: 0.95;
}
.portfolio .pf-section-actions {
  display: flex !important;
  align-items: center !important;
  gap: 6px !important;
}

/* Botones de acción del encabezado (sliders y newfolder) revelados en hover */
.portfolio .pf-section-sort-btn,
.portfolio .pf-newfolder-btn {
  background: transparent !important;
  border: none !important;
  color: var(--sidebar-text-muted) !important;
  cursor: pointer !important;
  padding: 4px !important;
  border-radius: 6px !important;
  font-size: 13px !important;
  opacity: 0 !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
  margin: 0 !important;
  width: 22px !important;
  height: 22px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}
.portfolio .pf-section-row:hover .pf-section-sort-btn,
.portfolio .pf-section-row:hover .pf-newfolder-btn {
  opacity: 0.65 !important;
}
.portfolio .pf-section-sort-btn:hover,
.portfolio .pf-newfolder-btn:hover {
  opacity: 1 !important;
  background: rgba(255, 255, 255, 0.08) !important;
  color: var(--sidebar-text) !important;
}

/* 5. CARPETAS (Proyectos) */
.portfolio .pf-group {
  margin: 0 !important;
}
.portfolio .pf-group + .pf-group {
  margin-top: 1px !important;
}
.portfolio .pf-group-header {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 5px 8px !important;
  border-radius: 8px !important;
  gap: 8px !important;
  min-height: 28px !important;
  text-transform: none !important;
  letter-spacing: -0.05px !important;
  font-size: 12.5px !important;
  font-weight: 550 !important;
  color: var(--sidebar-text-muted) !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
}
.portfolio .pf-group-header:hover {
  background: rgba(255, 255, 255, 0.04) !important;
  color: var(--sidebar-text) !important;
}
/* Ocultamos el caret de la carpeta de proyectos estilo Antigravity */
.portfolio .pf-group-caret {
  display: none !important;
}
.portfolio .pf-group-folder-icon {
  color: var(--sidebar-text-muted) !important;
  font-size: 13.5px !important;
  opacity: 0.75 !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
}
.portfolio .pf-group-label {
  color: var(--sidebar-text-soft) !important;
  font-weight: 500 !important;
  font-size: 13px !important;
  flex: 1 !important;
  padding: 0 !important;
}
.portfolio .pf-group-header:hover .pf-group-folder-icon {
  color: var(--sidebar-text) !important;
  opacity: 1 !important;
  transform: scale(1.05);
}
.portfolio .pf-group-header:hover .pf-group-label {
  color: var(--sidebar-text) !important;
}
.portfolio .pf-group-count {
  background: transparent !important;
  border: none !important;
  color: var(--sidebar-text-muted) !important;
  opacity: 0.4 !important;
  font-size: 10.5px !important;
  font-weight: 600 !important;
  padding: 0 !important;
  min-width: 0 !important;
}
/* Kebab menú de carpetas revelado en hover */
.portfolio .pf-group-menu-btn {
  opacity: 0 !important;
  background: transparent !important;
  border: none !important;
  width: 22px !important;
  height: 22px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 6px !important;
  color: var(--sidebar-text-muted) !important;
  font-size: 13px !important;
  margin: 0 !important;
  padding: 0 !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
}
.portfolio .pf-group-header:hover .pf-group-menu-btn {
  opacity: 0.65 !important;
}
.portfolio .pf-group-menu-btn:hover {
  opacity: 1 !important;
  background: rgba(255, 255, 255, 0.08) !important;
  color: var(--sidebar-text) !important;
}

/* 6. ELEMENTOS / CHATS (pf-item) */
.portfolio .pf-item {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  border-radius: 8px !important;
  padding: 6px 8px !important;
  margin: 1px 0 !important;
  min-height: 28px !important;
  gap: 8px !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
  position: relative;
}
.portfolio .pf-item:hover {
  background: rgba(255, 255, 255, 0.04) !important;
  color: var(--sidebar-text) !important;
}
.portfolio .pf-item:active {
  transform: scale(0.995);
  background: rgba(255, 255, 255, 0.06) !important;
}
/* Indentación de los items que viven dentro de una carpeta */
.portfolio .pf-group-list .pf-item {
  padding-left: 22px !important;
}
/* EMOJI DEL ITEM: fuera. Solo texto tipo Antigravity/Claude. */
.portfolio .pfi-emoji {
  display: none !important;
}
.portfolio .pfi-body {
  padding-left: 0 !important;
  flex: 1;
  min-width: 0;
}
.portfolio .pfi-title {
  color: var(--sidebar-text-soft) !important;
  font-weight: 400 !important;
  font-size: 13px !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  transition: color 0.2s ease;
}
.portfolio .pf-item:hover .pfi-title {
  color: var(--sidebar-text) !important;
}
/* Item Activo - Fondo sólido destacado sin bordes ni barra dura lateral */
.portfolio .pf-item--active,
.portfolio .pf-item--active:hover {
  background: rgba(255, 255, 255, 0.08) !important;
  box-shadow: none !important;
}
.portfolio .pf-item--active .pfi-title {
  color: #FFFFFF !important;
  font-weight: 500 !important;
}
/* Kebab menú de items: oculto por defecto, se desliza en hover */
.portfolio .pfi-menu-btn {
  opacity: 0 !important;
  background: transparent !important;
  border: none !important;
  width: 22px !important;
  height: 22px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 6px !important;
  color: var(--sidebar-text-muted) !important;
  font-size: 13px !important;
  margin: 0 !important;
  padding: 0 !important;
  transform: translateX(4px);
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
}
.portfolio .pf-item:hover .pfi-menu-btn {
  opacity: 0.65 !important;
  transform: translateX(0);
}
.portfolio .pfi-menu-btn:hover {
  opacity: 1 !important;
  background: rgba(255, 255, 255, 0.08) !important;
  color: var(--sidebar-text) !important;
}

/* 7. BOTONES PRINCIPALES DE CREACIÓN */
.portfolio .pf-section-head {
  padding: 6px 4px 10px !important;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
/* Botón Nueva Idea */
/* Botón Nueva Idea - Estilo Premium Glassmorphic */
.portfolio .pf-new-btn {
  width: 100% !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 8px !important;
  padding: 8px 16px !important;
  background: linear-gradient(135deg, color-mix(in srgb, var(--accent, #FF8A00) 14%, transparent), color-mix(in srgb, var(--accent, #FF8A00) 6%, transparent)) !important;
  color: var(--accent-light, #FFE0B2) !important;
  border: 1px solid color-mix(in srgb, var(--accent, #FF8A00) 24%, transparent) !important;
  border-radius: 8px !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  transition: all 0.22s cubic-bezier(0.2, 0.9, 0.3, 1.05) !important;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05) !important;
  cursor: pointer !important;
}
.portfolio .pf-new-btn i {
  color: var(--accent, #FF8A00) !important;
  font-weight: 700 !important;
}
.portfolio .pf-new-btn:hover {
  transform: translateY(-1px) scale(1.015);
  background: linear-gradient(135deg, color-mix(in srgb, var(--accent, #FF8A00) 20%, transparent), color-mix(in srgb, var(--accent, #FF8A00) 10%, transparent)) !important;
  color: #FFFFFF !important;
  border-color: color-mix(in srgb, var(--accent, #FF8A00) 40%, transparent) !important;
  box-shadow: 0 4px 14px color-mix(in srgb, var(--accent, #FF8A00) 18%, transparent),
              inset 0 1px 0 rgba(255, 255, 255, 0.1) !important;
}
.portfolio .pf-new-btn:active {
  transform: translateY(0) scale(0.985);
}
/* Botón Subir Negocio - Estilo Premium Glassmorphic */
.portfolio .pf-new-btn--neg {
  width: 100% !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 8px !important;
  padding: 8px 16px !important;
  background: rgba(255, 255, 255, 0.02) !important;
  color: var(--sidebar-text-soft, #94A3B8) !important;
  border: 1px solid rgba(255, 255, 255, 0.08) !important;
  border-radius: 8px !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  transition: all 0.22s cubic-bezier(0.2, 0.9, 0.3, 1.05) !important;
  box-shadow: none !important;
  cursor: pointer !important;
}
.portfolio .pf-new-btn--neg i {
  color: var(--sidebar-text-soft, #94A3B8) !important;
}
.portfolio .pf-new-btn--neg:hover {
  background: rgba(255, 255, 255, 0.06) !important;
  border-color: rgba(255, 255, 255, 0.15) !important;
  color: #FFFFFF !important;
  transform: translateY(-1px) scale(1.015) !important;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
}
.portfolio .pf-new-btn--neg:hover i {
  color: #FFFFFF !important;
}
.portfolio .pf-new-btn--neg:active {
  transform: translateY(0) scale(0.985) !important;
}

/* 8. SECCIONES COLAPSABLES */
.portfolio .pf-section-body {
  display: grid !important;
  grid-template-rows: 0fr !important;
  transition: grid-template-rows 0.32s cubic-bezier(0.2, 0.9, 0.3, 1.05),
              margin-top 0.32s cubic-bezier(0.2, 0.9, 0.3, 1.05) !important;
  margin-top: 0 !important;
  overflow: hidden;
}
.portfolio .pf-section-body > * { min-height: 0; overflow: hidden; }
.portfolio .pf-section--open .pf-section-body {
  grid-template-rows: 1fr !important;
  margin-top: 2px !important;
}

/* 9. PANEL DE TEMAS DEL CHAT (FOOTER) */
.portfolio .ws-themes-footer {
  padding: 8px 4px 8px !important;
  border-top: 1px solid rgba(255, 255, 255, 0.06) !important;
  margin-top: auto !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 2px !important;
}
.ws-themes-footer .sys-themes-trigger {
  width: 100% !important;
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 8px 12px !important;
  border-radius: 8px !important;
  background: transparent !important;
  border: 1px solid transparent !important;
  cursor: pointer !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
}
.ws-themes-footer .sys-themes-trigger:hover {
  background: rgba(255, 255, 255, 0.04) !important;
  border-color: rgba(255, 255, 255, 0.07) !important;
}
.ws-themes-footer .sys-themes-trigger:active {
  transform: translateY(1px) !important;
}
.ws-themes-footer .sys-themes-trigger i {
  font-size: 15px !important;
  color: var(--sidebar-text-muted, #94A3B8) !important;
  flex-shrink: 0 !important;
  transition: color 0.2s !important;
}
.ws-themes-footer .sys-themes-trigger:hover i {
  color: var(--sidebar-text, #fff) !important;
}
.ws-themes-footer .sys-themes-trigger-label {
  font-size: 12px !important;
  font-weight: 500 !important;
  letter-spacing: -0.05px !important;
  text-transform: none !important;
  color: var(--sidebar-text-muted, #94A3B8) !important;
}
.ws-themes-footer .sys-themes-trigger:hover .sys-themes-trigger-label {
  color: var(--sidebar-text, #fff) !important;
}
.ws-themes-footer .sys-themes-trigger-dot {
  width: 18px !important;
  height: 18px !important;
  border-radius: 50% !important;
  background: #64748B;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.18), 0 1px 3px rgba(0,0,0,0.25);
  flex-shrink: 0;
  transition: transform 0.15s, background 0.2s;
}
.ws-themes-footer .sys-themes-trigger:hover .sys-themes-trigger-dot {
  transform: scale(1.10) !important;
}
  50%     { transform: translateY(-4px)  scale(1.02) rotate(-2deg); }
  75%     { transform: translateY(-12px) scale(1.06) rotate(4deg);  }
}
.pf-crm-celebrate__title {
  font-size: 24px;
  font-weight: 900;
  letter-spacing: -.3px;
  margin-bottom: 10px;
  color: var(--text, #111827);
}
.pf-crm-celebrate--final .pf-crm-celebrate__title {
  font-size: 28px;
  background: linear-gradient(90deg, var(--accent, #FF8A00), #10B981);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}
.pf-crm-celebrate__sub {
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--text-soft);
  margin-bottom: 22px;
}
.pf-crm-celebrate__sub strong {
  color: var(--accent);
  font-weight: 800;
}
.pf-crm-celebrate__cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 14px 26px;
  background: var(--accent, #FF8A00);
  color: #FFF;
  border: none;
  border-radius: 12px;
  font-family: inherit;
  font-size: 15px;
  font-weight: 800;
  cursor: pointer;
  box-shadow: 0 6px 22px color-mix(in srgb, var(--accent) 45%, transparent);
  transition: transform .15s, box-shadow .2s;
}
.pf-crm-celebrate__cta:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 28px color-mix(in srgb, var(--accent) 55%, transparent);
}
.pf-crm-celebrate__cta:active { transform: scale(.97); }
.pf-crm-celebrate__cta i { font-size: 18px; }
.pf-crm-celebrate--final .pf-crm-celebrate__cta {
  background: linear-gradient(90deg, var(--accent), #10B981);
  padding: 16px 32px;
  font-size: 16px;
}
.pf-crm-celebrate__skip {
  display: block;
  width: 100%;
  margin-top: 12px;
  background: transparent;
  border: none;
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--text-soft);
  cursor: pointer;
  padding: 8px;
}
.pf-crm-celebrate__skip:hover { color: var(--text); }

/* ═══════════════════════════════════════════════════════════════════
   "LE ATIENDE" — pill estilo Eleventa, arriba de la pantalla de caja
   Cajero actual + negocio activo, anclado para pantallas compartidas.
═══════════════════════════════════════════════════════════════════ */
.pf-le-atiende {
  display:flex;
  align-items:center;
  gap:14px;
  padding:10px 16px;
  margin-bottom:14px;
  background:linear-gradient(135deg, color-mix(in srgb, var(--accent) 8%, transparent), color-mix(in srgb, var(--accent) 2%, transparent));
  border:1px solid color-mix(in srgb, var(--accent) 22%, transparent);
  border-radius:14px;
  font-family:'Nunito', system-ui, sans-serif;
}
.pf-le-atiende__icon {
  width:38px; height:38px;
  display:flex; align-items:center; justify-content:center;
  background:color-mix(in srgb, var(--accent) 18%, transparent);
  color:var(--accent);
  border-radius:50%;
  font-size:20px;
  flex-shrink:0;
}
.pf-le-atiende__body,
.pf-le-atiende__caja {
  display:flex; flex-direction:column; gap:1px; min-width:0;
}
.pf-le-atiende__label {
  font-size:11px;
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.5px;
  color:var(--text-soft);
  opacity:.7;
}
.pf-le-atiende__name {
  font-size:15px;
  font-weight:800;
  color:var(--text);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
  max-width:220px;
}
.pf-le-atiende__sep {
  width:1px; align-self:stretch;
  background:color-mix(in srgb, var(--text-soft) 18%, transparent);
  margin:4px 0;
}

/* Chip "Atendido por X" dentro de cada tarjeta de pedido */
.pf-cajero-chip {
  display:inline-flex;
  align-items:center;
  gap:5px;
  margin-top:8px;
  padding:3px 9px;
  background:color-mix(in srgb, var(--accent) 10%, transparent);
  color:var(--text-soft);
  border-radius:10px;
  font-size:11.5px;
  font-weight:500;
}
.pf-cajero-chip i { font-size:12px; opacity:.7; }
.pf-cajero-chip strong { color:var(--text); font-weight:700; }


/* ═══════════════════════════════════════════════
   LANGUAGE SELECTOR — dropdown del user
   Edgar 2026-06-26
═══════════════════════════════════════════════ */
.user-dropdown-lang {
  padding: 8px 12px 10px;
}
.user-dropdown-lang .udl-label {
  display: flex; align-items: center; gap: 8px;
  font-size: 11.5px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.8px;
  color: var(--text-soft);
  margin-bottom: 8px;
}
.user-dropdown-lang .udl-label i { font-size: 14px; opacity: 0.85; }
.user-dropdown-lang .udl-options {
  display: flex; gap: 6px;
}
.user-dropdown-lang .udl-opt {
  flex: 1;
  display: inline-flex; align-items: center; justify-content: center; gap: 5px;
  padding: 7px 8px;
  background: color-mix(in srgb, var(--text-soft) 8%, transparent);
  border: 1.5px solid transparent;
  border-radius: 9px;
  color: var(--text);
  font-family: inherit; font-size: 12.5px; font-weight: 700;
  cursor: pointer;
  transition: background 0.15s, border-color 0.15s, transform 0.12s;
}
.user-dropdown-lang .udl-opt:hover {
  background: color-mix(in srgb, var(--text-soft) 14%, transparent);
  transform: translateY(-1px);
}
.user-dropdown-lang .udl-opt.udl-opt--active {
  background: color-mix(in srgb, var(--accent) 18%, transparent);
  border-color: var(--accent);
  color: var(--accent);
}
.user-dropdown-lang .udl-opt span { font-size: 11px; letter-spacing: 0.4px; }

/* ═══════════════════════════════════════════════════════════════════
   SOLO TELÉFONO (≤768px): ocultar el botón "Temas del chat" del cajón
   lateral. En móvil el tema (modo + color) se controla desde
   Perfil → Ajustes (hogar oficial). Desktop y tablet (sidebar en íconos)
   lo conservan como acceso rápido. NO afecta el onboarding (flujo de
   chat en el centro, manejado por JS) — esto es puro CSS de un botón.
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
  .portfolio .ws-themes-footer { display: none !important; }
}

/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-03 v2: SIDEBAR estilo Grok/ChatGPT/Drive.
   Referencia captura: "Productos" / "Destacados" / "Recientes" son
   labels TIPO ETIQUETA discretos (texto muted pequeño, no clickeable
   visualmente, capitalization normal). Los ITEMS debajo son los que
   dominan visualmente — pill transparente por default; hover ilumina;
   activo un pelin mas. Sin circulos naranja en emojis. Sin contadores
   pill llamativos. Todo se funde con el fondo. Reglas al final para
   ganar por especificidad; !important es intencional.
   ═══════════════════════════════════════════════════════════════════ */

/* ── ITEMS: solo texto blanco, sin emoji, apretados y anchos ── */
.portfolio .pf-item {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 5px 6px !important;
  gap: 0 !important;
  margin: 0 !important;
  min-height: 0 !important;
}
@media (hover: hover) and (pointer: fine) {
  .portfolio .pf-item:hover { background: rgba(255,255,255,0.055) !important; }
}
.portfolio .pf-item:active { background: rgba(255,255,255,0.075) !important; }
.portfolio .pf-item--active,
.portfolio .pf-item--active:hover {
  background: rgba(255,255,255,0.085) !important;
  box-shadow: none !important;
}
/* EMOJI DEL ITEM: fuera. Solo texto tipo Grok/ChatGPT. */
.portfolio .pfi-emoji { display: none !important; }
.portfolio .pfi-body { padding-left: 0 !important; }
.portfolio .pfi-title {
  color: var(--sidebar-text) !important;
  font-weight: 400 !important;
  font-size: 13.5px !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}

/* ── SECTION HEADERS: solo label + caret opcional a la derecha ── */
/* Contenedor de fila que incluye header + sliders btn a la derecha.
   Edgar 2026-07-03: apretado — el label queda pegado al contenido, no
   flotando lejos arriba. */
.portfolio .pf-section-row {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 4px 6px 2px !important;
}
.portfolio .pf-section-header {
  flex: 1;
  min-width: 0;
  background: transparent !important;
  border: 1px solid transparent;
  border-radius: 6px;
  padding: 4px 8px !important;
  font-size: 12.5px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  color: var(--sidebar-text-muted) !important;
  cursor: pointer;
  display: inline-flex !important;
  align-items: center !important;
  gap: 4px !important;
  width: auto !important;
  align-self: flex-start;
  transition: background 0.15s, border-color 0.15s, color 0.15s;
}
.portfolio .pf-section-header:hover {
  background: rgba(255,255,255,0.04) !important;
  border-color: rgba(255,255,255,0.08);
  color: var(--sidebar-text) !important;
}
/* Ocultamos icono de seccion y contador. Solo label + caret. */
.portfolio .pf-section-icon,
.portfolio .pf-section-count { display: none !important; }
.portfolio .pf-section-label { flex: 0 0 auto !important; }
.portfolio .pf-section-caret {
  font-size: 9px !important;
  color: var(--sidebar-text-muted) !important;
  opacity: 0.65 !important;
  transition: transform 0.2s;
  transform: rotate(0deg);
}
.portfolio .pf-section--open .pf-section-caret { transform: rotate(90deg); }

/* Boton sliders (solo en Recientes) — icono discreto a la derecha */
.portfolio .pf-section-sort-btn {
  margin-left: auto;
  background: transparent;
  border: none;
  color: var(--sidebar-text-muted);
  opacity: 0.65;
  cursor: pointer;
  padding: 4px 6px;
  border-radius: 6px;
  font-size: 13px;
  transition: opacity 0.15s, background 0.15s, color 0.15s;
}
.portfolio .pf-section-sort-btn:hover {
  opacity: 1;
  background: rgba(255,255,255,0.05);
  color: var(--sidebar-text);
}

/* Espaciado entre secciones — apretado, sin border-top */
.portfolio .pf-section {
  margin-bottom: 0 !important;
  border-top: none !important;
}
.portfolio .pf-section + .pf-section {
  margin-top: 2px !important;
  border-top: none !important;
}

/* Slide animation robusta para colapsar/expandir Destacados/Recientes/
   Proyectos. Grid-template-rows 0fr <-> 1fr con transicion suave, cubic
   bezier con leve overshoot para feel premium (patron ChatGPT/Claude). */
.portfolio .pf-section-body {
  display: grid !important;
  grid-template-rows: 0fr !important;
  transition: grid-template-rows 0.32s cubic-bezier(0.2, 0.9, 0.3, 1.05),
              margin-top 0.32s cubic-bezier(0.2, 0.9, 0.3, 1.05) !important;
  margin-top: 0 !important;
  overflow: hidden;
}
.portfolio .pf-section-body > * { min-height: 0; overflow: hidden; }
.portfolio .pf-section--open .pf-section-body {
  grid-template-rows: 1fr !important;
  margin-top: 2px !important;
}

/* ── CARPETAS (dentro de "Proyectos"): mismo estilo item, sin border ─ */
.portfolio .pf-group {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  margin: 0 !important;
}
.portfolio .pf-group + .pf-group { margin-top: 0 !important; }
.portfolio .pf-group-header {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 5px 6px !important;
  gap: 8px !important;
}
.portfolio .pf-group-header:hover { background: rgba(255,255,255,0.055) !important; }
.portfolio .pf-group-folder-icon {
  color: var(--sidebar-text-muted) !important;
  font-size: 14px !important;
}
.portfolio .pf-group-caret {
  color: var(--sidebar-text-muted) !important;
  opacity: 0.55;
  font-size: 10px !important;
}
.portfolio .pf-group-label {
  color: var(--sidebar-text) !important;
  font-weight: 400 !important;
  font-size: 13.5px !important;
}
.portfolio .pf-group-header:hover .pf-group-folder-icon,
.portfolio .pf-group-header:hover .pf-group-label,
.portfolio .pf-group-header:hover .pf-group-caret {
  color: var(--sidebar-text) !important;
  opacity: 1;
}
.portfolio .pf-group-count {
  background: transparent !important;
  border: none !important;
  color: var(--sidebar-text-muted) !important;
  padding: 0 !important;
  min-width: 0 !important;
  opacity: 0.45;
  font-size: 11px !important;
  font-weight: 500 !important;
}
/* Boton ⋯ del header de carpeta: OCULTO por default, aparece en hover.
   Sin background/border rodeandolo. Patron Drive/ChatGPT. */
.portfolio .pf-group-menu-btn {
  opacity: 0 !important;
  background: transparent !important;
  border: none !important;
  transition: opacity 0.15s;
}
.portfolio .pf-group-header:hover .pf-group-menu-btn { opacity: 0.6 !important; }
.portfolio .pf-group-menu-btn:hover { opacity: 1 !important; background: rgba(255,255,255,0.06) !important; }
/* Boton ⋯ del item: mismo tratamiento */
.portfolio .pfi-menu-btn {
  opacity: 0 !important;
  background: transparent !important;
  border: none !important;
  transition: opacity 0.15s;
}
.portfolio .pf-item:hover .pfi-menu-btn { opacity: 0.6 !important; }
.portfolio .pfi-menu-btn:hover { opacity: 1 !important; background: rgba(255,255,255,0.06) !important; }

/* Contenedor del sidebar: mas ancho, menos margen lateral inutil */
.portfolio {
  padding-left: 6px !important;
  padding-right: 6px !important;
}

/* ── Sort popover (Recientes) ─────────────────────────────── */
.pf-sort-popover {
  min-width: 180px;
  padding: 6px !important;
}
.pf-sort-popover .pf-menu-item--active {
  background: rgba(255,255,255,0.06);
}
.pf-sort-popover .pf-menu-check {
  margin-left: auto;
  font-size: 12px;
  color: var(--accent);
}

/* ===================================================================
   RENAME MODAL PREMIUM OVERRIDES (Folder / Item Rename)
   =================================================================== */

#rename-modal.modal-overlay {
  background: rgba(9, 9, 11, 0.65) !important;
  backdrop-filter: blur(8px) !important;
  -webkit-backdrop-filter: blur(8px) !important;
}

#rename-modal .modal-box {
  background: rgba(24, 24, 27, 0.88) !important;
  backdrop-filter: blur(20px) !important;
  -webkit-backdrop-filter: blur(20px) !important;
  border: 1px solid rgba(255, 255, 255, 0.08) !important;
  border-top: 4px solid var(--accent, #FF8A00) !important;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45),
              inset 0 1px 0 rgba(255, 255, 255, 0.05) !important;
  border-radius: 16px !important;
  padding: 28px 24px !important;
  max-width: 380px !important;
  width: 90% !important;
}

/* Light theme fallback */
html:not([data-theme]) #rename-modal .modal-box {
  background: rgba(255, 255, 255, 0.95) !important;
  border: 1px solid rgba(0, 0, 0, 0.08) !important;
  border-top: 4px solid var(--accent, #FF8A00) !important;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.15) !important;
}

/* Modal Icon badge with glowing background */
#rename-modal .modal-icon--info {
  background: color-mix(in srgb, var(--accent, #FF8A00) 15%, transparent) !important;
  color: var(--accent, #FF8A00) !important;
  box-shadow: 0 0 0 6px color-mix(in srgb, var(--accent, #FF8A00) 8%, transparent) !important;
  width: 50px !important;
  height: 50px !important;
  border-radius: 50% !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  margin: 0 auto 16px !important;
}

#rename-modal .modal-title {
  font-size: 19px !important;
  font-weight: 700 !important;
  color: var(--text-main, #FFFFFF) !important;
  letter-spacing: -0.02em !important;
  margin-bottom: 8px !important;
}

/* Custom styled inputs */
#rename-modal .modal-input {
  background: rgba(255, 255, 255, 0.03) !important;
  border: 1px solid rgba(255, 255, 255, 0.08) !important;
  border-radius: 8px !important;
  color: var(--text-main, #FFFFFF) !important;
  padding: 10px 14px !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2) !important;
}
#rename-modal .modal-input:focus {
  background: rgba(255, 255, 255, 0.05) !important;
  border-color: var(--accent, #FF8A00) !important;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #FF8A00) 18%, transparent),
              inset 0 1px 2px rgba(0, 0, 0, 0.2) !important;
}

html:not([data-theme]) #rename-modal .modal-input {
  background: rgba(0, 0, 0, 0.02) !important;
  border-color: rgba(0, 0, 0, 0.1) !important;
  color: #000000 !important;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.05) !important;
}
html:not([data-theme]) #rename-modal .modal-input:focus {
  background: #FFFFFF !important;
  border-color: var(--accent, #FF8A00) !important;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #FF8A00) 18%, transparent) !important;
}

/* Action Buttons */
#rename-modal .modal-actions {
  display: flex !important;
  gap: 10px !important;
}
#rename-modal .modal-cancel,
#rename-modal .modal-confirm {
  flex: 1 !important;
  padding: 10px 16px !important;
  border: 1px solid transparent !important;
  font-size: 13.5px !important;
  font-weight: 600 !important;
  transition: all 0.22s cubic-bezier(0.32, 0.72, 0, 1) !important;
  cursor: pointer !important;
}

#rename-modal .modal-cancel {
  background: rgba(255, 255, 255, 0.04) !important;
  border: 1px solid rgba(255, 255, 255, 0.08) !important;
  color: var(--sidebar-text-soft, #D1D5DB) !important;
  border-radius: 99px !important;
}
#rename-modal .modal-cancel:hover {
  background: rgba(255, 255, 255, 0.08) !important;
  border-color: rgba(255, 255, 255, 0.15) !important;
  color: #FFFFFF !important;
  transform: translateY(-1px) !important;
}
#rename-modal .modal-cancel:active {
  transform: translateY(0) !important;
}

html:not([data-theme]) #rename-modal .modal-cancel {
  background: #F3F4F6 !important;
  border-color: #E5E7EB !important;
  color: #374151 !important;
}
html:not([data-theme]) #rename-modal .modal-cancel:hover {
  background: #E5E7EB !important;
  color: #111827 !important;
}

#rename-modal .modal-confirm--primary {
  background: linear-gradient(135deg, var(--accent, #FF8A00), var(--accent-mid, #E67A00)) !important;
  color: #FFFFFF !important;
  border-radius: 99px !important;
  box-shadow: 0 4px 12px color-mix(in srgb, var(--accent, #FF8A00) 24%, transparent) !important;
}
#rename-modal .modal-confirm--primary:hover {
  background: linear-gradient(135deg, var(--accent-mid, #E67A00), var(--accent, #FF8A00)) !important;
  transform: translateY(-1.5px) scale(1.02) !important;
  box-shadow: 0 6px 18px color-mix(in srgb, var(--accent, #FF8A00) 32%, transparent) !important;
}
#rename-modal .modal-confirm--primary:active {
  transform: translateY(0) scale(0.98) !important;
}

/* ===================================================================
   CLAUDE SIDEBAR LAYOUT & ANIMATIONS (Search, Collapse, Contrast)
   =================================================================== */

/* Cabecera estilo Claude */
.portfolio .pf-header {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  padding: 8px 10px 14px !important;
  border-bottom: none !important;
}
.portfolio .pf-header-title {
  font-family: 'Outfit', 'Inter', system-ui, sans-serif !important;
  font-size: 11px !important;
  font-weight: 800 !important;
  letter-spacing: 1.1px !important;
  color: var(--sidebar-text-soft, #94A3B8) !important;
  text-transform: uppercase !important;
}
.portfolio .pf-header-actions {
  display: flex !important;
  align-items: center !important;
  gap: 4px !important;
}
.portfolio .pf-header-btn {
  background: transparent !important;
  border: none !important;
  color: var(--sidebar-text-muted, #94A3B8) !important;
  width: 28px !important;
  height: 28px !important;
  border-radius: 6px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  cursor: pointer !important;
  font-size: 15px !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
}
.portfolio .pf-header-btn:hover {
  background: rgba(255, 255, 255, 0.06) !important;
  color: var(--sidebar-text, #FFFFFF) !important;
}
.portfolio .pf-header-btn:active {
  transform: scale(0.95);
}

/* Edgar 2026-07-04: (1) quitar la línea horizontal bajo OPERACIÓN — y también
   bajo RESUMEN, para que ambos headers queden idénticos. (2) Igualar la altura:
   los botones (28px) estiraban el header de OPERACIÓN por encima del de RESUMEN
   (solo texto ~15px). El margen negativo colapsa esa altura extra sin achicar el
   área de clic de los botones. Funciona en tema base y en temas de color. */
.portfolio .pf-header,
body[data-chat-theme] .portfolio .pf-header,
.exec-panel .ep-header,
body[data-chat-theme] .exec-panel .ep-header { border-bottom: none !important; }
.portfolio .pf-header-btn { margin-top: -6px !important; margin-bottom: -6px !important; }

/* Buscador colapsable por defecto */
.portfolio .pf-search {
  height: 0 !important;
  opacity: 0 !important;
  margin-bottom: 0 !important;
  overflow: hidden !important;
  pointer-events: none !important;
  transition: all 0.26s cubic-bezier(0.32, 0.72, 0, 1) !important;
}
/* Cuando se añade la clase visible al portfolio */
.portfolio.pf-search--visible .pf-search {
  height: 34px !important;
  opacity: 1 !important;
  margin-bottom: 12px !important;
  pointer-events: all !important;
  overflow: visible !important;
}

/* Edgar 2026-07-04: ESTA era la línea real bajo OPERACIÓN. Con el buscador
   colapsado, el .pf-toolbar seguía dejando su border-bottom + padding + margin
   → se veía como una raya y añadía altura. Colapsarlo por completo cuando el
   buscador NO está visible (se restaura al abrir la búsqueda). */
.portfolio:not(.pf-search--visible) .pf-toolbar {
  padding: 0 !important;
  border-bottom: none !important;
  margin-bottom: 14px !important; /* sin línea ni padding, pero con aire para "Mis Ideas" */
}

/* Colapso del Sidebar en Desktop Grid (Se convierte a Dock de 60px) */
@media (min-width: 961px) {
  .ideas-page {
    transition: grid-template-columns 0.32s cubic-bezier(0.32, 0.72, 0, 1) !important;
  }
  .ideas-page.sidebar-collapsed {
    grid-template-columns: 60px 1fr 312px !important;
  }
  .ideas-page.sidebar-collapsed .portfolio {
    width: 60px !important;
    min-width: 60px !important;
    max-width: 60px !important;
    padding: 0 !important;
    margin: 0 !important;
    opacity: 1 !important;
    pointer-events: all !important;
  }
  .ideas-page.sidebar-collapsed .header {
    left: 60px !important;
    transition: left 0.32s cubic-bezier(0.32, 0.72, 0, 1) !important;
  }
  .ideas-page:not(.sidebar-collapsed) .header {
    transition: left 0.32s cubic-bezier(0.32, 0.72, 0, 1) !important;
  }
}

/* Ocultar pf-scroll cuando está colapsado y mostrar pf-mini-rail */
.portfolio .pf-mini-rail {
  display: none !important;
  flex-direction: column !important;
  justify-content: space-between !important;
  align-items: center !important;
  height: 100% !important;
  padding: 16px 0 !important;
  box-sizing: border-box !important;
  opacity: 0;
  transition: opacity 0.22s ease !important;
}
.sidebar-collapsed .portfolio .pf-scroll {
  display: none !important;
}
.sidebar-collapsed .portfolio .pf-mini-rail {
  display: flex !important;
  opacity: 1 !important;
}

.pf-mini-rail-top,
.pf-mini-rail-bottom {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  gap: 16px !important;
}

/* Botones circulares del Mini Rail (estilo ChatGPT) */
.portfolio .pf-mini-btn {
  background: transparent !important;
  border: none !important;
  color: var(--sidebar-text-muted, #94A3B8) !important;
  width: 38px !important;
  height: 38px !important;
  border-radius: 99px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  cursor: pointer !important;
  font-size: 17px !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
}
.portfolio .pf-mini-btn:hover {
  background: rgba(255, 255, 255, 0.06) !important;
  color: #FFFFFF !important;
  transform: scale(1.05);
}
.portfolio .pf-mini-btn:active {
  transform: scale(0.95);
}


/* Estilos de Contraste e Iconos Brillantes estilo Claude */
.portfolio .pf-group-folder-icon,
.portfolio .pf-item i,
.portfolio .pf-group-menu-btn i,
.portfolio .pfi-menu-btn i {
  color: #FFFFFF !important;
  opacity: 0.9 !important;
  font-weight: 700 !important;
}
.portfolio .pf-group-label,
.portfolio .pfi-title {
  color: var(--sidebar-text-soft, #94A3B8) !important;
  opacity: 0.75 !important;
  font-size: 13.5px !important;
  font-weight: 500 !important;
  transition: all 0.15s ease !important;
}

/* Hover ilumina el texto */
.portfolio .pf-item:hover .pfi-title,
.portfolio .pf-group-header:hover .pf-group-label {
  color: #FFFFFF !important;
  opacity: 1 !important;
}

/* Activo destaca al máximo */
.portfolio .pf-item--active .pfi-title {
  color: #FFFFFF !important;
  opacity: 1 !important;
  font-weight: 600 !important;
}

/* Espaciado del listado */
.portfolio .pf-item {
  padding: 6px 10px !important;
}
.portfolio .pf-group-header {
  padding: 6px 10px !important;
}

/* Rediseño Premium de Cabeceras de Sección (Mis ideas / Mis negocios) */
.portfolio .pf-title-row {
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  margin-top: 8px !important;
  margin-bottom: 8px !important;
  padding: 0 6px !important;
  position: relative !important;
  gap: 4px !important;
}
/* Primera sección (Mis Ideas): sin margen superior — el header de "Operación" ya da el espacio */
.portfolio #pf-section-ideas > .pf-section-head > .pf-title-row:first-child {
  margin-top: 0 !important;
}
.portfolio .pf-title {
  font-family: 'Outfit', 'Inter', system-ui, sans-serif !important;
  font-size: 11.5px !important;
  font-weight: 700 !important;
  text-transform: none !important;
  letter-spacing: 0.03em !important;
  color: var(--sidebar-text-soft, #94A3B8) !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  opacity: 0.75 !important;
  transition: opacity 0.2s ease !important;
}
.portfolio .pf-title i {
  color: var(--accent, #FF8A00) !important;
  font-size: 13px !important;
  opacity: 0.85 !important;
}
.portfolio .pf-count {
  font-size: 10px !important;
  font-weight: 600 !important;
  color: var(--sidebar-text-muted, #94A3B8) !important;
  background: rgba(255, 255, 255, 0.05) !important;
  padding: 1px 5px !important;
  border-radius: 99px !important;
  margin-left: 4px !important;
  transition: all 0.2s ease !important;
}

/* Botones rápidos en cabecera (+ y nueva carpeta) */
.portfolio .pf-section-add-btn,
.portfolio .pf-newfolder-btn {
  background: transparent !important;
  border: none !important;
  color: var(--sidebar-text-muted, #94A3B8) !important;
  cursor: pointer !important;
  width: 22px !important;
  height: 22px !important;
  border-radius: 4px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  font-size: 13px !important;
  opacity: 0 !important;
  transition: all 0.2s cubic-bezier(0.2, 0.9, 0.3, 1.05) !important;
  margin: 0 !important;
  padding: 0 !important;
}
.portfolio .pf-newfolder-btn {
  margin-left: 2px !important;
}
.portfolio .pf-section-add-btn {
  margin-left: auto !important;
}
.portfolio .pf-title-row:hover .pf-section-add-btn,
.portfolio .pf-title-row:hover .pf-newfolder-btn {
  opacity: 0.6 !important;
}
.portfolio .pf-section-add-btn:hover,
.portfolio .pf-newfolder-btn:hover {
  opacity: 1 !important;
  background: rgba(255, 255, 255, 0.08) !important;
  color: #FFFFFF !important;
}

/* Ajuste de Espaciado Estilo Claude (Apretar "Operación" / "Proyectos" hacia el botón Nueva Idea) */
.portfolio .pf-list {
  padding-top: 0px !important;
}

/* Línea Divisoria Gris entre Mis Ideas y Mis Negocios */
.portfolio #pf-section-neg {
  border-top: 1px solid rgba(255, 255, 255, 0.08) !important;
  margin-top: 18px !important;
  padding-top: 14px !important;
}
body[data-chat-theme] .portfolio #pf-section-neg {
  border-top: 1px solid var(--ws-border) !important;
}

/* Edgar 2026-07-04: Ocultar botón de colapsar barra lateral en pantallas móviles y tablets (<= 960px) */
@media (max-width: 960px) {
  .portfolio #pf-btn-collapse {
    display: none !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════
   BOTÓN PAPELERA EN FOOTER DEL SIDEBAR
   Edgar 2026-07-04: Eliminados ya no está en los chips del toolbar.
   Ahora vive discretamente en el footer, con el mismo estilo que
   el botón de "Temas del chat" pero con icono de papelera.
   Toggle: un click activa la vista Eliminados, otro regresa a todo.
   ═══════════════════════════════════════════════════════════════════ */
.pf-trash-footer-btn {
  width: 100% !important;
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 8px 12px !important;
  border-radius: 8px !important;
  background: transparent !important;
  border: 1px solid transparent !important;
  cursor: pointer !important;
  transition: all 0.2s cubic-bezier(0.32, 0.72, 0, 1) !important;
  margin-bottom: 6px !important;
  color: var(--sidebar-text-muted, #94A3B8) !important;
  font-family: inherit !important;
  font-size: 12px !important;
  font-weight: 500 !important;
}
.pf-trash-footer-btn i {
  font-size: 15px !important;
  color: var(--sidebar-text-muted, #94A3B8) !important;
  flex-shrink: 0 !important;
  transition: color 0.2s !important;
}
.pf-trash-footer-btn:hover {
  background: rgba(255, 255, 255, 0.04) !important;
  border-color: rgba(255, 255, 255, 0.07) !important;
  color: var(--sidebar-text, #fff) !important;
}
.pf-trash-footer-btn:hover i {
  color: var(--sidebar-text, #fff) !important;
}
.pf-trash-footer-count {
  margin-left: auto !important;
  font-size: 10px !important;
  font-weight: 700 !important;
  color: var(--sidebar-text-muted, #94A3B8) !important;
  background: rgba(255, 255, 255, 0.06) !important;
  padding: 1px 5px !important;
  border-radius: 99px !important;
  min-width: 16px !important;
  text-align: center !important;
}
/* Estado activo (viendo eliminados) */
.pf-trash-footer-btn--active {
  background: rgba(239, 68, 68, 0.08) !important;
  border-color: rgba(239, 68, 68, 0.18) !important;
  color: #f87171 !important;
}
.pf-trash-footer-btn--active i {
  color: #f87171 !important;
}
.pf-trash-footer-btn--active .pf-trash-footer-count {
  background: rgba(239, 68, 68, 0.15) !important;
  color: #f87171 !important;
}

/* ═══════════════════════════════════════════════════════════════════
   FIX BUG COLAPSO SIDEBAR DESKTOP: Elementos sangran por arriba/abajo
   durante la transición de ancho. La causa es que `.portfolio` tiene
   overflow:hidden pero los hijos (.pf-header, .ws-themes-footer) no
   respetan ese clip durante la animación de grid-template-columns.
   Solución: forzar overflow:hidden en el propio .portfolio colapsado
   y durante la transición, y ocultar explícitamente pf-scroll y footer
   con clip. La transición de opacidad/visibility suaviza el cambio.
   ═══════════════════════════════════════════════════════════════════ */
@media (min-width: 961px) {
  /* Durante el colapso, el contenido del pf-scroll debe desaparecer
     progresivamente con clip para que no se vea flotando */
  .ideas-page.sidebar-collapsed .portfolio .pf-scroll,
  .ideas-page.sidebar-collapsed .portfolio .ws-themes-footer {
    visibility: hidden !important;
    opacity: 0 !important;
    pointer-events: none !important;
  }
  /* El portfolio colapsado también necesita overflow:hidden para evitar
     que el contenido del header/footer sobresalga durante la transición */
  .ideas-page.sidebar-collapsed .portfolio {
    overflow: hidden !important;
  }
}





/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-04: 2 fixes tras revisar captura con antigravity.
   1) Quitar linea divisoria entre Mis Ideas y Mis Negocios (border-top
      del pf-section-neg agregado en 94dd83f). Edgar la tacho con rojo:
      no la queria.
   2) Apretar padding del footer (Eliminadas + Temas del chat) — en
      desktop los botones se caian muy abajo por padding vertical
      excesivo (8px arriba+abajo + gap + margin-bottom del trash btn).
      Ahora los dos botones vienen pegados uno con otro, y pegados
      al fondo del sidebar.
   ═══════════════════════════════════════════════════════════════════ */
/* 1. FIX: quitar la linea divisoria antes de Mis Negocios */
.portfolio #pf-section-neg {
  border-top: none !important;
  margin-top: 6px !important;
  padding-top: 0 !important;
}
body[data-chat-theme] .portfolio #pf-section-neg {
  border-top: none !important;
}

/* 2. FIX: footer del sidebar — botones apretados sin espacio extra */
.portfolio .ws-themes-footer {
  padding: 4px 4px 6px !important;
  gap: 0 !important;
}
.portfolio .pf-trash-footer-btn {
  padding: 6px 12px !important;
  margin-bottom: 0 !important;
}
.portfolio .ws-themes-footer .sys-themes-trigger {
  padding: 6px 12px !important;
}

/* Edgar 2026-07-04 v2: 2 fixes tras revisar de nuevo la captura.
   1) Linea arriba de "Mis Ideas" = border-bottom del pf-header
      ("OPERACIÓN"). Removido.
   2) "Eliminadas" y "Temas del chat" se veian encajados en un mismo
      bloque outline. Culprit: sys-themes-trigger tenia background y
      border pill. Quitado — ahora se ve como 2 filas independientes,
      igual que los items del sidebar. */
.portfolio .pf-header {
  border-bottom: none !important;
}
.portfolio .ws-themes-footer .sys-themes-trigger,
body[data-chat-theme] .portfolio .ws-themes-footer .sys-themes-trigger {
  background: transparent !important;
  border: 1px solid transparent !important;
}
.portfolio .ws-themes-footer .sys-themes-trigger:hover,
body[data-chat-theme] .portfolio .ws-themes-footer .sys-themes-trigger:hover {
  background: rgba(255,255,255,0.04) !important;
  border-color: rgba(255,255,255,0.07) !important;
}

/* Edgar 2026-07-04 v3: el user sigue viendo la linea y el pill porque
   chat-theme tiene reglas !important muy especificas (body[data-chat-theme]
   .pf-header + .ws-themes-footer). Aumento especificidad con body prefix
   y ganeo por escritura tardia + specificity boost. Ademas separo
   "Eliminadas" de "Temas del chat" con margin-top al sys-themes-trigger
   para que se lea como 2 filas distintas, no como un bloque agrupado. */

/* Edgar 2026-07-04 v4: REVERT del kill. El pf-header (OPERACION) tiene
   que empatar pixel-a-pixel con el ep-header (RESUMEN) — ambos son los
   headers de sus respectivos sidebars. El user comparo ambos y noto que
   el RESUMEN si tiene border-bottom y OPERACION no, se veian discordes.
   Restauro con los mismos valores exactos del ep-header:
   - padding 18px 20px 14px en normal, 20px 24px en chat-theme
   - border-bottom 1px solid var(--border-soft) / var(--ws-border)
   - background/backdrop-filter identicos en chat-theme */
body .portfolio .pf-header,
html body .portfolio .pf-header {
  border-bottom: 1px solid var(--border-soft) !important;
  padding: 18px 20px 14px !important;
}
body[data-chat-theme] .portfolio .pf-header {
  border-bottom: 1px solid var(--ws-border) !important;
  padding: 20px 24px !important;
  background: rgba(255, 255, 255, 0.01) !important;
  backdrop-filter: blur(12px) !important;
  -webkit-backdrop-filter: blur(12px) !important;
}

/* 2. Footer container: sin border-top en ningun modo, sin padding grande */
body .portfolio .ws-themes-footer,
body[data-chat-theme] .portfolio .ws-themes-footer,
html body .portfolio .ws-themes-footer {
  border-top: none !important;
  padding: 4px 4px 6px !important;
  background: transparent !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* 3. "Eliminadas" y "Temas del chat" como filas independientes (sin pill) */
body .portfolio .ws-themes-footer .sys-themes-trigger,
body[data-chat-theme] .portfolio .ws-themes-footer .sys-themes-trigger,
html body .portfolio .ws-themes-footer .sys-themes-trigger {
  background: transparent !important;
  border: 1px solid transparent !important;
  border-radius: 8px !important;
  padding: 6px 12px !important;
  margin-top: 8px !important;
}
body .portfolio .ws-themes-footer .sys-themes-trigger:hover,
body[data-chat-theme] .portfolio .ws-themes-footer .sys-themes-trigger:hover {
  background: rgba(255,255,255,0.04) !important;
  border-color: rgba(255,255,255,0.07) !important;
}

/* 4. Trash btn tambien fila plana, alineado con el de themes */
body .portfolio .pf-trash-footer-btn,
body[data-chat-theme] .portfolio .pf-trash-footer-btn {
  background: transparent !important;
  border: 1px solid transparent !important;
  padding: 6px 12px !important;
  margin: 0 !important;
}
body .portfolio .pf-trash-footer-btn:hover,
body[data-chat-theme] .portfolio .pf-trash-footer-btn:hover {
  background: rgba(255,255,255,0.04) !important;
  border-color: rgba(255,255,255,0.07) !important;
}

/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-06: Long-press estilo iOS en mobile.
   Ocultamos el boton ... y usamos mantener-pulsado sobre el item o
   el header de carpeta para abrir el menu. En desktop se sigue viendo
   el ... normal (mas rapido con mouse).
   Feedback visual: escala 0.98 mientras se detecta el press.
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 768px), (hover: none) and (pointer: coarse) {
  /* Botones ... ocultos en touch — el user mantiene pulsado en su lugar */
  .portfolio .pfi-menu-btn,
  .portfolio .pf-group-menu-btn {
    display: none !important;
  }
  /* Feedback visual del long-press: escala levemente hacia abajo */
  .pf-item.is-long-pressing,
  .pf-group-header.is-long-pressing {
    transform: scale(0.98);
    transition: transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
    background: rgba(255,255,255,0.075) !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-06 v3: FIX text selection nativo iOS + popover flotante
   pequeno con animacion spring premium (NO bottom sheet — Edgar dijo
   que estorbaba). Solo el fix del user-select se aplica global mobile;
   el resto del look sigue igual al desktop.
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 768px), (hover: none) and (pointer: coarse) {
  /* Prevenir el copiar-texto de iOS al hacer long-press. */
  .portfolio .pf-item,
  .portfolio .pf-group-header,
  .portfolio .pf-item *,
  .portfolio .pf-group-header * {
    -webkit-user-select: none !important;
    -moz-user-select: none !important;
    user-select: none !important;
    -webkit-touch-callout: none !important;
    -webkit-tap-highlight-color: transparent !important;
  }

  /* Backdrop invisible que solo captura el tap para cerrar el menu.
     Sin fondo tinted — no queremos oscurecer nada. */
  .pf-menu-backdrop {
    position: fixed;
    inset: 0;
    background: transparent;
    z-index: 9998;
  }
}

/* Animacion spring premium tipo Apple (aplica en TODOS los devices) — el
   menu popover aparece con scale + fade y un ligero overshoot. */
.pf-menu {
  animation: pf-menu-spring-in 0.32s cubic-bezier(0.34, 1.56, 0.64, 1) both;
  /* transform-origin lo setea JS inline segun donde caiga el menu.
     Fallback 'top left' para menu que aparece a la derecha del boton. */
  transform-origin: top left;
}
@keyframes pf-menu-spring-in {
  from { transform: scale(0.86); opacity: 0; }
  60%  { transform: scale(1.02); opacity: 1; }
  to   { transform: scale(1);    opacity: 1; }
}

/* Edgar 2026-07-06: iconos del menu contextual en BLANCO — excepto
   Eliminar (danger) que queda rojo. */
.pf-menu-item > i {
  color: #FFFFFF !important;
}
.pf-menu-item--danger > i {
  color: #F87171 !important;
}
.pf-menu-item--danger:hover > i {
  color: #FCA5A5 !important;
}

/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-06: animaciones fav add/remove.
   Cuando toggleFavorite marca el item con pf-item--fav-added, hace un
   pop-in con scale + fade. Cuando se remueve fav, pf-item--fav-removing
   hace fade + shrink. La seccion Destacados nace con
   pf-section--just-created (slide-down expand) y desaparece con
   pf-section--closing (slide-up collapse). Todo con spring/apple easing.
   ═══════════════════════════════════════════════════════════════════ */

/* Item nuevo en Destacados: pop-in tipo Apple */
.pf-item.pf-item--fav-added {
  animation: pf-fav-item-pop-in 0.55s cubic-bezier(0.34, 1.72, 0.64, 1) both;
  transform-origin: left center;
}
@keyframes pf-fav-item-pop-in {
  0%   { opacity: 0; transform: translateX(-14px) scale(0.85); }
  55%  { opacity: 1; transform: translateX(0)     scale(1.05); }
  75%  { transform: translateX(0) scale(0.98); }
  100% { opacity: 1; transform: translateX(0)     scale(1); }
}

/* Item que se va de Destacados: fade + shrink lateral */
.pf-item.pf-item--fav-removing {
  animation: pf-fav-item-leave 0.30s cubic-bezier(0.4, 0, 0.2, 1) both;
  pointer-events: none;
}
@keyframes pf-fav-item-leave {
  0%   { opacity: 1; transform: translateX(0) scale(1);        max-height: 60px; }
  100% { opacity: 0; transform: translateX(-18px) scale(0.90); max-height: 0; padding-top: 0; padding-bottom: 0; margin: 0; }
}

/* Seccion Destacados naciendo: slide down + fade + border-glow tenue */
.pf-section.pf-section--just-created {
  animation: pf-section-birth 0.6s cubic-bezier(0.32, 1.24, 0.6, 1) both;
  transform-origin: top left;
  overflow: hidden;
}
@keyframes pf-section-birth {
  0%   { opacity: 0; max-height: 0;    transform: translateY(-6px) scale(0.98); }
  30%  { opacity: 1; }
  100% { opacity: 1; max-height: 600px; transform: translateY(0) scale(1); }
}

/* Seccion Destacados cerrandose: slide up + fade */
.pf-section.pf-section--closing {
  animation: pf-section-close 0.32s cubic-bezier(0.4, 0, 0.2, 1) both;
  transform-origin: top left;
  overflow: hidden;
  pointer-events: none;
}
@keyframes pf-section-close {
  0%   { opacity: 1; max-height: 400px; transform: translateY(0) scale(1); }
  100% { opacity: 0; max-height: 0;     transform: translateY(-6px) scale(0.98); }
}

/* Feedback micro en la estrella del titulo mientras se activa */
.pf-item .pfi-fav-mark {
  transition: transform 0.24s cubic-bezier(0.34, 1.72, 0.64, 1), opacity 0.2s;
}
.pf-item.pf-item--fav-added .pfi-fav-mark {
  animation: pf-star-pulse 0.7s cubic-bezier(0.34, 1.72, 0.64, 1) both;
}
@keyframes pf-star-pulse {
  0%   { transform: scale(0.4) rotate(-25deg); opacity: 0; }
  55%  { transform: scale(1.3) rotate(15deg);  opacity: 1; }
  100% { transform: scale(1)   rotate(0);      opacity: 1; }
}

/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-06: Desktop only — mover el logo Piofly del header
   central al pf-header del sidebar (donde decia OPERACION). Se elimina
   el texto OPERACION en desktop. En mobile todo queda igual.
   Breakpoint desktop = >=961px (mismo que sidebar-collapsed usa).
   ═══════════════════════════════════════════════════════════════════ */
/* Por default en mobile: solo se ve el titulo, el brand nuevo esta oculto */
.pf-header-brand {
  display: none;
  align-items: center;
  gap: 8px;
  text-decoration: none;
  color: inherit;
  transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.pf-header-brand:hover { transform: translateY(-1px); }
.pf-header-brand-img {
  height: 26px;
  width: auto;
  object-fit: contain;
  display: block;
}
.pf-header-brand-wordmark {
  font-family: "Nunito", sans-serif;
  font-size: 18px;
  font-weight: 800;
  letter-spacing: -0.4px;
  line-height: 1;
  display: inline-flex;
}
.pf-header-brand-wordmark span:first-child { color: var(--text-main, #F1F5F9); }
.pf-header-brand-wordmark span:last-child { color: #FF8A00; }

@media (min-width: 961px) {
  /* En desktop: ocultar el logo del header central */
  .header .header-logo { display: none !important; }
  /* Mostrar el brand nuevo dentro del pf-header */
  .pf-header .pf-header-brand { display: inline-flex !important; }
  /* Ocultar el texto OPERACION que ya no queremos ver */
  .pf-header .pf-header-title { display: none !important; }
}

/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-06: Desktop only.
   - .header-inner queda position:relative para anclar la nav.
   - .header-nav absolutamente centrada al viewport (queda fija donde
     estaba, no se corre cuando el logo desaparece).
   - .header-active-title aparece donde estaba el logo con el titulo
     del active idea/negocio (patron ChatGPT). En mobile queda oculto.
   ═══════════════════════════════════════════════════════════════════ */
.header-active-title {
  display: none;
  align-items: center;
  gap: 4px;
  max-width: 340px;
  padding: 0;
  background: transparent;
  border: none;
  color: var(--text-main, #F1F5F9);
  font-family: "Nunito", sans-serif;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: -0.2px;
  line-height: 1.25;
  animation: header-active-title-in 0.32s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}
.header-active-title-text {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 300px;
}
.header-active-title-menu-btn {
  background: transparent;
  border: none;
  color: var(--text-muted, rgba(255,255,255,0.55));
  cursor: pointer;
  padding: 4px 6px;
  border-radius: 8px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  opacity: 0.7;
  transition: opacity 0.2s, background 0.2s, color 0.2s;
}
.header-active-title-menu-btn:hover {
  opacity: 1;
  background: rgba(255,255,255,0.06);
  color: var(--text-main, #F1F5F9);
}
.header-active-title-menu-btn i { font-size: 16px; }
/* Cuando el menu se abre desde el header, ocultamos las opciones que
   Edgar no quiere: cambiar icono, cambiar color. */
.pf-menu--from-header [data-action="changeIcon"],
.pf-menu--from-header [data-action="changeColor"],
.pf-menu--from-header [data-picker="icon"],
.pf-menu--from-header [data-picker="color"] {
  display: none !important;
}
@keyframes header-active-title-in {
  from { opacity: 0; transform: translateY(-4px) scale(0.96); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
@media (min-width: 961px) {
  /* Grid de 3 columnas: [izq] [centro fijo] [der]. Asi la nav queda
     centrada al viewport y NO pisa el header-right. */
  .header .header-inner {
    display: grid !important;
    grid-template-columns: 1fr auto 1fr !important;
    align-items: center !important;
    gap: 16px !important;
  }
  .header .header-logo { justify-self: start; }
  .header-active-title { justify-self: start; }
  .header .header-nav {
    grid-column: 2 !important;
    justify-self: center !important;
    margin: 0 !important;
  }
  .header .header-right {
    grid-column: 3 !important;
    justify-self: end !important;
  }
  /* Mostrar el titulo del active donde estaba el logo, cuando exista */
  .header-active-title:not([hidden]) { display: inline-block !important; }
}

/* Edgar 2026-07-06: icono pin de la seccion Fijados (favoritos).
   Chincheta discreta gris con el mismo tamano que el caret. */
.portfolio .pf-section-icon--pin {
  font-size: 12px !important;
  color: var(--sidebar-text-muted, rgba(255,255,255,0.55)) !important;
  opacity: 0.75;
  margin-right: 2px;
  transition: opacity 0.2s, color 0.2s;
}
.portfolio .pf-section-row:hover .pf-section-icon--pin {
  opacity: 1;
  color: var(--sidebar-text, #F1F5F9) !important;
}

/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-06: menu contextual compacto + submenu lateral estilo
   Claude para "Mover a carpeta".
   ═══════════════════════════════════════════════════════════════════ */
.pf-menu {
  min-width: 180px !important;
  padding: 4px !important;
}
.pf-menu-item {
  padding: 7px 10px !important;
  font-size: 13px !important;
  gap: 8px !important;
  border-radius: 7px !important;
}
.pf-menu-item i:not(.pf-menu-item-chev):not(.pf-menu-check) {
  font-size: 14px !important;
  opacity: 0.9;
}
.pf-menu-item--has-submenu {
  padding-right: 6px !important;
}
.pf-menu-item-chev {
  margin-left: auto;
  font-size: 10px !important;
  opacity: 0.5;
  color: var(--sidebar-text-muted, rgba(255,255,255,0.55));
}
.pf-menu-item--has-submenu:hover .pf-menu-item-chev { opacity: 0.85; }

/* Submenu de "Mover a carpeta" */
.pf-move-submenu {
  position: fixed;
  min-width: 240px;
  max-width: 280px;
  max-height: min(360px, 65vh);
  display: flex !important;
  flex-direction: column;
  padding: 0 !important;
  overflow: hidden;
  z-index: 10000;
  animation: pf-menu-spring-in 0.28s cubic-bezier(0.34, 1.56, 0.64, 1) both;
  transform-origin: left top;
}
.pf-move-search {
  position: relative;
  padding: 8px 10px;
  border-bottom: 1px solid rgba(255,255,255,0.06);
  display: flex;
  align-items: center;
  gap: 8px;
}
.pf-move-search > i {
  color: var(--sidebar-text-muted, rgba(255,255,255,0.55));
  font-size: 13px;
  opacity: 0.7;
}
.pf-move-search input {
  flex: 1;
  background: transparent;
  border: none;
  outline: none;
  color: var(--sidebar-text, #F1F5F9);
  font-family: inherit;
  font-size: 13px;
  padding: 2px 0;
}
.pf-move-search input::placeholder { color: var(--sidebar-text-muted, rgba(255,255,255,0.4)); }
.pf-move-list {
  overflow-y: auto;
  padding: 4px;
  scrollbar-width: thin;
}
.pf-move-list::-webkit-scrollbar { width: 6px; }
.pf-move-list::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.1); border-radius: 3px; }
.pf-move-row {
  width: 100%;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 10px;
  background: transparent;
  border: none;
  border-radius: 6px;
  color: var(--sidebar-text, #F1F5F9);
  cursor: pointer;
  font-family: inherit;
  font-size: 13px;
  font-weight: 500;
  text-align: left;
  transition: background 0.15s;
}
.pf-move-row:hover { background: rgba(255,255,255,0.06); }
.pf-move-row > i { font-size: 14px; color: var(--sidebar-text-muted, rgba(255,255,255,0.6)); }
.pf-move-row > span { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pf-move-row--clear > i { color: #F87171; }
.pf-move-sep {
  margin: 4px 6px !important;
  border-top: 1px solid rgba(255,255,255,0.06);
  height: 0;
  padding: 0 !important;
}
.pf-move-empty {
  padding: 16px;
  text-align: center;
  color: var(--sidebar-text-muted, rgba(255,255,255,0.5));
  font-size: 12.5px;
  font-style: italic;
}

/* Edgar 2026-07-06: iconos de carpeta en el submenu de mover -> BLANCOS
   como pidio Edgar. Tambien en el sidebar (pf-group-folder-icon). */
.pf-move-row > i {
  color: #FFFFFF !important;
  opacity: 0.95;
}
.pf-move-row--clear > i {
  color: #F87171 !important;
  opacity: 1;
}
.portfolio .pf-group-folder-icon {
  color: #FFFFFF !important;
}
.portfolio .pf-group-header:hover .pf-group-folder-icon {
  color: #FFFFFF !important;
  opacity: 1;
}

/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-07: Sprint 4.1 — animacion racha PERDIDA mas cinematica.
   Antes: sutil, poco impactante.
   Ahora: shake previo de la llama + cenizas cayendo desde arriba +
   vignette rojiza sutil + micro-anim de llama apagandose.
   Sin modificar el JS — todo via CSS con animation-delay orchestrado.
   ═══════════════════════════════════════════════════════════════════ */
/* Vignette rojiza en el overlay — de intenso a sutil */
.pf-streak-lost::after {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  background: radial-gradient(ellipse at center,
    transparent 30%,
    rgba(239, 68, 68, 0.12) 70%,
    rgba(0, 0, 0, 0.6) 100%);
  opacity: 0;
  animation: pf-streak-lost-vignette 2.4s cubic-bezier(0.4, 0, 0.2, 1) 0.2s both;
  z-index: 0;
}
@keyframes pf-streak-lost-vignette {
  0%   { opacity: 0; }
  30%  { opacity: 0.9; }
  100% { opacity: 0.5; }
}
/* La llama tiembla antes de apagarse — shake horizontal muy leve */
.pf-streak-lost .pf-streak-flame {
  animation: pf-flame-shake-die 2.2s cubic-bezier(0.4, 0, 0.2, 1) 0.1s both;
}
@keyframes pf-flame-shake-die {
  0%   { transform: translateX(0) scale(1);        color: #FF8A00; text-shadow: 0 0 24px rgba(255,138,0,0.65), 0 0 48px rgba(255,138,0,0.30); opacity: 1; }
  10%  { transform: translateX(-3px) scale(1.02); color: #FF8A00; opacity: 1; }
  20%  { transform: translateX(4px) scale(0.98);  color: #FF6B00; opacity: 0.95; }
  30%  { transform: translateX(-3px) scale(1.01); color: #EF4444; opacity: 0.9; }
  40%  { transform: translateX(2px) scale(0.96);  color: #F87171; opacity: 0.8; }
  55%  { transform: translateX(-2px) scale(0.90); color: #9CA3AF; opacity: 0.7; text-shadow: 0 0 12px rgba(148,163,184,0.35); }
  70%  { transform: translateX(1px) scale(0.85);  color: #6B7280; opacity: 0.6; }
  100% { transform: translateX(0) scale(0.82);    color: #64748B; opacity: 0.65; text-shadow: 0 0 14px rgba(100,116,139,0.45), 0 0 28px rgba(148,163,184,0.20); }
}

/* Cenizas cayendo desde arriba — patron capa de particulas.
   Se generan via JS pero el estilo/animacion vive aqui. Fallback si el
   JS aun no genero cenizas: usa las sparks existentes que quedan visibles. */
.pf-ashes-layer {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 1;
}
.pf-ash {
  position: absolute;
  top: -12px;
  width: var(--sz, 3px);
  height: var(--sz, 3px);
  background: var(--tone, rgba(148, 163, 184, 0.7));
  border-radius: 50%;
  opacity: 0;
  animation: pf-ash-fall var(--dur, 4s) linear var(--delay, 0s) infinite;
  will-change: transform, opacity;
  filter: blur(0.4px);
}
@keyframes pf-ash-fall {
  0%   { transform: translate3d(0, 0, 0) rotate(0deg);     opacity: 0; }
  8%   { opacity: var(--peak, 0.75); }
  50%  { transform: translate3d(var(--sway, 20px), 55vh, 0) rotate(180deg); opacity: var(--peak, 0.65); }
  92%  { opacity: 0.35; }
  100% { transform: translate3d(calc(var(--sway, 20px) * -0.5), 115vh, 0) rotate(360deg); opacity: 0; }
}
/* Numero de racha con micro-shake sincronizado a la llama */
.pf-streak-lost .pf-streak-number {
  animation: pf-num-quiver 2s cubic-bezier(0.4, 0, 0.2, 1) 0.15s both;
}
@keyframes pf-num-quiver {
  0%, 100% { transform: translateX(0); }
  15% { transform: translateX(-2px); }
  30% { transform: translateX(2px); }
  45% { transform: translateX(-1px); }
  60% { transform: translateX(1px); }
  75% { transform: translateX(0); }
}
/* Boton CTA — sutil pulso de aliento (invita a hacer click) */
.pf-streak-lost-cta {
  animation:
    pf-welcome-text-in 0.55s cubic-bezier(0.22, 1, 0.36, 1) 1.4s forwards,
    pf-cta-invite 2.4s cubic-bezier(0.4, 0, 0.2, 1) 2.4s infinite !important;
}
@keyframes pf-cta-invite {
  0%, 100% { box-shadow: var(--shadow-accent); }
  50%      { box-shadow: 0 0 0 6px rgba(255,138,0,0.12), var(--shadow-accent); }
}

/* Reduce motion — respetar preferencia del user */
@media (prefers-reduced-motion: reduce) {
  .pf-streak-lost::after,
  .pf-streak-lost .pf-streak-flame,
  .pf-streak-lost .pf-streak-number,
  .pf-streak-lost-cta,
  .pf-ash {
    animation: none !important;
  }
  .pf-streak-lost .pf-streak-flame { color: #64748B; opacity: 0.65; }
}

/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-07 Sprint 4.2: celebracion visual al llegar a 7/30/100
   dias. Confetti coloreado desde arriba + halo dorado + flame amplificada.
   Solo cuando prevStreak < milestone <= newStreak (una sola vez por hito).
   ═══════════════════════════════════════════════════════════════════ */

/* Halo dorado adicional en hitos */
.pf-streak--milestone .pf-welcome-halo {
  background: radial-gradient(circle,
    rgba(255, 215, 0, 0.55),
    rgba(255, 138, 0, 0.28) 30%,
    rgba(255, 138, 0, 0.10) 55%,
    transparent 75%) !important;
  animation-duration: 1.2s !important;
}
/* Flame mas grande y con doble glow en hitos */
.pf-streak--milestone .pf-streak-flame {
  animation: pf-flame-milestone 1.6s cubic-bezier(0.34, 1.56, 0.64, 1) 0.1s both !important;
  text-shadow:
    0 0 22px rgba(255, 215, 0, 0.75),
    0 0 44px rgba(255, 138, 0, 0.50),
    0 0 80px rgba(255, 138, 0, 0.25) !important;
}
@keyframes pf-flame-milestone {
  0%   { transform: scale(0.3) rotate(-10deg); opacity: 0; }
  35%  { transform: scale(1.25) rotate(6deg);  opacity: 1; }
  55%  { transform: scale(0.95) rotate(-3deg); opacity: 1; }
  75%  { transform: scale(1.08) rotate(2deg);  opacity: 1; }
  100% { transform: scale(1)    rotate(0);     opacity: 1; }
}
/* Numero de racha con brillo dorado + escala mas fuerte */
.pf-streak--milestone .pf-streak-number {
  background: linear-gradient(135deg, #FFD700, #FF8A00);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 4px 22px rgba(255, 138, 0, 0.5));
  animation: pf-num-milestone 1.4s cubic-bezier(0.34, 1.56, 0.64, 1) 0.6s both !important;
}
@keyframes pf-num-milestone {
  0%   { transform: scale(0.4); opacity: 0; }
  50%  { transform: scale(1.18); opacity: 1; }
  75%  { transform: scale(0.95); }
  100% { transform: scale(1); opacity: 1; }
}
/* Titulo especial mas grande para hitos */
.pf-streak--milestone .pf-streak-title {
  font-size: clamp(28px, 5vw, 44px);
  background: linear-gradient(135deg, #FFD700 0%, #FFA500 50%, #FF8A00 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  letter-spacing: -0.8px;
  filter: drop-shadow(0 2px 12px rgba(255, 138, 0, 0.4));
}

/* Capa de confetti */
.pf-confetti-layer {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 2;
}
.pf-confetti {
  position: absolute;
  top: -20px;
  width: var(--sz, 8px);
  height: var(--sz, 8px);
  background: var(--color, #FF8A00);
  opacity: 0;
  animation: pf-confetti-fall var(--dur, 3s) cubic-bezier(0.25, 0.65, 0.5, 1) var(--delay, 0s) forwards;
  will-change: transform, opacity;
}
.pf-confetti--circle { border-radius: 50%; }
.pf-confetti--square { border-radius: 2px; }
.pf-confetti--rect {
  border-radius: 1px;
  width: calc(var(--sz, 8px) * 0.6);
  height: calc(var(--sz, 8px) * 1.6);
}
@keyframes pf-confetti-fall {
  0%   {
    transform: translate3d(0, -20px, 0) rotate(var(--rotS, 0deg));
    opacity: 0;
  }
  10%  { opacity: 1; }
  90%  { opacity: 1; }
  100% {
    transform: translate3d(var(--offx, 0), 105vh, 0) rotate(var(--rotE, 720deg));
    opacity: 0;
  }
}

/* Reduce motion */
@media (prefers-reduced-motion: reduce) {
  .pf-confetti,
  .pf-streak--milestone .pf-streak-flame,
  .pf-streak--milestone .pf-streak-number {
    animation: none !important;
  }
  .pf-confetti { display: none; }
}

/* ═══════════════════════════════════════════════════════════════════
   Edgar 2026-07-07 Sprint 4.5: Toast "racha en riesgo".
   Pill flotante top-right (top-center en mobile). Backdrop-filter,
   spring entrance, glow ambar. Clickable body → focus al chat.
   Se dismissea auto tras 12s o con la X.
   ═══════════════════════════════════════════════════════════════════ */
.pf-risk-toast {
  position: fixed;
  top: 18px;
  right: 18px;
  z-index: 10050;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px 12px 12px;
  min-width: 260px;
  max-width: 360px;
  background: rgba(255, 249, 240, 0.92);
  border: 1px solid rgba(255, 138, 0, 0.32);
  border-radius: 16px;
  box-shadow:
    0 12px 40px -8px rgba(255, 138, 0, 0.35),
    0 4px 14px rgba(0, 0, 0, 0.08);
  backdrop-filter: saturate(180%) blur(14px);
  -webkit-backdrop-filter: saturate(180%) blur(14px);
  opacity: 0;
  transform: translateY(-14px) scale(0.94);
  transition:
    opacity 0.32s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.42s cubic-bezier(0.34, 1.56, 0.64, 1);
  cursor: default;
}
[data-theme="dark"] .pf-risk-toast {
  background: rgba(30, 22, 14, 0.85);
  border-color: rgba(255, 138, 0, 0.38);
  box-shadow:
    0 12px 40px -8px rgba(255, 138, 0, 0.28),
    0 4px 14px rgba(0, 0, 0, 0.4);
}
.pf-risk-toast--in { opacity: 1; transform: translateY(0) scale(1); }
.pf-risk-toast--out {
  opacity: 0;
  transform: translateY(-10px) scale(0.96);
  transition:
    opacity 0.28s ease-in,
    transform 0.28s ease-in;
}
.pf-risk-toast-flame {
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 12px;
  background: linear-gradient(135deg, rgba(255,183,77,0.28), rgba(255,138,0,0.18));
  color: #ff8a00;
  font-size: 22px;
  text-shadow: 0 0 12px rgba(255, 138, 0, 0.6);
  animation: pf-risk-flicker 1.6s ease-in-out infinite;
}
@keyframes pf-risk-flicker {
  0%, 100% { transform: scale(1); text-shadow: 0 0 12px rgba(255,138,0,0.6); }
  50%      { transform: scale(1.08); text-shadow: 0 0 18px rgba(255,180,60,0.85); }
}
.pf-risk-toast-body {
  flex: 1 1 auto;
  min-width: 0;
  cursor: pointer;
}
.pf-risk-toast-title {
  font-weight: 700;
  font-size: 14px;
  color: #7c3a00;
  line-height: 1.25;
  margin-bottom: 2px;
}
.pf-risk-toast-sub {
  font-size: 12.5px;
  color: #8a6b48;
  line-height: 1.35;
}
[data-theme="dark"] .pf-risk-toast-title { color: #ffcc80; }
[data-theme="dark"] .pf-risk-toast-sub   { color: #d4b48f; }
.pf-risk-toast-close {
  flex: 0 0 auto;
  width: 28px;
  height: 28px;
  border: none;
  background: transparent;
  color: #a06730;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  font-size: 14px;
  transition: background 0.18s ease;
}
.pf-risk-toast-close:hover { background: rgba(255, 138, 0, 0.12); }
[data-theme="dark"] .pf-risk-toast-close { color: #d4b48f; }
[data-theme="dark"] .pf-risk-toast-close:hover { background: rgba(255, 138, 0, 0.2); }

/* Mobile: top-center full-width */
@media (max-width: 640px) {
  .pf-risk-toast {
    top: 12px;
    left: 12px;
    right: 12px;
    max-width: none;
    min-width: 0;
  }
}
@media (prefers-reduced-motion: reduce) {
  .pf-risk-toast-flame { animation: none; }
  .pf-risk-toast,
  .pf-risk-toast--out { transition: opacity 0.15s linear; transform: none !important; }
}

