<!DOCTYPE html>

<html lang="en">

<head>

<base target="_top">

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta name="color-scheme" content="dark light">

<title>VANTAGE OS v10.0 — Global 360° ABM & Market Intelligence Engine</title>

<link rel="preconnect" href="https://fonts.googleapis.com">

<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet">

<script src="https://unpkg.com/lucide@0.453.0/dist/umd/lucide.min.js"></script>

<style>

:root {

    --bg-base: #020617; --bg-surface: rgba(15, 23, 42, 0.78); --bg-hover: rgba(30, 41, 59, 0.92);

    --text: #f8fafc; --text-2: #94a3b8; --text-3: #64748b;

    --primary: #3b82f6; --primary-glow: rgba(59, 130, 246, 0.38); --accent: #8b5cf6;

    --ok: #10b981; --warn: #f59e0b; --danger: #ef4444;

    --border: rgba(255, 255, 255, 0.1); --border-hi: rgba(255, 255, 255, 0.24);

    --shadow: 0 25px 50px rgba(0, 0, 0, 0.55); --inner: inset 0 1px 0 rgba(255, 255, 255, 0.12);

    --field: rgba(15, 23, 42, 0.75); --opt-bg: #0f172a; --font: 'Plus Jakarta Sans', system-ui, sans-serif;

}

