/* ============================================ HERO UNIFIED CSS Merged from 3 files for reduced HTTP requests Source files (in order): 1. hero-optimization.css (844 lines) - Base optimization, CTA, PWA 2. hero-enhancements.css (379 lines) - Page-specific variants 3. hero-intro-optimized.css (153 lines) - Text styling Created: February 4, 2026 Total: ~1,376 lines ============================================ */ /* ============================================ PART 1: HERO OPTIMIZATION Advanced visual relief, engagement, and conversion enhancements based on research-backed best practices ============================================ */ /* ============================================ I. LAYOUT & STRUCTURE ============================================ */ /* 60/40 Split Layout for Desktop */ .section--hero .row { display: grid; grid-template-columns: 1fr; gap: 2rem; } @media (min-width: 992px) { .section--hero .row { grid-template-columns: 60% 40%; align-items: center; } } /* Partial Hero Peek - 90vh to encourage scrolling */ .section--hero { min-height: 90vh; position: relative; } /* Section Overlap Effect - Hero content hangs into next section */ .section--hero::after { content: ''; position: absolute; bottom: -30px; left: 0; right: 0; height: 60px; background: linear-gradient(to bottom, var(--surface-navy) 0%, transparent 100% ); z-index: 1; pointer-events: none; } /* ============================================ II. TYPOGRAPHY & COPY HIERARCHY ============================================ */ /* Power Lead - First 3 words 20% larger */ .hero-title { text-wrap: balance; font-variant-numeric: lining-nums; } .hero-title::first-line { font-size: 1.1em; font-weight: 800; } /* Pre-Title Badge (eyebrow) */ .hero-badge, .hero-eyebrow { display: inline-block; font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.15em; color: var(--accent-coral, #FF1654); background: rgba(255, 22, 84, 0.1); padding: 0.4rem 0.85rem; border-radius: 4px; margin-bottom: 1rem; border: 1px solid rgba(255, 22, 84, 0.2); } .bg-dark .hero-badge, .bg-dark .hero-eyebrow, .section--hero .hero-badge, .section--hero .hero-eyebrow { background: rgba(255, 22, 84, 0.15); border-color: rgba(255, 22, 84, 0.3); color: var(--accent-coral, #FF1654); } /* Subtitle with Coral Accent */ .hero-subtitle-accent { color: var(--accent-coral, #FF1654) !important; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; margin-bottom: 1.25rem; } /* Micro-Divider between H1 and paragraph */ .hero-divider { width: 60px; height: 3px; background: linear-gradient(90deg, var(--accent-coral, #FF1654) 0%, var(--accent-gold, #d4a54c) 100% ); margin: 1.25rem 0; border-radius: 2px; } /* Word Highlighting for key terms */ .hero-highlight, .hero-intro .highlight { position: relative; color: inherit; font-weight: 600; } .hero-highlight::after, .hero-intro .highlight::after { content: ''; position: absolute; left: 0; right: 0; bottom: 2px; height: 3px; background: var(--accent-coral, #FF1654); opacity: 0.4; border-radius: 2px; } /* DHA and MOH keyword highlighting */ /* Line Height Scaling */ .hero-title { line-height: 1.1; } /* Font Weight Contrast */ /* ============================================ III. VISUAL RELIEF & BREATHING ROOM ============================================ */ /* Negative Space Halo around H1 */ .section--hero .hero-title { margin-top: 0; margin-bottom: 0.75rem; padding-bottom: 0.5rem; } /* Increased spacing for visual relief */ .section--hero .container { padding-top: clamp(2rem, 5vw, 4rem); padding-bottom: clamp(2rem, 5vw, 4rem); } /* Softened Edges for background boxes */ /* Text Shadow for legibility on images */ .section--hero.has-hero-image .hero-title, .section--hero.has-hero-image .hero-intro { text-shadow: 0 2px 20px rgba(0, 0, 0, 0.4); } /* Gradient Wash Effect */ .section--hero::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(135deg, rgba(14, 43, 72, 0.95) 0%, rgba(26, 41, 66, 0.90) 40%, rgba(42, 63, 95, 0.85) 100% ); z-index: 0; } .section--hero > * { position: relative; z-index: 1; } /* ============================================ IV. INTERACTION & MOVEMENT ============================================ */ /* Entrance Fade Animation */ @keyframes heroFadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes heroSlideUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } .section--hero .hero-title { animation: heroFadeIn 0.6s ease-out; } .section--hero .hero-subtitle-accent { animation: heroFadeIn 0.6s ease-out 0.1s; animation-fill-mode: backwards; } .section--hero .hero-intro { animation: heroFadeIn 0.6s ease-out 0.2s; animation-fill-mode: backwards; } .section--hero .service-snapshot { animation: heroFadeIn 0.6s ease-out 0.3s; animation-fill-mode: backwards; } .section--hero .hero-cta-group { animation: heroSlideUp 0.6s ease-out 0.4s; animation-fill-mode: backwards; } /* Scroll Indicator - Styles moved to micro-cues.css */ /* See /styles/micro-cues.css for scroll indicator, reading progress, and reveal animations */ /* Respect reduced motion preferences for hero animations */ @media (prefers-reduced-motion: reduce) { .section--hero .hero-title, .section--hero .hero-subtitle-accent, .section--hero .hero-intro, .section--hero .service-snapshot, .section--hero .hero-cta-group { animation: none; } } /* ============================================ V. TRUST & SOCIAL PROOF ============================================ */ /* Inline Star Rating */ .hero-rating { display: inline-flex; align-items: center; gap: 0.5rem; font-size: 0.875rem; color: var(--text-on-dark-muted); margin-left: 1rem; } .hero-rating .stars { color: var(--accent-gold, #d4a54c); letter-spacing: 2px; } .hero-rating .rating-text { opacity: 0.9; } /* "Live" Badge */ @keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(1.2); } } /* Authority Subtitle */ /* Logo Strip at Hero Bottom */ /* Counter Animation */ /* ============================================ VI. CTA STRATEGY ============================================ */ /* Primary/Secondary Button Pair */ .hero-cta-group { display: flex; flex-wrap: wrap; gap: 1rem; margin-top: 2rem; align-items: center; } /* Primary CTA Enhancement */ .hero-cta-group .btn--primary, .hero-cta-group .btn--lg { position: relative; overflow: hidden; background: var(--accent-coral, #FF1654); border: none; font-weight: 600; letter-spacing: 0.02em; padding: 1rem 2rem; border-radius: 8px; transition: all 0.3s ease; box-shadow: 0 4px 15px rgba(255, 22, 84, 0.3), 0 0 0 0 rgba(255, 22, 84, 0.4); } .hero-cta-group .btn--primary:hover, .hero-cta-group .btn--lg:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(255, 22, 84, 0.4), 0 0 0 3px rgba(255, 22, 84, 0.2); } /* Arrow Indicator on CTA */ .hero-cta-group .btn--primary::after, .hero-cta-group .btn--lg::after { content: '\2192'; margin-left: 0.5rem; display: inline-block; transition: transform 0.3s ease; } .hero-cta-group .btn--primary:hover::after, .hero-cta-group .btn--lg:hover::after { transform: translateX(4px); } /* Ghost/Secondary Button */ .hero-cta-group .btn--outline, .hero-cta-group .btn--secondary { background: transparent; border: 2px solid rgba(255, 255, 255, 0.3); color: var(--text-on-dark); padding: 0.9rem 1.75rem; border-radius: 8px; transition: all 0.3s ease; } .hero-cta-group .btn--outline:hover, .hero-cta-group .btn--secondary:hover { background: rgba(255, 255, 255, 0.1); border-color: rgba(255, 255, 255, 0.5); } /* Hover Pulse Effect */ @keyframes ctaPulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.02); } } .hero-cta-group .btn--primary:focus, .hero-cta-group .btn--lg:focus { animation: ctaPulse 0.6s ease; } /* Under-Button Note */ .hero-cta-note { display: block; font-size: 0.8rem; color: var(--text-on-dark-muted); margin-top: 0.75rem; opacity: 0.8; } .hero-cta-note i { margin-right: 0.25rem; color: var(--state-success, #10b981); } /* WhatsApp Button Special Styling */ .hero-cta-group .btn--whatsapp, .hero-cta-group a[href*="wa.me"] { background: linear-gradient(135deg, #25D366 0%, #128C7E 100%); } .hero-cta-group .btn--whatsapp:hover, .hero-cta-group a[href*="wa.me"]:hover { box-shadow: 0 8px 25px rgba(37, 211, 102, 0.4), 0 0 0 3px rgba(37, 211, 102, 0.2); } /* ============================================ VII. MOBILE PWA OPTIMIZATIONS ============================================ */ @media (max-width: 768px) { /* Thumb-Zone Placement */ .section--hero .hero-cta-group { position: sticky; bottom: 0; left: 0; right: 0; background: linear-gradient(to top, var(--surface-navy) 0%, var(--surface-navy) 80%, transparent 100% ); padding: 1rem 0 calc(1rem + env(safe-area-inset-bottom)); margin: 0 -1rem; padding-left: 1rem; padding-right: 1rem; z-index: 10; } /* Shortened Headlines */ .section--hero .hero-title { font-size: clamp(1.5rem, 6vw, 2.25rem); line-height: 1.15; } /* Full-Width Hero */ .section--hero { min-height: 85vh; padding-left: 0; padding-right: 0; } .section--hero .container { padding-left: 1rem; padding-right: 1rem; } /* Optimized Tap Targets */ .hero-cta-group .btn--primary, .hero-cta-group .btn--lg, .hero-cta-group a { min-height: 48px; width: 100%; justify-content: center; text-align: center; } /* Contrast Boost for sunlight */ .section--hero::before { background: linear-gradient(135deg, rgba(14, 43, 72, 0.97) 0%, rgba(26, 41, 66, 0.95) 40%, rgba(42, 63, 95, 0.92) 100% ); } /* Scroll indicator repositioned for mobile - see micro-cues.css */ /* Stacked Trust Icons */ /* Mobile-specific badge styling */ .hero-badge, .hero-eyebrow { font-size: 0.7rem; padding: 0.3rem 0.6rem; } } /* Small mobile */ @media (max-width: 480px) { .section--hero .hero-title { font-size: clamp(1.25rem, 7vw, 1.75rem); } .section--hero .hero-intro { font-size: 0.95rem; } /* Quick-Action Icons at hero base */ } /* iPhone notch/safe area support */ @supports (padding-bottom: env(safe-area-inset-bottom)) { .hero-cta-group { padding-bottom: calc(1rem + env(safe-area-inset-bottom)); } } /* ============================================ VIII. ADVANCED CSS HERO TRICKS ============================================ */ /* Subtle Mesh Gradient Background */ /* Animated Border Effect */ @keyframes borderGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } } /* Perspective Tilt (subtle desktop effect) */ @media (min-width: 992px) and (prefers-reduced-motion: no-preference) { .section--hero .hero-title { transform-style: preserve-3d; perspective: 1000px; } } /* SVG Wave Divider */ /* ============================================ IX. SERVICE SNAPSHOT ENHANCEMENTS ============================================ */ .service-snapshot { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 0.75rem 1.5rem; margin: 1.5rem 0; } .snapshot-item { display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 0; border-left: 3px solid var(--accent-coral, #FF1654); padding-left: 1rem; transition: all 0.3s ease; } .snapshot-item:hover { background: rgba(255, 255, 255, 0.03); border-radius: 0 8px 8px 0; } .snapshot-item i { color: var(--accent-coral, #FF1654); font-size: 1rem; width: 24px; text-align: center; flex-shrink: 0; } .snapshot-item strong { color: var(--text-on-dark); font-weight: 600; } .snapshot-item span { color: var(--text-on-dark-muted); font-size: 0.95rem; line-height: 1.4; } @media (max-width: 768px) { .service-snapshot { grid-template-columns: 1fr; gap: 0.5rem; } .snapshot-item { padding: 0.4rem 0 0.4rem 0.75rem; } } /* ============================================ X. HERO TABLE STYLING (for DHA DataFlow) ============================================ */ .hero-intro table, .hero-table { width: 100%; border-collapse: collapse; margin: 1rem 0; font-size: 0.9rem; background: rgba(255, 255, 255, 0.03); border-radius: 8px; overflow: hidden; } .hero-intro th, .hero-table th { background: rgba(255, 22, 84, 0.15); color: var(--text-on-dark); font-weight: 600; text-align: left; padding: 0.75rem 1rem; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .hero-intro td, .hero-table td { padding: 0.6rem 1rem; border-bottom: 1px solid rgba(255, 255, 255, 0.05); color: var(--text-on-dark-muted); } .hero-intro tr:last-child td, .hero-table tr:last-child td { border-bottom: none; } .hero-intro tr:hover td, .hero-table tr:hover td { background: rgba(255, 255, 255, 0.02); } @media (max-width: 768px) { .hero-intro table, .hero-table { font-size: 0.85rem; } .hero-intro th, .hero-intro td, .hero-table th, .hero-table td { padding: 0.5rem 0.75rem; } } /* ============================================ XI. ACCESSIBILITY ENHANCEMENTS ============================================ */ /* Focus States */ .section--hero a:focus, .section--hero button:focus { outline: 2px solid var(--accent-coral, #FF1654); outline-offset: 3px; } /* High Contrast Mode */ @media (prefers-contrast: high) { .hero-badge, .hero-eyebrow { border-width: 2px; } .section--hero .hero-title, .section--hero .hero-intro { text-shadow: none; } .hero-cta-group .btn--primary { border: 2px solid currentColor; } } /* Anti-Aliasing for crisp white text */ .section--hero { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* ============================================ XII. DARK MODE REFINEMENTS ============================================ */ [data-theme="dark"] .section--hero::before, body.theme-dark .section--hero::before { background: linear-gradient(135deg, rgba(11, 17, 26, 0.98) 0%, rgba(18, 27, 42, 0.95) 40%, rgba(27, 39, 56, 0.92) 100% ); } [data-theme="dark"] .hero-badge, body.theme-dark .hero-badge { background: rgba(255, 107, 107, 0.15); border-color: rgba(255, 107, 107, 0.3); color: var(--accent-coral); } [data-theme="dark"] .snapshot-item, body.theme-dark .snapshot-item { border-left-color: var(--accent-coral); } /* ============================================ PART 2: HERO ENHANCEMENTS Visual Relief System - Gradient overlays and pattern backgrounds for page heroes ============================================ */ /* ============================================ BASE PAGE HERO STYLING ============================================ */ .page-hero { position: relative; padding: 100px 0 80px; overflow: hidden; min-height: 280px; } /* Background container */ .hero-background { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 0; } /* Background image support */ .hero-background img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; } /* ServiceLayout hero with background image */ .section--hero.has-hero-image { position: relative; min-height: 400px; } .section--hero.has-hero-image .hero-bg-image { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; object-position: center top; z-index: 0; } .section--hero.has-hero-image .hero-gradient-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(14, 43, 72, 0.92) 0%, rgba(26, 41, 66, 0.88) 50%, rgba(42, 63, 95, 0.82) 100% ); z-index: 1; } .section--hero.has-hero-image .container { position: relative; z-index: 2; } /* Pattern layer - subtle texture */ .hero-background::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: url('/assets/images/patterns/additional/dots-pattern.svg'); background-size: 30px 30px; background-repeat: repeat; opacity: 0.08; z-index: 1; } /* Gradient overlay - default navy */ .hero-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(14, 43, 72, 0.95) 0%, rgba(26, 41, 66, 0.92) 50%, rgba(42, 63, 95, 0.88) 100% ); z-index: 2; } /* Content layer - ensure it's above background */ .page-hero .container { position: relative; z-index: 3; } /* Hero text styling */ .page-title { color: #ffffff; font-size: 42px; font-weight: 700; margin-bottom: 16px; line-height: 1.2; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); } .page-subtitle { color: #e6edf3; font-size: 20px; font-weight: 400; margin-bottom: 24px; line-height: 1.5; opacity: 0.95; } /* Breadcrumb styling */ .breadcrumb { margin-bottom: 24px; font-size: 14px; color: #c9d1d9; } .breadcrumb a { color: #e6edf3; text-decoration: none; transition: color 0.2s ease; } .breadcrumb a:hover { color: #FF1654; } .breadcrumb .separator { margin: 0 8px; opacity: 0.6; } .breadcrumb .current { color: #FF1654; font-weight: 500; } /* ============================================ PAGE-SPECIFIC HERO VARIANTS ============================================ */ /* About page - gold accent for trust/certification */ .about-hero .hero-overlay { background: linear-gradient(135deg, rgba(212, 175, 55, 0.15) 0%, rgba(14, 43, 72, 0.95) 25%, rgba(26, 41, 66, 0.92) 70%, rgba(42, 63, 95, 0.88) 100% ); } /* Services pages - coral accent for action */ /* Contact page - neutral professional */ .contact-hero .hero-overlay { background: linear-gradient(135deg, rgba(14, 43, 72, 0.98) 0%, rgba(26, 41, 66, 0.95) 50%, rgba(42, 63, 95, 0.92) 100% ); } /* Locations pages - blue gradient for geography */ /* Industries pages - purple accent for diversity */ /* Legal pages - deep navy for authority */ /* ============================================ PATTERN VARIATIONS ============================================ */ /* Diagonal lines pattern for legal pages */ /* World map pattern for location pages */ /* ============================================ PAGE HERO RESPONSIVE ADJUSTMENTS ============================================ */ /* Tablet */ @media (max-width: 1024px) { .page-hero { padding: 80px 0 60px; min-height: 240px; } .page-title { font-size: 36px; } .page-subtitle { font-size: 18px; } } /* Mobile */ @media (max-width: 768px) { .page-hero { padding: 60px 0 40px; min-height: 200px; } .page-title { font-size: 28px; margin-bottom: 12px; } .page-subtitle { font-size: 16px; margin-bottom: 20px; } .breadcrumb { font-size: 13px; margin-bottom: 20px; } /* Adjust pattern size for mobile */ .hero-background::before { background-size: 20px 20px; } } /* Small mobile */ @media (max-width: 480px) { .page-hero { padding: 50px 0 35px; } .page-title { font-size: 24px; } .page-subtitle { font-size: 15px; } } /* ============================================ PAGE HERO LIGHT MODE ADJUSTMENTS ============================================ */ @media (prefers-color-scheme: light) { /* Lighter gradients for light mode */ .hero-overlay { background: linear-gradient(135deg, rgba(14, 43, 72, 0.92) 0%, rgba(26, 41, 66, 0.88) 50%, rgba(42, 63, 95, 0.85) 100% ); } /* Increase pattern visibility slightly */ .hero-background::before { opacity: 0.12; } /* Ensure text remains readable */ .page-title { text-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); } } /* ============================================ PAGE HERO SUBTLE ANIMATIONS ============================================ */ /* Fade in on load - using same keyframe from Part 1 */ .page-hero { animation: heroFadeIn 0.6s ease-out; } /* Parallax effect on scroll (subtle) */ @media (prefers-reduced-motion: no-preference) { .hero-background { transition: transform 0.3s ease-out; } } /* ============================================ PAGE HERO ACCESSIBILITY ============================================ */ /* Ensure sufficient contrast */ .page-hero * { color: inherit; } /* Focus states for breadcrumb links */ .breadcrumb a:focus { outline: 2px solid #FF1654; outline-offset: 2px; border-radius: 2px; } /* Respect reduced motion preferences */ @media (prefers-reduced-motion: reduce) { .page-hero, .hero-background { animation: none; transition: none; } } /* ============================================ PART 3: HERO INTRO OPTIMIZATION Centralized styles for all hero intro text Implements: - text-wrap: balance (modern browsers) - Responsive font sizing with clamp() - Optimized line-height (1.6 vs 1.8) - WCAG AA contrast compliance - 65ch max-width for scannability ============================================ */ /* Base hero intro styles */ .hero-intro { font-size: clamp(1.1rem, 1rem + 0.5vw, 1.25rem); line-height: 1.6; font-weight: 400; max-width: 65ch; text-wrap: balance; margin-bottom: 1.5rem; } /* Dark background variant (most common) */ .bg-dark .hero-intro, .section--hero .hero-intro, .category-hero .hero-intro, [data-theme="dark"] .hero-intro { color: var(--text-on-dark, #f4f7fc); } /* Light background variant */ .bg-light .hero-intro, [data-theme="light"] .hero-intro { color: var(--text-body, #2d3748); } /* Paragraph spacing */ .hero-intro p { margin-bottom: 0.75rem; } .hero-intro p:last-child { margin-bottom: 0; } /* Links - dark background */ .bg-dark .hero-intro a, .section--hero .hero-intro a, .category-hero .hero-intro a, [data-theme="dark"] .hero-intro a { color: var(--link-on-dark, #7fd1ff); text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; } .bg-dark .hero-intro a:hover, .section--hero .hero-intro a:hover, .category-hero .hero-intro a:hover, [data-theme="dark"] .hero-intro a:hover { color: var(--link-on-dark-hover, #ffe178); } /* Links - light background */ .bg-light .hero-intro a, [data-theme="light"] .hero-intro a { color: var(--link-color, #0077b6); text-decoration: underline; } .bg-light .hero-intro a:hover, [data-theme="light"] .hero-intro a:hover { color: var(--accent-coral, #FF1654); } /* Strong/emphasis text */ .hero-intro strong { font-weight: 600; } .bg-dark .hero-intro strong, .section--hero .hero-intro strong, .category-hero .hero-intro strong, [data-theme="dark"] .hero-intro strong { color: var(--text-on-dark, #f4f7fc); } /* Lists within hero intro (rare but exists) */ .hero-intro ul, .hero-intro ol { margin: 0.75rem 0; padding-left: 1.25rem; } .hero-intro li { margin-bottom: 0.375rem; } /* Subheadings within hero intro (rare) */ .hero-intro h3 { font-size: 1.1rem; font-weight: 600; margin-top: 1rem; margin-bottom: 0.5rem; } /* Highlight spans - consolidate with Part 1 */ .hero-intro .hero-highlight { color: var(--accent-coral, #FF1654); font-weight: 600; } /* ============================================ HERO INTRO RESPONSIVE ADJUSTMENTS ============================================ */ /* Tablet */ @media (max-width: 1024px) { .hero-intro { font-size: clamp(1rem, 0.95rem + 0.4vw, 1.15rem); } } /* Mobile */ @media (max-width: 768px) { .hero-intro { font-size: 1rem; line-height: 1.65; max-width: 100%; text-wrap: pretty; /* Fallback for mobile - less aggressive than balance */ } } /* Small mobile */ @media (max-width: 480px) { .hero-intro { font-size: 0.95rem; } } /* ============================================ BROWSER FALLBACKS text-wrap: balance not supported in all browsers ============================================ */ @supports not (text-wrap: balance) { .hero-intro { text-wrap: wrap; } }