/* ==========================================================================
   alganomadstrevel.kg (Alga Nomads Travel) — design system
   --------------------------------------------------------------------------
   Calm, photo-first travel site in a compact rhythm. Warm off-white neutrals + deep night-blue primary + saffron
   accent (the trail-arrow of the logo). Fonts: Playfair Display (headings) / Manrope (body), loaded from index.html.
   Every page starts with a dark night-blue band (the home hero or PageHero) that runs behind the transparent fixed
   header; the header turns solid night-blue once the page is scrolled. Mobile-first from 320px; nothing may overflow
   horizontally. Component-specific rules live in *.razor.css and use the tokens declared here.

   Table of contents
     1. Tokens
     2. Base / reset
     3. Typography
     4. Layout: container, section, dark band (+ stars, ridge), grid, scroll row, stack, cluster, split
     5. Buttons
     6. Cards
     7. Badges, chips, segmented control
     8. Media helpers
     9. Hero & page hero
    10. Forms
    11. Stats
    12. Lists
    13. Misc: divider, reveal, skip link, stars, breadcrumbs, quote, links, avatar
    14. Utilities
    15. Blazor framework UI (error bar / error boundary)
    16. Reduced motion & print
   ========================================================================== */


/* ==========================================================================
   1. Tokens
   ========================================================================== */
:root {
  color-scheme: light;

  /* Colours. Every pair below is checked numerically (WCAG 2.x contrast ratio, sRGB luminance).
     Neutrals: warm off-white surfaces with a night-blue ink. --c-text on every light surface ≥ 13:1, --c-text-soft
     (paragraphs, facts) ≥ 8:1 and --c-text-muted (small meta) ≥ 5.0:1 on --c-bg, --c-surface, --c-surface-alt,
     --c-primary-100 and --c-accent-100. --c-heading (#152A46) ≥ 12:1 on every light surface. */
  --c-bg: #FAF7F2;
  --c-surface: #FFFFFF;
  --c-surface-alt: #F1EBE1;
  --c-border: #E3DBCD;
  --c-border-soft: #EDE6DA;         /* hairlines inside cards (price row of a tour card) */
  --c-text: #1A2130;
  --c-text-soft: #3B4352;
  --c-text-muted: #5B6271;
  --c-text-inverse: #FFFFFF;
  /* Headings use --c-heading: navy on light surfaces; dark containers (.band, .section--dark, .hero, .page-hero)
     set it to white, cards inside them set it back. */
  --c-heading: #152A46;
  /* Primary (deep night blue). White on --c-primary 11.5:1, on --c-primary-600 (hover) 8.6:1; --c-primary as
     text ≥ 9.4:1 on every light surface (badges on --c-primary-100: 9.4:1). --c-primary-700 is the label colour on
     the saffron button (6.6:1 on --c-accent-300, 8.4:1 on --c-accent-200) and the darkest ink. */
  --c-primary: #1E3A5F;
  --c-primary-600: #2B4D7A;
  --c-primary-700: #152A46;
  --c-primary-100: #E6EDF5;
  /* Night: the dark bands (heroes, CTA, mobile menu, scrolled header) and the footer. On --c-night (#13284A):
     white 14.6:1, --c-on-dark-muted 11.0:1, --c-on-dark-soft 8.5:1, saffron --c-accent-300 6.6:1. On --c-night-900
     (#0F1E33, footer): --c-on-dark-soft 9.7:1, saffron 7.6:1. */
  --c-night: #13284A;
  --c-night-900: #0F1E33;
  --c-on-dark: #FFFFFF;
  --c-on-dark-muted: #D9E2EE;       /* leads and paragraphs on the bands */
  --c-on-dark-soft: #B9C6D8;        /* breadcrumbs, footer text, small meta on dark */
  --c-on-dark-line: rgba(255, 255, 255, .12);
  --c-on-dark-border: rgba(255, 255, 255, .35);
  /* Accent (saffron sun). The bright brand saffron is --c-accent-300 (#E0A426): it is 2.1:1 on the light
     surfaces, so it is used on dark backgrounds and photos (5.2:1 on --c-primary, 6.6:1 on --c-night) and as the fill
     of the saffron button and badge with a --c-primary-700 label. --c-accent (deep saffron) is ≥ 3.0:1 on every
     light surface and 3.15:1 on --c-primary: large text, icons, borders and the focus ring. Small text on light
     backgrounds uses --c-accent-600 (≥ 4.8:1, white on it 5.8:1) and its hover --c-accent-700 (≥ 6.9:1). */
  --c-accent: #B57A0C;
  --c-accent-600: #8C5B06;
  --c-accent-700: #6E4704;
  --c-accent-300: #E0A426;          /* brand saffron: accent on dark backgrounds, saffron button fill */
  --c-accent-200: #EDBF5A;          /* saffron button hover */
  --c-accent-100: #FBF0D8;

  /* WhatsApp colours, deepened from the brand hue so white labels and
     icons pass WCAG AA (4.5:1): 5.4:1 (hover 7.1:1). The pure brand hue
     (#25D366 = 2.0:1 with white) is kept only for decoration, never behind text. */
  --c-whatsapp: #0E7A3E;
  --c-whatsapp-600: #0A6634;
  --c-whatsapp-brand: #25D366;
  --c-star: #F2AE22;
  --c-overlay: rgba(12, 22, 38, .55);

  /* Winter season accents (the winter tab of /tours, the winter tours block): a glacier blue-green, clearly apart
     from the night-blue primary. --c-winter-600 passes AA for small text on white (6.7:1) and on --c-winter-100
     (5.7:1); white text on it passes too (6.7:1). --c-winter-300 is for icons and borders only (6.6:1 on --c-primary). */
  --c-winter-100: #E2EFF4;
  --c-winter-300: #9DCCDC;
  --c-winter-600: #1D6380;
  --c-winter-700: #164D64;

  /* Type */
  --font-heading: 'Playfair Display', Georgia, serif;
  /* Fallbacks until the Google fonts arrive or if they cannot load; all of them have Cyrillic. */
  --font-body: 'Manrope', system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;

  /* Radii: small controls, tiles (14), cards (18), pills */
  --r-sm: 8px;
  --r-md: 14px;
  --r-lg: 18px;
  --r-full: 999px;

  /* Shadows (soft, night-blue tinted) */
  --shadow-sm: 0 1px 2px rgba(16, 30, 52, .06), 0 4px 14px rgba(16, 30, 52, .07);
  --shadow-md: 0 4px 10px rgba(16, 30, 52, .08), 0 16px 36px rgba(16, 30, 52, .13);
  --shadow-lg: 0 10px 24px rgba(16, 30, 52, .12), 0 32px 64px rgba(16, 30, 52, .18);

  /* Spacing */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 24px;
  --space-6: 32px;
  --space-7: 48px;
  --space-8: 64px;
  --space-9: 96px;

  /* Compact rhythm: the padding of a section and of a thin strip (padding-block). */
  --section-y: clamp(40px, 5vw, 64px);
  --section-y-thin: clamp(36px, 4vw, 52px);

  /* Layout & motion. --header-h is the height of the fixed header (76px on phones and tablets, 80px from 961px):
     the first dark band of a page starts under it (.band--top). --ridge-h is the low mountain ridge at the foot of
     a band (.band--ridge). */
  --container: 1200px;
  --header-h: 76px;
  --ridge-h: 72px;
  --transition: .25s ease;
}

