Spaces:
Running
Running
Restore DNA helix as full-window landing hero background, drop fake HUD readout
Browse files
bioai-platform/frontend/src/app/page.tsx
CHANGED
|
@@ -4,7 +4,7 @@ import dynamic from 'next/dynamic';
|
|
| 4 |
import Link from 'next/link';
|
| 5 |
import { useRef } from 'react';
|
| 6 |
import { motion, useScroll, useTransform } from 'framer-motion';
|
| 7 |
-
import { ArrowRight, Database, FlowArrow, Brain,
|
| 8 |
|
| 9 |
const DNAHelix = dynamic(
|
| 10 |
() => import('@/components/three/DNAHelix'),
|
|
@@ -52,6 +52,7 @@ export default function LandingPage() {
|
|
| 52 |
|
| 53 |
const contentY = useTransform(scrollYProgress, [0, 1], ['0%', '12%']);
|
| 54 |
const contentOpacity = useTransform(scrollYProgress, [0, 0.6], [1, 0.2]);
|
|
|
|
| 55 |
|
| 56 |
return (
|
| 57 |
<main className="relative bg-void text-text-primary overflow-x-hidden">
|
|
@@ -85,7 +86,14 @@ export default function LandingPage() {
|
|
| 85 |
ref={heroRef}
|
| 86 |
className="relative min-h-[100dvh] flex items-center overflow-hidden"
|
| 87 |
>
|
| 88 |
-
<div
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
<div
|
| 90 |
className="absolute inset-0"
|
| 91 |
style={{
|
|
@@ -93,13 +101,16 @@ export default function LandingPage() {
|
|
| 93 |
'radial-gradient(ellipse 55% 55% at 78% 45%, rgba(45,212,191,0.06) 0%, transparent 70%), radial-gradient(ellipse 45% 45% at 12% 70%, rgba(139,147,214,0.05) 0%, transparent 70%)',
|
| 94 |
}}
|
| 95 |
/>
|
| 96 |
-
|
|
|
|
|
|
|
|
|
|
| 97 |
|
| 98 |
<motion.div
|
| 99 |
style={{ y: contentY, opacity: contentOpacity }}
|
| 100 |
-
className="relative z-10 w-full max-w-6xl mx-auto px-6 py-24
|
| 101 |
>
|
| 102 |
-
<div>
|
| 103 |
<motion.h1
|
| 104 |
initial={{ opacity: 0, y: 24 }}
|
| 105 |
animate={{ opacity: 1, y: 0 }}
|
|
@@ -147,37 +158,6 @@ export default function LandingPage() {
|
|
| 147 |
<span>8 services online 路 results streamed live</span>
|
| 148 |
</motion.div>
|
| 149 |
</div>
|
| 150 |
-
|
| 151 |
-
<div className="relative">
|
| 152 |
-
<div className="relative rounded-2xl border border-glass-border bg-surface-0 overflow-hidden shadow-glass-md aspect-[4/5] max-h-[560px]">
|
| 153 |
-
<span className="absolute top-3 left-3 w-4 h-4 border-t border-l border-accent-cyan/40 z-20" />
|
| 154 |
-
<span className="absolute top-3 right-3 w-4 h-4 border-t border-r border-accent-cyan/40 z-20" />
|
| 155 |
-
<span className="absolute bottom-3 left-3 w-4 h-4 border-b border-l border-accent-cyan/40 z-20" />
|
| 156 |
-
<span className="absolute bottom-3 right-3 w-4 h-4 border-b border-r border-accent-cyan/40 z-20" />
|
| 157 |
-
|
| 158 |
-
<div className="absolute top-0 inset-x-0 z-10 h-11 border-b border-glass-border flex items-center justify-between px-4 bg-surface-1/80 backdrop-blur">
|
| 159 |
-
<span className="text-[10px] font-mono text-text-muted">P01162 路 ALPHA-LACTALBUMIN</span>
|
| 160 |
-
<span className="flex items-center gap-1.5 text-[10px] font-mono text-accent-cyan">
|
| 161 |
-
<span className="w-1 h-1 rounded-full bg-accent-cyan animate-pulse" />
|
| 162 |
-
SIGNAL
|
| 163 |
-
</span>
|
| 164 |
-
</div>
|
| 165 |
-
|
| 166 |
-
<div className="absolute inset-0 z-0 pt-11 pb-10">
|
| 167 |
-
<DNAHelix className="w-full h-full" />
|
| 168 |
-
</div>
|
| 169 |
-
|
| 170 |
-
<div className="absolute inset-0 z-[5] overflow-hidden pointer-events-none">
|
| 171 |
-
<div className="h-[30%] w-full bg-gradient-to-b from-transparent via-accent-cyan/10 to-transparent animate-scan" />
|
| 172 |
-
</div>
|
| 173 |
-
|
| 174 |
-
<div className="absolute bottom-0 inset-x-0 z-10 border-t border-glass-border bg-surface-1/80 backdrop-blur px-4 py-2.5 flex items-center justify-between gap-2">
|
| 175 |
-
<span className="text-[10px] font-mono text-text-muted">E-value 1e-82</span>
|
| 176 |
-
<span className="text-[10px] font-mono text-accent-amber">42% identity</span>
|
| 177 |
-
<span className="text-[10px] font-mono text-accent-purple">AF 路 Q5XXK5</span>
|
| 178 |
-
</div>
|
| 179 |
-
</div>
|
| 180 |
-
</div>
|
| 181 |
</motion.div>
|
| 182 |
|
| 183 |
<motion.div
|
|
|
|
| 4 |
import Link from 'next/link';
|
| 5 |
import { useRef } from 'react';
|
| 6 |
import { motion, useScroll, useTransform } from 'framer-motion';
|
| 7 |
+
import { ArrowRight, Database, FlowArrow, Brain, CaretDown as ChevronDown } from '@phosphor-icons/react';
|
| 8 |
|
| 9 |
const DNAHelix = dynamic(
|
| 10 |
() => import('@/components/three/DNAHelix'),
|
|
|
|
| 52 |
|
| 53 |
const contentY = useTransform(scrollYProgress, [0, 1], ['0%', '12%']);
|
| 54 |
const contentOpacity = useTransform(scrollYProgress, [0, 0.6], [1, 0.2]);
|
| 55 |
+
const helixY = useTransform(scrollYProgress, [0, 1], ['0%', '22%']);
|
| 56 |
|
| 57 |
return (
|
| 58 |
<main className="relative bg-void text-text-primary overflow-x-hidden">
|
|
|
|
| 86 |
ref={heroRef}
|
| 87 |
className="relative min-h-[100dvh] flex items-center overflow-hidden"
|
| 88 |
>
|
| 89 |
+
<motion.div
|
| 90 |
+
style={{ y: helixY }}
|
| 91 |
+
className="absolute inset-0 z-0 pointer-events-none"
|
| 92 |
+
>
|
| 93 |
+
<div className="absolute inset-0 opacity-50">
|
| 94 |
+
<DNAHelix className="w-full h-full" />
|
| 95 |
+
</div>
|
| 96 |
+
|
| 97 |
<div
|
| 98 |
className="absolute inset-0"
|
| 99 |
style={{
|
|
|
|
| 101 |
'radial-gradient(ellipse 55% 55% at 78% 45%, rgba(45,212,191,0.06) 0%, transparent 70%), radial-gradient(ellipse 45% 45% at 12% 70%, rgba(139,147,214,0.05) 0%, transparent 70%)',
|
| 102 |
}}
|
| 103 |
/>
|
| 104 |
+
|
| 105 |
+
<div className="absolute inset-0 bg-gradient-to-r from-void via-void/55 to-transparent" />
|
| 106 |
+
<div className="absolute inset-0 bg-gradient-to-b from-void/70 via-transparent to-void/70" />
|
| 107 |
+
</motion.div>
|
| 108 |
|
| 109 |
<motion.div
|
| 110 |
style={{ y: contentY, opacity: contentOpacity }}
|
| 111 |
+
className="relative z-10 w-full max-w-6xl mx-auto px-6 py-24"
|
| 112 |
>
|
| 113 |
+
<div className="max-w-3xl">
|
| 114 |
<motion.h1
|
| 115 |
initial={{ opacity: 0, y: 24 }}
|
| 116 |
animate={{ opacity: 1, y: 0 }}
|
|
|
|
| 158 |
<span>8 services online 路 results streamed live</span>
|
| 159 |
</motion.div>
|
| 160 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 161 |
</motion.div>
|
| 162 |
|
| 163 |
<motion.div
|