Spaces:
Sleeping
Sleeping
File size: 9,492 Bytes
35a92dd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | import React, { useEffect, useState } from 'react';
interface ServicesSectionProps {
onClose: () => void;
}
export const ServicesSection: React.FC<ServicesSectionProps> = ({ onClose }) => {
const [isLoaded, setIsLoaded] = useState(false);
const [hoveredIdx, setHoveredIdx] = useState<number | null>(null);
useEffect(() => {
const t = setTimeout(() => setIsLoaded(true), 100);
return () => clearTimeout(t);
}, []);
const services = [
{
id: "SYS_WEB_01",
title: "Web Engineering",
desc: "We build digital cathedrals, not just websites. High-performance frontends that defy browser limitations.",
technical: "Next.js / WebGL / WASM / Edge Rendering",
humor: ">> LOG: We promise 100% Lighthouse scores until marketing asks for that third tracking pixel.",
icon: "β‘"
},
{
id: "SYS_MOB_02",
title: "Mobile Synthesis",
desc: "Cross-platform architectures that feel native. Smooth 120hz scrolling or we delete the repository.",
technical: "React Native / Swift / Kotlin / Bridgeless Architecture",
humor: ">> LOG: Yes, it works on Android. No, we won't test it on a 2014 Samsung J5.",
icon: "π±"
},
{
id: "SYS_RES_03",
title: "R&D / Deep Tech",
desc: "The core of our existence. Turning whitepapers into profitable, deployable code.",
technical: "LLM Fine-tuning / Computer Vision / Predictive Models",
humor: ">> LOG: We spend 90% of our time reading arXiv papers and 10% praying the code compiles.",
icon: "π¬"
},
{
id: "SYS_MKT_04",
title: "Social Warfare",
desc: "Algorithmic marketing. We position your brand exactly where the attention economy is bleeding.",
technical: "Growth Hacking / Viral Loops / Sentiment Analysis",
humor: ">> LOG: We can make you famous, or at least get you a cease and desist order.",
icon: "π’"
}
];
return (
<div className={`fixed inset-0 z-50 flex flex-col bg-[#050000]/95 backdrop-blur-xl overflow-hidden transition-opacity duration-700 ${isLoaded ? 'opacity-100' : 'opacity-0'}`}>
{/* Top Bar */}
<div className="w-full max-w-[1400px] mx-auto px-6 py-6 md:px-12 flex justify-between items-center z-10 border-b border-white/5">
<div className="flex items-center gap-4">
<span className="text-emerald-500 font-mono text-xs animate-pulse">β </span>
<span className="text-white/80 font-mono text-xs uppercase tracking-widest">Service Protocols</span>
</div>
<button
onClick={onClose}
className="group flex items-center gap-3 text-white/50 hover:text-white transition-colors"
>
<span className="text-[10px] uppercase tracking-widest group-hover:tracking-[0.2em] transition-all duration-300">Terminate</span>
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5">
<line x1="18" y1="6" x2="6" y2="18"></line>
<line x1="6" y1="6" x2="18" y2="18"></line>
</svg>
</button>
</div>
{/* Main Content */}
<div className="flex-1 w-full overflow-y-auto overflow-x-hidden scroll-smooth custom-scrollbar">
<div className="w-full max-w-[1400px] mx-auto px-6 md:px-12 pt-12 pb-32">
{/* Header */}
<div className={`mb-16 transition-all duration-1000 delay-100 ease-out ${isLoaded ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-12'}`}>
<h1 className="text-5xl md:text-7xl lg:text-8xl font-light text-white tracking-tight leading-none">
System <br />
<span className="text-emerald-500/50 font-serif italic">Capabilities.</span>
</h1>
</div>
<div className="grid grid-cols-1 lg:grid-cols-12 gap-12">
{/* Left Column: Services Grid */}
<div className="lg:col-span-8 grid grid-cols-1 md:grid-cols-2 gap-6">
{services.map((service, idx) => (
<div
key={service.id}
onMouseEnter={() => setHoveredIdx(idx)}
onMouseLeave={() => setHoveredIdx(null)}
className={`group p-8 border border-white/10 bg-white/5 hover:bg-emerald-900/10 hover:border-emerald-500/30 transition-all duration-500 cursor-none-ish
${isLoaded ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-12'}
`}
style={{ transitionDelay: `${200 + idx * 100}ms` }}
>
<div className="flex justify-between items-start mb-6">
<span className="text-2xl">{service.icon}</span>
<span className="text-[10px] font-mono text-white/20 group-hover:text-emerald-500/50 transition-colors">{service.id}</span>
</div>
<h3 className="text-2xl font-light text-white mb-3 group-hover:text-emerald-400 transition-colors">{service.title}</h3>
<p className="text-white/50 text-sm leading-relaxed mb-6 group-hover:text-white/70 transition-colors">
{service.desc}
</p>
<div className="w-full h-[1px] bg-white/10 group-hover:bg-emerald-500/30 transition-colors mb-4"></div>
<div className="flex flex-wrap gap-2">
{service.technical.split('/').map((tag, i) => (
<span key={i} className="text-[9px] uppercase tracking-wider text-white/30 font-mono border border-white/5 px-2 py-1 rounded-sm">
{tag.trim()}
</span>
))}
</div>
</div>
))}
</div>
{/* Right Column: Interactive Monitor */}
<div className={`hidden lg:block lg:col-span-4 transition-all duration-1000 delay-500 ${isLoaded ? 'opacity-100 translate-x-0' : 'opacity-0 translate-x-12'}`}>
<div className="sticky top-8 border border-white/10 bg-black/40 p-6 min-h-[400px] flex flex-col">
<div className="flex justify-between items-center mb-6 border-b border-white/10 pb-4">
<span className="text-[10px] font-mono uppercase tracking-widest text-emerald-500">Monitor_Output</span>
<div className="flex gap-1">
<div className="w-1.5 h-1.5 bg-emerald-500 rounded-full animate-ping"></div>
</div>
</div>
<div className="flex-1 font-mono text-xs leading-loose">
{hoveredIdx !== null ? (
<>
<div className="text-white/40 mb-2">
<span className="text-emerald-500 mr-2">β</span>
Target Identified: <span className="text-white">{services[hoveredIdx].title.toUpperCase()}</span>
</div>
<div className="text-white/40 mb-4">
<span className="text-emerald-500 mr-2">β</span>
ID: {services[hoveredIdx].id}
</div>
<div className="text-white/40 mb-4">
<span className="text-emerald-500 mr-2">β</span>
Stack Allocation:
<div className="pl-6 text-emerald-400/80 mt-1">
{services[hoveredIdx].technical}
</div>
</div>
<div className="mt-8 pt-4 border-t border-dashed border-white/10 text-white/60 italic">
{services[hoveredIdx].humor}
</div>
</>
) : (
<div className="h-full flex flex-col justify-center items-center text-white/20">
<span className="text-4xl mb-4 opacity-20">β¬</span>
<p>System Idle.</p>
<p>Hover over a module to inspect.</p>
</div>
)}
</div>
<div className="mt-6 pt-4 border-t border-white/10 flex justify-between text-[9px] text-white/20 font-mono uppercase">
<span>Mem: 40TB</span>
<span>Cpu: 12%</span>
</div>
</div>
</div>
</div>
{/* Mobile Humor for Services (since sidebar is hidden on mobile) */}
<div className="lg:hidden mt-12 border-t border-white/5 pt-8">
<div className="bg-white/5 p-4 rounded-sm border border-emerald-500/20">
<p className="text-[10px] font-mono text-emerald-500 mb-2">{">>> SYSTEM MESSAGE"}</p>
<p className="text-white/60 text-xs italic">
"We construct things with love and passion. And lots of caffeine. Mostly caffeine actually."
</p>
</div>
</div>
{/* Footer */}
<div className="mt-32 border-t border-white/5 pt-8 text-center">
<p className="text-white/30 font-mono text-xs">
"We break things so you don't have to."
</p>
</div>
</div>
</div>
</div>
);
};
|