:root { /* Colors */ --coral: #FF6B6B; --orange: #FFA94D; --yellow: #FFE066; --teal: #0D9488; --teal-light: #4ECDC4; --purple: #9333EA; --purple-light: #A855F7; --pink: #F472B6; /* Neutrals */ --white: #FFFFFF; --gray-50: #FAFAFA; --gray-100: #F5F5F5; --gray-200: #E5E5E5; --gray-300: #D4D4D4; --gray-400: #A3A3A3; --gray-500: #737373; --gray-600: #525252; --gray-700: #404040; --gray-800: #262626; --gray-900: #171717; /* Semantic */ --text-primary: var(--gray-900); --text-secondary: var(--gray-600); --text-muted: var(--gray-600); /* Fixed: was --gray-500, now meets AA contrast */ --link-color: var(--teal); --link-hover: var(--purple); /* Gradients */ --gradient-warm: linear-gradient(135deg, var(--coral) 0%, var(--orange) 100%); --gradient-cool: linear-gradient(135deg, var(--purple) 0%, var(--teal-light) 100%); --gradient-hero: linear-gradient(160deg, #FFF5F5 0%, #F0FDFA 50%, #FAF5FF 100%); /* Typography */ --font-display: 'Rubik', sans-serif; --font-body: 'Heebo', sans-serif; /* Spacing */ --space-xs: 0.25rem; --space-sm: 0.5rem; --space-md: 1rem; --space-lg: 1.5rem; --space-xl: 2rem; --space-2xl: 3rem; --space-3xl: 4rem; --space-4xl: 6rem; /* Borders */ --radius-sm: 8px; --radius-md: 12px; --radius-lg: 20px; --radius-xl: 28px; --radius-full: 9999px; /* Shadows */ --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.04); --shadow-md: 0 4px 20px rgba(0, 0, 0, 0.08); --shadow-lg: 0 8px 40px rgba(0, 0, 0, 0.12); --shadow-color: 0 8px 30px rgba(13, 148, 136, 0.25); /* Transitions */ --transition-fast: 0.15s ease; --transition-base: 0.3s ease; --transition-slow: 0.5s ease; --transition-bounce: 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); } /* Reset & Base */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; font-size: 16px; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } body { font-family: var(--font-body); font-weight: 400; line-height: 1.7; color: var(--text-secondary); background: var(--white); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } h1, h2, h3, h4, h5, h6 { font-family: var(--font-display); font-weight: 600; line-height: 1.3; color: var(--text-primary); } a { color: inherit; text-decoration: none; } img, svg { display: block; max-width: 100%; } button, input, select, textarea { font: inherit; color: inherit; } ul, ol { list-style: none; } /* Focus Styles */ :focus-visible { outline: 3px solid var(--teal); outline-offset: 3px; } /* Container */ .container { width: 100%; max-width: 1140px; margin-inline: auto; padding-inline: var(--space-lg); } /* Buttons */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-sm); padding: var(--space-md) var(--space-xl); font-family: var(--font-display); font-weight: 500; font-size: 1rem; border: none; border-radius: var(--radius-full); cursor: pointer; transition: all var(--transition-bounce); } .btn svg { width: 20px; height: 20px; flex-shrink: 0; } .btn-primary { background: var(--gradient-cool); color: var(--white); box-shadow: var(--shadow-color); } .btn-primary:hover { transform: translateY(-3px) scale(1.02); box-shadow: 0 12px 40px rgba(13, 148, 136, 0.35); } .btn-secondary { background: var(--white); color: var(--text-secondary); border: 2px solid var(--gray-200); } .btn-secondary:hover { border-color: var(--teal); color: var(--teal); transform: translateY(-3px); } .btn-full { width: 100%; } /* Header */ .site-header { position: fixed; top: 0; inset-inline: 0; z-index: 1000; background: rgba(255, 255, 255, 0.92); backdrop-filter: blur(20px); border-bottom: 1px solid rgba(0, 0, 0, 0.05); transition: box-shadow var(--transition-base); } .nav-container { display: flex; align-items: center; justify-content: space-between; max-width: 1140px; margin-inline: auto; padding: var(--space-md) var(--space-lg); } .logo { display: flex; align-items: center; gap: var(--space-sm); } .logo-icon { width: 40px; height: 40px; } .logo-text { font-family: var(--font-display); font-weight: 600; font-size: 1.25rem; background: var(--gradient-cool); -webkit-background-clip: text; background-clip: text; color: transparent; } .nav-links { display: flex; align-items: center; gap: var(--space-xl); } .nav-links a { font-weight: 500; color: var(--text-secondary); transition: color var(--transition-fast); position: relative; } .nav-links a:not(.nav-cta)::after { content: ''; position: absolute; bottom: -4px; inset-inline-start: 0; width: 0; height: 2px; background: var(--gradient-cool); border-radius: var(--radius-full); transition: width var(--transition-base); } .nav-links a:not(.nav-cta):hover::after, .nav-links a:not(.nav-cta):focus::after { width: 100%; } .nav-links a:not(.nav-cta):hover, .nav-links a:not(.nav-cta):focus { color: var(--text-primary); } .nav-cta { padding: var(--space-sm) var(--space-lg); background: var(--gradient-warm); color: var(--white) !important; border-radius: var(--radius-full); transition: all var(--transition-bounce); } .nav-cta:hover { transform: scale(1.05); box-shadow: 0 8px 25px rgba(255, 107, 107, 0.4); } .nav-toggle { display: none; flex-direction: column; justify-content: center; gap: 5px; width: 44px; height: 44px; background: none; border: none; cursor: pointer; padding: 10px; } .nav-toggle span { display: block; width: 100%; height: 2px; background: var(--gray-700); border-radius: var(--radius-full); transition: all var(--transition-base); } .nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: rotate(45deg) translate(5px, 5px); } .nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; } .nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: rotate(-45deg) translate(5px, -5px); } /* Hero Section */ .hero { position: relative; min-height: 100vh; min-height: 100dvh; display: flex; align-items: center; justify-content: center; padding: calc(80px + var(--space-3xl)) var(--space-lg) var(--space-3xl); background: var(--gradient-hero); overflow: hidden; } .hero-bg { position: absolute; inset: 0; overflow: hidden; pointer-events: none; } .blob { position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.5; will-change: transform; } .blob-1 { width: 450px; height: 450px; background: var(--coral); top: -15%; inset-inline-end: -10%; animation: blobFloat 25s ease-in-out infinite; } .blob-2 { width: 350px; height: 350px; background: var(--teal-light); bottom: -10%; inset-inline-start: -5%; animation: blobFloat 25s ease-in-out infinite reverse; animation-delay: -8s; } .blob-3 { width: 280px; height: 280px; background: var(--purple-light); top: 45%; inset-inline-start: 40%; animation: blobFloat 25s ease-in-out infinite; animation-delay: -16s; } @keyframes blobFloat { 0%, 100% { transform: translate(0, 0) scale(1); } 33% { transform: translate(25px, -25px) scale(1.05); } 66% { transform: translate(-20px, 15px) scale(0.97); } } .hero-content { position: relative; text-align: center; max-width: 720px; } .hero-title { font-size: clamp(2.25rem, 7vw, 4rem); font-weight: 600; margin-bottom: var(--space-lg); } .title-line { display: block; } .title-line.accent { background: var(--gradient-cool); -webkit-background-clip: text; background-clip: text; color: transparent; } .hero-subtitle { font-size: clamp(1.05rem, 2.2vw, 1.25rem); color: var(--text-secondary); margin-bottom: var(--space-2xl); max-width: 540px; margin-inline: auto; line-height: 1.8; } .hero-actions { display: flex; flex-wrap: wrap; gap: var(--space-md); justify-content: center; } /* Fixed: Direction-agnostic scroll indicator centering */ .scroll-indicator { position: absolute; bottom: var(--space-xl); inset-inline-start: 50%; transform: translateX(0); margin-inline-start: -16px; /* Half of 32px icon width */ color: var(--gray-400); animation: bounce 2s ease-in-out infinite; } .scroll-indicator svg { width: 32px; height: 32px; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(10px); } } /* Section Styles */ section { padding: var(--space-4xl) 0; } .section-header { text-align: center; margin-bottom: var(--space-3xl); } .section-tag { display: inline-block; padding: var(--space-sm) var(--space-lg); background: var(--teal); color: var(--white); font-size: 0.9rem; font-weight: 500; border-radius: var(--radius-full); margin-bottom: var(--space-md); } .section-title { font-size: clamp(1.75rem, 4.5vw, 2.75rem); margin-bottom: var(--space-md); } .section-desc { font-size: 1.1rem; color: var(--text-secondary); max-width: 560px; margin-inline: auto; } /* Services Section */ .services { background: var(--gray-50); } .services-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-xl); } .service-card { background: var(--white); padding: var(--space-2xl); border-radius: var(--radius-xl); box-shadow: var(--shadow-sm); transition: all var(--transition-bounce); border: 2px solid transparent; } .service-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); border-color: var(--gray-100); } .service-card--featured { grid-column: span 2; display: grid; grid-template-columns: auto 1fr auto; grid-template-rows: auto 1fr; gap: var(--space-md) var(--space-lg); align-items: start; } .service-card--featured .service-icon { grid-row: span 2; } .service-card--featured h3 { align-self: end; margin-bottom: 0; } .service-card--featured p { margin-bottom: 0; } .service-card--featured .service-link { grid-column: 2; justify-self: start; } .service-icon { width: 72px; height: 72px; margin-bottom: var(--space-lg); flex-shrink: 0; } .service-icon svg { width: 100%; height: 100%; } .service-card h3 { font-size: 1.25rem; margin-bottom: var(--space-md); } .service-card p { color: var(--text-secondary); margin-bottom: var(--space-lg); line-height: 1.8; } .service-link { display: inline-flex; align-items: center; gap: var(--space-sm); font-weight: 500; color: var(--teal); transition: gap var(--transition-base), color var(--transition-fast); } .service-link svg { width: 20px; height: 20px; transition: transform var(--transition-base); } .service-link:hover, .service-link:focus { color: var(--purple); gap: var(--space-md); } .service-link:hover svg, .service-link:focus svg { transform: translateX(4px); } [dir="rtl"] .service-link:hover svg, [dir="rtl"] .service-link:focus svg { transform: translateX(-4px); } /* About Section */ .about-layout { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: var(--space-3xl); align-items: center; } .about-content .section-header { text-align: start; } .about-text p { margin-bottom: var(--space-lg); color: var(--text-secondary); max-width: 55ch; } .about-features { display: flex; flex-wrap: wrap; gap: var(--space-md); margin-top: var(--space-xl); } .feature { display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) var(--space-md); background: var(--white); border: 1px solid var(--gray-200); border-radius: var(--radius-full); } .feature-icon { width: 24px; height: 24px; color: var(--teal); } .feature-icon svg { width: 100%; height: 100%; } .feature-text { font-weight: 500; color: var(--text-primary); font-size: 0.95rem; } .about-visual { display: flex; align-items: center; justify-content: center; } .visual-illustration { width: 100%; max-width: 320px; } .illustration-svg { width: 100%; height: auto; } /* FAQ Section */ .faq { background: var(--gradient-hero); } .faq-list { max-width: 720px; margin-inline: auto; } .faq-item { background: var(--white); border-radius: var(--radius-lg); margin-bottom: var(--space-md); box-shadow: var(--shadow-sm); overflow: hidden; transition: box-shadow var(--transition-base); } .faq-item:hover { box-shadow: var(--shadow-md); } .faq-question { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); padding: var(--space-lg) var(--space-xl); cursor: pointer; font-weight: 500; color: var(--text-primary); transition: color var(--transition-fast); } .faq-question::-webkit-details-marker { display: none; } .faq-question span { flex: 1; } .faq-icon { width: 24px; height: 24px; flex-shrink: 0; color: var(--teal); transition: transform var(--transition-base); } .faq-item[open] .faq-icon { transform: rotate(45deg); } .faq-item[open] .faq-question { color: var(--teal); } .faq-answer { padding: 0 var(--space-xl) var(--space-lg); color: var(--text-secondary); line-height: 1.8; max-width: 65ch; /* Added: prevents overly long lines */ } .faq-answer p { margin-bottom: var(--space-md); } .faq-answer p:last-child { margin-bottom: 0; } /* Contact Section */ .contact-wrapper { display: grid; grid-template-columns: 1fr 1.1fr; gap: var(--space-3xl); align-items: start; } .contact-info .section-header { text-align: start; } .contact-desc { color: var(--text-secondary); margin-bottom: var(--space-xl); } .contact-methods { display: flex; flex-direction: column; gap: var(--space-lg); } .contact-method { display: flex; align-items: center; gap: var(--space-md); } .method-icon { width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; background: var(--teal); border-radius: var(--radius-md); color: var(--white); flex-shrink: 0; } .method-icon svg { width: 24px; height: 24px; } .method-text { display: flex; flex-direction: column; } .method-label { font-size: 0.85rem; color: var(--text-muted); } .method-text a { color: var(--teal); font-weight: 500; transition: color var(--transition-fast); } .method-text a:hover { color: var(--purple); } .contact-form { background: var(--white); padding: var(--space-2xl); border-radius: var(--radius-xl); box-shadow: var(--shadow-md); } .form-group { margin-bottom: var(--space-lg); } .form-group label { display: block; font-weight: 500; color: var(--text-primary); margin-bottom: var(--space-sm); } .form-group input, .form-group select, .form-group textarea { width: 100%; padding: var(--space-md); border: 2px solid var(--gray-200); border-radius: var(--radius-md); background: var(--gray-50); transition: all var(--transition-fast); } .form-group input:focus, .form-group select:focus, .form-group textarea:focus { outline: none; border-color: var(--teal); background: var(--white); box-shadow: 0 0 0 4px rgba(13, 148, 136, 0.1); } .form-group input.error, .form-group select.error, .form-group textarea.error { border-color: var(--coral); } .form-group textarea { resize: vertical; min-height: 120px; } .form-group select { cursor: pointer; appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23737373' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: left 12px center; background-size: 20px; padding-inline-start: 40px; } [dir="ltr"] .form-group select { background-position: right 12px center; padding-inline-start: var(--space-md); padding-inline-end: 40px; } .form-error { color: var(--coral); font-size: 0.875rem; margin-top: var(--space-xs); display: none; } .form-group.has-error .form-error { display: block; } .form-status { padding: var(--space-md); border-radius: var(--radius-md); margin-bottom: var(--space-lg); display: none; } .form-status.success { display: block; background: rgba(13, 148, 136, 0.1); color: var(--teal); border: 1px solid var(--teal); } .form-status.error { display: block; background: rgba(255, 107, 107, 0.1); color: var(--coral); border: 1px solid var(--coral); } /* Footer */ .site-footer { background: var(--gray-900); color: var(--gray-400); padding: var(--space-3xl) 0 var(--space-xl); } .footer-content { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: var(--space-xl); padding-bottom: var(--space-xl); border-bottom: 1px solid var(--gray-800); } .footer-brand .logo-text { color: var(--white); background: none; -webkit-background-clip: unset; background-clip: unset; } .footer-tagline { margin-top: var(--space-sm); font-size: 0.9rem; } .footer-nav { display: flex; gap: var(--space-xl); flex-wrap: wrap; } .footer-nav a { transition: color var(--transition-fast); } .footer-nav a:hover, .footer-nav a:focus { color: var(--teal-light); } .footer-bottom { padding-top: var(--space-xl); text-align: center; font-size: 0.9rem; } /* Reveal Animations */ .reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.6s ease, transform 0.6s ease; } .reveal.revealed { opacity: 1; transform: translateY(0); } .service-card.reveal { transition-delay: calc(var(--delay, 0) * 0.1s); } .faq-item.reveal { transition-delay: calc(var(--delay, 0) * 0.08s); } /* Responsive */ @media (max-width: 1024px) { .service-card--featured { grid-column: span 2; display: block; } .service-card--featured .service-icon { margin-bottom: var(--space-lg); } .service-card--featured h3 { margin-bottom: var(--space-md); } .service-card--featured p { margin-bottom: var(--space-lg); } } @media (max-width: 968px) { .about-layout, .contact-wrapper { grid-template-columns: 1fr; gap: var(--space-2xl); } .about-visual { order: -1; } .visual-illustration { max-width: 260px; } .about-content .section-header, .contact-info .section-header { text-align: center; } .about-text p { max-width: none; } .about-features { justify-content: center; } .contact-desc { text-align: center; } .contact-methods { align-items: center; } } @media (max-width: 768px) { .nav-toggle { display: flex; } .nav-links { position: fixed; top: 72px; inset-inline: 0; flex-direction: column; background: var(--white); padding: var(--space-xl); gap: var(--space-lg); box-shadow: var(--shadow-lg); transform: translateY(-100%); opacity: 0; visibility: hidden; transition: all var(--transition-base); } .nav-links.active { transform: translateY(0); opacity: 1; visibility: visible; } .hero { padding-top: calc(72px + var(--space-2xl)); } section { padding: var(--space-3xl) 0; } /* Services: keep 2 columns for non-featured cards on tablet */ .services-grid { grid-template-columns: 1fr; } } @media (max-width: 480px) { :root { --space-lg: 1.25rem; --space-xl: 1.5rem; --space-2xl: 2rem; --space-3xl: 2.5rem; --space-4xl: 3rem; } .hero-actions { flex-direction: column; width: 100%; } .hero-actions .btn { width: 100%; } .footer-content { flex-direction: column; text-align: center; } .footer-nav { justify-content: center; gap: var(--space-md); } .contact-form { padding: var(--space-lg); } .service-card { padding: var(--space-xl); } } /* Pause animations when off-screen (intersection observer handles this in JS) */ @media (prefers-reduced-motion: no-preference) { .blob { animation-play-state: paused; } .hero-bg.in-view .blob { animation-play-state: running; } }