:root {
  --pl-ink: #14110d;
  --pl-ink-soft: #221c16;
  --pl-charcoal: #2c261e;
  --pl-slate: #4a453d;
  --pl-clay: #6b6559;
  --pl-ivory: #fbf7ee;
  --pl-cream: #f2ead9;
  --pl-paper: #ede3ce;
  --pl-gold: #c8a35a;
  --pl-gold-deep: #a6823c;
  --pl-gold-light: #e0c48f;
  --pl-terracotta: #b06a4a;
  --pl-sage: #5c6b52;
  --pl-danger: #8f2a2a;

  --pl-line: rgba(20, 17, 13, 0.12);
  --pl-line-strong: rgba(20, 17, 13, 0.22);
  --pl-line-light: rgba(246, 241, 231, 0.16);

  --pl-shadow-sm: 0 3px 12px rgba(20, 17, 13, 0.08);
  --pl-shadow-md: 0 16px 38px rgba(20, 17, 13, 0.14);
  --pl-shadow-lg: 0 32px 66px rgba(20, 17, 13, 0.22);

  --pl-radius-sm: 4px;
  --pl-radius-md: 12px;
  --pl-radius-lg: 24px;
  --pl-radius-pill: 999px;

  --pl-font-serif: 'Cormorant Garamond', 'Playfair Display', Georgia, 'Times New Roman', serif;
  --pl-font-sans: 'Inter', 'Helvetica Neue', Arial, sans-serif;
  --pl-font-mono: 'IBM Plex Mono', 'Courier New', monospace;

  --pl-container: 1200px;
  --pl-gutter: clamp(20px, 4vw, 48px);
  --pl-section-y: clamp(64px, 9vw, 132px);

  --pl-nav-h: 82px;
  --pl-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
}

html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  font-family: var(--pl-font-sans);
  font-size: 1rem;
  line-height: 1.65;
  color: var(--pl-ink);
  background-color: var(--pl-ivory);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}

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

a {
  color: var(--pl-gold-deep);
  text-decoration: none;
  transition: color 0.2s var(--pl-ease);
}

a:hover,
a:focus {
  color: var(--pl-ink);
}

h1, h2, h3, h4, h5, h6 {
  font-family: var(--pl-font-serif);
  font-weight: 500;
  line-height: 1.15;
  letter-spacing: -0.01em;
  color: var(--pl-ink);
  margin: 0 0 0.6em;
}

h1 { font-size: clamp(2.4rem, 5.4vw, 4.4rem); }
h2 { font-size: clamp(1.9rem, 3.6vw, 3rem); }
h3 { font-size: clamp(1.4rem, 2.2vw, 1.9rem); }
h4 { font-size: clamp(1.15rem, 1.6vw, 1.35rem); }

p {
  margin: 0 0 1.1em;
  color: var(--pl-slate);
}

strong { color: var(--pl-ink); font-weight: 600; }

::selection {
  background: var(--pl-gold);
  color: var(--pl-ink);
}

.container,
.container-fluid {
  padding-left: var(--pl-gutter);
  padding-right: var(--pl-gutter);
}

.section {
  position: relative;
  padding-block: var(--pl-section-y);
}

.section--tight {
  padding-block: clamp(40px, 6vw, 80px);
}

.section--dark {
  background-color: var(--pl-ink);
  color: var(--pl-cream);
}

.section--dark h1,
.section--dark h2,
.section--dark h3,
.section--dark h4 {
  color: var(--pl-ivory);
}

.section--dark p {
  color: #d8cfbe;
}

.section--cream {
  background-color: var(--pl-cream);
}

.section--paper {
  background-color: var(--pl-paper);
}

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--pl-font-sans);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--pl-gold-deep);
  margin-bottom: 18px;
}

.eyebrow::before {
  content: "";
  display: inline-block;
  width: 26px;
  height: 1px;
  background: var(--pl-gold);
}

.section--dark .eyebrow {
  color: var(--pl-gold-light);
}

.lead-serif {
  font-family: var(--pl-font-serif);
  font-size: clamp(1.15rem, 1.7vw, 1.45rem);
  line-height: 1.55;
  color: var(--pl-ink-soft);
}

.section--dark .lead-serif {
  color: var(--pl-cream);
}

.display-title {
  font-family: var(--pl-font-serif);
  font-weight: 500;
  letter-spacing: -0.02em;
}

.divider {
  width: 64px;
  height: 2px;
  background: linear-gradient(90deg, var(--pl-gold), transparent);
  border: 0;
  margin: 22px 0;
}

.btn-brand {
  --bs-btn-color: var(--pl-ink);
  --bs-btn-bg: var(--pl-gold);
  --bs-btn-border-color: var(--pl-gold);
  --bs-btn-hover-color: var(--pl-ivory);
  --bs-btn-hover-bg: var(--pl-gold-deep);
  --bs-btn-hover-border-color: var(--pl-gold-deep);
  --bs-btn-active-bg: #8e6e30;
  --bs-btn-active-border-color: #8e6e30;
  --bs-btn-focus-shadow-rgb: 200, 163, 90;
  border-radius: var(--pl-radius-pill);
  font-family: var(--pl-font-sans);
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  font-size: 0.82rem;
  padding: 14px 30px;
  transition: transform 0.2s var(--pl-ease), box-shadow 0.2s var(--pl-ease), background 0.2s var(--pl-ease);
}

