/*
Theme Name: Le Cercle Blanc
Theme URI: https://lcb.local
Author: Abens
Description: Bespoke theme for Le Cercle Blanc — where winters begins. Built from the LCB design comps on Bootstrap 5, with Gutenberg-authored front-page content and an ACF-driven feature block.
Version: 1.0.3
Requires at least: 6.7
Tested up to: 7.1
Requires PHP: 8.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: lcb
Tags: custom-menu, featured-images, block-styles, wide-blocks, translation-ready
*/
/* ==========================================================================
   Theme layer on top of Bootstrap 5.3.
   Source of truth: HOME_LCB.pdf / BLOG_LCB.pdf / NAVIGATION_LCB.pdf.
   Section 18 onwards adapts the design to WordPress/Gutenberg output.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Tokens
   Sampled directly from the PDFs — the whole identity runs on one brand
   colour (#34215B) against white.
   -------------------------------------------------------------------------- */
:root {
  --lcb-plum:        #34215B;
  --lcb-plum-rgb:    52, 33, 91;
  --lcb-white:       #FFFFFF;
  --lcb-rule:        rgba(var(--lcb-plum-rgb), .55);
  --lcb-rule-light:  rgba(255, 255, 255, .55);

  --lcb-display: "Playfair Display SC", "Playfair Display", Georgia, "Times New Roman", serif;
  --lcb-body:    "Poppins", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;

  /* Hero curve depth — the white arc that bites into every hero image */
  --lcb-curve: 78px;

  /* Bootstrap overrides, so utilities and components inherit the brand */
  --bs-body-font-family: var(--lcb-body);
  --bs-body-color: var(--lcb-plum);
  --bs-body-bg: var(--lcb-white);
  --bs-link-color: var(--lcb-plum);
  --bs-link-hover-color: var(--lcb-plum);
  --bs-border-color: var(--lcb-rule);
}

/* --------------------------------------------------------------------------
   2. Base
   -------------------------------------------------------------------------- */
/* clip, not hidden: hidden on <body> propagates to the viewport and turns the
   page into its own scroll container, which breaks scroll-linked behaviour. */
html { overflow-x: clip; }

