/* ==========================================================================
   Lake View Farm — Banquet & Event Venue
   Single landing page theme layer. Loaded LAST so it wins over style.css.
   Palette pulled from the brand logo (cream paper + bark ink + wheat gold).
   ========================================================================== */

:root {
    --lv-cream: #f3eee7;
    --lv-cream-2: #ece5db;
    --lv-paper: #fbf9f6;
    --lv-bark: #2b2622;
    --lv-ink: #1b1815;
    --lv-gold: #c29d68;
    --lv-gold-2: #a8814b;
    --lv-sage: #5f7059;
    --lv-muted: #7d7469;
    --lv-line: rgba(43, 38, 34, .12);
    --lv-radius: 18px;
    --lv-shadow: 0 24px 60px rgba(43, 38, 34, .12);
    --lv-shadow-lg: 0 34px 90px rgba(43, 38, 34, .18);
    --lv-head: "Public Sans", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
    --lv-body: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}

/* --------------------------------------------------------------- 1. Base */

html {
    scroll-behavior: smooth;
    scroll-padding-top: 110px;
}

/* ---------------------------------------------------------------- Lenis
   Lenis ships with a required stylesheet that was never included here. It
   stamps these classes on <html> and misbehaves without the matching rules:
   the wrapper can be measured against a percentage height, `stop()` does not
   actually lock the page, and the wheel gets swallowed whenever the pointer
   is over an iframe (the embedded map). */
html.lenis,
html.lenis body {
    height: auto;
}

.lenis.lenis-smooth {
    scroll-behavior: auto !important;
}

.lenis.lenis-smooth [data-lenis-prevent] {
    overscroll-behavior: contain;
}

.lenis.lenis-stopped {
    overflow: hidden;
}

.lenis.lenis-smooth iframe {
    pointer-events: none;
}

/* the map needs to stay interactive once you are actually on it */
.lenis.lenis-smooth .lv-map:hover iframe {
    pointer-events: auto;
}

/* native smooth scrolling fights Lenis — main.js flags the document */
html.lenis-active {
    scroll-behavior: auto;
}

body {
    font-family: var(--lv-body);
    color: var(--lv-bark);
    background: var(--lv-paper);
    overflow-x: hidden;
}

section[id],
div.lv-anchor {
    scroll-margin-top: 110px;
}

img {
    max-width: 100%;
}

a {
    text-decoration: none;
}

::selection {
    background: var(--lv-gold);
    color: #fff;
}

/* Keep the theme's GSAP/WOW reveals alive — the old override that forced
   .wow and .split-line permanently visible is deliberately not repeated. */
.wow {
    visibility: hidden;
}

.no-anim .wow {
    visibility: visible !important;
    opacity: 1 !important;
}

/* --------------------------------------------------- 2. Shared UI pieces */

.lv-shell {
    width: min(1290px, 100% - 40px);
    margin-inline: auto;
}

.lv-sec {
    position: relative;
    padding: 120px 0;
}

.lv-sec--tight {
    padding: 90px 0;
}

.lv-sec--cream {
    background: var(--lv-cream);
}

.lv-sec--dark {
    background: var(--lv-bark);
    color: var(--lv-cream);
}

.lv-tag {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .22em;
    text-transform: uppercase;
    color: var(--lv-gold-2);
    margin-bottom: 18px;
}

.lv-tag::before {
    content: "";
    width: 34px;
    height: 1px;
    background: currentColor;
    opacity: .55;
}

.lv-tag.is-centered::after {
    content: "";
    width: 34px;
    height: 1px;
    background: currentColor;
    opacity: .55;
}

.lv-sec--dark .lv-tag {
    color: var(--lv-gold);
}

.lv-title {
    font-family: var(--lv-head);
    font-weight: 700;
    letter-spacing: -.02em;
    line-height: 1.12;
    font-size: clamp(30px, 3.4vw, 52px);
    color: inherit;
    margin: 0 0 18px;
}

.lv-sec--dark .lv-title {
    color: var(--lv-cream);
}

.lv-lead {
    font-size: 17px;
    line-height: 1.8;
    color: var(--lv-muted);
    max-width: 62ch;
    margin: 0;
}

