/* =========================================================================
   RLI — MOBILE / TABLET RESPONSIVE LAYER
   -------------------------------------------------------------------------
   Loaded AFTER style.css. Every rule below is scoped to a media query, so
   the desktop layout (>= 992px), theme, colours, type scale and animations
   are byte-for-byte unchanged. This file only reflows the existing design
   for narrow viewports (320px -> 991px) and touch input.

   Breakpoints
     991.98px  primary mobile/tablet reflow
     767.98px  phone typography + phone-only trims
     479.98px  small phone
     359.98px  ultra-small (320px class devices)
   ========================================================================= */

/* -------------------------------------------------------------------------
   0. Elements introduced for mobile — hidden by default so desktop is
      completely unaffected.
   ------------------------------------------------------------------------- */
.nav-toggle {
    display: none;
    appearance: none;
    -webkit-appearance: none;
    background: none;
    border: 0;
    padding: 0;
}

.nav-scrim {
    display: none;
}


/* =========================================================================
   1. TOUCH / POINTER ADAPTATIONS
   ========================================================================= */
/* The custom cursor / hover-image follower are driven only when
   `usePointerFx` is true in script.js (>=992px AND a hovering pointer).
   Both conditions are mirrored here so the elements can never be left
   rendering as a stray, frozen ring. */
@media (hover: none), (pointer: coarse), (max-width: 991.98px) {
    .custom-cursor,
    .custom-cursor-follower,
    .cursor {
        display: none !important;
    }

    /* The brand logo card stays, but is tap-triggered and centred over the
       marquee rather than following a cursor that does not exist. */
    .marquee-hover-img {
        position: absolute;
        top: 50%;
        left: 50%;
        width: min(42vw, 160px);
        height: min(42vw, 160px);
        padding: 16px;
        transform: translate(-50%, -50%) scale(0.85);
        z-index: 5;
    }

    .marquee-hover-img.show {
        transform: translate(-50%, -50%) scale(1);
    }

    /* Tapped brand fills in so the tap target reads as "selected" */
    .marquee-item.is-active {
        color: var(--color-brown);
    }
}

@media (hover: none), (pointer: coarse) {
    html,
    body,
    a,
    button,
    .cursor-grab,
    .ultra-stat-row,
    .marquee-container,
    .marquee-item {
        cursor: auto;
    }

    a,
    button,
    .faq-question,
    .cursor-zoom {
        cursor: pointer;
        -webkit-tap-highlight-color: rgba(194, 94, 46, 0.15);
    }

    /* Hover-only affordances that can never resolve on touch */
    .modern-card:hover,
    .award-photo-slot:hover,
    .marquee-item:hover {
        transform: none;
    }

    /* Minimum comfortable touch targets */
    .nav-links a,
    .footer-links a,
    .footer-legal a,
    .footer-phone,
    .mega-email,
    .btn-discover,
    .copper-link {
        min-height: 44px;
        display: inline-flex;
        align-items: center;
    }

    .footer-links a {
        padding: 3px 0;
    }
}

/* Honour the OS "reduce motion" preference for the purely decorative
   CSS animations (GSAP scroll choreography is left intact). */
@media (prefers-reduced-motion: reduce) {
    .rotating-stamp,
    .marquee-content,
    .year-panel::after,
    .scroll-line::after {
        animation: none !important;
    }
}


/* =========================================================================
   2. GLOBAL LAYOUT — <= 991px
   ========================================================================= */
@media (max-width: 991.98px) {
    /* IMPORTANT: `overflow-x` must stay OFF <html>. With <html> at the
       default `visible`, <body>'s overflow propagates to the viewport and
       <body> is NOT itself a scroll container. The moment <html> gets a
       non-visible overflow that propagation stops, <body> becomes a real
       scroll container, and every `position: sticky` inside it silently
       stops sticking (hero, product stack, stats visuals, sustainability
       images). Clipping on <body> alone is enough to kill horizontal
       scroll. */
    body {
        overflow-x: hidden;
        width: 100%;
        max-width: 100%;
    }

    /* Nothing may push the page wider than the viewport */
    img,
    video,
    svg,
    canvas,
    iframe {
        max-width: 100%;
    }

    .container {
        padding: 0 20px;
        width: 100%;
    }

    .section-padding {
        padding: 76px 0;
    }

    .mb-xl { margin-bottom: 2.75rem; }
    .mb-l  { margin-bottom: 1.75rem; }
    .mt-l  { margin-top: 1.75rem; }

    /* Full-bleed helpers: 100vw includes the scrollbar on some engines and
       is the classic source of a 1–17px horizontal scroll. */
    .marquee-container,
    .awards-gallery-container,
    .section-team-horizontal,
    .cta-banner {
        width: 100%;
        max-width: 100%;
        margin-left: 0;
    }

    /* Long unbroken headline words must never spill the viewport */
    h1, h2, h3, h4,
    .section-title,
    .title-editorial,
    .editorial-heading,
    .person-name {
        overflow-wrap: break-word;
    }
}


