/* =========================================================================
   ce-fixes.css - Cappadocia Estates repair layer
   Loaded AFTER style.min.css / homep.min.css. Nothing in the original
   stylesheets is edited, so this whole file can be removed to roll back.

   It exists to fix causes, not symptoms. The four that account for most of
   the reported layout problems are:

   1. The fixed header was offset by 1.875rem to clear a top bar that is an
      empty file, and the sub-menu was pinned at a hard-coded top: 92px that
      only matches the header at some window widths. Both now derive from one
      measured value.
   2. Between 769px and 1023px the desktop navigation had no font-size rules
      at all, so nine menu items overflowed the bar. The drawer now covers
      that whole band.
   3. Vertical rhythm was written in fixed rem padding that never changed on
      small screens (h3.generic alone is 60px top and bottom with a 65px line
      height), which is where the "enormous blank areas" come from.
   4. Legacy content pasted into the admin panel carries copied browser styles
      including hard-coded pixel widths. Those are stripped server-side; the
      rules here are the safety net.
   ========================================================================= */

:root {
  /* Measured at runtime by ce-app.js; these are the fallbacks. */
  --ce-header-h: 62px;
  --ce-submenu-h: 40px;
  --ce-topbar-h: 0px;
  --ce-drawer-w: 50%;

  --ce-gold: #E1BC6B;
  --ce-gold-strong: #8a6a1f;   /* accessible contrast on white */
  --ce-ink: #333;
  --ce-focus: #0b63c5;

  --ce-space-xs: 0.75rem;
  --ce-space-sm: 1.25rem;
  --ce-space-md: clamp(1.5rem, 4vw, 2.5rem);
  --ce-space-lg: clamp(2rem, 6vw, 3.75rem);
  --ce-space-xl: clamp(2.5rem, 8vw, 5rem);

  /* Space above a section heading. The original site produced 20-30px here
     via .mt-50 / .mt-40; one token now gives every page the same rhythm. */
  --ce-heading-top: clamp(1.25rem, 2.6vw, 2rem);
}

/* -------------------------------------------------------------------------
   1. Baseline hygiene
   ---------------------------------------------------------------------- */

*, *::before, *::after { box-sizing: border-box; }

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

/* The off-canvas mobile drawer is parked at `right: -<drawer width>`, which
   makes the document wider than the window even though nothing is visible
   there. `clip` removes the phantom width without turning <html> into a
   scroll container the way `hidden` would (which breaks sticky positioning
   and scroll anchoring). `hidden` on <body> stays as the fallback for
   browsers without `clip`. */
html { overflow-x: clip; }

body {
  overflow-x: hidden;          /* legacy full-bleed blocks caused sideways scroll */
}

img, iframe, video, table { max-width: 100%; }
img { height: auto; }

/* Images with no intrinsic dimensions were the site's main layout-shift
   source. Where a ratio is known the box is reserved before the file loads. */
img[width][height] { height: auto; }

/* -------------------------------------------------------------------------
   2. Focus visibility and skip link
   The original stylesheet sets `* { outline: none }`, which removes the only
   keyboard focus indicator on the entire site.
   ---------------------------------------------------------------------- */

a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible,
[role="button"]:focus-visible {
  outline: 3px solid var(--ce-focus);
  outline-offset: 2px;
  border-radius: 2px;
}

/* Keep a visible ring on dark chrome too. */
header a:focus-visible,
header button:focus-visible,
div.subMenu a:focus-visible,
footer a:focus-visible,
.hero a:focus-visible,
.hero [role="button"]:focus-visible {
  outline: 3px solid #fff;
  outline-offset: 3px;
}

.ce-skip-link {
  position: absolute;
  left: 0.5rem;
  top: -100px;
  z-index: 10000;
  padding: 0.75rem 1.25rem;
  background: #000;
  color: #fff;
  font-size: 1rem;
  transition: top .15s;
}
.ce-skip-link:focus {
  top: 0.5rem;
  color: #fff;
}

main:focus { outline: none; }

