diff --git a/src/index.html b/src/index.html index 6225f69..d95252f 100644 --- a/src/index.html +++ b/src/index.html @@ -591,6 +591,380 @@ } } + /* ── Booking Modal ─────────────────────────────────── */ + + .booking-overlay { + position: fixed; + inset: 0; + background: rgba(44, 44, 44, 0.6); + backdrop-filter: blur(4px); + z-index: 1000; + display: flex; + align-items: center; + justify-content: center; + padding: 1rem; + opacity: 0; + visibility: hidden; + transition: opacity 0.4s var(--transition-smooth), visibility 0.4s; + } + + .booking-overlay.active { + opacity: 1; + visibility: visible; + } + + .booking-modal { + background: var(--color-bg); + width: 100%; + max-width: 680px; + max-height: 90vh; + overflow-y: auto; + position: relative; + display: flex; + flex-direction: column; + transform: translateY(20px); + transition: transform 0.4s var(--transition-smooth); + } + + .booking-overlay.active .booking-modal { + transform: translateY(0); + } + + .booking-close { + position: absolute; + top: 1.25rem; + right: 1.5rem; + width: 32px; + height: 32px; + background: none; + border: none; + cursor: pointer; + color: var(--color-text-light); + font-size: 1.4rem; + line-height: 1; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + transition: color 0.3s; + z-index: 1; + } + + .booking-close:hover { color: var(--color-text); } + + .booking-header { + padding: 2.5rem 3rem 1.5rem; + border-bottom: 1px solid var(--color-accent); + } + + .booking-title { + font-family: var(--font-display); + font-size: 1.8rem; + font-weight: 300; + color: var(--color-text); + margin-bottom: 1.5rem; + } + + /* Step indicator */ + .booking-step-bar { + display: flex; + align-items: flex-start; + } + + .booking-step-item { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + gap: 0.4rem; + position: relative; + } + + .booking-step-item:not(:last-child)::after { + content: ''; + position: absolute; + top: 11px; + left: 50%; + right: -50%; + height: 1px; + background: var(--color-accent); + z-index: 0; + } + + .booking-step-item.completed:not(:last-child)::after { + background: var(--color-primary); + } + + .step-dot { + width: 22px; + height: 22px; + border-radius: 50%; + border: 1px solid var(--color-accent); + background: var(--color-bg); + display: flex; + align-items: center; + justify-content: center; + font-size: 0.6rem; + color: var(--color-text-light); + position: relative; + z-index: 1; + transition: all 0.3s var(--transition-smooth); + } + + .booking-step-item.active .step-dot, + .booking-step-item.completed .step-dot { + border-color: var(--color-primary); + background: var(--color-primary); + color: var(--color-white); + } + + .step-label-text { + font-size: 0.58rem; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--color-text-light); + transition: color 0.3s; + } + + .booking-step-item.active .step-label-text { color: var(--color-primary); } + + /* Step panels */ + .booking-content { + padding: 2.5rem 3rem; + flex: 1; + min-height: 300px; + } + + .step-panel { display: none; animation: stepFadeIn 0.3s var(--transition-smooth); } + .step-panel.active { display: block; } + + @keyframes stepFadeIn { + from { opacity: 0; transform: translateX(8px); } + to { opacity: 1; transform: translateX(0); } + } + + .step-heading { + font-family: var(--font-display); + font-size: 1.4rem; + font-weight: 300; + color: var(--color-text); + margin-bottom: 0.4rem; + } + + .step-subheading { + font-size: 0.85rem; + color: var(--color-text-light); + margin-bottom: 2rem; + } + + .booking-field { margin-bottom: 1.5rem; } + + .booking-label { + display: block; + font-size: 0.72rem; + letter-spacing: 0.15em; + text-transform: uppercase; + color: var(--color-text-light); + margin-bottom: 0.5rem; + } + + .booking-input { + width: 100%; + padding: 0.9rem 1rem; + font-family: var(--font-body); + font-size: 0.9rem; + border: 1px solid var(--color-accent); + background: var(--color-white); + color: var(--color-text); + outline: none; + transition: border-color 0.3s; + } + + .booking-input:focus { border-color: var(--color-primary); } + + /* Option cards */ + .option-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); + gap: 1rem; + } + + .option-card { + padding: 1.25rem 1rem; + border: 1px solid var(--color-accent); + background: var(--color-white); + cursor: pointer; + text-align: center; + transition: all 0.3s var(--transition-smooth); + user-select: none; + } + + .option-card:hover { border-color: var(--color-primary); } + + .option-card.selected { + border-color: var(--color-primary); + background: var(--color-bg-warm); + } + + .option-card-title { + font-family: var(--font-display); + font-size: 1.1rem; + font-weight: 400; + color: var(--color-text); + margin-bottom: 0.25rem; + } + + .option-card-desc { font-size: 0.75rem; color: var(--color-text-light); } + + /* Contract step */ + .contract-placeholder { + background: var(--color-bg-warm); + border: 1px solid var(--color-accent); + padding: 2rem; + margin-bottom: 1.5rem; + text-align: center; + font-size: 0.85rem; + color: var(--color-text-light); + } + + .booking-checkbox-label { + display: flex; + align-items: flex-start; + gap: 0.75rem; + cursor: pointer; + font-size: 0.85rem; + color: var(--color-text); + line-height: 1.5; + } + + .booking-checkbox-label input[type="checkbox"] { + margin-top: 3px; + accent-color: var(--color-primary); + flex-shrink: 0; + } + + /* Payment step */ + .payment-amount { + font-family: var(--font-display); + font-size: 2.5rem; + font-weight: 300; + color: var(--color-primary); + margin: 0.5rem 0 1.25rem; + } + + .payment-note { + background: var(--color-bg-warm); + border-left: 2px solid var(--color-primary); + padding: 1rem 1.25rem; + margin-bottom: 1.5rem; + font-size: 0.85rem; + color: var(--color-text); + } + + /* Confirm / summary */ + .confirm-summary { + background: var(--color-bg-warm); + border: 1px solid var(--color-accent); + padding: 1.25rem 1.5rem; + margin-bottom: 2rem; + } + + .confirm-row { + display: flex; + justify-content: space-between; + align-items: baseline; + padding: 0.5rem 0; + border-bottom: 1px solid var(--color-accent); + font-size: 0.85rem; + } + + .confirm-row:last-child { border-bottom: none; } + + .confirm-label { + font-size: 0.7rem; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--color-text-light); + } + + .confirm-value { color: var(--color-text); } + + /* Error / success */ + .booking-error { + font-size: 0.8rem; + color: #b94040; + margin-top: 0.5rem; + } + + .booking-success { + text-align: center; + padding: 3rem 1rem; + } + + .booking-success-check { + width: 56px; + height: 56px; + border-radius: 50%; + border: 1px solid var(--color-primary); + display: flex; + align-items: center; + justify-content: center; + margin: 0 auto 1.5rem; + color: var(--color-primary); + font-size: 1.4rem; + } + + .booking-success h3 { + font-family: var(--font-display); + font-size: 1.8rem; + font-weight: 300; + margin-bottom: 0.75rem; + } + + .booking-success p { font-size: 0.9rem; color: var(--color-text-light); max-width: 400px; margin: 0 auto; } + + /* Nav bar */ + .booking-nav { + padding: 1.5rem 3rem; + border-top: 1px solid var(--color-accent); + display: flex; + justify-content: space-between; + align-items: center; + } + + .booking-nav-right { display: flex; align-items: center; gap: 1rem; } + + .step-counter { font-size: 0.72rem; color: var(--color-text-light); letter-spacing: 0.1em; } + + /* Nav "Book" button */ + .nav-book-btn { + font-family: var(--font-body); + font-size: 0.75rem; + font-weight: 400; + letter-spacing: 0.15em; + text-transform: uppercase; + color: var(--color-primary); + border: 1px solid var(--color-primary); + background: transparent; + padding: 0.5rem 1.25rem; + cursor: pointer; + transition: all 0.3s var(--transition-smooth); + text-decoration: none; + } + + .nav-book-btn:hover { + background: var(--color-primary); + color: var(--color-white); + } + + @media (max-width: 768px) { + .booking-header { padding: 2rem 1.5rem 1.25rem; } + .booking-content { padding: 1.75rem 1.5rem; } + .booking-nav { padding: 1.25rem 1.5rem; } + .step-label-text { display: none; } + .booking-modal { max-width: 100%; max-height: 100vh; height: 100%; } + } + /* Reveal animations */ .reveal { opacity: 0; @@ -620,6 +994,7 @@ Portfolio Client Access Connect + @@ -646,6 +1022,7 @@
View Portfolio Client Access +
@@ -699,6 +1076,182 @@ + + +