@media (min-width: 961px) {
  :root {
    --header-h: 80px;
  }
}


/* ==========================================================================
   2. Base / reset
   ========================================================================== */
*,
*::before,
*::after {
  box-sizing: border-box;
}

/* Anchored sections and keyboard focus stop below the fixed header and above the floating WhatsApp button (76px from
   the bottom) or the booking bar of a tour page (64px), so a focused control is never hidden under them. */
html {
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--header-h) + 16px);
  scroll-padding-bottom: 96px;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  overflow-x: hidden;
  overflow-x: clip;
}

body {
  margin: 0;
  min-height: 100vh;
  min-height: 100dvh;
  overflow-x: clip;
  background: var(--c-bg);
  color: var(--c-text);
  font-family: var(--font-body);
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

main {
  display: block;
}

img,
svg,
video,
iframe {
  max-width: 100%;
}

img,
video {
  display: block;
  height: auto;
}

iframe {
  display: block;
  border: 0;
}

img[width][height] {
  height: auto;
}

figure {
  margin: 0;
}

address {
  font-style: normal;
}

a {
  color: inherit;
  text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}

button {
  font: inherit;
  color: inherit;
  background: none;
  border: 0;
  padding: 0;
  margin: 0;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}

input,
select,
textarea {
  font: inherit;
  color: inherit;
  margin: 0;
}

ul,
ol {
  margin: 0 0 1em;
  padding-left: 1.4em;
}

hr {
  border: 0;
  border-top: 1px solid var(--c-border);
  margin: var(--space-6) 0;
}

table {
  width: 100%;
  border-collapse: collapse;
}

th,
td {
  text-align: left;
  padding: 10px 12px;
  border-bottom: 1px solid var(--c-border);
}

:focus-visible {
  outline: 3px solid var(--c-accent);
  outline-offset: 2px;
}

:focus:not(:focus-visible) {
  outline: none;
}

::selection {
  background: var(--c-accent-100);
  color: var(--c-text);
}


/* ==========================================================================
   3. Typography
   ========================================================================== */
h1,
h2,
h3,
h4,
h5,
h6 {
  margin: 0 0 .5em;
  font-family: var(--font-heading);
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -.01em;
  color: var(--c-heading);
  text-wrap: balance;
  overflow-wrap: anywhere;
}

/* Inner pages: clamp(32px, 4vw, 46px); the home hero sets its own, larger size. */
h1 {
  font-size: clamp(2rem, 4vw, 2.875rem);
  line-height: 1.1;
}

/* Section headings: clamp(28px, 3vw, 38px). */
h2 {
  font-size: clamp(1.75rem, 3vw, 2.375rem);
}

/* Card and block titles: 18–21px. */
h3 {
  font-size: clamp(1.125rem, 1.6vw, 1.3125rem);
  line-height: 1.2;
}

h4 {
  font-size: 1.0625rem;
  line-height: 1.25;
}

h5,
h6 {
  font-family: var(--font-body);
  font-size: 1rem;
  font-weight: 700;
}

/* An accent inside a heading ("Issyk-Kul <em>in 3 days</em>"): italic Playfair in saffron on dark, deep saffron on light. */
h1 em,
h2 em {
  font-style: italic;
  font-weight: 600;
  color: var(--c-accent);
}

p {
  margin: 0 0 1em;
}

p:last-child {
  margin-bottom: 0;
}

small {
  font-size: .85em;
}

strong,
b {
  font-weight: 700;
}

/* 12px / 700 / .16em uppercase label above a heading. */
.eyebrow {
  display: block;
  margin: 0 0 var(--space-2);
  font-family: var(--font-body);
  font-size: .75rem;
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--c-accent-600);
}

.lead {
  font-size: 1rem;
  line-height: 1.6;
  color: var(--c-text-soft);
  text-wrap: pretty;
}

@media (min-width: 768px) {
  .lead {
    font-size: 1.0625rem;
  }
}

.prose {
  max-width: 70ch;
  color: var(--c-text-soft);
}

.prose p {
  margin: 0 0 1em;
  text-wrap: pretty;
}

.prose ul,
.prose ol {
  margin: 0 0 1em;
  padding-left: 1.4em;
}

.prose li {
  margin-bottom: .4em;
}

.prose li::marker {
  color: var(--c-accent);
}

.prose h2,
.prose h3,
.prose h4 {
  margin-top: 1.4em;
}

.prose h2:first-child,
.prose h3:first-child,
.prose h4:first-child {
  margin-top: 0;
}

.prose a {
  color: var(--c-accent-600);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
}

.prose a:hover {
  color: var(--c-accent-700);
}

.prose > :last-child {
  margin-bottom: 0;
}

.text-center {
  text-align: center;
}

.text-left {
  text-align: left;
}

.text-muted {
  color: var(--c-text-muted);
}

.text-soft {
  color: var(--c-text-soft);
}

.visually-hidden {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}


/* ==========================================================================
   4. Layout
   ========================================================================== */
.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: 16px;
}

.container--narrow {
  max-width: 860px;
}

@media (min-width: 768px) {
  .container {
    padding-inline: 24px;
  }
}

/* Sections: clamp(40px, 5vw, 64px) top and bottom; thin strips clamp(36px, 4vw, 52px). */
.section {
  padding-block: var(--section-y);
}

.section--tight,
.section--thin {
  padding-block: var(--section-y-thin);
}

.section--alt {
  background: var(--c-surface-alt);
}

.section--white {
  background: var(--c-surface);
}

.section--dark {
  background: var(--c-primary);
  color: var(--c-text-inverse);
  --c-heading: var(--c-text-inverse);
}

/* Colour adjustments for content placed on a dark section */
.section--dark .text-muted,
.section--dark .text-soft,
.section--dark .lead {
  color: var(--c-on-dark-muted);
}

.section--dark .eyebrow {
  color: var(--c-accent-300);
}

.section--dark .divider,
.section--dark hr {
  background: rgba(255, 255, 255, .16);
  border-color: rgba(255, 255, 255, .16);
}

.section--dark .card {
  color: var(--c-text);
  --c-heading: var(--c-primary-700);
}

.section--dark .prose a {
  color: var(--c-accent-300);
}