body {
  font-family: var(--lcb-body);
  font-weight: 300;
  color: var(--lcb-plum);
  background: var(--lcb-white);
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, .lcb-display {
  font-family: var(--lcb-display);
  font-weight: 400;
  color: inherit;
  line-height: 1.22;
  margin: 0;
}

/* Headings take their ground's colour by inheritance. The dark grounds are
   spelled out anyway: without this, any later colour on .lcb-h2 — or a change
   to Bootstrap's --bs-heading-color — would quietly render them plum-on-plum. */
.lcb-hero__overlay :is(h1, h2, h3, h4, .lcb-display),
.lcb-feature__card :is(h1, h2, h3, h4, .lcb-display),
.lcb-section--plum :is(h1, h2, h3, h4, .lcb-display),
.lcb-footer :is(h1, h2, h3, h4, .lcb-display),
.lcb-nav-overlay :is(h1, h2, h3, h4, .lcb-display) { color: #fff; }

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

a { color: inherit; text-decoration: none; transition: opacity .25s ease, color .25s ease; }
a:hover { opacity: .68; }

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

:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 3px;
}

/* Skip link — keyboard users shouldn't have to tab the whole hero */
.lcb-skip {
  position: absolute; left: 1rem; top: -4rem; z-index: 2000;
  padding: .7rem 1.1rem; border-radius: 4px;
  background: var(--lcb-plum); color: #fff;
  font-size: .9rem; letter-spacing: .05em;
  transition: top .2s ease;
}
.lcb-skip:focus { top: 1rem; opacity: 1; }


/* Near-full-bleed shell — header, footer and the privileges rows sit on this
   measure in the comps; running text keeps Bootstrap's .container. */
.lcb-shell {
  width: 100%;
  max-width: 1440px;
  margin-inline: auto;
  padding-inline: clamp(1.25rem, 3.2vw, 3.25rem);
}

/* --------------------------------------------------------------------------
   3. Type scale
   Sizes measured off the 1600px comps, then made fluid with clamp() so the
   proportions hold from 360px up to a 1600px canvas.
   -------------------------------------------------------------------------- */
.lcb-eyebrow {              /* "Welcome to" over the home hero */
  font-family: var(--lcb-body);
  font-weight: 300;
  font-size: clamp(1rem, 1.6vw, 1.6rem);
  letter-spacing: .01em;
  margin: 0 0 .4em;
}
.lcb-h2 { font-size: clamp(1.55rem, 2.6vw, 2.5rem); }
.lcb-h3 { font-size: clamp(1.35rem, 2.1vw, 1.95rem); }
.lcb-h4 { font-size: clamp(1.2rem, 1.6vw, 1.5rem); }

.lcb-lead,
.lcb-copy {
  font-size: clamp(1rem, 1.18vw, 1.19rem);
  line-height: 1.62;
  font-weight: 300;
}
.lcb-copy--justify { text-align: justify; }
.lcb-copy strong { font-weight: 700; }


/* --------------------------------------------------------------------------
   Logo
   One SVG carries the monogram, the wordmark and the tagline, so the lockup is
   sized rather than composed. White artwork: every placement is a dark ground.
   -------------------------------------------------------------------------- */
/* Inlined artwork: currentColor means the ground decides the colour. */
.lcb-logo { display: block; width: 100%; height: auto; color: #fff; }

.lcb-hero__home,
.lcb-footer__home,
.lcb-overlay__home { display: block; }

.lcb-hero__heading { margin: 0; }

/* The hero overlay disables pointer events so the photography stays
   interactive underneath; the home link switches them back on for itself. */
.lcb-hero__home {
  width: clamp(200px, 34vw, 500px);
  pointer-events: auto;
  transition: opacity .25s ease;
}
.lcb-hero__home:hover { opacity: .82; }

.lcb-overlay__home {
  width: clamp(190px, 26vw, 350px);
  margin: 0 auto clamp(1.75rem, 4vw, 3.25rem);
  transition: opacity .25s ease;
}
.lcb-overlay__home:hover { opacity: .82; }

.lcb-footer__home {
  width: clamp(180px, 24vw, 320px);
  margin: 0 auto clamp(1.75rem, 3.5vw, 2.75rem);
  transition: opacity .25s ease;
}
.lcb-footer__home:hover { opacity: .82; }

.lcb-social__icon { display: block; width: 100%; height: auto; color: #fff; }
.lcb-cat__icon { display: block; height: auto; }

/* --------------------------------------------------------------------------
   4. Read More — Playfair small caps over a rule that overhangs the text
   -------------------------------------------------------------------------- */
.lcb-more {
  display: inline-block;
  font-family: var(--lcb-display);
  font-size: clamp(1rem, 1.35vw, 1.32rem);
  letter-spacing: .045em;
  color: var(--lcb-plum);
  padding: 0 1.15em .55em;
  border-bottom: 1px solid var(--lcb-rule);
}
.lcb-more:hover { opacity: 1; border-bottom-color: var(--lcb-plum); }
.lcb-more--light { color: #fff; border-bottom-color: var(--lcb-rule-light); }
.lcb-more--light:hover { border-bottom-color: #fff; }

/* --------------------------------------------------------------------------
   5. Header — transparent over the hero, solid once you scroll past it
   The comps only draw the over-hero state; the solid state is what keeps the
   white nav readable over the white body.
   -------------------------------------------------------------------------- */
.lcb-header {
  position: fixed; inset: 0 0 auto 0; z-index: 1040;
  padding: 1.35rem 0;
  color: #fff;
  background: transparent;
  transition: background-color .35s ease, padding .35s ease;
}
.lcb-header.is-stuck {
  background: var(--lcb-plum);
  padding: .8rem 0;
}
.lcb-header__bar {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
}
.lcb-header a, .lcb-header button { color: #fff; }

.lcb-pill {                 /* "Members Area" / "Log Out" */
  display: inline-block;
  font-family: var(--lcb-display);
  font-size: clamp(.78rem, .95vw, .95rem);
  letter-spacing: .05em;
  color: #fff;
  padding: .55em 1.15em;
  border: 1px solid rgba(255, 255, 255, .85);
  border-radius: 5px;
}
.lcb-pill:hover { opacity: 1; background: rgba(255, 255, 255, .14); }

.lcb-lang {
  font-family: var(--lcb-display);
  font-size: clamp(.85rem, 1.1vw, 1.1rem);
  letter-spacing: .05em;
}
.lcb-langs { display: flex; align-items: center; gap: .6em; }
.lcb-langs__sep {
  font-size: clamp(.85rem, 1.1vw, 1.1rem);
  opacity: .6;
}

/* Hamburger — three rules, collapsing to an X inside the overlay */
.lcb-burger {
  display: flex; flex-direction: column; justify-content: center; gap: 6px;
  width: 34px; height: 26px; padding: 0;
  background: none; border: 0; cursor: pointer;
}
.lcb-burger span {
  display: block; height: 2px; width: 100%;
  background: currentColor; border-radius: 2px;
}

/* --------------------------------------------------------------------------
   6. Hero
   -------------------------------------------------------------------------- */
.lcb-hero { position: relative; overflow: hidden; background: var(--lcb-plum); }
.lcb-hero--home       { height: clamp(520px, 46vw, 740px); }
.lcb-hero--interior   { height: clamp(420px, 40vw, 645px); }

.lcb-hero .carousel,
.lcb-hero .carousel-inner,
.lcb-hero .carousel-item { height: 100%; }

.lcb-hero__img {
  width: 100%; height: 100%;
  object-fit: cover; object-position: center;
}

.lcb-hero__overlay {
  position: absolute; inset: 0; z-index: 3;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: 5rem 1.25rem calc(var(--lcb-curve) + 2.5rem);
  color: #fff; text-align: center;
  pointer-events: none;
  text-shadow: 0 1px 22px rgba(20, 12, 38, .3);
}

/* The overlay disables pointer events so the hero image stays interactive
   underneath, so the home link has to switch them back on for itself. */
.lcb-hero__home {
  display: block;
  pointer-events: auto;
  margin-bottom: clamp(1rem, 2.2vw, 2rem);
}
.lcb-hero__home:hover { opacity: 1; }

/* The white arc that cuts into the bottom of every hero */
.lcb-curve {
  position: absolute; left: -1px; right: -1px; bottom: -1px; z-index: 4;
  width: calc(100% + 2px); height: var(--lcb-curve);
  display: block; pointer-events: none;
}

/* Carousel dots, restyled to the comp's plain circles */
.lcb-hero .carousel-indicators { z-index: 5; margin-bottom: calc(var(--lcb-curve) + 1.1rem); }
.lcb-hero .carousel-indicators [data-bs-target] {
  width: 9px; height: 9px; border-radius: 50%;
  border: 0; margin: 0 7px; opacity: .55;
  background-color: #fff;
  transition: opacity .3s ease;
}
.lcb-hero .carousel-indicators .active { opacity: 1; }

/* --------------------------------------------------------------------------
   7. Section rhythm
   One place that owns vertical spacing, so nothing fights over margins.
   -------------------------------------------------------------------------- */
.lcb-section { padding-block: clamp(3.5rem, 7vw, 7.5rem); }
.lcb-section--tight { padding-block: clamp(2.5rem, 4.5vw, 4.5rem); }
.lcb-section--plum { background: var(--lcb-plum); color: #fff; }

.lcb-section__head { text-align: center; margin-bottom: clamp(2rem, 4vw, 3.75rem); }

/* Rows in this theme carry g-5. Bootstrap's .container only pads by its own
   gutter, so without matching it here the row's negative margins push the page
   sideways by 12px on every screen. Match them and the overflow disappears. */
.lcb-section .container,
.lcb-feature .container { --bs-gutter-x: 3rem; }

/* --------------------------------------------------------------------------
   8. "What is Le Cercle Blanc" — parallax photo behind a translucent card
   -------------------------------------------------------------------------- */
.lcb-feature {
  position: relative;
  padding-block: clamp(3rem, 6vw, 6rem);
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
}
/* background-attachment: fixed is the whole "Scroll effect" note in the comp.
   Mobile Safari can't composite it, so it only runs on pointer devices. */
@media (hover: hover) and (min-width: 992px) {
  .lcb-feature { background-attachment: fixed; }
}
.lcb-feature__card {
  background: rgba(var(--lcb-plum-rgb), .86);
  border-radius: 22px;
  padding: clamp(2rem, 4vw, 3.5rem) clamp(1.25rem, 4vw, 4rem);
  color: #fff;
  text-align: center;
}
.lcb-feature__card p {
  font-size: clamp(.98rem, 1.22vw, 1.24rem);
  line-height: 2.05;
  margin: 0;
}
.lcb-feature__card p + p { margin-top: .35em; }

/* --------------------------------------------------------------------------
   9. Alternating text / image rows
   -------------------------------------------------------------------------- */
.lcb-split__text { text-align: center; }
.lcb-split__text .lcb-copy { max-width: 30rem; margin-inline: auto; }

/* The comp's "Zoom effect" annotation */
.lcb-zoom { overflow: hidden; display: block; }
.lcb-zoom img {
  display: block; width: 100%;
  transition: transform 1s cubic-bezier(.2, .7, .2, 1);
}
.lcb-zoom:hover img,
.lcb-zoom:focus-visible img { transform: scale(1.07); }

/* --------------------------------------------------------------------------
   10. Booking accordion
   -------------------------------------------------------------------------- */
.lcb-accordion { --bs-accordion-bg: transparent; --bs-accordion-border-color: transparent; }
.lcb-accordion .accordion-item { background: transparent; border: 0; }
.lcb-accordion .accordion-button {
  font-family: var(--lcb-display);
  font-size: clamp(1.15rem, 1.8vw, 1.72rem);
  color: #fff; background: transparent;
  justify-content: center; text-align: center;
  padding: .35em 0 .7em;
  border-bottom: 1px solid var(--lcb-rule-light);
  box-shadow: none;
}
.lcb-accordion .accordion-button:not(.collapsed) { color: #fff; background: transparent; box-shadow: none; }
.lcb-accordion .accordion-button::after { display: none; }  /* the comp has no chevron */
.lcb-accordion .accordion-body {
  padding: 1.5rem 0 0; text-align: center;
  font-size: clamp(.95rem, 1.1vw, 1.1rem); line-height: 1.7;
}

/* --------------------------------------------------------------------------
   11. Privileges — category rail
   -------------------------------------------------------------------------- */
.lcb-cats {
  display: flex; flex-wrap: nowrap; gap: clamp(.5rem, 1vw, 1rem);
  justify-content: flex-start;
  overflow-x: auto;
  padding-bottom: 1rem;
  scrollbar-width: thin;
}
.lcb-cat {
  flex: 0 0 auto; width: clamp(96px, 10.6vw, 152px);
  display: flex; flex-direction: column; align-items: center; gap: .85rem;
  color: var(--lcb-plum); text-align: center;
}
.lcb-cat__icon { width: clamp(58px, 6.2vw, 82px); }
.lcb-cat__label {
  font-size: clamp(.72rem, .85vw, .88rem);
  line-height: 1.32; font-weight: 300;
}
.lcb-cat:hover { opacity: 1; }
.lcb-cat:hover .lcb-cat__icon { opacity: .65; }
.lcb-cat.is-active .lcb-cat__label { font-weight: 600; }

/* From xl up the nine categories divide the row evenly, exactly as the comp
   sets them; below that the rail scrolls horizontally at a fixed item width. */
@media (min-width: 1200px) {
  .lcb-cats { justify-content: space-between; overflow-x: visible; }
  .lcb-cat { width: auto; flex: 1 1 0; min-width: 0; }
}

/* --------------------------------------------------------------------------
   12. Privileges — partner entries
   -------------------------------------------------------------------------- */
.lcb-rule { border: 0; border-top: 1px solid var(--lcb-plum); opacity: 1; margin: 0; }

.lcb-partner { padding-block: clamp(2.5rem, 5vw, 4.5rem); }
.lcb-partner__title { font-size: clamp(1.3rem, 2.1vw, 2rem); margin-bottom: .35rem; }
.lcb-partner__cat { font-size: clamp(.9rem, 1.1vw, 1.1rem); font-weight: 300; margin-bottom: 0; }
.lcb-partner__media { border-radius: 22px; overflow: hidden; }
.lcb-partner__media img { display: block; width: 100%; }
.lcb-partner__meta { margin-top: 2rem; font-size: clamp(.95rem, 1.15vw, 1.15rem); line-height: 1.6; }
.lcb-partner__meta dt { font-weight: 300; }
.lcb-partner__meta dd { margin: 0 0 1.4rem; font-weight: 300; }
.lcb-partner__meta dd:last-child { margin-bottom: 0; }

.lcb-pagination {
  display: flex; flex-wrap: wrap; gap: 1rem;
  align-items: center; justify-content: space-between;
  font-size: clamp(.95rem, 1.15vw, 1.15rem);
  padding-block: clamp(1.5rem, 3vw, 2.5rem);
}
.lcb-pagination__pages { display: flex; gap: .55rem; align-items: baseline; }
.lcb-pagination__pages .is-current { font-weight: 700; }
.lcb-pagination__sep { opacity: .55; }

/* --------------------------------------------------------------------------
   13. Footer
   -------------------------------------------------------------------------- */
.lcb-footer { background: var(--lcb-plum); color: #fff; }
.lcb-footer a { color: #fff; }
.lcb-footer__main { padding-block: clamp(3rem, 5vw, 4.5rem) clamp(2rem, 4vw, 3.5rem); }

.lcb-footer__nav { list-style: none; margin: 0; padding: 0; }
.lcb-footer__nav li + li { margin-top: .48rem; }
.lcb-footer__nav a,
.lcb-footer__contact { font-weight: 200; font-size: clamp(.95rem, 1.15vw, 1.16rem); line-height: 1.5; }
.lcb-footer__contact p { margin-bottom: 1.4rem; }

.lcb-footer__bar {
  border-top: 1px solid var(--lcb-rule-light);
  padding-block: 1.5rem;
  display: flex; flex-wrap: wrap; align-items: center; gap: 1rem 3.5rem;
  font-weight: 200; font-size: clamp(.85rem, 1vw, 1rem);
}
.lcb-footer__bar .lcb-social { margin-left: auto; display: block; width: 30px; }
.lcb-nav-overlay .lcb-social { display: block; width: 30px; }

/* --------------------------------------------------------------------------
   14. Fullscreen navigation overlay  (NAVIGATION_LCB.pdf)
   -------------------------------------------------------------------------- */
/* Full-viewport overlay. Driving Bootstrap's own custom property is what makes
   the height stick — .offcanvas-top would otherwise hold it at 30vh. */
.offcanvas.lcb-nav-overlay {
  --bs-offcanvas-height: 100vh;
  --bs-offcanvas-height: 100dvh;
  --bs-offcanvas-bg: var(--lcb-plum);
  --bs-offcanvas-color: #fff;
  --bs-offcanvas-border-width: 0;
  --bs-offcanvas-padding-x: 0;
  --bs-offcanvas-padding-y: 0;
  width: 100%;
  max-height: 100%;
}
.lcb-nav-overlay .offcanvas-header,
.lcb-nav-overlay .offcanvas-footer {
  padding: 1.35rem clamp(1.25rem, 4vw, 3rem);
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
}
.lcb-nav-overlay .offcanvas-header { border-bottom: 1px solid var(--lcb-rule-light); }
.lcb-nav-overlay .offcanvas-footer { border-top: 1px solid var(--lcb-rule-light); font-size: .95rem; font-weight: 200; }
.lcb-nav-overlay .offcanvas-body {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-align: center; padding: clamp(2rem, 5vw, 3.5rem) 1.25rem;
}

.lcb-nav-menu { list-style: none; margin: 0; padding: 0; }
.lcb-nav-menu li + li { margin-top: .28em; }
.lcb-nav-menu a {
  display: inline-block;
  font-weight: 300;
  font-size: clamp(1.25rem, 2.6vw, 2.15rem);
  line-height: 1.42;
  color: #fff;
}
.lcb-nav-menu .current-menu-item > a { opacity: .68; }

.lcb-close {
  width: 34px; height: 34px; padding: 0;
  background: none; border: 0; color: #fff; cursor: pointer;
  position: relative;
}
.lcb-close::before, .lcb-close::after {
  content: ""; position: absolute; left: 2px; right: 2px; top: 50%;
  height: 2px; background: currentColor; border-radius: 2px;
}
.lcb-close::before { transform: rotate(45deg); }
.lcb-close::after  { transform: rotate(-45deg); }


/* --------------------------------------------------------------------------
   15. Responsive corrections
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px) {
  .lcb-copy--justify { text-align: left; }   /* justification tears at narrow widths */
  .lcb-split__text { margin-bottom: 2.5rem; }
  .lcb-footer__contact { text-align: left !important; margin-top: 2.5rem; }
  .lcb-partner__media { max-width: 460px; }   /* stop the portrait dominating a stacked row */
  .lcb-footer__bar { gap: .75rem 2rem; }
  .lcb-footer__bar .lcb-social { flex-basis: 100%; max-width: 30px; }

}

@media (max-width: 575.98px) {
  .lcb-pagination { justify-content: center; }
}

/* --------------------------------------------------------------------------
   16. Motion / print
   -------------------------------------------------------------------------- */
/* Scroll reveal. theme.js tags each beat of a section with .lcb-reveal and a
   per-element delay, then adds .is-visible when the section reaches the
   viewport; with JS off nothing is ever hidden.

   The rise is deliberately short. The reference drops its text a full 20vh,
   but its sections start higher up the page than these do: the home hero here
   is a fixed ~660px, so the first heading sits about 70px above the fold and a
   20vh drop starts it off the bottom of the screen entirely — it then rises
   back into view with the fade already spent, which reads as no fade at all.
   A couple of rem keeps every element on screen for its whole run. */
.lcb-reveal {
  opacity: 0;
  transform: translateY(2rem);
  visibility: hidden;
  transition: opacity .7s ease, transform .7s ease-out;
  transition-delay: var(--lcb-reveal-delay, 0ms);
}

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

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    transition-duration: .001ms !important;
  }
  .lcb-feature { background-attachment: scroll; }
  .lcb-reveal { opacity: 1; transform: none; visibility: visible; }
  .lcb-zoom:hover img { transform: none; }
}

@media print {
  .lcb-header, .lcb-nav-overlay, .lcb-curve { display: none !important; }
  body { color: #000; }
}

/* ==========================================================================
   18. WordPress / Gutenberg
   The design predates the editor, so this section maps core block output onto
   the classes above rather than restyling the design.
   ========================================================================== */

/* Core layout ------------------------------------------------------------
   the_content() emits top-level blocks with no wrapper, so the measure and the
   gutters are applied here rather than by a container div. */
.lcb-entry { --lcb-gutter: clamp(1.25rem, 3.2vw, 3.25rem); }
.lcb-entry > * {
  max-width: 1140px;
  margin-inline: auto;
  padding-inline: var(--lcb-gutter);
}
.lcb-entry > .alignwide { max-width: 1320px; }
.lcb-entry > .alignfull {
  width: 100vw;
  max-width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
}
/* The feature block carries its own .container, so it must not be padded twice. */
.lcb-entry > .lcb-feature { padding-inline: 0; }

/* Blocks inherit the section rhythm from .lcb-section, so the editor's own
   vertical margins would double it up. */
.lcb-entry > .lcb-section,
.lcb-entry > .lcb-feature { margin-block: 0; }

/* Read More — a core/button style variation, so it is pickable in the editor */
.wp-block-button.is-style-lcb-more .wp-block-button__link {
  display: inline-block;
  background: none;
  border: 0;
  border-bottom: 1px solid var(--lcb-rule);
  border-radius: 0;
  font-family: var(--lcb-display);
  font-size: clamp(1rem, 1.35vw, 1.32rem);
  font-weight: 400;
  letter-spacing: .045em;
  line-height: 1.3;
  color: var(--lcb-plum);
  padding: 0 1.15em .55em;
}
.wp-block-button.is-style-lcb-more .wp-block-button__link:hover {
  opacity: .68;
  border-bottom-color: var(--lcb-plum);
}
.lcb-section--plum .wp-block-button.is-style-lcb-more .wp-block-button__link,
.lcb-feature__card .wp-block-button.is-style-lcb-more .wp-block-button__link {
  color: #fff;
  border-bottom-color: var(--lcb-rule-light);
}
.lcb-section--plum .wp-block-button.is-style-lcb-more .wp-block-button__link:hover,
.lcb-feature__card .wp-block-button.is-style-lcb-more .wp-block-button__link:hover {
  border-bottom-color: #fff;
}

/* Booking panels use core/details rather than a bespoke accordion block ---- */
.lcb-details { border: 0; }
.lcb-details > summary {
  display: block;
  list-style: none;
  cursor: pointer;
  font-family: var(--lcb-display);
  font-size: clamp(1.15rem, 1.8vw, 1.72rem);
  text-align: center;
  padding: .35em 0 .7em;
  border-bottom: 1px solid var(--lcb-rule-light);
}
.lcb-details > summary::-webkit-details-marker,
.lcb-details > summary::marker { display: none; content: ""; }
.lcb-details > summary:hover { opacity: .8; }
.lcb-details .wp-block-details__content,
.lcb-details > :not(summary) {
  text-align: center;
  padding-top: 1.5rem;
  font-size: clamp(.95rem, 1.1vw, 1.1rem);
  line-height: 1.7;
}

/* core/image inside a zoom wrapper ---------------------------------------- */
figure.lcb-zoom { margin: 0; }
figure.lcb-zoom img { border-radius: inherit; }

/* Editor-only: give the canvas the page's ground so white type stays legible */
.editor-styles-wrapper .lcb-section--plum,
.editor-styles-wrapper .lcb-feature__card { color: #fff; }

/* Comments are not part of this design, but keep the markup sane if enabled */
.lcb-comments { padding-block: clamp(2rem, 4vw, 3.5rem); }

/* WordPress markup corrections ------------------------------------------- */

/* wp_nav_menu output for the footer bar and the overlay's legal links. */
.lcb-legal-menu {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 1rem 3.5rem;
}
.lcb-footer__bar .lcb-legal-menu { font-weight: 200; }
.lcb-nav-overlay .offcanvas-footer .lcb-legal-menu { gap: 1rem 2rem; }

/* The footer contact column is a widget area. */
.lcb-footer__contact-title { margin-bottom: 1.4rem; }
.lcb-footer__contact .widget + .widget { margin-top: 1.4rem; }

/* wp_nav_menu marks the current page; the design shows it by weight, not colour. */
.lcb-nav-menu .current-menu-item > a,
.lcb-footer__nav .current-menu-item > a { opacity: .68; }

/* Post thumbnails inside the rounded partner frame. */
.lcb-partner__media a { display: block; }
.lcb-partner__media img { display: block; width: 100%; height: auto; }

/* paginate_links() output. */
.lcb-pagination__pages .page-numbers { padding: 0; }
.lcb-pagination__pages .page-numbers.is-current { font-weight: 700; }
.lcb-pagination__pages .page-numbers.dots { opacity: .55; }

/* Alignment utilities the editor emits inside constrained templates. */
.lcb-entry > .aligncenter { margin-inline: auto; }
.lcb-entry .alignleft  { float: left;  margin: 0 1.5rem 1rem 0; }
.lcb-entry .alignright { float: right; margin: 0 0 1rem 1.5rem; }

/* Screen-reader text, since core styles are not always present. */
.screen-reader-text {
  border: 0;
  clip-path: inset(50%);
  height: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
  width: 1px;
  word-wrap: normal !important;
}

/* Comments, if a post ever enables them. */
.lcb-comment-list { list-style: none; margin: 0; padding: 0; }
.lcb-comment-list ol { list-style: none; padding-left: 2rem; }
.lcb-comment-list .comment-body { padding-block: 1.25rem; }
.lcb-comment-list .comment-meta { font-size: .95rem; margin-bottom: .5rem; }
.lcb-comments .comment-form input[type="text"],
.lcb-comments .comment-form input[type="email"],
.lcb-comments .comment-form input[type="url"],
.lcb-comments .comment-form textarea {
  width: 100%;
  font-family: inherit;
  font-size: 1rem;
  color: var(--lcb-plum);
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--lcb-rule);
  padding: .6rem 0;
}
.lcb-comments .comment-form .submit {
  font-family: var(--lcb-display);
  letter-spacing: .045em;
  color: var(--lcb-plum);
  background: none;
  border: 0;
  border-bottom: 1px solid var(--lcb-rule);
  padding: 0 1.15em .55em;
  cursor: pointer;
}

/* Members area gate ------------------------------------------------------ */
.lcb-gate { max-width: 34rem; margin-inline: auto; text-align: center; }
.lcb-gate__title { margin-bottom: 2.5rem; }
.lcb-gate__error {
  margin-bottom: 1.5rem;
  font-size: clamp(.95rem, 1.1vw, 1.05rem);
  border-bottom: 1px solid var(--lcb-rule);
  padding-bottom: .75rem;
}
.lcb-gate__form {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem 2rem;
  align-items: baseline;
  justify-content: center;
}
.lcb-gate__form input[type="password"] {
  flex: 1 1 16rem;
  min-width: 0;
  font-family: inherit;
  font-size: clamp(1rem, 1.18vw, 1.19rem);
  font-weight: 300;
  color: var(--lcb-plum);
  text-align: center;
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--lcb-rule);
  padding: .7rem 0;
}
.lcb-gate__form input[type="password"]::placeholder { color: var(--lcb-plum); opacity: .45; }
.lcb-gate__form input[type="password"]:focus {
  outline: none;
  border-bottom-color: var(--lcb-plum);
}
.lcb-gate__form button { background: none; cursor: pointer; }
.lcb-gate__help { margin-top: 3rem; font-size: clamp(.9rem, 1.05vw, 1.05rem); }
.lcb-gate__help a { border-bottom: 1px solid var(--lcb-rule); padding-bottom: .15rem; }
