/* Timm Rehmert Fotografie — applied design system (atelier).
   Self-hosted fonts + design-system tokens/base/components + site bridges.
   NOTE: fonts.css is linked directly in each page <head> (not @import'ed) to
   avoid a render-blocking request chain (styles.css -> fonts.css -> woff2). */

/* ============================================================
   COLORS — Luxury Portrait Atelier
   Offwhite paper · near-black ink · warm grey · one restrained
   warm-stone accent used sparingly. Light is the default theme;
   a dark variant is provided for full-bleed editorial moments.
   ============================================================ */

:root {
  /* — Base ramp (warm neutrals) — */
  --paper:      oklch(0.973 0.004 75);   /* warm offwhite, the page */
  --paper-2:    oklch(0.992 0.002 75);   /* raised card / near white */
  --stone-50:   oklch(0.945 0.005 72);   /* faint warm grey surface */
  --stone-100:  oklch(0.905 0.006 70);
  --stone-200:  oklch(0.855 0.006 68);   /* hairlines */
  --stone-300:  oklch(0.74 0.007 64);
  --stone-400:  oklch(0.60 0.007 60);    /* quiet text */
  --stone-500:  oklch(0.46 0.007 58);    /* muted text */
  --stone-700:  oklch(0.30 0.005 55);
  --ink:        oklch(0.195 0.004 60);   /* near-black, warm */
  --ink-true:   oklch(0.135 0.004 60);   /* deepest, for dark surfaces */

  /* — The one accent: warm stone / taupe. Restrained. — */
  --accent:     oklch(0.545 0.034 58);   /* warm taupe */
  --accent-soft:oklch(0.66 0.030 60);
  --accent-ink: oklch(0.975 0.004 80);   /* paper on accent */

  --danger:     oklch(0.52 0.16 28);

  /* — Semantic aliases (light, default) — */
  --canvas:     var(--paper);
  --surface:    var(--paper-2);
  --surface-2:  var(--stone-50);
  --surface-3:  var(--stone-100);
  --text:       var(--ink);
  --muted:      var(--stone-500);
  --quiet:      var(--stone-400);
  --line:       var(--stone-200);
  --link:       var(--accent);
  --on-image:   oklch(0.965 0.004 82);   /* text over darkened imagery */

  /* Imagery grade — warm, gently desaturated. Luxury, not clinical. */
  --img-filter: saturate(0.94) contrast(1.02); /* @kind other */
  --scrim:      linear-gradient(to top, rgba(20,18,16,0.72), rgba(20,18,16,0.06) 64%); /* @kind other */
}

[hidden] {
  display: none !important;
}

/* — Dark editorial theme (full-bleed sections, optional whole-page) — */
:root[data-theme='dark'] {
  --canvas:     var(--ink-true);
  --surface:    oklch(0.205 0.005 58);
  --surface-2:  oklch(0.255 0.006 58);
  --surface-3:  oklch(0.31 0.006 56);
  --text:       oklch(0.945 0.004 82);
  --muted:      oklch(0.78 0.006 70);
  --quiet:      oklch(0.64 0.006 65);
  --line:       oklch(0.34 0.006 58);
  --accent:     oklch(0.70 0.032 62);
  --accent-soft:oklch(0.78 0.028 64);
  --accent-ink: var(--ink-true);
  --link:       var(--accent-soft);
  --img-filter: saturate(0.92) contrast(1.05); /* @kind other */
}

/* ============================================================
   TYPOGRAPHY — Bodoni Moda display + Archivo sans
   Big, calm Didone headlines; quiet, letter-spaced sans for
   navigation, labels and body. Confident, never chatty.
   ============================================================ */

:root {
  /* Families */
  --font-display: 'Bodoni Moda', 'Bodoni 72', Didot, 'Didot LT STD', Georgia, serif;
  --font-brand:   'Bodoni Moda', 'Bodoni 72', Didot, Georgia, serif;
  --font-sans:    'Archivo', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-body:    var(--font-sans);

  /* Display scale — fluid, line-height tight for the Didone */
  --display-1: clamp(3.4rem, 8vw, 8rem);     /* @kind font */
  --display-2: clamp(2.6rem, 5.2vw, 5rem);   /* @kind font */
  --display-3: clamp(2.1rem, 3.6vw, 3.4rem); /* @kind font */
  --display-4: 1.6rem;                        /* @kind font */
  --serif-lede: clamp(1.35rem, 2.1vw, 1.85rem); /* @kind font */

  /* Body / UI scale (Archivo) */
  --text-lede: clamp(1.02rem, 1.4vw, 1.18rem); /* @kind font */
  --text-body: 1rem; /* @kind font */
  --text-sm:   0.86rem; /* @kind font */
  --text-xs:   0.72rem;          /* @kind font */

  /* Weights */
  --w-reg: 400;  /* @kind font */
  --w-med: 500;  /* @kind font */
  --w-semi: 600; /* @kind font */
  --w-bold: 700; /* @kind font */

  /* Letter-spacing */
  --track-display: -0.012em;     /* @kind font */
  --track-flat: 0;               /* @kind font */
  --track-label: 0.18em;         /* @kind font */
  --track-wide: 0.28em;          /* @kind font */

  /* Line-heights */
  --lh-display: 0.98; /* @kind font */
  --lh-tight: 1.12;   /* @kind font */
  --lh-body: 1.72;    /* @kind font */
}

/* ============================================================
   SPACING & LAYOUT
   Generous editorial rhythm. Lots of whitespace by design.
   ============================================================ */

:root {
  /* Spacing scale (px-ish, rem) */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;
  --space-7: 3rem;
  --space-8: 4.5rem;
  --space-9: 7rem;

  /* Layout */
  --max:     1440px;      /* content max width */
  /* Reading measures — three deliberate widths for body/lede/short text so
     copy blocks share one rhythm instead of ad-hoc ch/px values. */
  --measure:        68ch; /* long-form body copy */
  --measure-lede:   48ch; /* intro ledes / paragraphs under headings */
  --measure-narrow: 32ch; /* short serif ledes / section-head ledes */
  --gutter:  clamp(20px, 5vw, 72px); /* @kind spacing */
  --section: clamp(96px, 13vw, 184px);  /* @kind spacing — standard block rhythm */
  /* First block on a page needs extra top room to clear the fixed header.
     Used by page heroes and the legal pages so every page opens on the same
     rhythm instead of ad-hoc 200/230px values. */
  --section-top: clamp(132px, 15vw, 208px); /* @kind spacing */

  /* Form / control */
  --radius: 0;            /* square edges — atelier, not app */
  --radius-pill: 999px;
  --control-min: 48px;    /* min touch target */
  --line-w: 1px;
}

/* ============================================================
   MOTION & ELEVATION
   Slow, quiet fades. No bounce. Imagery breathes on hover.
   Shadows are almost absent — separation comes from hairlines
   and whitespace, not drop shadows.
   ============================================================ */