/* ---- Dark band ---------------------------------------------------------------
   The night-blue band every page starts with (home hero, PageHero, NotFound) and the final CTA (CtaBanner).
   .band          night background, white text, headings white, eyebrow saffron, lead --c-on-dark-muted
   .band--top     the first band of a page: it starts at the very top, behind the transparent fixed header, so it
                  reserves the header height (padding-top: var(--header-h)); its own spacing comes on top of that
   .band--stars   a few small stars in the upper right (a drawn night sky; not used under a photo)
   .band--ridge   the low mountain ridge along the bottom edge (var(--ridge-h) tall, the darkest layer #0F1E33,
                  which runs straight into the footer); reserves var(--ridge-h) + 20px at the bottom
   Content goes in a direct .container (or .band__content) child, which is lifted above the decorations; a page's
   own absolutely positioned scene (z-index 0 or below) stays behind it. */
.band {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background: var(--c-night);
  color: var(--c-on-dark);
  --c-heading: var(--c-on-dark);
}

.band > .container,
.band > .band__content {
  position: relative;
  z-index: 1;
}

.band .eyebrow {
  color: var(--c-accent-300);
}

.band h1 em,
.band h2 em {
  color: var(--c-accent-300);
}

.band .lead,
.band .text-muted,
.band .text-soft,
.band .prose {
  color: var(--c-on-dark-muted);
}

.band .prose a,
.band .link {
  color: var(--c-accent-300);
}

.band .card {
  color: var(--c-text);
  --c-heading: var(--c-primary-700);
}

.band--top {
  padding-top: var(--header-h);
}

.band--stars::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 340'%3E%3Cg fill='%23FAF7F2'%3E%3Ccircle cx='760' cy='56' r='1.4' fill-opacity='.8'/%3E%3Ccircle cx='842' cy='112' r='1' fill-opacity='.6'/%3E%3Ccircle cx='905' cy='40' r='1.6' fill-opacity='.8'/%3E%3Ccircle cx='988' cy='150' r='1.1' fill-opacity='.5'/%3E%3Ccircle cx='1046' cy='84' r='1.3' fill-opacity='.7'/%3E%3Ccircle cx='1132' cy='34' r='1' fill-opacity='.6'/%3E%3Ccircle cx='1188' cy='128' r='1.5' fill-opacity='.7'/%3E%3Ccircle cx='1256' cy='72' r='1.1' fill-opacity='.6'/%3E%3Ccircle cx='1318' cy='176' r='1.3' fill-opacity='.5'/%3E%3Ccircle cx='1372' cy='50' r='1.6' fill-opacity='.8'/%3E%3Ccircle cx='1404' cy='124' r='1' fill-opacity='.6'/%3E%3Ccircle cx='1220' cy='214' r='1' fill-opacity='.4'/%3E%3Ccircle cx='930' cy='204' r='1.2' fill-opacity='.4'/%3E%3C/g%3E%3C/svg%3E") right top / cover no-repeat;
  pointer-events: none;
}

.band--ridge {
  padding-bottom: calc(var(--ridge-h) + 20px);
}

.band--ridge::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 0;
  height: var(--ridge-h);
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 80' preserveAspectRatio='none'%3E%3Cpath d='M0 44 L140 22 L250 48 L360 18 L520 44 L700 12 L860 42 L1020 16 L1200 46 L1440 20 V80 H0Z' fill='%231E3A5F'/%3E%3Cpath d='M0 64 C300 56 600 54 900 58 S1300 66 1440 64 V80 H0Z' fill='%230F1E33'/%3E%3C/svg%3E") center bottom / 100% 100% no-repeat;
  pointer-events: none;
}

/* Safety net: a page whose content does not start with a dark band (.band--top or .hero) would sit under the
   fixed header; it gets the header height as top padding (the header turns solid on such pages, Header.razor.css). */
.site-main:not(:has(.band--top, .hero)) {
  padding-top: var(--header-h);
}

/* Grid */
.grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 20px;
}

.grid > * {
  min-width: 0;
}