.lv-sec--dark .lv-lead {
    color: rgba(243, 238, 231, .72);
}

.lv-head-center {
    text-align: center;
    max-width: 780px;
    margin: 0 auto 62px;
}

.lv-head-center .lv-lead {
    margin-inline: auto;
}

/* Buttons */
.lv-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    padding: 16px 34px;
    border-radius: 999px;
    border: 1.5px solid transparent;
    font-family: var(--lv-head);
    font-weight: 700;
    font-size: 15px;
    line-height: 1;
    cursor: pointer;
    transition: transform .35s cubic-bezier(.2, .8, .2, 1), background .3s, color .3s, border-color .3s, box-shadow .35s;
}

.lv-btn i {
    font-size: 13px;
    transition: transform .35s;
}

.lv-btn:hover i {
    transform: translateX(4px);
}

.lv-btn--gold {
    background: var(--lv-gold);
    border-color: var(--lv-gold);
    color: #fff;
    box-shadow: 0 14px 30px rgba(194, 157, 104, .32);
}

.lv-btn--gold:hover {
    background: var(--lv-gold-2);
    border-color: var(--lv-gold-2);
    color: #fff;
    transform: translateY(-3px);
    box-shadow: 0 20px 42px rgba(168, 129, 75, .4);
}

.lv-btn--dark {
    background: var(--lv-bark);
    border-color: var(--lv-bark);
    color: var(--lv-cream);
}

.lv-btn--dark:hover {
    background: var(--lv-ink);
    color: #fff;
    transform: translateY(-3px);
}

.lv-btn--ghost {
    background: transparent;
    border-color: rgba(255, 255, 255, .45);
    color: #fff;
}

.lv-btn--ghost:hover {
    background: #fff;
    border-color: #fff;
    color: var(--lv-bark);
    transform: translateY(-3px);
}

.lv-btn--outline {
    background: transparent;
    border-color: var(--lv-line);
    color: var(--lv-bark);
}

.lv-btn--outline:hover {
    border-color: var(--lv-gold);
    color: var(--lv-gold-2);
    transform: translateY(-3px);
}

.lv-btn--block {
    width: 100%;
}

/* ------------------------------------------------------------ 3. Preloader */

#preloader {
    position: fixed;
    inset: 0;
    z-index: 9999;
    display: grid;
    place-items: center;
    background: var(--lv-cream);
    transition: opacity .6s ease, visibility .6s ease;
}

#preloader.preloaded {
    opacity: 0;
    visibility: hidden;
}

.lv-preloader-mark {
    width: 116px;
    height: 116px;
    border-radius: 50%;
    object-fit: cover;
    animation: lv-pulse 1.5s ease-in-out infinite;
}

@keyframes lv-pulse {

    0%,
    100% {
        transform: scale(.94);
        opacity: .65;
    }

    50% {
        transform: scale(1);
        opacity: 1;
    }
}

/* --------------------------------------------------------------- 4. Header */

.lv-header {
    position: absolute;
    inset: 0 0 auto 0;
    z-index: 900;
    padding: 22px 0 0;
    transition: background .45s ease, box-shadow .45s ease, transform .45s ease, padding .45s ease;
}

.lv-header.txa_sticky {
    position: fixed;
    top: 0;
    padding: 8px 0 0;
    background: var(--lv-paper);
    box-shadow: 0 10px 40px rgba(43, 38, 34, .1);
    transform: translateY(-105%);
}

.lv-header.txa_sticky.txa_sticky_show {
    transform: translateY(0);
}

.lv-header-inner {
    position: relative;
    /* sits above .lv-smoke, which is the header's own background layer */
    z-index: 2;
    width: min(1360px, 100% - 40px);
    margin-inline: auto;
    display: grid;
    /* minmax(0,…) keeps the two halves equal even when the right one holds
       the CTA, so the logo stays dead centre on every width */
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    align-items: center;
    column-gap: 26px;
}

/* Nav — split left / right around the centred brand mark.
   Scoped to `li a` throughout: the enquiry CTA is also an <a> inside
   .lv-nav--right, and `.lv-nav a` would out-specify .lv-header-cta. */
.lv-nav ul {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    align-items: center;
    gap: 34px;
}

