Files
TourWebsite/css/style.css
2026-09-09 11:18:34 +03:30

3097 lines
58 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-green: #34c759;
--c-red: #ff383c;
--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;
}
}
/* =========================================================
Tour archive — hero filter bar
========================================================= */
.hero--archive {
min-height: clamp(30rem, 78svh, 48rem);
}
/* "Explore Tours" is short enough to stay on one line at every size */
.hero--archive .hero__title {
max-width: none;
}
.filters {
order: 3;
width: 100%;
border-radius: var(--r-card);
background: var(--c-white);
box-shadow: 0 1.5rem 3.5rem rgba(0, 0, 0, 0.18);
}
.filters__row {
display: flex;
align-items: center;
gap: var(--sp-3);
padding: var(--sp-3);
}
.fsearch,
.fsel {
position: relative;
display: flex;
flex: 1 1 0;
align-items: center;
min-width: 0;
min-height: var(--control-h);
border-radius: var(--r-pill);
transition: border-color 0.2s var(--ease);
}
/* the search field carries the longest placeholder, so it takes a little more room */
.fsearch {
flex-grow: 1.3;
border: 1px solid var(--c-white);
background: rgba(0, 0, 0, 0.05);
}
.fsel {
border: 1px solid var(--c-line);
background: var(--c-white);
}
.fsel:hover {
border-color: rgba(0, 0, 0, 0.3);
}
.fsearch__icon,
.fsel__icon {
position: absolute;
left: var(--sp-3);
pointer-events: none;
color: var(--c-black);
}
.fsel__chevron {
position: absolute;
right: var(--sp-3);
pointer-events: none;
color: var(--c-black);
}
.fsearch__input,
.fsel__input {
width: 100%;
min-width: 0;
min-height: var(--control-h);
padding: 0 calc(var(--sp-3) + 1.5rem);
border: 0;
border-radius: inherit;
font: inherit;
font-weight: 500;
color: var(--c-black);
background: transparent;
appearance: none;
-webkit-appearance: none;
text-overflow: ellipsis;
}
.fsearch__input {
padding-inline: calc(var(--sp-3) + 1.375rem) var(--sp-2);
font-size: 0.875rem;
}
.fsearch__input::placeholder {
color: var(--c-black);
opacity: 0.5;
}
.fsearch__input::-webkit-search-cancel-button,
.fsearch__input::-webkit-search-decoration {
-webkit-appearance: none;
}
/* the sort dropdown carries its label outside the pill, so it needs no lead icon */
.fsel--bare .fsel__input {
padding-left: var(--sp-3);
}
.filters__apply {
flex: none;
}
.filters__bar {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: var(--sp-3) var(--sp-4);
padding: var(--sp-3) var(--sp-3) var(--sp-3) var(--sp-4);
border-top: 1px solid var(--c-line);
}
.filters__checks {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--sp-2) 2.5rem;
}
.check {
display: inline-flex;
align-items: center;
gap: var(--sp-1);
cursor: pointer;
}
.check__input {
position: absolute;
width: 1px;
height: 1px;
opacity: 0;
pointer-events: none;
}
.check__box {
display: grid;
flex: none;
place-items: center;
width: 1rem;
height: 1rem;
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 0.25rem;
color: transparent;
background: var(--c-white);
transition: color 0.2s var(--ease), background-color 0.2s var(--ease), border-color 0.2s var(--ease);
}
.check:hover .check__box {
border-color: rgba(0, 0, 0, 0.45);
}
.check__input:checked+.check__box {
color: var(--c-white);
border-color: var(--c-black);
background: var(--c-black);
}
.check__input:focus-visible+.check__box {
outline: 2px solid var(--c-teal);
outline-offset: 2px;
}
.check__text {
font-size: 1rem;
font-weight: 500;
opacity: 0.7;
transition: opacity 0.2s var(--ease);
}
.check__input:checked~.check__text {
opacity: 1;
}
.filters__sort {
display: flex;
align-items: center;
gap: var(--sp-2);
}
.filters__sort-label {
display: inline-flex;
align-items: center;
gap: var(--sp-1);
font-size: 1rem;
font-weight: 500;
white-space: nowrap;
}
.filters__sort-label label {
cursor: pointer;
}
.filters__sort .fsel {
flex: none;
width: 8.8125rem;
}
/* =========================================================
Tour archive — result grid
========================================================= */
/* the script shows and hides cards, pages and buttons with the hidden
attribute, which the flex and grid display values would otherwise win against */
[hidden] {
display: none !important;
}
.results {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: var(--sp-2) var(--sp-3);
margin-block-end: var(--sp-4);
}
.results__count {
margin: 0;
font-size: 1rem;
font-weight: 500;
opacity: 0.7;
}
.results__count b {
font-weight: 800;
}
.results__reset {
flex: none;
}
.tgrid__empty {
margin: 0;
padding-block: var(--sp-5);
font-size: 1.125rem;
font-weight: 500;
text-align: center;
opacity: 0.7;
}
/* a button that reads as part of the sentence around it */
.linkbtn {
padding: 0;
border: 0;
font: inherit;
color: var(--c-teal);
background: none;
text-decoration: underline;
cursor: pointer;
}
.tgrid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 2.5rem var(--gap);
margin: 0;
padding: 0;
list-style: none;
}
.titem {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--sp-3);
}
/* landscape variant of the destination card used on the homepage rail */
.dcard--wide {
width: 100%;
aspect-ratio: 416 / 251;
}
/* the wider card gives the title and the key/value pairs more room to breathe */
.dcard--wide .dcard__body {
gap: var(--sp-3);
}
.dcard--wide .dcard__meta {
gap: var(--sp-4);
}
.titem__desc {
width: 88.5%;
margin: 0;
font-size: 1rem;
font-weight: 500;
line-height: 1.5;
text-align: justify;
opacity: 0.7;
transition: color 0.25s var(--ease), opacity 0.25s var(--ease);
}
.titem.is-active .titem__desc,
.titem:hover .titem__desc,
.titem:focus-within .titem__desc {
color: var(--c-teal);
opacity: 1;
}
/* hovering any card in the grid hands the highlight over to it */
.tgrid:hover .titem.is-active:not(:hover):not(:focus-within) .titem__desc,
.tgrid:focus-within .titem.is-active:not(:hover):not(:focus-within) .titem__desc {
color: inherit;
opacity: 0.7;
}
.tgrid:hover .dcard.is-active:not(:hover):not(:focus-within),
.tgrid:focus-within .dcard.is-active:not(:hover):not(:focus-within) {
box-shadow: none;
}
.tgrid:hover .dcard.is-active:not(:hover):not(:focus-within)::after,
.tgrid: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%);
}
.tgrid:hover .dcard.is-active:not(:hover):not(:focus-within) .ring-badge__dot,
.tgrid:focus-within .dcard.is-active:not(:hover):not(:focus-within) .ring-badge__dot {
color: var(--c-white);
background: var(--c-glass);
}
/* =========================================================
Tour archive — pagination
========================================================= */
.pager {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: var(--sp-1);
margin-block-start: var(--sp-6);
}
.pager__pages {
display: flex;
align-items: center;
gap: var(--sp-1);
}
.pager__num,
.pager__btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--sp-1);
min-height: var(--control-h);
padding: 0 var(--sp-3);
border: 0;
border-radius: var(--r-pill);
font: inherit;
font-weight: 500;
color: var(--c-black);
background: transparent;
cursor: pointer;
transition: color 0.2s var(--ease), background-color 0.2s var(--ease), border-color 0.2s var(--ease);
}
.pager__num {
min-width: var(--control-h);
padding: 0 var(--sp-1);
}
.pager__num:hover {
background: rgba(0, 0, 0, 0.05);
}
.pager__num.is-current {
color: var(--c-white);
background: var(--c-black);
}
.pager__btn {
border: 1px solid var(--c-line);
background: var(--c-white);
}
.pager__btn--icon {
min-width: 4.5rem;
}
.pager__btn:hover:not([disabled]) {
border-color: var(--c-black);
}
.pager__btn[disabled] {
opacity: 0.4;
cursor: not-allowed;
}
.pager__gap {
padding-inline: 0.25rem;
font-weight: 500;
opacity: 0.5;
}
/* =========================================================
Tour archive — responsive
========================================================= */
@media (max-width: 68.75rem) {
.filters__row {
flex-wrap: wrap;
}
.fsearch,
.fsel {
flex: 1 1 12rem;
}
.filters__apply {
flex: 1 1 100%;
}
.tgrid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 48rem) {
.filters__bar {
justify-content: flex-start;
}
.filters__checks {
gap: var(--sp-2) var(--sp-5);
}
}
@media (max-width: 40rem) {
.filters__row {
gap: var(--sp-2);
padding: var(--sp-2);
}
.fsearch,
.fsel {
flex: 1 1 100%;
}
.filters__bar {
padding: var(--sp-3);
}
.filters__sort {
width: 100%;
justify-content: space-between;
}
.tgrid {
grid-template-columns: minmax(0, 1fr);
}
.titem__desc {
width: 100%;
text-align: left;
}
.pager__btn--icon {
min-width: 0;
}
}
/* =========================================================
Tour details — hero
========================================================= */
.hero-tour {
position: relative;
display: grid;
align-items: end;
/* one scale drives the display word, the kicker and the figure, so the three
keep the proportions they have in the design at every width */
--word: clamp(3rem, 0.4rem + 9.5vw, 11.25rem);
min-height: clamp(26rem, 62svh, 38rem);
margin: var(--page-inset);
padding-block: calc(var(--header-h) + var(--sp-5)) clamp(0.75rem, 0.4rem + 1vw, 1.5rem);
border-radius: var(--r-xl);
isolation: isolate;
overflow: clip;
}
/* the sky photo is framed on its upper third so the grass at its foot stays out
of shot, and the wash over it carries the blue into the brand turquoise */
.hero-tour__photo {
position: absolute;
inset: 0;
z-index: -2;
width: 100%;
height: 100%;
border-radius: inherit;
object-fit: cover;
object-position: center 26%;
}
.hero-tour__sky {
position: absolute;
inset: 0;
z-index: -1;
border-radius: inherit;
background:
radial-gradient(70% 50% at 50% 100%, rgba(255, 255, 255, 0.3) 0%, rgba(255, 255, 255, 0) 70%),
linear-gradient(180deg, rgba(27, 147, 166, 0.82) 0%, rgba(44, 175, 194, 0.62) 45%, rgba(111, 208, 221, 0.78) 100%);
}
.hero-tour__inner {
display: flex;
flex-direction: column;
align-items: center;
}
/* the block is exactly as wide as the display word, so it can sit centred in
the hero while the breadcrumb and the kicker line up on the word's left edge */
.hero-tour__block {
display: flex;
position: absolute;
top: 112px;
flex-direction: column;
align-items: flex-start;
gap: var(--sp-2);
width: max-content;
max-width: 100%;
}
.crumbs__list {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--sp-1);
margin: 0;
padding: 0;
list-style: none;
font-size: 0.75rem;
font-weight: 500;
}
.crumbs__list li+li::before {
content: "/";
margin-inline-end: var(--sp-1);
opacity: 0.5;
}
.crumbs__list a {
opacity: 0.5;
transition: opacity 0.2s var(--ease);
}
.crumbs__list a:hover {
opacity: 1;
}
.hero-tour__kicker {
margin: 0;
font-size: max(1.25rem, calc(var(--word) * 0.222));
font-weight: 500;
letter-spacing: -0.01em;
}
/* The figure overlaps the word, so the stage carries the display size and both
children are measured in em against it - the offsets are the Figma ones
(word at x487/y193 at 180px, figure at x756/y58, 263x447) expressed as ratios,
which keeps the composition identical at every width. */
.hero-tour__stage {
position: relative;
align-self: stretch;
font-size: var(--word);
isolation: isolate;
}
.hero-tour__word {
margin: 0;
font-size: 1em;
font-weight: 500;
line-height: 0.95;
letter-spacing: -0.02em;
color: var(--c-white);
}
.hero-tour__figure {
position: absolute;
left: 2em;
top: -0.5em;
z-index: 1;
width: auto;
height: 2.48em;
object-fit: contain;
scale: 1.2;
}
/* =========================================================
Tour details — layout
========================================================= */
.tour__layout {
display: grid;
grid-template-columns: minmax(0, 1fr) 26rem;
align-items: start;
gap: clamp(1.5rem, 1rem + 1vw, 2rem);
}
.tour__main {
display: flex;
flex-direction: column;
gap: var(--sp-5);
min-width: 0;
}
.tour__block {
display: flex;
flex-direction: column;
gap: var(--sp-1);
}
.tour__ct {
margin: 0;
font-size: 1rem;
font-weight: 700;
}
.tour__text {
margin: 0;
font-size: 1rem;
font-weight: 500;
line-height: 1.6;
text-align: justify;
opacity: 0.7;
}
.tour__text+.tour__text {
margin-block-start: var(--sp-3);
}
/* --- title row --- */
.tour-head {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: var(--sp-3) var(--sp-4);
}
.tour-head__title {
margin: 0;
font-size: clamp(1.75rem, 1.2rem + 2.2vw, 2.5rem);
font-weight: 500;
letter-spacing: -0.01em;
}
.tmeta {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--sp-4);
font-size: 1rem;
font-weight: 500;
}
.tmeta__item {
display: inline-flex;
align-items: center;
gap: var(--sp-1);
}
.tmeta__item b {
font-weight: 500;
}
.tmeta__item i {
font-size: 0.75rem;
font-style: normal;
opacity: 0.3;
}
.tmeta__star {
color: var(--c-accent);
}
.tmeta__icon {
opacity: 0.5;
}
.tmeta__rule {
width: 1px;
height: 1.5rem;
background: var(--c-line);
}
/* --- the four facts under the title --- */
.facts {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: var(--sp-1);
margin: 0;
padding: 0;
list-style: none;
}
.fact,
.note {
display: flex;
align-items: center;
gap: var(--sp-2);
min-width: 0;
border-radius: var(--r-card);
background: var(--c-teal-05);
}
.fact {
padding: var(--sp-4) var(--sp-3);
}
.fact__icon,
.note__icon {
flex: none;
color: var(--c-teal);
}
.fact__text {
display: flex;
flex-direction: column;
min-width: 0;
}
.fact__k {
font-size: 0.75rem;
font-weight: 500;
color: var(--c-teal);
}
.fact__v {
font-size: 1rem;
font-weight: 500;
}
/* --- gallery --- */
.gallery {
display: grid;
grid-template-columns: 350fr 245fr 245fr;
gap: var(--sp-3);
}
.gallery img {
width: 100%;
height: 100%;
aspect-ratio: 245 / 194;
border-radius: var(--r-xl);
object-fit: cover;
}
.gallery__hero {
grid-row: span 2;
aspect-ratio: auto;
border-radius: var(--r-card);
}
/* --- included / not included --- */
.lists {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--sp-4) clamp(1.5rem, 1rem + 1.5vw, 1.6875rem);
}
.ilist {
display: flex;
flex-direction: column;
gap: var(--sp-3);
}
.ilist__items {
display: flex;
flex-direction: column;
gap: var(--sp-3);
margin: 0;
padding: 0;
list-style: none;
}
.ilist__items li {
display: flex;
align-items: center;
gap: var(--sp-3);
}
.ilist__items p {
margin: 0;
font-size: 1rem;
font-weight: 500;
line-height: 1.5;
text-align: justify;
opacity: 0.7;
}
.tick {
display: grid;
flex: none;
place-items: center;
width: 1.5rem;
height: 1.5rem;
border-radius: var(--r-pill);
}
.tick--yes {
color: var(--c-green);
background: rgba(52, 199, 89, 0.1);
}
.tick--no {
color: var(--c-red);
background: rgba(255, 56, 60, 0.1);
}
/* --- good to know --- */
.notes {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: var(--sp-1);
margin: 0;
padding: 0;
list-style: none;
}
.note {
gap: var(--sp-2);
padding: var(--sp-4) var(--sp-3);
}
.note p {
margin: 0;
font-size: 1rem;
font-weight: 500;
line-height: 1.4;
}
/* --- the tinted key/value cards, shared by the policy row and the sidebar --- */
.statcard {
display: flex;
align-items: center;
gap: var(--sp-2);
padding: var(--sp-4);
border-radius: var(--r-card);
}
.statcard__icon {
flex: none;
}
.statcard__text {
display: flex;
flex-direction: column;
min-width: 0;
}
.statcard__k {
font-size: 0.75rem;
font-weight: 500;
}
.statcard__v {
font-size: 1rem;
font-weight: 500;
}
.statcard--yes {
background: rgba(52, 199, 89, 0.05);
}
.statcard--yes .statcard__icon,
.statcard--yes .statcard__k {
color: var(--c-green);
}
.statcard--no {
background: rgba(255, 56, 60, 0.05);
}
.statcard--no .statcard__icon,
.statcard--no .statcard__k {
color: var(--c-red);
}
.statcard--teal {
background: var(--c-teal-05);
}
.statcard--teal .statcard__icon,
.statcard--teal .statcard__k {
color: var(--c-teal);
}
.policy {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--sp-3);
margin-block-start: var(--sp-3);
}
/* =========================================================
Tour details — booking sidebar
========================================================= */
.tour__aside {
position: sticky;
top: calc(var(--header-h) + var(--sp-3));
}
.bookcard {
display: flex;
flex-direction: column;
gap: var(--sp-1);
padding: var(--sp-3);
border: 1px solid var(--c-line);
border-radius: var(--r-card);
background: var(--c-white);
}
.bookcard__title {
display: flex;
align-items: center;
gap: var(--sp-1);
margin: 0 0 var(--sp-1);
padding: var(--sp-1) var(--sp-1) 0;
font-size: 1rem;
font-weight: 500;
}
.bookcard__price {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: var(--sp-3);
padding: var(--sp-3);
border: 1px dashed var(--c-line);
border-radius: var(--r-card);
}
.price {
display: grid;
grid-template-areas:
"k k"
"v u";
align-items: baseline;
gap: 0 var(--sp-1);
margin: 0;
}
.price__k {
grid-area: k;
font-size: 0.75rem;
font-weight: 500;
opacity: 0.3;
}
.price__v {
grid-area: v;
font-size: 2rem;
font-weight: 500;
letter-spacing: -0.01em;
}
.price__unit {
grid-area: u;
font-size: 0.75rem;
font-weight: 500;
opacity: 0.3;
}
.bookcard__cta {
flex: none;
}
/* =========================================================
Tour details — responsive
========================================================= */
@media (max-width: 68.75rem) {
.tour__layout {
grid-template-columns: minmax(0, 1fr);
}
.tour__aside {
position: static;
order: -1;
}
.facts {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.notes {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 48rem) {
.gallery {
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-template-rows: auto;
aspect-ratio: auto;
}
.gallery img {
aspect-ratio: 4 / 3;
}
.gallery__hero {
grid-column: span 2;
grid-row: auto;
aspect-ratio: 16 / 9;
}
.lists {
grid-template-columns: minmax(0, 1fr);
}
}
@media (max-width: 40rem) {
.hero-tour {
min-height: clamp(24rem, 70svh, 34rem);
}
.facts,
.notes {
grid-template-columns: minmax(0, 1fr);
}
.policy {
grid-template-columns: minmax(0, 1fr);
}
.tour__text,
.ilist__items p {
text-align: left;
}
.bookcard__price {
justify-content: center;
}
.bookcard__cta {
width: 100%;
}
}