:root {
  /* Durations */
  --speed-fast: 180ms; /* @kind other */
  --speed: 280ms;      /* @kind other */
  --speed-slow: 700ms;     /* @kind other */
  --ease: cubic-bezier(0.22, 1, 0.36, 1);   /* @kind other */
  --ease-inout: cubic-bezier(0.65, 0, 0.35, 1); /* @kind other */

  /* Elevation — used very sparingly */
  --shadow-none: none;
  --shadow-card: 0 1px 0 color-mix(in srgb, var(--ink) 6%, transparent);
  --shadow-lift: 0 30px 70px -50px color-mix(in srgb, var(--ink) 60%, transparent);

  /* Hover image zoom amount */
  --img-zoom: 1.03; /* @kind other */
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}


/* ============================================================
   COMPATIBILITY ALIASES — token names the site's app-surface CSS
   (booking, admin, calendar) still references, mapped onto the
   design-system tokens so those surfaces inherit the new palette.
   ============================================================ */
:root {
  --hero-filter: var(--img-filter);
  --accent-2: var(--accent-soft);
  --accent-ink: var(--accent-ink);
  --grain-opacity: 0;
}

/* ============================================================
   BASE — resets, document defaults, primitives
   ============================================================ */

* { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--canvas);
  color: var(--text);
  font-family: var(--font-body);
  font-size: var(--text-body);
  line-height: var(--lh-body);
  font-weight: var(--w-reg);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

img { display: block; max-width: 100%; }

a { color: inherit; }

button, input, select, textarea { font: inherit; }

/* — Headings: the Didone display — */
h1, h2, h3, h4 {
  margin: 0;
  font-family: var(--font-display);
  font-weight: var(--w-reg);
  line-height: var(--lh-display);
  letter-spacing: var(--track-display);
  text-wrap: balance;
}
h1 { font-size: var(--display-2); }
h2 { font-size: var(--display-3); line-height: var(--lh-tight); }
h3 { font-size: var(--display-4); line-height: var(--lh-tight); letter-spacing: var(--track-flat); }

p { margin: 0; line-height: var(--lh-body); }

/* — Eyebrow: quiet uppercase label. Accent is NOT used here by
     default — restraint is the point. — */
.eyebrow {
  margin: 0 0 var(--space-4);
  color: var(--muted);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-semi);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
}

/* — Focus — */
:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}

/* — Accessibility helpers — */
.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.skip-link {
  position: fixed;
  top: 14px; left: 14px;
  z-index: 100;
  display: inline-flex;
  align-items: center;
  min-height: var(--control-min);
  padding: 0 18px;
  border: var(--line-w) solid var(--ink);
  background: var(--surface);
  color: var(--text);
  font-size: var(--text-xs);
  font-weight: var(--w-semi);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  text-decoration: none;
  transform: translateY(-160%);
  transition: transform var(--speed) var(--ease);
}
.skip-link:focus-visible { transform: translateY(0); }

/* ============================================================
   COMPONENTS — Timm Rehmert Fotografie
   Class-based styles consumed by the React primitives and UI kit.
   Square edges, hairline rules, generous whitespace, quiet motion.
   ============================================================ */

/* ---------- Buttons ---------- */
.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--control-min);
  padding: 13px 26px;
  border: var(--line-w) solid var(--ink);
  border-radius: var(--radius);
  background: transparent;
  color: var(--text);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-semi);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  text-decoration: none;
  cursor: pointer;
  transition: background var(--speed) var(--ease),
              color var(--speed) var(--ease),
              border-color var(--speed) var(--ease);
}
.button--primary {
  border-color: var(--ink);
  background: var(--ink);
  color: var(--paper);
}
.button--primary:hover {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--accent-ink);
}
.button--ghost:hover {
  border-color: var(--accent);
  color: var(--accent);
}
.button.on-hero {
  border-color: var(--on-image);
  color: var(--on-image);
}
.button.on-hero:hover {
  background: var(--on-image);
  border-color: var(--on-image);
  color: var(--ink);
}
.button--primary.on-hero {
  background: var(--on-image);
  border-color: var(--on-image);
  color: var(--ink);
}
.button--primary.on-hero:hover {
  background: transparent;
  color: var(--on-image);
}

/* Inline text link */
.text-link {
  display: inline-flex;
  align-items: center;
  min-height: var(--control-min);
  color: var(--link);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-semi);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  text-decoration: none;
  position: relative;
}
.text-link::after {
  content: '';
  position: absolute;
  left: 0; bottom: 12px;
  width: 0; height: 1px;
  background: currentColor;
  transition: width var(--speed) var(--ease);
}
.text-link:hover::after { width: 100%; }
.text-link.on-hero { color: var(--on-image); }

.actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 14px;
}

/* ---------- Site header / nav ---------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 20;
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 20px;
  padding: 22px var(--gutter);
  background: color-mix(in srgb, var(--canvas) 78%, transparent);
  backdrop-filter: blur(18px) saturate(1.1);
  border-bottom: var(--line-w) solid color-mix(in srgb, var(--line) 70%, transparent);
}
.site-header--flush { position: fixed; width: 100%; background: transparent; border-bottom-color: transparent; backdrop-filter: none; }
.site-header--flush .brand,
.site-header--flush .nav-link,
.site-header--flush .menu-toggle { color: var(--on-image); }

.brand {
  font-family: var(--font-brand);
  font-size: clamp(1.05rem, 1.6vw, 1.35rem);
  font-weight: var(--w-med);
  letter-spacing: var(--track-wide);
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
}
.brand small {
  display: block;
  margin-top: 2px;
  font-family: var(--font-sans);
  font-size: 0.56rem;
  font-weight: var(--w-med);
  letter-spacing: 0.34em;
  color: var(--quiet);
}

.main-nav {
  display: flex;
  flex-wrap: nowrap;
  justify-content: center;
  gap: 22px;
  min-width: 0;
}
.nav-link {
  color: var(--muted);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-med);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  transition: color var(--speed) var(--ease);
}
.nav-link:hover,
.nav-link[aria-current='page'] { color: var(--text); }
.site-header--flush .nav-link:hover { color: #fff; }

.header-end { display: flex; align-items: center; gap: 16px; justify-self: end; }

.theme-toggle {
  display: inline-grid;
  place-items: center;
  width: 44px; height: 44px;
  border: var(--line-w) solid var(--line);
  background: transparent;
  color: var(--text);
  font-size: 1.05rem;
  line-height: 1;
  cursor: pointer;
  transition: border-color var(--speed) var(--ease), color var(--speed) var(--ease);
}
.theme-toggle:hover { border-color: var(--accent); color: var(--accent); }
.site-header--flush .theme-toggle { border-color: color-mix(in srgb, var(--on-image) 55%, transparent); color: var(--on-image); }
.site-header--flush .theme-toggle:hover { border-color: var(--on-image); }

.menu-toggle {
  display: none;
  width: 44px; height: 44px;
  place-items: center;
  border: var(--line-w) solid var(--line);
  background: transparent;
  color: var(--text);
  cursor: pointer;
}

/* ---------- Hero (full-bleed portrait) ---------- */
.hero {
  position: relative;
  display: flex;
  align-items: center;
  min-height: 100svh;
  overflow: hidden;
}
.hero__media { position: absolute; inset: 0; background: var(--surface-2); }
.hero__media img { width: 100%; height: 100%; object-fit: cover; filter: var(--img-filter); }
.hero__media::after {
  content: '';
  position: absolute; inset: 0;
  background:
    linear-gradient(90deg, rgba(18,16,14,0.62), rgba(18,16,14,0.12) 58%, transparent),
    linear-gradient(to top, rgba(18,16,14,0.5), transparent 50%);
}
.hero__content {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: var(--max);
  margin: 0 auto;
  padding: clamp(120px,16vw,180px) var(--gutter) clamp(60px,9vw,110px);
}
.hero__inner { max-width: 760px; }
.hero h1, .hero .eyebrow, .hero p { color: var(--on-image); }
.hero .eyebrow { color: color-mix(in srgb, var(--on-image) 78%, transparent); }
.hero__wordmark {
  font-size: var(--display-1);
  line-height: 0.96;
  margin: 0 0 var(--space-5);
}
.hero__lede {
  max-width: var(--measure-lede);
  margin-bottom: var(--space-6);
  color: color-mix(in srgb, var(--on-image) 88%, transparent);
  font-size: var(--text-lede);
}
.hero--center { text-align: center; }
.hero--center .hero__media::after { background: linear-gradient(to top, rgba(18,16,14,0.66), rgba(18,16,14,0.18)); }
.hero--center .hero__inner { max-width: 920px; margin: 0 auto; }
.hero--center .hero__lede { margin-left: auto; margin-right: auto; }
.hero--center .actions { justify-content: center; }