.lv-nav--left ul {
    justify-content: flex-end;
}

.lv-nav--right ul {
    justify-content: flex-start;
}

.lv-nav li a {
    position: relative;
    display: inline-block;
    padding: 6px 0;
    font-family: var(--lv-head);
    font-size: 14px;
    font-weight: 600;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: #fff;
    white-space: nowrap;
    transition: color .3s ease;
    text-shadow: 0 1px 3px rgba(27, 24, 21, .55), 0 2px 16px rgba(27, 24, 21, .5);
}

.lv-nav li a::after {
    content: "";
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    height: 1.5px;
    background: var(--lv-gold);
    transform: scaleX(0);
    transform-origin: right;
    transition: transform .4s cubic-bezier(.2, .8, .2, 1);
}

.lv-nav li a:hover::after,
.lv-nav li.active > a::after {
    transform: scaleX(1);
    transform-origin: left;
}

.lv-nav li a:hover,
.lv-nav li.active > a {
    color: var(--lv-gold);
}

.lv-header.txa_sticky .lv-nav li a {
    color: var(--lv-bark);
    text-shadow: none;
}

.lv-header.txa_sticky .lv-nav li a:hover,
.lv-header.txa_sticky .lv-nav li.active > a {
    color: var(--lv-gold-2);
}

/* Right-hand column also carries the enquiry CTA at the far edge */
.lv-nav--right {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 26px;
}

.lv-header-cta {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    /* never let the grid column squeeze the pill's own padding away */
    flex: none;
    padding: 13px 26px;
    border-radius: 999px;
    background: var(--lv-gold);
    color: #fff;
    font-family: var(--lv-head);
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .09em;
    text-transform: uppercase;
    white-space: nowrap;
    transition: background .3s, color .3s, transform .35s, box-shadow .35s;
}

.lv-header-cta:hover {
    background: var(--lv-bark);
    color: #fff;
    transform: translateY(-2px);
    box-shadow: 0 14px 30px rgba(43, 38, 34, .28);
}

/* Centred circular brand mark */
.lv-brand {
    position: relative;
    display: block;
    width: 118px;
    height: 118px;
    flex: none;
    transition: width .45s ease, height .45s ease;
}

.lv-header.txa_sticky .lv-brand {
    width: 74px;
    height: 74px;
}

.lv-brand-ring {
    position: absolute;
    inset: 0;
    display: block;
    border-radius: 50%;
    padding: 5px;
    background: linear-gradient(150deg, rgba(255, 255, 255, .95), rgba(194, 157, 104, .6));
    box-shadow: 0 18px 44px rgba(27, 24, 21, .28);
}

.lv-brand-ring img {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    /* logo.png is 4:3 with flat margins — cover crops it back to the circle */
    object-fit: cover;
    display: block;
    background: var(--lv-cream);
}

.lv-brand::after {
    /* slow halo breathing behind the mark */
    content: "";
    position: absolute;
    inset: -16px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(255, 255, 255, .38) 0%, rgba(255, 255, 255, 0) 68%);
    animation: lv-halo 6s ease-in-out infinite;
    pointer-events: none;
    z-index: -1;
}

.lv-header.txa_sticky .lv-brand::after {
    display: none;
}

@keyframes lv-halo {

    0%,
    100% {
        transform: scale(.94);
        opacity: .55;
    }

    50% {
        transform: scale(1.06);
        opacity: .95;
    }
}

/* Burger — mobile only */
.lv-burger {
    display: none;
    width: 48px;
    height: 48px;
    border: 1px solid rgba(255, 255, 255, .35);
    border-radius: 50%;
    background: rgba(255, 255, 255, .12);
    -webkit-backdrop-filter: blur(6px);
    backdrop-filter: blur(6px);
    padding: 0;
    cursor: pointer;
}

.lv-burger span {
    display: block;
    width: 20px;
    height: 1.8px;
    margin: 4px auto;
    border-radius: 2px;
    background: #fff;
    transition: background .3s;
}

.lv-header.txa_sticky .lv-burger {
    border-color: var(--lv-line);
    background: transparent;
}

.lv-header.txa_sticky .lv-burger span {
    background: var(--lv-bark);
}

