/* ===== CSS Variables (OKLCH Color Theme) ===== */ :root { --background: oklch(1 0 0); --foreground: oklch(0.145 0 0); --card: oklch(1 0 0); --card-foreground: oklch(0.145 0 0); --popover: oklch(1 0 0); --popover-foreground: oklch(0.145 0 0); --primary: oklch(0.205 0 0); --primary-foreground: oklch(0.985 0 0); --secondary: oklch(0.97 0 0); --secondary-foreground: oklch(0.205 0 0); --muted: oklch(0.97 0 0); --muted-foreground: oklch(0.556 0 0); --accent: oklch(0.97 0 0); --accent-foreground: oklch(0.205 0 0); --destructive: oklch(0.577 0.245 27.325); --border: oklch(0.922 0 0); --input: oklch(0.922 0 0); --ring: oklch(0.708 0 0); --radius: 0.625rem; --brand: oklch(0.488 0.243 264.376); --grid-color: oklch(0.922 0 0); } .dark { --background: oklch(0.145 0 0); --foreground: oklch(0.985 0 0); --card: oklch(0.205 0 0); --card-foreground: oklch(0.985 0 0); --popover: oklch(0.205 0 0); --popover-foreground: oklch(0.985 0 0); --primary: oklch(0.922 0 0); --primary-foreground: oklch(0.205 0 0); --secondary: oklch(0.269 0 0); --secondary-foreground: oklch(0.985 0 0); --muted: oklch(0.269 0 0); --muted-foreground: oklch(0.708 0 0); --accent: oklch(0.269 0 0); --accent-foreground: oklch(0.985 0 0); --destructive: oklch(0.704 0.191 22.216); --border: oklch(1 0 0 / 10%); --input: oklch(1 0 0 / 15%); --ring: oklch(0.556 0 0); --brand: oklch(0.6 0.2 264); --grid-color: oklch(1 0 0 / 5%); } /* ===== Base ===== */ * { border-color: var(--border); } html { scroll-behavior: smooth; } body { font-feature-settings: "cv02", "cv03", "cv04", "cv11"; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* ===== Custom Scrollbar ===== */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--background); } ::-webkit-scrollbar-thumb { background: var(--muted); border-radius: 9999px; } ::-webkit-scrollbar-thumb:hover { background: var(--muted-foreground); } /* ===== Navbar ===== */ #navbar.scrolled #navbar-inner { background: color-mix(in oklch, var(--background) 80%, transparent); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.04), 0 1px 2px -1px rgb(0 0 0 / 0.03); } .nav-link { padding: 0.5rem 0.875rem; font-size: 0.8125rem; font-weight: 500; color: var(--muted-foreground); border-radius: 0.5rem; transition: color 0.2s, background 0.2s; } .nav-link:hover { color: var(--foreground); background: var(--muted); } .mobile-link { display: block; padding: 0.625rem 0.875rem; font-size: 0.875rem; font-weight: 500; color: var(--muted-foreground); border-radius: 0.5rem; transition: color 0.2s, background 0.2s; } .mobile-link:hover { color: var(--foreground); background: var(--muted); } .quick-link { position: relative; transition: color 0.2s; } .quick-link::after { content: ""; position: absolute; bottom: -2px; left: 0; width: 0; height: 1px; background: var(--foreground); transition: width 0.2s; } .quick-link:hover { color: var(--foreground); } .quick-link:hover::after { width: 100%; } /* ===== Hero Background ===== */ .hero-grid { background-image: linear-gradient(to right, var(--grid-color) 1px, transparent 1px), linear-gradient(to bottom, var(--grid-color) 1px, transparent 1px); background-size: 64px 64px; -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 0%, black 30%, transparent 80%); mask-image: radial-gradient(ellipse 70% 60% at 50% 0%, black 30%, transparent 80%); } .hero-glow { background: radial-gradient(circle at 50% 0%, color-mix(in oklch, var(--brand) 8%, transparent), transparent 60%); } /* ===== Section Labels ===== */ .section-label { display: inline-block; font-size: 0.6875rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.12em; color: var(--muted-foreground); } .section-title { font-size: clamp(1.875rem, 4vw, 3rem); font-weight: 800; line-height: 1.1; letter-spacing: -0.02em; } .section-desc { max-width: 40rem; margin-left: auto; margin-right: auto; font-size: 0.9375rem; line-height: 1.6; color: var(--muted-foreground); } /* ===== Service Cards ===== */ .service-card { position: relative; display: flex; flex-direction: column; padding: 1.75rem; border: 1px solid color-mix(in oklch, var(--border) 60%, transparent); border-radius: var(--radius); background: var(--card); transition: border-color 0.3s, box-shadow 0.3s, transform 0.3s; overflow: hidden; } .service-card::before { content: ""; position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: 50%; height: 1px; background: linear-gradient(90deg, transparent, var(--brand), transparent); opacity: 0; transition: opacity 0.3s; } .service-card:hover { border-color: color-mix(in oklch, var(--border) 100%, transparent); box-shadow: 0 0 0 1px color-mix(in oklch, var(--brand) 15%, transparent), 0 12px 40px -12px rgb(0 0 0 / 0.15); transform: translateY(-2px); } .service-card:hover::before { opacity: 1; } .service-icon { display: flex; align-items: center; justify-content: center; height: 2.75rem; width: 2.75rem; border-radius: 0.625rem; border: 1px solid var(--border); background: var(--muted); color: var(--foreground); transition: background 0.3s, border-color 0.3s; } .service-card:hover .service-icon { background: var(--foreground); color: var(--background); border-color: var(--foreground); } .service-tag { margin-top: 1.25rem; font-size: 0.6875rem; font-weight: 500; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted-foreground); } .service-title { margin-top: 0.375rem; font-size: 1.0625rem; font-weight: 700; letter-spacing: -0.01em; } .service-desc { margin-top: 0.5rem; font-size: 0.8125rem; line-height: 1.6; color: var(--muted-foreground); flex-grow: 1; } .service-tech { margin-top: 1.25rem; display: flex; flex-wrap: wrap; gap: 0.375rem; } .tech-pill { font-size: 0.6875rem; font-weight: 500; padding: 0.25rem 0.625rem; border-radius: 0.375rem; background: var(--muted); color: var(--muted-foreground); transition: background 0.2s, color 0.2s; } .service-card:hover .tech-pill { background: color-mix(in oklch, var(--brand) 10%, var(--muted)); color: var(--foreground); } /* ===== Process Steps ===== */ .process-step { background: var(--card); padding: 2rem 1.75rem; position: relative; transition: background 0.3s; } .process-step:hover { background: var(--muted); } .process-number { font-size: 0.6875rem; font-weight: 700; letter-spacing: 0.1em; color: var(--muted-foreground); } .process-icon { height: 1.5rem; width: 1.5rem; margin-top: 1rem; color: var(--brand); } .process-title { margin-top: 0.75rem; font-size: 1rem; font-weight: 700; } .process-desc { margin-top: 0.5rem; font-size: 0.8125rem; line-height: 1.6; color: var(--muted-foreground); } /* ===== Tech Marquee ===== */ .tech-badge { display: flex; align-items: center; gap: 0.5rem; padding: 0.625rem 1.25rem; border: 1px solid var(--border); border-radius: 0.625rem; background: var(--card); font-size: 0.8125rem; font-weight: 600; white-space: nowrap; transition: border-color 0.2s, background 0.2s; } .tech-badge:hover { border-color: color-mix(in oklch, var(--brand) 30%, var(--border)); background: var(--muted); } .marquee-track { animation: marquee 35s linear infinite; } @keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-100%); } } /* ===== About ===== */ .feature-item { display: flex; align-items: flex-start; gap: 0.625rem; font-size: 0.875rem; color: var(--muted-foreground); } .feature-check { flex-shrink: 0; height: 1.25rem; width: 1.25rem; margin-top: 0.0625rem; border-radius: 9999px; background: var(--foreground); color: var(--background); padding: 0.125rem; } /* ===== Stats ===== */ .stat-card { padding: 1.5rem; border: 1px solid var(--border); border-radius: var(--radius); background: var(--card); transition: border-color 0.3s, transform 0.3s; } .stat-card:hover { border-color: color-mix(in oklch, var(--brand) 30%, var(--border)); transform: translateY(-2px); } .stat-number { font-size: 1.875rem; font-weight: 800; letter-spacing: -0.02em; line-height: 1; } .stat-suffix { font-size: 1.25rem; color: var(--muted-foreground); } .stat-label { margin-top: 0.5rem; font-size: 0.75rem; color: var(--muted-foreground); } /* ===== Testimonials ===== */ .testimonial-card { display: flex; flex-direction: column; padding: 1.75rem; border: 1px solid var(--border); border-radius: var(--radius); background: var(--card); transition: border-color 0.3s, box-shadow 0.3s; } .testimonial-card:hover { border-color: color-mix(in oklch, var(--brand) 25%, var(--border)); box-shadow: 0 12px 40px -12px rgb(0 0 0 / 0.1); } /* ===== FAQ ===== */ .faq-item { border: 1px solid var(--border); border-radius: var(--radius); background: var(--card); overflow: hidden; transition: border-color 0.2s; } .faq-item.active { border-color: color-mix(in oklch, var(--brand) 30%, var(--border)); } .faq-trigger { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1.125rem 1.25rem; text-align: left; cursor: pointer; transition: background 0.2s; } .faq-trigger:hover { background: var(--muted); } .faq-chevron { color: var(--muted-foreground); transition: transform 0.3s, color 0.2s; } .faq-item.active .faq-chevron { transform: rotate(180deg); color: var(--brand); } .faq-content { max-height: 0; overflow: hidden; transition: max-height 0.35s ease; } .faq-item.active .faq-content { max-height: 300px; } .faq-content > p { padding: 0 1.25rem 1.125rem 1.25rem; } /* ===== Form ===== */ .form-label { display: block; margin-bottom: 0.375rem; font-size: 0.8125rem; font-weight: 500; color: var(--foreground); } .form-input { width: 100%; padding: 0.625rem 0.875rem; font-size: 0.875rem; color: var(--foreground); background: var(--background); border: 1px solid var(--input); border-radius: calc(var(--radius) - 2px); outline: none; transition: border-color 0.2s, box-shadow 0.2s; } .form-input::placeholder { color: var(--muted-foreground); } .form-input:focus { border-color: var(--ring); box-shadow: 0 0 0 2px color-mix(in oklch, var(--ring) 30%, transparent); } .form-input:hover:not(:focus) { border-color: var(--muted-foreground); } /* ===== Footer ===== */ .footer-title { font-size: 0.8125rem; font-weight: 700; margin-bottom: 1rem; } .footer-links { display: flex; flex-direction: column; gap: 0.625rem; list-style: none; padding: 0; margin: 0; } .footer-links a { font-size: 0.8125rem; color: var(--muted-foreground); transition: color 0.2s; } .footer-links a:hover { color: var(--foreground); } .social-link { display: flex; align-items: center; justify-content: center; height: 2.25rem; width: 2.25rem; border: 1px solid var(--border); border-radius: 0.5rem; color: var(--muted-foreground); transition: color 0.2s, background 0.2s, border-color 0.2s; } .social-link:hover { color: var(--foreground); background: var(--muted); border-color: var(--muted-foreground); } /* ===== Animations ===== */ @keyframes fade-up { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } .animate-fade-up { animation: fade-up 0.7s cubic-bezier(0.16, 1, 0.3, 1) both; } .animate-scroll-bounce { animation: scroll-bounce 1.8s ease-in-out infinite; } @keyframes scroll-bounce { 0%, 100% { transform: translateY(0); opacity: 1; } 50% { transform: translateY(10px); opacity: 0.3; } } .reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), transform 0.7s cubic-bezier(0.16, 1, 0.3, 1); } .reveal.revealed { opacity: 1; transform: translateY(0); } /* ===== Reduced Motion ===== */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } .reveal { opacity: 1; transform: none; } } /* ===== Mobile ===== */ @media (max-width: 640px) { .section-title { font-size: 1.75rem; } }