// ─────────────────────────────────────────────────────────────
// Hero visual A: LAUNCH CONSOLE — 60-second countdown w/ stages
// ─────────────────────────────────────────────────────────────
function LaunchConsoleVisual() {
  const [t, setT] = React.useState(60);
  React.useEffect(() => {
    const id = setInterval(() => setT((v) => (v <= 0 ? 60 : v - 1)), 1000);
    return () => clearInterval(id);
  }, []);

  const elapsed = 60 - t;
  const stages = [
    { l: "Domain verified",            at: 12, c: "#7A52FF" },
    { l: "PSP connected",              at: 24, c: "#FF5A1F" },
    { l: "Client area provisioned",    at: 38, c: "#FFB000" },
    { l: "Trading provider bridged",   at: 52, c: "#2BD974" },
    { l: "FIRM LIVE",                  at: 60, c: "#2BD974" },
  ];
  const pct = Math.min(100, (elapsed / 60) * 100);
  const ss = String(t).padStart(2, "0");

  return (
    <div className="lc card">
      <div className="lc-bar">
        <div className="lc-dots"><span/><span/><span/></div>
        <div className="lc-url mono">launch.60seconds.io/new-firm</div>
        <div className="lc-live"><span className="lc-live-dot"/>LIVE</div>
      </div>

      <div className="lc-body">
        <div className="lc-clock">
          <div className="lc-clock-l mono">TIME&nbsp;TO&nbsp;LAUNCH</div>
          <div className="lc-clock-v">
            <span className="lc-clock-d mono">00</span>
            <span className="lc-clock-sep mono">:</span>
            <span className="lc-clock-d mono">{ss}</span>
          </div>
          <div className="lc-clock-sub mono">{t === 0 ? "✓ deployed" : "seconds remaining"}</div>
        </div>

        <div className="lc-progress">
          <div className="lc-progress-track">
            <div className="lc-progress-fill" style={{ width: `${pct}%` }}/>
          </div>
          <div className="lc-progress-pct mono">{Math.round(pct)}%</div>
        </div>

        <div className="lc-stages">
          {stages.map((s, i) => {
            const done = elapsed >= s.at;
            const active = !done && (i === 0 || elapsed >= stages[i - 1].at);
            return (
              <div key={s.l} className={`lc-stage ${done ? "done" : active ? "active" : ""}`}>
                <div className="lc-stage-bullet" style={{ "--c": s.c }}>
                  {done ? (
                    <svg width="10" height="10" viewBox="0 0 10 10" fill="none"><path d="M2 5l2 2 4-5" stroke="#fff" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"/></svg>
                  ) : active ? <span className="lc-stage-spin"/> : null}
                </div>
                <div className="lc-stage-l mono">{s.l}</div>
                <div className="lc-stage-t mono">{done ? "✓" : active ? "···" : ""}</div>
              </div>
            );
          })}
        </div>

        <div className="lc-inputs">
          <div className="lc-input">
            <div className="lc-input-l mono">DOMAIN</div>
            <div className="lc-input-v mono">
              <span style={{ color: "var(--text)" }}>app.</span>
              <span style={{ color: "var(--purple-2)" }}>yourfirm</span>
              <span style={{ color: "var(--text-dim)" }}>.com</span>
            </div>
          </div>
          <div className="lc-input">
            <div className="lc-input-l mono">PSP KEY</div>
            <div className="lc-input-v mono">
              <span style={{ color: "var(--text)" }}>sk_live_</span>
              <span style={{ color: "var(--text-dim)" }}>•••••••••••••</span>
              <span className="lc-key-ok">●</span>
            </div>
          </div>
        </div>
      </div>

      <style>{`
        .lc { padding: 0; overflow: hidden; position: relative; background: linear-gradient(180deg, var(--ink-2), var(--ink)); }
        .lc::after {
          content: ""; position: absolute; inset: 0; pointer-events: none;
          background:
            radial-gradient(60% 50% at 15% 0%, rgba(122,82,255,0.14), transparent 60%),
            radial-gradient(50% 50% at 100% 100%, rgba(255,90,31,0.12), transparent 65%);
        }
        .lc-bar { display: flex; align-items: center; gap: 14px; padding: 14px 18px; border-bottom: 1px solid var(--line); background: var(--surface-2); position: relative; z-index: 1; }
        .lc-dots { display: flex; gap: 6px; }
        .lc-dots span { width: 10px; height: 10px; border-radius: 999px; background: var(--line-2); }
        .lc-dots span:nth-child(1) { background: #FF5F57; }
        .lc-dots span:nth-child(2) { background: #FEBC2E; }
        .lc-dots span:nth-child(3) { background: #28C840; }
        .lc-url { flex: 1; font-size: 11.5px; color: var(--text-dim); padding: 5px 12px; background: var(--ink); border: 1px solid var(--line); border-radius: 999px; letter-spacing: 0.02em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .lc-live { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 10.5px; font-weight: 700; letter-spacing: 0.12em; color: var(--green); padding: 4px 10px; border-radius: 999px; background: rgba(43,217,116,0.12); border: 1px solid rgba(43,217,116,0.32); }
        .lc-live-dot { width: 6px; height: 6px; border-radius: 999px; background: var(--green); box-shadow: 0 0 8px var(--green); animation: pulse 1.4s infinite ease-out; }

        .lc-body { padding: 26px 28px 28px; display: flex; flex-direction: column; gap: 22px; position: relative; z-index: 1; }
        .lc-clock { display: flex; flex-direction: column; align-items: center; padding: 18px 0 6px; position: relative; }
        .lc-clock-l { font-size: 10.5px; letter-spacing: 0.22em; color: var(--text-mute); margin-bottom: 6px; }
        .lc-clock-v {
          display: inline-flex; align-items: baseline;
          font-size: 86px; font-weight: 700; letter-spacing: -0.05em; line-height: 1;
          background: linear-gradient(135deg, var(--purple-2), var(--orange) 60%, var(--gold));
          -webkit-background-clip: text; background-clip: text; color: transparent;
          filter: drop-shadow(0 8px 30px rgba(122,82,255,0.32));
        }
        .lc-clock-d { font-variant-numeric: tabular-nums; }
        .lc-clock-sep { padding: 0 2px; opacity: 0.55; }
        .lc-clock-sub { font-size: 10.5px; letter-spacing: 0.18em; color: var(--text-mute); margin-top: 4px; text-transform: uppercase; }

        .lc-progress { display: flex; align-items: center; gap: 12px; }
        .lc-progress-track { flex: 1; height: 6px; border-radius: 999px; background: var(--surface-2); overflow: hidden; border: 1px solid var(--line); }
        .lc-progress-fill { height: 100%; background: linear-gradient(90deg, var(--purple-2), var(--orange) 70%, var(--gold)); transition: width .8s cubic-bezier(.4,0,.2,1); box-shadow: 0 0 12px rgba(255,90,31,0.4); }
        .lc-progress-pct { font-size: 11.5px; font-weight: 600; color: var(--text-dim); min-width: 36px; text-align: right; }

        .lc-stages { display: flex; flex-direction: column; gap: 6px; padding: 12px 14px; background: var(--surface-2); border: 1px solid var(--line); border-radius: 12px; }
        .lc-stage { display: grid; grid-template-columns: 18px 1fr auto; gap: 10px; align-items: center; padding: 6px 4px; opacity: 0.45; transition: opacity .3s ease; }
        .lc-stage.active, .lc-stage.done { opacity: 1; }
        .lc-stage-bullet { width: 18px; height: 18px; border-radius: 999px; background: var(--surface-2); border: 1px solid var(--line-2); display: grid; place-items: center; }
        .lc-stage.done .lc-stage-bullet { background: var(--c); border-color: var(--c); box-shadow: 0 0 0 4px color-mix(in oklab, var(--c) 18%, transparent); }
        .lc-stage.active .lc-stage-bullet { border-color: var(--c); }
        .lc-stage-spin { width: 8px; height: 8px; border-radius: 999px; border: 1.5px solid var(--c); border-top-color: transparent; animation: lc-spin 0.8s linear infinite; }
        @keyframes lc-spin { to { transform: rotate(360deg); } }
        .lc-stage-l { font-size: 12px; letter-spacing: 0.04em; color: var(--text); text-transform: uppercase; }
        .lc-stage-t { font-size: 11px; color: var(--text-mute); }
        .lc-stage.done:last-child .lc-stage-l { background: linear-gradient(90deg, var(--green), var(--purple-2)); -webkit-background-clip: text; background-clip: text; color: transparent; font-weight: 700; }

        .lc-inputs { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
        .lc-input { padding: 12px 14px; background: var(--surface-2); border: 1px solid var(--line); border-radius: 12px; min-width: 0; }
        .lc-input-l { font-size: 9.5px; letter-spacing: 0.18em; color: var(--text-mute); }
        .lc-input-v { font-size: 13px; margin-top: 5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .lc-key-ok { margin-left: 6px; color: var(--green); font-size: 9px; text-shadow: 0 0 6px var(--green); }

        @media (max-width: 700px) {
          .lc-clock-v { font-size: 64px; }
          .lc-body { padding: 20px; }
          .lc-inputs { grid-template-columns: 1fr; }
        }
      `}</style>
    </div>
  );
}

