@use '../../styles/variables' as *; @use '../../styles/mixins' as *; .hero { position: relative; min-height: 100vh; overflow: hidden; display: flex; align-items: center; justify-content: center; @media (min-width: #{$bp-md}) { min-height: 70vh; max-height: 80vh; } } .hero-mountains { position: absolute; inset: 0; z-index: 0; img { width: 100%; height: 100%; object-fit: cover; object-position: center bottom; } } .hero-gradient { position: absolute; inset: 0; z-index: 1; background: $sky-gradient; opacity: 0.85; } .hero-content { position: relative; z-index: 4; text-align: center; padding: $spacing-3xl $spacing-lg; @media (min-width: #{$bp-md}) { padding: $spacing-xl $spacing-lg; } } .hero-inner { @include fade-in; } .hero-icon { margin-bottom: $spacing-lg; animation: float 4s ease-in-out infinite; .hero-flower { width: 100px; height: 100px; margin: 0 auto; filter: drop-shadow(0 4px 12px rgba(232, 122, 46, 0.4)); } } .hero-title { margin-bottom: $spacing-md; } .hero-line1 { display: block; font-size: 3.5rem; font-weight: 700; color: var(--color-white); letter-spacing: 0.05em; } .hero-line2 { display: block; font-size: 3rem; font-weight: 700; @include gradient-text(var(--color-accent-light), var(--color-accent)); } .hero-subtitle { font-size: 1.15rem; color: rgba(255, 255, 255, 0.85); max-width: 600px; margin: 0 auto $spacing-sm; line-height: 1.7; } .hero-tagline { font-style: italic; color: var(--color-accent-muted); font-size: 1.05rem; } .hero-actions { display: flex; gap: $spacing-md; justify-content: center; flex-wrap: wrap; margin: $spacing-lg 0; } .btn-hero-primary { @include button-style($accent-orange, $neutral-white, $accent-orange-dark); font-size: 1.1rem; padding: $spacing-sm $spacing-xl; letter-spacing: 0.03em; } .btn-hero-secondary { @include button-style(transparent, var(--color-white), rgba(255, 255, 255, 0.15)); border: 2px solid rgba(255, 255, 255, 0.4); font-size: 1.1rem; padding: $spacing-sm $spacing-xl; letter-spacing: 0.03em; &:hover { background: rgba(255, 255, 255, 0.1); border-color: rgba(255, 255, 255, 0.7); } } .hero-listeners { margin-top: $spacing-xl; display: flex; align-items: center; justify-content: center; gap: $spacing-sm; font-size: 0.95rem; color: rgba(255, 255, 255, 0.7); } .listeners-dot { display: inline-block; width: 10px; height: 10px; border-radius: $radius-full; background: $success-green; animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(74, 158, 79, 0.4); } 50% { opacity: 0.7; box-shadow: 0 0 0 6px rgba(74, 158, 79, 0); } } .hero-divider { position: absolute; bottom: 0; left: 0; right: 0; z-index: 3; img { width: 100%; } } // ── Underwriter Horizontal Carousel ───────────────────────── .underwriters-section { background: $neutral-cream; border-top: 2px solid $neutral-light; border-bottom: 2px solid $neutral-light; } .underwriters-label { text-align: center; padding: $spacing-lg $spacing-lg $spacing-md; margin: 0; font-family: $font-heading; font-size: clamp(1rem, 2vw, 1.3rem); font-weight: 600; color: $neutral-dark; letter-spacing: 0.02em; } .underwriters-carousel { width: 100%; overflow: hidden; padding: clamp($spacing-xl, 4vh, $spacing-3xl) 0; } .carousel-track { display: flex; gap: clamp($spacing-xl, 4vw, $spacing-3xl); width: max-content; animation: scroll-carousel 30s linear infinite; &.paused { animation-play-state: paused; } } @keyframes scroll-carousel { from { transform: translateX(0); } to { transform: translateX(-50%); } } .carousel-slide { flex-shrink: 0; background: none; border: none; padding: 0; cursor: pointer; -webkit-tap-highlight-color: transparent; outline: none; &:focus-visible { .carousel-logo, .carousel-badge { outline: 2px solid $accent-orange; outline-offset: 2px; } } } .carousel-logo { display: block; width: clamp(180px, 12vw, 300px); height: clamp(100px, 6.5vw, 170px); object-fit: contain; border-radius: $radius-md; background: rgba(255, 255, 255, 0.95); padding: clamp(10px, 1.2vw, 18px); box-shadow: $shadow-md; transition: transform $transition-fast, box-shadow $transition-fast; .carousel-slide:hover & { transform: scale(1.08); box-shadow: $shadow-lg; } } .carousel-badge { display: flex; align-items: center; justify-content: center; width: clamp(100px, 6.5vw, 170px); height: clamp(100px, 6.5vw, 170px); border-radius: $radius-md; background: rgba(255, 255, 255, 0.95); border: 2px solid $neutral-light; box-shadow: $shadow-md; font-family: $font-heading; font-size: clamp(1.8rem, 3vw, 3rem); font-weight: 700; color: $primary-blue; transition: transform $transition-fast, box-shadow $transition-fast; .carousel-slide:hover & { transform: scale(1.08); box-shadow: $shadow-lg; } } // ── Takeover Overlay ──────────────────────────────────────── .takeover-overlay { position: fixed; inset: 0; z-index: $z-modal; background: rgba($primary-blue-dark, 0.85); display: flex; align-items: center; justify-content: center; padding: $spacing-lg; @include fade-in; } .takeover-dialog { position: relative; background: $neutral-white; border-radius: $radius-xl; padding: $spacing-2xl $spacing-xl $spacing-xl; max-width: 520px; width: 100%; text-align: center; box-shadow: $shadow-xl; animation: takeover-slide-up 0.3s ease-out; } @keyframes takeover-slide-up { from { opacity: 0; transform: translateY(30px) scale(0.97); } to { opacity: 1; transform: translateY(0) scale(1); } } .takeover-close { position: absolute; top: $spacing-md; right: $spacing-md; background: none; border: none; font-size: 1.8rem; line-height: 1; cursor: pointer; color: $neutral-medium; padding: $spacing-xs; transition: color $transition-fast; &:hover { color: $neutral-dark; } } .takeover-content { margin-top: $spacing-md; } .takeover-logo { display: block; width: clamp(200px, 40vw, 380px); height: clamp(200px, 40vw, 380px); margin: 0 auto $spacing-md; border-radius: $radius-lg; object-fit: contain; background: $neutral-cream; border: 1px solid $neutral-light; } .takeover-name { font-family: $font-heading; font-size: 1.6rem; color: $primary-blue; margin: 0 0 $spacing-sm; } .takeover-description { font-size: 1.05rem; color: $neutral-dark; line-height: 1.7; margin: 0 0 $spacing-lg; max-width: 420px; margin-left: auto; margin-right: auto; } .takeover-visit { @include button-style($accent-orange, $neutral-white, $accent-orange-dark); font-size: 1rem; padding: $spacing-sm $spacing-xl; letter-spacing: 0.03em; } // ── Download CTAs ─────────────────────────────────────────── .hero-download { display: flex; flex-direction: column; align-items: center; gap: $spacing-sm; margin: $spacing-lg 0 $spacing-md; } .download-label { font-size: 0.9rem; color: rgba(255, 255, 255, 0.65); letter-spacing: 0.03em; } .download-buttons { display: flex; gap: $spacing-md; justify-content: center; flex-wrap: wrap; } // Both store badges are constrained to the same size (160x52) .store-link { display: inline-block; text-decoration: none; } .store-badge { width: 160px; height: 52px; object-fit: contain; background: rgba(255, 255, 255, 0.1); border-radius: $radius-sm; padding: 4px; transition: opacity $transition-fast; &:hover { opacity: 0.85; } } .store-text { color: var(--color-white); text-decoration: underline; font-size: 0.95rem; padding: $spacing-xs $spacing-sm; border-radius: $radius-sm; background: rgba(255, 255, 255, 0.1); &:hover { background: rgba(255, 255, 255, 0.2); } } // Apple's embed HTML contains its own / — constrain it .appstore-embed { display: inline-flex; align-items: center; // Apple's embeds typically wrap an around an > a, a { display: inline-block; text-decoration: none; } img { width: 160px; height: 52px; object-fit: contain; display: block; } // If the embed is an iframe (Apple's new style), constrain that too iframe { width: 160px; height: 52px; border: none; border-radius: $radius-sm; } } // ── Responsive ────────────────────────────────────────────── @media (max-width: #{$bp-md - 1px}) { .hero-line1 { font-size: 2.5rem; } .hero-line2 { font-size: 2.2rem; } .hero-subtitle { font-size: 1rem; } .hero-flower { width: 70px; height: 70px; } .hero-actions { flex-direction: column; align-items: center; } // Carousel clamp() handles responsive sizing automatically } @media (max-width: #{$bp-sm - 1px}) { .hero-line1 { font-size: 2rem; } .hero-line2 { font-size: 1.8rem; } }