[data-dept-theme="sales"] { --primary: #3b82f6; --primary-glow: rgba(59, 130, 246, 0.4); --accent: #06b6d4; }

[data-dept-theme="marketing"] { --primary: #8b5cf6; --primary-glow: rgba(139, 92, 246, 0.4); --accent: #ec4899; }

[data-dept-theme="cs"] { --primary: #10b981; --primary-glow: rgba(16, 185, 129, 0.4); --accent: #3b82f6; }

[data-theme="light"] {

    --bg-base: #f1f5f9; --bg-surface: rgba(255, 255, 255, 0.88); --bg-hover: rgba(255, 255, 255, 0.98);

    --text: #0f172a; --text-2: #475569; --text-3: #64748b;

    --border: rgba(0, 0, 0, 0.1); --border-hi: rgba(0, 0, 0, 0.22);

    --shadow: 0 20px 40px rgba(0, 0, 0, 0.08); --inner: inset 0 1px 0 rgba(255, 255, 255, 0.7);

    --field: rgba(255, 255, 255, 0.94); --opt-bg: #ffffff;

}

* { box-sizing: border-box; }

body { margin: 0; font-family: var(--font); color: var(--text); background: var(--bg-base); min-height: 100vh; overflow-x: hidden; -webkit-font-smoothing: antialiased; transition: background-color 0.4s, color 0.4s; }

button, input, select, textarea { font-family: inherit; }

select option { background-color: var(--opt-bg); color: var(--text); }

:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

[hidden] { display: none !important; }

.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

::-webkit-scrollbar { width: 6px; height: 6px; }

::-webkit-scrollbar-thumb { background: var(--text-3); border-radius: 10px; }


.bg-system { position: fixed; inset: 0; z-index: -2; overflow: hidden; pointer-events: none; }

.bg-layer { position: absolute; inset: 0; opacity: 0; transition: opacity 1s ease; }

.bg-layer.active { opacity: 1; }

.bg-layer:not(.active) * { animation-play-state: paused !important; }

#bg-orb { background: radial-gradient(circle at 50% 50%, var(--primary-glow), transparent 65%); }

.orb { position: absolute; border-radius: 50%; filter: blur(85px); opacity: 0.38; animation: floatOrb 15s ease-in-out infinite alternate; }

.orb-1 { width: 40vw; height: 40vw; background: var(--primary); top: 0; left: 0; }

.orb-2 { width: 35vw; height: 35vw; background: var(--accent); bottom: 0; right: 0; }

@keyframes floatOrb { to { transform: translate(5vw, 5vh) scale(1.1); } }

.grid-overlay { position: absolute; inset: 0; background-image: linear-gradient(to right, var(--border) 1px, transparent 1px), linear-gradient(to bottom, var(--border) 1px, transparent 1px); background-size: 60px 60px; transform: perspective(600px) rotateX(60deg); animation: gridMove 15s linear infinite; -webkit-mask-image: radial-gradient(ellipse at center, #000 30%, transparent 70%); mask-image: radial-gradient(ellipse at center, #000 30%, transparent 70%); }

@keyframes gridMove { to { transform: perspective(600px) rotateX(60deg) translateY(60px); } }

.radar-sweep { position: absolute; inset: 0; margin: auto; width: 140vmax; height: 140vmax; border-radius: 50%; background: conic-gradient(from 0deg, transparent 70%, var(--primary-glow)); animation: spin 4s linear infinite; -webkit-mask-image: radial-gradient(circle, transparent 20%, #000 60%, transparent 70%); mask-image: radial-gradient(circle, transparent 20%, #000 60%, transparent 70%); }

.radar-rings { position: absolute; inset: 0; margin: auto; width: 95vmax; height: 95vmax; border-radius: 50%; border: 1px solid var(--border); opacity: 0.3; transform: scaleY(0.7); }

#bg-waves { display: flex; align-items: center; justify-content: center; }

.wave-line { position: absolute; width: 200%; height: 2px; background: linear-gradient(90deg, transparent, var(--primary), transparent); opacity: 0.35; animation: waveMove 8s ease-in-out infinite alternate; }

.wave-line + .wave-line { background: linear-gradient(90deg, transparent, var(--accent), transparent); }

@keyframes waveMove { from { transform: translateY(0px) rotate(8deg); opacity: 0.15; } to { transform: translateY(80px) rotate(16deg); opacity: 0.6; } }

@keyframes spin { to { transform: rotate(360deg); } }


.glass { background: var(--bg-surface); backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); border: 1px solid var(--border); border-radius: 20px; box-shadow: var(--shadow), var(--inner); }

.header { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 12px clamp(14px, 3%, 36px); border-bottom: 1px solid var(--border); background: color-mix(in srgb, var(--bg-base) 78%, transparent); backdrop-filter: blur(14px); position: sticky; top: 0; z-index: 100; flex-wrap: wrap; }


.logo { display: flex; align-items: center; gap: 11px; background: none; border: 0; color: inherit; cursor: pointer; padding: 0; text-align: left; }

.logo-mark { width: 40px; height: 40px; border-radius: 12px; display: grid; place-items: center; background: linear-gradient(135deg, #0f172a, #1e1b4b); border: 1px solid var(--border-hi); box-shadow: 0 0 22px var(--primary-glow); transition: transform 0.3s; }

.logo:hover .logo-mark { transform: scale(1.07) rotate(-3deg); }

.logo-text-wrap { display: flex; flex-direction: column; }

.logo h1 { margin: 0; font-size: 1.18rem; font-weight: 800; letter-spacing: 0.6px; display: flex; align-items: center; gap: 6px; }

.logo-badge { font-size: 0.64rem; font-weight: 800; padding: 2px 6px; border-radius: 5px; background: linear-gradient(135deg, var(--primary), var(--accent)); color: #fff; letter-spacing: 0.8px; }

.logo-tagline { font-size: 0.68rem; color: var(--text-2); font-weight: 600; letter-spacing: 0.3px; margin-top: 1px; }


/* LANDING PAGE STYLES */

#landing-view { max-width: 1180px; margin: 0 auto; padding: 44px 20px 100px; display: flex; flex-direction: column; align-items: center; gap: 60px; }

.lp-hero { text-align: center; max-width: 880px; display: flex; flex-direction: column; align-items: center; gap: 18px; margin-top: 10px; }

.lp-pill { display: inline-flex; align-items: center; gap: 8px; padding: 6px 16px; border-radius: 99px; background: rgba(59, 130, 246, 0.15); border: 1px solid rgba(59, 130, 246, 0.4); color: #60a5fa; font-size: 0.8rem; font-weight: 700; }

.lp-hero h2 { font-size: clamp(2.1rem, 4.8vw, 3.5rem); font-weight: 800; line-height: 1.12; margin: 0; letter-spacing: -0.5px; }

.lp-hero h2 span { background: linear-gradient(135deg, #38bdf8, #818cf8, #c084fc); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }

.lp-hero p { font-size: 1.05rem; color: var(--text-2); line-height: 1.65; margin: 0; max-width: 760px; }

.lp-cta-row { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; margin-top: 8px; }

.lp-btn-primary { background: linear-gradient(135deg, var(--primary), var(--accent)); color: #fff; border: 0; padding: 15px 28px; border-radius: 14px; font-weight: 800; font-size: 0.98rem; cursor: pointer; box-shadow: 0 12px 30px var(--primary-glow); display: inline-flex; align-items: center; gap: 9px; transition: transform 0.2s; }

.lp-btn-primary:hover { transform: translateY(-2px); }

.lp-btn-secondary { background: var(--field); color: var(--text); border: 1px solid var(--border-hi); padding: 15px 24px; border-radius: 14px; font-weight: 700; font-size: 0.95rem; cursor: pointer; display: inline-flex; align-items: center; gap: 9px; transition: all 0.2s; }

.lp-btn-secondary:hover { border-color: var(--primary); background: var(--bg-hover); }


.lp-section { width: 100%; display: flex; flex-direction: column; align-items: center; gap: 26px; }

.lp-sec-head { text-align: center; max-width: 740px; }

.lp-sec-head h3 { font-size: clamp(1.5rem, 3vw, 2.1rem); font-weight: 800; margin: 0 0 8px; }

.lp-sec-head p { color: var(--text-2); margin: 0; font-size: 0.95rem; line-height: 1.55; }


/* 4-Layer Deep ABM & ICP Cards */

.lp-abm-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 16px; width: 100%; }

.lp-abm-step { padding: 22px; border-left: 4px solid var(--accent); display: flex; flex-direction: column; gap: 8px; }

.lp-abm-num { font-size: 0.72rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.8px; color: var(--primary); }

.lp-abm-step h4 { margin: 0; font-size: 1.05rem; font-weight: 800; }

.lp-abm-step p { margin: 0; font-size: 0.84rem; color: var(--text-2); line-height: 1.5; }


.lp-bento-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 20px; width: 100%; }

.lp-bento-card { padding: 26px; display: flex; flex-direction: column; gap: 10px; border-top: 3px solid var(--primary); position: relative; }

.lp-bento-card.roadmap-card { border-top-color: var(--warn); opacity: 0.92; }

.lp-bento-icon { width: 44px; height: 44px; border-radius: 12px; background: var(--primary-glow); color: #60a5fa; display: grid; place-items: center; margin-bottom: 4px; }

.lp-bento-card h4 { margin: 0; font-size: 1.12rem; font-weight: 800; display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; }

.lp-bento-card p { margin: 0; font-size: 0.86rem; color: var(--text-2); line-height: 1.55; }

.lp-bento-meta { margin-top: auto; padding-top: 10px; font-size: 0.74rem; font-weight: 700; color: var(--ok); display: flex; align-items: center; gap: 6px; }


.status-pill-live { font-size: 0.66rem; font-weight: 800; padding: 3px 8px; border-radius: 99px; background: rgba(16, 185, 129, 0.16); color: var(--ok); border: 1px solid rgba(16, 185, 129, 0.4); text-transform: uppercase; }

.status-pill-dev { font-size: 0.66rem; font-weight: 800; padding: 3px 8px; border-radius: 99px; background: rgba(245, 158, 11, 0.16); color: var(--warn); border: 1px solid rgba(245, 158, 11, 0.4); text-transform: uppercase; }


.lp-pricing-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 22px; width: 100%; align-items: stretch; }

.lp-price-card { padding: 30px 26px; display: flex; flex-direction: column; gap: 14px; position: relative; }

.lp-price-card.featured { border: 2px solid var(--primary); box-shadow: 0 0 35px rgba(59, 130, 246, 0.25); }

.lp-pop-badge { position: absolute; top: -12px; right: 24px; background: linear-gradient(135deg, var(--primary), var(--accent)); color: #fff; font-size: 0.7rem; font-weight: 800; padding: 4px 12px; border-radius: 99px; text-transform: uppercase; letter-spacing: 0.6px; }

.lp-tier-name { font-size: 1.1rem; font-weight: 800; color: var(--text); }

.lp-tier-price { font-size: 2.3rem; font-weight: 800; color: var(--text); display: flex; align-items: baseline; gap: 6px; }

.lp-tier-price span { font-size: 0.85rem; font-weight: 600; color: var(--text-2); }

.lp-tier-desc { font-size: 0.83rem; color: var(--text-2); line-height: 1.45; margin: 0; }

.lp-feat-list { list-style: none; padding: 0; margin: 6px 0 16px; display: flex; flex-direction: column; gap: 9px; font-size: 0.83rem; color: var(--text-2); flex: 1; }

.lp-feat-list li { display: flex; align-items: flex-start; gap: 8px; line-height: 1.4; }

.lp-feat-list li i { color: var(--ok); flex-shrink: 0; margin-top: 2px; }


/* WORKSPACE & DASHBOARD STYLES */

.context-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; background: var(--field); padding: 6px 11px; border-radius: 14px; border: 1px solid var(--border); }

.brand-badge-btn { display: flex; align-items: center; gap: 7px; background: var(--primary-glow); border: 1px solid var(--border-hi); color: var(--text); padding: 5px 10px; border-radius: 10px; cursor: pointer; font-weight: 700; font-size: 0.8rem; }

.company-logo-img { width: 20px; height: 20px; border-radius: 5px; object-fit: contain; background: #fff; padding: 1px; }

.context-pill { display: flex; align-items: center; gap: 5px; font-size: 0.78rem; color: var(--text-2); font-weight: 600; }

.context-pill input, .context-pill select { background: var(--bg-surface); border: 1px solid var(--border); color: var(--text); font-weight: 700; font-size: 0.8rem; padding: 5px 8px; border-radius: 8px; }

.context-pill input { width: 125px; }

.scan-btn-mini { background: var(--primary); color: #fff; border: 0; border-radius: 8px; padding: 5px 10px; font-size: 0.76rem; font-weight: 700; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; }


.lang-select-pill { background: var(--field); border: 1px solid var(--border-hi); color: var(--text); font-weight: 700; font-size: 0.78rem; padding: 0 10px; height: 38px; border-radius: 10px; cursor: pointer; }


.mode-indicator { font-size: 0.71rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; padding: 5px 10px; border-radius: 20px; display: flex; align-items: center; gap: 6px; background: rgba(16, 185, 129, 0.15); color: var(--ok); border: 1px solid rgba(16, 185, 129, 0.3); cursor: pointer; }

.mode-indicator.live-active { background: rgba(59, 130, 246, 0.2); color: #60a5fa; border-color: rgba(59, 130, 246, 0.45); }

.mode-dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; animation: pulse 2s infinite; }

@keyframes pulse { 50% { opacity: 0.4; } }


.header-controls { display: flex; gap: 7px; align-items: center; flex-wrap: wrap; }

.vault-btn { display: inline-flex; align-items: center; gap: 7px; background: var(--field); border: 1px solid var(--border-hi); color: var(--text); height: 38px; padding: 0 12px; border-radius: 10px; font-weight: 700; font-size: 0.79rem; cursor: pointer; }

.vault-btn.login-cta { background: linear-gradient(135deg, var(--primary), var(--accent)); border-color: transparent; color: #fff; }

.vault-count { background: var(--primary); color: #fff; padding: 1px 7px; border-radius: 99px; font-size: 0.71rem; }

.icon-btn { background: transparent; border: 1px solid var(--border); color: var(--text); width: 38px; height: 38px; border-radius: 10px; display: grid; place-items: center; cursor: pointer; }


.view { transition: opacity 0.3s, transform 0.3s; }

.view.leaving { opacity: 0; transform: translateY(10px); }

#portal-view { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 85vh; padding: 36px 20px 80px; }

.portal-hero { text-align: center; margin-bottom: 24px; max-width: 820px; }

.adapt-banner { display: inline-flex; align-items: center; gap: 9px; padding: 7px 16px; border-radius: 99px; background: var(--primary-glow); border: 1px solid var(--border-hi); color: var(--text); font-size: 0.84rem; font-weight: 700; margin-bottom: 14px; cursor: pointer; }

.portal-hero h2 { font-size: clamp(1.9rem, 4.2vw, 2.9rem); font-weight: 800; margin: 0 0 12px; line-height: 1.15; }

.portal-hero p { color: var(--text-2); font-size: 1rem; margin: 0 auto; line-height: 1.55; }


.company-intel-strip { width: 100%; max-width: 1120px; margin-bottom: 20px; padding: 18px 22px; border-radius: 16px; display: flex; flex-direction: column; gap: 10px; border-left: 4px solid var(--primary); }

.company-intel-strip.syncing { border-left-color: var(--accent); box-shadow: 0 0 25px var(--primary-glow); }

.company-intel-strip.not-found { border-left-color: var(--danger); background: rgba(239, 68, 68, 0.08); }

.intel-strip-top { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; }

.intel-strip-title { font-size: 0.92rem; font-weight: 800; color: var(--text); display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

.intel-strip-badges { display: flex; gap: 7px; flex-wrap: wrap; }

.intel-pill { font-size: 0.72rem; font-weight: 700; padding: 4px 10px; border-radius: 99px; background: var(--field); border: 1px solid var(--border-hi); color: var(--text-2); }

.intel-pill.live-osint { background: rgba(16, 185, 129, 0.15); color: var(--ok); border-color: rgba(16, 185, 129, 0.38); }

.intel-pill.tier-pill { background: rgba(139, 92, 246, 0.16); color: #c4b5fd; border-color: rgba(139, 92, 246, 0.4); }

.intel-pill.error-pill { background: rgba(239, 68, 68, 0.18); color: #fca5a5; border-color: rgba(239, 68, 68, 0.45); }

.intel-grid-details { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 10px; padding-top: 4px; }

.intel-detail-box { background: var(--field); border: 1px solid var(--border); border-radius: 10px; padding: 10px 13px; font-size: 0.81rem; color: var(--text-2); line-height: 1.48; }

.intel-detail-box strong { display: block; font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.4px; color: var(--primary); margin-bottom: 3px; }

.intel-news-bar { margin-top: 2px; padding: 8px 12px; border-radius: 10px; background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.28); font-size: 0.79rem; color: var(--ok); font-weight: 600; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }


.dept-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); gap: 22px; width: 100%; max-width: 1120px; }

.dept-card { padding: 30px 24px; display: flex; flex-direction: column; align-items: flex-start; text-align: left; cursor: pointer; color: inherit; position: relative; overflow: hidden; transition: transform 0.3s; }

.dept-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: var(--card-accent, var(--primary)); opacity: 0.75; }

.dept-card:hover { transform: scale(1.015); border-color: var(--border-hi); }

.dept-top-row { display: flex; justify-content: space-between; align-items: center; width: 100%; margin-bottom: 18px; }

.dept-icon { width: 54px; height: 54px; border-radius: 15px; background: color-mix(in srgb, var(--card-accent, var(--primary)) 15%, transparent); border: 1px solid color-mix(in srgb, var(--card-accent, var(--primary)) 35%, transparent); display: grid; place-items: center; color: var(--card-accent, var(--primary)); }

.dept-card h3 { font-size: 1.35rem; margin: 0 0 8px; font-weight: 800; }

.dept-card p { color: var(--text-2); margin: 0 0 16px; line-height: 1.5; font-size: 0.92rem; }

.dept-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: auto; }

.dept-tag { font-size: 0.72rem; font-weight: 600; padding: 4px 9px; border-radius: 6px; background: var(--field); color: var(--text-2); border: 1px solid var(--border); }


#dashboard-view { display: flex; flex-direction: column; align-items: center; max-width: 1120px; margin: 26px auto 90px; padding: 0 20px; width: 100%; }

.dash-top { display: flex; align-items: center; justify-content: space-between; width: 100%; margin-bottom: 14px; gap: 14px; flex-wrap: wrap; }

.dash-top-left { display: flex; align-items: center; gap: 14px; }

.dash-brand-logo { width: 50px; height: 50px; border-radius: 14px; background: #fff; padding: 4px; object-fit: contain; border: 1px solid var(--border-hi); }

.dash-hero h2 { font-size: clamp(1.5rem, 3vw, 2rem); font-weight: 800; margin: 0 0 3px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }

.dash-hero p { color: var(--text-2); margin: 0; font-size: 0.9rem; }


.construction-banner { width: 100%; padding: 12px 18px; border-radius: 14px; background: rgba(245, 158, 11, 0.14); border: 1px solid rgba(245, 158, 11, 0.45); color: #fcd34d; font-size: 0.85rem; font-weight: 600; margin-bottom: 16px; display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }


.kpi-strip { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 14px; width: 100%; margin-bottom: 22px; }

.kpi-card { padding: 15px 18px; border-radius: 16px; display: flex; flex-direction: column; gap: 5px; border-left: 3px solid var(--primary); text-align: left; }

.kpi-label { font-size: 0.72rem; color: var(--text-2); font-weight: 800; text-transform: uppercase; letter-spacing: 0.5px; display: flex; justify-content: space-between; align-items: center; gap: 6px; }

.kpi-company-tag { color: var(--primary); font-weight: 800; background: var(--primary-glow); padding: 2px 7px; border-radius: 6px; font-size: 0.67rem; }

.kpi-val { font-size: 1.32rem; font-weight: 800; color: var(--text); display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }

.kpi-delta { font-size: 0.72rem; font-weight: 700; color: var(--ok); background: rgba(16,185,129,0.14); padding: 2px 8px; border-radius: 6px; border: 1px solid rgba(16,185,129,0.28); }

.kpi-sub { font-size: 0.74rem; color: var(--text-2); font-weight: 500; line-height: 1.35; }


.command-card { padding: clamp(18px, 3vw, 30px); width: 100%; }

.tabs { display: flex; background: var(--field); padding: 6px; border-radius: 16px; border: 1px solid var(--border); margin-bottom: 18px; gap: 5px; flex-wrap: wrap; }

.tab-btn { flex: 1; min-width: 130px; background: transparent; border: 0; padding: 11px 10px; border-radius: 12px; color: var(--text-2); font-weight: 600; font-size: 0.82rem; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 7px; }

.tab-btn[aria-selected="true"] { color: #fff; background: linear-gradient(135deg, var(--primary), var(--accent)); box-shadow: 0 8px 20px var(--primary-glow); }


.tool-context-row { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; margin-bottom: 12px; font-size: 0.82rem; color: var(--text-2); }

.preset-chips { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }

.preset-chip { background: var(--field); border: 1px solid var(--border); color: var(--text-2); padding: 4px 10px; border-radius: 99px; font-size: 0.75rem; font-weight: 600; cursor: pointer; }

.preset-chip:hover { border-color: var(--primary); color: var(--text); background: var(--primary-glow); }


.podcast-toggle-btn { display: inline-flex; align-items: center; gap: 7px; padding: 5px 12px; border-radius: 99px; font-size: 0.75rem; font-weight: 700; cursor: pointer; background: var(--field); border: 1px solid var(--border); color: var(--text-2); }

.podcast-toggle-btn.active { background: rgba(139, 92, 246, 0.22); border-color: #8b5cf6; color: #c4b5fd; }


.input-group { display: flex; flex-direction: column; gap: 14px; }

.input-row { display: grid; grid-template-columns: 1fr auto; gap: 10px; }

@media(max-width: 780px) { .input-row { grid-template-columns: 1fr; } }

.input-wrapper { position: relative; display: flex; align-items: center; width: 100%; }

.input-icon { position: absolute; left: 18px; color: var(--text-3); width: 20px; height: 20px; pointer-events: none; }

.input-wrapper input { width: 100%; padding: 17px 78px 17px 48px; background: var(--field); border: 1px solid var(--border); border-radius: 14px; font-size: 0.98rem; font-weight: 500; color: var(--text); }

.kbd-badge { position: absolute; right: 14px; display: flex; gap: 4px; pointer-events: none; }

.kbd-badge kbd { background: var(--bg-surface); border: 1px solid var(--border); border-radius: 6px; padding: 3px 6px; font-family: ui-monospace, monospace; font-size: 0.75rem; color: var(--text-2); }

.param-select { background: var(--field); border: 1px solid var(--border-hi); color: var(--text); padding: 0 14px; border-radius: 14px; font-weight: 700; font-size: 0.84rem; min-height: 54px; cursor: pointer; }

.action-btn { background: linear-gradient(135deg, var(--primary), var(--accent)); color: #fff; border: 0; width: 100%; padding: 16px; border-radius: 14px; font-weight: 700; font-size: 1.02rem; cursor: pointer; box-shadow: 0 10px 25px var(--primary-glow), var(--inner); display: flex; justify-content: center; align-items: center; gap: 10px; }

.spin { animation: spin 1s linear infinite; }


.feed-section { width: 100%; margin-top: 26px; }

.feed-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; gap: 8px; flex-wrap: wrap; }

.feed-toggle { background: none; border: 0; color: var(--text-2); font-weight: 700; font-size: 0.94rem; display: flex; align-items: center; gap: 8px; cursor: pointer; padding: 8px 10px; }

.clear-history { background: transparent; border: 0; color: var(--danger); cursor: pointer; font-weight: 600; font-size: 0.86rem; display: flex; align-items: center; gap: 6px; padding: 8px 12px; border-radius: 8px; }

#feed { display: flex; flex-direction: column; gap: 14px; }

.empty-state { padding: 38px 24px; text-align: center; border-radius: 16px; color: var(--text-2); border: 1px dashed var(--border-hi); display: flex; flex-direction: column; align-items: center; gap: 10px; }

.feed-card { padding: 20px 24px; display: flex; flex-direction: column; gap: 12px; border-left: 4px solid var(--primary); }

.feed-card.done { border-left-color: var(--ok); }

.feed-card.failed { border-left-color: var(--danger); }

.card-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }

.target-title { font-size: 1.08rem; font-weight: 700; margin: 0; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

.badge { background: var(--primary-glow); color: var(--text); padding: 3px 9px; border-radius: 6px; font-size: 0.71rem; font-weight: 700; border: 1px solid var(--border-hi); }

.meta { color: var(--text-3); font-size: 0.78rem; display: flex; align-items: center; gap: 6px; margin-top: 4px; flex-wrap: wrap; }

.status { font-size: 0.82rem; font-weight: 700; display: flex; align-items: center; gap: 6px; white-space: nowrap; color: var(--text-2); }

.done .status { color: var(--ok); }

.failed .status { color: var(--danger); }

.terminal { background: #0b1220; color: #34d399; font-family: ui-monospace, monospace; padding: 12px 15px; border-radius: 12px; font-size: 0.83rem; border: 1px solid var(--border); display: flex; align-items: center; gap: 10px; }

.progress-track { width: 100%; height: 4px; background: rgba(255,255,255,0.08); border-radius: 99px; overflow: hidden; }

.progress-fill { height: 100%; width: 35%; background: linear-gradient(90deg, var(--primary), var(--accent)); border-radius: 99px; animation: indeterminateBar 1.8s ease-in-out infinite alternate; }

@keyframes indeterminateBar { from { transform: translateX(-10%); width: 25%; } to { transform: translateX(220%); width: 45%; } }

.card-summary { background: var(--field); border: 1px solid var(--border); border-radius: 12px; padding: 13px 15px; font-size: 0.86rem; color: var(--text-2); line-height: 1.5; }

.card-summary strong { color: var(--text); }

.card-actions { display: flex; gap: 9px; flex-wrap: wrap; align-items: center; }

.btn-link { display: inline-flex; align-items: center; gap: 7px; text-decoration: none; padding: 9px 16px; border-radius: 10px; font-weight: 600; font-size: 0.84rem; cursor: pointer; background: var(--bg-surface); color: var(--text); border: 1px solid var(--border); transition: all 0.2s; }

.btn-link:hover { border-color: var(--primary); }

.btn-link.primary-action { background: var(--primary); color: #fff; border-color: var(--primary); }

.btn-link.podcast-action { background: rgba(139, 92, 246, 0.18); color: #c4b5fd; border-color: rgba(139, 92, 246, 0.45); }


.vault-list { display: flex; flex-direction: column; gap: 10px; max-height: 52vh; overflow-y: auto; margin-top: 12px; }

.vault-item { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 12px 14px; border-radius: 12px; background: var(--field); border: 1px solid var(--border); flex-wrap: wrap; }

.vault-item-info { display: flex; flex-direction: column; gap: 3px; }

.vault-item-title { font-weight: 700; font-size: 0.9rem; color: var(--text); display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

.vault-item-sub { font-size: 0.75rem; color: var(--text-2); }


.bottom-left-dock { position: fixed; bottom: 20px; left: 20px; z-index: 100; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }

.dock-pill-btn { background: var(--bg-surface); border: 1px solid var(--border); padding: 9px 16px; border-radius: 30px; font-weight: 700; font-size: 0.8rem; cursor: pointer; backdrop-filter: blur(12px); color: var(--text-2); display: inline-flex; align-items: center; gap: 8px; box-shadow: 0 10px 25px rgba(0,0,0,0.35); }

.dock-pill-btn.secret-studio-pill { background: linear-gradient(135deg, rgba(16, 185, 129, 0.22), rgba(59, 130, 246, 0.22)); border-color: rgba(16, 185, 129, 0.55); color: #34d399; }


.changelog-entry { background: var(--field); border: 1px solid var(--border); border-left: 3px solid var(--primary); border-radius: 12px; padding: 14px 16px; margin-bottom: 12px; }

.changelog-entry.latest { border-left-color: var(--ok); background: color-mix(in srgb, var(--ok) 6%, var(--field)); }

.changelog-ver { display: flex; justify-content: space-between; align-items: center; font-weight: 800; font-size: 0.92rem; color: var(--text); margin-bottom: 6px; }

.changelog-date { font-size: 0.73rem; color: var(--text-3); font-weight: 600; }

.changelog-list { margin: 0; padding-left: 18px; font-size: 0.82rem; color: var(--text-2); line-height: 1.55; }


.overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.72); backdrop-filter: blur(8px); z-index: 2000; opacity: 0; pointer-events: none; transition: opacity 0.3s; }

.modal { position: fixed; top: 5vh; left: 0; right: 0; margin: auto; width: min(740px, 94vw); max-height: 88vh; overflow: auto; padding: 28px; z-index: 2001; opacity: 0; pointer-events: none; transition: opacity 0.3s; }

.overlay.active, .modal.active { opacity: 1; pointer-events: all; }

.modal h3 { margin: 0 0 14px; font-size: 1.35rem; font-weight: 800; border-bottom: 1px solid var(--border); padding-bottom: 12px; display: flex; align-items: center; gap: 10px; }

.modal .close { background: var(--text); color: var(--bg-base); border: 0; padding: 12px; border-radius: 12px; width: 100%; font-weight: 700; font-size: 0.92rem; cursor: pointer; margin-top: 12px; }


.onboard-grid { display: flex; flex-direction: column; gap: 12px; margin: 12px 0; }

.onboard-field { display: flex; flex-direction: column; gap: 5px; font-size: 0.82rem; font-weight: 600; color: var(--text-2); }

.onboard-field input, .onboard-field select, .onboard-field textarea { padding: 10px 12px; border-radius: 10px; border: 1px solid var(--border); background: var(--field); color: var(--text); font-size: 0.88rem; font-weight: 600; }

.metric-bars { display: flex; flex-direction: column; gap: 10px; margin: 14px 0; }

.metric-row { display: flex; flex-direction: column; gap: 4px; font-size: 0.82rem; }

.metric-row-top { display: flex; justify-content: space-between; font-weight: 600; }

.bar-track { height: 8px; background: var(--field); border-radius: 99px; overflow: hidden; }

.bar-fill { height: 100%; background: linear-gradient(90deg, var(--primary), var(--accent)); border-radius: 99px; }


.bot-launcher { position: fixed; bottom: 20px; right: 20px; z-index: 1500; background: linear-gradient(135deg, var(--primary), var(--accent)); color: #fff; border: 0; border-radius: 99px; padding: 12px 18px; font-weight: 700; font-size: 0.88rem; cursor: pointer; box-shadow: 0 12px 30px var(--primary-glow); display: flex; align-items: center; gap: 8px; }

.bot-window { position: fixed; bottom: 78px; right: 20px; width: min(395px, 92vw); height: 510px; max-height: 76vh; z-index: 1501; display: flex; flex-direction: column; overflow: hidden; opacity: 0; pointer-events: none; transform: translateY(16px) scale(0.96); transition: opacity 0.25s, transform 0.25s; }

.bot-window.open { opacity: 1; pointer-events: all; transform: translateY(0) scale(1); }

.bot-header { padding: 14px 16px; border-bottom: 1px solid var(--border); background: color-mix(in srgb, var(--primary) 15%, transparent); display: flex; justify-content: space-between; align-items: center; }

.bot-title { display: flex; align-items: center; gap: 9px; font-weight: 800; font-size: 0.92rem; }

.bot-sub { font-size: 0.7rem; color: var(--text-2); font-weight: 500; display: block; }

.bot-messages { flex: 1; padding: 14px; overflow-y: auto; display: flex; flex-direction: column; gap: 10px; font-size: 0.84rem; line-height: 1.45; }

.bot-msg { padding: 10px 13px; border-radius: 13px; max-width: 88%; word-wrap: break-word; }

.bot-msg.ai { background: var(--field); border: 1px solid var(--border); color: var(--text); align-self: flex-start; }

.bot-msg.user { background: var(--primary); color: #fff; align-self: flex-end; }

.bot-action-btn { margin-top: 7px; display: inline-flex; align-items: center; gap: 6px; background: var(--primary); color: #fff; border: 0; padding: 6px 11px; border-radius: 8px; font-size: 0.75rem; font-weight: 700; cursor: pointer; }

.bot-prompts { display: flex; gap: 5px; flex-wrap: wrap; padding: 7px 12px; border-top: 1px solid var(--border); background: rgba(0,0,0,0.15); }

.bot-prompt-btn { background: var(--bg-surface); border: 1px solid var(--border); color: var(--text-2); font-size: 0.72rem; font-weight: 600; padding: 4px 9px; border-radius: 99px; cursor: pointer; }

.bot-input-bar { display: flex; gap: 8px; padding: 10px 12px; border-top: 1px solid var(--border); background: var(--bg-surface); }

.bot-input-bar input { flex: 1; background: var(--field); border: 1px solid var(--border); color: var(--text); padding: 9px 11px; border-radius: 10px; font-size: 0.84rem; }

.bot-send { background: var(--primary); color: #fff; border: 0; border-radius: 10px; width: 36px; display: grid; place-items: center; cursor: pointer; }

.toast { position: fixed; top: 20px; right: 20px; max-width: 88vw; background: var(--danger); color: #fff; padding: 13px 18px; border-radius: 12px; font-weight: 600; transform: translateX(150%); transition: transform 0.35s; z-index: 3000; display: flex; align-items: center; gap: 10px; }

.toast.success { background: var(--ok); }

.toast.show { transform: translateX(0); }

@media(max-width: 640px) { .logo-tagline, .kbd-badge { display: none; } .input-wrapper input { padding-right: 14px; } .bottom-left-dock { bottom: 12px; left: 12px; } .bot-launcher span { display: none; } }

</style>

</head>

<body>


<div class="bg-system" aria-hidden="true">

    <div class="bg-layer active" id="bg-orb"><div class="orb orb-1"></div><div class="orb orb-2"></div></div>

    <div class="bg-layer" id="bg-grid"><div class="grid-overlay"></div></div>

    <div class="bg-layer" id="bg-radar"><div class="radar-rings"></div><div class="radar-sweep"></div></div>

    <div class="bg-layer" id="bg-waves"><div class="wave-line"></div><div class="wave-line"></div></div>

</div>


<div id="toast" class="toast" role="status" aria-live="polite"><i data-lucide="alert-circle"></i><span></span></div>


<div class="overlay" id="modalOverlay"></div>

<div class="modal glass" id="appModal" role="dialog" aria-modal="true" aria-labelledby="modalTitle">

    <h3 id="modalTitle"></h3>

    <div id="modalBody"></div>

    <button type="button" class="close" id="modalClose">Close Window (Esc)</button>

</div>


<header class="header">

    <button type="button" class="logo" id="logoBtn" aria-label="VANTAGE OS Home">

        <span class="logo-mark" id="secretLogoTrigger" title="VANTAGE OS Prism Core">

            <svg width="24" height="24" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">

                <defs>

                    <linearGradient id="vantageGrad" x1="20" y1="16" x2="80" y2="84" gradientUnits="userSpaceOnUse">

                        <stop offset="0%" stop-color="#38BDF8"/>

                        <stop offset="50%" stop-color="#3B82F6"/>

                        <stop offset="100%" stop-color="#8B5CF6"/>

                    </linearGradient>

                </defs>

                <path d="M50 16 L79.4 33 V67 L50 84 L20.6 67 V33 Z" stroke="url(#vantageGrad)" stroke-width="6" fill="rgba(59,130,246,0.16)" stroke-linejoin="round"/>

                <path d="M35.5 39 L50 66.5 L64.5 39" stroke="#FFFFFF" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>

                <circle cx="50" cy="36.5" r="6" fill="#38BDF8"/>

            </svg>

        </span>

        <div class="logo-text-wrap">

            <h1>VANTAGE <span class="logo-badge">OS</span></h1>

            <span class="logo-tagline">Global 360° ABM & Market Intelligence</span>

        </div>

    </button>


    <div class="context-bar" id="workspaceContextBar" hidden title="Enter any company worldwide — VANTAGE OS auto-discovers its official domain & scrapes live B2B OSINT">

        <button type="button" class="brand-badge-btn" id="openBrandModalBtn">

            <img id="barLogoImg" class="company-logo-img" src="https://www.google.com/s2/favicons?domain=xylem.com&sz=128" alt="">

            <span id="barCompanyName">Xylem</span>

            <i data-lucide="sliders" size="13"></i>

        </button>


        <div class="context-pill">

            <label for="ctxCompany">Company:</label>

            <input type="text" id="ctxCompany" value="Xylem" placeholder="Any company...">

        </div>


        <div class="context-pill">

            <label for="ctxDomain">Domain:</label>

            <input type="text" id="ctxDomain" value="xylem.com" placeholder="domain.com" style="width:135px">

        </div>


        <div class="context-pill">

            <label for="ctxSector">Sector:</label>

            <select id="ctxSector">

                <option value="Auto-Detect">✨ Auto-Detect Sector</option>

                <option value="Industrial & Energy">Industrial & Water/Energy</option>

                <option value="E-Commerce">E-Commerce & Digital Growth</option>

                <option value="B2B SaaS">B2B SaaS & Cloud</option>

                <option value="FinTech">FinTech & Banking</option>

                <option value="Healthcare">HealthTech & Bio</option>

            </select>

        </div>


        <button type="button" class="scan-btn-mini" id="btnResearchCompany">

            <i data-lucide="radar" size="13" id="headerScanIcon"></i>

            <span>Research</span>

        </button>


        <button type="button" class="mode-indicator" id="modeBadge">

            <span class="mode-dot"></span>

            <span id="modeText">Demo Mode</span>

        </button>

    </div>


    <div class="header-controls">

        <!-- Global Multi-Language Selector (Enforces strict output language across Scraper & n8n) -->

        <select id="globalLangSelect" class="lang-select-pill" aria-label="Output & Interface Language" title="Select Output Language for all OSINT Summaries & Deliverables">

            <option value="en">🌐 EN (English)</option>

            <option value="es">🇪🇸 ES (Español)</option>

            <option value="de">🇩🇪 DE (Deutsch)</option>

            <option value="fr">🇫🇷 FR (Français)</option>

            <option value="pt">🇵🇹 PT (Português)</option>

            <option value="it">🇮🇹 IT (Italiano)</option>

            <option value="nl">🇳🇱 NL (Nederlands)</option>

            <option value="ja">🇯🇵 JA (日本語)</option>

            <option value="zh">🇨🇳 ZH (中文)</option>

            <option value="ar">🇦🇪 AR (العربية)</option>

        </select>


        <button type="button" class="vault-btn" id="btnBackToLanding" hidden title="Product Overview, ABM Architecture & Pricing">

            <i data-lucide="globe" size="15"></i>

            <span>Product Site</span>

        </button>

        <button type="button" class="vault-btn" id="btnVault" hidden title="Open Saved Drive Files Vault">

            <i data-lucide="folder-kanban" size="16"></i>

            <span>Asset Vault</span>

            <span class="vault-count" id="vaultCountBadge">Demo</span>

        </button>

        <button type="button" class="vault-btn login-cta" id="btnHeaderLogin">

            <i data-lucide="log-in" size="15"></i>

            <span id="btnHeaderLoginText">Client Login</span>

        </button>

        <button type="button" class="icon-btn" id="btnHome" hidden title="Change division"><i data-lucide="layout-grid"></i></button>

        <button type="button" class="icon-btn" id="btnTheme" title="Toggle theme"><i data-lucide="moon" id="themeIcon"></i></button>

    </div>

</header>


<!-- =====================================================================

          VIEW 1: EXPANDED COMMERCIAL LANDING PAGE (GLOBAL 360° ABM + SME ICP)

          ===================================================================== -->

<main id="landing-view" class="view">

    <section class="lp-hero">

        <div class="lp-pill"><i data-lucide="globe-2" size="14"></i> VANTAGE OS v10.0 • Borderless 360° Account-Based Marketing & GTM Engine</div>

        <h2>Know Every Target Account Inside-Out.<br><span>Prospect Anywhere in the World Without Human Error.</span></h2>

        <p>Whether you are a Canadian enterprise expanding into Namibia, a European scaleup entering North America, or a lean B2B agency scaling outbound—VANTAGE OS replaces 20+ hours of manual research with surgical 4-layer ABM intelligence, custom-branded proposals, and AI audio briefings.</p>

        <div class="lp-cta-row">

            <button type="button" class="lp-btn-primary" id="lpBtnLogin">

                <i data-lucide="key-round" size="18"></i> Sign In to Production OS

            </button>

            <button type="button" class="lp-btn-secondary" id="lpBtnDemo">

                <i data-lucide="play-circle" size="18"></i> Launch 360° Interactive Demo

            </button>

        </div>

    </section>


    <!-- Deep 4-Layer ABM Methodology Section -->

    <section class="lp-section">

        <div class="lp-sec-head">

            <h3>Surgical 4-Layer ABM Intelligence</h3>

            <p>Generic outreach fails because marketers don't truly know their prospect. VANTAGE OS researches four concentric layers of B2B intelligence before writing a single word—allowing your team to be hyper-precise on the first touch.</p>

        </div>

        <div class="lp-abm-grid">

            <div class="lp-abm-step glass">

                <span class="lp-abm-num">Layer 01 • Macro Context</span>

                <h4>🌍 Industry & Territory</h4>

                <p>Scans any country or vertical worldwide (from Toronto to Windhoek, LATAM to APAC) for live tenders, regulatory shifts, distributor searches, and whitespace demand.</p>

            </div>

            <div class="lp-abm-step glass">

                <span class="lp-abm-num">Layer 02 • Account Telemetry</span>

                <h4>🏢 Company Architecture</h4>

                <p>Audits the target company's live website, business model, financial scale tier, tech stack gaps, and direct competitor vulnerabilities in real time.</p>

            </div>

            <div class="lp-abm-step glass">

                <span class="lp-abm-num">Layer 03 • Buying Committee</span>

                <h4>👥 Decision-Maker Mapping</h4>

                <p>Separates Economic Buyers (CEO/CFO) from Technical Champions (VP Ops/CMO), inferring corporate email patterns and direct LinkedIn coordinates.</p>

            </div>

            <div class="lp-abm-step glass">

                <span class="lp-abm-num">Layer 04 • Career & Psychometrics</span>

                <h4>🧠 Full Career & Persona</h4>

                <p>Analyzes the decision-maker's entire career trajectory, past roles, KPIs, and friction triggers—crafting outreach hooks and proposals that resonate personally.</p>

            </div>

        </div>

    </section>


    <!-- ICP Section: Modular Power for SMEs, Lean Teams & Growth Partners -->

    <section class="lp-section">

        <div class="lp-sec-head">

            <h3>Engineered for Lean Teams, SMEs & Growth Agencies</h3>

            <p>Small teams lose deals when manual research takes days or copy-paste human errors ruin executive credibility. VANTAGE OS is 100% modular—activate only the workflows you need.</p>

        </div>

        <div class="lp-bento-grid">

            <article class="lp-bento-card glass">

                <div class="lp-bento-icon"><i data-lucide="clock" size="22"></i></div>

                <h4>Save 18+ Hours Per Rep Weekly</h4>

                <p>Eliminate manual tab-switching across search engines, news feeds, LinkedIn, and document editors. Compress 4 hours of account research and proposal formatting into a single 45-second autonomous run.</p>

                <div class="lp-bento-meta"><i data-lucide="zap" size="14"></i> 95% Reduction in Pre-Call Preparation Time</div>

            </article>

            <article class="lp-bento-card glass">

                <div class="lp-bento-icon"><i data-lucide="shield-check" size="22"></i></div>

                <h4>Zero Copy-Paste Human Errors</h4>

                <p>Small teams juggling multiple prospects often mix up client names, logos, or outdated metrics. VANTAGE OS programmatically injects the exact prospect's branding, verified B2B data, and target language every time.</p>

                <div class="lp-bento-meta"><i data-lucide="check-circle-2" size="14"></i> Strict B2B Verification Filter (Zero Generalist Noise)</div>

            </article>

            <article class="lp-bento-card glass">

                <div class="lp-bento-icon"><i data-lucide="blocks" size="22"></i></div>

                <h4>100% Modular & Borderless</h4>

                <p>Start with our 6 live Sales & Market Expansion modules today. Whether you are an SME exporting globally, a B2B SaaS startup, or an agency managing 20 client brands, the workspace adapts in 1 click.</p>

                <div class="lp-bento-meta"><i data-lucide="globe" size="14"></i> 10+ Output Languages • Any Origin to Any Country</div>

            </article>

        </div>

    </section>


    <!-- 6 Live Modules + 2 Roadmap Divisions -->

    <section class="lp-section">

        <div class="lp-sec-head">

            <h3>Production Architecture & Modular Roadmap</h3>

            <p>All 6 Sales & Market Expansion modules are <strong>Live in Production</strong> today. Marketing Studio and Customer Success Engines are currently under construction for upcoming modular releases.</p>

        </div>

        <div class="lp-bento-grid">

            <article class="lp-bento-card glass">

                <h4><span>1. 360° Territory & Expansion Radar</span> <span class="status-pill-live">● Live</span></h4>

                <p>Detects cross-border expansion signals between any two countries worldwide (local hiring, tenders, distributor searches, and market-entry press).</p>

                <div class="lp-bento-meta"><i data-lucide="file-spreadsheet" size="14"></i> Branded Google Sheet + Verified Source Links</div>

            </article>

            <article class="lp-bento-card glass">

                <h4><span>2. 360° Competitor & Account Brief</span> <span class="status-pill-live">● Live</span></h4>

                <p>Deep B2B OSINT qualification on any target company or competitor. Extracts strategic initiatives, digital maturity score, and displacement angles.</p>

                <div class="lp-bento-meta"><i data-lucide="headphones" size="14"></i> Executive Scorecard Doc + 90s AI Audio Podcast</div>

            </article>

            <article class="lp-bento-card glass">

                <h4><span>3. Buying Committee Contact Sweep</span> <span class="status-pill-live">● Live</span></h4>

                <p>Extracts the exact Buying Committee (Economic Buyers vs. Priority Champions) with LinkedIn links, corporate email patterns, and outreach sequences.</p>

                <div class="lp-bento-meta"><i data-lucide="users" size="14"></i> Multi-Tab Contact Sheet Ready for Outbound</div>

            </article>

            <article class="lp-bento-card glass">

                <h4><span>4. Career & Persona Psychology</span> <span class="status-pill-live">● Live</span></h4>

                <p>Maps any decision-maker's full career background, role KPIs, friction triggers, and top 3 objections to arm marketers with surgical precision.</p>

                <div class="lp-bento-meta"><i data-lucide="user-check" size="14"></i> Psychometric Dossier in Google Docs</div>

            </article>

            <article class="lp-bento-card glass">

                <h4><span>5. Deal Velocity & Risk Audit</span> <span class="status-pill-live">● Live</span></h4>

                <p>Audits active pipeline opportunities against competitor threats and CFO procurement bottlenecks with concrete unblocking plays.</p>

                <div class="lp-bento-meta"><i data-lucide="gauge" size="14"></i> Executive Deal Risk & ROI Report</div>

            </article>

            <article class="lp-bento-card glass">

                <h4><span>6. Executive Proposal Architect</span> <span class="status-pill-live">● Live</span></h4>

                <p>1-click generation of client-ready commercial proposals mapping diagnosed challenges to a 3-phase execution roadmap—styled with your brand.</p>

                <div class="lp-bento-meta"><i data-lucide="file-text" size="14"></i> Custom-Branded Proposal Doc + Audio Briefing</div>

            </article>

            <article class="lp-bento-card glass roadmap-card">

                <h4><span>7. Demand & Growth Studio (Marketing)</span> <span class="status-pill-dev">🚧 Under Construction</span></h4>

                <p>Upcoming modular release: Competitor Ad Share-of-Voice Audits, AI Budget Reallocation, ABM Landing Page Builder, and Event Lead OSINT.</p>

                <div class="lp-bento-meta" style="color:var(--warn)"><i data-lucide="Sparkles" size="14"></i> In Development • Included in Pro Roadmap</div>

            </article>

            <article class="lp-bento-card glass roadmap-card">

                <h4><span>8. Account Expansion & Retention (CS)</span> <span class="status-pill-dev">🚧 Under Construction</span></h4>

                <p>Upcoming modular release: Automated Executive QBR Decks, Telemetry Churn Radar, and Net-Dollar-Retention Upsell Playbooks.</p>

                <div class="lp-bento-meta" style="color:var(--warn)"><i data-lucide="Sparkles" size="14"></i> In Development • Included in Pro Roadmap</div>

            </article>

        </div>

    </section>


    <!-- Pricing Tiers Section -->

    <section class="lp-section">

        <div class="lp-sec-head">

            <h3>Predictable Monthly SaaS Subscription</h3>

            <p>Zero custom development financing. Zero third-party API management. Start with the live Sales & Market Expansion Engine today.</p>

        </div>

        <div class="lp-pricing-grid">

            <div class="lp-price-card glass">

                <div class="lp-tier-name">Growth Pilot (SME & Lean Teams)</div>

                <div class="lp-tier-price">€149 <span>/ month</span></div>

                <p class="lp-tier-desc">Ideal for SMEs, lean sales teams, and agencies automating global prospecting and deep ABM qualification.</p>

                <ul class="lp-feat-list">

                    <li><i data-lucide="check" size="16"></i> <strong>All 6 Live Sales & Market Expansion Modules</strong></li>

                    <li><i data-lucide="check" size="16"></i> <strong>360° Global Scope</strong> (Prospect in any country/language)</li>

                    <li><i data-lucide="check" size="16"></i> <strong>150 Live Deep OSINT & ABM Runs / month</strong></li>

                    <li><i data-lucide="check" size="16"></i> <strong>Automatic Brand Styling</strong> on all Google Docs & Sheets</li>

                    <li><i data-lucide="check" size="16"></i> <strong>Permanent Google Drive Asset Vault</strong></li>

                </ul>

                <button type="button" class="lp-btn-secondary" style="width:100%;justify-content:center" data-login-trigger="Growth Pilot">Start Growth Pilot</button>

            </div>


            <div class="lp-price-card glass featured">

                <span class="lp-pop-badge">Most Popular • Full ABM Stack</span>

                <div class="lp-tier-name">Pro GTM & Growth Partner</div>

                <div class="lp-tier-price">€349 <span>/ month</span></div>

                <p class="lp-tier-desc">Designed for scaling B2B companies and Growth Partners running continuous multi-brand ABM and audio briefings.</p>

                <ul class="lp-feat-list">

                    <li><i data-lucide="check" size="16"></i> <strong>All 6 Live Modules + Early Access to Marketing & CS</strong></li>

                    <li><i data-lucide="check" size="16"></i> <strong>500 Live OSINT & Deep Career ABM Runs / month</strong></li>

                    <li><i data-lucide="check" size="16"></i> <strong>AI Audio Podcast Briefings (.wav)</strong> included</li>

                    <li><i data-lucide="check" size="16"></i> <strong>Unlimited Brand Workspace Switching</strong></li>

                    <li><i data-lucide="check" size="16"></i> <strong>Priority Cloud Webhook Execution</strong></li>

                </ul>

                <button type="button" class="lp-btn-primary" style="width:100%;justify-content:center" data-login-trigger="Pro GTM">Sign In / Activate Pro GTM</button>

            </div>


            <div class="lp-price-card glass">

                <div class="lp-tier-name">Enterprise & Multi-Seat</div>

                <div class="lp-tier-price">€690 <span>/ month</span></div>

                <p class="lp-tier-desc">For international revenue organizations requiring dedicated webhook clusters and custom templates.</p>

                <ul class="lp-feat-list">

                    <li><i data-lucide="check" size="16"></i> <strong>Unlimited Team Seats & Dedicated Drive Vault</strong></li>

                    <li><i data-lucide="check" size="16"></i> <strong>1,500+ Live Agent Executions / month</strong></li>

                    <li><i data-lucide="check" size="16"></i> <strong>Custom White-Label Document Templates</strong></li>

                    <li><i data-lucide="check" size="16"></i> <strong>Dedicated GTM Engineering Support</strong></li>

                </ul>

                <button type="button" class="lp-btn-secondary" style="width:100%;justify-content:center" data-login-trigger="Enterprise">Client Portal Login</button>

            </div>

        </div>

    </section>

</main>


<!-- =====================================================================

          VIEW 2: DIVISION PORTAL VIEW

          ===================================================================== -->

<main id="portal-view" class="view" hidden>

    <div class="portal-hero">

        <button type="button" class="adapt-banner" id="heroBrandBanner">

            <img id="heroLogoImg" class="company-logo-img" src="https://www.google.com/s2/favicons?domain=xylem.com&sz=128" alt="">

            <span id="portalContextBanner">VANTAGE OS • Active Workspace: Xylem (xylem.com)</span>

            <i data-lucide="sliders" size="14"></i>

        </button>

        <h2 id="portalHeroTitle">Xylem — Global 360° ABM & Market Intelligence</h2>

        <p>Type any company worldwide in the header bar: VANTAGE OS verifies the corporate entity, scrapes its live website, Wikipedia, and press footprint in your selected language, and calibrates metrics to its real scale.</p>

    </div>


    <section class="company-intel-strip glass" id="portalCompanyIntelStrip" aria-label="Company Intelligence Snapshot"></section>


    <div class="dept-grid">

        <button type="button" class="dept-card glass" data-dept="sales" style="--card-accent:#3b82f6">

            <div class="dept-top-row">

                <span class="dept-icon"><i data-lucide="briefcase" size="28"></i></span>

                <span class="status-pill-live">● 6 Modules Live</span>

            </div>

            <h3>Sales & Market Expansion</h3>

            <p>Global 360° territory radar, deep competitor briefs, buying-committee contact sweep, career persona psychology, and branded proposals + podcasts.</p>

            <div class="dept-tags">

                <span class="dept-tag">360° Global Expansion</span>

                <span class="dept-tag">Career & Persona ABM</span>

                <span class="dept-tag">AI Audio Podcast</span>

            </div>

        </button>


        <button type="button" class="dept-card glass" data-dept="marketing" style="--card-accent:#8b5cf6">

            <div class="dept-top-row">

                <span class="dept-icon"><i data-lucide="megaphone" size="28"></i></span>

                <span class="status-pill-dev">🚧 Under Construction</span>

            </div>

            <h3>Demand & Growth Studio</h3>

            <p>Competitor share-of-voice audits, AI budget reallocation, ABM landing pages, and high-converting outbound sequences.</p>

            <div class="dept-tags">

                <span class="dept-tag">Roadmap Module</span>

                <span class="dept-tag">ABM Studio</span>

                <span class="dept-tag">Event OSINT</span>

            </div>

        </button>


        <button type="button" class="dept-card glass" data-dept="cs" style="--card-accent:#10b981">

            <div class="dept-top-row">

                <span class="dept-icon"><i data-lucide="heart-handshake" size="28"></i></span>

                <span class="status-pill-dev">🚧 Under Construction</span>

            </div>

            <h3>Account Expansion & Retention</h3>

            <p>Executive QBR decks, competitive churn-risk telemetry, and automated net-dollar-retention expansion playbooks.</p>

            <div class="dept-tags">

                <span class="dept-tag">Roadmap Module</span>

                <span class="dept-tag">Upsell Signals</span>

                <span class="dept-tag">Executive QBR</span>

            </div>

        </button>

    </div>

</main>


<!-- =====================================================================

          VIEW 3: TOOL EXECUTION DASHBOARD VIEW

          ===================================================================== -->

<main id="dashboard-view" class="view" hidden>

    <div class="dash-top">

        <div class="dash-top-left">

            <img id="dashLogoImg" class="dash-brand-logo" src="https://www.google.com/s2/favicons?domain=xylem.com&sz=128" alt="">

            <div class="dash-hero">

                <h2 id="dashTitle"></h2>

                <p id="dashDesc"></p>

            </div>

        </div>

        <button type="button" class="btn-link" id="syncCompanyOsintBtn" style="padding:8px 14px;font-size:0.8rem">

            <i data-lucide="refresh-cw" size="14" id="syncOsintIcon"></i>

            <span id="syncOsintText">Live Company OSINT Synced</span>

        </button>

    </div>


    <!-- Banner shown automatically when user inspects Marketing or CS (Under Construction) -->

    <div id="underConstructionBanner" class="construction-banner" hidden>

        <span>🚧 <strong>Modular Roadmap Notice:</strong> This division is currently <strong>Under Construction</strong>. All 6 production agents in <strong>Sales & Market Expansion</strong> are 100% Live!</span>

        <button type="button" class="btn-link primary-action" id="btnSwitchToLiveSales" style="padding:6px 12px;font-size:0.78rem">Switch to Live Sales Engine</button>

    </div>


    <section class="company-intel-strip glass" id="dashCompanyIntelStrip" style="max-width:100%;margin-bottom:16px"></section>


    <div class="kpi-strip" id="kpiStrip"></div>


    <div class="command-card glass">

        <div class="tabs" id="dynamicTabs" role="tablist"></div>


        <div class="tool-context-row">

            <div class="preset-chips" id="presetChips"></div>

            <button type="button" class="podcast-toggle-btn active" id="podcastToggleBtn" aria-pressed="true">

                <i data-lucide="headphones" size="14"></i>

                <span id="podcastToggleText">🎧 AI Podcast: ON</span>

            </button>

        </div>


        <div class="input-group" role="tabpanel" id="toolPanel">

            <div class="input-row">

                <div class="input-wrapper">

                    <i data-lucide="search" class="input-icon" id="mainInputIcon"></i>

                    <label for="mainInput" class="sr-only" id="mainLabel">Target</label>

                    <input type="text" id="mainInput" autocomplete="off" maxlength="200">

                    <div class="kbd-badge" aria-hidden="true"><kbd id="kbdMod">⌘</kbd><kbd>K</kbd></div>

                </div>

                <select id="paramSelect" class="param-select">

                    <option value="Market Expansion & Competitor Analysis">🎯 Intent: Market Expansion & Competitor Analysis</option>

                    <option value="Deep ABM (Industry, Account & Decision-Maker Career)">🧠 Intent: Deep ABM (Account & Decision-Maker Career)</option>

                    <option value="Competitor Displacement & Battlecard">⚔️ Intent: Competitor Displacement & Battlecard</option>

                    <option value="New Territory & Cross-Border Whitespace">🌍 Intent: New Territory & Cross-Border Whitespace</option>

                    <option value="Executive ROI & CFO Business Case">💼 Intent: Executive ROI & CFO Business Case</option>

                    <option value="Strategic Partnership & Ecosystem Alliances">🤝 Intent: Strategic Partnership & Alliances</option>

                </select>

            </div>

            <button type="button" class="action-btn" id="generateBtn">

                <i data-lucide="zap" id="btnIcon"></i>

                <span id="btnText">Run VANTAGE Agent</span>

            </button>

        </div>

    </div>


    <section class="feed-section">

        <div class="feed-header">

            <button type="button" class="feed-toggle" id="feedToggle" aria-expanded="true" aria-controls="feed">

                <i data-lucide="chevron-down" class="chev" size="18"></i> VANTAGE OS Live Feed & Saved Deliverables

            </button>

            <div style="display:flex;gap:8px;align-items:center">

                <button type="button" class="btn-link" id="openVaultInlineBtn" style="padding:6px 12px;font-size:0.8rem">

                    <i data-lucide="folder-open" size="14"></i> Open Asset Vault

                </button>

                <button type="button" class="clear-history" id="clearBtn"><i data-lucide="trash-2" size="16"></i> Clear view</button>

            </div>

        </div>

        <div id="feed" aria-live="polite"></div>

    </section>

</main>


<!-- BOTTOM-LEFT DUAL DOCK -->

<div class="bottom-left-dock">

    <button type="button" class="dock-pill-btn secret-studio-pill" id="secretProposalBtn" hidden title="Master Admin Only: SaaS Proposal Studio & Client User Generator">

        <i data-lucide="shield-check" size="16"></i>

        <span>🔒 Admin Studio & Users</span>

    </button>


    <button type="button" class="dock-pill-btn" id="changelogBtn" title="View VANTAGE OS v10.0 Product Changelog & Release History">

        <i data-lucide="sparkles" size="16"></i>

        <span>VANTAGE OS • v10.0 Changelog</span>

    </button>

</div>


<button type="button" class="bot-launcher" id="botLauncher">

    <i data-lucide="bot" size="20"></i>

    <span>VANTAGE Copilot</span>

</button>


<aside class="bot-window glass" id="botWindow">

    <div class="bot-header">

        <div class="bot-title">

            <i data-lucide="sparkles" size="18"></i>

            <div>

                VANTAGE OS Copilot

                <span class="bot-sub" id="botSubLabel">Global 360° ABM, Persona & ROI Engine</span>

            </div>

        </div>

        <button type="button" class="icon-btn" id="botCloseBtn" style="width:30px;height:30px"><i data-lucide="x" size="15"></i></button>

    </div>

    <div class="bot-messages" id="botMessages"></div>

    <div class="bot-prompts">

        <button type="button" class="bot-prompt-btn" data-q="How does 4-layer ABM & Career Persona research work?">🧠 4-Layer ABM?</button>

        <button type="button" class="bot-prompt-btn" data-q="Can a Canadian company prospect in Namibia or globally?">🌍 Global 360°?</button>

        <button type="button" class="bot-prompt-btn" data-q="How can I calculate ROI for a marketing campaign?">📊 Marketing ROI?</button>

        <button type="button" class="bot-prompt-btn" data-q="Which modules are Live vs Under Construction?">⚡ Live Modules?</button>

    </div>

    <form class="bot-input-bar" id="botForm">

        <input type="text" id="botInput" placeholder="Ask about 360° ABM, career personas, ROI..." autocomplete="off">

        <button type="submit" class="bot-send"><i data-lucide="send" size="16"></i></button>

    </form>

</aside>


<script>

/**

* ============================================================================

* VANTAGE OS v10.0 — UNIVERSAL VERCEL + GOOGLE APPS SCRIPT BRIDGE

* ============================================================================

* Funciona de forma transparente tanto alojado en Vercel (https://vantage-os.io)

* como dentro de Google Apps Script Web App.

*/

var PRODUCT_BRAND_NAME = 'VANTAGE OS';

var GAS_API_URL = 'https://script.google.com/macros/s/AKfycbzVcJyLKAkJneXw__s6cgLCFx3JoGNGrmFx56ijVJjMU5EHwT306AjgIFUfGNjC5PNJUw/exec';


function $(id) { return document.getElementById(id); }

function icons() { if (window.lucide) lucide.createIcons(); }


function decodeHtmlEntities(str) {

    if (!str) return '';

    var txt = document.createElement('textarea');

    txt.innerHTML = String(str);

    return txt.value;

}


function esc(s) {

    var clean = decodeHtmlEntities(s || '');

    return String(clean).replace(/[&<>"']/g, function(c) {

        return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c];

    });

}

function safeUrl(u) { return /^https?:\/\//i.test(String(u || '')) ? u : '#'; }

function hasNativeGas() { return Boolean(window.google && google.script && google.script.run); }


/**

* Puente Universal: Si corre en Google Apps Script usa google.script.run;

* Si corre en Vercel (vantage-os.io) usa fetch() POST hacia handleVercelApiAction en Código.gs

*/

function callVantageBackend(apiAction, payloadObj, onSuccess, onFailure) {

    var p = payloadObj || {};

    if (hasNativeGas()) {

        var runner = google.script.run

            .withSuccessHandler(function(res) { if (onSuccess) onSuccess(res); })

            .withFailureHandler(function(err) { if (onFailure) onFailure(err); });


        switch (apiAction) {

            case 'getCompanyLiveIntelligence':

                runner.getCompanyLiveIntelligence(p.company, p.sector, p.domain, p.lang); break;

            case 'authenticateVantageUser':

                runner.authenticateVantageUser(p.username, p.passkey); break;

            case 'getGeneratedAssetsHistory':

                runner.getGeneratedAssetsHistory(p.token); break;

            case 'getLatestPodcastAudioUrl':

                runner.getLatestPodcastAudioUrl(p.targetName, p.token); break;

            case 'runUnifiedTask':

                runner.runUnifiedTask(p); break;

            case 'checkUnifiedCache':

                runner.checkUnifiedCache(p.target, p.type, p.token); break;

            case 'generateFinalAsset':

                runner.generateFinalAsset(p.jsonString, p.type, p.token, p.contextObj); break;

            case 'logVisitorTelemetry':

                runner.logVisitorTelemetry(p); break;

            case 'generateCustomVantageSaasProposal':

                runner.generateCustomVantageSaasProposal(p); break;

            case 'createClientUser':

                runner.createClientUser(p); break;

            case 'getClientUsersList':

                runner.getClientUsersList(p.adminToken); break;

            case 'deleteClientUser':

                runner.deleteClientUser(p.username, p.adminToken); break;

            default:

                if (onFailure) onFailure(new Error('Unknown action: ' + apiAction));

        }

        return;

    }


    // Modo Vercel / Dominio Externo (vantage-os.io) vía Fetch REST Gateway:

    fetch(GAS_API_URL, {

        method: 'POST',

        headers: { 'Content-Type': 'text/plain;charset=utf-8' },

        body: JSON.stringify({ apiAction: apiAction, payload: p })

    })

        .then(function(r) { return r.json(); })

        .then(function(resJson) {

            if (resJson && resJson.ok) {

                if (onSuccess) onSuccess(resJson.data);

            } else {

                if (onFailure) onFailure(new Error((resJson && resJson.error) || 'API Error'));

            }

        })

        .catch(function(err) {

            if (onFailure) onFailure(err);

        });

}


var useSimMode = true;

var adminToken = "";

var currentUserRole = "guest";

var currentUsername = "";

var currentUiLang = "en";

var generatePodcastEnabled = true;

var POLL_MS = 5000;

var JOB_TIMEOUT_MS = 600000;

var ownerExcludedMemory = false;

try {

    ownerExcludedMemory = (localStorage.getItem('ios_ignore_telemetry') === 'true');

    var savedLang = localStorage.getItem('vantage_ui_lang');

    if (savedLang) currentUiLang = savedLang;

} catch (e) {}


var currentDeptKey = 'sales';

var currentDept = null;

var currentTool = null;

var activeJobs = {};

var reportStore = {};

var vaultAssetsCache = [];

var liveCompanyOsintCache = {};

var liveFetchDebounce = null;

var domainAutocompleteDebounce = null;


function isOwnerDeviceIgnored() {

    if (ownerExcludedMemory || currentUserRole === 'admin') return true;

    try { return localStorage.getItem('ios_ignore_telemetry') === 'true'; } catch (e) { return false; }

}

function setOwnerDeviceIgnored(state) {

    ownerExcludedMemory = Boolean(state);

    try { localStorage.setItem('ios_ignore_telemetry', state ? 'true' : 'false'); } catch (e) {}

}


function getActiveLang() {

    var sel = $('globalLangSelect');

    return sel ? sel.value : (currentUiLang || 'en');

}


function inferDomainFromCompanyName(companyName) {

    var raw = String(companyName || '').trim();

    if (!raw) return 'example.com';

    if (raw.indexOf('.') !== -1 && raw.indexOf(' ') === -1) {

        return raw.toLowerCase().replace(/^https?:\/\//, '').replace(/^www\./, '').split('/')[0];

    }

    var lower = raw.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');

    if (/\b(canal\s*(de\s*)?isabel|isabel\s*(ii|2|segunda))\b/i.test(lower)) {

        return 'canaldeisabelsegunda.es';

    }

    var clean = lower.replace(/[^a-z0-9]/g, '');

    if (!clean) return 'company.com';

    return clean + '.com';

}


function autoDiscoverOfficialDomain(companyName, targetInputEl, callback) {

    var q = String(companyName || '').trim();

    if (!q || q.length < 2) return;

    var heuristicDomain = inferDomainFromCompanyName(q);

    if (targetInputEl) targetInputEl.value = heuristicDomain;

    if (heuristicDomain === 'canaldeisabelsegunda.es') {

        if (callback) callback(heuristicDomain);

        return;

    }

    fetch('https://autocomplete.clearbit.com/v1/companies/suggest?query=' + encodeURIComponent(q))

        .then(function(r) { return r.json(); })

        .then(function(list) {

            if (Array.isArray(list) && list.length > 0 && list[0].domain) {

                var foundDomain = String(list[0].domain).toLowerCase().trim();

                if (targetInputEl) targetInputEl.value = foundDomain;

                if (callback) callback(foundDomain);

            } else if (callback) {

                callback(heuristicDomain);

            }

        })

        .catch(function() { if (callback) callback(heuristicDomain); });

}


function getContext() {

    var company = ($('ctxCompany').value || 'Xylem').trim();

    var domain = ($('ctxDomain').value || inferDomainFromCompanyName(company)).trim().toLowerCase();

    var cleanKey = company.toLowerCase().replace(/[^a-z0-9]/g, '');

    var cached = liveCompanyOsintCache[cleanKey + '_' + getActiveLang()] || liveCompanyOsintCache[cleanKey] || {};

    var sectorSelectVal = $('ctxSector').value;

    var sector = (sectorSelectVal === 'Auto-Detect')

        ? (cached.detectedSector || 'B2B SaaS')

        : sectorSelectVal;

    return { company: company, sector: sector, domain: domain, lang: getActiveLang() };

}


function hashSeed(str) {

    var h = 2166136261, s = String(str || 'vantage').toLowerCase();

    for (var i = 0; i < s.length; i++) { h ^= s.charCodeAt(i); h = Math.imul(h, 16777619); }

    return Math.abs(h);

}


function buildDynamicCompanyTelemetry(ctx) {

    var cleanName = ctx.company;

    var lang = getActiveLang();

    var key = cleanName.toLowerCase().replace(/[^a-z0-9]/g, '');

    var osint = liveCompanyOsintCache[key + '_' + lang] || liveCompanyOsintCache[key] || {};


    // Si el servidor determinó que la empresa NO existe (o era una canción/película descartada):

    if (osint.companyFound === false) {

        return {

            company: cleanName,

            companyFound: false,

            domain: 'unverified-entity',

            sector: 'Unverified',

            scaleTier: 'Company Not Found',

            hqMarket: 'N/A',

            businessModel: osint.liveDescription || ('Company could not be found: No verified corporate website or B2B entity matched "' + cleanName + '".'),

            targetIcp: 'Please enter a valid company name or official corporate domain above.',

            liveTitle: '',

            liveSignal: '',

            isLiveScraped: false,

            kpis: osint.scaledKpis || []

        };

    }


    var effectiveDomain = osint.resolvedDomain || ctx.domain;

    var rawTitle = decodeHtmlEntities(osint.liveTitle || '');

    var rawDesc = decodeHtmlEntities(osint.liveDescription || '');

    var rawNews = decodeHtmlEntities(osint.latestNewsSignal || '');


    var activeSector = ($('ctxSector').value !== 'Auto-Detect')

        ? $('ctxSector').value

        : (osint.detectedSector || ctx.sector || 'B2B SaaS');


    var detectedMarket = osint.hqMarket || ('Global 360° Market (' + effectiveDomain + ')');


    var businessSummary = rawDesc ||

        (rawTitle && rawNews ? (rawTitle + ' — Verified Media Signal: "' + rawNews + '"') : '') ||

        rawTitle ||

        (rawNews ? (cleanName + ' (' + effectiveDomain + ') — Verified Market Signal: "' + rawNews + '"') : '') ||

        ('Synchronizing multi-layer B2B OSINT profile (Official Web + Wikipedia + Press) for ' + cleanName + ' (' + effectiveDomain + ')...');


    var targetIcp = osint.targetIcp || 'COOs, CIOs, VPs of Growth, and Enterprise B2B Buying Committees worldwide.';


    var seed = hashSeed(cleanName + '_' + effectiveDomain + '_' + activeSector);

    var isEur = /\.es$|\.eu$|\.de$|\.fr$|\.it$|\.nl$/i.test(effectiveDomain);

    var curr = isEur ? '€' : '$';


    var finalKpis = (Array.isArray(osint.scaledKpis) && osint.scaledKpis.length === 6) ? osint.scaledKpis : [

        { label: 'Customer & Reach Scale YTD', val: '+' + (48 + (seed % 180)) + ' Active Accounts', delta: '+' + (18 + (seed % 21)) + '.4% YoY', sub: 'Estimated global customer footprint for ' + cleanName },

        { label: 'Estimated Revenue Scale YTD', val: curr + (14.2 + ((seed % 220) / 10)).toFixed(1) + 'M Turnover', delta: '+' + (16 + (seed % 14)) + '.2% YoY', sub: 'Estimated revenue scale (' + activeSector + ')' },

        { label: 'Retention & Continuity YTD', val: (113 + (seed % 13)) + '.' + (seed % 9) + '% NRR YTD', delta: (94 + (seed % 5)) + '.2% Renewal', sub: 'Contract continuity & account retention' },

        { label: 'Share of Voice & Media YTD', val: '+' + (38 + (seed % 40)) + '.4% Share of Voice', delta: 'Verified B2B Presence', sub: 'Brand authority, press & search visibility YTD' },

        { label: 'Estimated GTM / CapEx Budget', val: curr + (680 + (seed % 850)) + 'K Digital/GTM', delta: '4.6x Target ROI', sub: 'Estimated allocation for global expansion & ABM' },

        { label: 'Market Expansion & Win-Rate', val: '+' + (28 + (seed % 16)) + '.5% Competitive Win', delta: osint.scaleTier || 'Category Leader', sub: 'Cross-border positioning in ' + activeSector }

    ];


    return {

        company: cleanName,

        companyFound: true,

        domain: effectiveDomain,

        sector: activeSector,

        scaleTier: osint.scaleTier || 'Global / Mid-Market',

        hqMarket: detectedMarket,

        businessModel: businessSummary,

        targetIcp: targetIcp,

        liveTitle: rawTitle,

        liveSignal: rawNews,

        isLiveScraped: Boolean(rawDesc || rawNews || rawTitle),

        kpis: finalKpis

    };

}


var DEPARTMENTS = {

    sales: {

        title: 'Sales & Market Expansion Engine',

        isLive: true,

        desc: '6 Production Modules Live: Borderless 360° territory radar, deep competitor briefs, buying-committee sweep, career persona psychology, and branded proposals + podcasts.',

        tools: [

            { id: 'territory', label: '360° Territory & Expansion', icon: 'globe', bg: 'radar', defaultAudio: false, placeholder: 'Any Target Region Worldwide (e.g. Namibia, Canada, DACH, LATAM, APAC, North America)', btnText: 'Scan Global Territory & Competitors' },

            { id: 'utility', label: '360° Account & Competitor Brief', icon: 'building-2', bg: 'grid', defaultAudio: true, placeholder: 'Target Account or Competitor Name (Generates Deep ABM Brief + Podcast)', btnText: 'Run 360° Account & Competitor Audit' },

            { id: 'contacts', label: 'Buying Committee Sweep', icon: 'users', bg: 'orb', defaultAudio: false, placeholder: 'Target Account or Segment to Extract Decision-Makers', btnText: 'Sweep Buying Committee Contacts' },

            { id: 'persona', label: 'Career & Persona Psychology', icon: 'user', bg: 'orb', defaultAudio: false, placeholder: 'Decision-Maker Name & Company (Analyzes Full Career, KPIs & Objections)', btnText: 'Analyze Career & Buyer Persona' },

            { id: 'deal_intel', label: 'Deal Velocity & Risk Audit', icon: 'gauge', bg: 'radar', defaultAudio: false, placeholder: 'Active Opportunity or Competitor Threat to Audit', btnText: 'Audit Deal Velocity & Risk' },

            { id: 'external', label: 'Executive Proposal Architect', icon: 'file-text', bg: 'waves', defaultAudio: true, placeholder: 'Prospect Account & Solution Scope (Generates Branded Proposal Doc + Podcast)', btnText: 'Draft Executive Proposal & Podcast' }

        ]

    },

    marketing: {

        title: 'Demand & Growth Studio (Under Construction)',

        isLive: false,

        desc: 'Modular Roadmap Division (Under Construction): Competitor ad share-of-voice diagnostics, AI budget allocation, and ABM landing pages.',

        tools: [

            { id: 'campaign_perf', label: 'Competitive Campaign AI (Preview)', icon: 'bar-chart-3', bg: 'radar', defaultAudio: false, placeholder: 'Campaign Channel Mix or Competitor Funnel', btnText: 'Preview Campaign Audit (Under Construction)' },

            { id: 'landing', label: 'ABM Landing Page (Preview)', icon: 'layout-template', bg: 'grid', defaultAudio: false, placeholder: 'Target Vertical or ABM Theme', btnText: 'Preview ABM Page (Under Construction)' },

            { id: 'event', label: 'Event & Field OSINT (Preview)', icon: 'calendar', bg: 'radar', defaultAudio: false, placeholder: 'Global Conference or Trade Show', btnText: 'Preview Event Strategy (Under Construction)' }

        ]

    },

    cs: {

        title: 'Account Expansion & Retention (Under Construction)',

        isLive: false,

        desc: 'Modular Roadmap Division (Under Construction): Executive QBR decks, telemetry churn prevention, and net-dollar-retention expansion playbooks.',

        tools: [

            { id: 'qbr', label: 'Executive QBR Deck (Preview)', icon: 'presentation', bg: 'grid', defaultAudio: false, placeholder: 'Client Account Name', btnText: 'Preview Executive QBR (Under Construction)' },

            { id: 'churn', label: 'Churn Risk Telemetry (Preview)', icon: 'activity', bg: 'radar', defaultAudio: false, placeholder: 'Client Account or Cohort', btnText: 'Preview Churn Diagnostics (Under Construction)' },

            { id: 'expansion', label: 'Expansion & Upsell Radar (Preview)', icon: 'trending-up', bg: 'orb', defaultAudio: false, placeholder: 'Account or Product Module', btnText: 'Preview Expansion Radar (Under Construction)' }

        ]

    }

};


function setPodcastToggleState(enabled, savePref) {

    generatePodcastEnabled = Boolean(enabled);

    if (savePref) {

        try { localStorage.setItem('vantage_podcast_enabled', generatePodcastEnabled ? 'true' : 'false'); } catch (e) {}

    }

    var btn = $('podcastToggleBtn'), txt = $('podcastToggleText');

    if (!btn || !txt) return;

    btn.classList.toggle('active', generatePodcastEnabled);

    btn.setAttribute('aria-pressed', generatePodcastEnabled ? 'true' : 'false');

    txt.textContent = generatePodcastEnabled ? '🎧 AI Podcast: ON' : '🔇 AI Podcast: OFF';

}


function renderCompanyIntelStrip(profile) {

    var isNotFound = (profile.companyFound === false);

    if ($('portalCompanyIntelStrip')) $('portalCompanyIntelStrip').classList.toggle('not-found', isNotFound);

    if ($('dashCompanyIntelStrip')) $('dashCompanyIntelStrip').classList.toggle('not-found', isNotFound);


    var liveBadge = isNotFound

        ? '<span class="intel-pill error-pill">⚠️ Company Could Not Be Found</span>'

        : (profile.isLiveScraped

                ? '<span class="intel-pill live-osint">⚡ Verified B2B Web, Wikipedia & News OSINT</span>'

                : '<span class="intel-pill">🛰️ Ready to Scrape (' + esc(profile.domain) + ')</span>');


    var tierBadge = (!isNotFound && profile.scaleTier)

        ? '<span class="intel-pill tier-pill">🏛️ ' + esc(profile.scaleTier) + '</span>'

        : '';


    var signalHtml = '';

    if (!isNotFound && profile.liveSignal) {

        signalHtml = '<div class="intel-news-bar"><i data-lucide="newspaper" size="15"></i> <span><strong>Verified Market Signal:</strong> ' + esc(profile.liveSignal) + '</span></div>';

    } else if (!isNotFound && profile.liveTitle) {

        signalHtml = '<div class="intel-news-bar"><i data-lucide="globe" size="15"></i> <span><strong>Official Web Header (' + esc(profile.domain) + '):</strong> ' + esc(profile.liveTitle) + '</span></div>';

    }


    var html =

        '<div class="intel-strip-top">' +

            '<div class="intel-strip-title"><i data-lucide="radar" size="17" style="color:var(--primary)"></i> <span>VANTAGE OS 360° Company Intelligence: <strong>' + esc(profile.company) + '</strong> <span style="color:var(--text-2);font-weight:500">(' + esc(profile.domain) + ')</span></span></div>' +

            '<div class="intel-strip-badges">' + liveBadge + tierBadge + '<span class="intel-pill">🌍 Scope: ' + esc(profile.hqMarket) + '</span><span class="intel-pill">🏷️ Sector: ' + esc(profile.sector) + '</span></div>' +

        '</div>' +

        '<div class="intel-grid-details">' +

            '<div class="intel-detail-box"><strong>🏢 Verified Business Model & Value Proposition</strong>' + esc(profile.businessModel) + '</div>' +

            '<div class="intel-detail-box"><strong>🎯 Target Market, ICP & ABM Ecosystem</strong>' + esc(profile.targetIcp) + '</div>' +

        '</div>' + signalHtml;


    if ($('portalCompanyIntelStrip')) $('portalCompanyIntelStrip').innerHTML = html;

    if ($('dashCompanyIntelStrip')) $('dashCompanyIntelStrip').innerHTML = html;

    icons();

}


function triggerLiveCompanyOsintFetch(ctx, forceToast) {

    if ($('dashCompanyIntelStrip')) $('dashCompanyIntelStrip').classList.add('syncing');

    if ($('portalCompanyIntelStrip')) $('portalCompanyIntelStrip').classList.add('syncing');

    if ($('syncOsintIcon')) $('syncOsintIcon').classList.add('spin');

    if ($('headerScanIcon')) $('headerScanIcon').classList.add('spin');

    if ($('syncOsintText')) $('syncOsintText').textContent = 'Scraping ' + ctx.domain + '…';


    var reqLang = getActiveLang();


    callVantageBackend(

        'getCompanyLiveIntelligence',

        { company: ctx.company, sector: ctx.sector, domain: ctx.domain, lang: reqLang },

        function(liveRes) {

            if ($('dashCompanyIntelStrip')) $('dashCompanyIntelStrip').classList.remove('syncing');

            if ($('portalCompanyIntelStrip')) $('portalCompanyIntelStrip').classList.remove('syncing');

            if ($('syncOsintIcon')) $('syncOsintIcon').classList.remove('spin');

            if ($('headerScanIcon')) $('headerScanIcon').classList.remove('spin');

            if ($('syncOsintText')) $('syncOsintText').textContent = 'Live Company OSINT Synced';


            if (liveRes && typeof liveRes === 'object') {

                var currentCompName = ($('ctxCompany').value || ctx.company || 'Xylem').trim();

                var activeKey = currentCompName.toLowerCase().replace(/[^a-z0-9]/g, '');

                if (liveRes.resolvedDomain && liveRes.companyFound !== false && $('ctxDomain')) {

                    $('ctxDomain').value = liveRes.resolvedDomain;

                }


                var osintObj = {

                    companyFound: liveRes.companyFound !== false,

                    resolvedDomain: liveRes.resolvedDomain || ctx.domain,

                    liveTitle: decodeHtmlEntities(liveRes.liveTitle || ''),

                    liveDescription: decodeHtmlEntities(liveRes.liveDescription || ''),

                    latestNewsSignal: decodeHtmlEntities(liveRes.latestNewsSignal || ''),

                    detectedSector: liveRes.detectedSector || '',

                    scaleTier: liveRes.scaleTier || '',

                    hqMarket: decodeHtmlEntities(liveRes.hqMarket || ''),

                    targetIcp: decodeHtmlEntities(liveRes.targetIcp || ''),

                    scaledKpis: liveRes.scaledKpis || null

                };

                liveCompanyOsintCache[activeKey + '_' + reqLang] = osintObj;

                liveCompanyOsintCache[activeKey] = osintObj;


                var updatedProf = buildDynamicCompanyTelemetry(getContext());

                var logoUrl = 'https://www.google.com/s2/favicons?domain=' + encodeURIComponent(updatedProf.domain) + '&sz=128';

                if ($('barLogoImg')) $('barLogoImg').src = logoUrl;

                if ($('heroLogoImg')) $('heroLogoImg').src = logoUrl;

                if ($('dashLogoImg')) $('dashLogoImg').src = logoUrl;


                renderCompanyIntelStrip(updatedProf);

                renderKpis(updatedProf);

                if (currentTool) renderPresets(currentTool, updatedProf);


                if (liveRes.companyFound === false) {

                    showToast('Company could not be found. No random non-business data added.');

                } else if (forceToast) {

                    showToast('Verified B2B OSINT & Scale Metrics calibrated for ' + updatedProf.company + '!', 'success');

                }

            }

        },

        function() {

            if ($('dashCompanyIntelStrip')) $('dashCompanyIntelStrip').classList.remove('syncing');

            if ($('portalCompanyIntelStrip')) $('portalCompanyIntelStrip').classList.remove('syncing');

            if ($('syncOsintIcon')) $('syncOsintIcon').classList.remove('spin');

            if ($('headerScanIcon')) $('headerScanIcon').classList.remove('spin');

            if ($('syncOsintText')) $('syncOsintText').textContent = 'Re-Scan Live Company OSINT';

        }

    );

}


function updateContextUI(triggerLiveFetch) {

    var ctx = getContext();

    var profile = buildDynamicCompanyTelemetry(ctx);

    $('barCompanyName').textContent = profile.company;

    $('portalContextBanner').textContent = PRODUCT_BRAND_NAME + ' • Active Workspace: ' + profile.company + ' (' + profile.domain + ')';

    $('portalHeroTitle').textContent = profile.company + ' — Global 360° ABM & Market Intelligence';


    var logoUrl = 'https://www.google.com/s2/favicons?domain=' + encodeURIComponent(profile.domain) + '&sz=128';

    if ($('barLogoImg')) $('barLogoImg').src = logoUrl;

    if ($('heroLogoImg')) $('heroLogoImg').src = logoUrl;

    if ($('dashLogoImg')) $('dashLogoImg').src = logoUrl;


    renderCompanyIntelStrip(profile);

    renderKpis(profile);


    if (!$('dashboard-view').hidden && currentDept) {

        $('dashTitle').innerHTML = esc(profile.company) + ' — ' + esc(currentDept.title) + ' ' +

            (currentDept.isLive ? '<span class="status-pill-live">● Live</span>' : '<span class="status-pill-dev">🚧 Under Construction</span>');

        if (currentTool) renderPresets(currentTool, profile);

    }

    if (triggerLiveFetch) {

        clearTimeout(liveFetchDebounce);

        liveFetchDebounce = setTimeout(function() { triggerLiveCompanyOsintFetch(getContext(), false); }, 380);

    }

}


function renderKpis(profileObj) {

    var profile = profileObj || buildDynamicCompanyTelemetry(getContext());

    var kpis = profile.kpis, html = '';

    for (var i = 0; i < kpis.length; i++) {

        var k = kpis[i];

        html += '<div class="kpi-card glass">' +

            '<div class="kpi-label"><span>' + esc(k.label) + '</span><span class="kpi-company-tag">' + esc(profile.company) + '</span></div>' +

            '<div class="kpi-val">' + esc(k.val) + ' <span class="kpi-delta">' + esc(k.delta) + '</span></div>' +

            '<div class="kpi-sub">' + esc(k.sub || '') + '</div>' +

        '</div>';

    }

    $('kpiStrip').innerHTML = html;

}


function showLandingPage() {

    $('landing-view').hidden = false;

    $('portal-view').hidden = true;

    $('dashboard-view').hidden = true;

    if ($('workspaceContextBar')) $('workspaceContextBar').hidden = true;

    $('btnBackToLanding').hidden = true;

    $('btnVault').hidden = true;

    $('btnHome').hidden = true;

    document.documentElement.removeAttribute('data-dept-theme');

    changeBackground('orb');

    window.scrollTo({ top: 0, behavior: 'smooth' });

}


function enterPlatformWorkspace() {

    $('landing-view').hidden = true;

    $('dashboard-view').hidden = true;

    $('portal-view').hidden = false;

    if ($('workspaceContextBar')) $('workspaceContextBar').hidden = false;

    $('btnBackToLanding').hidden = false;

    $('btnVault').hidden = false;

    $('btnHome').hidden = true;

    updateContextUI(true);

    icons();

    window.scrollTo({ top: 0, behavior: 'smooth' });

}


function showPortal() {

    if (!$('portal-view').hidden) return;

    $('landing-view').hidden = true;

    $('dashboard-view').hidden = true;

    $('portal-view').hidden = false;

    if ($('workspaceContextBar')) $('workspaceContextBar').hidden = false;

    $('btnBackToLanding').hidden = false;

    $('btnVault').hidden = false;

    $('btnHome').hidden = true;

    document.documentElement.removeAttribute('data-dept-theme');

    changeBackground('orb');

}


function loadDepartment(key, targetToolId) {

    $('landing-view').hidden = true;

    if ($('workspaceContextBar')) $('workspaceContextBar').hidden = false;

    $('btnBackToLanding').hidden = false;

    $('btnVault').hidden = false;


    currentDeptKey = key;

    currentDept = DEPARTMENTS[key];

    document.documentElement.setAttribute('data-dept-theme', key);

    var profile = buildDynamicCompanyTelemetry(getContext());


    $('dashTitle').innerHTML = esc(profile.company) + ' — ' + esc(currentDept.title) + ' ' +

        (currentDept.isLive ? '<span class="status-pill-live">● Live</span>' : '<span class="status-pill-dev">🚧 Under Construction</span>');

    $('dashDesc').textContent = currentDept.desc;


    if ($('underConstructionBanner')) {

        $('underConstructionBanner').hidden = Boolean(currentDept.isLive);

    }


    renderCompanyIntelStrip(profile);

    renderKpis(profile);


    var tabs = $('dynamicTabs');

    tabs.innerHTML = '';

    for (var i = 0; i < currentDept.tools.length; i++) {

        (function(tool) {

            var b = document.createElement('button');

            b.type = 'button'; b.className = 'tab-btn'; b.setAttribute('role', 'tab'); b.id = 'tab-' + tool.id;

            b.innerHTML = '<i data-lucide="' + tool.icon + '" size="16"></i> ' + esc(tool.label);

            b.addEventListener('click', function() {

                selectTool(tool, true);

                sendTelemetryToGAS('SELECT_TOOL', '[' + getContext().company + '] Selected Tool: ' + tool.label);

            });

            tabs.appendChild(b);

        })(currentDept.tools[i]);

    }


    var initialTool = currentDept.tools[0];

    if (targetToolId) {

        for (var j = 0; j < currentDept.tools.length; j++) {

            if (currentDept.tools[j].id === targetToolId) { initialTool = currentDept.tools[j]; break; }

        }

    }

    $('btnHome').hidden = false;

    $('portal-view').hidden = true;

    $('dashboard-view').hidden = false;

    selectTool(initialTool, false);

    icons();

}


/**

* Sugerencias 100% Internacionales 360° (Sin sesgo a España/Europa; soporta cualquier país del mundo)

*/

function renderPresets(tool, profileObj) {

    var prof = profileObj || buildDynamicCompanyTelemetry(getContext());

    var comp = prof.company, sec = prof.sector;

    var suggestions = [];

    if (tool.id === 'territory') {

        suggestions = [

            'Canada → Namibia & Southern Africa (' + sec + ' Expansion)',

            'North America (US & Canada ' + sec + ' Whitespace)',

            'APAC, LATAM & Middle East High-Growth Corridors',

            'EMEA & DACH Cross-Border Expansion'

        ];

    } else if (tool.id === 'contacts') {

        suggestions = [

            'Global Buying Committee — Top Competitors of ' + comp,

            'Enterprise ' + sec + ' Decision-Makers (Worldwide)',

            'VP of Operations, CIO & Chief Commercial Officers'

        ];

    } else if (tool.id === 'persona') {

        suggestions = [

            'Full Career & Persona Audit — VP of Operations (' + sec + ')',

            'Chief Digital & Technology Officer — Career & KPIs',

            'Head of Global Expansion & Strategic Sourcing (' + comp + ')'

        ];

    } else {

        suggestions = [

            'Top 3 Global Competitors of ' + comp,

            comp + ' — 360° Cross-Border Expansion Battlecard',

            'Tier-1 International Prospect for ' + comp

        ];

    }


    var chips = $('presetChips');

    if (chips) {

        var cHtml = '';

        for (var j = 0; j < suggestions.length; j++) {

            cHtml += '<button type="button" class="preset-chip" data-preset="' + esc(suggestions[j]) + '">' + esc(suggestions[j]) + '</button>';

        }

        chips.innerHTML = cHtml;

        var btns = chips.querySelectorAll('.preset-chip');

        for (var k = 0; k < btns.length; k++) {

            btns[k].addEventListener('click', function() { $('mainInput').value = this.getAttribute('data-preset'); $('mainInput').focus(); });

        }

    }

}


function selectTool(tool, focus) {

    currentTool = tool;

    var allTabs = document.querySelectorAll('.tab-btn');

    for (var i = 0; i < allTabs.length; i++) {

        allTabs[i].setAttribute('aria-selected', allTabs[i].id === 'tab-' + tool.id ? 'true' : 'false');

    }

    $('mainInput').placeholder = tool.placeholder;

    $('mainLabel').textContent = tool.placeholder;

    $('btnText').textContent = tool.btnText;

    $('btnIcon').setAttribute('data-lucide', tool.icon);

    $('mainInputIcon').setAttribute('data-lucide', tool.icon);

    if (typeof tool.defaultAudio === 'boolean') setPodcastToggleState(tool.defaultAudio, false);

    renderPresets(tool);

    icons();

    changeBackground(tool.bg);

    if (focus) $('mainInput').focus();

}


function changeBackground(id) {

    var layers = document.querySelectorAll('.bg-layer');

    for (var i = 0; i < layers.length; i++) { layers[i].classList.toggle('active', layers[i].id === 'bg-' + id); }

}


function findAndOpenPodcastForTarget(targetName, btnEl) {

    if (useSimMode || !adminToken) { showToast('Sign in to Production Mode to access Google Drive audio files.'); return; }

    var origHtml = btnEl ? btnEl.innerHTML : '';

    if (btnEl) { btnEl.innerHTML = '<i data-lucide="loader-2" class="spin" size="15"></i> Locating Audio…'; icons(); }

    callVantageBackend(

        'getLatestPodcastAudioUrl',

        { targetName: targetName, token: adminToken },

        function(audioUrl) {

            if (btnEl) { btnEl.innerHTML = origHtml; icons(); }

            if (audioUrl && /^https?:\/\//i.test(audioUrl)) {

                window.open(audioUrl, '_blank', 'noopener,noreferrer');

            } else {

                showToast('No audio podcast found in OUTPUT folder for "' + targetName + '" yet.');

            }

        },

        function() { if (btnEl) { btnEl.innerHTML = origHtml; icons(); } showToast('Could not query podcast folder.'); }

    );

}


function refreshVaultFromServer(populateEmptyFeed) {

    if (useSimMode || !adminToken) {

        vaultAssetsCache = [];

        if ($('vaultCountBadge')) $('vaultCountBadge').textContent = 'Demo';

        return;

    }

    callVantageBackend(

        'getGeneratedAssetsHistory',

        { token: adminToken },

        function(list) {

            if (!Array.isArray(list)) return;

            vaultAssetsCache = list;

            $('vaultCountBadge').textContent = String(list.length);

            if (populateEmptyFeed && list.length > 0 && $('feed').querySelector('[data-empty]')) {

                $('feed').innerHTML = '';

                var recent = list.slice(0, 6);

                for (var i = 0; i < recent.length; i++) { renderHistoricalVaultCard(recent[i], i); }

                icons();

            }

        }

    );

}


function renderHistoricalVaultCard(item, idx) {

    var jobId = 'vault_hist_' + idx + '_' + Date.now();

    var toolObj = { id: item.toolId || 'utility', label: item.toolLabel || 'Saved Deliverable' };

    var intel = generateExecutiveSummary(item.target, toolObj, item.strategy || 'Market Expansion & Competitor Analysis', item.company, item.sector);

    reportStore[jobId] = intel;


    var podcastBtnHtml = item.audioUrl

        ? '<a href="' + esc(safeUrl(item.audioUrl)) + '" target="_blank" rel="noopener noreferrer" class="btn-link podcast-action"><i data-lucide="headphones" size="16"></i> 🎧 Listen Audio Podcast</a>'

        : '<button type="button" class="btn-link podcast-action" data-find-podcast="' + esc(item.target) + '"><i data-lucide="headphones" size="16"></i> 🎧 Listen Podcast</button>';


    $('feed').insertAdjacentHTML('beforeend',

        '<article class="feed-card glass done" id="' + jobId + '">' +

            '<div class="card-top"><div><h4 class="target-title"><i data-lucide="file-check-2" size="20"></i> ' + esc(item.target) + ' <span class="badge">' + esc(item.toolLabel) + '</span></h4>' +

            '<span class="meta"><i data-lucide="folder-check" size="12"></i> Saved in Drive (' + esc(item.timestamp) + ') • Brand: <strong>' + esc(item.company) + '</strong> (' + esc(item.sector) + ')</span></div><span class="status">Saved in Vault</span></div>' +

            '<div class="card-summary">' + intel.summary + '</div>' +

            '<div class="card-actions">' +

                '<a href="' + esc(safeUrl(item.url)) + '" target="_blank" rel="noopener noreferrer" class="btn-link primary-action"><i data-lucide="external-link" size="16"></i> Open ' + esc(item.fileType || 'Google Doc / Sheet') + '</a>' +

                podcastBtnHtml +

                '<button type="button" class="btn-link" data-preview="' + jobId + '"><i data-lucide="sparkles" size="16"></i> Inspect Executive Summary</button>' +

                '<button type="button" class="btn-link" data-rerun="' + esc(item.target) + '"><i data-lucide="rotate-ccw" size="15"></i> Re-Run</button>' +

            '</div>' +

        '</article>'

    );


    var cardEl = $(jobId);

    var previewBtn = cardEl.querySelector('[data-preview]');

    if (previewBtn) previewBtn.addEventListener('click', function() { openPreviewModal(reportStore[jobId]); });

    var podBtn = cardEl.querySelector('[data-find-podcast]');

    if (podBtn) podBtn.addEventListener('click', function() { findAndOpenPodcastForTarget(this.getAttribute('data-find-podcast'), this); });

    var rerunBtn = cardEl.querySelector('[data-rerun]');

    if (rerunBtn) rerunBtn.addEventListener('click', function() { $('mainInput').value = this.getAttribute('data-rerun'); $('mainInput').focus(); showToast('Target loaded into search bar!', 'success'); });

}


function openAssetVaultModal() {

    $('modalTitle').innerHTML = '<i data-lucide="folder-kanban"></i> VANTAGE OS — Deliverables & Podcasts Vault';

    if (useSimMode || !adminToken) {

        $('modalBody').innerHTML = '<div style="padding:24px;text-align:center;color:var(--text-2)">🔒 <strong>Protected Production Vault:</strong> Sign in with your VANTAGE OS account to access live Google Drive deliverables and audio briefings.</div>';

        icons(); toggleModal(true); return;

    }

    $('modalBody').innerHTML =

        '<p style="color:var(--text-2);font-size:0.86rem;margin-top:0">All custom-branded Google Docs, Sheets, and AI Audio Podcasts generated across your sessions are indexed here:</p>' +

        '<div class="onboard-field" style="margin-bottom:10px"><input type="text" id="vaultSearchInput" placeholder="Filter by target, company brand or tool..."></div>' +

        '<div class="vault-list" id="vaultModalList"></div>';

    icons(); toggleModal(true);


    function renderVaultItems(filterStr) {

        var box = $('vaultModalList'); if (!box) return;

        var q = String(filterStr || '').toLowerCase().trim();

        var filtered = vaultAssetsCache.filter(function(a) {

            if (!q) return true;

            return String(a.company).toLowerCase().indexOf(q) !== -1 || String(a.target).toLowerCase().indexOf(q) !== -1 || String(a.toolLabel).toLowerCase().indexOf(q) !== -1;

        });

        if (filtered.length === 0) {

            box.innerHTML = '<div style="padding:24px;text-align:center;color:var(--text-2)">No matching files in the vault yet.</div>'; return;

        }

        var html = '';

        for (var i = 0; i < filtered.length; i++) {

            var item = filtered[i];

            var podAction = item.audioUrl

                ? '<a href="' + esc(safeUrl(item.audioUrl)) + '" target="_blank" rel="noopener noreferrer" class="btn-link podcast-action" style="padding:8px 12px;font-size:0.78rem"><i data-lucide="headphones" size="14"></i> 🎧 Podcast</a>'

                : '<button type="button" class="btn-link podcast-action" data-vault-pod="' + esc(item.target) + '" style="padding:8px 12px;font-size:0.78rem"><i data-lucide="headphones" size="14"></i> 🎧 Audio</button>';

            html += '<div class="vault-item"><div class="vault-item-info"><div class="vault-item-title"><span class="badge">' + esc(item.company) + '</span> <span>' + esc(item.target) + '</span> <span style="color:var(--text-3);font-size:0.78rem">(' + esc(item.toolLabel) + ')</span></div>' +

                '<div class="vault-item-sub">' + esc(item.fileType) + ' • ' + esc(item.sector) + ' • ' + esc(item.strategy) + ' • ' + esc(item.timestamp) + '</div></div>' +

                '<div style="display:flex;gap:6px;align-items:center">' + podAction + '<a href="' + esc(safeUrl(item.url)) + '" target="_blank" rel="noopener noreferrer" class="btn-link primary-action" style="padding:8px 14px;font-size:0.8rem"><i data-lucide="external-link" size="14"></i> Open Doc/Sheet</a></div></div>';

        }

        box.innerHTML = html;

        var podBtns = box.querySelectorAll('[data-vault-pod]');

        for (var p = 0; p < podBtns.length; p++) {

            podBtns[p].addEventListener('click', function() { findAndOpenPodcastForTarget(this.getAttribute('data-vault-pod'), this); });

        }

        icons();

    }

    renderVaultItems('');

    $('vaultSearchInput').addEventListener('input', function() { renderVaultItems(this.value); });

    refreshVaultFromServer(false);

}


function openSaasProposalModal() {

    if (currentUserRole !== 'admin' || !adminToken) {

        showToast('Restricted: Master Administrator login required.');

        return;

    }

    var ctx = getContext();

    $('modalTitle').innerHTML = '<i data-lucide="shield-check" style="color:var(--ok)"></i> VANTAGE OS — Master Admin Command Studio';

    $('modalBody').innerHTML =

        '<div style="display:flex;gap:8px;margin-bottom:14px">' +

            '<button type="button" class="btn-link primary-action" id="tabBtnPropStudio" style="flex:1;justify-content:center"><i data-lucide="file-check-2" size="15"></i> 1. Deep SaaS Proposal Studio</button>' +

            '<button type="button" class="btn-link" id="tabBtnUserMgr" style="flex:1;justify-content:center"><i data-lucide="users" size="15"></i> 2. Client User Generator (Production Access)</button>' +

        '</div>' +


        '<div id="adminTabProposal">' +

            '<p style="color:var(--text-2);font-size:0.84rem;margin-top:0">Scrape any prospect domain live, match their pain points 1-to-1 to VANTAGE OS modules, and build a branded Google Doc Proposal + executive pitch:</p>' +

            '<div class="onboard-grid">' +

                '<div style="display:grid;grid-template-columns:1fr 1fr;gap:10px">' +

                    '<div class="onboard-field"><label for="propCompany">1. Prospect Company Name</label><input type="text" id="propCompany" value="' + esc(ctx.company) + '"></div>' +

                    '<div class="onboard-field"><label for="propDomain">2. Official Domain (Auto-Discovered)</label><input type="text" id="propDomain" value="' + esc(ctx.domain) + '"></div>' +

                '</div>' +

                '<div style="display:grid;grid-template-columns:1fr 1fr;gap:10px">' +

                    '<div class="onboard-field"><label for="propContact">3. Contact Person / Role</label><input type="text" id="propContact" value="Executive Team"></div>' +

                    '<div class="onboard-field"><label for="propLang">4. Output Language</label><select id="propLang"><option value="en">🇬🇧 English</option><option value="es">🇪🇸 Español (Spanish)</option></select></div>' +

                '</div>' +

                '<div class="onboard-field"><label for="propNeeds">5. Prospect Pain Points, Bullet Points or Email Received</label>' +

                    '<textarea id="propNeeds" rows="4" placeholder="Paste the prospect\'s email, bullet points, or global expansion goals here..."></textarea>' +

                '</div>' +

                '<label style="display:flex;align-items:center;gap:8px;font-size:0.8rem;color:var(--text-2);cursor:pointer"><input type="checkbox" id="propSendEmail" checked> Send copy of Proposal File & Pitch to my Gmail</label>' +

                '<button type="button" class="action-btn" id="btnBuildSaasProposal" style="padding:13px"><i data-lucide="zap" size="18"></i> <span id="btnBuildSaasProposalText">Research Company & Generate Matched Proposal File</span></button>' +

                '<div id="propResultBox" hidden style="margin-top:8px;padding:14px;border-radius:12px;background:var(--bg-base);border:1px solid var(--ok)">' +

                    '<div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:10px">' +

                        '<strong style="color:var(--ok);font-size:0.86rem">✅ Deep Need-Matched Proposal File Created!</strong>' +

                        '<div style="display:flex;gap:8px;flex-wrap:wrap">' +

                            '<a href="#" target="_blank" id="propDocLink" class="btn-link primary-action" style="padding:6px 12px;font-size:0.78rem"><i data-lucide="external-link" size="14"></i> Open Proposal Doc</a>' +

                            '<button type="button" class="btn-link" id="btnCopyPitch" style="padding:6px 12px;font-size:0.78rem"><i data-lucide="copy" size="14"></i> Copy Email Pitch</button>' +

                        '</div>' +

                    '</div>' +

                    '<textarea id="propPitchOutput" rows="5" readonly style="width:100%;padding:10px;border-radius:8px;border:1px solid var(--border);background:var(--field);color:var(--text);font-size:0.79rem"></textarea>' +

                '</div>' +

            '</div>' +

        '</div>' +


        '<div id="adminTabUsers" hidden>' +

            '<p style="color:var(--text-2);font-size:0.84rem;margin-top:0">Create client credentials with full <strong>Production Mode</strong> access. Clients NEVER see this Admin Studio or the Proposal Generator:</p>' +

            '<div class="onboard-grid">' +

                '<div style="display:grid;grid-template-columns:1fr 1fr;gap:10px">' +

                    '<div class="onboard-field"><label for="newCliUser">Client Username</label><input type="text" id="newCliUser" placeholder="e.g. acme_corp"></div>' +

                    '<div class="onboard-field"><label for="newCliPass">Client Password</label><div style="display:flex;gap:6px"><input type="text" id="newCliPass" placeholder="e.g. Vantage_2026!" style="flex:1"><button type="button" class="btn-link" id="btnGenRandomPass" style="padding:0 10px"><i data-lucide="key" size="14"></i></button></div></div>' +

                '</div>' +

                '<div style="display:grid;grid-template-columns:1fr 1fr;gap:10px">' +

                    '<div class="onboard-field"><label for="newCliComp">Client Company Workspace</label><input type="text" id="newCliComp" placeholder="e.g. Acme Corp"></div>' +

                    '<div class="onboard-field"><label for="newCliPlan">Subscription Tier</label><select id="newCliPlan"><option value="Growth Pilot (€149/mo)">Growth Pilot (€149/mo)</option><option value="Pro GTM (€349/mo)">Pro GTM (€349/mo)</option><option value="Enterprise (€690/mo)">Enterprise (€690/mo)</option></select></div>' +

                '</div>' +

                '<button type="button" class="action-btn" id="btnCreateClientUser" style="padding:13px"><i data-lucide="user-plus" size="18"></i> <span id="btnCreateClientUserText">Create / Update Production Client User</span></button>' +

                '<div class="vault-list" id="clientUsersListBox" style="max-height:220px"></div>' +

            '</div>' +

        '</div>';

    icons();

    toggleModal(true);


    $('tabBtnPropStudio').addEventListener('click', function() {

        $('adminTabProposal').hidden = false; $('adminTabUsers').hidden = true;

        $('tabBtnPropStudio').classList.add('primary-action'); $('tabBtnUserMgr').classList.remove('primary-action');

    });

    $('tabBtnUserMgr').addEventListener('click', function() {

        $('adminTabProposal').hidden = true; $('adminTabUsers').hidden = false;

        $('tabBtnUserMgr').classList.add('primary-action'); $('tabBtnPropStudio').classList.remove('primary-action');

        loadClientUsersInAdminModal();

    });


    $('propCompany').addEventListener('input', function() { autoDiscoverOfficialDomain(this.value, $('propDomain')); });


    $('btnBuildSaasProposal').addEventListener('click', function() {

        var comp = ($('propCompany').value || '').trim();

        var dom = ($('propDomain').value || inferDomainFromCompanyName(comp)).trim();

        var contact = ($('propContact').value || 'Executive Team').trim();

        var needs = ($('propNeeds').value || '').trim();

        var lang = $('propLang').value || 'en';

        var sendMail = $('propSendEmail').checked;

        if (!comp || !needs) { showToast('Please enter company name and pain points.'); return; }

        $('btnBuildSaasProposalText').textContent = 'Scraping ' + dom + ' & Building Matched Proposal…';

        callVantageBackend(

            'generateCustomVantageSaasProposal',

            { prospectCompany: comp, prospectDomain: dom, contactName: contact, rawNeeds: needs, lang: lang, sendEmailCopy: sendMail, adminToken: adminToken },

            function(res) {

                $('btnBuildSaasProposalText').textContent = 'Research Company & Generate Matched Proposal File';

                if (res && res.docUrl) {

                    $('propResultBox').hidden = false;

                    $('propDocLink').href = res.docUrl;

                    $('propPitchOutput').value = res.emailPitch || '';

                    refreshVaultFromServer(false);

                    showToast('Deep Proposal file created for ' + comp + '!', 'success');

                }

            },

            function(err) {

                $('btnBuildSaasProposalText').textContent = 'Research Company & Generate Matched Proposal File';

                showToast((err && err.message) || 'Error generating proposal.');

            }

        );

    });


    $('btnCopyPitch').addEventListener('click', function() {

        var txt = $('propPitchOutput'); txt.select(); navigator.clipboard.writeText(txt.value);

        showToast('Executive pitch copied to clipboard!', 'success');

    });


    $('btnGenRandomPass').addEventListener('click', function() {

        var chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789!@#$';

        var out = 'Vantage_';

        for (var i = 0; i < 8; i++) out += chars.charAt(Math.floor(Math.random() * chars.length));

        $('newCliPass').value = out;

    });


    $('btnCreateClientUser').addEventListener('click', function() {

        var u = ($('newCliUser').value || '').trim();

        var p = ($('newCliPass').value || '').trim();

        var c = ($('newCliComp').value || u).trim();

        var pl = $('newCliPlan').value;

        if (!u || !p) { showToast('Enter both username and password.'); return; }

        $('btnCreateClientUserText').textContent = 'Saving Client Credentials…';

        callVantageBackend(

            'createClientUser',

            { username: u, password: p, company: c, plan: pl, adminToken: adminToken },

            function(list) {

                $('btnCreateClientUserText').textContent = 'Create / Update Production Client User';

                $('newCliUser').value = ''; $('newCliPass').value = '';

                renderClientUsersList(list);

                showToast('Production user "' + u + '" activated!', 'success');

            },

            function(err) {

                $('btnCreateClientUserText').textContent = 'Create / Update Production Client User';

                showToast((err && err.message) || 'Could not create user.');

            }

        );

    });

}


function loadClientUsersInAdminModal() {

    callVantageBackend('getClientUsersList', { adminToken: adminToken }, renderClientUsersList);

}


function renderClientUsersList(list) {

    var box = $('clientUsersListBox'); if (!box) return;

    if (!Array.isArray(list) || list.length === 0) {

        box.innerHTML = '<div style="padding:14px;text-align:center;color:var(--text-2);font-size:0.82rem">No client accounts created yet. Add one above!</div>';

        return;

    }

    var html = '';

    for (var i = 0; i < list.length; i++) {

        var u = list[i];

        html += '<div class="vault-item" style="padding:9px 12px">' +

            '<div class="vault-item-info">' +

                '<div class="vault-item-title"><span class="badge">' + esc(u.username) + '</span> <span>' + esc(u.company) + '</span> <span style="font-size:0.75rem;color:var(--ok)">(' + esc(u.plan) + ')</span></div>' +

                '<div class="vault-item-sub">Pass: <code>' + esc(u.password) + '</code> • Created: ' + esc(u.createdAt) + '</div>' +

            '</div>' +

            '<button type="button" class="btn-link" data-del-user="' + esc(u.username) + '" style="padding:5px 10px;font-size:0.75rem;color:var(--danger)"><i data-lucide="trash-2" size="13"></i> Revoke</button>' +

        '</div>';

    }

    box.innerHTML = html;

    var delBtns = box.querySelectorAll('[data-del-user]');

    for (var d = 0; d < delBtns.length; d++) {

        delBtns[d].addEventListener('click', function() {

            var targetU = this.getAttribute('data-del-user');

            callVantageBackend('deleteClientUser', { username: targetU, adminToken: adminToken }, function(updated) {

                renderClientUsersList(updated);

                showToast('Revoked user ' + targetU, 'success');

            });

        });

    }

    icons();

}


function openChangelogModal() {

    $('modalTitle').innerHTML = '<i data-lucide="sparkles" style="color:var(--primary)"></i> VANTAGE OS — Product Changelog & Release Notes';

    $('modalBody').innerHTML =

        '<div class="changelog-entry latest">' +

            '<div class="changelog-ver"><span>🚀 Version 10.0 — Vercel REST Gateway, Global 360° ABM & 10-Language Engine</span><span class="changelog-date">Current Release (Nov 2026)</span></div>' +

            '<ul class="changelog-list">' +

                '<li><strong>Vercel + Custom Domain Ready (<code>vantage-os.io</code>):</strong> Universal REST API Bridge connecting standalone Vercel deployments directly to Google Apps Script & n8n Cloud.</li>' +

                '<li><strong>Borderless 360° Market Scope & Strict B2B Filter:</strong> Prospect from any country to any destination (e.g., Canada → Namibia). Blocks songs, movies, and non-business trivia—explicitly reporting <em>"Company could not be found"</em> when unverified.</li>' +

                '<li><strong>10-Language Selector & 4-Layer ABM Landing Page:</strong> Enforces strict English (or selected language) output, highlighting surgical ABM (Industry, Company, Decision-Maker & Full Career) and SME time savings.</li>' +

            '</ul>' +

        '</div>' +

        '<div class="changelog-entry">' +

            '<div class="changelog-ver"><span>🔒 Version 9.0 — Multi-Role Login (Admin vs. Client) & Pricing Tiers</span><span class="changelog-date">Nov 2026</span></div>' +

            '<ul class="changelog-list">' +

                '<li><strong>Multi-Role Production Login & User Manager:</strong> Master Admin unlocks the Proposal Studio & User Generator; Client accounts unlock Live Production Webhooks.</li>' +

            '</ul>' +

        '</div>';

    icons();

    toggleModal(true);

}


function openLoginModal(preselectedTier) {

    var ignored = isOwnerDeviceIgnored();

    $('modalTitle').innerHTML = '<i data-lucide="key-round" style="color:var(--primary)"></i> Sign In to VANTAGE OS Production';

    $('modalBody').innerHTML =

        '<p style="color:var(--text-2);font-size:0.86rem;margin-top:0">' +

            (preselectedTier ? 'Selected Plan: <strong>' + esc(preselectedTier) + '</strong>. ' : '') +

            'Enter your VANTAGE OS username and password to unlock live 360° cloud agents, OSINT scrapers, and Google Drive deliverables:' +

        '</p>' +

        '<div class="onboard-grid">' +

            '<div class="onboard-field"><label for="loginUsernameInput">Username</label><input type="text" id="loginUsernameInput" placeholder="e.g. admin or client username" value="' + esc(currentUsername || 'admin') + '"></div>' +

            '<div class="onboard-field"><label for="loginPasswordInput">Password / Passkey</label><input type="password" id="loginPasswordInput" placeholder="Enter your password..." value=""></div>' +

            '<div style="display:flex;gap:10px;margin-top:8px;flex-wrap:wrap">' +

                '<button type="button" class="action-btn" id="unlockLiveBtn" style="flex:1;padding:13px"><i data-lucide="log-in" size="17"></i> <span id="unlockLiveBtnText">Sign In to Production OS</span></button>' +

                '<button type="button" class="btn-link" id="lockDemoBtn" style="justify-content:center">Continue in Sandbox Demo</button>' +

            '</div>' +

            '<div style="margin-top:10px;padding-top:10px;border-top:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;font-size:0.78rem;color:var(--text-3)">' +

                '<span>Browser Telemetry Exclusion:</span>' +

                '<button type="button" class="btn-link" id="toggleIgnoreTelemetryBtn" style="padding:4px 10px;font-size:0.75rem">' + (ignored ? '🛡️ Excluded from Visitor_Logs' : 'Exclude My Browser') + '</button>' +

            '</div>' +

        '</div>';

    icons();

    toggleModal(true);


    setTimeout(function() { if ($('loginPasswordInput')) $('loginPasswordInput').focus(); }, 120);


    $('toggleIgnoreTelemetryBtn').addEventListener('click', function() {

        var nextState = !isOwnerDeviceIgnored();

        setOwnerDeviceIgnored(nextState);

        toggleModal(false);

        showToast(nextState ? 'Your browser is now excluded from Visitor_Logs!' : 'Browser exclusion disabled.', 'success');

    });


    function executeSignIn() {

        var userVal = ($('loginUsernameInput').value || 'admin').trim();

        var passVal = ($('loginPasswordInput').value || '').trim();

        if (!passVal) { showToast('Please enter your password.'); return; }


        $('unlockLiveBtnText').textContent = 'Verifying Credentials…';


        if (userVal.toLowerCase() === 'admin' && passVal === 'Intelligence_center_2026_ahll?*^¨') {

            adminToken = passVal;

            currentUserRole = 'admin';

            currentUsername = 'admin';

            useSimMode = false;

            setOwnerDeviceIgnored(true);

            updateModeBadgeUI();

            toggleModal(false);

            enterPlatformWorkspace();

            refreshVaultFromServer(true);

            showToast('Welcome Master Admin! Production Mode, Proposal Studio & User Manager unlocked.', 'success');

            return;

        }


        callVantageBackend(

            'authenticateVantageUser',

            { username: userVal, passkey: passVal },

            function(authRes) {

                $('unlockLiveBtnText').textContent = 'Sign In to Production OS';

                if (authRes && authRes.authenticated) {

                    adminToken = authRes.token;

                    currentUserRole = authRes.role || 'client';

                    currentUsername = authRes.user || userVal;

                    useSimMode = false;

                    if (currentUserRole === 'admin') setOwnerDeviceIgnored(true);

                    if (authRes.company && authRes.role === 'client' && $('ctxCompany')) {

                        $('ctxCompany').value = authRes.company;

                        $('ctxDomain').value = inferDomainFromCompanyName(authRes.company);

                    }

                    updateModeBadgeUI();

                    toggleModal(false);

                    enterPlatformWorkspace();

                    refreshVaultFromServer(true);

                    showToast('Signed in as ' + currentUsername + '!', 'success');

                } else {

                    showToast((authRes && authRes.message) || 'Invalid username or password.');

                }

            },

            function() {

                $('unlockLiveBtnText').textContent = 'Sign In to Production OS';

                showToast('Authentication check failed.');

            }

        );

    }


    $('unlockLiveBtn').addEventListener('click', executeSignIn);

    $('loginPasswordInput').addEventListener('keydown', function(e) { if (e.key === 'Enter') executeSignIn(); });


    $('lockDemoBtn').addEventListener('click', function() {

        adminToken = ""; currentUserRole = "guest"; useSimMode = true;

        updateModeBadgeUI(); toggleModal(false); enterPlatformWorkspace();

        showToast('Entered Interactive Sandbox Demo Mode.', 'success');

    });

}


function updateModeBadgeUI() {

    var badge = $('modeBadge');

    var isLive = Boolean(!useSimMode && adminToken);

    var isMasterAdmin = Boolean(isLive && currentUserRole === 'admin');

    if ($('secretProposalBtn')) $('secretProposalBtn').hidden = !isMasterAdmin;


    if (isLive) {

        badge.classList.add('live-active');

        $('modeText').textContent = isMasterAdmin ? 'Master Admin (Live)' : ('Production (' + currentUsername + ')');

        $('btnHeaderLoginText').textContent = isMasterAdmin ? 'AdminLogged' : currentUsername;

        $('botSubLabel').textContent = 'Global 360° ABM, Persona & ROI Engine (Live)';

    } else {

        badge.classList.remove('live-active');

        $('modeText').textContent = 'Demo Mode';

        $('btnHeaderLoginText').textContent = 'Client Login';

        $('botSubLabel').textContent = 'Global 360° ABM, Persona & ROI Engine';

    }

}


function runAgent() {

    if (currentDept && !currentDept.isLive) {

        showToast('This division is currently Under Construction. Switch to Sales & Market Expansion (6 Live Modules)!');

        return;

    }

    var input = $('mainInput'), target = input.value.trim();

    if (!currentTool) return;

    if (!target) { showToast('Select a target chip or type a target first.'); input.focus(); return; }

    var tool = currentTool, strategy = $('paramSelect').value, outLang = getActiveLang();

    var profile = buildDynamicCompanyTelemetry(getContext());

    var jobId = 'job_' + Date.now();


    sendTelemetryToGAS('RUN_AGENT', '[' + profile.company + ' | Lang: ' + outLang + '] ' + tool.label + ' -> ' + target);

    input.value = '';


    var empty = $('feed').querySelector('[data-empty]');

    if (empty) empty.remove();


    var audioTag = generatePodcastEnabled ? ' • 🎧 Podcast: ON' : ' • 🔇 Podcast: OFF';


    $('feed').insertAdjacentHTML('afterbegin',

        '<article class="feed-card glass" id="' + jobId + '">' +

            '<div class="card-top"><div><h4 class="target-title"><i data-lucide="' + tool.icon + '" size="20"></i> ' + esc(target) + ' <span class="badge">' + esc(tool.label) + '</span></h4>' +

            '<span class="meta"><i data-lucide="sliders" size="12"></i> Brand: <strong>' + esc(profile.company) + '</strong> • Lang: <strong>' + esc(outLang.toUpperCase()) + '</strong> • Intent: <strong>' + esc(strategy) + '</strong>' + audioTag + '</span></div>' +

            '<span class="status" id="status_' + jobId + '"><i data-lucide="loader-2" class="spin" size="14"></i> <span id="timer_' + jobId + '">Running (0s)</span></span></div>' +

            '<div class="progress-track" id="prog_' + jobId + '"><div class="progress-fill"></div></div>' +

            '<div class="terminal" id="term_' + jobId + '"><i data-lucide="terminal" size="16"></i><span>Initializing 360° ' + esc(strategy) + ' workflow in ' + esc(outLang.toUpperCase()) + '…</span></div>' +

        '</article>'

    );

    icons();


    var startTs = Date.now();

    var secInterval = setInterval(function() {

        var tEl = $('timer_' + jobId);

        if (!tEl) { clearInterval(secInterval); return; }

        tEl.textContent = 'Running (' + Math.floor((Date.now() - startTs) / 1000) + 's)';

    }, 1000);


    if (!useSimMode && adminToken) {

        callVantageBackend(

            'runUnifiedTask',

            {

                target: target,

                type: tool.id,

                lang: outLang,

                strategy: strategy + ' | Brand Positioning: ' + profile.businessModel + ' | STRICT OUTPUT LANGUAGE: ' + outLang.toUpperCase(),

                company: profile.company,

                sector: profile.sector,

                domain: profile.domain,

                companyContext: profile.businessModel,

                generateAudio: generatePodcastEnabled,

                adminToken: adminToken

            },

            function() {

                activeJobs[jobId] = {

                    started: startTs,

                    secTimer: secInterval,

                    timer: setInterval(function() { pollLiveStatus(jobId, target, tool, strategy, profile.company, profile.sector, profile.domain); }, POLL_MS)

                };

            },

            function(err) {

                clearInterval(secInterval);

                failJob(jobId, (err && err.message) || 'Unauthorized or webhook error.');

            }

        );

    } else {

        activeJobs[jobId] = { started: startTs, secTimer: secInterval, timer: null };

        simulateDemoJob(jobId, target, tool, strategy, profile.company, profile.sector);

    }

}


function stopJob(jobId) {

    var j = activeJobs[jobId];

    if (j) {

        if (j.timer) clearInterval(j.timer);

        if (j.secTimer) clearInterval(j.secTimer);

        delete activeJobs[jobId];

    }

}


function setTerm(jobId, iconName, text) {

    var term = $('term_' + jobId);

    if (term) { term.innerHTML = '<i data-lucide="' + iconName + '" size="16"></i><span>' + esc(text) + '</span>'; icons(); }

}


function failJob(jobId, msg) {

    stopJob(jobId);

    var card = $(jobId); if (!card) return;

    var prog = $('prog_' + jobId); if (prog) prog.remove();

    card.classList.add('failed');

    card.querySelector('.status').innerHTML = '<i data-lucide="alert-triangle" size="14"></i> Failed';

    setTerm(jobId, 'alert-triangle', msg);

}


function pollLiveStatus(jobId, target, tool, strategy, company, sector, domain) {

    var job = activeJobs[jobId];

    if (!job) return;

    if (Date.now() - job.started > JOB_TIMEOUT_MS) { failJob(jobId, 'Timed out after 10 minutes.'); return; }

    callVantageBackend(

        'checkUnifiedCache',

        { target: target, type: tool.id, token: adminToken },

        function(res) {

            if (!activeJobs[jobId] || !res) return;

            if (res.json) {

                stopJob(jobId);

                setTerm(jobId, 'file-check-2', 'Applying ' + company + ' brand design & saving deliverable to Google Drive…');

                callVantageBackend(

                    'generateFinalAsset',

                    { jsonString: res.json, type: tool.id, token: adminToken, contextObj: { company: company, sector: sector, domain: domain, strategy: strategy, target: target } },

                    function(resAsset) {

                        var docUrl = (resAsset && typeof resAsset === 'object') ? resAsset.url : resAsset;

                        var audioUrl = (resAsset && typeof resAsset === 'object') ? resAsset.audioUrl : '';

                        buildFinalCard(jobId, target, tool, strategy, company, sector, docUrl, audioUrl);

                        refreshVaultFromServer(false);

                    },

                    function(err) { failJob(jobId, (err && err.message) || 'Could not create Google Doc/Sheet.'); }

                );

            } else if (res.log) {

                setTerm(jobId, 'activity', res.log);

            }

        },

        function(err) { failJob(jobId, (err && err.message) || 'Lost connection to backend.'); }

    );

}


function simulateDemoJob(jobId, target, tool, strategy, company, sector) {

    var steps = [

        'Scraping 360° B2B OSINT & competitive landscape for ' + company + ' (' + sector + ')…',

        'Executing [' + strategy + '] on target [' + target + '] in ' + getActiveLang().toUpperCase() + '…',

        'Synthesizing executive deliverable' + (generatePodcastEnabled ? ' & AI audio podcast…' : '…')

    ], idx = 0;

    var timer = setInterval(function() {

        var term = $('term_' + jobId);

        if (!term) { clearInterval(timer); stopJob(jobId); return; }

        if (idx < steps.length) { setTerm(jobId, 'activity', steps[idx++]); }

        else { clearInterval(timer); stopJob(jobId); buildFinalCard(jobId, target, tool, strategy, company, sector, null, null); }

    }, 700);

}


function generateExecutiveSummary(target, tool, strategy, company, sector) {

    return {

        headline: tool.label + ' — ' + target + ' (' + company + ')',

        summary: '<strong>360° ABM Intelligence (' + esc(company) + ' → ' + esc(target) + '):</strong> Executed with <strong>' + esc(strategy) + '</strong> intent for the global <strong>' + esc(sector) + '</strong> market.',

        metrics: [

            { label: 'Global Market Expansion & Whitespace Fit', pct: 95 },

            { label: '4-Layer ABM & Decision-Maker Precision', pct: 93 },

            { label: 'Time Saved vs. Manual Research', pct: 96 }

        ],

        bullets: [

            'Target Analyzed: ' + target + ' (styled with ' + company + ' corporate identity).',

            'Strategic Intent Applied: ' + strategy + ' (Output Language: ' + getActiveLang().toUpperCase() + ').',

            'Deliverable stored in Google Drive OUTPUT folder and indexed in VANTAGE Vault.'

        ]

    };

}


function buildFinalCard(jobId, target, tool, strategy, company, sector, liveUrl, audioUrl) {

    var card = $(jobId); if (!card) return;

    var time = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });

    var intel = generateExecutiveSummary(target, tool, strategy, company, sector);

    reportStore[jobId] = intel;


    var liveBtnHtml = liveUrl

        ? '<a href="' + esc(safeUrl(liveUrl)) + '" target="_blank" rel="noopener noreferrer" class="btn-link primary-action"><i data-lucide="external-link" size="16"></i> Open Branded Google Doc / Sheet</a>'

        : '';

    var podcastBtnHtml = '';

    if (audioUrl && /^https?:\/\//i.test(audioUrl)) {

        podcastBtnHtml = '<a href="' + esc(safeUrl(audioUrl)) + '" target="_blank" rel="noopener noreferrer" class="btn-link podcast-action"><i data-lucide="headphones" size="16"></i> 🎧 Listen Audio Podcast</a>';

    } else if (liveUrl && generatePodcastEnabled) {

        podcastBtnHtml = '<button type="button" class="btn-link podcast-action" data-find-podcast="' + esc(target) + '"><i data-lucide="headphones" size="16"></i> 🎧 Listen Podcast</button>';

    }


    card.classList.add('done');

    card.innerHTML =

        '<div class="card-top"><div><h4 class="target-title"><i data-lucide="check-circle" size="20"></i> ' + esc(target) + ' <span class="badge">' + esc(tool.label) + '</span></h4>' +

        '<span class="meta"><i data-lucide="clock" size="12"></i> Completed at ' + time + ' • Brand: <strong>' + esc(company) + '</strong> (' + esc(sector) + ')</span></div><span class="status">Saved to Vault</span></div>' +

        '<div class="card-summary">' + intel.summary + '</div>' +

        '<div class="card-actions">' +

            liveBtnHtml + podcastBtnHtml +

            '<button type="button" class="btn-link ' + (liveUrl ? '' : 'primary-action') + '" data-preview="' + jobId + '"><i data-lucide="sparkles" size="16"></i> Inspect Strategic Summary</button>' +

            '<button type="button" class="btn-link" data-rerun="' + esc(target) + '"><i data-lucide="rotate-ccw" size="15"></i> Re-Run</button>' +

        '</div>';


    card.querySelector('[data-preview]').addEventListener('click', function() { openPreviewModal(reportStore[jobId]); });

    var podBtn = card.querySelector('[data-find-podcast]');

    if (podBtn) podBtn.addEventListener('click', function() { findAndOpenPodcastForTarget(this.getAttribute('data-find-podcast'), this); });

    var rerunBtn = card.querySelector('[data-rerun]');

    if (rerunBtn) rerunBtn.addEventListener('click', function() { $('mainInput').value = this.getAttribute('data-rerun'); $('mainInput').focus(); showToast('Target loaded into search bar!', 'success'); });

    icons();

    showToast(tool.label + ' for ' + target + ' ready!', 'success');

}


function openPreviewModal(intel) {

    if (!intel) return;

    $('modalTitle').innerHTML = '<i data-lucide="bar-chart-2"></i> ' + esc(intel.headline);

    var barsHtml = '', bulletsHtml = '';

    for (var i = 0; i < intel.metrics.length; i++) {

        var m = intel.metrics[i];

        barsHtml += '<div class="metric-row"><div class="metric-row-top"><span>' + esc(m.label) + '</span><span>' + m.pct + '%</span></div><div class="bar-track"><div class="bar-fill" style="width:' + m.pct + '%"></div></div></div>';

    }

    for (var j = 0; j < intel.bullets.length; j++) { bulletsHtml += '<li>' + esc(intel.bullets[j]) + '</li>'; }

    $('modalBody').innerHTML = '<div class="card-summary" style="margin-bottom:16px">' + intel.summary + '</div><div class="metric-bars">' + barsHtml + '</div><h4 style="margin:18px 0 8px;font-size:0.95rem">Strategic Playbook & Next Steps:</h4><ul>' + bulletsHtml + '</ul>';

    icons(); toggleModal(true);

}


function openBrandModal() {

    var ctx = getContext();

    $('modalTitle').innerHTML = '<i data-lucide="radar"></i> VANTAGE OS — Global 360° Company Discovery';

    $('modalBody').innerHTML =

        '<p style="color:var(--text-2);font-size:0.88rem;margin-top:0">Enter <strong>any company name</strong> worldwide. VANTAGE OS verifies the corporate entity, auto-discovers its official domain, and scrapes its live B2B footprint in your selected language:</p>' +

        '<div class="onboard-grid">' +

            '<div class="onboard-field"><label for="mCompInput">1. Company Name</label><input type="text" id="mCompInput" value="' + esc(ctx.company) + '"></div>' +

            '<div class="onboard-field"><label for="mDomInput">2. Official Website Domain (Auto-Discovered)</label><input type="text" id="mDomInput" value="' + esc(ctx.domain) + '"></div>' +

            '<div class="onboard-field"><label for="mSecSelect">3. Industry Sector</label><select id="mSecSelect">' +

                '<option value="Auto-Detect">✨ Auto-Detect from Website OSINT</option>' +

                '<option value="Industrial & Energy">Industrial & Water/Energy</option>' +

                '<option value="E-Commerce">E-Commerce & Digital Growth</option>' +

                '<option value="B2B SaaS">B2B SaaS & Cloud</option>' +

                '<option value="FinTech">FinTech & Banking</option>' +

                '<option value="Healthcare">HealthTech & Bio</option>' +

            '</select></div>' +

            '<button type="button" class="action-btn" id="applyBrandBtn" style="margin-top:8px;padding:14px">Research Company & Adapt Workspace</button>' +

        '</div>';

    $('mSecSelect').value = $('ctxSector').value;

    icons(); toggleModal(true);

    $('mCompInput').addEventListener('input', function() { autoDiscoverOfficialDomain(this.value, $('mDomInput')); });

    $('applyBrandBtn').addEventListener('click', function() {

        var newComp = $('mCompInput').value.trim() || 'Xylem';

        var newDom = $('mDomInput').value.trim() || inferDomainFromCompanyName(newComp);

        $('ctxCompany').value = newComp; $('ctxDomain').value = newDom; $('ctxSector').value = $('mSecSelect').value;

        updateContextUI(false); triggerLiveCompanyOsintFetch(getContext(), true); toggleModal(false);

    });

}


function renderEmpty() {

    $('feed').innerHTML = '<div class="empty-state" data-empty><i data-lucide="inbox" size="28"></i><span><strong>No active intelligence runs in this view.</strong><br>Click a global preset chip above, toggle <strong>🎧 AI Podcast</strong>, or open your <strong>Asset Vault</strong>.</span></div>';

    icons();

}

function toggleFeed() { var btn = $('feedToggle'), open = btn.getAttribute('aria-expanded') === 'true'; btn.setAttribute('aria-expanded', !open); $('feed').hidden = open; }

function toggleTheme() {

    var light = document.documentElement.getAttribute('data-theme') !== 'light';

    if (light) document.documentElement.setAttribute('data-theme', 'light'); else document.documentElement.removeAttribute('data-theme');

    $('themeIcon').setAttribute('data-lucide', light ? 'sun' : 'moon'); icons();

}

var toastTimer;

function showToast(message, type) {

    var t = $('toast'); t.className = 'toast show ' + (type === 'success' ? 'success' : '');

    t.querySelector('span').textContent = message;

    clearTimeout(toastTimer); toastTimer = setTimeout(function() { t.classList.remove('show'); }, 3200);

}

function toggleModal(force) {

    var open = typeof force === 'boolean' ? force : !$('appModal').classList.contains('active');

    $('appModal').classList.toggle('active', open); $('modalOverlay').classList.toggle('active', open);

}


function appendBotMsg(htmlContent, sender, navAction) {

    var box = $('botMessages'), div = document.createElement('div');

    div.className = 'bot-msg ' + (sender || 'ai');

    div.innerHTML = sender === 'user' ? esc(htmlContent) : htmlContent;

    if (navAction && sender !== 'user') {

        var btn = document.createElement('button');

        btn.type = 'button'; btn.className = 'bot-action-btn'; btn.innerHTML = '➔ ' + esc(navAction.label);

        btn.addEventListener('click', function() { loadDepartment(navAction.dept, navAction.toolId); $('mainInput').value = navAction.sampleInput; $('mainInput').focus(); });

        div.appendChild(document.createElement('br')); div.appendChild(btn);

    }

    box.appendChild(div); box.scrollTop = box.scrollHeight; icons();

}


function getSmartBotReply(question) {

    var q = String(question || '').toLowerCase();

    var prof = buildDynamicCompanyTelemetry(getContext());

    var comp = esc(prof.company);


    if (q.indexOf('abm') !== -1 || q.indexOf('career') !== -1 || q.indexOf('persona') !== -1 || q.indexOf('layer') !== -1) {

        return {

            text: '<strong>4-Layer Surgical ABM & Career Psychology (' + comp + '):</strong><br>' +

                        'VANTAGE OS investigates: 1) <em>Macro Industry</em>, 2) <em>Company Architecture</em>, 3) <em>Buying Committee</em>, and 4) <em>The Decision-Maker\'s Full Career Trajectory & KPIs</em> so your outreach is hyper-precise.',

            action: { label: 'Launch Career & Persona Psychology', dept: 'sales', toolId: 'persona', sampleInput: 'VP of Global Operations — ' + prof.company }

        };

    }

    if (q.indexOf('global') !== -1 || q.indexOf('namibia') !== -1 || q.indexOf('canada') !== -1 || q.indexOf('360') !== -1) {

        return {

            text: '<strong>Borderless 360° Global Prospecting:</strong><br>' +

                        'There are zero geographical limits. A Canadian company can scan expansion signals in Namibia, APAC, LATAM, or EMEA in any of our 10 supported languages.',

            action: { label: 'Run 360° Territory Radar', dept: 'sales', toolId: 'territory', sampleInput: 'Canada → Namibia & Southern Africa Expansion' }

        };

    }

    if (q.indexOf('live') !== -1 || q.indexOf('construction') !== -1 || q.indexOf('module') !== -1) {

        return {

            text: '<strong>Module Status:</strong><br>' +

                        '• <strong>Sales & Market Expansion (6 Modules):</strong> 100% Live in Production.<br>' +

                        '• <strong>Marketing Studio & Customer Success:</strong> Currently <em>Under Construction</em> in our modular roadmap.',

            action: { label: 'Open Live Sales Engine', dept: 'sales', toolId: 'utility', sampleInput: prof.company }

        };

    }

    if (q.indexOf('roi') !== -1 || q.indexOf('mkt') !== -1 || q.indexOf('campaign') !== -1) {

        return {

            text: '<strong>Marketing Campaign ROI Formula:</strong><br>' +

                        '• <strong>Net ROI (%):</strong> <code>((Attributed Pipeline × Margin) - Spend) / Spend × 100</code><br>' +

                        '• <strong>Time Saved for Lean Teams:</strong> 18+ hours saved per rep weekly with zero manual copy-paste errors.'

        };

    }

    return {

        text: '<strong>VANTAGE OS v10.0 Copilot (' + comp + '):</strong><br>' +

                    '• <strong>Output Language:</strong> ' + esc(getActiveLang().toUpperCase()) + '<br>' +

                    '• <strong>Detected Scale:</strong> ' + esc(prof.scaleTier) + '<br>' +

                    'Select any of our 6 Live Sales & Market Expansion tools below:',

        action: { label: 'Run 360° Account & Competitor Brief', dept: 'sales', toolId: 'utility', sampleInput: prof.company }

    };

}


function handleBotSubmit(queryText) {

    var text = String(queryText || '').trim(); if (!text) return;

    appendBotMsg(text, 'user'); $('botInput').value = '';

    sendTelemetryToGAS('BOT_QUERY', '[' + getContext().company + '] Asked Copilot: ' + text);

    setTimeout(function() { var reply = getSmartBotReply(text); appendBotMsg(reply.text, 'ai', reply.action); }, 220);

}


/* =====================================================================

      VISITOR TELEMETRY TRACKER (WITH LIVE IP/GEO RESOLUTION FOR VERCEL & GAS)

      ===================================================================== */

var visitorSessionId = 'sess_' + Math.random().toString(36).substring(2, 8) + '_' + Date.now().toString(36);

var visitorGeoCache = { ip: 'Pending...', city: 'Unknown', region: 'Unknown', country: 'Unknown', org: 'Unknown' };


function sendTelemetryToGAS(eventType, actionDetail) {

    if (isOwnerDeviceIgnored()) return;

    var tz = 'Unknown'; try { tz = Intl.DateTimeFormat().resolvedOptions().timeZone || 'Unknown'; } catch (e) {}

    var lang = navigator.language || 'en', scr = (window.screen ? window.screen.width + 'x' + window.screen.height : 'Unknown');

    callVantageBackend('logVisitorTelemetry', {

        sessionId: visitorSessionId,

        isOwner: isOwnerDeviceIgnored(),

        eventType: eventType,

        actionDetail: actionDetail,

        ip: visitorGeoCache.ip,

        city: visitorGeoCache.city,

        region: visitorGeoCache.region,

        country: visitorGeoCache.country,

        org: visitorGeoCache.org,

        timezone: tz,

        langScreen: lang + ' (' + scr + ')',

        userAgent: navigator.userAgent || 'Unknown'

    });

}


function initVisitorGeoAndTrack() {

    if (isOwnerDeviceIgnored()) return;

    fetch('https://ipapi.co/json/')

        .then(function(r) { return r.json(); })

        .then(function(geo) {

            if (geo && geo.ip) {

                visitorGeoCache.ip = geo.ip || 'Unknown';

                visitorGeoCache.city = geo.city || 'Unknown';

                visitorGeoCache.region = geo.region || 'Unknown';

                visitorGeoCache.country = geo.country_name || geo.country || 'Unknown';

                visitorGeoCache.org = geo.org || 'Unknown';

            }

            sendTelemetryToGAS('PAGE_VISIT', 'Loaded VANTAGE OS v10.0 (' + (window.location.hostname || 'Web') + ')');

        })

        .catch(function() {

            sendTelemetryToGAS('PAGE_VISIT', 'Loaded VANTAGE OS v10.0 (Geo Fallback)');

        });

}


function bootApp() {

    if (window.__iosBooted) return;

    window.__iosBooted = true;


    var isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform || '');

    if ($('kbdMod')) $('kbdMod').textContent = isMac ? '⌘' : 'Ctrl';

    if ($('globalLangSelect')) $('globalLangSelect').value = currentUiLang;


    renderEmpty();

    initVisitorGeoAndTrack();


    $('globalLangSelect').addEventListener('change', function() {

        currentUiLang = this.value;

        try { localStorage.setItem('vantage_ui_lang', currentUiLang); } catch (e) {}

        showToast('Output Language set to ' + currentUiLang.toUpperCase() + '. Re-syncing OSINT…', 'success');

        if ($('landing-view').hidden) {

            triggerLiveCompanyOsintFetch(getContext(), false);

        }

    });


    $('lpBtnLogin').addEventListener('click', function() { openLoginModal(); });

    $('btnHeaderLogin').addEventListener('click', function() { openLoginModal(); });

    $('lpBtnDemo').addEventListener('click', function() {

        enterPlatformWorkspace();

        showToast('360° Interactive Sandbox Demo active!', 'success');

    });

    $('btnBackToLanding').addEventListener('click', showLandingPage);


    if ($('btnSwitchToLiveSales')) {

        $('btnSwitchToLiveSales').addEventListener('click', function() {

            loadDepartment('sales');

            showToast('Switched to Live Sales & Market Expansion Engine!', 'success');

        });

    }


    var tierBtns = document.querySelectorAll('[data-login-trigger]');

    for (var t = 0; t < tierBtns.length; t++) {

        tierBtns[t].addEventListener('click', function() {

            openLoginModal(this.getAttribute('data-login-trigger'));

        });

    }


    var deptCards = document.querySelectorAll('[data-dept]');

    for (var i = 0; i < deptCards.length; i++) {

        deptCards[i].addEventListener('click', function() { loadDepartment(this.getAttribute('data-dept')); });

    }


    $('logoBtn').addEventListener('click', function() {

        if (!$('landing-view').hidden) return;

        showPortal();

    });


    $('secretLogoTrigger').addEventListener('dblclick', function(e) { e.stopPropagation(); openLoginModal(); });


    $('btnVault').addEventListener('click', openAssetVaultModal);

    $('openVaultInlineBtn').addEventListener('click', openAssetVaultModal);

    $('btnHome').addEventListener('click', showPortal);

    $('btnTheme').addEventListener('click', toggleTheme);

    $('generateBtn').addEventListener('click', runAgent);

    $('mainInput').addEventListener('keydown', function(e) { if (e.key === 'Enter') runAgent(); });

    $('feedToggle').addEventListener('click', toggleFeed);

    $('clearBtn').addEventListener('click', function() { renderEmpty(); showToast('Feed view cleared.', 'success'); });


    if ($('podcastToggleBtn')) {

        $('podcastToggleBtn').addEventListener('click', function() {

            setPodcastToggleState(!generatePodcastEnabled, true);

            showToast(generatePodcastEnabled ? '🎧 AI Audio Podcast enabled' : '🔇 AI Audio Podcast disabled', 'success');

        });

    }


    $('openBrandModalBtn').addEventListener('click', openBrandModal);

    $('heroBrandBanner').addEventListener('click', openBrandModal);

    $('secretProposalBtn').addEventListener('click', openSaasProposalModal);

    $('changelogBtn').addEventListener('click', openChangelogModal);

    $('modalClose').addEventListener('click', function() { toggleModal(false); });

    $('modalOverlay').addEventListener('click', function() { toggleModal(false); });


    if ($('syncCompanyOsintBtn')) {

        $('syncCompanyOsintBtn').addEventListener('click', function() { triggerLiveCompanyOsintFetch(getContext(), true); });

    }

    if ($('btnResearchCompany')) {

        $('btnResearchCompany').addEventListener('click', function() {

            autoDiscoverOfficialDomain($('ctxCompany').value, $('ctxDomain'), function() { triggerLiveCompanyOsintFetch(getContext(), true); });

        });

    }


    $('ctxCompany').addEventListener('input', function() {

        var val = this.value;

        $('ctxDomain').value = inferDomainFromCompanyName(val);

        updateContextUI(false);

        clearTimeout(domainAutocompleteDebounce);

        domainAutocompleteDebounce = setTimeout(function() {

            autoDiscoverOfficialDomain(val, $('ctxDomain'), function() { updateContextUI(true); });

        }, 320);

    });


    $('ctxCompany').addEventListener('keydown', function(e) {

        if (e.key === 'Enter') {

            autoDiscoverOfficialDomain(this.value, $('ctxDomain'), function() { triggerLiveCompanyOsintFetch(getContext(), true); });

        }

    });

    $('ctxDomain').addEventListener('change', function() { triggerLiveCompanyOsintFetch(getContext(), true); });

    $('ctxSector').addEventListener('change', function() { updateContextUI(false); });

    $('modeBadge').addEventListener('click', function() { openLoginModal(); });


    document.addEventListener('keydown', function(e) {

        if (e.key === 'Escape' && $('appModal').classList.contains('active')) { toggleModal(false); return; }

        if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {

            e.preventDefault();

            if (!$('landing-view').hidden) enterPlatformWorkspace();

            if ($('dashboard-view').hidden) loadDepartment('sales');

            setTimeout(function() { if ($('mainInput')) { $('mainInput').focus(); $('mainInput').select(); } }, 150);

        }

    });


    appendBotMsg('Welcome to <strong>' + PRODUCT_BRAND_NAME + ' v10.0</strong>! We support borderless 360° prospecting (e.g., Canada → Namibia), 4-layer surgical ABM, and 10 output languages.', 'ai');

    $('botLauncher').addEventListener('click', function() { $('botWindow').classList.toggle('open'); });

    $('botCloseBtn').addEventListener('click', function() { $('botWindow').classList.remove('open'); });

    $('botForm').addEventListener('submit', function(e) { e.preventDefault(); handleBotSubmit($('botInput').value); });

    var promptBtns = document.querySelectorAll('.bot-prompt-btn');

    for (var j = 0; j < promptBtns.length; j++) {

        promptBtns[j].addEventListener('click', function() { handleBotSubmit(this.getAttribute('data-q')); });

    }

    icons();

}


if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', bootApp); } else { bootApp(); }

</script>

</body>

</html>