/* ==========================================================================
   NomadHorseTrek.kg — design system
   --------------------------------------------------------------------------
   Premium, calm, photo-first travel site. Warm neutrals + deep pine green +
   terracotta accent. Fonts: Playfair Display (headings) / Manrope (body),
   loaded from index.html. 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, grid, stack, cluster, split
     5. Buttons
     6. Cards
     7. Badges & chips
     8. Media helpers
     9. Hero & page hero
    10. Forms
    11. Stats
    12. Lists
    13. Misc: divider, reveal, skip link, stars, breadcrumbs, quote, links
    14. Utilities
    15. Blazor framework UI (error bar / error boundary)
    16. Reduced motion & print
   ========================================================================== */


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

  /* Colours */
  --c-bg: #FAF7F2;
  --c-surface: #FFFFFF;
  --c-surface-alt: #F1EBE1;
  --c-border: #E3DBCD;
  --c-text: #1D1A15;
  --c-text-muted: #66605A;
  --c-text-inverse: #FFFFFF;
  --c-primary: #1F3D2B;
  --c-primary-600: #2B5039;
  --c-primary-100: #E4EDE6;
  /* Accent (terracotta). --c-accent (#C2601F) is 3.9–4.2:1 on the light
     surfaces, so it is kept for large text, icons, borders and decoration;
     small text on light backgrounds uses --c-accent-600 (≥ 4.7:1) and its
     hover --c-accent-700 (≥ 6.3:1). White text sits on --c-accent-600. */
  --c-accent: #C2601F;
  --c-accent-600: #A54E14;
  --c-accent-700: #8A3F0F;
  --c-accent-300: #E9A26E;          /* accent for use on dark backgrounds */
  --c-accent-100: #F8E6D9;

  /* 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: #F2B01E;
  --c-overlay: rgba(20, 18, 14, .55);

  /* Type */
  --font-heading: 'Playfair Display', Georgia, serif;
  --font-body: 'Manrope', system-ui, sans-serif;

  /* Radii */
  --r-sm: 8px;
  --r-md: 14px;
  --r-lg: 22px;
  --r-full: 999px;

  /* Shadows (soft, warm-tinted) */
  --shadow-sm: 0 1px 2px rgba(61, 45, 25, .06), 0 4px 14px rgba(61, 45, 25, .07);
  --shadow-md: 0 4px 10px rgba(61, 45, 25, .08), 0 16px 36px rgba(61, 45, 25, .13);
  --shadow-lg: 0 10px 24px rgba(61, 45, 25, .12), 0 32px 64px rgba(61, 45, 25, .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;

  /* Layout & motion */
  --container: 1200px;
  --header-h: 72px;
  --transition: .25s ease;
}


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

html {
  scroll-behavior: smooth;
  -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: clamp(1rem, .96rem + .2vw, 1.0625rem);
  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);
}

/* Anchored sections scroll to just below the sticky header. */
[id] {
  scroll-margin-top: calc(var(--header-h) + 16px);
}


/* ==========================================================================
   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: inherit;
  text-wrap: balance;
  overflow-wrap: anywhere;
}

h1 {
  font-size: clamp(2.2rem, 5vw, 4rem);
  line-height: 1.08;
}

h2 {
  font-size: clamp(1.75rem, 3.2vw, 2.6rem);
}

h3 {
  font-size: clamp(1.25rem, 2vw, 1.6rem);
  font-weight: 600;
}

h4 {
  font-size: clamp(1.1rem, 1.5vw, 1.25rem);
  font-weight: 600;
}

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

p {
  margin: 0 0 1em;
}

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

small {
  font-size: .85em;
}

strong,
b {
  font-weight: 700;
}

.eyebrow {
  display: block;
  margin: 0 0 var(--space-3);
  font-family: var(--font-body);
  font-size: .78rem;
  font-weight: 700;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--c-accent-600);
}

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

.prose {
  max-width: 70ch;
}

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

.prose ul,
.prose ol {
  margin: 0 0 1.15em;
  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);
}

.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;
  }
}

.section {
  padding-block: clamp(56px, 8vw, 104px);
}

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

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

.section--tight {
  padding-block: clamp(28px, 4vw, 52px);
}

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

.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);
}

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

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

.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));
  }
}

/* Masonry-ish photo grid (CSS columns) */
.masonry {
  columns: 1;
  column-gap: 16px;
}