@media (min-width: 601px) {
  .grid--2,
  .grid--3,
  .grid--4 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (min-width: 961px) {
  .grid--3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .grid--4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}

/* Tour cards and similar: as many columns of at least 320px as fit (auto-fill, so a filtered grid with one card
   keeps its card at column width instead of stretching it over the whole row). */
.grid--cards {
  grid-template-columns: repeat(auto-fill, minmax(min(320px, 100%), 1fr));
}

.grid--tight {
  gap: 12px;
}

/* Horizontal scroll row on phones (≤ 600px): the children become a swipe row of fixed-width items that snap to the
   left edge and run to the screen edges; from 601px it is a plain grid (the page sets the columns, e.g. with
   .grid--cards or .grid--3 next to it). Item width: --scroll-item-w (default 280px). Give the row an accessible
   name and tabindex="0" (role="region" aria-label="…") so keyboard users can scroll it. */
@media (max-width: 600px) {
  .scroll-row {
    display: flex;
    gap: 12px;
    margin-inline: -16px;
    padding: 4px 16px 10px;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scroll-snap-type: x mandatory;
    scroll-padding-inline: 16px;
    scrollbar-width: thin;
    scrollbar-color: #D6CCBB transparent;
  }

  .scroll-row > * {
    flex: none;
    width: min(var(--scroll-item-w, 280px), 82vw);
    scroll-snap-align: start;
  }
}

/* Flex helpers */
.stack {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

.cluster {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
}

.cluster--center {
  justify-content: center;
}

.split {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 28px;
  align-items: center;
}

.split > * {
  min-width: 0;
}

@media (min-width: 801px) {
  .split {
    grid-template-columns: 1fr 1fr;
    gap: clamp(28px, 4vw, 56px);
  }
}


/* ==========================================================================
   5. Buttons
   --------------------------------------------------------------------------
   .btn (44px, 15px/700 pill) + one variant:
     .btn--accent           saffron fill, navy label — the main action ("Book a tour", "View tours")
     .btn--primary          navy fill, white label ("Details" on cards)
     .btn--outline          navy outline on light backgrounds
     .btn--outline-inverse  white outline on dark bands and photos
     .btn--whatsapp         WhatsApp green (#0E7A3E), white label
     .btn--ghost            text button
   Sizes: .btn--sm (42px; 44px on touch screens), .btn--lg (50px); .btn--block (full width); .btn--icon (a round
   icon-only button: give it an aria-label).
   ========================================================================== */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 44px;
  padding: 10px 20px;
  border: 1.5px solid transparent;
  border-radius: var(--r-full);
  background: var(--c-surface);
  color: var(--c-text);
  font-family: var(--font-body);
  font-size: .9375rem;
  font-weight: 700;
  line-height: 1.2;
  text-align: center;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  transition:
    background-color var(--transition),
    border-color var(--transition),
    color var(--transition),
    box-shadow var(--transition),
    transform var(--transition);
}

.btn svg {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
}

.btn:hover {
  transform: translateY(-1px);
}

.btn:active {
  transform: translateY(0);
  transition-duration: .08s;
}

.btn:focus-visible {
  outline: 3px solid var(--c-accent);
  outline-offset: 3px;
}

.btn:disabled,
.btn[disabled],
.btn[aria-disabled="true"] {
  opacity: .55;
  pointer-events: none;
  transform: none;
}

/* Primary — night blue (white on primary 11.5:1, hover primary-600 8.6:1) */
.btn--primary {
  background: var(--c-primary);
  border-color: var(--c-primary);
  color: var(--c-text-inverse);
}

.btn--primary:hover {
  background: var(--c-primary-600);
  border-color: var(--c-primary-600);
  color: var(--c-text-inverse);
  box-shadow: 0 8px 20px rgba(30, 58, 95, .28);
}

.btn--primary:active {
  background: var(--c-primary);
  box-shadow: none;
}

/* Accent — saffron sun with a deep night-blue label (primary-700 on accent-300 = 6.6:1,
   on the lighter hover accent-200 = 8.4:1). The saffron fill also stands out on photos and dark bands. */
.btn--accent {
  background: var(--c-accent-300);
  border-color: var(--c-accent-300);
  color: var(--c-primary-700);
}

.btn--accent:hover {
  background: var(--c-accent-200);
  border-color: var(--c-accent-200);
  color: var(--c-primary-700);
  box-shadow: 0 8px 20px rgba(224, 164, 38, .35);
}

.btn--accent:active {
  background: var(--c-accent-300);
  box-shadow: none;
}

.btn--accent:focus-visible {
  outline-color: var(--c-primary);
}

/* Outline — on light backgrounds */
.btn--outline {
  background: transparent;
  border-color: var(--c-primary);
  color: var(--c-primary);
}

.btn--outline:hover {
  background: var(--c-primary-100);
  color: var(--c-primary);
}

.btn--outline:active {
  background: var(--c-primary);
  color: var(--c-text-inverse);
}

/* Outline inverse — on dark bands / photos (white text on the band 14.6:1) */
.btn--outline-inverse {
  background: transparent;
  border-color: rgba(255, 255, 255, .6);
  color: var(--c-text-inverse);
}

.btn--outline-inverse:hover {
  background: rgba(255, 255, 255, .1);
  border-color: #fff;
  color: var(--c-text-inverse);
}

.btn--outline-inverse:active {
  background: #fff;
  color: var(--c-primary);
}

.btn--outline-inverse:focus-visible {
  outline-color: #fff;
}

/* Ghost — text button */
.btn--ghost {
  background: transparent;
  border-color: transparent;
  color: var(--c-primary);
  padding-inline: 14px;
}

.btn--ghost:hover {
  background: var(--c-primary-100);
}

.btn--ghost:active {
  background: var(--c-border);
}

/* WhatsApp button (deepened brand colour, see tokens: white text ≥ 5.4:1) */
.btn--whatsapp {
  background: var(--c-whatsapp);
  border-color: var(--c-whatsapp);
  color: #fff;
}

.btn--whatsapp:hover {
  background: var(--c-whatsapp-600);
  border-color: var(--c-whatsapp-600);
  color: #fff;
  box-shadow: 0 8px 20px rgba(14, 122, 62, .32);
}

.btn--whatsapp:active {
  background: var(--c-whatsapp);
  box-shadow: none;
}

.btn--whatsapp:focus-visible {
  outline-color: var(--c-primary);
}

/* Sizes */
.btn--sm {
  min-height: 42px;
  padding: 8px 16px;
  font-size: .875rem;
}

.btn--sm svg {
  width: 16px;
  height: 16px;
}

.btn--lg {
  min-height: 50px;
  padding: 12px 26px;
  font-size: 1rem;
}

.btn--lg svg {
  width: 20px;
  height: 20px;
}

.btn--block {
  display: flex;
  width: 100%;
}

/* Round icon-only button (44px); the label goes in aria-label. */
.btn--icon {
  width: 44px;
  min-width: 44px;
  padding: 0;
}

/* Touch devices always get 44px targets */
@media (pointer: coarse) {
  .btn--sm {
    min-height: 44px;
  }
}

/* Buttons placed on dark sections, bands and photos */
.section--dark .btn--outline,
.band .btn--outline,
.hero .btn--outline,
.page-hero .btn--outline {
  background: transparent;
  border-color: rgba(255, 255, 255, .6);
  color: var(--c-text-inverse);
}

.section--dark .btn--outline:hover,
.band .btn--outline:hover,
.hero .btn--outline:hover,
.page-hero .btn--outline:hover {
  background: rgba(255, 255, 255, .1);
  border-color: #fff;
}

.section--dark .btn--outline:active,
.band .btn--outline:active,
.hero .btn--outline:active,
.page-hero .btn--outline:active {
  background: #fff;
  color: var(--c-primary);
}

.section--dark .btn--ghost,
.band .btn--ghost,
.hero .btn--ghost,
.page-hero .btn--ghost {
  color: var(--c-text-inverse);
}

.section--dark .btn--ghost:hover,
.band .btn--ghost:hover,
.hero .btn--ghost:hover,
.page-hero .btn--ghost:hover {
  background: rgba(255, 255, 255, .12);
}

.section--dark .btn--primary,
.band .btn--primary {
  background: var(--c-surface);
  border-color: var(--c-surface);
  color: var(--c-primary);
}

.section--dark .btn--primary:hover,
.band .btn--primary:hover {
  background: var(--c-bg);
  border-color: var(--c-bg);
  color: var(--c-primary);
  box-shadow: 0 8px 20px rgba(0, 0, 0, .25);
}

/* Cards keep their own (light) button colours inside a dark band. */
.band .card .btn--primary,
.section--dark .card .btn--primary {
  background: var(--c-primary);
  border-color: var(--c-primary);
  color: var(--c-text-inverse);
}

.section--dark .btn:focus-visible,
.band .btn:focus-visible,
.hero .btn:focus-visible,
.page-hero .btn:focus-visible {
  outline-color: #fff;
}


/* ==========================================================================
   6. Cards
   --------------------------------------------------------------------------
   White, 1px border, radius 18px; hover/focus lifts by 3px with a soft shadow. 16:9 media, 16–18px padding.
   ========================================================================== */
.card {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--r-lg);
  overflow: hidden;
  color: var(--c-text);
  text-decoration: none;
  transition: transform var(--transition), box-shadow var(--transition);
}

.card:hover,
.card:focus-within {
  transform: translateY(-3px);
  box-shadow: var(--shadow-md);
}

