/*
Theme Name: OLIV Child
Theme URI: https://olivagency.ro
Description: Editorial cinematic child theme for OLIV Agency, built on Astra. Holds OLIV-specific tokens (palette, gradients, typography, motion), child layer for Spectra-built pages, GSAP + Lenis bootstrap, ACF + CPT registration. Single source of truth for the visual system — everything in editorial.css and section CSS references variables defined here.
Author: OLIV / VM
Author URI: https://olivagency.ro
Template: astra
Version: 1.9.39
Text Domain: oliv-child
*/

:root {
    /* ==================================================
       BRAND — chartreuse spectrum (6 steps)
       ================================================== */
    --oliv-chartreuse-bright:  #C5CC4C;
    --oliv-chartreuse-muted:   #A4AC2C;
    --oliv-chartreuse-deep:    #8E9929;
    --oliv-chartreuse-glow:    #DDE25E;
    --oliv-chartreuse-pale:    #E8EBA3;
    --oliv-chartreuse-shadow:  #4D5615;

    /* ==================================================
       NEUTRALS — full warm-cool spectrum
       ================================================== */
    --oliv-pure-white:   #FFFFFF;
    --oliv-cream:        #FAF6EC;
    --oliv-warm-white:   #F5F1E8;
    --oliv-ivory:        #E8E2D0;
    --oliv-stone:        #D4CFC0;
    --oliv-charcoal:     #1C1C1A;
    --oliv-muted-black:  #0A0908;
    --oliv-earthy:       #8B7E66;
    --oliv-earthy-deep:  #5C5142;
    --oliv-gold-foil:    #B89B4A;
    --oliv-gold-deep:    #8B6F2E;

    /* ==================================================
       SEMANTIC ROLES — change role tokens to re-skin
       ================================================== */
    --oliv-bg-page:       var(--oliv-cream);
    --oliv-bg-card:       var(--oliv-pure-white);
    --oliv-bg-subtle:     var(--oliv-ivory);
    --oliv-bg-deep:       var(--oliv-muted-black);
    --oliv-text-primary:  var(--oliv-charcoal);
    --oliv-text-quiet:    var(--oliv-earthy-deep);
    --oliv-text-heading:  var(--oliv-muted-black);
    --oliv-text-inverse:  var(--oliv-warm-white);
    --oliv-border:        var(--oliv-stone);
    --oliv-border-strong: var(--oliv-earthy);

    /* Default accent — overridden by scope classes below */
    --oliv-accent:        var(--oliv-chartreuse-muted);
    --oliv-accent-hover:  var(--oliv-chartreuse-deep);
    --oliv-accent-soft:   var(--oliv-chartreuse-pale);

    /* v0.8.0 — B-spine contrast accents (text-safe vs decorative) */
    --oliv-accent-text:   var(--oliv-chartreuse-shadow);  /* #4D5615 — AAA on cream/white, use for small text accents */
    --oliv-accent-decor:  var(--oliv-chartreuse-muted);   /* #A4AC2C — decoration / >=32px only */
    --oliv-gold-accent:   var(--oliv-gold-foil);          /* #B89B4A — promoted: hero hairline, trust-num, premium signal */

    /* ==================================================
       v0.9.4 — A11Y + SIZING TOKENS
       ================================================== */
    --oliv-gold-text:        #8B6F2E;                /* WCAG-safe gold for text contexts (~5.5:1 on cream) */
    --oliv-header-h:         88px;                   /* sticky header + scroll-margin-top */
    --oliv-h2:               clamp(2.25rem, 4.5vw, 4rem);
    --oliv-h2-mega:          clamp(2.5rem, 6vw, 5.5rem);
    --oliv-eyebrow-script:   clamp(1.75rem, 2.5vw, 2.25rem);
    --oliv-eyebrow-caps:     0.72rem;

    /* ==================================================
       GRADIENTS
       ================================================== */
    --oliv-grad-warm:        linear-gradient(180deg, var(--oliv-warm-white) 0%, var(--oliv-ivory) 100%);
    --oliv-grad-warm-rev:    linear-gradient(0deg, var(--oliv-warm-white) 0%, var(--oliv-ivory) 100%);
    --oliv-grad-chartreuse:  linear-gradient(135deg, var(--oliv-chartreuse-bright) 0%, var(--oliv-chartreuse-muted) 100%);
    --oliv-grad-chartreuse-soft: linear-gradient(135deg, var(--oliv-chartreuse-pale) 0%, var(--oliv-chartreuse-glow) 100%);
    --oliv-grad-fade-top:    linear-gradient(180deg, var(--oliv-warm-white) 0%, transparent 100%);
    --oliv-grad-fade-bot:    linear-gradient(0deg, var(--oliv-warm-white) 0%, transparent 100%);
    --oliv-grad-editorial:   radial-gradient(ellipse at top, var(--oliv-ivory) 0%, var(--oliv-warm-white) 70%);
    --oliv-grad-cinematic:   linear-gradient(0deg, var(--oliv-muted-black) 0%, transparent 60%);
    --oliv-grad-cinematic-top: linear-gradient(180deg, rgba(10, 9, 8, 0.6) 0%, transparent 60%);
    --oliv-grad-gold:        linear-gradient(135deg, var(--oliv-gold-foil) 0%, var(--oliv-gold-deep) 100%);
    --oliv-grad-deep:        linear-gradient(135deg, var(--oliv-charcoal) 0%, var(--oliv-muted-black) 100%);

    /* ==================================================
       SHADOWS
       ================================================== */
    --oliv-shadow-soft:      0 8px 28px rgba(28, 28, 26, 0.05);
    --oliv-shadow-card:      0 16px 48px rgba(28, 28, 26, 0.08);
    --oliv-shadow-cinematic: 0 24px 64px rgba(28, 28, 26, 0.16);
    --oliv-shadow-accent:    0 6px 20px rgba(164, 172, 44, 0.25);
    --oliv-shadow-bright:    0 6px 20px rgba(197, 204, 76, 0.3);

    /* ==================================================
       TYPOGRAPHY STACKS
       ================================================== */
    --oliv-font-serif:   "Fraunces", Georgia, "Times New Roman", serif;
    --oliv-font-sans:    "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    --oliv-font-script:  "Allison", "Sacramento", cursive;
    --oliv-font-display: "Fraunces", Georgia, "Times New Roman", serif;

    /* ==================================================
       SPACING (rhythm — multiply for consistent breathing)
       ================================================== */
    --oliv-space-2xs: 0.25rem;
    --oliv-space-xs:  0.5rem;
    --oliv-space-sm:  1rem;
    --oliv-space-md:  2rem;
    --oliv-space-lg:  4rem;
    --oliv-space-xl:  8rem;
    --oliv-space-2xl: 12rem;

    /* ==================================================
       MOTION
       ================================================== */
    --oliv-ease-cinematic:  cubic-bezier(0.65, 0, 0.35, 1);
    --oliv-ease-organic:    cubic-bezier(0.22, 1, 0.36, 1);
    --oliv-ease-quick:      cubic-bezier(0.4, 0, 0.2, 1);
    --oliv-dur-quick:       180ms;
    --oliv-dur-normal:      400ms;
    --oliv-dur-cinematic:   900ms;

    /* ==================================================
       BORDERS & RADII
       ================================================== */
    --oliv-radius-sm:   2px;
    --oliv-radius-md:   6px;
    --oliv-radius-lg:   16px;
    --oliv-radius-pill: 999px;

    /* ==================================================
       v0.9.0 — EDITORIAL RHYTHM (additive, never remove)
       Padding, gaps, max-widths, typography clamps
       used by editorial.css to lock vertical+horizontal rhythm
       ================================================== */
    --oliv-pad-mega:    clamp(6rem, 14vh, 12rem);
    --oliv-pad-section: clamp(5rem, 10vh, 9rem);
    --oliv-pad-inline:  clamp(1.5rem, 5vw, 5rem);
    --oliv-gap-grid:    clamp(2rem, 4vw, 4rem);
    --oliv-gap-tight:   clamp(1.25rem, 2vw, 2rem);
    --oliv-max-content: 88rem;
    --oliv-max-prose:   72ch;
    --oliv-h3:          clamp(1.375rem, 1.8vw, 1.75rem);
    --oliv-body:        clamp(0.9375rem, 1vw, 1.0625rem);
    --oliv-eyebrow:     clamp(1.5rem, 2vw, 2rem);
    --oliv-script-hero: clamp(3rem, 6vw, 6rem);

    /* ==================================================
       v0.9.3 — UNIFIED VERTICAL RHYTHM SYSTEM
       Single source of truth for section padding, header
       rhythm, pillar/card spacing. editorial.css consumes
       these tokens via universal selectors so every section
       breathes on the same beat. Bumping a token reflows
       the whole site — no per-section clamp drift.
       ================================================== */
    --oliv-rhythm-section-py:  clamp(4.5rem, 9vh, 7rem);
    --oliv-rhythm-inner-py:    0;
    --oliv-rhythm-mega-py:     clamp(6rem, 12vh, 9rem);
    --oliv-rhythm-eyebrow-mb:  clamp(0.5rem, 1vh, 0.75rem);
    --oliv-rhythm-h2-mb:       clamp(1.5rem, 2.5vh, 2rem);
    --oliv-rhythm-card-gap:    clamp(1.5rem, 2.5vh, 2.25rem);
    --oliv-rhythm-pillar-gap:  clamp(0.4rem, 0.75vh, 0.6rem);
    --oliv-rhythm-pillar-body: clamp(0.85rem, 1.5vh, 1.1rem);
    --oliv-rhythm-divider-y:   clamp(2rem, 4vh, 3rem);
    --oliv-rhythm-ordinal-mb:  clamp(0.75rem, 1.25vh, 1rem);
}