/* =========================================================================
   3. PRELOADER
   ========================================================================= */
@media (max-width: 991.98px) {
    .zoom-mask-wrapper,
    .preloader-overlay {
        height: 100vh;
        height: 100svh;
    }

    /* Was `white-space: nowrap` at a 3rem floor — "ROYAL LEATHER" ran off
       both edges of a 360px screen. */
    .zoom-text {
        font-size: clamp(1.75rem, 9vw, 4rem);
        white-space: normal;
        letter-spacing: 0.06em;
        padding: 0 24px;
        max-width: 100%;
        line-height: 1.15;
    }

    .preloader-overlay {
        padding-bottom: 44px;
    }

    .preloader-counter { font-size: 1rem; }
    .loading-label     { font-size: 0.6rem; letter-spacing: 0.32em; }
}


/* =========================================================================
   4. NAVIGATION — slide-in drawer
   ========================================================================= */
@media (max-width: 991.98px) {
    /* `mix-blend-mode: difference` cannot be kept once the nav hosts a
       full-screen drawer (children inherit the parent's blend group), so the
       bar gets the same treatment the .scrolled state already uses. */
    .site-nav {
        padding: 16px 20px;
        padding-left: max(20px, env(safe-area-inset-left));
        padding-right: max(20px, env(safe-area-inset-right));
        mix-blend-mode: normal;
        color: var(--color-cream);
        background: linear-gradient(to bottom, rgba(12, 11, 10, 0.85) 0%, rgba(12, 11, 10, 0) 100%);
    }

    .site-nav.scrolled {
        padding: 12px 20px;
        background: rgba(12, 11, 10, 0.95);
    }

    .nav-container {
        gap: 16px;
    }

    .brand-name { font-size: 1.25rem; }
    .brand-sub  { font-size: 0.58rem; letter-spacing: 0.18em; }

    /* Hamburger */
    .nav-toggle {
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: flex-end;
        gap: 6px;
        width: 44px;
        height: 44px;
        margin-right: -8px;
        position: relative;
        z-index: 1002;
        cursor: pointer;
        flex: 0 0 44px;
    }

    .nav-toggle span {
        display: block;
        width: 26px;
        height: 1.5px;
        background-color: currentColor;
        border-radius: 2px;
        transition: transform 0.4s cubic-bezier(0.76, 0, 0.24, 1),
                    opacity 0.25s ease,
                    width 0.4s cubic-bezier(0.76, 0, 0.24, 1);
    }

    .nav-toggle span:nth-child(2) { width: 18px; }

    body.nav-open .nav-toggle span:nth-child(1) { transform: translateY(3.75px) rotate(45deg); }
    body.nav-open .nav-toggle span:nth-child(2) { width: 26px; transform: translateY(-3.75px) rotate(-45deg); }

    /* Drawer */
    .nav-links {
        position: fixed;
        top: 0;
        right: 0;
        bottom: 0;
        width: min(84vw, 380px);
        flex-direction: column;
        justify-content: center;
        align-items: flex-start;
        gap: 2px;
        padding: 96px 32px 48px;
        padding-bottom: max(48px, env(safe-area-inset-bottom));
        background: rgba(12, 11, 10, 0.97);
        backdrop-filter: blur(18px);
        -webkit-backdrop-filter: blur(18px);
        border-left: 1px solid rgba(194, 94, 46, 0.18);
        transform: translateX(101%);
        transition: transform 0.55s cubic-bezier(0.76, 0, 0.24, 1);
        z-index: 1001;
        overflow-y: auto;
        overscroll-behavior: contain;
    }

    body.nav-open .nav-links {
        transform: translateX(0);
    }

    .nav-links a {
        font-family: var(--font-display);
        font-size: clamp(1.45rem, 6.5vw, 2rem);
        text-transform: none;
        letter-spacing: 0;
        font-weight: 400;
        color: var(--color-cream);
        padding: 12px 0;
        width: 100%;
        opacity: 0;
        transform: translateY(14px);
        transition: opacity 0.45s ease, transform 0.45s ease;
    }

    body.nav-open .nav-links a {
        opacity: 1;
        transform: translateY(0);
    }

    body.nav-open .nav-links a:nth-child(1) { transition-delay: 0.12s; }
    body.nav-open .nav-links a:nth-child(2) { transition-delay: 0.18s; }
    body.nav-open .nav-links a:nth-child(3) { transition-delay: 0.24s; }
    body.nav-open .nav-links a:nth-child(4) { transition-delay: 0.30s; }
    body.nav-open .nav-links a:nth-child(5) { transition-delay: 0.36s; }

    .nav-links a::after {
        left: 0;
        bottom: 6px;
        background-color: var(--color-copper);
    }

    /* Scrim */
    .nav-scrim {
        display: block;
        position: fixed;
        inset: 0;
        background: rgba(6, 5, 5, 0.55);
        opacity: 0;
        visibility: hidden;
        transition: opacity 0.45s ease, visibility 0.45s ease;
        z-index: 1000;
    }

    body.nav-open .nav-scrim {
        opacity: 1;
        visibility: visible;
    }

    body.nav-open {
        overflow: hidden;
    }
}