.btn-brand:hover {
  transform: translateY(-1px);
  box-shadow: 0 14px 28px rgba(166, 130, 60, 0.3);
}

.btn-outline-brand {
  --bs-btn-color: var(--pl-ink);
  --bs-btn-border-color: var(--pl-ink);
  --bs-btn-hover-color: var(--pl-ivory);
  --bs-btn-hover-bg: var(--pl-ink);
  --bs-btn-hover-border-color: var(--pl-ink);
  --bs-btn-active-bg: var(--pl-ink);
  --bs-btn-active-border-color: var(--pl-ink);
  border-radius: var(--pl-radius-pill);
  font-family: var(--pl-font-sans);
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  font-size: 0.82rem;
  padding: 13px 28px;
  border-width: 1.5px;
}

.btn-outline-light.pl-outline {
  --bs-btn-color: var(--pl-ivory);
  --bs-btn-border-color: rgba(246, 241, 231, 0.55);
  --bs-btn-hover-color: var(--pl-ink);
  --bs-btn-hover-bg: var(--pl-ivory);
  --bs-btn-hover-border-color: var(--pl-ivory);
  border-radius: var(--pl-radius-pill);
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  font-size: 0.82rem;
  padding: 13px 28px;
}

.badge-gold {
  display: inline-block;
  background: linear-gradient(120deg, var(--pl-gold), var(--pl-gold-light));
  color: var(--pl-ink);
  border-radius: var(--pl-radius-pill);
  padding: 6px 16px;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

.site-header {
  position: sticky;
  top: 0;
  z-index: 1040;
  background: rgba(251, 247, 238, 0.9);
  backdrop-filter: saturate(160%) blur(14px);
  -webkit-backdrop-filter: saturate(160%) blur(14px);
  border-bottom: 1px solid var(--pl-line);
  transition: background 0.3s var(--pl-ease), box-shadow 0.3s var(--pl-ease), padding 0.3s var(--pl-ease);
}

.site-header.is-scrolled {
  background: rgba(251, 247, 238, 0.97);
  box-shadow: var(--pl-shadow-sm);
}

.site-header .navbar {
  padding-block: 14px;
}

.site-header .navbar-brand {
  font-family: var(--pl-font-serif);
  font-size: 1.45rem;
  letter-spacing: 0.02em;
  color: var(--pl-ink);
  display: inline-flex;
  align-items: center;
  gap: 12px;
}

.site-header .nav-link {
  color: var(--pl-ink-soft);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 8px 14px;
  position: relative;
}

.site-header .nav-link::after {
  content: "";
  position: absolute;
  left: 14px;
  right: 14px;
  bottom: 2px;
  height: 1px;
  background: var(--pl-gold);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.3s var(--pl-ease);
}

.site-header .nav-link:hover,
.site-header .nav-link:focus,
.site-header .nav-link.active {
  color: var(--pl-gold-deep);
}

.site-header .nav-link:hover::after,
.site-header .nav-link:focus::after,
.site-header .nav-link.active::after {
  transform: scaleX(1);
}

.site-header .navbar-toggler {
  border: 1px solid var(--pl-line-strong);
  border-radius: var(--pl-radius-sm);
  padding: 8px 12px;
  color: var(--pl-ink);
}

.site-header .navbar-toggler:focus {
  box-shadow: 0 0 0 3px rgba(200, 163, 90, 0.35);
}

.header-meta {
  font-size: 0.8rem;
  color: var(--pl-clay);
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.header-meta i {
  color: var(--pl-gold-deep);
}

.site-header .nav-mobile-panel.is-open {
  display: block;
}

.page-hero {
  position: relative;
  min-height: 78vh;
  display: flex;
  align-items: center;
  background-color: var(--pl-ink);
  background-size: cover;
  background-position: center;
  color: var(--pl-ivory);
  overflow: hidden;
}

.page-hero--compact {
  min-height: 52vh;
}

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

.page-hero h1,
.page-hero .display-title {
  color: var(--pl-ivory);
}

.page-hero p {
  color: #e6dcc8;
  max-width: 620px;
}

.hero-figure {
  position: relative;
  border-radius: var(--pl-radius-lg);
  overflow: hidden;
  box-shadow: var(--pl-shadow-lg);
}

.hero-figure img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  aspect-ratio: 4 / 5;
}

.hero-stat {
  display: flex;
  align-items: baseline;
  gap: 12px;
  border-top: 1px solid rgba(246, 241, 231, 0.2);
  padding-top: 16px;
}

.hero-stat .hero-stat__num {
  font-family: var(--pl-font-serif);
  font-size: clamp(1.8rem, 3vw, 2.6rem);
  color: var(--pl-gold-light);
  line-height: 1;
}

.hero-stat .hero-stat__label {
  font-size: 0.78rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #c8bdab;
}

.scroll-cue {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-size: 0.72rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: #c8bdab;
}

.scroll-cue i {
  color: var(--pl-gold);
}

.card-room {
  background: #ffffff;
  border-radius: var(--pl-radius-lg);
  overflow: hidden;
  border: 1px solid var(--pl-line);
  box-shadow: var(--pl-shadow-sm);
  transition: transform 0.35s var(--pl-ease), box-shadow 0.35s var(--pl-ease);
  height: 100%;
  display: flex;
  flex-direction: column;
}

.card-room:hover {
  transform: translateY(-4px);
  box-shadow: var(--pl-shadow-md);
}

.card-room .card-media {
  position: relative;
  aspect-ratio: 4 / 3;
  overflow: hidden;
}

.card-room .card-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s var(--pl-ease);
}

