/* ==========================================================================
   GSAP-INDEPENDENT CSS
   These styles work without GSAP and handle layout/design and navigation.
   ========================================================================== */

/* ----------------------- Global Overrides ----------------------- */
html {
    scroll-behavior: auto !important;
}

/* disable native smooth scroll (Lenis/GSAP handle scroll) */
body {
    overflow-x: hidden !important;
}

body.locked {
    /* overflow: hidden;  // enable if you want to prevent page scroll when menu is open */
}

/* Improve focus visibility across the site */
:where(a, button, [role="button"], .filter-click, .hamburger):focus-visible {
    outline: 2px solid currentColor;
    outline-offset: 2px;
}

/* Reduce highlight on mobile taps for a cleaner feel */
:where(a, button, [role="button"], .filter-click, .hamburger) {
    -webkit-tap-highlight-color: transparent;
}

/* ----------------------- Header / Navigation -------------------- */
header {
    position: fixed;
    width: 100%;
    z-index: 99;
}

/* ALT state = contrast invert via mix-blend-mode */
header.alt {
    mix-blend-mode: difference;
}

header.alt #main-menu>li {
    top: -10px;
    opacity: 0;
}

header.alt #main-menu:after {
    opacity: 0;
}

header.alt .logo-holder img {
    filter: grayscale(1) brightness(200%);
}

header.alt .hamburger .line:before,
header.alt .hamburger .line .line-inner {
    background-color: #fff;
}

/* PRE-ALT state = brand-safe (dark on light) before ALT engages */
header.pre-alt {
    mix-blend-mode: unset;
}

header.pre-alt .elementor-nav-menu a.elementor-item,
header.pre-alt #main-menu,
header.pre-alt #main-menu>li>a {
    color: #000 !important;
}

header.pre-alt .logo-holder img {
    filter: none;
}

header.pre-alt .hamburger .line:before,
header.pre-alt .hamburger .line .line-inner {
    background-color: #000 !important;
}

.pre-alt img {
    filter: brightness(0) saturate(100%) !important;
}

/* Forced neutral header on Contact page (beats .alt / .pre-alt) */
body.page-id-278 header.elementor-location-header,
body.page-id-278 header.elementor-location-header.alt,
body.page-id-278 header.elementor-location-header.pre-alt {
    mix-blend-mode: unset !important;
}

body.page-id-278 header.elementor-location-header .logo-holder img {
    filter: brightness(100) saturate(100%) !important;
}

body.page-id-278 header.elementor-location-header .elementor-nav-menu .elementor-item {
    color: #fff !important;
}

body.page-id-278 header.elementor-location-header .elementor-nav-menu .elementor-item:hover,
body.page-id-278 header.elementor-location-header .elementor-nav-menu .elementor-item:focus,
body.page-id-278 header.elementor-location-header .elementor-item.elementor-item-active {
    color: #fff !important;
}

body.page-id-278 header.elementor-location-header .hamburger .line:before,
body.page-id-278 header.elementor-location-header .hamburger .line .line-inner {
    background-color: #fff !important;
}

body.page-id-278 header.elementor-location-header .hamburger:hover .line:before,
body.page-id-278 header.elementor-location-header .hamburger:hover .line .line-inner {
    background-color: #fff !important;
}

/* Brand colour underline overrides for menu items (optional) */
body.page-id-278 header.pre-alt .menu-item .elementor-item:after {
    background-color: #ffffff !important;
}

header.pre-alt .menu-item .elementor-item:after {
    background-color: #000000 !important;
}

/* Active header toggles */
header.active {
    mix-blend-mode: unset;
}

header.active .elementor-widget-theme-site-logo img {
    filter: grayscale(1) brightness(200%) saturate(100%) !important;
}

header.active .util-menu {
    display: none;
}

/* Hamburger icon */
.hamburger {
    width: 50px;
    height: 35px;
    display: flex;
    flex-flow: column;
    align-items: center;
    justify-content: center;
    cursor: pointer;
}

.hamburger .line {
    width: 100%;
    height: 1px;
    min-height: 1px;
    position: relative;
    overflow: hidden;
    margin: 4px 0;
}

.hamburger .line:before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    width: 0%;
    height: 100%;
    background-color: #fff;
    transition: 1s cubic-bezier(0, 0, 0, 1);
    transition-delay: 0s;
}