/* =========================================================================
   5. HERO
   ========================================================================= */
@media (max-width: 991.98px) {
    .section-hero {
        height: 200vh;
    }

    .hero-sticky {
        height: 100vh;
        height: 100svh;
    }

    /* The desktop "window" reveal is inset(25% 30%) — on a 360px screen that
       left a ~140px sliver. This keeps a clearly readable window that still
       expands dramatically as you scroll. */
    .hero-bg {
        clip-path: inset(20% 12% 20% 12% round 18px);
    }

    /* The clip below is 16:9-ish while the phone frame is tall and narrow, so
       `object-fit: cover` was cropping the sides off the footage. `contain`
       keeps the whole frame visible; the letterbox reads as cinematic bars
       against the hero's own dark background. */
    .hero-video {
        object-fit: cover;
        background-color: var(--color-dark);
        filter: none !important;
        -webkit-filter: none !important;
        backdrop-filter: none !important;
        -webkit-backdrop-filter: none !important;
        transform: translateZ(0);
    }

    .hero-content {
        height: 100vh;
        height: 100svh;
        padding-top: 5.5rem;
        padding-bottom: 3rem;
    }

    .image-matched-layout {
        max-width: 100%;
        width: 100%;
    }

    .hero-eyebrow {
        font-size: 0.63rem;
        letter-spacing: 0.16em;
        margin-bottom: 1.15rem;
    }

    .hero-title {
        font-size: clamp(2.05rem, 9.4vw, 3.6rem);
        line-height: 1.08;
        margin-bottom: 1.35rem;
    }

    .hero-subtitle {
        font-size: 0.98rem;
        line-height: 1.65;
        margin-bottom: 2.25rem;
        max-width: 36ch;
    }

    /* Hard breaks authored for a 1440px canvas produce ragged phone lines */
    .hero-subtitle br {
        display: none;
    }

    .btn-discover {
        gap: 1rem;
        font-size: 0.68rem;
        letter-spacing: 0.13em;
    }

    .btn-circle-arrow {
        width: 46px;
        height: 46px;
        flex: 0 0 46px;
    }

    .hero-stamp {
        width: 78px;
        height: 78px;
        bottom: 24px;
        right: 20px;
        opacity: 0.55;
    }
}

/* On phones the stamp collides with the DISCOVER CTA */
@media (max-width: 767.98px) {
    .hero-stamp { display: none; }
}


/* =========================================================================
   6. OUR STORY — horizontal track becomes a vertical stack
   ========================================================================= */