.masonry > * {
  break-inside: avoid;
  margin-bottom: 16px;
}

@media (min-width: 601px) {
  .masonry {
    columns: 2;
  }
}

@media (min-width: 961px) {
  .masonry {
    columns: 3;
  }
}

/* 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: 32px;
  align-items: center;
}

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

@media (min-width: 801px) {
  .split {
    grid-template-columns: 1fr 1fr;
    gap: 48px;
  }
}


/* ==========================================================================
   5. Buttons
   ========================================================================== */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 44px;
  padding: 12px 22px;
  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: .95rem;
  font-weight: 600;
  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: 20px;
  height: 20px;
  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 — deep green */
.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);
  box-shadow: 0 8px 20px rgba(31, 61, 43, .25);
}

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

/* Accent — terracotta (white on accent-600 = 5.7:1, hover accent-700 = 7.5:1) */
.btn--accent {
  background: var(--c-accent-600);
  border-color: var(--c-accent-600);
  color: var(--c-text-inverse);
}

.btn--accent:hover {
  background: var(--c-accent-700);
  border-color: var(--c-accent-700);
  box-shadow: 0 8px 20px rgba(165, 78, 20, .3);
}

.btn--accent:active {
  background: var(--c-accent-600);
  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);
}

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

/* Outline inverse — on dark backgrounds / photos */
.btn--outline-inverse {
  background: rgba(255, 255, 255, .08);
  border-color: rgba(255, 255, 255, .75);
  color: var(--c-text-inverse);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}

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

.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;
  font-weight: 700;
}

.btn--whatsapp:hover {
  background: var(--c-whatsapp-600);
  border-color: var(--c-whatsapp-600);
  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: 40px;
  padding: 8px 16px;
  font-size: .875rem;
}

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

.btn--lg {
  min-height: 52px;
  padding: 14px 30px;
  font-size: 1.05rem;
}

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

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

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

/* Buttons placed on dark sections */
.section--dark .btn--outline,
.hero .btn--outline,
.page-hero .btn--outline {
  background: rgba(255, 255, 255, .08);
  border-color: rgba(255, 255, 255, .75);
  color: var(--c-text-inverse);
}

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

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

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

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

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

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

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


/* ==========================================================================
   6. Cards
   ========================================================================== */
.card {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  background: var(--c-surface);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
  color: inherit;
  text-decoration: none;
  transition: transform var(--transition), box-shadow var(--transition);
}

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

.card--flat {
  box-shadow: none;
  border: 1px solid var(--c-border);
}

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

.card__media {
  position: relative;
  aspect-ratio: 4 / 3;
  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.05);
}

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

.card__body {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 10px;
  padding: 20px;
}

.card__body p {
  margin: 0;
}

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

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

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

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

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

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

.card__meta svg {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  color: var(--c-primary);
}

.card__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 0 20px 20px;
  margin-top: auto;
}

.card__price {
  color: var(--c-accent-600);
  font-weight: 600;
  font-size: 1.05rem;
  white-space: nowrap;
}

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


/* ==========================================================================
   7. Badges & chips
   ========================================================================== */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 10px;
  border-radius: var(--r-full);
  background: var(--c-primary-100);
  color: var(--c-primary);
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .05em;
  line-height: 1.4;
  text-transform: uppercase;
  white-space: nowrap;
}

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

.badge--accent {
  background: var(--c-accent-100);
  color: var(--c-accent-600);
}

.badge--dark {
  background: rgba(20, 18, 14, .72);
  color: #fff;
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}

