*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--blue:#0279FF;--text:#0f1117;--muted:#6b7280;--border:#e5e7eb;--bg:#fff;--soft:#f8fafc;--r:12px;--green:#16a34a;--red:#dc2626;--purple:#7c3aed;--amber:#f59e0b}
body{font-family:'Inter',sans-serif;background:var(--soft);color:var(--text);min-height:100vh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}
.top-bar{background:var(--bg);border-bottom:1px solid var(--border);padding:.8rem 1.5rem;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}
.top-logo{display:flex;align-items:center;gap:10px}
.top-logo img{height:26px}
.top-logo span{font-family:'Ubuntu',sans-serif;font-size:.9rem;color:var(--muted)}
.top-login{font-size:.84rem;color:var(--blue);text-decoration:none;font-weight:500}
.top-login:hover{text-decoration:underline}
.wrap{max-width:640px;margin:0 auto;padding:2rem 1rem 4rem}
.progress{display:flex;gap:4px;margin-bottom:2rem}
.progress .bar{flex:1;height:4px;border-radius:2px;background:var(--border);transition:background .3s}
.progress .bar.done{background:var(--blue)}
.progress .bar.active{background:var(--blue);opacity:.5}
.step{display:none;animation:fadeIn .3s ease}
.step.active{display:block}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.card{background:var(--bg);border:1px solid var(--border);border-radius:16px;padding:2rem;margin-bottom:1rem}
h1{font-family:'Ubuntu',sans-serif;font-size:1.3rem;font-weight:500;margin-bottom:.3rem}
h2{font-family:'Ubuntu',sans-serif;font-size:1.05rem;font-weight:500;margin-bottom:.2rem}
.sub{font-size:.88rem;color:var(--muted);margin-bottom:1.5rem;line-height:1.5}
/* Industry combobox (step 1) */
.combo{position:relative;margin-bottom:1.2rem}
.combo-input-wrap{position:relative}
.combo-input-wrap .combo-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none}
.combo input{width:100%;padding:.85rem 1rem .85rem 42px;border:1px solid var(--border);border-radius:var(--r);font-family:'Inter',sans-serif;font-size:.95rem;outline:none;transition:border-color .15s,box-shadow .15s;color:var(--text);background:var(--bg)}
.combo input:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(2,121,255,.1)}
.combo-list{position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--bg);border:1px solid var(--border);border-radius:var(--r);max-height:320px;overflow-y:auto;box-shadow:0 8px 24px rgba(15,17,23,.08);z-index:20;display:none}
.combo.open .combo-list{display:block}
.combo-item{padding:.65rem 1rem;cursor:pointer;font-size:.9rem;color:var(--text);transition:background .1s}
.combo-item:hover,.combo-item.active{background:var(--surface-info-bg);color:var(--blue)}
.combo-group{padding:.6rem 1rem .3rem;font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:500;background:var(--soft);border-top:1px solid var(--border)}
.combo-group:first-child{border-top:none}
.combo-empty{padding:1rem;color:var(--muted);font-size:.84rem;text-align:center}
.combo-empty a{color:var(--blue);cursor:pointer;text-decoration:underline}
.chosen-pill{display:inline-flex;align-items:center;gap:8px;padding:.55rem .9rem;background:var(--surface-info-bg);border:1px solid var(--surface-info-bd);border-radius:var(--r);font-size:.9rem;color:var(--text);margin-top:.2rem;font-weight:500}
.chosen-pill button{background:none;border:none;color:var(--muted);cursor:pointer;padding:2px 4px;font-size:1rem;line-height:1;display:flex;align-items:center}
.chosen-pill button:hover{color:var(--red)}
.grid-options{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;margin-bottom:1.2rem}
.opt{border:2px solid var(--border);border-radius:var(--r);padding:.7rem .9rem;cursor:pointer;transition:all .15s;font-size:.88rem;display:flex;align-items:center;gap:8px}
.opt:hover{border-color:var(--blue);background:var(--surface-info-bg)}
.opt.selected{border-color:var(--blue);background:var(--surface-info-bg);font-weight:500}
/* Step 3: agent cards — vertical, título + descripción del agente */
.agent-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;margin-bottom:1.2rem}
.agent-grid .opt{display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:.9rem 1rem;text-align:left;font-size:.88rem;min-height:118px;position:relative}
.agent-grid .opt .ag-head{display:flex;align-items:center;gap:8px;width:100%}
.agent-grid .opt .ag-head .ico{width:24px;height:24px;border-radius:6px;background:var(--surface-info-bg);color:var(--blue);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.agent-grid .opt .ag-title{font-weight:600;color:var(--text);font-size:.92rem;line-height:1.3}
.agent-grid .opt .ag-desc{font-size:.78rem;color:var(--muted);line-height:1.45;font-weight:400}
.agent-grid .opt.selected{border-color:var(--blue);background:var(--surface-info-bg)}
.agent-grid .opt.selected .ag-head .ico{background:var(--blue);color:#fff}
.agent-grid .opt.selected::after{content:'';position:absolute;top:10px;right:10px;width:18px;height:18px;border-radius:50%;background:var(--blue) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>") center/12px no-repeat}
.opt .ico{font-size:1.1rem;width:24px;text-align:center;flex-shrink:0}
.range-wrap{margin-bottom:1.5rem}
.range-options{display:flex;gap:6px;flex-wrap:wrap}
.range-opt{border:2px solid var(--border);border-radius:var(--r);padding:.55rem 1rem;cursor:pointer;font-size:.85rem;transition:all .15s}
.range-opt:hover{border-color:var(--blue)}
.range-opt.selected{border-color:var(--blue);background:var(--surface-info-bg);font-weight:500}
.f{margin-bottom:1rem}
.f label{display:block;font-size:.72rem;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:.35rem}
.f input,.f select{width:100%;padding:.65rem .9rem;border:1px solid var(--border);border-radius:var(--r);font-family:'Inter',sans-serif;font-size:.92rem;outline:none;transition:border-color .15s,box-shadow .15s;color:var(--text)}
.f input:focus,.f select:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(2,121,255,.1)}
.fg{display:grid;grid-template-columns:1fr 1fr;gap:.85rem}
.full{grid-column:1/-1}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:.75rem 1.5rem;border-radius:var(--r);font-family:'Inter',sans-serif;font-size:.92rem;font-weight:500;cursor:pointer;transition:all .15s;border:none}
.btn-primary{background:var(--blue);color:#fff}.btn-primary:hover{background:color-mix(in srgb, var(--blue) 88%, black)}
.btn-secondary{background:transparent;border:1px solid var(--border);color:var(--text)}.btn-secondary:hover{background:var(--soft)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-full{width:100%}
.nav-btns{display:flex;justify-content:space-between;margin-top:1.5rem}
/* Savings card */
.savings{background:linear-gradient(135deg,#0279FF 0%,#7c3aed 100%);border-radius:16px;padding:2rem;color:#fff;margin-bottom:1.5rem;position:relative;overflow:hidden}
.savings::after{content:'';position:absolute;top:-30%;right:-10%;width:200px;height:200px;background:rgba(255,255,255,.08);border-radius:50%}
.savings h2{color:#fff;font-size:1.1rem;margin-bottom:1rem;opacity:.9}
.savings .big{font-size:2.4rem;font-weight:700;margin-bottom:.3rem;font-family:'Ubuntu',sans-serif}
.savings .detail{font-size:.85rem;opacity:.85;line-height:1.6}
.savings .breakdown{margin-top:1rem;display:grid;grid-template-columns:1fr 1fr;gap:8px}
.savings .bk-item{background:rgba(255,255,255,.12);border-radius:10px;padding:.7rem;text-align:center}
.savings .bk-label{font-size:.72rem;opacity:.7;text-transform:uppercase;letter-spacing:.04em}
.savings .bk-value{font-size:1.1rem;font-weight:600;margin-top:2px}
/* Modules recommendation */
.mod-rec{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin:1rem 0}
.mod-chip{background:var(--soft);border:1px solid var(--border);border-radius:var(--r);padding:.6rem .8rem;font-size:.82rem;display:flex;align-items:center;gap:6px}
.mod-chip.on{background:var(--surface-info-bg);border-color:var(--blue);color:var(--blue);font-weight:500}
.mod-chip .dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.mod-chip .dot.on{background:var(--blue)}
.mod-chip .dot.off{background:var(--border)}
/* Addons */
.addon{border:1px solid var(--border);border-radius:var(--r);padding:.8rem 1rem;margin-bottom:8px;display:flex;align-items:flex-start;gap:10px}
.addon .a-icon{font-size:1.2rem;margin-top:2px}
.addon .a-title{font-weight:500;font-size:.88rem}
.addon .a-desc{font-size:.78rem;color:var(--muted);margin-top:2px}
.addon .a-status{font-size:.72rem;font-weight:500;margin-top:4px;padding:2px 8px;border-radius:8px;display:inline-block}
.a-required{background:var(--surface-warn-bg);color:var(--surface-warn-fg-strong)}
.a-optional{background:var(--surface-success-bg);color:var(--surface-success-fg-strong)}
/* Banner de error rojo. Antes usaba var(--surface-danger-*) que no estaban
   definidos en el contexto del onboarding público (no carga app.css), así
   que el banner aparecía sin estilo y el cliente no lo veía. Ahora con
   fallbacks explícitos visibles en light y dark. */
.err{
  display:none;
  background: var(--surface-danger-bg, #FEE2E2);
  border: 1px solid var(--surface-danger-bd, #FCA5A5);
  color: var(--surface-danger-fg-strong, #991B1B);
  border-radius: var(--r, 12px);
  padding: .75rem 1rem;
  font-size: .9rem;
  font-weight: 500;
  line-height: 1.45;
  margin-bottom: 1rem;
  transition: box-shadow .25s, transform .25s;
}
html[data-theme="dark"] .err{
  background: rgba(239,68,68,.12);
  border-color: rgba(239,68,68,.4);
  color: #FCA5A5;
}
.err.show{display:block}
.err.flash{box-shadow:0 0 0 4px rgba(239,68,68,.22);transform:translateY(-2px)}
.coupon-wrap{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--border)}
.coupon-row{display:flex;gap:8px;align-items:flex-end}
.coupon-row input{flex:1}
.coupon-ok{color:var(--green);font-size:.82rem;font-weight:500;margin-top:.3rem;display:none}
@media(max-width:500px){.fg{grid-template-columns:1fr}.grid-options{grid-template-columns:1fr 1fr}.savings .breakdown{grid-template-columns:1fr}}


/* ── Dark theme overrides — keep in sync with /app/assets/app.css ─────── */
html[data-theme="dark"] {
  --blue: #3B95FF;
  --blue-soft: #86C6FF;
  --text: #f1f5f9;
  --text-alt: #abcdef;
  --text-dim: #cbd5e1;
  --slate-dark: #e2e8f0;
  --muted: #94a3b8;
  --border: #1f2937;
  --bg: #0f172a;
  --soft: #1e293b;
  --hov: #1f2a3c;
  --green: #29ff7b;
  --red: #f87171;
  --amber: #fbbf24;
}

/* ─── STEP 3: Module activation picker ─────────────────────────────────
   Layout más ancho que el resto del onboarding para que entren las 3
   columnas/categorías sin sentirse apretadas. Sólo cuando step-wide
   está activo. */
.wrap:has(.step.step-wide.active){max-width:1080px}

/* Header del paso (título + toggle a la derecha) */
.modules-head{display:flex;align-items:flex-start;justify-content:space-between;gap:1.5rem;flex-wrap:wrap;margin-bottom:1.25rem}
.modules-head h1{margin-bottom:.3rem}
.modules-head .sub{margin-bottom:0}

.modules-toggle{display:inline-flex;background:var(--soft);border:1px solid var(--border);border-radius:999px;padding:3px;flex-shrink:0;align-self:center}
.modules-toggle-btn{background:transparent;border:none;border-radius:999px;padding:6px 14px;font-size:.78rem;font-weight:500;color:var(--muted);cursor:pointer;font-family:inherit;transition:background .15s,color .15s}
.modules-toggle-btn.is-active{background:var(--bg);color:var(--text);box-shadow:0 1px 2px rgba(15,23,42,.06)}
html[data-theme="dark"] .modules-toggle-btn.is-active{box-shadow:none;background:var(--hov)}

/* "Siempre activos" chip strip */
.modules-always{background:linear-gradient(135deg,rgba(2,121,255,.05),rgba(2,121,255,.02));border:1px solid rgba(2,121,255,.18);border-radius:12px;padding:.85rem 1.1rem;margin-bottom:1.25rem;display:flex;align-items:center;gap:.85rem;flex-wrap:wrap}
.modules-always-label{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--blue);font-family:'Ubuntu',sans-serif;flex-shrink:0}
.modules-always-chips{display:flex;gap:.4rem;flex-wrap:wrap;flex:1;min-width:0}
.module-chip{font-size:.78rem;font-weight:600;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:999px;padding:4px 12px;font-family:'Ubuntu',sans-serif}
.modules-always-note{font-size:.74rem;color:var(--muted);width:100%;line-height:1.5}

/* Grid de las 3 categorías */
.modules-grid{display:grid;grid-template-columns:1fr;gap:1rem;margin-bottom:.5rem}
@media(min-width:880px){.modules-grid{grid-template-columns:repeat(3,1fr);gap:.85rem}}

.module-cat{background:var(--bg);border:1px solid var(--border);border-radius:14px;overflow:hidden}
.module-cat-head{display:flex;align-items:center;gap:.6rem;padding:.85rem 1rem;border-bottom:1px solid var(--border);cursor:pointer;background:var(--soft);user-select:none}
.module-cat-head input{position:absolute;opacity:0;pointer-events:none}
.module-cat-title{font-family:'Ubuntu',sans-serif;font-weight:700;font-size:.92rem;color:var(--text);flex:1}
.module-cat-count{font-size:.72rem;color:var(--muted);font-variant-numeric:tabular-nums;font-family:'Ubuntu',sans-serif}
.module-cat-body{padding:.5rem 0}

/* Filas de módulos */
.module-row{display:flex;align-items:flex-start;gap:.65rem;padding:.7rem 1rem;cursor:pointer;border-bottom:1px solid var(--border);transition:background .12s}
.module-row:last-child{border-bottom:0}
.module-row:hover{background:var(--soft)}
.module-row input.module-cb{position:absolute;opacity:0;pointer-events:none}
.module-row.is-locked{cursor:default}
.module-row.is-locked:hover{background:transparent}

.module-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.module-title{font-size:.88rem;font-weight:600;color:var(--text);font-family:'Ubuntu',sans-serif;line-height:1.3}
.module-desc{font-size:.78rem;color:var(--muted);line-height:1.5}
.module-row.is-on .module-title{color:var(--blue)}

/* Visual del checkbox (no usamos el nativo para tener control de tristate visual) */
.module-cb-visual{flex-shrink:0;width:18px;height:18px;border:1.5px solid var(--border);border-radius:5px;background:var(--bg);position:relative;margin-top:1px;transition:background .15s,border-color .15s}
.module-row.is-on .module-cb-visual,
.module-cat-head input:checked + .module-cb-visual{background:var(--blue);border-color:var(--blue)}
.module-row.is-on .module-cb-visual::after,
.module-cat-head input:checked + .module-cb-visual::after{content:'';position:absolute;top:2px;left:5px;width:5px;height:9px;border-right:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(45deg)}
.module-cat-head input:indeterminate + .module-cb-visual{background:var(--blue);border-color:var(--blue)}
.module-cat-head input:indeterminate + .module-cb-visual::after{content:'';position:absolute;top:7px;left:3px;width:10px;height:2px;background:#fff;border-radius:1px}

/* Locked / cascadeado */
.module-row.is-locked .module-cb-visual{background:var(--blue);border-color:var(--blue);opacity:.6}
.module-row.is-locked .module-cb-visual::after{content:'';position:absolute;top:2px;left:5px;width:5px;height:9px;border-right:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(45deg)}

.module-badge{display:inline-flex;align-items:center;font-size:.66rem;color:var(--blue);background:rgba(2,121,255,.08);border:1px solid rgba(2,121,255,.22);border-radius:999px;padding:2px 8px;font-family:'Ubuntu',sans-serif;font-weight:600;white-space:nowrap;align-self:center;max-width:160px;overflow:hidden;text-overflow:ellipsis}
.module-lock{display:inline-flex;align-items:center;color:var(--muted);align-self:center}
.module-lock svg{width:12px;height:12px}

/* Forzar que [hidden] funcione aunque .module-badge / .module-lock declaren
   display:inline-flex (que sobrescribe el display:none implícito de hidden). */
.module-badge[hidden],
.module-lock[hidden]{display:none !important}

/* ── Password fields: eye toggle + validación visual ──
   .pwd-wrap envuelve sólo input+eye (NO el label) para que top:50% mida la
   altura del input, no del field completo. autocomplete="new-password" en el
   input le dice al password manager que es signup (no autofill). */
.pwd-wrap{position:relative;display:flex;align-items:center}
.pwd-wrap > input[type="password"],
.pwd-wrap > input[type="text"]{flex:1;width:100%;padding-right:40px}
.pwd-wrap .pwd-eye{
  position:absolute;right:8px;top:50%;transform:translateY(-50%);
  background:transparent;border:none;cursor:pointer;color:var(--muted);
  width:28px;height:28px;
  display:flex;align-items:center;justify-content:center;
  border-radius:6px;padding:0;z-index:2;
}
.pwd-wrap .pwd-eye:hover{color:var(--text);background:rgba(15,23,42,.05)}
html[data-theme="dark"] .pwd-wrap .pwd-eye:hover{background:rgba(255,255,255,.06)}

/* Estado verde cuando el password está OK. */
.pwd-wrap > input.ok{border-color:#10B981 !important;box-shadow:0 0 0 3px rgba(16,185,129,.12)}

.pwd-hint{margin-top:.4rem;font-size:.78rem;line-height:1.3;min-height:1.1em}
.pwd-hint.ok{color:#10B981}
.pwd-hint.warn{color:#F59E0B}