/* ---------- Section / rhythm ---------- */
.section {
  max-width: var(--max);
  margin: 0 auto;
  padding: var(--section) var(--gutter);
}
.section--surface { max-width: none; margin: 0; background: var(--surface); }
.section--tint { max-width: none; margin: 0; background: var(--surface-2); }
.section--narrow > * { max-width: var(--measure); margin-inline: auto; }

.section-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 28px;
  margin-bottom: clamp(40px, 6vw, 72px);
}
.section-head__lede { max-width: var(--measure-narrow); }

.lede {
  max-width: var(--measure);
  color: var(--muted);
  font-size: var(--text-lede);
}
.serif-lede {
  max-width: var(--measure-narrow);
  font-family: var(--font-display);
  font-size: var(--serif-lede);
  line-height: 1.28;
  color: var(--text);
}

/* ---------- Filter bar ---------- */
.filterbar { display: flex; flex-wrap: wrap; gap: 26px; }
.filterbar button {
  border: 0;
  padding: 6px 0;
  background: transparent;
  color: var(--quiet);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-semi);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  cursor: pointer;
  position: relative;
  transition: color var(--speed) var(--ease);
}
.filterbar button::after {
  content: ''; position: absolute; left: 0; bottom: -2px;
  width: 0; height: 1px; background: var(--accent);
  transition: width var(--speed) var(--ease);
}
.filterbar button:hover { color: var(--text); }
.filterbar button[aria-pressed='true'] { color: var(--text); }
.filterbar button[aria-pressed='true']::after { width: 100%; }

/* ---------- Portfolio: large images, much whitespace ---------- */
.portfolio-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(24px, 4vw, 64px);
}
.portfolio-card {
  position: relative;
  margin: 0;
  overflow: hidden;
  background: var(--surface-2);
}
.portfolio-card__image {
  display: block;
  width: 100%;
  padding: 0;
  overflow: hidden;
  border: 0;
  background: transparent;
  cursor: zoom-in;
}
.portfolio-card__image > img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  filter: var(--img-filter);
  transition: transform var(--speed-slow) var(--ease);
}
.portfolio-card:hover .portfolio-card__image > img { transform: scale(var(--img-zoom)); }
.portfolio-card__image:focus-visible { outline-offset: -4px; }
.portfolio-card__body {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 18px;
  padding: 18px 2px 0;
}
.portfolio-card__body h3 { font-size: 1.45rem; }
.portfolio-card__meta {
  color: var(--quiet);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-med);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
}
/* Overlay caption variant (image-led) */
.portfolio-card--overlay .portfolio-card__image > img { aspect-ratio: 3 / 4; }
.portfolio-card--overlay .portfolio-card__body {
  position: absolute;
  inset: auto 0 0;
  padding: 26px;
  background: var(--scrim);
  color: var(--on-image);
  opacity: 0;
  transform: translateY(8px);
  transition: opacity var(--speed) var(--ease), transform var(--speed) var(--ease);
}
.portfolio-card--overlay:hover .portfolio-card__body { opacity: 1; transform: none; }
.portfolio-card--overlay .portfolio-card__meta { color: color-mix(in srgb, var(--on-image) 80%, transparent); }

/* Gallery layout — one large image at a time, shown whole (never cropped) */
.portfolio-grid--gallery {
  display: grid;
  gap: clamp(56px, 10vw, 150px);
  max-width: 1180px;
  margin-inline: auto;
  justify-items: center;
}
.portfolio-grid--gallery .portfolio-card {
  background: transparent;
  width: 100%;
  display: grid;
  justify-items: center;
}
.portfolio-grid--gallery .portfolio-card__image > img {
  width: auto;
  max-width: 100%;
  max-height: 82svh;
  aspect-ratio: auto;
  object-fit: contain;
}
.portfolio-grid--gallery .portfolio-card:hover .portfolio-card__image > img { transform: none; }
.portfolio-grid--gallery .portfolio-card__body {
  justify-content: center;
  text-align: center;
  gap: 10px;
  padding-top: 20px;
}

/* Editorial mosaic — a few featured frames, asymmetric */
.portfolio-grid--feature {
  grid-template-columns: repeat(12, 1fr);
  grid-auto-rows: 10px;
  gap: clamp(20px, 3vw, 44px);
}
.portfolio-grid--feature .portfolio-card { height: 100%; }
.portfolio-grid--feature .portfolio-card__image,
.portfolio-grid--feature .portfolio-card__image > img { height: 100%; }
.portfolio-grid--feature .portfolio-card__image > img { aspect-ratio: auto; }
.portfolio-grid--feature .portfolio-card:nth-child(1) { grid-column: 1 / 7; grid-row: span 46; }
.portfolio-grid--feature .portfolio-card:nth-child(2) { grid-column: 8 / 13; grid-row: span 34; align-self: center; }
.portfolio-grid--feature .portfolio-card:nth-child(3) { grid-column: 8 / 11; grid-row: span 30; }
.portfolio-grid--feature .portfolio-card:nth-child(4) { grid-column: 2 / 6; grid-row: span 30; }

/* ---------- Lightbox: native dialog, no client dependency ---------- */
.lightbox {
  width: 100%;
  max-width: none;
  height: 100%;
  max-height: none;
  margin: 0;
  padding: clamp(72px, 8vw, 112px) var(--gutter) clamp(28px, 5vw, 64px);
  border: 0;
  background: oklch(0.135 0.004 60 / 0.97);
  color: var(--on-image);
}
.lightbox[open] {
  display: flex;
  align-items: center;
  justify-content: center;
}
.lightbox::backdrop { background: oklch(0.135 0.004 60 / 0.9); }
.lightbox > img {
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}
.lightbox__close {
  position: absolute;
  top: clamp(18px, 3vw, 32px);
  right: var(--gutter);
}
.lightbox__close button {
  min-height: 44px;
  padding: 0;
  border: 0;
  background: transparent;
  color: inherit;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-semi);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  cursor: pointer;
}