// ─────────────────────────────────────────────────────────────
// Hero visual B: AGENT CONSOLE — operator chats with AI agent
// (The signature 60Seconds differentiator)
// ─────────────────────────────────────────────────────────────
function AgentConsoleVisual() {
  const turns = [
    {
      who: "ops",
      text: 'create challenge: 3d streak, $5 fee, $1000 payout, PL positive 3 days',
    },
    {
      who: "agent",
      text: '✓ Created challenge "3-Day Streak"',
      card: {
        title: "3-Day Streak Challenge",
        rows: [
          ["Fee",     "$5.00"],
          ["Payout",  "$1,000.00"],
          ["Rule",    "PL > $0 on 3 consecutive days"],
          ["Status",  "LIVE · published to website"],
        ],
        accent: "#7A52FF",
      },
    },
    {
      who: "ops",
      text: "filter all clients from this week who won more than $500",
    },
    {
      who: "agent",
      text: "Found 47 clients · here's the top 5:",
      table: [
        ["#A1042", "Carlos M.",   "+$1,820"],
        ["#A0998", "Priya S.",    "+$1,140"],
        ["#A0871", "Tom K.",      "+$980"],
        ["#A0834", "Anna L.",     "+$760"],
        ["#A0801", "Yuki T.",     "+$612"],
      ],
    },
  ];

  const [shown, setShown] = React.useState(1);
  const [typing, setTyping] = React.useState("");
  const fullPrompt = turns[shown]?.who === "ops" ? turns[shown].text : "";

  // Reveal turns sequentially
  React.useEffect(() => {
    if (shown >= turns.length) {
      const r = setTimeout(() => setShown(1), 6000);
      return () => clearTimeout(r);
    }
    const cur = turns[shown];
    if (cur.who === "ops") {
      // typing effect
      setTyping("");
      let i = 0;
      const tick = setInterval(() => {
        i++;
        setTyping(cur.text.slice(0, i));
        if (i >= cur.text.length) {
          clearInterval(tick);
          setTimeout(() => setShown((s) => s + 1), 600);
        }
      }, 22);
      return () => clearInterval(tick);
    } else {
      // agent reply pause
      const t = setTimeout(() => setShown((s) => s + 1), 2200);
      return () => clearTimeout(t);
    }
  }, [shown]);

  return (
    <div className="ag card">
      <div className="ag-bar">
        <div className="ag-dots"><span/><span/><span/></div>
        <div className="ag-title mono">
          <span className="ag-title-name">ops.60seconds.io</span>
          <span className="ag-title-sep">·</span>
          <span className="ag-title-agent">
            <span className="ag-agent-dot"/>
            agent online
          </span>
        </div>
        <div className="ag-model mono">claude-ops-v4</div>
      </div>

      <div className="ag-body">
        {turns.slice(0, shown).map((t, i) => (
          <AgentTurn key={i} turn={t} />
        ))}
        {shown < turns.length && turns[shown]?.who === "ops" && (
          <div className="ag-turn ag-ops">
            <div className="ag-avatar ag-avatar-ops">
              <svg width="11" height="11" viewBox="0 0 11 11"><circle cx="5.5" cy="3.5" r="2" fill="currentColor"/><path d="M2 10c0-2 1.5-3.5 3.5-3.5S9 8 9 10" fill="none" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round"/></svg>
            </div>
            <div className="ag-bubble ag-bubble-ops mono">
              {typing}<span className="ag-cursor"/>
            </div>
          </div>
        )}
      </div>

      <div className="ag-input">
        <div className="ag-prompt mono">›</div>
        <div className="ag-input-text mono">tell the agent what you need…</div>
        <div className="ag-send">
          <svg width="14" height="14" viewBox="0 0 14 14"><path d="M2 7h8M7 3l4 4-4 4" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round" fill="none"/></svg>
        </div>
      </div>

      <style>{`
        .ag { padding: 0; overflow: hidden; position: relative; background: linear-gradient(180deg, var(--ink-2), var(--ink)); display: flex; flex-direction: column; min-height: 540px; }
        .ag::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: radial-gradient(60% 50% at 100% 0%, rgba(255,90,31,0.10), transparent 60%), radial-gradient(50% 50% at 0% 100%, rgba(122,82,255,0.12), transparent 65%); }
        .ag-bar { display: flex; align-items: center; gap: 14px; padding: 14px 18px; border-bottom: 1px solid var(--line); background: var(--surface-2); position: relative; z-index: 1; }
        .ag-dots { display: flex; gap: 6px; }
        .ag-dots span { width: 10px; height: 10px; border-radius: 999px; }
        .ag-dots span:nth-child(1) { background: #FF5F57; }
        .ag-dots span:nth-child(2) { background: #FEBC2E; }
        .ag-dots span:nth-child(3) { background: #28C840; }
        .ag-title { flex: 1; display: flex; align-items: center; gap: 10px; font-size: 11.5px; color: var(--text-dim); }
        .ag-title-name { color: var(--text); }
        .ag-title-sep { color: var(--text-mute); }
        .ag-title-agent { display: inline-flex; align-items: center; gap: 6px; color: var(--green); }
        .ag-agent-dot { width: 6px; height: 6px; border-radius: 999px; background: var(--green); box-shadow: 0 0 8px var(--green); animation: pulse 1.4s infinite ease-out; }
        .ag-model { font-size: 10.5px; color: var(--text-mute); padding: 4px 10px; border-radius: 999px; background: var(--ink); border: 1px solid var(--line); letter-spacing: 0.04em; }

        .ag-body { padding: 22px 22px 14px; display: flex; flex-direction: column; gap: 14px; flex: 1; position: relative; z-index: 1; }
        .ag-turn { display: flex; gap: 10px; max-width: 100%; }
        .ag-turn.ag-ops { flex-direction: row-reverse; }
        .ag-avatar { width: 26px; height: 26px; border-radius: 8px; display: grid; place-items: center; flex: 0 0 26px; }
        .ag-avatar-ops { background: var(--surface-hover); color: var(--text); border: 1px solid var(--line); }
        .ag-avatar-agent { background: var(--orange); color: #fff; box-shadow: 0 6px 18px -6px var(--orange-glow); }
        .ag-bubble { padding: 11px 14px; border-radius: 14px; font-size: 13px; line-height: 1.5; max-width: 84%; }
        .ag-bubble-ops { background: var(--purple-2); color: #fff; border-bottom-right-radius: 4px; box-shadow: 0 8px 22px -10px var(--purple-glow); }
        .ag-bubble-agent { background: var(--surface-2); border: 1px solid var(--line); color: var(--text); border-bottom-left-radius: 4px; }
        .ag-cursor { display: inline-block; width: 6px; height: 13px; background: #fff; vertical-align: -2px; margin-left: 2px; animation: ag-blink 1s infinite steps(1); }
        @keyframes ag-blink { 50% { opacity: 0; } }

        .ag-result-card { margin-top: 8px; padding: 12px 14px; border-radius: 12px; background: linear-gradient(180deg, color-mix(in oklab, var(--c, var(--purple-2)) 8%, var(--surface-2)), var(--surface-2)); border: 1px solid color-mix(in oklab, var(--c, var(--purple-2)) 25%, var(--line)); }
        .ag-result-title { font-size: 12.5px; font-weight: 600; color: var(--text); margin-bottom: 8px; letter-spacing: -0.01em; display: flex; align-items: center; gap: 6px; }
        .ag-result-title::before { content: ""; width: 6px; height: 6px; border-radius: 999px; background: var(--c, var(--purple-2)); box-shadow: 0 0 8px var(--c, var(--purple-2)); }
        .ag-result-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 0; font-size: 11.5px; gap: 12px; border-top: 1px dashed var(--line); }
        .ag-result-row:first-of-type { border-top: 0; }
        .ag-result-k { color: var(--text-mute); font-family: var(--font-mono); letter-spacing: 0.04em; text-transform: uppercase; font-size: 10px; }
        .ag-result-v { color: var(--text); font-family: var(--font-mono); font-weight: 500; }

        .ag-table { margin-top: 8px; border-radius: 12px; background: var(--surface-2); border: 1px solid var(--line); overflow: hidden; }
        .ag-table-row { display: grid; grid-template-columns: 70px 1fr 90px; align-items: center; padding: 7px 12px; font-size: 11.5px; border-top: 1px solid var(--line); font-family: var(--font-mono); }
        .ag-table-row:first-child { border-top: 0; background: var(--surface-hover); font-size: 10px; color: var(--text-mute); letter-spacing: 0.1em; text-transform: uppercase; }
        .ag-table-id { color: var(--text-mute); }
        .ag-table-name { color: var(--text); }
        .ag-table-pl { color: var(--green); text-align: right; font-weight: 600; }

        .ag-input { display: flex; align-items: center; gap: 10px; padding: 14px 18px; border-top: 1px solid var(--line); background: var(--surface-2); position: relative; z-index: 1; }
        .ag-prompt { font-size: 16px; color: var(--orange); font-weight: 700; }
        .ag-input-text { flex: 1; font-size: 12.5px; color: var(--text-mute); }
        .ag-send { width: 28px; height: 28px; border-radius: 8px; background: var(--purple-2); color: #fff; display: grid; place-items: center; box-shadow: 0 8px 22px -10px var(--purple-glow); }

        @media (max-width: 700px) {
          .ag { min-height: 480px; }
          .ag-body { padding: 16px 16px 8px; }
          .ag-bubble { max-width: 88%; font-size: 12.5px; }
        }
      `}</style>
    </div>
  );
}