/* ==================================================
   SCOPE OVERRIDES — apply to <body>, page wrapper or section
   ================================================== */

/* For brands (B2B) — muted editorial chartreuse */
/* v0.9.4 — retuned for visible distinction vs :root defaults */
.scope-brand,
[data-scope="brand"] {
    /* OLIV semantic tokens */
    --oliv-accent:        var(--oliv-chartreuse-deep);     /* was muted — bump for distinction */
    --oliv-accent-hover:  var(--oliv-chartreuse-shadow);   /* was deep */
    --oliv-accent-soft:   var(--oliv-chartreuse-pale);
    --oliv-accent-text:   var(--oliv-chartreuse-shadow);
    --oliv-bg-page:       #F5F2EA;                          /* was warm-white — slightly cooler */
    --oliv-bg-card:       var(--oliv-pure-white);
    --oliv-bg-subtle:     #EFEBE0;                          /* was ivory — paler/warmer */
    --oliv-bg-deep:       var(--oliv-muted-black);
    --oliv-shadow-accent: var(--oliv-shadow-accent, 0 6px 20px rgba(164, 172, 44, 0.25));
    --oliv-border-strong: var(--oliv-earthy);

    /* v0.9.5 — defense-in-depth: override leaky cream tokens consumed by
       editorial.css tonal gradients (~L1992-1993). Without these, gradients
       under .scope-brand fade into warm cream instead of paler stone. */
    --oliv-cream-warm:    #EFEBE0;                          /* paler stone variant for scope-brand */
    --oliv-cream-deep:    #E8E2D0;                          /* deepest stone variant for scope-brand */

    /* Bridge to Astra global colors so Astra/Spectra-rendered elements
       (theme buttons, headings, links, header CTA) respect OLIV scope */
    --ast-global-color-0: var(--oliv-chartreuse-deep);    /* primary */
    --ast-global-color-1: var(--oliv-chartreuse-shadow);  /* secondary / hover */
    --ast-global-color-2: var(--oliv-charcoal);           /* body text */
    --ast-global-color-3: var(--oliv-muted-black);        /* heading */
    --ast-global-color-4: #F5F2EA;                         /* background */
    --ast-global-color-5: #EFEBE0;                         /* subtle bg */
    --ast-global-color-6: var(--oliv-earthy);             /* border */
}