@media (max-width: 991.98px) {
    /* Keeps the desktop pinned horizontal track — the cards slide sideways
       as you scroll — just sized for a phone. */
    .section-story {
        height: 100vh;
        overflow: hidden;
        padding: 0;
    }

    .story-sticky {
        display: flex;
        align-items: center;
        height: 100vh;
        width: 100%;
    }

    .story-track {
        flex-direction: row;
        align-items: center;
        width: max-content;
        height: 100%;
        padding-left: 8vw;
        gap: 0;
    }

    .story-panel {
        flex: 0 0 auto;
        height: auto;
        margin-right: 8vw;
    }

    .intro-panel {
        width: 78vw;
        max-width: 420px;
    }

    .year-panel {
        flex: 0 0 78vw;
        max-width: 420px;
        height: 62vh;
        max-height: 540px;
        border-radius: 18px;
    }

    .intro-panel .section-title {
        font-size: clamp(1.8rem, 7.6vw, 2.6rem);
    }

    .intro-panel .section-intro {
        font-size: 0.95rem;
        line-height: 1.65;
    }

    .year-bg { overflow: hidden; }

    .year-content {
        padding: 26px 22px 30px;
        /* backdrop-filter over a full-bleed image is a real cost on mobile
           GPUs — a solid scrim reads identically. */
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
        background: rgba(20, 10, 5, 0.72);
    }

    .year-num {
        font-size: 2.75rem;
        margin-bottom: 12px;
    }

    .year-content h3 { font-size: 1.45rem; margin-bottom: 12px; }
    .year-content p  { font-size: 0.92rem; }
    .person-tag      { margin-top: 20px; }

    .year-panel::after { animation: none; }
}


/* =========================================================================
   7. WHAT WE DO — 2-col grid collapses
   ========================================================================= */
@media (max-width: 991.98px) {
    .section-what-we-do {
        padding: 76px 0;
    }

    /* This is a CSS *grid*; the previous override set flex-direction, which
       a grid container ignores — hence the overlapping columns. */
    .split-layout {
        grid-template-columns: 1fr;
        gap: 48px;
    }

    .split-left { height: auto; }

    .sticky-content {
        position: static;
        top: auto;
        padding-bottom: 0;
    }

    .split-right {
        gap: 44px;
        padding-top: 0;
        padding-bottom: 0;
    }

    .modern-card .card-image {
        height: 58vw;
        max-height: 340px;
        margin-bottom: 20px;
    }

    .card-content { padding: 0; }

    .card-header {
        flex-wrap: wrap;
        align-items: baseline;
        gap: 6px 12px;
        margin-bottom: 14px;
        padding-bottom: 12px;
    }

    .editorial-heading { font-size: 1.6rem; }

    .editorial-body {
        font-size: 0.97rem;
        line-height: 1.65;
        max-width: 100%;
    }

    .intro-editorial {
        max-width: 100%;
        font-size: 1rem;
        line-height: 1.7;
    }

    .scroll-indicator { margin-top: 30px; }
    .scroll-line      { width: 44px; }
}


/* =========================================================================
   8. OUR LEATHERS — one slide per view
   ========================================================================= */
@media (max-width: 991.98px) {
    .section-leathers {
        padding: 84px 0 76px;
        min-height: 0;
        display: block;
    }

    .leathers-container { gap: 56px; }

    .leathers-top {
        flex-direction: column;
        align-items: stretch;
        gap: 34px;
    }

    .leathers-intro {
        flex: 0 0 auto;
        margin-bottom: 0;
    }

    /* Inline style on the markup — needs !important to reflow */
    .leathers-intro .section-title {
        font-size: clamp(1.95rem, 8.8vw, 3rem) !important;
        margin-bottom: 2rem !important;
    }

    .leathers-gallery {
        flex: 0 0 auto;
        width: 100%;
    }

    .leather-item {
        flex: 0 0 100%;
        aspect-ratio: 4 / 5;
        border-right: 0;
    }

    .leather-name {
        bottom: 20px;
        left: 20px;
        font-size: 0.65rem;
    }

    .gallery-nav      { right: 12px; }
    .gallery-nav-left { left: 12px; }

    .btn-circle-arrow-slider {
        width: 48px;
        height: 48px;
    }
}


/* =========================================================================
   9. PRODUCTS — stacking cards
   ========================================================================= */