.card-room:hover .card-media img {
  transform: scale(1.04);
}

.card-room .card-media .card-tag {
  position: absolute;
  top: 16px;
  left: 16px;
  background: rgba(20, 17, 13, 0.78);
  color: var(--pl-ivory);
  font-size: 0.68rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  padding: 6px 12px;
  border-radius: var(--pl-radius-pill);
}

.card-room .card-body {
  padding: 26px 26px 28px;
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
}

.card-room .card-body h3 {
  margin-bottom: 0.4em;
}

.card-room .card-meta {
  list-style: none;
  padding: 0;
  margin: 0 0 18px;
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
  font-size: 0.82rem;
  color: var(--pl-clay);
}

.card-room .card-meta i {
  color: var(--pl-gold-deep);
  margin-right: 6px;
}

.card-room .card-price {
  margin-top: auto;
  padding-top: 18px;
  border-top: 1px solid var(--pl-line);
  display: flex;
  align-items: baseline;
  justify-content: space-between;
}

.card-room .card-price .amount {
  font-family: var(--pl-font-serif);
  font-size: 1.5rem;
  color: var(--pl-ink);
}

.card-room .card-price .unit {
  font-size: 0.78rem;
  color: var(--pl-clay);
  letter-spacing: 0.05em;
}

.card-feature {
  padding: 34px 30px;
  background: #ffffff;
  border: 1px solid var(--pl-line);
  border-radius: var(--pl-radius-md);
  height: 100%;
  transition: border-color 0.3s var(--pl-ease), transform 0.3s var(--pl-ease);
}

.card-feature:hover {
  border-color: var(--pl-gold);
  transform: translateY(-3px);
}

.card-feature .feature-icon {
  width: 54px;
  height: 54px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: linear-gradient(140deg, var(--pl-gold-light), var(--pl-gold));
  color: var(--pl-ink);
  font-size: 1.2rem;
  margin-bottom: 20px;
}

.card-feature h3 {
  font-size: 1.35rem;
  margin-bottom: 0.5em;
}

.card-feature p {
  margin-bottom: 0;
  font-size: 0.96rem;
}

.card-stat {
  background: var(--pl-ink);
  color: var(--pl-cream);
  border-radius: var(--pl-radius-md);
  padding: 30px 28px;
  border-left: 3px solid var(--pl-gold);

  height: 100%;
}

.card-stat .stat-num {
  font-family: var(--pl-font-serif);
  font-size: clamp(2rem, 3.4vw, 2.8rem);
  line-height: 1;
  color: var(--pl-gold-light);
  margin-bottom: 10px;
}

.card-stat p {
  margin: 0;
  font-size: 0.9rem;
  color: #d8cfbe;
  letter-spacing: 0.04em;
}

.card-testimonial {
  background: #ffffff;
  border-radius: var(--pl-radius-md);
  padding: 36px 32px;
  border: 1px solid var(--pl-line);
  height: 100%;
  position: relative;
}

.card-testimonial::before {
  content: "\201C";
  position: absolute;
  top: 12px;
  right: 28px;
  font-family: var(--pl-font-serif);
  font-size: 5rem;
  line-height: 1;
  color: rgba(200, 163, 90, 0.22);
}

.card-testimonial blockquote {
  margin: 0 0 22px;
  font-family: var(--pl-font-serif);
  font-size: 1.15rem;
  line-height: 1.55;
  color: var(--pl-ink-soft);
}

.testimonial-person {
  display: flex;
  align-items: center;
  gap: 14px;
}

.testimonial-person img {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid var(--pl-gold);
}

.testimonial-person .person-name {
  font-weight: 600;
  font-size: 0.95rem;
  color: var(--pl-ink);
  margin: 0;
}

.testimonial-person .person-role {
  font-size: 0.78rem;
  color: var(--pl-clay);
  margin: 0;
  letter-spacing: 0.04em;
}

.stars {
  display: inline-flex;
  gap: 3px;
  color: var(--pl-gold);
  font-size: 0.85rem;
  margin-bottom: 14px;
}

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