.card--flat:hover,
.card--flat:focus-within {
  transform: none;
  box-shadow: none;
}

.card__media {
  position: relative;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: var(--c-surface-alt);
}

.card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform .7s cubic-bezier(.2, .65, .3, 1);
}

.card:hover .card__media img {
  transform: scale(1.04);
}

.card__badge {
  position: absolute;
  top: 12px;
  left: 12px;
  z-index: 1;
}

.card__body {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 8px;
  padding: 16px 18px 18px;
}

.card__body p {
  margin: 0;
}

.card__title {
  margin: 0;
  font-size: 1.3125rem;
  line-height: 1.2;
}

.card__title a {
  color: inherit;
  text-decoration: none;
}

.card__title a:hover {
  color: var(--c-primary-600);
}

.card__text {
  color: var(--c-text-soft);
  font-size: .9375rem;
}

.card__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 14px;
  font-size: .8125rem;
  color: var(--c-text-soft);
}

.card__meta > * {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.card__meta svg {
  width: 15px;
  height: 15px;
  flex-shrink: 0;
  color: var(--c-accent-600);
}

/* Price + action row at the foot of a card, above an inset hairline. */
.card__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin: auto 18px 0;
  padding: 12px 0 18px;
  border-top: 1px solid var(--c-border-soft);
}

.card__price {
  color: var(--c-heading);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 1.375rem;
  line-height: 1.15;
  white-space: nowrap;
}

.card__price small {
  display: block;
  font-family: var(--font-body);
  font-size: .75rem;
  font-weight: 500;
  color: var(--c-text-muted);
}


/* ==========================================================================
   7. Badges, chips, segmented control
   ========================================================================== */
/* Small pill (12px / 700). .badge = soft navy; --accent = saffron with a navy label (photos, cards); --light = white
   with a navy label (on photos); --dark = translucent night with white text (on photos); --winter = glacier. */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 10px;
  border-radius: var(--r-full);
  background: var(--c-primary-100);
  color: var(--c-primary-700);
  font-size: .75rem;
  font-weight: 700;
  line-height: 1.4;
  white-space: nowrap;
}

.badge svg {
  width: 14px;
  height: 14px;
  flex-shrink: 0;
}

.badge--accent {
  background: var(--c-accent-300);
  color: var(--c-primary-700);
}

.badge--light {
  background: var(--c-surface);
  color: var(--c-primary-700);
}

.badge--dark {
  background: rgba(15, 30, 51, .72);
  color: #fff;
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}

.badge--winter {
  background: var(--c-winter-100);
  color: var(--c-winter-700);
}

/* Filter chip (13px, 44px tall). A toggle uses aria-pressed; the active chip is navy with a saffron icon. */
.chip {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 44px;
  padding: 0 14px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-full);
  background: var(--c-bg);
  color: var(--c-text);
  font-family: var(--font-body);
  font-size: .8125rem;
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
  cursor: pointer;
  text-decoration: none;
  user-select: none;
  transition:
    background-color .15s ease,
    border-color .15s ease,
    color .15s ease;
}

.chip svg {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  color: var(--c-accent-600);
}

.chip:hover {
  border-color: var(--c-primary);
}

.chip:focus-visible {
  outline: 3px solid var(--c-accent);
  outline-offset: 2px;
}

.chip--active,
.chip[aria-pressed="true"],
.chip[aria-current="true"],
.chip[aria-current="page"] {
  background: var(--c-primary);
  border-color: var(--c-primary);
  color: var(--c-text-inverse);
}

.chip--active svg,
.chip[aria-pressed="true"] svg,
.chip[aria-current="true"] svg,
.chip[aria-current="page"] svg {
  color: var(--c-accent-300);
}

.chip--active:hover,
.chip[aria-pressed="true"]:hover {
  background: var(--c-primary-600);
  border-color: var(--c-primary-600);
}

/* Segmented control: a white pill holding 2–4 toggle buttons (Summer | Winter, sorting). Markup:
   <div class="seg" role="group" aria-label="…"><button type="button" class="seg__btn" aria-pressed="true">…</button>…</div>
   The pressed button is navy with white text; each button is 40px tall with a 44px hit area. .seg--cream: the
   cream variant for use inside a white panel. */
.seg {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 4px;
  padding: 4px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-full);
  background: var(--c-surface);
}

.seg--cream {
  background: var(--c-bg);
}

.seg__btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  min-height: 40px;
  padding: 0 16px;
  border-radius: var(--r-full);
  color: var(--c-text);
  font-family: var(--font-body);
  font-size: .875rem;
  font-weight: 700;
  line-height: 1.2;
  white-space: nowrap;
  transition: background-color .15s ease, color .15s ease;
}

.seg__btn::after {
  content: "";
  position: absolute;
  inset: -2px 0;
}

.seg__btn svg {
  width: 17px;
  height: 17px;
  flex-shrink: 0;
}

.seg__btn:hover {
  background: var(--c-primary-100);
}

.seg__btn[aria-pressed="true"],
.seg__btn[aria-selected="true"],
.seg__btn.is-active {
  background: var(--c-primary);
  color: var(--c-text-inverse);
}


/* ==========================================================================
   8. Media helpers
   ========================================================================== */
.img-cover {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}

.aspect-4x3,
.aspect-16x9,
.aspect-16x10,
.aspect-3x4,
.aspect-1x1 {
  position: relative;
  overflow: hidden;
  background: var(--c-surface-alt);
}

.aspect-4x3 {
  aspect-ratio: 4 / 3;
}

.aspect-16x9 {
  aspect-ratio: 16 / 9;
}

.aspect-16x10 {
  aspect-ratio: 16 / 10;
}

.aspect-3x4 {
  aspect-ratio: 3 / 4;
}

.aspect-1x1 {
  aspect-ratio: 1 / 1;
}

.aspect-4x3 > img,
.aspect-16x9 > img,
.aspect-16x10 > img,
.aspect-3x4 > img,
.aspect-1x1 > img,
.aspect-4x3 > iframe,
.aspect-16x9 > iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.rounded {
  border-radius: var(--r-lg);
  overflow: hidden;
}

.rounded-md {
  border-radius: var(--r-md);
  overflow: hidden;
}

.rounded-sm {
  border-radius: var(--r-sm);
  overflow: hidden;
}

.shadow-sm {
  box-shadow: var(--shadow-sm);
}

.shadow-md {
  box-shadow: var(--shadow-md);
}

.shadow-lg {
  box-shadow: var(--shadow-lg);
}


/* ==========================================================================
   9. Hero & page hero
   ========================================================================== */
/* Home hero: a tall dark band (~600px) behind the transparent header. The page draws its own night scene or shows
   a real photo (.hero__bg) under .hero__overlay. */