@media (max-width: 991.98px) {
    .section-products {
        padding-top: 76px;
        padding-bottom: 20px;
    }

    .products-header { margin-bottom: 0; }

    .products-header-main {
        gap: 1.5rem;
        margin-top: 0.75rem;
    }

    /* Doubled-up selector on purpose: this element is also `.container`, and
       the `.container { padding: 0 Npx }` shorthand further down this file
       would otherwise reset padding-bottom back to 0. */
    .cards-stack-wrapper.container {
        margin-top: 32px;
        /* This padding is what the last card dwells over while still stuck -
           and the page background shows under it the whole time, so a large
           value reads as an empty gap before the next section. */
        padding-bottom: 3vh;
    }

    /* Nothing follows the last card, so its 12vh gap is not separation - it is
       just an empty gap before the next section. The wrapper padding above
       already gives the last card its dwell while it is still stuck. */
    .stack-card:last-child {
        margin-bottom: 0;
    }

    /* Fixed height + a full viewport of travel between cards, so the
       sticky stack visibly overlaps (auto-height cards were too short for
       the scale/fade hand-off to register). */
    .stack-card {
        top: 90px;
        height: 66vh;
        max-height: 560px;
        min-height: 420px;
        margin-bottom: 12vh;
        border-radius: 14px;
    }

    /* Image above, copy below — for both the normal and .reverse variants */
    /* height:100% is load-bearing. With `auto`, the content box grew to the
       IMAGE's intrinsic aspect ratio (1200x896), so the wider the viewport the
       taller the image got - past ~700px it exceeded the card's fixed height
       and `overflow:hidden` sliced the title off. Giving the content the
       card's height lets flex do the job instead: the copy takes exactly what
       it needs and the image fills whatever is left. */
    .stack-card-content,
    .stack-card-content.reverse {
        flex-direction: column-reverse;
        align-items: stretch;
        justify-content: flex-start;
        height: 100%;
        padding: 0;
    }

    .card-text {
        flex: 0 0 auto;
        padding: 20px 22px 26px;
    }

    .card-text .product-num {
        font-size: 1.05rem;
        margin-bottom: 8px;
    }

    .card-text h3 {
        font-size: clamp(1.4rem, 6.4vw, 2rem);
    }

    .stack-card .card-image {
        flex: 1 1 auto;
        height: auto;
        min-height: 0;
        overflow: hidden;   /* the img is cover-cropped inside whatever is left */
        margin: 0;
        border-radius: 0;
    }

    .badge {
        display: inline-block;
        vertical-align: middle;
        margin-left: 6px;
    }
}


/* =========================================================================
   10. BY THE NUMBERS
   ========================================================================= */
@media (max-width: 991.98px) {
    .stats-split-container {
        flex-direction: column;
        gap: 36px;
    }

    /* Stays sticky (as on desktop) so the image actually swaps in view while
       the numbers scroll past — that crossfade IS the effect. */
    .stats-visuals {
        flex: 0 0 auto;
        position: sticky;
        top: 76px;
        height: auto;
        width: 100%;
        z-index: 1;
        background-color: var(--color-brown);
        padding-bottom: 18px;
    }

    .stats-image-frame {
        flex: 0 0 auto;
        height: 34vh;
        max-height: 300px;
        margin-top: 20px;
    }

    .ultra-stats-list {
        flex: 0 0 auto;
        width: 100%;
        padding-top: 6vh;
        padding-bottom: 10vh;
    }

    .ultra-stat-row,
    .ultra-stat-row:hover {
        padding: 32px 0;
    }

    /* clamp floor of 5rem made "215,000" ~2x wider than a 360px screen */
    .stat-big-number {
        font-size: clamp(3rem, 19vw, 6.5rem);
        line-height: 0.95;
    }

    .stat-info {
        max-width: 100%;
        text-align: left;
        margin-top: 12px;
        padding-bottom: 0;
    }

    .stat-info .unit { margin-bottom: 8px; }
    .stat-info p     { font-size: 1rem; }
}


/* =========================================================================
   11. WHO WE SUPPLY
   ========================================================================= */