.gallery-grid .gallery-tile {
  position: relative;
  overflow: hidden;
  border-radius: var(--pl-radius-md);
  aspect-ratio: 1 / 1;
  cursor: pointer;
}

.gallery-grid .gallery-tile img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.7s var(--pl-ease);
}

.gallery-grid .gallery-tile:hover img {
  transform: scale(1.06);
}

.gallery-grid .gallery-tile.tall {
  grid-row: span 2;
  aspect-ratio: 1 / 2;
}

.gallery-grid .gallery-tile.wide {
  grid-column: span 2;
  aspect-ratio: 2 / 1;
}

.process-list {
  list-style: none;
  padding: 0;
  margin: 0;
  counter-reset: pl-step;
}

.process-list li {
  counter-increment: pl-step;
  position: relative;
  padding: 22px 0 22px 68px;
  border-bottom: 1px solid var(--pl-line);
}

.process-list li::before {
  content: counter(pl-step, decimal-leading-zero);
  position: absolute;
  left: 0;
  top: 20px;
  font-family: var(--pl-font-serif);
  font-size: 1.5rem;
  font-weight: 500;
  color: var(--pl-gold-deep);
}

.process-list li:last-child {
  border-bottom: 0;
}

.process-list strong {
  display: block;
  font-family: var(--pl-font-serif);
  font-size: 1.15rem;
  color: var(--pl-ink);
  margin-bottom: 4px;
}

.section--dark .process-list li {
  border-color: var(--pl-line-light);
}

.section--dark .process-list strong {
  color: var(--pl-ivory);
}

.cta-band {
  position: relative;
  padding-block: clamp(64px, 8vw, 108px);
  background-color: var(--pl-ink);
  background-size: cover;
  background-position: center;
  color: var(--pl-ivory);
  text-align: center;
}

.cta-band h2 {
  color: var(--pl-ivory);
  max-width: 720px;
  margin-inline: auto;
}

.cta-band p {
  color: #e0d6c1;
  max-width: 580px;
  margin-inline: auto;
  margin-bottom: 28px;
}

.form-lux {
  background: #ffffff;
  border: 1px solid var(--pl-line);
  border-radius: var(--pl-radius-lg);
  padding: clamp(28px, 4vw, 46px);
  box-shadow: var(--pl-shadow-sm);
}

.form-lux .form-label {
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--pl-clay);
  margin-bottom: 8px;
}

.form-lux .form-control,
.form-lux .form-select {
  border: 1px solid var(--pl-line-strong);
  border-radius: var(--pl-radius-sm);
  padding: 12px 16px;
  color: var(--pl-ink);
  background-color: var(--pl-ivory);
  font-size: 0.98rem;
  transition: border-color 0.2s var(--pl-ease), background 0.2s var(--pl-ease), box-shadow 0.2s var(--pl-ease);
}

.form-lux .form-control::placeholder {
  color: #9a9384;
}

.form-lux .form-control:focus,
.form-lux .form-select:focus {
  border-color: var(--pl-gold);
  background-color: #ffffff;
  box-shadow: 0 0 0 3px rgba(200, 163, 90, 0.24);
  outline: none;
}

.form-lux .form-control.is-invalid,
.form-lux .form-select.is-invalid {
  border-color: var(--pl-danger);
  box-shadow: 0 0 0 3px rgba(143, 42, 42, 0.15);
}

.form-lux textarea.form-control {
  min-height: 130px;
  resize: vertical;
}

.form-lux .form-check-input:checked {
  background-color: var(--pl-gold-deep);
  border-color: var(--pl-gold-deep);
}

.form-lux .form-text {
  color: var(--pl-clay);
  font-size: 0.8rem;
}

.contact-panel {
  background: var(--pl-ink);
  color: var(--pl-cream);
  border-radius: var(--pl-radius-lg);
  padding: clamp(28px, 4vw, 46px);
  height: 100%;
}

.contact-panel h3 {
  color: var(--pl-ivory);
}

.contact-panel a {
  color: var(--pl-gold-light);
}

.contact-panel a:hover {
  color: var(--pl-ivory);
}

.contact-line {
  display: flex;
  gap: 14px;
  align-items: flex-start;
  padding: 16px 0;
  border-top: 1px solid rgba(246, 241, 231, 0.14);
}

.contact-line:first-of-type {
  border-top: 0;
}

.contact-line i {
  color: var(--pl-gold-light);
  font-size: 1rem;
  margin-top: 4px;
}

.contact-line .label {
  display: block;
  font-size: 0.72rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #b8ae9b;
  margin-bottom: 3px;
}

.map-embed {
  border-radius: var(--pl-radius-lg);
  overflow: hidden;
  box-shadow: var(--pl-shadow-sm);
  border: 1px solid var(--pl-line);
  aspect-ratio: 16 / 10;
}

.map-embed iframe {
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}

.faq-list {
  max-width: 820px;
  margin-inline: auto;
}

.faq-list .accordion-item {
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--pl-line);
}

.faq-list .accordion-button {
  background: transparent;
  padding: 22px 0;
  font-family: var(--pl-font-serif);
  font-size: 1.2rem;
  color: var(--pl-ink);
  box-shadow: none;
}