/* ---------- Editorial split (image + copy) ---------- */
.editorial-split {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(40px, 7vw, 110px);
  align-items: center;
  max-width: var(--max);
  margin: 0 auto;
  padding: var(--section) var(--gutter);
}
.editorial-split > img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  filter: var(--img-filter);
}
.editorial-split--reverse > img { order: 2; }
.editorial-copy { display: grid; gap: var(--space-5); max-width: 46ch; }
.editorial-copy p { color: var(--muted); }
.editorial-copy h2 { margin-bottom: var(--space-2); }
.editorial-quote {
  margin: 0;
  padding-left: 22px;
  border-left: 1px solid var(--accent);
  font-family: var(--font-display);
  font-size: var(--serif-lede);
  line-height: 1.3;
  color: var(--text);
}

/* ---------- Feature / fact list ---------- */
.feature-list { display: grid; gap: 0; margin: var(--space-4) 0 0; padding: 0; list-style: none; }
.feature-list li {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 28px;
  padding: 18px 0;
  border-top: var(--line-w) solid var(--line);
  color: var(--muted);
}
.feature-list strong {
  color: var(--text);
  font-family: var(--font-display);
  font-size: 1.4rem;
  font-weight: var(--w-reg);
}

/* ---------- Divisions (services) ---------- */
.divisions { display: grid; gap: clamp(64px, 10vw, 150px); }
.division {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(36px, 6vw, 92px);
  align-items: center;
}
.division--lead { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); }
.division__media { display: block; overflow: hidden; text-decoration: none; }
.division__media img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  filter: var(--img-filter);
  transition: transform var(--speed-slow) var(--ease);
}
.division--lead .division__media img { aspect-ratio: 5 / 4; }
.division__media:hover img { transform: scale(var(--img-zoom)); }
.division__copy { display: grid; gap: var(--space-4); max-width: 44ch; }
.division__copy p { color: var(--muted); }
.division__copy .text-link { margin-top: var(--space-2); }

/* ---------- Pull quote ---------- */
.pull-quote {
  max-width: 1000px;
  margin: 0 auto;
  padding: var(--section) var(--gutter);
  text-align: center;
}
.pull-quote blockquote {
  margin: 0;
  font-family: var(--font-display);
  font-size: clamp(1.9rem, 3.8vw, 3.4rem);
  font-weight: var(--w-reg);
  line-height: 1.14;
  letter-spacing: var(--track-display);
  text-wrap: balance;
}
.pull-quote figcaption {
  margin-top: var(--space-6);
  color: var(--muted);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-semi);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
}

/* ---------- Contact CTA ---------- */
.contact-cta {
  display: grid;
  justify-items: center;
  gap: var(--space-6);
  max-width: none;
  text-align: center;
  background: var(--surface);
}
.contact-cta h2 { max-width: 18ch; font-size: var(--display-2); line-height: var(--lh-display); }

.final-cta {
  position: relative;
  display: grid;
  place-items: center;
  min-height: 70svh;
  padding: var(--section) var(--gutter);
  overflow: hidden;
  text-align: center;
}
.final-cta > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: var(--img-filter); }
.final-cta::after { content: ''; position: absolute; inset: 0; background: rgba(18,16,14,0.56); }
.final-cta__content { position: relative; z-index: 1; display: grid; justify-items: center; gap: var(--space-6); }
.final-cta h2 { max-width: 20ch; color: var(--on-image); font-size: var(--display-2); line-height: var(--lh-display); }
.final-cta .eyebrow { color: color-mix(in srgb, var(--on-image) 78%, transparent); }

/* ---------- Forms ---------- */
label {
  display: grid;
  gap: 8px;
  color: var(--muted);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-semi);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
}
input, select, textarea {
  width: 100%;
  border: 0;
  border-bottom: var(--line-w) solid var(--line);
  border-radius: var(--radius);
  padding: 12px 0;
  background: transparent;
  color: var(--text);
  font-family: var(--font-sans);
  font-weight: var(--w-reg);
  letter-spacing: 0;
  text-transform: none;
  transition: border-color var(--speed) var(--ease);
}
input::placeholder, textarea::placeholder { color: var(--quiet); }
input:focus, select:focus, textarea:focus { outline: none; border-bottom-color: var(--accent); }
textarea { resize: vertical; min-height: 120px; }
select option { background: var(--surface); color: var(--text); }
[aria-invalid='true'] { border-color: var(--danger) !important; }

.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }

.consent-line {
  display: grid;
  grid-template-columns: auto 1fr;
  align-items: start;
  gap: 12px;
  color: var(--muted);
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  font-weight: var(--w-reg);
  letter-spacing: 0;
  line-height: 1.55;
  text-transform: none;
}
.consent-line input { width: 18px; height: 18px; margin-top: 3px; accent-color: var(--accent); }
.consent-line a { color: var(--text); text-underline-offset: 3px; }
.form-note { min-height: 1.4em; margin: 0; color: var(--accent); font-size: var(--text-sm); }

.contact-form {
  display: grid;
  gap: 20px;
  padding: clamp(28px, 4vw, 48px);
  border: var(--line-w) solid var(--line);
  background: var(--surface);
}
.contact-form h2 { margin-bottom: var(--space-4); font-size: var(--display-3); }
.contact-form > div > p { color: var(--muted); }

/* ---------- Enquiry layout (form beside details) ---------- */
.enquiry-layout {
  display: grid;
  grid-template-columns: minmax(0, 0.82fr) minmax(340px, 1fr);
  gap: clamp(40px, 7vw, 96px);
  align-items: start;
  max-width: var(--max);
  margin: 0 auto;
}
@media (max-width: 900px) {
  .enquiry-layout { grid-template-columns: 1fr; }
}

/* ---------- Page hero (interior pages) ---------- */
.page-hero {
  display: grid;
  align-items: end;
  max-width: var(--max);
  margin: 0 auto;
  min-height: 60svh;
  padding: var(--section-top) var(--gutter) var(--section);
}
.page-hero__content { max-width: 22ch; }
.page-hero__content h1 { margin-bottom: var(--space-4); }
.page-hero__lede { max-width: var(--measure-lede); color: var(--muted); font-size: var(--text-lede); }
.page-hero--image { position: relative; max-width: none; overflow: hidden; }
.page-hero--image > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: var(--img-filter); }
.page-hero--image::after { content: ''; position: absolute; inset: 0; background: linear-gradient(to top, rgba(18,16,14,0.78), rgba(18,16,14,0.28)); }
.page-hero--image .page-hero__content { position: relative; z-index: 1; }
.page-hero--image .page-hero__content h1,
.page-hero--image .page-hero__lede,
.page-hero--image .eyebrow { color: var(--on-image); }