.sr-only-focusable:not(:focus) {
  position: absolute !important;
  width: 1px; height: 1px;
  overflow: hidden; clip: rect(0 0 0 0);
  white-space: nowrap;
}

/* -------------------------------------------------------------------------
   3. Header and sub-menu geometry  (the shared cause)
   ---------------------------------------------------------------------- */

header {
  top: var(--ce-topbar-h);
  padding-top: 1rem;
  padding-bottom: 1rem;
  gap: 1rem;
  transition: none;
}

/* Standalone links in the chrome were 16-22px tall, below the 24px minimum
   target size, and gave no margin for error on a phone. Padding enlarges the
   hit area without moving anything visually. */
header a.logo {
  white-space: nowrap;
  line-height: 1.2;
  padding: 0.4rem 0;
  display: inline-block;
}

header nav ul li a { display: inline-block; padding: 0.45rem 0; }

div.subMenu a { padding-top: 0.6rem; padding-bottom: 0.6rem; }

footer a { display: inline-block; padding: 0.2rem 0; }
footer .companyBlock a { padding: 0.25rem 0; }

div.subMenu {
  top: calc(var(--ce-topbar-h) + var(--ce-header-h));
  padding-left: 1.25rem;
  flex-wrap: wrap;
  row-gap: 0.25rem;
}

/* The drawer now covers everything below 1024px, because the inline menu has
   no sizing rules at all in the 769-1023px band and overflows there. */
@media only screen and (max-width: 1023px) {
  header button.toggleMobileMenu { display: block; }

  header nav {
    position: fixed;
    top: 0;
    right: calc(-1 * var(--ce-drawer-w));
    height: 100vh;
    height: 100dvh;
    background-color: #000;
    width: var(--ce-drawer-w);
    transition: right .2s ease;
    padding-top: 4rem;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
  }

  body.mobileIn main,
  body.mobileIn main header,
  body.mobileIn main div.subMenu { left: calc(-1 * var(--ce-drawer-w)); }
  body.mobileIn main header nav { right: 0; }

  header nav ul {
    align-items: center;
    justify-content: flex-start;
    flex-direction: column;
  }
  header nav ul li { width: 100%; margin: 0.5rem 0; text-align: center; }
  header nav ul li:not(:last-child) { margin-right: 0; }
  header nav ul li a {
    font-size: 1rem;
    width: 100%;
    display: block;
    padding: 0.6rem 0.5rem;   /* 44px touch target */
    text-align: center;
  }

  div.subMenu a { display: none; }
  div.subMenu div.selectMenu { display: block; }
}

@media only screen and (max-width: 599px) {
  :root { --ce-drawer-w: 78%; }
}

/* Prevent the page scrolling behind the open drawer. */
body.mobileIn { overflow: hidden; }
body.ce-no-scroll { overflow: hidden; }