@media (max-width: 991.98px) {
    .section-supply .section-title {
        font-size: clamp(1.95rem, 8.6vw, 3rem);
        margin-bottom: 1.5rem;
    }

    .supply-lead {
        font-size: 1.02rem;
        line-height: 1.65;
        margin-bottom: 44px;
    }

    .inditex-box {
        padding: 28px 22px;
        gap: 22px;
        margin-bottom: 44px;
    }

    .inditex-left h3 { font-size: 2.1rem; margin-top: 8px; }
    .inditex-left .label { font-size: 0.66rem; }
    .inditex-right p { font-size: 0.97rem; line-height: 1.7; margin-bottom: 0; }

    /* Extra vertical room so the tap-revealed logo card is not clipped by
       the container's overflow:hidden. */
    .marquee-container { padding: 96px 0; }

    .marquee-item {
        font-size: clamp(2.4rem, 14vw, 5rem);
        -webkit-text-stroke-width: 0.8px;
    }

    .dot {
        font-size: 1.3rem;
        margin: 0 5vw;
    }
}


/* =========================================================================
   12. SUSTAINABILITY
   Desktop pins the image beside scrolling copy. On mobile the two children
   are stacked into a single grid cell so the image can stay sticky behind
   the copy — the pinned image-swap choreography is preserved.
   ========================================================================= */
@media (max-width: 991.98px) {
    .sustainability-container {
        display: grid;
        grid-template-columns: 1fr;
    }

    .sust-left,
    .sust-right {
        grid-column: 1;
        grid-row: 1;
        width: 100%;
    }

    .sust-left  { z-index: 0; }
    .sust-right {
        z-index: 1;
        background: transparent;
        padding: 22vh 20px 24vh;
    }

    .sust-pinned-images {
        position: sticky;
        top: 0;
        height: 100vh;
        height: 100svh;
    }

    /* Light scrim only — the photos must stay clearly visible; the copy
       gets its own glass panel below for legibility. */
    .sust-pinned-images::after {
        content: '';
        position: absolute;
        inset: 0;
        z-index: 2;
        pointer-events: none;
        background: linear-gradient(to bottom, rgba(12, 11, 10, 0.28) 0%, rgba(12, 11, 10, 0.45) 100%);
    }

    .sust-img img {
        filter: brightness(0.92);
    }

    .sust-right .section-header {
        margin-bottom: 3rem;
    }

    .sust-scroll-item {
        margin-bottom: 44px;
        padding: 24px 20px;
        border-radius: 12px;
        background: rgba(12, 11, 10, 0.82);
        border: 1px solid rgba(255, 255, 255, 0.07);
        backdrop-filter: blur(8px);
        -webkit-backdrop-filter: blur(8px);
    }

    .sust-num           { font-size: 1.6rem; }
    .sust-scroll-item h3 { font-size: 1.4rem; }
    .sust-scroll-item p  { font-size: 0.97rem; }
}


/* =========================================================================
   13. AWARDS
   ========================================================================= */
@media (max-width: 991.98px) {
    .section-awards {
        padding: 76px 0;
    }

    .section-awards .section-title {
        margin-bottom: 2.5rem;
    }

    .hero-award-container {
        max-width: min(320px, 84vw);
    }

    /* Auto-scrolling marquee (script.js duplicates the slots and drives the
       track with GSAP), so the track must stay transformable — no native
       overflow scrolling here or the two would fight each other. */
    .awards-gallery-container {
        padding: 40px 0;
        overflow: hidden;
    }

    .awards-gallery-track {
        gap: 16px;
        padding: 0 20px;
        will-change: transform;
    }

    .award-photo-slot {
        width: 240px;
        height: 320px;
        padding: 16px;
    }

    .award-caption h5 { font-size: 1.05rem; }
    .award-caption p  { font-size: 0.72rem; }

    .lightbox-close {
        top: 12px;
        right: 12px;
        width: 44px;
        height: 44px;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 34px;
    }

    .lightbox-content {
        max-width: 92%;
        max-height: 78vh;
    }
}


/* =========================================================================
   14. LEADERSHIP — horizontal scroll-world becomes a vertical stack
   (style.css already does this at <=768px; the GSAP pin is gated at
    >=992px, so the CSS fallback has to start at the same breakpoint or
    769–991px is left horizontally overflowing.)
   ========================================================================= */