function AgentTurn({ turn }) {
  if (turn.who === "ops") {
    return (
      <div className="ag-turn ag-ops">
        <div className="ag-avatar ag-avatar-ops">
          <svg width="11" height="11" viewBox="0 0 11 11"><circle cx="5.5" cy="3.5" r="2" fill="currentColor"/><path d="M2 10c0-2 1.5-3.5 3.5-3.5S9 8 9 10" fill="none" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round"/></svg>
        </div>
        <div className="ag-bubble ag-bubble-ops mono">{turn.text}</div>
      </div>
    );
  }
  return (
    <div className="ag-turn ag-agent">
      <div className="ag-avatar ag-avatar-agent">
        <svg width="12" height="12" viewBox="0 0 12 12" fill="none">
          <rect x="2" y="3" width="8" height="6.5" rx="2" stroke="currentColor" strokeWidth="1.3"/>
          <circle cx="4.5" cy="6" r="0.9" fill="currentColor"/>
          <circle cx="7.5" cy="6" r="0.9" fill="currentColor"/>
          <path d="M6 1.2v1.8" stroke="currentColor" strokeWidth="1.2" strokeLinecap="round"/>
        </svg>
      </div>
      <div style={{ minWidth: 0, flex: 1 }}>
        <div className="ag-bubble ag-bubble-agent">{turn.text}</div>
        {turn.card && (
          <div className="ag-result-card" style={{ "--c": turn.card.accent }}>
            <div className="ag-result-title">{turn.card.title}</div>
            {turn.card.rows.map(([k, v]) => (
              <div key={k} className="ag-result-row">
                <div className="ag-result-k">{k}</div>
                <div className="ag-result-v">{v}</div>
              </div>
            ))}
          </div>
        )}
        {turn.table && (
          <div className="ag-table">
            <div className="ag-table-row">
              <div className="ag-table-id">ID</div>
              <div className="ag-table-name">CLIENT</div>
              <div className="ag-table-pl">WEEK PL</div>
            </div>
            {turn.table.map(([id, name, pl]) => (
              <div key={id} className="ag-table-row">
                <div className="ag-table-id">{id}</div>
                <div className="ag-table-name">{name}</div>
                <div className="ag-table-pl">{pl}</div>
              </div>
            ))}
          </div>
        )}
      </div>
    </div>
  );
}

