From afbc9462f0951137cd9850e3773d95a1ceb6fd01 Mon Sep 17 00:00:00 2001
From: oliver
Date: Fri, 12 Jun 2026 14:23:16 -0300
Subject: [PATCH] split + record
---
assets/css/style.css | 1834 +++++++++++++++++++++++++++
assets/js/script.js | 837 ++++++++++++
index.html | 2888 ++----------------------------------------
3 files changed, 2743 insertions(+), 2816 deletions(-)
create mode 100644 assets/css/style.css
create mode 100644 assets/js/script.js
diff --git a/assets/css/style.css b/assets/css/style.css
new file mode 100644
index 0000000..f42b15c
--- /dev/null
+++ b/assets/css/style.css
@@ -0,0 +1,1834 @@
+/* ═══════════════════════════════════════════════════════════════
+ DESIGN TOKENS (matches app.derez.ai design system)
+ ═══════════════════════════════════════════════════════════════ */
+:root {
+ --bg: #000810;
+ --bg-card: #010f20;
+ --bg-inner: #000d1a;
+ --bg-hover: #001a30;
+ --bg-input: #000813;
+ --border: #0a3060;
+ --border-hi: rgba(0, 245, 255, 0.45);
+ --accent: #00f5ff;
+ --accent-dim: #002535;
+ --danger: #ff3b3b;
+ --danger-dim: #3b0000;
+ --success: #00ff88;
+ --warning: #ffaa00;
+ --text: #c8f0ff;
+ --text-muted: #2e6a80;
+ --radius: 8px;
+ --radius-card: 18px;
+ --shadow:
+ 0 0 0 1px rgba(0, 245, 255, 0.25),
+ 0 0 60px rgba(0, 245, 255, 0.12),
+ 0 28px 72px rgba(0, 0, 0, 0.9);
+ --max-width: 1120px;
+}
+
+/* ── Reset ───────────────────────────────────────────────── */
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+html {
+ scroll-behavior: smooth;
+ -webkit-font-smoothing: antialiased;
+}
+
+body {
+ font-family: "Courier New", Courier, monospace;
+ background: var(--bg);
+ color: var(--text);
+ font-size: 14px;
+ line-height: 1.6;
+ overflow-x: hidden;
+}
+
+/* Ambient glow */
+body::before {
+ content: "";
+ position: fixed;
+ inset: 0;
+ background:
+ radial-gradient(
+ ellipse 60% 50% at 25% 30%,
+ rgba(0, 245, 255, 0.06) 0%,
+ transparent 70%
+ ),
+ radial-gradient(
+ ellipse 50% 60% at 75% 70%,
+ rgba(0, 200, 255, 0.04) 0%,
+ transparent 70%
+ );
+ pointer-events: none;
+ z-index: 0;
+}
+
+/* ── Typography ──────────────────────────────────────────── */
+h1,
+h2,
+h3,
+h4 {
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ line-height: 1.2;
+}
+h1 {
+ font-size: clamp(2.2rem, 5.5vw, 3.8rem);
+}
+h2 {
+ font-size: clamp(1.6rem, 3.5vw, 2.4rem);
+ margin-bottom: 0.6em;
+}
+h3 {
+ font-size: 1.1rem;
+}
+p {
+ color: var(--text-muted);
+ font-size: 14px;
+}
+a {
+ color: var(--accent);
+ text-decoration: none;
+}
+a:hover {
+ text-decoration: underline;
+}
+
+.container {
+ max-width: var(--max-width);
+ margin: 0 auto;
+ padding: 0 24px;
+ position: relative;
+ z-index: 1;
+}
+
+/* ── Buttons ─────────────────────────────────────────────── */
+.btn {
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ padding: 10px 22px;
+ border-radius: var(--radius);
+ border: none;
+ cursor: pointer;
+ font-size: 14px;
+ font-weight: 600;
+ white-space: nowrap;
+ text-decoration: none;
+ transition:
+ opacity 0.15s,
+ background 0.15s,
+ transform 0.1s;
+}
+.btn:hover {
+ opacity: 0.85;
+ text-decoration: none;
+}
+.btn:active {
+ transform: scale(0.97);
+}
+
+.btn-primary {
+ background: transparent;
+ color: #fff;
+ border: 1px solid var(--accent);
+ box-shadow:
+ 0 0 8px rgba(0, 245, 255, 0.35),
+ inset 0 0 8px rgba(0, 245, 255, 0.04);
+}
+.btn-primary:hover {
+ background: rgba(0, 245, 255, 0.08);
+ box-shadow:
+ 0 0 14px rgba(0, 245, 255, 0.5),
+ inset 0 0 10px rgba(0, 245, 255, 0.06);
+}
+.btn-ghost {
+ background: var(--bg-hover);
+ color: var(--text);
+ border: 1px solid var(--border);
+}
+.btn-ghost:hover {
+ opacity: 0.85;
+ background: var(--bg-hover);
+ border-color: var(--border);
+}
+.btn-lg {
+ padding: 12px 28px;
+ font-size: 13px;
+ border-radius: 8px;
+}
+.btn-block {
+ width: 100%;
+ justify-content: center;
+}
+
+/* ══════════════════════════════════════════════════════════
+ HEADER / NAV
+ ══════════════════════════════════════════════════════════ */
+.site-header {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 100;
+ background: rgba(0, 8, 16, 0.85);
+ backdrop-filter: blur(14px);
+ border-bottom: 1px solid var(--border-hi);
+ transition: background 0.3s;
+}
+
+.site-header .container {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 60px;
+}
+
+.site-logo {
+ display: flex;
+ align-items: center;
+ flex-shrink: 0;
+}
+.site-logo:hover {
+ text-decoration: none;
+}
+.site-logo-img {
+ display: block;
+ height: 34px;
+ width: auto;
+}
+
+.nav-links {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ list-style: none;
+}
+.nav-links a {
+ padding: 6px 14px;
+ border-radius: var(--radius);
+ color: var(--text-muted);
+ font-size: 13px;
+ font-weight: 500;
+ transition:
+ color 0.15s,
+ background 0.15s;
+}
+.nav-links a:hover {
+ color: var(--text);
+ background: var(--bg-hover);
+ text-decoration: none;
+}
+
+.header-actions {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+}
+
+.btn-login {
+ background: transparent;
+ color: var(--text);
+ border: 1px solid var(--border);
+ padding: 7px 18px;
+ border-radius: var(--radius);
+ font-size: 13px;
+ font-weight: 600;
+ cursor: pointer;
+ transition:
+ border-color 0.15s,
+ color 0.15s,
+ background 0.15s;
+ text-decoration: none;
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+}
+.btn-login:hover {
+ border-color: var(--accent);
+ color: var(--accent);
+ background: var(--accent-dim);
+ text-decoration: none;
+}
+
+.btn-signup-header {
+ padding: 7px 18px;
+ font-size: 13px;
+}
+
+/* Mobile hamburger */
+.hamburger {
+ display: none;
+ flex-direction: column;
+ gap: 4px;
+ background: none;
+ border: none;
+ cursor: pointer;
+ padding: 6px;
+}
+.hamburger span {
+ display: block;
+ width: 22px;
+ height: 2px;
+ background: var(--text);
+ border-radius: 2px;
+ transition:
+ transform 0.2s,
+ opacity 0.2s;
+}
+
+/* ══════════════════════════════════════════════════════════
+ HERO
+ ══════════════════════════════════════════════════════════ */
+.hero {
+ padding: 140px 0 80px;
+ text-align: center;
+ position: relative;
+ overflow: hidden;
+}
+
+.hero::after {
+ content: "";
+ position: absolute;
+ top: -30%;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 90%;
+ height: 140%;
+ background: radial-gradient(
+ ellipse at center,
+ rgba(0, 245, 255, 0.05) 0%,
+ transparent 65%
+ );
+ pointer-events: none;
+}
+
+.hero-badge {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+ padding: 6px 16px;
+ background: var(--accent-dim);
+ border: 1px solid rgba(0, 245, 255, 0.3);
+ border-radius: 20px;
+ font-size: 12px;
+ font-weight: 500;
+ color: var(--accent);
+ margin-bottom: 24px;
+}
+
+.hero h1 {
+ max-width: 820px;
+ margin: 0 auto 20px;
+}
+.hero h1 .highlight {
+ background: linear-gradient(135deg, var(--accent), #66e5ff);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+}
+
+.hero-sub {
+ font-size: clamp(1rem, 2vw, 1.2rem);
+ max-width: 620px;
+ margin: 0 auto 36px;
+ line-height: 1.7;
+}
+
+.hero-actions {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 14px;
+ flex-wrap: wrap;
+ margin-bottom: 40px;
+}
+
+.hero-stats {
+ display: flex;
+ justify-content: center;
+ gap: 40px;
+ flex-wrap: wrap;
+}
+.hero-stat {
+ text-align: center;
+}
+.hero-stat-num {
+ font-size: 1.5rem;
+ font-weight: 800;
+ color: var(--text);
+}
+.hero-stat-label {
+ font-size: 12px;
+ color: var(--text-muted);
+ margin-top: 2px;
+}
+
+/* ══════════════════════════════════════════════════════════
+ SECTION COMMON
+ ══════════════════════════════════════════════════════════ */
+section {
+ padding: 80px 0;
+}
+
+.section-title {
+ text-align: center;
+ max-width: 640px;
+ margin: 0 auto 16px;
+}
+.section-sub {
+ text-align: center;
+ max-width: 560px;
+ margin: 0 auto 50px;
+ font-size: 1rem;
+}
+
+/* ══════════════════════════════════════════════════════════
+ VIDEO SLIDER (Speed Run)
+ ══════════════════════════════════════════════════════════ */
+.video-slider-wrapper {
+ position: relative;
+ max-width: 960px;
+ margin: 0 auto;
+}
+
+.video-slider {
+ display: flex;
+ gap: 20px;
+ overflow-x: auto;
+ scroll-snap-type: x mandatory;
+ -webkit-overflow-scrolling: touch;
+ scrollbar-width: none;
+ padding: 8px 4px;
+}
+.video-slider::-webkit-scrollbar {
+ display: none;
+}
+
+.video-slide {
+ flex: 0 0 calc((100% - 40px) / 3);
+ min-width: 260px;
+ scroll-snap-align: start;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-card);
+ overflow: hidden;
+ transition:
+ border-color 0.2s,
+ transform 0.2s;
+}
+.video-slide:hover {
+ border-color: var(--border-hi);
+ transform: translateY(-4px);
+}
+
+.video-slide a {
+ text-decoration: none;
+ color: inherit;
+ display: block;
+}
+.video-slide a:hover {
+ text-decoration: none;
+}
+
+.video-thumb {
+ position: relative;
+ width: 100%;
+ aspect-ratio: 16 / 9;
+ background-size: cover;
+ background-position: center;
+ background-color: var(--bg-inner);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.video-thumb .play-btn {
+ width: 54px;
+ height: 54px;
+ border-radius: 50%;
+ background: rgba(0, 0, 0, 0.7);
+ border: 2px solid rgba(255, 255, 255, 0.3);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition:
+ background 0.2s,
+ transform 0.2s;
+ backdrop-filter: blur(4px);
+}
+.video-slide:hover .play-btn {
+ background: var(--accent);
+ border-color: var(--accent);
+ transform: scale(1.08);
+}
+.video-thumb .play-btn svg {
+ width: 20px;
+ height: 20px;
+ fill: #fff;
+ margin-left: 2px;
+}
+
+.video-info {
+ padding: 14px 16px 18px;
+}
+.video-info h4 {
+ font-size: 13px;
+ font-weight: 600;
+ color: var(--text);
+ margin-bottom: 4px;
+ line-height: 1.4;
+}
+.video-info .video-desc {
+ font-size: 12px;
+ color: var(--text-muted);
+ line-height: 1.4;
+}
+
+.slider-arrow {
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ z-index: 10;
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ border: 1px solid var(--border);
+ background: var(--bg-card);
+ color: var(--text);
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 20px;
+ transition:
+ background 0.15s,
+ border-color 0.15s;
+ opacity: 0;
+ pointer-events: none;
+}
+.video-slider-wrapper:hover .slider-arrow {
+ opacity: 1;
+ pointer-events: auto;
+}
+.slider-arrow:hover {
+ background: var(--bg-hover);
+ border-color: var(--accent);
+}
+.slider-arrow-prev {
+ left: -20px;
+}
+.slider-arrow-next {
+ right: -20px;
+}
+
+.slider-dots {
+ display: flex;
+ justify-content: center;
+ gap: 8px;
+ margin-top: 24px;
+}
+.slider-dot {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ border: none;
+ background: var(--border);
+ cursor: pointer;
+ transition:
+ background 0.2s,
+ transform 0.2s;
+ padding: 0;
+}
+.slider-dot.active {
+ background: var(--accent);
+ transform: scale(1.3);
+}
+.slider-dot:hover {
+ background: var(--text-muted);
+}
+
+@media (max-width: 768px) {
+ .video-slide {
+ flex: 0 0 calc((100% - 20px) / 2);
+ min-width: 0;
+ }
+ .slider-arrow {
+ display: none;
+ }
+}
+@media (max-width: 480px) {
+ .video-slide {
+ flex: 0 0 85%;
+ }
+}
+
+/* ══════════════════════════════════════════════════════════
+ SPEEDRUN (How It Works) — kept for reference
+ ══════════════════════════════════════════════════════════ */
+.steps {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 24px;
+ counter-reset: step;
+}
+
+.step-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-card);
+ padding: 32px 28px;
+ position: relative;
+ transition:
+ border-color 0.2s,
+ transform 0.2s;
+}
+.step-card:hover {
+ border-color: var(--border-hi);
+ transform: translateY(-4px);
+}
+
+.step-number {
+ font-size: 2.4rem;
+ font-weight: 800;
+ color: rgba(0, 245, 255, 0.12);
+ line-height: 1;
+ margin-bottom: 12px;
+}
+.step-icon {
+ width: 44px;
+ height: 44px;
+ border-radius: 12px;
+ background: var(--accent-dim);
+ border: 1px solid rgba(0, 245, 255, 0.25);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--accent);
+ margin-bottom: 16px;
+}
+.step-card h3 {
+ margin-bottom: 8px;
+ font-size: 1.1rem;
+}
+.step-card p {
+ font-size: 13px;
+ line-height: 1.65;
+}
+
+/* ══════════════════════════════════════════════════════════
+ FEATURES
+ ══════════════════════════════════════════════════════════ */
+.features-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 20px;
+}
+
+.feature-card {
+ background: var(--bg-inner);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-card);
+ padding: 28px 24px;
+ transition:
+ border-color 0.2s,
+ transform 0.2s;
+ position: relative;
+}
+.feature-card.unique {
+ border-color: var(--accent);
+ background: linear-gradient(
+ 180deg,
+ rgba(0, 245, 255, 0.04) 0%,
+ var(--bg-inner) 100%
+ );
+}
+.feature-badge {
+ position: absolute;
+ top: -8px;
+ right: 16px;
+ background: var(--accent);
+ color: #000;
+ font-size: 10px;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.06em;
+ padding: 3px 12px;
+ border-radius: 20px;
+}
+.feature-card:hover {
+ border-color: var(--border-hi);
+ transform: translateY(-3px);
+}
+
+.feature-icon {
+ width: 40px;
+ height: 40px;
+ border-radius: 10px;
+ background: var(--accent-dim);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--accent);
+ margin-bottom: 14px;
+}
+.feature-card h3 {
+ font-size: 15px;
+ margin-bottom: 6px;
+}
+.feature-card p {
+ font-size: 13px;
+ line-height: 1.6;
+}
+
+/* ══════════════════════════════════════════════════════════
+ AGENT OPTIONS
+ ══════════════════════════════════════════════════════════ */
+.agent-options {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 24px;
+}
+
+.agent-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-card);
+ padding: 36px 32px;
+ text-align: center;
+ transition:
+ border-color 0.2s,
+ transform 0.2s;
+ position: relative;
+}
+.agent-card:hover {
+ border-color: var(--border-hi);
+ transform: translateY(-3px);
+}
+.agent-card.featured {
+ border-color: var(--accent);
+ background: linear-gradient(
+ 180deg,
+ rgba(0, 245, 255, 0.05) 0%,
+ var(--bg-card) 100%
+ );
+}
+.agent-card.featured::before {
+ content: "Most Popular";
+ position: absolute;
+ top: -11px;
+ left: 50%;
+ transform: translateX(-50%);
+ background: var(--accent);
+ color: #000;
+ font-size: 11px;
+ font-weight: 600;
+ padding: 3px 16px;
+ border-radius: 20px;
+ letter-spacing: 0.04em;
+}
+
+.agent-card h3 {
+ font-size: 1.2rem;
+ margin-bottom: 4px;
+}
+.agent-tagline {
+ font-size: 13px;
+ color: var(--text-muted);
+ margin-bottom: 14px;
+}
+.agent-desc {
+ font-size: 13px;
+ line-height: 1.65;
+ margin-bottom: 12px;
+}
+.agent-features {
+ list-style: none;
+ text-align: left;
+ margin: 16px 0;
+}
+.agent-features li {
+ display: flex;
+ align-items: flex-start;
+ gap: 8px;
+ font-size: 13px;
+ padding: 5px 0;
+ color: var(--text-muted);
+}
+.agent-features li svg {
+ flex-shrink: 0;
+ margin-top: 2px;
+ color: var(--success);
+}
+
+/* ══════════════════════════════════════════════════════════
+ PRICING
+ ══════════════════════════════════════════════════════════ */
+.pricing-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 20px;
+ max-width: 960px;
+ margin: 0 auto;
+}
+.pricing-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-card);
+ padding: 36px 28px;
+ text-align: center;
+ box-shadow: var(--shadow);
+ position: relative;
+ transition:
+ border-color 0.2s,
+ transform 0.2s;
+ display: flex;
+ flex-direction: column;
+}
+.pricing-card.featured {
+ border-color: var(--accent);
+ background: linear-gradient(
+ 180deg,
+ rgba(0, 245, 255, 0.05) 0%,
+ var(--bg-card) 100%
+ );
+ transform: scale(1.04);
+}
+.pricing-perks {
+ list-style: none;
+ text-align: left;
+ margin: 14px 0 24px;
+ flex: 1;
+}
+.pricing-card .btn-block {
+ margin-top: auto;
+}
+.pricing-badge {
+ position: absolute;
+ top: -11px;
+ left: 50%;
+ transform: translateX(-50%);
+ background: var(--accent);
+ color: #000;
+ font-size: 11px;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ padding: 3px 18px;
+ border-radius: 20px;
+}
+.pricing-badge-coupon {
+ display: none;
+ font-size: 12px;
+ font-weight: 700;
+ color: #f59e0b;
+ background: rgba(245, 158, 11, 0.1);
+ border: 1px solid rgba(245, 158, 11, 0.25);
+ border-radius: 6px;
+ padding: 3px 10px;
+ margin-top: 8px;
+ margin-bottom: 4px;
+ line-height: 1.4;
+ letter-spacing: 0.02em;
+}
+.pricing-badge-coupon.visible {
+ display: inline-block;
+}
+.pricing-badge-coupon.free {
+ color: #22c55e;
+ background: rgba(34, 197, 94, 0.1);
+ border-color: rgba(34, 197, 94, 0.25);
+}
+.pricing-plan-name {
+ font-size: 13px;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.06em;
+ color: var(--accent);
+ margin-bottom: 6px;
+}
+.pricing-amount {
+ font-size: 3rem;
+ font-weight: 800;
+ color: var(--text);
+ line-height: 1;
+}
+.pricing-amount .pricing-currency {
+ font-size: 1.4rem;
+ vertical-align: super;
+}
+.pricing-period {
+ font-size: 0.9rem;
+ font-weight: 500;
+ color: var(--text-muted);
+}
+.pricing-yearly-bonus {
+ display: none;
+ font-size: 12px;
+ color: var(--success);
+ font-weight: 600;
+ margin-top: 4px;
+}
+.pricing-yearly-bonus.show {
+ display: block;
+}
+.pricing-plan-desc {
+ font-size: 12px;
+ color: var(--text-muted);
+ margin: 10px 0 14px;
+ line-height: 1.5;
+}
+.pricing-plan-quota {
+ font-size: 13px;
+ font-weight: 600;
+ color: var(--text);
+ padding: 8px 0;
+ border-top: 1px solid var(--border);
+ border-bottom: 1px solid var(--border);
+ margin-bottom: 14px;
+}
+.pricing-perks {
+ list-style: none;
+ text-align: left;
+ margin: 14px 0 24px;
+}
+.pricing-perks li {
+ display: flex;
+ align-items: flex-start;
+ gap: 8px;
+ padding: 4px 0;
+ font-size: 13px;
+ color: var(--text);
+}
+.pricing-perks li svg {
+ flex-shrink: 0;
+ margin-top: 3px;
+ color: var(--text-muted);
+}
+.pricing-perks li .plus-icon {
+ color: var(--success);
+ font-weight: 700;
+ font-size: 15px;
+ line-height: 1;
+ margin-top: 3px;
+ flex-shrink: 0;
+}
+.pricing-perks li.new-feature {
+ color: var(--text);
+}
+.pricing-perks li.muted {
+ color: var(--text-muted);
+}
+.pricing-perks li.muted svg {
+ color: var(--text-muted);
+ opacity: 0.4;
+}
+
+/* ── Config box ─────────────────────────────── */
+.pricing-config-box {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 12px;
+ margin-bottom: 36px;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-card);
+ padding: 14px 24px;
+ flex-wrap: wrap;
+}
+.pricing-config-label {
+ font-size: 13px;
+ font-weight: 600;
+ color: var(--text-muted);
+ white-space: nowrap;
+}
+.pricing-config-select {
+ appearance: none;
+ -webkit-appearance: none;
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ color: var(--text);
+ font-size: 13px;
+ padding: 6px 30px 6px 12px;
+ cursor: pointer;
+ outline: none;
+ transition: border-color 0.2s;
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23888' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-position: right 8px center;
+ min-width: 110px;
+}
+.pricing-config-select:hover {
+ border-color: var(--accent);
+}
+.pricing-config-select:focus {
+ border-color: var(--accent);
+}
+.pricing-config-input {
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ color: var(--text);
+ font-size: 13px;
+ padding: 6px 12px;
+ outline: none;
+ transition: border-color 0.2s;
+ width: 120px;
+}
+.pricing-config-input:focus {
+ border-color: var(--accent);
+}
+.pricing-config-input::placeholder {
+ color: var(--text-muted);
+ opacity: 0.6;
+}
+#pricing-email {
+ width: 234px;
+}
+#pricing-email.invalid {
+ border-color: var(--danger);
+ box-shadow: 0 0 0 2px rgba(255, 59, 59, 0.2);
+}
+
+.pricing-toast {
+ position: fixed;
+ bottom: 100px;
+ left: 50%;
+ transform: translateX(-50%) translateY(20px);
+ background: var(--bg-card);
+ border: 1px solid var(--danger);
+ border-radius: var(--radius-card);
+ padding: 16px 24px;
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
+ font-size: 14px;
+ color: var(--text);
+ opacity: 0;
+ visibility: hidden;
+ transition:
+ opacity 0.3s,
+ transform 0.3s,
+ visibility 0.3s;
+ z-index: 9999;
+ max-width: 420px;
+ text-align: center;
+ pointer-events: none;
+}
+.pricing-toast.show {
+ opacity: 1;
+ visibility: visible;
+ transform: translateX(-50%) translateY(0);
+}
+
+@media (max-width: 900px) {
+ .pricing-grid {
+ grid-template-columns: 1fr;
+ max-width: 420px;
+ }
+ .pricing-card.featured {
+ transform: none;
+ }
+}
+
+/* ══════════════════════════════════════════════════════════
+ FAQ
+ ══════════════════════════════════════════════════════════ */
+.faq-list {
+ max-width: 700px;
+ margin: 0 auto;
+}
+.faq-item {
+ border-bottom: 1px solid var(--border);
+}
+.faq-question {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 18px 0;
+ background: none;
+ border: none;
+ color: var(--text);
+ font-size: 15px;
+ font-weight: 600;
+ cursor: pointer;
+ text-align: left;
+ gap: 16px;
+ transition: color 0.15s;
+}
+.faq-question:hover {
+ color: var(--accent);
+}
+.faq-question svg {
+ flex-shrink: 0;
+ transition: transform 0.2s;
+ color: var(--text-muted);
+}
+.faq-question.open svg {
+ transform: rotate(180deg);
+}
+.faq-answer {
+ max-height: 0;
+ overflow: hidden;
+ transition:
+ max-height 0.25s ease,
+ padding 0.25s ease;
+ font-size: 14px;
+ color: var(--text-muted);
+ line-height: 1.7;
+}
+.faq-answer.open {
+ max-height: 300px;
+ padding: 0 0 18px;
+}
+
+/* ══════════════════════════════════════════════════════════
+ CTA
+ ══════════════════════════════════════════════════════════ */
+.cta-section {
+ text-align: center;
+ padding: 80px 0 100px;
+}
+.cta-section h2 {
+ max-width: 560px;
+ margin: 0 auto 16px;
+}
+.cta-section p {
+ max-width: 480px;
+ margin: 0 auto 30px;
+}
+
+/* ══════════════════════════════════════════════════════════
+ BLOG
+ ══════════════════════════════════════════════════════════ */
+.blog-search {
+ max-width: 480px;
+ margin: -20px auto 32px;
+}
+.blog-search input {
+ width: 100%;
+ padding: 12px 16px;
+ background: var(--bg-input);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ color: var(--text);
+ font-family: inherit;
+ font-size: 14px;
+ outline: none;
+ transition: border-color 0.2s;
+}
+.blog-search input:focus {
+ border-color: var(--accent);
+}
+.blog-search input::placeholder {
+ color: var(--text-muted);
+}
+.blog-grid {
+ display: grid;
+ grid-template-columns: 1fr 1fr 1fr;
+ gap: 20px;
+ margin-bottom: 32px;
+}
+.blog-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-card);
+ padding: 28px;
+ display: flex;
+ flex-direction: column;
+ transition:
+ border-color 0.2s,
+ transform 0.2s;
+ cursor: pointer;
+}
+.blog-card:hover {
+ border-color: var(--accent);
+ transform: translateY(-2px);
+}
+.blog-card-area {
+ display: inline-block;
+ font-size: 0.7rem;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.06em;
+ padding: 3px 12px;
+ border-radius: 20px;
+ margin-bottom: 12px;
+ align-self: flex-start;
+ color: #000;
+}
+.blog-card-area.area-howto {
+ background: #00f5ff;
+}
+.blog-card-area.area-news {
+ background: #ffaa00;
+}
+.blog-card-area.area-video-scripts {
+ background: #00ff88;
+}
+.blog-card-area.area-architecture {
+ background: #a78bfa;
+}
+.blog-card-area.area-speed-run {
+ background: #f472b6;
+}
+.blog-card-area.area-default {
+ background: #a78bfa;
+}
+.blog-card-chip {
+ display: inline-block;
+ background: rgba(0, 245, 255, 0.08);
+ color: #00f5ff;
+ border: 1px solid rgba(0, 245, 255, 0.25);
+ font-size: 0.65rem;
+ font-weight: 600;
+ padding: 2px 10px;
+ border-radius: 20px;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ margin-bottom: 12px;
+ align-self: flex-start;
+}
+.blog-card-date {
+ font-size: 0.8rem;
+ color: var(--text-muted);
+ margin-bottom: 8px;
+}
+.blog-card h3 {
+ font-size: 1.05rem;
+ font-weight: 600;
+ line-height: 1.4;
+ margin-bottom: 10px;
+ color: var(--text);
+}
+.blog-card p {
+ font-size: 0.88rem;
+ color: var(--text-muted);
+ line-height: 1.6;
+ flex: 1;
+}
+.blog-card-link {
+ margin-top: 16px;
+ font-size: 0.85rem;
+ color: var(--accent);
+ text-decoration: none;
+}
+.blog-card:hover .blog-card-link {
+ text-decoration: underline;
+}
+.blog-pagination {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 24px;
+}
+.blog-pagination button {
+ background: none;
+ border: 1px solid var(--border);
+ color: var(--text);
+ padding: 10px 24px;
+ border-radius: var(--radius);
+ cursor: pointer;
+ font-family: inherit;
+ font-size: 0.88rem;
+ transition:
+ border-color 0.2s,
+ color 0.2s;
+}
+.blog-pagination button:hover:not(:disabled) {
+ border-color: var(--accent);
+ color: var(--accent);
+}
+.blog-pagination button:disabled {
+ opacity: 0.3;
+ cursor: default;
+}
+.blog-page-info {
+ font-size: 0.85rem;
+ color: var(--text-muted);
+}
+.blog-empty {
+ grid-column: 1 / -1;
+ text-align: center;
+ padding: 60px 20px;
+ color: var(--text-muted);
+ font-size: 0.95rem;
+}
+@media (max-width: 900px) {
+ .blog-grid {
+ grid-template-columns: 1fr 1fr;
+ }
+}
+@media (max-width: 600px) {
+ .blog-grid {
+ grid-template-columns: 1fr;
+ }
+}
+
+/* ══════════════════════════════════════════════════════════
+ TOPICS
+ ══════════════════════════════════════════════════════════ */
+.topics-grid {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 16px;
+ margin-top: 20px;
+}
+.topic-card {
+ display: flex;
+ flex-direction: column;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 18px;
+ padding: 28px;
+ text-decoration: none;
+ transition: border-color .2s, transform .2s;
+}
+.topic-card:hover {
+ border-color: var(--accent);
+ transform: translateY(-3px);
+ text-decoration: none;
+}
+.topic-badge {
+ display: inline-block;
+ background: rgba(0,245,255,0.1);
+ color: var(--accent);
+ border: 1px solid rgba(0,245,255,0.25);
+ font-size: 0.7rem;
+ font-weight: 600;
+ padding: 3px 10px;
+ border-radius: 20px;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ align-self: flex-start;
+ margin-bottom: 14px;
+}
+.topic-card h3 {
+ font-size: 1.15rem;
+ font-weight: 600;
+ color: var(--text);
+ margin-bottom: 8px;
+ line-height: 1.3;
+}
+.topic-card p {
+ font-size: 0.88rem;
+ color: var(--text-muted);
+ flex: 1;
+ margin-bottom: 16px;
+ line-height: 1.6;
+}
+.topic-link {
+ color: var(--accent);
+ font-weight: 600;
+ font-size: 0.88rem;
+ align-self: flex-start;
+}
+.topic-card:hover .topic-link {
+ text-decoration: underline;
+}
+@media (max-width: 700px) {
+ .topics-grid { grid-template-columns: 1fr; }
+}
+
+/* ══════════════════════════════════════════════════════════
+ FOOTER
+ ══════════════════════════════════════════════════════════ */
+.site-footer {
+ border-top: 1px solid var(--border);
+ padding: 40px 0;
+ font-size: 13px;
+ color: var(--text-muted);
+}
+.site-footer .container {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 16px;
+}
+.site-footer a {
+ color: var(--text-muted);
+}
+.site-footer a:hover {
+ color: var(--text);
+}
+.footer-links {
+ display: flex;
+ gap: 20px;
+}
+
+/* ══════════════════════════════════════════════════════════
+ RESPONSIVE
+ ══════════════════════════════════════════════════════════ */
+@media (max-width: 900px) {
+ .steps {
+ grid-template-columns: 1fr;
+ }
+ .features-grid {
+ grid-template-columns: 1fr 1fr;
+ }
+ .agent-options {
+ grid-template-columns: 1fr;
+ }
+}
+
+@media (max-width: 700px) {
+ .nav-links {
+ display: none;
+ }
+ .hamburger {
+ display: flex;
+ }
+
+ .nav-links.mobile-open {
+ display: flex;
+ flex-direction: column;
+ position: fixed;
+ top: 60px;
+ left: 0;
+ right: 0;
+ background: var(--bg);
+ border-bottom: 1px solid var(--border);
+ padding: 12px 24px 20px;
+ gap: 6px;
+ }
+
+ .features-grid {
+ grid-template-columns: 1fr;
+ }
+ .hero-stats {
+ gap: 24px;
+ }
+ .hero {
+ padding: 110px 0 60px;
+ }
+ section {
+ padding: 60px 0;
+ }
+ .pricing-card {
+ padding: 32px 24px;
+ }
+
+ .site-footer .container {
+ flex-direction: column;
+ text-align: center;
+ }
+}
+
+/* ── Chat Widget (glowing floating button + glass panel) ── */
+.chat-fab {
+ position: fixed;
+ bottom: 28px;
+ right: 28px;
+ z-index: 9999;
+ width: 60px;
+ height: 60px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, #00f5ff, #0099cc);
+ border: none;
+ cursor: pointer;
+ box-shadow:
+ 0 4px 24px rgba(0, 245, 255, 0.4),
+ 0 0 0 0 rgba(0, 245, 255, 0.35);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 26px;
+ color: #000;
+ transition:
+ transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1),
+ box-shadow 0.3s;
+ animation: fabPulse 2.5s ease-in-out infinite;
+}
+@keyframes fabPulse {
+ 0%,
+ 100% {
+ box-shadow:
+ 0 4px 24px rgba(0, 245, 255, 0.4),
+ 0 0 0 0 rgba(0, 245, 255, 0.35);
+ }
+ 50% {
+ box-shadow:
+ 0 4px 32px rgba(0, 245, 255, 0.55),
+ 0 0 0 12px rgba(0, 245, 255, 0);
+ }
+}
+.chat-fab:hover {
+ transform: scale(1.12) rotate(-8deg);
+ box-shadow: 0 6px 36px rgba(0, 245, 255, 0.5);
+ animation: none;
+}
+.chat-fab:active {
+ transform: scale(0.92);
+}
+.chat-fab.open {
+ transform: scale(0.88);
+ opacity: 0.6;
+ animation: none;
+}
+.chat-widget {
+ position: fixed;
+ bottom: 100px;
+ right: 28px;
+ z-index: 9998;
+ width: 380px;
+ max-width: calc(100vw - 56px);
+ height: 520px;
+ max-height: calc(100vh - 160px);
+ background: rgba(1, 15, 32, 0.92);
+ backdrop-filter: blur(20px);
+ -webkit-backdrop-filter: blur(20px);
+ border: 1px solid rgba(0, 245, 255, 0.25);
+ border-radius: 22px;
+ box-shadow:
+ 0 24px 80px rgba(0, 0, 0, 0.6),
+ 0 0 40px rgba(0, 245, 255, 0.06);
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ opacity: 0;
+ visibility: hidden;
+ transform: translateY(16px) scale(0.94);
+ transform-origin: bottom right;
+ transition:
+ opacity 0.3s cubic-bezier(0.22, 1, 0.36, 1),
+ transform 0.35s cubic-bezier(0.22, 1, 0.36, 1),
+ visibility 0.3s;
+}
+.chat-widget.open {
+ opacity: 1;
+ visibility: visible;
+ transform: translateY(0) scale(1);
+}
+.chat-widget::before {
+ content: "";
+ position: absolute;
+ inset: 0;
+ border-radius: 22px;
+ padding: 1px;
+ background: linear-gradient(
+ 135deg,
+ rgba(0, 245, 255, 0.35),
+ rgba(0, 153, 204, 0.15),
+ rgba(0, 245, 255, 0.35)
+ );
+ -webkit-mask:
+ linear-gradient(#fff 0 0) content-box,
+ linear-gradient(#fff 0 0);
+ -webkit-mask-composite: xor;
+ mask-composite: exclude;
+ pointer-events: none;
+}
+.chat-header {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 18px 20px 14px;
+ background: linear-gradient(
+ 135deg,
+ rgba(0, 245, 255, 0.08),
+ rgba(0, 153, 204, 0.04)
+ );
+ border-bottom: 1px solid rgba(0, 245, 255, 0.12);
+}
+.chat-header-avatar {
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, var(--accent-dim), #002535);
+ border: 2px solid var(--accent);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 18px;
+ flex-shrink: 0;
+ position: relative;
+}
+.chat-header-avatar::after {
+ content: "";
+ position: absolute;
+ bottom: -1px;
+ right: -1px;
+ width: 10px;
+ height: 10px;
+ border-radius: 50%;
+ background: var(--success);
+ border: 2px solid var(--bg-card);
+}
+.chat-header-info {
+ flex: 1;
+ min-width: 0;
+}
+.chat-header-name {
+ font-weight: 700;
+ font-size: 14px;
+ color: var(--text);
+ letter-spacing: -0.01em;
+}
+.chat-header-status {
+ font-size: 11px;
+ color: var(--success);
+ display: flex;
+ align-items: center;
+ gap: 5px;
+}
+.chat-header-status::before {
+ content: "";
+ width: 5px;
+ height: 5px;
+ border-radius: 50%;
+ background: var(--success);
+ display: inline-block;
+ animation: statusPulse 2s ease-in-out infinite;
+}
+@keyframes statusPulse {
+ 0%,
+ 100% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.4;
+ }
+}
+.chat-header-close {
+ background: none;
+ border: none;
+ color: var(--text-muted);
+ cursor: pointer;
+ font-size: 18px;
+ padding: 6px;
+ line-height: 1;
+ border-radius: 8px;
+ transition:
+ color 0.15s,
+ background 0.15s;
+}
+.chat-header-close:hover {
+ color: var(--text);
+ background: rgba(255, 255, 255, 0.06);
+}
+.chat-msgs {
+ flex: 1;
+ overflow-y: auto;
+ padding: 16px 18px;
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ scroll-behavior: smooth;
+}
+.chat-msgs::-webkit-scrollbar {
+ width: 4px;
+}
+.chat-msgs::-webkit-scrollbar-track {
+ background: transparent;
+}
+.chat-msgs::-webkit-scrollbar-thumb {
+ background: var(--border);
+ border-radius: 4px;
+}
+.chat-input-row {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 12px 16px 16px;
+ border-top: 1px solid rgba(0, 245, 255, 0.08);
+ background: rgba(0, 8, 16, 0.5);
+}
+.chat-input-box {
+ flex: 1;
+ min-width: 0;
+ padding: 10px 16px;
+ border: 1px solid var(--border);
+ border-radius: 22px;
+ outline: none;
+ background: var(--bg-input);
+ color: var(--text);
+ font-size: 13px;
+ transition:
+ border-color 0.2s,
+ box-shadow 0.2s;
+}
+.chat-input-box:focus {
+ border-color: var(--accent);
+ box-shadow: 0 0 0 2px rgba(0, 245, 255, 0.1);
+}
+.chat-input-box::placeholder {
+ color: var(--text-muted);
+}
+.chat-send-btn {
+ width: 38px;
+ height: 38px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, var(--accent), #0099cc);
+ border: none;
+ cursor: pointer;
+ color: #000;
+ font-size: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ transition:
+ opacity 0.15s,
+ transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1),
+ box-shadow 0.2s;
+ box-shadow: 0 2px 12px rgba(0, 245, 255, 0.25);
+}
+.chat-send-btn:hover {
+ opacity: 0.9;
+ transform: scale(1.08);
+ box-shadow: 0 4px 16px rgba(0, 245, 255, 0.35);
+}
+.chat-send-btn:active {
+ transform: scale(0.88);
+}
+.chat-send-btn:disabled {
+ opacity: 0.35;
+ cursor: not-allowed;
+ transform: none;
+ box-shadow: none;
+}
+.chat-msg {
+ max-width: 80%;
+ padding: 10px 14px;
+ border-radius: 16px;
+ line-height: 1.5;
+ word-wrap: break-word;
+ font-size: 13px;
+ animation: msgSlide 0.25s cubic-bezier(0.22, 1, 0.36, 1);
+}
+@keyframes msgSlide {
+ from {
+ opacity: 0;
+ transform: translateY(8px) scale(0.97);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0) scale(1);
+ }
+}
+.chat-msg-bot {
+ align-self: flex-start;
+ background: rgba(1, 15, 32, 0.8);
+ border: 1px solid rgba(0, 245, 255, 0.1);
+ border-bottom-left-radius: 4px;
+}
+.chat-msg-user {
+ align-self: flex-end;
+ background: linear-gradient(135deg, var(--accent), #0099cc);
+ color: #000;
+ border-bottom-right-radius: 4px;
+}
+.chat-msg-thinking {
+ align-self: flex-start;
+ background: rgba(1, 15, 32, 0.6);
+ border: 1px solid rgba(0, 245, 255, 0.08);
+ border-bottom-left-radius: 4px;
+ opacity: 0.5;
+}
+@media (max-width: 500px) {
+ .chat-widget {
+ right: 12px;
+ bottom: 84px;
+ width: calc(100vw - 24px);
+ max-height: calc(100vh - 120px);
+ }
+ .chat-fab {
+ right: 16px;
+ bottom: 20px;
+ width: 52px;
+ height: 52px;
+ font-size: 22px;
+ }
+}
+@media (max-width: 350px) {
+ .chat-widget {
+ display: none;
+ }
+}
+
+/* ══════════════════════════════════════════════════════════
+ FOUNDER STORY
+ ══════════════════════════════════════════════════════════ */
+.story-card {
+ display: flex;
+ align-items: flex-start;
+ gap: 40px;
+ max-width: 760px;
+ margin: 0 auto;
+ background: var(--bg-card);
+ border: 1px solid var(--border-hi);
+ border-radius: var(--radius-card);
+ padding: 40px 36px;
+ box-shadow: var(--shadow);
+}
+.story-avatar {
+ flex-shrink: 0;
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ background: var(--accent-dim);
+ border: 2px solid var(--accent);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 40px;
+ color: var(--accent);
+ overflow: hidden;
+}
+.story-avatar img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+}
+.story-body {
+ flex: 1;
+}
+.story-label {
+ font-size: 11px;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.08em;
+ color: var(--accent);
+ margin-bottom: 6px;
+}
+.story-body h2 {
+ margin-bottom: 16px;
+ font-size: 1.5rem;
+}
+.story-body p {
+ font-size: 14px;
+ line-height: 1.7;
+ color: var(--text-muted);
+ margin-bottom: 14px;
+}
+.story-body p strong {
+ color: var(--text);
+}
+.story-signoff {
+ font-style: italic;
+ color: var(--accent) !important;
+ margin-top: 8px;
+ font-weight: 500;
+}
+@media (max-width: 600px) {
+ .story-card {
+ flex-direction: column;
+ align-items: center;
+ text-align: center;
+ gap: 24px;
+ padding: 28px 20px;
+ }
+ .story-avatar {
+ width: 72px;
+ height: 72px;
+ font-size: 28px;
+ }
+}
diff --git a/assets/js/script.js b/assets/js/script.js
new file mode 100644
index 0000000..ba369f5
--- /dev/null
+++ b/assets/js/script.js
@@ -0,0 +1,837 @@
+// ── Speedrun Slider (inline script from how-it-works section) ──
+(function () {
+ const slider = document.getElementById("speedrunSlider");
+ const dotsContainer = document.getElementById("speedrunDots");
+ if (!slider || !dotsContainer) return;
+ const slides = slider.querySelectorAll(".video-slide");
+ const total = slides.length;
+ if (total === 0) return;
+
+ for (let i = 0; i < total; i++) {
+ const dot = document.createElement("button");
+ dot.className = "slider-dot" + (i === 0 ? " active" : "");
+ dot.setAttribute("aria-label", "Go to slide " + (i + 1));
+ dot.onclick = function () {
+ slides[i].scrollIntoView({
+ behavior: "smooth",
+ block: "nearest",
+ inline: "start",
+ });
+ };
+ dotsContainer.appendChild(dot);
+ }
+
+ function updateDots() {
+ const threshold = 120;
+ let activeIdx = 0;
+ for (let i = 0; i < total; i++) {
+ const rect = slides[i].getBoundingClientRect();
+ const center = rect.left + rect.width / 2;
+ const sl = slider.getBoundingClientRect();
+ const slCenter = sl.left + sl.width / 2;
+ if (Math.abs(center - slCenter) < threshold) {
+ activeIdx = i;
+ }
+ }
+ dotsContainer.querySelectorAll(".slider-dot").forEach((d, i) => {
+ d.classList.toggle("active", i === activeIdx);
+ });
+ }
+
+ slider.addEventListener("scroll", updateDots);
+ updateDots();
+})();
+
+function slideSpeedrun(dir) {
+ plausible("Speedrun Nav", {
+ props: { direction: dir > 0 ? "next" : "prev" },
+ });
+ const slider = document.getElementById("speedrunSlider");
+ if (!slider) return;
+ const slideWidth = slider.querySelector(".video-slide").offsetWidth + 20;
+ slider.scrollBy({
+ left: slideWidth * dir,
+ behavior: "smooth",
+ });
+}
+
+// ── Mobile menu ──────────────────────────────────────────
+function toggleMobile() {
+ plausible("Mobile Menu Toggle");
+ const nav = document.getElementById("nav-links");
+ nav.classList.toggle("mobile-open");
+}
+
+// ── FAQ accordion ────────────────────────────────────────
+function toggleFaq(btn) {
+ const q = btn.innerText.replace(/[?✦]/g, "").trim();
+ plausible("FAQ Toggle", { props: { question: q } });
+ const answer = btn.nextElementSibling;
+ const isOpen = answer.classList.contains("open");
+ // Close all
+ document
+ .querySelectorAll(".faq-answer.open")
+ .forEach((el) => el.classList.remove("open"));
+ document
+ .querySelectorAll(".faq-question.open")
+ .forEach((el) => el.classList.remove("open"));
+ if (!isOpen) {
+ answer.classList.add("open");
+ btn.classList.add("open");
+ }
+}
+
+// ── Signup Webhook URLs (matching app.derez.ai) ──────────
+const SIGNUP_URL =
+ "https://n8n.derez.ai/webhook/4de196b7-2ad2-4f9a-9b4d-dc8d3b30865b";
+const AUTH_URL =
+ "https://n8n.derez.ai/webhook/aca1b27f-c18e-4424-b7a0-de01007a3fe6";
+const COUPON_URL =
+ "https://n8n.derez.ai/webhook/fd6375cb-6d73-4482-bfa3-ef8365f43a67";
+
+let inlineCouponApplied = false;
+
+// ── Helper: show/hide auth messages ──────────────────────
+function showAuthError(id, msg) {
+ const el = document.getElementById(id);
+ el.textContent = msg;
+ el.style.display = "flex";
+}
+function hideAuthError(id) {
+ document.getElementById(id).style.display = "none";
+}
+
+// ── Helper: btn loading state ────────────────────────────
+function btnLoad(btn, text) {
+ btn.disabled = true;
+ btn.textContent = text;
+}
+function btnReset(btn) {
+ btn.disabled = false;
+ btn.textContent = "Buy Agent — $9.50/mo";
+}
+
+function isValidEmail(e) {
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e);
+}
+
+// ── Coupon ──────────────────────────────────────────────
+function handleCouponKey(e) {
+ if (e.key === "Enter") {
+ e.preventDefault();
+ applyInlineCoupon();
+ }
+}
+
+async function applyInlineCoupon() {
+ const input = document.getElementById("signup-coupon-input");
+ const spinner = document.getElementById("signup-coupon-spinner");
+ const errorEl = document.getElementById("signup-coupon-error");
+ const successEl = document.getElementById("signup-coupon-success");
+
+ const code = input.value.trim();
+ if (!code) return;
+
+ spinner.style.display = "flex";
+ errorEl.style.display = "none";
+ successEl.style.display = "none";
+ input.classList.remove("signup-coupon-input-error");
+
+ try {
+ const res = await fetch(COUPON_URL, {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ code }),
+ });
+ if (!res.ok) throw new Error("Invalid");
+ const data = await res.json();
+ const raw = Array.isArray(data) ? data[0] : data;
+ const item =
+ raw && typeof raw === "object" && "json" in raw ? raw.json : raw;
+ if (item?.valid === true || item?.status === "ok") {
+ inlineCouponApplied = true;
+ successEl.style.display = "flex";
+ input.style.display = "none";
+ } else {
+ throw new Error("Invalid");
+ }
+ } catch {
+ input.classList.add("signup-coupon-input-error");
+ errorEl.style.display = "block";
+ } finally {
+ spinner.style.display = "none";
+ }
+}
+
+// ── Sign Up (inline on landing page) ────────────────────
+async function doInlineSignUp() {
+ const email = document.getElementById("inline-signup-email").value.trim();
+ const password = document.getElementById("inline-signup-password").value;
+ const agent = document.getElementById("inline-signup-agent").value;
+ const location = document.getElementById("inline-signup-location").value;
+
+ hideAuthError("inline-signup-error");
+ document.getElementById("inline-signup-success").style.display = "none";
+
+ if (!isValidEmail(email)) {
+ showAuthError("inline-signup-error", "Please enter a valid email address.");
+ return;
+ }
+ if (password.length < 8) {
+ showAuthError(
+ "inline-signup-error",
+ "Password must be at least 8 characters.",
+ );
+ return;
+ }
+
+ const btn = document.getElementById("inline-signup-btn");
+ btnLoad(btn, "Hiring agent\u2026");
+
+ // Open blank tab synchronously for Stripe redirect
+ const stripeTab = window.open("", "_blank");
+
+ try {
+ // Step 1: authenticate
+ const authRes = await fetch(AUTH_URL, {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ email, password }),
+ });
+ if (!authRes.ok)
+ throw new Error("Account creation failed. Please try again later.");
+
+ // Step 2: create agent
+ const createRes = await fetch(SIGNUP_URL, {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({
+ email,
+ password,
+ agent,
+ location,
+ }),
+ });
+ if (!createRes.ok) {
+ throw new Error("Agent provisioning failed. Please contact support.");
+ }
+
+ const createData = await createRes.json();
+ const createRaw = Array.isArray(createData) ? createData[0] : createData;
+ const createItem =
+ createRaw && typeof createRaw === "object" && "json" in createRaw
+ ? createRaw.json
+ : createRaw;
+
+ // Navigate the pre-opened tab to Stripe checkout
+ const checkoutUrl =
+ createItem?.checkout_url || createItem?.checkoutUrl || createItem?.url;
+ if (checkoutUrl && checkoutUrl.startsWith("http")) {
+ stripeTab.location.href = checkoutUrl;
+ } else {
+ stripeTab.close();
+ }
+
+ // Show success message
+ document.getElementById("inline-signup-success").textContent =
+ "Agent created! \u2713 Redirecting to checkout\u2026";
+ document.getElementById("inline-signup-success").style.display = "flex";
+ } catch (err) {
+ stripeTab?.close();
+ showAuthError("inline-signup-error", err.message);
+ } finally {
+ btnReset(btn);
+ }
+}
+
+// ── Close mobile menu on link click ──────────────────────
+document.querySelectorAll(".nav-links a").forEach((link) => {
+ link.addEventListener("click", () => {
+ document.getElementById("nav-links").classList.remove("mobile-open");
+ });
+});
+
+// ── Smooth scroll offset for fixed header ────────────────
+document.querySelectorAll('a[href^="#"]').forEach((anchor) => {
+ anchor.addEventListener("click", function (e) {
+ const target = document.querySelector(this.getAttribute("href"));
+ if (target) {
+ e.preventDefault();
+ const headerHeight = 60;
+ const top =
+ target.getBoundingClientRect().top + window.pageYOffset - headerHeight;
+ window.scrollTo({ top, behavior: "smooth" });
+ }
+ });
+});
+
+/* ── Period / billing update ──────────────────────────── */
+function updatePeriodDisplay() {
+ const sel = document.getElementById("pricing-period");
+ const yearly = sel.value === "yearly";
+ document.getElementById("bonus-trainee").classList.toggle("show", yearly);
+ document.getElementById("bonus-junior").classList.toggle("show", yearly);
+ document.getElementById("bonus-senior").classList.toggle("show", yearly);
+
+ document.getElementById("period-trainee").textContent = yearly
+ ? "/ month ✦ yearly"
+ : "/ month";
+ document.getElementById("period-junior").textContent = yearly
+ ? "/ month ✦ yearly"
+ : "/ month";
+ document.getElementById("period-senior").textContent = yearly
+ ? "/ month ✦ yearly"
+ : "/ month";
+}
+document
+ .getElementById("pricing-period")
+ .addEventListener("change", updatePeriodDisplay);
+updatePeriodDisplay(); // fire on load so yearly bonuses show by default
+
+/* ── Capture UTM params from URL ──────────────────────────── */
+(function () {
+ const params = new URLSearchParams(window.location.search);
+ ["source", "medium", "campaign", "term", "content"].forEach(function (key) {
+ const val = params.get("utm_" + key);
+ if (val) document.getElementById("utm_" + key).value = val;
+ });
+})();
+
+/* ── Buy Agent Webhook ───────────────────────────── */
+const ORDER_WEBHOOK = "https://n8n.derez.ai/webhook/payment";
+
+function showPricingToast(msg) {
+ const el = document.getElementById("pricing-toast");
+ el.textContent = msg;
+ el.classList.add("show");
+ if (window._pricingToastTimer) clearTimeout(window._pricingToastTimer);
+ window._pricingToastTimer = setTimeout(function () {
+ el.classList.remove("show");
+ }, 20000);
+}
+
+async function hireAgent(product) {
+ const agent = document.getElementById("pricing-agent").value;
+ const period = document.getElementById("pricing-period").value;
+ const location = document.getElementById("pricing-location").value;
+ const email = document.getElementById("pricing-email").value.trim();
+ const coupon = document.getElementById("pricing-coupon").value.trim();
+
+ // Validate email
+ const emailInput = document.getElementById("pricing-email");
+ emailInput.classList.remove("invalid");
+ if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
+ emailInput.classList.add("invalid");
+ showPricingToast(
+ "Please configure your agent and provide a valid email address.",
+ );
+ emailInput.focus();
+ return;
+ }
+
+ plausible("Pricing Click", {
+ props: { product: product, agent: agent, period: period },
+ });
+
+ try {
+ // Use a hidden form POST so the 302 redirect opens naturally in the new tab
+ const form = document.createElement("form");
+ form.method = "POST";
+ form.action = ORDER_WEBHOOK;
+ form.target = "_self";
+ form.style.display = "none";
+
+ const fields = {
+ product: product,
+ agent: agent,
+ period: period,
+ location: location,
+ email: email || "",
+ coupon: coupon || "",
+ utm_source: document.getElementById("utm_source").value || "",
+ utm_medium: document.getElementById("utm_medium").value || "",
+ utm_campaign: document.getElementById("utm_campaign").value || "",
+ utm_term: document.getElementById("utm_term").value || "",
+ utm_content: document.getElementById("utm_content").value || "",
+ };
+
+ Object.keys(fields).forEach(function (key) {
+ const inp = document.createElement("input");
+ inp.type = "hidden";
+ inp.name = key;
+ inp.value = fields[key];
+ form.appendChild(inp);
+ });
+
+ document.body.appendChild(form);
+ form.submit();
+ document.body.removeChild(form);
+ } catch (err) {
+ console.error("Order webhook failed:", err);
+ }
+}
+
+/* ── Chat Widget ──────────────────────────────────────────── */
+const CHAT_URL =
+ "https://n8n.derez.ai/webhook/a58d00c4-f0c9-40cd-bb50-4f45f0442ef0";
+let chatId = null;
+let chatOpen = false;
+let chatBusy = false;
+let greeted = false;
+let probeTimer = null;
+
+function chatToggle() {
+ plausible("Chat Toggle", {
+ props: { action: chatOpen ? "close" : "open" },
+ });
+ chatOpen = !chatOpen;
+ document.getElementById("chat-widget").classList.toggle("open", chatOpen);
+ document.getElementById("chat-fab").classList.toggle("open", chatOpen);
+ document.getElementById("chat-widget").setAttribute("aria-hidden", !chatOpen);
+ if (chatOpen) {
+ // User opened chat manually — cancel the auto-open probe
+ if (probeTimer) {
+ clearTimeout(probeTimer);
+ probeTimer = null;
+ }
+ if (!chatId) {
+ chatId = String(Math.floor(100000 + Math.random() * 900000));
+ chatAppendMsg(
+ "bot",
+ "Hi! I'm your Sales Agent. Ask me about plans, setup, pricing, integrations, or anything about your AI agent.",
+ );
+ }
+ setTimeout(() => document.getElementById("chat-input").focus(), 300);
+ }
+}
+
+function chatClose() {
+ if (chatOpen) chatToggle();
+}
+
+function chatOpenSilent() {
+ if (!chatOpen) {
+ chatOpen = true;
+ document.getElementById("chat-widget").classList.add("open");
+ document.getElementById("chat-widget").setAttribute("aria-hidden", "false");
+ }
+}
+
+function chatAppendMsg(role, text) {
+ const msgs = document.getElementById("chat-msgs");
+ const div = document.createElement("div");
+ div.className = "chat-msg chat-msg-" + role;
+ // strip
-
@@ -2693,17 +788,19 @@
charges. Cancel anytime with monthly termination.
-
-
-
Configure and buy your agent
-
-
-
@@ -3534,25 +1657,46 @@
Integration
Odoo Hermes Agent
- Connect your Odoo ERP to Hermes Agent in 10 minutes. Read, write, and automate your business data through natural language prompts.
+
+ Connect your Odoo ERP to Hermes Agent in 10 minutes.
+ Read, write, and automate your business data through
+ natural language prompts.
+
Explore →
Guide
ChatGPT AI Agent
- Build and deploy your own ChatGPT-powered AI agent. Full SSH access, no coding, enterprise-grade hosting — deploy in under 10 minutes.
+
+ Build and deploy your own ChatGPT-powered AI agent.
+ Full SSH access, no coding, enterprise-grade hosting
+ — deploy in under 10 minutes.
+
Explore →
Guide
SSH for Agents
- Connect, manage, and transfer files to your agent's Linux instance. Encryption keys, file sync, Tmux sessions, and Midnight Commander — everything you need.
+
+ Connect, manage, and transfer files to your agent's
+ Linux instance. Encryption keys, file sync, Tmux
+ sessions, and Midnight Commander — everything you
+ need.
+
Explore →
-
+
Startup Stack
Odoo + Hermes Agent for Startups
- Odoo Community Edition with zero per-user fees plus Hermes Agent AI automation. Create a dedicated agent user with granular rights — automate without giving full access.
+
+ Odoo Community Edition with zero per-user fees plus
+ Hermes Agent AI automation. Create a dedicated agent
+ user with granular rights — automate without giving
+ full access.
+
Explore →
@@ -3588,896 +1732,8 @@
-
-
+
+