/* ---------- Footer ---------- */
.site-footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 38px var(--gutter);
  border-top: var(--line-w) solid var(--line);
  color: var(--muted);
}
.site-footer .brand { font-size: 1.1rem; }
.site-footer nav { display: flex; flex-wrap: wrap; gap: 22px; }
.site-footer a {
  color: var(--muted);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-med);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  text-decoration: none;
  transition: color var(--speed) var(--ease);
}
.site-footer a:hover { color: var(--text); }

/* ---------- Responsive ---------- */
@media (max-width: 900px) {
  .site-header { grid-template-columns: auto 1fr auto; }
  .main-nav { display: none; }
  .menu-toggle { display: inline-grid; }
  .editorial-split, .division, .division--lead { grid-template-columns: 1fr; }
  .editorial-split--reverse > img { order: 0; }
  .portfolio-grid { grid-template-columns: 1fr; }
  .portfolio-grid--feature { display: grid; grid-template-columns: 1fr; grid-auto-rows: auto; }
  .portfolio-grid--feature .portfolio-card:nth-child(n) { grid-column: 1 / -1; grid-row: auto; }
  .portfolio-grid--feature .portfolio-card__image > img { aspect-ratio: 4/5; }
  .form-grid { grid-template-columns: 1fr; }
  .section-head { flex-direction: column; align-items: flex-start; }
}


/* ============================================================
   SITE BRIDGES — adapt the design-system component CSS to the
   existing Astro markup where class names/structure differ.
   ============================================================ */

/* Header: the markup has four children (brand, nav, menu-toggle,
   theme-toggle) rather than the DS's three; widen the grid and style
   the nav anchors like .nav-link. */
.site-header { grid-template-columns: auto 1fr auto auto; }
.main-nav a {
  color: var(--muted);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--w-med);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  transition: color var(--speed) var(--ease);
}
.main-nav a:hover,
.main-nav a[aria-current='page'] { color: var(--text); }
.main-nav .nav-admin { border: var(--line-w) solid var(--line); padding: 8px 14px; }

/* Hero: the homepage hero is centered and carries .hero--wordmark. */
.hero--wordmark { text-align: center; }
.hero--wordmark .hero__content > * { max-width: 920px; margin-left: auto; margin-right: auto; }
.hero--wordmark .actions { justify-content: center; }
.hero--wordmark .hero__content > p:not(.eyebrow) {
  max-width: var(--measure-lede);
  color: color-mix(in srgb, var(--on-image) 88%, transparent);
  font-size: var(--text-lede);
}

/* Page hero: the PageHero markup uses a plain <p>, not .page-hero__lede. */
.page-hero__content > p:not(.eyebrow) {
  max-width: var(--measure);
  color: var(--muted);
  font-size: var(--text-lede);
}
.page-hero--image .page-hero__content > p:not(.eyebrow) { color: var(--on-image); }

/* Contact page uses .contact-layout; mirror the DS enquiry-layout. */
.contact-layout {
  display: grid;
  grid-template-columns: minmax(0, 0.82fr) minmax(340px, 1fr);
  gap: clamp(40px, 7vw, 96px);
  align-items: start;
  max-width: var(--max);
  margin: 0 auto;
  padding: var(--section) var(--gutter);
}

/* Honeypot stays hidden; numeric spam check sits inline. */
.hp-field { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* ============================================================
   APP SURFACES — booking, calendar, admin, philosophy band,
   contact aside. Carried over from the site and inheriting the
   new design-system tokens (palette, fonts, spacing).
   ============================================================ */

.main-nav .nav-admin {
  border: 1px solid color-mix(in srgb, var(--text) 70%, transparent);
  padding: 9px 14px;
  color: var(--text);
}

.main-nav .nav-admin:hover {
  border-color: var(--accent);
  color: var(--accent);
}

.hero__content > p:not(.eyebrow),
.intro > p,
.booking__copy > p,
.admin-hero p:not(.eyebrow) {
  max-width: var(--measure-lede);
  color: var(--muted);
  font-size: clamp(1rem, 1.4vw, 1.14rem);
}

.button,
.upload-button {
  position: relative;
  display: inline-flex;
  min-height: 44px;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 12px 18px;
  background: transparent;
  color: var(--text);
  cursor: pointer;
  font-size: 0.76rem;
  font-weight: 850;
  letter-spacing: 0.12em;
  text-decoration: none;
  text-transform: uppercase;
  transition:
    background var(--speed) ease,
    border-color var(--speed) ease,
    color var(--speed) ease;
}

.button--ghost:hover,
.upload-button:hover {
  border-color: var(--accent);
  color: var(--accent);
}

.admin-upload-controls {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: flex-end;
}

.admin-upload-controls input[type='text'] {
  min-width: 150px;
}

.admin-upload-notice {
  margin-top: 12px;
  color: var(--muted);
}

.replace-input {
  position: absolute;
  inline-size: 1px;
  block-size: 1px;
  opacity: 0;
}

/* Philosophy band */
.philosophy {
  display: grid;
  gap: clamp(44px, 6vw, 80px);
}

.philosophy__lede {
  max-width: 920px;
}

.philosophy__lede h2 {
  margin: 0 0 var(--space-5);
}

.philosophy__band {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(16px, 2.4vw, 34px);
}

.philosophy__frame {
  display: grid;
  gap: 18px;
  text-decoration: none;
  color: var(--text);
}

.philosophy__frame img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  background: var(--surface-2);
  filter: var(--hero-filter);
  transition: transform 600ms ease;
}

.philosophy__frame:hover img,
.philosophy__frame:focus-visible img {
  transform: scale(1.02);
}

.philosophy__caption {
  display: grid;
  gap: 4px;
  font-family: var(--font-display);
  font-size: 1.34rem;
}

.philosophy__caption .eyebrow {
  margin: 0;
}

.portfolio-section {
  max-width: none;
  background: var(--surface-2);
}

.portfolio-section > .section-head,
.portfolio-section > .portfolio-grid {
  max-width: var(--max);
  margin-right: auto;
  margin-left: auto;
}

.portfolio-section > .section-head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: start;
  gap: 34px;
  margin-bottom: clamp(56px, 8vw, 96px);
}

.portfolio-section .section-head h2 {
  max-width: 930px;
  font-size: var(--display-2);
  line-height: var(--lh-display);
}

.portfolio-section .filterbar {
  grid-column: 1 / -1;
  justify-content: flex-start;
  gap: 28px;
}

.portfolio-section .filterbar button {
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

.booking {
  display: grid;
  grid-template-columns: minmax(260px, 0.58fr) minmax(360px, 0.92fr);
  gap: clamp(32px, 7vw, 96px);
  border-top: 1px solid var(--line);
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--surface) 88%, transparent), transparent 44%),
    var(--canvas);
}

.booking__intro {
  grid-column: 1 / -1;
  max-width: 880px;
  margin: 0 auto clamp(8px, 3vw, 40px);
  text-align: center;
}

.booking__intro h2 {
  margin-bottom: var(--space-5);
  font-size: var(--display-2);
  line-height: var(--lh-display);
}

