diff --git a/landing/.gitignore b/landing/.gitignore index c7d2a8bc..392f1564 100644 --- a/landing/.gitignore +++ b/landing/.gitignore @@ -3,6 +3,8 @@ node_modules .output .dist .env +--host/ +product-docs/.vitepress/dist/ # Large video files public/video/*.mp4 diff --git a/landing/assets/images/footer/robot-lead-lounge-v1.webp b/landing/assets/images/footer/robot-lead-lounge-v1.webp new file mode 100644 index 00000000..67876934 Binary files /dev/null and b/landing/assets/images/footer/robot-lead-lounge-v1.webp differ diff --git a/landing/assets/images/hero/robots/robot-avatar-amber-v1.webp b/landing/assets/images/hero/robots/robot-avatar-amber-v1.webp new file mode 100644 index 00000000..d872a124 Binary files /dev/null and b/landing/assets/images/hero/robots/robot-avatar-amber-v1.webp differ diff --git a/landing/assets/images/hero/robots/robot-avatar-cyan-cat-v1.webp b/landing/assets/images/hero/robots/robot-avatar-cyan-cat-v1.webp new file mode 100644 index 00000000..27b392ae Binary files /dev/null and b/landing/assets/images/hero/robots/robot-avatar-cyan-cat-v1.webp differ diff --git a/landing/assets/images/hero/robots/robot-avatar-cyan-v1.webp b/landing/assets/images/hero/robots/robot-avatar-cyan-v1.webp new file mode 100644 index 00000000..ce12d9ba Binary files /dev/null and b/landing/assets/images/hero/robots/robot-avatar-cyan-v1.webp differ diff --git a/landing/assets/images/hero/robots/robot-avatar-magenta-v1.webp b/landing/assets/images/hero/robots/robot-avatar-magenta-v1.webp new file mode 100644 index 00000000..74136f6d Binary files /dev/null and b/landing/assets/images/hero/robots/robot-avatar-magenta-v1.webp differ diff --git a/landing/assets/images/hero/robots/robot-avatar-red-flame-v1.webp b/landing/assets/images/hero/robots/robot-avatar-red-flame-v1.webp new file mode 100644 index 00000000..a32935a7 Binary files /dev/null and b/landing/assets/images/hero/robots/robot-avatar-red-flame-v1.webp differ diff --git a/landing/assets/images/hero/robots/robot-avatar-reviewer-teal-v1.webp b/landing/assets/images/hero/robots/robot-avatar-reviewer-teal-v1.webp new file mode 100644 index 00000000..d081566c Binary files /dev/null and b/landing/assets/images/hero/robots/robot-avatar-reviewer-teal-v1.webp differ diff --git a/landing/assets/images/hero/robots/robot-avatar-seated-magenta-v1.webp b/landing/assets/images/hero/robots/robot-avatar-seated-magenta-v1.webp new file mode 100644 index 00000000..90f27c1e Binary files /dev/null and b/landing/assets/images/hero/robots/robot-avatar-seated-magenta-v1.webp differ diff --git a/landing/assets/images/hero/robots/robot-avatar-yellow-star-v1.webp b/landing/assets/images/hero/robots/robot-avatar-yellow-star-v1.webp new file mode 100644 index 00000000..f49a5450 Binary files /dev/null and b/landing/assets/images/hero/robots/robot-avatar-yellow-star-v1.webp differ diff --git a/landing/assets/images/hero/robots/robot-red-purple-handshake-v1.webp b/landing/assets/images/hero/robots/robot-red-purple-handshake-v1.webp new file mode 100644 index 00000000..98a0c794 Binary files /dev/null and b/landing/assets/images/hero/robots/robot-red-purple-handshake-v1.webp differ diff --git a/landing/assets/images/hero/robots/robot-seated-magenta-v1.png b/landing/assets/images/hero/robots/robot-seated-magenta-v1.png new file mode 100644 index 00000000..eecfb33c Binary files /dev/null and b/landing/assets/images/hero/robots/robot-seated-magenta-v1.png differ diff --git a/landing/assets/images/hero/robots/robot-seated-magenta-v1.webp b/landing/assets/images/hero/robots/robot-seated-magenta-v1.webp new file mode 100644 index 00000000..512d48eb Binary files /dev/null and b/landing/assets/images/hero/robots/robot-seated-magenta-v1.webp differ diff --git a/landing/assets/images/references/cyber-hud-header-reference-2026-05-16.png b/landing/assets/images/references/cyber-hud-header-reference-2026-05-16.png new file mode 100644 index 00000000..092bb156 Binary files /dev/null and b/landing/assets/images/references/cyber-hud-header-reference-2026-05-16.png differ diff --git a/landing/assets/styles/cyberpunk-hero.scss b/landing/assets/styles/cyberpunk-hero.scss index 2018b34b..41b6bdf0 100644 --- a/landing/assets/styles/cyberpunk-hero.scss +++ b/landing/assets/styles/cyberpunk-hero.scss @@ -14,17 +14,218 @@ --cyber-muted: #9ba8c7; --cyber-border-cyan: rgba(0, 234, 255, 0.42); --cyber-border-magenta: rgba(255, 43, 255, 0.42); + --cyber-panel-bg: + linear-gradient(135deg, rgba(5, 14, 31, 0.9), rgba(3, 10, 22, 0.64)); + --cyber-panel-shadow: + 0 0 0 1px rgba(47, 125, 255, 0.12) inset, + 0 0 24px rgba(0, 234, 255, 0.12); + --cyber-hero-bg: + radial-gradient(circle at 76% 30%, rgba(0, 234, 255, 0.14), transparent 30%), + radial-gradient(circle at 86% 70%, rgba(255, 43, 255, 0.14), transparent 34%), + linear-gradient(180deg, var(--cyber-bg-0), var(--cyber-bg-1) 58%, var(--cyber-bg-0)); + --cyber-monterey-bg: + radial-gradient(circle at 76% 22%, rgba(138, 47, 255, 0.76), transparent 30%), + radial-gradient(circle at 18% 76%, rgba(37, 8, 128, 0.72), transparent 36%), + linear-gradient(180deg, #180061 0%, #3200a2 46%, #130042 100%); + --cyber-monterey-before-bg: + radial-gradient(circle at 18% 34%, rgba(2, 5, 13, 0.62), rgba(2, 5, 13, 0.14) 34%, transparent 62%), + linear-gradient(90deg, rgba(2, 5, 13, 0.48) 0%, rgba(2, 5, 13, 0.17) 42%, rgba(2, 5, 13, 0.04) 64%, rgba(2, 5, 13, 0.3) 100%); + --cyber-monterey-after-bg: + linear-gradient(180deg, rgba(2, 5, 13, 0.92) 0%, rgba(2, 5, 13, 0.62) 15%, rgba(2, 5, 13, 0.08) 44%, rgba(2, 5, 13, 0.68) 100%), + radial-gradient(circle at 64% 42%, transparent 0 26%, rgba(2, 5, 13, 0.24) 70%, rgba(2, 5, 13, 0.54) 100%); + --cyber-monterey-canvas-opacity: 1; + --cyber-monterey-canvas-filter: blur(4px) saturate(1.22) brightness(1.08) contrast(1.08); + --cyber-monterey-canvas-blend: normal; + --cyber-background-bg: + radial-gradient(circle at 72% 28%, rgba(0, 234, 255, 0.1), transparent 30%), + radial-gradient(circle at 88% 62%, rgba(255, 43, 255, 0.1), transparent 32%), + linear-gradient(90deg, transparent 0 64px, rgba(0, 234, 255, 0.045) 65px 66px, transparent 67px 160px), + linear-gradient(180deg, rgba(2, 5, 13, 0.66) 0%, rgba(2, 5, 13, 0.2) 38%, rgba(2, 5, 13, 0.78) 100%); + --cyber-background-opacity: 0.58; + --cyber-background-before-bg: + linear-gradient(90deg, transparent 0 8%, rgba(0, 234, 255, 0.14) 8.1% 8.22%, transparent 8.34% 18%, rgba(255, 43, 255, 0.12) 18.1% 18.22%, transparent 18.34% 31%, rgba(0, 234, 255, 0.11) 31.1% 31.24%, transparent 31.36% 44%, rgba(47, 125, 255, 0.12) 44.1% 44.2%, transparent 44.34% 62%, rgba(255, 43, 255, 0.1) 62.1% 62.22%, transparent 62.34% 78%, rgba(0, 234, 255, 0.12) 78.1% 78.22%, transparent 78.34%), + repeating-linear-gradient(90deg, transparent 0 78px, rgba(0, 234, 255, 0.05) 80px 82px, transparent 84px 116px), + linear-gradient(to top, rgba(3, 12, 27, 0.66) 0%, rgba(3, 12, 27, 0.42) 8%, rgba(3, 12, 27, 0.16) 17%, transparent 28%), + linear-gradient(to top, rgba(5, 20, 44, 0.5) 0%, rgba(5, 20, 44, 0.28) 12%, rgba(5, 20, 44, 0.12) 24%, transparent 36%), + linear-gradient(to top, rgba(4, 17, 38, 0.38) 0%, rgba(4, 17, 38, 0.22) 18%, rgba(4, 17, 38, 0.08) 34%, transparent 48%); + --cyber-background-before-opacity: 0.62; + --cyber-background-before-blend: screen; + --cyber-background-after-bg: + repeating-linear-gradient(90deg, transparent 0 34px, rgba(0, 234, 255, 0.12) 35px 36px, transparent 37px 110px), + repeating-linear-gradient(180deg, transparent 0 28px, rgba(255, 43, 255, 0.1) 29px 30px, transparent 31px 78px), + linear-gradient(90deg, transparent, rgba(0, 234, 255, 0.08), transparent); + --cyber-background-after-opacity: 0.26; + --cyber-background-after-blend: screen; + --cyber-wash-bg: + radial-gradient(circle at 18% 44%, rgba(2, 5, 13, 0.48), rgba(2, 5, 13, 0.22) 34%, transparent 58%), + linear-gradient(90deg, rgba(2, 5, 13, 0.42) 0%, rgba(2, 5, 13, 0.28) 34%, rgba(2, 5, 13, 0.08) 66%, rgba(2, 5, 13, 0.3) 100%), + linear-gradient(180deg, rgba(2, 5, 13, 0.18), rgba(2, 5, 13, 0.08) 58%, rgba(2, 5, 13, 0.92)); + --cyber-gridlines-bg: + linear-gradient(rgba(0, 234, 255, 0.055) 1px, transparent 1px), + linear-gradient(90deg, rgba(0, 234, 255, 0.045) 1px, transparent 1px); + --cyber-gridlines-opacity: 0.16; + --cyber-scanlines-bg: repeating-linear-gradient( + to bottom, + rgba(255, 255, 255, 0.08) 0, + rgba(255, 255, 255, 0.08) 1px, + transparent 1px, + transparent 4px + ); + --cyber-scanlines-opacity: 0.11; + --cyber-copy-aura: radial-gradient(circle at 28% 38%, rgba(2, 5, 13, 0.82), rgba(2, 5, 13, 0.36) 62%, transparent 78%); + --cyber-title-color: rgba(244, 247, 255, 0.96); + --cyber-description-color: rgba(222, 229, 255, 0.84); + --cyber-action-primary-color: var(--cyber-bg-0); + --cyber-action-secondary-bg: rgba(3, 10, 22, 0.56); + --cyber-action-secondary-hover-bg: rgba(0, 234, 255, 0.08); + --cyber-release-color: rgba(244, 247, 255, 0.62); + --cyber-scene-floor-bg: + radial-gradient(ellipse at 58% 84%, rgba(255, 43, 255, 0.24), transparent 18%), + radial-gradient(ellipse at 56% 84%, rgba(0, 234, 255, 0.18), transparent 32%), + repeating-radial-gradient(ellipse at 58% 84%, rgba(0, 234, 255, 0.1) 0 1px, transparent 1px 20px); + --cyber-scene-floor-opacity: 0.48; + --cyber-scene-foreground-bg: + linear-gradient(90deg, transparent 0 4%, rgba(0, 234, 255, 0.08) 4.1%, transparent 4.4%), + linear-gradient(180deg, transparent 0 88%, rgba(255, 43, 255, 0.08)); + --cyber-scene-foreground-opacity: 0.72; + --cyber-video-frame-bg: rgba(2, 6, 16, 0.82); + --cyber-video-content-bg: rgba(2, 6, 16, 0.94); + --cyber-card-text: rgba(244, 247, 255, 0.84); + --cyber-card-muted: rgba(222, 229, 255, 0.72); + --cyber-card-subtle: rgba(222, 229, 255, 0.62); + --cyber-card-inset: rgba(255, 255, 255, 0.06); + --cyber-feature-shell-bg: + radial-gradient(ellipse at 50% 62%, rgba(0, 234, 255, 0.08), transparent 56%), + radial-gradient(ellipse at 78% 52%, rgba(255, 43, 255, 0.08), transparent 48%), + linear-gradient(180deg, transparent 0%, rgba(5, 17, 40, 0.08) 30%, rgba(5, 14, 31, 0.18) 52%, rgba(5, 17, 40, 0.08) 72%, transparent 100%); + --cyber-feature-rail-bg: + linear-gradient(180deg, rgba(3, 10, 22, 0.34) 0%, rgba(5, 14, 31, 0.74) 30%, rgba(5, 14, 31, 0.72) 70%, rgba(3, 10, 22, 0.34) 100%), + linear-gradient(135deg, rgba(5, 14, 31, 0.58), rgba(3, 10, 22, 0.42)); + --cyber-feature-rail-shadow: + 0 0 0 1px rgba(47, 125, 255, 0.1) inset, + 0 -28px 46px rgba(2, 5, 13, 0.14), + 0 30px 58px rgba(2, 5, 13, 0.18), + 0 0 24px rgba(0, 234, 255, 0.1); + --cyber-feature-divider: rgba(0, 234, 255, 0.16); + --cyber-feature-title: rgba(244, 247, 255, 0.94); + --cyber-feature-text: rgba(222, 229, 255, 0.62); --cyber-radius-xs: 4px; --cyber-radius-sm: 6px; --cyber-radius-md: 8px; --cyber-frame-cut: 18px; } +.v-theme--light .cyber-hero { + --cyber-bg-0: #f8fcff; + --cyber-bg-1: #eaf7fb; + --cyber-panel-weak: rgba(255, 255, 255, 0.68); + --cyber-panel: rgba(255, 255, 255, 0.78); + --cyber-panel-strong: rgba(255, 255, 255, 0.92); + --cyber-cyan: #008fb3; + --cyber-blue: #2563eb; + --cyber-magenta: #b832d8; + --cyber-violet: #7c3aed; + --cyber-text: #132238; + --cyber-muted: #596b83; + --cyber-border-cyan: rgba(8, 145, 178, 0.34); + --cyber-border-magenta: rgba(184, 50, 216, 0.28); + --cyber-panel-bg: + linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(237, 249, 252, 0.68)); + --cyber-panel-shadow: + 0 0 0 1px rgba(8, 145, 178, 0.1) inset, + 0 18px 48px rgba(8, 145, 178, 0.12), + 0 0 22px rgba(184, 50, 216, 0.07); + --cyber-hero-bg: + radial-gradient(circle at 76% 30%, rgba(0, 178, 214, 0.14), transparent 32%), + radial-gradient(circle at 86% 70%, rgba(184, 50, 216, 0.13), transparent 36%), + linear-gradient(180deg, #fbfdff 0%, #edf8fb 56%, #f8fcff 100%); + --cyber-monterey-bg: + radial-gradient(circle at 78% 24%, rgba(113, 185, 255, 0.28), transparent 31%), + radial-gradient(circle at 22% 72%, rgba(221, 170, 255, 0.24), transparent 38%), + radial-gradient(circle at 8% 32%, rgba(101, 218, 255, 0.18), transparent 34%), + linear-gradient(180deg, #f8fcff 0%, #eaf7fb 48%, #fbf7ff 100%); + --cyber-monterey-before-bg: + radial-gradient(circle at 18% 34%, rgba(255, 255, 255, 0.46), rgba(255, 255, 255, 0.14) 34%, transparent 62%), + linear-gradient(90deg, rgba(255, 255, 255, 0.22) 0%, rgba(255, 255, 255, 0.08) 42%, rgba(255, 255, 255, 0.03) 64%, rgba(237, 247, 252, 0.2) 100%); + --cyber-monterey-after-bg: + linear-gradient(180deg, rgba(248, 252, 255, 0.52) 0%, rgba(248, 252, 255, 0.22) 18%, rgba(248, 252, 255, 0.04) 48%, rgba(248, 252, 255, 0.58) 100%), + radial-gradient(circle at 64% 42%, transparent 0 26%, rgba(255, 255, 255, 0.16) 70%, rgba(235, 247, 252, 0.42) 100%); + --cyber-monterey-canvas-opacity: 1; + --cyber-monterey-canvas-filter: blur(1px) saturate(1.34) brightness(1.12) contrast(1.16); + --cyber-monterey-canvas-blend: multiply; + --cyber-background-bg: + radial-gradient(circle at 72% 28%, rgba(0, 178, 214, 0.12), transparent 31%), + radial-gradient(circle at 88% 62%, rgba(184, 50, 216, 0.1), transparent 33%), + linear-gradient(90deg, transparent 0 64px, rgba(8, 145, 178, 0.06) 65px 66px, transparent 67px 160px), + linear-gradient(180deg, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.08) 38%, rgba(237, 247, 252, 0.64) 100%); + --cyber-background-opacity: 0.5; + --cyber-background-before-bg: + linear-gradient(90deg, transparent 0 8%, rgba(8, 145, 178, 0.16) 8.1% 8.22%, transparent 8.34% 18%, rgba(184, 50, 216, 0.12) 18.1% 18.22%, transparent 18.34% 31%, rgba(8, 145, 178, 0.13) 31.1% 31.24%, transparent 31.36% 44%, rgba(37, 99, 235, 0.12) 44.1% 44.2%, transparent 44.34% 62%, rgba(184, 50, 216, 0.1) 62.1% 62.22%, transparent 62.34% 78%, rgba(8, 145, 178, 0.12) 78.1% 78.22%, transparent 78.34%), + repeating-linear-gradient(90deg, transparent 0 78px, rgba(8, 145, 178, 0.06) 80px 82px, transparent 84px 116px), + linear-gradient(to top, rgba(8, 145, 178, 0.12) 0%, rgba(8, 145, 178, 0.07) 13%, transparent 31%), + linear-gradient(to top, rgba(184, 50, 216, 0.1) 0%, rgba(184, 50, 216, 0.05) 16%, transparent 38%), + linear-gradient(to top, rgba(37, 99, 235, 0.09) 0%, rgba(37, 99, 235, 0.04) 20%, transparent 48%); + --cyber-background-before-opacity: 0.58; + --cyber-background-before-blend: multiply; + --cyber-background-after-bg: + repeating-linear-gradient(90deg, transparent 0 34px, rgba(8, 145, 178, 0.1) 35px 36px, transparent 37px 110px), + repeating-linear-gradient(180deg, transparent 0 28px, rgba(184, 50, 216, 0.08) 29px 30px, transparent 31px 78px), + linear-gradient(90deg, transparent, rgba(8, 145, 178, 0.07), transparent); + --cyber-background-after-opacity: 0.18; + --cyber-background-after-blend: multiply; + --cyber-wash-bg: + radial-gradient(circle at 18% 44%, rgba(255, 255, 255, 0.28), rgba(255, 255, 255, 0.12) 36%, transparent 60%), + linear-gradient(90deg, rgba(255, 255, 255, 0.18) 0%, rgba(237, 248, 252, 0.1) 36%, rgba(255, 255, 255, 0.03) 68%, rgba(251, 247, 255, 0.16) 100%), + linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(248, 252, 255, 0.04) 58%, rgba(248, 252, 255, 0.72)); + --cyber-gridlines-bg: + linear-gradient(rgba(8, 145, 178, 0.055) 1px, transparent 1px), + linear-gradient(90deg, rgba(8, 145, 178, 0.045) 1px, transparent 1px); + --cyber-gridlines-opacity: 0.2; + --cyber-scanlines-bg: repeating-linear-gradient( + to bottom, + rgba(8, 35, 50, 0.035) 0, + rgba(8, 35, 50, 0.035) 1px, + transparent 1px, + transparent 4px + ); + --cyber-scanlines-opacity: 0.08; + --cyber-copy-aura: radial-gradient(circle at 28% 38%, rgba(255, 255, 255, 0.92), rgba(255, 255, 255, 0.38) 58%, transparent 78%); + --cyber-title-color: rgba(19, 34, 56, 0.98); + --cyber-description-color: rgba(50, 65, 88, 0.82); + --cyber-action-primary-color: #061722; + --cyber-action-secondary-bg: rgba(255, 255, 255, 0.62); + --cyber-action-secondary-hover-bg: rgba(8, 145, 178, 0.08); + --cyber-release-color: rgba(50, 65, 88, 0.68); + --cyber-scene-floor-bg: + radial-gradient(ellipse at 58% 84%, rgba(184, 50, 216, 0.16), transparent 18%), + radial-gradient(ellipse at 56% 84%, rgba(8, 145, 178, 0.14), transparent 32%), + repeating-radial-gradient(ellipse at 58% 84%, rgba(8, 145, 178, 0.08) 0 1px, transparent 1px 20px); + --cyber-scene-floor-opacity: 0.38; + --cyber-scene-foreground-bg: + linear-gradient(90deg, transparent 0 4%, rgba(8, 145, 178, 0.07) 4.1%, transparent 4.4%), + linear-gradient(180deg, transparent 0 88%, rgba(184, 50, 216, 0.06)); + --cyber-scene-foreground-opacity: 0.48; + --cyber-video-frame-bg: rgba(255, 255, 255, 0.7); + --cyber-video-content-bg: rgba(8, 20, 34, 0.9); + --cyber-card-text: rgba(19, 34, 56, 0.88); + --cyber-card-muted: rgba(67, 82, 105, 0.76); + --cyber-card-subtle: rgba(67, 82, 105, 0.64); + --cyber-card-inset: rgba(255, 255, 255, 0.62); + --cyber-feature-shell-bg: transparent; + --cyber-feature-rail-bg: transparent; + --cyber-feature-rail-shadow: + 0 0 0 1px rgba(8, 145, 178, 0.12) inset, + 0 -1px 0 rgba(8, 145, 178, 0.18), + 0 1px 0 rgba(8, 145, 178, 0.16); + --cyber-feature-divider: rgba(8, 145, 178, 0.18); + --cyber-feature-title: rgba(19, 34, 56, 0.94); + --cyber-feature-text: rgba(67, 82, 105, 0.72); +} + .cyber-panel { position: relative; border: 1px solid var(--cyber-border-cyan); - background: - linear-gradient(135deg, rgba(5, 14, 31, 0.9), rgba(3, 10, 22, 0.64)); + background: var(--cyber-panel-bg); clip-path: polygon( var(--cyber-frame-cut) 0, 100% 0, @@ -33,9 +234,7 @@ 0 100%, 0 var(--cyber-frame-cut) ); - box-shadow: - 0 0 0 1px rgba(47, 125, 255, 0.12) inset, - 0 0 24px rgba(0, 234, 255, 0.12); + box-shadow: var(--cyber-panel-shadow); } .cyber-hero { @@ -53,12 +252,11 @@ isolation: isolate; overflow: clip; color: var(--cyber-text); - background: - radial-gradient(circle at 72% 24%, rgba(0, 234, 255, 0.15), transparent 34%), - linear-gradient(180deg, var(--cyber-bg-0), var(--cyber-bg-1) 58%, var(--cyber-bg-0)); + background: var(--cyber-hero-bg); } .cyber-hero__background, +.cyber-hero__monterey, .cyber-hero__wash, .cyber-hero__gridlines, .cyber-hero__scanlines { @@ -67,63 +265,134 @@ pointer-events: none; } +.cyber-hero__monterey { + z-index: -5; + overflow: hidden; + background: var(--cyber-monterey-bg); +} + +.cyber-hero__monterey::before, +.cyber-hero__monterey::after { + content: ""; + position: absolute; + inset: 0; + pointer-events: none; +} + +.cyber-hero__monterey::before { + z-index: 2; + background: var(--cyber-monterey-before-bg); +} + +.cyber-hero__monterey::after { + z-index: 3; + background: var(--cyber-monterey-after-bg); +} + +.cyber-hero__monterey-canvas { + position: absolute; + inset: 0; + z-index: 1; + width: 100%; + height: 100%; + opacity: 0; + filter: var(--cyber-monterey-canvas-filter); + mix-blend-mode: var(--cyber-monterey-canvas-blend); + transform: scale(1.035); + transition: opacity 1.65s cubic-bezier(0.22, 0.72, 0.2, 1); +} + +.cyber-hero__monterey--live .cyber-hero__monterey-canvas { + opacity: var(--cyber-monterey-canvas-opacity); +} + +.cyber-hero__monterey a[data-n] { + left: 14px !important; + right: auto !important; + bottom: 12px !important; + z-index: 5 !important; + padding: 0 !important; + color: rgba(244, 247, 255, 0.46) !important; + font: 700 10px/1 var(--font-family-mono, monospace) !important; + letter-spacing: 0.14em !important; + opacity: 0.32 !important; + text-shadow: none !important; +} + .cyber-hero__background { z-index: -4; inset: -40px -40px -80px; - background-image: url("~/assets/images/hero/backgrounds/cyber-city-desktop-v1.webp"); - background-size: cover; - background-position: 58% top; - opacity: 1; + background: var(--cyber-background-bg); + background-size: + auto, + auto, + 220px 100%, + auto; + background-position: + 0 0, + center, + 24px 0, + center; + opacity: var(--cyber-background-opacity); transform: translate3d( - calc(var(--hero-pointer-x) * -8px), - calc(var(--hero-scroll) * 0.035px + var(--hero-pointer-y) * -5px), + 0, + calc(var(--hero-scroll) * 0.035px), 0 ) scale(1.035); will-change: transform; } +.cyber-hero__background::before { + content: ""; + position: absolute; + inset: 12% 0 0; + background: var(--cyber-background-before-bg); + background-size: + auto, + auto, + 190px 100%, + 148px 100%, + 116px 100%; + background-position: + 0 0, + 0 0, + 16px bottom, + 72px bottom, + 120px bottom; + opacity: var(--cyber-background-before-opacity); + mix-blend-mode: var(--cyber-background-before-blend); + mask-image: linear-gradient(180deg, transparent 0, black 22%, black 78%, transparent 100%); +} + .cyber-hero__background::after { content: ""; position: absolute; inset: 0; - background-image: url("~/assets/images/hero/backgrounds/cyber-city-desktop-v1.webp"); - background-size: cover; - background-position: right top; - opacity: 0.78; - transform: scaleX(-1); - filter: saturate(1.08) contrast(1.12) brightness(0.72); - mix-blend-mode: screen; - mask-image: linear-gradient(90deg, black 0 16%, rgba(0, 0, 0, 0.72) 38%, transparent 64%); + background: var(--cyber-background-after-bg); + opacity: var(--cyber-background-after-opacity); + mix-blend-mode: var(--cyber-background-after-blend); + mask-image: + linear-gradient(180deg, transparent 0 10%, black 22%, black 82%, transparent 100%), + linear-gradient(90deg, transparent 0 8%, black 24%, black 94%, transparent 100%); } .cyber-hero__wash { z-index: -3; - background: - radial-gradient(circle at 18% 44%, rgba(2, 5, 13, 0.48), rgba(2, 5, 13, 0.22) 34%, transparent 58%), - linear-gradient(90deg, rgba(2, 5, 13, 0.42) 0%, rgba(2, 5, 13, 0.28) 34%, rgba(2, 5, 13, 0.08) 66%, rgba(2, 5, 13, 0.3) 100%), - linear-gradient(180deg, rgba(2, 5, 13, 0.18), rgba(2, 5, 13, 0.08) 58%, rgba(2, 5, 13, 0.92)); + background: var(--cyber-wash-bg); } .cyber-hero__gridlines { z-index: -2; - opacity: 0.34; - background-image: - linear-gradient(rgba(0, 234, 255, 0.055) 1px, transparent 1px), - linear-gradient(90deg, rgba(0, 234, 255, 0.045) 1px, transparent 1px); + opacity: var(--cyber-gridlines-opacity); + background-image: var(--cyber-gridlines-bg); background-size: 72px 72px; mask-image: linear-gradient(180deg, transparent, black 12%, black 72%, transparent); } .cyber-hero__scanlines { z-index: 8; - opacity: 0.11; - background-image: repeating-linear-gradient( - to bottom, - rgba(255, 255, 255, 0.08) 0, - rgba(255, 255, 255, 0.08) 1px, - transparent 1px, - transparent 4px - ); + opacity: var(--cyber-scanlines-opacity); + background-image: var(--cyber-scanlines-bg); mix-blend-mode: overlay; } @@ -131,7 +400,8 @@ position: relative; z-index: 2; width: min(1580px, calc(100vw - 56px)); - max-width: none !important; + max-width: min(1580px, calc(100vw - 56px)) !important; + margin-inline: auto; } .cyber-hero__layout { @@ -144,18 +414,13 @@ .cyber-hero__copy { position: relative; z-index: 6; - width: min(620px, 41vw); - max-width: 620px; + width: min(760px, 49vw); + max-width: 760px; padding: 24px 0 24px; } .cyber-hero__copy::before { - content: ""; - position: absolute; - inset: -64px -64px -42px -36px; - z-index: -1; - background: radial-gradient(circle at 28% 38%, rgba(2, 5, 13, 0.82), rgba(2, 5, 13, 0.36) 62%, transparent 78%); - pointer-events: none; + display: none; } .cyber-hero__brand-lockup { @@ -186,14 +451,15 @@ .cyber-hero__title { margin: 0 0 22px; display: flex; - flex-direction: column; - flex-wrap: wrap; - gap: 0; - font-size: clamp(4.2rem, 6.3vw, 6.25rem); - line-height: 0.95; + flex-direction: row; + flex-wrap: nowrap; + gap: 0.18em; + font-size: clamp(2.55rem, 5.1vw, 5.7rem); + line-height: 1; font-weight: 900; letter-spacing: 0; - color: rgba(244, 247, 255, 0.96); + color: var(--cyber-title-color); + white-space: nowrap; } .cyber-hero__title-accent { @@ -220,7 +486,7 @@ .cyber-hero__description { max-width: 560px; margin: 0 0 30px; - color: rgba(222, 229, 255, 0.84); + color: var(--cyber-description-color); font-size: clamp(1rem, 1.08vw, 1.22rem); line-height: 1.7; } @@ -253,7 +519,7 @@ } .cyber-hero__action--primary.v-btn { - color: var(--cyber-bg-0) !important; + color: var(--cyber-action-primary-color) !important; background: linear-gradient(135deg, var(--cyber-cyan), var(--cyber-magenta)) !important; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.16) inset, @@ -265,41 +531,28 @@ .cyber-hero__action--docs.v-btn { color: var(--cyber-text) !important; border-color: rgba(0, 234, 255, 0.46) !important; - background: rgba(3, 10, 22, 0.56) !important; + background: var(--cyber-action-secondary-bg) !important; } .cyber-hero__action--watch.v-btn:hover, .cyber-hero__action--docs.v-btn:hover { color: var(--cyber-cyan) !important; border-color: rgba(0, 234, 255, 0.74) !important; - background: rgba(0, 234, 255, 0.08) !important; + background: var(--cyber-action-secondary-hover-bg) !important; } .cyber-hero__terminal-note { - display: flex; + display: inline-flex; align-items: center; - justify-content: space-between; - gap: 16px; - width: min(100%, 560px); - min-height: 66px; - padding: 13px 18px; + justify-content: flex-start; + width: auto; + min-height: 0; + margin: 0; + padding: 7px 12px; color: var(--cyber-cyan); - text-decoration: none; font-family: var(--at-font-mono); font-size: 0.74rem; - line-height: 1.55; - transition: - border-color 0.18s ease, - color 0.18s ease, - box-shadow 0.18s ease; -} - -.cyber-hero__terminal-note:hover { - color: var(--cyber-amber); - border-color: rgba(255, 178, 56, 0.58); - box-shadow: - 0 0 0 1px rgba(255, 178, 56, 0.14) inset, - 0 0 28px rgba(255, 178, 56, 0.16); + line-height: 1.2; } .cyber-hero__terminal-lines { @@ -309,37 +562,39 @@ .cyber-hero__release { flex: 0 0 auto; - color: rgba(244, 247, 255, 0.62); + color: var(--cyber-release-color); white-space: nowrap; } +.cyber-hero__release-date { + color: var(--cyber-card-subtle); +} + .cyber-hero__scene { min-width: 0; - max-width: 1120px; + width: clamp(940px, 60vw, 1220px); + max-width: none; margin-left: clamp(-220px, -12vw, -130px); margin-top: -68px; margin-right: 0; } .cyber-scene { + --scene-video-left: 29.33%; + --scene-video-top: 30%; + --scene-video-width: 45.33%; + --scene-video-height: 25.5cqw; + --scene-platform-y: 82%; + position: relative; isolation: isolate; + container-type: inline-size; aspect-ratio: 16 / 9; min-height: 600px; - transform: - translate3d( - calc(var(--hero-pointer-x) * 12px), - calc(var(--hero-pointer-y) * 8px), - 0 - ) - rotateX(calc(var(--hero-tilt-y) * 0.65deg)) - rotateY(calc(var(--hero-tilt-x) * -0.9deg)); transform-style: preserve-3d; - will-change: transform; } .cyber-scene__floor, -.cyber-scene__connectors, .cyber-scene__robots, .cyber-scene__messages, .cyber-scene__foreground { @@ -350,30 +605,33 @@ .cyber-scene__floor { z-index: 0; - background: - radial-gradient(ellipse at 58% 84%, rgba(255, 43, 255, 0.38), transparent 20%), - radial-gradient(ellipse at 56% 84%, rgba(0, 234, 255, 0.27), transparent 36%), - repeating-radial-gradient(ellipse at 58% 84%, rgba(0, 234, 255, 0.2) 0 1px, transparent 1px 18px); - filter: blur(7px); - opacity: 0.95; + background: var(--cyber-scene-floor-bg); + filter: blur(8px); + opacity: var(--cyber-scene-floor-opacity); + mask-image: radial-gradient(ellipse at 58% 84%, black 0 26%, rgba(0, 0, 0, 0.52) 40%, transparent 62%); } -.cyber-scene__connectors { - z-index: 1; +.cyber-scene__floor::before { + content: ""; + position: absolute; + left: 37%; + right: 12%; + top: calc(var(--scene-platform-y) - 2.5%); + height: 9%; + background: + linear-gradient(90deg, transparent 0 9%, rgba(255, 178, 56, 0.34) 9.5% 36%, transparent 36.5% 48%, rgba(255, 178, 56, 0.3) 49% 86%, transparent 86.5%), + linear-gradient(90deg, transparent 0 8%, rgba(0, 234, 255, 0.26) 8.5% 42%, transparent 42.5% 48%, rgba(0, 234, 255, 0.22) 49% 88%, transparent 88.5%); + clip-path: polygon(8% 58%, 28% 28%, 43% 54%, 49% 54%, 68% 26%, 94% 58%, 92% 68%, 68% 40%, 50% 68%, 43% 68%, 28% 40%, 10% 68%); + filter: drop-shadow(0 0 16px rgba(255, 178, 56, 0.22)); + opacity: 0.72; } .cyber-scene__video { position: absolute; z-index: 3; - left: 24%; - top: 27%; - width: 59%; - transform: - translate3d( - calc(var(--hero-pointer-x) * 8px), - calc(var(--hero-pointer-y) * 5px), - 0 - ); + left: var(--scene-video-left); + top: var(--scene-video-top); + width: var(--scene-video-width); pointer-events: auto; } @@ -387,10 +645,10 @@ .cyber-scene__foreground { z-index: 6; - background: - linear-gradient(90deg, transparent 0 4%, rgba(0, 234, 255, 0.08) 4.1%, transparent 4.4%), - linear-gradient(180deg, transparent 0 88%, rgba(255, 43, 255, 0.08)); + background: var(--cyber-scene-foreground-bg); mix-blend-mode: screen; + opacity: var(--cyber-scene-foreground-opacity); + mask-image: linear-gradient(180deg, transparent 0 18%, black 28%, black 78%, transparent 100%); } .cyber-video-frame { @@ -399,7 +657,7 @@ position: relative; aspect-ratio: 16 / 9; border: 1px solid rgba(0, 234, 255, 0.66); - background: rgba(2, 6, 16, 0.82); + background: var(--cyber-video-frame-bg); clip-path: polygon(20px 0, 100% 0, 100% calc(100% - 20px), calc(100% - 20px) 100%, 0 100%, 0 20px); box-shadow: 0 0 0 1px rgba(47, 125, 255, 0.2) inset, @@ -442,7 +700,7 @@ z-index: 2; overflow: hidden; border-radius: var(--cyber-radius-sm); - background: rgba(2, 6, 16, 0.94); + background: var(--cyber-video-content-bg); clip-path: polygon(14px 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%, 0 14px); } @@ -452,7 +710,7 @@ border: 0; border-radius: 0; box-shadow: none; - background: rgba(2, 6, 16, 0.95); + background: var(--cyber-video-content-bg); } .cyber-video-frame__content .hero-video__player { @@ -514,14 +772,9 @@ position: absolute; left: calc(var(--agent-x) * 1%); top: calc(var(--agent-y) * 1%); - width: 168px; + width: 156px; transform: - translate3d(-50%, -50%, 0) - translate3d( - calc(var(--hero-pointer-x) * var(--agent-depth) * 18px), - calc(var(--hero-pointer-y) * var(--agent-depth) * 14px), - 0 - ) + translate3d(-50%, -100%, 0) scale(var(--agent-scale)); transform-origin: center bottom; transition: filter 0.2s ease; @@ -546,16 +799,17 @@ .cyber-agent__float { position: relative; + transform-origin: center bottom; animation: cyberRobotBob calc(5.2s + var(--agent-depth) * 1.8s) ease-in-out infinite; animation-delay: calc(var(--agent-depth) * -2.4s); } .cyber-agent__contact { position: absolute; - left: 18%; - right: 18%; - bottom: -8px; - height: 22px; + left: 17%; + right: 17%; + bottom: 18px; + height: 14px; border-radius: 50%; background: var(--agent-accent-soft); filter: blur(10px); @@ -567,10 +821,12 @@ display: block; width: 100%; height: auto; + transform: scaleX(var(--agent-face)) rotate(var(--agent-lean)); + transform-origin: center bottom; user-select: none; filter: - drop-shadow(0 14px 24px rgba(0, 0, 0, 0.54)) - drop-shadow(0 0 16px var(--agent-accent-soft)); + drop-shadow(0 12px 20px rgba(0, 0, 0, 0.52)) + drop-shadow(0 0 14px var(--agent-accent-soft)); } .cyber-agent__eyes { @@ -591,33 +847,49 @@ .cyber-agent__card { position: absolute; z-index: 4; - top: 20%; - left: 72%; - width: 190px; - padding: 11px 13px; - color: rgba(244, 247, 255, 0.84); + top: 4%; + left: 66%; + width: 274px; + padding: 12px 13px; + color: var(--cyber-card-text); font-family: var(--at-font-mono); - font-size: 0.62rem; - line-height: 1.45; + font-size: 1.08rem; + line-height: 1.28; border-color: color-mix(in srgb, var(--agent-accent), transparent 44%); box-shadow: - 0 0 0 1px rgba(255, 255, 255, 0.06) inset, + 0 0 0 1px var(--cyber-card-inset) inset, 0 0 24px var(--agent-accent-soft); } .cyber-agent--card-left .cyber-agent__card { - right: 72%; + right: 64%; left: auto; } .cyber-agent--card-bottom .cyber-agent__card { - top: 78%; + top: calc(100% + 8px); left: 50%; + width: 200px; + padding: 11px 12px; + font-size: 0.74rem; transform: translateX(-50%); } +.cyber-agent[data-agent="docs"].cyber-agent--card-bottom .cyber-agent__card, +.cyber-agent[data-agent="ops"].cyber-agent--card-bottom .cyber-agent__card, +.cyber-agent[data-agent="security"].cyber-agent--card-bottom .cyber-agent__card, +.cyber-agent[data-agent="fixer"].cyber-agent--card-bottom .cyber-agent__card { + top: calc(100% + 10px); + opacity: 0.82; +} + +.cyber-agent--card-bottom .cyber-agent__status { + margin-top: 5px; + justify-content: center; +} + .cyber-agent__label { - margin-bottom: 6px; + margin-bottom: 7px; color: var(--agent-accent); font-weight: 800; text-transform: uppercase; @@ -626,7 +898,7 @@ .cyber-agent__tasks { display: grid; - gap: 3px; + gap: 4px; margin: 0; padding: 0; list-style: none; @@ -634,8 +906,8 @@ .cyber-agent__tasks li { position: relative; - padding-left: 12px; - color: rgba(222, 229, 255, 0.72); + padding-left: 15px; + color: var(--cyber-card-muted); } .cyber-agent__tasks li::before { @@ -643,17 +915,17 @@ position: absolute; left: 0; top: 0.52em; - width: 5px; - height: 5px; + width: 6px; + height: 6px; border: 1px solid var(--agent-accent); transform: rotate(45deg); } .cyber-agent__status { display: flex; - gap: 5px; + gap: 6px; margin-top: 7px; - color: rgba(222, 229, 255, 0.62); + color: var(--cyber-card-subtle); } .cyber-agent__status strong { @@ -661,6 +933,82 @@ font-weight: 800; } +.cyber-agent[data-agent="planner"] { + z-index: 7; + width: 150px; + transform: + translate3d(-69%, -56%, 0) + scale(var(--agent-scale)); +} + +.cyber-agent[data-agent="planner"] .cyber-agent__float { + transform-origin: center 80%; +} + +.cyber-agent[data-agent="planner"] .cyber-agent__image { + transform: + scaleX(1) + rotate(-4deg); +} + +.cyber-agent[data-agent="planner"] .cyber-agent__contact { + left: 23%; + right: 16%; + bottom: 36%; + height: 12px; +} + +.cyber-agent[data-agent="planner"] .cyber-agent__card { + display: block; + top: 10%; + right: 106%; + left: auto; + width: 258px; + padding: 11px 12px; + font-size: 1.04rem; + transform: translate(-28px, -8%); +} + +.cyber-agent[data-agent="lead"] .cyber-agent__card { + top: -14%; + right: 104%; + left: auto; + width: 274px; + transform: translateY(-12px); +} + +.cyber-agent[data-agent="developer"] .cyber-agent__card { + top: -14%; + left: 98%; + width: 274px; + transform: translateY(-12px); +} + +@media (min-width: 1101px) { + .cyber-agent[data-agent="planner"] { + left: calc(var(--agent-x) * 1% + 20px); + top: calc(var(--agent-y) * 1% - 26px); + } + + .cyber-agent[data-agent="lead"], + .cyber-agent[data-agent="developer"] { + top: calc(var(--agent-y) * 1% - 4px); + } + + .cyber-agent[data-agent="lead"] .cyber-agent__float, + .cyber-agent[data-agent="developer"] .cyber-agent__float { + top: 10px; + } + + .cyber-agent[data-agent="planner"] .cyber-agent__float { + top: 70px; + } +} + +.cyber-agent[data-agent="planner"] .cyber-agent__eyes { + display: none; +} + .cyber-agent--sending, .cyber-agent--receiving { filter: brightness(1.18); @@ -672,96 +1020,73 @@ animation: cyberPanelPulse 1.3s ease-in-out infinite; } -.cyber-connectors { - display: block; - width: 100%; - height: 100%; - overflow: visible; -} - -.cyber-connectors__path, -.cyber-connectors__path-glow { - fill: none; -} - -.cyber-connectors__path { - stroke: rgba(0, 234, 255, 0.36); - stroke-width: 1.2; - stroke-linecap: round; - stroke-linejoin: round; -} - -.cyber-connectors__path-glow { - stroke: rgba(0, 234, 255, 0.14); - stroke-width: 6; - stroke-linecap: round; - stroke-linejoin: round; -} - -.cyber-connectors__path--magenta { - stroke: rgba(255, 43, 255, 0.34); -} - -.cyber-connectors__path-glow--magenta { - stroke: rgba(255, 43, 255, 0.16); -} - -.cyber-connectors__path--amber { - stroke: rgba(255, 178, 56, 0.34); -} - -.cyber-connectors__path-glow--amber { - stroke: rgba(255, 178, 56, 0.16); -} - -.cyber-connectors__path--active { - stroke: rgba(255, 43, 255, 0.92); - stroke-width: 1.8; -} - -.cyber-connectors__path-glow--active { - stroke: rgba(255, 43, 255, 0.38); - stroke-width: 9; -} - -.cyber-connectors__packet { - fill: var(--cyber-cyan); - filter: drop-shadow(0 0 8px rgba(0, 234, 255, 0.86)); - opacity: 0.74; -} - -.cyber-connectors__packet--magenta { - fill: var(--cyber-magenta); - filter: drop-shadow(0 0 8px rgba(255, 43, 255, 0.86)); -} - -.cyber-connectors__packet--amber { - fill: var(--cyber-amber); - filter: drop-shadow(0 0 8px rgba(255, 178, 56, 0.86)); -} - -.cyber-connectors__packet--active { - r: 5; - opacity: 1; -} - .cyber-message { + --speech-fill: rgba(255, 246, 159, 0.92); + --speech-glow: rgba(255, 215, 0, 0.18); + position: absolute; left: calc(var(--bubble-x) * 1%); top: calc(var(--bubble-y) * 1%); - max-width: 196px; - padding: 10px 13px; - transform: translate3d(-50%, -50%, 0); - color: var(--cyber-cyan); + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + max-width: 168px; + min-height: 30px; + padding: 7px 11px; + color: #0b1020; font-family: var(--at-font-mono); - font-size: 0.72rem; - line-height: 1.35; - text-shadow: 0 0 12px rgba(0, 234, 255, 0.32); + font-size: 0.64rem; + font-weight: 900; + line-height: 1.1; + letter-spacing: 0; + text-align: center; + white-space: nowrap; + background: + radial-gradient(circle at 28% 24%, rgba(255, 255, 255, 0.9), var(--speech-fill) 64%, rgba(255, 224, 88, 0.92) 100%); + border: 2px solid #050816; + border-radius: 999px; + box-shadow: + 0 0 0 1px rgba(255, 215, 0, 0.36), + 0 5px 0 rgba(0, 0, 0, 0.2), + 0 0 14px var(--speech-glow); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.62); + transform: translate3d(-50%, -50%, 0) rotate(-4deg); + transform-origin: center bottom; + animation: cyberSpeechFloat 2.8s ease-in-out 0.45s infinite; +} + +.cyber-message::before, +.cyber-message::after { + position: absolute; + top: auto; + right: 42%; + content: ""; + clip-path: polygon(0 0, 100% 0, 50% 100%); + transform: none; +} + +.cyber-message::before { + bottom: -26px; + width: 22px; + height: 27px; + background: #050816; +} + +.cyber-message::after { + bottom: -20px; + width: 16px; + height: 21px; + background: rgba(255, 226, 78, 0.96); } .cyber-message--receiver { - color: var(--cyber-amber); - border-color: rgba(255, 178, 56, 0.5); + --speech-fill: rgba(198, 249, 255, 0.94); + --speech-glow: rgba(0, 234, 255, 0.18); +} + +.cyber-message--receiver::after { + background: rgba(198, 249, 255, 0.96); } .cyber-message--static { @@ -772,25 +1097,289 @@ .cyber-bubble-enter-active, .cyber-bubble-leave-active { transition: - opacity 0.24s ease, - transform 0.24s ease; + opacity 0.22s ease, + filter 0.22s ease; +} + +.cyber-bubble-enter-active { + animation: cyberSpeechPop 0.46s cubic-bezier(0.18, 0.9, 0.2, 1.22); } .cyber-bubble-enter-from, .cyber-bubble-leave-to { opacity: 0; - transform: translate3d(-50%, calc(-50% + 10px), 0); + filter: blur(2px); +} + +.cyber-bubble-leave-active { + animation: cyberSpeechExit 0.2s ease forwards; +} + +@keyframes cyberSpeechPop { + 0% { + opacity: 0; + transform: translate3d(-50%, calc(-50% + 12px), 0) scale(0.54) rotate(-12deg); + } + + 62% { + opacity: 1; + transform: translate3d(-50%, calc(-50% - 2px), 0) scale(1.08) rotate(-3deg); + } + + 100% { + opacity: 1; + transform: translate3d(-50%, -50%, 0) scale(1) rotate(-4deg); + } +} + +@keyframes cyberSpeechFloat { + 0%, + 100% { + transform: translate3d(-50%, -50%, 0) rotate(-4deg); + } + + 50% { + transform: translate3d(-50%, calc(-50% - 3px), 0) rotate(-3deg); + } +} + +@keyframes cyberSpeechExit { + to { + opacity: 0; + transform: translate3d(-50%, calc(-50% + 8px), 0) scale(0.86) rotate(-8deg); + } +} + +@keyframes cyberFeatureReviewerSpeechFloat { + 0%, + 100% { + transform: translateX(calc(50% + var(--reviewer-bubble-center-shift, 0px))) translate3d(0, 0, 0) rotate(-4deg); + } + + 50% { + transform: translateX(calc(50% + var(--reviewer-bubble-center-shift, 0px))) translate3d(0, -3px, 0) rotate(-3deg); + } +} + +@keyframes cyberFeatureReviewerSpeechPop { + 0% { + opacity: 0; + transform: translateX(calc(50% + var(--reviewer-bubble-center-shift, 0px))) translate3d(12px, 12px, 0) scale(0.54) rotate(-12deg); + } + + 62% { + opacity: 1; + transform: translateX(calc(50% + var(--reviewer-bubble-center-shift, 0px))) translate3d(-2px, -3px, 0) scale(1.08) rotate(-3deg); + } + + 100% { + opacity: 1; + transform: translateX(calc(50% + var(--reviewer-bubble-center-shift, 0px))) translate3d(0, 0, 0) scale(1) rotate(-4deg); + } +} + +@keyframes cyberFeatureReviewerSpeechExit { + to { + opacity: 0; + transform: translateX(calc(50% + var(--reviewer-bubble-center-shift, 0px))) translate3d(8px, 8px, 0) scale(0.86) rotate(-8deg); + } +} + +.cyber-feature-rail-shell { + position: relative; + z-index: 7; + margin: 28px auto 0; + width: min(1540px, 96%); +} + +.cyber-feature-rail-shell::before { + content: ""; + position: absolute; + z-index: -1; + inset: -118px -3vw -96px; + pointer-events: none; + background: var(--cyber-feature-shell-bg); + opacity: 0.86; + mask-image: radial-gradient(ellipse at 50% 54%, black 0 48%, rgba(0, 0, 0, 0.5) 62%, transparent 78%); } .cyber-feature-rail { position: relative; - z-index: 7; + z-index: 1; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0; - margin: 28px auto 0; - width: min(1540px, 96%); + width: 100%; padding: 17px 18px; + background: var(--cyber-feature-rail-bg); + box-shadow: var(--cyber-feature-rail-shadow); +} + +.cyber-feature-rail__collaboration { + position: absolute; + left: 50%; + bottom: calc(100% - 16px); + z-index: 2; + width: clamp(132px, 11vw, 168px); + height: auto; + pointer-events: none; + user-select: none; + filter: + drop-shadow(0 18px 24px rgba(0, 0, 0, 0.5)) + drop-shadow(0 0 20px rgba(120, 58, 255, 0.18)) + drop-shadow(0 0 18px rgba(255, 45, 64, 0.14)); + transform: translate3d(-50%, 0, 0); +} + +.cyber-feature-rail__reviewer { + --reviewer-robot-width: clamp(76px, 5.4vw, 96px); + + position: absolute; + z-index: 3; + right: clamp(52px, 5vw, 82px); + bottom: calc(100% - 6px); + display: flex; + align-items: flex-end; + gap: 8px; + pointer-events: none; +} + +.cyber-feature-rail__reviewer--active .cyber-feature-rail__reviewer-card { + border-color: rgba(0, 234, 255, 0.86); + box-shadow: + 0 0 0 1px rgba(255, 255, 255, 0.08) inset, + 0 0 28px rgba(0, 234, 255, 0.26); +} + +.cyber-feature-rail__reviewer--active .cyber-feature-rail__robot { + filter: + drop-shadow(0 16px 24px rgba(0, 0, 0, 0.5)) + drop-shadow(0 0 22px rgba(0, 234, 255, 0.36)); +} + +.cyber-feature-rail__reviewer-bubble { + --reviewer-bubble-center-shift: 3px; + + left: auto; + top: auto; + right: calc(var(--reviewer-robot-width) / 2); + bottom: calc(100% + 10px); + z-index: 6; + width: max-content; + max-width: 158px; + white-space: normal; + overflow-wrap: anywhere; + text-wrap: balance; + transform: translateX(calc(50% + var(--reviewer-bubble-center-shift))) translate3d(0, 0, 0) rotate(-4deg); + transform-origin: center bottom; + animation: cyberFeatureReviewerSpeechFloat 2.8s ease-in-out 0.45s infinite; +} + +.cyber-feature-bubble-enter-active, +.cyber-feature-bubble-leave-active { + transition: + opacity 0.22s ease, + filter 0.22s ease; +} + +.cyber-feature-bubble-enter-active { + animation: cyberFeatureReviewerSpeechPop 0.46s cubic-bezier(0.18, 0.9, 0.2, 1.22); +} + +.cyber-feature-bubble-enter-from, +.cyber-feature-bubble-leave-to { + opacity: 0; + filter: blur(2px); +} + +.cyber-feature-bubble-leave-active { + animation: cyberFeatureReviewerSpeechExit 0.2s ease forwards; +} + +.cyber-feature-rail__robot { + position: relative; + top: 9px; + width: var(--reviewer-robot-width); + height: auto; + transform: rotate(3deg); + transform-origin: center bottom; + filter: + drop-shadow(0 14px 22px rgba(0, 0, 0, 0.48)) + drop-shadow(0 0 16px rgba(0, 234, 255, 0.22)); + pointer-events: none; + user-select: none; + animation: cyberRobotBob 6.4s ease-in-out infinite; +} + +.cyber-feature-rail__reviewer-card { + position: relative; + width: clamp(146px, 10.2vw, 160px); + padding: 7px 8px; + color: var(--cyber-card-text); + font-family: var(--at-font-mono); + font-size: clamp(0.48rem, 0.46vw, 0.54rem); + line-height: 1.28; + border-color: rgba(0, 234, 255, 0.52); + box-shadow: + 0 0 0 1px var(--cyber-card-inset) inset, + 0 0 24px rgba(0, 234, 255, 0.18); + transform: translateY(-34px); +} + +.cyber-feature-rail__reviewer-card::after { + content: ""; + position: absolute; + left: calc(100% - 1px); + top: 56%; + width: 13px; + height: 1px; + background: linear-gradient(90deg, rgba(0, 234, 255, 0.72), transparent); + box-shadow: 0 0 12px rgba(0, 234, 255, 0.3); +} + +.cyber-feature-rail__reviewer-label { + margin-bottom: 5px; + color: var(--cyber-cyan); + font-weight: 800; + text-transform: uppercase; + letter-spacing: 0.07em; +} + +.cyber-feature-rail__reviewer-tasks { + display: grid; + gap: 3px; + margin: 0; + padding: 0; + list-style: none; +} + +.cyber-feature-rail__reviewer-tasks li { + position: relative; + padding-left: 12px; + color: var(--cyber-card-muted); +} + +.cyber-feature-rail__reviewer-tasks li::before { + content: ""; + position: absolute; + left: 0; + top: 0.52em; + width: 5px; + height: 5px; + border: 1px solid var(--cyber-cyan); + transform: rotate(45deg); +} + +.cyber-feature-rail__reviewer-status { + display: flex; + gap: 5px; + margin-top: 5px; + color: var(--cyber-card-subtle); +} + +.cyber-feature-rail__reviewer-status strong { + color: var(--cyber-cyan); + font-weight: 800; } .cyber-feature-rail__item { @@ -800,7 +1389,7 @@ gap: 12px; min-width: 0; padding: 0 18px; - border-right: 1px solid rgba(0, 234, 255, 0.16); + border-right: 1px solid var(--cyber-feature-divider); } .cyber-feature-rail__item:last-child { @@ -820,13 +1409,13 @@ .cyber-feature-rail__title { margin-bottom: 3px; - color: rgba(244, 247, 255, 0.94); + color: var(--cyber-feature-title); font-weight: 800; font-size: 0.92rem; } .cyber-feature-rail__text { - color: rgba(222, 229, 255, 0.62); + color: var(--cyber-feature-text); font-size: 0.8rem; line-height: 1.45; } @@ -834,10 +1423,10 @@ @keyframes cyberRobotBob { 0%, 100% { - transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) rotate(-0.55deg); } 50% { - transform: translate3d(0, -6px, 0); + transform: translate3d(1px, 0, 0) rotate(0.75deg); } } @@ -874,12 +1463,12 @@ @media (max-width: 1280px) { .cyber-hero__layout { - grid-template-columns: minmax(380px, 0.74fr) minmax(0, 1.26fr); + grid-template-columns: minmax(500px, 0.9fr) minmax(0, 1.1fr); gap: 20px; } .cyber-hero__title { - font-size: clamp(3.35rem, 5.2vw, 5.6rem); + font-size: clamp(3rem, 4.6vw, 4.8rem); } .cyber-scene { @@ -887,8 +1476,8 @@ } .cyber-agent__card { - width: 158px; - font-size: 0.56rem; + width: 274px; + font-size: 1.08rem; } } @@ -907,6 +1496,12 @@ max-width: 720px; } + .cyber-hero__scene { + width: 100%; + max-width: 960px; + margin: 24px auto 0; + } + .cyber-scene { min-height: 620px; max-width: 960px; @@ -917,12 +1512,13 @@ left: calc(var(--agent-tablet-x) * 1%); top: calc(var(--agent-tablet-y) * 1%); transform: - translate3d(-50%, -50%, 0) - translate3d( - calc(var(--hero-pointer-x) * var(--agent-tablet-depth) * 14px), - calc(var(--hero-pointer-y) * var(--agent-tablet-depth) * 10px), - 0 - ) + translate3d(-50%, -100%, 0) + scale(var(--agent-tablet-scale)); + } + + .cyber-agent[data-agent="planner"] { + transform: + translate3d(-66%, -56%, 0) scale(var(--agent-tablet-scale)); } @@ -930,9 +1526,34 @@ display: none; } + .cyber-feature-rail-shell { + width: 100%; + } + .cyber-feature-rail { grid-template-columns: repeat(3, minmax(0, 1fr)); - width: 100%; + } + + .cyber-feature-rail__collaboration { + left: 50%; + bottom: calc(100% - 14px); + width: 132px; + } + + .cyber-feature-rail__reviewer { + --reviewer-robot-width: 78px; + + right: 56px; + gap: 10px; + } + + .cyber-feature-rail__reviewer-card { + width: 220px; + font-size: 0.62rem; + } + + .cyber-feature-rail__robot { + width: var(--reviewer-robot-width); } .cyber-feature-rail__item:nth-child(3) { @@ -950,16 +1571,33 @@ } .cyber-hero__background { - background-image: url("~/assets/images/hero/backgrounds/cyber-city-mobile-v1.webp"); background-position: center top; - opacity: 0.76; + opacity: 0.82; transform: scale(1.02); } + .cyber-hero__monterey { + opacity: 0.58; + } + + .cyber-hero__monterey-canvas { + display: none; + } + .cyber-hero__container { width: min(100% - 32px, 680px); } + .cyber-hero__layout { + min-width: 0; + overflow: hidden; + } + + .cyber-hero__copy { + width: 100%; + max-width: 100%; + } + .cyber-hero__brand-lockup { margin-bottom: 28px; } @@ -997,20 +1635,25 @@ } .cyber-hero__terminal-note { - display: grid; - gap: 8px; + display: inline-flex; font-size: 0.68rem; } .cyber-scene { min-height: auto; aspect-ratio: auto; - padding: 90px 0 12px; + padding: 92px 0 12px; transform: none; } + .cyber-hero__scene { + width: 100%; + max-width: 100%; + margin-top: 18px; + overflow: hidden; + } + .cyber-scene__floor, - .cyber-scene__connectors, .cyber-scene__foreground { display: none; } @@ -1062,6 +1705,14 @@ padding: 16px; } + .cyber-feature-rail__collaboration { + display: none; + } + + .cyber-feature-rail__reviewer { + display: none; + } + .cyber-feature-rail__item { grid-template-columns: 42px minmax(0, 1fr); padding: 12px 0; @@ -1084,6 +1735,7 @@ } .cyber-hero__background, + .cyber-hero__monterey, .cyber-scene, .cyber-scene__video, .cyber-agent { diff --git a/landing/components/common/AppLogo.vue b/landing/components/common/AppLogo.vue index 41df1147..cd59e367 100644 --- a/landing/components/common/AppLogo.vue +++ b/landing/components/common/AppLogo.vue @@ -3,7 +3,7 @@ const { baseURL } = useRuntimeConfig().app;