Initial DeepSite commit
Browse files- README.md +9 -6
- index.html +780 -19
- script.js +239 -0
- style.css +590 -18
README.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
colorTo: yellow
|
| 6 |
sdk: static
|
| 7 |
-
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: DeepSite Project
|
| 3 |
+
colorFrom: blue
|
| 4 |
+
colorTo: green
|
|
|
|
| 5 |
sdk: static
|
| 6 |
+
emoji: 🛠️
|
| 7 |
+
tags:
|
| 8 |
+
- deepsite-v4
|
| 9 |
---
|
| 10 |
|
| 11 |
+
# DeepSite Project
|
| 12 |
+
|
| 13 |
+
This project has been created with [DeepSite](https://deepsite.hf.co) AI Vibe Coding.
|
index.html
CHANGED
|
@@ -1,19 +1,780 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="id" class="dark scroll-smooth">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8" />
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
| 6 |
+
<meta name="description" content="Omniverse One — Portal Layanan Teknologi Satu Pintu. Studio teknologi elit untuk desain web premium, rekayasa perangkat lunak, instalasi hardware, dan rekayasa jaringan." />
|
| 7 |
+
<title>Omniverse One — Professional Tech Solutions & Web Support</title>
|
| 8 |
+
|
| 9 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 10 |
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
| 11 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
| 12 |
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet" />
|
| 13 |
+
<link rel="stylesheet" href="style.css" />
|
| 14 |
+
<script src="https://unpkg.com/lucide@latest"></script>
|
| 15 |
+
|
| 16 |
+
<script>
|
| 17 |
+
tailwind.config = {
|
| 18 |
+
darkMode: 'class',
|
| 19 |
+
theme: {
|
| 20 |
+
extend: {
|
| 21 |
+
fontFamily: { sans: ['Inter', 'system-ui', 'sans-serif'] },
|
| 22 |
+
colors: {
|
| 23 |
+
background: 'var(--background)',
|
| 24 |
+
foreground: 'var(--foreground)',
|
| 25 |
+
card: 'var(--card)',
|
| 26 |
+
'card-foreground': 'var(--card-foreground)',
|
| 27 |
+
popover: 'var(--popover)',
|
| 28 |
+
'popover-foreground': 'var(--popover-foreground)',
|
| 29 |
+
primary: 'var(--primary)',
|
| 30 |
+
'primary-foreground': 'var(--primary-foreground)',
|
| 31 |
+
secondary: 'var(--secondary)',
|
| 32 |
+
'secondary-foreground': 'var(--secondary-foreground)',
|
| 33 |
+
muted: 'var(--muted)',
|
| 34 |
+
'muted-foreground': 'var(--muted-foreground)',
|
| 35 |
+
accent: 'var(--accent)',
|
| 36 |
+
'accent-foreground': 'var(--accent-foreground)',
|
| 37 |
+
destructive: 'var(--destructive)',
|
| 38 |
+
border: 'var(--border)',
|
| 39 |
+
input: 'var(--input)',
|
| 40 |
+
ring: 'var(--ring)',
|
| 41 |
+
brand: 'var(--brand)',
|
| 42 |
+
},
|
| 43 |
+
borderRadius: {
|
| 44 |
+
DEFAULT: 'var(--radius)',
|
| 45 |
+
lg: 'var(--radius)',
|
| 46 |
+
md: 'calc(var(--radius) - 2px)',
|
| 47 |
+
sm: 'calc(var(--radius) - 4px)',
|
| 48 |
+
},
|
| 49 |
+
maxWidth: { '8xl': '88rem' },
|
| 50 |
+
},
|
| 51 |
+
},
|
| 52 |
+
};
|
| 53 |
+
</script>
|
| 54 |
+
</head>
|
| 55 |
+
|
| 56 |
+
<body class="bg-background text-foreground font-sans antialiased selection:bg-foreground selection:text-background">
|
| 57 |
+
|
| 58 |
+
<!-- ====== NAVBAR ====== -->
|
| 59 |
+
<header id="navbar" class="fixed top-0 inset-x-0 z-50 transition-all duration-300">
|
| 60 |
+
<div class="mx-auto max-w-8xl px-4 sm:px-6 lg:px-8">
|
| 61 |
+
<div id="navbar-inner" class="mt-3 flex items-center justify-between rounded-2xl border border-border/60 px-4 py-2.5 transition-all duration-300 sm:px-6">
|
| 62 |
+
<!-- Logo -->
|
| 63 |
+
<a href="#hero" class="group flex items-center gap-2.5">
|
| 64 |
+
<div class="flex h-9 w-9 items-center justify-center rounded-xl bg-foreground text-background font-black text-sm transition-transform duration-300 group-hover:scale-105">
|
| 65 |
+
O
|
| 66 |
+
</div>
|
| 67 |
+
<span class="text-[15px] font-bold tracking-tight">Omniverse One</span>
|
| 68 |
+
</a>
|
| 69 |
+
|
| 70 |
+
<!-- Desktop Nav -->
|
| 71 |
+
<nav class="hidden items-center gap-1 md:flex">
|
| 72 |
+
<a href="#services" class="nav-link">Layanan</a>
|
| 73 |
+
<a href="#tech-stack" class="nav-link">Tech Stack</a>
|
| 74 |
+
<a href="#about" class="nav-link">Tentang</a>
|
| 75 |
+
<a href="#testimonials" class="nav-link">Reputasi</a>
|
| 76 |
+
<a href="#contact" class="nav-link">Kontak</a>
|
| 77 |
+
</nav>
|
| 78 |
+
|
| 79 |
+
<!-- Right Actions -->
|
| 80 |
+
<div class="flex items-center gap-2">
|
| 81 |
+
<button id="theme-toggle" aria-label="Toggle theme" class="flex h-9 w-9 items-center justify-center rounded-lg border border-border/60 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground">
|
| 82 |
+
<i data-lucide="sun" class="h-4 w-4 hidden dark:block"></i>
|
| 83 |
+
<i data-lucide="moon" class="h-4 w-4 block dark:hidden"></i>
|
| 84 |
+
</button>
|
| 85 |
+
<a href="#contact" class="hidden sm:inline-flex items-center gap-1.5 rounded-lg bg-primary px-4 py-2 text-[13px] font-semibold text-primary-foreground transition-all hover:opacity-90 active:scale-[0.97]">
|
| 86 |
+
Konsultasi Gratis
|
| 87 |
+
<i data-lucide="arrow-right" class="h-3.5 w-3.5"></i>
|
| 88 |
+
</a>
|
| 89 |
+
<button id="mobile-toggle" aria-label="Menu" class="flex h-9 w-9 items-center justify-center rounded-lg border border-border/60 md:hidden">
|
| 90 |
+
<i data-lucide="menu" class="h-4 w-4" id="menu-icon"></i>
|
| 91 |
+
</button>
|
| 92 |
+
</div>
|
| 93 |
+
</div>
|
| 94 |
+
</div>
|
| 95 |
+
|
| 96 |
+
<!-- Mobile Menu -->
|
| 97 |
+
<div id="mobile-menu" class="mx-4 mt-2 hidden rounded-2xl border border-border/60 bg-background/95 p-2 backdrop-blur-xl md:hidden">
|
| 98 |
+
<a href="#services" class="mobile-link">Layanan</a>
|
| 99 |
+
<a href="#tech-stack" class="mobile-link">Tech Stack</a>
|
| 100 |
+
<a href="#about" class="mobile-link">Tentang</a>
|
| 101 |
+
<a href="#testimonials" class="mobile-link">Reputasi</a>
|
| 102 |
+
<a href="#contact" class="mobile-link">Kontak</a>
|
| 103 |
+
<a href="#contact" class="mt-1 block rounded-lg bg-primary px-4 py-2.5 text-center text-sm font-semibold text-primary-foreground">Konsultasi Gratis</a>
|
| 104 |
+
</div>
|
| 105 |
+
</header>
|
| 106 |
+
|
| 107 |
+
<!-- ====== HERO ====== -->
|
| 108 |
+
<section id="hero" class="relative flex min-h-screen items-center overflow-hidden pt-28 pb-16">
|
| 109 |
+
<!-- Background Grid -->
|
| 110 |
+
<div class="hero-grid absolute inset-0 -z-10"></div>
|
| 111 |
+
<div class="hero-glow absolute inset-0 -z-10"></div>
|
| 112 |
+
|
| 113 |
+
<div class="mx-auto grid max-w-8xl grid-cols-1 items-center gap-12 px-4 sm:px-6 lg:grid-cols-2 lg:gap-16 lg:px-8">
|
| 114 |
+
<!-- Left: Text -->
|
| 115 |
+
<div class="animate-fade-up">
|
| 116 |
+
<div class="inline-flex items-center gap-2 rounded-full border border-border/60 bg-muted/50 px-3.5 py-1.5 text-xs font-medium text-muted-foreground">
|
| 117 |
+
<span class="relative flex h-1.5 w-1.5">
|
| 118 |
+
<span class="absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-500 opacity-75"></span>
|
| 119 |
+
<span class="relative inline-flex h-1.5 w-1.5 rounded-full bg-emerald-500"></span>
|
| 120 |
+
</span>
|
| 121 |
+
Portal Layanan Teknologi Satu Pintu
|
| 122 |
+
</div>
|
| 123 |
+
|
| 124 |
+
<h1 class="mt-6 text-4xl font-extrabold leading-[1.05] tracking-tight sm:text-5xl lg:text-6xl xl:text-7xl">
|
| 125 |
+
Infrastruktur IT<br />
|
| 126 |
+
Generasi Berikutnya<br />
|
| 127 |
+
<span class="text-muted-foreground">& Rekayasa Perangkat Lunak</span>
|
| 128 |
+
</h1>
|
| 129 |
+
|
| 130 |
+
<p class="mt-6 max-w-xl text-base leading-relaxed text-muted-foreground sm:text-lg">
|
| 131 |
+
Studio teknologi elit oleh spesialis teknis berpengalaman. Kami mendesain antarmuka digital yang mewah, membangun program handal, merakit komputer kerja, dan mengamankan sistem jaringan dengan standar tinggi.
|
| 132 |
+
</p>
|
| 133 |
+
|
| 134 |
+
<div class="mt-8 flex flex-col gap-3 sm:flex-row">
|
| 135 |
+
<a href="#services" class="group inline-flex items-center justify-center gap-2 rounded-xl border border-border bg-background px-6 py-3 text-sm font-semibold transition-all hover:bg-muted active:scale-[0.97]">
|
| 136 |
+
Jelajahi Layanan
|
| 137 |
+
<i data-lucide="arrow-right" class="h-4 w-4 transition-transform group-hover:translate-x-0.5"></i>
|
| 138 |
+
</a>
|
| 139 |
+
<a href="#contact" class="inline-flex items-center justify-center gap-2 rounded-xl bg-primary px-6 py-3 text-sm font-semibold text-primary-foreground transition-all hover:opacity-90 active:scale-[0.97]">
|
| 140 |
+
<i data-lucide="message-circle" class="h-4 w-4"></i>
|
| 141 |
+
Hubungi Kami
|
| 142 |
+
</a>
|
| 143 |
+
</div>
|
| 144 |
+
|
| 145 |
+
<!-- Quick Links -->
|
| 146 |
+
<div class="mt-10 flex flex-wrap items-center gap-x-6 gap-y-2 text-sm text-muted-foreground">
|
| 147 |
+
<a href="#services" class="quick-link">Portal Web</a>
|
| 148 |
+
<a href="#services" class="quick-link">Bikin Software</a>
|
| 149 |
+
<a href="#services" class="quick-link">Instalasi Komputer</a>
|
| 150 |
+
<a href="#services" class="quick-link">Perawatan Sistem</a>
|
| 151 |
+
</div>
|
| 152 |
+
</div>
|
| 153 |
+
|
| 154 |
+
<!-- Right: Terminal Preview -->
|
| 155 |
+
<div class="animate-fade-up [animation-delay:200ms]">
|
| 156 |
+
<div class="relative">
|
| 157 |
+
<!-- Glow -->
|
| 158 |
+
<div class="absolute -inset-4 bg-gradient-to-tr from-brand/10 via-transparent to-brand/5 rounded-3xl blur-2xl"></div>
|
| 159 |
+
|
| 160 |
+
<!-- Terminal Card -->
|
| 161 |
+
<div class="relative rounded-2xl border border-border/60 bg-card p-5 shadow-2xl shadow-black/5">
|
| 162 |
+
<!-- Terminal Header -->
|
| 163 |
+
<div class="flex items-center justify-between border-b border-border pb-3 mb-4">
|
| 164 |
+
<div class="flex items-center gap-1.5">
|
| 165 |
+
<span class="h-3 w-3 rounded-full bg-red-400/80"></span>
|
| 166 |
+
<span class="h-3 w-3 rounded-full bg-yellow-400/80"></span>
|
| 167 |
+
<span class="h-3 w-3 rounded-full bg-green-400/80"></span>
|
| 168 |
+
</div>
|
| 169 |
+
<span class="text-xs font-medium text-muted-foreground">omniverse-one@studio: ~</span>
|
| 170 |
+
<i data-lucide="terminal" class="h-3.5 w-3.5 text-muted-foreground"></i>
|
| 171 |
+
</div>
|
| 172 |
+
|
| 173 |
+
<!-- Terminal Body -->
|
| 174 |
+
<div class="space-y-1.5 font-mono text-[13px] leading-relaxed">
|
| 175 |
+
<div class="text-muted-foreground"><span class="text-brand">~</span> <span class="text-foreground">omniverse</span> init --project=premium</div>
|
| 176 |
+
<div class="text-muted-foreground">⠋ Initializing systems...</div>
|
| 177 |
+
<div class="flex items-center gap-2 text-emerald-500"><i data-lucide="check" class="h-3.5 w-3.5"></i> Web portal deployed</div>
|
| 178 |
+
<div class="flex items-center gap-2 text-emerald-500"><i data-lucide="check" class="h-3.5 w-3.5"></i> Backend services running</div>
|
| 179 |
+
<div class="flex items-center gap-2 text-emerald-500"><i data-lucide="check" class="h-3.5 w-3.5"></i> Network secured</div>
|
| 180 |
+
<div class="flex items-center gap-2 text-emerald-500"><i data-lucide="check" class="h-3.5 w-3.5"></i> Hardware configured</div>
|
| 181 |
+
<div class="pt-1 text-muted-foreground"><span class="text-brand">~</span> <span class="text-foreground">omniverse</span> status</div>
|
| 182 |
+
<div class="flex items-center gap-2 text-amber-500">→ <span class="text-foreground">All systems operational</span> <span class="text-muted-foreground">[uptime: 99.98%]</span></div>
|
| 183 |
+
<div class="pt-1.5 flex items-center gap-1 text-brand"><span class="animate-pulse">▎</span></div>
|
| 184 |
+
</div>
|
| 185 |
+
|
| 186 |
+
<!-- Mini Stats -->
|
| 187 |
+
<div class="mt-4 grid grid-cols-3 gap-2 border-t border-border pt-4">
|
| 188 |
+
<div class="text-center">
|
| 189 |
+
<div class="text-lg font-bold text-foreground">50+</div>
|
| 190 |
+
<div class="text-[10px] text-muted-foreground uppercase tracking-wider">Proyek</div>
|
| 191 |
+
</div>
|
| 192 |
+
<div class="text-center border-x border-border">
|
| 193 |
+
<div class="text-lg font-bold text-foreground">100%</div>
|
| 194 |
+
<div class="text-[10px] text-muted-foreground uppercase tracking-wider">Kepuasan</div>
|
| 195 |
+
</div>
|
| 196 |
+
<div class="text-center">
|
| 197 |
+
<div class="text-lg font-bold text-foreground">24/7</div>
|
| 198 |
+
<div class="text-[10px] text-muted-foreground uppercase tracking-wider">Support</div>
|
| 199 |
+
</div>
|
| 200 |
+
</div>
|
| 201 |
+
</div>
|
| 202 |
+
</div>
|
| 203 |
+
</div>
|
| 204 |
+
</div>
|
| 205 |
+
|
| 206 |
+
<!-- Scroll Indicator -->
|
| 207 |
+
<div class="absolute bottom-6 left-1/2 hidden -translate-x-1/2 lg:block">
|
| 208 |
+
<div class="flex flex-col items-center gap-2 text-muted-foreground">
|
| 209 |
+
<span class="text-[10px] uppercase tracking-widest">Scroll</span>
|
| 210 |
+
<div class="flex h-9 w-5 items-start justify-center rounded-full border border-border/60 p-1">
|
| 211 |
+
<div class="h-1.5 w-1 animate-scroll-bounce rounded-full bg-muted-foreground"></div>
|
| 212 |
+
</div>
|
| 213 |
+
</div>
|
| 214 |
+
</div>
|
| 215 |
+
</section>
|
| 216 |
+
|
| 217 |
+
<!-- ====== SERVICES ====== -->
|
| 218 |
+
<section id="services" class="scroll-mt-24 border-t border-border/40 py-24 sm:py-32">
|
| 219 |
+
<div class="mx-auto max-w-8xl px-4 sm:px-6 lg:px-8">
|
| 220 |
+
<!-- Section Header -->
|
| 221 |
+
<div class="reveal mx-auto max-w-2xl text-center">
|
| 222 |
+
<span class="section-label">Kemampuan Teknis Kami</span>
|
| 223 |
+
<h2 class="section-title mt-4">Layanan terperinci dengan<br />performa tinggi</h2>
|
| 224 |
+
<p class="section-desc mt-4">Dirancang secara khusus untuk kebutuhan perorangan maupun sistem perusahaan — dengan estetika minimalis yang mewah dan eksekusi teknis tingkat lanjut.</p>
|
| 225 |
+
</div>
|
| 226 |
+
|
| 227 |
+
<!-- Cards Grid -->
|
| 228 |
+
<div class="mt-16 grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-4">
|
| 229 |
+
<!-- Service 1 -->
|
| 230 |
+
<article class="service-card reveal">
|
| 231 |
+
<div class="service-icon">
|
| 232 |
+
<i data-lucide="layout-template" class="h-5 w-5"></i>
|
| 233 |
+
</div>
|
| 234 |
+
<span class="service-tag">Fokus Visual</span>
|
| 235 |
+
<h3 class="service-title">Software & Web Engineering</h3>
|
| 236 |
+
<p class="service-desc">Desain visual memukau, platform web kustom full-stack, layanan backend handal, skrip otomatisasi, dan integrasi database untuk efisiensi bisnis Anda.</p>
|
| 237 |
+
<div class="service-tech">
|
| 238 |
+
<span class="tech-pill">React</span>
|
| 239 |
+
<span class="tech-pill">Next.js</span>
|
| 240 |
+
<span class="tech-pill">TypeScript</span>
|
| 241 |
+
<span class="tech-pill">Tailwind</span>
|
| 242 |
+
</div>
|
| 243 |
+
</article>
|
| 244 |
+
|
| 245 |
+
<!-- Service 2 -->
|
| 246 |
+
<article class="service-card reveal" style="transition-delay: 100ms">
|
| 247 |
+
<div class="service-icon">
|
| 248 |
+
<i data-lucide="smartphone" class="h-5 w-5"></i>
|
| 249 |
+
</div>
|
| 250 |
+
<span class="service-tag">Cross-Platform</span>
|
| 251 |
+
<h3 class="service-title">Mobile App Development</h3>
|
| 252 |
+
<p class="service-desc">Aplikasi mobile lintas platform dan native dengan arsitektur handal, performa tinggi, dan pengalaman pengguna yang mulus di semua perangkat.</p>
|
| 253 |
+
<div class="service-tech">
|
| 254 |
+
<span class="tech-pill">Flutter</span>
|
| 255 |
+
<span class="tech-pill">React Native</span>
|
| 256 |
+
<span class="tech-pill">Firebase</span>
|
| 257 |
+
<span class="tech-pill">Kotlin</span>
|
| 258 |
+
</div>
|
| 259 |
+
</article>
|
| 260 |
+
|
| 261 |
+
<!-- Service 3 -->
|
| 262 |
+
<article class="service-card reveal" style="transition-delay: 200ms">
|
| 263 |
+
<div class="service-icon">
|
| 264 |
+
<i data-lucide="server" class="h-5 w-5"></i>
|
| 265 |
+
</div>
|
| 266 |
+
<span class="service-tag">Ahli Perangkat Keras</span>
|
| 267 |
+
<h3 class="service-title">Infrastructure & Hardware</h3>
|
| 268 |
+
<p class="service-desc">Konfigurasi komputer ruang kerja, perakitan PC kustom, setup server, konfigurasi VPS, pemasangan kabel jaringan fisik, dan deployment perangkat presisi tinggi.</p>
|
| 269 |
+
<div class="service-tech">
|
| 270 |
+
<span class="tech-pill">Linux</span>
|
| 271 |
+
<span class="tech-pill">Docker</span>
|
| 272 |
+
<span class="tech-pill">Nginx</span>
|
| 273 |
+
<span class="tech-pill">VPS</span>
|
| 274 |
+
</div>
|
| 275 |
+
</article>
|
| 276 |
+
|
| 277 |
+
<!-- Service 4 -->
|
| 278 |
+
<article class="service-card reveal" style="transition-delay: 300ms">
|
| 279 |
+
<div class="service-icon">
|
| 280 |
+
<i data-lucide="shield-check" class="h-5 w-5"></i>
|
| 281 |
+
</div>
|
| 282 |
+
<span class="service-tag">Jaminan Aktif</span>
|
| 283 |
+
<h3 class="service-title">Network Engineering & Support</h3>
|
| 284 |
+
<p class="service-desc">Jaringan aman, arsitektur IT teroptimasi, pembaruan sistem berkala, patch keamanan, pemulihan crash, dan diagnosa berkelanjutan untuk perorangan maupun bisnis.</p>
|
| 285 |
+
<div class="service-tech">
|
| 286 |
+
<span class="tech-pill">Mikrotik</span>
|
| 287 |
+
<span class="tech-pill">Ubiquiti</span>
|
| 288 |
+
<span class="tech-pill">WireGuard</span>
|
| 289 |
+
<span class="tech-pill">Wi-Fi Mesh</span>
|
| 290 |
+
</div>
|
| 291 |
+
</article>
|
| 292 |
+
</div>
|
| 293 |
+
</div>
|
| 294 |
+
</section>
|
| 295 |
+
|
| 296 |
+
<!-- ====== PROCESS ====== -->
|
| 297 |
+
<section class="border-t border-border/40 py-24 sm:py-32">
|
| 298 |
+
<div class="mx-auto max-w-8xl px-4 sm:px-6 lg:px-8">
|
| 299 |
+
<div class="reveal mx-auto max-w-2xl text-center">
|
| 300 |
+
<span class="section-label">Cara Kerja Kami</span>
|
| 301 |
+
<h2 class="section-title mt-4">Eksekusi langsung, tanpa birokrasi</h2>
|
| 302 |
+
<p class="section-desc mt-4">Berbeda dengan agensi besar yang sarat proses, Omniverse One digerakkan oleh eksekusi teknis tingkat lanjut secara langsung.</p>
|
| 303 |
+
</div>
|
| 304 |
+
|
| 305 |
+
<div class="mt-16 grid grid-cols-1 gap-px overflow-hidden rounded-2xl border border-border/60 sm:grid-cols-2 lg:grid-cols-4">
|
| 306 |
+
<div class="process-step reveal">
|
| 307 |
+
<span class="process-number">01</span>
|
| 308 |
+
<i data-lucide="message-square" class="process-icon"></i>
|
| 309 |
+
<h3 class="process-title">Konsultasi</h3>
|
| 310 |
+
<p class="process-desc">Diskusi langsung dengan spesialis teknis senior untuk memahami kebutuhan Anda.</p>
|
| 311 |
+
</div>
|
| 312 |
+
<div class="process-step reveal" style="transition-delay: 100ms">
|
| 313 |
+
<span class="process-number">02</span>
|
| 314 |
+
<i data-lucide="pen-ruler" class="process-icon"></i>
|
| 315 |
+
<h3 class="process-title">Perencanaan</h3>
|
| 316 |
+
<p class="process-desc">Merancang arsitektur sistem, estetika halaman, dan spesifikasi hardware yang tepat.</p>
|
| 317 |
+
</div>
|
| 318 |
+
<div class="process-step reveal" style="transition-delay: 200ms">
|
| 319 |
+
<span class="process-number">03</span>
|
| 320 |
+
<i data-lucide="code-2" class="process-icon"></i>
|
| 321 |
+
<h3 class="process-title">Eksekusi</h3>
|
| 322 |
+
<p class="process-desc">Menulis baris kode, mendesain antarmuka, merakit unit komputer dengan presisi.</p>
|
| 323 |
+
</div>
|
| 324 |
+
<div class="process-step reveal" style="transition-delay: 300ms">
|
| 325 |
+
<span class="process-number">04</span>
|
| 326 |
+
<i data-lucide="life-buoy" class="process-icon"></i>
|
| 327 |
+
<h3 class="process-title">Dukungan</h3>
|
| 328 |
+
<p class="process-desc">Pemeliharaan berkelanjutan seolah sistem Anda milik kami pribadi. 24/7 dukungan kritis.</p>
|
| 329 |
+
</div>
|
| 330 |
+
</div>
|
| 331 |
+
</div>
|
| 332 |
+
</section>
|
| 333 |
+
|
| 334 |
+
<!-- ====== TECH STACK ====== -->
|
| 335 |
+
<section id="tech-stack" class="scroll-mt-24 overflow-hidden border-t border-border/40 py-24 sm:py-32">
|
| 336 |
+
<div class="mx-auto max-w-8xl px-4 sm:px-6 lg:px-8">
|
| 337 |
+
<div class="reveal mx-auto max-w-2xl text-center">
|
| 338 |
+
<span class="section-label">Tech Stack</span>
|
| 339 |
+
<h2 class="section-title mt-4">Tumpukan teknologi modern</h2>
|
| 340 |
+
<p class="section-desc mt-4">Kami mengutamakan tumpukan program React modern yang cepat, infrastruktur handal, dan alat-alat terbaik di kelasnya.</p>
|
| 341 |
+
</div>
|
| 342 |
+
</div>
|
| 343 |
+
|
| 344 |
+
<!-- Marquee -->
|
| 345 |
+
<div class="reveal relative mt-16 flex overflow-hidden">
|
| 346 |
+
<div class="pointer-events-none absolute inset-y-0 left-0 z-10 w-24 bg-gradient-to-r from-background to-transparent"></div>
|
| 347 |
+
<div class="pointer-events-none absolute inset-y-0 right-0 z-10 w-24 bg-gradient-to-l from-background to-transparent"></div>
|
| 348 |
+
<div class="marquee-track flex shrink-0 animate-marquee items-center gap-4 pr-4">
|
| 349 |
+
<!-- Items -->
|
| 350 |
+
<div class="tech-badge"><i data-lucide="atom" class="h-4 w-4"></i> React</div>
|
| 351 |
+
<div class="tech-badge"><i data-lucide="triangle" class="h-4 w-4"></i> Next.js</div>
|
| 352 |
+
<div class="tech-badge"><i data-lucide="code" class="h-4 w-4"></i> TypeScript</div>
|
| 353 |
+
<div class="tech-badge"><i data-lucide="wind" class="h-4 w-4"></i> Tailwind CSS</div>
|
| 354 |
+
<div class="tech-badge"><i data-lucide="server" class="h-4 w-4"></i> Node.js</div>
|
| 355 |
+
<div class="tech-badge"><i data-lucide="flame" class="h-4 w-4"></i> Flutter</div>
|
| 356 |
+
<div class="tech-badge"><i data-lucide="database" class="h-4 w-4"></i> PostgreSQL</div>
|
| 357 |
+
<div class="tech-badge"><i data-lucide="box" class="h-4 w-4"></i> Docker</div>
|
| 358 |
+
<div class="tech-badge"><i data-lucide="cloud" class="h-4 w-4"></i> Cloud Infra</div>
|
| 359 |
+
<div class="tech-badge"><i data-lucide="zap" class="h-4 w-4"></i> Firebase</div>
|
| 360 |
+
<div class="tech-badge"><i data-lucide="globe" class="h-4 w-4"></i> Vercel</div>
|
| 361 |
+
<div class="tech-badge"><i data-lucide="figma" class="h-4 w-4"></i> Figma</div>
|
| 362 |
+
</div>
|
| 363 |
+
<div class="marquee-track flex shrink-0 animate-marquee items-center gap-4 pr-4" aria-hidden="true">
|
| 364 |
+
<div class="tech-badge"><i data-lucide="atom" class="h-4 w-4"></i> React</div>
|
| 365 |
+
<div class="tech-badge"><i data-lucide="triangle" class="h-4 w-4"></i> Next.js</div>
|
| 366 |
+
<div class="tech-badge"><i data-lucide="code" class="h-4 w-4"></i> TypeScript</div>
|
| 367 |
+
<div class="tech-badge"><i data-lucide="wind" class="h-4 w-4"></i> Tailwind CSS</div>
|
| 368 |
+
<div class="tech-badge"><i data-lucide="server" class="h-4 w-4"></i> Node.js</div>
|
| 369 |
+
<div class="tech-badge"><i data-lucide="flame" class="h-4 w-4"></i> Flutter</div>
|
| 370 |
+
<div class="tech-badge"><i data-lucide="database" class="h-4 w-4"></i> PostgreSQL</div>
|
| 371 |
+
<div class="tech-badge"><i data-lucide="box" class="h-4 w-4"></i> Docker</div>
|
| 372 |
+
<div class="tech-badge"><i data-lucide="cloud" class="h-4 w-4"></i> Cloud Infra</div>
|
| 373 |
+
<div class="tech-badge"><i data-lucide="zap" class="h-4 w-4"></i> Firebase</div>
|
| 374 |
+
<div class="tech-badge"><i data-lucide="globe" class="h-4 w-4"></i> Vercel</div>
|
| 375 |
+
<div class="tech-badge"><i data-lucide="figma" class="h-4 w-4"></i> Figma</div>
|
| 376 |
+
</div>
|
| 377 |
+
</div>
|
| 378 |
+
</section>
|
| 379 |
+
|
| 380 |
+
<!-- ====== ABOUT / PHILOSOPHY ====== -->
|
| 381 |
+
<section id="about" class="scroll-mt-24 border-t border-border/40 py-24 sm:py-32">
|
| 382 |
+
<div class="mx-auto max-w-8xl px-4 sm:px-6 lg:px-8">
|
| 383 |
+
<div class="grid grid-cols-1 gap-12 lg:grid-cols-2 lg:gap-16">
|
| 384 |
+
<!-- Left: Content -->
|
| 385 |
+
<div class="reveal">
|
| 386 |
+
<span class="section-label text-left">Model Layanan Kami</span>
|
| 387 |
+
<h2 class="mt-4 text-3xl font-bold tracking-tight sm:text-4xl lg:text-5xl">
|
| 388 |
+
Bekerja langsung dengan<br /><span class="text-muted-foreground">spesialis senior</span>
|
| 389 |
+
</h2>
|
| 390 |
+
<div class="mt-6 space-y-4 text-base leading-relaxed text-muted-foreground">
|
| 391 |
+
<p>
|
| 392 |
+
Berbeda dengan agensi besar yang sarat proses birokrasi, Omniverse One digerakkan oleh eksekusi teknis tingkat lanjut secara langsung. Anda terhubung dan bekerja langsung dengan spesialis teknis senior yang merancang arsitektur sistem Anda, menulis baris kode program, mendesain estetika halaman, serta merakit unit komputer Anda.
|
| 393 |
+
</p>
|
| 394 |
+
<p>
|
| 395 |
+
Kami mengutamakan estetika minimalis yang mewah, tumpukan program React modern yang cepat, pengerjaan pemasangan kabel jaringan fisik sesuai kriteria industri, serta pemeliharaan berkelanjutan seolah sistem Anda milik kami pribadi.
|
| 396 |
+
</p>
|
| 397 |
+
</div>
|
| 398 |
+
|
| 399 |
+
<!-- Feature List -->
|
| 400 |
+
<ul class="mt-8 space-y-3">
|
| 401 |
+
<li class="feature-item">
|
| 402 |
+
<i data-lucide="check" class="feature-check"></i>
|
| 403 |
+
<span>Estetika minimalis mewah yang fokus konversi tinggi</span>
|
| 404 |
+
</li>
|
| 405 |
+
<li class="feature-item">
|
| 406 |
+
<i data-lucide="check" class="feature-check"></i>
|
| 407 |
+
<span>Tumpukan program React modern yang cepat</span>
|
| 408 |
+
</li>
|
| 409 |
+
<li class="feature-item">
|
| 410 |
+
<i data-lucide="check" class="feature-check"></i>
|
| 411 |
+
<span>Pemasangan kabel jaringan fisik sesuai kriteria industri</span>
|
| 412 |
+
</li>
|
| 413 |
+
<li class="feature-item">
|
| 414 |
+
<i data-lucide="check" class="feature-check"></i>
|
| 415 |
+
<span>Pemeliharaan berkelanjutan seolah sistem milik kami</span>
|
| 416 |
+
</li>
|
| 417 |
+
</ul>
|
| 418 |
+
</div>
|
| 419 |
+
|
| 420 |
+
<!-- Right: Philosophy Card + Stats -->
|
| 421 |
+
<div class="reveal flex flex-col gap-6" style="transition-delay: 150ms">
|
| 422 |
+
<!-- Quote Card -->
|
| 423 |
+
<div class="relative overflow-hidden rounded-2xl border border-border/60 bg-card p-8">
|
| 424 |
+
<i data-lucide="quote" class="absolute -right-2 -top-2 h-24 w-24 text-foreground/5"></i>
|
| 425 |
+
<div class="relative">
|
| 426 |
+
<span class="section-label text-left">Filosofi Omniverse</span>
|
| 427 |
+
<blockquote class="mt-4 text-lg font-medium leading-relaxed">
|
| 428 |
+
"Kami berpikir dari prinsip dasar. Sebuah program aplikasi atau sistem ruang kerja yang baik tidak hanya sekadar bisa jalan—ia harus menyenangkan ketika digunakan, hemat sumber daya, dan bebas kerumitan pasca pengerjaan selesai."
|
| 429 |
+
</blockquote>
|
| 430 |
+
</div>
|
| 431 |
+
</div>
|
| 432 |
+
|
| 433 |
+
<!-- Stats Grid -->
|
| 434 |
+
<div class="grid grid-cols-2 gap-4">
|
| 435 |
+
<div class="stat-card">
|
| 436 |
+
<div class="stat-number">100<span class="stat-suffix">%</span></div>
|
| 437 |
+
<div class="stat-label">Kepuasan Klien</div>
|
| 438 |
+
</div>
|
| 439 |
+
<div class="stat-card">
|
| 440 |
+
<div class="stat-number">50<span class="stat-suffix">+</span></div>
|
| 441 |
+
<div class="stat-label">Proyek Selesai</div>
|
| 442 |
+
</div>
|
| 443 |
+
<div class="stat-card">
|
| 444 |
+
<div class="stat-number text-base">Jabodetabek</div>
|
| 445 |
+
<div class="stat-label">Kunjungan Langsung</div>
|
| 446 |
+
</div>
|
| 447 |
+
<div class="stat-card">
|
| 448 |
+
<div class="stat-number">24<span class="stat-suffix">/7</span></div>
|
| 449 |
+
<div class="stat-label">Dukungan Kritis</div>
|
| 450 |
+
</div>
|
| 451 |
+
</div>
|
| 452 |
+
</div>
|
| 453 |
+
</div>
|
| 454 |
+
</div>
|
| 455 |
+
</section>
|
| 456 |
+
|
| 457 |
+
<!-- ====== TESTIMONIALS ====== -->
|
| 458 |
+
<section id="testimonials" class="scroll-mt-24 border-t border-border/40 py-24 sm:py-32">
|
| 459 |
+
<div class="mx-auto max-w-8xl px-4 sm:px-6 lg:px-8">
|
| 460 |
+
<div class="reveal mx-auto max-w-2xl text-center">
|
| 461 |
+
<span class="section-label">Reputasi Teruji</span>
|
| 462 |
+
<h2 class="section-title mt-4">Tanggapan dari klien kami</h2>
|
| 463 |
+
<p class="section-desc mt-4">Tanggapan terbaik dari bisnis maupun individu yang bekerja sama dengan kami.</p>
|
| 464 |
+
</div>
|
| 465 |
+
|
| 466 |
+
<div class="mt-16 grid grid-cols-1 gap-5 md:grid-cols-3">
|
| 467 |
+
<!-- Testimonial 1 -->
|
| 468 |
+
<article class="testimonial-card reveal">
|
| 469 |
+
<div class="mb-4 flex gap-0.5 text-amber-400">
|
| 470 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 471 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 472 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 473 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 474 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 475 |
+
</div>
|
| 476 |
+
<p class="text-sm leading-relaxed text-foreground/90">"Omniverse One memodernisasi portal logistik dan sistem komputer kantor kami. Peningkatan performa luar biasa. Jaringan lokal kantor dan dasbor kustom kami berjalan tanpa hambatan sekali pun."</p>
|
| 477 |
+
<div class="mt-6 flex items-center gap-3 border-t border-border pt-5">
|
| 478 |
+
<img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&q=80&w=120" alt="Andi Wijaya" class="h-11 w-11 rounded-full object-cover ring-2 ring-border" loading="lazy" />
|
| 479 |
+
<div>
|
| 480 |
+
<div class="text-sm font-semibold">Andi Wijaya</div>
|
| 481 |
+
<div class="text-xs text-muted-foreground">Manajer Operasional — Sinar Pangan Logistik</div>
|
| 482 |
+
</div>
|
| 483 |
+
</div>
|
| 484 |
+
</article>
|
| 485 |
+
|
| 486 |
+
<!-- Testimonial 2 -->
|
| 487 |
+
<article class="testimonial-card reveal" style="transition-delay: 100ms">
|
| 488 |
+
<div class="mb-4 flex gap-0.5 text-amber-400">
|
| 489 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 490 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 491 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 492 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 493 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 494 |
+
</div>
|
| 495 |
+
<p class="text-sm leading-relaxed text-foreground/90">"Layanan desain web premium mengubah total citra agensi kreatif kami. Selera estetika yang luar biasa, layout yang tertata sangat bersih, dan super lancar di semua perangkat."</p>
|
| 496 |
+
<div class="mt-6 flex items-center gap-3 border-t border-border pt-5">
|
| 497 |
+
<img src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?auto=format&fit=crop&q=80&w=120" alt="Sarah Elizabeth" class="h-11 w-11 rounded-full object-cover ring-2 ring-border" loading="lazy" />
|
| 498 |
+
<div>
|
| 499 |
+
<div class="text-sm font-semibold">Sarah Elizabeth</div>
|
| 500 |
+
<div class="text-xs text-muted-foreground">Direktur Kreatif — Studio Arka Bogor</div>
|
| 501 |
+
</div>
|
| 502 |
+
</div>
|
| 503 |
+
</article>
|
| 504 |
+
|
| 505 |
+
<!-- Testimonial 3 -->
|
| 506 |
+
<article class="testimonial-card reveal" style="transition-delay: 200ms">
|
| 507 |
+
<div class="mb-4 flex gap-0.5 text-amber-400">
|
| 508 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 509 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 510 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 511 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 512 |
+
<i data-lucide="star" class="h-4 w-4 fill-current"></i>
|
| 513 |
+
</div>
|
| 514 |
+
<p class="text-sm leading-relaxed text-foreground/90">"Sangat direkomendasikan untuk instalasi hardware dan optimalisasi sistem. Mereka merakit komputer kerja korporat kami dengan presisi tinggi dan mengatur jaringan Wi-Fi mesh yang handal."</p>
|
| 515 |
+
<div class="mt-6 flex items-center gap-3 border-t border-border pt-5">
|
| 516 |
+
<img src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?auto=format&fit=crop&q=80&w=120" alt="Rian Hidayat" class="h-11 w-11 rounded-full object-cover ring-2 ring-border" loading="lazy" />
|
| 517 |
+
<div>
|
| 518 |
+
<div class="text-sm font-semibold">Rian Hidayat</div>
|
| 519 |
+
<div class="text-xs text-muted-foreground">Pendiri — Kopi Nusantara Group</div>
|
| 520 |
+
</div>
|
| 521 |
+
</div>
|
| 522 |
+
</article>
|
| 523 |
+
</div>
|
| 524 |
+
</div>
|
| 525 |
+
</section>
|
| 526 |
+
|
| 527 |
+
<!-- ====== FAQ ====== -->
|
| 528 |
+
<section class="border-t border-border/40 py-24 sm:py-32">
|
| 529 |
+
<div class="mx-auto max-w-3xl px-4 sm:px-6 lg:px-8">
|
| 530 |
+
<div class="reveal text-center">
|
| 531 |
+
<span class="section-label">FAQ</span>
|
| 532 |
+
<h2 class="section-title mt-4">Jawaban cepat seputar layanan</h2>
|
| 533 |
+
<p class="section-desc mt-4">Pertanyaan umum seputar jaminan keamanan, cakupan pengerjaan, dan proses teknis kami.</p>
|
| 534 |
+
</div>
|
| 535 |
+
|
| 536 |
+
<div class="reveal mt-12 space-y-3" id="faq-container">
|
| 537 |
+
<!-- FAQ Item -->
|
| 538 |
+
<div class="faq-item">
|
| 539 |
+
<button class="faq-trigger" aria-expanded="false">
|
| 540 |
+
<span class="text-sm font-semibold sm:text-base">Apakah layanan tersedia di luar area Jabodetabek?</span>
|
| 541 |
+
<i data-lucide="chevron-down" class="faq-chevron h-4 w-4 shrink-0"></i>
|
| 542 |
+
</button>
|
| 543 |
+
<div class="faq-content">
|
| 544 |
+
<p class="text-sm leading-relaxed text-muted-foreground">Kunjungan langsung untuk instalasi hardware dan jaringan fisik tersedia untuk area Jabodetabek. Untuk layanan software, web, dan dukungan sistem, kami melayani seluruh Indonesia secara remote dengan komunikasi real-time.</p>
|
| 545 |
+
</div>
|
| 546 |
+
</div>
|
| 547 |
+
|
| 548 |
+
<div class="faq-item">
|
| 549 |
+
<button class="faq-trigger" aria-expanded="false">
|
| 550 |
+
<span class="text-sm font-semibold sm:text-base">Berapa lama waktu pengerjaan sebuah proyek?</span>
|
| 551 |
+
<i data-lucide="chevron-down" class="faq-chevron h-4 w-4 shrink-0"></i>
|
| 552 |
+
</button>
|
| 553 |
+
<div class="faq-content">
|
| 554 |
+
<p class="text-sm leading-relaxed text-muted-foreground">Waktu pengerjaan bergantung pada kompleksitas proyek. Portal web standar biasanya 2-3 minggu, software kustom 4-8 minggu, dan instalasi hardware/jaringan 1-3 hari kerja. Anda akan mendapat estimasi pasti setelah konsultasi awal.</p>
|
| 555 |
+
</div>
|
| 556 |
+
</div>
|
| 557 |
+
|
| 558 |
+
<div class="faq-item">
|
| 559 |
+
<button class="faq-trigger" aria-expanded="false">
|
| 560 |
+
<span class="text-sm font-semibold sm:text-base">Apakah ada garansi pasca pengerjaan?</span>
|
| 561 |
+
<i data-lucide="chevron-down" class="faq-chevron h-4 w-4 shrink-0"></i>
|
| 562 |
+
</button>
|
| 563 |
+
<div class="faq-content">
|
| 564 |
+
<p class="text-sm leading-relaxed text-muted-foreground">Ya. Semua proyek mencakup garansi pemeliharaan dan dukungan teknis. Kami memperlakukan sistem Anda seolah milik kami pribadi — pembaruan berkala, patch keamanan, dan diagnosa berkelanjutan menjadi bagian dari layanan.</p>
|
| 565 |
+
</div>
|
| 566 |
+
</div>
|
| 567 |
+
|
| 568 |
+
<div class="faq-item">
|
| 569 |
+
<button class="faq-trigger" aria-expanded="false">
|
| 570 |
+
<span class="text-sm font-semibold sm:text-base">Bagaimana sistem pembayaran works?</span>
|
| 571 |
+
<i data-lucide="chevron-down" class="faq-chevron h-4 w-4 shrink-0"></i>
|
| 572 |
+
</button>
|
| 573 |
+
<div class="faq-content">
|
| 574 |
+
<p class="text-sm leading-relaxed text-muted-foreground">Pembayaran dilakukan secara bertahap — DP di awal pengerjaan, cicilan tengah saat milestone tercapai, dan pelunasan setelah serah terima. Detail disepakati dalam kontrak kerja yang transparan sebelum mulai.</p>
|
| 575 |
+
</div>
|
| 576 |
+
</div>
|
| 577 |
+
</div>
|
| 578 |
+
</div>
|
| 579 |
+
</section>
|
| 580 |
+
|
| 581 |
+
<!-- ====== CONTACT ====== -->
|
| 582 |
+
<section id="contact" class="scroll-mt-24 border-t border-border/40 py-24 sm:py-32">
|
| 583 |
+
<div class="mx-auto max-w-8xl px-4 sm:px-6 lg:px-8">
|
| 584 |
+
<div class="reveal mx-auto max-w-2xl text-center">
|
| 585 |
+
<span class="section-label">Mulai Hubungan Kerja</span>
|
| 586 |
+
<h2 class="section-title mt-4">Mari diskusikan proyek Anda</h2>
|
| 587 |
+
<p class="section-desc mt-4">Pilih layanan dan buat draf pesan WhatsApp instan sekali klik.</p>
|
| 588 |
+
</div>
|
| 589 |
+
|
| 590 |
+
<div class="mt-16 grid grid-cols-1 gap-6 lg:grid-cols-5">
|
| 591 |
+
<!-- Left: Office Info -->
|
| 592 |
+
<div class="reveal lg:col-span-2">
|
| 593 |
+
<div class="flex h-full flex-col gap-5 rounded-2xl border border-border/60 bg-card p-7">
|
| 594 |
+
<!-- Location -->
|
| 595 |
+
<div>
|
| 596 |
+
<div class="flex items-center gap-2 text-muted-foreground">
|
| 597 |
+
<i data-lucide="map-pin" class="h-4 w-4"></i>
|
| 598 |
+
<span class="text-xs font-semibold uppercase tracking-wider">Lokasi Kantor</span>
|
| 599 |
+
</div>
|
| 600 |
+
<p class="mt-3 text-sm leading-relaxed text-foreground/90">
|
| 601 |
+
Omniverse One<br />
|
| 602 |
+
Ciwaru Indah Residence Blok B5<br />
|
| 603 |
+
Tamansari, Bogor 16610
|
| 604 |
+
</p>
|
| 605 |
+
<a href="https://maps.app.goo.gl/Xq8HtVoJCFwy4FpY9" target="_blank" rel="noopener noreferrer" class="mt-3 inline-flex items-center gap-1.5 text-sm font-medium text-brand hover:underline">
|
| 606 |
+
Buka Google Maps
|
| 607 |
+
<i data-lucide="external-link" class="h-3 w-3"></i>
|
| 608 |
+
</a>
|
| 609 |
+
</div>
|
| 610 |
+
|
| 611 |
+
<div class="h-px bg-border"></div>
|
| 612 |
+
|
| 613 |
+
<!-- Hours -->
|
| 614 |
+
<div>
|
| 615 |
+
<div class="flex items-center gap-2 text-muted-foreground">
|
| 616 |
+
<i data-lucide="clock" class="h-4 w-4"></i>
|
| 617 |
+
<span class="text-xs font-semibold uppercase tracking-wider">Jam Operasional</span>
|
| 618 |
+
</div>
|
| 619 |
+
<div class="mt-3 space-y-1.5 text-sm">
|
| 620 |
+
<div class="flex justify-between">
|
| 621 |
+
<span class="text-muted-foreground">Senin – Jumat</span>
|
| 622 |
+
<span class="font-medium">09:00 – 18:00</span>
|
| 623 |
+
</div>
|
| 624 |
+
<div class="flex justify-between">
|
| 625 |
+
<span class="text-muted-foreground">Sabtu</span>
|
| 626 |
+
<span class="font-medium">10:00 – 15:00</span>
|
| 627 |
+
</div>
|
| 628 |
+
<div class="flex justify-between">
|
| 629 |
+
<span class="text-muted-foreground">Dukungan Kritis</span>
|
| 630 |
+
<span class="font-medium text-emerald-500">24/7</span>
|
| 631 |
+
</div>
|
| 632 |
+
</div>
|
| 633 |
+
</div>
|
| 634 |
+
|
| 635 |
+
<div class="h-px bg-border"></div>
|
| 636 |
+
|
| 637 |
+
<!-- Response Time -->
|
| 638 |
+
<div class="mt-auto rounded-xl bg-muted/50 p-4">
|
| 639 |
+
<div class="flex items-center gap-2">
|
| 640 |
+
<div class="relative flex h-2 w-2">
|
| 641 |
+
<span class="absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-500 opacity-75"></span>
|
| 642 |
+
<span class="relative inline-flex h-2 w-2 rounded-full bg-emerald-500"></span>
|
| 643 |
+
</div>
|
| 644 |
+
<span class="text-sm font-semibold">Tersedia sekarang</span>
|
| 645 |
+
</div>
|
| 646 |
+
<p class="mt-1.5 text-xs text-muted-foreground">Rata-rata waktu respons di bawah 1 jam pada jam kerja.</p>
|
| 647 |
+
</div>
|
| 648 |
+
</div>
|
| 649 |
+
</div>
|
| 650 |
+
|
| 651 |
+
<!-- Right: Form -->
|
| 652 |
+
<div class="reveal lg:col-span-3" style="transition-delay: 100ms">
|
| 653 |
+
<form id="contact-form" class="rounded-2xl border border-border/60 bg-card p-7">
|
| 654 |
+
<h3 class="text-lg font-bold">Formulir Konsultasi</h3>
|
| 655 |
+
<p class="mt-1 text-sm text-muted-foreground">Isi formulir di bawah, kami akan menghubungi Anda via WhatsApp.</p>
|
| 656 |
+
|
| 657 |
+
<div class="mt-6 space-y-5">
|
| 658 |
+
<!-- Name -->
|
| 659 |
+
<div>
|
| 660 |
+
<label for="name" class="form-label">Nama Lengkap <span class="text-destructive">*</span></label>
|
| 661 |
+
<input type="text" id="name" name="name" required placeholder="John Doe" class="form-input" />
|
| 662 |
+
</div>
|
| 663 |
+
|
| 664 |
+
<!-- Client Category + Service -->
|
| 665 |
+
<div class="grid grid-cols-1 gap-5 sm:grid-cols-2">
|
| 666 |
+
<div>
|
| 667 |
+
<label for="client-type" class="form-label">Kategori Klien</label>
|
| 668 |
+
<select id="client-type" name="client-type" class="form-input">
|
| 669 |
+
<option value="Perorangan">Perorangan</option>
|
| 670 |
+
<option value="Bisnis / UMKM">Bisnis / UMKM</option>
|
| 671 |
+
<option value="Korporat">Korporat</option>
|
| 672 |
+
<option value="Agensi">Agensi</option>
|
| 673 |
+
</select>
|
| 674 |
+
</div>
|
| 675 |
+
<div>
|
| 676 |
+
<label for="service" class="form-label">Pilihan Jasa</label>
|
| 677 |
+
<select id="service" name="service" class="form-input">
|
| 678 |
+
<option value="Software & Web Engineering">Software & Web Engineering</option>
|
| 679 |
+
<option value="Mobile App Development">Mobile App Development</option>
|
| 680 |
+
<option value="Infrastructure & Hardware">Infrastructure & Hardware</option>
|
| 681 |
+
<option value="Network Engineering & Support">Network Engineering & Support</option>
|
| 682 |
+
</select>
|
| 683 |
+
</div>
|
| 684 |
+
</div>
|
| 685 |
+
|
| 686 |
+
<!-- Notes -->
|
| 687 |
+
<div>
|
| 688 |
+
<label for="notes" class="form-label">Catatan Kebutuhan Singkat</label>
|
| 689 |
+
<textarea id="notes" name="notes" rows="4" placeholder="Ceritakan kebutuhan proyek Anda secara singkat..." class="form-input resize-none"></textarea>
|
| 690 |
+
</div>
|
| 691 |
+
|
| 692 |
+
<!-- Submit -->
|
| 693 |
+
<button type="submit" class="group flex w-full items-center justify-center gap-2 rounded-xl bg-primary px-6 py-3.5 text-sm font-semibold text-primary-foreground transition-all hover:opacity-90 active:scale-[0.98]">
|
| 694 |
+
<i data-lucide="send" class="h-4 w-4 transition-transform group-hover:translate-x-0.5"></i>
|
| 695 |
+
Kirim via WhatsApp
|
| 696 |
+
</button>
|
| 697 |
+
|
| 698 |
+
<p class="text-center text-xs text-muted-foreground">
|
| 699 |
+
Dengan mengirim, Anda menyetujui kami menghubungi Anda melalui WhatsApp.
|
| 700 |
+
</p>
|
| 701 |
+
</div>
|
| 702 |
+
</form>
|
| 703 |
+
</div>
|
| 704 |
+
</div>
|
| 705 |
+
</div>
|
| 706 |
+
</section>
|
| 707 |
+
|
| 708 |
+
<!-- ====== FOOTER ====== -->
|
| 709 |
+
<footer class="border-t border-border/40">
|
| 710 |
+
<div class="mx-auto max-w-8xl px-4 py-12 sm:px-6 lg:px-8">
|
| 711 |
+
<div class="grid grid-cols-2 gap-8 md:grid-cols-4 lg:grid-cols-5">
|
| 712 |
+
<!-- Brand -->
|
| 713 |
+
<div class="col-span-2 lg:col-span-2">
|
| 714 |
+
<a href="#hero" class="flex items-center gap-2.5">
|
| 715 |
+
<div class="flex h-9 w-9 items-center justify-center rounded-xl bg-foreground text-background font-black text-sm">O</div>
|
| 716 |
+
<span class="text-[15px] font-bold tracking-tight">Omniverse One</span>
|
| 717 |
+
</a>
|
| 718 |
+
<p class="mt-4 max-w-xs text-sm leading-relaxed text-muted-foreground">
|
| 719 |
+
Studio teknologi elit. Desain antarmuka mewah, program handal, dan sistem jaringan dengan standar tinggi.
|
| 720 |
+
</p>
|
| 721 |
+
<div class="mt-5 flex items-center gap-3">
|
| 722 |
+
<a href="#" aria-label="Instagram" class="social-link"><i data-lucide="instagram" class="h-4 w-4"></i></a>
|
| 723 |
+
<a href="#" aria-label="Twitter" class="social-link"><i data-lucide="twitter" class="h-4 w-4"></i></a>
|
| 724 |
+
<a href="#" aria-label="Linkedin" class="social-link"><i data-lucide="linkedin" class="h-4 w-4"></i></a>
|
| 725 |
+
<a href="https://wa.me/62" aria-label="WhatsApp" class="social-link"><i data-lucide="message-circle" class="h-4 w-4"></i></a>
|
| 726 |
+
</div>
|
| 727 |
+
</div>
|
| 728 |
+
|
| 729 |
+
<!-- Services Links -->
|
| 730 |
+
<div>
|
| 731 |
+
<h4 class="footer-title">Layanan</h4>
|
| 732 |
+
<ul class="footer-links">
|
| 733 |
+
<li><a href="#services">Web Engineering</a></li>
|
| 734 |
+
<li><a href="#services">Mobile Apps</a></li>
|
| 735 |
+
<li><a href="#services">Hardware</a></li>
|
| 736 |
+
<li><a href="#services">Networking</a></li>
|
| 737 |
+
</ul>
|
| 738 |
+
</div>
|
| 739 |
+
|
| 740 |
+
<!-- Company Links -->
|
| 741 |
+
<div>
|
| 742 |
+
<h4 class="footer-title">Perusahaan</h4>
|
| 743 |
+
<ul class="footer-links">
|
| 744 |
+
<li><a href="#about">Tentang</a></li>
|
| 745 |
+
<li><a href="#tech-stack">Tech Stack</a></li>
|
| 746 |
+
<li><a href="#testimonials">Reputasi</a></li>
|
| 747 |
+
<li><a href="#contact">Kontak</a></li>
|
| 748 |
+
</ul>
|
| 749 |
+
</div>
|
| 750 |
+
|
| 751 |
+
<!-- Contact Links -->
|
| 752 |
+
<div>
|
| 753 |
+
<h4 class="footer-title">Kontak</h4>
|
| 754 |
+
<ul class="footer-links">
|
| 755 |
+
<li><a href="https://maps.app.goo.gl/Xq8HtVoJCFwy4FpY9" target="_blank" rel="noopener">Bogor, Indonesia</a></li>
|
| 756 |
+
<li><a href="#contact">Konsultasi Gratis</a></li>
|
| 757 |
+
<li><a href="#contact">WhatsApp</a></li>
|
| 758 |
+
</ul>
|
| 759 |
+
</div>
|
| 760 |
+
</div>
|
| 761 |
+
|
| 762 |
+
<div class="mt-10 flex flex-col items-center justify-between gap-3 border-t border-border/40 pt-6 sm:flex-row">
|
| 763 |
+
<p class="text-xs text-muted-foreground">© <span id="year">2025</span> Omniverse One. All rights reserved.</p>
|
| 764 |
+
<p class="text-xs text-muted-foreground">Dibuat dengan presisi tinggi di Bogor.</p>
|
| 765 |
+
</div>
|
| 766 |
+
</div>
|
| 767 |
+
</footer>
|
| 768 |
+
|
| 769 |
+
<!-- Back to top -->
|
| 770 |
+
<button id="back-to-top" aria-label="Kembali ke atas" class="fixed bottom-6 right-6 z-40 hidden h-11 w-11 items-center justify-center rounded-full border border-border/60 bg-background/80 backdrop-blur-md transition-all hover:bg-muted active:scale-90">
|
| 771 |
+
<i data-lucide="arrow-up" class="h-4 w-4"></i>
|
| 772 |
+
</button>
|
| 773 |
+
|
| 774 |
+
<script src="script.js"></script>
|
| 775 |
+
<script>
|
| 776 |
+
lucide.createIcons();
|
| 777 |
+
</script>
|
| 778 |
+
<script src="https://deepsite.hf.co/deepsite-badge.js"></script>
|
| 779 |
+
</body>
|
| 780 |
+
</html>
|
script.js
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// ====== Lucide Icons Init ======
|
| 2 |
+
function initIcons() {
|
| 3 |
+
if (typeof lucide !== 'undefined') {
|
| 4 |
+
lucide.createIcons();
|
| 5 |
+
}
|
| 6 |
+
}
|
| 7 |
+
initIcons();
|
| 8 |
+
|
| 9 |
+
// ====== Theme Toggle ======
|
| 10 |
+
(function () {
|
| 11 |
+
const root = document.documentElement;
|
| 12 |
+
const toggle = document.getElementById('theme-toggle');
|
| 13 |
+
const stored = localStorage.getItem('omniverse-theme');
|
| 14 |
+
|
| 15 |
+
// Determine initial theme: stored > system preference > dark
|
| 16 |
+
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
| 17 |
+
const initialTheme = stored || (prefersDark ? 'dark' : 'dark'); // Default to dark for premium feel
|
| 18 |
+
|
| 19 |
+
if (initialTheme === 'light') {
|
| 20 |
+
root.classList.remove('dark');
|
| 21 |
+
} else {
|
| 22 |
+
root.classList.add('dark');
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
toggle?.addEventListener('click', () => {
|
| 26 |
+
root.classList.toggle('dark');
|
| 27 |
+
const isDark = root.classList.contains('dark');
|
| 28 |
+
localStorage.setItem('omniverse-theme', isDark ? 'dark' : 'light');
|
| 29 |
+
initIcons();
|
| 30 |
+
});
|
| 31 |
+
})();
|
| 32 |
+
|
| 33 |
+
// ====== Navbar Scroll Effect ======
|
| 34 |
+
(function () {
|
| 35 |
+
const navbar = document.getElementById('navbar');
|
| 36 |
+
let ticking = false;
|
| 37 |
+
|
| 38 |
+
function updateNavbar() {
|
| 39 |
+
if (window.scrollY > 20) {
|
| 40 |
+
navbar.classList.add('scrolled');
|
| 41 |
+
} else {
|
| 42 |
+
navbar.classList.remove('scrolled');
|
| 43 |
+
}
|
| 44 |
+
ticking = false;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
window.addEventListener('scroll', () => {
|
| 48 |
+
if (!ticking) {
|
| 49 |
+
requestAnimationFrame(updateNavbar);
|
| 50 |
+
ticking = true;
|
| 51 |
+
}
|
| 52 |
+
});
|
| 53 |
+
})();
|
| 54 |
+
|
| 55 |
+
// ====== Mobile Menu ======
|
| 56 |
+
(function () {
|
| 57 |
+
const toggle = document.getElementById('mobile-toggle');
|
| 58 |
+
const menu = document.getElementById('mobile-menu');
|
| 59 |
+
const menuIcon = document.getElementById('menu-icon');
|
| 60 |
+
let isOpen = false;
|
| 61 |
+
|
| 62 |
+
function toggleMenu() {
|
| 63 |
+
isOpen = !isOpen;
|
| 64 |
+
if (isOpen) {
|
| 65 |
+
menu.classList.remove('hidden');
|
| 66 |
+
menuIcon.setAttribute('data-lucide', 'x');
|
| 67 |
+
} else {
|
| 68 |
+
menu.classList.add('hidden');
|
| 69 |
+
menuIcon.setAttribute('data-lucide', 'menu');
|
| 70 |
+
}
|
| 71 |
+
initIcons();
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
toggle?.addEventListener('click', toggleMenu);
|
| 75 |
+
|
| 76 |
+
// Close on link click
|
| 77 |
+
menu?.querySelectorAll('a').forEach((link) => {
|
| 78 |
+
link.addEventListener('click', () => {
|
| 79 |
+
if (isOpen) toggleMenu();
|
| 80 |
+
});
|
| 81 |
+
});
|
| 82 |
+
|
| 83 |
+
// Close on outside click
|
| 84 |
+
document.addEventListener('click', (e) => {
|
| 85 |
+
if (isOpen && !menu.contains(e.target) && !toggle.contains(e.target)) {
|
| 86 |
+
toggleMenu();
|
| 87 |
+
}
|
| 88 |
+
});
|
| 89 |
+
})();
|
| 90 |
+
|
| 91 |
+
// ====== Scroll Reveal Animation ======
|
| 92 |
+
(function () {
|
| 93 |
+
const reveals = document.querySelectorAll('.reveal');
|
| 94 |
+
|
| 95 |
+
const observer = new IntersectionObserver(
|
| 96 |
+
(entries) => {
|
| 97 |
+
entries.forEach((entry) => {
|
| 98 |
+
if (entry.isIntersecting) {
|
| 99 |
+
entry.target.classList.add('revealed');
|
| 100 |
+
observer.unobserve(entry.target);
|
| 101 |
+
}
|
| 102 |
+
});
|
| 103 |
+
},
|
| 104 |
+
{ threshold: 0.12, rootMargin: '0px 0px -60px 0px' }
|
| 105 |
+
);
|
| 106 |
+
|
| 107 |
+
reveals.forEach((el) => observer.observe(el));
|
| 108 |
+
})();
|
| 109 |
+
|
| 110 |
+
// ====== FAQ Accordion ======
|
| 111 |
+
(function () {
|
| 112 |
+
const faqItems = document.querySelectorAll('.faq-item');
|
| 113 |
+
|
| 114 |
+
faqItems.forEach((item) => {
|
| 115 |
+
const trigger = item.querySelector('.faq-trigger');
|
| 116 |
+
trigger?.addEventListener('click', () => {
|
| 117 |
+
const isActive = item.classList.contains('active');
|
| 118 |
+
|
| 119 |
+
// Close all
|
| 120 |
+
faqItems.forEach((other) => {
|
| 121 |
+
other.classList.remove('active');
|
| 122 |
+
const otherTrigger = other.querySelector('.faq-trigger');
|
| 123 |
+
if (otherTrigger) otherTrigger.setAttribute('aria-expanded', 'false');
|
| 124 |
+
});
|
| 125 |
+
|
| 126 |
+
// Open clicked
|
| 127 |
+
if (!isActive) {
|
| 128 |
+
item.classList.add('active');
|
| 129 |
+
trigger.setAttribute('aria-expanded', 'true');
|
| 130 |
+
}
|
| 131 |
+
});
|
| 132 |
+
});
|
| 133 |
+
})();
|
| 134 |
+
|
| 135 |
+
// ====== Contact Form (WhatsApp) ======
|
| 136 |
+
(function () {
|
| 137 |
+
const form = document.getElementById('contact-form');
|
| 138 |
+
|
| 139 |
+
form?.addEventListener('submit', (e) => {
|
| 140 |
+
e.preventDefault();
|
| 141 |
+
|
| 142 |
+
const name = document.getElementById('name')?.value.trim() || '';
|
| 143 |
+
const clientType = document.getElementById('client-type')?.value || '';
|
| 144 |
+
const service = document.getElementById('service')?.value || '';
|
| 145 |
+
const notes = document.getElementById('notes')?.value.trim() || '';
|
| 146 |
+
|
| 147 |
+
if (!name) return;
|
| 148 |
+
|
| 149 |
+
const message = [
|
| 150 |
+
`Halo Omniverse One,`,
|
| 151 |
+
``,
|
| 152 |
+
`Nama: ${name}`,
|
| 153 |
+
`Kategori Klien: ${clientType}`,
|
| 154 |
+
`Layanan: ${service}`,
|
| 155 |
+
notes ? `Catatan: ${notes}` : '',
|
| 156 |
+
]
|
| 157 |
+
.filter(Boolean)
|
| 158 |
+
.join('\n');
|
| 159 |
+
|
| 160 |
+
const encoded = encodeURIComponent(message);
|
| 161 |
+
window.open(`https://wa.me/?text=${encoded}`, '_blank');
|
| 162 |
+
});
|
| 163 |
+
})();
|
| 164 |
+
|
| 165 |
+
// ====== Back to Top ======
|
| 166 |
+
(function () {
|
| 167 |
+
const btn = document.getElementById('back-to-top');
|
| 168 |
+
let ticking = false;
|
| 169 |
+
|
| 170 |
+
function updateBtn() {
|
| 171 |
+
if (window.scrollY > 600) {
|
| 172 |
+
btn?.classList.remove('hidden');
|
| 173 |
+
btn?.classList.add('flex');
|
| 174 |
+
} else {
|
| 175 |
+
btn?.classList.add('hidden');
|
| 176 |
+
btn?.classList.remove('flex');
|
| 177 |
+
}
|
| 178 |
+
ticking = false;
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
window.addEventListener('scroll', () => {
|
| 182 |
+
if (!ticking) {
|
| 183 |
+
requestAnimationFrame(updateBtn);
|
| 184 |
+
ticking = true;
|
| 185 |
+
}
|
| 186 |
+
});
|
| 187 |
+
|
| 188 |
+
btn?.addEventListener('click', () => {
|
| 189 |
+
window.scrollTo({ top: 0, behavior: 'smooth' });
|
| 190 |
+
});
|
| 191 |
+
})();
|
| 192 |
+
|
| 193 |
+
// ====== Year ======
|
| 194 |
+
document.getElementById('year').textContent = new Date().getFullYear();
|
| 195 |
+
|
| 196 |
+
// ====== Active Nav Link Highlighting ======
|
| 197 |
+
(function () {
|
| 198 |
+
const sections = document.querySelectorAll('section[id]');
|
| 199 |
+
const navLinks = document.querySelectorAll('.nav-link');
|
| 200 |
+
|
| 201 |
+
const observer = new IntersectionObserver(
|
| 202 |
+
(entries) => {
|
| 203 |
+
entries.forEach((entry) => {
|
| 204 |
+
if (entry.isIntersecting) {
|
| 205 |
+
const id = entry.target.getAttribute('id');
|
| 206 |
+
navLinks.forEach((link) => {
|
| 207 |
+
const href = link.getAttribute('href');
|
| 208 |
+
if (href === `#${id}`) {
|
| 209 |
+
link.style.color = 'var(--foreground)';
|
| 210 |
+
} else {
|
| 211 |
+
link.style.color = '';
|
| 212 |
+
}
|
| 213 |
+
});
|
| 214 |
+
}
|
| 215 |
+
});
|
| 216 |
+
},
|
| 217 |
+
{ threshold: 0.3, rootMargin: '-80px 0px -50% 0px' }
|
| 218 |
+
);
|
| 219 |
+
|
| 220 |
+
sections.forEach((sec) => observer.observe(sec));
|
| 221 |
+
})();
|
| 222 |
+
|
| 223 |
+
// ====== Smooth Anchor Scroll ======
|
| 224 |
+
document.querySelectorAll('a[href^="#"]').forEach((anchor) => {
|
| 225 |
+
anchor.addEventListener('click', function (e) {
|
| 226 |
+
const href = this.getAttribute('href');
|
| 227 |
+
if (href === '#') return;
|
| 228 |
+
const target = document.querySelector(href);
|
| 229 |
+
if (target) {
|
| 230 |
+
e.preventDefault();
|
| 231 |
+
const offset = 80;
|
| 232 |
+
const top = target.getBoundingClientRect().top + window.scrollY - offset;
|
| 233 |
+
window.scrollTo({ top, behavior: 'smooth' });
|
| 234 |
+
}
|
| 235 |
+
});
|
| 236 |
+
});
|
| 237 |
+
|
| 238 |
+
// Re-init icons after dynamic changes
|
| 239 |
+
setTimeout(initIcons, 100);
|
style.css
CHANGED
|
@@ -1,28 +1,600 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
body {
|
| 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 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* ===== CSS Variables (OKLCH Color Theme) ===== */
|
| 2 |
+
:root {
|
| 3 |
+
--background: oklch(1 0 0);
|
| 4 |
+
--foreground: oklch(0.145 0 0);
|
| 5 |
+
--card: oklch(1 0 0);
|
| 6 |
+
--card-foreground: oklch(0.145 0 0);
|
| 7 |
+
--popover: oklch(1 0 0);
|
| 8 |
+
--popover-foreground: oklch(0.145 0 0);
|
| 9 |
+
--primary: oklch(0.205 0 0);
|
| 10 |
+
--primary-foreground: oklch(0.985 0 0);
|
| 11 |
+
--secondary: oklch(0.97 0 0);
|
| 12 |
+
--secondary-foreground: oklch(0.205 0 0);
|
| 13 |
+
--muted: oklch(0.97 0 0);
|
| 14 |
+
--muted-foreground: oklch(0.556 0 0);
|
| 15 |
+
--accent: oklch(0.97 0 0);
|
| 16 |
+
--accent-foreground: oklch(0.205 0 0);
|
| 17 |
+
--destructive: oklch(0.577 0.245 27.325);
|
| 18 |
+
--border: oklch(0.922 0 0);
|
| 19 |
+
--input: oklch(0.922 0 0);
|
| 20 |
+
--ring: oklch(0.708 0 0);
|
| 21 |
+
--radius: 0.625rem;
|
| 22 |
+
--brand: oklch(0.488 0.243 264.376);
|
| 23 |
+
--grid-color: oklch(0.922 0 0);
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
.dark {
|
| 27 |
+
--background: oklch(0.145 0 0);
|
| 28 |
+
--foreground: oklch(0.985 0 0);
|
| 29 |
+
--card: oklch(0.205 0 0);
|
| 30 |
+
--card-foreground: oklch(0.985 0 0);
|
| 31 |
+
--popover: oklch(0.205 0 0);
|
| 32 |
+
--popover-foreground: oklch(0.985 0 0);
|
| 33 |
+
--primary: oklch(0.922 0 0);
|
| 34 |
+
--primary-foreground: oklch(0.205 0 0);
|
| 35 |
+
--secondary: oklch(0.269 0 0);
|
| 36 |
+
--secondary-foreground: oklch(0.985 0 0);
|
| 37 |
+
--muted: oklch(0.269 0 0);
|
| 38 |
+
--muted-foreground: oklch(0.708 0 0);
|
| 39 |
+
--accent: oklch(0.269 0 0);
|
| 40 |
+
--accent-foreground: oklch(0.985 0 0);
|
| 41 |
+
--destructive: oklch(0.704 0.191 22.216);
|
| 42 |
+
--border: oklch(1 0 0 / 10%);
|
| 43 |
+
--input: oklch(1 0 0 / 15%);
|
| 44 |
+
--ring: oklch(0.556 0 0);
|
| 45 |
+
--brand: oklch(0.6 0.2 264);
|
| 46 |
+
--grid-color: oklch(1 0 0 / 5%);
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
/* ===== Base ===== */
|
| 50 |
+
* {
|
| 51 |
+
border-color: var(--border);
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
html {
|
| 55 |
+
scroll-behavior: smooth;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
body {
|
| 59 |
+
font-feature-settings: "cv02", "cv03", "cv04", "cv11";
|
| 60 |
+
-webkit-font-smoothing: antialiased;
|
| 61 |
+
-moz-osx-font-smoothing: grayscale;
|
| 62 |
}
|
| 63 |
|
| 64 |
+
/* ===== Custom Scrollbar ===== */
|
| 65 |
+
::-webkit-scrollbar {
|
| 66 |
+
width: 8px;
|
| 67 |
+
height: 8px;
|
| 68 |
+
}
|
| 69 |
+
::-webkit-scrollbar-track {
|
| 70 |
+
background: var(--background);
|
| 71 |
+
}
|
| 72 |
+
::-webkit-scrollbar-thumb {
|
| 73 |
+
background: var(--muted);
|
| 74 |
+
border-radius: 9999px;
|
| 75 |
+
}
|
| 76 |
+
::-webkit-scrollbar-thumb:hover {
|
| 77 |
+
background: var(--muted-foreground);
|
| 78 |
}
|
| 79 |
|
| 80 |
+
/* ===== Navbar ===== */
|
| 81 |
+
#navbar.scrolled #navbar-inner {
|
| 82 |
+
background: color-mix(in oklch, var(--background) 80%, transparent);
|
| 83 |
+
backdrop-filter: blur(12px);
|
| 84 |
+
-webkit-backdrop-filter: blur(12px);
|
| 85 |
+
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.04), 0 1px 2px -1px rgb(0 0 0 / 0.03);
|
| 86 |
}
|
| 87 |
|
| 88 |
+
.nav-link {
|
| 89 |
+
padding: 0.5rem 0.875rem;
|
| 90 |
+
font-size: 0.8125rem;
|
| 91 |
+
font-weight: 500;
|
| 92 |
+
color: var(--muted-foreground);
|
| 93 |
+
border-radius: 0.5rem;
|
| 94 |
+
transition: color 0.2s, background 0.2s;
|
| 95 |
+
}
|
| 96 |
+
.nav-link:hover {
|
| 97 |
+
color: var(--foreground);
|
| 98 |
+
background: var(--muted);
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
.mobile-link {
|
| 102 |
+
display: block;
|
| 103 |
+
padding: 0.625rem 0.875rem;
|
| 104 |
+
font-size: 0.875rem;
|
| 105 |
+
font-weight: 500;
|
| 106 |
+
color: var(--muted-foreground);
|
| 107 |
+
border-radius: 0.5rem;
|
| 108 |
+
transition: color 0.2s, background 0.2s;
|
| 109 |
+
}
|
| 110 |
+
.mobile-link:hover {
|
| 111 |
+
color: var(--foreground);
|
| 112 |
+
background: var(--muted);
|
| 113 |
}
|
| 114 |
|
| 115 |
+
.quick-link {
|
| 116 |
+
position: relative;
|
| 117 |
+
transition: color 0.2s;
|
| 118 |
}
|
| 119 |
+
.quick-link::after {
|
| 120 |
+
content: "";
|
| 121 |
+
position: absolute;
|
| 122 |
+
bottom: -2px;
|
| 123 |
+
left: 0;
|
| 124 |
+
width: 0;
|
| 125 |
+
height: 1px;
|
| 126 |
+
background: var(--foreground);
|
| 127 |
+
transition: width 0.2s;
|
| 128 |
+
}
|
| 129 |
+
.quick-link:hover {
|
| 130 |
+
color: var(--foreground);
|
| 131 |
+
}
|
| 132 |
+
.quick-link:hover::after {
|
| 133 |
+
width: 100%;
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
/* ===== Hero Background ===== */
|
| 137 |
+
.hero-grid {
|
| 138 |
+
background-image:
|
| 139 |
+
linear-gradient(to right, var(--grid-color) 1px, transparent 1px),
|
| 140 |
+
linear-gradient(to bottom, var(--grid-color) 1px, transparent 1px);
|
| 141 |
+
background-size: 64px 64px;
|
| 142 |
+
-webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 0%, black 30%, transparent 80%);
|
| 143 |
+
mask-image: radial-gradient(ellipse 70% 60% at 50% 0%, black 30%, transparent 80%);
|
| 144 |
+
}
|
| 145 |
+
|
| 146 |
+
.hero-glow {
|
| 147 |
+
background: radial-gradient(circle at 50% 0%, color-mix(in oklch, var(--brand) 8%, transparent), transparent 60%);
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
/* ===== Section Labels ===== */
|
| 151 |
+
.section-label {
|
| 152 |
+
display: inline-block;
|
| 153 |
+
font-size: 0.6875rem;
|
| 154 |
+
font-weight: 600;
|
| 155 |
+
text-transform: uppercase;
|
| 156 |
+
letter-spacing: 0.12em;
|
| 157 |
+
color: var(--muted-foreground);
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
.section-title {
|
| 161 |
+
font-size: clamp(1.875rem, 4vw, 3rem);
|
| 162 |
+
font-weight: 800;
|
| 163 |
+
line-height: 1.1;
|
| 164 |
+
letter-spacing: -0.02em;
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
.section-desc {
|
| 168 |
+
max-width: 40rem;
|
| 169 |
+
margin-left: auto;
|
| 170 |
+
margin-right: auto;
|
| 171 |
+
font-size: 0.9375rem;
|
| 172 |
+
line-height: 1.6;
|
| 173 |
+
color: var(--muted-foreground);
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
/* ===== Service Cards ===== */
|
| 177 |
+
.service-card {
|
| 178 |
+
position: relative;
|
| 179 |
+
display: flex;
|
| 180 |
+
flex-direction: column;
|
| 181 |
+
padding: 1.75rem;
|
| 182 |
+
border: 1px solid color-mix(in oklch, var(--border) 60%, transparent);
|
| 183 |
+
border-radius: var(--radius);
|
| 184 |
+
background: var(--card);
|
| 185 |
+
transition: border-color 0.3s, box-shadow 0.3s, transform 0.3s;
|
| 186 |
+
overflow: hidden;
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
.service-card::before {
|
| 190 |
+
content: "";
|
| 191 |
+
position: absolute;
|
| 192 |
+
top: 0;
|
| 193 |
+
left: 50%;
|
| 194 |
+
transform: translateX(-50%);
|
| 195 |
+
width: 50%;
|
| 196 |
+
height: 1px;
|
| 197 |
+
background: linear-gradient(90deg, transparent, var(--brand), transparent);
|
| 198 |
+
opacity: 0;
|
| 199 |
+
transition: opacity 0.3s;
|
| 200 |
+
}
|
| 201 |
+
|
| 202 |
+
.service-card:hover {
|
| 203 |
+
border-color: color-mix(in oklch, var(--border) 100%, transparent);
|
| 204 |
+
box-shadow: 0 0 0 1px color-mix(in oklch, var(--brand) 15%, transparent), 0 12px 40px -12px rgb(0 0 0 / 0.15);
|
| 205 |
+
transform: translateY(-2px);
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
.service-card:hover::before {
|
| 209 |
+
opacity: 1;
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
.service-icon {
|
| 213 |
+
display: flex;
|
| 214 |
+
align-items: center;
|
| 215 |
+
justify-content: center;
|
| 216 |
+
height: 2.75rem;
|
| 217 |
+
width: 2.75rem;
|
| 218 |
+
border-radius: 0.625rem;
|
| 219 |
+
border: 1px solid var(--border);
|
| 220 |
+
background: var(--muted);
|
| 221 |
+
color: var(--foreground);
|
| 222 |
+
transition: background 0.3s, border-color 0.3s;
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
.service-card:hover .service-icon {
|
| 226 |
+
background: var(--foreground);
|
| 227 |
+
color: var(--background);
|
| 228 |
+
border-color: var(--foreground);
|
| 229 |
+
}
|
| 230 |
+
|
| 231 |
+
.service-tag {
|
| 232 |
+
margin-top: 1.25rem;
|
| 233 |
+
font-size: 0.6875rem;
|
| 234 |
+
font-weight: 500;
|
| 235 |
+
text-transform: uppercase;
|
| 236 |
+
letter-spacing: 0.06em;
|
| 237 |
+
color: var(--muted-foreground);
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
.service-title {
|
| 241 |
+
margin-top: 0.375rem;
|
| 242 |
+
font-size: 1.0625rem;
|
| 243 |
+
font-weight: 700;
|
| 244 |
+
letter-spacing: -0.01em;
|
| 245 |
+
}
|
| 246 |
+
|
| 247 |
+
.service-desc {
|
| 248 |
+
margin-top: 0.5rem;
|
| 249 |
+
font-size: 0.8125rem;
|
| 250 |
+
line-height: 1.6;
|
| 251 |
+
color: var(--muted-foreground);
|
| 252 |
+
flex-grow: 1;
|
| 253 |
+
}
|
| 254 |
+
|
| 255 |
+
.service-tech {
|
| 256 |
+
margin-top: 1.25rem;
|
| 257 |
+
display: flex;
|
| 258 |
+
flex-wrap: wrap;
|
| 259 |
+
gap: 0.375rem;
|
| 260 |
+
}
|
| 261 |
+
|
| 262 |
+
.tech-pill {
|
| 263 |
+
font-size: 0.6875rem;
|
| 264 |
+
font-weight: 500;
|
| 265 |
+
padding: 0.25rem 0.625rem;
|
| 266 |
+
border-radius: 0.375rem;
|
| 267 |
+
background: var(--muted);
|
| 268 |
+
color: var(--muted-foreground);
|
| 269 |
+
transition: background 0.2s, color 0.2s;
|
| 270 |
+
}
|
| 271 |
+
|
| 272 |
+
.service-card:hover .tech-pill {
|
| 273 |
+
background: color-mix(in oklch, var(--brand) 10%, var(--muted));
|
| 274 |
+
color: var(--foreground);
|
| 275 |
+
}
|
| 276 |
+
|
| 277 |
+
/* ===== Process Steps ===== */
|
| 278 |
+
.process-step {
|
| 279 |
+
background: var(--card);
|
| 280 |
+
padding: 2rem 1.75rem;
|
| 281 |
+
position: relative;
|
| 282 |
+
transition: background 0.3s;
|
| 283 |
+
}
|
| 284 |
+
|
| 285 |
+
.process-step:hover {
|
| 286 |
+
background: var(--muted);
|
| 287 |
+
}
|
| 288 |
+
|
| 289 |
+
.process-number {
|
| 290 |
+
font-size: 0.6875rem;
|
| 291 |
+
font-weight: 700;
|
| 292 |
+
letter-spacing: 0.1em;
|
| 293 |
+
color: var(--muted-foreground);
|
| 294 |
+
}
|
| 295 |
+
|
| 296 |
+
.process-icon {
|
| 297 |
+
height: 1.5rem;
|
| 298 |
+
width: 1.5rem;
|
| 299 |
+
margin-top: 1rem;
|
| 300 |
+
color: var(--brand);
|
| 301 |
+
}
|
| 302 |
+
|
| 303 |
+
.process-title {
|
| 304 |
+
margin-top: 0.75rem;
|
| 305 |
+
font-size: 1rem;
|
| 306 |
+
font-weight: 700;
|
| 307 |
+
}
|
| 308 |
+
|
| 309 |
+
.process-desc {
|
| 310 |
+
margin-top: 0.5rem;
|
| 311 |
+
font-size: 0.8125rem;
|
| 312 |
+
line-height: 1.6;
|
| 313 |
+
color: var(--muted-foreground);
|
| 314 |
+
}
|
| 315 |
+
|
| 316 |
+
/* ===== Tech Marquee ===== */
|
| 317 |
+
.tech-badge {
|
| 318 |
+
display: flex;
|
| 319 |
+
align-items: center;
|
| 320 |
+
gap: 0.5rem;
|
| 321 |
+
padding: 0.625rem 1.25rem;
|
| 322 |
+
border: 1px solid var(--border);
|
| 323 |
+
border-radius: 0.625rem;
|
| 324 |
+
background: var(--card);
|
| 325 |
+
font-size: 0.8125rem;
|
| 326 |
+
font-weight: 600;
|
| 327 |
+
white-space: nowrap;
|
| 328 |
+
transition: border-color 0.2s, background 0.2s;
|
| 329 |
+
}
|
| 330 |
+
|
| 331 |
+
.tech-badge:hover {
|
| 332 |
+
border-color: color-mix(in oklch, var(--brand) 30%, var(--border));
|
| 333 |
+
background: var(--muted);
|
| 334 |
+
}
|
| 335 |
+
|
| 336 |
+
.marquee-track {
|
| 337 |
+
animation: marquee 35s linear infinite;
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
@keyframes marquee {
|
| 341 |
+
from { transform: translateX(0); }
|
| 342 |
+
to { transform: translateX(-100%); }
|
| 343 |
+
}
|
| 344 |
+
|
| 345 |
+
/* ===== About ===== */
|
| 346 |
+
.feature-item {
|
| 347 |
+
display: flex;
|
| 348 |
+
align-items: flex-start;
|
| 349 |
+
gap: 0.625rem;
|
| 350 |
+
font-size: 0.875rem;
|
| 351 |
+
color: var(--muted-foreground);
|
| 352 |
+
}
|
| 353 |
+
|
| 354 |
+
.feature-check {
|
| 355 |
+
flex-shrink: 0;
|
| 356 |
+
height: 1.25rem;
|
| 357 |
+
width: 1.25rem;
|
| 358 |
+
margin-top: 0.0625rem;
|
| 359 |
+
border-radius: 9999px;
|
| 360 |
+
background: var(--foreground);
|
| 361 |
+
color: var(--background);
|
| 362 |
+
padding: 0.125rem;
|
| 363 |
+
}
|
| 364 |
+
|
| 365 |
+
/* ===== Stats ===== */
|
| 366 |
+
.stat-card {
|
| 367 |
+
padding: 1.5rem;
|
| 368 |
+
border: 1px solid var(--border);
|
| 369 |
+
border-radius: var(--radius);
|
| 370 |
+
background: var(--card);
|
| 371 |
+
transition: border-color 0.3s, transform 0.3s;
|
| 372 |
+
}
|
| 373 |
+
|
| 374 |
+
.stat-card:hover {
|
| 375 |
+
border-color: color-mix(in oklch, var(--brand) 30%, var(--border));
|
| 376 |
+
transform: translateY(-2px);
|
| 377 |
+
}
|
| 378 |
+
|
| 379 |
+
.stat-number {
|
| 380 |
+
font-size: 1.875rem;
|
| 381 |
+
font-weight: 800;
|
| 382 |
+
letter-spacing: -0.02em;
|
| 383 |
+
line-height: 1;
|
| 384 |
+
}
|
| 385 |
+
|
| 386 |
+
.stat-suffix {
|
| 387 |
+
font-size: 1.25rem;
|
| 388 |
+
color: var(--muted-foreground);
|
| 389 |
+
}
|
| 390 |
+
|
| 391 |
+
.stat-label {
|
| 392 |
+
margin-top: 0.5rem;
|
| 393 |
+
font-size: 0.75rem;
|
| 394 |
+
color: var(--muted-foreground);
|
| 395 |
+
}
|
| 396 |
+
|
| 397 |
+
/* ===== Testimonials ===== */
|
| 398 |
+
.testimonial-card {
|
| 399 |
+
display: flex;
|
| 400 |
+
flex-direction: column;
|
| 401 |
+
padding: 1.75rem;
|
| 402 |
+
border: 1px solid var(--border);
|
| 403 |
+
border-radius: var(--radius);
|
| 404 |
+
background: var(--card);
|
| 405 |
+
transition: border-color 0.3s, box-shadow 0.3s;
|
| 406 |
+
}
|
| 407 |
+
|
| 408 |
+
.testimonial-card:hover {
|
| 409 |
+
border-color: color-mix(in oklch, var(--brand) 25%, var(--border));
|
| 410 |
+
box-shadow: 0 12px 40px -12px rgb(0 0 0 / 0.1);
|
| 411 |
+
}
|
| 412 |
+
|
| 413 |
+
/* ===== FAQ ===== */
|
| 414 |
+
.faq-item {
|
| 415 |
+
border: 1px solid var(--border);
|
| 416 |
+
border-radius: var(--radius);
|
| 417 |
+
background: var(--card);
|
| 418 |
+
overflow: hidden;
|
| 419 |
+
transition: border-color 0.2s;
|
| 420 |
+
}
|
| 421 |
+
|
| 422 |
+
.faq-item.active {
|
| 423 |
+
border-color: color-mix(in oklch, var(--brand) 30%, var(--border));
|
| 424 |
+
}
|
| 425 |
+
|
| 426 |
+
.faq-trigger {
|
| 427 |
+
width: 100%;
|
| 428 |
+
display: flex;
|
| 429 |
+
align-items: center;
|
| 430 |
+
justify-content: space-between;
|
| 431 |
+
gap: 1rem;
|
| 432 |
+
padding: 1.125rem 1.25rem;
|
| 433 |
+
text-align: left;
|
| 434 |
+
cursor: pointer;
|
| 435 |
+
transition: background 0.2s;
|
| 436 |
+
}
|
| 437 |
+
|
| 438 |
+
.faq-trigger:hover {
|
| 439 |
+
background: var(--muted);
|
| 440 |
+
}
|
| 441 |
+
|
| 442 |
+
.faq-chevron {
|
| 443 |
+
color: var(--muted-foreground);
|
| 444 |
+
transition: transform 0.3s, color 0.2s;
|
| 445 |
+
}
|
| 446 |
+
|
| 447 |
+
.faq-item.active .faq-chevron {
|
| 448 |
+
transform: rotate(180deg);
|
| 449 |
+
color: var(--brand);
|
| 450 |
+
}
|
| 451 |
+
|
| 452 |
+
.faq-content {
|
| 453 |
+
max-height: 0;
|
| 454 |
+
overflow: hidden;
|
| 455 |
+
transition: max-height 0.35s ease;
|
| 456 |
+
}
|
| 457 |
+
|
| 458 |
+
.faq-item.active .faq-content {
|
| 459 |
+
max-height: 300px;
|
| 460 |
+
}
|
| 461 |
+
|
| 462 |
+
.faq-content > p {
|
| 463 |
+
padding: 0 1.25rem 1.125rem 1.25rem;
|
| 464 |
+
}
|
| 465 |
+
|
| 466 |
+
/* ===== Form ===== */
|
| 467 |
+
.form-label {
|
| 468 |
+
display: block;
|
| 469 |
+
margin-bottom: 0.375rem;
|
| 470 |
+
font-size: 0.8125rem;
|
| 471 |
+
font-weight: 500;
|
| 472 |
+
color: var(--foreground);
|
| 473 |
+
}
|
| 474 |
+
|
| 475 |
+
.form-input {
|
| 476 |
+
width: 100%;
|
| 477 |
+
padding: 0.625rem 0.875rem;
|
| 478 |
+
font-size: 0.875rem;
|
| 479 |
+
color: var(--foreground);
|
| 480 |
+
background: var(--background);
|
| 481 |
+
border: 1px solid var(--input);
|
| 482 |
+
border-radius: calc(var(--radius) - 2px);
|
| 483 |
+
outline: none;
|
| 484 |
+
transition: border-color 0.2s, box-shadow 0.2s;
|
| 485 |
+
}
|
| 486 |
+
|
| 487 |
+
.form-input::placeholder {
|
| 488 |
+
color: var(--muted-foreground);
|
| 489 |
+
}
|
| 490 |
+
|
| 491 |
+
.form-input:focus {
|
| 492 |
+
border-color: var(--ring);
|
| 493 |
+
box-shadow: 0 0 0 2px color-mix(in oklch, var(--ring) 30%, transparent);
|
| 494 |
+
}
|
| 495 |
+
|
| 496 |
+
.form-input:hover:not(:focus) {
|
| 497 |
+
border-color: var(--muted-foreground);
|
| 498 |
+
}
|
| 499 |
+
|
| 500 |
+
/* ===== Footer ===== */
|
| 501 |
+
.footer-title {
|
| 502 |
+
font-size: 0.8125rem;
|
| 503 |
+
font-weight: 700;
|
| 504 |
+
margin-bottom: 1rem;
|
| 505 |
+
}
|
| 506 |
+
|
| 507 |
+
.footer-links {
|
| 508 |
+
display: flex;
|
| 509 |
+
flex-direction: column;
|
| 510 |
+
gap: 0.625rem;
|
| 511 |
+
list-style: none;
|
| 512 |
+
padding: 0;
|
| 513 |
+
margin: 0;
|
| 514 |
+
}
|
| 515 |
+
|
| 516 |
+
.footer-links a {
|
| 517 |
+
font-size: 0.8125rem;
|
| 518 |
+
color: var(--muted-foreground);
|
| 519 |
+
transition: color 0.2s;
|
| 520 |
+
}
|
| 521 |
+
|
| 522 |
+
.footer-links a:hover {
|
| 523 |
+
color: var(--foreground);
|
| 524 |
+
}
|
| 525 |
+
|
| 526 |
+
.social-link {
|
| 527 |
+
display: flex;
|
| 528 |
+
align-items: center;
|
| 529 |
+
justify-content: center;
|
| 530 |
+
height: 2.25rem;
|
| 531 |
+
width: 2.25rem;
|
| 532 |
+
border: 1px solid var(--border);
|
| 533 |
+
border-radius: 0.5rem;
|
| 534 |
+
color: var(--muted-foreground);
|
| 535 |
+
transition: color 0.2s, background 0.2s, border-color 0.2s;
|
| 536 |
+
}
|
| 537 |
+
|
| 538 |
+
.social-link:hover {
|
| 539 |
+
color: var(--foreground);
|
| 540 |
+
background: var(--muted);
|
| 541 |
+
border-color: var(--muted-foreground);
|
| 542 |
+
}
|
| 543 |
+
|
| 544 |
+
/* ===== Animations ===== */
|
| 545 |
+
@keyframes fade-up {
|
| 546 |
+
from {
|
| 547 |
+
opacity: 0;
|
| 548 |
+
transform: translateY(16px);
|
| 549 |
+
}
|
| 550 |
+
to {
|
| 551 |
+
opacity: 1;
|
| 552 |
+
transform: translateY(0);
|
| 553 |
+
}
|
| 554 |
+
}
|
| 555 |
+
|
| 556 |
+
.animate-fade-up {
|
| 557 |
+
animation: fade-up 0.7s cubic-bezier(0.16, 1, 0.3, 1) both;
|
| 558 |
+
}
|
| 559 |
+
|
| 560 |
+
.animate-scroll-bounce {
|
| 561 |
+
animation: scroll-bounce 1.8s ease-in-out infinite;
|
| 562 |
+
}
|
| 563 |
+
|
| 564 |
+
@keyframes scroll-bounce {
|
| 565 |
+
0%, 100% { transform: translateY(0); opacity: 1; }
|
| 566 |
+
50% { transform: translateY(10px); opacity: 0.3; }
|
| 567 |
+
}
|
| 568 |
+
|
| 569 |
+
.reveal {
|
| 570 |
+
opacity: 0;
|
| 571 |
+
transform: translateY(24px);
|
| 572 |
+
transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
|
| 573 |
+
}
|
| 574 |
+
|
| 575 |
+
.reveal.revealed {
|
| 576 |
+
opacity: 1;
|
| 577 |
+
transform: translateY(0);
|
| 578 |
+
}
|
| 579 |
+
|
| 580 |
+
/* ===== Reduced Motion ===== */
|
| 581 |
+
@media (prefers-reduced-motion: reduce) {
|
| 582 |
+
*,
|
| 583 |
+
*::before,
|
| 584 |
+
*::after {
|
| 585 |
+
animation-duration: 0.01ms !important;
|
| 586 |
+
animation-iteration-count: 1 !important;
|
| 587 |
+
transition-duration: 0.01ms !important;
|
| 588 |
+
}
|
| 589 |
+
.reveal {
|
| 590 |
+
opacity: 1;
|
| 591 |
+
transform: none;
|
| 592 |
+
}
|
| 593 |
+
}
|
| 594 |
+
|
| 595 |
+
/* ===== Mobile ===== */
|
| 596 |
+
@media (max-width: 640px) {
|
| 597 |
+
.section-title {
|
| 598 |
+
font-size: 1.75rem;
|
| 599 |
+
}
|
| 600 |
+
}
|