header button.toggleMobileMenu {
  width: 44px;
  height: 44px;
  display: none;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
@media only screen and (max-width: 1023px) {
  header button.toggleMobileMenu { display: flex; }
}

/* Sub-menu select needs real contrast and a real touch target. */
div.subMenu div.selectMenu select {
  min-height: 44px;
  font-size: 0.95rem;
  color: #fff;
  padding-right: 1.5rem;
}
div.subMenu div.selectMenu select option { color: #000; }

/* -------------------------------------------------------------------------
   4. Hero
   ---------------------------------------------------------------------- */

/* The hero and its slides were sized with `width: 100vw`. 100vw includes the
   scrollbar, so every slide was ~15px wider than the slot the carousel gave
   it: the next photograph bled into view and the page could scroll sideways.
   Percentages track the real container width. */
section.hero { width: 100%; }
section.hero div.item { width: 100%; }

section.hero,
section.hero div.item {
  height: 100vh;
  height: 100svh;             /* mobile browsers: no jump when the bar hides */
}

section.hero .owl-stage-outer { overflow: hidden; }
section.hero .owl-item img { width: 100%; height: 100%; object-fit: cover; display: block; }

@media only screen and (max-width: 768px) {
  section.hero,
  section.hero div.item { height: 60svh; min-height: 320px; }
}

section.hero img.herologo { max-width: min(70vw, 420px); }

/* The arrows are empty <a> elements; ce-app.js gives them button semantics,
   so they need a real hit area and a focus ring. */
section.hero a.heroNext,
section.hero a.heroPrev,
.heroNext, .heroPrev {
  cursor: pointer;
  display: block;
}
@media (pointer: coarse) {
  section.hero a.heroNext,
  section.hero a.heroPrev { width: 44px; height: 64px; background-size: 22px; }
}

/* Owl pagination: real targets, visible active state.
   Selectors are written to match Owl's own specificity rather than reaching
   for !important. */
.hero .owl-theme .owl-dots,
.hero .owl-dots { position: absolute; bottom: 1.25rem; left: 0; right: 0; z-index: 20; }

.hero .owl-theme .owl-dots .owl-dot,
.hero .owl-dots .owl-dot { padding: 6px; }

.hero .owl-theme .owl-dots .owl-dot span,
.hero .owl-dots .owl-dot span {
  width: 10px;
  height: 10px;
  margin: 0;
  background: rgba(255, 255, 255, .55);
}

.hero .owl-theme .owl-dots .owl-dot.active span,
.hero .owl-theme .owl-dots .owl-dot:hover span,
.hero .owl-dots .owl-dot.active span,
.hero .owl-dots .owl-dot:hover span { background: #fff; }

/* Full-bleed page hero image on inner pages. */
img.ce-page-hero {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
}

/* -------------------------------------------------------------------------
   5. Booking bar
   ---------------------------------------------------------------------- */

section.search { padding: var(--ce-space-md) 0; }

section.search .row { align-items: end; }

section.search label {
  margin-bottom: 0.25rem;
  font-size: 0.95rem;
  color: #444;
}

section.search input.dateInput {
  min-height: 48px;
  cursor: pointer;
  background-position: right 0.25rem center;
}

section.search button.post {
  height: 48px;
  min-height: 48px;
  margin-top: 1.5rem;
  cursor: pointer;
  letter-spacing: 0.1em;
}

section.search span.error { padding-top: 0.75rem; }

@media only screen and (max-width: 991px) {
  section.search .row > [class*="col-"] { margin-bottom: 0.75rem; }
  section.search button.post { margin-top: 0.75rem; width: 100%; }
}

/* The picker must sit above the fixed header and the hero. */
.datepicker.dropdown-menu { z-index: 1100; }
.datepicker table tr td.day { min-width: 34px; height: 34px; }

/* bootstrap-datepicker paints its selected and today states with gradients
   declared !important, so these have to match to be visible. */
.datepicker table tr td.active.active,
.datepicker table tr td.active:hover.active {
  background: #000 !important;
  background-image: none !important;
  color: #fff !important;
  text-shadow: none !important;
}
.datepicker table tr td.today,
.datepicker table tr td.today:hover {
  background: var(--ce-gold) !important;
  background-image: none !important;
  color: #000 !important;
  text-shadow: none !important;
}

/* -------------------------------------------------------------------------
   6. Vertical rhythm - the "enormous blank areas"
   ---------------------------------------------------------------------- */

section.about { padding: var(--ce-space-lg) 0; }

/* A pasted <section class="about"> nested inside the template's own one
   doubles this padding. This rule is now the ONLY thing that handles it.
   The server-side cleaner used to rewrite the inner <section> into a <div>,
   but matching openers to closers by counting left one unclosed element on
   every page - which is what pushed the footer inside the content container
   on About, Rooms & Suites and Events. Cancelling the padding in CSS cannot
   damage the markup. (.ce-unwrapped is kept so any page cached from the
   previous behaviour still renders correctly.) */
.about .ce-unwrapped,
section.about section.about {
  padding: 0 !important;
}

h3.generic {
  padding: var(--ce-space-lg) 0;
  font-size: clamp(1.25rem, 2.2vw, 1.875rem);
  line-height: 1.6;
  letter-spacing: 0.12em;
}
h3.generic.no-padding { padding: 0; }

h2.generic_sub {
  /* Was clamp(1.6rem, 4vw, 3.125rem) = 50px on a desktop, against 30px in the
     original. That single value is most of why the repaired pages read as
     shouty next to /orig/. */
  font-size: clamp(1.25rem, 2.4vw, 1.875rem);
  line-height: 1.35;
  letter-spacing: 0.15em;
  margin: var(--ce-space-sm) 0;
}

/* A heading or paragraph the editor left blank (marked server-side, because
   CSS :empty does not match whitespace). h3.generic gives 60px of padding top
   and bottom, so one empty heading is 120px of dead space - the Family Suites
   gap, and the same pattern on the other room categories. */
.ce-blank {
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  margin-top: 0 !important;
  margin-bottom: 0 !important;
  min-height: 0 !important;
}

/* Section headings.

   This rule used to set `margin: 0 0 var(--ce-space-sm)`, which zeroed the
   top margin the original .mt-50 / .mt-40 utility classes were providing.
   Measured against /orig/ that removed 20px above the heading on Events and
   Airport Transfer and 30px on the room pages, so every inner-page heading
   sat hard against the photograph above it while keeping its space below -
   exactly the asymmetry reported. The top margin is restored as a token, so
   About, Concierge, Rooms and Contact now share one value instead of relying
   on whichever utility class a given template happened to use. */
.ce-page-title,
section.about h1.text-center,
section.about h2.text-center {
  /* 1.875rem = 30px, the size the original site used for these headings.
     An earlier clamp took them to 35.2px on a desktop, which is what made the
     room-category headings look wrong next to /orig/. Still fluid below. */
  font-size: clamp(1.25rem, 2.4vw, 1.875rem);
  line-height: 1.35;
  letter-spacing: 0.14em;
  /* Tracked, centred capitals sit optically left of centre because the
     trailing letter-space is counted in the line width. Adding the same
     amount as first-line indent puts them back on the axis. */
  text-indent: 0.14em;
  margin: var(--ce-heading-top) 0 var(--ce-space-sm);
}

/* A heading that is genuinely the first thing in its section does not need
   the extra space - the section's own padding already provides it. */
section.about > .container > .row:first-child .ce-page-title:only-child {
  margin-top: 0;
}

.regular-phrase,
.split-view p {
  padding: 0 0 var(--ce-space-sm);
  line-height: 1.85;
  max-width: 72ch;
  margin-inline: auto;
}

.regular-phrase--generic,
.regular-phrase--giant,
.regular-phrase--medium {
  font-size: clamp(1.05rem, 1.6vw, 1.5625rem) !important;
  line-height: 1.7;
}

.frame {
  margin: var(--ce-space-md) auto;
  max-width: min(72ch, 100%);
  padding: var(--ce-space-sm);
  font-size: clamp(1rem, 1.4vw, 1.3125rem);
  line-height: 1.7;
}

/* Utility spacers were authored as fixed rem values that never shrink. The
   large ones are the ones that hurt on phones. */
@media only screen and (max-width: 767px) {
  .mt-100, .mb-100, .pt-100, .pb-100 { margin-top: 0; margin-bottom: 0; }
  .mt-100 { margin-top: var(--ce-space-md); }
  .mb-100 { margin-bottom: var(--ce-space-md); }
  .pt-100 { padding-top: var(--ce-space-md); }
  .pb-100 { padding-bottom: var(--ce-space-md); }
  .mt-80, .mt-50, .mt-40 { margin-top: var(--ce-space-sm); }
  .mb-80, .mb-50, .mb-40 { margin-bottom: var(--ce-space-sm); }
  .pt-30, .pb-30, .pr-30, .pl-30 { padding: var(--ce-space-xs); }
}

/* An empty grid column is a 25% wide hole on desktop and pointless on mobile;
   several pages use them purely as spacers. */
@media only screen and (max-width: 991px) {
  .row > [class*="col-md-"]:empty,
  .row > [class*="col-sm-"]:empty { display: none; }
}

/* Nested .container repeats the 15px gutter at every level. */
.container .container { width: 100%; padding-left: 0; padding-right: 0; }

/* -------------------------------------------------------------------------
   7. Legacy pasted content - safety net
   Inline styles are stripped server-side by ce_clean_content(). These rules
   catch anything that reaches the browser anyway (for example content edited
   in the admin panel after this release). They are scoped to page content and
   deliberately narrow.
   ---------------------------------------------------------------------- */

section.about [style*="width"],
section.about [style*="Width"] {
  max-width: 100% !important;
}

section.about [class*="col-"][style] {
  width: auto !important;
  padding-left: 15px !important;
  padding-right: 15px !important;
}

section.about [style*="position: absolute"],
section.about [style*="position:absolute"] {
  position: static !important;
}

/* The safety net above is for geometry pasted into the admin panel. A slider
   that measures itself and writes the result back as an inline style is not
   pasted content, and clamping it breaks it: camRollSlider gives the film
   strip an inline width of (number of photos x 1140px), and because the strip
   is a flex row that is allowed to wrap, a max-width of 100% folded every
   photo onto its own line - the strip then slid sideways into nothing and the
   large picture area went blank after the first "next". The sliders are
   therefore exempt from all three rules above. */
section.about .crs-wrap,
section.about .crs-wrap [style],
section.about .owl-carousel [style] {
  max-width: none !important;
}

section.about .crs-wrap [style*="position: absolute"],
section.about .crs-wrap [style*="position:absolute"],
section.about .owl-carousel [style*="position: absolute"],
section.about .owl-carousel [style*="position:absolute"] {
  position: absolute !important;
}

/* -------------------------------------------------------------------------
   8. Galleries (camRollSlider + lightGallery)
   ---------------------------------------------------------------------- */

.crs-wrap { margin-bottom: 4.5rem; }   /* the thumbnail bar sits 50px outside */

.crs-wrap div.prev,
.crs-wrap div.next {
  cursor: pointer;
  min-width: 44px;
}
.crs-wrap div.prev:focus-visible,
.crs-wrap div.next:focus-visible,
.crs-bar-roll-item:focus-visible,
.crs-screen-item:focus-visible {
  outline: 3px solid var(--ce-focus);
  outline-offset: -3px;
}

.crs-bar-roll-item[aria-selected="true"] {
  opacity: 1;
  box-shadow: 0 0 0 2px #000 inset;
}

.crs-screen-item { background-color: #f2f0ed; }

@media (max-width: 640px) {
  .crs-wrap { margin-bottom: 3.5rem; }
  .crs-wrap div.prev { left: 6px; }
  .crs-wrap div.next { right: 6px; }
}

/* The picture grid on the Art / Architecture page. */
div.imgthumb {
  height: clamp(180px, 26vw, 25rem);
  margin-bottom: var(--ce-space-sm);
}
#gal [data-src] { cursor: zoom-in; }
#gal [data-src]:focus-visible { outline: 3px solid var(--ce-focus); outline-offset: 2px; }

/* lightGallery must clear the fixed header. */
.lg-backdrop, .lg-outer { z-index: 10050; }

.panoramic iframe { height: 100vh; height: 100dvh; }
.panoramic button.close { cursor: pointer; }

/* -------------------------------------------------------------------------
   9. Rooms
   ---------------------------------------------------------------------- */

.room-name { min-height: 100%; padding: 0.9375rem 0.5rem; }
.room-name small.roomhighlight { opacity: .75; }

/* Room-number cards under each category on /roomsuites.
   The markup centred them with an inline `display:flex; justify-content:center`
   on the row. That centres one line and one line only: flex containers do not
   wrap by default, so on a phone five cards were squeezed onto a single line at
   61px each instead of falling onto a second line. Adding flex-wrap centres
   every line, complete or not, at every width - which is also what makes an
   incomplete final row sit in the middle rather than against the left edge.
   Scoped to this one class so no other row, grid or gallery is affected. */
.ce-room-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: stretch;
}

/* Bootstrap 3 floats its columns. A float is ignored on a flex item, but
   clearing it keeps the intent explicit. Widths, padding, borders and the card
   itself are untouched. */
.ce-room-grid > [class*="col-"] { float: none; }

/* Wrapped lines need to clear each other; a single-line group is unchanged
   because there is no second line for the gap to appear between. */
.ce-room-grid > [class*="col-"] + [class*="col-"] { margin-top: 0; }
.ce-room-grid { row-gap: var(--ce-space-sm); }

div.room-block { margin-bottom: var(--ce-space-md); }
div.room-block div.room-block-data { padding: var(--ce-space-md) var(--ce-space-sm); }
div.room-block div.room-block-data.mt-100 { margin-top: 4.5rem; }

@media only screen and (max-width: 767px) {
  div.room-block div.room-block-data.mt-100 { margin-top: 3.5rem; }
  div.room-block div.room-block-data span.title { padding: 0.75rem 1rem; margin-bottom: 1rem; }
}

.rezlink {
  display: inline-block;
  padding: 0.75rem 1.5rem;
  min-height: 44px;
}

/* -------------------------------------------------------------------------
   10. Contact page
   The template carried an inline stylesheet with `input, textarea, button
   { width: 300px }`, which is what pinned the form into a narrow strip while
   the rest of the row sat empty.
   ---------------------------------------------------------------------- */

.ce-contact-grid { display: block; }

#maps form { max-width: 100%; }

#maps input,
#maps select,
#maps textarea,
#maps button {
  width: 100%;
  max-width: 100%;
  font-size: 1rem;
  min-height: 48px;
}
#maps textarea { min-height: 160px; }
#maps label {
  display: block;
  font-size: 0.95rem;
  font-weight: 500;
  padding-bottom: 0.25rem;
  color: var(--ce-ink);
}
/* The gold is the colour this button has always been: it came from the
   page-wide <style> block in contact_v/index.php, which had to go because the
   same block also forced every field on the page to 300px. Only the width rule
   was the problem, so the appearance is carried over unchanged and simply
   scoped to the form. */
#maps button {
  background: #E1BC6B;
  border: 2px solid #E1BC6B;
  color: #fff;
  letter-spacing: 0.08em;
}
#maps button:hover { border-color: #000; }