.chip {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 40px;
  padding: 8px 16px;
  border: 1.5px solid var(--c-border);
  border-radius: var(--r-full);
  background: var(--c-surface);
  color: var(--c-text);
  font-family: var(--font-body);
  font-size: .9rem;
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
  cursor: pointer;
  text-decoration: none;
  user-select: none;
  transition:
    background-color var(--transition),
    border-color var(--transition),
    color var(--transition),
    box-shadow var(--transition);
}

.chip svg {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
}

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

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

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

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

@media (pointer: coarse) {
  .chip {
    min-height: 44px;
  }
}


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

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

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

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

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

.aspect-4x3 > img,
.aspect-16x9 > 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
   ========================================================================== */
.hero {
  position: relative;
  isolation: isolate;
  display: grid;
  place-items: center;
  min-height: clamp(520px, 80vh, 760px);
  min-height: clamp(520px, 80svh, 760px);
  padding-block: var(--space-8);
  overflow: hidden;
  background: var(--c-primary);
  color: var(--c-text-inverse);
  text-align: center;
}

.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;
}

.hero__overlay,
.page-hero__overlay {
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(180deg, rgba(20, 18, 14, .28) 0%, var(--c-overlay) 55%, rgba(20, 18, 14, .72) 100%);
  pointer-events: none;
}

.hero__content {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 720px;
  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);
  text-shadow: 0 2px 24px rgba(0, 0, 0, .3);
}

.hero p,
.hero .lead {
  color: rgba(255, 255, 255, .9);
  text-shadow: 0 1px 12px rgba(0, 0, 0, .3);
}

.hero .lead {
  margin-bottom: var(--space-6);
}

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

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

/* Inner page banner */
.page-hero {
  position: relative;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  min-height: 320px;
  padding-block: 96px 56px;
  overflow: hidden;
  background: var(--c-primary);
  color: var(--c-text-inverse);
}

.page-hero > .container {
  position: relative;
  z-index: 1;
}

.page-hero__title {
  margin: 0 0 var(--space-3);
  font-size: clamp(2rem, 4.5vw, 3.4rem);
  color: var(--c-text-inverse);
  text-shadow: 0 2px 20px rgba(0, 0, 0, .3);
}

.page-hero__subtitle {
  margin: 0;
  max-width: 62ch;
  font-size: 1.15rem;
  line-height: 1.55;
  color: rgba(255, 255, 255, .88);
  text-shadow: 0 1px 12px rgba(0, 0, 0, .3);
}

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

.page-hero .breadcrumbs {
  margin-bottom: var(--space-4);
}

.page-hero .cluster {
  margin-top: var(--space-5);
}


/* ==========================================================================
   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: 16px;
}

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

@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: .9rem;
  font-weight: 600;
  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: 44px;
  padding: 10px 14px;
  border: 1.5px solid var(--c-border);
  border-radius: var(--r-sm);
  background: var(--c-surface);
  color: var(--c-text);
  font: inherit;
  line-height: 1.4;
  transition: border-color var(--transition), box-shadow var(--transition);
}

.form__input::placeholder,
.form__textarea::placeholder {
  color: var(--c-text-muted);
  opacity: .7;
}

.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(194, 96, 31, .22);
}

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

.form__textarea {
  min-height: 140px;
  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='%2366605A' 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: .82rem;
  color: var(--c-text-muted);
}

.form__error,
.validation-message {
  font-size: .82rem;
  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(165, 78, 20, .22);
}

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

.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-2);
}


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

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

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

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

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

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

.section--dark .stat__label {
  color: rgba(255, 255, 255, .8);
}


/* ==========================================================================
   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: 32px;
  line-height: 1.5;
}

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

.check-list li::before {
  background-color: var(--c-primary-100);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231F3D2B' 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: 13px;
}

.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='%2366605A' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E");
  background-size: 11px;
}

.section--dark .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='%23FFFFFF' 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 {
  color: rgba(255, 255, 255, .7);
}

.section--dark .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: 12px;
  line-height: 1.5;
}

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


/* ==========================================================================
   13. Misc
   ========================================================================== */