.booking__intro p:not(.eyebrow) {
  max-width: var(--measure-lede);
  margin-right: auto;
  margin-left: auto;
  color: var(--muted);
  font-size: clamp(1rem, 1.4vw, 1.16rem);
}

.booking__copy h3 {
  margin-bottom: var(--space-5);
  font-size: clamp(1.8rem, 3vw, 2.6rem);
}

.checklist {
  display: grid;
  gap: 10px;
  margin: 28px 0 0;
  padding: 0;
  color: var(--muted);
  list-style: none;
}

.checklist li::before {
  content: '';
  display: inline-block;
  width: 0.5rem;
  height: 1px;
  margin-right: 10px;
  background: var(--accent);
  vertical-align: middle;
}

.booking-form {
  display: grid;
  gap: 18px;
  border: 0;
  border-left: 1px solid var(--line);
  padding: clamp(8px, 2vw, 24px) 0 clamp(8px, 2vw, 24px) clamp(24px, 5vw, 64px);
  background: transparent;
}

.booking-planner {
  display: grid;
  gap: 18px;
  border-bottom: 1px solid var(--line);
  padding-bottom: 24px;
}

.planner-head,
.planner-slots__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}

.planner-head strong,
.planner-slots__head strong {
  font-family: var(--font-display);
  font-size: clamp(1.45rem, 3vw, 2.2rem);
  font-weight: 400;
}

.planner-arrows {
  display: flex;
  gap: 8px;
}

.planner-arrows button,
.calendar-day,
.slot-button {
  border: 1px solid var(--line);
  border-radius: 0;
  background: transparent;
  color: var(--text);
  cursor: pointer;
}

.planner-arrows button {
  display: grid;
  width: 38px;
  height: 38px;
  place-items: center;
  padding: 0;
}

.planner-weekdays,
.calendar-grid {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 6px;
}

.planner-weekdays span {
  color: var(--quiet);
  font-size: 0.64rem;
  font-weight: 800;
  letter-spacing: 0.12em;
  text-align: center;
  text-transform: uppercase;
}

.calendar-day {
  position: relative;
  min-height: 48px;
  padding: 6px;
  color: var(--muted);
  font-size: 0.82rem;
}

.calendar-day:hover,
.calendar-day.is-selected,
.slot-button:hover,
.slot-button.is-selected {
  border-color: var(--accent);
  color: var(--accent);
}

.calendar-day.is-range {
  border-color: color-mix(in srgb, var(--accent) 28%, var(--line));
  background: color-mix(in srgb, var(--accent) 8%, transparent);
  color: var(--text);
}

.calendar-day.is-checkin,
.calendar-day.is-checkout {
  background: color-mix(in srgb, var(--accent) 16%, transparent);
}

.calendar-day.is-unavailable,
.slot-button.is-unavailable {
  border-color: color-mix(in srgb, var(--line) 70%, transparent);
  color: color-mix(in srgb, var(--quiet) 62%, transparent);
  cursor: not-allowed;
}

.calendar-day.is-unavailable::before {
  background: var(--danger);
}

.calendar-day.is-today::after,
.calendar-day.has-block::before {
  position: absolute;
  right: 7px;
  bottom: 7px;
  width: 4px;
  height: 4px;
  content: '';
  background: var(--accent);
}

.calendar-day.has-block::before {
  right: auto;
  left: 7px;
  opacity: 0.7;
}

.calendar-day.is-muted {
  color: color-mix(in srgb, var(--quiet) 44%, transparent);
}

.planner-slots {
  display: grid;
  gap: 12px;
}

.slot-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}

.slot-button {
  display: grid;
  gap: 4px;
  min-height: 62px;
  padding: 11px 12px;
  text-align: left;
}

.slot-button span {
  color: var(--muted);
  font-size: 0.72rem;
}

.slot-button.is-selected span {
  color: var(--accent);
}

.planner-note {
  margin: 0;
  color: var(--quiet);
  font-size: 0.84rem;
}

.booking-summary {
  display: grid;
  gap: 5px;
  border-bottom: 1px solid var(--line);
  padding-bottom: 18px;
}

.booking-summary:empty {
  display: none;
}

.booking-summary span {
  color: var(--quiet);
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.booking-summary strong {
  color: var(--text);
  font-family: var(--font-display);
  font-size: 1.75rem;
  font-weight: 400;
}

.booking-summary p {
  margin: 0;
  color: var(--muted);
}

.editorial-copy p:not(.eyebrow),
.contact-aside p {
  color: var(--muted);
}

.contact-aside {
  display: grid;
  gap: 34px;
}

.contact-aside img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  filter: var(--hero-filter);
}

.contact-form-stack {
  display: grid;
  gap: clamp(28px, 4vw, 48px);
}

.spam-check {
  max-width: 260px;
}

.admin-shell {
  max-width: var(--max);
  margin: 0 auto;
  padding: clamp(48px, 7vw, 92px) var(--gutter);
}

.admin-hero {
  max-width: 920px;
  margin-bottom: 42px;
}

.stat-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px;
  margin-bottom: 62px;
}

.stat-card,
.admin-section {
  border: 1px solid var(--line);
  background: color-mix(in srgb, var(--surface) 88%, transparent);
}

.admin-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: 12px;
}

.stat-card {
  padding: 22px;
}

.stat-card span {
  color: var(--muted);
  font-size: 0.78rem;
  text-transform: uppercase;
}

.stat-card strong {
  display: block;
  margin-top: 8px;
  color: var(--accent);
  font-family: var(--font-display);
  font-size: 2.5rem;
  font-weight: 400;
}

.admin-section {
  margin-top: 24px;
  padding: clamp(18px, 3vw, 30px);
}

.admin-api-panel {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(280px, 0.8fr);
  gap: 24px;
  margin-bottom: 24px;
}

.admin-api-panel p {
  color: var(--muted);
}

.admin-api-controls {
  display: grid;
  gap: 12px;
}

.admin-api-controls label {
  display: grid;
  gap: 8px;
  color: var(--muted);
  font-size: 0.78rem;
  text-transform: uppercase;
}

.admin-api-controls input {
  min-height: 46px;
}

.admin-api-controls .admin-actions {
  justify-content: flex-start;
}

.admin-table-wrap {
  overflow-x: auto;
}

.admin-table {
  width: 100%;
  min-width: 800px;
  border-collapse: collapse;
}

.admin-table th,
.admin-table td {
  border-bottom: 1px solid var(--line);
  padding: 14px 12px;
  text-align: left;
  vertical-align: top;
}

.admin-table th {
  color: var(--muted);
  font-size: 0.72rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

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

.admin-portfolio article {
  border: 1px solid var(--line);
  overflow: hidden;
  background: var(--surface-2);
}

.admin-portfolio img {
  width: 100%;
  height: 190px;
  object-fit: cover;
}

.admin-portfolio div {
  padding: 14px;
}

.admin-card-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 12px;
  margin-top: 12px;
}

.admin-alt-preview {
  display: block;
  margin-top: 8px;
  color: var(--quiet);
  font-size: 0.78rem;
  line-height: 1.45;
}