.hero {
  position: relative;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  min-height: 560px;
  padding-top: var(--header-h);
  overflow: hidden;
  background: var(--c-night);
  color: var(--c-text-inverse);
  --c-heading: var(--c-text-inverse);
}

@media (min-width: 961px) {
  .hero {
    min-height: 600px;
  }
}

.hero__bg,
.page-hero__bg {
  position: absolute;
  inset: 0;
  z-index: -2;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  max-width: none;
}

.hero__bg img,
.page-hero__bg img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}

/* Over a real photo: night-blue at the top (header, breadcrumbs), lighter in the middle, dark again at the foot.
   At its lightest the veil is 76% night, so white text stays ≥ 6:1 and --c-on-dark-muted ≥ 4.6:1 even on white snow. */
.hero__overlay,
.page-hero__overlay {
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(180deg, rgba(15, 30, 51, .86) 0%, rgba(19, 40, 74, .76) 50%, rgba(15, 30, 51, .88) 100%);
  pointer-events: none;
}

.hero__content {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: 16px;
}

@media (min-width: 768px) {
  .hero__content {
    padding-inline: 24px;
  }
}

.hero h1 {
  margin-bottom: var(--space-4);
  color: var(--c-text-inverse);
}

.hero p,
.hero .lead {
  color: var(--c-on-dark-muted);
}

.hero .eyebrow {
  color: var(--c-accent-300);
}

.hero h1 em {
  color: var(--c-accent-300);
}

/* Inner page banner (Components/PageHero): a compact dark band, ~300–340px including the header. Breadcrumbs,
   eyebrow, h1 clamp(32px, 4vw, 46px), a one-line lead; the drawn night sky or a real photo under the overlay; the
   low ridge at the foot. Classes: .page-hero (+ .band .band--top .band--ridge), .page-hero--photo (with a real
   photo), .page-hero__inner, .page-hero__title, .page-hero__subtitle (the lead), .page-hero__extra. */
.page-hero {
  --c-heading: var(--c-text-inverse);
}

.page-hero__inner {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
  padding-top: 4px;
}

@media (min-width: 961px) {
  .page-hero__inner {
    padding-top: 12px;
  }
}

.page-hero__title {
  max-width: 820px;
  margin: 0;
  font-size: clamp(2rem, 4vw, 2.875rem);
  line-height: 1.1;
  color: var(--c-text-inverse);
}

.page-hero__subtitle {
  max-width: 820px;
  margin: 0;
  font-size: 1rem;
  line-height: 1.6;
  color: var(--c-on-dark-muted);
  text-wrap: pretty;
}

.page-hero .eyebrow {
  margin: 0;
  color: var(--c-accent-300);
}

.page-hero__extra {
  width: 100%;
  margin-top: 6px;
}

.page-hero__extra:empty {
  display: none;
}

/* On a photo the text gets a soft shadow; the breadcrumbs use the lighter on-dark colour. */
.page-hero--photo .page-hero__title,
.page-hero--photo .page-hero__subtitle {
  text-shadow: 0 1px 14px rgba(0, 0, 0, .3);
}

@media (max-width: 600px) {
  .page-hero {
    padding-bottom: calc(var(--ridge-h) + 8px);
  }

  .page-hero__title {
    font-size: 2rem;
  }

  .page-hero__subtitle {
    font-size: .9375rem;
    line-height: 1.55;
  }
}


/* ==========================================================================
   10. Forms
   ========================================================================== */
.form {
  display: grid;
  /* minmax(0, 1fr): the single column may shrink below its content (e.g. nowrap buttons) instead of overflowing. */
  grid-template-columns: minmax(0, 1fr);
  gap: 14px;
}

.form__row {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 14px;
}

@media (min-width: 601px) {
  .form__row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

.form__field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}

.form__label {
  font-size: .875rem;
  font-weight: 700;
  color: var(--c-text);
}

.form__label .required,
.form__required {
  color: var(--c-accent-600);
  margin-left: 2px;
}

.form__input,
.form__select,
.form__textarea {
  width: 100%;
  min-height: 46px;
  padding: 10px 14px;
  border: 1px solid var(--c-border);
  border-radius: 12px;
  background: var(--c-surface);
  color: var(--c-text);
  font: inherit;
  font-size: .9375rem;
  line-height: 1.4;
  transition: border-color var(--transition), box-shadow var(--transition);
}

/* Full strength: --c-text-muted keeps 4.5:1 on the white and the cream field fills only without transparency. */
.form__input::placeholder,
.form__textarea::placeholder {
  color: var(--c-text-muted);
  opacity: 1;
}

.form__input:hover,
.form__select:hover,
.form__textarea:hover {
  border-color: #CDC3B2;
}

.form__input:focus,
.form__select:focus,
.form__textarea:focus {
  outline: none;
  border-color: var(--c-accent);
  box-shadow: 0 0 0 3px rgba(181, 122, 12, .25);
}

.form__input:focus-visible,
.form__select:focus-visible,
.form__textarea:focus-visible {
  outline: none;
}

.form__textarea {
  min-height: 120px;
  resize: vertical;
}

.form__select {
  appearance: none;
  -webkit-appearance: none;
  padding-right: 42px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235B6271' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 14px center;
  background-size: 18px;
  cursor: pointer;
}

.form__input[type="number"] {
  -moz-appearance: textfield;
}

.form__hint {
  font-size: .8125rem;
  color: var(--c-text-muted);
}

.form__error,
.validation-message {
  font-size: .8125rem;
  font-weight: 600;
  color: var(--c-accent-600);
}

.form__input[aria-invalid="true"],
.form__select[aria-invalid="true"],
.form__textarea[aria-invalid="true"],
.form__input.invalid,
.form__select.invalid,
.form__textarea.invalid {
  border-color: var(--c-accent-600);
}

.form__input[aria-invalid="true"]:focus,
.form__select[aria-invalid="true"]:focus,
.form__textarea[aria-invalid="true"]:focus {
  box-shadow: 0 0 0 3px rgba(140, 91, 6, .22);
}

.form__check {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: .9375rem;
}

.form__check input {
  width: 20px;
  height: 20px;
  margin-top: 2px;
  accent-color: var(--c-primary);
  flex-shrink: 0;
}

.form__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: var(--space-1);
}


/* ==========================================================================
   11. Stats
   ========================================================================== */
.stats {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-4);
  text-align: center;
}

@media (min-width: 760px) {
  .stats {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}

.stat {
  padding: var(--space-3) var(--space-2);
}

.stat__value {
  display: block;
  font-family: var(--font-heading);
  font-size: clamp(1.75rem, 3vw, 2.375rem);
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -.01em;
  color: var(--c-accent);
}

.stat__label {
  display: block;
  margin-top: var(--space-1);
  font-size: .875rem;
  font-weight: 500;
  color: var(--c-text-muted);
}

.section--dark .stat__value,
.band .stat__value {
  color: var(--c-accent-300);
}

.section--dark .stat__label,
.band .stat__label {
  color: var(--c-on-dark-muted);
}


/* ==========================================================================
   12. Lists
   ========================================================================== */
.check-list,
.cross-list,
.icon-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.check-list li,
.cross-list li {
  position: relative;
  padding-left: 30px;
  line-height: 1.5;
}

.check-list li::before,
.cross-list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: .1em;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-repeat: no-repeat;
  background-position: center;
}

