Files
website/website-mockups/charter-booking-3.html

1555 lines
59 KiB
HTML
Raw Normal View History

2025-09-18 22:20:01 +02:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Customize Your Experience - HarborSmith</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Playfair+Display:wght@400;700;900&display=swap" rel="stylesheet">
<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.js"></script>
<link rel="stylesheet" href="css/voyage-layout.css">
<link rel="stylesheet" href="css/themes.css">
<link rel="stylesheet" href="css/booking.css">
<style>
/* Layout Fix - Override booking.css grid */
.booking-layout {
display: grid;
grid-template-columns: 1fr 420px;
gap: 3rem;
align-items: start;
}
.booking-content {
display: block !important; /* Override the grid from booking.css */
}
/* Luxury Customization Styles */
.customize-hero {
background: linear-gradient(135deg, #0F172A 0%, #1E3A5F 50%, #0F172A 100%);
padding: 6rem 0 3rem; /* Added more top padding to account for fixed navbar */
margin-bottom: 3rem;
position: relative;
overflow: hidden;
}
.customize-hero::before {
content: '';
position: absolute;
width: 200%;
height: 200%;
background: radial-gradient(circle, rgba(16, 185, 129, 0.1) 0%, transparent 70%);
animation: rotate 30s linear infinite;
top: -50%;
left: -50%;
}
@keyframes rotate {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.customize-hero-content {
position: relative;
z-index: 1;
text-align: center;
color: white;
}
.customize-title {
font-family: 'Playfair Display', serif;
font-size: 3rem;
font-weight: 700;
margin-bottom: 1rem;
background: linear-gradient(90deg, #FFFFFF, #10B981);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
animation: fadeInUp 0.8s ease-out;
}
.customize-subtitle {
font-size: 1.2rem;
color: rgba(255, 255, 255, 0.9);
animation: fadeInUp 0.8s ease-out 0.2s both;
}
/* Progress Bar */
.progress-bar {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border-radius: 50px;
padding: 1.5rem 2rem;
margin: 2rem auto;
max-width: 800px;
}
.progress-steps {
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
}
.progress-step {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
z-index: 2;
}
.step-number {
width: 50px;
height: 50px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.2);
border: 2px solid rgba(255, 255, 255, 0.3);
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: 1.2rem;
color: white;
transition: all 0.3s ease;
}
.progress-step.completed .step-number {
background: #10B981;
border-color: #10B981;
}
.progress-step.active .step-number {
background: linear-gradient(135deg, #10B981, #0066CC);
border-color: #10B981;
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.1); }
}
.step-label {
margin-top: 0.5rem;
font-size: 0.875rem;
color: rgba(255, 255, 255, 0.8);
white-space: nowrap;
}
.progress-line {
position: absolute;
top: 50%;
left: 50px; /* Start from center of first circle */
right: 50px; /* End at center of last circle */
height: 2px;
background: rgba(255, 255, 255, 0.2);
transform: translateY(-50%);
z-index: 0;
}
.progress-line-fill {
position: absolute;
top: 0;
left: 0;
height: 100%;
background: linear-gradient(90deg, #10B981, #0066CC);
width: 66.66%; /* 2/3 complete for step 3 */
transition: width 1s ease;
}
/* Section Cards */
.customize-section {
background: white;
border-radius: 20px;
padding: 2.5rem;
margin-bottom: 2rem;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
animation: slideInUp 0.6s ease-out;
}
@keyframes slideInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.section-header {
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 2rem;
}
.section-icon {
width: 50px;
height: 50px;
background: linear-gradient(135deg, #10B981, #0066CC);
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
color: white;
}
.section-title {
font-family: 'Playfair Display', serif;
font-size: 1.8rem;
font-weight: 700;
color: #0F172A;
}
.section-description {
color: #64748B;
margin-bottom: 2rem;
font-size: 1.1rem;
}
/* Route Cards */
.route-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 1.5rem;
}
.route-card {
background: white;
border: 2px solid #E2E8F0;
border-radius: 16px;
padding: 2rem;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.route-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #10B981, #0066CC);
transform: scaleX(0);
transition: transform 0.3s ease;
}
.route-card:hover {
transform: translateY(-5px);
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
border-color: #10B981;
}
.route-card.selected {
border-color: #10B981;
background: linear-gradient(135deg, rgba(16, 185, 129, 0.05), rgba(0, 102, 204, 0.05));
}
.route-card.selected::before {
transform: scaleX(1);
}
.route-image {
width: 100%;
height: 140px;
border-radius: 12px;
overflow: hidden;
margin-bottom: 1rem;
position: relative;
}
.route-image img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s ease;
}
.route-card:hover .route-image img {
transform: scale(1.1);
}
.route-badge {
position: absolute;
top: 10px;
right: 10px;
background: linear-gradient(135deg, #10B981, #0066CC);
color: white;
padding: 0.3rem 0.8rem;
border-radius: 20px;
font-size: 0.75rem;
font-weight: 600;
}
.route-name {
font-weight: 700;
font-size: 1.2rem;
color: #0F172A;
margin-bottom: 0.5rem;
}
.route-details {
color: #64748B;
font-size: 0.9rem;
}
/* Catering Cards */
.catering-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 1.5rem;
}
.catering-card {
background: white;
border: 2px solid #E2E8F0;
border-radius: 16px;
overflow: hidden;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
}
.catering-card:hover {
transform: translateY(-5px);
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.15);
}
.catering-card.selected {
border-color: #10B981;
}
.catering-card.selected .catering-check {
opacity: 1;
transform: scale(1);
}
.catering-image {
height: 160px;
position: relative;
overflow: hidden;
}
.catering-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.catering-gradient {
position: absolute;
inset: 0;
background: linear-gradient(135deg, rgba(16, 185, 129, 0.8), rgba(0, 102, 204, 0.8));
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 3rem;
}
.catering-check {
position: absolute;
top: 10px;
right: 10px;
width: 30px;
height: 30px;
background: #10B981;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
opacity: 0;
transform: scale(0);
transition: all 0.3s ease;
}
.catering-content {
padding: 1.5rem;
}
.catering-name {
font-weight: 700;
font-size: 1.2rem;
color: #0F172A;
margin-bottom: 0.5rem;
}
.catering-description {
color: #64748B;
font-size: 0.9rem;
margin-bottom: 1rem;
}
.catering-features {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-bottom: 1rem;
}
.catering-feature {
background: #F1F5F9;
padding: 0.25rem 0.75rem;
border-radius: 20px;
font-size: 0.8rem;
color: #475569;
}
.catering-price {
font-size: 1.5rem;
font-weight: 700;
background: linear-gradient(90deg, #10B981, #0066CC);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
/* Add-on Cards */
.addon-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1.5rem;
}
.addon-card {
background: white;
border: 2px solid #E2E8F0;
border-radius: 16px;
padding: 1.5rem;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
display: flex;
align-items: center;
gap: 1.5rem;
}
.addon-card:hover {
transform: translateX(5px);
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
border-color: #10B981;
}
.addon-card.selected {
background: linear-gradient(135deg, rgba(16, 185, 129, 0.05), rgba(0, 102, 204, 0.05));
border-color: #10B981;
}
.addon-icon {
width: 60px;
height: 60px;
background: linear-gradient(135deg, rgba(16, 185, 129, 0.1), rgba(0, 102, 204, 0.1));
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
color: #0066CC;
flex-shrink: 0;
}
.addon-card.selected .addon-icon {
background: linear-gradient(135deg, #10B981, #0066CC);
color: white;
}
.addon-content {
flex: 1;
}
.addon-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.5rem;
}
.addon-name {
font-weight: 700;
font-size: 1.1rem;
color: #0F172A;
}
.addon-price {
font-weight: 700;
color: #10B981;
font-size: 1.2rem;
}
.addon-description {
color: #64748B;
font-size: 0.9rem;
line-height: 1.5;
}
.addon-toggle {
position: absolute;
top: 1rem;
right: 1rem;
width: 50px;
height: 26px;
background: #E2E8F0;
border-radius: 13px;
transition: background 0.3s ease;
}
.addon-card.selected .addon-toggle {
background: #10B981;
}
.addon-toggle::after {
content: '';
position: absolute;
width: 22px;
height: 22px;
background: white;
border-radius: 50%;
top: 2px;
left: 2px;
transition: transform 0.3s ease;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.addon-card.selected .addon-toggle::after {
transform: translateX(24px);
}
/* Occasion Tags */
.occasion-grid {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.occasion-tag {
background: white;
border: 2px solid #E2E8F0;
border-radius: 50px;
padding: 0.75rem 1.5rem;
cursor: pointer;
transition: all 0.3s ease;
font-weight: 500;
color: #475569;
position: relative;
overflow: hidden;
}
.occasion-tag::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg, #10B981, #0066CC);
opacity: 0;
transition: opacity 0.3s ease;
}
.occasion-tag:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}
.occasion-tag.selected {
color: white;
border-color: transparent;
}
.occasion-tag.selected::before {
opacity: 1;
}
.occasion-tag span {
position: relative;
z-index: 1;
}
/* Special Requests */
.special-requests {
width: 100%;
min-height: 150px;
padding: 1.5rem;
border: 2px solid #E2E8F0;
border-radius: 16px;
font-family: 'Inter', sans-serif;
font-size: 1rem;
resize: vertical;
transition: all 0.3s ease;
background: white;
}
.special-requests:focus {
outline: none;
border-color: #10B981;
box-shadow: 0 0 0 4px rgba(16, 185, 129, 0.1);
}
/* Summary Sidebar - Enhanced Voyage Theme */
.booking-sidebar {
position: sticky;
top: 100px;
max-width: 420px;
}
.booking-summary {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.98), rgba(240, 249, 255, 0.95));
backdrop-filter: blur(10px);
border: 1px solid rgba(220, 20, 60, 0.08);
border-radius: 24px;
padding: 2.5rem;
box-shadow: 0 20px 40px rgba(0, 31, 63, 0.08);
}
.summary-header {
display: flex;
align-items: center;
gap: 1.25rem;
margin-bottom: 2.5rem;
padding-bottom: 2rem;
border-bottom: 2px solid rgba(220, 20, 60, 0.1);
}
.summary-icon {
width: 52px;
height: 52px;
background: linear-gradient(135deg, #dc143c, #ef4444);
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
color: white;
box-shadow: 0 8px 20px rgba(220, 20, 60, 0.25);
}
.summary-title {
font-family: 'Playfair Display', serif;
font-weight: 700;
font-size: 1.5rem;
background: linear-gradient(135deg, #001f3f, #dc143c);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.summary-section {
margin-bottom: 2rem;
padding-bottom: 2rem;
border-bottom: 1px solid rgba(220, 20, 60, 0.06);
}
.summary-section:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
.summary-label {
font-family: 'Playfair Display', serif;
font-weight: 700;
color: #001f3f;
margin-bottom: 1rem;
font-size: 1.1rem;
text-transform: none;
letter-spacing: 0;
}
.summary-value {
color: #0a1628;
font-size: 1rem;
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 0.75rem;
padding: 0.875rem 1.125rem;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(240, 244, 248, 0.7));
border: 1px solid rgba(220, 20, 60, 0.05);
border-radius: 12px;
transition: all 0.3s ease;
}
.summary-value:hover {
transform: translateX(4px);
box-shadow: 0 4px 12px rgba(220, 20, 60, 0.08);
border-color: rgba(220, 20, 60, 0.1);
}
.summary-value i {
color: #dc143c;
width: 18px;
height: 18px;
}
.summary-addon {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.8), rgba(240, 244, 248, 0.6));
padding: 1rem;
border: 1px solid rgba(220, 20, 60, 0.05);
border-radius: 12px;
margin-bottom: 0.75rem;
display: flex;
justify-content: space-between;
align-items: center;
transition: all 0.3s ease;
}
.summary-addon:hover {
transform: translateX(4px);
box-shadow: 0 4px 12px rgba(220, 20, 60, 0.08);
}
.summary-addon-name {
color: #4a5568;
font-size: 0.95rem;
}
.summary-addon-price {
color: #dc143c;
font-weight: 600;
}
.summary-total {
background: linear-gradient(135deg, rgba(220, 20, 60, 0.03), rgba(0, 31, 63, 0.03));
border: 1px solid rgba(220, 20, 60, 0.1);
padding: 2rem;
border-radius: 16px;
margin-top: 2rem;
margin-left: -1rem;
margin-right: -1rem;
margin-bottom: -1rem;
}
.total-row {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1rem;
padding: 0.5rem 0;
}
.total-row:last-child {
margin-bottom: 0;
padding-top: 1.25rem;
margin-top: 0.75rem;
border-top: 2px solid rgba(220, 20, 60, 0.15);
}
.total-label {
color: #475569;
font-size: 0.95rem;
font-weight: 500;
}
.total-value {
color: #001f3f;
font-weight: 600;
font-size: 1.1rem;
}
.total-final {
font-size: 1.75rem;
font-weight: 700;
background: linear-gradient(135deg, #dc143c, #ef4444);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-shadow: 0 2px 4px rgba(220, 20, 60, 0.1);
}
/* Navigation Buttons */
.booking-navigation {
display: flex;
justify-content: space-between;
margin-top: 3rem;
}
.btn-nav {
padding: 1rem 2rem;
border-radius: 50px;
font-weight: 600;
display: flex;
align-items: center;
gap: 0.5rem;
transition: all 0.3s ease;
border: none;
cursor: pointer;
}
.btn-back {
background: white;
color: #475569;
border: 2px solid #E2E8F0;
}
.btn-back:hover {
background: #F8FAFC;
transform: translateX(-5px);
}
.btn-continue {
background: linear-gradient(135deg, #10B981, #0066CC);
color: white;
padding: 1rem 3rem;
}
.btn-continue:hover {
transform: translateX(5px);
box-shadow: 0 10px 30px rgba(16, 185, 129, 0.3);
}
/* Animations */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideInLeft {
from {
opacity: 0;
transform: translateX(-30px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes scaleIn {
from {
opacity: 0;
transform: scale(0.9);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Responsive */
@media (max-width: 1024px) {
.booking-layout {
grid-template-columns: 1fr;
}
.booking-sidebar {
position: static;
max-width: 100%;
}
}
@media (max-width: 768px) {
.customize-title {
font-size: 2rem;
}
.route-grid,
.catering-grid,
.addon-grid {
grid-template-columns: 1fr;
}
.booking-navigation {
flex-direction: column;
gap: 1rem;
}
.btn-nav {
width: 100%;
justify-content: center;
}
}
</style>
</head>
<body>
<!-- Navigation -->
<nav class="voyage-nav scrolled" id="voyageNav">
<div class="nav-container">
<div class="nav-brand">
<img src="logo.jpg" alt="HarborSmith" class="nav-logo">
<span>HarborSmith</span>
</div>
<div class="nav-links">
<a href="index.html" class="nav-link">Home</a>
<a href="charter.html" class="nav-link">Charters</a>
<a href="maintenance.html" class="nav-link">Maintenance</a>
<a href="about.html" class="nav-link">About</a>
<a href="contact.html" class="nav-link">Contact</a>
</div>
</div>
</nav>
<!-- Hero Section -->
<div class="customize-hero">
<div class="customize-hero-content">
<h1 class="customize-title">Customize Your Experience</h1>
<p class="customize-subtitle">Create your perfect luxury yacht charter with premium add-ons and services</p>
<!-- Progress Bar -->
<div class="progress-bar">
<div class="progress-steps">
<div class="progress-step completed">
<div class="step-number">1</div>
<div class="step-label">Date & Time</div>
</div>
<div class="progress-step completed">
<div class="step-number">2</div>
<div class="step-label">Select Yacht</div>
</div>
<div class="progress-step active">
<div class="step-number">3</div>
<div class="step-label">Customize</div>
</div>
<div class="progress-step">
<div class="step-number">4</div>
<div class="step-label">Confirm</div>
</div>
<div class="progress-line">
<div class="progress-line-fill"></div>
</div>
</div>
</div>
</div>
</div>
<!-- Main Content -->
<main class="booking-main">
<div class="container">
<div class="booking-layout">
<!-- Main Content Area -->
<div class="booking-content">
<!-- Route Selection -->
<div class="customize-section">
<div class="section-header">
<div class="section-icon">
<i data-lucide="map"></i>
</div>
<h2 class="section-title">Choose Your Route</h2>
</div>
<p class="section-description">
Select your preferred sailing route for the perfect 4-hour adventure
</p>
<div class="route-grid">
<div class="route-card" data-route="golden-gate">
<div class="route-image">
<img src="https://images.unsplash.com/photo-1501594907352-04cda38ebc29?w=400&h=300&fit=crop" alt="Golden Gate">
<span class="route-badge">Popular</span>
</div>
<div class="route-name">Golden Gate Tour</div>
<div class="route-details">Classic Bay experience with iconic bridge views</div>
</div>
<div class="route-card" data-route="alcatraz">
<div class="route-image">
<img src="https://images.unsplash.com/photo-1521747116042-5a810fda9664?w=400&h=300&fit=crop" alt="Alcatraz">
</div>
<div class="route-name">Alcatraz Circle</div>
<div class="route-details">Historic waters around the infamous island</div>
</div>
<div class="route-card" data-route="sunset">
<div class="route-image">
<img src="https://images.unsplash.com/photo-1498036882173-b41c28a8ba34?w=400&h=300&fit=crop" alt="Sunset">
<span class="route-badge">Romantic</span>
</div>
<div class="route-name">Sunset Cruise</div>
<div class="route-details">Romantic evening with stunning sunset views</div>
</div>
<div class="route-card" data-route="custom">
<div class="route-image">
<img src="https://images.unsplash.com/photo-1527004013197-933c4bb611b3?w=400&h=300&fit=crop" alt="Custom">
</div>
<div class="route-name">Custom Route</div>
<div class="route-details">Design your own unique adventure</div>
</div>
</div>
</div>
<!-- Catering Options -->
<div class="customize-section">
<div class="section-header">
<div class="section-icon">
<i data-lucide="utensils"></i>
</div>
<h2 class="section-title">Catering & Refreshments</h2>
</div>
<p class="section-description">
Elevate your experience with gourmet catering options
</p>
<div class="catering-grid">
<div class="catering-card" data-catering="none" data-price="0">
<div class="catering-image">
<img src="https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=400&h=300&fit=crop" alt="No Catering">
<div class="catering-gradient">
<i data-lucide="x"></i>
</div>
<div class="catering-check"></div>
</div>
<div class="catering-content">
<div class="catering-name">No Catering</div>
<div class="catering-description">Bring your own food and drinks</div>
<div class="catering-features">
<span class="catering-feature">BYOB</span>
<span class="catering-feature">Ice provided</span>
</div>
<div class="catering-price">Included</div>
</div>
</div>
<div class="catering-card" data-catering="light" data-price="250">
<div class="catering-image">
<img src="https://images.unsplash.com/photo-1481391319762-47dff72954d9?w=400&h=300&fit=crop" alt="Light Refreshments">
<div class="catering-gradient">
<i data-lucide="coffee"></i>
</div>
<div class="catering-check"></div>
</div>
<div class="catering-content">
<div class="catering-name">Light Refreshments</div>
<div class="catering-description">Snacks, soft drinks, and water</div>
<div class="catering-features">
<span class="catering-feature">Artisan snacks</span>
<span class="catering-feature">Premium beverages</span>
</div>
<div class="catering-price">+$250</div>
</div>
</div>
<div class="catering-card" data-catering="premium" data-price="650">
<div class="catering-image">
<img src="https://images.unsplash.com/photo-1551024506-0bccd828d307?w=400&h=300&fit=crop" alt="Premium Package">
<div class="catering-gradient">
<i data-lucide="wine"></i>
</div>
<div class="catering-check"></div>
</div>
<div class="catering-content">
<div class="catering-name">Premium Package</div>
<div class="catering-description">Gourmet appetizers, wine & champagne</div>
<div class="catering-features">
<span class="catering-feature">Chef-prepared</span>
<span class="catering-feature">Wine selection</span>
<span class="catering-feature">Champagne</span>
</div>
<div class="catering-price">+$650</div>
</div>
</div>
<div class="catering-card" data-catering="full" data-price="1200">
<div class="catering-image">
<img src="https://images.unsplash.com/photo-1544025162-d76694265947?w=400&h=300&fit=crop" alt="Full Dining">
<div class="catering-gradient">
<i data-lucide="utensils"></i>
</div>
<div class="catering-check"></div>
</div>
<div class="catering-content">
<div class="catering-name">Full Dining Experience</div>
<div class="catering-description">3-course meal with premium bar</div>
<div class="catering-features">
<span class="catering-feature">Private chef</span>
<span class="catering-feature">Full bar</span>
<span class="catering-feature">Desserts</span>
</div>
<div class="catering-price">+$1,200</div>
</div>
</div>
</div>
</div>
<!-- Add-on Services -->
<div class="customize-section">
<div class="section-header">
<div class="section-icon">
<i data-lucide="star"></i>
</div>
<h2 class="section-title">Premium Add-ons</h2>
</div>
<p class="section-description">
Enhance your charter with these exclusive services
</p>
<div class="addon-grid">
<div class="addon-card" data-addon="photographer" data-price="450">
<div class="addon-icon">
<i data-lucide="camera"></i>
</div>
<div class="addon-content">
<div class="addon-header">
<span class="addon-name">Professional Photographer</span>
</div>
<div class="addon-description">
Capture your memories with a professional photographer for 2 hours
</div>
</div>
<div class="addon-price">+$450</div>
<div class="addon-toggle"></div>
</div>
<div class="addon-card" data-addon="decorations" data-price="200">
<div class="addon-icon">
<i data-lucide="sparkles"></i>
</div>
<div class="addon-content">
<div class="addon-header">
<span class="addon-name">Special Decorations</span>
</div>
<div class="addon-description">
Custom decorations for birthdays, anniversaries, or proposals
</div>
</div>
<div class="addon-price">+$200</div>
<div class="addon-toggle"></div>
</div>
<div class="addon-card" data-addon="watersports" data-price="350">
<div class="addon-icon">
<i data-lucide="anchor"></i>
</div>
<div class="addon-content">
<div class="addon-header">
<span class="addon-name">Water Sports Package</span>
</div>
<div class="addon-description">
Kayaks, paddleboards, and snorkeling equipment
</div>
</div>
<div class="addon-price">+$350</div>
<div class="addon-toggle"></div>
</div>
<div class="addon-card" data-addon="fishing" data-price="250">
<div class="addon-icon">
<i data-lucide="fish"></i>
</div>
<div class="addon-content">
<div class="addon-header">
<span class="addon-name">Fishing Equipment</span>
</div>
<div class="addon-description">
Professional fishing gear and bait included
</div>
</div>
<div class="addon-price">+$250</div>
<div class="addon-toggle"></div>
</div>
<div class="addon-card" data-addon="music" data-price="150">
<div class="addon-icon">
<i data-lucide="music"></i>
</div>
<div class="addon-content">
<div class="addon-header">
<span class="addon-name">Live Music/DJ</span>
</div>
<div class="addon-description">
Premium sound system with DJ service or live musician
</div>
</div>
<div class="addon-price">+$150</div>
<div class="addon-toggle"></div>
</div>
<div class="addon-card" data-addon="transfer" data-price="300">
<div class="addon-icon">
<i data-lucide="car"></i>
</div>
<div class="addon-content">
<div class="addon-header">
<span class="addon-name">Hotel Transfer</span>
</div>
<div class="addon-description">
Round-trip luxury transportation from your hotel
</div>
</div>
<div class="addon-price">+$300</div>
<div class="addon-toggle"></div>
</div>
</div>
</div>
<!-- Special Occasion -->
<div class="customize-section">
<div class="section-header">
<div class="section-icon">
<i data-lucide="gift"></i>
</div>
<h2 class="section-title">Special Occasion?</h2>
</div>
<p class="section-description">
Let us know if you're celebrating something special
</p>
<div class="occasion-grid">
<button class="occasion-tag" data-occasion="birthday">
<span>🎂 Birthday</span>
</button>
<button class="occasion-tag" data-occasion="anniversary">
<span>💑 Anniversary</span>
</button>
<button class="occasion-tag" data-occasion="proposal">
<span>💍 Proposal</span>
</button>
<button class="occasion-tag" data-occasion="corporate">
<span>💼 Corporate Event</span>
</button>
<button class="occasion-tag" data-occasion="graduation">
<span>🎓 Graduation</span>
</button>
<button class="occasion-tag" data-occasion="reunion">
<span>👥 Reunion</span>
</button>
<button class="occasion-tag" data-occasion="date">
<span>❤️ Romantic Date</span>
</button>
<button class="occasion-tag" data-occasion="other">
<span>🎉 Other Celebration</span>
</button>
</div>
</div>
<!-- Special Requests -->
<div class="customize-section">
<div class="section-header">
<div class="section-icon">
<i data-lucide="message-square"></i>
</div>
<h2 class="section-title">Special Requests</h2>
</div>
<p class="section-description">
Any special requests or things we should know about?
</p>
<textarea class="special-requests" placeholder="Tell us about any dietary restrictions, special arrangements, or other requests..."></textarea>
</div>
<!-- Navigation Buttons -->
<div class="booking-navigation">
<button class="btn-nav btn-back" onclick="window.location.href='charter-booking-2.html'">
<i data-lucide="arrow-left"></i>
Back to Yacht Selection
</button>
<button class="btn-nav btn-continue" onclick="window.location.href='charter-booking-4.html'">
Continue to Confirmation
<i data-lucide="arrow-right"></i>
</button>
</div>
</div>
<!-- Sidebar Summary -->
<aside class="booking-sidebar">
<div class="booking-summary">
<div class="summary-header">
<div class="summary-icon">
<i data-lucide="clipboard-list"></i>
</div>
<h3 class="summary-title">Booking Summary</h3>
</div>
<div class="summary-section">
<div class="summary-label">Date & Time</div>
<div class="summary-value">
<i data-lucide="calendar"></i>
Saturday, March 15, 2024
</div>
<div class="summary-value">
<i data-lucide="clock"></i>
2:00 PM - 6:00 PM
</div>
<div class="summary-value">
<i data-lucide="timer"></i>
4 hours charter
</div>
<div class="summary-value">
<i data-lucide="users"></i>
6 guests
</div>
</div>
<div class="summary-section">
<div class="summary-label">Selected Yacht</div>
<div class="summary-value" id="selectedYachtName">
<i data-lucide="sailboat"></i>
<span>Loading...</span>
</div>
</div>
<div class="summary-section">
<div class="summary-label">Selected Route</div>
<div class="summary-value" id="selectedRoute">
<i data-lucide="map"></i>
<span>No route selected</span>
</div>
</div>
<div class="summary-section">
<div class="summary-label">Catering</div>
<div id="selectedCatering">
<div class="summary-value">
<i data-lucide="utensils"></i>
<span>No catering selected</span>
</div>
</div>
</div>
<div class="summary-section" id="addonsSummary">
<div class="summary-label">Add-ons</div>
<div id="selectedAddons">
<div class="summary-value" style="color: #64748B;">
No add-ons selected
</div>
</div>
</div>
<div class="summary-total">
<div class="total-row">
<span class="total-label">Yacht (4 hours)</span>
<span class="total-value" id="yachtPrice">$2,800</span>
</div>
<div class="total-row">
<span class="total-label">Catering</span>
<span class="total-value" id="cateringPrice">$0</span>
</div>
<div class="total-row">
<span class="total-label">Add-ons</span>
<span class="total-value" id="addonsPrice">$0</span>
</div>
<div class="total-row">
<span class="total-label" style="font-size: 1.1rem; font-weight: 700;">Total</span>
<span class="total-final" id="totalPrice">$2,800</span>
</div>
</div>
<div class="help-section" style="margin-top: 2rem; padding: 1.75rem; background: linear-gradient(135deg, rgba(240, 249, 255, 0.5), rgba(255, 255, 255, 0.8)); border: 1px solid rgba(220, 20, 60, 0.08); border-radius: 16px; box-shadow: 0 4px 12px rgba(0, 31, 63, 0.04);">
<h4 style="margin-bottom: 0.75rem; color: #001f3f; font-family: 'Playfair Display', serif; font-size: 1.1rem;">Need Assistance?</h4>
<p style="color: #475569; margin-bottom: 1.25rem; font-size: 0.95rem;">Our experienced crew is ready to help with your charter</p>
<button style="width: 100%; padding: 0.875rem; background: linear-gradient(135deg, #dc143c, #ef4444); color: white; border: none; border-radius: 12px; font-weight: 600; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 0.5rem; transition: all 0.3s ease; box-shadow: 0 4px 12px rgba(220, 20, 60, 0.2);" onmouseover="this.style.transform='translateY(-2px)'; this.style.boxShadow='0 6px 20px rgba(220, 20, 60, 0.3)';" onmouseout="this.style.transform='translateY(0)'; this.style.boxShadow='0 4px 12px rgba(220, 20, 60, 0.2)';">
<i data-lucide="phone"></i>
(415) 555-0123
</button>
</div>
</div>
</aside>
</div>
</div>
</main>
<!-- Footer -->
<footer class="voyage-footer">
<div class="footer-container">
<div class="footer-content">
<div class="footer-brand">
<img src="logo.jpg" alt="HarborSmith" class="footer-logo">
<h3>HarborSmith</h3>
<p>Your trusted partner for Bay Area yacht experiences</p>
</div>
<div class="footer-links">
<h4>Quick Links</h4>
<a href="index.html">Home</a>
<a href="charter.html">Charters</a>
<a href="maintenance.html">Maintenance</a>
<a href="contact.html">Contact</a>
</div>
<div class="footer-contact">
<h4>Get in Touch</h4>
<p><i data-lucide="map-pin" class="footer-icon"></i> Pier 39, San Francisco, CA</p>
<p><i data-lucide="phone" class="footer-icon"></i> (415) 555-0123</p>
<p><i data-lucide="mail" class="footer-icon"></i> hello@harborsmith.com</p>
</div>
</div>
<div class="footer-bottom">
<p>&copy; 2024 HarborSmith Yacht Services. All rights reserved.</p>
</div>
</div>
</footer>
<script>
// Initialize Lucide icons
lucide.createIcons();
// Navigation scroll effect
const nav = document.getElementById('voyageNav');
// Add scrolled class immediately since we don't have a transparent hero
nav.classList.add('scrolled');
// Handle scroll for additional effects if needed
window.addEventListener('scroll', () => {
if (window.scrollY > 50) {
nav.classList.add('scrolled');
} else {
// Keep it scrolled since we need white background
nav.classList.add('scrolled');
}
});
// Get selected yacht from localStorage
const selectedYacht = JSON.parse(localStorage.getItem('selectedYacht') || '{}');
const basePrice = selectedYacht.price || 2800;
// Update yacht name in summary
const yachtNameElement = document.querySelector('#selectedYachtName span');
if (yachtNameElement && selectedYacht.name) {
yachtNameElement.textContent = selectedYacht.name;
}
document.getElementById('yachtPrice').textContent = `$${basePrice.toLocaleString()}`;
// Track selected items
let selectedRoute = null;
let selectedCatering = null;
let selectedAddons = [];
let selectedOccasions = [];
let cateringPrice = 0;
let addonsPrice = 0;
// Route selection
const routeCards = document.querySelectorAll('.route-card');
routeCards.forEach(card => {
card.addEventListener('click', function() {
routeCards.forEach(c => c.classList.remove('selected'));
this.classList.add('selected');
selectedRoute = {
id: this.dataset.route,
name: this.querySelector('.route-name').textContent
};
// Update summary
document.querySelector('#selectedRoute span').textContent = selectedRoute.name;
updateSummary();
});
});
// Catering selection
const cateringCards = document.querySelectorAll('.catering-card');
cateringCards.forEach(card => {
card.addEventListener('click', function() {
cateringCards.forEach(c => c.classList.remove('selected'));
this.classList.add('selected');
selectedCatering = {
id: this.dataset.catering,
name: this.querySelector('.catering-name').textContent,
price: parseInt(this.dataset.price)
};
cateringPrice = selectedCatering.price;
// Update summary
const cateringDiv = document.getElementById('selectedCatering');
if (selectedCatering.price > 0) {
cateringDiv.innerHTML = `
<div class="summary-addon">
<span class="summary-addon-name">${selectedCatering.name}</span>
<span class="summary-addon-price">+$${selectedCatering.price}</span>
</div>
`;
} else {
cateringDiv.innerHTML = `
<div class="summary-value">
<i data-lucide="utensils"></i>
<span>No catering (BYO)</span>
</div>
`;
}
updateSummary();
lucide.createIcons();
});
});
// Add-on selection
const addonCards = document.querySelectorAll('.addon-card');
addonCards.forEach(card => {
card.addEventListener('click', function() {
this.classList.toggle('selected');
const addon = {
id: this.dataset.addon,
name: this.querySelector('.addon-name').textContent,
price: parseInt(this.dataset.price)
};
if (this.classList.contains('selected')) {
selectedAddons.push(addon);
} else {
const index = selectedAddons.findIndex(a => a.id === addon.id);
if (index > -1) {
selectedAddons.splice(index, 1);
}
}
// Calculate total addons price
addonsPrice = selectedAddons.reduce((sum, a) => sum + a.price, 0);
// Update addons summary
const addonsDiv = document.getElementById('selectedAddons');
if (selectedAddons.length > 0) {
let html = '';
selectedAddons.forEach(addon => {
html += `
<div class="summary-addon">
<span class="summary-addon-name">${addon.name}</span>
<span class="summary-addon-price">+$${addon.price}</span>
</div>
`;
});
addonsDiv.innerHTML = html;
} else {
addonsDiv.innerHTML = '<div class="summary-value" style="color: #64748B;">No add-ons selected</div>';
}
updateSummary();
});
});
// Occasion tags
const occasionTags = document.querySelectorAll('.occasion-tag');
occasionTags.forEach(tag => {
tag.addEventListener('click', function() {
this.classList.toggle('selected');
const occasion = this.dataset.occasion;
if (this.classList.contains('selected')) {
selectedOccasions.push(occasion);
} else {
const index = selectedOccasions.indexOf(occasion);
if (index > -1) {
selectedOccasions.splice(index, 1);
}
}
});
});
// Update summary totals
function updateSummary() {
document.getElementById('cateringPrice').textContent = `$${cateringPrice}`;
document.getElementById('addonsPrice').textContent = `$${addonsPrice}`;
const total = basePrice + cateringPrice + addonsPrice;
document.getElementById('totalPrice').textContent = `$${total.toLocaleString()}`;
}
// Continue button - save selections
document.querySelector('.btn-continue').addEventListener('click', function(e) {
e.preventDefault();
const customizations = {
route: selectedRoute,
catering: selectedCatering,
addons: selectedAddons,
occasions: selectedOccasions,
specialRequests: document.querySelector('.special-requests').value,
cateringPrice: cateringPrice,
addonsPrice: addonsPrice,
totalPrice: basePrice + cateringPrice + addonsPrice
};
localStorage.setItem('customizations', JSON.stringify(customizations));
window.location.href = 'charter-booking-4.html';
});
// Select first route by default
if (routeCards.length > 0) {
routeCards[0].click();
}
// Select no catering by default
if (cateringCards.length > 0) {
cateringCards[0].click();
}
</script>
</body>
</html>