.hamburger .line .line-inner {
    position: absolute;
    top: 0;
    right: 0;
    width: 100%;
    height: 100%;
    background-color: #fff;
    transition: 0.7s cubic-bezier(0, 0, 0, 1);
    transition-delay: 0.2s;
}

.hamburger .line:last-of-type:before {
    left: auto;
    right: 0;
    transition-delay: 0.2s;
}

.hamburger .line:last-of-type .line-inner {
    left: 0;
    right: auto;
    transition-delay: 0.4s;
}

.hamburger:hover .line:before {
    width: 100%;
    transition-delay: 0.2s;
}

.hamburger:hover .line .line-inner {
    width: 0%;
    transition-delay: 0s;
}

.hamburger:hover .line:last-of-type:before {
    transition-delay: 0.4s;
}

.hamburger:hover .line:last-of-type .line-inner {
    transition-delay: 0.2s;
}

/* State when mobile menu is active */
header.active .hamburger .line:first-child {
    transform: rotate(45deg);
    top: 4px;
}

header.active .hamburger .line:last-child {
    transform: rotate(-45deg);
    top: -5px;
}

header.pre-alt.active .hamburger .line:before,
header.pre-alt.active .hamburger .line .line-inner {
    background-color: #fff !important;
}

/* Dark theme helpers */
header.dark-theme .hamburger .line:before,
header.dark-theme .hamburger .line .line-inner,
header.dark-theme #main-menu:after,
body.home header .hamburger .line:before,
body.home header .hamburger .line .line-inner,
body.home header #main-menu:after {
    background-color: #fff !important;
}

header.dark-theme #main-menu,
body.home header #main-menu {
    color: #fff !important;
}

/* ------------- Off-canvas / full-screen nav container ----------- */
.nav-menu {
    top: -100svh !important;
    opacity: 0;
    visibility: hidden;
    transition: top .5s ease, opacity .5s ease, visibility 0s linear .5s !important;
}

header.active .nav-menu {
    top: 0 !important;
    opacity: 1;
    visibility: visible;
    transition: top .5s ease, opacity .5s ease !important;
}

/* ------------- Main menu list (yakd-menu) ----------------------- */
#yakd-menu {
    font-family: "aileron", Sans-serif;
    font-size: 60px;
    line-height: 1em;
    font-weight: 400;
    list-style: none;
    margin: 0;
    padding: 0;
    color: #fff;
    display: flex;
    flex-direction: column;
    gap: 50px;
}

#yakd-menu>li {
    position: relative;
}

#yakd-menu li a {
    color: inherit;
    display: flex;
    align-items: flex-start;
    gap: 13px;
    text-decoration: none;
}

#yakd-menu li a:focus-visible {
    text-decoration: underline;
    text-underline-offset: 4px;
}

#yakd-menu .number {
    font-size: 19px;
    line-height: 1;
    margin: 6px 0 0;
}

/* Sub-menu (desktop default) */
#yakd-menu .sub-menu {
    position: absolute;
    right: 0;
    bottom: -330%;
    list-style: none;
    margin: 0;
    padding: 0;
    opacity: 0;
    visibility: hidden;
    transform: translateY(8px);
    transition: opacity .2s ease, transform .2s ease, visibility 0s linear .2s;

    /* layout */
    display: flex;
    flex-wrap: wrap;
    gap: 24px 0;
    width: 60%;
    z-index: 9;

    /* typography */
    font-size: 28px;
}

/* Two-column layout by alternating widths */
#yakd-menu .sub-menu li {
    flex: 0 0 35%;
}

#yakd-menu .sub-menu li:nth-child(odd) {
    flex-basis: 65%;
}