#maps iframe {
  width: 100%;
  min-height: 340px;
  height: 100%;
  border: 0;
}

#maps .max-h {
  height: auto;
  max-height: none;
}
#maps .max-h img { width: 100%; height: auto; object-fit: cover; }

#captcha-img img { border: 1px solid #ccc; }

.ce-block-title {
  font-size: 1.15rem;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin: 0 0 var(--ce-space-xs);
  text-align: left;
  color: var(--ce-ink);
}

@media (min-width: 992px) {
  .ce-contact-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--ce-space-md);
    align-items: start;
  }
  .ce-contact-grid > [class*="col-"] { width: 100%; float: none; padding: 0; }
  #maps .max-h { height: 100%; }
}

/* The address / distances block reads as a wall of text at full width. */
.ce-contact-grid + *, section.about .row.bg-white { padding: var(--ce-space-sm); }

/* -------------------------------------------------------------------------
   11. Awards, Experiences, Concierge, Events - one shared content system
   ---------------------------------------------------------------------- */

section.about .container > .row + .row { margin-top: var(--ce-space-sm); }

/* Award / experience cards line up on a real grid instead of floated columns
   of differing heights. */
section.about .row > .col-md-4.text-center,
section.about .row > .col-md-3.text-center { margin-bottom: var(--ce-space-sm); }