.faq-list .accordion-button:not(.collapsed) {
  color: var(--pl-gold-deep);
  background: transparent;
}

.faq-list .accordion-button::after {
  background-image: none;
  content: "\2b";
  font-family: "Font Awesome 6 Free";
  font-weight: 900;
  font-size: 0.9rem;
  color: var(--pl-gold-deep);
  transition: transform 0.3s var(--pl-ease);
}

.faq-list .accordion-button:not(.collapsed)::after {
  content: "\f068";
  transform: none;
}

.faq-list .accordion-body {
  padding: 0 0 24px;
  color: var(--pl-slate);
  font-size: 0.98rem;
}

.site-footer {
  background: var(--pl-ink);
  color: #c8bdab;
  padding-top: clamp(56px, 7vw, 92px);
}

.site-footer h4 {
  color: var(--pl-ivory);
  font-size: 1.15rem;
  margin-bottom: 20px;
}

.site-footer a {
  color: #c8bdab;
}

.site-footer a:hover {
  color: var(--pl-gold-light);
}

.footer-links {
  list-style: none;
  padding: 0;
  margin: 0;
}

.footer-links li {
  margin-bottom: 10px;
  font-size: 0.92rem;
}

.footer-columns {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1.2fr;
  gap: 40px;
}

.footer-brand img {
  margin-bottom: 18px;
}

.footer-brand p {
  color: #b8ae9b;
  font-size: 0.92rem;
  max-width: 320px;
}

.footer-social {
  display: inline-flex;
  gap: 10px;
  margin-top: 16px;
}

.footer-social a {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  border: 1px solid rgba(246, 241, 231, 0.2);
  color: var(--pl-cream);
  transition: background 0.2s var(--pl-ease), color 0.2s var(--pl-ease), border-color 0.2s var(--pl-ease);
}

.footer-social a:hover {
  background: var(--pl-gold);
  color: var(--pl-ink);
  border-color: var(--pl-gold);
}

.footer-legal {
  border-top: 1px solid rgba(246, 241, 231, 0.12);
  margin-top: clamp(40px, 5vw, 64px);
  padding: 24px 0;
  font-size: 0.82rem;
  color: #9a9384;
  display: flex;
  flex-wrap: wrap;
  gap: 12px 24px;
  justify-content: space-between;
}

.footer-legal a {
  color: #b8ae9b;
}

.back-to-top {
  position: fixed;
  right: 22px;
  bottom: 108px;
  width: 46px;
  height: 46px;
  border-radius: 50%;
  border: 0;
  background: var(--pl-ink);
  color: var(--pl-gold-light);
  display: grid;
  place-items: center;
  box-shadow: var(--pl-shadow-md);
  opacity: 0;
  transform: translateY(12px);
  pointer-events: none;
  transition: opacity 0.3s var(--pl-ease), transform 0.3s var(--pl-ease), background 0.2s var(--pl-ease);
  z-index: 1030;
  cursor: pointer;
}

.back-to-top.is-visible {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

.back-to-top:hover {
  background: var(--pl-gold-deep);
  color: var(--pl-ink);
}

.section-number {
  font-family: var(--pl-font-mono);
  font-size: 0.75rem;
  letter-spacing: 0.2em;
  color: var(--pl-gold-deep);
}

.stat-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 24px;
}

.pull-quote {
  font-family: var(--pl-font-serif);
  font-size: clamp(1.35rem, 2.4vw, 2rem);
  line-height: 1.4;
  color: var(--pl-ink-soft);
  border-left: 3px solid var(--pl-gold);
  padding-left: 26px;
  margin: 30px 0;
}

.section--dark .pull-quote {
  color: var(--pl-cream);
}

.lux-cookie {
  position: fixed;
  right: 24px;
  bottom: 24px;
  left: 24px;
  margin-left: auto;
  max-width: 640px;
  z-index: 1080;
  background: linear-gradient(155deg, #1c1a17 0%, #2a2420 100%);
  color: #f6f1e7;
  border: 1px solid rgba(200, 163, 90, 0.4);
  border-radius: 22px;
  box-shadow: 0 32px 70px rgba(20, 17, 13, 0.4);
  padding: 26px 28px;
  opacity: 1;
  transform: translateY(0);
  transition: opacity 0.32s var(--pl-ease), transform 0.32s var(--pl-ease);
}

.lux-cookie--hidden {
  opacity: 0;
  transform: translateY(24px);
  pointer-events: none;
}

.lux-cookie__inner {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 16px 22px;
  align-items: start;
}

.lux-cookie__seal {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: radial-gradient(circle at 30% 30%, var(--pl-gold-light), var(--pl-gold-deep));
  color: #1c1a17;
  font-size: 1.15rem;
  box-shadow: inset 0 0 0 2px rgba(20, 17, 13, 0.14);
  flex-shrink: 0;
}

.lux-cookie__eyebrow {
  margin: 0 0 6px;
  font-size: 0.7rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--pl-gold-light);
  font-weight: 600;
}