/* Desktop-only interaction/hover refinements */
@media (min-width: 1024px) and (hover: hover) and (pointer: fine) {

    #yakd-menu:hover>li {
        opacity: .3;
        transition: opacity .2s ease;
    }

    #yakd-menu>li:hover {
        opacity: 1;
    }

    /* Accent background while hovering a parent with children (modern browsers) */
    @supports selector(:has(*)) {

        .nav-menu:has(#yakd-menu > li.menu-item-has-children:hover),
        .nav-menu:has(#yakd-menu > li.menu-item-has-children:focus-within) {
            background: #e86f2e !important;
        }
    }

    /* Hide mobile-only back link on desktop */
    #yakd-menu .sub-menu li.back {
        display: none;
    }

    /* Open state set by JS on desktop hover/focus */
    #yakd-menu .menu-item-has-children.open .sub-menu {
        opacity: 1;
        visibility: visible;
        transform: translateY(0);
        transition: opacity .2s ease, transform .2s ease, visibility 0s;
        pointer-events: auto;
    }
}

/* Mobile sub-menu: slide-in panel */
@media (max-width: 1023.98px) {
    #yakd-menu {
        font-size: 45px;
    }

    #yakd-menu>li {
        position: unset;
    }

    #yakd-menu li a {
        padding: 0 30px;
    }

    #yakd-menu .sub-menu {
        font-size: 20px;
        width: 100%;
        background-color: #000;
        z-index: 1;
        top: -25px;
        left: 0;

        /* start off-canvas + hidden */
        transform: translateX(100%);
        opacity: 0;
        visibility: hidden;

        transition: transform .5s ease, opacity .5s ease, visibility 0s linear .5s;
        gap: 0;
        bottom: 0% !important;
    }

    #yakd-menu .sub-menu.open {
        transform: translateX(0);
        opacity: 1;
        visibility: visible;
        transition: transform .5s ease, opacity .5s ease, visibility 0s;
    }

    #yakd-menu .sub-menu li.back {
        text-transform: uppercase;
        font-size: 14px;
        letter-spacing: 3px;
    }

    #yakd-menu .sub-menu li {
        width: 100% !important;
        flex: 0 0 100%;
    }
}

/* ----------------------- Results Section ------------------------- */
.results .e-n-tabs-heading {
    padding-top: 250px;
}

.results .tabs-label * {
    color: inherit !important;
}

.results .e-n-tab-title {
    color: #000;
    outline: none !important;
    border: 0 !important;
}

.results .e-n-tab-title[aria-selected="false"] {
    opacity: 0.2;
}

.results .e-n-tab-title[aria-selected="true"],
.results .e-n-tab-title[aria-selected="false"]:hover {
    text-decoration: underline !important;
    text-decoration-thickness: 2px !important;
    text-underline-offset: 5px;
    opacity: 1 !important;
}

.results .e-n-tabs-content .e-hosted-video {
    aspect-ratio: 0.48 !important;
}

/* ----------------------- Horizontal Grid Layout ------------------ */
/* Make the pinned section a real viewport and remove Elementor inline padding/height */
.horizontal-grid {
    padding: 0 !important;
    overflow: hidden;
    position: relative;
    z-index: 3;
}

/* Section has an .e-con-inner wrapper – turn it into 2 rows: header + track */
.horizontal-grid>.e-con-inner {
    display: grid;
    grid-template-rows: auto 1fr;
    align-content: stretch;
    height: 100%;
}

/* Track: let the widget wrapper overflow for the animation */
.horizontal-grid-tiles .jet-listing-grid,
.horizontal-grid-tiles .jet-listing-grid__items {
    overflow: visible !important;
}

/* Desktop: lay items in a horizontal row */
@media (min-width: 768px) {
    .horizontal-grid-tiles .jet-listing-grid__items {
        display: flex !important;
        flex-wrap: nowrap !important;
        align-items: center;
        gap: 30px;
        margin: 0 !important;
        will-change: transform;
    }

    .horizontal-grid-tiles .jet-listing-grid__item {
        display: flex;
        flex: 0 0 clamp(280px, 50vw, 720px);
        min-width: clamp(280px, 50vw, 720px);
    }

    /* Never animate pinned container transforms on desktop */
    .horizontal-grid,
    .horizontal-grid>.e-con-inner {
        transition: none !important;
    }

    .horizontal-grid.is-pinned {
        transition: none !important;
        top: 0 !important;
        left: 0 !important;
        transform: none !important;
    }
}