.admin-upload-controls select {
  min-width: 170px;
}

/* Inline edit: the card widens to give the form room; labels use the global
   uppercase-label + input pattern. */
.admin-portfolio-card--editing {
  grid-column: span 2;
}
.admin-card-edit {
  display: grid;
  gap: 12px;
  padding: 14px;
}
.admin-card-edit .admin-card-actions {
  margin-top: 4px;
}

.upload-button input {
  position: absolute;
  inset: 0;
  opacity: 0;
  cursor: pointer;
}

.admin-toggle-list {
  display: grid;
  gap: 12px;
  margin-top: 22px;
}

.admin-toggle-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  border: 1px solid var(--line);
  padding: 16px;
  background: var(--surface-2);
}

.admin-toggle-row span {
  display: grid;
  gap: 4px;
}

.admin-toggle-row small {
  color: var(--muted);
  line-height: 1.5;
}

.admin-toggle-row input {
  width: 24px;
  min-width: 24px;
  height: 24px;
  accent-color: var(--accent);
}

.booking-disabled-notice {
  border: 1px solid var(--line);
  padding: clamp(22px, 4vw, 38px);
  background: var(--surface-2);
}

.booking-disabled-notice h2 {
  max-width: 12ch;
  margin-bottom: 16px;
  font-size: clamp(2.2rem, 5vw, 4.5rem);
}

.booking-disabled-notice p:not(.eyebrow) {
  max-width: var(--measure-lede);
  color: var(--muted);
  line-height: 1.75;
}

.two-columns {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 30px;
}

.price-editor-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 112px;
  gap: 12px;
  align-items: center;
  border-bottom: 1px solid var(--line);
  padding-bottom: 10px;
  color: var(--muted);
}

.price-editor-row input {
  min-height: 40px;
  text-align: right;
}

.admin-calendar {
  display: grid;
  gap: 14px;
}

.admin-calendar__head,
.admin-calendar__weekdays,
.admin-calendar__grid {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
}

.admin-calendar__head {
  grid-template-columns: 1fr auto;
  align-items: end;
  color: var(--muted);
}

.admin-calendar__head strong {
  color: var(--text);
  font-family: var(--font-display);
  font-size: clamp(1.8rem, 3vw, 3rem);
  font-weight: 400;
}

.admin-calendar__weekdays {
  color: var(--quiet);
  font-size: 0.72rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.admin-calendar__grid {
  border-top: 1px solid var(--line);
  border-left: 1px solid var(--line);
}

.admin-calendar__day {
  min-height: 86px;
  border-right: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  padding: 8px;
  color: var(--muted);
  background: color-mix(in srgb, var(--surface) 86%, transparent);
}

.admin-calendar__day span {
  display: block;
  margin-bottom: 8px;
  color: var(--text);
  font-size: 0.86rem;
}

.admin-calendar__day i {
  display: inline-flex;
  margin: 0 4px 4px 0;
  border: 1px solid var(--line);
  padding: 3px 5px;
  color: var(--accent);
  font-size: 0.68rem;
  font-style: normal;
}

.admin-calendar__day.is-muted {
  opacity: 0.46;
}

.admin-calendar__day.has-studio,
.admin-calendar__day.has-stay {
  background: color-mix(in srgb, var(--accent) 9%, var(--surface));
}

.admin-block-form {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr)) auto;
  gap: 12px;
  align-items: end;
  margin-top: 22px;
}

.admin-block-form label {
  display: grid;
  gap: 8px;
  color: var(--muted);
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.coming-soon-body {
  min-height: 100svh;
  overflow-x: hidden;
}

.coming-soon-shell {
  position: relative;
  min-height: 100svh;
  display: grid;
  grid-template-columns: minmax(320px, 0.84fr) minmax(420px, 1.16fr);
  gap: clamp(28px, 6vw, 92px);
  align-items: center;
  padding: clamp(24px, 5vw, 72px);
  background:
    linear-gradient(115deg, var(--canvas) 0 52%, color-mix(in srgb, var(--surface-2) 84%, var(--accent)) 52% 100%);
}

.coming-soon-shell::after {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-image:
    linear-gradient(color-mix(in srgb, var(--line) 30%, transparent) 1px, transparent 1px),
    linear-gradient(90deg, color-mix(in srgb, var(--line) 20%, transparent) 1px, transparent 1px);
  background-size: 72px 72px;
  mask-image: linear-gradient(to right, transparent, #000 22%, #000 72%, transparent);
  opacity: 0.22;
}

.coming-soon-copy,
.coming-soon-gallery {
  position: relative;
  z-index: 1;
}

.coming-soon-mark {
  display: inline-grid;
  place-items: center;
  width: 64px;
  height: 64px;
  margin-bottom: clamp(24px, 4vw, 44px);
  border: 1px solid var(--text);
  color: var(--text);
  font-family: var(--font-brand);
  font-size: 1.35rem;
}

.coming-soon-copy h1 {
  max-width: 8ch;
  margin: 0;
  font-family: var(--font-display);
  font-size: clamp(5.6rem, 13vw, 13rem);
  font-weight: 400;
  line-height: 0.78;
}

.coming-soon-copy > p:not(.eyebrow) {
  max-width: var(--measure-lede);
  margin: clamp(22px, 4vw, 42px) 0 0;
  color: var(--muted);
  font-size: clamp(1rem, 1.4vw, 1.2rem);
  line-height: 1.8;
}

.preview-form {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 12px;
  align-items: end;
  width: min(100%, 620px);
  margin-top: clamp(28px, 5vw, 56px);
}

.preview-form label {
  display: grid;
  gap: 8px;
  color: var(--muted);
  font-size: 0.76rem;
  font-weight: 850;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.preview-form .form-note {
  grid-column: 1 / -1;
  min-height: 1.4em;
}

.coming-soon-admin-link {
  display: inline-flex;
  margin-top: 20px;
  color: var(--quiet);
  font-size: 0.78rem;
  font-weight: 800;
  letter-spacing: 0.12em;
  text-decoration: none;
  text-transform: uppercase;
}

.coming-soon-admin-link:hover {
  color: var(--accent);
}

.coming-soon-grid {
  min-height: min(76svh, 820px);
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-template-rows: repeat(10, minmax(34px, 1fr));
  gap: clamp(10px, 1.5vw, 18px);
}

.coming-soon-frame {
  position: relative;
  min-height: 0;
  margin: 0;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--line) 82%, transparent);
  background: var(--surface);
}

.coming-soon-frame img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: var(--hero-filter);
  transition: transform 700ms cubic-bezier(0.22, 1, 0.36, 1);
}

.coming-soon-frame:hover img {
  transform: scale(1.035);
}