section.about .col-md-4.text-center img,
section.about .col-md-3.text-center img { max-width: 100%; height: auto; }

/* Boxes that were centred with empty spacer columns. */
section.about .bg-white {
  padding: var(--ce-space-md);
  max-width: 100%;
}

@media only screen and (max-width: 767px) {
  section.about .bg-white { padding: var(--ce-space-sm); }
  .frame { padding: var(--ce-space-sm); }
}

/* Events: the two content blocks had no separation and the second image had
   no reserved space, so a failed load left a grey slab. */
section.about img.img-max {
  max-width: 100%;
  height: auto;
  display: block;
  margin-inline: auto;
}
section.about img.img-max:not([src]),
section.about img.img-max[src=""],
section.about img[src$="/panel/"] { display: none; }

/* -------------------------------------------------------------------------
   12. Reviews
   ---------------------------------------------------------------------- */

.ce-review-link {
  display: inline-block;
  margin-top: 0.5rem;
  padding: 0.5rem 0.9rem;
  border: 1px solid var(--ce-gold);
  color: var(--ce-gold-strong);
  font-weight: 500;
}
.ce-review-link:hover,
.ce-review-link:focus { background: var(--ce-gold); color: #000; }

/* -------------------------------------------------------------------------
   12b. Cookie notice
   The dismiss control used to be an <a> with an onclick and no href, so it
   could not be reached or activated with a keyboard. It is now a <button>;
   these rules give the button the same appearance the link had.
   ---------------------------------------------------------------------- */

.cookieConsentContainer .cookieTitle span {
  font-family: OpenSans, arial, sans-serif;
  color: #fff;
  font-size: 22px;
  line-height: 20px;
  display: block;
}

.cookieConsentContainer .cookieButton button {
  display: inline-block;
  font-family: OpenSans, arial, sans-serif;
  color: #fff;
  font-size: 14px;
  font-weight: bold;
  margin-top: 14px;
  background: #000;
  border: 0;
  box-sizing: border-box;
  padding: 15px 24px;
  min-height: 44px;
  text-align: center;
  cursor: pointer;
  transition: background .3s;
}
.cookieConsentContainer .cookieButton button:hover,
.cookieConsentContainer .cookieButton button:focus-visible { background: #3E9B67; }

/* It sat above the page but below nothing in particular; keep it under the
   photo lightbox and the 360 viewer. */
.cookieConsentContainer { z-index: 1200; }

/* -------------------------------------------------------------------------
   13. Footer
   ---------------------------------------------------------------------- */

footer .container { padding-top: var(--ce-space-md); padding-bottom: var(--ce-space-md); }
footer a { text-decoration: underline; text-underline-offset: 3px; }
footer .socialLinks .links a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
}

/* -------------------------------------------------------------------------
   14. Grid safety across the tested widths (360 - 1920)
   ---------------------------------------------------------------------- */

@media (max-width: 767px) {
  .container { width: 100%; padding-left: 1rem; padding-right: 1rem; }
  .row { margin-left: -1rem; margin-right: -1rem; }
  .row > [class*="col-"] { padding-left: 1rem; padding-right: 1rem; }
  table { display: block; overflow-x: auto; }
}

@media (min-width: 1600px) {
  .container { width: 1320px; }
}

/* Anything that still insists on being wider than the screen scrolls inside
   itself rather than dragging the whole page sideways. */
section.about pre,
section.about table { max-width: 100%; overflow-x: auto; }

/* -------------------------------------------------------------------------
   15. Motion and print
   ---------------------------------------------------------------------- */

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

@media print {
  header, div.subMenu, section.search, .ce-skip-link, .crs-bar { display: none !important; }
  body { overflow: visible; }
}


/* -------------------------------------------------------------------------
   13. Manual-review fixes (second visual pass)
   ---------------------------------------------------------------------- */

/* --- Reviews: an even grid instead of ragged floats ----------------------
   The reviews are Bootstrap 3 .col-md-6 floats. When one card is taller than
   the one beside it the next row starts below the TALLER card, leaving a hole
   under the shorter one - the "random visual holes" reported. A two-column
   grid removes the float behaviour entirely: rows stay aligned, the gaps are
   one value, and cards are only as tall as their own content plus whatever it
   takes to line the row up. Nothing is forced to a fixed height. */
.ce-reviews .row {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--ce-space-md);
  margin-left: 0;
  margin-right: 0;
}
/* Bootstrap 3 clears its float rows with .row::before / .row::after. Those
   pseudo-elements become GRID ITEMS the moment the row becomes a grid, so the
   first card was pushed into cell 2 and every card after it shifted by one -
   which is what produced the staggered, half-empty column. They are only
   needed to clear floats, and there are no floats here. */