@media (max-width: 991.98px) {
    /* Keeps the desktop pinned "scroll-world": the leadership cards travel
       sideways as you scroll. Only the WebGL dust layer is dropped. */
    .section-team-horizontal {
        height: 100vh;
        overflow: hidden;
    }

    #team-canvas-container { display: none; }

    .team-track {
        flex-direction: row;
        width: max-content;
        padding-left: 8vw;
        padding-right: 8vw;
    }

    .team-panel {
        height: 100%;
        flex-shrink: 0;
    }

    .team-intro-panel {
        width: 82vw;
        max-width: 440px;
        margin-right: 8vw;
        padding-top: 0;
    }

    .team-intro-panel .container { padding: 0; }
    .team-intro-panel .intro-editorial { max-width: 100%; font-size: 0.95rem; }
    .team-intro-panel .section-title { font-size: clamp(1.8rem, 7.6vw, 2.6rem); }

    .team-member-panel {
        width: 72vw;
        max-width: 400px;
        height: 58vh;
        max-height: 470px;
        margin: auto 5vw;
    }

    .member-text-wrap {
        left: -12px;
        bottom: -26px;
        padding: 16px 18px;
        max-width: calc(100% + 24px);
    }

    .member-text-wrap .role-label  { font-size: 0.6rem; letter-spacing: 0.16em; }
    .member-text-wrap .person-name { font-size: 1.3rem; }

    .divider-panel {
        width: 34vw;
        max-width: 190px;
        height: 100%;
        margin: 0;
        justify-content: center;
    }

    .outline-text {
        transform: rotate(-90deg);
        font-size: clamp(2rem, 8vw, 3rem);
        margin-bottom: 0;
    }
}


/* =========================================================================
   15. CTA BANNER
   ========================================================================= */
@media (max-width: 991.98px) {
    .contact-section { padding-top: 56px; }

    .cta-banner {
        height: auto;
        min-height: 86vh;
    }

    .cta-content-wrapper {
        padding: 88px 20px 48px;
    }

    .cta-top-row { gap: 14px; }

    .cta-eyebrow-new {
        font-size: 0.58rem;
        letter-spacing: 0.2em;
    }

    .cta-giant-text {
        font-size: clamp(2.1rem, 11vw, 3.8rem);
    }

    .cta-bottom-row { padding-bottom: 4px; }

    .cta-massive-btn {
        width: 100%;
        justify-content: center;
        padding: 19px 24px;
        gap: 12px;
        transform: none !important;
    }

    .cta-massive-btn .btn-text {
        font-size: 0.7rem;
        letter-spacing: 0.16em;
    }
}

/* The grid canvas stays on mobile — script.js drives it from touch moves
   plus a slow ambient pulse so the CTA is alive without a cursor. */


/* =========================================================================
   16. FAQ
   ========================================================================= */
@media (max-width: 991.98px) {
    .section-faq { padding: 76px 0; }

    .faq-header { margin-bottom: 2.5rem; }

    /* Inline style on the markup */
    .faq-header .section-title {
        font-size: clamp(1.9rem, 8.4vw, 2.9rem) !important;
        margin-bottom: 1.25rem !important;
    }

    .faq-accordion { gap: 12px; }

    .faq-question {
        padding: 20px 18px;
        gap: 16px;
        min-height: 60px;
    }

    .faq-question h4 {
        font-size: 1rem;
        line-height: 1.45;
    }

    .faq-icon {
        flex: 0 0 20px;
    }

    .faq-answer-inner { padding: 0 18px 22px; }
    .faq-answer p     { font-size: 0.93rem; }
}


/* =========================================================================
   17. FOOTER
   ========================================================================= */