.check-list li::before {
  background-color: var(--c-accent-100);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238C5B06' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12.5 4.5 4.5L19 7'/%3E%3C/svg%3E");
  background-size: 12px;
}

.cross-list li {
  color: var(--c-text-muted);
}

.cross-list li::before {
  background-color: var(--c-surface-alt);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235B6271' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E");
  background-size: 10px;
}

.section--dark .check-list li::before,
.band .check-list li::before {
  background-color: rgba(255, 255, 255, .14);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23E0A426' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12.5 4.5 4.5L19 7'/%3E%3C/svg%3E");
}

.section--dark .cross-list li,
.band .cross-list li {
  color: var(--c-on-dark-soft);
}

.section--dark .cross-list li::before,
.band .cross-list li::before {
  background-color: rgba(255, 255, 255, .1);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E");
}

.icon-list li {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  line-height: 1.5;
}

.icon-list li > svg,
.icon-list__icon {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  margin-top: .2em;
  color: var(--c-accent-600);
}

.band .icon-list li > svg,
.band .icon-list__icon {
  color: var(--c-accent-300);
}


/* ==========================================================================
   13. Misc
   ========================================================================== */
/* Divider */
.divider {
  border: 0;
  height: 1px;
  margin-block: var(--space-5);
  background: var(--c-border);
}

/* Reveal on scroll (site.observeReveal adds .is-visible) */
.reveal {
  opacity: 0;
  transform: translateY(18px);
  transition:
    opacity .7s cubic-bezier(.2, .65, .3, 1),
    transform .7s cubic-bezier(.2, .65, .3, 1);
}

.reveal.is-visible {
  opacity: 1;
  transform: none;
}

/* Stagger siblings inside grids and stat strips */
.grid > .reveal:nth-child(2),
.stats > .reveal:nth-child(2) {
  transition-delay: .08s;
}

.grid > .reveal:nth-child(3),
.stats > .reveal:nth-child(3) {
  transition-delay: .16s;
}

.grid > .reveal:nth-child(4),
.stats > .reveal:nth-child(4) {
  transition-delay: .24s;
}

.grid > .reveal:nth-child(5) {
  transition-delay: .32s;
}

.grid > .reveal:nth-child(6) {
  transition-delay: .4s;
}

/* Skip link — visible only when focused via keyboard */
.skip-link {
  position: absolute;
  top: 12px;
  left: 12px;
  z-index: 2000;
  padding: 12px 18px;
  border-radius: var(--r-sm);
  background: var(--c-accent-300);
  color: var(--c-primary-700);
  font-weight: 700;
  text-decoration: none;
  box-shadow: var(--shadow-md);
  transform: translateY(-160%);
  opacity: 0;
  transition: transform var(--transition), opacity var(--transition);
}

.skip-link:focus-visible {
  transform: none;
  opacity: 1;
  outline: 3px solid #fff;
  outline-offset: 2px;
}

/* Rating stars — component sets --star-size on .stars (default 16px) */
.stars {
  display: inline-flex;
  align-items: center;
  gap: 1px;
  line-height: 1;
  color: var(--c-star);
  vertical-align: middle;
}

.stars__star {
  flex-shrink: 0;
  fill: currentColor;
  color: var(--c-star);
}

.stars__star:not([width]):not([style]) {
  width: var(--star-size, 16px);
  height: var(--star-size, 16px);
}

.stars__star--empty {
  color: var(--c-border);
}

.section--dark .stars__star--empty,
.band .stars__star--empty {
  color: rgba(255, 255, 255, .3);
}

/* Breadcrumbs: 13px / 600; on dark bands the links are --c-on-dark-soft and the current page white. */
.breadcrumbs {
  font-size: .8125rem;
  font-weight: 600;
  color: var(--c-text-muted);
}

.breadcrumbs ol,
.breadcrumbs ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 8px;
}

.breadcrumbs li {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}

.breadcrumbs li + li::before {
  content: "/";
  opacity: .8;
}

.breadcrumbs a {
  color: inherit;
  text-decoration: none;
  transition: color var(--transition);
}

.breadcrumbs a:hover {
  color: var(--c-accent-700);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.breadcrumbs [aria-current="page"] {
  color: var(--c-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 60vw;
}

.band .breadcrumbs,
.page-hero .breadcrumbs,
.hero .breadcrumbs,
.section--dark .breadcrumbs {
  color: var(--c-on-dark-soft);
}

/* On a photo the veil can be a little lighter than the drawn night: the lighter on-dark colour keeps the trail ≥ 4.5:1. */
.page-hero--photo .breadcrumbs {
  color: var(--c-on-dark-muted);
}

.band .breadcrumbs [aria-current="page"],
.page-hero .breadcrumbs [aria-current="page"],
.hero .breadcrumbs [aria-current="page"],
.section--dark .breadcrumbs [aria-current="page"] {
  color: var(--c-text-inverse);
}

/* On dark bands and photos the hover colour must stay light (accent-700 is for light backgrounds). */
.band .breadcrumbs a:hover,
.page-hero .breadcrumbs a:hover,
.hero .breadcrumbs a:hover,
.section--dark .breadcrumbs a:hover {
  color: var(--c-accent-300);
}

/* Touch screens: breadcrumb links get a 44px tap target; the negative margins keep the trail where it was. */
@media (pointer: coarse) {
  .breadcrumbs a {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    padding-inline: 6px;
    margin-inline: -6px;
  }

  /* The taller links start right under the header (not under it) and do not push the eyebrow down. */
  .page-hero .breadcrumbs {
    margin-block: -4px -8px;
  }
}

/* Quote (review text) */
.quote {
  position: relative;
  margin: 0;
  font-size: .9375rem;
  line-height: 1.55;
  color: var(--c-text-soft);
}

.quote p {
  margin: 0;
}

.quote cite,
.quote__author {
  display: block;
  margin-top: var(--space-3);
  font-size: .875rem;
  font-style: normal;
  font-weight: 700;
  color: var(--c-heading);
}

.section--dark .quote,
.band .quote {
  color: var(--c-on-dark-muted);
}

/* Inline text link with an optional arrow icon ("All tours →"): 15px / 700 deep saffron, 44px tall. */
.link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 44px;
  color: var(--c-accent-600);
  font-size: .9375rem;
  font-weight: 700;
  text-decoration: none;
  transition: color var(--transition);
}

.link:hover {
  color: var(--c-accent-700);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.link svg {
  width: 17px;
  height: 17px;
  flex-shrink: 0;
  transition: transform var(--transition);
}

.link:hover svg {
  transform: translateX(3px);
}

.section--dark .link,
.band .link {
  color: var(--c-accent-300);
}

/* Initials avatar (reviews without a photo): 36px navy circle with white initials. --lg: 56px. */
.avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--c-primary);
  color: var(--c-text-inverse);
  font-family: var(--font-body);
  font-size: .875rem;
  font-weight: 700;
  flex-shrink: 0;
}

