/* ═══════════════════════════════════════════════════
   DESIGN TOKENS
═══════════════════════════════════════════════════ */
*,
*::before,
*::after {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

:root {
    /* ── Premium Emerald Luxury theme (dark) ── */
    --black: #08251F;      /* deepest emerald — page background */
    --dark-1: #0C3229;     /* elevated surfaces, nav, cards */
    --dark-2: #103A31;     /* marquee, subtle panels */
    --dark-3: #123F37;     /* Dark Emerald — service cards, inputs, tabs */
    --dark-4: #1C5346;     /* borders, dots, hover surfaces */
    --gold: #C8A14A;       /* Luxury Gold */
    --gold-lt: #E4CE8F;    /* light champagne gold */
    --gold-dk: #B8903C;    /* Matte Gold */
    --white: #FFFFFF;
    --ivory: #F7F4EE;      /* Warm Ivory — primary light text */
    --muted: #9DB7AE;      /* muted sage — secondary text */
    --muted-lt: #D7D7D7;   /* Soft Gray — body copy */
    --emerald: #0F5B50;    /* Primary Emerald — accents */
    --emerald-2: #0D6B5E;  /* Secondary Emerald — accents */
    --emerald-deep: #123F37;
    --border: rgba(200, 161, 74, .20);
    --border-md: rgba(200, 161, 74, .38);
    --border-lg: rgba(200, 161, 74, .58);
    --grad-gold: linear-gradient(135deg, #B8903C 0%, #C8A14A 30%, #E4CE8F 50%, #C8A14A 70%, #B8903C 100%);
    --grad-gold-h: linear-gradient(90deg, #B8903C 0%, #C8A14A 35%, #E4CE8F 50%, #C8A14A 65%, #B8903C 100%);
    --grad-dark: linear-gradient(180deg, #103A31 0%, #0C3229 100%);
    --grad-emerald: linear-gradient(135deg, #123F37 0%, #0F5B50 55%, #0D6B5E 100%);
    --ff-display: 'Cormorant Garamond', Georgia, serif;
    --ff-script: 'Great Vibes', cursive;
    --ff-body: 'Montserrat', Arial, sans-serif;
    --nav-h: 76px;
    --ease: cubic-bezier(.25, .46, .45, .94);
    --ease-spring: cubic-bezier(.34, 1.56, .64, 1);
    --safe-bottom: env(safe-area-inset-bottom, 0px);
    --safe-top: env(safe-area-inset-top, 0px);
    --safe-left: env(safe-area-inset-left, 0px);
    --safe-right: env(safe-area-inset-right, 0px);
}

html { scroll-behavior: smooth; scroll-padding-top: calc(var(--nav-h) + 8px); }
body {
    background: var(--black);
    color: var(--ivory);
    font-family: var(--ff-body);
    font-weight: 400;
    line-height: 1.6;
    overflow-x: hidden;
    -webkit-tap-highlight-color: transparent;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    /* Sharper glyph shaping on high-resolution displays: proper kerning +
       common ligatures, and legibility-optimised rendering. Purely a
       rendering-quality improvement — does not change the typography style. */
    text-rendering: optimizeLegibility;
    font-kerning: normal;
    font-feature-settings: "kern" 1, "liga" 1, "clig" 1;
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
    /* Prevent accidental pull-to-refresh and improve scroll */
    overscroll-behavior: none;
}
/* Display / heading faces: keep ligatures + kerning crisp at large sizes */
.h-display, .hero-h1, .nav-logo-name, .ft-logo-name, .svc-name, .tc-name,
.gal-modal-title, h1, h2, h3 {
    font-kerning: normal;
    font-feature-settings: "kern" 1, "liga" 1, "dlig" 1;
}
img { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { border: none; background: none; cursor: pointer; font-family: inherit; touch-action: manipulation; }

::-webkit-scrollbar { width: 3px; }
::-webkit-scrollbar-track { background: var(--dark-1); }
::-webkit-scrollbar-thumb { background: var(--gold); }
::selection { background: #0F5B50; color: #FFFFFF; }
::-moz-selection { background: #0F5B50; color: #FFFFFF; }

/* ═══════════════════════════════════════════════════
   UTILITIES
═══════════════════════════════════════════════════ */
.wrap { max-width: 1320px; margin: 0 auto; padding: 0 clamp(20px, 5vw, 64px); }
.gold-text { background: var(--grad-gold); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
.eyebrow { display: inline-flex; align-items: center; gap: 14px; font-size: 10px; font-weight: 700; letter-spacing: .35em; text-transform: uppercase; color: var(--gold); margin-bottom: 18px; }
.eyebrow::before, .eyebrow::after { content: ''; display: block; width: 28px; height: 1px; background: var(--grad-gold-h); }
.eyebrow-center { justify-content: center; }
.eyebrow-center::before,
.eyebrow-center::after { content: ''; display: inline-block; width: 28px; height: 1px; background: currentColor; opacity: .5; vertical-align: middle; }
.h-display { font-family: var(--ff-display); font-size: clamp(38px, 5.5vw, 72px); font-weight: 300; line-height: 1.08; letter-spacing: -.01em; color: var(--white); }
.h-display em { font-style: italic; }
.section-sub { font-size: clamp(13px, 1.4vw, 15px); font-weight: 300; color: var(--muted); line-height: 1.85; max-width: 500px; }
.gold-rule { width: 52px; height: 1px; background: var(--grad-gold-h); margin: 20px 0; }
.gold-rule-center { margin: 20px auto; }
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 10px; padding: 15px 34px; font-family: var(--ff-body); font-size: 10px; font-weight: 700; letter-spacing: .28em; text-transform: uppercase; transition: all .3s var(--ease); position: relative; overflow: hidden; min-height: 48px; touch-action: manipulation; }
.btn-primary { background: var(--grad-gold); color: var(--black); }
.btn-primary::after { content: ''; position: absolute; inset: 0; background: rgba(255,255,255,.12); opacity: 0; transition: opacity .3s; }
.btn-primary:hover::after { opacity: 1; }
.btn-primary:hover { transform: translateY(-2px) scale(1.03); box-shadow: 0 14px 44px rgba(200,161,74,.42); }
.btn-ghost { border: 1px solid var(--border-md); color: var(--gold); }
.btn-ghost:hover { border-color: var(--gold); background: rgba(200,161,74,.06); transform: translateY(-2px) scale(1.02); }

.rv { opacity: 0; transform: translateY(28px); transition: opacity .8s var(--ease), transform .8s var(--ease); }
.rv.in { opacity: 1; transform: translateY(0); }
.rv.d1 { transition-delay: .1s; }
.rv.d2 { transition-delay: .2s; }
.rv.d3 { transition-delay: .3s; }
.rv.d4 { transition-delay: .4s; }
.rv.d5 { transition-delay: .5s; }
.rv.d6 { transition-delay: .6s; }

/* ═══════════════════════════════════════════════════
   PAGE LOADER
═══════════════════════════════════════════════════ */
#loader { position: fixed; inset: 0; z-index: 9999; background: var(--black); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 36px; transition: opacity .9s var(--ease), visibility .9s; }
#loader.out { opacity: 0; visibility: hidden; }
.ldr-brand { text-align: center; }
.ldr-name { font-family: var(--ff-script); font-size: clamp(52px, 12vw, 88px); background: var(--grad-gold); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; opacity: 0; transform: translateY(16px); animation: ldrUp .8s var(--ease) .3s forwards; }
.ldr-sub { font-size: 9px; font-weight: 700; letter-spacing: .4em; text-transform: uppercase; color: var(--muted); margin-top: 6px; opacity: 0; animation: ldrUp .6s var(--ease) .9s forwards; }
.ldr-bar { width: 180px; height: 1px; background: var(--dark-4); overflow: hidden; }
.ldr-fill { height: 100%; width: 0; background: var(--grad-gold-h); animation: ldrFill 1.8s var(--ease) .4s forwards; }
@keyframes ldrUp { to { opacity: 1; transform: translateY(0); } }
@keyframes ldrFill { to { width: 100%; } }

/* ═══════════════════════════════════════════════════
   CUSTOM CURSOR
═══════════════════════════════════════════════════ */
@media (pointer:fine) {
    * { cursor: none !important; }
    #cur-dot, #cur-ring { position: fixed; pointer-events: none; z-index: 10000; border-radius: 50%; will-change: transform; transition: opacity .3s; }
    #cur-dot { width: 6px; height: 6px; background: var(--gold); top: -3px; left: -3px; }
    #cur-ring { width: 28px; height: 28px; border: 1px solid rgba(200,161,74,.45); top: -14px; left: -14px; transition: width .25s, height .25s, top .25s, left .25s, border-color .25s; }
    #cur-ring.big { width: 48px; height: 48px; top: -24px; left: -24px; border-color: var(--gold); }
}

/* ═══════════════════════════════════════════════════
   NAVIGATION
═══════════════════════════════════════════════════ */
#nav { position: fixed; top: 0; left: 0; right: 0; z-index: 800; height: var(--nav-h); display: flex; align-items: center; transition: background .45s, border-color .45s, backdrop-filter .45s; padding-top: var(--safe-top); }
/* #nav is a flex container, so its .wrap child would otherwise shrink to its
   content width and get centred by `margin: 0 auto`, pulling the logo and
   hamburger inwards. Force it to span the full bar so both elements land on
   the real page gutters at every viewport size. */
#nav > .wrap { flex: 1 1 auto; width: 100%; min-width: 0; }
#nav.stuck { background: rgba(8,37,31,.93); backdrop-filter: blur(24px); border-bottom: 1px solid var(--border); }
.nav-inner { display: flex; align-items: center; justify-content: space-between; width: 100%; gap: 16px; }
.nav-logo { display: flex; flex-direction: column; line-height: 1; flex-shrink: 0; }
/* Fluid scaling — the logo grows/shrinks smoothly across every device width
   instead of jumping at breakpoints, keeping the script mark and its tagline
   in fixed proportion to each other. */
.nav-logo-name { font-family: var(--ff-script); font-size: clamp(22px, 6.6vw, 30px); background: var(--grad-gold); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
.nav-logo-tag { font-size: clamp(6px, 1.75vw, 7.5px); font-weight: 700; letter-spacing: .28em; text-transform: uppercase; color: var(--gold); margin-top: 3px; }
.nav-links { display: flex; align-items: center; gap: 40px; list-style: none; }
.nav-links a { font-size: 10px; font-weight: 600; letter-spacing: .22em; text-transform: uppercase; color: var(--ivory); position: relative; padding-bottom: 3px; transition: color .3s; touch-action: manipulation; }
.nav-links a::after { content: ''; position: absolute; bottom: 0; left: 0; width: 0; height: 1px; background: var(--grad-gold-h); transition: width .32s var(--ease); }
.nav-links a:hover { color: var(--gold); }
.nav-links a:hover::after { width: 100%; }
.nav-right { display: flex; align-items: center; gap: 16px; flex-shrink: 0; }
.hamburger { display: none; flex-direction: column; gap: 5px; padding: 10px 8px; margin-right: -4px; touch-action: manipulation; min-height: 44px; min-width: 44px; align-items: center; justify-content: center; flex-shrink: 0; }
.hamburger span { display: block; width: 22px; height: 1.5px; background: var(--gold); transition: all .3s var(--ease); }
.hamburger.open span:nth-child(1) { transform: rotate(45deg) translate(5px,5px); }
.hamburger.open span:nth-child(2) { opacity: 0; }
.hamburger.open span:nth-child(3) { transform: rotate(-45deg) translate(5px,-5px); }

#mob-menu { position: fixed; inset: 0; z-index: 799; background: var(--black); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 44px; opacity: 0; visibility: hidden; transition: opacity .4s var(--ease), visibility .4s var(--ease); padding: calc(var(--nav-h) + var(--safe-top) + 16px) 20px calc(24px + var(--safe-bottom)); overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; }
#mob-menu.open { opacity: 1; visibility: visible; }
#mob-menu a { font-family: var(--ff-display); font-size: clamp(30px, 8vw, 52px); font-weight: 300; color: var(--white); transition: color .3s; letter-spacing: .02em; min-height: 48px; display: flex; align-items: center; touch-action: manipulation; }
#mob-menu a:hover { color: var(--gold); }
/* Short viewports (small phones / landscape): tighten so everything fits */
@media (max-height: 700px) {
    #mob-menu { gap: 22px; justify-content: flex-start; }
    #mob-menu a { font-size: clamp(24px, 6.5vw, 34px); min-height: 44px; }
}
/* In-menu theme toggle (mobile) — premium gold-outlined pill */
.mob-theme-toggle { display: none; align-items: center; justify-content: center; gap: 12px; margin-top: 4px; padding: 14px 30px; min-height: 52px; border: 1px solid var(--border-md); border-radius: 40px; background: rgba(200,161,74,.05); color: var(--gold); font-family: var(--ff-body); font-size: 12px; font-weight: 700; letter-spacing: .22em; text-transform: uppercase; cursor: pointer; transition: border-color .3s var(--ease), background .3s, color .3s, transform .25s var(--ease-spring); touch-action: manipulation; }
.mob-theme-toggle:hover, .mob-theme-toggle:focus-visible { border-color: var(--gold); background: rgba(200,161,74,.1); transform: translateY(-1px); }
.mob-theme-toggle .mtt-icons { display: inline-flex; width: 18px; height: 18px; }
.mob-theme-toggle .mtt-icons svg { width: 18px; height: 18px; fill: currentColor; }
.mob-theme-toggle .icon-sun { display: none; }
.mob-theme-toggle .icon-moon { display: block; }
html.theme-light .mob-theme-toggle .icon-sun { display: block; }
html.theme-light .mob-theme-toggle .icon-moon { display: none; }

/* ═══════════════════════════════════════════════════
   HERO — Full‑bleed background image, refined typography
═══════════════════════════════════════════════════ */
#hero { position: relative; min-height: 100svh; display: flex; align-items: center; overflow: hidden; }
.hero-bg { position: absolute; inset: 0; background: radial-gradient(ellipse 100% 60% at 75% 35%, rgba(200,161,74,.055) 0%, transparent 65%), radial-gradient(ellipse 55% 90% at 5% 50%, rgba(200,161,74,.035) 0%, transparent 55%), radial-gradient(ellipse 80% 50% at 50% 100%, rgba(200,161,74,.025) 0%, transparent 60%), #08251F; }
.hero-bg::before { content: ''; position: absolute; inset: 0; background-image: radial-gradient(circle, rgba(200,161,74,.12) 1px, transparent 1px); background-size: 52px 52px; }
.hero-bg::after { content: ''; position: absolute; top: -10%; right: 25%; width: 1px; height: 140%; background: linear-gradient(180deg, transparent 0%, rgba(200,161,74,.25) 30%, rgba(200,161,74,.12) 70%, transparent 100%); transform: rotate(-18deg); transform-origin: top center; }

/* ── Full‑width hero image — covers entire hero section ── */
.hero-img-wrap { position: absolute; right: 0; top: 0; bottom: 0; width: 100%; overflow: hidden; }
.hero-img-wrap img { width: 100%; height: 100%; object-fit: cover; object-position: center 45%; opacity: .68; filter: saturate(.9) brightness(.92); will-change: transform; transform: translateZ(0); backface-visibility: hidden; }
/* Refined fade overlay — protects text readability while revealing more of the image */
.hero-img-fade { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(8,37,31,.92) 0%, rgba(8,37,31,.72) 22%, rgba(8,37,31,.40) 50%, rgba(8,37,31,.14) 76%, rgba(8,37,31,.02) 100%); }

.hero-content { position: relative; z-index: 2; padding-top: calc(var(--nav-h) + 20px); padding-bottom: 80px; max-width: 680px; }
.hero-eyebrow { display: inline-flex; align-items: center; gap: clamp(8px, 2.6vw, 12px); max-width: 100%; white-space: nowrap; font-size: 9.5px; font-weight: 700; letter-spacing: .38em; text-transform: uppercase; color: var(--gold); margin-bottom: 28px; opacity: 0; animation: rvUp .6s var(--ease) .25s forwards; }
/* Matching rules either side of the label. They shrink before the text does,
   so the eyebrow always stays on one line no matter how narrow the screen. */
.hero-eyebrow::before,
.hero-eyebrow::after { content: ''; flex: 0 1 clamp(14px, 7vw, 36px); min-width: 10px; height: 1px; background: var(--grad-gold-h); }

/* Refined hero heading — more breathing space, elegant line‑height */
.hero-h1 { font-family: var(--ff-display); font-size: clamp(46px, 7.5vw, 100px); font-weight: 300; line-height: 1.06; letter-spacing: -.012em; color: var(--white); margin-bottom: 32px; }
.hero-h1 .line { display: block; overflow: hidden; }
.hero-h1 .li { display: block; transform: translateY(110%); animation: lineUp .9s var(--ease) forwards; }
.hero-h1 .line:nth-child(1) .li { animation-delay: .45s; }
.hero-h1 .line:nth-child(2) .li { animation-delay: .6s; }
.hero-h1 .line:nth-child(3) .li { animation-delay: .75s; }

/* Improved paragraph readability */
.hero-desc { font-size: clamp(13.5px,1.5vw,15px); font-weight: 300; color: var(--muted-lt); line-height: 2.0; max-width: 460px; margin-bottom: 44px; opacity: 0; animation: rvUp .6s var(--ease) 1.0s forwards; }
.hero-actions { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; opacity: 0; animation: rvUp .6s var(--ease) 1.2s forwards; }
.scroll-cue { position: absolute; bottom: 32px; left: 50%; transform: translateX(-50%); z-index: 2; display: flex; flex-direction: column; align-items: center; gap: 8px; opacity: 0; animation: rvUp .6s var(--ease) 1.8s forwards; }
.scroll-cue span { font-size: 8.5px; font-weight: 700; letter-spacing: .28em; text-transform: uppercase; color: var(--muted); }
.scroll-mouse { width: 20px; height: 32px; border: 1px solid var(--border-md); border-radius: 10px; position: relative; }
.scroll-mouse::after { content: ''; position: absolute; top: 5px; left: 50%; transform: translateX(-50%); width: 2px; height: 7px; background: var(--gold); border-radius: 1px; animation: scrollPulse 1.6s ease infinite; }

@keyframes lineUp { to { transform: translateY(0); } }
@keyframes rvUp { to { opacity: 1; transform: translateY(0); } from { opacity: 0; transform: translateY(22px); } }
@keyframes scrollPulse { 0%,100% { opacity: 1; transform: translateX(-50%) translateY(0) } 60% { opacity: 0; transform: translateX(-50%) translateY(12px) } }

/* ═══════════════════════════════════════════════════
   MARQUEE TICKER
═══════════════════════════════════════════════════ */
.marquee-strip { overflow: hidden; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); background: var(--dark-2); padding: 16px 0; }
.marquee-track { display: flex; width: max-content; animation: marqRun 32s linear infinite; }
.marquee-strip:hover .marquee-track { animation-play-state: paused; }
.m-item { display: inline-flex; align-items: center; gap: 18px; padding: 0 36px; font-size: 10px; font-weight: 700; letter-spacing: .28em; text-transform: uppercase; color: var(--muted); }
.m-dot { width: 4px; height: 4px; border-radius: 50%; background: var(--gold); flex-shrink: 0; }
.m-item.hi { color: var(--gold); }
@keyframes marqRun { to { transform: translateX(-50%); } }

/* ═══════════════════════════════════════════════════
   SECTION COMMONS
═══════════════════════════════════════════════════ */
.section { padding: clamp(80px,10vw,140px) 0; }
.s-dark { background: var(--dark-2); }
.sh { margin-bottom: clamp(48px,7vw,80px); }
.sh-center { text-align: center; }
.sh-center .section-sub { margin: 0 auto; }
.sh-center .gold-rule { margin: 18px auto; }

/* ═══════════════════════════════════════════════════
   SERVICES
═══════════════════════════════════════════════════ */
.services-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2px; }
.svc-card { display: block; background: var(--dark-3); padding: 36px 28px 32px; position: relative; overflow: hidden; transition: background .24s var(--ease), border-color .24s, box-shadow .3s var(--ease), transform .3s var(--ease-spring); border: 1px solid transparent; cursor: pointer; touch-action: manipulation; }
.svc-card::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 2px; background: var(--grad-gold); transform: scaleY(0); transform-origin: bottom; transition: transform .38s var(--ease); z-index: 2; }
.svc-card::after { content: ''; position: absolute; inset: 0; background: radial-gradient(ellipse 80% 70% at 50% 110%, rgba(200,161,74,.06), transparent); opacity: 0; transition: opacity .24s; z-index: 1; }
.svc-card:hover { background: var(--dark-1); border-color: var(--border); }
.svc-card:hover::before { transform: scaleY(1); }
.svc-card:hover::after { opacity: 1; }
.svc-bg-img { position: absolute; inset: 0; background-size: cover; background-position: center; opacity: .55; z-index: 0; transition: opacity .25s var(--ease), transform .34s var(--ease); }
.svc-card:hover .svc-bg-img { opacity: .68; transform: scale(1.05); }
.svc-content { position: relative; z-index: 1; }
.svc-icon { width: 44px; height: 44px; border: 1px solid var(--border); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 18px; margin-bottom: 22px; transition: border-color .3s, transform .3s var(--ease-spring); }
.svc-card:hover .svc-icon { border-color: var(--gold); transform: scale(1.08) rotate(-3deg); }
.svc-name { font-family: var(--ff-display); font-size: 23px; font-weight: 500; color: var(--white); margin-bottom: 12px; letter-spacing: .005em; line-height: 1.2; }
.svc-desc { font-size: 12.5px; color: var(--muted); line-height: 1.75; margin-bottom: 24px; }
.svc-price { font-family: var(--ff-display); font-size: 22px; font-weight: 500; color: var(--gold-lt); letter-spacing: .01em; }
.svc-price span { font-family: var(--ff-body); font-size: 10px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); margin-left: 4px; }
.svc-arrow { position: absolute; bottom: 28px; right: 24px; width: 34px; height: 34px; border: 1px solid var(--border); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--gold); font-size: 13px; opacity: 0; transform: translateX(-8px); transition: all .3s var(--ease); }
.svc-card:hover .svc-arrow { opacity: 1; transform: translateX(0); }

/* ═══════════════════════════════════════════════════
   GALLERY
═══════════════════════════════════════════════════ */
.gal-tabs { display: flex; gap: 4px; background: var(--dark-3); border: 1px solid var(--border); padding: 4px; width: fit-content; margin: 0 auto 48px; }
.gal-tab { padding: 10px 28px; font-size: 10px; font-weight: 700; letter-spacing: .22em; text-transform: uppercase; color: var(--muted); cursor: pointer; transition: all .3s; min-height: 44px; touch-action: manipulation; }
.gal-tab.on { background: var(--grad-gold); color: var(--black); }
.ba-wrap { position: relative; max-width: 760px; margin: 0 auto; aspect-ratio: 4/3; overflow: hidden; user-select: none; cursor: ew-resize; touch-action: none; }
.ba-side { position: absolute; inset: 0; }
.ba-side img { width: 100%; height: 100%; object-fit: cover; }
.ba-after { clip-path: inset(0 50% 0 0); }
.ba-line-wrap { position: absolute; top: 0; bottom: 0; left: 50%; z-index: 10; display: flex; flex-direction: column; align-items: center; }
.ba-line-el { width: 2px; flex: 1; background: var(--gold); }
.ba-handle { position: absolute; top: 50%; transform: translateY(-50%); width: 46px; height: 46px; background: var(--grad-gold); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 16px; color: var(--black); box-shadow: 0 0 24px rgba(200,161,74,.5); pointer-events: none; }
.ba-lbl { position: absolute; bottom: 18px; font-size: 9px; font-weight: 700; letter-spacing: .22em; text-transform: uppercase; padding: 5px 14px; background: rgba(8,37,31,.68); backdrop-filter: blur(6px); }
.ba-lbl.bl { left: 18px; color: var(--ivory); }
.ba-lbl.al { right: 18px; color: var(--gold); }

.gal-grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-auto-rows: 220px; gap: 8px; }
.gi { position: relative; overflow: hidden; }
.gi picture { display: block; width: 100%; height: 100%; }
.gi img { width: 100%; height: 100%; object-fit: cover; object-position: center; transition: transform .35s var(--ease); }
.gi:hover img { transform: scale(1.06); }
.gi:nth-child(1) { grid-column: 1; grid-row: span 2; }
.gi-ov { position: absolute; inset: 0; background: linear-gradient(to top, rgba(8,37,31,.72) 0%, transparent 55%); opacity: 0; transition: opacity .18s; display: flex; align-items: flex-end; padding: 20px; }
.gi:hover .gi-ov { opacity: 1; }
.gi-tag { font-size: 9.5px; font-weight: 700; letter-spacing: .22em; text-transform: uppercase; color: var(--gold); }

/* ═══════════════════════════════════════════════════
   TESTIMONIALS – JS‑driven carousel
═══════════════════════════════════════════════════ */
.testi-viewport { overflow: hidden; position: relative; mask-image: linear-gradient(to right, transparent 0%, #000 6%, #000 94%, transparent 100%); -webkit-mask-image: linear-gradient(to right, transparent 0%, #000 6%, #000 94%, transparent 100%); }
.testi-track { display: flex; gap: 24px; width: max-content; will-change: transform; }
.testi-card { flex: 0 0 380px; background: var(--dark-3); border: 1px solid var(--border); padding: 40px 32px 36px; position: relative; user-select: none; display: flex; flex-direction: column; }
.tc-q { font-family: var(--ff-display); font-size: 72px; font-weight: 300; line-height: .6; display: block; margin-bottom: 20px; }
.tc-text { font-family: var(--ff-display); font-size: 17px; font-style: italic; font-weight: 300; color: var(--ivory); line-height: 1.75; margin-bottom: 28px; }
.tc-stars { display: flex; gap: 3px; margin-bottom: 20px; margin-top: auto; }
.tc-star { font-size: 12px; color: var(--gold); }
.tc-author { display: flex; align-items: center; gap: 14px; }
.tc-av { width: 42px; height: 42px; border-radius: 50%; background: var(--dark-2); border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; font-family: var(--ff-display); font-size: 17px; font-style: italic; color: var(--gold); }
.tc-name { font-size: 13px; font-weight: 600; color: var(--white); }
.tc-svc { font-size: 11px; color: var(--muted); margin-top: 3px; letter-spacing: .05em; }
.testi-controls { display: flex; align-items: center; justify-content: center; gap: 12px; margin-top: 44px; }
.tc-btn { width: 42px; height: 42px; border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; color: var(--gold); font-size: 14px; cursor: pointer; transition: all .3s; min-height: 44px; min-width: 44px; touch-action: manipulation; }
.tc-btn:hover { border-color: var(--gold); background: rgba(200,161,74,.08); }
.tc-dots { display: flex; gap: 6px; }
.tc-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--dark-4); border: 1px solid var(--border); cursor: pointer; transition: all .3s; }
.tc-dot.on { background: var(--gold); border-color: var(--gold); width: 18px; border-radius: 3px; }

/* ═══════════════════════════════════════════════════
   BOOKING
═══════════════════════════════════════════════════ */
.book-grid { display: grid; grid-template-columns: 1fr; gap: clamp(28px,4vw,44px); align-items: start; max-width: 720px; margin: 0 auto; }
.book-grid > .rv:first-child { text-align: center; }
.book-grid > .rv:first-child .gold-rule { margin-left: auto; margin-right: auto; }
.book-form { display: flex; flex-direction: column; gap: 18px; }
.fg { display: flex; flex-direction: column; gap: 7px; }
.fg label { font-size: 9px; font-weight: 700; letter-spacing: .28em; text-transform: uppercase; color: var(--gold); }
.fc { background: var(--dark-3); border: 1px solid var(--border); color: var(--ivory); padding: 14px 18px; font-family: var(--ff-body); font-size: 16px; /* prevent zoom on focus */ outline: none; transition: border-color .3s; width: 100%; -webkit-appearance: none; appearance: none; min-height: 48px; touch-action: manipulation; }
.fc::placeholder { color: var(--muted); }
.fc:focus { border-color: var(--gold); }
.fc.error { border-color: #e74c3c; }
select.fc { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' viewBox='0 0 11 7'%3E%3Cpath d='M1 1l4.5 4.5L10 1' stroke='%23C8A14A' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 16px center; padding-right: 42px; cursor: pointer; }
select.fc option { background: var(--dark-3); color: var(--ivory); }
select.fc optgroup { font-weight: 700; font-style: normal; color: var(--gold); background: var(--dark-2); font-family: var(--ff-body); font-size: 10px; letter-spacing: .18em; text-transform: uppercase; }
.fg-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
textarea.fc { resize: vertical; min-height: 88px; }
.book-reply-note { display: flex; align-items: center; gap: 11px; padding: 12px 16px; background: linear-gradient(135deg, rgba(15,91,80,.30) 0%, rgba(18,63,55,.20) 100%); border: 1px solid var(--border-md); border-radius: 4px; }
.book-reply-note .brn-dot { position: relative; flex-shrink: 0; width: 9px; height: 9px; border-radius: 50%; background: #25D366; box-shadow: 0 0 0 0 rgba(37,211,102,.55); animation: brnPulse 2.4s ease-out infinite; }
.book-reply-note .brn-text { font-size: 11.5px; color: var(--muted-lt); line-height: 1.55; letter-spacing: .01em; }
.book-reply-note .brn-text strong { color: var(--gold-lt); font-weight: 600; }
@keyframes brnPulse {
    0%   { box-shadow: 0 0 0 0 rgba(37,211,102,.55); }
    70%  { box-shadow: 0 0 0 8px rgba(37,211,102,0); }
    100% { box-shadow: 0 0 0 0 rgba(37,211,102,0); }
}
.book-note { font-size: 11px; color: var(--muted); line-height: 1.65; }
.book-note strong { color: var(--gold); }
.gender-hint { font-size: 10px; color: var(--muted); font-style: italic; letter-spacing: .04em; margin-top: -4px; }

/* ═══════════════════════════════════════════════════
   INSTAGRAM FEED
═══════════════════════════════════════════════════ */
.insta-scroll-wrap { overflow: hidden; position: relative; cursor: grab; touch-action: pan-y; margin-bottom: 36px; mask-image: linear-gradient(to right, transparent 0%, #000 4%, #000 96%, transparent 100%); -webkit-mask-image: linear-gradient(to right, transparent 0%, #000 4%, #000 96%, transparent 100%); }
.insta-scroll-wrap.dragging { cursor: grabbing; }
.insta-track { display: flex; gap: 6px; width: max-content; will-change: transform; }
.insta-item { flex: 0 0 190px; aspect-ratio: 1; position: relative; overflow: hidden; user-select: none; }
.insta-item img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); pointer-events: none; -webkit-user-drag: none; }
.insta-item:hover img { transform: scale(1.1); }
.ig-ov { position: absolute; inset: 0; background: rgba(8,37,31,.55); display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity .3s; font-size: 22px; color: var(--white); }
.insta-item:hover .ig-ov { opacity: 1; }
.insta-footer { text-align: center; }
.insta-handle { font-family: var(--ff-display); font-size: 22px; font-style: italic; color: var(--gold); display: block; margin-bottom: 16px; }

/* ═══════════════════════════════════════════════════
   FAQ
═══════════════════════════════════════════════════ */
.faq-cols { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(36px,5vw,72px); }
.faq-item { border-bottom: 1px solid var(--border); }
.faq-q { display: flex; justify-content: space-between; align-items: center; gap: 18px; padding: 22px 0; cursor: pointer; min-height: 48px; touch-action: manipulation; width: 100%; background: none; border: none; text-align: left; color: inherit; font-family: inherit; }
.faq-q-text { font-family: var(--ff-display); font-size: 19px; font-weight: 400; color: var(--white); transition: color .3s; }
.faq-item.open .faq-q-text { color: var(--gold); }
.faq-ico { flex-shrink: 0; width: 26px; height: 26px; border: 1px solid var(--border); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--gold); font-size: 13px; transition: all .3s var(--ease); }
.faq-item.open .faq-ico { background: var(--gold); color: var(--black); transform: rotate(45deg); }
.faq-a { max-height: 0; overflow: hidden; transition: max-height .42s var(--ease); }
.faq-item.open .faq-a { max-height: 220px; }
.faq-a-inner { font-size: 13.5px; color: var(--muted); line-height: 1.8; padding-bottom: 22px; }

/* ═══════════════════════════════════════════════════
   CONTACT + MAP
═══════════════════════════════════════════════════ */
.contact-wrap { display: grid; grid-template-columns: 1fr 1.3fr; border: 1px solid var(--border); }
.contact-info { padding: clamp(36px,5vw,64px); background: var(--dark-3); }
.ci-item { display: flex; gap: 16px; margin-bottom: 28px; }
.ci-icon { font-size: 18px; color: var(--gold); flex-shrink: 0; margin-top: 3px; }
.ci-lbl { font-size: 9px; font-weight: 700; letter-spacing: .22em; text-transform: uppercase; color: var(--gold); margin-bottom: 5px; }
.ci-val { font-size: 13.5px; color: var(--ivory); line-height: 1.7; }
.ci-val a { transition: color .3s; }
.ci-val a:hover { color: var(--gold); }
.hours-table { width: 100%; border-collapse: collapse; margin-top: 6px; }
.hours-table td { padding: 5px 0; font-size: 12.5px; color: var(--muted); }
.hours-table td:first-child { color: var(--ivory); font-weight: 500; }
.hours-table tr.today td { color: var(--gold); }
.contact-map { min-height: 480px; position: relative; }
.contact-map iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: none; filter: invert(95%) hue-rotate(180deg) brightness(90%) contrast(88%) saturate(.7); }

/* ═══════════════════════════════════════════════════
   FOOTER
═══════════════════════════════════════════════════ */
#footer { background: #123F37; border-top: 1px solid var(--border); padding-bottom: var(--safe-bottom); }
.footer-main { padding: clamp(72px,9vw,112px) 0 60px; display: grid; grid-template-columns: 1.6fr 1fr 1fr 1.15fr; gap: clamp(40px,5vw,72px); }
.ft-logo-name { font-family: var(--ff-script); font-size: 44px; background: var(--grad-gold); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; display: block; margin-bottom: 18px; line-height: 1; }
.ft-about { font-size: 13.5px; color: var(--muted); line-height: 1.9; margin-bottom: 28px; max-width: 340px; }
.ft-social { display: flex; gap: 12px; }
.ft-soc { width: 40px; height: 40px; border: 1px solid var(--border-md); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 15px; color: var(--gold); background: rgba(200,161,74,.04); transition: all .3s var(--ease); min-height: 44px; min-width: 44px; touch-action: manipulation; }
.ft-soc:hover { border-color: var(--gold); color: var(--emerald-deep, #123F37); background: var(--gold); transform: translateY(-2px); box-shadow: 0 6px 18px rgba(200,161,74,.28); }
.ft-col-title { font-size: 9.5px; font-weight: 700; letter-spacing: .32em; text-transform: uppercase; color: var(--gold); margin-bottom: 24px; position: relative; padding-bottom: 12px; }
.ft-col-title::after { content: ''; position: absolute; left: 0; bottom: 0; width: 28px; height: 1px; background: var(--gold); opacity: .5; }
.ft-links { list-style: none; display: flex; flex-direction: column; gap: 12px; }
.ft-links a { font-size: 13.5px; color: var(--muted); transition: color .3s, transform .3s var(--ease); padding: 4px 0; display: inline-block; touch-action: manipulation; }
.ft-links a:hover { color: var(--gold); transform: translateX(3px); }
.footer-bottom { border-top: 1px solid rgba(200,161,74,.14); padding: 22px 0; display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.fb-copy { font-size: 12px; color: var(--muted); }
.fb-copy span { color: var(--gold); }
.fb-links { display: flex; gap: 24px; list-style: none; }
.fb-links a { font-size: 12px; color: var(--muted); transition: color .3s; padding: 4px 0; display: inline-block; touch-action: manipulation; }
.fb-links a:hover { color: var(--gold); }
/* Powered by GURU AI Technologies — premium underline sweep */
.ft-powered { text-align: center; padding: 18px 0 26px; border-top: 1px solid rgba(200,161,74,.10); font-size: 11.5px; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.ft-powered a { position: relative; color: #C8A14A; font-weight: 600; text-decoration: none; padding: 2px 0; margin-left: 6px; letter-spacing: .18em; transition: color .3s var(--ease); }
.ft-powered a::after { content: ''; position: absolute; left: 0; right: 0; bottom: -2px; height: 1px; background: linear-gradient(90deg, transparent 0%, var(--gold) 50%, transparent 100%); transform: scaleX(.3); transform-origin: center; transition: transform .45s var(--ease); }
.ft-powered a:hover { color: #FFFFFF; }
.ft-powered a:hover::after { transform: scaleX(1); }

/* ═══════════════════════════════════════════════════
   FLOATING ACTION BUTTONS — consistent sizing & premium style
═══════════════════════════════════════════════════ */
.float-stack { position: fixed; bottom: calc(26px + var(--safe-bottom)); right: calc(26px + var(--safe-right)); z-index: 700; display: flex; flex-direction: column; align-items: flex-end; gap: 16px; }
.wa-float { display: flex; align-items: center; gap: 12px; }
.wa-tip { background: var(--dark-3); border: 1px solid var(--border); padding: 8px 16px; font-size: 11.5px; font-weight: 600; color: var(--ivory); white-space: nowrap; opacity: 0; transform: translateX(8px); transition: all .3s var(--ease); pointer-events: none; }
/* Only show tooltips on devices with a real hover cursor (mouse/trackpad).
   This prevents tooltips from firing during scroll-touch on phones. */
@media (hover: hover) and (pointer: fine) {
    .wa-float:hover .wa-tip { opacity: 1; transform: translateX(0); }
}

/* Base floating button — shared by all three, with touch-action for mobile.
   The base carries the official WhatsApp green + a realistic pulsing glow;
   the chatbot & call buttons override the fill/glow below. */
.wa-btn { position: relative; width: 56px; height: 56px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: #25D366; box-shadow: 0 4px 16px rgba(37,211,102,.45); transition: transform .3s var(--ease-spring), box-shadow .3s; min-height: 56px; min-width: 56px; touch-action: manipulation; overflow: hidden; user-select: none; -webkit-user-select: none; animation: waGlow 2.4s ease-in-out infinite; }
.wa-btn:hover { transform: scale(1.08); box-shadow: 0 0 0 4px rgba(37,211,102,.22), 0 10px 30px rgba(37,211,102,.6); animation-play-state: paused; }
/* On touch devices, prevent the scale-up on touch (feels like a mis-tap) */
@media (hover: none) {
    .wa-btn:hover { transform: none; }
    .wa-btn:active { transform: scale(.95); }
}
.wa-btn svg { width: 28px; height: 28px; fill: #fff; position: relative; z-index: 1; }
/* Glossy top highlight for depth (replaces the old clipped sonar ring) */
.wa-pulse { position: absolute; inset: 0; border-radius: 50%; background: radial-gradient(circle at 50% 28%, rgba(255,255,255,.28), rgba(255,255,255,0) 62%); pointer-events: none; }
@keyframes waGlow {
    0%, 100% { box-shadow: 0 4px 16px rgba(37,211,102,.42), 0 0 0 0 rgba(37,211,102,.5); }
    50%      { box-shadow: 0 6px 22px rgba(37,211,102,.55), 0 0 0 10px rgba(37,211,102,0); }
}

/* ── GURU AI Chatbot button — logo fills the circular area perfectly ── */
.chatbot-btn { background: var(--emerald); box-shadow: 0 0 0 2px rgba(15,91,80,.55), 0 4px 18px rgba(15,91,80,.42); animation: chatBounce 3s ease-in-out infinite; overflow: hidden; }
.chatbot-btn:hover { animation-play-state: paused; box-shadow: 0 0 0 2px #C8A14A, 0 8px 28px rgba(200,161,74,.5); }
/* Logo image: fills the button, object-fit:cover crops the square to a perfect circle */
.chatbot-btn img { position: relative; z-index: 1; width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }
@keyframes chatBounce { 0%,100% { transform: translateY(0); } 30% { transform: translateY(-8px); } 60% { transform: translateY(0); } 80% { transform: translateY(-4px); } }

/* ── Call button — consistent with the stack ── */
.call-btn { background: var(--emerald); border: 1px solid rgba(200,161,74,.38); box-shadow: 0 4px 18px rgba(15,91,80,.34); animation: none; }
.call-btn:hover { box-shadow: 0 0 0 2px #C8A14A, 0 8px 28px rgba(200,161,74,.42); }
.call-btn svg { width: 24px; height: 24px; fill: #FFFFFF; position: relative; z-index: 1; }
.call-pulse { position: absolute; inset: 0; border-radius: 50%; background: var(--emerald); animation: callSoftPulse 3s ease-out infinite; }
@keyframes callSoftPulse { 0% { transform: scale(1); opacity: .18; } 100% { transform: scale(1.5); opacity: 0; } }

/* ═══════════════════════════════════════════════════
   RESPONSIVE
═══════════════════════════════════════════════════ */
@media (max-width:1100px) {
    .services-grid { grid-template-columns: repeat(2, 1fr); }
    .footer-main { grid-template-columns: 1fr 1fr; }
    .testi-card { flex: 0 0 340px; }
}
@media (max-width:900px) {
    .book-grid { grid-template-columns: 1fr; }
    .contact-wrap { grid-template-columns: 1fr; }
    .contact-map { min-height: 320px; }
    .testi-card { flex: 0 0 300px; }
    .faq-cols { grid-template-columns: 1fr; }
}
@media (max-width:768px) {
    :root { --nav-h: 64px; }
    .nav-links, .nav-right .btn { display: none; }
    .hamburger { display: flex; }
    .mob-theme-toggle { display: inline-flex; }
    /* Clean two-part header: logo left · hamburger right. The theme toggle lives
       inside the mobile menu on phones, so it is hidden from the bar here.
       The .wrap container provides consistent left/right gutters automatically,
       so the logo and hamburger sit at the same inset on every screen size. */
    .nav-inner { gap: 8px; justify-content: space-between; }
    /* The middle <nav> (desktop links) is empty on mobile — remove it from the
       flex row entirely so space-between cleanly pins logo↔hamburger to the
       gutters instead of distributing a collapsed third item. */
    .nav-inner > nav[aria-label="Primary"] { display: none; }
    .nav-logo { margin-left: 0; }
    .nav-right { gap: 0; margin-right: 0; }
    .nav-right .theme-toggle { display: none; }
    /* Keep the two-dash eyebrow on a single line as the viewport narrows */
    .hero-eyebrow { font-size: 9px; letter-spacing: clamp(.16em, .55vw, .26em); margin-bottom: 22px; }
    /* Hamburger sits flush in the top-right corner, optically aligned with the
       logo via a symmetric touch box. Overrides the base negative margin so it
       lands exactly on the .wrap gutter. */
    .hamburger { margin: 0; padding: 0; width: 44px; height: 44px; min-height: 44px; min-width: 44px; flex-direction: column; gap: 5px; align-items: center; justify-content: center; }

    /* Hero — full‑width image on mobile with stronger overlay for readability */
    .hero-img-wrap { width: 100%; }
    .hero-img-fade { background: linear-gradient(180deg, rgba(8,37,31,.72) 0%, rgba(8,37,31,.45) 35%, rgba(8,37,31,.35) 65%, rgba(8,37,31,.55) 100%); }
    .scroll-cue { display: none; }
    .hero-content { padding-top: calc(var(--nav-h) + 16px); padding-bottom: 60px; max-width: 100%; }
    .hero-h1 { font-size: clamp(38px,10vw,56px); margin-bottom: 20px; }
    .hero-desc { max-width: 100%; margin-bottom: 28px; }
    .hero-actions { gap: 12px; }

    .services-grid { grid-template-columns: 1fr; gap: 2px; }
    .gal-grid { grid-template-columns: 1fr 1fr; grid-auto-rows: 220px; }
    .gi:nth-child(1) { grid-column: auto; grid-row: auto; }
    .testi-card { flex: 0 0 85vw; }
    .footer-main { grid-template-columns: 1fr; gap: 28px; padding-bottom: 36px; }
    .insta-item { flex: 0 0 140px; }
    .testi-viewport { mask-image: linear-gradient(to right, transparent 0%, #000 3%, #000 97%, transparent 100%); -webkit-mask-image: linear-gradient(to right, transparent 0%, #000 3%, #000 97%, transparent 100%); }
    .ba-handle { width: 38px; height: 38px; font-size: 13px; }

    /* Floating buttons — slightly smaller on mobile, same proportions */
    .float-stack { bottom: calc(16px + var(--safe-bottom)); right: calc(16px + var(--safe-right)); gap: 14px; }
    .wa-btn { width: 46px; height: 46px; min-height: 46px; min-width: 46px; }
    .wa-btn svg { width: 24px; height: 24px; }
    .wa-btn svg { width: 22px; height: 22px; }
    .call-btn svg { width: 20px; height: 20px; }
    /* Chatbot logo scales automatically via 100% width/height */
}
@media (max-width:520px) {
    .hero-actions { flex-direction: column; width: 100%; }
    .hero-actions .btn { width: 100%; justify-content: center; }
    .fg-row { grid-template-columns: 1fr; }
    .gal-grid { grid-template-columns: 1fr; }
    .gi:nth-child(n+4) { display: none; }
    .footer-bottom { flex-direction: column; text-align: center; }
    .fb-links { justify-content: center; }
    .testi-card { flex: 0 0 88vw; padding: 28px 22px 28px; }
    .tc-text { font-size: 15px; }
    .tc-q { font-size: 56px; }
    .insta-item { flex: 0 0 120px; }
    .book-form { gap: 14px; }
    .fc { padding: 12px 14px; font-size: 16px; min-height: 44px; }
}
@media (max-width:380px) {
    .nav-logo-tag { letter-spacing: .2em; }
    .hero-eyebrow { font-size: 8.5px; letter-spacing: .14em; }
    .hero-eyebrow::before,
    .hero-eyebrow::after { flex-basis: clamp(10px, 5vw, 36px); }
    .hamburger { min-height: 42px; min-width: 42px; width: 42px; height: 42px; padding: 0; }
    .hamburger span { width: 20px; }
    .hero-h1 { font-size: clamp(32px,11vw,44px); }
    .hero-desc { font-size: 13px; }
    .btn { padding: 13px 20px; font-size: 9px; letter-spacing: .2em; min-height: 44px; }
}
@media (prefers-reduced-motion:reduce) {
    *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
    /* Fully stop the marquee ticker rather than looping it imperceptibly */
    .marquee-track { animation: none !important; }
    .book-reply-note .brn-dot { animation: none !important; }
    .wa-btn { animation: none !important; }
    .testi-track { transition: none !important; }
}
/* ═══════════════════════════════════════════════════
   ACCESSIBILITY & FORM FEEDBACK
═══════════════════════════════════════════════════ */
.skip-link { position: fixed; top: -60px; left: 16px; z-index: 10001; background: var(--grad-gold); color: var(--black); padding: 10px 22px; font-size: 11px; font-weight: 700; letter-spacing: .2em; text-transform: uppercase; transition: top .25s var(--ease); }
.skip-link:focus { top: 12px; }

:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; }

.nav-links a.active { color: var(--gold); }
.nav-links a.active::after { width: 100%; }

.field-err { font-size: 11px; color: #E06A5A; line-height: 1.5; min-height: 0; display: block; }
.field-err:empty { display: none; }
.fc.error { border-color: #E06A5A; }
.fc[aria-invalid="true"]:focus { border-color: #E06A5A; }

.form-status { font-size: 12.5px; line-height: 1.6; margin-top: 4px; min-height: 0; }
.form-status.ok { color: var(--gold-lt); }
.form-status.err { color: #E06A5A; }
.form-status:empty { display: none; }

.btn-submit:disabled { opacity: .65; cursor: wait; transform: none; box-shadow: none; }

/* Honeypot — visually removed, still in the DOM for bots */
.hp-field { position: absolute; left: -9999px; top: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* ═══════════════════════════════════════════════════
   GURU AI CHATBOT PANEL — mobile-hardened
   • Fullscreen on mobile: no dvh math, no keyboard glitches
   • visualViewport-aware: --vv-bottom is set by JS when keyboard opens
   • No visibility transition: only opacity + pointer-events flip
   • contain: prevents layout thrashing from siblings
═══════════════════════════════════════════════════ */
#guru-panel {
    position: fixed;
    bottom: calc(96px + var(--safe-bottom));
    right: calc(26px + var(--safe-right));
    z-index: 900;
    width: min(390px, calc(100vw - 32px));
    height: min(600px, calc(100vh - 140px));
    background: var(--dark-1);
    border: 1px solid var(--border-md);
    box-shadow: 0 24px 80px rgba(0,0,0,.6), 0 0 0 1px rgba(200,161,74,.06);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    opacity: 0;
    pointer-events: none;
    transform: translateY(16px) scale(.98);
    transition: opacity .28s var(--ease), transform .28s var(--ease);
    contain: layout paint style;
    will-change: transform, opacity;
    isolation: isolate;
}
#guru-panel.open { opacity: 1; pointer-events: auto; transform: translateY(0) scale(1); }

.guru-head { display: flex; align-items: center; gap: 12px; padding: 16px 18px; background: var(--dark-2); border-bottom: 1px solid var(--border); flex-shrink: 0; }
.guru-head-logo { width: 40px; height: 40px; border-radius: 50%; overflow: hidden; border: 1px solid var(--border-md); flex-shrink: 0; }
.guru-head-logo img { width: 100%; height: 100%; object-fit: cover; }
.guru-head-title { min-width: 0; flex: 1; }
.guru-head-name { font-family: var(--ff-display); font-size: 19px; color: var(--white); line-height: 1.1; }
.guru-head-sub { font-size: 9px; font-weight: 700; letter-spacing: .22em; text-transform: uppercase; color: var(--gold); display: flex; align-items: center; gap: 6px; margin-top: 3px; }
.guru-online { width: 6px; height: 6px; border-radius: 50%; background: #4CAF50; box-shadow: 0 0 6px rgba(76,175,80,.8); }
.guru-close { margin-left: auto; width: 36px; height: 36px; border: 1px solid var(--border); border-radius: 50%; color: var(--muted-lt); font-size: 15px; display: flex; align-items: center; justify-content: center; transition: border-color .25s, color .25s; flex-shrink: 0; background: transparent; cursor: pointer; }
.guru-close:hover, .guru-close:focus-visible { border-color: var(--gold); color: var(--gold); }

.guru-body {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 18px 16px;
    display: flex;
    flex-direction: column;
    gap: 12px;
    scroll-behavior: smooth;
    overscroll-behavior: contain;
}
.guru-body::-webkit-scrollbar { width: 3px; }
.guru-body::-webkit-scrollbar-thumb { background: var(--border-md); }

.guru-msg { max-width: 84%; padding: 12px 15px; font-size: 13px; line-height: 1.65; white-space: pre-line; word-break: break-word; }
.guru-msg.bot { align-self: flex-start; background: var(--dark-3); border: 1px solid var(--border); color: var(--ivory); border-radius: 2px 14px 14px 14px; }
.guru-msg.user { align-self: flex-end; background: var(--grad-gold); color: var(--black); font-weight: 500; border-radius: 14px 2px 14px 14px; }
.guru-msg.typing { display: inline-flex; gap: 5px; align-items: center; padding: 14px 18px; }
.guru-msg.typing span { width: 6px; height: 6px; border-radius: 50%; background: var(--gold); animation: guruDot 1.2s ease-in-out infinite; }
.guru-msg.typing span:nth-child(2) { animation-delay: .15s; }
.guru-msg.typing span:nth-child(3) { animation-delay: .3s; }
@keyframes guruDot { 0%, 60%, 100% { opacity: .3; transform: translateY(0); } 30% { opacity: 1; transform: translateY(-4px); } }

.guru-chips { display: flex; flex-wrap: wrap; gap: 7px; align-self: flex-start; max-width: 100%; }
.guru-chip { padding: 8px 15px; font-size: 11px; font-weight: 600; letter-spacing: .04em; color: var(--gold); background: transparent; border: 1px solid var(--border-md); border-radius: 20px; cursor: pointer; transition: background .25s, border-color .25s; min-height: 36px; touch-action: manipulation; font-family: inherit; }
.guru-chip:hover, .guru-chip:focus-visible { background: rgba(200,161,74,.1); border-color: var(--gold); }

.guru-foot { display: flex; gap: 10px; padding: 14px 16px calc(14px + var(--safe-bottom)); background: var(--dark-2); border-top: 1px solid var(--border); flex-shrink: 0; margin: 0; }
.guru-input { flex: 1; min-width: 0; background: var(--dark-3); border: 1px solid var(--border); color: var(--ivory); padding: 12px 16px; font-family: var(--ff-body); font-size: 16px; outline: none; border-radius: 24px; transition: border-color .3s; min-height: 46px; -webkit-appearance: none; appearance: none; }
.guru-input:focus { border-color: var(--gold); }
.guru-input::placeholder { color: var(--muted); }
.guru-send { width: 46px; height: 46px; border-radius: 50%; background: var(--grad-gold); color: var(--black); border: none; display: flex; align-items: center; justify-content: center; flex-shrink: 0; transition: transform .25s var(--ease-spring), opacity .25s; touch-action: manipulation; cursor: pointer; }
.guru-send:hover { transform: scale(1.08); }
.guru-send:disabled { opacity: .5; transform: none; cursor: default; }
.guru-send svg { width: 19px; height: 19px; fill: var(--black); }

/* Mobile — fullscreen with visualViewport-anchored bottom for keyboard safety */
@media (max-width: 768px) {
    #guru-panel {
        top: 0;
        left: 0;
        right: 0;
        bottom: var(--vv-bottom, 0px);
        width: 100vw;
        width: 100dvw;
        height: auto;
        border: none;
        border-radius: 0;
        transform: translateY(24px);
    }
    #guru-panel.open { transform: translateY(0); }
    .guru-head { padding: calc(14px + var(--safe-top)) 18px 14px; }
    .guru-body { padding: 16px 14px; }
    .guru-msg { font-size: 14px; }
    .guru-chip { font-size: 12px; padding: 9px 16px; }
}

/* ═══════════════════════════════════════════════════
   GURU HINT BUBBLE
   Small notification above the chatbot button. Fades in
   ~2s after load, dismisses on scroll or after 6s.
═══════════════════════════════════════════════════ */
#guru-hint {
    position: fixed;
    bottom: var(--hint-bottom, calc(96px + var(--safe-bottom)));
    right: var(--hint-right, calc(28px + var(--safe-right)));
    z-index: 750;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 44px 12px 18px;
    background: linear-gradient(135deg, var(--dark-2) 0%, var(--dark-1) 100%);
    border: 1px solid var(--border-md);
    box-shadow: 0 12px 40px rgba(0,0,0,.5), 0 0 0 1px rgba(200,161,74,.08);
    font-size: 12px;
    font-weight: 500;
    color: var(--ivory);
    letter-spacing: .01em;
    max-width: 260px;
    opacity: 0;
    transform: translateY(10px) scale(.94);
    transition: opacity .5s var(--ease), transform .5s var(--ease-spring), visibility .5s;
    visibility: hidden;
    pointer-events: none;
    border-radius: 4px;
}
#guru-hint.show { opacity: 1; visibility: visible; transform: translateY(0) scale(1); pointer-events: auto; }
#guru-hint::before {
    content: '';
    position: absolute;
    right: var(--hint-arrow-right, 20px);
    bottom: -7px;
    width: 12px;
    height: 12px;
    background: linear-gradient(135deg, transparent 50%, var(--dark-1) 50%);
    border-right: 1px solid var(--border-md);
    border-bottom: 1px solid var(--border-md);
    transform: rotate(45deg);
}
.hint-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--gold); box-shadow: 0 0 8px var(--gold); flex-shrink: 0; animation: hintPulse 1.6s ease-in-out infinite; }
@keyframes hintPulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.4); opacity: .6; } }
.hint-text { line-height: 1.5; }
.hint-text strong { color: var(--gold); font-weight: 600; }
.hint-close {
    position: absolute;
    top: 6px;
    right: 8px;
    width: 22px;
    height: 22px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--muted);
    font-size: 14px;
    line-height: 1;
    background: none;
    border: none;
    cursor: pointer;
    transition: color .2s;
}
.hint-close:hover { color: var(--gold); }

@media (max-width: 520px) {
    #guru-hint { bottom: var(--hint-bottom, calc(80px + var(--safe-bottom))); right: var(--hint-right, calc(16px + var(--safe-right))); max-width: calc(100vw - 88px); font-size: 11.5px; padding: 11px 40px 11px 14px; }
}

/* ═══════════════════════════════════════════════════
   THEME TOGGLE BUTTON
═══════════════════════════════════════════════════ */
.theme-toggle {
    width: 42px;
    height: 42px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: 1px solid var(--border-md);
    border-radius: 50%;
    color: var(--gold);
    transition: background .3s, border-color .3s, transform .3s var(--ease-spring);
    touch-action: manipulation;
    flex-shrink: 0;
    cursor: pointer;
    padding: 0;
}
.theme-toggle:hover, .theme-toggle:focus-visible { background: rgba(200,161,74,.08); border-color: var(--gold); transform: rotate(-15deg); }
.theme-toggle svg { width: 18px; height: 18px; fill: currentColor; transition: opacity .3s; }
.theme-toggle .icon-sun { display: none; }
.theme-toggle .icon-moon { display: block; }
html.theme-light .theme-toggle .icon-sun { display: block; }
html.theme-light .theme-toggle .icon-moon { display: none; }

@media (max-width: 768px) {
    .theme-toggle { width: 40px; height: 40px; }
    .theme-toggle svg { width: 17px; height: 17px; }
}

/* ═══════════════════════════════════════════════════
   LIGHT THEME
   Same design tokens, remapped. WhatsApp button stays green.
═══════════════════════════════════════════════════ */
html.theme-light {
    /* ── Warm Ivory Luxury theme (light) — now the DEFAULT ── */
    --black:    #F7F4EE;   /* Warm Ivory — page background */
    --dark-1:   #FFFFFF;   /* White — elevated cards, nav surface */
    --dark-2:   #FCFAF6;   /* Light background — alternating sections */
    --dark-3:   #FFFFFF;   /* White — service/testimonial cards, inputs, tabs */
    --dark-4:   #EFE8DA;   /* subtle hover / divider surface */
    --white:    #0E2E28;   /* headings — deep emerald ink */
    --ivory:    #143A32;   /* body text — deep emerald */
    --muted:    #55655F;   /* muted emerald-gray */
    --muted-lt: #3A4A44;
    --gold:     #7A5C20;   /* deep antique gold — legible gold text on white/cream */
    --gold-lt:  #9A7A2E;
    --gold-dk:  #6F5320;
    --emerald:      #0F5B50;   /* Primary Emerald */
    --emerald-2:    #0D6B5E;   /* Secondary Emerald */
    --emerald-deep: #123F37;   /* Dark Emerald */
    --border:    rgba(200, 161, 74, .28);
    --border-md: rgba(200, 161, 74, .42);
    --border-lg: rgba(200, 161, 74, .58);
    --grad-gold: linear-gradient(135deg, #9A7A2E 0%, #C8A14A 35%, #E4CE8F 50%, #C8A14A 65%, #9A7A2E 100%);
    --grad-gold-h: linear-gradient(90deg, #9A7A2E 0%, #C8A14A 40%, #E4CE8F 50%, #C8A14A 60%, #9A7A2E 100%);
    --grad-dark: linear-gradient(180deg, #FCFAF6 0%, #F7F4EE 100%);
    color-scheme: light;
}
html.theme-light body { background: var(--black); }
html.theme-light ::-webkit-scrollbar-track { background: var(--dark-1); }
html.theme-light #nav.stuck { background: rgba(247,244,238,.94); }
/* Hero is an EMERALD showcase in both themes (base uses emerald literals now);
   in light mode only the text tokens need flipping back to light so they read
   over the emerald overlay. Every section below the hero is warm-ivory/white. */
html.theme-light .hero-eyebrow { color: #C8A14A; }
html.theme-light .hero-h1,
html.theme-light .hero-h1 .line .li { color: #FFFFFF; }
html.theme-light .hero-h1 .gold-text,
html.theme-light .hero-h1 .gold-text em { -webkit-text-fill-color: #E4CE8F; color: #E4CE8F; }
html.theme-light .hero-desc { color: #D7D7D7; }
html.theme-light .scroll-cue span { color: #9DB7AE; }
/* ── Light-mode service cards — premium emerald treatment ──
   Instead of fading the photo to a grey wash over white (which looked
   washed-out vs Dark Mode), the image sits at full richness with a deep
   emerald gradient laid over it via ::after, exactly like the hero. Text
   reads crisp and light on emerald, matching the Emerald Luxury branding.
   (The image itself is an inline background, so the overlay must be a
   pseudo-element rather than a layered background.) */
html.theme-light .svc-bg-img { opacity: 1; filter: saturate(1.06) contrast(1.02); }
html.theme-light .svc-bg-img::after {
    content: '';
    position: absolute; inset: 0;
    background: linear-gradient(165deg, rgba(11,58,50,.6) 0%, rgba(9,45,39,.72) 42%, rgba(7,37,31,.9) 100%);
    transition: background .3s var(--ease);
}
html.theme-light .svc-card:hover .svc-bg-img { opacity: 1; }
html.theme-light .svc-card:hover .svc-bg-img::after {
    background: linear-gradient(165deg, rgba(11,58,50,.48) 0%, rgba(9,45,39,.62) 42%, rgba(7,37,31,.85) 100%);
}
/* Text + accents on the emerald overlay */
html.theme-light .svc-name { color: #FFFFFF; font-weight: 500; }
html.theme-light .svc-desc { color: rgba(247,244,238,.9); }
html.theme-light .svc-price { color: #E4CE8F; }
html.theme-light .svc-price span { color: rgba(228,206,143,.75); }
html.theme-light .svc-icon { border-color: rgba(228,206,143,.5); color: #E4CE8F; background: rgba(255,255,255,.04); }
html.theme-light .svc-card:hover .svc-icon { border-color: var(--gold); color: #F7E9C4; }
html.theme-light .svc-arrow { color: #E4CE8F; border-color: rgba(228,206,143,.5); }
/* Card frame: matte-gold hairline + premium emerald-tinted depth */
html.theme-light .svc-card { border-color: rgba(184,144,60,.42); box-shadow: 0 14px 44px rgba(18,63,55,.16), 0 2px 8px rgba(18,63,55,.1); }
html.theme-light .svc-card:hover { border-color: rgba(200,161,74,.7); box-shadow: 0 24px 64px rgba(18,63,55,.24), 0 6px 18px rgba(200,161,74,.14); transform: translateY(-4px); }
html.theme-light .contact-map iframe { filter: none; }
/* Section headings stay deep-emerald ink on the ivory/white sections */
html.theme-light .h-display { color: var(--white); }
html.theme-light .h-display em { color: var(--emerald); }
html.theme-light .footer-main .ft-about,
html.theme-light .book-note,
html.theme-light .section-sub { color: var(--muted-lt); }
/* Mobile menu overlay: keep it opaque on the current theme */
html.theme-light #mob-menu { background: var(--black); }
/* Loader */
html.theme-light #loader { background: var(--black); }
/* Testimonials avatars — slightly stronger border on light bg */
html.theme-light .tc-av { background: var(--dark-2); }
/* Instagram overlay — invert */
html.theme-light .ig-ov { background: rgba(247,244,238,.55); color: var(--gold-dk); }
/* WhatsApp button — force original green branding regardless of theme */
html.theme-light .wa-btn { color: #fff; }
/* WhatsApp reply badge — solid emerald on ivory page so gold/ivory text stays legible */
html.theme-light .book-reply-note { background: linear-gradient(135deg, #0F5B50 0%, #0D6B5E 100%); border-color: rgba(200,161,74,.45); }
html.theme-light .book-reply-note .brn-text { color: #F7F4EE; }
html.theme-light .book-reply-note .brn-text strong { color: #E4CE8F; }
/* Chatbot input readability in light mode */
html.theme-light .guru-input { background: var(--dark-2); color: var(--ivory); }
html.theme-light .guru-msg.bot { color: var(--ivory); background: var(--dark-2); }
/* Marquee readable in light theme */
html.theme-light .marquee-strip { background: var(--dark-1); }
html.theme-light .m-item { color: var(--muted-lt); }
html.theme-light .m-item.hi { color: var(--gold-dk); }

/* ── Footer stays a Dark Emerald island in light mode ──
   Re-declaring the colour tokens on #footer flips every descendant back
   to the dark-theme palette, so ivory/gold text reads on the emerald. */
html.theme-light #footer {
    --white: #FFFFFF;
    --ivory: #F7F4EE;
    --muted: #9DB7AE;
    --muted-lt: #D7D7D7;
    --gold: #C8A14A;
    --gold-lt: #E4CE8F;
    --border: rgba(200, 161, 74, .22);
    --border-md: rgba(200, 161, 74, .40);
    color: var(--ivory);
}

/* ── BUTTON SYSTEM (light default) ──
   Primary  : Emerald bg + white text → gold on hover
   Secondary: White bg + emerald border/text → emerald bg + white on hover
   Buttons that sit ON the emerald hero/nav invert to ivory so they stay visible. */
html.theme-light .btn-primary { background: var(--emerald); color: #FFFFFF; }
html.theme-light .btn-primary:hover { background: var(--grad-gold); color: var(--emerald-deep); box-shadow: 0 14px 44px rgba(200,161,74,.32); }
html.theme-light .btn-ghost { background: #FFFFFF; border-color: var(--emerald); color: var(--emerald); }
html.theme-light .btn-ghost:hover { background: var(--emerald); border-color: var(--emerald); color: #FFFFFF; }
/* Buttons over the emerald hero + transparent nav → ivory, so they read on emerald */
html.theme-light .hero-actions .btn-primary,
html.theme-light #nav:not(.stuck) .btn-primary { background: #F7F4EE; color: var(--emerald-deep); }
html.theme-light .hero-actions .btn-primary:hover,
html.theme-light #nav:not(.stuck) .btn-primary:hover { background: var(--grad-gold); color: var(--emerald-deep); }
html.theme-light .hero-actions .btn-ghost { background: transparent; border-color: rgba(247,244,238,.55); color: #F7F4EE; }
html.theme-light .hero-actions .btn-ghost:hover { background: #F7F4EE; border-color: #F7F4EE; color: var(--emerald-deep); }

/* ── NAV over the emerald hero (light default) ──
   Transparent nav sits on the dark hero → light links/controls; once scrolled
   onto the ivory sections (.stuck) they revert to the deep-emerald palette. */
html.theme-light #nav:not(.stuck) .nav-links a { color: #F7F4EE; }
html.theme-light #nav:not(.stuck) .nav-links a:hover,
html.theme-light #nav:not(.stuck) .nav-links a.active { color: #E4CE8F; }
html.theme-light #nav:not(.stuck) .nav-logo-tag { color: #C8A14A; }
html.theme-light #nav:not(.stuck) .theme-toggle { color: #F7F4EE; border-color: rgba(247,244,238,.42); }
html.theme-light #nav:not(.stuck) .hamburger span { background: #F7F4EE; }
/* When the menu is open, the X sits over the ivory overlay → make it gold */
html.theme-light .hamburger.open span { background: var(--gold); }
/* Over the open ivory menu, the white hero-logo would vanish → deep emerald */
html.theme-light body.menu-open #nav:not(.stuck) .nav-logo-name { -webkit-text-fill-color: var(--emerald); color: var(--emerald); }
html.theme-light body.menu-open #nav:not(.stuck) .nav-logo-tag { color: var(--gold); }
/* Logo: white script over the emerald hero, deep-emerald once scrolled onto ivory */
html.theme-light #nav:not(.stuck) .nav-logo-name { background: none; -webkit-text-fill-color: #F7F4EE; color: #F7F4EE; }
html.theme-light #nav.stuck .nav-logo-name { background: none; -webkit-text-fill-color: var(--emerald); color: var(--emerald); }
html.theme-light #nav.stuck .nav-logo-tag { color: var(--gold); }
html.theme-light #nav.stuck .nav-links a { color: var(--ivory); }
html.theme-light #nav.stuck .nav-links a:hover,
html.theme-light #nav.stuck .nav-links a.active { color: var(--gold); }

/* Elements with a gold fill use var(--black) for their text, which flips to
   ivory in light mode — force deep-emerald ink so they stay legible on gold. */
html.theme-light .gal-tab.on,
html.theme-light .ba-handle,
html.theme-light .skip-link,
html.theme-light .guru-msg.user,
html.theme-light .guru-send { color: var(--emerald-deep); }
/* Before/After labels sit on a translucent emerald chip → keep light text */
html.theme-light .ba-lbl.bl { color: #F7F4EE; }
html.theme-light .ba-lbl.al { color: #E4CE8F; }
/* Gallery hover tag sits on the emerald overlay → bright gold */
html.theme-light .gi-tag { color: #E4CE8F; }

/* Solid, legible gold for clipped gold-text on cream */
html.theme-light .gold-text {
    background: none;
    -webkit-text-fill-color: var(--gold-dk);
    color: var(--gold-dk);
}
/* Footer & loader logos keep the bright gold gradient */
html.theme-light .ft-logo-name,
html.theme-light .ldr-name { -webkit-text-fill-color: transparent; }

/* ── LIGHT-THEME LUXURY REFINEMENTS ──
   White cards on warm ivory, lifted with a very soft emerald-tinted shadow;
   emerald icons that warm to gold on hover; white inputs with emerald borders
   and a gold focus ring; emerald scrollbar thumb. Colour/shadow only — no
   layout, spacing, typography or animation is touched. */
html.theme-light .svc-card,
html.theme-light .testi-card,
html.theme-light .ci-item { box-shadow: 0 10px 34px rgba(18,63,55,.07); }
html.theme-light .gi { box-shadow: 0 8px 26px rgba(18,63,55,.10); }
/* (Service-card light treatment defined earlier — emerald overlay.) */

/* Forms — white inputs, emerald borders, luxury gold focus */
html.theme-light .fc { background: #FFFFFF; border-color: rgba(15,91,80,.28); color: var(--ivory); }
html.theme-light .fc::placeholder { color: #66756E; }
html.theme-light .fc:focus { border-color: #C8A14A; box-shadow: 0 0 0 3px rgba(200,161,74,.16); }
html.theme-light select.fc option { background: #FFFFFF; color: var(--ivory); }
html.theme-light select.fc optgroup { background: #F7F4EE; color: var(--gold); }

/* Icons — emerald resting, gold on hover */
html.theme-light .faq-ico { border-color: rgba(15,91,80,.32); color: var(--emerald); }
html.theme-light .faq-item.open .faq-ico { background: var(--gold); color: #FFFFFF; }
html.theme-light .ci-icon { color: var(--emerald); }

/* Scrollbar — emerald thumb on a light track */
html.theme-light ::-webkit-scrollbar-thumb { background: var(--emerald); }

/* ═══════════════════════════════════════════════════
   FLOATING BUTTON HARDENING
   • GPU layer to prevent scroll-flicker on iOS
   • Suspend attention-bounce animation while user scrolls
═══════════════════════════════════════════════════ */
.float-stack {
    transform: translateZ(0);
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    will-change: transform;
}
.wa-btn {
    transform: translateZ(0);
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
}
/* When body has this class (set by JS on scroll), pause the bounce so
   the button never jumps mid-scroll. */
body.is-scrolling .chatbot-btn { animation-play-state: paused; }
body.is-scrolling .wa-btn { animation-play-state: paused; }

/* Reduce the bounce amplitude — a smaller move never looks like a bug */
@keyframes chatBounceSubtle { 0%,100% { transform: translateY(0); } 40% { transform: translateY(-4px); } 70% { transform: translateY(0); } }
.chatbot-btn { animation-name: chatBounceSubtle; }

/* ═══════════════════════════════════════════════════════════════════
   MOBILE SLIDERS + GALLERY MODAL
   Ported implementation (services slider, gallery slider, full-gallery
   modal). Desktop grid layouts above the breakpoints are untouched.
═══════════════════════════════════════════════════════════════════ */

/* ── Shared touch-slider engine ─────────────────────── */
/* Static clipping box — never transformed (that is the point of keeping
   it separate from the track). */
.sl-viewport {
    position: relative;
    width: 100%;
    overflow: hidden;
    border-radius: 4px;
    transform: translateZ(0);
}
.sl-track {
    display: flex;
    flex-wrap: nowrap !important;
    gap: 0 !important;
    overflow: visible;
    touch-action: pan-y;
    -webkit-user-select: none;
    user-select: none;
    will-change: transform;
    backface-visibility: hidden;
}
.sl-track > * { flex: 0 0 100% !important; width: 100% !important; min-width: 100% !important; }
.sl-track img { -webkit-user-drag: none; pointer-events: none; }

/* Shared dot indicators */
.sl-dot {
    width: 5px; height: 5px;
    border-radius: 50%;
    background: var(--dark-4);
    border: 1px solid var(--border);
    transition: width .3s var(--ease), background .3s, border-color .3s;
}
.sl-dot.on { background: var(--gold); border-color: var(--gold); width: 18px; border-radius: 3px; }

/* ── Services slider controls ───────────────────────── */
.svc-slider-controls { display: none; }
.svc-dots { display: flex; gap: 6px; }

.svc-viewall-btn {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    width: 100%;
    max-width: 340px;
    min-height: 52px;
    padding: 15px 26px;
    font-family: var(--ff-body);
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .26em;
    text-transform: uppercase;
    color: var(--gold-lt);
    background: linear-gradient(135deg, rgba(200,161,74,.10) 0%, rgba(200,161,74,.03) 100%);
    border: 1px solid var(--border-md);
    border-radius: 4px;
    overflow: hidden;
    transition: border-color .3s var(--ease), color .3s, transform .3s var(--ease-spring);
    animation: svcViewAllGlow 3.4s ease-in-out infinite;
}
.svc-viewall-btn .sva-arrow { transition: transform .35s var(--ease-spring); font-size: 14px; }
.svc-viewall-btn:hover, .svc-viewall-btn:focus-visible { border-color: var(--gold); color: var(--gold-lt); }
.svc-viewall-btn:hover .sva-arrow { transform: translateX(4px); }
.svc-viewall-btn:active { transform: scale(.985); }
.svc-viewall-btn::after {
    content: '';
    position: absolute;
    top: 0; left: -60%;
    width: 45%; height: 100%;
    background: linear-gradient(100deg, transparent 0%, rgba(228,206,143,.16) 50%, transparent 100%);
    transform: skewX(-18deg);
    animation: svcViewAllSheen 3.4s ease-in-out infinite;
    pointer-events: none;
}
@keyframes svcViewAllGlow {
    0%, 100% { box-shadow: 0 0 0 rgba(200,161,74,0), inset 0 0 0 rgba(200,161,74,0); }
    50%      { box-shadow: 0 6px 26px rgba(200,161,74,.22), inset 0 0 18px rgba(200,161,74,.06); }
}
@keyframes svcViewAllSheen {
    0%, 62% { left: -60%; }
    100%    { left: 115%; }
}

/* ── Services slider (mobile/tablet, ≤1024px) ───────── */
@media (max-width: 1024px) {
    .svc-slider-controls {
        display: flex;
        flex-direction: column;
        align-items: center;
        gap: 20px;
        margin-top: 28px;
    }
    .services-grid.svc-slider {
        display: flex;
        grid-template-columns: none;
    }
    /* Service photos are a mix of 2:3 portraits and 3:2 landscapes; a
       square card with cover fills the frame with no letterboxing and
       only a modest, evenly-centred crop. */
    .services-grid.svc-slider .svc-card {
        display: flex;
        flex-direction: column;
        justify-content: flex-end;
        min-height: 0;
        aspect-ratio: 1 / 1;
        padding: 26px 24px 26px;
    }
    /* Without `aspect-ratio` support (iOS Safari < 15) these cards have
       `min-height: 0` and no intrinsic height, so the slider renders blank.
       Give them a real height in that case. */
    @supports not (aspect-ratio: 1 / 1) {
        .services-grid.svc-slider .svc-card { min-height: 78vw; max-height: 460px; }
    }
    .services-grid.svc-slider .svc-bg-img {
        background-size: cover;
        background-repeat: no-repeat;
        background-position: center;
        opacity: .78;
        transform: none !important;
    }
    /* Prevent the desktop hover opacity/scale from firing on touch-and-hold,
       which caused a visible flicker while swiping the slider. */
    .services-grid.svc-slider .svc-card:hover .svc-bg-img,
    .services-grid.svc-slider .svc-card:active .svc-bg-img {
        opacity: .78;
        transform: none !important;
    }
    .services-grid.svc-slider .svc-card:hover { background: var(--dark-3); border-color: transparent; }
    .services-grid.svc-slider .svc-card:hover::before { transform: scaleY(0); }
    .services-grid.svc-slider .svc-card::after {
        content: '';
        position: absolute; inset: 0;
        background: linear-gradient(180deg, rgba(8,37,31,.05) 0%, rgba(8,37,31,.55) 55%, rgba(8,37,31,.92) 100%);
        opacity: 1;
        z-index: 1;
        pointer-events: none;
    }
    .services-grid.svc-slider .svc-content { position: relative; z-index: 2; }
    .services-grid.svc-slider .svc-arrow { display: none; }
    .services-grid.svc-slider .svc-icon { margin-bottom: 14px; }

    /* Expanded list keeps the same premium emerald-overlay treatment as the
       slider so images stay crisp and text stays legible. */
    .services-grid.svc-expanded { display: grid; grid-template-columns: 1fr; gap: 14px; }
    .services-grid.svc-expanded .svc-card { aspect-ratio: auto; display: block; width: 100%; min-width: 0; min-height: 260px; }
    .services-grid.svc-expanded .svc-bg-img { background-size: cover; opacity: .78; }
    .services-grid.svc-expanded .svc-card::after {
        content: '';
        display: block;
        position: absolute; inset: 0;
        background: linear-gradient(180deg, rgba(8,37,31,.05) 0%, rgba(8,37,31,.55) 55%, rgba(8,37,31,.92) 100%);
        opacity: 1;
        z-index: 1;
        pointer-events: none;
    }
    .services-grid.svc-expanded .svc-content { position: relative; z-index: 2; }
}
html.theme-light .services-grid.svc-slider .svc-card::after,
html.theme-light .services-grid.svc-expanded .svc-card::after {
    background: linear-gradient(180deg, rgba(8,37,31,.05) 0%, rgba(8,37,31,.55) 55%, rgba(8,37,31,.92) 100%);
}
html.theme-light .services-grid.svc-slider .svc-bg-img,
html.theme-light .services-grid.svc-expanded .svc-bg-img { opacity: .78; }
/* Mobile slider/expanded cards already carry their own emerald overlay via
   .svc-card::after, so suppress the desktop .svc-bg-img::after to avoid
   double-darkening. */
html.theme-light .services-grid.svc-slider .svc-bg-img::after,
html.theme-light .services-grid.svc-expanded .svc-bg-img::after { display: none; }
/* On the mobile emerald-overlay cards (slider + expanded), text sits on emerald → keep it light */
html.theme-light .services-grid.svc-slider .svc-name,
html.theme-light .services-grid.svc-expanded .svc-name { color: #FFFFFF; }
html.theme-light .services-grid.svc-slider .svc-desc,
html.theme-light .services-grid.svc-expanded .svc-desc { color: rgba(247,244,238,.85); }
html.theme-light .services-grid.svc-slider .svc-price,
html.theme-light .services-grid.svc-expanded .svc-price { color: #E4CE8F; }
html.theme-light .services-grid.svc-slider .svc-price span,
html.theme-light .services-grid.svc-expanded .svc-price span { color: rgba(215,215,215,.85); }
html.theme-light .services-grid.svc-slider .svc-icon,
html.theme-light .services-grid.svc-expanded .svc-icon { border-color: rgba(247,244,238,.42); color: #E4CE8F; }
/* Expanded cards sit on emerald, so the light-theme card shadow/lift is dropped */
html.theme-light .services-grid.svc-expanded .svc-card { box-shadow: 0 10px 30px rgba(18,63,55,.14); border-color: rgba(200,161,74,.28); }
html.theme-light .services-grid.svc-expanded .svc-card:hover { transform: none; }

/* ── VIEW ALL SERVICES button — premium in light theme ──
   Filled emerald pill with gold hairline + real depth; hover swaps to gold. */
html.theme-light .svc-viewall-btn { background: linear-gradient(135deg, var(--emerald) 0%, var(--emerald-2) 100%); border-color: rgba(200,161,74,.55); color: #F7F4EE; box-shadow: 0 10px 30px rgba(15,91,80,.28), inset 0 1px 0 rgba(255,255,255,.06); }
html.theme-light .svc-viewall-btn:hover,
html.theme-light .svc-viewall-btn:focus-visible { background: linear-gradient(135deg, var(--emerald-deep) 0%, var(--emerald) 100%); border-color: #C8A14A; color: #E4CE8F; box-shadow: 0 14px 40px rgba(15,91,80,.35), 0 0 0 2px rgba(200,161,74,.18), inset 0 1px 0 rgba(255,255,255,.08); }
/* The subtle sheen sweep already looks great on emerald — brighten it slightly */
html.theme-light .svc-viewall-btn::after { background: linear-gradient(100deg, transparent 0%, rgba(228,206,143,.22) 50%, transparent 100%); }
@keyframes svcViewAllGlowLight {
    0%, 100% { box-shadow: 0 10px 30px rgba(15,91,80,.28), inset 0 1px 0 rgba(255,255,255,.06); }
    50%      { box-shadow: 0 12px 38px rgba(15,91,80,.36), 0 0 0 1px rgba(200,161,74,.22), inset 0 1px 0 rgba(255,255,255,.08); }
}
html.theme-light .svc-viewall-btn { animation-name: svcViewAllGlowLight; }

/* ── Gallery slider (mobile only, ≤767px) ───────────── */
.gal-slider-dots { display: none; }
@media (max-width: 767px) {
    .gal-slider-dots {
        display: flex;
        justify-content: center;
        gap: 6px;
        margin-top: 16px;
    }
    #galleryBody .gal-grid.gal-slider {
        display: flex;
        grid-template-columns: none;
    }
    #galleryBody .gal-grid.gal-slider .gi {
        display: block;
        aspect-ratio: 4 / 5;
        border-radius: 4px;
        grid-column: auto;
        grid-row: auto;
    }
    @supports not (aspect-ratio: 4 / 5) {
        #galleryBody .gal-grid.gal-slider .gi { position: relative; height: 0; padding-top: 125%; }
        #galleryBody .gal-grid.gal-slider .gi > picture,
        #galleryBody .gal-grid.gal-slider .gi > img,
        #galleryBody .gal-grid.gal-slider .gi > .gi-ov {
            position: absolute; top: 0; left: 0; width: 100%; height: 100%;
        }
    }
    #galleryBody .gal-grid.gal-slider .gi img,
    #galleryBody .gal-grid.gal-slider .gi picture { width: 100%; height: 100%; }
    #galleryBody .gal-grid.gal-slider .gi img { object-fit: cover; }
}

/* ── Full-gallery modal ─────────────────────────────── */
.gal-more-wrap { display: none; margin-top: 22px; }
.gal-more-btn {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    width: 100%;
    max-width: 340px;
    min-height: 52px;
    margin: 0 auto;
    padding: 15px 26px;
    font-family: var(--ff-body);
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .26em;
    text-transform: uppercase;
    color: var(--gold-lt);
    background: linear-gradient(135deg, rgba(200,161,74,.10) 0%, rgba(200,161,74,.03) 100%);
    border: 1px solid var(--border-md);
    border-radius: 4px;
    overflow: hidden;
    transition: border-color .3s var(--ease), color .3s, transform .3s var(--ease-spring);
}
.gal-more-btn .gmb-arrow { transition: transform .35s var(--ease-spring); font-size: 14px; }
.gal-more-btn:hover, .gal-more-btn:focus-visible { border-color: var(--gold); color: var(--gold-lt); }
.gal-more-btn:hover .gmb-arrow { transform: translateX(4px); }
.gal-more-btn:active { transform: scale(.985); }

.gal-modal { position: fixed; inset: 0; z-index: 1200; display: flex; }
.gal-modal[hidden] { display: none; }
.gal-modal-backdrop {
    position: absolute; inset: 0;
    background: rgba(6,26,22,.82);
    -webkit-backdrop-filter: blur(6px);
    backdrop-filter: blur(6px);
    opacity: 0;
    transition: opacity .35s var(--ease);
}
.gal-modal-panel {
    position: relative;
    display: flex;
    flex-direction: column;
    width: 100%;
    max-width: 100%;
    max-height: 100%;
    overflow-x: hidden;
    background: var(--black);
    transform: translateY(18px);
    opacity: 0;
    transition: transform .42s var(--ease-spring), opacity .35s var(--ease);
}
.gal-modal.open .gal-modal-backdrop { opacity: 1; }
/* `transform: none` (not translateY(0)) once open. A lingering transform makes
   the panel a containing block for its sticky header and absolutely-positioned
   tile images, which is what caused content to jump to the top-left while
   scrolling on iOS Safari. The entry animation is unchanged. */
.gal-modal.open .gal-modal-panel { transform: none; opacity: 1; }
.gal-modal-head {
    position: sticky; top: 0; z-index: 3;
    display: flex; align-items: flex-start; justify-content: space-between; gap: 16px;
    padding: calc(20px + var(--safe-top)) clamp(16px, 5vw, 28px) 16px;
    background: linear-gradient(180deg, var(--black) 72%, transparent 100%);
    border-bottom: 1px solid var(--border);
}
.gal-modal-title {
    font-family: var(--ff-display);
    font-weight: 400;
    font-size: clamp(24px, 7vw, 34px);
    line-height: 1.15;
    color: var(--white);
    margin-top: 6px;
}
.gal-modal-title em { font-style: italic; color: var(--gold); }
.gal-modal-close {
    flex-shrink: 0;
    width: 44px; height: 44px;
    display: flex; align-items: center; justify-content: center;
    font-size: 17px; line-height: 1;
    color: var(--muted);
    background: var(--dark-2);
    border: 1px solid var(--border);
    border-radius: 50%;
    transition: color .25s, border-color .25s, transform .25s var(--ease-spring);
}
.gal-modal-close:hover, .gal-modal-close:focus-visible { color: var(--gold); border-color: var(--gold); transform: rotate(90deg); }
.gal-modal-body {
    flex: 1;
    overflow-y: auto;
    scrollbar-gutter: stable;
    overflow-x: hidden;
    /* `-webkit-overflow-scrolling: touch` is deliberately NOT set here. It is
       deprecated and is a known trigger for content jumping/shifting inside
       scroll containers on iOS Safari; modern iOS has momentum scrolling
       natively, so omitting it is both safer and equivalent. */
    overscroll-behavior: contain;
    padding: 24px clamp(16px, 5vw, 28px) calc(40px + var(--safe-bottom));
}
.gal-modal-body .gal-tabs { display: none; }
/* ── Absolute safeguard against the "images shift left/top-left" bug ──
   The gallery grid doubles as a touch slider on phones. If any slider state
   (a translate on the track, its clipping wrapper, or the edge clones) were
   ever still present when the grid is relocated into this modal — through a
   race, a resize mid-transition, or a re-mount — the tiles would be pushed
   out of place. These rules make that structurally impossible: inside the
   modal the grid is always a plain, untransformed, un-cloned list. */
.gal-modal-body .gal-grid,
.gal-modal-body .sl-track {
    transform: none !important;
    transition: none !important;
    display: grid !important;
}
.gal-modal-body .sl-viewport {
    overflow: visible !important;
    width: auto !important;
    transform: none !important;
}
.gal-modal-body .gi.sl-clone { display: none !important; }
.gal-modal-body #gal-grid,
.gal-modal-body #gal-ba { display: block !important; }
.gal-modal-body .gal-grid { display: grid; grid-template-columns: 1fr; grid-auto-rows: auto; gap: 12px; }
.gal-modal-body .gal-grid .gi {
    display: block !important;
    aspect-ratio: 4/5; border-radius: 4px;
    grid-column: 1 !important; grid-row: auto !important;
}
/* Fallback for engines without `aspect-ratio` (iOS Safari < 15). Without a
   resolved height the tiles collapse and their images pile up at the tile
   origin — the "images shift to the top-left" bug. The padding-top ratio box
   reproduces 4:5 exactly, so modern browsers are visually unaffected. */
@supports not (aspect-ratio: 4 / 5) {
    .gal-modal-body .gal-grid .gi { position: relative; height: 0; padding-top: 125%; }
    .gal-modal-body .gal-grid .gi > picture,
    .gal-modal-body .gal-grid .gi > img,
    .gal-modal-body .gal-grid .gi > .gi-ov {
        position: absolute; top: 0; left: 0; width: 100%; height: 100%;
    }
}
.gal-modal-body .gal-grid .gi img { height: 100%; }
.gal-modal-body .rv { opacity: 1 !important; transform: none !important; }
.gal-modal-body #gal-ba { margin-top: 34px; padding-top: 30px; border-top: 1px solid var(--border); }
.gal-modal-body #gal-ba::before {
    content: 'Before & After';
    display: block;
    font-size: 9.5px; font-weight: 700; letter-spacing: .3em; text-transform: uppercase;
    color: var(--gold); margin-bottom: 18px;
}
.gal-modal.open .gal-modal-body .gal-grid .gi {
    animation: galTileIn .5s var(--ease) backwards;
}
.gal-modal.open .gal-modal-body .gal-grid .gi:nth-child(1) { animation-delay: .04s; }
.gal-modal.open .gal-modal-body .gal-grid .gi:nth-child(2) { animation-delay: .10s; }
.gal-modal.open .gal-modal-body .gal-grid .gi:nth-child(3) { animation-delay: .16s; }
.gal-modal.open .gal-modal-body .gal-grid .gi:nth-child(4) { animation-delay: .22s; }
.gal-modal.open .gal-modal-body .gal-grid .gi:nth-child(5) { animation-delay: .28s; }
.gal-modal.open .gal-modal-body .gal-grid .gi:nth-child(n+6) { animation-delay: .34s; }
@keyframes galTileIn { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }

/* Mobile-only collapse: first tile + "View Full Gallery" button.
   The slider (when JS mounts) re-shows all tiles via .gal-slider. */
@media (max-width: 767px) {
    .gal-more-wrap { display: block; }
    #galleryBody .gal-tabs { display: none; }
    #galleryBody #gal-ba { display: none !important; }
    #galleryBody .gal-grid { grid-template-columns: 1fr; grid-auto-rows: auto; gap: 0; }
    #galleryBody .gal-grid .gi { display: none; }
    #galleryBody .gal-grid .gi:first-child {
        display: block;
        grid-column: 1; grid-row: auto;
        aspect-ratio: 4/5;
        border-radius: 4px;
    }
    @supports not (aspect-ratio: 4 / 5) {
        #galleryBody .gal-grid .gi:first-child { position: relative; height: 0; padding-top: 125%; }
        #galleryBody .gal-grid .gi:first-child > picture,
        #galleryBody .gal-grid .gi:first-child > img,
        #galleryBody .gal-grid .gi:first-child > .gi-ov {
            position: absolute; top: 0; left: 0; width: 100%; height: 100%;
        }
    }
    #galleryBody .gal-grid .gi:first-child img { height: 100%; }
}
@media (min-width: 768px) {
    .gal-more-wrap { display: none !important; }
    .gal-slider-dots { display: none !important; }
}

/* Motion preferences */
@media (prefers-reduced-motion: reduce) {
    .sl-track { transition: none !important; }
    .svc-viewall-btn, .svc-viewall-btn::after { animation: none !important; }
    .gal-modal-panel { transition-duration: .01ms !important; }
    .gal-modal.open .gal-modal-body .gal-grid .gi { animation: none !important; }
}

/* ═══════════════════════════════════════════════════
   PERFORMANCE — skip rendering work for static, below-the-fold
   sections until they approach the viewport. Applied only to
   sections with no width-measuring carousels/sliders, so the
   Services/Gallery/Testimonials/Instagram logic is unaffected.
═══════════════════════════════════════════════════ */
.cv-section {
    content-visibility: auto;
    contain-intrinsic-size: auto 700px;
}