.lux-cookie__title {
  margin: 0 0 8px;
  font-family: var(--pl-font-serif);
  font-weight: 600;
  font-size: 1.32rem;
  line-height: 1.25;
  color: var(--pl-ivory);
}

.lux-cookie__text {
  margin: 0;
  font-size: 0.94rem;
  line-height: 1.55;
  color: #d8cfbe;
}

.lux-cookie__link {
  color: var(--pl-gold-light);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.lux-cookie__link:hover {
  color: var(--pl-ivory);
}

.lux-cookie__actions {
  grid-column: 1 / -1;
  display: flex;
  gap: 12px;
  justify-content: flex-end;
  flex-wrap: wrap;
  margin-top: 4px;
  padding-top: 18px;
  border-top: 1px solid rgba(246, 241, 231, 0.14);
}

.lux-cookie__btn {
  border: 0;
  border-radius: var(--pl-radius-pill);
  padding: 12px 24px;
  font-family: var(--pl-font-sans);
  font-size: 0.85rem;
  font-weight: 600;
  letter-spacing: 0.05em;
  cursor: pointer;
  transition: transform 0.2s var(--pl-ease), background 0.2s var(--pl-ease), color 0.2s var(--pl-ease), border-color 0.2s var(--pl-ease), box-shadow 0.2s var(--pl-ease);
}

.lux-cookie__btn--decline {
  background: transparent;
  color: #d8cfbe;
  border: 1px solid rgba(246, 241, 231, 0.28);
}

.lux-cookie__btn--decline:hover {
  color: var(--pl-ivory);
  border-color: rgba(246, 241, 231, 0.6);
}

.lux-cookie__btn--accept {
  background: linear-gradient(120deg, var(--pl-gold), var(--pl-gold-light));
  color: #1c1a17;
  box-shadow: 0 10px 24px rgba(166, 130, 60, 0.35);
}

.lux-cookie__btn--accept:hover {
  transform: translateY(-1px);
  box-shadow: 0 14px 30px rgba(166, 130, 60, 0.45);
}

.lux-cookie__btn:focus-visible {
  outline: 2px solid var(--pl-gold-light);
  outline-offset: 3px;
}

html:not(.aos-init) [data-aos] {
  opacity: 1 !important;
  transform: none !important;
}

@media (max-width: 991.98px) {
  .footer-columns {
    grid-template-columns: 1fr 1fr;
    gap: 32px;
  }

  .gallery-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .page-hero {
    min-height: 64vh;
  }

  .back-to-top {
    bottom: 96px;
    right: 16px;
  }
}

@media (max-width: 767.98px) {
  :root {
    --pl-section-y: clamp(52px, 10vw, 88px);
  }

  .footer-columns {
    grid-template-columns: 1fr;
  }

  .hero-figure img {
    aspect-ratio: 4 / 3;
  }

  .card-testimonial {
    padding: 28px 24px;
  }
}

@media (max-width: 575.98px) {
  .lux-cookie {
    left: 12px;
    right: 12px;
    bottom: 12px;
    padding: 22px 20px;
    border-radius: 18px;
  }

  .lux-cookie__inner {
    gap: 14px;
  }

  .lux-cookie__actions {
    justify-content: stretch;
  }

  .lux-cookie__btn {
    flex: 1 1 auto;
    padding: 12px 16px;
  }

  .gallery-grid {
    gap: 10px;
  }
}

/* QA_GRID_COLUMN_FIX .stat-row.row */
.stat-row.row{--bs-gutter-x:0;--bs-gutter-y:0;margin-left:0;margin-right:0}
.stat-row.row>:is([class^="col-"],[class*=" col-"]){width:100%;max-width:100%;min-width:0;flex:none;padding-left:0;padding-right:0;margin-top:0}
/* QA_GRID_COLUMN_FIX .footer-columns.row */
.footer-columns.row{--bs-gutter-x:0;--bs-gutter-y:0;margin-left:0;margin-right:0}
.footer-columns.row>:is([class^="col-"],[class*=" col-"]){width:100%;max-width:100%;min-width:0;flex:none;padding-left:0;padding-right:0;margin-top:0}

/* QA_CONTRAST_FIX: darken gold link/eyebrow colour and lift footer text so every
   label clears WCAG AA (4.5:1) on white, cream, paper and ink backgrounds. */
a {
  color: #7a5a1e;
}

a:hover,
a:focus {
  color: #14110d;
}

.eyebrow {
  color: #7a5a1e;
}

.section--dark .eyebrow,
.page-hero .eyebrow {
  color: #e0c48f;
}

/* Footer sits on the ink background: use light copy instead of the dark slate. */
.site-footer p,
.site-footer .footer-brand p,
.site-footer .footer-legal p {
  color: #c8bdab;
}

.site-footer strong {
  color: #f6f1e7;
}

.site-footer .footer-legal {
  color: #c8bdab;
}

/* Card headings inside link wrappers stay ink-black so they read clearly. */
.card-feature h3,
a.card-feature .h6 {
  color: var(--pl-ink);
}

a.card-feature:hover h3,
a.card-feature:hover .h6 {
  color: #4a3a12;
}

/* QA_CONTRAST_FIX: deeper gold for small text on light backgrounds */
.eyebrow,
.section-number {
  color: #6d4f1c;
}

.section--dark .section-number {
  color: var(--pl-gold-light);
}

/* QA_CONTRAST_FIX: header contact link on light header bar */
.header-meta a {
  color: #6d4f1c;
}

.header-meta a:hover,
.header-meta a:focus {
  color: var(--pl-ink);
}

/* QA_CONTRAST_FIX: footer body copy and strong text on the dark footer */
.site-footer p,
.site-footer .footer-legal p {
  color: #c8bdab;
}

.site-footer strong {
  color: var(--pl-ivory);
}

/* QA_CONTRAST_FIX: feature cards sitting inside dark sections need a dark surface */
.section--dark .card-feature {
  background: rgba(251, 247, 238, 0.07);
  border-color: rgba(246, 241, 231, 0.2);
}

.section--dark .card-feature p,
.section--dark .card-feature h3 {
  color: var(--pl-ivory);
}

/* QA_CARD_LAYOUT_FIX: team cards read better as two wide columns on desktop */
.team-row {
  --bs-gutter-x: 1.5rem;
}

@media (min-width: 992px) {
  .team-row > [class*="col-"] {
    flex: 0 0 auto;
    width: 50%;
    max-width: 50%;
  }

  .team-row .card-feature {
    padding: 30px 32px;
  }
}

@media (max-width: 575.98px) {
  .team-row > [class*="col-"] {
    width: 100%;
    max-width: 100%;
  }
}

@media (min-width: 767.98px) {
  .team-member-image {
    height: 750px;
  }
}

/* QA_CONTRAST_FIXES — footer on dark background */
.site-footer p,
.footer-columns p,
.site-footer .footer-brand p { color: #c8bdab; }

.site-footer strong { color: var(--pl-ivory); }

.footer-legal p,
.footer-legal p.small,
.site-footer .footer-legal p { color: #b8ae9b; }

/* QA_CONTRAST_FIXES — gold accent text on light backgrounds */
.header-meta a,
.header-meta > a { color: #7d5f26; }
.header-meta a:hover,
.header-meta a:focus { color: var(--pl-ink); }

.eyebrow { color: #7d5f26; }
.section--cream .eyebrow,
.section--paper .eyebrow { color: #7d5f26; }

/* QA_CONTRAST_FIXES — card content on white card surfaces */
.card-room .card-body .card-tag {
  display: inline-block;
  align-self: flex-start;
  background: var(--pl-ink);
  color: var(--pl-ivory);
  font-size: 0.68rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  padding: 6px 12px;
  border-radius: var(--pl-radius-pill);
  margin-bottom: 14px;
}

.section--dark .card-room h3,
.section--dark .card-room .card-body h3 { color: var(--pl-ink); }

.section--dark .card-room .card-body p,
.section--dark .card-room .card-price,
.card-room .card-body .card-price { color: var(--pl-slate); }

.card-room .card-body .card-price {
  font-weight: 600;
  color: var(--pl-ink);
}

/* QA_CONTRAST_FIXES — labels inside the light form card */
.form-lux .form-label.text-white,
.form-lux .form-check-label.text-white { color: #2c261e !important; }

.form-lux .form-check-label { font-size: 0.92rem; }

/* QA_CONTRAST_FIXES — footer link/social text on dark */
.site-footer .contact-line,
.site-footer .contact-line span,
.site-footer .contact-line a { color: #d8cfbe; }
.site-footer .contact-line i { color: var(--pl-gold-light); }

/* QA_GALLERY_CAPTION_FIX: gallery tiles are fixed aspect-ratio boxes with
   overflow hidden, so captions are laid over the image as a bottom band
   instead of flowing underneath it (which used to overflow the tile and clip). */
.gallery-grid .gallery-tile {
  position: relative;
  overflow: hidden;
}

.gallery-grid .gallery-tile figcaption {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 2;
  margin: 0;
  padding: 26px 14px 12px;
  color: #fbf7ee;
  font-size: 0.8rem;
  line-height: 1.35;
  background: linear-gradient(to top, rgba(20, 17, 13, 0.9) 0%, rgba(20, 17, 13, 0.55) 55%, rgba(20, 17, 13, 0) 100%);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}

@media (max-width: 575.98px) {
  .gallery-grid .gallery-tile figcaption {
    padding: 20px 10px 9px;
    font-size: 0.68rem;
    line-height: 1.3;
    -webkit-line-clamp: 3;
  }
}

/* QA_CONTRAST_FIX: consent labels inside the white form card sit in a dark
   section, so they must not inherit the cream section colour. */
.section--dark .form-lux .form-check-label,
.section--dark .form-lux .form-label,
.form-lux .form-check-label {
  color: #2c261e;
}

.section--dark .form-lux .form-text {
  color: #4a453d;
}

/* ============================================================
   QA FIXES (homepage)
   ============================================================ */

/* 1. GALLERY TILES — captions are absolutely positioned inside the tile so the
   image + caption always fit the tile bounds (previously the caption flowed
   below the square image and was clipped by overflow:hidden). */
.gallery-grid .gallery-tile {
  display: block;
  position: relative;
  margin: 0;
  overflow: hidden;
}

.gallery-grid .gallery-tile > img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.gallery-grid .gallery-tile > figcaption {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  margin: 0;
  padding: 34px 16px 14px;
  font-size: 0.82rem;
  line-height: 1.4;
  color: #f6f1e7;
  background: linear-gradient(
    to top,
    rgba(20, 17, 13, 0.9) 0%,
    rgba(20, 17, 13, 0.6) 55%,
    rgba(20, 17, 13, 0) 100%
  );
  pointer-events: none;
}

@media (max-width: 991.98px) {
  .gallery-grid .gallery-tile > figcaption {
    font-size: 0.76rem;
    padding: 26px 12px 10px;
  }
}

@media (max-width: 575.98px) {
  /* the 155px mobile tiles are too small for a legible caption overlay */
  .gallery-grid .gallery-tile > figcaption {
    display: none;
  }
}

/* 2. CTA BAND newsletter card — the white .card-feature sat on the dark CTA
   band with .text-white copy, which rendered white-on-white. Give it a dark
   glass surface and light copy. */
.cta-band .card-feature {
  background: rgba(251, 247, 238, 0.08);
  border-color: rgba(246, 241, 231, 0.22);
  text-align: left;
}

.cta-band .card-feature h2,
.cta-band .card-feature h3,
.cta-band .card-feature .h5,
.cta-band .card-feature p,
.cta-band .card-feature .text-white {
  color: var(--pl-ivory) !important;
}

.cta-band .card-feature .form-text,
.cta-band .card-feature .form-text.text-white {
  color: #d8cfbe !important;
}

/* 3. Placeholder text inside the light form fields needs AA contrast */
.form-lux .form-control::placeholder {
  color: #5c564c;
  opacity: 1;
}

.form-lux .form-select,
.form-lux .form-control {
  color: #14110d;
}

/* 4. Hero CTA on small screens: keep a solid, always-painted gold surface so
   the label never falls back onto the dark hero photograph. */
@media (max-width: 991.98px) {
  .page-hero .btn-brand,
  .carousel-item .btn-brand {
    background-color: var(--pl-gold) !important;
    background-image: none !important;
    border-color: var(--pl-gold) !important;
    color: #14110d !important;
  }
}

/* QA_FOOTER_GRID_FIX: the earlier QA_GRID_COLUMN_FIX reset forced .footer-columns
   children to width:100% and flex:none, which defeated the column grid and stacked
   every footer column, blowing out the footer height. Restore the intended grid
   columns (1.4fr 1fr 1fr 1.2fr on desktop, 2 cols tablet, 1 col mobile) without
   touching the Bootstrap row gutters. */
.site-footer .footer-columns.row {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1.2fr;
  gap: 40px;
  align-items: start;
}

.site-footer .footer-columns.row > :is([class^="col-"], [class*=" col-"]) {
  width: auto;
  max-width: none;
  min-width: 0;
  flex: initial;
  padding-left: 0;
  padding-right: 0;
}

@media (max-width: 991.98px) {
  .site-footer .footer-columns.row {
    grid-template-columns: 1fr 1fr;
    gap: 32px;
  }
}

@media (max-width: 767.98px) {
  .site-footer .footer-columns.row {
    grid-template-columns: 1fr;
  }
}

/* QA_FOOTER_MAP_FIX: the 16/10 aspect ratio made the footer map ~800px tall on
   desktop. Cap it at a sane, responsive height so the footer doesn't sit next to
   a tall empty panel. */
.site-footer .map-embed {
  aspect-ratio: auto;
  height: clamp(200px, 24vw, 280px);
}

/* QA_HERO_CLIP_FIX: on narrow screens the fixed cookie banner covered the bottom
   of the 100vh hero, cutting off the hero copy. Shrink the hero slide so the
   full heading, intro and buttons sit above the banner. */
@media (max-width: 767.98px) {
  .page-hero .carousel,
  .page-hero .carousel-inner,
  .page-hero .carousel-item {
    height: auto;
  }

  .page-hero .carousel-item > .min-vh-100 {
    min-height: 0 !important;
    padding-top: 40px;
    padding-bottom: 260px;
  }

  .page-hero .carousel-indicators {
    bottom: 6px;
  }
}

/* QA_CONTRAST_FIX: hero stat labels sit directly on the darkened hero
   photograph (busy, variable luminance), so the warm-grey #c8bdab label fell to
   ~3.9:1. Lighten just this caption to ivory for AA contrast on the overlay,
   matching .scroll-cue treatment on the same surface. Scoped to .hero-stat only. */
.hero-stat .hero-stat__label,
.hero-stat__label {
  color: #f6f1e7;
}