.avatar--lg {
  width: 56px;
  height: 56px;
  font-family: var(--font-heading);
  font-size: 1.25rem;
}

.avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Icon tile: a 38px navy square with a saffron icon (service strips, facts). */
.icon-tile {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 38px;
  height: 38px;
  border-radius: 10px;
  background: var(--c-primary);
  color: var(--c-accent-300);
}

.icon-tile svg {
  width: 20px;
  height: 20px;
}


/* ==========================================================================
   14. Utilities
   ========================================================================== */
.mt-2 { margin-top: var(--space-2); }
.mt-3 { margin-top: var(--space-3); }
.mt-4 { margin-top: var(--space-4); }
.mt-5 { margin-top: var(--space-5); }
.mt-6 { margin-top: var(--space-6); }
.mt-7 { margin-top: var(--space-7); }
.mb-2 { margin-bottom: var(--space-2); }
.mb-3 { margin-bottom: var(--space-3); }
.mb-4 { margin-bottom: var(--space-4); }
.mb-5 { margin-bottom: var(--space-5); }
.mb-6 { margin-bottom: var(--space-6); }
.mb-7 { margin-bottom: var(--space-7); }
.mx-auto { margin-inline: auto; }
.w-full { width: 100%; }
.nowrap { white-space: nowrap; }

.hide-mobile {
  display: none !important;
}

@media (min-width: 768px) {
  .hide-mobile {
    display: revert !important;
  }

  .hide-desktop {
    display: none !important;
  }
}


/* ==========================================================================
   15. Blazor framework UI
   ========================================================================== */
/* Unhandled-error bar: hidden until the framework sets display:block inline */
#blazor-error-ui {
  display: none;
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1000;
  padding: 12px 52px 12px 20px;
  background: var(--c-primary-700);
  color: #fff;
  font-size: .9rem;
  line-height: 1.4;
  box-shadow: 0 -4px 24px rgba(0, 0, 0, .25);
  color-scheme: light only;
}

#blazor-error-ui .reload {
  margin-left: 8px;
  color: var(--c-accent-300);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
}

#blazor-error-ui .dismiss {
  position: absolute;
  top: 50%;
  right: 12px;
  transform: translateY(-50%);
  padding: 6px 10px;
  cursor: pointer;
  font-size: 1.1rem;
  line-height: 1;
  border-radius: var(--r-sm);
}

#blazor-error-ui .dismiss:hover {
  background: rgba(255, 255, 255, .12);
}

.blazor-error-boundary {
  padding: var(--space-4) var(--space-5);
  border-radius: var(--r-md);
  background: var(--c-accent-100);
  border: 1px solid rgba(181, 122, 12, .35);
  color: var(--c-accent-600);
}

.blazor-error-boundary::after {
  content: "An error has occurred.";
}


/* ==========================================================================
   16. Reduced motion & print
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }

  .reveal {
    opacity: 1;
    transform: none;
  }

  .btn:hover,
  .card:hover,
  .card:focus-within,
  .link:hover svg {
    transform: none;
  }

  .card:hover .card__media img {
    transform: none;
  }
}

/* Print: browsers drop background colours and images by default ("Background
   graphics" off), so every block that relies on a dark background for white
   text is reset to dark-on-white, and purely interactive chrome is hidden.
   The hero photos (real <img> elements) are kept as a static banner above
   the title. */
@media print {
  .skip-link,
  #blazor-error-ui,
  .fab,
  .lightbox,
  .mobile-menu,
  .header__nav,
  .header__actions,
  .header__burger,
  .hero__overlay,
  .page-hero__overlay,
  .cta-banner__actions {
    display: none !important;
  }

  html,
  body {
    background: #fff !important;
    color: #000 !important;
  }

  /* No transitions/animations: the page must print in its final state. */
  *,
  *::before,
  *::after {
    transition: none !important;
    animation: none !important;
  }

  .reveal {
    opacity: 1 !important;
    transform: none !important;
  }

  .section {
    padding-block: 24px;
  }

  .header,
  .header__bar {
    position: static !important;
    height: auto !important;
    background: none !important;
    box-shadow: none !important;
    border: 0 !important;
  }

  /* The white logo lock-up of the header would print white-on-white: print it black. */
  .header__logo img,
  .footer__logo img {
    filter: brightness(0);
  }

  /* Dark bands (heroes, CtaBanner), dark sections, footer */
  .band,
  .section--dark,
  .footer,
  .hero,
  .page-hero {
    background: none !important;
    color: #000 !important;
    box-shadow: none !important;
    padding-top: 0 !important;
    --c-heading: #000;
  }

  .band::before,
  .band::after {
    display: none !important;
  }

  .band *:not(.stars__star),
  .section--dark *:not(.stars__star),
  .footer *,
  .hero *,
  .page-hero * {
    color: inherit !important;
    text-shadow: none !important;
  }

  .section--dark .stars__star--empty,
  .band .stars__star--empty {
    color: #C8C8C8 !important;
  }

  .footer {
    border-top: 1px solid #000;
  }

  .hero,
  .page-hero {
    display: block !important;
    min-height: 0 !important;
    padding-block: 0 16px !important;
    overflow: visible !important;
  }

  .hero__bg,
  .page-hero__bg {
    position: static !important;
    display: block;
    width: 100% !important;
    height: 6cm !important;
    margin: 0 0 16px;
    object-fit: cover;
    border-radius: var(--r-sm);
  }

  .hero__content {
    padding-block: 0 !important;
  }

  /* Elements that show white text on their own dark background */
  .btn,
  .chip--active,
  .chip[aria-pressed="true"],
  .chip[aria-current="true"],
  .seg__btn[aria-pressed="true"],
  .badge--dark {
    background: none !important;
    color: #000 !important;
    border: 1px solid #000 !important;
    box-shadow: none !important;
    -webkit-backdrop-filter: none !important;
    backdrop-filter: none !important;
  }

  .card {
    box-shadow: none !important;
    border: 1px solid #D0D0D0;
    break-inside: avoid;
  }

  img,
  figure {
    break-inside: avoid;
  }

  h1,
  h2,
  h3,
  h4 {
    break-after: avoid;
  }
}