// ─────────────────────────────────────────────────────────────
// Hero visual C: TWO INPUTS — domain + PSP — big and focused
// ─────────────────────────────────────────────────────────────
function TwoInputsHeroVisual() {
  return (
    <div className="tih card">
      <div className="tih-step">
        <div className="tih-num mono">01 · DOMAIN</div>
        <div className="tih-field">
          <span className="tih-cursor"/>
          <span className="tih-mono">app.</span>
          <span className="tih-hl">yourfirm</span>
          <span className="tih-mute">.com</span>
        </div>
        <div className="tih-cap">Point one A record. We verify it on the spot.</div>
      </div>

      <div className="tih-divider">
        <span className="mono">+</span>
      </div>

      <div className="tih-step">
        <div className="tih-num mono">02 · PSP / GATEWAY</div>
        <div className="tih-field">
          <span className="tih-mono">sk_live_</span>
          <span className="tih-mute">•••••••••••••••</span>
          <span className="tih-ok">✓ verified</span>
        </div>
        <div className="tih-cap">Stripe, Adyen, NOWPayments &mdash; your merchant, your fees.</div>
      </div>

      <button className="tih-launch">
        <span className="tih-spark"/>
        <span className="mono">LAUNCH FIRM</span>
        <span className="tih-clock mono">00:60</span>
      </button>

      <div className="tih-foot mono">
        <span className="tih-foot-dot"/>
        Ready in <span style={{ color: "var(--orange)", fontWeight: 700 }}>60s</span> · No code · No infra
      </div>

      <style>{`
        .tih { padding: 30px; display: flex; flex-direction: column; gap: 18px; background: linear-gradient(180deg, var(--ink-2), var(--ink)); position: relative; overflow: hidden; }
        .tih::before { content: ""; position: absolute; inset: 0; background: radial-gradient(60% 60% at 80% 0%, rgba(122,82,255,0.10), transparent 60%); pointer-events: none; }
        .tih-step { display: flex; flex-direction: column; gap: 10px; position: relative; z-index: 1; }
        .tih-num { font-size: 10.5px; letter-spacing: 0.16em; color: var(--orange); font-weight: 700; }
        .tih-field { padding: 18px 20px; border-radius: 14px; background: var(--surface-2); border: 1px solid var(--line-2); font-family: var(--font-mono); font-size: 18px; display: flex; align-items: center; flex-wrap: wrap; gap: 2px; }
        .tih-mono { color: var(--text); }
        .tih-hl { color: var(--purple-2); font-weight: 600; }
        .tih-mute { color: var(--text-mute); }
        .tih-cursor { display: inline-block; width: 2px; height: 18px; background: var(--purple-2); margin-right: 4px; animation: ag-blink 1s infinite steps(1); }
        .tih-ok { margin-left: auto; font-size: 11px; color: var(--green); font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; }
        .tih-cap { font-size: 12.5px; color: var(--text-dim); line-height: 1.5; }
        .tih-divider { display: flex; align-items: center; justify-content: center; padding: 4px 0; color: var(--text-mute); font-size: 18px; position: relative; z-index: 1; }
        .tih-divider::before, .tih-divider::after { content: ""; flex: 1; height: 1px; background: var(--line); }
        .tih-divider span { padding: 0 12px; }
        .tih-launch { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 12px; padding: 18px 22px; border: 0; border-radius: 14px; color: #fff; background: linear-gradient(135deg, #8B65FF 0%, var(--purple) 60%, var(--orange) 120%); box-shadow: 0 0 0 1px rgba(255,255,255,0.1) inset, 0 16px 40px -12px var(--purple-glow); cursor: pointer; overflow: hidden; z-index: 1; font-size: 14px; font-weight: 700; letter-spacing: 0.14em; }
        .tih-spark { position: absolute; inset: 0; background: linear-gradient(120deg, transparent 0%, rgba(255,255,255,0.22) 50%, transparent 100%); background-size: 200% 100%; animation: tih-spark 2.6s linear infinite; }
        @keyframes tih-spark { 0% { background-position: 200% 0; } 100% { background-position: -100% 0; } }
        .tih-clock { margin-left: 8px; padding: 4px 10px; background: rgba(0,0,0,0.25); border-radius: 999px; font-size: 12px; letter-spacing: 0.08em; }
        .tih-foot { display: flex; align-items: center; gap: 10px; padding: 12px 16px; background: var(--surface-2); border: 1px solid var(--line); border-radius: 12px; font-size: 11.5px; color: var(--text-dim); letter-spacing: 0.04em; position: relative; z-index: 1; }
        .tih-foot-dot { width: 6px; height: 6px; border-radius: 999px; background: var(--green); box-shadow: 0 0 8px var(--green); animation: pulse 1.4s infinite ease-out; }
      `}</style>
    </div>
  );
}

window.LaunchConsoleVisual = LaunchConsoleVisual;
window.AgentConsoleVisual   = AgentConsoleVisual;
window.TwoInputsHeroVisual  = TwoInputsHeroVisual;