.coming-soon-frame figcaption {
  position: absolute;
  left: 12px;
  bottom: 10px;
  padding: 5px 8px;
  background: color-mix(in srgb, var(--canvas) 84%, transparent);
  color: var(--text);
  font-size: 0.68rem;
  font-weight: 850;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.coming-soon-frame--1 {
  grid-column: 2 / 8;
  grid-row: 1 / 7;
}

.coming-soon-frame--2 {
  grid-column: 8 / 13;
  grid-row: 2 / 6;
}

.coming-soon-frame--3 {
  grid-column: 1 / 5;
  grid-row: 7 / 11;
}

.coming-soon-frame--4 {
  grid-column: 5 / 11;
  grid-row: 6 / 11;
}

.coming-soon-frame--5 {
  grid-column: 11 / 13;
  grid-row: 7 / 10;
}

.coming-soon-frame--6 {
  grid-column: 9 / 13;
  grid-row: 1 / 3;
}

@media (max-width: 980px) {
  .booking,
  .coming-soon-shell,
  .two-columns,
  .division,
  .division--lead,
  .editorial-split,
  .admin-api-panel,
  .admin-block-form,
  .contact-layout {
    grid-template-columns: 1fr;
  }
  .portfolio-grid,
  .admin-portfolio,
  .stat-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .portfolio-section > .section-head {
    grid-template-columns: 1fr;
  }
  .booking-form {
    border-left: 0;
    padding-left: 0;
  }
  .coming-soon-shell {
    min-height: auto;
    background:
      linear-gradient(to bottom, var(--canvas) 0 48%, color-mix(in srgb, var(--surface-2) 86%, var(--accent)) 48% 100%);
  }
  .coming-soon-copy h1 {
    max-width: 10ch;
  }
  .coming-soon-grid {
    min-height: 520px;
  }
}

@media (max-width: 680px) {
  .portfolio-grid,
  .admin-portfolio,
  .stat-grid,
  .form-grid,
  .philosophy__band,
  .slot-grid {
    grid-template-columns: 1fr;
  }
  .preview-form {
    grid-template-columns: 1fr;
  }
  .coming-soon-shell {
    padding: 22px;
  }
  .coming-soon-copy h1 {
    font-size: clamp(4.2rem, 24vw, 7rem);
  }
  .coming-soon-grid {
    min-height: auto;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: none;
  }
  .coming-soon-frame,
  .coming-soon-frame:nth-child(n) {
    grid-column: auto;
    grid-row: auto;
    aspect-ratio: 4 / 5;
  }
  .coming-soon-frame:first-child {
    grid-column: 1 / -1;
    aspect-ratio: 16 / 10;
  }
}


/* ============================================================
   POLISH — header controls + gallery refinements
   ============================================================ */

/* Theme toggle: constrain the injected sun/moon SVG. */
.theme-toggle svg { width: 18px; height: 18px; display: block; }

/* Menu toggle: hamburger icon instead of the literal word "Menu". */
.menu-toggle { font-size: 0; color: var(--text); }
.menu-toggle::before {
  content: '';
  width: 19px;
  height: 12px;
  background: currentColor;
  clip-path: polygon(
    0 0, 100% 0, 100% 13%, 0 13%,
    0 44%, 100% 44%, 100% 57%, 0 57%,
    0 88%, 100% 88%, 100% 100%, 0 100%
  );
}
.site-header[data-menu-open='true'] .menu-toggle::before {
  clip-path: polygon(
    8% 0, 100% 78%, 92% 100%, 0 22%
  );
}

/* Full gallery: a calm responsive grid of consistent frames rather than
   one whole image per row (36 images would otherwise run very long). */
.portfolio-grid--gallery {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr));
  max-width: var(--max);
  margin-inline: auto;
  gap: clamp(18px, 2.6vw, 40px);
  justify-items: stretch;
}
.portfolio-grid--gallery .portfolio-card {
  width: 100%;
  display: block;
  background: var(--surface-2);
}
.portfolio-grid--gallery .portfolio-card__image > img {
  width: 100%;
  aspect-ratio: 4 / 5;
  max-height: none;
  object-fit: cover;
}
.portfolio-grid--gallery .portfolio-card:hover .portfolio-card__image > img { transform: scale(var(--img-zoom)); }
.portfolio-grid--gallery .portfolio-card__body {
  justify-content: space-between;
  text-align: left;
  padding: 16px 2px 0;
}

/* ============================================================
   TEXT WIDTHS — the design system caps heading containers in `ch`,
   but ch is measured against the small body font (~9px), so long
   Didone page titles were crammed to one word per line. Cap the
   headings by their OWN font instead and give the container room.
   ============================================================ */

.page-hero__content { max-width: min(100%, 52rem); }
.page-hero__content h1 { max-width: 18ch; }          /* 18ch of the display font */
.page-hero--image .page-hero__content { max-width: min(100%, 60rem); }

/* Editorial split / division copy: widen the column so the heading
   above the body text isn't pinched (body stays within a readable measure). */
.editorial-copy { max-width: 34rem; }
.editorial-copy h2 { max-width: 16ch; }
.division__copy { max-width: 32rem; }
.division__copy h2 { max-width: 14ch; }
.division--lead .division__copy h2 { max-width: 18ch; }

/* Homepage philosophy lede + section heads: keep long sentence headings
   from over-narrowing. */
.philosophy__lede h2 { max-width: 22ch; }

/* ============================================================
   FIXES — mobile navigation + legal pages
   ============================================================ */

/* Mobile menu: the design system hides .main-nav under 900px and shows the
   hamburger, but dropped the open-state rule, so tapping it did nothing.
   Restore the dropdown panel. */
@media (max-width: 900px) {
  .site-header[data-menu-open='true'] .main-nav {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    grid-column: 1 / -1;
    grid-row: 2;
    width: 100%;
    margin-top: 16px;
    padding-top: 16px;
    border-top: var(--line-w) solid var(--line);
  }
  .site-header[data-menu-open='true'] .main-nav a {
    padding: 11px 0;
    font-size: var(--text-sm);
    letter-spacing: var(--track-label);
  }
}

/* Legal pages (Impressum, Datenschutz): the content sits directly in
   <main class="legal-page"> with no section wrapper — give it a readable
   measure, header clearance and heading rhythm. */
.legal-page {
  display: grid;
  gap: var(--space-4);
  max-width: 70ch;
  margin: 0 auto;
  padding: var(--section-top) var(--gutter) var(--section);
}
.legal-page h1 { font-size: var(--display-2); margin-bottom: var(--space-4); }
.legal-page h2 {
  margin-top: var(--space-6);
  font-size: var(--display-4);
  letter-spacing: var(--track-flat);
}
.legal-page p { color: var(--muted); line-height: var(--lh-body); }
.legal-page a { color: var(--link); text-underline-offset: 3px; }

/* Mobile menu close icon: a clean X instead of a single diagonal bar. */
.site-header[data-menu-open='true'] .menu-toggle { position: relative; }
.site-header[data-menu-open='true'] .menu-toggle::before,
.site-header[data-menu-open='true'] .menu-toggle::after {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 19px;
  height: 1.5px;
  background: currentColor;
  clip-path: none;
}
.site-header[data-menu-open='true'] .menu-toggle::before { transform: translate(-50%, -50%) rotate(45deg); }
.site-header[data-menu-open='true'] .menu-toggle::after { content: ''; transform: translate(-50%, -50%) rotate(-45deg); }
