2047 lines
39 KiB
CSS
2047 lines
39 KiB
CSS
/* =========================================================
|
|
Tokens
|
|
========================================================= */
|
|
:root {
|
|
--c-black: #000;
|
|
--c-white: #fff;
|
|
--c-accent: #fc0;
|
|
--c-teal: #2cafc2;
|
|
--c-teal-05: rgba(44, 175, 194, 0.05);
|
|
--c-teal-20: rgba(44, 175, 194, 0.2);
|
|
--c-ink: #101317;
|
|
--c-muted: rgba(0, 0, 0, 0.5);
|
|
--c-line: rgba(0, 0, 0, 0.1);
|
|
--c-glass: rgba(0, 0, 0, 0.5);
|
|
|
|
--r-pill: 2.5rem;
|
|
--r-card: 1.5rem;
|
|
--r-xl: 2rem;
|
|
|
|
--fs-body: 1rem;
|
|
--fs-hero: clamp(2.25rem, 1.25rem + 4.4vw, 4rem);
|
|
--fs-h2: clamp(1.75rem, 1.15rem + 2.6vw, 2.5rem);
|
|
--fs-card: clamp(1.125rem, 0.95rem + 0.75vw, 1.5rem);
|
|
|
|
--sp-1: 0.5rem;
|
|
--sp-2: 0.6875rem;
|
|
--sp-3: 1rem;
|
|
--sp-4: 1.5rem;
|
|
--sp-5: 2rem;
|
|
--sp-6: clamp(2.5rem, 1.5rem + 3.5vw, 5rem);
|
|
|
|
--control-h: clamp(2.75rem, 2.4rem + 0.9vw, 3rem);
|
|
--container: 81rem;
|
|
--gutter: clamp(1rem, 0.4rem + 2.2vw, 3rem);
|
|
--page-inset: clamp(0.5rem, 0.2rem + 0.6vw, 0.75rem);
|
|
--header-h: calc(var(--control-h) + var(--sp-5));
|
|
--gap: clamp(0.75rem, 0.4rem + 1vw, 1.5rem);
|
|
|
|
--ease: cubic-bezier(0.4, 0, 0.2, 1);
|
|
}
|
|
|
|
/* =========================================================
|
|
Base
|
|
========================================================= */
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
html {
|
|
-webkit-text-size-adjust: 100%;
|
|
scroll-behavior: smooth;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
font-family: "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
font-size: var(--fs-body);
|
|
line-height: 1.5;
|
|
color: var(--c-ink);
|
|
background: var(--c-white);
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
img,
|
|
svg {
|
|
display: block;
|
|
max-width: 100%;
|
|
}
|
|
|
|
a {
|
|
color: inherit;
|
|
text-decoration: none;
|
|
}
|
|
|
|
button {
|
|
font: inherit;
|
|
color: inherit;
|
|
border: 0;
|
|
background: none;
|
|
cursor: pointer;
|
|
}
|
|
|
|
ul,
|
|
ol {
|
|
margin: 0;
|
|
padding: 0;
|
|
list-style: none;
|
|
}
|
|
|
|
blockquote,
|
|
figure,
|
|
dl,
|
|
dd {
|
|
margin: 0;
|
|
}
|
|
|
|
:where(a, button, input, select, summary):focus-visible {
|
|
outline: 2px solid var(--c-teal);
|
|
outline-offset: 3px;
|
|
border-radius: 0.25rem;
|
|
}
|
|
|
|
.sprite {
|
|
position: absolute;
|
|
width: 0;
|
|
height: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.skip-link {
|
|
position: absolute;
|
|
left: -100vmax;
|
|
top: var(--sp-1);
|
|
z-index: 100;
|
|
padding: var(--sp-1) var(--sp-3);
|
|
border-radius: var(--r-pill);
|
|
background: var(--c-white);
|
|
color: var(--c-black);
|
|
}
|
|
|
|
.skip-link:focus {
|
|
left: var(--sp-1);
|
|
}
|
|
|
|
.container {
|
|
width: 100%;
|
|
max-width: var(--container);
|
|
margin-inline: auto;
|
|
padding-inline: var(--gutter);
|
|
}
|
|
|
|
.icon {
|
|
width: 1rem;
|
|
height: 1rem;
|
|
flex: none;
|
|
}
|
|
|
|
.icon--12 {
|
|
width: 0.75rem;
|
|
height: 0.75rem;
|
|
}
|
|
|
|
.icon--14 {
|
|
width: 0.875rem;
|
|
height: 0.875rem;
|
|
}
|
|
|
|
.icon--20 {
|
|
width: 1.25rem;
|
|
height: 1.25rem;
|
|
}
|
|
|
|
.icon--24 {
|
|
width: 1.5rem;
|
|
height: 1.5rem;
|
|
}
|
|
|
|
/* =========================================================
|
|
Buttons, pills, chips
|
|
========================================================= */
|
|
.btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: var(--sp-1);
|
|
min-height: var(--control-h);
|
|
padding-inline: var(--sp-4);
|
|
border-radius: var(--r-pill);
|
|
font-weight: 700;
|
|
white-space: nowrap;
|
|
transition: transform 0.2s var(--ease), filter 0.2s var(--ease), background 0.2s var(--ease);
|
|
}
|
|
|
|
.btn:hover {
|
|
filter: brightness(0.94);
|
|
transform: translateY(-1px);
|
|
}
|
|
|
|
.btn--accent {
|
|
background: var(--c-accent);
|
|
color: var(--c-black);
|
|
}
|
|
|
|
.btn--dark {
|
|
background: var(--c-black);
|
|
color: var(--c-white);
|
|
}
|
|
|
|
.btn--white {
|
|
background: var(--c-white);
|
|
color: var(--c-black);
|
|
font-weight: 500;
|
|
}
|
|
|
|
.btn--ghost {
|
|
border: 1px solid var(--c-line);
|
|
background: var(--c-white);
|
|
color: var(--c-black);
|
|
font-weight: 500;
|
|
}
|
|
|
|
.btn--ghost:hover {
|
|
filter: none;
|
|
background: rgba(0, 0, 0, 0.04);
|
|
}
|
|
|
|
.btn--wide {
|
|
justify-content: space-between;
|
|
width: 100%;
|
|
padding-inline: var(--sp-3);
|
|
}
|
|
|
|
.icon-btn {
|
|
display: inline-grid;
|
|
place-items: center;
|
|
aspect-ratio: 1;
|
|
width: var(--control-h);
|
|
border-radius: var(--r-pill);
|
|
color: var(--c-white);
|
|
background: var(--c-glass);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
backdrop-filter: blur(12px);
|
|
transition: background 0.2s var(--ease);
|
|
}
|
|
|
|
.icon-btn:hover {
|
|
background: rgba(0, 0, 0, 0.7);
|
|
}
|
|
|
|
.pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: var(--sp-1);
|
|
margin: 0;
|
|
padding: 0.375rem var(--sp-3);
|
|
border-radius: var(--r-pill);
|
|
color: var(--c-white);
|
|
background: var(--c-glass);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
backdrop-filter: blur(12px);
|
|
}
|
|
|
|
.chip {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: var(--sp-1);
|
|
padding: 0.125rem var(--sp-1);
|
|
border-radius: var(--r-pill);
|
|
font-size: 0.75rem;
|
|
font-weight: 700;
|
|
line-height: 1.6;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.chip--accent {
|
|
background: var(--c-accent);
|
|
color: var(--c-black);
|
|
}
|
|
|
|
.chip--glass {
|
|
color: var(--c-white);
|
|
background: var(--c-glass);
|
|
font-weight: 400;
|
|
-webkit-backdrop-filter: blur(12px);
|
|
backdrop-filter: blur(12px);
|
|
}
|
|
|
|
.rating {
|
|
position: absolute;
|
|
left: var(--sp-2);
|
|
top: var(--sp-2);
|
|
z-index: 2;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 0.25rem;
|
|
padding: 0.125rem var(--sp-1);
|
|
border-radius: var(--r-pill);
|
|
color: var(--c-white);
|
|
background: var(--c-glass);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
backdrop-filter: blur(12px);
|
|
}
|
|
|
|
.rating__star {
|
|
color: var(--c-accent);
|
|
}
|
|
|
|
.rating b {
|
|
font-size: 0.875rem;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.rating i {
|
|
font-size: 0.75rem;
|
|
font-style: normal;
|
|
font-weight: 500;
|
|
opacity: 0.3;
|
|
}
|
|
|
|
/* key / value pairs used on the cards */
|
|
.meta {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.25rem;
|
|
min-width: 0;
|
|
}
|
|
|
|
.meta__k {
|
|
font-size: 0.75rem;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.meta__v {
|
|
font-size: 1rem;
|
|
font-weight: 800;
|
|
}
|
|
|
|
/* =========================================================
|
|
Circular "ring" badge (scroll cue, book now, back to top)
|
|
========================================================= */
|
|
.ring-badge {
|
|
position: relative;
|
|
display: grid;
|
|
place-items: center;
|
|
aspect-ratio: 1;
|
|
width: clamp(3.25rem, 2.6rem + 2vw, 4.5rem);
|
|
flex: none;
|
|
}
|
|
|
|
.ring-badge__ring {
|
|
position: absolute;
|
|
inset: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
opacity: 0.75;
|
|
animation: spin 16s linear infinite;
|
|
}
|
|
|
|
.ring-badge__text {
|
|
fill: currentColor;
|
|
font-size: 0.75rem;
|
|
font-weight: 700;
|
|
letter-spacing: 0.04em;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.ring-badge__dot {
|
|
display: grid;
|
|
place-items: center;
|
|
padding: var(--sp-1);
|
|
border-radius: var(--r-pill);
|
|
color: var(--c-white);
|
|
background: var(--c-glass);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
backdrop-filter: blur(12px);
|
|
transition: transform 0.2s var(--ease);
|
|
}
|
|
|
|
.ring-badge:hover .ring-badge__dot {
|
|
transform: scale(1.08);
|
|
}
|
|
|
|
.ring-badge--accent .ring-badge__dot,
|
|
.dcard:hover .ring-badge--card .ring-badge__dot,
|
|
.dcard:focus-within .ring-badge--card .ring-badge__dot,
|
|
.tcard:hover .ring-badge--card .ring-badge__dot,
|
|
.tcard:focus-within .ring-badge--card .ring-badge__dot,
|
|
.acard:hover .ring-badge--card .ring-badge__dot,
|
|
.acard:focus-within .ring-badge--card .ring-badge__dot {
|
|
color: var(--c-black);
|
|
background: var(--c-accent);
|
|
}
|
|
|
|
.rail:hover .dcard.is-active:not(:hover):not(:focus-within) .ring-badge__dot,
|
|
.rail:hover .acard.is-active:not(:hover):not(:focus-within) .ring-badge__dot,
|
|
.bus__grid:hover .tcard.is-active:not(:hover):not(:focus-within) .ring-badge__dot {
|
|
color: var(--c-white);
|
|
background: var(--c-glass);
|
|
}
|
|
|
|
.ring-badge--scroll {
|
|
position: absolute;
|
|
left: 50%;
|
|
bottom: 0;
|
|
z-index: 5;
|
|
/* dark ink stays legible over both the teal hero foot and the white section below */
|
|
color: var(--c-ink);
|
|
transform: translate(-50%, 50%);
|
|
}
|
|
|
|
.ring-badge--card {
|
|
width: clamp(2.875rem, 2.4rem + 1.6vw, 3.875rem);
|
|
color: var(--c-white);
|
|
}
|
|
|
|
.ring-badge--card .ring-badge__text {
|
|
font-size: 0.875rem;
|
|
}
|
|
|
|
.ring-badge--card .ring-badge__dot {
|
|
padding: 0.4375rem;
|
|
}
|
|
|
|
.ring-badge--top {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 0;
|
|
color: var(--c-ink);
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
|
|
.ring-badge--top .ring-badge__text {
|
|
font-size: 0.625rem;
|
|
letter-spacing: 0.02em;
|
|
}
|
|
|
|
.ring-badge--scroll .ring-badge__dot .icon {
|
|
animation: nudge 2s var(--ease) infinite;
|
|
}
|
|
|
|
@keyframes spin {
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
@keyframes nudge {
|
|
|
|
0%,
|
|
60%,
|
|
100% {
|
|
transform: translateY(0);
|
|
}
|
|
|
|
30% {
|
|
transform: translateY(0.1875rem);
|
|
}
|
|
}
|
|
|
|
/* =========================================================
|
|
Header
|
|
========================================================= */
|
|
.site-header {
|
|
position: absolute;
|
|
inset: var(--page-inset) 0 auto;
|
|
z-index: 20;
|
|
padding-block: var(--sp-4);
|
|
color: var(--c-white);
|
|
}
|
|
|
|
.site-header.is-stuck {
|
|
position: fixed;
|
|
inset-block-start: 0;
|
|
padding-block: var(--sp-2);
|
|
background: rgba(0, 0, 0, 0.55);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
backdrop-filter: blur(12px);
|
|
animation: slide-down 0.3s var(--ease);
|
|
}
|
|
|
|
@keyframes slide-down {
|
|
from {
|
|
transform: translateY(-100%);
|
|
}
|
|
}
|
|
|
|
.header__inner {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: var(--sp-4);
|
|
}
|
|
|
|
.header__left {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: clamp(1.5rem, 0.2rem + 4.5vw, 6rem);
|
|
min-width: 0;
|
|
}
|
|
|
|
.header__logo .logo {
|
|
width: clamp(4.25rem, 3.6rem + 1.6vw, 5.6875rem);
|
|
height: auto;
|
|
}
|
|
|
|
.header__actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--sp-1);
|
|
}
|
|
|
|
.nav__list {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: clamp(1rem, 0.1rem + 1.8vw, 2.5rem);
|
|
}
|
|
|
|
.nav__link {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: var(--sp-1);
|
|
font-weight: 500;
|
|
white-space: nowrap;
|
|
transition: opacity 0.2s var(--ease);
|
|
}
|
|
|
|
.nav__link:hover {
|
|
opacity: 0.7;
|
|
}
|
|
|
|
.nav__item--has-menu {
|
|
position: relative;
|
|
}
|
|
|
|
.nav__toggle .icon--chevron {
|
|
transition: transform 0.25s var(--ease);
|
|
}
|
|
|
|
.nav__toggle[aria-expanded="true"] .icon--chevron {
|
|
transform: rotate(180deg);
|
|
}
|
|
|
|
.nav__submenu {
|
|
position: absolute;
|
|
top: calc(100% + var(--sp-2));
|
|
left: 0;
|
|
z-index: 5;
|
|
display: grid;
|
|
gap: 0.25rem;
|
|
min-width: max-content;
|
|
padding: var(--sp-1);
|
|
border-radius: 1rem;
|
|
color: var(--c-black);
|
|
background: var(--c-white);
|
|
box-shadow: 0 1.25rem 2.5rem rgba(0, 0, 0, 0.18);
|
|
opacity: 0;
|
|
visibility: hidden;
|
|
transform: translateY(-0.375rem);
|
|
transition: opacity 0.2s var(--ease), transform 0.2s var(--ease), visibility 0.2s;
|
|
}
|
|
|
|
.nav__item--has-menu:hover .nav__submenu,
|
|
.nav__toggle[aria-expanded="true"]+.nav__submenu {
|
|
opacity: 1;
|
|
visibility: visible;
|
|
transform: translateY(0);
|
|
}
|
|
|
|
.nav__submenu a {
|
|
display: block;
|
|
padding: var(--sp-1) var(--sp-3);
|
|
border-radius: var(--r-pill);
|
|
font-weight: 500;
|
|
}
|
|
|
|
.nav__submenu a:hover {
|
|
background: rgba(0, 0, 0, 0.06);
|
|
}
|
|
|
|
.nav__mobile-cta {
|
|
display: none;
|
|
}
|
|
|
|
.burger {
|
|
display: none;
|
|
place-content: center;
|
|
place-items: center;
|
|
gap: 0.25rem;
|
|
aspect-ratio: 1;
|
|
width: var(--control-h);
|
|
border-radius: var(--r-pill);
|
|
background: var(--c-glass);
|
|
-webkit-backdrop-filter: blur(12px);
|
|
backdrop-filter: blur(12px);
|
|
}
|
|
|
|
.burger span {
|
|
display: block;
|
|
width: 1.125rem;
|
|
height: 0.125rem;
|
|
border-radius: 1px;
|
|
background: var(--c-white);
|
|
transition: transform 0.25s var(--ease), opacity 0.25s var(--ease);
|
|
}
|
|
|
|
.burger[aria-expanded="true"] span:nth-child(1) {
|
|
transform: translateY(0.375rem) rotate(45deg);
|
|
}
|
|
|
|
.burger[aria-expanded="true"] span:nth-child(2) {
|
|
opacity: 0;
|
|
}
|
|
|
|
.burger[aria-expanded="true"] span:nth-child(3) {
|
|
transform: translateY(-0.375rem) rotate(-45deg);
|
|
}
|
|
|
|
/* =========================================================
|
|
Hero
|
|
========================================================= */
|
|
.hero {
|
|
position: relative;
|
|
display: grid;
|
|
align-items: end;
|
|
min-height: clamp(34rem, 88svh, 56rem);
|
|
margin: var(--page-inset);
|
|
padding-block: calc(var(--header-h) + var(--sp-6)) clamp(3rem, 1.5rem + 6vw, 6rem);
|
|
border-radius: var(--r-xl);
|
|
isolation: isolate;
|
|
}
|
|
|
|
.hero__media {
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: -1;
|
|
border-radius: inherit;
|
|
overflow: clip;
|
|
}
|
|
|
|
.hero__img {
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: cover;
|
|
object-position: center;
|
|
}
|
|
|
|
/* Figma gradients: radial vignette + teal fade into the next section */
|
|
.hero__scrim {
|
|
position: absolute;
|
|
inset: 0;
|
|
background:
|
|
radial-gradient(39.91% 77.37% at 60.22% 50%, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.5) 100%),
|
|
linear-gradient(180deg, rgba(44, 175, 194, 0) 51.6%, var(--c-teal) 100%);
|
|
}
|
|
|
|
.hero__content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
gap: var(--sp-4);
|
|
text-align: left;
|
|
}
|
|
|
|
.hero__eyebrow {
|
|
order: 1;
|
|
font-size: 1rem;
|
|
}
|
|
|
|
.hero__title {
|
|
order: 2;
|
|
/* em keeps the two-line break ("Set out on" / "the journey.") at every size */
|
|
max-width: 5.4em;
|
|
margin: 0;
|
|
font-size: var(--fs-hero);
|
|
font-weight: 500;
|
|
line-height: 1.05;
|
|
letter-spacing: -0.02em;
|
|
color: var(--c-white);
|
|
}
|
|
|
|
.booking {
|
|
order: 3;
|
|
width: 100%;
|
|
max-width: 46.625rem;
|
|
padding: var(--sp-3);
|
|
border-radius: var(--r-card);
|
|
background: var(--c-white);
|
|
box-shadow: 0 1.5rem 3.5rem rgba(0, 0, 0, 0.18);
|
|
}
|
|
|
|
.booking__row {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
gap: var(--sp-3);
|
|
}
|
|
|
|
.field {
|
|
display: flex;
|
|
flex: 1 1 0;
|
|
flex-direction: column;
|
|
gap: var(--sp-2);
|
|
min-width: 0;
|
|
}
|
|
|
|
.field__label {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--sp-1);
|
|
font-size: 1rem;
|
|
font-weight: 500;
|
|
color: var(--c-black);
|
|
}
|
|
|
|
.field__label label {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.select {
|
|
position: relative;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.select__input {
|
|
width: 100%;
|
|
min-width: 0;
|
|
min-height: var(--control-h);
|
|
padding: 0 calc(var(--sp-3) + 1.5rem) 0 var(--sp-3);
|
|
border: 1px solid var(--c-line);
|
|
border-radius: var(--r-pill);
|
|
font: inherit;
|
|
font-weight: 500;
|
|
color: var(--c-black);
|
|
background: var(--c-white);
|
|
appearance: none;
|
|
-webkit-appearance: none;
|
|
text-overflow: ellipsis;
|
|
transition: border-color 0.2s var(--ease);
|
|
}
|
|
|
|
.select__input::placeholder {
|
|
color: var(--c-black);
|
|
opacity: 1;
|
|
}
|
|
|
|
.select__input:hover {
|
|
border-color: rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.select__input--date::-webkit-calendar-picker-indicator {
|
|
opacity: 0;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.select__chevron {
|
|
position: absolute;
|
|
right: var(--sp-3);
|
|
pointer-events: none;
|
|
color: var(--c-black);
|
|
}
|
|
|
|
.booking__submit {
|
|
flex: none;
|
|
}
|
|
|
|
/* =========================================================
|
|
Section shell + section header
|
|
========================================================= */
|
|
.section {
|
|
padding-block: var(--sp-6);
|
|
}
|
|
|
|
.section--tight {
|
|
padding-block-start: 0;
|
|
}
|
|
|
|
.sec-head {
|
|
display: grid;
|
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
gap: clamp(1.5rem, 0.5rem + 3vw, 4rem);
|
|
margin-bottom: var(--sp-6);
|
|
}
|
|
|
|
.sec-head__title {
|
|
margin: 0;
|
|
font-size: var(--fs-h2);
|
|
font-weight: 800;
|
|
line-height: 1.1;
|
|
letter-spacing: -0.03em;
|
|
}
|
|
|
|
.sec-head__lead {
|
|
max-width: 40ch;
|
|
margin: 0;
|
|
opacity: 0.7;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.sec-head__actions {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--sp-1);
|
|
width: clamp(8rem, 6rem + 4vw, 9.125rem);
|
|
}
|
|
|
|
.rail-nav {
|
|
display: flex;
|
|
gap: var(--sp-1);
|
|
}
|
|
|
|
.rail-nav__btn {
|
|
flex: 1 1 0;
|
|
padding-inline: var(--sp-3);
|
|
}
|
|
|
|
.rail-nav__btn[disabled] {
|
|
opacity: 0.35;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
/* =========================================================
|
|
Horizontal rails
|
|
========================================================= */
|
|
.rail {
|
|
display: flex;
|
|
gap: var(--gap);
|
|
overflow-x: auto;
|
|
scroll-snap-type: x mandatory;
|
|
scroll-behavior: smooth;
|
|
scrollbar-width: none;
|
|
/* negative margin + padding keeps the card glow from being clipped by the scroller */
|
|
margin-inline: calc(var(--gap) * -1);
|
|
padding: var(--sp-4) var(--gap);
|
|
}
|
|
|
|
.rail::-webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
|
|
.rail>* {
|
|
scroll-snap-align: start;
|
|
}
|
|
|
|
.rail--dest>* {
|
|
flex: 0 0 calc((100% - 4 * var(--gap)) / 5);
|
|
}
|
|
|
|
.rail--art>* {
|
|
flex: 0 0 calc((100% - 2 * var(--gap)) / 3);
|
|
}
|
|
|
|
/* =========================================================
|
|
Destination card
|
|
========================================================= */
|
|
.dcard {
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: flex-end;
|
|
aspect-ratio: 246 / 346;
|
|
padding: clamp(0.75rem, 0.4rem + 1vw, 1.25rem);
|
|
border-radius: var(--r-card);
|
|
color: var(--c-white);
|
|
overflow: hidden;
|
|
isolation: isolate;
|
|
transition: transform 0.3s var(--ease);
|
|
}
|
|
|
|
.dcard:hover {
|
|
transform: translateY(-0.25rem);
|
|
}
|
|
|
|
.dcard__img {
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: -2;
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: cover;
|
|
}
|
|
|
|
.dcard::after {
|
|
content: "";
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: -1;
|
|
background: linear-gradient(180deg, rgba(0, 0, 0, 0) 35%, rgba(0, 0, 0, 0.65) 100%);
|
|
}
|
|
|
|
/* highlighted card — gradients copied from Figma */
|
|
.dcard.is-active,
|
|
.dcard:hover,
|
|
.dcard:focus-within {
|
|
box-shadow: 0 0.75rem 3.75rem 0 rgba(44, 175, 194, 0.5);
|
|
}
|
|
|
|
.dcard.is-active::after,
|
|
.dcard:hover::after,
|
|
.dcard:focus-within::after {
|
|
background:
|
|
linear-gradient(180deg, rgba(255, 255, 255, 0) 51.6%, rgba(255, 255, 255, 0.4) 100%),
|
|
linear-gradient(0deg, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)),
|
|
linear-gradient(180deg, rgba(44, 175, 194, 0) 37.33%, #2cafc2 84.53%);
|
|
}
|
|
|
|
/* hovering any card in the rail hands the highlight over to it */
|
|
.rail:hover .dcard.is-active:not(:hover):not(:focus-within),
|
|
.rail:focus-within .dcard.is-active:not(:hover):not(:focus-within) {
|
|
box-shadow: none;
|
|
}
|
|
|
|
.rail:hover .dcard.is-active:not(:hover):not(:focus-within)::after,
|
|
.rail:focus-within .dcard.is-active:not(:hover):not(:focus-within)::after {
|
|
background: linear-gradient(180deg, rgba(0, 0, 0, 0) 35%, rgba(0, 0, 0, 0.65) 100%);
|
|
}
|
|
|
|
.dcard__desc {
|
|
position: absolute;
|
|
left: clamp(0.75rem, 0.4rem + 1vw, 1.25rem);
|
|
right: clamp(0.75rem, 0.4rem + 1vw, 1.25rem);
|
|
top: clamp(2.75rem, 2rem + 2vw, 3.5rem);
|
|
opacity: 0;
|
|
transform: translateY(-0.375rem);
|
|
transition: opacity 0.25s var(--ease), transform 0.25s var(--ease);
|
|
}
|
|
|
|
.dcard.is-active .dcard__desc,
|
|
.dcard:hover .dcard__desc,
|
|
.dcard:focus-within .dcard__desc {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
|
|
.rail:hover .dcard.is-active:not(:hover):not(:focus-within) .dcard__desc,
|
|
.rail:focus-within .dcard.is-active:not(:hover):not(:focus-within) .dcard__desc {
|
|
opacity: 0;
|
|
transform: translateY(-0.375rem);
|
|
}
|
|
|
|
.dcard__desc-k {
|
|
display: block;
|
|
font-size: 0.75rem;
|
|
font-weight: 500;
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.dcard__desc p {
|
|
margin: 0.25rem 0 0;
|
|
font-size: 0.875rem;
|
|
font-weight: 500;
|
|
line-height: 1.45;
|
|
}
|
|
|
|
.dcard__body {
|
|
display: grid;
|
|
gap: var(--sp-2);
|
|
}
|
|
|
|
.dcard__title {
|
|
margin: 0;
|
|
font-size: var(--fs-card);
|
|
font-weight: 500;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
.dcard__meta {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
justify-content: space-between;
|
|
gap: var(--sp-2);
|
|
}
|
|
|
|
.dcard__meta .ring-badge {
|
|
margin-inline-start: auto;
|
|
}
|
|
|
|
/* =========================================================
|
|
Open Top Bus Tours (promo + 2x2 grid)
|
|
========================================================= */
|
|
.bus {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
|
|
gap: var(--gap);
|
|
align-items: start;
|
|
}
|
|
|
|
.bus__grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: var(--gap);
|
|
}
|
|
|
|
.promo {
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
aspect-ratio: 416 / 526;
|
|
padding: clamp(1.25rem, 0.6rem + 2vw, 2.5rem);
|
|
border-radius: var(--r-card);
|
|
background: var(--c-teal-05);
|
|
overflow: hidden;
|
|
isolation: isolate;
|
|
}
|
|
|
|
.promo__route {
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: -1;
|
|
width: 100%;
|
|
height: 100%;
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.promo__head {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
gap: var(--sp-3);
|
|
}
|
|
|
|
.promo__title {
|
|
margin: 0;
|
|
font-size: var(--fs-h2);
|
|
font-weight: 800;
|
|
line-height: 1.1;
|
|
letter-spacing: -0.03em;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.promo__chip {
|
|
align-self: flex-start;
|
|
margin-top: calc(var(--sp-1) * -1);
|
|
transform: rotate(-6deg);
|
|
}
|
|
|
|
.promo__bus {
|
|
position: relative;
|
|
/* basis 0 so the coach takes only the space the title and note leave over */
|
|
flex: 1 1 0;
|
|
display: grid;
|
|
place-items: center;
|
|
min-height: 0;
|
|
margin-inline: clamp(-2rem, -0.5rem - 3vw, -0.75rem);
|
|
/* padding-block: var(--sp-3) var(--sp-4); */
|
|
padding-left: 2.5rem;
|
|
}
|
|
|
|
.promo__bus img {
|
|
width: 100%;
|
|
height: 100%;
|
|
/* grid items default to min-height:auto, which would keep the intrinsic height */
|
|
min-height: 0;
|
|
object-fit: contain;
|
|
object-position: left;
|
|
/* Figma tints the blue coach towards the teal brand colour */
|
|
filter: hue-rotate(-32deg) saturate(1.15) drop-shadow(0 1rem 1.5rem rgba(0, 0, 0, 0.18));
|
|
}
|
|
|
|
.promo__note {
|
|
margin: 0;
|
|
margin-inline-start: auto;
|
|
max-width: 15rem;
|
|
font-weight: 500;
|
|
color: var(--c-teal);
|
|
}
|
|
|
|
/* =========================================================
|
|
Wide tour card
|
|
========================================================= */
|
|
.tcard {
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
aspect-ratio: 416 / 251;
|
|
padding: clamp(0.875rem, 0.5rem + 1vw, 1.25rem);
|
|
border-radius: var(--r-card);
|
|
color: var(--c-white);
|
|
overflow: hidden;
|
|
isolation: isolate;
|
|
transition: transform 0.3s var(--ease);
|
|
}
|
|
|
|
.tcard:hover {
|
|
transform: translateY(-0.25rem);
|
|
}
|
|
|
|
.tcard__img {
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: -2;
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: cover;
|
|
}
|
|
|
|
.tcard::after {
|
|
content: "";
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: -1;
|
|
background: linear-gradient(180deg, rgba(0, 0, 0, 0.45) 0%, rgba(0, 0, 0, 0.1) 45%, rgba(0, 0, 0, 0.6) 100%);
|
|
}
|
|
|
|
.tcard.is-active,
|
|
.tcard:hover,
|
|
.tcard:focus-within {
|
|
box-shadow: 0 0.75rem 3.75rem 0 rgba(44, 175, 194, 0.5);
|
|
}
|
|
|
|
.tcard.is-active::after,
|
|
.tcard:hover::after,
|
|
.tcard:focus-within::after {
|
|
background:
|
|
radial-gradient(53.59% 137.34% at 50% 46.41%, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.4) 100%),
|
|
linear-gradient(0deg, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)),
|
|
linear-gradient(180deg, rgba(44, 175, 194, 0) 37.33%, #2cafc2 84.53%);
|
|
}
|
|
|
|
.bus__grid:hover .tcard.is-active:not(:hover):not(:focus-within),
|
|
.bus__grid:focus-within .tcard.is-active:not(:hover):not(:focus-within) {
|
|
box-shadow: none;
|
|
}
|
|
|
|
.bus__grid:hover .tcard.is-active:not(:hover):not(:focus-within)::after,
|
|
.bus__grid:focus-within .tcard.is-active:not(:hover):not(:focus-within)::after {
|
|
background: linear-gradient(180deg, rgba(0, 0, 0, 0.45) 0%, rgba(0, 0, 0, 0.1) 45%, rgba(0, 0, 0, 0.6) 100%);
|
|
}
|
|
|
|
.tcard__k {
|
|
font-size: 0.75rem;
|
|
font-weight: 500;
|
|
opacity: 0.9;
|
|
}
|
|
|
|
.tcard__title {
|
|
max-width: 14ch;
|
|
margin: 0;
|
|
font-size: var(--fs-card);
|
|
font-weight: 500;
|
|
line-height: 1.15;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
.tcard__bottom {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
justify-content: space-between;
|
|
gap: var(--sp-2);
|
|
}
|
|
|
|
/* =========================================================
|
|
About
|
|
========================================================= */
|
|
.about {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 0.85fr) minmax(0, 1fr);
|
|
align-items: center;
|
|
gap: clamp(1.5rem, 0.5rem + 3vw, 3rem);
|
|
}
|
|
|
|
.about__art {
|
|
position: relative;
|
|
display: grid;
|
|
place-items: center;
|
|
aspect-ratio: 4 / 3;
|
|
color: var(--c-teal);
|
|
}
|
|
|
|
.about__glow {
|
|
display: none;
|
|
}
|
|
|
|
/* straight speed-trail band running along the coach's axis */
|
|
.about__trail {
|
|
position: absolute;
|
|
left: -34%;
|
|
right: -34%;
|
|
top: 42%;
|
|
height: 28%;
|
|
background: linear-gradient(90deg,
|
|
rgba(44, 175, 194, 0) 0%,
|
|
rgba(44, 175, 194, 0.16) 22%,
|
|
rgba(44, 175, 194, 0.2) 55%,
|
|
rgba(44, 175, 194, 0) 100%);
|
|
/* small blur only — the band keeps its straight parallel edges */
|
|
filter: blur(2px);
|
|
/* 25deg == the roof ridge angle, measured off the artwork itself */
|
|
transform: rotate(32deg);
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* the arcs sit in front of the bus, as in the reference */
|
|
.about__arcs {
|
|
position: absolute;
|
|
z-index: 2;
|
|
inset: -12% 12% 2%;
|
|
width: auto;
|
|
height: 98%;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.about__bus {
|
|
position: relative;
|
|
z-index: 1;
|
|
display: grid;
|
|
place-items: center;
|
|
width: 92%;
|
|
}
|
|
|
|
.about__bus img {
|
|
width: 100%;
|
|
height: auto;
|
|
object-fit: contain;
|
|
filter: drop-shadow(0 1.5rem 2.5rem rgba(0, 0, 0, 0.25));
|
|
}
|
|
|
|
.about__body {
|
|
display: grid;
|
|
gap: clamp(1.25rem, 0.8rem + 1.4vw, 1.8125rem);
|
|
}
|
|
|
|
.about__head {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: var(--sp-3);
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.about__title {
|
|
position: relative;
|
|
margin: 0;
|
|
padding-right: 1.5rem;
|
|
font-size: var(--fs-h2);
|
|
font-weight: 800;
|
|
letter-spacing: -0.03em;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.about__chip {
|
|
position: absolute;
|
|
right: 0;
|
|
bottom: -0.75rem;
|
|
transform: rotate(-6deg);
|
|
}
|
|
|
|
.about__text {
|
|
margin: 0;
|
|
opacity: 0.7;
|
|
font-weight: 500;
|
|
text-align: justify;
|
|
}
|
|
|
|
.stats {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: var(--sp-4);
|
|
}
|
|
|
|
.stat {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
gap: 0.75rem;
|
|
}
|
|
|
|
.stat__num {
|
|
margin: 0;
|
|
font-size: var(--fs-h2);
|
|
font-weight: 800;
|
|
line-height: 1;
|
|
letter-spacing: -0.03em;
|
|
}
|
|
|
|
.stat__num span {
|
|
color: var(--c-teal);
|
|
}
|
|
|
|
.stat__label {
|
|
opacity: 0.5;
|
|
font-weight: 500;
|
|
}
|
|
|
|
/* =========================================================
|
|
Testimonials marquee
|
|
========================================================= */
|
|
.testimonials__head {
|
|
display: grid;
|
|
justify-items: center;
|
|
gap: var(--sp-3);
|
|
margin-bottom: var(--sp-6);
|
|
text-align: center;
|
|
}
|
|
|
|
.testimonials__title {
|
|
margin: 0;
|
|
font-size: var(--fs-h2);
|
|
font-weight: 800;
|
|
letter-spacing: -0.03em;
|
|
}
|
|
|
|
.testimonials__lead {
|
|
max-width: 42ch;
|
|
margin: 0;
|
|
opacity: 0.5;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.marquee {
|
|
position: relative;
|
|
overflow: hidden;
|
|
-webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
|
|
mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
|
|
}
|
|
|
|
.marquee__route {
|
|
position: absolute;
|
|
inset: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
opacity: 0.6;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.marquee__track {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--gap);
|
|
width: max-content;
|
|
padding-block: var(--sp-3);
|
|
animation: marquee 60s linear infinite;
|
|
}
|
|
|
|
.marquee:hover .marquee__track,
|
|
.marquee:focus-within .marquee__track {
|
|
animation-play-state: paused;
|
|
}
|
|
|
|
@keyframes marquee {
|
|
to {
|
|
transform: translateX(calc(-50% - var(--gap) / 2));
|
|
}
|
|
}
|
|
|
|
.quote {
|
|
display: grid;
|
|
gap: var(--sp-3);
|
|
flex: none;
|
|
width: clamp(17rem, 14rem + 12vw, 26rem);
|
|
padding: var(--sp-4) var(--sp-5);
|
|
border-radius: var(--r-card);
|
|
background: var(--c-teal-05);
|
|
-webkit-backdrop-filter: blur(20px);
|
|
backdrop-filter: blur(20px);
|
|
}
|
|
|
|
.quote--lg {
|
|
width: clamp(19rem, 15rem + 16vw, 32.875rem);
|
|
}
|
|
|
|
.quote--sm {
|
|
width: clamp(15rem, 12rem + 9vw, 21.375rem);
|
|
}
|
|
|
|
.quote__head {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.75rem;
|
|
}
|
|
|
|
.quote__avatar {
|
|
aspect-ratio: 1;
|
|
width: 3rem;
|
|
border-radius: 50%;
|
|
object-fit: cover;
|
|
}
|
|
|
|
.quote__head b {
|
|
display: block;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.quote__head i {
|
|
font-style: normal;
|
|
font-weight: 500;
|
|
color: var(--c-teal);
|
|
}
|
|
|
|
.quote blockquote {
|
|
opacity: 0.5;
|
|
font-weight: 500;
|
|
text-align: justify;
|
|
}
|
|
|
|
/* =========================================================
|
|
Article card
|
|
========================================================= */
|
|
.acard {
|
|
display: flex;
|
|
flex-direction: column;
|
|
border-radius: var(--r-card);
|
|
background: var(--c-white);
|
|
transition: transform 0.3s var(--ease);
|
|
}
|
|
|
|
.acard:hover {
|
|
transform: translateY(-0.25rem);
|
|
}
|
|
|
|
.acard.is-active {
|
|
background: var(--c-teal-05);
|
|
}
|
|
|
|
.acard__media {
|
|
position: relative;
|
|
aspect-ratio: 416 / 251;
|
|
border-radius: var(--r-card);
|
|
color: var(--c-white);
|
|
overflow: hidden;
|
|
isolation: isolate;
|
|
}
|
|
|
|
.acard__img {
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: -2;
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: cover;
|
|
}
|
|
|
|
.acard__media::after {
|
|
content: "";
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: -1;
|
|
background: linear-gradient(180deg, rgba(0, 0, 0, 0.35) 0%, rgba(0, 0, 0, 0.05) 40%, rgba(0, 0, 0, 0.65) 100%);
|
|
}
|
|
|
|
.acard.is-active .acard__media::after,
|
|
.acard:hover .acard__media::after,
|
|
.acard:focus-within .acard__media::after {
|
|
background:
|
|
radial-gradient(53.59% 137.34% at 50% 46.41%, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.4) 100%),
|
|
linear-gradient(0deg, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)),
|
|
linear-gradient(180deg, rgba(44, 175, 194, 0) 37.33%, #2cafc2 84.53%);
|
|
}
|
|
|
|
.acard.is-active .acard__media,
|
|
.acard:hover .acard__media,
|
|
.acard:focus-within .acard__media {
|
|
box-shadow: 0 0.75rem 3.75rem 0 rgba(44, 175, 194, 0.5);
|
|
}
|
|
|
|
.rail:hover .acard.is-active:not(:hover):not(:focus-within) {
|
|
background: var(--c-white);
|
|
}
|
|
|
|
.rail:hover .acard.is-active:not(:hover):not(:focus-within) .acard__media {
|
|
box-shadow: none;
|
|
}
|
|
|
|
.rail:hover .acard.is-active:not(:hover):not(:focus-within) .acard__media::after {
|
|
background: linear-gradient(180deg, rgba(0, 0, 0, 0.35) 0%, rgba(0, 0, 0, 0.05) 40%, rgba(0, 0, 0, 0.65) 100%);
|
|
}
|
|
|
|
.acard__time {
|
|
position: absolute;
|
|
left: var(--sp-2);
|
|
top: var(--sp-2);
|
|
}
|
|
|
|
.acard__overlay {
|
|
position: absolute;
|
|
inset: auto 0 0;
|
|
display: flex;
|
|
align-items: flex-end;
|
|
justify-content: space-between;
|
|
gap: var(--sp-2);
|
|
padding: clamp(0.875rem, 0.5rem + 1vw, 1.5rem);
|
|
}
|
|
|
|
.acard__title {
|
|
max-width: 17ch;
|
|
margin: 0;
|
|
font-size: var(--fs-card);
|
|
font-weight: 500;
|
|
line-height: 1.15;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
.acard__excerpt {
|
|
margin: 0;
|
|
padding: var(--sp-4) var(--sp-4) var(--sp-5);
|
|
opacity: 0.7;
|
|
font-weight: 500;
|
|
text-align: justify;
|
|
}
|
|
|
|
.acard.is-active .acard__excerpt,
|
|
.acard:hover .acard__excerpt,
|
|
.acard:focus-within .acard__excerpt {
|
|
opacity: 1;
|
|
color: var(--c-teal);
|
|
}
|
|
|
|
.acard.is-active,
|
|
.acard:hover,
|
|
.acard:focus-within {
|
|
background: var(--c-teal-05);
|
|
}
|
|
|
|
.rail:hover .acard.is-active:not(:hover):not(:focus-within) .acard__excerpt {
|
|
opacity: 0.7;
|
|
color: inherit;
|
|
}
|
|
|
|
/* =========================================================
|
|
FAQ
|
|
========================================================= */
|
|
.faq {
|
|
position: relative;
|
|
margin: var(--page-inset);
|
|
padding-block: var(--sp-6);
|
|
border-radius: var(--r-xl);
|
|
background: var(--c-teal-05);
|
|
overflow: hidden;
|
|
isolation: isolate;
|
|
}
|
|
|
|
.faq__watermark {
|
|
position: absolute;
|
|
left: clamp(1rem, -1rem + 6vw, 4rem);
|
|
bottom: clamp(-2rem, -6vw, -1rem);
|
|
z-index: -1;
|
|
font-size: clamp(6rem, 2rem + 16vw, 15rem);
|
|
font-weight: 800;
|
|
letter-spacing: -0.04em;
|
|
line-height: 1;
|
|
color: transparent;
|
|
-webkit-text-stroke: 1px rgba(44, 175, 194, 0.35);
|
|
pointer-events: none;
|
|
user-select: none;
|
|
}
|
|
|
|
.faq__inner {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 0.55fr) minmax(0, 1fr);
|
|
gap: clamp(2rem, 0.5rem + 6vw, 8.375rem);
|
|
align-items: start;
|
|
}
|
|
|
|
.faq__intro {
|
|
display: grid;
|
|
gap: var(--sp-4);
|
|
}
|
|
|
|
.faq__title {
|
|
margin: 0;
|
|
font-size: var(--fs-h2);
|
|
font-weight: 800;
|
|
letter-spacing: -0.03em;
|
|
}
|
|
|
|
.faq__lead {
|
|
margin: 0;
|
|
opacity: 0.7;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.accordion {
|
|
display: grid;
|
|
gap: var(--sp-4);
|
|
}
|
|
|
|
.acc+.acc {
|
|
border-top: 1px solid var(--c-line);
|
|
padding-top: var(--sp-4);
|
|
}
|
|
|
|
.acc h3 {
|
|
margin: 0;
|
|
font-size: inherit;
|
|
font-weight: inherit;
|
|
}
|
|
|
|
.acc__q {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: var(--sp-3);
|
|
width: 100%;
|
|
padding: 0;
|
|
font-weight: 500;
|
|
text-align: left;
|
|
transition: color 0.2s var(--ease);
|
|
}
|
|
|
|
.acc__q .icon {
|
|
opacity: 0.3;
|
|
}
|
|
|
|
.acc__minus {
|
|
display: none;
|
|
}
|
|
|
|
.acc__q[aria-expanded="true"] {
|
|
color: var(--c-teal);
|
|
font-weight: 700;
|
|
}
|
|
|
|
.acc__q[aria-expanded="true"] .icon {
|
|
opacity: 1;
|
|
}
|
|
|
|
.acc__q[aria-expanded="true"] .acc__plus {
|
|
display: none;
|
|
}
|
|
|
|
.acc__q[aria-expanded="true"] .acc__minus {
|
|
display: block;
|
|
}
|
|
|
|
.acc__a {
|
|
display: grid;
|
|
grid-template-rows: 0fr;
|
|
transition: grid-template-rows 0.3s var(--ease);
|
|
}
|
|
|
|
.acc__q[aria-expanded="true"]+.acc__a {
|
|
grid-template-rows: 1fr;
|
|
}
|
|
|
|
.acc__a>* {
|
|
overflow: hidden;
|
|
}
|
|
|
|
.acc__a p {
|
|
margin: 0;
|
|
padding-top: var(--sp-4);
|
|
opacity: 0.7;
|
|
font-weight: 500;
|
|
text-align: justify;
|
|
}
|
|
|
|
/* =========================================================
|
|
Footer
|
|
========================================================= */
|
|
.footer {
|
|
position: relative;
|
|
margin: calc(var(--sp-6) + var(--page-inset)) var(--page-inset) var(--page-inset);
|
|
padding-block: var(--sp-6) 0;
|
|
border-radius: var(--r-xl);
|
|
color: var(--c-white);
|
|
background: var(--c-black);
|
|
}
|
|
|
|
.footer__inner {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
|
|
gap: clamp(2rem, 0.5rem + 5vw, 6rem);
|
|
padding-bottom: var(--sp-6);
|
|
}
|
|
|
|
.footer__logo .logo {
|
|
width: clamp(5rem, 4rem + 2.5vw, 7.125rem);
|
|
height: auto;
|
|
}
|
|
|
|
.footer__brand {
|
|
display: grid;
|
|
gap: var(--sp-4);
|
|
align-content: start;
|
|
}
|
|
|
|
.footer__about {
|
|
margin: 0;
|
|
opacity: 0.5;
|
|
font-weight: 500;
|
|
text-align: justify;
|
|
}
|
|
|
|
.footer__cols {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
gap: var(--sp-4);
|
|
justify-items: start;
|
|
}
|
|
|
|
.footer__cols ul {
|
|
display: grid;
|
|
gap: 0.75rem;
|
|
}
|
|
|
|
.footer__ct {
|
|
margin: 0 0 var(--sp-3);
|
|
font-size: 1rem;
|
|
font-weight: 700;
|
|
color: var(--c-teal);
|
|
}
|
|
|
|
.footer__cols a {
|
|
opacity: 0.5;
|
|
font-weight: 500;
|
|
transition: opacity 0.2s var(--ease);
|
|
}
|
|
|
|
.footer__cols a:hover {
|
|
opacity: 1;
|
|
}
|
|
|
|
.footer__bar {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1.2fr) minmax(0, 1.4fr) minmax(0, 1fr);
|
|
align-items: center;
|
|
gap: var(--sp-4);
|
|
padding-block: var(--sp-4);
|
|
border-top: 1px solid rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
.footer__copy {
|
|
margin: 0;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.socials {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: var(--sp-5);
|
|
}
|
|
|
|
/* dashed rules either side of the social icons, as in the design */
|
|
.socials::before,
|
|
.socials::after {
|
|
content: "";
|
|
flex: 1 1 clamp(2rem, 8vw, 11rem);
|
|
border-top: 1px dashed rgba(255, 255, 255, 0.3);
|
|
}
|
|
|
|
.socials::before {
|
|
margin-inline-end: var(--sp-4);
|
|
}
|
|
|
|
.socials::after {
|
|
margin-inline-start: var(--sp-4);
|
|
}
|
|
|
|
.socials li {
|
|
flex: none;
|
|
}
|
|
|
|
.socials a {
|
|
display: grid;
|
|
place-items: center;
|
|
transition: opacity 0.2s var(--ease);
|
|
}
|
|
|
|
.socials a:hover {
|
|
opacity: 0.7;
|
|
}
|
|
|
|
.support {
|
|
position: absolute;
|
|
right: clamp(1.5rem, 0.5rem + 3vw, 4rem);
|
|
bottom: 0;
|
|
z-index: 2;
|
|
display: grid;
|
|
place-items: center;
|
|
color: var(--c-white);
|
|
}
|
|
|
|
.support__ring {
|
|
position: absolute;
|
|
aspect-ratio: 1;
|
|
scale: 140%;
|
|
opacity: 0.5;
|
|
top: -1.5rem;
|
|
}
|
|
|
|
.support__tab {
|
|
display: grid;
|
|
place-items: center;
|
|
padding: var(--sp-4);
|
|
padding-bottom: clamp(2rem, 1rem + 3vw, 3rem);
|
|
border-radius: var(--r-pill) var(--r-pill) 0 0;
|
|
background: linear-gradient(180deg, rgba(44, 175, 194, 0.99) 0%, var(--c-teal-20) 100%);
|
|
box-shadow: 0 0.75rem 8.25rem var(--c-teal);
|
|
-webkit-backdrop-filter: blur(4px);
|
|
backdrop-filter: blur(4px);
|
|
transition: transform 0.2s var(--ease);
|
|
}
|
|
|
|
.support:hover .support__tab {
|
|
transform: translateY(-0.25rem);
|
|
}
|
|
|
|
/* =========================================================
|
|
Responsive
|
|
========================================================= */
|
|
@media (max-width: 78rem) {
|
|
.rail--dest>* {
|
|
flex: 0 0 calc((100% - 3 * var(--gap)) / 4);
|
|
}
|
|
}
|
|
|
|
@media (max-width: 68.75rem) {
|
|
.booking__row {
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.field {
|
|
flex: 1 1 14rem;
|
|
}
|
|
|
|
.booking__submit {
|
|
flex: 1 1 100%;
|
|
}
|
|
|
|
.sec-head {
|
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
}
|
|
|
|
.sec-head__lead {
|
|
grid-column: 1 / -1;
|
|
grid-row: 2;
|
|
max-width: none;
|
|
}
|
|
|
|
.rail--dest>* {
|
|
flex: 0 0 calc((100% - 2 * var(--gap)) / 3);
|
|
}
|
|
|
|
.bus {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
}
|
|
|
|
.promo {
|
|
aspect-ratio: 16 / 9;
|
|
}
|
|
|
|
.about {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
}
|
|
|
|
.about__art {
|
|
order: 2;
|
|
aspect-ratio: 16 / 9;
|
|
}
|
|
|
|
.faq__inner {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
}
|
|
}
|
|
|
|
@media (max-width: 60rem) {
|
|
.burger {
|
|
display: inline-grid;
|
|
}
|
|
|
|
.header__cta {
|
|
display: none;
|
|
}
|
|
|
|
.nav {
|
|
position: absolute;
|
|
top: calc(100% + var(--sp-2));
|
|
right: var(--gutter);
|
|
left: var(--gutter);
|
|
padding: var(--sp-2);
|
|
border-radius: var(--r-card);
|
|
color: var(--c-black);
|
|
background: var(--c-white);
|
|
box-shadow: 0 1.5rem 3rem rgba(0, 0, 0, 0.22);
|
|
opacity: 0;
|
|
visibility: hidden;
|
|
transform: translateY(-0.5rem);
|
|
transition: opacity 0.25s var(--ease), transform 0.25s var(--ease), visibility 0.25s;
|
|
}
|
|
|
|
.nav.is-open {
|
|
opacity: 1;
|
|
visibility: visible;
|
|
transform: translateY(0);
|
|
}
|
|
|
|
.nav__list {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
gap: 0;
|
|
}
|
|
|
|
.nav__link {
|
|
width: 100%;
|
|
justify-content: space-between;
|
|
padding: var(--sp-2) var(--sp-3);
|
|
border-radius: var(--r-pill);
|
|
}
|
|
|
|
.nav__link:hover {
|
|
opacity: 1;
|
|
background: rgba(0, 0, 0, 0.05);
|
|
}
|
|
|
|
.nav__submenu {
|
|
position: static;
|
|
display: none;
|
|
padding: 0 0 var(--sp-1) var(--sp-3);
|
|
box-shadow: none;
|
|
opacity: 1;
|
|
visibility: visible;
|
|
transform: none;
|
|
}
|
|
|
|
.nav__item--has-menu:hover .nav__submenu {
|
|
display: none;
|
|
}
|
|
|
|
.nav__toggle[aria-expanded="true"]+.nav__submenu {
|
|
display: grid;
|
|
}
|
|
|
|
.nav__mobile-cta {
|
|
display: block;
|
|
margin-top: var(--sp-1);
|
|
}
|
|
|
|
.nav__cta {
|
|
width: 100%;
|
|
}
|
|
|
|
.rail--art>* {
|
|
flex: 0 0 calc((100% - var(--gap)) / 2);
|
|
}
|
|
|
|
.footer__inner {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
}
|
|
}
|
|
|
|
@media (max-width: 48rem) {
|
|
.rail--dest>* {
|
|
flex: 0 0 calc((100% - var(--gap)) / 2);
|
|
}
|
|
|
|
.bus__grid {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
}
|
|
|
|
.stats {
|
|
gap: var(--sp-3);
|
|
}
|
|
|
|
.footer__bar {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
justify-items: start;
|
|
}
|
|
|
|
.socials::before,
|
|
.socials::after {
|
|
display: none;
|
|
}
|
|
|
|
.support {
|
|
right: var(--gutter);
|
|
}
|
|
}
|
|
|
|
@media (max-width: 40rem) {
|
|
.hero {
|
|
min-height: clamp(30rem, 84svh, 44rem);
|
|
}
|
|
|
|
.booking {
|
|
padding: var(--sp-2);
|
|
}
|
|
|
|
.booking__row {
|
|
gap: var(--sp-2);
|
|
}
|
|
|
|
.field {
|
|
flex: 1 1 100%;
|
|
}
|
|
|
|
.sec-head {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
gap: var(--sp-3);
|
|
}
|
|
|
|
.sec-head__lead {
|
|
grid-row: auto;
|
|
}
|
|
|
|
.sec-head__actions {
|
|
flex-direction: row;
|
|
width: 100%;
|
|
}
|
|
|
|
.sec-head__actions .btn--wide {
|
|
width: auto;
|
|
flex: 1 1 auto;
|
|
}
|
|
|
|
.rail--dest>* {
|
|
flex: 0 0 min(72%, 15rem);
|
|
}
|
|
|
|
.rail--art>* {
|
|
flex: 0 0 min(85%, 22rem);
|
|
}
|
|
|
|
.promo {
|
|
aspect-ratio: auto;
|
|
gap: var(--sp-4);
|
|
}
|
|
|
|
.promo__note {
|
|
max-width: none;
|
|
margin-inline-start: 0;
|
|
}
|
|
|
|
.stats {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
}
|
|
|
|
.support {
|
|
display: none;
|
|
}
|
|
|
|
.footer__cols {
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: var(--sp-5) var(--sp-4);
|
|
}
|
|
|
|
/* justified text tears open on narrow columns */
|
|
.about__text,
|
|
.acard__excerpt,
|
|
.quote blockquote,
|
|
.acc__a p,
|
|
.footer__about {
|
|
text-align: left;
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
html {
|
|
scroll-behavior: auto;
|
|
}
|
|
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
animation-duration: 0.01ms !important;
|
|
animation-iteration-count: 1 !important;
|
|
transition-duration: 0.01ms !important;
|
|
}
|
|
|
|
.rail {
|
|
scroll-behavior: auto;
|
|
}
|
|
}
|