@media (max-width: 991.98px) {
    .footer-mega-grid {
        padding: 64px 20px 28px;
        padding-bottom: max(28px, env(safe-area-inset-bottom));
    }

    .footer-top-section {
        flex-direction: column;
        gap: 44px;
        margin-bottom: 56px;
    }

    .footer-contact-block {
        min-width: 0;
        width: 100%;
    }

    .mega-email {
        font-size: clamp(1.85rem, 8.6vw, 2.8rem);
        margin-bottom: 24px;
    }

    .footer-links-wrapper {
        gap: 32px 24px;
        width: 100%;
    }

    .footer-col {
        min-width: 0;
        flex: 1 1 42%;
    }

    .footer-col-title { margin-bottom: 20px; }
    .footer-links li  { margin-bottom: 10px; }

    .footer-bottom-bar {
        flex-direction: column;
        align-items: flex-start;
        gap: 16px;
        /* overrides the inline margin-top: 80px */
        margin-top: 48px !important;
    }

    .footer-copy,
    .footer-legal {
        flex-direction: row;
        flex-wrap: wrap;
        gap: 8px 20px;
        align-items: center;
    }

    .ml-m,
    .ml-l { margin-left: 0; }
}


/* =========================================================================
   18. PHONE TYPOGRAPHY  (<= 767px)
   ========================================================================= */
@media (max-width: 767.98px) {
    .section-title {
        font-size: clamp(1.9rem, 8.4vw, 3rem);
    }

    .title-editorial {
        font-size: clamp(1.95rem, 8.6vw, 3rem);
        margin-bottom: 1.5rem;
    }

    .section-intro { font-size: 1rem; }

    .eyebrow,
    .editorial-eyebrow {
        font-size: 0.64rem;
        letter-spacing: 0.2em;
        margin-bottom: 16px;
    }

    .section-padding { padding: 64px 0; }
}


/* =========================================================================
   19. SMALL PHONES  (<= 479px)
   ========================================================================= */
@media (max-width: 479.98px) {
    .container            { padding: 0 16px; }
    .story-track          { padding: 0 16px; }
    .team-track           { padding: 64px 16px; }
    .sust-right           { padding-left: 16px; padding-right: 16px; }
    .footer-mega-grid     { padding-left: 16px; padding-right: 16px; }
    .cta-content-wrapper  { padding-left: 16px; padding-right: 16px; }
    .awards-gallery-track { padding: 0 16px; }
    .site-nav             { padding-left: 16px; padding-right: 16px; }

    .card-text            { padding: 18px 18px 22px; }
    .year-content         { padding: 22px 18px 26px; }
    .inditex-box          { padding: 24px 18px; }
    .faq-question         { padding: 18px 16px; }
    .faq-answer-inner     { padding: 0 16px 20px; }

    .award-photo-slot     { width: 218px; height: 296px; }
    /* No fixed height here: the card has a fixed height and the image is a
       flex child that fills whatever the copy leaves, so pinning it to 40vh
       fights that and can push the title against the clipped bottom edge. */
    .stats-image-frame    { height: 40vh; }
    .team-member-panel    { height: 52vh; }

    .footer-col           { flex: 1 1 100%; }
    .footer-links-wrapper { gap: 28px; }
}


/* =========================================================================
   20. ULTRA-SMALL  (<= 359px — 320px class devices)
   ========================================================================= */
@media (max-width: 359.98px) {
    .container { padding: 0 14px; }

    .hero-title       { font-size: 1.95rem; }
    .hero-subtitle    { font-size: 0.92rem; }
    .btn-discover     { font-size: 0.63rem; gap: 0.75rem; }
    .btn-circle-arrow { width: 42px; height: 42px; flex: 0 0 42px; }

    .stat-big-number  { font-size: 3rem; }
    .marquee-item     { font-size: 2.1rem; }
    .mega-email       { font-size: 1.7rem; }
    .cta-giant-text   { font-size: 1.95rem; }
    .year-num         { font-size: 2.4rem; }

    .award-photo-slot { width: 200px; height: 280px; }
}


/* =========================================================================
   21. SHORT LANDSCAPE PHONES
   ========================================================================= */
@media (max-width: 991.98px) and (max-height: 480px) and (orientation: landscape) {
    .hero-content    { padding-top: 4rem; padding-bottom: 1.5rem; }
    .hero-title      { font-size: clamp(1.6rem, 5.5vw, 2.4rem); margin-bottom: 0.9rem; }
    .hero-subtitle   { font-size: 0.88rem; margin-bottom: 1.4rem; }
    .hero-eyebrow    { margin-bottom: 0.75rem; }

    .year-panel        { min-height: 92vh; }
    .stats-image-frame { height: 70vh; }
    .team-member-panel { height: 82vh; }
    .sust-right        { padding-top: 28vh; padding-bottom: 30vh; }
}