.ce-reviews .row::before,
.ce-reviews .row::after,
.ce-contact-grid::before,
.ce-contact-grid::after { content: none; display: none; }
.ce-reviews .row > [class*="col-"] {
  width: 100%;
  max-width: 100%;
  float: none;
  padding-left: 0;
  padding-right: 0;
}
.ce-reviews .bg-white {
  height: 100%;
  display: flex;
  flex-direction: column;
  padding: var(--ce-space-md);
  margin: 0;
}
/* Trailing blank paragraphs are common in this pasted content. */
.ce-reviews .bg-white > p:last-child:empty,
.ce-reviews .bg-white > p.ce-blank { display: none; }
/* Pin the TripAdvisor link to the foot of every card so it sits on one line
   across the row regardless of how long the review is. */
.ce-reviews .bg-white > p:has(> a.ce-review-logo) { margin-top: auto; margin-bottom: 0; }
.ce-reviews a.ce-review-logo { display: inline-block; margin-top: var(--ce-space-xs); }

@media only screen and (max-width: 767px) {
  .ce-reviews .row { grid-template-columns: minmax(0, 1fr); gap: var(--ce-space-sm); }
}

/* --- Contact -------------------------------------------------------------
   The white content box began hard against its own top edge. The heading
   above it is well placed and is used as the reference for the rhythm. */