/* --------------------------------------- 5. White smoke drift below logo */

/* The smoke is the header's backdrop: it fills the whole bar and drifts
   BEHIND the logo and the nav links, bleeding a little past the bottom edge
   so it dissolves into the hero instead of stopping on a line. */
.lv-smoke {
    position: absolute;
    inset: 0 0 -56px 0;
    z-index: 1;
    pointer-events: none;
    overflow: hidden;
    /* an elliptical mask feathers all four edges, so the band never reads as
       a rectangle sitting on the photo */
    -webkit-mask-image: radial-gradient(ellipse 72% 96% at 50% 38%, #000 34%, rgba(0, 0, 0, .5) 66%, transparent 92%);
    mask-image: radial-gradient(ellipse 72% 96% at 50% 38%, #000 34%, rgba(0, 0, 0, .5) 66%, transparent 92%);
    /* screen makes the wisps lighten the photo instead of greying it out.
       The mask above already isolates this element as a blend group, so the
       mode belongs here rather than on the individual puffs. */
    mix-blend-mode: screen;
    /* isolate the layer so its repaints never reach the page behind it */
    contain: layout paint;
    will-change: opacity;
}

/* over the cream sticky bar there is nothing left to lighten */
.lv-header.txa_sticky .lv-smoke {
    mix-blend-mode: normal;
}

/* The smoke belongs to the hero. Once the bar sticks it is both invisible
   (nothing left to lighten on solid cream) and expensive — a masked,
   screen-blended stack of five animating blurs pinned on screen for the whole
   page. Drop it there and the scroll stays smooth. */
.lv-header.txa_sticky .lv-smoke {
    display: none;
}

/* the settled bed of haze the puffs travel through — a thin bright seam
   directly under the logo, not a grey slab */
.lv-smoke::before {
    content: "";
    position: absolute;
    left: 50%;
    top: 54%;
    width: 52%;
    height: 34px;
    transform: translateX(-50%);
    border-radius: 50%;
    background: radial-gradient(ellipse at center, rgba(255, 255, 255, .62) 0%, rgba(255, 255, 255, .34) 26%, rgba(255, 255, 255, .14) 52%, rgba(255, 255, 255, .04) 72%, rgba(255, 255, 255, 0) 88%);
    filter: blur(10px);
    animation: lv-bed 7s ease-in-out infinite;
}

@keyframes lv-bed {

    0%,
    100% {
        opacity: .45;
        transform: translateX(-50%) scaleX(.9);
    }

    50% {
        opacity: .8;
        transform: translateX(-50%) scaleX(1.15);
    }
}

/* Each <i> is one wisp. They are wide, flat and heavily feathered — a puff
   that is as tall as it is wide reads as a grey blob over a photo. */
.lv-smoke i {
    position: absolute;
    top: 50%;
    left: 0;
    display: block;
    width: 26vw;
    max-width: 400px;
    height: 56px;
    margin-top: -28px;
    border-radius: 50%;
    background: radial-gradient(ellipse at center,
            rgba(255, 255, 255, .82) 0%,
            rgba(255, 255, 255, .56) 22%,
            rgba(255, 255, 255, .3) 44%,
            rgba(255, 255, 255, .12) 64%,
            rgba(255, 255, 255, .03) 80%,
            rgba(255, 255, 255, 0) 92%);
    /* one modest blur for every wisp: enough to dissolve the ellipse edge,
       far cheaper than the 10-24px per-wisp filters this replaced */
    filter: blur(12px);
    opacity: 0;
    will-change: transform, opacity;
    transform: translateZ(0);
    animation-name: lv-drift;
    animation-timing-function: linear;
    animation-iteration-count: infinite;
}

@keyframes lv-drift {
    0% {
        transform: translate3d(-32vw, 8px, 0) scaleX(.55) scaleY(.8);
        opacity: 0;
    }

    18% {
        opacity: .75;
    }

    50% {
        transform: translate3d(40vw, -4px, 0) scaleX(1) scaleY(1.15);
        opacity: .6;
    }

    82% {
        opacity: .5;
    }

    100% {
        transform: translate3d(112vw, -14px, 0) scaleX(1.5) scaleY(.85);
        opacity: 0;
    }
}

.lv-smoke i:nth-child(1) {
    animation-duration: 14s;
    animation-delay: 0s;
    top: 36%;
}

.lv-smoke i:nth-child(2) {
    animation-duration: 19s;
    animation-delay: -4s;
    top: 66%;
    width: 32vw;
    height: 66px;
    margin-top: -33px;
}

.lv-smoke i:nth-child(3) {
    animation-duration: 11s;
    animation-delay: -7s;
    top: 26%;
    width: 18vw;
    height: 40px;
    margin-top: -20px;
}

.lv-smoke i:nth-child(4) {
    animation-duration: 23s;
    animation-delay: -13s;
    top: 58%;
    width: 38vw;
    height: 74px;
    margin-top: -37px;
}

.lv-smoke i:nth-child(5) {
    animation-duration: 16.5s;
    animation-delay: -9s;
    top: 46%;
    width: 22vw;
    height: 48px;
    margin-top: -24px;
}

/* over the cream sticky bar the smoke reads better slightly warmed */
.lv-header.txa_sticky .lv-smoke i {
    background: radial-gradient(ellipse at center, rgba(255, 255, 255, .95) 0%, rgba(243, 238, 231, .5) 40%, rgba(243, 238, 231, 0) 74%);
}

@media (prefers-reduced-motion: reduce) {

    .lv-smoke i,
    .lv-smoke::before,
    .lv-brand::after,
    .lv-preloader-mark {
        animation: none;
    }

    .lv-smoke i {
        opacity: .3;
        transform: translate3d(30vw, 0, 0);
    }

    html {
        scroll-behavior: auto;
    }
}

/* ------------------------------------------------------ 6. Mobile drawer */

.lv-mobile-menu {
    position: fixed;
    inset: 0;
    z-index: 1200;
    visibility: hidden;
    pointer-events: none;
}

.lv-mobile-menu.mobile_menu_on {
    visibility: visible;
    pointer-events: auto;
}

.lv-mobile-overlay {
    position: absolute;
    inset: 0;
    background: rgba(27, 24, 21, .55);
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
    opacity: 0;
    transition: opacity .4s ease;
}

.mobile_menu_on .lv-mobile-overlay {
    opacity: 1;
}

.lv-mobile-panel {
    position: absolute;
    top: 0;
    right: 0;
    width: min(360px, 88vw);
    height: 100%;
    background: var(--lv-cream);
    padding: 28px 28px 40px;
    overflow-y: auto;
    transform: translateX(100%);
    transition: transform .5s cubic-bezier(.2, .8, .2, 1);
    box-shadow: -20px 0 60px rgba(27, 24, 21, .25);
}

.mobile_menu_on .lv-mobile-panel {
    transform: translateX(0);
}

.lv-mobile-close {
    position: absolute;
    top: 22px;
    right: 22px;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    border: 1px solid var(--lv-line);
    background: transparent;
    color: var(--lv-bark);
    display: grid;
    place-items: center;
    cursor: pointer;
}

.lv-mobile-brand img {
    width: 92px;
    height: 92px;
    border-radius: 50%;
    object-fit: cover;
    background: #fff;
    box-shadow: 0 12px 30px rgba(43, 38, 34, .16);
}

.lv-mobile-menu nav ul {
    list-style: none;
    margin: 26px 0 0;
    padding: 0;
}

.lv-mobile-menu nav li + li {
    border-top: 1px solid var(--lv-line);
}

.lv-mobile-menu nav a {
    display: block;
    padding: 15px 0;
    font-family: var(--lv-head);
    font-size: 16px;
    font-weight: 600;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--lv-bark);
}

.lv-mobile-menu nav a:hover,
.lv-mobile-menu nav li.active > a {
    color: var(--lv-gold-2);
}

.lv-mobile-contact {
    margin-top: 28px;
    padding-top: 24px;
    border-top: 1px solid var(--lv-line);
    font-size: 14px;
    line-height: 2;
    color: var(--lv-muted);
}

.lv-mobile-contact a {
    color: var(--lv-bark);
}

body.mobile_menu_overlay_on {
    overflow: hidden;
}