/* Mobile: vertical stack */
@media (max-width: 767.98px) {
    .horizontal-grid {
        overflow: visible !important;
        position: static !important;
        --padding-top: 75px;
        --padding-bottom: 100px;
        --padding-left: 20px;
        --padding-right: 20px;
        padding: var(--padding-top) var(--padding-right) var(--padding-bottom) var(--padding-left) !important;
    }

    .horizontal-grid>.e-con-inner {
        display: block;
        height: auto;
    }

    .horizontal-grid-tiles .jet-listing-grid__items {
        display: block !important;
        flex-wrap: wrap !important;
        gap: 20px;
        margin: 0 !important;
        will-change: auto;
        transform: none !important;
    }

    .horizontal-grid-tiles .jet-listing-grid__item {
        display: block;
        width: 100%;
        min-width: 100%;
        flex: none;
        margin-bottom: 20px;
    }

    .horizontal-grid-tiles .jet-listing-grid__item:last-child {
        margin-bottom: 0;
    }
}

/* Media cover + rounding */
.horizontal-grid-tiles .elementor-background-video-container,
.horizontal-grid-tiles .elementor-background-video-hosted,
.horizontal-grid-tiles img {
    width: 100% !important;
    height: 100% !important;
    object-fit: cover;
    border-radius: 20px;
}

/* ----------------------- Work Container Hover Effects ------------ */
.work-container-scale {
    transition: transform 0.7s ease;
    transform: translateZ(0);
    /* force GPU */
}

.work-container:hover .work-container-scale {
    transform: scale(1.02) translateZ(0);
}

/* Overlay */
.work-container-scale:before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    pointer-events: none;
    background-color: rgba(0, 0, 0, 0.25);
    opacity: 0;
    transition: opacity 0.7s ease;
    z-index: 1;
}

.work-container:hover .work-container-scale::before {
    opacity: 1;
}

/* Text lift on hover (except page 143) */
body:not(.page-id-143) .work-text {
    transform: translateY(100px);
    transition: transform 0.7s ease;
}

body:not(.page-id-143) .work-container:hover .work-text {
    transform: translateY(0);
}

/* ----------------------- Swiper Customisations ------------------- */
.elementor-main-swiper {
    overflow: visible;
}

.swiper-slide:not(.swiper-slide-active) .elementor-testimonial__text,
.swiper-slide:not(.swiper-slide-active) .elementor-testimonial__cite .elementor-testimonial__name {
    color: #D9D9D9 !important;
}

/* When the Swiper progressbar is moved outside its widget */
.swiper-pagination.swiper-pagination-progressbar[data-relocated="true"] {
    width: 100%;
    display: block;
    position: relative;
}

/* ==========================================================================
   GSAP-DEPENDENT CSS
   These support GSAP animations and features (reveal, cursor, marquees, etc.)
   ========================================================================== */

/* ----------------------- Text / Line Reveal ---------------------- */
.animate .line,
.line {
    display: block;
    overflow: hidden;
}

.line>* {
    display: inline-block;
}

/* helps horizontal reveals clip correctly */

/* ----------------------- Fade In Support ------------------------- */
.fade-in {
    opacity: 0;
    transform: translateY(24px);
    will-change: transform, opacity;
}

/* Prevent FOUC on headings but don’t pre-transform */
.animate.elementor-widget-heading .elementor-heading-title {
    overflow: hidden;
}

/* ----------------------- Body Background Transition -------------- */
body {
    transition: background-color .35s ease;
}

body.is-black {
    background-color: #000;
    color: #fff;
}

/* ----------------------- Custom Cursor --------------------------- */
.gsap-cursor {
    position: fixed;
    left: 0;
    top: 0;
    width: 100px;
    height: 100px;
    border-radius: 50%;
    background-color: #109047;
    /* brand green */
    pointer-events: none;
    will-change: transform, opacity;
    opacity: 0;
    z-index: 2147483647;
    display: flex;
    align-items: center;
    justify-content: center;
}

.gsap-cursor img,
.gsap-cursor .label {
    pointer-events: none;
    user-select: none;
}

.gsap-cursor img {
    width: 25px;
    height: 25px;
}

.gsap-cursor .label {
    font-family: inherit;
    font-weight: 700;
    font-size: 14px;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: #fff;
    display: none;
    /* toggled in JS */
}

/* Hide native cursor over relevant targets (JS shows custom cursor) */
.work-container:hover,
.swiper-wrapper:hover,
.testimonial-container:hover {
    cursor: none !important;
}