section.about .row.bg-white {
  padding-top: var(--ce-space-md);
  padding-bottom: var(--ce-space-md);
  margin-left: 0;
  margin-right: 0;
}
section.about .row.bg-white > [class*="col-"]:first-child > :first-child { margin-top: 0; }

/* The form, the embedded map and the static map were three unrelated blocks
   at three different widths. One grid gives them a shared alignment and one
   gap value; they stack in the same order on a phone. */
.ce-contact-grid {
  display: grid;
  /* Three children, so three columns - form, embedded map, printed map -
     which is the arrangement the markup and the original page both have.
     A two-column track dropped the printed map onto a second row on its
     own, leaving two thirds of the row empty beside the form. */
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--ce-space-md);
  align-items: start;
}
.ce-contact-grid > * { min-width: 0; }
.ce-contact-grid #maps,
.ce-contact-grid .max-h {
  display: grid;
  gap: var(--ce-space-sm);
}
.ce-contact-grid iframe,
.ce-contact-grid #maps iframe {
  width: 100%;
  min-height: 320px;
  border: 0;
  display: block;
}
.ce-contact-grid #maps img,
.ce-contact-grid .max-h img {
  width: 100%;
  height: auto;
  display: block;
}
@media only screen and (max-width: 991px) {
  .ce-contact-grid { grid-template-columns: minmax(0, 1fr); }
}

/* --- Events body copy ----------------------------------------------------
   Three consecutive sentences were marked up as a 25px paragraph, an
   h3.generic and an h3.regular-phrase, so ordinary prose rendered at three
   different sizes with heading weight and heading padding. The wording is
   untouched; only the presentation is normalised to one body size with a
   readable measure. The lead sentence keeps a slightly larger size so the
   section still has a hierarchy. */
.ce-events .regular-phrase,
.ce-events h3.generic,
.ce-events h3.regular-phrase {
  font-size: clamp(1rem, 1.25vw, 1.1875rem) !important;
  line-height: 1.75;
  font-weight: 400;
  letter-spacing: normal;
  padding: 0;
  margin: 0 auto var(--ce-space-sm);
  max-width: 68ch;
  text-align: center;
}
.ce-events .regular-phrase--medium {
  font-size: clamp(1.0625rem, 1.5vw, 1.375rem) !important;
  font-weight: 500;
  margin-bottom: var(--ce-space-md);
}
.ce-events a.contact-link {
  font-weight: 500;
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* The Events banner needed no CSS in the end: the grey band was 84 rows of
   flat 50% grey baked into assets/img/eventshero.jpg itself, which has been
   cropped out of the file. Left as a note so the finding is not lost. */
