Files
website/apps/website/assets/css/voyage-layout.css
Matt 9e8b7b3075
All checks were successful
build-website / build (push) Successful in 1m36s
fix: restore proper CSS hierarchy for iOS Safari safe areas
- Remove forced navy background from body element
- Restore white background for body to fix content sections
- Fix hero content padding to allow extension into safe areas
- Remove padding-top additions that pushed content away from safe areas

This fixes the regression where blue background showed through during scrolling
and allows content to properly extend into iOS Safari safe areas.
2025-09-25 11:55:17 +02:00

2093 lines
44 KiB
CSS

/* Voyage Layout - Warm, Cinematic, Inviting */
:root {
/* Default Theme - Navy & Gold */
--primary-blue: #001f3f;
--warm-orange: #b48b4e;
--warm-amber: #9d7943;
--warm-yellow: #c9a56f;
--soft-cream: #f0f4f8;
--text-dark: #0a1628;
--text-light: #4a5568;
--white: #ffffff;
--bg-light: #ffffff;
--border: #cbd5e0;
/* Gradients */
--gradient-warm: linear-gradient(135deg, #b48b4e 0%, #c9a56f 100%);
--gradient-sunset: linear-gradient(135deg, #9d7943 0%, #b48b4e 50%, #c9a56f 100%);
--gradient-ocean: linear-gradient(135deg, #001f3f 0%, #003366 100%);
/* Spacing */
--space-xs: 0.5rem;
--space-sm: 1rem;
--space-md: 2rem;
--space-lg: 3rem;
--space-xl: 4rem;
--space-2xl: 6rem;
/* Typography */
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
--font-display: 'Playfair Display', serif;
/* Transitions */
--transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
--transition-slow: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
/* Safe area helpers */
--safe-area-top: env(safe-area-inset-top, 0px);
--safe-area-bottom: env(safe-area-inset-bottom, 0px);
--safe-area-cover-top: env(safe-area-max-inset-top, env(safe-area-inset-top, 0px));
--safe-area-cover-bottom: env(safe-area-max-inset-bottom, env(safe-area-inset-bottom, 0px));
}
/* Coastal Dawn Theme - Soft, serene, golden accents */
body.theme-coastal-dawn {
--primary-blue: #A9B4C2;
--warm-orange: #D4AF37;
--warm-amber: #C9A961;
--warm-yellow: #E6D088;
--soft-cream: #F8F7F4;
--text-dark: #333745;
--text-light: #6B7280;
--white: #FFFFFF;
--bg-light: #F8F7F4;
--border: #E5E7EB;
--gradient-warm: linear-gradient(135deg, #D4AF37 0%, #E6D088 100%);
--gradient-sunset: linear-gradient(135deg, #C9A961 0%, #D4AF37 50%, #E6D088 100%);
--gradient-ocean: linear-gradient(135deg, #A9B4C2 0%, #C5D3E0 100%);
}
/* Deep Sea Theme - Dark, modern, electric blue accents */
body.theme-deep-sea {
--primary-blue: #1E2022;
--warm-orange: #00BFFF;
--warm-amber: #1E90FF;
--warm-yellow: #4169E1;
--soft-cream: #2A2D30;
--text-dark: #E5E4E2;
--text-light: #C0C0C0;
--white: #1E2022;
--bg-light: #2A2D30;
--border: #3A3D40;
--gradient-warm: linear-gradient(135deg, #00BFFF 0%, #4169E1 100%);
--gradient-sunset: linear-gradient(135deg, #1E90FF 0%, #00BFFF 50%, #4169E1 100%);
--gradient-ocean: linear-gradient(135deg, #1E2022 0%, #2A2D30 100%);
}
/* Monaco White Theme - Clean, minimalist, red accents */
body.theme-monaco-white {
--primary-blue: #2C3E50;
--warm-orange: #E74C3C;
--warm-amber: #E67E22;
--warm-yellow: #F39C12;
--soft-cream: #F8F9FA;
--text-dark: #2C3E50;
--text-light: #7F8C8D;
--white: #FFFFFF;
--bg-light: #F8F9FA;
--border: #ECF0F1;
--gradient-warm: linear-gradient(135deg, #E74C3C 0%, #F39C12 100%);
--gradient-sunset: linear-gradient(135deg, #E67E22 0%, #E74C3C 50%, #F39C12 100%);
--gradient-ocean: linear-gradient(135deg, #2C3E50 0%, #34495E 100%);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* Allow HTML and body to extend into safe areas for iOS */
html {
/* Set background to match hero overlay color to prevent white flash */
background-color: #001f3f; /* Matches --primary-blue */
/* Ensure full viewport coverage including safe areas */
min-height: 100vh;
min-height: -webkit-fill-available;
/* Simple approach for iOS Safari safe areas */
margin: 0;
padding: 0;
}
body {
/* Body should have light background for content sections */
/* Safe area coverage is handled by HTML element */
min-height: 100vh;
min-height: -webkit-fill-available;
/* Critical: Don't add padding that would push content down */
padding: 0;
margin: 0;
}
/* Ensure Nuxt app container is transparent */
#__nuxt {
background-color: transparent;
min-height: 100vh;
}
/* Global image fix to ensure images display */
img {
max-width: 100%;
height: auto;
display: block;
}
/* Lucide Icons Styling */
[data-lucide] {
width: 24px;
height: 24px;
stroke: currentColor;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
fill: none;
vertical-align: middle;
}
.btn-icon {
width: 20px;
height: 20px;
display: inline-block;
margin-right: 8px;
flex-shrink: 0;
}
.spec-icon {
width: 20px;
height: 20px;
display: inline-block;
margin-right: 8px;
color: var(--warm-orange);
}
.feature-icon i {
width: 32px;
height: 32px;
color: var(--warm-orange);
}
.booking-icon i {
width: 48px;
height: 48px;
color: var(--warm-orange);
margin-bottom: 1rem;
}
.footer-icon {
width: 16px;
height: 16px;
display: inline-block;
margin-right: 8px;
vertical-align: text-bottom;
}
.social-links a {
display: inline-flex;
align-items: center;
justify-content: center;
width: 48px;
height: 48px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.1);
transition: var(--transition);
touch-action: manipulation;
}
.social-links a:hover {
background: var(--warm-orange);
}
.social-links a i {
width: 20px;
height: 20px;
color: white !important;
stroke: white !important;
}
.social-links a svg {
stroke: white !important;
color: white !important;
}
/* Star rating icons */
.stars-icons {
display: inline-flex;
flex-direction: row;
align-items: center;
gap: 0.4rem;
}
.stars-icons svg {
display: inline-block;
}
.star-filled {
width: 16px;
height: 16px;
fill: var(--warm-yellow);
stroke: var(--warm-yellow);
}
body {
font-family: var(--font-sans);
color: var(--text-dark);
background: var(--bg-light); /* Body needs light background for content sections */
max-width: 100vw !important;
position: relative;
line-height: 1.6;
transition: background 0.3s ease, color 0.3s ease;
}
/* Smooth Scrolling */
html {
scroll-behavior: smooth;
max-width: 100vw !important;
}
/* Navigation */
.voyage-nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
background: rgba(255, 255, 255, 0);
backdrop-filter: blur(0);
transition: background 0.3s ease, color 0.3s ease, box-shadow 0.3s ease, backdrop-filter 0.3s ease;
--nav-padding-top-base: var(--space-md);
--nav-padding-bottom-base: var(--space-md);
/* Use env() directly for safe area padding */
padding-top: calc(var(--nav-padding-top-base) + env(safe-area-inset-top));
padding-left: env(safe-area-inset-left);
padding-right: env(safe-area-inset-right);
padding-bottom: var(--nav-padding-bottom-base);
}
/* iOS-specific navigation stabilization to prevent bobbing */
@supports (-webkit-touch-callout: none) {
.voyage-nav {
-webkit-backface-visibility: hidden; /* iOS optimization */
}
}
/* Deprecated constant() syntax removed - using env() directly */
.voyage-nav.scrolled {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
}
@media (max-width: 768px) {
.voyage-nav,
.voyage-nav.scrolled {
--nav-padding-top-base: var(--space-sm);
--nav-padding-bottom-base: var(--space-sm);
}
}
.nav-container {
max-width: 1200px;
margin: 0 auto;
padding: 0 var(--space-md);
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-brand {
display: flex;
align-items: center;
gap: var(--space-sm);
font-family: var(--font-display);
font-size: 1.5rem;
font-weight: 700;
color: var(--white);
transition: var(--transition);
}
.voyage-nav.scrolled .nav-brand {
color: var(--primary-blue);
}
.nav-logo {
height: 50px;
width: auto;
object-fit: contain;
}
.nav-links {
display: flex;
gap: var(--space-lg);
align-items: center;
}
.nav-link {
color: var(--white);
text-decoration: none;
font-weight: 500;
transition: var(--transition);
position: relative;
/* Ensure touch targets are at least 48x48px for mobile */
padding: 12px 16px;
min-height: 48px;
display: inline-flex;
align-items: center;
touch-action: manipulation;
}
.voyage-nav.scrolled .nav-link {
color: var(--text-dark);
}
.nav-link::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 0;
height: 2px;
background: var(--warm-orange);
transition: var(--transition);
}
.nav-link:hover::after {
width: 100%;
}
.nav-cta {
background: var(--gradient-warm);
color: var(--white) !important;
padding: 0.75rem 1.5rem;
border-radius: 50px;
transition: var(--transition);
/* Ensure minimum touch target size */
min-height: 48px;
display: inline-flex;
align-items: center;
touch-action: manipulation;
}
.nav-cta:hover {
transform: translateY(-2px);
box-shadow: 0 10px 20px rgba(249, 115, 22, 0.3);
}
/* Theme Switcher */
.theme-switcher {
position: relative;
margin-left: var(--space-md);
}
.theme-btn {
background: transparent;
border: 2px solid rgba(255, 255, 255, 0.3);
border-radius: 50%;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: var(--transition);
color: var(--white);
}
.voyage-nav.scrolled .theme-btn {
color: var(--primary-blue);
border-color: var(--primary-blue);
}
.theme-btn:hover {
background: rgba(255, 255, 255, 0.1);
transform: rotate(180deg);
}
.voyage-nav.scrolled .theme-btn:hover {
background: rgba(30, 58, 95, 0.1);
}
.theme-dropdown {
position: absolute;
top: 50px;
right: 0;
background: var(--white);
border-radius: 12px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
padding: var(--space-sm);
min-width: 200px;
opacity: 0;
visibility: hidden;
transform: translateY(-10px);
transition: var(--transition);
}
.theme-dropdown.active {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.theme-option {
display: flex;
align-items: center;
gap: var(--space-sm);
width: 100%;
padding: 0.75rem;
background: transparent;
border: none;
border-radius: 8px;
cursor: pointer;
transition: var(--transition);
text-align: left;
}
.theme-option:hover {
background: var(--bg-light);
}
.theme-colors {
display: flex;
gap: 2px;
}
.theme-colors span {
width: 16px;
height: 16px;
border-radius: 50%;
border: 1px solid rgba(0, 0, 0, 0.1);
}
/* Hero Section */
.hero-voyage {
position: relative;
min-height: 100vh; /* Fallback for browsers that don't support newer units */
min-height: -webkit-fill-available; /* iOS Safari - fills available space */
min-height: 100dvh; /* Dynamic viewport height */
overflow: visible; /* Allow video to extend into safe area */
overscroll-behavior-y: none;
-webkit-overflow-scrolling: touch;
max-width: 100vw !important;
/* Removed contain: layout to allow video to extend into safe area */
/* NO padding here - let container fill entire viewport */
/* Safe areas will be applied to content only */
}
/* Video container styles moved to HeroSection.vue component for better encapsulation */
.hero-video,
.hero-image-fallback,
.hero-overlay {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
.hero-image-fallback {
background-size: cover;
background-position: center;
background-repeat: no-repeat;
z-index: -1;
opacity: 1;
transition: opacity 0.5s ease-in-out;
}
.hero-image-fallback.fade-out {
opacity: 0;
pointer-events: none;
}
.hero-overlay {
z-index: 2;
}
.hero-content {
position: relative;
z-index: 10;
height: 100%;
min-height: 100vh; /* Fallback for browsers without dvh support */
min-height: 100dvh; /* Dynamic viewport height for Chrome mobile */
width: 100%;
display: grid;
grid-template-rows: 1fr auto;
align-items: center;
justify-items: center;
text-align: center;
/* Safari-compatible safe area padding with fallbacks */
padding-top: calc(max(env(safe-area-inset-top), 44px) + clamp(2rem, 8vh, 5rem));
padding-left: max(env(safe-area-inset-left), 0px);
padding-right: max(env(safe-area-inset-right), 0px);
padding-bottom: calc(max(env(safe-area-inset-bottom), 0px) + clamp(1.25rem, 3vh, 2.5rem));
row-gap: clamp(2rem, 6vh, 4rem);
}
/* Ensure dvh support for modern browsers */
@supports (min-height: 100dvh) {
.hero-content {
min-height: 100dvh;
}
}
/* iOS-specific padding for hero content */
@supports (-webkit-touch-callout: none) {
.hero-content {
/* Allow content to extend into safe area, don't push it down */
padding-top: clamp(2rem, 8vh, 5rem); /* Normal padding only, no safe area addition */
}
}
.hero-main {
width: min(720px, 100%);
margin: 0 auto;
display: flex;
flex-direction: column;
align-items: center;
gap: var(--space-md);
}
.trust-badge {
display: inline-flex;
align-items: center;
gap: var(--space-sm);
padding: 0.5rem 1.5rem;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 50px;
color: var(--white) !important;
font-size: 0.875rem;
margin-bottom: var(--space-lg);
z-index: 10;
position: relative;
}
/* Ensure the trust badge text is white */
.trust-badge > span:last-child {
color: var(--white) !important;
}
/* Make sure the headline is visible */
.hero-headline {
display: block !important;
visibility: visible !important;
}
.gradient-text {
display: inline-block !important;
visibility: visible !important;
}
/* Make absolutely sure the trust badge text is white and visible */
.trust-badge span:last-child {
display: inline !important;
color: white !important;
visibility: visible !important;
}
.stars {
color: var(--warm-yellow);
font-size: 1rem;
display: inline-flex;
gap: 2px;
}
/* Ensure stars icons display horizontally */
.stars i,
.story-content .stars i,
.testimonial-highlight .stars i {
display: inline-block;
margin-right: 2px;
}
.hero-headline {
font-family: var(--font-display);
font-size: clamp(3rem, 8vw, 6rem);
font-weight: 900;
line-height: 1.1;
margin-bottom: var(--space-md);
}
.gradient-text {
background: linear-gradient(135deg,
#ffffff 0%,
#f0f4f8 25%,
#e2e8f0 50%,
#cbd5e0 75%,
#94a3b8 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hero-subtext {
font-size: 1.25rem;
color: rgba(255, 255, 255, 0.9);
max-width: 800px;
margin: 0 auto var(--space-lg);
font-weight: 300;
line-height: 1.8;
}
.hero-actions {
display: flex;
gap: var(--space-md);
flex-wrap: wrap;
justify-content: center;
}
.btn-primary-warm,
.btn-secondary-warm {
display: inline-flex;
align-items: center;
gap: var(--space-xs);
padding: 1rem 2rem;
font-size: 1.125rem;
font-weight: 600;
border: none;
border-radius: 50px;
cursor: pointer;
transition: var(--transition);
text-decoration: none;
}
.btn-primary-warm {
background: var(--gradient-warm);
color: var(--white);
box-shadow: 0 10px 30px rgba(180, 139, 78, 0.3);
}
.btn-primary-warm:hover {
transform: translateY(-3px);
box-shadow: 0 15px 40px rgba(180, 139, 78, 0.4);
}
.btn-secondary-warm {
background: rgba(255, 255, 255, 0.1);
color: var(--white);
border: 2px solid rgba(255, 255, 255, 0.3);
backdrop-filter: blur(10px);
}
.btn-secondary-warm:hover {
background: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.5);
transform: translateY(-3px);
}
.btn-icon {
font-size: 1.25rem;
}
/* Scroll Indicator */
.scroll-indicator {
position: absolute;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
color: rgba(255, 255, 255, 0.6);
font-size: 0.875rem;
animation: bounce 2s infinite;
}
/* Updated scroll arrow styles */
.scroll-arrow {
margin-top: 0.5rem;
display: flex;
justify-content: center;
align-items: center;
}
.scroll-arrow i {
width: 32px;
height: 32px;
color: rgba(255, 255, 255, 0.6);
animation: arrow-bounce 1.5s infinite;
}
@keyframes arrow-bounce {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(8px);
}
}
/* Decorations */
.hero-decoration {
position: absolute;
z-index: 5;
}
.top-right {
top: 5rem;
right: 5rem;
}
.bottom-left {
bottom: 8rem;
left: 5rem;
}
.decoration-circle {
width: 80px;
height: 80px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.1);
animation: float 6s ease-in-out infinite;
}
.decoration-circle.orange {
background: linear-gradient(135deg,
rgba(220, 20, 60, 0.2) 0%,
rgba(239, 68, 68, 0.2) 100%);
}
.decoration-circle.blue {
background: linear-gradient(135deg,
rgba(0, 31, 63, 0.2) 0%,
rgba(0, 51, 102, 0.2) 100%);
}
/* Welcome Section */
.welcome-section {
padding: var(--space-2xl) 0;
background: linear-gradient(to bottom, var(--white) 0%, var(--bg-light) 100%);
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 var(--space-md);
}
.welcome-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--space-2xl);
align-items: center;
}
.section-title {
font-family: var(--font-display);
font-size: 3rem;
font-weight: 700;
margin-bottom: var(--space-md);
color: var(--primary-blue);
}
.section-title.warm {
background: var(--gradient-warm);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.lead-text {
font-size: 1.25rem;
color: var(--text-light);
margin-bottom: var(--space-lg);
line-height: 1.8;
}
.feature-list {
display: flex;
flex-direction: column;
gap: var(--space-md);
}
.feature-item {
display: flex;
gap: var(--space-md);
align-items: flex-start;
}
.feature-icon {
font-size: 2rem;
background: var(--gradient-warm);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.feature-item h4 {
font-size: 1.25rem;
margin-bottom: 0.25rem;
color: var(--text-dark);
}
.feature-item p {
color: var(--text-light);
}
.welcome-image {
position: relative;
}
.rounded-image {
width: 100%;
border-radius: 20px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.1);
}
.image-badge {
position: absolute;
bottom: 2rem;
right: 2rem;
background: var(--gradient-warm);
color: var(--white);
padding: 1rem 1.5rem;
border-radius: 15px;
font-weight: 600;
display: flex;
flex-direction: column;
align-items: center;
box-shadow: 0 10px 30px rgba(180, 139, 78, 0.3);
}
/* Fleet Showcase */
.fleet-showcase {
padding: var(--space-2xl) 0;
background: var(--white);
}
.section-header {
text-align: center;
margin-bottom: var(--space-2xl);
}
.section-subtitle {
font-size: 1.25rem;
color: var(--text-light);
margin-top: var(--space-sm);
}
.fleet-carousel {
position: relative;
max-width: 1000px;
margin: 0 auto;
}
.yacht-card {
display: none;
grid-template-columns: 1fr 1fr;
gap: var(--space-lg);
align-items: center;
background: var(--white);
border-radius: 20px;
overflow: hidden;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.08);
}
.yacht-card.active {
display: grid;
animation: fadeIn 0.6s ease;
}
.yacht-image-container {
position: relative;
height: 500px;
overflow: hidden;
}
.yacht-image-container img {
width: 100%;
height: 100%;
object-fit: cover;
width: 100%;
object-fit: cover;
transition: var(--transition-slow);
}
.yacht-card:hover .yacht-image-container img {
transform: scale(1.05);
}
.yacht-badge {
position: absolute;
top: 2rem;
left: 2rem;
padding: 0.5rem 1rem;
border-radius: 50px;
font-weight: 600;
font-size: 0.875rem;
backdrop-filter: blur(10px);
}
.yacht-badge.premium {
background: var(--gradient-warm);
color: var(--white);
}
.yacht-badge.adventure {
background: var(--gradient-ocean);
color: var(--white);
}
.yacht-details {
padding: var(--space-lg);
}
.yacht-name {
font-family: var(--font-display);
font-size: 2.5rem;
margin-bottom: var(--space-sm);
color: var(--primary-blue);
}
.yacht-description {
color: var(--text-light);
margin-bottom: var(--space-md);
line-height: 1.8;
}
.yacht-specs {
display: flex;
flex-direction: column;
gap: var(--space-sm);
margin-bottom: var(--space-md);
}
.spec {
display: flex;
align-items: center;
gap: var(--space-sm);
}
.spec-icon {
font-size: 1.25rem;
}
.yacht-pricing {
display: flex;
align-items: baseline;
gap: var(--space-xs);
margin-bottom: var(--space-md);
}
.price-from {
color: var(--text-light);
font-size: 0.875rem;
}
.price-amount {
font-size: 2rem;
font-weight: 700;
color: var(--warm-orange);
}
.btn-book-yacht {
width: 100%;
padding: 1rem;
background: var(--gradient-warm);
color: var(--white);
border: none;
border-radius: 12px;
font-size: 1.125rem;
font-weight: 600;
cursor: pointer;
transition: var(--transition);
}
.btn-book-yacht:hover {
transform: translateY(-2px);
box-shadow: 0 10px 30px rgba(180, 139, 78, 0.3);
}
.fleet-nav {
display: flex;
justify-content: center;
align-items: center;
gap: var(--space-md);
margin-top: var(--space-lg);
}
.fleet-prev,
.fleet-next {
width: 50px;
height: 50px;
border-radius: 50%;
border: 2px solid var(--warm-orange);
background: var(--white);
color: var(--warm-orange);
font-size: 1.5rem;
cursor: pointer;
transition: var(--transition);
}
.fleet-prev:hover,
.fleet-next:hover {
background: var(--gradient-warm);
color: var(--white);
border-color: transparent;
}
.fleet-dots {
display: flex;
gap: var(--space-sm);
}
.dot {
width: 12px;
height: 12px;
border-radius: 50%;
background: var(--text-light);
opacity: 0.3;
cursor: pointer;
transition: var(--transition);
}
.dot.active {
background: var(--warm-orange);
opacity: 1;
transform: scale(1.2);
}
/* Services Section */
.services-section {
padding: var(--space-2xl) 0;
background: linear-gradient(135deg, var(--soft-cream) 0%, var(--white) 100%);
}
.services-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: var(--space-lg);
margin: var(--space-xl) 0;
}
.service-card {
background: var(--white);
border-radius: 20px;
padding: var(--space-xl);
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.08);
transition: var(--transition);
position: relative;
overflow: hidden;
}
.service-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 5px;
background: var(--gradient-warm);
}
.charter-service::before {
background: var(--gradient-ocean);
}
.service-card:hover {
transform: translateY(-5px);
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.12);
}
.service-icon-wrapper {
width: 80px;
height: 80px;
background: var(--gradient-warm);
border-radius: 20px;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: var(--space-md);
}
.charter-service .service-icon-wrapper {
background: var(--gradient-ocean);
}
.service-icon {
width: 40px;
height: 40px;
color: white;
}
.service-card h3 {
font-family: var(--font-display);
font-size: 2rem;
margin-bottom: var(--space-sm);
color: var(--text-dark);
}
.service-card p {
color: var(--text-light);
margin-bottom: var(--space-md);
line-height: 1.6;
}
.service-features {
list-style: none;
padding: 0;
margin: var(--space-md) 0;
}
.service-features li {
padding: 0.5rem 0;
display: flex;
align-items: center;
color: var(--text-dark);
}
.check-icon {
width: 20px;
height: 20px;
color: var(--warm-orange);
margin-right: 0.75rem;
flex-shrink: 0;
}
.btn-service {
width: 100%;
padding: 1rem 2rem;
background: var(--gradient-warm);
color: white;
border: none;
border-radius: 12px;
font-weight: 600;
font-size: 1rem;
cursor: pointer;
transition: var(--transition);
margin-top: var(--space-md);
}
.charter-service .btn-service {
background: var(--gradient-ocean);
}
.btn-service:hover {
transform: scale(1.02);
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
}
/* Service Stats */
.service-stats {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: clamp(1.5rem, 4vw, 3rem);
margin-top: var(--space-xl);
padding: var(--space-lg);
background: white;
border-radius: 20px;
box-shadow: 0 5px 20px rgba(0, 0, 0, 0.05);
}
@media (max-width: 1024px) {
.service-stats {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 640px) {
.service-stats {
grid-template-columns: repeat(2, 1fr); /* 2x2 grid on mobile */
gap: 1rem;
}
.stat-item {
padding: 1rem;
}
.stat-item .stat-number {
font-size: 2rem;
}
.stat-item .stat-label {
font-size: 0.8rem;
}
}
.stat-item {
display: flex;
flex-direction: column;
gap: 0.4rem;
align-items: center;
text-align: center;
}
.stat-icon {
width: 40px;
height: 40px;
color: var(--warm-orange);
margin-bottom: var(--space-sm);
}
.stat-number {
display: block;
font-size: 2.5rem;
font-weight: 800;
color: var(--primary-blue);
font-family: var(--font-display);
}
.stat-label {
display: block;
color: var(--text-light);
font-size: 0.875rem;
margin-top: 0.5rem;
}
/* Experience Stories */
.experience-stories {
padding: var(--space-2xl) 0;
background: var(--bg-light);
}
.story-container {
max-width: 1200px;
margin: 0 auto;
padding: 0 var(--space-md);
}
.section-title.center {
text-align: center;
margin-bottom: var(--space-2xl);
}
.stories-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: var(--space-lg);
}
.story-card {
background: var(--white);
border-radius: 20px;
overflow: hidden;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);
transition: var(--transition);
}
.story-card:hover {
transform: translateY(-5px);
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.12);
}
.story-image {
position: relative;
height: 250px;
overflow: hidden;
}
.story-image img {
width: 100%;
height: 100%;
object-fit: cover;
width: 100%;
object-fit: cover;
}
.story-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(to bottom, transparent 0%, rgba(0, 0, 0, 0.5) 100%);
display: flex;
align-items: flex-end;
padding: var(--space-md);
}
.story-category {
background: var(--gradient-warm);
color: var(--white);
padding: 0.5rem 1rem;
border-radius: 50px;
font-size: 0.875rem;
font-weight: 600;
}
.story-content {
padding: var(--space-md);
}
.story-content h3 {
font-family: var(--font-display);
font-size: 1.5rem;
margin-bottom: var(--space-sm);
color: var(--text-dark);
}
.story-content p {
color: var(--text-light);
line-height: 1.6;
margin-bottom: var(--space-sm);
}
.story-link {
color: var(--warm-orange);
text-decoration: none;
font-weight: 600;
transition: var(--transition);
}
.story-link:hover {
color: var(--warm-amber);
}
/* Gallery Section */
.gallery-section {
padding: var(--space-2xl) 0;
background: var(--white);
}
.image-gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: var(--space-md);
margin-top: var(--space-lg);
}
.gallery-item {
position: relative;
border-radius: 15px;
overflow: hidden;
height: 300px;
cursor: pointer;
transition: var(--transition);
}
.gallery-item.large {
grid-column: span 2;
height: 400px;
}
.gallery-item img {
width: 100%;
height: 100%;
object-fit: cover;
width: 100%;
object-fit: cover;
transition: var(--transition-slow);
}
.gallery-overlay {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: linear-gradient(to top, rgba(0, 31, 63, 0.9) 0%, transparent 100%);
padding: var(--space-lg) var(--space-md) var(--space-md);
transform: translateY(100%);
transition: var(--transition);
}
.gallery-caption {
color: var(--white);
font-size: 1.25rem;
font-weight: 600;
}
.gallery-item:hover .gallery-overlay {
transform: translateY(0);
}
.gallery-item:hover img {
transform: scale(1.1);
}
@media (max-width: 768px) {
.gallery-item.large {
grid-column: span 1;
height: 300px;
}
}
/* Booking CTA */
.booking-cta {
padding: var(--space-2xl) 0;
background: linear-gradient(135deg, #001f3f 0%, #003366 100%);
}
.booking-container {
max-width: 1200px;
margin: 0 auto;
padding: 0 var(--space-md);
}
.booking-content {
text-align: center;
}
.booking-title {
font-family: var(--font-display);
font-size: 3rem;
color: var(--white);
margin-bottom: var(--space-sm);
}
.booking-subtitle {
font-size: 1.25rem;
color: rgba(255, 255, 255, 0.8);
margin-bottom: var(--space-2xl);
}
.booking-options {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: var(--space-lg);
}
.booking-card {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 20px;
padding: var(--space-lg);
text-align: center;
transition: var(--transition);
}
/* Ensure non-featured cards always show with visible background */
.booking-card:not(.featured) {
background: rgba(255, 255, 255, 0.95);
border: 2px solid var(--white);
}
.booking-card:not(.featured) h3,
.booking-card:not(.featured) p {
color: var(--primary-blue);
}
.booking-card:not(.featured) .booking-icon {
color: var(--warm-orange);
}
.booking-card:hover {
background: rgba(255, 255, 255, 0.15);
transform: translateY(-5px);
}
.booking-card:not(.featured):hover {
background: rgba(255, 255, 255, 1);
transform: translateY(-5px);
}
.booking-card.featured {
background: var(--gradient-warm);
border: none;
transform: scale(1.05);
}
.booking-icon {
font-size: 3rem;
margin-bottom: var(--space-sm);
}
.booking-card h3 {
font-size: 1.5rem;
color: var(--white);
margin-bottom: var(--space-xs);
}
.booking-card p {
color: rgba(255, 255, 255, 0.8);
margin-bottom: var(--space-md);
}
.btn-booking {
width: 100%;
padding: 0.75rem 1.5rem;
background: var(--white);
color: var(--primary-blue);
border: 2px solid var(--white);
border-radius: 50px;
font-weight: 600;
cursor: pointer;
transition: var(--transition);
opacity: 1;
visibility: visible;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
margin: 0 auto;
}
/* Non-featured card buttons */
.booking-card:not(.featured) .btn-booking {
background: var(--primary-blue);
color: var(--white);
border: 2px solid var(--primary-blue);
}
.btn-booking:hover {
background: var(--gradient-warm);
color: var(--white);
transform: translateY(-2px);
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
}
.btn-booking.primary {
background: var(--white);
color: var(--warm-orange);
border-color: var(--white);
}
.btn-booking.primary:hover {
background: var(--gradient-warm);
color: var(--white);
}
/* Footer */
.voyage-footer {
background: var(--primary-blue);
color: var(--white);
padding: var(--space-2xl) 0 var(--space-md);
position: relative;
z-index: 2; /* Reduced from 20 to proper stacking order */
}
.footer-container {
max-width: 1200px;
margin: 0 auto;
padding: 0 var(--space-md);
}
.footer-content {
display: flex;
justify-content: space-between;
gap: var(--space-2xl);
margin-bottom: var(--space-lg);
}
.footer-brand {
flex: 1;
max-width: 500px;
}
.footer-contact {
flex: 0 0 auto;
margin-left: auto;
}
.footer-brand h3 {
font-family: var(--font-display);
font-size: 2rem;
margin-bottom: var(--space-sm);
}
.footer-logo {
width: 50px;
height: 50px;
border-radius: 50%;
margin-bottom: var(--space-sm);
}
.footer-brand p {
color: rgba(255, 255, 255, 0.7);
margin-bottom: var(--space-md);
}
.social-links {
display: flex;
gap: var(--space-sm);
}
.social-links a {
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.1);
border-radius: 50%;
font-size: 1.25rem;
transition: var(--transition);
touch-action: manipulation;
}
.social-links a:hover {
background: var(--gradient-warm);
transform: translateY(-3px);
}
.footer-links h4,
.footer-contact h4 {
margin-bottom: var(--space-md);
}
/* Force social icons to be white */
.voyage-footer .social-links a svg,
.voyage-footer .social-links a i {
stroke: white !important;
color: white !important;
fill: none !important;
}
.footer-links a {
display: block;
color: rgba(255, 255, 255, 0.7);
text-decoration: none;
margin-bottom: var(--space-xs);
transition: var(--transition);
}
.footer-links a:hover {
color: var(--warm-orange);
}
.footer-contact p {
color: rgba(255, 255, 255, 0.7);
margin-bottom: var(--space-xs);
}
.footer-bottom {
text-align: center;
padding-top: var(--space-lg);
border-top: 1px solid rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.5);
}
/* Layout Switcher */
.layout-switcher {
position: fixed;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
display: flex;
gap: 0.5rem;
background: var(--white);
padding: 0.5rem;
border-radius: 50px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
z-index: 90;
}
.layout-btn {
padding: 0.5rem 1rem;
background: transparent;
border: none;
border-radius: 50px;
font-size: 0.875rem;
font-weight: 500;
cursor: pointer;
transition: var(--transition);
color: var(--text-dark);
}
.layout-btn:hover {
background: var(--bg-light);
}
.layout-btn.active {
background: var(--gradient-warm);
color: var(--white);
}
/* Animations */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes bounce {
0%, 20%, 50%, 80%, 100% {
transform: translateX(-50%) translateY(0);
}
40% {
transform: translateX(-50%) translateY(-10px);
}
60% {
transform: translateX(-50%) translateY(-5px);
}
}
@keyframes scroll {
0% {
top: 8px;
opacity: 1;
}
100% {
top: 20px;
opacity: 0;
}
}
@keyframes float {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-20px);
}
}
.animate-fade-in {
animation: fadeIn 0.8s ease;
}
.animate-fade-up {
animation: fadeIn 0.8s ease 0.2s both;
}
.animate-fade-up-delay {
animation: fadeIn 0.8s ease 0.4s both;
}
.animate-fade-up-delay-2 {
animation: fadeIn 0.8s ease 0.6s both;
}
/* Responsive */
@media (max-width: 768px) {
.hero-voyage {
padding: 0;
/* iOS-specific height handling */
min-height: 100vh;
min-height: -webkit-fill-available;
min-height: 100dvh;
/* Video will extend under notch - no padding-top here */
padding-bottom: env(safe-area-inset-bottom);
overflow: clip; /* Allow video to extend while preventing scrollbars */
max-width: 100vw !important;
}
/* iOS-specific video extension into safe area */
@supports (-webkit-touch-callout: none) {
/* Only iOS Safari */
.hero-video-container {
position: fixed !important;
left: 0;
right: 0;
/* Extend beyond safe area to ensure coverage on iOS */
top: calc(-1 * (env(safe-area-inset-top, 0) + 50px)) !important;
width: 100vw;
height: calc(100lvh + env(safe-area-inset-top, 0) + 50px) !important;
z-index: -1;
pointer-events: none;
background: #ffffff; /* White fallback if video doesn't load */
}
/* Extra insurance for iOS 15-26 */
@supports (height: 100dvh) {
.hero-video-container {
height: calc(100dvh + env(safe-area-inset-top, 0) + 50px) !important;
}
}
/* iOS-specific video sizing */
.hero-video {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center top; /* Align to top for better notch coverage */
}
}
/* Non-iOS mobile devices keep normal positioning */
@supports not (-webkit-touch-callout: none) {
.hero-video-container {
position: fixed !important;
left: 0;
right: 0;
top: 0; /* Normal positioning for Android/other mobile */
width: 100vw;
height: 100vh;
z-index: -1;
pointer-events: none;
background: #ffffff;
}
}
.hero-content {
/* Adjust padding to allow content into safe areas */
padding: clamp(1rem, 4vw, 2rem);
padding-top: clamp(2rem, 4vw, 3rem); /* Normal padding without safe area addition */
padding-bottom: max(env(safe-area-max-inset-bottom, env(safe-area-inset-bottom, 0)), clamp(1rem, 4vw, 2rem));
padding-left: max(env(safe-area-inset-left, 0), clamp(1rem, 3vw, 2rem));
padding-right: max(env(safe-area-inset-right, 0), clamp(1rem, 3vw, 2rem));
width: 100%;
display: grid;
grid-template-rows: 1fr auto;
align-items: center;
justify-items: center;
min-height: 100vh;
min-height: -webkit-fill-available;
min-height: 100dvh;
position: relative;
z-index: 10; /* Ensure content is above video */
row-gap: clamp(1.5rem, 6vw, 3rem);
}
.hero-main {
gap: var(--space-sm);
max-width: 100%;
}
/* Responsive logo */
.hero-logo {
width: 100%;
max-width: 90%;
margin: 0 auto;
}
.hero-logo img {
height: auto;
width: clamp(280px, 85vw, 380px);
max-height: clamp(180px, 50vw, 240px);
margin: 0 auto;
object-fit: contain;
}
.hero-headline {
font-size: clamp(2rem, 7vw, 2.5rem);
line-height: 1.15;
margin-bottom: var(--space-sm);
padding: 0 var(--space-xs);
}
.hero-subtext {
font-size: clamp(0.95rem, 2.5vw, 1.125rem);
padding: 0 var(--space-sm);
margin-bottom: var(--space-md);
line-height: 1.6;
text-align: center;
max-width: 90%;
}
.hero-actions {
flex-direction: column;
width: 100%;
padding: 0 var(--space-sm);
gap: var(--space-sm);
align-items: center;
max-width: 380px;
}
/* Smaller buttons on mobile */
.btn-primary-warm,
.btn-secondary-warm {
width: 100%;
max-width: 360px;
padding: clamp(14px, 3vw, 18px) clamp(24px, 5vw, 32px);
font-size: clamp(1rem, 2.5vw, 1.125rem);
display: flex;
align-items: center;
justify-content: center;
text-align: center;
gap: 0.5rem;
min-height: 52px;
}
.btn-primary-warm .btn-icon,
.btn-secondary-warm .btn-icon {
font-size: 0.875rem;
width: 16px;
height: 16px;
margin-right: 0;
}
.trust-badge {
padding: var(--space-xs) var(--space-sm);
font-size: clamp(0.8rem, 2vw, 0.9rem);
margin-bottom: var(--space-md);
}
.scroll-indicator {
display: none;
}
/* Fix all section padding for mobile */
section {
padding: var(--space-xl) var(--space-sm) !important;
scroll-margin-top: 80px;
position: relative;
z-index: 2;
}
.welcome-section,
.services-section,
.experience-stories,
.portfolio-gallery,
.booking-cta {
padding: var(--space-xl) var(--space-sm) !important;
margin-top: -1px; /* Prevent gaps between sections */
}
.welcome-content {
grid-template-columns: 1fr;
padding: 0;
}
.service-card {
width: 100%;
padding: var(--space-sm);
}
.services-grid {
grid-template-columns: 1fr;
gap: var(--space-md);
padding: 0;
}
/* Fix service card content */
.service-content {
padding: var(--space-sm);
}
.service-features li {
display: flex;
align-items: flex-start;
gap: var(--space-xs);
padding: var(--space-xs) 0;
}
.service-features li::before {
flex-shrink: 0;
margin-top: 2px;
}
/* Section titles for mobile */
.section-title {
font-size: clamp(1.75rem, 6vw, 2.25rem);
line-height: 1.2;
margin-bottom: var(--space-sm);
padding: 0 var(--space-xs);
}
.section-subtitle {
font-size: clamp(0.95rem, 2.5vw, 1.125rem);
line-height: 1.5;
margin-bottom: var(--space-md);
padding: 0 var(--space-xs);
}
.yacht-card {
grid-template-columns: 1fr;
}
.footer-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 2rem;
text-align: center;
}
.footer-brand {
max-width: 100%;
margin: 0;
}
.footer-contact {
margin-left: 0;
width: 100%;
text-align: center;
}
.footer-contact p,
.footer-brand p {
word-wrap: break-word;
overflow-wrap: break-word;
padding: 0 1rem;
}
/* Fix booking cards for mobile */
.booking-options {
grid-template-columns: 1fr;
padding: 0;
}
.booking-card {
width: 100%;
padding: 20px;
}
/* Fix testimonial cards */
.testimonials-grid {
grid-template-columns: 1fr;
gap: 20px;
padding: 0;
}
.testimonial-card {
width: 100%;
padding: 20px;
}
.social-links {
justify-content: center;
}
.top-right,
.bottom-left {
display: none;
}
.nav-links {
display: none;
}
}
/* Dark theme adjustments for Deep Sea */
body.theme-deep-sea .welcome-section,
body.theme-deep-sea .fleet-showcase,
body.theme-deep-sea .experience-stories,
body.theme-deep-sea .booking-cta {
background: var(--bg-light);
}
/* Gold theme is now the default - no overrides needed */
body.theme-deep-sea .yacht-card,
body.theme-deep-sea .story-card,
body.theme-deep-sea .booking-card {
background: var(--soft-cream);
color: var(--text-dark);
}
body.theme-deep-sea .hero-content h1,
body.theme-deep-sea .hero-content p {
color: var(--text-dark);
}
body.theme-deep-sea .voyage-nav:not(.scrolled) .nav-brand,
body.theme-deep-sea .voyage-nav:not(.scrolled) .nav-link {
color: var(--text-dark);
}
body.theme-deep-sea .voyage-footer {
background: var(--primary-blue);
color: var(--text-dark);
}
/* Theme-specific button colors */
body.theme-coastal-dawn .btn-primary-warm,
body.theme-coastal-dawn .btn-secondary-warm {
background: var(--warm-orange);
color: var(--white);
}
body.theme-deep-sea .btn-primary-warm,
body.theme-deep-sea .btn-secondary-warm {
background: var(--warm-orange);
color: var(--white);
}
body.theme-monaco-white .btn-primary-warm,
body.theme-monaco-white .btn-secondary-warm {
background: var(--warm-orange);
color: var(--white);
}