/* ----------------------- Marquee Support ------------------------- */
.marquee {
    overflow: hidden;
    position: relative;
}

.marquee__track {
    display: inline-flex;
    white-space: nowrap;
    will-change: transform;
}

/* ----------------------- Button Text Rollover -------------------- */
.elementor-widget-button .elementor-button {
    position: relative;
    overflow: visible;
    /* overlay rolls inside padding area */
}

.elementor-button .rollover-mask {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: baseline;
    justify-content: center;
    overflow: hidden;
    pointer-events: none;
    z-index: 2;
    border-radius: inherit;
    will-change: transform;
}

.elementor-button .rollover-track {
    display: block;
    will-change: transform;
}

.elementor-button .rollover-line {
    display: flex;
    align-items: center;
    justify-content: center;
    white-space: nowrap;
    height: var(--rollover-h, 1em);
    line-height: var(--rollover-h, 1em);
    padding: 0;
    margin: 0;
}

/* ----------------------- Divider Grow ---------------------------- */
.gsap-grow .elementor-divider-separator,
.elementor-divider-separator.gsap-grow {
    display: block;
    max-width: 100%;
    will-change: width;
}

/* ----------------------- Word Chase ------------------------------ */
.word-chase span {
    transition: color .25s ease;
}

/* ----------------------- Horizontal Grid – page X-scroll lock ---- */
body.no-x-scroll {
    overflow-x: hidden !important;
}

/* ----------------------- Accessibility / Motion ------------------ */
@media (prefers-reduced-motion: reduce) {

    .reveal-text,
    .fade-in,
    .work-container-scale:before,
    .work-text,
    .nav-menu,
    #yakd-menu .sub-menu {
        transition: none !important;
    }

    body {
        transition: none !important;
    }
}

/* Hide custom cursor on touch devices */
@media (pointer: coarse) {
    .gsap-cursor {
        display: none;
    }
}

/* ----------------------- Drag-to-scroll UX ----------------------- */
.process-container {
    cursor: grab;
    touch-action: pan-y;
    will-change: transform;
}

.process-container.dragging {
    user-select: none;
    -webkit-user-select: none;
    cursor: grabbing;
}

.process-container,
.process-container * {
    -webkit-user-drag: none;
}

/* ----------------------- Team Gallery / Marquee ------------------ */
.our-team .jet-listing-grid__items {
    display: flex !important;
    flex-wrap: nowrap !important;
    gap: var(--team-gap, 20px);
    overflow: visible;
    will-change: transform;
    cursor: grab;
}

.our-team .jet-listing-grid__items.is-dragging {
    cursor: grabbing;
}

.our-team .jet-listing-grid__items>.jet-listing-grid__item {
    flex: 0 0 var(--team-card-w, 340px) !important;
    width: var(--team-card-w, 340px) !important;
    max-width: none !important;
    min-width: 0;
}

/* Stacked WP gallery images inside each team card */
.our-team .gallery {
    display: grid;
    aspect-ratio: 3/4;
}

.our-team .gallery>.gallery-item {
    grid-area: 1/1;
    opacity: 0;
    pointer-events: none;
    will-change: opacity;
}

.our-team .gallery>.gallery-item.is-visible {
    opacity: 1;
}

.our-team .gallery .gallery-icon,
.our-team .gallery .gallery-icon img {
    width: 100%;
    height: 100%;
    display: block;
    object-fit: cover;
}

@media (max-width: 767.98px) {
    .our-team .jet-listing-grid__items {
        --team-card-w: 300px;
        --team-gap: 20px;
    }
}

/* ----------------------- Misc header link anim support ----------- */
.elementor-nav-menu a.elementor-item {
    position: relative;
    will-change: transform, top, opacity;
}

/* Filter reveal base state */
.filter-reveal {
    width: 0;
    /* animated by JS */
    overflow: hidden;
    /* hide until revealed */
    white-space: nowrap;
    /* stable measure during open */
}

/* Non-interactive when closed */
.filter-reveal[aria-hidden="true"] {
    pointer-events: none;
}

/* When open, let content wrap normally */
.filter-reveal.is-open {
    white-space: normal;
}

/* Cursor cue (optional) */
.filter-click {
    cursor: pointer;
}