/* Divider */
.divider {
  border: 0;
  height: 1px;
  margin-block: var(--space-6);
  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-primary);
  color: var(--c-text-inverse);
  font-weight: 600;
  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 var(--c-accent);
  outline-offset: 2px;
}

/* Rating stars — component sets --star-size on .stars (default 18px) */
.stars {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  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, 18px);
  height: var(--star-size, 18px);
}

.stars__star--empty,
.stars__star.is-empty,
.stars__star[data-filled="false"] {
  color: var(--c-border);
}

.stars__star--half,
.stars__star.is-half {
  opacity: .6;
}

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

/* Breadcrumbs */
.breadcrumbs {
  font-size: .85rem;
  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: .5;
}

.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);
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 60vw;
}

.page-hero .breadcrumbs,
.hero .breadcrumbs,
.section--dark .breadcrumbs {
  color: rgba(255, 255, 255, .78);
}

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

/* On photos and dark sections the hover colour must stay light (accent-700 is for light backgrounds). */
.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 margin keeps the text where it was,
   and the smaller gap under the trail in banners makes up for the taller links. */
@media (pointer: coarse) {
  .breadcrumbs a {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    padding-inline: 6px;
    margin-inline: -6px;
  }

  .page-hero .breadcrumbs {
    margin-bottom: var(--space-1);
  }
}

.page-hero .breadcrumbs a:hover,
.hero .breadcrumbs a:hover,
.section--dark .breadcrumbs a:hover {
  color: var(--c-accent-300);
}

/* Quote (review text) */
.quote {
  position: relative;
  margin: 0;
  padding-top: 30px;
  font-size: 1.05rem;
  line-height: 1.7;
  color: var(--c-text);
}

.quote::before {
  content: "\201C";
  position: absolute;
  top: -8px;
  left: -3px;
  font-family: var(--font-heading);
  font-size: 4.5rem;
  font-weight: 700;
  line-height: 1;
  color: var(--c-accent);
  opacity: .35;
  pointer-events: none;
}

.quote p {
  margin: 0;
}

.quote cite,
.quote__author {
  display: block;
  margin-top: var(--space-3);
  font-size: .9rem;
  font-style: normal;
  font-weight: 600;
  color: var(--c-text-muted);
}

.section--dark .quote {
  color: var(--c-text-inverse);
}

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

/* Inline text link with optional arrow icon */
.link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--c-accent-600);
  font-weight: 600;
  text-decoration: none;
  transition: color var(--transition);
}

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

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

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

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

/* Initials avatar (reviews / guides without a photo) */
.avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--c-primary-100);
  color: var(--c-primary);
  font-family: var(--font-heading);
  font-size: 1.25rem;
  font-weight: 700;
  flex-shrink: 0;
}

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


/* ==========================================================================
   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: #2A2622;
  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(194, 96, 31, .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__backdrop,
  .header__nav,
  .header__actions,
  .header__burger,
  .hero__overlay,
  .page-hero__overlay,
  .home-hero__scroll,
  .cta-banner__actions,
  .footer__social {
    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;
    -webkit-backdrop-filter: none !important;
    backdrop-filter: none !important;
  }

  /* Dark bands (CtaBanner, stats strips), footer, region legend, heroes */
  .section--dark,
  .footer,
  .regions-legend,
  .hero,
  .page-hero {
    background: none !important;
    color: #000 !important;
    box-shadow: none !important;
  }

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

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

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

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

  .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"],
  .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;
  }
}

/* ---- Page integration ------------------------------------------------------- */
/* On a tour page the booking UI already offers WhatsApp: the sticky booking card (.tour-booking, right-hand
   aside from 992px) and the sticky bottom bar (.tour-bar, below 992px). The floating WhatsApp button (.fab)
   would sit on top of either of them (bottom-right corner), so it is hidden on tour pages at every width.
   The "tour not found" state renders no .tour-booking, so the button stays there. */
body:has(.tour-bar) .fab,
body:has(.tour-page .tour-booking) .fab {
  display: none;
}