/* For weddings & private events (B2C) — bright warm chartreuse */
.scope-wedding,
[data-scope="wedding"] {
    --oliv-accent:        var(--oliv-chartreuse-bright);
    --oliv-accent-hover:  var(--oliv-chartreuse-muted);
    --oliv-accent-soft:   #ECEEB8;
    --oliv-accent-text:   var(--oliv-chartreuse-shadow);
    --oliv-bg-page:       var(--oliv-pure-white);
    --oliv-bg-card:       var(--oliv-cream);
    --oliv-bg-subtle:     var(--oliv-warm-white);
    --oliv-bg-deep:       var(--oliv-muted-black);
    --oliv-shadow-accent: 0 6px 20px rgba(197, 204, 76, 0.3);
    --oliv-border-strong: var(--oliv-stone);

    --ast-global-color-0: var(--oliv-chartreuse-bright);
    --ast-global-color-1: var(--oliv-chartreuse-muted);
    --ast-global-color-2: var(--oliv-charcoal);
    --ast-global-color-3: var(--oliv-muted-black);
    --ast-global-color-4: var(--oliv-pure-white);
    --ast-global-color-5: var(--oliv-cream);
    --ast-global-color-6: var(--oliv-stone);
}

/* Dark sections — applicable in either arm; bright chartreuse pops on dark */
.scope-dark,
[data-scope="dark"] {
    --oliv-bg-page:       var(--oliv-muted-black);
    --oliv-bg-card:       var(--oliv-charcoal);
    --oliv-bg-subtle:     rgba(255, 255, 255, 0.04);
    --oliv-bg-deep:       var(--oliv-muted-black);
    --oliv-text-primary:  var(--oliv-warm-white);
    --oliv-text-heading:  var(--oliv-warm-white);
    --oliv-text-quiet:    var(--oliv-stone);
    --oliv-text-inverse:  var(--oliv-muted-black);
    --oliv-border:        rgba(255, 255, 255, 0.12);
    --oliv-border-strong: rgba(255, 255, 255, 0.25);
    /* On dark, accent flips to bright so it pops; hover steps to muted */
    --oliv-accent:        var(--oliv-chartreuse-bright);
    --oliv-accent-hover:  var(--oliv-chartreuse-muted);
    --oliv-accent-soft:   rgba(197, 204, 76, 0.18);
    --oliv-shadow-accent: 0 6px 20px rgba(197, 204, 76, 0.35);

    --ast-global-color-0: var(--oliv-chartreuse-bright);
    --ast-global-color-1: var(--oliv-chartreuse-muted);
    --ast-global-color-2: var(--oliv-warm-white);
    --ast-global-color-3: var(--oliv-warm-white);
    --ast-global-color-4: var(--oliv-muted-black);
    --ast-global-color-5: var(--oliv-charcoal);
    --ast-global-color-6: rgba(255, 255, 255, 0.18);
}

/* ==================================================
   LENIS smooth scroll (required boilerplate)
   ================================================== */

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;
}

@media (prefers-reduced-motion: reduce) {
    .lenis.lenis-smooth {
        scroll-behavior: smooth !important;
    }
}
