/*
 Theme Name:   ATSR Child Theme
 Theme URI:    https://atsrpl.com.au
 Description:  Child theme for ATSR — Australian Training & Skills Recognition. Built on Hello Elementor with custom design system tokens, qualification CPT, and GSAP integration.
 Author:       Nodevex
 Author URI:   https://nodevex.com
 Template:     hello-elementor
 Version:      3.5.2
 Text Domain:  atsr
 License:      Proprietary

 CSS SPLIT: This file contains design system tokens, base styles, and utility classes.
 Header, footer, mobile nav, and Elementor-specific overrides live in Elementor Pro
 Custom Code (see ATSR_Elementor_Custom_Code.md). Add CSS classes to widgets in
 Elementor (e.g. atsr-header, atsr-footer, atsr-footer-form, btn-phone-pill, btn-cta-gradient).
*/

/* ==========================================================================
   1. DESIGN SYSTEM — CSS Custom Properties
   Source: Figma MCP extraction (rjrQXWWUsnHzyQurQ9Jvdv, node 6:9)
   ========================================================================== */

:root {
    /* Light-only site — opt out of browser auto-dark inversion (Chrome/Brave
       "auto dark theme", Safari). Inline copy is also emitted in <head> via
       atsr_color_scheme_light() so it applies before first paint. */
    color-scheme: only light;

    /* --- Colors: Light Mode (production default) --- */
    --atsr-background: #FFFFFF;
    --atsr-foreground: #1A4D4D;
    --atsr-primary: #23E6A5;
    --atsr-primary-foreground: #1E4B4B;
    --atsr-secondary: #CDFF6E;
    --atsr-destructive: #D32F2F;
    --atsr-destructive-fg: #FFFFFF;
    --atsr-success: #388E3C;
    --atsr-success-fg: #FFFFFF;
    --atsr-muted: #F2F5F8;
    --atsr-muted-fg: #9699AC;
    --atsr-accent: #8C52FF;
    --atsr-accent-fg: #F4EEFF;
    --atsr-popover: #FFFFFF;
    --atsr-popover-fg: #0C0E3A;
    --atsr-card: #FFFFFF;
    --atsr-card-fg: #0C0E3A;
    --atsr-border: #E2E5EA;
    --atsr-input: #F2F5F8;
    --atsr-ring: #6B7EEF;

    /* --- Gradient --- */
    --atsr-gradient: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 100%);

    /* --- Header (Figma: Navigation bg on light pages) --- */
    --atsr-header-bg: #EBFFF6;

    /* --- Typography --- */
    --atsr-font-primary: 'Host Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    --atsr-font-accent: 'Warbler Banner', Georgia, 'Times New Roman', serif;

    /* --- Spacing (17-step scale) --- */
    --atsr-space-1: 4px;
    --atsr-space-2: 8px;
    --atsr-space-3: 12px;
    --atsr-space-4: 16px;
    --atsr-space-5: 20px;
    --atsr-space-6: 24px;
    --atsr-space-7: 32px;
    --atsr-space-8: 40px;
    --atsr-space-9: 48px;
    --atsr-space-10: 64px;
    --atsr-space-11: 80px;
    --atsr-space-12: 96px;
    --atsr-space-13: 128px;
    --atsr-space-14: 160px;
    --atsr-space-15: 192px;
    --atsr-space-16: 224px;
    --atsr-space-17: 256px;

    /* --- Border Radius --- */
    --atsr-radius-xs: 4px;
    --atsr-radius-sm: 8px;
    --atsr-radius-md: 12px;
    --atsr-radius-lg: 16px;
    --atsr-radius-xl: 20px;
    --atsr-radius-2xl: 24px;
    --atsr-radius-full: 9999px;

    /* --- Shadows --- */
    --atsr-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
    --atsr-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
    --atsr-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06);
    --atsr-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05);
    --atsr-shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04);
    --atsr-shadow-2xl: 0 25px 50px rgba(0, 0, 0, 0.25);
}

/* ==========================================================================
   2. BASE RESETS & OVERRIDES
   ========================================================================== */

/* Remove default browser / Elementor blue focus rings globally */
*:focus, *:focus-visible, input:focus, select:focus, textarea:focus, .elementor-field:focus {
    outline: none !important;
}

html {
    overflow-x: clip;
}

body {
    font-family: var(--atsr-font-primary);
    color: var(--atsr-foreground);
    background-color: var(--atsr-background);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    overflow-x: clip;
}

/* Text Editor base color removed — was overriding per-widget Custom CSS
   due to Elementor Pro post-90.css compilation bug (Custom CSS not output).
   Body rule (line 99) already cascades --atsr-foreground to all elements.
   Use utility classes (atsr-text-label, atsr-text-body-dark, etc.) instead
   of per-widget Custom CSS for reliable styling. */

/* ==========================================================================
   3. TYPOGRAPHY UTILITIES
   Body 2 (20px) and Body 3 (14px) — not native Elementor slots.
   Apply via "Additional CSS Classes" on Text Editor widgets.
   ========================================================================== */

.text-body-2,
.text-body-2 p { font-size: 20px; line-height: 1.4; font-weight: 400; }

.text-body-3,
.text-body-3 p { font-size: 14px; line-height: 1.4; font-weight: 400; }

.text-accent-serif,
.text-accent-serif p { font-family: var(--atsr-font-accent); }

.font-regular  { font-weight: 400; }
.font-medium   { font-weight: 500; }
.font-semibold { font-weight: 600; }
.font-bold     { font-weight: 700; }

/* ==========================================================================
   4. BUTTON OVERRIDES
   ========================================================================== */

.elementor-button {
    font-family: var(--atsr-font-primary);
    font-weight: 600;
    border-radius: var(--atsr-radius-full) !important;
    transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.2s ease;
}

.elementor-button:hover {
    transform: translateY(-1px);
    box-shadow: var(--atsr-shadow-md);
    opacity: 0.92;
}

.elementor-button:active { transform: translateY(0); }

/* Variant: Light */
.btn-light .elementor-button {
    background: var(--atsr-muted) !important;
    color: var(--atsr-primary-foreground) !important;
}
.btn-light .elementor-button:hover { background: #E8ECF0 !important; }

/* Variant: Outline */
.btn-outline .elementor-button {
    background: transparent !important;
    border: 1px solid var(--atsr-border) !important;
    color: var(--atsr-primary-foreground) !important;
}
.btn-outline .elementor-button:hover { border-color: var(--atsr-primary) !important; }

/* Variant: Text-only */
.btn-text .elementor-button {
    background: transparent !important;
    color: var(--atsr-primary-foreground) !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
}
.btn-text .elementor-button:hover { color: var(--atsr-primary) !important; }

/* Size overrides */
.btn-lg .elementor-button { padding: 19px 32px !important; min-height: 58px; font-size: 16px; line-height: 20px; }
.btn-md .elementor-button { padding: 14px 24px !important; min-height: 48px; font-size: 16px; line-height: 20px; }
.btn-sm .elementor-button { padding: 9px 16px !important;  min-height: 38px; font-size: 14px; line-height: 20px; }

/* --- Gradient text utility ---
 * Add class "atsr-gradient-text" in Elementor → Advanced → CSS Classes
 * on any Heading or Text Editor widget for the green→lime gradient effect.
 * Targets all inner text elements so the gradient clips to the text. */
.atsr-gradient-text .elementor-heading-title,
.atsr-gradient-text .elementor-text-editor,
.atsr-gradient-text .elementor-text-editor p {
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 100%) !important;
    -webkit-background-clip: text !important;
    background-clip: text !important;
    -webkit-text-fill-color: transparent !important;
    color: transparent !important;
}

/* ==========================================================================
   5. FORM FIELD STYLING
   ========================================================================== */

.elementor-field-textual {
    font-family: var(--atsr-font-primary) !important;
    font-size: 16px !important;
    font-weight: 400 !important;
    color: var(--atsr-foreground) !important;
    background-color: var(--atsr-input) !important;
    border: 1px solid var(--atsr-border) !important;
    border-radius: var(--atsr-radius-sm) !important;
    padding: 14px 16px !important;
    transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

.elementor-field-textual::placeholder { color: var(--atsr-muted-fg) !important; }

.elementor-field-textual:focus {
    border-color: var(--atsr-ring) !important;
    box-shadow: 0 0 0 3px rgba(107, 126, 239, 0.15) !important;
    outline: none;
}

.elementor-field-textual.field-error,
.elementor-field-textual.elementor-error {
    border-color: var(--atsr-destructive) !important;
    box-shadow: 0 0 0 3px rgba(211, 47, 47, 0.12) !important;
}

.elementor-field-type-checkbox input[type="checkbox"],
.elementor-field-type-radio input[type="radio"] {
    accent-color: var(--atsr-primary);
    width: 24px;
    height: 24px;
}

/* ==========================================================================
   6. LAYOUT UTILITIES
   ========================================================================== */

/* Top 12px green accent bar — COMMENTED: Figma design has no accent bar above header */
/*
.site-accent-bar {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    height: 12px;
    background: var(--atsr-primary);
    z-index: 9999;
}
body.has-accent-bar { padding-top: 12px; }
*/

/* Dark teal section (hero/header) */
.section-dark {
    background-color: var(--atsr-primary-foreground) !important;
    color: #FFFFFF;
}
.section-dark h1,
.section-dark h2,
.section-dark h3 { color: var(--atsr-secondary) !important; }
.section-dark p,
.section-dark li { color: rgba(255, 255, 255, 0.85); }

/* --- Mobile hero section padding fix — HOMEPAGE ONLY ---
   Scoped to .atsr-hero class and specific Elementor element ID.
   Root cause: Container .elementor-element-b65f084 has min-height:662px
   from desktop settings, creating ~470px empty space on mobile.
   DO NOT use broad selectors like .section-dark:first-child or
   .elementor-location-single .e-con:first-child — they break
   industry/qualification page templates. */
@media (max-width: 1024px) {
    /* Homepage hero section — auto height, modest bottom padding */
    .atsr-hero {
        min-height: auto !important;
        height: auto !important;
        padding-bottom: 32px !important;
    }

    /* Homepage hero inner containers — kill inherited min-height from desktop */
    .atsr-hero .e-con,
    .atsr-hero .e-con-inner,
    .atsr-hero .elementor-element,
    .elementor-element-b65f084 {
        min-height: 0 !important;
        min-height: unset !important;
        height: auto !important;
    }
}

/* Muted bg section */
.section-muted { background-color: var(--atsr-muted) !important; }

/* Card component */
.atsr-card {
    background: var(--atsr-card);
    border: 1px solid var(--atsr-border);
    border-radius: var(--atsr-radius-md);
    box-shadow: var(--atsr-shadow-sm);
    transition: box-shadow 0.2s ease, transform 0.2s ease;
}
.atsr-card:hover {
    box-shadow: var(--atsr-shadow-md);
    transform: translateY(-2px);
}

/* Badge utilities */
.atsr-badge {
    display: inline-flex;
    align-items: center;
    padding: 4px 12px;
    border-radius: var(--atsr-radius-full);
    font-size: 14px;
    font-weight: 500;
    line-height: 1;
}
.atsr-badge--primary { background: rgba(35, 230, 165, 0.15); color: var(--atsr-primary-foreground); }
.atsr-badge--neutral { background: var(--atsr-muted); color: var(--atsr-muted-fg); }
.atsr-badge--success { background: rgba(56, 142, 60, 0.12); color: var(--atsr-success); }
.atsr-badge--danger  { background: rgba(211, 47, 47, 0.1); color: var(--atsr-destructive); }

/* ==========================================================================
   7. QUALIFICATION CPT — ARCHIVE & SINGLE TEMPLATE HELPERS
   ========================================================================== */

.qualification-card {
    background: var(--atsr-card);
    border: 1px solid var(--atsr-border);
    border-radius: var(--atsr-radius-md);
    padding: var(--atsr-space-6);
    transition: box-shadow 0.25s ease, transform 0.25s ease;
}
.qualification-card:hover { box-shadow: var(--atsr-shadow-lg); transform: translateY(-3px); }

.qualification-card__code {
    font-size: 14px; font-weight: 600;
    color: var(--atsr-primary-foreground);
    text-transform: uppercase; letter-spacing: 0.5px;
}
.qualification-card__title {
    font-size: 20px; font-weight: 700;
    color: var(--atsr-primary-foreground);
    margin-top: var(--atsr-space-2); line-height: 1.3;
}
.qualification-card__meta {
    display: flex; flex-wrap: wrap;
    gap: var(--atsr-space-2); margin-top: var(--atsr-space-4);
}

/* AJAX filter container */
.qualification-filters {
    display: flex; flex-wrap: wrap;
    gap: var(--atsr-space-4); margin-bottom: var(--atsr-space-8);
}
.qualification-filters select {
    font-family: var(--atsr-font-primary);
    font-size: 16px; padding: 12px 16px;
    border: 1px solid var(--atsr-border);
    border-radius: var(--atsr-radius-sm);
    background-color: var(--atsr-input);
    color: var(--atsr-foreground);
    min-width: 200px; cursor: pointer;
    transition: border-color 0.2s ease;
}
.qualification-filters select:focus {
    border-color: var(--atsr-ring); outline: none;
    box-shadow: 0 0 0 3px rgba(107, 126, 239, 0.15);
}
.qualification-search { flex: 1; min-width: 280px; }

/* AJAX loading state */
.qualification-results { position: relative; min-height: 200px; }
.qualification-results.is-loading { opacity: 0.5; pointer-events: none; }
.qualification-results.is-loading::after {
    content: ''; position: absolute; top: 50%; left: 50%;
    width: 40px; height: 40px; margin: -20px 0 0 -20px;
    border: 3px solid var(--atsr-border);
    border-top-color: var(--atsr-primary);
    border-radius: 50%;
    animation: atsr-spin 0.7s linear infinite;
}
@keyframes atsr-spin { to { transform: rotate(360deg); } }

/* ==========================================================================
   8. SINGLE QUALIFICATION TEMPLATE
   ========================================================================== */

.qualification-header { padding: var(--atsr-space-12) 0 var(--atsr-space-8); }

.qualification-meta-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: var(--atsr-space-4); padding: var(--atsr-space-6);
    background: var(--atsr-muted); border-radius: var(--atsr-radius-md);
}
.qualification-meta-item { display: flex; flex-direction: column; gap: var(--atsr-space-1); }
.qualification-meta-item__label {
    font-size: 14px; font-weight: 500; color: var(--atsr-muted-fg);
    text-transform: uppercase; letter-spacing: 0.5px;
}
.qualification-meta-item__value { font-size: 16px; font-weight: 600; color: var(--atsr-primary-foreground); }

/* Units of Competency list */
.units-list { list-style: none; padding: 0; margin: 0; }
.units-list__item {
    padding: var(--atsr-space-4) 0;
    border-bottom: 1px solid var(--atsr-border);
    display: flex; gap: var(--atsr-space-3); align-items: baseline;
}
.units-list__item:last-child { border-bottom: none; }
.units-list__code {
    font-weight: 600; font-size: 14px;
    color: var(--atsr-primary-foreground);
    white-space: nowrap; min-width: 120px;
}
.units-list__name { font-size: 16px; color: var(--atsr-foreground); }

/* ==========================================================================
   9. GSAP ANIMATION HELPERS
   ========================================================================== */

.gsap-reveal       { opacity: 0; transform: translateY(30px); }
.gsap-reveal-left  { opacity: 0; transform: translateX(-40px); }
.gsap-reveal-right { opacity: 0; transform: translateX(40px); }
.gsap-reveal-scale { opacity: 0; transform: scale(0.9); }

/* REDUCED-MOTION FALLBACK:
   When JS is disabled or GSAP fails to load, these rules make elements
   visible instead of stuck at opacity:0. We intentionally do NOT use
   !important here — GSAP inline styles must be able to override these
   so animations work on mobile devices where Battery Saver mode
   falsely triggers prefers-reduced-motion: reduce.
   The JS handles reduced-motion detection separately (see atsr-gsap-init.js). */
/* Testimonials grid — initial hidden state (GSAP sets inline overrides) */
.atsr-testimonials-grid .elementor-widget {
    opacity: 0;
}

@media (prefers-reduced-motion: reduce) {
    .gsap-reveal,
    .gsap-reveal-left,
    .gsap-reveal-right,
    .gsap-reveal-scale,
    .atsr-testimonials-grid .elementor-widget {
        opacity: 1;
        transform: none;
    }
}

/* Elementor Editor — force-show all animated elements so editors
   can see and edit content without FOUC hides or transform offsets.
   JS guard in atsr-gsap-init.js also bails entirely in editor. */
.elementor-editor-active .gsap-reveal,
.elementor-editor-active .gsap-reveal-left,
.elementor-editor-active .gsap-reveal-right,
.elementor-editor-active .gsap-reveal-scale,
.elementor-editor-active .gsap-hero-title,
.elementor-editor-active .gsap-hero-subtitle,
.elementor-editor-active .gsap-hero-cta,
.elementor-editor-active .atsr-hero-buttons,
.elementor-editor-active .atsr-hero-search-wrap,
.elementor-editor-active .gsap-split-title,
.elementor-editor-active .gsap-stagger-item,
.elementor-editor-active .atsr-testimonials-grid .elementor-widget {
    opacity: 1 !important;
    transform: none !important;
    visibility: visible !important;
}

/* ==========================================================================
   9a. ATSR IMPACT STATS PANEL
   The .atsr-impact-panel is an e-con-full container that breaks out of its
   boxed parent. On viewports < 1536px, the 4 stat columns overflow left.
   Fix: constrain to viewport width, allow flex-wrap on smaller screens.
   ========================================================================== */
/* Panel is e-con-full (no .e-con-inner) — 4 stat columns are direct children.
 * On wide screens Elementor breaks it out via left:50%+translateX(-50%)+100vw.
 * On viewports < 1536px the 4×354px columns + gaps overflow. Fix: cap to
 * viewport width and let flex children shrink equally. */
.atsr-impact-panel {
    max-width: 100vw !important;
    overflow: hidden !important;
    box-sizing: border-box !important;
    justify-content: center !important;
    gap: 24px !important;
    padding: 24px !important;
}

/* Stat columns — equal width, no min-width constraint so they compress */
.atsr-impact-panel > .e-con {
    flex: 1 1 0 !important;
    min-width: 0 !important;
}

/* Bug fix (2026-06-05): gsap-counter reflow glitch — card "refits" after count.
 * The counter text grows while counting (0+ → 1,500+): digit count rises from
 * 1 to 5 chars and toLocaleString() inserts a comma at 1,000. If the white card
 * is content-width, the box visibly grows and snaps to its final size during/
 * after the animation. Fix:
 *   1. Cards fill their equal-flex column → the box never resizes from text.
 *   2. tabular-nums gives every digit the same advance width → no jitter as
 *      the number ticks up. (Vertical height is already stable via the
 *      .gsap-counter line-height:1.2 base rule.) */
.atsr-impact-panel-card {
    width: 100% !important;
    box-sizing: border-box !important;
}
.gsap-counter,
.gsap-counter .elementor-heading-title {
    font-variant-numeric: tabular-nums !important;
    font-feature-settings: "tnum" 1 !important;
}

/* On smaller laptops, tighten gap */
@media (max-width: 1440px) {
    .atsr-impact-panel {
        gap: 16px !important;
        padding: 24px 16px !important;
    }
}

/* Mobile: stack stat columns vertically so labels aren't clipped */
@media (max-width: 1024px) {
    .atsr-impact-panel {
        flex-direction: column !important;
        flex-wrap: nowrap !important;
        gap: 16px !important;
    }
    .atsr-impact-panel > .e-con {
        flex: 0 0 auto !important;
        width: 100% !important;
    }
    .atsr-impact-panel-card {
        flex-direction: column !important;
        flex-wrap: nowrap !important;
        gap: 16px !important;
    }
    .atsr-impact-panel-card > .e-con {
        flex: 0 0 auto !important;
        width: 100% !important;
    }
}

/* ==========================================================================
   9b. RPL PROCESS — HORIZONTAL SCROLL (GSAP pin:true — v9)
   Classes: atsr-rpl-pinned, atsr-rpl-panels, atsr-rpl-panel,
   atsr-step-card, atsr-step-number, atsr-progress-bar/fill/dot
   JS driver: atsr-gsap-rpl-process.js v9 (ScrollTrigger pin:true)
   NOTE: v9 dropped the hand-built .atsr-rpl-runway wrapper + CSS position:sticky.
   GSAP owns the pin (position:fixed + auto pin-spacer). Runway rules removed.
   ========================================================================== */

/* --- RPL section — GSAP ScrollTrigger pins this (position:fixed) while the
 * journey scrubs. overflow clips off-screen panels; will-change composites. */
.atsr-rpl-process,
.atsr-rpl-pinned {
    overflow: hidden !important;
    width: 100% !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    will-change: transform;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    transition: none !important;
}

/* When pinned (Solution B): section fills viewport below header.
 * Uses --atsr-header-h CSS variable set by JS once on boot.
 * Flex column layout: cards row (fixed height) → content → panels (fill).
 * NOTE: height and max-height are set by JS via setProperty("important") to
 * dynamically adapt to viewport size (4K vs laptop). The CSS values below are
 * fallbacks for the brief moment before JS runs. Do NOT add !important here —
 * it would override JS and break responsive sizing. */
.atsr-rpl-pinned.is-pinned {
    height: calc(100vh - var(--atsr-header-h, 107px) - 2px);
    max-height: none;
    padding: 0 48px !important;
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
}
/* Zero Elementor's inner-wrapper padding when pinned — the 80px bottom
 * and 96px sides from --padding-* vars waste vertical/horizontal space.
 * Section-level padding (above) provides viewport breathing room instead. */
.atsr-rpl-pinned.is-pinned > .e-con-inner {
    padding: 0 !important;
}

/* Collapse the empty first Elementor container (data-id 315181b).
 * It has min-height ~100px but no content — just wastes vertical space.
 * When not pinned, it provides spacing for the unpinned layout. */
.atsr-rpl-pinned.is-pinned > .e-con:first-child:empty {
    display: none !important;
}

/* Content container (second child) — stretch to fill and stack children.
 * This is the container holding step cards + progress + panels. */
.atsr-rpl-pinned.is-pinned > .e-con:last-child {
    flex: 1 !important;
    min-height: 0 !important;
    height: auto !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
    gap: 4px !important;
}

/* Step cards row — compact spacing, no-shrink when pinned.
 * padding-top: 4px (was 8px) to reclaim vertical space. */
.atsr-rpl-pinned.is-pinned .atsr-step-cards-row {
    flex-shrink: 0 !important;
    padding: 4px 0 0 0 !important;
}

/* Step cards — slightly reduced padding when pinned.
 * Keep full content visible: icon + step number + heading + description.
 * Matches the design reference where all card info is readable. */
.atsr-rpl-pinned.is-pinned .atsr-step-card {
    padding: 16px 20px !important;
    gap: 6px !important;
}
/* Step card description — compact font when pinned to save space */
.atsr-rpl-pinned.is-pinned .atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number) p {
    font-size: 13px !important;
    line-height: 1.3 !important;
    margin: 0 !important;
}

/* Elementor single-child wrapper — must fill the section height, not its natural
 * content height. Without this, the e-child takes flex:0 1 auto (natural ~942px)
 * and overflows the 801px section, clipping the bottom of the panel on MacBook/
 * small laptops. flex:1 1 0% + overflow:hidden constrains it to the section. */
.atsr-rpl-pinned.is-pinned > .e-con-inner > .e-con.e-child {
    flex: 1 1 0% !important;
    min-height: 0 !important;
    overflow: hidden !important;
}

/* Content area (progress bar + panels) fills remaining space.
 * overflow: hidden kills the horizontal scrollbar from the track. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-content {
    flex: 1 !important;
    min-height: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
}

/* Panels container fills remaining content area.
 * overflow: visible — the TRACK must NOT clip its children (panels extend
 * beyond its e-con-boxed width). The PARENT .atsr-rpl-content clips instead.
 * width: max-content — override Elementor e-con-boxed width:100% constraint
 * so all 4 panels are laid out in a continuous flex row. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panels {
    flex: 1 !important;
    min-height: 0 !important;
    overflow: visible !important;
    width: max-content !important;
    gap: 32px !important;               /* Visible panel-to-panel gap (matches JS PANEL_GAP) */
    transition: none !important;        /* Kill Elementor's transform 0.4s — fights GSAP */
}
/* Track's e-con-inner also needs to expand for boxed containers.
 * gap is set by JS (PANEL_GAP) but CSS provides a fallback. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panels > .e-con-inner {
    max-width: none !important;
    width: max-content !important;
    display: flex !important;
    flex-wrap: nowrap !important;
    gap: 32px !important;               /* Panel gap when panels sit inside .e-con-inner */
    transition: none !important;        /* Kill Elementor's inherited transition */
}

/* Each panel fills the panels container height when pinned.
 * Kills Elementor's min-height (575px).
 * Panel WIDTH is set by JS (gsap.set) — do NOT override with CSS width/max-width.
 * overflow: clip — clips both axes without creating a scroll container or BFC.
 * Unlike overflow:hidden, clip never shows a scrollbar even if JS sets overflowY.
 * The parent .atsr-rpl-content (overflow:hidden) handles visual containment.
 * Rounded corners + subtle border match Figma card design.
 * Inactive panels show at opacity 0.3 (set by JS). */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
    --min-height: 0px !important;
    min-height: 0 !important;
    height: 100% !important;
    /* max-height is set dynamically by JS via setProperty("important") to match
     * the calculated panel area height. No CSS cap here — JS handles it. */
    max-height: none;
    /* overflow: clip — clips both axes WITHOUT creating a scroll container.
     * overflow-y:auto turned the panel into a scrollable box: during the GSAP
     * journey the mouse wheel scrolled the panel's OWN content to the bottom,
     * pushing the heading out the top (the visible top-clip bug). clip can
     * never scroll or trap. Short viewports are made to fit by the
     * @media (max-height: 840px) compaction block below, so nothing overflows
     * down to ~768px tall; below that only the bottom clips a few px. */
    overflow: clip !important;
    box-sizing: border-box !important;
    padding: 24px 25px !important;
    margin: 0 !important;
    transition: none !important;        /* Kill Elementor's transform 0.4s — fights GSAP */
    border-radius: 16px !important;
    border: 1px solid rgba(243, 244, 246, 0.3) !important;
}

/* Inactive panels dim to 0.3 so the active step stands out; the active panel
 * (.is-active, toggled by the JS onUpdate) is full opacity. The JS no longer
 * forces an inline opacity:1 on every panel (that override is what made the
 * peeking/inactive panels render full-bright). Desktop-pinned only — mobile
 * Swiper never adds .is-pinned, so its slides are unaffected. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
    opacity: 0.3;
    transition: opacity 0.35s ease;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel.is-active {
    opacity: 1 !important;
}

/* ---- Short-viewport compaction (≤ 840px tall) ----
 * Laptops at 768/800px tall lack room for the full cards row + panel content,
 * so the panel content overflowed. (Previously "solved" with overflow-y:auto,
 * which created a scroll trap that clipped the heading off the top.) Instead,
 * reclaim vertical space: shrink the cards row (icon + description), tighten
 * gaps and fonts so all four panels fit without scrolling.
 * Verified live at 1366×768 and 1280×800 — all 4 panels fit (scrollHeight ≤
 * panel height). Below ~768 the tallest panel clips a few px at the BOTTOM
 * only; the heading/title is always visible. */
@media (max-height: 840px) {
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
        padding: 8px 16px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .e-con {
        gap: 6px !important;
        --container-widget-gap: 6px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-icon-list-items {
        gap: 3px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-text-editor p {
        font-size: 13px !important;
        line-height: 1.4 !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:not(:last-child),
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:not(:last-child) {
        padding-top: 14px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-step-cards-row {
        padding: 2px 0 0 0 !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-step-card {
        padding: 8px 16px !important;
        gap: 2px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-step-card .elementor-widget-image img {
        width: 30px !important;
        height: 30px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number),
    .atsr-rpl-pinned.is-pinned .atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number) * {
        font-size: 11px !important;
        line-height: 1.25 !important;
    }
}

/* Panel inner container — fill panel height, let Elementor's own
 * two-column row layout handle content arrangement naturally.
 * Uses descendant selector (not >) because panels may be e-con-full
 * containers without a direct .e-con-inner child. The first .e-con-inner
 * could be inside a nested column. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .e-con-inner {
    max-width: 100% !important;
    width: 100% !important;
    min-height: 100% !important;
    /* visible (was hidden) so the PANEL handles overflow via overflow-y:auto —
     * otherwise the inner clips the content before the panel can scroll it. */
    overflow: visible !important;
}

/* --- Compact typography inside panels when pinned ---
 * Reduces font sizes, gaps, and margins so all content fits
 * within the viewport-height panel without needing a scrollbar. */

/* Kill default Elementor widget bottom margins */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-widget {
    margin-bottom: 0 !important;
}
/* Tighter gaps inside panel child containers */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .e-con {
    gap: 8px !important;
    --container-widget-gap: 8px !important;
}
/* Panel body text — compact line height */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-text-editor p {
    font-size: 14px !important;
    line-height: 1.5 !important;
    margin-bottom: 2px !important;
}
/* Icon lists inside panels — tighter spacing */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-icon-list-items {
    gap: 4px !important;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-icon-list-text {
    font-size: 13px !important;
    line-height: 1.4 !important;
}
/* Progress bars inside panels (Step 3) — compact height */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-progress-wrapper {
    height: auto !important;
    margin-bottom: 4px !important;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-progress-bar {
    height: 6px !important;
}
/* Panel CTA buttons — compact padding */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-button {
    padding: 10px 24px !important;
    font-size: 14px !important;
}
/* Panel child containers — fill available height so
 * two columns stretch evenly and content distributes properly */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .e-con.e-child {
    min-height: 0 !important;
    --min-height: 0px !important;
}

/* --- Panel columns: TOP-align so the watermark number + heading line up ---
 * The panel itself is the 2-column flex ROW (left text col + right sidebar)
 * and defaults to align-items:center. Each panel's left column is a different
 * height (more/fewer bullets, longer copy), so centering makes the watermark
 * number + heading start at a DIFFERENT vertical offset per panel — they
 * visibly jump as you slide between steps. align-items:flex-start tops them
 * out. Verified live: number/title top identical on all 4 panels (spread 0).
 * The sidebar card uses height:100% so it still fills regardless. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
    align-items: flex-start !important;
}

/* --- Left column top offset: align watermark/heading with the right card's
 * header text + leave breathing room.
 * align-items:flex-start tops BOTH columns at the panel padding edge, but the
 * right consultation card has its own ~26px internal top padding before its
 * "Book Your Free Consultation" header — so the left number/heading read ~26px
 * HIGHER and look flush against the top with no breathing room. Pad the left
 * column down by the same amount so the left heading lines up with the right
 * card header. Verified live (1440×900): num top = right header top = 38px.
 * Excludes the sidebar (:last-child) so the card itself stays full-height. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:not(:last-child),
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:not(:last-child) {
    padding-top: 26px !important;
}

/* --- Wide-screen column fill (>1440px) -------------------------------------
 * The panel itself is the 2-column flex ROW; its columns are direct .e-con.e-child
 * children. Above 1440px the JS panel width grows past the natural content width.
 * The previous attempt capped the text column at 720px and centred the row — on
 * screens wider than ~2000px that left big empty side BANDS (the reported "panel
 * spacing" bug, verified live at 2560px: text col stuck at 720 while the card was
 * ~965, centred, ~150px dead strips each side). Fix: let BOTH columns fill the
 * panel equally (flex 1 1 0) so the content always spans the panel — balanced
 * 50/50, no dead band, no centre void. Below 1440px the panel is already ≈ content
 * width (Bug 6 peek 0.08), so this block stays inert. */
@media (min-width: 1441px) {
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
        justify-content: center !important;
        gap: clamp(40px, 3vw, 72px) !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:not(:last-child),
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child {
        flex: 1 1 0 !important;
        max-width: none !important;
        min-width: 0 !important;
    }
}

/* Elementor page wrapper + ancestors of the RPL section — keep overflow
 * visible. v9 pins via position:fixed (ancestor overflow can't clip a fixed
 * element), so this is now only defensive against an ancestor clipping the
 * section's own horizontal panel track. Harmless to keep. */
.elementor.elementor-36,
.e-con.e-parent:has(.atsr-rpl-process),
.e-con.e-parent:has(.atsr-rpl-pinned) {
    overflow: visible !important;
}

/* Force boxed child containers to full width inside the RPL section. */
.atsr-rpl-process > .e-con-boxed,
.atsr-rpl-process > .e-con-boxed > .e-con-inner,
.atsr-rpl-pinned > .e-con-boxed,
.atsr-rpl-pinned > .e-con-boxed > .e-con-inner {
    max-width: 100% !important;
    width: 100% !important;
}

/* Horizontal track holding all 4 detail panels.
 * gap: 0 — panels are flush, overflow-x:clip hides offscreen ones. */
.atsr-rpl-panels {
    display: flex;
    width: max-content;
    gap: 0;
    will-change: transform;
}

/* Each detail panel — one slide width.
 * Width uses --atsr-panel-w CSS var set by JS (= section.clientWidth).
 * NOT 100vw — that includes the scrollbar width (14px overflow).
 * NOT 100% — that's relative to track parent (= 4 × panel width).
 * JS sets --atsr-panel-w on .atsr-rpl-pinned at boot + onRefresh.
 *
 * IMPORTANT: No fixed height or clamp here. The pinned state uses
 * flex: 1 from parents to fill available space. The non-pinned state
 * uses auto height so content determines size naturally. */
.atsr-rpl-panel {
    flex: 0 0 var(--atsr-panel-w, 100%) !important;
    width: var(--atsr-panel-w, 100%) !important;
    max-width: var(--atsr-panel-w, 100%) !important;
    min-height: 0 !important;
    --min-height: 0px !important;
    overflow: hidden;
    border: 1px solid #E2E5EA;
    border-radius: 16px;
    padding: 32px;
    position: relative;
    box-sizing: border-box;
}

/* Panel inner content — keep boxed at Figma design width.
 * Uses descendant selector (not >) — panels may be e-con-full. */
.atsr-rpl-panel .e-con-inner {
    max-width: 1291px !important;
    margin-left: auto !important;
    margin-right: auto !important;
}

/* --- Step cards (top 4 clickable cards) ---
 * Base styles moved from Elementor custom CSS to theme for single source of truth.
 * flex: 1 1 0 + min-width:0 forces ALL cards to equal width regardless of content.
 * (Old flex: 1 0 0 let longer-content cards stay wider — Step 4 was wider.) */
.atsr-step-card {
    background: #FFFFFF;
    border-radius: 8px;
    padding: 32px;
    box-shadow: 0px 16px 32px 0px rgba(12, 14, 58, 0.04);
    flex: 1 1 0 !important;
    min-width: 0 !important;
    overflow: hidden;
    word-wrap: break-word;
    cursor: pointer;
    transition: border-color 0.3s ease, box-shadow 0.3s ease;
    border: 1px solid transparent !important;
    box-sizing: border-box;
}

/* Responsive: smaller desktops (1024–1400px) — reduce padding, keep cards compact */
@media (min-width: 1025px) and (max-width: 1400px) {
    .atsr-step-card {
        padding: 20px 16px;
    }
}
.atsr-step-card:hover {
    box-shadow: 0 16px 32px rgba(12, 14, 58, 0.08) !important;
}

/* Step number text — default state with full font styling.
 * Matches the Elementor per-widget custom CSS so those can be removed.
 * -webkit-text-fill-color is set explicitly so the active state
 * can override it to transparent for the gradient effect. */
.atsr-step-number,
.atsr-step-number p {
    font-family: 'Host Grotesk', sans-serif !important;
    font-size: 16px !important;
    font-weight: 400 !important;
    line-height: 1.4 !important;
    color: #1A4D4D !important;
    -webkit-text-fill-color: #1A4D4D !important;
    transition: all 0.3s ease;
}

/* Active step number — gradient text.
 * Must target every possible inner element because Elementor wraps
 * text-editor content in <p> tags (and optionally .elementor-widget-container
 * / .elementor-text-editor). background-clip:text on the outer wrapper
 * alone doesn't reliably clip to nested child text in all browsers. */
.atsr-step-card.active .atsr-step-number,
.atsr-step-card.active .atsr-step-number p,
.atsr-step-card.active .atsr-step-number .elementor-widget-container,
.atsr-step-card.active .atsr-step-number .elementor-text-editor,
.atsr-step-card.active .atsr-step-number .elementor-text-editor p,
.atsr-rto-step-card.active .atsr-step-number,
.atsr-rto-step-card.active .atsr-step-number p,
.atsr-rto-step-card.active .atsr-step-number .elementor-widget-container,
.atsr-rto-step-card.active .atsr-step-number .elementor-text-editor,
.atsr-rto-step-card.active .atsr-step-number .elementor-text-editor p {
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 100%) !important;
    -webkit-background-clip: text !important;
    -webkit-text-fill-color: transparent !important;
    background-clip: text !important;
    color: transparent !important;
}

/* Active step card — GRADIENT border + subtle glow.
 * Double-background technique: gradient border compatible with border-radius.
 * Layer 1 (padding-box): white covers content. Layer 2 (border-box): gradient.
 * Specificity 0,0,3,0 beats Elementor's 0,0,2,0 per-widget CSS. */
.atsr-rpl-process .atsr-step-card.active,
.atsr-rpl-pinned .atsr-step-card.active {
    background:
        linear-gradient(#fff, #fff) padding-box,
        linear-gradient(90deg, #23E6A5, #CDFF6E) border-box !important;
    border: 1px solid transparent !important;
    border-radius: 8px !important;
    box-shadow: 0 0 16px rgba(35, 230, 165, 0.15) !important;
}

/* --- Step cards row — full-width flex container for equal-width cards.
 * Forces nowrap + gap so all 4 cards share space evenly.
 * Overrides Elementor's e-con-boxed max-width constraint. */
.atsr-step-cards-row,
.atsr-step-cards-row > .e-con-inner {
    max-width: 100% !important;
    width: 100% !important;
    display: flex !important;
    flex-wrap: nowrap !important;
    gap: 24px !important;
}

/* --- Content wrapper — replaces duplicate atsr-rpl-process on inner container.
 * Add class "atsr-rpl-content" to container 138e49f (holds progress bar + panels)
 * and REMOVE the duplicate atsr-rpl-process from it. --- */
.atsr-rpl-content {
    width: 100% !important;
}

/* ── FAQ accordion (shortcode) — card/icon restyle ──
 * Overrides the inline shortcode CSS's base look for .atsr-faq-item /
 * .atsr-faq-question / .atsr-faq-chevron. !important required to beat the
 * inline <style> the shortcode itself outputs (same pattern as the
 * animation-suppression block above). */
.atsr-faq-item {
    background: #ffffff !important;
    border-radius: 14px !important;
    padding: 20px 24px !important;
    margin-bottom: 14px !important;
    box-shadow: 0 4px 20px rgba(26, 77, 78, 0.08) !important;
    border: 1px solid transparent !important;
    cursor: pointer !important;
    transition: border-color 0.3s ease !important;
    box-sizing: border-box !important;
}
.atsr-faq-item:last-child {
    margin-bottom: 0 !important;
}
.atsr-faq-item.open {
    border-color: #27eaa6 !important;
}
.atsr-faq-question {
    display: flex !important;
    justify-content: space-between !important;
    align-items: center !important;
    gap: 16px !important;
    font-weight: 700 !important;
    font-size: 16px !important;
    color: #222328 !important;
}
.atsr-faq-question > span:first-child {
    min-width: 0 !important;
    word-break: break-word !important;
    overflow-wrap: break-word !important;
}
.atsr-faq-toggle {
    width: 28px !important;
    height: 28px !important;
    min-width: 28px !important;
    flex-shrink: 0 !important;
    border-radius: 50% !important;
    background: #d0ff71 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    color: #1a4d4d !important;
    font-weight: 800 !important;
    font-size: 18px !important;
    transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.3s ease !important;
}
.atsr-faq-item.open .atsr-faq-toggle {
    transform: rotate(180deg) !important;
    background: #27eaa6 !important;
}
.atsr-faq-answer {
    display: grid;
    grid-template-rows: 0fr;
    overflow: hidden;
    opacity: 0;
    will-change: grid-template-rows, opacity;
    transition: grid-template-rows 0.3s ease, opacity 0.3s ease;
}
.atsr-faq-answer > .atsr-faq-answer-inner {
    min-height: 0;
    overflow: hidden;
}
.atsr-faq-answer.expanded {
    grid-template-rows: 1fr;
    opacity: 1;
}
.atsr-faq-answer-inner p {
    margin: 14px 0 0 !important;
    font-size: 15px !important;
    line-height: 1.6 !important;
    color: #5a6e6d !important;
}

/* Tighten Elementor flex gap inside the pinned section so everything fits viewport.
 * Wrapper child (.e-con direct child of section) controls gap between cards row and content.
 * Content area gap controls spacing between progress bar and panels. */
.atsr-rpl-pinned.is-pinned > .e-con {
    gap: 4px !important;
    --container-widget-gap: 4px !important;
}
.is-pinned .atsr-rpl-content {
    gap: 4px !important;
    --container-widget-gap: 4px !important;
}
/* Progress bar — reduce top margin when pinned to save vertical space */
.is-pinned div.atsr-progress-bar:not(.elementor-widget),
.is-pinned .atsr-progress-widget {
    margin-top: 4px !important;
}

/* --- Progress bar --- */

/* Elementor HTML widget wrapper also gets .atsr-progress-bar as its CSS class.
 * This resets the widget wrapper so only the inner HTML div is styled. */
.elementor-widget.atsr-progress-bar {
    height: auto !important;
}

/* The actual progress bar container (inside the HTML widget output) */
div.atsr-progress-bar:not(.elementor-widget) {
    position: relative;
    width: 100%;
    height: 22px;
    margin-top: 16px;
}
.atsr-progress-track {
    position: absolute;
    top: 7px;
    left: 0;
    right: 0;
    height: 8px;
    background: rgba(39, 234, 166, 0.1);
    border-radius: 90px;
}
/* Fill bar — JS sets width dynamically via calc(pct% + 11px).
 * Initial 11px = half a dot width, covering the first dot center. */
.atsr-progress-fill {
    position: absolute;
    top: 7px;
    left: 0;
    width: 11px;
    height: 8px;
    background: var(--atsr-gradient);
    border-radius: 90px;
    transition: width 0.4s ease;
}
/* When GSAP drives the journey, match fill/dot timing to the
 * panel slide (0.8s linear) so everything moves in sync. */
.is-pinned .atsr-progress-fill {
    transition: width 0.8s linear !important;
}

/* Progress dots */
.atsr-progress-dot {
    position: absolute;
    top: 0;
    width: 22px;
    height: 22px;
    background: var(--atsr-gradient);
    border-radius: 50%;
    opacity: 0.3;
    transition: opacity 0.3s ease, transform 0.3s ease;
}
.is-pinned .atsr-progress-dot {
    transition: opacity 0.8s linear, transform 0.8s linear !important;
}
.atsr-progress-dot.active {
    opacity: 1;
    transform: scale(1.15);
    box-shadow: 0 0 0 3px rgba(35, 230, 165, 0.25);
}
.atsr-progress-dot.active::after {
    content: '';
    position: absolute;
    inset: -5px;
    border-radius: 50%;
    border: 2px solid rgba(35, 230, 165, 0.3);
    animation: atsr-dot-pulse 2.5s ease-in-out infinite;
}

/* --- Step card content order (all screens) ---
 * Card 1 DOM: Icon → Heading → StepNumber → Desc (inconsistent)
 * Cards 2-4 DOM: Icon → StepNumber → Heading → Desc
 * Force consistent order: Icon(0) → StepNumber(1) → Heading(2) → Desc(3) */
.atsr-step-card .elementor-widget-icon       { order: 0; }
.atsr-step-card .atsr-step-number            { order: 1; }
.atsr-step-card .elementor-widget-heading     { order: 2; }
.atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number) { order: 3; }

/* --- Step card icon — 32px SVG + 16px padding = 64×64 lime box (Figma) --- */
.atsr-step-card .elementor-widget-icon {
    width: 64px !important;
    height: 64px !important;
    padding: 16px !important;
    border-radius: 12px !important;
    box-sizing: border-box !important;
}
.atsr-step-card .elementor-widget-icon .elementor-icon {
    width: 32px !important;
    height: 32px !important;
}
.atsr-step-card .elementor-widget-icon .elementor-icon svg {
    width: 32px !important;
    height: 32px !important;
}

/* --- Step card typography — base sizes (per Figma) ---
 * Heading: 24px, description text: 16px */
.atsr-step-card .elementor-widget-heading .elementor-heading-title {
    font-size: 24px !important;
    line-height: 1.3 !important;
}
.atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number) p {
    font-size: 16px !important;
    line-height: 1.4 !important;
    margin: 0 !important;
}

/* ==========================================================================
   9b-ii. RPL SIDEBAR — "Book Your Free Consultation" card (all viewports)
   .atsr-rpl-sidebar class on the Elementor container (white bg, rounded)
   that wraps the HTML widget. Flex containment chain ensures content
   fills panel height without overflow. Sizes match Figma design.
   ========================================================================== */

/* Right column of every panel — constrain to panel height, clip overflow.
 * This structural selector covers ALL panels (consultation, compliance, etc.)
 * regardless of whether .atsr-rpl-sidebar class is present. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child,
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child {
    overflow: hidden !important;
    height: 100% !important;
    max-height: 100% !important;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child > .e-con-inner,
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child > .e-con-inner {
    height: 100% !important;
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
}

/* .atsr-rpl-sidebar-3 — REMOVED (Step 3's old right-side box).
 * No longer used; Step 3 uses the standard consultation sidebar like the
 * other panels. Hidden here so the leftover Elementor container (acec71a)
 * stops occupying space / affecting the panel layout. For a permanent removal,
 * delete the "atsr-rpl-sidebar-3" container in Elementor on the homepage. */
.atsr-rpl-sidebar-3 {
    display: none !important;
}

/* .atsr-rpl-sidebar — consultation card column.
 * FIT-TO-CONTENT:
 * FIT-TO-CONTENT: previously forced height:100% (fills the JS panel height),
 * so when the consultation content is shorter than the panel the white card
 * stretched and left a large empty gap at the bottom. Let it size to its
 * content and top-align within the panel instead — the card now hugs its
 * content (no bottom whitespace). overflow stays hidden for the rounded
 * corners; content is short enough that no scroll is needed.
 * Specificity 0,0,8,0 beats the general right-column rule (0,0,7,0). */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child.atsr-rpl-sidebar,
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child.atsr-rpl-sidebar {
    overflow: hidden !important;
    height: -moz-fit-content !important;
    height: fit-content !important;
    max-height: 100% !important;
    align-self: flex-start !important;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child.atsr-rpl-sidebar::-webkit-scrollbar,
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child.atsr-rpl-sidebar::-webkit-scrollbar {
    display: none; /* kept for non-pinned state fallback */
}
/* Sidebar inner container — hug content (no forced 100% min-height that
 * re-introduced the bottom gap). */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child.atsr-rpl-sidebar > .e-con-inner,
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child.atsr-rpl-sidebar > .e-con-inner {
    height: auto !important;
    min-height: 0 !important;
    overflow: visible !important;
}
/* HTML widgets inside ALL right columns — hug content, no stretch.
 * flex:0 0 auto (was 1 1 auto) stops the consultation widget from growing to
 * fill leftover panel height, which was the source of the bottom whitespace. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child [class*="elementor-widget"],
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child [class*="elementor-widget"] {
    margin-bottom: 0 !important;
    flex: 0 0 auto !important;
    min-height: 0 !important;
    overflow: hidden !important;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child .elementor-widget-container,
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child .elementor-widget-container {
    height: 100% !important;
}
/* ALL right column widget roots — containment only.
 * Each widget (consultation, compliance) has its own gap/padding/justify.
 * We only enforce height + overflow so content can't escape the panel. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child [class*="elementor-widget"] > div:not(.atsr-compliance-dashboard),
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child .elementor-widget-container > div:not(.atsr-compliance-dashboard),
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child [class*="elementor-widget"] > div:not(.atsr-compliance-dashboard),
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child .elementor-widget-container > div:not(.atsr-compliance-dashboard) {
    overflow: hidden !important;
    height: 100% !important;
    min-width: unset !important;
}
/* ==========================================================================
   Step 3 Compliance Dashboard — targeted by .atsr-compliance-dashboard
   No extra Elementor class needed. The dashboard div IS the widget's direct
   child, so we override the general containment rule here.
   The inline CSS sets height:80px on items — we override to flex-based sizing.
   ========================================================================== */

/* The dashboard IS the widget > div — override general containment.
   Use .atsr-rpl-panel selector for specificity to beat the general rule. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-compliance-dashboard {
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
    padding: 0 34px !important;
    gap: 8px !important;
}

/* Header — fixed size, never shrinks */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-header {
    flex: 0 0 auto !important;
}

/* Items container — takes remaining space, distributes among children */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-items {
    flex: 1 1 auto !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 8px !important;
    min-height: 0 !important;
    overflow: hidden !important;
}

/* Each item — flexible height instead of fixed 80px.
   flex-basis gives preferred size, but items shrink to fit. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-item {
    height: auto !important;
    min-height: 40px !important;
    flex: 1 1 auto !important;
    overflow: hidden !important;
}

/* Progress bars inside items — scale proportionally */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-bar {
    height: 6px !important;
    min-height: 6px !important;
}

/* Item labels — prevent wrapping from eating space */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-label {
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
}

/* Footer — fixed size, pushed to bottom */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-footer {
    flex: 0 0 auto !important;
    margin-top: auto !important;
}

/* Sidebar widget — let content expand instead of clipping.
 * Override the general right-column widget overflow:hidden rule.
 * Specificity 0,0,9,0 beats general rule (0,0,8,0). */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child.atsr-rpl-sidebar [class*="elementor-widget"],
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child.atsr-rpl-sidebar [class*="elementor-widget"] {
    overflow: visible !important;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child.atsr-rpl-sidebar .elementor-widget-container,
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child.atsr-rpl-sidebar .elementor-widget-container {
    height: auto !important;
    min-height: 100% !important;
}
/* Sidebar widget root div — expand naturally, no clipping.
 * Override the general right-column widget root overflow:hidden rule. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child.atsr-rpl-sidebar [class*="elementor-widget"] > div,
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child.atsr-rpl-sidebar [class*="elementor-widget"] > div,
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con-inner > .e-con.e-child:last-child.atsr-rpl-sidebar .elementor-widget-container > div,
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel > .e-con.e-child:last-child.atsr-rpl-sidebar .elementor-widget-container > div {
    flex: 1 1 auto !important;
    height: auto !important;
    min-height: 100% !important;
    overflow: visible !important;
}
/* Service items container — shrink to fit, don't grow */
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) {
    flex: 0 1 auto !important;
    overflow: hidden !important;
}
/* Each service item — shrink proportionally */
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div {
    flex-shrink: 1 !important;
    height: auto !important;
    min-height: 0 !important;
}
/* Header row — phone icon + title (Figma: 18px bold) */
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:first-child {
    height: auto !important;
    flex-shrink: 0 !important;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:first-child span {
    font-size: 18px !important;
    font-weight: 700 !important;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:first-child svg {
    width: 20px !important;
    height: 20px !important;
}
/* Items container — 3 service items, grow to fill (Figma: gap 16px) */
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) {
    gap: 16px !important;
    flex: 0 1 auto !important;
    overflow: hidden !important;
}
/* Each service item (Figma: 80px height, 16px padding, white bg rounded) */
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div {
    height: auto !important;
    min-height: unset !important;
    padding: 16px !important;
    flex-shrink: 1 !important;
}
/* Icon circles — 48px (Figma) */
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div > div:first-child {
    width: 48px !important;
    height: 48px !important;
    min-width: 48px !important;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div > div:first-child svg {
    width: 24px !important;
    height: 24px !important;
}
/* Service title + subtitle text (Figma: 16px title, 14px subtitle) */
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div span {
    font-size: 14px !important;
    line-height: 1.4 !important;
}
/* Footer banner — "100% Free" — pushes to bottom via auto margin,
 * but stays right below items when space is tight. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child {
    min-height: unset !important;
    flex-shrink: 0 !important;
    flex-grow: 0 !important;
}
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child span,
.atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child p {
    font-size: 14px !important;
    line-height: 1.4 !important;
}

/* --- Compact laptop: RPL panel + cards tighter on ≤900px viewports ---
 * Ensures CTA button and sidebar stay visible without internal scroll.
 * Targets MacBook Air (1440×900), small laptops (1366×768), etc. */
@media (max-height: 960px) and (min-width: 1025px) {
    /* Compact panel padding — reduce vertical only; keep horizontal
     * to match the Figma design's side padding. */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
        padding: 12px 25px !important;
    }

    /* Panel step number watermark ("01", "02" etc) — reduced but still prominent.
     * .atsr-rpl-panel-number is on both the widget wrapper AND heading (JS-tagged).
     * Must beat the general heading rule below (0,0,4,0) — this is 0,0,5,0. */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-rpl-panel-number,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-rpl-panel-number .elementor-heading-title,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-heading-title.atsr-rpl-panel-number {
        font-size: 40px !important;
        line-height: 1 !important;
    }

    /* Panel heading (excludes step number) */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-heading-title:not(.atsr-rpl-panel-number) {
        font-size: 20px !important;
        line-height: 1.2 !important;
        margin-bottom: 0 !important;
    }

    /* Panel body text */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-text-editor p {
        font-size: 12.5px !important;
        line-height: 1.35 !important;
        margin-bottom: 0 !important;
    }

    /* Icon-list — keep icons readable (gradient SVGs vanish when too small).
     * Panel scrolls vertically now, so less compacting needed. */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-icon-list-items {
        gap: 4px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-icon-list-text {
        font-size: 13px !important;
        line-height: 1.4 !important;
    }

    /* Smaller CTA button */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-button {
        padding: 6px 18px !important;
        font-size: 12px !important;
    }

    /* Tighter child container gaps */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .e-con {
        gap: 4px !important;
        --container-widget-gap: 4px !important;
    }

    /* ── RPL Sidebar — compact overrides for ≤900px height ── */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar .elementor-widget-container > div {
        gap: 12px !important;
        padding: 0 20px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) {
        gap: 8px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div {
        padding: 10px 12px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div > div:first-child {
        width: 40px !important;
        height: 40px !important;
        min-width: 40px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div > div:first-child svg {
        width: 20px !important;
        height: 20px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child {
        padding: 10px 14px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child span,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child p {
        font-size: 13px !important;
    }

    /* ── RPL Sidebar-3 — compact compliance dashboard for ≤900px ── */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-compliance-dashboard {
        gap: 4px !important;
        padding: 0 20px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-items {
        gap: 4px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-item {
        min-height: 30px !important;
        padding: 6px 10px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-footer {
        padding: 8px 12px !important;
    }

    /* Progress bars (Step 3 compliance) */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-progress-wrapper {
        margin-bottom: 2px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-progress-bar {
        height: 5px !important;
    }

    /* Tighten gap between step cards and panel area — aligns with JS gapBuffer=12:
     * e-child gap(8) + content gap(4) = 12. At full height gapBuffer=24 matches
     * the default Elementor gap(20) + content gap(4) = 24. */
    .atsr-rpl-pinned.is-pinned > .e-con-inner > .e-con.e-child {
        gap: 8px !important;
        --container-widget-gap: 8px !important;
    }

    /* Compact step cards row — reclaim vertical space.
     * Specificity must match base .atsr-rpl-pinned.is-pinned .atsr-step-card (0,3,0)
     * so this !important rule actually wins over the base pinned rule. */
    .atsr-rpl-pinned.is-pinned .atsr-step-card {
        padding: 10px 14px !important;
        gap: 4px !important;
    }
    .atsr-step-card > .e-con-inner {
        gap: 4px !important;
    }
    .atsr-step-cards-row .atsr-step-card .elementor-widget-heading .elementor-heading-title {
        font-size: 16px !important;
        line-height: 1.2 !important;
    }
    .atsr-step-cards-row .atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number) p {
        font-size: 12px !important;
        line-height: 1.2 !important;
    }
    .atsr-step-cards-row .atsr-step-card .atsr-step-number p {
        font-size: 11px !important;
    }

    /* Section heading above cards — compact on small viewports */
    .atsr-rpl-pinned.is-pinned > .elementor-widget-heading .elementor-heading-title {
        font-size: 28px !important;
        line-height: 1.2 !important;
        margin-bottom: 8px !important;
    }
}

/* --- Extra compact: ≤1025px height (tiny laptops, zoomed browsers) --- */
@media (max-height: 1025px) and (min-width: 1025px) {
    /* Ultra-tight gap — aligns with JS gapBuffer=8: e-child(4) + content(4) = 8 */
    .atsr-rpl-pinned.is-pinned > .e-con-inner > .e-con.e-child {
        gap: 4px !important;
        --container-widget-gap: 4px !important;
    }

    /* Panel internals — aggressive compacting; keep 24px horizontal */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
        padding: 10px 24px !important;
    }
    /* Panel step number watermark — smaller for ultra-compact.
     * Specificity 0,0,5,0 beats the general heading rule below. */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-rpl-panel-number,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-rpl-panel-number .elementor-heading-title,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-heading-title.atsr-rpl-panel-number {
        font-size: 40px !important;
        line-height: 1 !important;
    }
    /* Panel heading (excludes step number) */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-heading-title:not(.atsr-rpl-panel-number) {
        font-size: 20px !important;
        margin-bottom: 0 !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-text-editor p {
        font-size: 12px !important;
        line-height: 1.35 !important;
    }
    /* Icon-list — panel scrolls, keep icons readable */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-icon-list-items {
        gap: 2px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-icon-list-text {
        font-size: 12px !important;
        line-height: 1.3 !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .e-con {
        gap: 2px !important;
        --container-widget-gap: 2px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-button {
        padding: 6px 16px !important;
        font-size: 12px !important;
    }

    /* ── RPL Sidebar — ultra-compact override for ≤1025px viewports ── */
    .atsr-rpl-sidebar [class*="elementor-widget"] > div,
    .atsr-rpl-sidebar .elementor-widget-container > div {
        gap: 8px !important;
        padding: 12px 14px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:first-child span {
        font-size: 14px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:first-child svg {
        width: 16px !important;
        height: 16px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) {
        gap: 6px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div {
        padding: 8px 10px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div > div:first-child {
        width: 36px !important;
        height: 36px !important;
        min-width: 36px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div > div:first-child svg {
        width: 18px !important;
        height: 18px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div span {
        font-size: 12px !important;
        line-height: 1.3 !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child {
        padding: 8px 12px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child span,
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child p {
        font-size: 11px !important;
        line-height: 1.3 !important;
    }

    /* ── RPL Sidebar-3 — ultra-compact compliance dashboard for ≤1025px ── */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-compliance-dashboard {
        gap: 2px !important;
        padding: 0 14px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-items {
        gap: 2px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-item {
        min-height: 24px !important;
        padding: 4px 8px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-label {
        font-size: 11px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-value {
        font-size: 10px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-cd-footer {
        padding: 6px 10px !important;
        font-size: 11px !important;
    }

    /* Step cards row — ultra-compact to reclaim ~60px vertical space.
     * Hide description text, shrink icon, tighter padding.
     * Same specificity fix as 900px block above. */
    .atsr-rpl-pinned.is-pinned .atsr-step-card {
        padding: 8px 12px !important;
        gap: 2px !important;
    }
    .atsr-step-card > .e-con-inner {
        gap: 2px !important;
    }
    /* Step card icons — slightly smaller on ultra-compact viewports */
    .atsr-step-card .elementor-widget-icon {
        width: 48px !important;
        height: 48px !important;
        padding: 8px !important;
    }
    .atsr-step-card .elementor-widget-icon .elementor-icon {
        width: 32px !important;
        height: 32px !important;
    }
    .atsr-step-card .elementor-widget-icon .elementor-icon svg {
        width: 32px !important;
        height: 32px !important;
    }
    /* Card description on short viewports — keep visible (title alone felt sparse) */
    .atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number) {
        display: block !important;
    }
    .atsr-step-cards-row .atsr-step-card .elementor-widget-heading .elementor-heading-title {
        font-size: 12px !important;
        line-height: 1.2 !important;
    }
    .atsr-step-cards-row .atsr-step-card .atsr-step-number,
    .atsr-step-cards-row .atsr-step-card .atsr-step-number p {
        font-size: 10px !important;
        line-height: 1.2 !important;
    }
}

/* ===== 9b-3. RPL PANEL — MACBOOK HEIGHT BAND (821–1025px tall) =====
 * The compaction blocks above (max-height:960 / 1025) are tuned for the WORST
 * short laptop (1366×768) and over-shrink the watermark number, panel heading,
 * and step-card number/heading. 14"/16" MacBook browsers sit higher — ~850–1000px
 * viewport height — so they have room for readable type. This band (≥821px tall,
 * which excludes the 768 case) restores larger, balanced sizes between the
 * compact tier and the full-height desktop tier. Selectors mirror the compaction
 * blocks EXACTLY (same specificity) and sit LATER in source, so they win wherever
 * both apply. Only type scales up; box heights are unchanged and the sidebar is a
 * scroll container, so nothing that previously fit now clips. */
@media (min-width: 1025px) and (min-height: 821px) and (max-height: 1025px) {
    /* Watermark step number "01/02" — compact 40 → 56 (full is ~80) */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-rpl-panel-number,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-rpl-panel-number .elementor-heading-title,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-heading-title.atsr-rpl-panel-number {
        font-size: 56px !important;
        line-height: 1 !important;
    }
    /* Panel H2 heading (excludes watermark) — compact 20 → 26 (full is 32) */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-heading-title:not(.atsr-rpl-panel-number) {
        font-size: 26px !important;
        line-height: 1.2 !important;
        margin-bottom: 4px !important;
    }
    /* Panel body copy — restore to full 14 */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-text-editor p {
        font-size: 14px !important;
        line-height: 1.5 !important;
    }
    /* Panel icon-list rows — restore to 14 */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-icon-list-text {
        font-size: 14px !important;
        line-height: 1.4 !important;
    }
    /* Step-card title — compact 16 → 18 */
    .atsr-step-cards-row .atsr-step-card .elementor-widget-heading .elementor-heading-title {
        font-size: 18px !important;
        line-height: 1.25 !important;
    }
    /* Step-card description — compact 12 → 13 */
    .atsr-step-cards-row .atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number) p {
        font-size: 13px !important;
        line-height: 1.3 !important;
    }
    /* Step-card "STEP 0X" label — compact 11 → 13 */
    .atsr-step-cards-row .atsr-step-card .atsr-step-number,
    .atsr-step-cards-row .atsr-step-card .atsr-step-number p {
        font-size: 13px !important;
        line-height: 1.3 !important;
    }
    /* Right consultation-card header — compact 14 → 16 (full is 18) */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:first-child span {
        font-size: 16px !important;
    }
}

/* --- Mobile/tablet: full RPL section responsive overrides ---
 * Coarse pointer (tablets at ANY width) gets the mobile layout too — the site
 * has no dedicated tablet design and the JS routes coarse → swiper, so the CSS
 * must agree. Mirrors the JS gate in atsr-gsap-rpl-process.js. */
@media (max-width: 1024px), (pointer: coarse) {

    /* Touch / ≤1024px → Swiper carousel, section flows naturally (no pin) */
    .atsr-rpl-pinned,
    .atsr-rpl-pinned.is-pinned,
    .atsr-rpl-process {
        position: static !important;
        height: auto !important;
        overflow: visible !important;
        padding: 0 16px !important;
    }

    /* --- Header: stack title above subtitle --- */
    .atsr-rpl-heading .e-con-inner {
        flex-direction: column !important;
        gap: 12px !important;
    }
    .atsr-rpl-heading,
    .atsr-rpl-wrapper.is-pinned .atsr-rpl-heading {
        padding-top: 40px !important;
        padding-bottom: 16px !important;
    }

    /* --- Step cards row: horizontal scroll carousel --- */
    .atsr-step-cards-row,
    .atsr-step-cards-row > .e-con-inner {
        overflow-x: auto !important;
        flex-wrap: nowrap !important;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
        gap: 16px !important;
        padding-bottom: 8px !important;
    }
    .atsr-step-cards-row::-webkit-scrollbar,
    .atsr-step-cards-row > .e-con-inner::-webkit-scrollbar {
        display: none;
    }

    /* --- Each step card: fixed 275×180, column layout ---
     * Matches Elementor custom CSS — once deployed, remove from Elementor. */
    .atsr-step-card {
        flex-shrink: 0 !important;
        width: 275px !important;
        min-width: 275px !important;
        /* min-height (not a fixed height) + overflow:visible so longer cards
         * like "Evidence Checklist Preparation" grow to fit instead of clipping
         * the description ("...preparation" was cut off). */
        min-height: 180px !important;
        height: auto !important;
        padding: 24px !important;
        flex-direction: column !important;
        flex-wrap: nowrap !important;
        align-items: flex-start !important;
        gap: 4px !important;
        overflow: visible !important;
    }
    /* Elementor's inner container — force column layout on mobile */
    .atsr-step-card > .e-con-inner {
        flex-direction: column !important;
        align-items: flex-start !important;
        gap: 4px !important;
    }
    /* Sticky overrides should not apply on mobile */
    .atsr-rpl-pinned.is-pinned .atsr-step-card {
        padding: 24px !important;
    }
    /* All card children full width except icon */
    .atsr-step-card > .elementor-widget {
        width: 100% !important;
        flex-shrink: 0 !important;
    }
    .atsr-step-card > .elementor-widget-icon {
        width: auto !important;
    }

    /* Step card icon — 48×48 total (green bg box) on mobile
     * Desktop: widget has bg + 16px padding + 64px icon = 80×80
     * Mobile:  shrink to 48×48 total, 12px radius, 24px SVG
     * Triple-class specificity overrides per-widget Elementor Custom CSS */
    .atsr-step-cards-row .atsr-step-card .elementor-widget-icon {
        width: 48px !important;
        height: 48px !important;
        max-height: 48px !important;
        padding: 12px !important;
        border-radius: 12px !important;
        overflow: hidden !important;
        box-sizing: border-box !important;
    }
    .atsr-step-cards-row .atsr-step-card .elementor-widget-icon .elementor-icon {
        width: 24px !important;
        height: 24px !important;
        max-height: 24px !important;
        font-size: 24px !important;
        line-height: 24px !important;
    }
    .atsr-step-cards-row .atsr-step-card .elementor-widget-icon .elementor-icon svg {
        width: 24px !important;
        height: 24px !important;
    }
    /* Nuclear override for card 0 which has per-widget height:64px CSS */
    .atsr-step-cards-row .atsr-step-card .elementor-widget-icon.elementor-widget {
        height: 48px !important;
        max-height: 48px !important;
    }

    /* Reorder: icon(0) → step-number(1) → heading(2) → description(3)
     * Higher specificity to override per-widget Elementor custom CSS */
    .atsr-step-cards-row .atsr-step-card .elementor-widget-icon {
        order: 0 !important;
    }
    .atsr-step-cards-row .atsr-step-card .atsr-step-number {
        order: 1 !important;
    }
    .atsr-step-cards-row .atsr-step-card .atsr-step-number,
    .atsr-step-cards-row .atsr-step-card .atsr-step-number p {
        font-size: 12px !important;
    }
    .atsr-step-cards-row .atsr-step-card .elementor-widget-heading {
        order: 2 !important;
    }
    .atsr-step-card .elementor-widget-heading .elementor-heading-title {
        font-size: 18px !important;
        line-height: 1.3 !important;
    }
    .atsr-step-cards-row .atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number) {
        order: 3 !important;
    }
    .atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number) {
        display: block !important;  /* Show subtitle on mobile (was hidden) */
    }
    /* Tighten the subtitle so showing it doesn't bloat card height on mobile. */
    .atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number),
    .atsr-step-card .elementor-widget-text-editor:not(.atsr-step-number) p {
        font-size: 13px !important;
        line-height: 1.35 !important;
        margin: 0 !important;
    }

    /* --- Progress bar: scale to mobile width --- */
    div.atsr-progress-bar:not(.elementor-widget) {
        margin-top: 8px;
    }
    .atsr-progress-dot {
        width: 18px !important;
        height: 18px !important;
    }

    /* --- Detail panels: Swiper container — do NOT set flex-direction here,
       Swiper's internal .swiper-wrapper handles the horizontal slide layout --- */
    .atsr-rpl-panels {
        width: 100% !important;
        max-width: 100% !important;
        height: auto !important;   /* Override Swiper's fixed height */
        /* DO NOT add `transform: none` here. On mobile this element IS Swiper's
         * .swiper-wrapper, and Swiper slides the panels by setting an inline
         * `transform: translate3d(...)`. A `transform: none !important` rule
         * overrode that inline transform, so the wrapper never moved — the
         * panels froze on slide 1 while the dots/cards advanced (the desync +
         * "panel won't swipe" bug). Swiper must own this transform. */
    }
    /* The wrapper must NOT clip its own slides — slides sit at x = 0, 435, 870…
     * and Swiper reveals them by translating the wrapper. With overflow:hidden
     * on the wrapper, every slide past the first 453px was clipped, so after a
     * slide the panel area went BLANK. The .atsr-rpl-swiper CONTAINER does the
     * clipping (peek). Scoped to .swiper-wrapper so the container is unaffected. */
    .atsr-rpl-panels.swiper-wrapper {
        overflow: visible !important;
    }
    /* Swiper wrapper — height auto so it grows to active slide's content */
    .atsr-rpl-panels > .e-con-inner,
    .atsr-rpl-panels > .swiper-wrapper {
        height: auto !important;
    }
    .atsr-rpl-panel {
        height: auto !important;
        opacity: 1 !important;
        padding: 20px !important;
        overflow: clip !important;   /* Clip horizontal overflow without scroll container;
                                        height:auto ensures no vertical clipping */
    }
    /* Panel inner container — key fix for horizontal scrollbar:
       Elementor sets max-width:min(100%,1024px) which overflows the slide width.
       Force 100% so content never exceeds the panel. */
    .atsr-rpl-panel .e-con-inner {
        max-width: 100% !important;
        gap: 16px !important;
        --container-widget-gap: 16px !important;
    }
    .atsr-rpl-panel .e-con {
        max-width: 100% !important;
        gap: 16px !important;
        --container-widget-gap: 16px !important;
    }

    /* --- Detail panel typography — match Figma mobile design --- */
    .atsr-rpl-panel .atsr-rpl-panel-number .elementor-heading-title,
    .atsr-rpl-panel .elementor-heading-title.atsr-rpl-panel-number,
    .atsr-rpl-panel .atsr-step-number,
    .atsr-rpl-panel .atsr-step-number p {
        font-size: 48px !important;
        line-height: 1 !important;
        margin-bottom: 0 !important;
    }
    .atsr-rpl-panel .elementor-widget-heading .elementor-heading-title:not(.atsr-rpl-panel-number) {
        font-size: 22px !important;
        line-height: 1.2 !important;
        margin-bottom: 0 !important;
    }
    .atsr-rpl-panel .elementor-widget-text-editor p {
        font-size: 14px !important;
        line-height: 1.5 !important;
        margin-bottom: 0 !important;
    }
    /* Icon list — 20px gap per Figma design */
    .atsr-rpl-panel .elementor-icon-list-items {
        gap: 20px !important;
    }
    .atsr-rpl-panel .elementor-icon-list-text {
        font-size: 14px !important;
        line-height: 1.4 !important;
    }
    .atsr-rpl-panel .elementor-icon-list-icon svg {
        width: 20px !important;
        height: 20px !important;
    }
    /* CTA button — Figma shows ~35px gap above, covered by 16px e-con gap + widget margin */
    .atsr-rpl-panel .elementor-widget-button {
        margin-top: 4px !important;
    }
    .atsr-rpl-panel .elementor-button {
        padding: 12px 24px !important;
        font-size: 14px !important;
    }

    /* Hide consultation card on mobile (if it exists) */
    .atsr-consultation-card {
        display: none !important;
    }

    /* Content area — natural flow on mobile */
    .atsr-rpl-content {
        gap: 16px !important;
    }
}

/* ==========================================================================
   9c. RTO STEPS (About Us — How We Work With RTOs)
   Veo-style Stacked Cards — driven by atsr-gsap-rto-steps.js v5.0
   Figma: 8992:13948
   Classes: atsr-rto-steps, atsr-rto-step-card, atsr-rto-pagination, atsr-rto-dot
   ========================================================================== */

/* Ancestors must not clip — overflow:hidden kills position:sticky */
.e-con:has(.atsr-rto-steps),
.e-con-inner:has(.atsr-rto-steps),
.atsr-rto-runway {
    overflow: visible !important;
}

/* Card base — white, rounded, subtle shadow (excludes CTA) */
.atsr-rto-step-card:not(.atsr-rto-cta-card) {
    background: #FFFFFF !important;
    border-radius: 32px !important;
    border: 1px solid transparent !important;
    box-shadow: 0 24px 48px rgba(12, 14, 58, 0.04);
    transition: none !important;        /* Kill Elementor's transform 0.4s — fights GSAP */
    will-change: transform, filter;
}

/* ── Step-icon number badge — kill the SVG drop-shadow filter dependency ──
   The Figma step icons bake the number badge inside <g filter="url(#filter…)">,
   and that filter id is DUPLICATED across every step card. Browsers resolve
   url(#id) to the first match; on mobile the first copy can sit in a hidden/
   clipped (stacked) card, so the filter fails to resolve — and a broken SVG
   filter removes the whole group (badge box + number) from rendering. That's
   why the number vanished on mobile while the icon stayed.
   Neutralising these inline-SVG filters via CSS removes the id dependency
   entirely: the badge always renders (it just loses a cosmetic drop shadow).
   Scoped to <g filter> inside inline SVGs — the exact Figma badge pattern —
   so it never affects functional filters elsewhere. */
.atsr-rto-step-card svg g[filter],
.atsr-step-card svg g[filter],
.wsycu svg g[filter],
.atsr-impact-panel svg g[filter] {
    filter: none !important;
}

/* Active card — gradient border via double-background (excludes CTA) */
.atsr-rto-step-card.active:not(.atsr-rto-cta-card) {
    background:
        linear-gradient(#FFFFFF, #FFFFFF) padding-box,
        linear-gradient(90deg, var(--atsr-primary, #23E6A5), var(--atsr-secondary, #CDFF6E)) border-box !important;
}

/* CTA card — preserve Elementor styling, just add border-radius */
.atsr-rto-step-card.atsr-rto-cta-card {
    border-radius: 32px !important;
    transition: none !important;
    will-change: transform, filter;
}

.atsr-rto-step-card:hover {
    box-shadow: 0 24px 48px rgba(12, 14, 58, 0.08);
}

/* Heading wrapper (JS-created) — absolutely positioned in sticky frame,
   fades out on scroll. Resets Elementor widget margins;
   flex gap:12px controls spacing per Figma 8992:13949 */
.atsr-rto-heading-wrapper {
    display: flex;
    flex-direction: column;
    gap: 12px;
    align-items: center;
    text-align: center;
}
.atsr-rto-heading-wrapper > .elementor-widget,
.atsr-rto-heading-wrapper > .elementor-element {
    margin: 0 !important;
    padding: 0 !important;
    width: 100%;
    max-width: 754px; /* Figma heading block width */
}

/* Dot nav — positioned left of card stack inside .atsr-rto-sticky-frame.
   top + height set via inline JS to align with card area. */
.atsr-rto-sticky-frame {
    position: relative; /* anchor for dots */
}
.atsr-rto-dots-nav {
    position: absolute;
    left: -48px;
    display: flex;
    flex-direction: column;
    gap: 16px;
    align-items: center;
    justify-content: center;
    z-index: 10;
    pointer-events: auto;
}
.atsr-rto-nav-dot {
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: #C4C4C4;
    cursor: pointer;
    transition: background 0.3s ease, transform 0.3s ease;
}
.atsr-rto-nav-dot.active {
    background: linear-gradient(135deg, #23E6A5, #CDFF6E) !important;
    transform: scale(1.25);
    box-shadow: 0 0 0 3px rgba(35, 230, 165, 0.25);
}
.atsr-rto-nav-dot.active::after {
    content: '';
    position: absolute;
    inset: -5px;
    border-radius: 50%;
    border: 2px solid rgba(35, 230, 165, 0.3);
    animation: atsr-rto-dot-pulse 2.5s ease-in-out infinite;
}
@keyframes atsr-rto-dot-pulse {
    0%, 100% { transform: scale(1); opacity: 0.5; }
    50%      { transform: scale(1.6); opacity: 0; }
}
.atsr-rto-nav-dot {
    position: relative;
}

/* Original Elementor pagination — hidden, JS uses dynamic dots */
.atsr-rto-pagination {
    display: none;
}

/* Mobile: 3D stacked card animation (touch-swipe driven) */
.atsr-rto-mobile-stack {
    overflow: visible !important;
    touch-action: pan-y;                /* allow vertical scroll, JS handles horizontal */
}
.atsr-rto-mobile-stack > .atsr-rto-step-card {
    box-shadow: 0 8px 32px rgba(12, 14, 58, 0.06);
}
.atsr-rto-mobile-stack > .atsr-rto-step-card.active {
    box-shadow: 0 16px 48px rgba(12, 14, 58, 0.08);
}
.atsr-rto-swiper-pagination {
    text-align: center;
    padding: 16px 0;
}
.atsr-rto-mob-dot {
    display: inline-block;
    position: relative;        /* anchor for the ::before tap target — WITHOUT this the
                                  absolute ::before resolves against the section and its
                                  inset:-10px blows up to cover the whole carousel, so the
                                  last dot's overlay ate every tap (jumped to step 5,
                                  blocked the CTA button). */
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: #B0B8C1;
    opacity: 0.4;
    margin: 0 5px;
    cursor: pointer;
    transition: opacity 0.3s, background 0.3s;
}
.atsr-rto-mob-dot.active {
    background: #23E6A5;
    opacity: 1;
    transform: scale(1.2);
}
/* Enlarged invisible tap target — the dots are only 10px, too small to tap. */
.atsr-rto-mob-dot::before {
    content: "";
    position: absolute;
    inset: -10px;
    border-radius: 50%;
}
.atsr-rto-mob-dot:focus-visible {
    outline: 2px solid #23E6A5;
    outline-offset: 3px;
}

/* Equal-height stack: the CTA / last card is forced to the tallest card's
   height (JS), so centre its content instead of leaving it top-aligned. */
.atsr-rto-mobile-stack > .atsr-rto-cta-card,
.atsr-rto-mobile-stack > .atsr-rto-cta-card > .e-con-inner {
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
}

/* Persistent swipe cue — two chevrons overlaid on the active card's mid-edges,
   pulsing OUTWARD so the card clearly reads as swipeable left/right. Sits ABOVE
   the cards (active z ≈ total+2, small ints) but pointer-events:none so it never
   blocks the swipe/tap. Height + top set inline by JS to match the card box. */
.atsr-rto-swipe-cue {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 24px;            /* lands the chevrons just inside the card edges */
    z-index: 60;
    pointer-events: none;
    user-select: none;
    color: rgba(26, 77, 77, 0.5);
    font-size: 32px;
    font-weight: 700;
    line-height: 1;
}
.atsr-rto-swipe-cue span { display: block; }
.atsr-rto-swipe-cue span:first-child { animation: atsr-rto-cue-l 1.5s ease-in-out infinite; }
.atsr-rto-swipe-cue span:last-child  { animation: atsr-rto-cue-r 1.5s ease-in-out infinite; }
@keyframes atsr-rto-cue-l {
    0%, 100% { transform: translateX(0);    opacity: 0.45; }
    50%      { transform: translateX(-6px); opacity: 0.9;  }
}
@keyframes atsr-rto-cue-r {
    0%, 100% { transform: translateX(0);    opacity: 0.45; }
    50%      { transform: translateX(6px);  opacity: 0.9;  }
}
@media (prefers-reduced-motion: reduce) {
    .atsr-rto-swipe-cue span { animation: none; }
}

/* Mobile spacing — remove the dead gap between the intro copy and the card stack.
   The intro widget carries a 40px bottom-margin and the container a 12px gap → ~52px
   of empty space above the cards. Scoped to the container that holds .atsr-rto-steps
   so it never touches other sections; mobile-only. */
@media (max-width: 1024px) {
    .e-con:has(> .atsr-rto-steps) { gap: 8px !important; }
    .e-con > *:has(+ .atsr-rto-steps) { margin-bottom: 4px !important; }
    .atsr-rto-swiper-pagination { padding: 10px 0 0 !important; }
}

/* CSS-only fallback when Swiper isn't loaded */
.atsr-rto-mobile-carousel {
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    scroll-snap-type: x mandatory !important;
    -webkit-overflow-scrolling: touch !important;
    gap: 16px !important;
    padding: 0 16px 16px !important;
    scrollbar-width: none !important;
}
.atsr-rto-mobile-carousel::-webkit-scrollbar {
    display: none !important;
}
.atsr-rto-mobile-carousel > .atsr-rto-step-card {
    flex: 0 0 75vw !important;
    max-width: 75vw !important;
    scroll-snap-align: center !important;
    height: auto !important;
    border: 1px solid #23E6A5 !important;
}
.atsr-rto-mobile-carousel > .elementor-absolute {
    display: none !important;
}


/* ==========================================================================
   10. MOBILE HEADER (≤1024px) — By CSS Class
   Figma: 7619:34272
   Classes: atsr-header-logo, atsr-header-menu,
            atsr-header-get-in-touch, atsr-header-get-in-touch-mobile
   ========================================================================== */

@media (max-width: 1024px) {

    /* === HEADER CONTAINER === */
    .atsr-header,
    .elementor-location-header .e-con.e-parent {
        display: flex !important;
        flex-direction: row !important;
        flex-wrap: nowrap !important;
        align-items: center !important;
        justify-content: space-between !important;
        padding: 16px !important;
        gap: 0 !important;
    }

    /* === LOGO: far left, 114×30px === */
    .atsr-header-logo {
        order: -100 !important;
        flex: 0 0 auto !important;
        margin-left: 0 !important;
        margin-right: auto !important;
    }
    .atsr-header-logo img {
        content: url('/wp-content/uploads/2026/03/ATSR-Logo-Final-H.png') !important;
        width: 114px !important;
        max-width: 114px !important;
        height: 30px !important;
        object-fit: contain !important;
    }

    /* === DESKTOP BUTTON: hide on mobile === */
    .atsr-header-get-in-touch {
        display: none !important;
    }

    /* === MOBILE CTA BUTTON: show + style === */
    .atsr-header-get-in-touch-mobile {
        display: flex !important;
        visibility: visible !important;
        opacity: 1 !important;
        order: 90 !important;
        flex: 0 0 auto !important;
        margin-left: auto !important;
        margin-right: 10px !important;
    }
    .atsr-header-get-in-touch-mobile .elementor-widget-container {
        display: flex !important;
    }
    .atsr-header-get-in-touch-mobile .elementor-button {
        display: flex !important;
        align-items: center !important;
        justify-content: center !important;
        width: 128px !important;
        height: 38px !important;
        min-height: 38px !important;
        padding: 9px 16px !important;
        background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 100%) !important;
        border-radius: 9999px !important;
        border: none !important;
        font-family: 'Host Grotesk', sans-serif !important;
        font-size: 14px !important;
        font-weight: 600 !important;
        line-height: 20px !important;
        color: #1E4B4B !important;
        -webkit-text-fill-color: #1E4B4B !important;
        white-space: nowrap !important;
    }

    /* === HAMBURGER MENU: far right === */
    .atsr-header-menu {
        order: 100 !important;
        flex: 0 0 auto !important;
        margin: 0 !important;
    }
    .atsr-header-menu .elementor-menu-toggle {
        display: flex !important;
        align-items: center !important;
        justify-content: center !important;
        width: 34px !important;
        height: 34px !important;
        padding: 0 !important;
        color: #1A4D4D !important;
        background: transparent !important;
        border: none !important;
    }
    .atsr-header-menu .elementor-menu-toggle svg,
    .atsr-header-menu .elementor-menu-toggle i {
        color: #1A4D4D !important;
        fill: #1A4D4D !important;
    }

    /* === HAMBURGER MENU OPEN STATE === */
    /* X close icon → white on dark bg. Targets path and SVG elements for bulletproof rendering in all states (sticky/non-sticky) */
    .atsr-header-menu .elementor-menu-toggle.elementor-active,
    .atsr-header-menu .elementor-menu-toggle.elementor-active svg,
    .atsr-header-menu .elementor-menu-toggle.elementor-active svg path,
    .atsr-header-menu .elementor-menu-toggle.elementor-active i,
    .elementor-sticky--effects .atsr-header-menu .elementor-menu-toggle.elementor-active,
    .elementor-sticky--effects .atsr-header-menu .elementor-menu-toggle.elementor-active svg,
    .elementor-sticky--effects .atsr-header-menu .elementor-menu-toggle.elementor-active svg path,
    .elementor-sticky--effects .atsr-header-menu .elementor-menu-toggle.elementor-active i {
        color: #FFFFFF !important;
        fill: #FFFFFF !important;
    }

    /* Logo → swap to white version when menu open (using relative URL) */
    .atsr-header:has(.elementor-menu-toggle.elementor-active) .atsr-header-logo img {
        content: url('/wp-content/uploads/2026/03/ATSR-Logo-Final-H-Solid-W-scaled.png') !important;
        filter: none !important;
    }

    /* Hide header CTA when menu open */
    .atsr-header:has(.elementor-menu-toggle.elementor-active) .atsr-header-get-in-touch-mobile {
        visibility: hidden !important;
    }
}

/* ── Bug 7 follow-up (2026-06-06): Safari/iOS 26.4 hardening ──
 * Mirror of the sticky_header.css block. (a) X close glyph painted white
 * UNCONDITIONALLY + open-state keyed on aria-expanded (iOS Safari applies the
 * .elementor-active JS class unreliably). (b) dropdown pinned to viewport with
 * high z-index so it stops rendering under page sections on iOS. */
@media (max-width: 1024px) {
    .atsr-header-menu .elementor-menu-toggle svg.elementor-menu-toggle__icon--close,
    .atsr-header-menu .elementor-menu-toggle svg.elementor-menu-toggle__icon--close path,
    .atsr-header-menu .elementor-menu-toggle[aria-expanded="true"],
    .atsr-header-menu .elementor-menu-toggle[aria-expanded="true"] svg,
    .atsr-header-menu .elementor-menu-toggle[aria-expanded="true"] svg path,
    .atsr-header-menu .elementor-menu-toggle[aria-expanded="true"] i,
    .elementor-sticky--effects .atsr-header-menu .elementor-menu-toggle[aria-expanded="true"] svg,
    .elementor-sticky--effects .atsr-header-menu .elementor-menu-toggle[aria-expanded="true"] svg path {
        color: #FFFFFF !important;
        fill: #FFFFFF !important;
        stroke: #FFFFFF !important;
    }
    .e-con.atsr-header:has(.elementor-menu-toggle[aria-expanded="true"]),
    .atsr-header.elementor-sticky--effects:has(.elementor-menu-toggle[aria-expanded="true"]),
    .atsr-header:has(.elementor-menu-toggle[aria-expanded="true"]) {
        background: #1E4B4B !important;
        z-index: 10001 !important;
    }
    .atsr-header:has(.elementor-menu-toggle[aria-expanded="true"]) .atsr-header-logo img {
        content: url('/wp-content/uploads/2026/03/ATSR-Logo-Final-H-Solid-W-scaled.png') !important;
        filter: none !important;
    }
    .atsr-header:has(.elementor-menu-toggle[aria-expanded="true"]) .atsr-header-get-in-touch-mobile {
        visibility: hidden !important;
    }
    /* HIDE the panel whenever the toggle is NOT expanded — a pre-existing rule
       forces it full-height; raising z-index for the iOS fix exposed the
       always-tall closed panel (menu showed even when closed). Collapse on
       closed state, keyed on the reliable aria-expanded attr. */
    .atsr-header:not(:has(.elementor-menu-toggle[aria-expanded="true"])) .elementor-nav-menu--dropdown.elementor-nav-menu__container {
        display: none !important;
    }
    .atsr-header .elementor-nav-menu--dropdown.elementor-nav-menu__container,
    .elementor-nav-menu--dropdown.elementor-nav-menu__container {
        z-index: 10000 !important;
        -webkit-transform: none !important;
        transform: none !important;
        -webkit-backdrop-filter: none !important;
        backdrop-filter: none !important;
    }
}

/* === DESKTOP: hide mobile button, show desktop === */
@media (min-width: 1025px) {
    .atsr-header-get-in-touch-mobile {
        display: none !important;
    }
    .atsr-header-get-in-touch {
        display: flex !important;
    }
}

/* ==========================================================================
   10b. STICKY HEADER SPACER — Hide duplicate mobile CTA button
   Elementor sticky header creates a .elementor-sticky__spacer clone.
   The clone duplicates the mobile "Get In Touch" button — hide it.
   ========================================================================== */
/* High specificity (0,0,3,0) to beat .elementor-location-header rules */
.elementor-location-header .elementor-sticky__spacer .atsr-header-get-in-touch-mobile,
.elementor-sticky__spacer.atsr-header .atsr-header-get-in-touch-mobile,
.elementor-sticky__spacer .atsr-header-get-in-touch-mobile {
    display: none !important;
    visibility: hidden !important;
    width: 0 !important;
    height: 0 !important;
    overflow: hidden !important;
    pointer-events: none !important;
}

/* Prevent any visible children inside the sticky spacer from showing through */
.elementor-sticky__spacer .atsr-header-get-in-touch-mobile * {
    display: none !important;
    visibility: hidden !important;
}

/* ==========================================================================
   10c. HOMEPAGE FAQ ACCORDION — Responsive Padding + Icon Layout
   The "Clearing the confusions" section has 310px left/right padding
   (Elementor inline style) designed for 1920px. On ≤1536px viewports
   this crushes the accordion into a narrow column.
   Class: atsr-homepage-faq (added in Elementor Advanced > CSS Classes)
   ========================================================================== */

/* Accordion title layout: text fills space, icon pushed to far right.
 * Elementor sets gap: 606px on the title row (designed for 1920px) which
 * crushes the title text on smaller viewports. Override to 16px. */
.atsr-homepage-faq .e-n-accordion-item-title {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    width: 100% !important;
    gap: 16px !important;
}
.atsr-homepage-faq .e-n-accordion-item-title-header {
    flex: 1 1 0 !important;
    min-width: 0 !important;
}
.atsr-homepage-faq .e-n-accordion-item-title-icon {
    flex-shrink: 0 !important;
    margin-left: auto !important;
}

/* Responsive padding overrides */
@media (max-width: 1536px) {
    .atsr-homepage-faq {
        padding-left: 120px !important;
        padding-right: 120px !important;
    }
}
@media (max-width: 1200px) {
    .atsr-homepage-faq {
        padding-left: 60px !important;
        padding-right: 60px !important;
    }
}
@media (max-width: 1024px) {
    .atsr-homepage-faq {
        padding-left: 16px !important;
        padding-right: 16px !important;
    }
}

/* ==========================================================================
   10d. FEATURED INDUSTRIES — Mobile Card Layout
   Desktop: 3 cards in a row, 433px image height, text below.
   Mobile: cards stack vertically, full-width, reduced image height.
   Classes: atsr-fea-industries (section), atsr-fea-industries-card (card)
   ========================================================================== */

/* Desktop: horizontal row layout for cards */
@media (min-width: 1025px) {
    .atsr-fea-industries .e-con-inner,
    .atsr-fea-industries > .e-con-inner {
        display: flex !important;
        flex-direction: row !important;
        flex-wrap: nowrap !important;
        gap: 20px !important;
    }
    .atsr-fea-industries-card {
        flex: 1 1 0 !important;
        min-width: 0 !important;
    }
    .atsr-fea-industries-card img {
        height: 433px !important;
        object-fit: cover !important;
    }
}

/* Card hover effects */
.atsr-fea-industries-card {
    transition: transform 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                box-shadow 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
    cursor: pointer !important;
    overflow: hidden !important;
    border-radius: 16px !important;
    /* Column flex so the explore link can pin to the card bottom.
     * Cards already stretch to equal height (flex:1 in the row), so
     * margin-top:auto on the button aligns all links on one baseline
     * regardless of how many lines each card's subtitle wraps to. */
    display: flex !important;
    flex-direction: column !important;
}
/* The text container (2nd child, below the image) must stretch to fill the
 * card's remaining height — without flex:1 it stays at natural content height
 * (~287px) so margin-top:auto has no free space to consume. It is already a
 * flex column, and the button is its last child. */
.atsr-fea-industries-card > .e-con {
    flex: 1 1 auto !important;
}
/* Push the "Explore qualifications" link to the bottom of every card */
.atsr-fea-industries-card .atsr-fea-industries-button {
    margin-top: auto !important;
}
.atsr-fea-industries-card:hover {
    transform: translateY(-8px) !important;
    box-shadow: 0 20px 40px rgba(0, 0, 0, 0.12), 0 8px 16px rgba(0, 0, 0, 0.08) !important;
}
/* Image zoom on card hover */
.atsr-fea-industries-card img {
    transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
}
.atsr-fea-industries-card:hover img {
    transform: scale(1.06) !important;
}

/* Featured Industries — Explore qualifications link (Icon List widget)
   Underline only under the TEXT, not the icon or full container width.
   Arrow icon slides right on hover. Title shifts to brand green. */

/* Kill ALL legacy/stray underlines on the widget + list items */
.atsr-fea-industries-button::after,
.atsr-fea-industries-button:hover::after,
.atsr-fea-industries-card:hover .atsr-fea-industries-button::after,
.atsr-fea-industries-button::before,
.atsr-fea-industries-button .elementor-icon-list-items::after,
.atsr-fea-industries-button .elementor-icon-list-item::after {
    display: none !important;
    content: none !important;
}
.atsr-fea-industries-button .elementor-icon-list-items,
.atsr-fea-industries-button .elementor-icon-list-item {
    border: none !important;
    text-decoration: none !important;
}

/* Default: icon LEFT "→ Explore qualifications" */
.atsr-fea-industries-button .elementor-icon-list-item {
    display: flex !important;
    align-items: center !important;
    gap: 8px !important;
}

/* Smooth position flip animation: icon slides past text, text shifts left */
.atsr-fea-industries-button .elementor-icon-list-icon {
    transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
    display: inline-flex !important;
    flex-shrink: 0 !important;
}
.atsr-fea-industries-button .elementor-icon-list-text {
    position: relative !important;
    text-decoration: none !important;
    transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
}

/* Heading text color — only on hovered card */
.atsr-fea-industries-card .elementor-heading-title {
    transition: color 0.3s ease !important;
}
.atsr-fea-industries-card:hover .elementor-heading-title {
    color: #23E6A5 !important;
}

/* Hover: icon flies RIGHT past text (+167px), text shifts LEFT (-33px)
   Result: "→ Explore qualifications" → "Explore qualifications →" */
.atsr-fea-industries-button:hover .elementor-icon-list-icon,
.atsr-fea-industries-card:hover .atsr-fea-industries-button .elementor-icon-list-icon {
    transform: translateX(167px) !important;
}
.atsr-fea-industries-button:hover .elementor-icon-list-text,
.atsr-fea-industries-card:hover .atsr-fea-industries-button .elementor-icon-list-text {
    transform: translateX(-33px) !important;
}

/* Text-only underline (delayed slightly so flip finishes first) */
.atsr-fea-industries-button .elementor-icon-list-text::after {
    content: '' !important;
    position: absolute !important;
    bottom: -2px !important;
    left: 0 !important;
    width: 0 !important;
    height: 2px !important;
    background: #23E6A5 !important;
    transition: width 0.3s ease 0.15s !important;
}
.atsr-fea-industries-button:hover .elementor-icon-list-text::after,
.atsr-fea-industries-card:hover .atsr-fea-industries-button .elementor-icon-list-text::after {
    width: 100% !important;
}


/* Smaller desktops (≤1536px): reduce image height so cards don't
   dominate the viewport. 433px is designed for 1920px screens. */
@media (max-width: 1536px) and (min-width: 1025px) {
    .atsr-fea-industries-card img {
        height: 280px !important;
        object-fit: cover !important;
    }
}

/* ==========================================================================
   10e. WHY CHOOSE US (WSYCU) — Column Gap Between Tick Lists
   On ≤1536px screens the two columns of wsycu-list items (each 360px fixed
   width, image + text editor) crowd together horizontally.
   Classes: wsycu (section wrapper), wsycu-list (each tick item)
   Fix: increase gap on the inner wsycu container (e95c0c1) that holds the
   2 column containers (9bb6fc0, f271427) in flex-direction: row.
   ========================================================================== */
@media (max-width: 1536px) and (min-width: 1025px) {
    /* Inner wsycu container (e95c0c1) holds 2 column containers side-by-side
       in flex-direction: row. Elementor sets gap: 16px — too tight on ≤1536px.
       Each column (9bb6fc0, f271427) holds 3 wsycu-list items (360px fixed). */
    .elementor-element-e95c0c1 {
        gap: 40px !important;
    }
    /* Each wsycu-list is 360px fixed but columns shrink to ~266px at 1400px.
       Override fixed width so white pill backgrounds don't overflow columns. */
    .wsycu .wsycu-list {
        max-width: 100% !important;
        width: 100% !important;
    }
}

/* ==========================================================================
   10f. ABOUT US — "Your Trustworthy Navigator" Responsive Containment
   Two rows of 3 feature cards overflow on ≤1536px viewports.
   Row 1 has class atsr-trust-nav; Row 2 is its next sibling (97fc8b3).
   Both are e-con-full at 1536px inside a 1385px parent.
   Fix: constrain both rows + their cards to the parent width.
   Class: atsr-trust-nav (row 1), sibling targets row 2.
   ========================================================================== */
@media (max-width: 1536px) and (min-width: 1025px) {
    /* Both card rows: constrain to parent width */
    .atsr-trust-nav,
    .atsr-trust-nav + .e-con {
        max-width: 100% !important;
        width: 100% !important;
        overflow: hidden !important;
        box-sizing: border-box !important;
        padding-left: 16px !important;
        padding-right: 16px !important;
    }
    /* Cards within both rows: shrink to fit */
    .atsr-trust-nav > .e-con,
    .atsr-trust-nav + .e-con > .e-con {
        flex: 1 1 0 !important;
        min-width: 0 !important;
        max-width: 100% !important;
    }
}

/* ==========================================================================
   10g. ABOUT US — "Here we are in 2026: Direct to You" Checker Card Spacing
   The 2×2 grid of checkmark cards (Better value, Faster communication,
   More personal experience, Flexible pathways) needs breathing room.
   Classes: atsr-about-dty (section), atsr-about-dty-list (each card)
   ========================================================================== */
@media (max-width: 1536px) and (min-width: 1025px) {
    /* Outer row (05343ab): balanced gap between text+checker and image.
       Left col (9cd7626) holds heading + text + checker grid.
       Right col (2c964bd) holds handshake image. */
    .elementor-element-05343ab {
        gap: 32px !important;
    }
    .elementor-element-9cd7626 {
        flex: 1 1 55% !important;
        min-width: 0 !important;
    }
    .elementor-element-2c964bd {
        flex: 0 1 42% !important;
        min-width: 0 !important;
        max-width: 42% !important;
        overflow: hidden !important;
    }
    .elementor-element-2c964bd img {
        max-width: 100% !important;
        width: 100% !important;
        height: auto !important;
        object-fit: cover !important;
    }
    /* Checker grid: 2 columns side by side.
       Structure: 754307d (flex row) → 2 column containers → 2 cards each. */
    .elementor-element-754307d,
    .atsr-about-dty {
        display: flex !important;
        flex-direction: row !important;
        flex-wrap: nowrap !important;
        gap: 12px !important;
    }
    /* Each column takes equal space, shrinks to fit */
    .elementor-element-754307d > .e-con {
        flex: 1 1 0 !important;
        min-width: 0 !important;
        max-width: none !important;
        width: auto !important;
    }
    /* Cards fill column, compact padding + icon so text stays one line */
    .atsr-about-dty .atsr-about-dty-list {
        width: 100% !important;
        min-width: unset !important;
        max-width: none !important;
        padding: 6px 6px 6px 6px !important;
        gap: 12px !important;
    }
    /* Checkmark icons are 32px images — keep at native size */
    .atsr-about-dty-list .elementor-icon-wrapper,
    .atsr-about-dty-list .elementor-image {
        width: 32px !important;
        min-width: 32px !important;
        flex-shrink: 0 !important;
    }
    .atsr-about-dty-list .elementor-icon-wrapper img,
    .atsr-about-dty-list .elementor-image img {
        width: 32px !important;
        height: 32px !important;
    }
    /* Text container takes remaining space */
    .atsr-about-dty-list > .e-con {
        flex: 1 1 0 !important;
        min-width: 0 !important;
    }
    /* Slightly smaller text to guarantee single-line fit */
    .atsr-about-dty-list .elementor-heading-title {
        font-size: 15px !important;
    }
    .atsr-about-dty-list .elementor-text-editor {
        font-size: 12px !important;
    }
}

/* Mobile: stacked cards, full width, smaller images */
@media (max-width: 1024px) {
    /* ── iOS reveal failsafe (2026-06-07): cards "missing" on iPhone ──
     * Cards + headings are hidden by INLINE gsap.set({opacity:0}) in
     * atsr-gsap-init.js and revealed by a ScrollTrigger (start "top 78%").
     * On iOS that start goes stale — the address-bar show/hide resizes the
     * viewport without firing a resize event — so the below-fold cards never
     * reveal and stay stuck at opacity:0 → blank gap where the cards should
     * be. The JS IntersectionObserver safety net is unreliable here AND the
     * script is usually frozen in WP Rocket's min cache (Bugs 8/9 trap), so a
     * JS fix can't be trusted. CSS ships fresh and `!important` overrides the
     * inline opacity:0 → force the whole section visible on mobile. The
     * staggered reveal stays a desktop-only nicety (≥1025px, untouched). */
    .atsr-fea-industries-card,
    .atsr-fea-industries .gsap-reveal,
    .atsr-fea-industries .gsap-stagger-item,
    .atsr-fea-industries .elementor-heading-title,
    .atsr-fea-industries .elementor-widget-text-editor {
        opacity: 1 !important;
        transform: none !important;
        visibility: visible !important;
        /* THE iOS FIX: bootReveals() sets will-change:transform,opacity then
         * opacity:0, and only clears will-change in the reveal's onComplete —
         * which never runs on iOS (stale ScrollTrigger start). iOS promotes the
         * element to a GPU layer at opacity 0 and the opacity:1 above CANNOT
         * repaint that stuck layer. Releasing will-change forces iOS to drop the
         * promoted layer and recomposite at the real opacity. (Android shows the
         * cards because its ScrollTrigger fires and recomposites via GSAP.) */
        will-change: auto !important;
        animation: none !important;
    }
    /* Section containment — prevent horizontal overflow */
    .atsr-fea-industries {
        max-width: 100% !important;
        overflow: hidden !important;
        padding-left: 16px !important;
        padding-right: 16px !important;
        box-sizing: border-box !important;
    }
    /* Force ALL child containers to respect parent width */
    .atsr-fea-industries > .e-con {
        max-width: 100% !important;
        width: 100% !important;
        box-sizing: border-box !important;
    }
    /* Card layout: stack image + text vertically.
     * iOS/WebKit FIX (2026-06-07, verified with Playwright WebKit / iPhone 13):
     * the previous `height: fit-content` is UNSUPPORTED for the `height`
     * property in WebKit → it computes to 0, and the card's `overflow:hidden`
     * then clips the whole 447px of content to nothing → the Featured
     * Industries cards were "missing" (blank gap) on Safari iOS while fine on
     * Chrome. (Compounding it: the 0-height card was never in the lazy-loader's
     * viewport, so the card images stayed as placeholder SVGs.) Use height:auto
     * + overflow:visible so the flex column sizes to content; round the image's
     * top corners on the image widget since the card no longer clips.
     * Confirmed under WebKit: card heights 467/421/488px, real images load. */
    .atsr-fea-industries-card {
        width: 100% !important;
        max-width: 100% !important;
        height: auto !important;
        min-height: auto !important;
        --min-height: 0px !important;
        flex-direction: column !important;
        border-radius: 16px !important;
        overflow: visible !important;
        box-sizing: border-box !important;
    }
    /* Card no longer clips (overflow:visible) → round the image's top corners
       on the image widget so the card keeps its rounded-top look. */
    .atsr-fea-industries-card .elementor-widget-image {
        overflow: hidden !important;
        border-radius: 16px 16px 0 0 !important;
    }
    /* Image widget: full width */
    .atsr-fea-industries-card > .elementor-element.elementor-widget {
        width: 100% !important;
        max-width: 100% !important;
    }
    .atsr-fea-industries-card img {
        width: 100% !important;
        height: 220px !important;
        object-fit: cover !important;
    }
    /* Text container below image */
    .atsr-fea-industries-card > .e-con {
        padding: 16px !important;
        width: 100% !important;
        max-width: 100% !important;
    }
    .atsr-fea-industries-card .elementor-heading-title {
        font-size: 18px !important;
        line-height: 1.3 !important;
    }
    .atsr-fea-industries-card .elementor-text-editor p {
        font-size: 14px !important;
        line-height: 1.4 !important;
    }
}

/* Footer — prevent any overflowing code blocks (e.g. .code-line) from
 * creating a page-level horizontal scrollbar. */
footer.elementor-location-footer {
    overflow-x: clip;
}

/* ==========================================================================
   11. ELEMENTOR-SPECIFIC STYLES → Use Elementor Custom Code
   Header, footer, mobile nav, sticky effects, page title hiding, etc. live in
   Elementor Pro → Custom Code (e.g. "ATSR - Sticky Header Scroll State").
   See ATSR_Elementor_Custom_Code.md for the complete CSS block to paste.
   ========================================================================== */

/* ==========================================================================
   11. M2 CORE PAGES — Hero & Section Utilities
   Apply to Elementor sections for Homepage, About, Industries, Contact, FAQ.
   GSAP classes: gsap-hero, gsap-hero-title, gsap-hero-subtitle, gsap-hero-cta,
   gsap-reveal, gsap-stagger-parent, gsap-stagger-item, gsap-counter, gsap-timeline-parent/step
   ========================================================================== */

.atsr-hero {
    min-height: 60vh;
    padding-top: var(--atsr-space-12);
    padding-bottom: var(--atsr-space-12);
}
.atsr-hero .gsap-hero-title,
.gsap-hero .gsap-hero-title {
    margin-bottom: var(--atsr-space-4);
}
/* Explicit line-height so SplitText mask wrappers match the heading's line-box
   EXACTLY. The Elementor per-widget CSS renders the hero <h1> at line-height:1.1em
   (post-87.css). This rule previously said 1.2, so the SplitText masks (which
   inherit line-height) sat at 1.2 while the real text was 1.1 → the heading box
   was taller during the animation and shrank on revert, resizing the hero
   section. Matching 1.1 here removes that jump. Scoped high enough to win, and
   the mask CSS injected by bootHero() uses line-height:inherit so it follows. */
.atsr-hero .gsap-hero-title,
.gsap-hero .gsap-hero-title,
.atsr-hero .elementor-heading-title,
.gsap-hero .elementor-heading-title,
.gsap-split-title,
.gsap-split-title .elementor-heading-title {
    line-height: 1.1;
}
.atsr-hero .gsap-hero-subtitle {
    margin-bottom: var(--atsr-space-8);
}

/* ── Sticky-header repaint guard for gradient hero titles ──
   ROOT CAUSE of "gsap-hero-title disappears then reappears": the sticky header
   uses backdrop-filter (saturate+blur, in the Elementor Custom Code / sticky
   header CSS). Chrome has a known compositing bug where elements using
   -webkit-background-clip:text + transparent fill (the gradient hero words
   .atsr-hero-subtitle / .atsr-hero-subtitle-nav) FAIL to repaint when a
   backdrop-filter layer over them activates or changes — e.g. when the sticky
   header toggles .elementor-sticky--effects on scroll, or Elementor inserts the
   sticky spacer/clone after load. The gradient text is painted but not
   re-composited, so it vanishes until a forced repaint (scroll/zoom or our
   revealStuck timer) — exactly the reported symptom, and why plain-opacity
   .gsap-reveal is unaffected.

   Fix: give the hero title + its gradient spans their OWN stable compositing
   layer (translateZ(0) + backface-visibility:hidden). An independent layer is
   composited on its own and is not invalidated by the header's backdrop-filter,
   so the gradient text stays painted. Negligible cost; the layer is tiny. */
.atsr-hero .gsap-hero-title,
.gsap-hero .gsap-hero-title,
.atsr-hero .gsap-split-title,
.gsap-hero .gsap-split-title,
.atsr-hero .atsr-hero-subtitle,
.gsap-hero .atsr-hero-subtitle,
.atsr-hero .atsr-hero-subtitle-nav,
.gsap-hero .atsr-hero-subtitle-nav {
    transform: translateZ(0);
    -webkit-transform: translateZ(0);
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
}

/* SplitText line wrappers — neutralize <p> margins during animation.
   bootHero() in atsr-gsap-init.js calls SplitText.create(subtitleEl, { type: "lines" })
   which wraps each visual line in <div aria-hidden="true"><p>...</p></div>.
   Without this rule, every line inherits the 20px <p> margin → giant gaps
   between lines during animation, snapping back to normal after revert(). */
.atsr-hero div[aria-hidden="true"] > p,
.gsap-hero div[aria-hidden="true"] > p,
.elementor-widget-text-editor div[aria-hidden="true"] > p {
    margin: 0 !important;
    line-height: inherit;
}

/* ── FOUC Prevention ──
   Pre-hide hero-animated elements until GSAP reveals them. GATED behind
   html.atsr-js (added synchronously in functions.php before paint) so the
   hide only applies when JS is actually running — matching the functions.php
   FOUC system, which is now the single source of truth. If JS/GSAP fails,
   functions.php removes .atsr-js and everything below becomes visible. This
   replaces the old ungated `visibility:hidden` that could strand the hero. */
html.atsr-js .atsr-hero .gsap-hero-title,
html.atsr-js .gsap-hero .gsap-hero-title,
html.atsr-js .atsr-hero .gsap-hero-subtitle,
html.atsr-js .gsap-hero .gsap-hero-subtitle,
html.atsr-js .atsr-hero .gsap-hero-cta,
html.atsr-js .gsap-hero .gsap-hero-cta,
html.atsr-js .atsr-hero .atsr-hero-buttons,
html.atsr-js .gsap-hero .atsr-hero-buttons,
html.atsr-js .atsr-hero .atsr-hero-search-wrap,
html.atsr-js .gsap-hero .atsr-hero-search-wrap,
html.atsr-js .gsap-split-title {
    visibility: hidden;
}
/* Legacy compatibility: if the old .atsr-hero-ready timer ever fires, force
   visible regardless. (Primary reveal is GSAP's inline visibility, and the
   gate above auto-reveals when .atsr-js is absent.) */
html.atsr-hero-ready .atsr-hero .gsap-hero-title,
html.atsr-hero-ready .gsap-hero .gsap-hero-title,
html.atsr-hero-ready .atsr-hero .gsap-hero-subtitle,
html.atsr-hero-ready .gsap-hero .gsap-hero-subtitle,
html.atsr-hero-ready .atsr-hero .gsap-hero-cta,
html.atsr-hero-ready .gsap-hero .gsap-hero-cta,
html.atsr-hero-ready .atsr-hero .atsr-hero-buttons,
html.atsr-hero-ready .gsap-hero .atsr-hero-buttons,
html.atsr-hero-ready .atsr-hero .atsr-hero-search-wrap,
html.atsr-hero-ready .gsap-hero .atsr-hero-search-wrap,
html.atsr-hero-ready .gsap-split-title {
    visibility: visible !important;
}

/* Stat counter block — use data-count-to, data-count-prefix, data-count-suffix */
.gsap-counter {
    font-weight: 700;
    font-size: 2.5rem;
    line-height: 1.2;
    color: var(--atsr-primary-foreground);
}

/* Process timeline — vertical step layout */
.gsap-timeline-parent {
    display: flex;
    flex-direction: column;
    gap: var(--atsr-space-8);
}

/* ==========================================================================
   12. QUALIFICATION GRID (M2/M3 archive layout)
   ========================================================================== */

.qualification-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
    gap: var(--atsr-space-6);
}

/* ==========================================================================
   12B. QUALIFICATION CARD — Used by AJAX filter + shortcode
   Matches Figma: 2-col grid, 3 image badges, role chips, outline CTA
   ========================================================================== */

/* Grid: 2-column, 24px gap (Figma) */
/* ==========================================================================
   QUALIFICATION GRID — Figma 4-column compact card layout
   ========================================================================== */
   .qualification-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
    gap: var(--atsr-space-6);
}

/* ==========================================================================
   12B. QUALIFICATION CARD — Used by AJAX filter + shortcode
   Matches Figma: 2-col grid, 3 image badges, role chips, outline CTA
   ========================================================================== */

/* Grid: 2-column, 24px gap (Figma) */
/* ==========================================================================
   QUALIFICATION GRID — Figma 4-column compact card layout
   ========================================================================== */
.atsr-qual-grid {
    display: grid !important;
    grid-template-columns: repeat(4, 1fr);
    gap: 20px;
    width: 100% !important;
    align-items: stretch;
    /* Safari fix (Jun 5 2026): Safari does not resolve implicit grid-track
       heights for flex-container grid items. Using 1fr forces a definite
       row height so margin-top:auto inside the card has space to push
       the CTA button to the bottom. */
    grid-auto-rows: 1fr;
}
/* Ensure shortcode/HTML widget stretches full width in Elementor flex containers.
   Elementor widgets default to width:auto inside flex parents — must override.
   Also target .elementor-widget-container (the inner wrapper Elementor adds). */
.elementor-widget-shortcode:has(.atsr-qual-grid),
.elementor-widget-html:has(.atsr-qual-grid) {
    width: 100% !important;
    max-width: 100% !important;
    flex-shrink: 0 !important;
    align-self: stretch !important;
}
.elementor-widget-shortcode:has(.atsr-qual-grid) > .elementor-widget-container,
.elementor-widget-html:has(.atsr-qual-grid) > .elementor-widget-container {
    width: 100% !important;
}

/* Card — compact white card with subtle border + shadow (Figma) */
.atsr-qual-card {
    will-change: transform, opacity !important;
    background: #FFFFFF;
    border: 1px solid rgba(26, 77, 77, 0.08);
    border-radius: 16px;
    padding: 24px;
    display: flex !important;
    flex-direction: column !important;
    gap: 12px !important;
    align-self: stretch !important;
    /* Safari fix (Jun 5 2026): height:100% alone is not enough for Safari.
       Combined with grid-auto-rows:1fr on the parent grid, this ensures
       the card stretches to the full grid-row height so margin-top:auto
       on the CTA pushes the button to the bottom consistently. */
    height: 100% !important;
    /* Safari WebKit fallback: box-sizing + min-height prevent collapse */
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    min-height: 0;
    text-decoration: none !important;
    color: inherit;
    transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
    box-shadow: 0 2px 12px rgba(12, 14, 58, 0.04);
}
.atsr-qual-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 12px 32px rgba(12, 14, 58, 0.08);
    border-color: #23E6A5;
    color: inherit;
    text-decoration: none;
}

/* Code badge — green text, no background */
.atsr-qual-card-code {
    font-family: 'Host Grotesk', sans-serif;
    font-size: 13px;
    font-weight: 600;
    color: #23E6A5;
    letter-spacing: 0.02em;
}

/* Card title */
.atsr-qual-card-title {
    font-family: 'Host Grotesk', sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 1.35;
    color: #1A4D4D;
    margin: 0;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* Meta row: industry + duration side by side */
.atsr-qual-card-meta {
    display: flex;
    align-items: center;
    gap: 0;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 13px;
    color: #1A4D4D;
    opacity: 0.55;
    line-height: 1.4;
    flex-wrap: wrap;
    padding-top: 8px !important;
    margin-bottom: 0 !important;
}
.atsr-qual-card-industry,
.atsr-qual-card-duration {
    white-space: nowrap;
}
/* Dot separator between industry and duration */
.atsr-qual-card-sep {
    display: inline-block;
    width: 4px;
    height: 4px;
    border-radius: 50%;
    background: #1A4D4D;
    opacity: 0.35;
    margin: 0 8px;
    flex-shrink: 0;
}

/* CTA button — gradient green pill (Figma) */
.atsr-qual-card-cta {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    width: 100%;
    height: 44px;
    border-radius: 9999px;
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 50%, #23E6A5 100%);
    background-size: 200% 100%;
    background-position: 0% 0%;
    color: #1E4B4B;
    font-family: 'Host Grotesk', sans-serif;
    font-weight: 600;
    font-size: 14px;
    text-decoration: none;
    transition: background-position 0.5s ease, box-shadow 0.4s ease, transform 0.3s ease;
    margin-top: auto !important;
    cursor: pointer;
    position: relative;
    overflow: hidden;
}
.atsr-qual-card-cta svg {
    transition: transform 0.35s cubic-bezier(0.22, 0.61, 0.36, 1);
}
/* Shimmer sweep */
.atsr-qual-card-cta::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 60%;
    height: 100%;
    background: linear-gradient(105deg, transparent 20%, rgba(255,255,255,0.35) 45%, rgba(255,255,255,0.5) 50%, rgba(255,255,255,0.35) 55%, transparent 80%);
    pointer-events: none;
    z-index: 1;
}
.atsr-qual-card:hover .atsr-qual-card-cta {
    background-position: 100% 0% !important;
    box-shadow: 0 6px 20px rgba(35, 230, 165, 0.3) !important;
}
.atsr-qual-card:hover .atsr-qual-card-cta::after {
    animation: atsr-shimmer 0.8s ease forwards;
}
.atsr-qual-card:hover .atsr-qual-card-cta svg {
    transform: translateX(4px);
}
.atsr-qual-card:active .atsr-qual-card-cta {
    transform: scale(0.96);
    transition-duration: 0.1s;
}

/* ===== Grid layout modifiers ===== */
/* Compact = 4 columns (homepage) */
.atsr-qual-grid--compact {
    grid-template-columns: repeat(4, 1fr);
    grid-auto-rows: 1fr; /* Safari CTA alignment fix */
    gap: 20px;
}
/* Rich = 2 columns (qualifications page — Figma) */
.atsr-qual-grid--rich {
    grid-template-columns: repeat(2, 1fr);
    grid-auto-rows: 1fr; /* Safari CTA alignment fix */
    gap: 24px;
}

/* Shortcode variant: 3-column on industry template */
.atsr-qual-grid--shortcode {
    grid-template-columns: repeat(3, 1fr);
    grid-auto-rows: 1fr; /* Safari CTA alignment fix */
    gap: 24px;
}

/* ==========================================================================
   12B-ii. INDUSTRY TEMPLATE CARD — Figma node 7619:45146
   Image (280px) + code badge + gradient overlay | content (title+role+CTA)
   Used by [atsr_industry_qualifications] shortcode on Industry single pages
   ========================================================================== */

/* Card wrapper — white, 32px radius, subtle shadow */
.atsr-industry-card {
    background: #FFFFFF;
    border: 1px solid #F3F4F6;
    border-radius: 32px;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    text-decoration: none;
    color: inherit;
    transition: transform 0.35s cubic-bezier(0.22, 0.61, 0.36, 1),
                box-shadow 0.35s ease,
                border-color 0.35s ease;
    box-shadow: 0 20px 40px rgba(12, 14, 58, 0.04);
    padding: 1px;
    /* Safari fix (Jun 5 2026): definite height so margin-top:auto on CTA works. */
    height: 100%;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    min-height: 0;
}
.atsr-industry-card:hover {
    transform: translateY(-6px);
    box-shadow: 0 24px 48px rgba(12, 14, 58, 0.10),
               0 0 0 1px rgba(35, 230, 165, 0.15);
    border-color: rgba(35, 230, 165, 0.3);
    color: inherit;
    text-decoration: none;
}

/* --- Image section (top) --- */
.atsr-industry-card-img {
    position: relative;
    height: 280px;
    overflow: hidden;
    border-radius: 31px 31px 0 0;
}
.atsr-industry-card-img img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    pointer-events: none;
    /* Subtle zoom on card hover — GPU-composited */
    transition: transform 0.5s cubic-bezier(0.22, 0.61, 0.36, 1);
}
/* Image zoom on card hover — 5% scale, smooth ease-out */
.atsr-industry-card:hover .atsr-industry-card-img img {
    transform: scale(1.05);
}
.atsr-industry-card-img-placeholder {
    position: absolute;
    inset: 0;
    background: linear-gradient(135deg, #1A4D4D 0%, #0D2F2F 100%);
}
/* Gradient overlay — dark at bottom for contrast */
.atsr-industry-card-img-overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(to top, rgba(0,0,0,0.6) 0%, rgba(0,0,0,0.2) 50%, rgba(0,0,0,0) 100%);
    pointer-events: none;
}
/* Code badge — top-left pill (Figma 7619:45152) */
.atsr-industry-card-badge {
    position: absolute;
    top: 24px;
    left: 24px;
    background: rgba(255, 255, 255, 0.95);
    border-radius: 100px;
    padding: 8px 16px;
    font-family: 'Helvetica', 'Arial', sans-serif;
    font-size: 14px;
    line-height: 1.6;
    color: #1A4D4D;
    z-index: 2;
}

/* --- Content section (bottom) — gradient bg --- */
.atsr-industry-card-body {
    background: linear-gradient(157deg, #FFFFFF 0%, #F9FAFB 100%);
    padding: 32px;
    display: flex;
    flex-direction: column;
    gap: 24px;
    flex: 1;
}
.atsr-industry-card-text {
    display: flex;
    flex-direction: column;
    gap: 16px;
}
.atsr-industry-card-title {
    font-family: 'Host Grotesk', sans-serif;
    font-weight: 700;
    font-size: 24px;
    line-height: 1.3;
    color: #1A4D4D;
    margin: 0;
}
.atsr-industry-card-role {
    font-family: 'Host Grotesk', sans-serif;
    font-weight: 400;
    font-size: 16px;
    line-height: 1.4;
    color: #1A4D4D;
    margin: 0;
}

/* CTA — outline green pill, full width (Figma 7619:45161) */
.atsr-industry-card-cta {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 100%;
    height: 48px;
    border-radius: 9999px;
    border: 1px solid #27EAA6;
    background: transparent;
    color: #27EAA6;
    font-family: 'Albert Sans', sans-serif;
    font-weight: 600;
    font-size: 16px;
    line-height: 20px;
    text-decoration: none;
    transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease;
    cursor: pointer;
    margin-top: auto;
}
.atsr-industry-card-cta svg {
    width: 20px;
    height: 20px;
    flex-shrink: 0;
}
.atsr-industry-card:hover .atsr-industry-card-cta {
    background: #27EAA6;
    color: #1A4D4D;
    border-color: #27EAA6;
}
.atsr-industry-card:hover .atsr-industry-card-cta svg path {
    fill: #1A4D4D;
}

/* ==========================================================================
   12B-iii. INDUSTRIES LISTING PAGE — Card Overrides
   -------------------------------------------------------------------------
   The .atsr-industry-grid container is an Elementor FLEXBOX container.
   Elementor applies display:flex!important via the .e-con class.
   DO NOT override display — let Elementor's flex handle the column layout.
   We only add: heading/title fixes, hover effects, button styles, and
   responsive overrides for the child container widths.
   ========================================================================== */

/* --- A. Elementor Container Children — Width & Hover ---
   Each card is an Elementor child container (.e-con) inside .e-con-inner.
   Elementor sets child widths via --width CSS custom property.
   We use flex-basis to ensure 3 columns with 32px gap. */
.atsr-industry-grid > .e-con-inner {
    flex-wrap: wrap !important;
    gap: 32px !important;
    width: 100% !important;
    /* Bug (2026-06-06): equal-height cards per row → CTA buttons bottom-align.
       Each card is a flex column with justify-content:space-between, so once
       every card in a row is the same height the buttons all land at the
       bottom edge. Stretch the flex line. */
    align-items: stretch !important;
}
/* Each child = 1/3 minus gap. 22px = (32px * 2 gaps) / 3 cards */
.atsr-industry-grid > .e-con-inner > .e-con {
    width: calc(33.333% - 22px) !important;
    max-width: calc(33.333% - 22px) !important;
    flex-shrink: 0 !important;
    /* Cards sat at their own content height (511/478/491px) so buttons were
       staggered. Force auto height + stretch so the row equalises them and
       the space-between layout drops every CTA to the same bottom line. */
    height: auto !important;
    align-self: stretch !important;
    /* Same hover transition as atsr-fea-industries-card */
    transition: transform 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                box-shadow 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
    cursor: pointer !important;
    /* Force overflow visible to prevent Elementor from clipping the 
       absolutely-positioned heading that extends past the image boundary. */
    overflow: visible !important;
}
/* Card hover — same lift + shadow as atsr-fea-industries-card */
.atsr-industry-grid > .e-con-inner > .e-con:hover {
    transform: translateY(-8px) !important;
    box-shadow: 0 20px 40px rgba(0, 0, 0, 0.12),
               0 8px 16px rgba(0, 0, 0, 0.08) !important;
}
/* overflow:hidden on image widget ONLY — contains scale(1.06) zoom
   without clipping the sibling heading widget */
.atsr-industry-grid .elementor-widget-image {
    overflow: hidden !important;
    border-radius: 16px 16px 0 0 !important;
}
/* Image zoom on card hover — scale(1.06) matching featured cards */
.atsr-industry-grid .elementor-widget-image img {
    transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
}
.atsr-industry-grid .e-con:hover img {
    transform: scale(1.06) !important;
}

/* --- B. Heading / Title on Image ---
   Elementor handles positioning: position:absolute, top:222px, z-index:2,
   padding: 0 0 24 24. DO NOT override position/offset here.
   We only set font styles per Figma specs. */
.atsr-industry-grid .elementor-heading-title {
    color: #FFFFFF !important;
    font-family: 'Host Grotesk', sans-serif !important;
    font-size: 28px !important;
    font-weight: 700 !important;
    line-height: 33.6px !important; /* 120% */
    font-style: normal !important;
}

/* --- C. Icon badge (JS-rendered cards fallback) ---
   Without position:absolute it sat in normal flow and pushed title down. */
.atsr-industry-grid .atsr-industry-icon-badge {
    position: absolute;
    top: 20px;
    left: 20px;
    z-index: 3;
}

/* --- D. Title overlay for JS-rendered cards (.atsr-industry-card) ---
   Anchored to bottom of image so it NEVER clips.
   These selectors only match when the JS filter has replaced the
   Elementor content with .atsr-industry-card markup. */
.atsr-industry-grid .atsr-industry-card-img > .atsr-industry-card-title {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    padding: 20px 24px;
    color: #FFFFFF;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 28px;
    font-weight: 700;
    line-height: 33.6px; /* 120% — Figma spec */
    z-index: 2;
    margin: 0;
}

/* Gradient scrim over image — dark-to-transparent so white title is readable.
   Only applied on listing page; single-page cards (12B-ii) already have a
   dedicated .atsr-industry-card-img-overlay div for this. */
.atsr-industry-grid .atsr-industry-card-img::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height: 60%;
    background: linear-gradient(to top, rgba(0,0,0,0.55) 0%, rgba(0,0,0,0.15) 60%, transparent 100%);
    pointer-events: none;
    z-index: 1;
    border-radius: inherit;
}

/* --- E. Content area below image --- */
.atsr-industry-card-content {
    padding: 24px;
    display: flex;
    flex-direction: column;
    gap: 20px;
    flex: 1;
}
.atsr-industry-card-content p {
    font-family: 'Host Grotesk', sans-serif;
    font-size: 16px;
    line-height: 1.5;
    color: #4B5563;
    margin: 0;
}

/* --- F. CTA button — outline green pill with scaleX sweep ---
   Uses min-height so it grows if text wraps.
   font-size: 14px prevents "Explore Community Services Pathways" wrapping. */
.atsr-btn-outline-green {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 100%;
    min-height: 48px;
    padding: 12px 24px;
    border-radius: 9999px;
    border: 1px solid #27EAA6;
    background: transparent;
    color: #27EAA6;
    font-family: 'Host Grotesk', sans-serif;
    font-weight: 600;
    font-size: 14px;
    line-height: 1.3;
    text-decoration: none;
    text-align: center;
    /* Transition for text/border color; ::before handles the fill sweep */
    transition: color 0.35s ease 0.05s, border-color 0.35s ease,
                box-shadow 0.4s ease;
    cursor: pointer;
    margin-top: auto;
    box-sizing: border-box;
    position: relative;
    overflow: hidden;
    z-index: 1;
}
/* Fill sweep — scaleX approach to avoid corner glitch on pill shapes.
   Same fix applied to atsr-header-phone in sticky_header.css */
.atsr-btn-outline-green::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: linear-gradient(90deg, #23E6A5 0%, #1DD699 100%);
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform 0.4s cubic-bezier(0.22, 0.61, 0.36, 1);
    z-index: -1;
    border-radius: inherit;
}
.atsr-btn-outline-green:hover {
    color: #1A4D4D;
    border-color: #23E6A5;
    box-shadow: 0 6px 20px rgba(35, 230, 165, 0.2);
    text-decoration: none;
}
.atsr-btn-outline-green:hover::before {
    transform: scaleX(1);
}
/* Arrow nudge on hover */
.atsr-btn-outline-green span {
    display: inline-flex;
    transition: transform 0.25s ease;
    position: relative;
    z-index: 2;
}
.atsr-btn-outline-green:hover span {
    transform: translateX(4px);
}

/* --- G. Responsive: tablet (2 columns) --- */
@media (max-width: 1024px) {
    .atsr-industry-grid > .e-con-inner {
        gap: 24px !important;
    }
    /* 2 columns: each = 50% minus half the gap */
    .atsr-industry-grid > .e-con-inner > .e-con {
        width: calc(50% - 12px) !important;
        max-width: calc(50% - 12px) !important;
    }
    .atsr-industry-grid .elementor-heading-title {
        font-size: 24px !important;
        line-height: 28.8px !important; /* 120% */
    }
}

/* --- H. Responsive: mobile (1 column) --- */
@media (max-width: 1024px) {
    .atsr-industry-grid > .e-con-inner {
        gap: 20px !important;
    }
    /* Full width — 1 column */
    .atsr-industry-grid > .e-con-inner > .e-con {
        width: 100% !important;
        max-width: 100% !important;
    }
    .atsr-industry-grid .elementor-heading-title {
        font-size: 22px !important;
        line-height: 26.4px !important; /* 120% */
    }
    .atsr-btn-outline-green {
        min-height: 44px;
        padding: 10px 20px;
    }
}

/* ==========================================================================
   12C. RICH QUALIFICATION CARD — /qualifications page (Figma design)
   Image + badges + title + duration + roles + outline CTA
   ========================================================================== */

.atsr-qual-card-rich {
    background: #FFFFFF;
    border: 1px solid #F3F4F6;
    border-radius: 32px;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    text-decoration: none;
    color: inherit;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
    box-shadow: 0 20px 40px rgba(12, 14, 58, 0.04);
    padding: 1px;
    /* Safari fix (Jun 5 2026): grid items must have a definite height
       for flex children (body flex:1, cta margin-top:auto) to stretch. */
    height: 100%;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    min-height: 0;
}
.atsr-qual-card-rich:hover {
    transform: translateY(-4px);
    box-shadow: 0 24px 48px rgba(12, 14, 58, 0.08);
    color: inherit;
    text-decoration: none;
}

/* --- Image section --- */
.atsr-qual-card-rich-img {
    position: relative;
    height: 280px;
    overflow: hidden;
    border-radius: 31px 31px 0 0;
}
.atsr-qual-card-rich-img img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    pointer-events: none;
}
.atsr-qual-card-rich-img-placeholder {
    position: absolute;
    inset: 0;
    background: linear-gradient(135deg, #1A4D4D 0%, #0D2F2F 100%);
}

/* Dark gradient overlay on image */
.atsr-qual-card-rich-overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(to top, rgba(0,0,0,0.6) 0%, rgba(0,0,0,0.2) 50%, rgba(0,0,0,0) 100%);
    pointer-events: none;
}

/* Top badges row (code + AQF level) */
.atsr-qual-card-rich-badges {
    position: absolute;
    top: 16px;
    left: 16px;
    display: flex;
    gap: 8px;
    z-index: 2;
}
.atsr-qual-badge {
    display: inline-flex;
    align-items: center;
    height: 38px;
    padding: 0 16px;
    border-radius: 100px;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 14px;
    font-weight: 400;
    line-height: 1.4;
    color: #1A4D4D;
    white-space: nowrap;
}
.atsr-qual-badge--code {
    background: rgba(255, 255, 255, 0.95);
}
.atsr-qual-badge--aqf {
    background: linear-gradient(180deg, #23E6A5 0%, #CDFF6E 100%);
}
/* Industry badge — bottom-left of image */
.atsr-qual-badge--industry {
    position: absolute;
    bottom: 16px;
    left: 16px;
    background: rgba(26, 77, 77, 0.8);
    color: #FFFFFF;
    z-index: 2;
}

/* --- Content body --- */
.atsr-qual-card-rich-body {
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding: 32px;
    padding-bottom: 0;
    flex: 1;
    background: linear-gradient(147.5deg, #FFFFFF 0%, #F9FAFB 100%);
}

/* Title */
.atsr-qual-card-rich-title {
    font-family: 'Host Grotesk', sans-serif;
    font-weight: 700;
    font-size: 24px;
    line-height: 1.3;
    color: #1A4D4D;
    margin: 0;
}

/* Duration row with clock icon */
.atsr-qual-card-rich-duration {
    display: flex;
    align-items: center;
    gap: 8px;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 14px;
    line-height: 1.4;
    color: #1A4D4D;
    opacity: 0.7;
}
.atsr-qual-card-rich-duration svg {
    flex-shrink: 0;
}

/* Typical Roles section — label + chips flow inline, wrapping as needed */
.atsr-qual-card-rich-roles {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
}
.atsr-qual-card-rich-roles-label {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 14px;
    line-height: 1.4;
    color: #1A4D4D;
}
.atsr-qual-card-rich-roles-label svg {
    flex-shrink: 0;
}
/* Chips become direct flex items of the row so they start right after the
   "Typical Roles:" label instead of dropping to a new line. */
.atsr-qual-card-rich-role-chips {
    display: contents;
}
.atsr-qual-role-chip {
    display: inline-flex;
    align-items: center;
    height: 31px;
    padding: 0 12px;
    border-radius: 100px;
    background: #EBFFF6;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 13px;
    line-height: 1.5;
    color: #1A4D4D;
    white-space: nowrap;
}

/* Description (overview) — full text, no clamp */
.atsr-qual-card-rich-desc {
    font-family: 'Host Grotesk', sans-serif;
    font-size: 14px;
    line-height: 1.55;
    color: rgba(26, 77, 77, 0.75);
    margin: 0;
}

/* Key Metrics row (units of competency) */
.atsr-qual-card-rich-metric {
    display: flex;
    align-items: center;
    gap: 8px;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 14px;
    line-height: 1.4;
    font-weight: 600;
    color: #1A4D4D;
}
.atsr-qual-card-rich-metric svg {
    flex-shrink: 0;
}

/* CTA — stacked buttons: primary "Check my Eligibility" + outline "View Details" */
.atsr-qual-card-rich-cta {
    display: flex;
    flex-direction: column;
    gap: 12px;
    width: calc(100% - 64px);
    /* Safari fix (Jun 5 2026): margin-top:auto pushes CTA to card bottom
       when card has height:100% and grid-auto-rows:1fr on the parent. */
    margin: auto 32px 32px;
}
.atsr-qual-card-rich-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    /* Full-width pill inside the CTA container */
    width: 100%;
    height: 48px;
    border-radius: 9999px;
    font-family: 'Albert Sans', sans-serif;
    font-weight: 600;
    font-size: 16px;
    text-decoration: none;
    cursor: pointer;
    transition: background 0.25s, color 0.25s, transform 0.25s, box-shadow 0.25s, border-color 0.25s;
}
/* Gradient (Check my Eligibility) — mirrors .atsr-btn-gradient on a plain span */
.atsr-qual-card-rich-btn.atsr-btn-gradient {
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 50%, #23E6A5 100%);
    background-size: 200% 100%;
    background-position: 0% 0%;
    color: #1E4B4B;
    border: 1px solid transparent;
    transition: background-position 0.5s ease, box-shadow 0.4s ease, transform 0.3s ease;
}
.atsr-qual-card-rich-btn.atsr-btn-gradient:hover {
    background-position: 100% 0%;
    box-shadow: 0 8px 25px rgba(35, 230, 165, 0.35);
    transform: translateY(-2px);
}
/* Outline-dark (View Details) — mirrors .atsr-btn-outline-dark on a plain span */
.atsr-qual-card-rich-btn.atsr-btn-outline-dark {
    background: transparent;
    border: 1px solid #1A4D4D;
    color: #1A4D4D;
    transition: background 0.4s cubic-bezier(0.22, 0.61, 0.36, 1), color 0.35s ease, transform 0.3s ease, box-shadow 0.4s ease;
}
.atsr-qual-card-rich-btn.atsr-btn-outline-dark svg {
    stroke: currentColor;
}
.atsr-qual-card-rich-btn.atsr-btn-outline-dark:hover {
    background: #1A4D4D;
    color: #CDFF6E;
    transform: translateY(-2px);
    box-shadow: 0 8px 25px rgba(26, 77, 77, 0.25);
}
/* Bulletproof fills (Jun 10 2026): these two buttons are injected by JS (AJAX)
   and the fills above ride on the SHARED .atsr-btn-gradient / .atsr-btn-outline-dark
   tokens. On the live qualifications page the gradient fill vanished on mobile —
   the per-page "used CSS" optimiser drops the compound .atsr-qual-card-rich-btn
   .atsr-btn-gradient rule (that class combo isn't in the static HTML it scans),
   leaving the eligibility button as bare dark text on white. Re-assert each fill
   on the button's OWN unique modifier class — always injected with the button,
   so it survives the same purge that keeps the base layout — with !important so
   nothing downstream can strip it. */
.atsr-qual-card-rich-btn--eligibility {
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 50%, #23E6A5 100%) !important;
    background-size: 200% 100%;
    color: #1E4B4B !important;
    border: 1px solid transparent !important;
}
.atsr-qual-card-rich-btn--details {
    background: transparent !important;
    border: 1px solid #1A4D4D !important;
    color: #1A4D4D !important;
}

/* Responsive: tablet — 2 columns for compact, 1 column for rich */
@media (max-width: 1024px) {
    .atsr-qual-grid,
    .atsr-qual-grid--compact {
        grid-template-columns: repeat(2, 1fr);
        gap: 16px;
    }
    .atsr-qual-grid--rich {
        grid-template-columns: repeat(2, 1fr);
        gap: 20px;
    }
    .atsr-qual-grid--shortcode {
        grid-template-columns: repeat(2, 1fr);
    }
    /* Industry card — tablet */
    .atsr-industry-card-img {
        height: 220px;
    }
    .atsr-industry-card-body {
        padding: 24px;
    }
    .atsr-industry-card-title {
        font-size: 20px;
    }
    .atsr-industry-card-cta {
        height: 44px;
        font-size: 15px;
    }
    .atsr-qual-card-rich-img {
        height: 220px;
    }
    .atsr-qual-card-rich-title {
        font-size: 20px;
    }
    .atsr-qual-card-rich-body {
        padding: 24px;
        padding-bottom: 0;
    }
    .atsr-qual-card-rich-cta {
        width: calc(100% - 48px);
        margin: 20px 24px 24px;
    }
}
/* Responsive: mobile 1-col */
/* ==========================================================================
   12E. MOBILE FILTER TOGGLE BUTTON — hidden on desktop, shown on mobile
   ========================================================================== */
.atsr-filter-toggle {
    display: none; /* hidden on desktop */
}

/* Count + Filter row wrapper — class added to Elementor widget by JS on mobile */
.atsr-qual-count-row {
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    justify-content: space-between !important;
    width: 100% !important;
    gap: 12px;
}

/* ==========================================================================
   12F. MOBILE FILTER DRAWER OVERLAY
   ========================================================================== */
.atsr-filter-drawer-overlay,
.atsr-filter-drawer {
    display: none; /* hidden on desktop */
}

/* Prevent horizontal overflow from wide inner elements (marquee, pre blocks) */
.e-con.e-parent {
    overflow-x: clip;
}
pre {
    max-width: 100%;
    overflow-x: auto;
    word-wrap: break-word;
}

/* ==========================================================================
   12G. QUALIFICATIONS PAGE MOBILE RESPONSIVE
   ========================================================================== */
@media (max-width: 1024px) {
    /* Compact cards — 2 columns on mobile */
    .atsr-qual-grid,
    .atsr-qual-grid--compact {
        grid-template-columns: repeat(2, 1fr);
        gap: 12px;
    }
    /* Rich cards — 1 column on mobile */
    .atsr-qual-grid--rich {
        grid-template-columns: 1fr;
        gap: 16px;
    }
    .atsr-qual-grid--shortcode {
        grid-template-columns: 1fr;
    }
    /* Industry card — mobile */
    .atsr-industry-card {
        border-radius: 20px;
    }
    .atsr-industry-card-img {
        height: 200px;
        border-radius: 19px 19px 0 0;
    }
    .atsr-industry-card-body {
        padding: 20px;
        gap: 16px;
    }
    .atsr-industry-card-title {
        font-size: 18px;
    }
    .atsr-industry-card-role {
        font-size: 14px;
    }
    .atsr-industry-card-badge {
        top: 16px;
        left: 16px;
        font-size: 12px;
        padding: 6px 12px;
    }
    .atsr-industry-card-cta {
        height: 42px;
        font-size: 14px;
    }
    /* Force boxed card on mobile — beat Elementor/theme globals that flatten
       the box and balloon the title. Mirrors the desktop card look. */
    .atsr-qual-card {
        background: #FFFFFF !important;
        border: 1px solid rgba(26, 77, 77, 0.08) !important;
        border-radius: 16px !important;
        box-shadow: 0 2px 12px rgba(12, 14, 58, 0.05) !important;
        padding: 20px !important;
        gap: 12px !important;
    }
    .atsr-qual-card-code {
        font-size: 13px !important;
    }
    .atsr-qual-card-title {
        font-size: 16px !important;
        line-height: 1.35 !important;
    }
    .atsr-qual-card-meta {
        font-size: 13px !important;
        padding-top: 6px !important;
    }
    .atsr-qual-card-cta {
        height: 44px !important;
        font-size: 14px !important;
        margin-top: 14px !important;
    }

    /* Rich card mobile adjustments */
    .atsr-qual-card-rich {
        border-radius: 20px;
    }
    .atsr-qual-card-rich-img {
        height: 200px;
        border-radius: 19px 19px 0 0;
    }
    .atsr-qual-card-rich-title {
        font-size: 18px;
    }
    .atsr-qual-card-rich-body {
        padding: 20px;
        padding-bottom: 0;
        gap: 12px;
    }
    .atsr-qual-card-rich-cta {
        width: calc(100% - 40px);
        margin: 16px 20px 20px;
    }
    /* height/font belong on the BUTTONS, not the flex container. Putting them
       on .atsr-qual-card-rich-cta (which stacks BOTH buttons) collapsed the
       two buttons into a single 44px box — the squashed/overlapping buttons
       on mobile. */
    .atsr-qual-card-rich-btn {
        height: 44px;
        font-size: 15px;
    }
    .atsr-qual-badge {
        height: 32px;
        font-size: 12px;
        padding: 0 12px;
    }

    /* Search bar — full width on mobile */
    .atsr-qual-search {
        max-width: 100%;
    }

    /* Hide desktop sidebar on mobile */
    .atsr-filter-sidebar {
        display: none !important;
    }
    .elementor-widget-html:has(.atsr-filter-sidebar),
    .elementor-column:has(.atsr-filter-sidebar) {
        display: none !important;
    }
    .elementor-column:has(.atsr-qual-grid) {
        width: 100% !important;
    }

    /* Show mobile filter toggle button — pill style matching Figma */
    button.atsr-filter-toggle {
        display: inline-flex !important;
        align-items: center !important;
        gap: 8px;
        padding: 10px 24px !important;
        background: #FFFFFF !important;
        border: 1.5px solid #23E6A5 !important;
        border-radius: 9999px !important;
        font-family: 'Host Grotesk', sans-serif !important;
        font-weight: 600 !important;
        font-size: 15px !important;
        color: #1A4D4D !important;
        cursor: pointer;
        transition: background 0.2s;
        white-space: nowrap;
        flex-shrink: 0;
        line-height: 1.4;
    }
    button.atsr-filter-toggle:hover {
        background: #EBFFF6 !important;
    }
    button.atsr-filter-toggle svg {
        width: 18px;
        height: 18px;
        flex-shrink: 0;
    }

    /* Mobile filter drawer overlay */
    .atsr-filter-drawer-overlay {
        display: none;
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: rgba(0, 0, 0, 0.5);
        z-index: 9998;
    }
    .atsr-filter-drawer-overlay.active {
        display: block;
    }

    /* Mobile filter drawer */
    .atsr-filter-drawer {
        position: fixed;
        top: 0;
        right: -100%;
        width: 100%;
        max-width: 380px;
        height: 100vh;
        height: 100dvh;
        background: #FFFFFF;
        z-index: 9999;
        overflow-y: auto;
        padding: 24px;
        padding-bottom: 100px;
        transition: right 0.3s ease;
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
    }
    .atsr-filter-drawer.active {
        right: 0;
    }

    /* Drawer header */
    .atsr-filter-drawer-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        margin-bottom: 24px;
        padding-bottom: 16px;
        border-bottom: 1px solid rgba(137, 167, 167, 0.2);
    }
    .atsr-filter-drawer-header h3 {
        font-family: 'Host Grotesk', sans-serif;
        font-weight: 700;
        font-size: 24px;
        color: #1A4D4D;
        margin: 0;
    }
    .atsr-filter-drawer-close {
        width: 40px;
        height: 40px;
        border: none;
        background: #F3F4F6;
        border-radius: 50%;
        display: flex;
        align-items: center;
        justify-content: center;
        cursor: pointer;
        transition: background 0.2s;
    }
    .atsr-filter-drawer-close:hover {
        background: #E2E5EA;
    }
    .atsr-filter-drawer-close svg {
        width: 20px;
        height: 20px;
        color: #1A4D4D;
    }

    /* Drawer filter groups — reuse sidebar styles */
    .atsr-filter-drawer .atsr-filter-group {
        border-bottom: 1px solid rgba(137, 167, 167, 0.2);
        padding-bottom: 20px;
        margin-bottom: 20px;
    }
    .atsr-filter-drawer .atsr-filter-group:last-of-type {
        border-bottom: none;
    }

    /* Apply Filters button at bottom */
    .atsr-filter-drawer-apply {
        flex: 1 1 0;
        padding: 16px 24px;
        background: linear-gradient(135deg, #23E6A5, #CDFF6E);
        border: none;
        border-radius: 9999px;
        font-family: 'Albert Sans', sans-serif;
        font-weight: 600;
        font-size: 16px;
        color: #1A4D4D;
        cursor: pointer;
        text-align: center;
        transition: opacity 0.2s;
    }
    .atsr-filter-drawer-apply:hover {
        opacity: 0.85;
    }

    /* Actions row — Clear + Apply side by side, pinned to drawer bottom */
    .atsr-filter-drawer-actions {
        display: flex;
        gap: 12px;
        align-items: center;
        margin-top: auto;
        padding-top: 16px;
    }
    /* Clear All — outline secondary, lighter weight than Apply */
    .atsr-filter-drawer-clear {
        flex: 0 0 auto;
        padding: 16px 20px;
        background: transparent;
        border: 1px solid #1A4D4D;
        border-radius: 9999px;
        font-family: 'Albert Sans', sans-serif;
        font-weight: 600;
        font-size: 15px;
        color: #1A4D4D;
        cursor: pointer;
        text-align: center;
        transition: background 0.2s, color 0.2s;
    }
    .atsr-filter-drawer-clear:hover {
        background: #1A4D4D;
        color: #CDFF6E;
    }

    /* Badge text sizing on mobile */
    .atsr-qual-badge-code,
    .atsr-qual-badge-level,
    .atsr-qual-badge-category {
        font-size: 11px;
        padding: 6px 12px;
    }

    /* Role chips wrap on mobile */
    .atsr-roles-chips {
        gap: 6px;
    }
    .atsr-role-chip {
        font-size: 12px;
        padding: 4px 10px;
    }

    /* Pagination on mobile */
    .atsr-qual-pagination {
        flex-wrap: wrap;
    }
    .atsr-qual-pagination button {
        width: 40px;
        height: 40px;
        font-size: 14px;
    }
}

/* ==========================================================================
   12C-0. SEARCH BAR — full-width, rounded pill, search icon right
   ========================================================================== */

/* Force Elementor widget wrapper to full width */
.elementor-widget.atsr-qual-search,
.elementor-widget-html.atsr-qual-search {
    width: 100% !important;
}
.atsr-qual-search {
    position: relative;
    width: 100%;
    max-width: 916px;
    margin: 0 auto;
}
.atsr-qual-search input[type="search"],
.atsr-qual-search input[type="text"] {
    width: 100%;
    height: 56px;
    padding: 0 120px 0 32px;
    border: 1px solid #E2E5EA;
    border-radius: 9999px;
    background: #FFFFFF;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 16px;
    font-weight: 400;
    color: #1A4D4D;
    line-height: 1.4;
    outline: none;
    transition: border-color 0.2s;
    box-shadow: 0 4px 16px rgba(12, 14, 58, 0.04);
}
/* Native clear button — position before the count badge */
.atsr-qual-search input[type="search"]::-webkit-search-cancel-button {
    -webkit-appearance: none;
    width: 16px;
    height: 16px;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%231A4D4D' stroke-width='1.5' stroke-linecap='round'%3E%3Cline x1='4' y1='4' x2='12' y2='12'/%3E%3Cline x1='12' y1='4' x2='4' y2='12'/%3E%3C/svg%3E") center/contain no-repeat;
    cursor: pointer;
    opacity: 0.5;
    transition: opacity 0.2s;
    margin-right: 8px;
}
.atsr-qual-search input[type="search"]::-webkit-search-cancel-button:hover {
    opacity: 1;
}
.atsr-qual-search input::placeholder {
    color: rgba(26, 77, 77, 0.4);
}
.atsr-qual-search input:focus {
    border-color: #23E6A5;
    box-shadow: 0 4px 16px rgba(35, 230, 165, 0.1);
}
.atsr-qual-search .atsr-search-icon,
.atsr-qual-search > svg,
.atsr-qual-search > div > svg {
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    width: 24px;
    height: 24px;
    color: #1A4D4D;
    opacity: 0.5;
    pointer-events: none;
}
.atsr-qual-search-count {
    position: absolute;
    right: 52px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 13px;
    font-weight: 600;
    color: var(--atsr-primary, #1A4D4D);
    opacity: 0.6;
    white-space: nowrap;
    pointer-events: none;
}

/* ==========================================================================
   12B2. QUALIFICATION FILTER BAR — Inline Search + Dropdown Selects
   ========================================================================== */

.atsr-qual-filter-bar {
    display: flex;
    flex-direction: column;
    gap: 16px;
    width: 100%;
    max-width: 896px;
    margin: 0 auto;
    padding: 24px 32px;
    background: #FAFCF1;
    border-radius: 20px;
    box-shadow: 0 4px 20px rgba(12, 14, 58, 0.04);
}

/* Search row inside filter bar */
.atsr-qual-filter-bar .atsr-qual-search {
    max-width: 100%;
    margin: 0;
}
.atsr-qual-filter-bar .atsr-qual-search input[type="text"] {
    height: 52px;
    border: 1px solid rgba(26, 77, 77, 0.12);
    border-radius: 9999px;
    background: #FFFFFF;
    padding: 0 52px 0 24px;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 15px;
    color: #1A4D4D;
    box-shadow: none;
    transition: border-color 0.2s;
}
.atsr-qual-filter-bar .atsr-qual-search input[type="text"]:focus {
    border-color: #23E6A5;
    box-shadow: 0 0 0 3px rgba(35, 230, 165, 0.1);
}

/* Dropdown selects row */
.atsr-qual-filter-selects {
    display: flex;
    gap: 12px;
    width: 100%;
}

/* Individual select wrapper (for custom chevron) */
.atsr-filter-select-wrap {
    position: relative;
    flex: 1;
    min-width: 0;
}

.atsr-filter-select {
    width: 100%;
    height: 48px;
    padding: 0 40px 0 20px;
    border: 1px solid rgba(26, 77, 77, 0.12);
    border-radius: 9999px;
    background: #FFFFFF;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 15px;
    font-weight: 500;
    color: #1A4D4D;
    cursor: pointer;
    outline: none;
    transition: border-color 0.2s;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
}
.atsr-filter-select:focus {
    border-color: #23E6A5;
    box-shadow: 0 0 0 3px rgba(35, 230, 165, 0.1);
}
.atsr-filter-select:hover {
    border-color: #23E6A5;
}

/* Custom chevron icon for select */
.atsr-select-chevron {
    position: absolute;
    right: 16px;
    top: 50%;
    transform: translateY(-50%);
    width: 16px;
    height: 16px;
    color: #1A4D4D;
    opacity: 0.5;
    pointer-events: none;
}

/* Skeleton loading cards — matches compact card size */
.atsr-qual-skeleton {
    height: 220px;
    border-radius: 16px;
    background: linear-gradient(110deg, #F3F4F6 30%, #EAECF0 50%, #F3F4F6 70%);
    background-size: 200% 100%;
    animation: atsr-shimmer 1.5s ease-in-out infinite;
}
@keyframes atsr-shimmer {
    0% { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}
@media (max-width: 1024px) {
    .atsr-qual-skeleton {
        height: 180px;
    }
}

/* Mobile: full-width filter bar, compact inputs, stacked dropdowns */
@media (max-width: 1024px) {
    .atsr-qual-filter-bar {
        max-width: 100%;
        padding: 16px;
        border-radius: 16px;
        gap: 12px;
    }
    /* Smaller search input on mobile */
    .atsr-qual-filter-bar .atsr-qual-search input[type="text"] {
        height: 46px;
        font-size: 14px;
        padding: 0 44px 0 16px;
    }
    /* Stack dropdowns vertically */
    .atsr-qual-filter-selects {
        flex-direction: column;
        gap: 10px;
    }
    /* Smaller selects on mobile */
    .atsr-filter-select {
        height: 42px;
        font-size: 14px;
        padding: 0 36px 0 16px;
    }
    .atsr-select-chevron {
        right: 12px;
    }
}

/* Small phones: single-column cards so titles aren't truncated */
@media (max-width: 480px) {
    .atsr-qual-grid,
    .atsr-qual-grid--compact {
        grid-template-columns: 1fr;
        gap: 16px;
    }
}


/* ==========================================================================
   12C. QUALIFICATION FILTER SIDEBAR — Figma: green border, 496px, rounded-8px
   ========================================================================== */

.atsr-filter-sidebar {
    background: #FFFFFF;
    border: 1px solid #23E6A5;
    border-radius: 8px;
    padding: 32px;
    display: flex;
    flex-direction: column;
    gap: 20px;
    width: 100%;
}
.atsr-filter-sidebar h3 {
    font-family: 'Host Grotesk', sans-serif;
    font-weight: 700;
    font-size: 24px;
    color: #1A4D4D;
    margin: 0;
    line-height: 1.3;
}

/* Filter group (Industry, Experience, Background) */
.atsr-filter-group {
    border-bottom: 1px solid rgba(137, 167, 167, 0.2);
    padding-bottom: 20px;
}
.atsr-filter-group:last-child {
    border-bottom: none;
    padding-bottom: 0;
}
/* Filter group header — matches .atsr-filter-header in Elementor HTML */
.atsr-filter-header,
.atsr-filter-group-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    cursor: pointer;
    padding: 0;
    background: none;
    border: none;
    width: 100%;
}
.atsr-filter-header span,
.atsr-filter-group-header h4 {
    font-family: 'Host Grotesk', sans-serif;
    font-weight: 700;
    font-size: 18px;
    color: #1A4D4D;
    margin: 0;
    line-height: 1.3;
}
/* Chevron icon — green (#23E6A5) */
.atsr-filter-header svg,
.atsr-filter-group-header svg,
.atsr-chevron {
    transition: transform 0.2s;
    flex-shrink: 0;
}
.atsr-filter-header svg path,
.atsr-chevron path {
    stroke: #23E6A5 !important;
}
.atsr-filter-group.collapsed .atsr-filter-header svg,
.atsr-filter-group.collapsed .atsr-filter-group-header svg {
    transform: rotate(180deg);
}

/* Checkbox labels */
.atsr-filter-options {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin-top: 16px;
}
.atsr-filter-options label {
    display: flex;
    align-items: center;
    gap: 12px;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 14px;
    font-weight: 400;
    color: #1A4D4D;
    line-height: 1.4;
    cursor: pointer;
}
.atsr-filter-options input[type="checkbox"] {
    width: 20px;
    height: 20px;
    border: 1px solid #C4C7D2;
    border-radius: 4px;
    appearance: none;
    -webkit-appearance: none;
    cursor: pointer;
    flex-shrink: 0;
}
.atsr-filter-options input[type="checkbox"]:checked {
    background: #23E6A5;
    border-color: #23E6A5;
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.25 4.75L6 12L2.75 8.75' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-size: 14px;
    background-position: center;
    background-repeat: no-repeat;
}

/* Clear Filters button */
.atsr-clear-filters,
.atsr-filter-clear {
    width: 100%;
    padding: 12px 24px;
    background: linear-gradient(135deg, #23E6A5, #CDFF6E);
    border: none;
    border-radius: 9999px;
    font-family: 'Albert Sans', sans-serif;
    font-weight: 600;
    font-size: 14px;
    color: #1A4D4D;
    cursor: pointer;
    text-align: center;
    transition: opacity 0.2s;
}
.atsr-clear-filters:hover,
.atsr-filter-clear:hover {
    opacity: 0.85;
}

/* ==========================================================================
   12D. QUALIFICATION COUNT + PAGINATION
   ========================================================================== */

/* Result count */
.atsr-qual-count {
    font-family: 'Host Grotesk', sans-serif;
    font-size: 16px;
    font-weight: 400;
    color: #1A4D4D;
    opacity: 0.8;
    line-height: 1.6;
}

/* Pagination */
.atsr-qual-pagination {
    display: flex;
    gap: 8px;
    align-items: center;
    justify-content: center;
    margin-top: 8px;
}
.atsr-qual-pagination button {
    width: 44px;
    height: 44px;
    border: none;
    border-radius: 12px;
    background: #FFFFFF;
    color: #1A4D4D;
    font-family: Helvetica, Arial, sans-serif;
    font-size: 16px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.2s;
}
.atsr-qual-pagination button:hover {
    background: #F3F4F6;
}
.atsr-qual-pagination button.active {
    background: linear-gradient(135deg, #23E6A5, #CDFF6E);
    color: #1A4D4D;
    font-weight: 600;
}
.atsr-qual-pagination button:disabled {
    opacity: 0.4;
    cursor: not-allowed;
}
.atsr-qual-pagination button:disabled:hover {
    background: #FFFFFF;
}

/* Loading state */
.atsr-qual-loading {
    text-align: center;
    padding: 60px 20px;
    font-family: 'Host Grotesk', sans-serif;
    font-size: 16px;
    color: rgba(26, 77, 77, 0.6);
}

/* No results / error message — span the full grid so it centers across all
   columns instead of sitting inside a single (narrow, left) grid cell. */
.atsr-qual-no-results {
    grid-column: 1 / -1;
    flex-basis: 100%;
    text-align: center;
    padding: 60px 20px;
    width: 100%;
}
/* Empty-state count ("No qualifications found") — centered, full width. */
.atsr-qual-count.is-empty {
    text-align: center;
    width: 100%;
}
.atsr-qual-no-results h3 {
    font-family: 'Host Grotesk', sans-serif;
    font-weight: 700;
    font-size: 24px;
    color: #1A4D4D;
    margin: 0 0 8px;
}
.atsr-qual-no-results p {
    font-family: 'Host Grotesk', sans-serif;
    font-size: 16px;
    color: rgba(26, 77, 77, 0.7);
}
.atsr-qual-no-results a {
    color: #23E6A5;
}

/* ==========================================================================
   13. RESPONSIVE OVERRIDES
   ========================================================================== */

@media (max-width: 1024px) {
    .qualification-meta-grid { grid-template-columns: repeat(2, 1fr); }
    .qualification-filters { flex-direction: column; }
    .qualification-filters select,
    .qualification-search { min-width: 100%; }
}

@media (max-width: 1024px) {
    .qualification-meta-grid { grid-template-columns: 1fr; }
    .units-list__item { flex-direction: column; gap: var(--atsr-space-1); }
    .units-list__code { min-width: auto; }
}

/* ==========================================================================
   14. ACCESSIBILITY
   ========================================================================== */

a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
    outline: 2px solid var(--atsr-ring);
    outline-offset: 2px;
}

.skip-to-content {
    position: absolute; left: -9999px; top: auto;
    width: 1px; height: 1px; overflow: hidden;
    z-index: 99999; padding: 12px 24px;
    background: var(--atsr-primary); color: var(--atsr-primary-foreground);
    font-weight: 600; border-radius: 0 0 var(--atsr-radius-sm) var(--atsr-radius-sm);
    text-decoration: none;
}
.skip-to-content:focus {
    left: 50%; transform: translateX(-50%);
    width: auto; height: auto;
}

.sr-only {
    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}

/* ==========================================================================
   15. NAVIGATOR ROADMAP — Scroll-Scrubbed Progressive Reveal (v3.0)
   "How We Get You Qualified" — alternating left/right cards, no pinning.
   Desktop: all cards in natural flow, scroll-linked progressive reveal.
   Mobile:  vertical scroll, cards slide from left.
   JS driver: atsr-gsap-roadmap.js v3.0
   Classes: atsr-roadmap-timeline, atsr-roadmap-step,
   atsr-roadmap-step-left/right, atsr-roadmap-card,
   atsr-roadmap-progress (injected), atsr-roadmap-dot (injected)
   Figma desktop: 7619:42502, 9206:14616
   ========================================================================== */

/* --- Roadmap parent section — contain card overflow on narrow viewports --- */
.atsr-nav-con {
    overflow-x: clip !important;
}

/* --- Timeline container --- */
.atsr-roadmap-timeline,
.atsr-roadmap-timeline.e-con,
.atsr-roadmap-timeline.e-flex {
    position: relative !important;
    display: flex !important;
    flex-direction: column !important;
    flex-wrap: nowrap !important;
}

/* Background track line — faint green, full height, static */
.atsr-roadmap-timeline::before {
    content: '';
    position: absolute;
    left: 50%;
    top: 0;
    bottom: 0;
    width: 8px;
    transform: translateX(-50%);
    background: rgba(39, 234, 166, 0.1);
    border-radius: 4px;
    z-index: 0;
    pointer-events: none;
}

/* Gradient progress line — GSAP scrubs height */
.atsr-roadmap-progress {
    position: absolute !important;
    left: 50% !important;
    top: 0 !important;
    width: 8px !important;
    height: 0;
    transform: translateX(-50%);
    background: linear-gradient(180deg, #23E6A5 0%, #CDFF6E 100%);
    border-radius: 4px;
    z-index: 1;
    pointer-events: none;
    padding: 0 !important;
    margin: 0 !important;
    box-shadow: 0 0 12px rgba(35, 230, 165, 0.35), 0 0 4px rgba(205, 255, 110, 0.2);
}

/* --- Step rows ---
 * CSS baseline: flex-row, transparent, no shadows. */
.atsr-roadmap-timeline .atsr-roadmap-step,
.atsr-roadmap-timeline .atsr-roadmap-step.e-con,
.atsr-roadmap-timeline .atsr-roadmap-step.e-flex {
    position: relative !important;
    width: 100% !important;
    max-width: 100% !important;
    flex: 0 0 auto !important;
    background: transparent !important;
    background-color: transparent !important;
    box-shadow: none !important;
    border: none !important;
    outline: none !important;
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
}

/* Alternating card positioning — push card to its column. */
.atsr-roadmap-step-left,
.atsr-roadmap-step-left.e-con {
    justify-content: flex-start !important;
    padding-right: calc(50% + 32px) !important;
    padding-left: 0 !important;
}
.atsr-roadmap-step-right,
.atsr-roadmap-step-right.e-con {
    justify-content: flex-end !important;
    padding-left: calc(50% + 32px) !important;
    padding-right: 0 !important;
}

/* Timeline dot — injected by JS at each step's vertical center. */
.atsr-roadmap-dot {
    position: absolute !important;
    left: 50%;
    top: 50%;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: linear-gradient(135deg, #23E6A5, #CDFF6E);
    transform: translate(-50%, -50%) scale(0);
    z-index: 2;
    pointer-events: none;
    box-shadow: 0 0 0 4px rgba(35, 230, 165, 0.2);
}
/* Pulse ring around dots after they appear */
.atsr-roadmap-dot::after {
    content: '';
    position: absolute;
    inset: -6px;
    border-radius: 50%;
    border: 2px solid rgba(35, 230, 165, 0.3);
    animation: atsr-dot-pulse 2.5s ease-in-out infinite;
}
@keyframes atsr-dot-pulse {
    0%, 100% { transform: scale(1); opacity: 0.6; }
    50%      { transform: scale(1.4); opacity: 0; }
}

/* --- Card base --- */
.atsr-roadmap-card {
    padding: 24px !important;
    border-radius: 12px !important;
    border: 1px solid transparent !important;
    background:
        linear-gradient(#FFFFFF, #FFFFFF) padding-box,
        linear-gradient(135deg, #23E6A5, #CDFF6E) border-box !important;
    box-shadow: 0px 16px 32px rgba(12, 14, 58, 0.04) !important;
    transition: none !important;
    will-change: transform, opacity, filter;
}
.atsr-roadmap-card > .e-con-inner,
.atsr-roadmap-card.e-flex {
    gap: 12px !important;
}
.atsr-roadmap-card:hover {
    box-shadow:
        0px 12px 32px rgba(12, 14, 58, 0.10),
        0px 0px 24px rgba(35, 230, 165, 0.15) !important;
    transform: translateY(-2px) !important;
}

/* --- GSAP initial hidden states (pre-JS fallback) ---
 * GSAP overrides these via gsap.set() at boot. */
.atsr-roadmap-step-left .atsr-roadmap-card,
.atsr-roadmap-step-right .atsr-roadmap-card {
    opacity: 0;
    visibility: hidden;
    transform: translateX(-80px);
}
.atsr-roadmap-step-right .atsr-roadmap-card {
    transform: translateX(80px);
}

/* Show cards in Elementor editor (GSAP doesn't run there) */
.elementor-editor-active .atsr-roadmap-step-left .atsr-roadmap-card,
.elementor-editor-active .atsr-roadmap-step-right .atsr-roadmap-card {
    opacity: 1 !important;
    visibility: visible !important;
    transform: none !important;
}

/* --- Responsive: compact desktop (MacBook Air/Pro ≤1440px) --- */
@media (max-width: 1440px) and (min-width: 1025px) {
    .atsr-roadmap-timeline,
    .atsr-roadmap-timeline.e-con,
    .atsr-roadmap-timeline.e-flex {
        padding-left: 48px !important;
        padding-right: 48px !important;
    }
    .atsr-roadmap-step-left,
    .atsr-roadmap-step-left.e-con {
        padding-right: calc(50% + 20px) !important;
    }
    .atsr-roadmap-step-right,
    .atsr-roadmap-step-right.e-con {
        padding-left: calc(50% + 20px) !important;
    }
    .atsr-roadmap-card {
        padding: 20px !important;
    }
    .atsr-roadmap-card .elementor-heading-title {
        font-size: 24px !important;
        line-height: 1.3 !important;
    }
    .atsr-roadmap-card .elementor-text-editor p {
        font-size: 14px !important;
        line-height: 1.5 !important;
    }
    .atsr-roadmap-card .elementor-icon-list-text {
        font-size: 13px !important;
    }
    .atsr-roadmap-card > .e-con-inner,
    .atsr-roadmap-card.e-flex {
        gap: 10px !important;
    }
}

/* --- Responsive: single-column on tablet/mobile --- */
@media (max-width: 1024px) {
    .atsr-roadmap-step-left,
    .atsr-roadmap-step-left.e-con,
    .atsr-roadmap-step-right,
    .atsr-roadmap-step-right.e-con {
        justify-content: flex-start !important;
        padding-left: 48px !important;
        padding-right: 0 !important;
    }
    .atsr-roadmap-timeline::before,
    .atsr-roadmap-progress {
        left: 16px !important;
    }
    .atsr-roadmap-dot {
        left: 16px !important;
    }
    /* Mobile: all cards slide from left */
    .atsr-roadmap-step-left .atsr-roadmap-card,
    .atsr-roadmap-step-right .atsr-roadmap-card {
        transform: translateX(-60px);
    }
}

@media (prefers-reduced-motion: reduce) {
    .atsr-roadmap-step-left .atsr-roadmap-card,
    .atsr-roadmap-step-right .atsr-roadmap-card {
        opacity: 1 !important;
        visibility: visible !important;
        transform: none !important;
    }
    .atsr-roadmap-dot {
        transform: translate(-50%, -50%) scale(1) !important;
    }
    .atsr-roadmap-progress {
        height: 100% !important;
    }
}

/* ==========================================================================
   16. REUSABLE TEXT UTILITY CLASSES
   Use these in Elementor → Advanced → CSS Classes instead of Custom CSS.
   Elementor Pro Custom CSS is unreliable (post-90.css compilation bug).
   These classes work globally on any widget, any section.
   ========================================================================== */

/* --- Section label — green, uppercase, 16px ---
 * Usage: "THE NAVIGATOR ROADMAP", "MYTHS VS FACTS", etc.
 * Apply class: atsr-text-label  */
.atsr-text-label,
.atsr-text-label p,
.atsr-text-label .elementor-widget-container,
.atsr-text-label .elementor-text-editor,
.atsr-text-label .elementor-text-editor p {
    font-family: 'Host Grotesk', sans-serif !important;
    font-size: 16px !important;
    font-weight: 400 !important;
    line-height: 1.4 !important;
    letter-spacing: 0.4px !important;
    color: #23E6A5 !important;
    -webkit-text-fill-color: #23E6A5 !important;
    text-align: center !important;
    text-transform: uppercase !important;
}

/* --- Section description on dark bg — light mint, 20px, 80% opacity ---
 * Usage: subtitles under headings on dark (#1A4D4D) sections.
 * Apply class: atsr-text-desc-light  */
.atsr-text-desc-light,
.atsr-text-desc-light p,
.atsr-text-desc-light .elementor-widget-container,
.atsr-text-desc-light .elementor-text-editor,
.atsr-text-desc-light .elementor-text-editor p {
    font-family: 'Host Grotesk', sans-serif !important;
    font-size: 20px !important;
    font-weight: 400 !important;
    line-height: 1.4 !important;
    color: rgba(235, 255, 246, 0.8) !important;
    -webkit-text-fill-color: rgba(235, 255, 246, 0.8) !important;
    text-align: center !important;
}

/* --- Section description on light bg — dark teal, 20px ---
 * Usage: subtitles under headings on light (#EBFFF6 / white) sections.
 * Apply class: atsr-text-desc-dark  */
.atsr-text-desc-dark,
.atsr-text-desc-dark p,
.atsr-text-desc-dark .elementor-widget-container,
.atsr-text-desc-dark .elementor-text-editor,
.atsr-text-desc-dark .elementor-text-editor p {
    font-family: 'Host Grotesk', sans-serif !important;
    font-size: 20px !important;
    font-weight: 400 !important;
    line-height: 1.4 !important;
    color: rgba(26, 77, 77, 0.8) !important;
    -webkit-text-fill-color: rgba(26, 77, 77, 0.8) !important;
    text-align: center !important;
}

/* --- Body text on dark bg — light mint, 16px ---
 * Usage: paragraph text on dark (#1A4D4D) sections.
 * Apply class: atsr-text-body-light  */
.atsr-text-body-light,
.atsr-text-body-light p,
.atsr-text-body-light .elementor-widget-container,
.atsr-text-body-light .elementor-text-editor,
.atsr-text-body-light .elementor-text-editor p {
    font-family: 'Host Grotesk', sans-serif !important;
    font-size: 16px !important;
    font-weight: 400 !important;
    line-height: 1.4 !important;
    color: rgba(235, 255, 246, 0.7) !important;
    -webkit-text-fill-color: rgba(235, 255, 246, 0.7) !important;
}

/* --- Body text on light bg — dark teal, 16px ---
 * Usage: paragraph text on light (#EBFFF6 / white) sections.
 * Apply class: atsr-text-body-dark  */
.atsr-text-body-dark,
.atsr-text-body-dark p,
.atsr-text-body-dark .elementor-widget-container,
.atsr-text-body-dark .elementor-text-editor,
.atsr-text-body-dark .elementor-text-editor p {
    font-family: 'Host Grotesk', sans-serif !important;
    font-size: 16px !important;
    font-weight: 400 !important;
    line-height: 1.4 !important;
    color: rgba(26, 77, 77, 0.7) !important;
    -webkit-text-fill-color: rgba(26, 77, 77, 0.7) !important;
}

/* ==========================================================================
   17. RPL PROCESS — Horizontal Scroll Section
   Homepage — "Your Pathway to a Bulletproof Certification"
   JS driver: atsr-gsap-rpl-process.js
   Classes: atsr-rpl-pinned, atsr-step-card, atsr-step-number,
   atsr-progress-widget, atsr-rpl-panels, atsr-rpl-panel
   ========================================================================== */

/* --- Step cards: clickable, equal width, subtle hover --- */
.atsr-step-card {
    cursor: pointer;
    flex: 1 1 0 !important;
    min-width: 0 !important;
    border: 1px solid transparent !important;
    border-radius: 8px !important;
    transition: border-color 0.3s ease, box-shadow 0.3s ease !important;
}
.atsr-step-card:hover {
    box-shadow: 0px 16px 32px rgba(12, 14, 58, 0.08) !important;
}

/* Active step card — gradient border (green→lime).
 * Uses background layering trick:
 *   white covers padding-box, gradient shows through 1px border area. */
.atsr-step-card.active {
    border: 1px solid transparent !important;
    background:
        linear-gradient(#FFFFFF, #FFFFFF) padding-box,
        linear-gradient(135deg, #23E6A5, #CDFF6E) border-box !important;
}

/* --- Step number text: "STEP 01", "STEP 02", etc. --- */
.atsr-step-number {
    font-family: 'Host Grotesk', sans-serif !important;
    font-size: 16px !important;
    font-weight: 400 !important;
    color: #1A4D4D !important;
    -webkit-text-fill-color: #1A4D4D !important;
    transition: all 0.3s ease;
}
/* Active step number — gradient text (green→lime) */
.atsr-step-card.active .atsr-step-number {
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 100%) !important;
    -webkit-background-clip: text !important;
    background-clip: text !important;
    -webkit-text-fill-color: transparent !important;
    color: transparent !important;
    font-weight: 600 !important;
}

/* --- Progress bar container --- */
.atsr-progress-widget {
    position: relative;
    width: 100%;
    height: 22px;
    margin-top: 16px;
}

/* Background track (faint green bar behind the dots) */
.atsr-progress-track {
    position: absolute;
    top: 7px;
    left: 0;
    right: 0;
    height: 8px;
    background: rgba(39, 234, 166, 0.1);
    border-radius: 90px;
}

/* Active fill — gradient bar, width set by JS */
.atsr-progress-fill {
    position: absolute;
    top: 7px;
    left: 0;
    width: 0;
    height: 8px;
    background: linear-gradient(90deg, #23E6A5, #CDFF6E);
    border-radius: 90px;
    transition: width 0.4s ease;
}

/* Progress dots — positioned by JS */
.atsr-progress-dot {
    position: absolute;
    top: 0;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: rgba(39, 234, 166, 0.3);
    transition: background 0.3s ease, transform 0.3s ease;
}
/* Active dot — full gradient, slight scale up */
.atsr-progress-dot.active {
    background: linear-gradient(135deg, #23E6A5, #CDFF6E);
    transform: scale(1.1);
}

/* --- Panel track (horizontal flex row, slides via GSAP translateX) ---
 * gap: 0 — panels are flush full-width slides. GSAP translateX handles positioning. */
.atsr-rpl-panels {
    display: flex !important;
    flex-wrap: nowrap !important;
    width: max-content;
    gap: 0;
    will-change: transform;
}
/* Each panel fills section width (set by JS on desktop) */
.atsr-rpl-panel {
    flex-shrink: 0;
}

/* The outer section clips panels that slide off-screen */
.atsr-rpl-pinned {
    overflow: hidden !important;
}

/* --- Mobile/tablet overrides — uses Swiper.js for panels ---
 * Coarse pointer (tablets) included so wide touch tablets get swiper sizing. */
@media (max-width: 1024px), (pointer: coarse) {

    /* Let section flow naturally on mobile (no pinning) */
    .atsr-rpl-pinned {
        position: static !important;
        height: auto !important;
        overflow: visible !important;
        padding-bottom: 40px !important; /* breathing room before next section */
    }

    /* Step cards — horizontal scroll carousel */
    .atsr-rpl-pinned .atsr-step-card {
        min-width: 275px !important;
        width: 275px !important;
        flex-shrink: 0 !important;
    }

    /* Uniform card heights — Elementor's container sets its own align-items, so the
     * cards size to their own content (uneven). Force the row to stretch every card
     * to the tallest, and let the inner content column fill that height. */
    .atsr-rpl-pinned .atsr-step-cards-row,
    .atsr-rpl-pinned .atsr-step-cards-row > .e-con-inner {
        align-items: stretch !important;
    }
    .atsr-rpl-pinned .atsr-step-card {
        height: auto !important;
        align-self: stretch !important;
    }
    .atsr-rpl-pinned .atsr-step-card > .e-con-inner {
        height: 100% !important;
    }

    /* Smaller step number on mobile */
    .atsr-step-number {
        font-size: 12px !important;
    }

    /* Swiper container for panels — clip overflow properly */
    .atsr-rpl-swiper {
        overflow: hidden !important;
        width: 100% !important;
        position: relative !important; /* anchor the absolute nav arrows */
    }

    /* Equalise slide heights so the carousel is a clean fixed box. With the old
     * autoHeight + centered peek, the short active slide sized the viewport while
     * the taller neighbour overflowed below it → a big dead gap below the panels.
     * Stretching every slide to the tallest keeps the carousel a tidy fixed box. */
    .atsr-rpl-swiper .swiper-wrapper {
        align-items: stretch !important;
    }
    .atsr-rpl-swiper .atsr-rpl-panel.swiper-slide {
        height: auto !important;
        display: flex !important;
        flex-direction: column !important;
    }
    .atsr-rpl-swiper .atsr-rpl-panel.swiper-slide > .e-con-inner {
        flex: 1 1 auto;
    }

    /* ---- Swipe affordance lives in the EXISTING progress bar ----
     * No separate control element. The top progress widget (already synced to the
     * active step) becomes the mobile control: its dots are tappable to jump, and
     * a persistent "swipe" cue sits just under the bar so first-time users know the
     * panels move sideways. .atsr-rpl-swipeable is added by JS on touch/≤1024px. */
    .atsr-rpl-swipeable .atsr-progress-dot {
        cursor: pointer;
        -webkit-tap-highlight-color: transparent;
    }
    /* Invisible enlarged hit area — the dots are only ~18px, too small to tap. */
    .atsr-rpl-swipeable .atsr-progress-dot::before {
        content: "";
        position: absolute;
        inset: -11px;
        border-radius: 50%;
    }
    .atsr-rpl-swipeable .atsr-progress-dot:active {
        transform: scale(0.85);
    }
    .atsr-rpl-swipeable .atsr-progress-dot.active:active {
        transform: scale(1.1) translateY(0);
    }

    /* Kill the big flex-gap of the content column (progress widget → panels) on
     * mobile. That gap is what left the swipe cue floating in a void between the
     * bar and the panels. Tightening it lets the cue hug the bar. */
    .atsr-rpl-content {
        gap: 4px !important;
        --gap: 4px !important;
        --container-widget-gap: 4px !important;
    }

    /* Persistent swipe cue — two chevrons in NORMAL FLOW right under the progress
     * bar (a real element JS inserts after the widget). They sit WIDE apart so
     * they flank the bar, and pulse outward, so the bar clearly reads as
     * swipeable left-right. */
    .atsr-rpl-swipe-cue {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 56px;
        margin: 2px 0 0;
        color: #1A4D4D;
        font-size: 30px;
        font-weight: 700;
        line-height: 1;
        opacity: 0.8;
        pointer-events: none;
        user-select: none;
    }
    .atsr-rpl-swipe-cue span { display: block; }
    .atsr-rpl-swipe-cue span:first-child {
        animation: atsr-rpl-cue-l 1.5s ease-in-out infinite;
    }
    .atsr-rpl-swipe-cue span:last-child {
        animation: atsr-rpl-cue-r 1.5s ease-in-out infinite;
    }
    @keyframes atsr-rpl-cue-l {
        0%, 100% { transform: translateX(0); opacity: 0.55; }
        50%      { transform: translateX(-7px); opacity: 1; }
    }
    @keyframes atsr-rpl-cue-r {
        0%, 100% { transform: translateX(0); opacity: 0.55; }
        50%      { transform: translateX(7px); opacity: 1; }
    }
    @media (prefers-reduced-motion: reduce) {
        .atsr-rpl-swipe-cue span { animation: none; }
    }

    /* Panel track — Swiper manages this, remove desktop constraints */
    .atsr-rpl-panels {
        gap: 0 !important;              /* Swiper uses spaceBetween instead */
        width: auto !important;          /* Swiper calculates width automatically */
    }
    /* Each panel fills viewport width minus padding */
    .atsr-rpl-panel {
        width: calc(100vw - 48px) !important;
        min-width: calc(100vw - 48px) !important;
    }

    /* Progress dots — smaller on mobile */
    .atsr-progress-dot {
        width: 18px !important;
        height: 18px !important;
    }
}

/* Show everything normally in Elementor editor (JS doesn't run there) */
.elementor-editor-active .atsr-rpl-pinned {
    position: static !important;
    height: auto !important;
    overflow: visible !important;
}
.elementor-editor-active .atsr-rpl-panels {
    flex-wrap: wrap !important;
    width: 100% !important;
}

/* ==========================================================================
   LOGO MARQUEE — override Elementor e-con-full width constraint
   Elementor forces width:100% on .e-con-full containers, which fights
   the inline width:max-content set by GSAP. This lets the flex row
   expand beyond the viewport so the infinite scroll works properly.
   ========================================================================== */
.atsr-logo-container.e-con-full {
    width: max-content !important;
    max-width: 100vw !important;
    overflow: hidden !important;
}

/* --- Trust indicator checkmark SVG fix (all viewports) ---
 * Icon widgets use SVG with linearGradient <defs> fill.
 * The gradient breaks when Elementor repositions the SVGs,
 * rendering as transparent. Override with solid primary green. */
.elementor-element-778ce24 .elementor-widget-icon svg path,
.elementor-element-fdee316 .elementor-widget-icon svg path,
.elementor-element-df424c1 .elementor-widget-icon svg path,
.elementor-element-0f9d4ac .elementor-widget-icon svg path {
    fill: var(--atsr-primary, #23E6A5) !important;
}

/* ==========================================================================
   MOBILE — Hero, Trust Indicators (≤1024px)
   ========================================================================== */
@media (max-width: 1024px) {

    /* --- Hero section: reduce excess spacing --- */
    .atsr-hero {
        padding-top: 40px !important;
        padding-bottom: 40px !important;
        min-height: auto !important;
    }
    .atsr-hero > .e-con-inner {
        flex-direction: column !important;
        gap: 24px !important;
        min-height: auto !important;
    }
    /* Hide search bar and hint on mobile */
    .atsr-hero-search,
    .atsr-hero-search-hint {
        display: none !important;
    }
    /* Stack CTA buttons vertically */
    .atsr-hero-buttons,
    .atsr-hero .e-con.e-child {
        flex-direction: column !important;
        width: 100% !important;
    }
    .atsr-hero-buttons .elementor-button-wrapper,
    .atsr-hero-buttons .e-con {
        width: 100% !important;
    }
    /* Hero title */
    .atsr-hero h1,
    .atsr-hero .elementor-heading-title {
        font-size: 38px !important;
        line-height: 1.2 !important;
    }
    /* Grid overlay — reduce for mobile */
    .atsr-hero::before {
        background-size: 40px 40px;
        min-block-size: auto !important;
    }

    /* Trust icon SVG fix is above (all viewports) */
}


/* ── Myths vs Facts — Pair Container ── */
.atsr-mythfact-pair {
    align-items: flex-start !important; /* top-align columns when one is expanded */
}

/* ── Myths vs Facts Accordion ── */
.atsr-myths-accordion .e-n-accordion {
    max-width: 100% !important;
}
.atsr-myths-accordion .e-n-accordion-item {
    background: #1B4545 !important;
    border: 1px solid rgba(255, 217, 217, 0.30) !important;
    border-radius: 12px !important;
    margin-bottom: 16px !important;
    overflow: hidden !important;
}
.atsr-myths-accordion .e-n-accordion-item[open] {
    border: 1px solid transparent !important;
    background:
        linear-gradient(#1B4545, #1B4545) padding-box,
        linear-gradient(135deg, #23E6A5 0%, #CDFF6E 100%) border-box !important;
}
.atsr-myths-accordion .e-n-accordion-item-title {
    display: flex !important;
    flex-wrap: nowrap !important;
    align-items: flex-start !important;
    justify-content: space-between !important;
    padding: 24px 32px !important;
    border: none !important;
    background: transparent !important;
    cursor: pointer !important;
    list-style: none !important;
}
.atsr-myths-accordion .e-n-accordion-item-title::marker,
.atsr-myths-accordion .e-n-accordion-item-title::-webkit-details-marker {
    display: none !important;
    content: "" !important;
}
.atsr-myths-accordion .e-n-accordion-item-title-text {
    order: 1 !important;
    flex: 1 1 0% !important;
    font-family: 'Host Grotesk', sans-serif !important;
    font-weight: 700 !important;
    font-size: 24px !important;
    line-height: 1.4 !important;
    color: #FFFFFF !important;
    background: none !important;
    padding: 0 !important;
    border-radius: 0 !important;
    text-transform: none !important;
    letter-spacing: normal !important;
}
.atsr-myths-accordion .e-n-accordion-item-title-text::before {
    content: "MYTH" !important;
    display: inline-block !important;
    background: #C0392B !important;
    color: #FFFFFF !important;
    font-family: 'Host Grotesk', sans-serif !important;
    font-weight: 700 !important;
    font-size: 20px !important;
    letter-spacing: 0.5px !important;
    text-transform: uppercase !important;
    padding: 5px 16px !important;
    border-radius: 20px !important;
    width: fit-content !important;
    margin-bottom: 12px !important;
}
.atsr-myths-accordion .e-n-accordion-item-title-icon {
    order: 2 !important;
    flex: 0 0 auto !important;
    width: 30px !important;
    height: 30px !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    margin: 0 0 0 16px !important;
    background: #D0FF71 !important;
    border-radius: 50% !important;
}
.atsr-myths-accordion .e-n-accordion-item-title-icon svg {
    fill: #1A3A3A !important;
    width: 14px !important;
    height: 14px !important;
}
.atsr-myths-accordion .e-n-accordion-item-title-icon i {
    color: #1A3A3A !important;
    font-size: 14px !important;
}
.atsr-myths-accordion .e-n-accordion-item > .e-con {
    padding: 0 32px 24px 32px !important;
    border: none !important;
    background: transparent !important;
}
.atsr-myths-accordion .e-n-accordion-item > .e-con::before,
.atsr-myths-accordion .e-n-accordion-item > .e-con::after,
.elementor-widget.elementor-widget-n-accordion.atsr-myths-accordion .e-n-accordion-item[open] > .e-con::before,
.elementor-widget.elementor-widget-n-accordion.atsr-myths-accordion .e-n-accordion-item[open] > .e-con::after {
    display: none !important;
    height: 0 !important;
    border: none !important;
    background: none !important;
    content: none !important;
}
.atsr-myths-accordion .e-n-accordion-item > .e-con .elementor-heading-title {
    font-family: 'Host Grotesk', sans-serif !important;
    font-weight: 700 !important;
    font-size: 18px !important;
    line-height: 1.4 !important;
    color: #FFFFFF !important;
    margin-bottom: 16px !important;
}

/* ── Gradient Outline Button ──
 * Add class `atsr-btn-outline` to any Elementor Button widget.
 * Creates a gradient border (green→lime) with transparent fill. */
.atsr-btn-outline .elementor-button {
    background: transparent !important;
    border: none !important;
    position: relative;
    z-index: 1;
}
.atsr-btn-outline .elementor-button::before {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: 9999px;
    padding: 1.5px;
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 100%);
    -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
    -webkit-mask-composite: xor;
    mask-composite: exclude;
    z-index: -1;
}
.atsr-btn-outline .elementor-button .elementor-button-text {
    color: #23E6A5 !important;
    -webkit-text-fill-color: #23E6A5 !important;
}
.atsr-btn-outline .elementor-button .elementor-button-icon svg {
    fill: #23E6A5 !important;
}
.atsr-btn-outline .elementor-button:hover::before {
    background: linear-gradient(90deg, #1DD699 0%, #B8F050 100%);
}
.atsr-btn-outline .elementor-button:hover .elementor-button-text {
    color: #CDFF6E !important;
    -webkit-text-fill-color: #CDFF6E !important;
}

/* ==========================================================================
   ATSR BUTTON SYSTEM v1.0
   6 button classes for Elementor: add to widget → Advanced → CSS Classes.
   Each has a distinct hover animation + shared arrow-slide + press effect.

   Classes:
     atsr-btn-gradient       — gradient fill (green→lime), dark text
     atsr-btn-outline        — gradient border, teal text (dark bg) [ENHANCED]
     atsr-btn-dark           — dark navy fill, lime text (light/gradient bg)
     atsr-btn-outline-dark   — dark border, dark text (light/gradient bg)
     atsr-btn-teal-outline   — teal border, teal text (white bg)
     atsr-btn-solid          — solid teal fill, white text
   ========================================================================== */

/* ── Shared: arrow slides right on hover, press on active ── */
.atsr-btn-gradient .elementor-button-icon,
.atsr-btn-outline .elementor-button-icon,
.atsr-btn-dark .elementor-button-icon,
.atsr-btn-outline-dark .elementor-button-icon,
.atsr-btn-teal-outline .elementor-button-icon,
.atsr-btn-solid .elementor-button-icon {
    transition: transform 0.35s cubic-bezier(0.22, 0.61, 0.36, 1) !important;
}
.atsr-btn-gradient:hover .elementor-button-icon,
.atsr-btn-outline:hover .elementor-button-icon,
.atsr-btn-dark:hover .elementor-button-icon,
.atsr-btn-outline-dark:hover .elementor-button-icon,
.atsr-btn-teal-outline:hover .elementor-button-icon,
.atsr-btn-solid:hover .elementor-button-icon {
    transform: translateX(5px) !important;
}
.atsr-btn-gradient .elementor-button:active,
.atsr-btn-outline .elementor-button:active,
.atsr-btn-dark .elementor-button:active,
.atsr-btn-outline-dark .elementor-button:active,
.atsr-btn-teal-outline .elementor-button:active,
.atsr-btn-solid .elementor-button:active {
    transform: scale(0.96) !important;
    transition-duration: 0.1s !important;
}

/* ── Shared: responsive sizing — keep pill shape on small screens ──
 * Bug fix (2026-06-05): On narrow viewports the hero CTAs
 * ("Take a quick eligibility test", "Get in touch with a navigator")
 * wrapped to 2–3 lines, so the 9999px-radius pills became tall blobs.
 * Root cause: no white-space rule, so the label wraps as soon as the
 * column gets narrow. Fix: force single-line text + content-width sizing
 * so the button hugs its label and stays a pill. Font/padding scale down
 * with clamp() at smaller breakpoints so the nowrap button still fits. */
.atsr-btn-gradient .elementor-button,
.atsr-btn-outline .elementor-button,
.atsr-btn-dark .elementor-button,
.atsr-btn-outline-dark .elementor-button,
.atsr-btn-teal-outline .elementor-button,
.atsr-btn-solid .elementor-button,
.atsr-header-phone .elementor-button {
    white-space: nowrap !important;
    /* Size the pill to its single-line label, never narrower.
       width:auto alone let a narrow flex cell squeeze the button so the
       nowrap text overflowed and got clipped by overflow:hidden
       ("ake a quick eligibility test" + cut arrow). min-width:max-content
       forces the button at least as wide as its text+icon → full label
       shows. No max-width cap. flex:0 0 auto stops the parent row from
       shrinking it below content width. */
    width: max-content !important;
    min-width: max-content !important;
    max-width: none !important;
    flex: 0 0 auto !important;
}
.atsr-btn-gradient .elementor-button .elementor-button-text,
.atsr-btn-outline .elementor-button .elementor-button-text,
.atsr-btn-dark .elementor-button .elementor-button-text,
.atsr-btn-outline-dark .elementor-button .elementor-button-text,
.atsr-btn-teal-outline .elementor-button .elementor-button-text,
.atsr-btn-solid .elementor-button .elementor-button-text,
.atsr-header-phone .elementor-button .elementor-button-text {
    white-space: nowrap !important;
}

/* ── Bug 2 follow-up fix 6 (2026-06-06): honour Elementor "justify" align ──
 * The base width:max-content above is for the hero pill CTAs (label must not
 * wrap/clip). But it ALSO hit single buttons whose Elementor widget is set to
 * align = justify (stretch full-width) — e.g. the industry "Explore … Pathways"
 * CTAs ([class*="atsr-btn-"].elementor-align-justify, one per card). Those
 * shrank to text-width ("Explore Hospitality Pathways" = 300px in a 354px card)
 * instead of spanning the card. When the author chose justify, honour it →
 * full width, at ALL breakpoints. Verified live on /industries/ (atsrpl.com.au).
 * Hero CTAs are align = CENTER on desktop (not justify) so they keep their
 * max-content pill; only justify widgets are affected. */
[class*="atsr-btn-"].elementor-align-justify .elementor-button,
[class*="atsr-btn-"].elementor-align-justify .elementor-button-link {
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    flex: 1 1 auto !important;
}

/* Two adjacent atsr-btn buttons in one flex container (e.g. hero CTAs in
 * container .elementor-element-414c0d9): size + gap.
 *
 * The atsr-btn-* class sits on the Elementor WIDGET WRAPPER, but the inner
 * <a> was set to width:max-content while the wrapper kept its narrow
 * Elementor width. So the <a> overflowed its own wrapper and spilled over
 * the neighbouring button (overlap). A margin between wrappers couldn't fix
 * it because the overflow was the <a> escaping wrapper 1, not a wrapper gap.
 *
 * Fix: when two atsr-btn widgets are siblings, shrink BOTH WRAPPERS to their
 * content too (`:has(+ sibling)` catches the first, `+` catches the second),
 * so the <a> sits inside its wrapper. Then a real gap separates them.
 * Scoped to PAIRS only, so standalone/full-width buttons are untouched.
 *
 * Exclude .atsr-qual-card-rich-btn — those are stacked full-width pills
 * inside qual cards and must NOT shrink to max-content (Bug 5 fix). */
[class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn):has(+ [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn)),
[class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn) + [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn) {
    width: max-content !important;
    max-width: 100% !important;
    flex: 0 0 auto !important;
}
[class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn) + [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn) {
    margin-left: 16px !important;
}
@media (max-width: 480px) {
    [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn) + [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn) {
        margin-left: 12px !important;
    }
}

/* Mid-range + tablet: scale font/padding down so single-line pills fit */
@media (max-width: 1366px) {
    .atsr-btn-gradient .elementor-button,
    .atsr-btn-outline .elementor-button,
    .atsr-btn-dark .elementor-button,
    .atsr-btn-outline-dark .elementor-button,
    .atsr-btn-teal-outline .elementor-button,
    .atsr-btn-solid .elementor-button,
    .atsr-header-phone .elementor-button {
        padding: clamp(12px, 1.2vw, 18px) clamp(18px, 2vw, 32px) !important;
        font-size: clamp(13px, 1.1vw, 16px) !important;
    }
}

/* Small phones: tightest pill, still single line */
@media (max-width: 480px) {
    .atsr-btn-gradient .elementor-button,
    .atsr-btn-outline .elementor-button,
    .atsr-btn-dark .elementor-button,
    .atsr-btn-outline-dark .elementor-button,
    .atsr-btn-teal-outline .elementor-button,
    .atsr-btn-solid .elementor-button,
    .atsr-header-phone .elementor-button {
        padding: 11px 16px !important;
        font-size: 13px !important;
    }
}

/* ── Bug 2 follow-up fix 5 (2026-06-06): scope max-content to desktop ──
 * The base width:max-content rule (above) and the sibling-pair rule had NO
 * media query, so they forced EVERY atsr-btn pill to text-width at ALL
 * widths. On mobile Elementor's default full-width (100%) buttons are
 * wanted; the global !important clobbered them → mobile + industry/qual
 * siblings shrank to blobs/text-width. The blob fix is only needed on
 * desktop (≥1025px), so restore full-width below 1025px. */
@media (max-width: 1024px) {
    .atsr-btn-gradient .elementor-button,
    .atsr-btn-outline .elementor-button,
    .atsr-btn-dark .elementor-button,
    .atsr-btn-outline-dark .elementor-button,
    .atsr-btn-teal-outline .elementor-button,
    .atsr-btn-solid .elementor-button,
    [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn):has(+ [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn)),
    [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn) + [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn) {
        width: 100% !important;
        min-width: 0 !important;
        max-width: 100% !important;
        flex: 1 1 auto !important;
    }
    /* stacked full-width on mobile → no side gap, no overlap */
    [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn) + [class*="atsr-btn-"]:not(.atsr-qual-card-rich-btn) {
        margin-left: 0 !important;
    }
}

/* ── 1. atsr-btn-gradient ──
 * Gradient fill (green→lime). Dark navy text.
 * Hover: gradient slides, shimmer sweep, teal glow shadow.
 * Use on: dark backgrounds, CTA sections. */
.atsr-btn-gradient .elementor-button {
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 50%, #23E6A5 100%) !important;
    background-size: 200% 100% !important;
    background-position: 0% 0% !important;
    color: #1E4B4B !important;
    border: none !important;
    position: relative;
    overflow: hidden !important;
    vertical-align: middle !important;
    transition: background-position 0.5s ease, box-shadow 0.4s ease, transform 0.3s ease !important;
}
.atsr-btn-gradient .elementor-button .elementor-button-text {
    color: #1E4B4B !important;
    -webkit-text-fill-color: #1E4B4B !important;
}
.atsr-btn-gradient .elementor-button .elementor-button-icon svg {
    fill: #1E4B4B !important;
}
/* Shimmer sweep overlay */
.atsr-btn-gradient .elementor-button::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 60%;
    height: 100%;
    background: linear-gradient(
        105deg,
        transparent 20%,
        rgba(255, 255, 255, 0.35) 45%,
        rgba(255, 255, 255, 0.5) 50%,
        rgba(255, 255, 255, 0.35) 55%,
        transparent 80%
    );
    transition: left 0.6s ease;
    pointer-events: none;
    z-index: 1;
}
.atsr-btn-gradient .elementor-button:hover {
    background-position: 100% 0% !important;
    box-shadow: 0 8px 25px rgba(35, 230, 165, 0.35), 0 0 40px rgba(35, 230, 165, 0.15) !important;
    transform: translateY(-2px) !important;
    opacity: 1 !important;
}
.atsr-btn-gradient .elementor-button:hover::after {
    left: 130%;
}

/* ── 2. atsr-btn-outline (ENHANCED) ──
 * Gradient border (green→lime). Teal text.
 * Hover: border glows, background fills with subtle teal, text goes lime.
 * Use on: dark backgrounds, secondary CTAs. */
.atsr-btn-outline .elementor-button {
    transition: box-shadow 0.4s ease, transform 0.3s ease, background 0.3s ease !important;
}
.atsr-btn-outline .elementor-button:hover {
    background: rgba(35, 230, 165, 0.08) !important;
    box-shadow: 0 0 20px rgba(35, 230, 165, 0.25), 0 0 40px rgba(35, 230, 165, 0.08) !important;
    transform: translateY(-2px) !important;
    opacity: 1 !important;
}
.atsr-btn-outline .elementor-button:hover .elementor-button-icon svg,
.atsr-btn-outline .elementor-button:hover .elementor-button-icon svg path {
    fill: #CDFF6E !important;
}

/* ── 3. atsr-btn-dark ──
 * Dark navy fill. Lime text.
 * Hover: background lightens, text shifts to gradient, lift + glow.
 * Use on: gradient/light backgrounds, hero CTAs. */
.atsr-btn-dark .elementor-button {
    background: #1A4D4D !important;
    border: none !important;
    position: relative;
    overflow: hidden !important;
    vertical-align: middle !important;
    transition: box-shadow 0.4s ease, transform 0.3s ease, background 0.3s ease !important;
}
.atsr-btn-dark .elementor-button .elementor-button-text {
    color: #D0FF71 !important;
    -webkit-text-fill-color: #D0FF71 !important;
    transition: color 0.3s ease !important;
}
.atsr-btn-dark .elementor-button .elementor-button-icon svg {
    fill: #CDFF6E !important;
    transition: fill 0.3s ease !important;
}
/* Gradient sweep underlay on hover */
.atsr-btn-dark .elementor-button::before {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg, #1A4D4D 0%, #245E5E 50%, #1A4D4D 100%);
    background-size: 200% 100%;
    background-position: 0% 0%;
    transition: background-position 0.6s ease;
    z-index: 0;
    border-radius: inherit;
}
.atsr-btn-dark .elementor-button > * {
    position: relative;
    z-index: 1;
}
.atsr-btn-dark .elementor-button:hover {
    box-shadow: 0 10px 30px rgba(26, 77, 77, 0.4), 0 0 20px rgba(35, 230, 165, 0.15) !important;
    transform: translateY(-2px) !important;
    opacity: 1 !important;
}
.atsr-btn-dark .elementor-button:hover::before {
    background-position: 100% 0%;
}
.atsr-btn-dark .elementor-button:hover .elementor-button-text {
    color: #23E6A5 !important;
    -webkit-text-fill-color: #23E6A5 !important;
}
.atsr-btn-dark .elementor-button:hover .elementor-button-icon svg {
    fill: #23E6A5 !important;
}

/* ── 4. atsr-btn-outline-dark ──
 * Dark border, dark text on light/gradient backgrounds.
 * Hover: dark fill sweeps in from left, text turns lime.
 * Use on: gradient backgrounds, hero secondary CTAs. */
.atsr-btn-outline-dark .elementor-button {
    background: transparent !important;
    border: 1px solid #1A4D4D !important;
    position: relative;
    overflow: hidden !important;
    vertical-align: middle !important;
    z-index: 1;
    transition: border-color 0.4s ease, transform 0.3s ease, box-shadow 0.4s ease !important;
}
.atsr-btn-outline-dark .elementor-button .elementor-button-text {
    color: #1A4D4D !important;
    -webkit-text-fill-color: #1A4D4D !important;
    transition: color 0.35s ease 0.05s !important;
    position: relative;
    z-index: 2;
}
.atsr-btn-outline-dark .elementor-button .elementor-button-icon svg {
    fill: #1A4D4D !important;
    transition: fill 0.35s ease 0.05s !important;
    position: relative;
    z-index: 2;
}
/* Fill sweep from left */
/* Sweep fill — GPU-composited scaleX instead of width. Width animation
   causes white corner artifacts inside pill-shape (border-radius:9999px)
   buttons due to repaint glitches. Same fix as atsr-btn-outline-green
   and atsr-header-phone. */
.atsr-btn-outline-dark .elementor-button::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: #1A4D4D;
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform 0.4s cubic-bezier(0.22, 0.61, 0.36, 1);
    z-index: 0;
    border-radius: inherit;
}
.atsr-btn-outline-dark .elementor-button:hover {
    border-color: #1A4D4D !important;
    transform: translateY(-2px) !important;
    box-shadow: 0 8px 25px rgba(26, 77, 77, 0.25) !important;
    opacity: 1 !important;
}
.atsr-btn-outline-dark .elementor-button:hover::before {
    transform: scaleX(1);
}
.atsr-btn-outline-dark .elementor-button:hover .elementor-button-text {
    color: #CDFF6E !important;
    -webkit-text-fill-color: #CDFF6E !important;
}
.atsr-btn-outline-dark .elementor-button:hover .elementor-button-icon svg {
    fill: #CDFF6E !important;
}

/* ── 5. atsr-btn-teal-outline ──
 * Teal border, teal text on white backgrounds.
 * Hover: teal fill sweeps in from left, text turns white.
 * Use on: white sections, cards, "Learn More" / "Explore" links. */
.atsr-btn-teal-outline .elementor-button {
    background: transparent !important;
    border: 1.5px solid #23E6A5 !important;
    position: relative;
    overflow: hidden !important;
    vertical-align: middle !important;
    z-index: 1;
    transition: border-color 0.4s ease, transform 0.3s ease, box-shadow 0.4s ease !important;
}
.atsr-btn-teal-outline .elementor-button .elementor-button-text {
    color: #23E6A5 !important;
    -webkit-text-fill-color: #23E6A5 !important;
    transition: color 0.35s ease 0.05s !important;
    position: relative;
    z-index: 2;
}
.atsr-btn-teal-outline .elementor-button .elementor-button-icon svg {
    fill: #23E6A5 !important;
    transition: fill 0.35s ease 0.05s !important;
    position: relative;
    z-index: 2;
}
.atsr-btn-teal-outline .elementor-button .elementor-button-icon svg path {
    fill: #23E6A5 !important;
    transition: fill 0.35s ease 0.05s !important;
}
/* Fill sweep from left — GPU-composited scaleX to avoid corner
   repaint glitch on pill-shaped buttons (same fix as atsr-header-phone) */
.atsr-btn-teal-outline .elementor-button::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: linear-gradient(90deg, #23E6A5 0%, #1DD699 100%);
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform 0.4s cubic-bezier(0.22, 0.61, 0.36, 1);
    z-index: 0;
    border-radius: inherit;
}
.atsr-btn-teal-outline .elementor-button:hover {
    border-color: #23E6A5 !important;
    transform: translateY(-2px) !important;
    box-shadow: 0 6px 20px rgba(35, 230, 165, 0.2) !important;
    opacity: 1 !important;
}
.atsr-btn-teal-outline .elementor-button:hover::before {
    transform: scaleX(1);
}
.atsr-btn-teal-outline .elementor-button:hover .elementor-button-text {
    color: #FFFFFF !important;
    -webkit-text-fill-color: #FFFFFF !important;
}
.atsr-btn-teal-outline .elementor-button:hover .elementor-button-icon svg,
.atsr-btn-teal-outline .elementor-button:hover .elementor-button-icon svg path {
    fill: #FFFFFF !important;
}

/* ── 6. atsr-btn-solid ──
 * Solid teal fill, white text.
 * Hover: morphs to gradient (teal→lime), lift + glow.
 * Use on: forms, footers, general CTAs. */
.atsr-btn-solid .elementor-button {
    background: #23E6A5 !important;
    border: none !important;
    position: relative;
    overflow: hidden !important;
    vertical-align: middle !important;
    transition: box-shadow 0.4s ease, transform 0.3s ease !important;
}
.atsr-btn-solid .elementor-button .elementor-button-text {
    color: #FFFFFF !important;
    -webkit-text-fill-color: #FFFFFF !important;
    transition: color 0.3s ease !important;
    position: relative;
    z-index: 2;
}
.atsr-btn-solid .elementor-button .elementor-button-icon svg {
    fill: #FFFFFF !important;
    transition: fill 0.3s ease !important;
    position: relative;
    z-index: 2;
}
/* Gradient reveal layer */
.atsr-btn-solid .elementor-button::before {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 100%);
    opacity: 0;
    transition: opacity 0.4s ease;
    z-index: 0;
    border-radius: inherit;
}
.atsr-btn-solid .elementor-button:hover {
    box-shadow: 0 8px 25px rgba(35, 230, 165, 0.35), 0 0 40px rgba(205, 255, 110, 0.12) !important;
    transform: translateY(-2px) !important;
    opacity: 1 !important;
}
.atsr-btn-solid .elementor-button:hover::before {
    opacity: 1;
}
.atsr-btn-solid .elementor-button:hover .elementor-button-text {
    color: #0C0E3A !important;
    -webkit-text-fill-color: #0C0E3A !important;
}
.atsr-btn-solid .elementor-button:hover .elementor-button-icon svg {
    fill: #0C0E3A !important;
}

/* ── SVG path fill overrides (custom inline SVGs have fill on <path>) ── */
.atsr-btn-gradient .elementor-button .elementor-button-icon svg path {
    fill: #0C0E3A !important;
}
.atsr-btn-outline .elementor-button .elementor-button-icon svg path {
    fill: #23E6A5 !important;
    transition: fill 0.3s ease !important;
}
.atsr-btn-dark .elementor-button .elementor-button-icon svg path {
    fill: #CDFF6E !important;
    transition: fill 0.3s ease !important;
}
.atsr-btn-dark .elementor-button:hover .elementor-button-icon svg path {
    fill: #23E6A5 !important;
}
.atsr-btn-outline-dark .elementor-button .elementor-button-icon svg path {
    fill: #1A4D4D !important;
    transition: fill 0.35s ease 0.05s !important;
}
.atsr-btn-outline-dark .elementor-button:hover .elementor-button-icon svg path {
    fill: #CDFF6E !important;
}
.atsr-btn-solid .elementor-button .elementor-button-icon svg path {
    fill: #FFFFFF !important;
    transition: fill 0.3s ease !important;
}
.atsr-btn-solid .elementor-button:hover .elementor-button-icon svg path {
    fill: #0C0E3A !important;
}

/* ── Mobile touch support: activate hover effects on tap ── */
@media (hover: none) and (pointer: coarse) {
    /* Arrow slides on active (tap) instead of hover */
    .atsr-btn-gradient:active .elementor-button-icon,
    .atsr-btn-outline:active .elementor-button-icon,
    .atsr-btn-dark:active .elementor-button-icon,
    .atsr-btn-outline-dark:active .elementor-button-icon,
    .atsr-btn-teal-outline:active .elementor-button-icon,
    .atsr-btn-solid:active .elementor-button-icon {
        transform: translateX(5px) !important;
    }

    /* 1. atsr-btn-gradient */
    .atsr-btn-gradient:active .elementor-button {
        background-position: 100% 0% !important;
        box-shadow: 0 8px 25px rgba(35, 230, 165, 0.3) !important;
    }

    /* 2. atsr-btn-outline */
    .atsr-btn-outline:active .elementor-button {
        background: rgba(35, 230, 165, 0.08) !important;
        box-shadow: 0 0 20px rgba(35, 230, 165, 0.15) !important;
    }

    /* 3. atsr-btn-dark */
    .atsr-btn-dark:active .elementor-button {
        box-shadow: 0 10px 30px rgba(26, 77, 77, 0.4), 0 0 20px rgba(35, 230, 165, 0.15) !important;
    }
    .atsr-btn-dark:active .elementor-button::before {
        background-position: 100% 0%;
    }
    .atsr-btn-dark:active .elementor-button .elementor-button-text {
        color: #23E6A5 !important;
        -webkit-text-fill-color: #23E6A5 !important;
    }
    .atsr-btn-dark:active .elementor-button .elementor-button-icon svg,
    .atsr-btn-dark:active .elementor-button .elementor-button-icon svg path {
        fill: #23E6A5 !important;
    }

    /* 4. atsr-btn-outline-dark */
    .atsr-btn-outline-dark:active .elementor-button::before {
        width: 100%;
    }
    .atsr-btn-outline-dark:active .elementor-button .elementor-button-text {
        color: #CDFF6E !important;
        -webkit-text-fill-color: #CDFF6E !important;
    }
    .atsr-btn-outline-dark:active .elementor-button .elementor-button-icon svg,
    .atsr-btn-outline-dark:active .elementor-button .elementor-button-icon svg path {
        fill: #CDFF6E !important;
    }

    /* 5. atsr-btn-teal-outline */
    .atsr-btn-teal-outline:active .elementor-button::before {
        width: 100%;
    }
    .atsr-btn-teal-outline:active .elementor-button {
        border-color: #23E6A5 !important;
        box-shadow: 0 6px 20px rgba(35, 230, 165, 0.2) !important;
    }
    .atsr-btn-teal-outline:active .elementor-button .elementor-button-text {
        color: #FFFFFF !important;
        -webkit-text-fill-color: #FFFFFF !important;
    }
    .atsr-btn-teal-outline:active .elementor-button .elementor-button-icon svg,
    .atsr-btn-teal-outline:active .elementor-button .elementor-button-icon svg path {
        fill: #FFFFFF !important;
    }

    /* 6. atsr-btn-solid */
    .atsr-btn-solid:active .elementor-button {
        box-shadow: 0 8px 25px rgba(35, 230, 165, 0.35), 0 0 40px rgba(205, 255, 110, 0.12) !important;
    }
    .atsr-btn-solid:active .elementor-button::before {
        opacity: 1;
    }
    .atsr-btn-solid:active .elementor-button .elementor-button-text {
        color: #0C0E3A !important;
        -webkit-text-fill-color: #0C0E3A !important;
    }
    .atsr-btn-solid:active .elementor-button .elementor-button-icon svg,
    .atsr-btn-solid:active .elementor-button .elementor-button-icon svg path {
        fill: #0C0E3A !important;
    }
}

/* ── Shimmer keyframe for atsr-btn-gradient ── */
@keyframes atsr-shimmer {
    0% { left: -100%; }
    100% { left: 130%; }
}

/* ── Logo Marquee: Pure CSS ── */
.atsr-logo-container {
    overflow: hidden !important;
    position: relative !important;
}

.atsr-marquee-track {
    display: flex !important;
    flex-wrap: nowrap !important;
    gap: 24px;
    width: max-content !important;
    animation: atsr-marquee-scroll var(--marquee-duration, 30s) linear infinite;
    will-change: transform;
}

.atsr-marquee-track:hover {
    animation-play-state: paused;
}

@keyframes atsr-marquee-scroll {
    0%   { transform: translateX(0); }
    100% { transform: translateX(var(--marquee-offset, -50%)); }
}

/* ── Logo Marquee: flat #1A4D4D teal tint by default → real colour on hover ──
   Logos sit as a single dark-teal monochrome while scrolling; hovering a
   single logo restores its real colours. The track also pauses on hover
   (rule above) so a paused logo can be clicked through to its training.gov.au
   RTO page (anchors injected by atsr-gsap-init.js).

   Recolour technique: grayscale → sepia → hue-rotate shifts the logo into a
   teal duotone WITHOUT brightness(0). This preserves luminance, so white/solid
   backgrounds stay light instead of collapsing into a solid teal block (which
   is what brightness(0) did to non-transparent logos). For an exact flat
   #1A4D4D look, the source logos must be transparent PNGs. */
.atsr-marquee-track img,
.atsr-marquee-track .elementor-widget-image img,
.atsr-marquee-track a img {
    /* FLAT #4A7474 monochrome to match the Figma design: brightness(0) turns the
     * logo into a solid silhouette, then the tint chain recolours it to #4A7474.
     * Every logo becomes the exact same flat teal — uniform, like the design.
     *
     * REQUIRES TRANSPARENT source logos. An opaque-background file (e.g. a .jpg
     * with a coloured/white background, or an .svg with a background rect) will
     * render as a solid teal RECTANGLE — that is the visual signal to replace it
     * with a transparent PNG/SVG. (AIBT/BTA/Colour Cosmetica needed this.)
     * !important so per-widget Elementor image filters can't override it. The
     * filter sits on the IMG only; the white card lives on the <a> wrapper below,
     * so the card itself is never tinted. */
    filter: brightness(0) saturate(100%) invert(43%) sepia(20%) saturate(520%)
            hue-rotate(140deg) brightness(92%) contrast(88%) !important;
    background: transparent !important;
    transition: filter 0.35s ease;
}

/* Hover restores real colour — needs !important to beat the !important base. */
.atsr-marquee-track .elementor-widget-image:hover img,
.atsr-marquee-track a:hover img,
.atsr-marquee-track img:hover {
    filter: none !important;
}

/* BTA hover: reveal the real logo on its original navy brand background
 * (#172c51). BTA's transparent PNG has no background, so on a white card its
 * light/yellow elements would vanish on hover — the navy restores the original
 * branding. Scoped to the BTA logo via :has() on its filename (matches the
 * cloned copies too). */
.atsr-marquee-track a:has(img[src*="Building-Trades" i]) {
    transition: background 0.3s ease, padding 0.3s ease;
}
.atsr-marquee-track a:has(img[src*="Building-Trades" i]):hover {
    background: #172c51 !important;
    border-radius: 12px !important;
    padding: 14px 18px !important;
}

/* Linked logos — anchor wrapper injected by JS. Keep it inline so it
   doesn't change the flex layout, and show a pointer on hover. */
.atsr-marquee-track a.atsr-logo-link {
    display: inline-flex;
    align-items: center;
    text-decoration: none;
    cursor: pointer;
}

/* Responsive logo sizing */
@media (max-width: 1024px) {
    /* Container was a fixed ~82px tall while the logo cards are 88px, so the card
       bottoms were clipped by overflow:hidden. Let it grow to fit the cards and
       give them vertical breathing room (overflow:hidden stays for the marquee). */
    .atsr-logo-container {
        height: auto !important;
        min-height: 108px !important;
        padding-top: 10px !important;
        padding-bottom: 10px !important;
        align-items: center !important;
    }
    .atsr-marquee-track {
        gap: 16px;
    }
    /* White card on the <a> wrapper (NOT the img — the flat-tint filter would
     * blacken an img background). The logo silhouette sits inside it. Light
     * border so the card reads on the white section, like the Figma cards. */
    .atsr-marquee-track a {
        display: inline-flex !important;
        align-items: center !important;
        justify-content: center !important;
        width: 128px !important;
        height: 88px !important;
        padding: 16px !important;
        box-sizing: border-box !important;
        background: #fff !important;
        border: 1px solid rgba(12, 14, 58, 0.06) !important;
        border-radius: 12px !important;
        box-shadow: 0 2px 8px rgba(12, 14, 58, 0.05) !important;
    }
    .atsr-marquee-track img,
    .atsr-marquee-track .elementor-widget img,
    .atsr-marquee-track .atsr-marquee-clone img {
        width: 100% !important;
        height: 100% !important;
        object-fit: contain !important;
        background: transparent !important;
        box-shadow: none !important;
        padding: 0 !important;
    }
}

@media (min-width: 1025px) and (max-width: 1024px) {
    .atsr-marquee-track {
        gap: 20px;
    }
    .atsr-marquee-track .elementor-widget img,
    .atsr-marquee-track .atsr-marquee-clone img {
        width: 150px !important;
        height: 70px !important;
        object-fit: contain !important;
    }
}

/* ==========================================================================
   20. RPL PROCESS — Full-Width Container + Panel Sizing + Gradient Text
   Section spans full viewport width. Side padding (96px desktop) provides
   content breathing room. v9 pins via GSAP (no runway wrapper).
   ========================================================================== */

/* Pinned section — full-width background, padded content.
   overflow: hidden clips the panel track so only one panel shows at a time.
   max-width removed — the user sets width:full in Elementor. The 1760px cap
   was leaving white gutters on wide monitors. Side padding (96px on desktop)
   keeps content inset from the edges. box-sizing keeps padding inside width. */
.atsr-rpl-pinned {
    max-width: 100%;
    margin-left: auto;
    margin-right: auto;
    width: 100%;
    box-sizing: border-box;
    overflow: hidden !important; /* MUST override Elementor to clip panels */
}

/* True desktop only (fine pointer): pad content 96px from edges (Figma gutter).
 * Excludes coarse-pointer tablets ≥1025px — they use the mobile layout. */
@media (min-width: 1025px) and (pointer: fine) {
    .atsr-rpl-pinned {
        padding-left: 96px !important;
        padding-right: 96px !important;
    }
    /* The step cards row + content span the full padded width (no extra
       inner max-width gutters that re-narrow the content). */
    .atsr-rpl-pinned .atsr-step-cards-row,
    .atsr-rpl-pinned .atsr-step-cards-row > .e-con-inner,
    .atsr-rpl-pinned .atsr-rpl-content {
        max-width: 100% !important;
        width: 100% !important;
    }
    /* Panel inner content: fill the padded width instead of the old 1291px
       box that left side gaps inside each panel on wide screens. */
    .atsr-rpl-panel .e-con-inner {
        max-width: 100% !important;
    }
}

/* Heading + subtitle — always visible inside pinned section */
.atsr-rpl-pinned .elementor-heading-title,
.atsr-rpl-pinned .elementor-text-editor {
    max-width: 100%;
}

/* Panel track — flex row, panels slide via translateX.
   NO overflow:hidden here — the track must extend beyond the section
   to hold all 4 panels. The SECTION clips via its own overflow:hidden. */
.atsr-rpl-panels {
    display: flex !important;
    flex-wrap: nowrap !important;
    gap: 0 !important;
}

/* Each individual panel — flex sizing handled by Section 9b
   (.atsr-rpl-panel { flex: 0 0 var(--atsr-panel-w) }).
   Overflow: clip (not auto) prevents scrollbars; Section 9b handles this. */

/* Active step card + gradient text — handled by Section 9b (line ~822)
   using double-background technique that works WITH border-radius.
   border-image approach removed: it breaks border-radius in all browsers. */

/* --- Panel step number (big "01" etc) — gradient text + typography --- */
.atsr-rpl-panel-number,
.atsr-rpl-panel-number .elementor-heading-title {
    font-family: 'Host Grotesk', sans-serif !important;
    font-weight: 700 !important;
    font-size: 72px !important;
    line-height: 1.1 !important;
    background: linear-gradient(135deg, #23E6A5 0%, #CDFF6E 100%) !important;
    -webkit-background-clip: text !important;
    background-clip: text !important;
    -webkit-text-fill-color: transparent !important;
    color: transparent !important;
    width: auto !important;
    min-width: 94px !important;
    flex-shrink: 0 !important;
    white-space: nowrap !important;
}

/* Mobile/tablet: smaller step number */
@media (max-width: 1024px), (pointer: coarse) {
    .atsr-rpl-panel-number,
    .atsr-rpl-panel-number .elementor-heading-title {
        font-size: 48px !important;
    }
}

/* --- Progress dots — active state --- */
.atsr-progress-dot.active {
    opacity: 1 !important;
    background: #23E6A5 !important;
}

/* Panel margin reset — keep margin:0 but preserve Section 9b's 16px border-radius.
 * The old border-radius:0 was for flush edge-to-edge panels, but current design
 * (Section 9b, Figma) uses rounded 16px panels with gap between them. */
.atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
    margin: 0 !important;
}

/* (Removed: was max-width:100% for <=1536px — now redundant since base is 100%) */
/* (Removed: was empty block for <=1024px) */

/* --- Responsive: short viewports (laptops ≤900px tall) ---
   Reinforcement rules — same as main compact block (section 9b)
   but placed after Elementor's generated CSS for source-order wins.
   MUST match main block values exactly. */
@media (max-height: 960px) and (min-width: 1025px) {
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
        padding: 12px 25px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-rpl-panel-number,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-rpl-panel-number .elementor-heading-title,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-heading-title.atsr-rpl-panel-number {
        font-size: 40px !important;
    }
    /* Specificity fix: must match base rule (0,3,0) to override padding:16px 20px */
    .atsr-rpl-pinned.is-pinned .atsr-step-card {
        padding: 10px 14px !important;
    }
}

@media (max-height: 1025px) and (min-width: 1025px) {
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
        padding: 10px 24px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-rpl-panel-number,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .atsr-rpl-panel-number .elementor-heading-title,
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-heading-title.atsr-rpl-panel-number {
        font-size: 40px !important;
        min-width: 70px !important;
    }
    /* Specificity fix: must match base rule (0,3,0) to override padding:16px 20px */
    .atsr-rpl-pinned.is-pinned .atsr-step-card {
        padding: 8px 12px !important;
    }
}

/* --- Extra compact for short laptops (height <= 850px) --- */
@media (max-height: 850px) and (min-width: 1025px) {
    /* Aggressively compact panel padding */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel {
        padding: 8px 20px !important;
    }
    
    /* Compact H2 heading (excludes watermark) */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-heading-title:not(.atsr-rpl-panel-number) {
        font-size: 18px !important;
        margin-bottom: 0px !important;
        line-height: 1.25 !important;
    }
    
    /* Compact panel paragraph description */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-text-editor p {
        font-size: 12px !important;
        line-height: 1.3 !important;
        margin-bottom: 2px !important;
    }
    
    /* Compact checkmark list spacing and text */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-icon-list-items {
        gap: 2px !important;
    }
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-icon-list-text {
        font-size: 12px !important;
        line-height: 1.25 !important;
    }
    
    /* Tighter gaps inside panel child containers */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .e-con {
        gap: 4px !important;
        --container-widget-gap: 4px !important;
    }
    
    /* Compact CTA button sizing */
    .atsr-rpl-pinned.is-pinned .atsr-rpl-panel .elementor-button {
        padding: 8px 18px !important;
        font-size: 12px !important;
    }
    
    /* ── RPL Sidebar — ultra-compact overrides for shorter viewports ── */
    .atsr-rpl-sidebar [class*="elementor-widget"] > div,
    .atsr-rpl-sidebar .elementor-widget-container > div {
        gap: 4px !important;
        padding: 8px 10px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:first-child span {
        font-size: 12px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:first-child svg {
        width: 14px !important;
        height: 14px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) {
        gap: 4px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div {
        padding: 4px 6px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div > div:first-child {
        width: 28px !important;
        height: 28px !important;
        min-width: 28px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div > div:first-child svg {
        width: 14px !important;
        height: 14px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:nth-child(2) > div span {
        font-size: 11px !important;
        line-height: 1.2 !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child {
        padding: 6px 8px !important;
    }
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child span,
    .atsr-rpl-sidebar [class*="elementor-widget"] > div > div:last-child p {
        font-size: 10px !important;
        line-height: 1.2 !important;
    }
}

/* --- Responsive: mobile (<=1024px) --- */
@media (max-width: 1024px) {
    .atsr-rpl-pinned {
        padding-left: 16px;
        padding-right: 16px;
        max-width: 100%;
    }
}

/* ==========================================================================
   MOBILE — Global Overflow Prevention
   Prevents horizontal pan/scroll caused by elements with overflow:visible,
   width:max-content, or 100vw (which includes scrollbar width on desktop).
   ========================================================================== */
@media (max-width: 1024px) {
    html, body {
        overflow-x: hidden !important;
    }
}

/* ==========================================================================
   RPL SIMPLIFIED — Comparison Table Mobile Stacked Cards v2.2
   JS (atsr-comparison-swipe.js v2.2) reads .atsr-comparison-table data and
   inserts .atsr-comparison-cards BEFORE the table. CSS toggles visibility:
     ≤1024px → table hidden, cards shown
     >1024px → table shown, cards never created (safety display:none)
   Desktop table DOM is NEVER modified by JS.
   ========================================================================== */

/* Safety: hide cards on desktop (JS doesn't run, but just in case) */
.atsr-comparison-cards {
    display: none;
}

@media (max-width: 1024px) {
    /* Hide the desktop table on mobile */
    .atsr-comparison-table {
        display: none !important;
    }

    /* --- Stacked cards container --- */
    .atsr-comparison-cards {
        display: flex !important;
        flex-direction: column;
        gap: 16px;
        padding: 0;
    }

    /* --- Individual card --- */
    .atsr-comp-card {
        background: #f9fbf4;
        border-radius: 16px;
        overflow: hidden;
        box-shadow: 0 8px 32px rgba(12, 14, 58, 0.08), 0 2px 8px rgba(12, 14, 58, 0.04);
        will-change: transform, opacity;
    }
    .atsr-comp-card:nth-child(even) {
        background: #ffffff;
    }

    /* --- Card header (icon + label) --- */
    .atsr-comp-card__header {
        display: flex;
        align-items: center;
        gap: 12px;
        padding: 16px;
        border-bottom: 1px solid rgba(26, 77, 77, 0.08);
    }
    .atsr-comp-card__icon {
        display: flex;
        align-items: center;
        justify-content: center;
        flex-shrink: 0;
        /* No bg/size — SVGs have built-in 40×40 lime rounded-square */
    }
    .atsr-comp-card__icon svg {
        display: block;
    }
    .atsr-comp-card__title {
        font-size: 18px;
        font-weight: 700;
        color: #1a4d4d;
        margin: 0;
        line-height: 1.4em;
    }

    /* --- Card body (comparison rows) --- */
    .atsr-comp-card__body {
        display: flex;
        flex-direction: column;
    }
    .atsr-comp-card__row {
        padding: 16px;
    }
    .atsr-comp-card__row--trad {
        border-bottom: 1px solid rgba(26, 77, 77, 0.06);
    }
    .atsr-comp-card__row--rpl {
        background: linear-gradient(135deg, #f0fdf4 0%, #ffffff 100%);
    }

    /* --- Badges --- */
    .atsr-comp-card__badge {
        display: inline-flex;
        align-items: center;
        font-size: 11px;
        font-weight: 700;
        text-transform: uppercase;
        letter-spacing: 0.02em;
        padding: 4px 10px;
        border-radius: 6px;
        line-height: 1;
    }
    .atsr-comp-card__badge--trad {
        color: #1a4d4d;
        background: rgba(26, 77, 77, 0.08);
        margin-bottom: 8px;
    }
    .atsr-comp-card__badge--rpl {
        color: #1a4d4d;
        background: linear-gradient(90deg, rgba(35, 230, 165, 0.2) 0%, rgba(205, 255, 110, 0.2) 100%);
    }

    /* --- RPL badge wrap (check icon + badge text) --- */
    .atsr-comp-card__badge-wrap {
        display: flex;
        align-items: center;
        gap: 8px;
        margin-bottom: 8px;
    }
    .atsr-comp-card__check {
        display: flex;
        align-items: center;
        justify-content: center;
        flex-shrink: 0;
        /* No bg — Elementor SVG has built-in 24×24 gradient circle */
    }
    .atsr-comp-card__check svg {
        width: 24px;
        height: 24px;
        display: block;
    }

    /* --- Text content --- */
    .atsr-comp-card__text {
        font-size: 15px;
        line-height: 1.6;
        color: #1a4d4d;
        margin: 0;
    }
}

/* ==========================================================================
   QUALIFICATION SIDEBAR — Career Pathways Sticky Card
   Animated conic-gradient border that rotates with scroll (GSAP --border-angle).
   Matches .atsr-qual-sidebar-sticky design language.
   ========================================================================== */

.atsr-qual-sidebar-career-sticky {
    /* Not sticky — flows naturally below the sticky overview card */
    align-self: flex-start !important;
    border: 2px solid transparent !important;
    border-radius: 14px !important;
    background:
        linear-gradient(#0C0E3A, #0C0E3A) padding-box,
        conic-gradient(from var(--border-angle, 0deg), #23E6A5, #CDFF6E, #23E6A5) border-box !important;
    padding: 0 !important;
}

/* Reduce overview container padding to make sidebar more compact */
.atsr-qual-sidebar-sticky {
    padding: 16px !important;
}

/* ==========================================================================
   STICKY HEADER — see sticky_header.css (Elementor Custom Code).
   Do NOT add sticky header rules here — they live in Elementor Pro →
   Custom Code → "ATSR - Sticky Header Scroll State".
   ========================================================================== */

/* ==========================================================================
   FOOTER — Bottom bar separator line
   The footer bottom bar (.atsr-footer-bottom) should only have a thin
   top border as a visual separator. Kill all borders on the element and
   every possible Elementor inner wrapper, then re-apply only border-top.
   ========================================================================== */
.atsr-footer-bottom,
.atsr-footer-bottom > .elementor-container,
.atsr-footer-bottom > .e-con-inner,
.atsr-footer-bottom > .elementor-widget-wrap,
.atsr-footer-bottom > .elementor-column-wrap,
.atsr-footer-bottom > .elementor-row {
    border:        none !important;
    border-top:    1px solid rgba(255, 255, 255, 0.2) !important;
    border-bottom: none !important;
    border-left:   none !important;
    border-right:  none !important;
}

/* ==========================================================================
   CONTACT FORM CARD — .atsr-contact-form-card
   Applied to the Elementor container wrapping the "Get In Touch" form.
   Handles: white card with gradient border, shadow, field styling,
   inline SVG icons, and mobile responsive overrides.
   ========================================================================== */

/* ── Card Container ── */
.atsr-contact-form-card {
    background: #FFFFFF !important;
    border-radius: 16px !important;
    padding: 40px !important;
    /* Subtle, premium drop shadow matching Figma */
    box-shadow: 0 24px 48px 0 rgba(12, 14, 50, 0.04) !important;
    /* Needed for the gradient-border pseudo-element */
    position: relative !important;
    z-index: 1 !important;
    /* Constrain the card width on larger screens */
    max-width: 1025px;
    margin-left: auto;
    margin-right: auto;
}

/* ── 1px Gradient Border (green → lime) ──
 * Uses a mask trick: a pseudo-element draws the gradient,
 * then a mask cuts out the inner area, leaving only the 1px edge. */
.atsr-contact-form-card::before {
    content: "" !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: 16px !important;
    padding: 1px !important; /* This IS the border thickness */
    background: linear-gradient(135deg, #23E6A5, #3BE6A5, #CDFF6E) !important;
    -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0) !important;
    -webkit-mask-composite: xor !important;
    mask-composite: exclude !important;
    z-index: -1 !important;
    pointer-events: none !important;
}

/* ── Form Field Styling (inputs + textarea) ──
 * Matches Figma: soft mint-grey bg, no border, generous padding, 8px radius. */
.atsr-contact-form-card .elementor-field-group .elementor-field {
    background-color: #EDF3F1 !important;
    border: none !important;
    border-radius: 8px !important;
    padding: 16px 16px 16px 48px !important; /* Left padding makes room for icon */
    font-size: 15px !important;
    line-height: 1.5 !important;
    color: #1A3A3A !important;
    transition: box-shadow 0.2s ease, background-color 0.2s ease !important;
    min-height: 56px !important; /* Tall fields like Figma */
}

/* Placeholder text color (muted teal-grey) */
.atsr-contact-form-card .elementor-field-group .elementor-field::placeholder {
    color: #8FA6A0 !important;
    opacity: 1 !important;
}

/* Focus state: subtle green ring */
.atsr-contact-form-card .elementor-field-group .elementor-field:focus {
    outline: none !important;
    box-shadow: 0 0 0 2px rgba(35, 230, 165, 0.3) !important;
    background-color: #E6F0ED !important;
}

/* Textarea — taller min-height so users feel invited to write */
.atsr-contact-form-card .elementor-field-group .elementor-field-textual.elementor-field[type="textarea"],
.atsr-contact-form-card .elementor-field-group textarea.elementor-field {
    min-height: 140px !important;
    resize: vertical !important;
}

/* ── Field Labels ──
 * Bold, dark teal labels above each field. */
.atsr-contact-form-card .elementor-field-group .elementor-field-label {
    font-weight: 600 !important;
    color: #1A3A3A !important;
    font-size: 14px !important;
    margin-bottom: 8px !important;
}

/* ── SVG Icons Inside Input Fields ──
 * Each icon is an inline SVG data-URI set as the field background-image.
 * Positioned 16px from the left, vertically centered (except textarea). */

/* 1. Name Field — User/Person icon */
.atsr-contact-form-card .elementor-field-group:nth-child(1) .elementor-field {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23A0B3B0' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E") !important;
    background-repeat: no-repeat !important;
    background-position: 16px center !important;
    background-size: 20px 20px !important;
}

/* 2. Email Field — Envelope icon */
.atsr-contact-form-card .elementor-field-group:nth-child(2) .elementor-field {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23A0B3B0' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'/%3E%3Cpolyline points='22,6 12,13 2,6'/%3E%3C/svg%3E") !important;
    background-repeat: no-repeat !important;
    background-position: 16px center !important;
    background-size: 20px 20px !important;
}

/* 3. Phone Field — Phone icon */
.atsr-contact-form-card .elementor-field-group:nth-child(3) .elementor-field {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23A0B3B0' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'/%3E%3C/svg%3E") !important;
    background-repeat: no-repeat !important;
    background-position: 16px center !important;
    background-size: 20px 20px !important;
}

/* 4. Message Field — Chat bubble icon (pinned to top-left, not centered) */
.atsr-contact-form-card .elementor-field-group:nth-child(4) .elementor-field {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23A0B3B0' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'/%3E%3C/svg%3E") !important;
    background-repeat: no-repeat !important;
    background-position: 16px 18px !important; /* Top-aligned for textarea */
    background-size: 20px 20px !important;
}

/* ── Submit Button ──
 * Full-width gradient pill button matching the site's CTA style. */
.atsr-contact-form-card .elementor-field-group[class*="submit"] .elementor-button {
    width: 100% !important;
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 100%) !important;
    border: none !important;
    border-radius: 100px !important; /* Fully rounded pill */
    padding: 16px 32px !important;
    font-size: 16px !important;
    font-weight: 600 !important;
    color: #1A3A3A !important;
    cursor: pointer !important;
    transition: box-shadow 0.3s ease, transform 0.3s ease !important;
}
.atsr-contact-form-card .elementor-field-group[class*="submit"] .elementor-button:hover {
    box-shadow: 0 8px 25px rgba(35, 230, 165, 0.35) !important;
    transform: translateY(-2px) !important;
}
/* Button text + icon color */
.atsr-contact-form-card .elementor-field-group[class*="submit"] .elementor-button .elementor-button-text {
    color: #1A3A3A !important;
    -webkit-text-fill-color: #1A3A3A !important;
}
.atsr-contact-form-card .elementor-field-group[class*="submit"] .elementor-button .elementor-button-icon svg {
    fill: #1A3A3A !important;
}

/* ── Mobile Responsive (≤1024px) ── */
@media (max-width: 1024px) {
    .atsr-contact-form-card {
        padding: 24px !important;
        border-radius: 12px !important;
    }
    .atsr-contact-form-card::before {
        border-radius: 12px !important;
    }
    /* Slightly smaller fields on mobile */
    .atsr-contact-form-card .elementor-field-group .elementor-field {
        min-height: 48px !important;
        padding: 14px 14px 14px 44px !important;
        font-size: 14px !important;
    }
}

/* ==========================================================================
   26. NAVIGATION MENU CTAS (DISCOVER MORE)
   Applies lime green background to "Discover More" links in dropdowns.
   Targets specific archive URLs and also provides a reusable class.
   ========================================================================== */

/* Target the "Discover More" links (href ends in /industries/ or /qualifications/) or items with class list */
.elementor-nav-menu--dropdown a.elementor-sub-item[href$="/industries/"],
.elementor-nav-menu--dropdown a.elementor-sub-item[href$="/qualifications/"],
.elementor-nav-menu--dropdown .menu-item-cta a.elementor-sub-item {
    background-color: var(--atsr-secondary) !important;
    color: var(--atsr-foreground) !important;
    font-weight: 600 !important;
    /* Optional rounded corners at the bottom to match the dropdown container */
    border-bottom-left-radius: 8px; 
    border-bottom-right-radius: 8px;
    padding-right: 24px !important; /* Ensure icon doesn't touch the very edge */
    transition: background-color 0.2s ease, opacity 0.2s ease !important;
    display: flex !important;
    justify-content: space-between !important;
    align-items: center !important;
}

/* Hide icons inside the CTA "Discover More" links */
.elementor-nav-menu--dropdown a.elementor-sub-item[href$="/industries/"] svg,
.elementor-nav-menu--dropdown a.elementor-sub-item[href$="/qualifications/"] svg,
.elementor-nav-menu--dropdown .menu-item-cta a.elementor-sub-item svg,
.elementor-nav-menu--dropdown a.elementor-sub-item[href$="/industries/"] i,
.elementor-nav-menu--dropdown a.elementor-sub-item[href$="/qualifications/"] i,
.elementor-nav-menu--dropdown .menu-item-cta a.elementor-sub-item i {
    display: none !important;
}

/* Hover state for the CTA */
.elementor-nav-menu--dropdown a.elementor-sub-item[href$="/industries/"]:hover,
.elementor-nav-menu--dropdown a.elementor-sub-item[href$="/qualifications/"]:hover,
.elementor-nav-menu--dropdown .menu-item-cta a.elementor-sub-item:hover {
    background-color: #D0FF71 !important; /* Slightly lighter/brighter lime */
    opacity: 1 !important;
}

/* ==========================================================================
   26B. MOBILE NAV — SUB-MENU OVERLAP FIX (2026-04-24)
   Bug: hamburger open showed second-level menu items rendered ON TOP of their
   parent's row (e.g. "Business Services" stacked over "RPL Simplified").
   Cause: Elementor Pro's mobile dropdown markup leaks desktop absolute-position
   styles to sub-menus on certain viewport widths. Force every node in the
   dropdown into static block flow.
   ========================================================================== */

@media (max-width: 1024px) {
    .elementor-nav-menu--dropdown .sub-menu,
    .elementor-nav-menu--dropdown ul,
    .elementor-nav-menu .elementor-nav-menu--dropdown .sub-menu {
        position: static !important;
        transform: none !important;
        inset: auto !important;
        display: block;
        width: 100% !important;
        max-width: 100% !important;
        margin: 0 !important;
        padding: 0 !important;
        left: 0 !important;
        right: 0 !important;
        top: auto !important;
    }

    .elementor-nav-menu--dropdown li,
    .elementor-nav-menu--dropdown .menu-item,
    .elementor-nav-menu--dropdown .menu-item-has-children {
        position: static !important;
        display: block !important;
        width: 100% !important;
        float: none !important;
    }

    .elementor-nav-menu--dropdown li > a,
    .elementor-nav-menu--dropdown li > .elementor-item,
    .elementor-nav-menu--dropdown li > .elementor-sub-item {
        position: static !important;
        transform: none !important;
        width: 100% !important;
    }

    /* Sub-menu items — block layout, indent for hierarchy */
    .elementor-nav-menu--dropdown .sub-menu .elementor-sub-item {
        padding-left: 32px !important;
    }
    .elementor-nav-menu--dropdown .sub-menu .sub-menu .elementor-sub-item {
        padding-left: 48px !important;
    }
}


/* ── Back to Top ── */
.atsr-back-to-top {
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.3s ease, transform 0.3s ease;
    transform: translateY(12px);
    z-index: 999;
}
.atsr-back-to-top.atsr-btt-visible {
    opacity: 1;
    pointer-events: auto;
    transform: translateY(0);
}
.atsr-back-to-top:hover {
    transform: translateY(-2px);
}
@media (prefers-reduced-motion: reduce) {
    .atsr-back-to-top,
    .atsr-back-to-top.atsr-btt-visible {
        transition: none;
        transform: none;
    }
}

/* ── Fix M4 Mobile Heading Oversizing (Qualifications / FAQ / Hero overlap) ── */
@media screen and (max-width: 1024px) {
    .elementor-widget-heading h1.elementor-heading-title,
    .elementor-widget-heading h2.elementor-heading-title {
        line-height: 1.2 !important;
    }
    
    .elementor-widget-heading h1.elementor-heading-title {
        font-size: clamp(34px, 8vw, 42px) !important;
        padding-bottom: 5px;
    }
}


/* ==========================================================================
   19. BOOKING FORM — [atsr_booking_form]
   Figma: 7619:49293 — "Pick a Time That Works For You"
   ========================================================================== */

/* ── Card container ── */
.atsr-booking {
    background: #fff;
    border: 1px solid #23E6A5;
    border-radius: 8px;
    padding: 32px;
    box-shadow: 0 16px 32px rgba(12, 14, 58, 0.04);
    display: flex;
    flex-direction: column;
    gap: 48px;
    font-family: "Host Grotesk", sans-serif;
    max-width: 1020px;
    margin: 0 auto;
}

/* ── Header ── */
.atsr-booking__header {
    text-align: center;
    display: flex;
    flex-direction: column;
    gap: 16px;
}
.atsr-booking__title {
    font-family: "Host Grotesk", sans-serif;
    font-weight: 700;
    font-size: 32px;
    line-height: 1.3;
    color: #1A4D4D;
    margin: 0;
}
.atsr-booking__subtitle {
    font-family: "Host Grotesk", sans-serif;
    font-weight: 400;
    font-size: 20px;
    line-height: 1.4;
    color: #1A4D4D;
    margin: 0;
}

/* ── Section labels & Accordion Wrappers ── */
details.atsr-booking__section {
    background: #ffffff;
    border: 1px solid rgba(26, 77, 77, 0.1);
    border-radius: 12px;
    padding: 16px;
    transition: border-color 0.3s ease;
}
details.atsr-booking__section[open] {
    border-color: #23E6A5;
}
.atsr-booking__label {
    display: flex;
    align-items: center;
    justify-content: space-between;
    cursor: pointer;
    list-style: none;
}
.atsr-booking__label::-webkit-details-marker,
.atsr-booking__label::marker {
    display: none;
    content: "";
}
details.atsr-booking__section[open] .atsr-booking__label {
    margin-bottom: 20px;
}
.atsr-booking__chevron {
    flex-shrink: 0;
    transition: transform 0.3s ease;
}
details.atsr-booking__section[open] .atsr-booking__chevron {
    transform: rotate(180deg);
}
.atsr-booking__label span {
    font-family: "Host Grotesk", sans-serif;
    font-weight: 700;
    font-size: 20px;
    line-height: 1.3;
    color: #1A4D4D;
}
.atsr-booking__label svg {
    flex-shrink: 0;
}

/* ── Date & Time button grids ── */
.atsr-booking__dates {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 12px;
}
.atsr-booking__times {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: 12px;
}

/* ── Pill buttons (shared) ── */
.atsr-booking__btn {
    height: 47px;
    border-radius: 12px;
    border: none;
    cursor: pointer;
    font-family: "Host Grotesk", sans-serif;
    font-weight: 400;
    font-size: 14px;
    line-height: 1.4;
    color: #1A4D4D;
    background: #EBFFF6;
    text-align: center;
    white-space: nowrap;
    transition: background 0.2s ease, font-weight 0.15s ease;
    padding: 0 12px;
}
.atsr-booking__btn:hover {
    background: #d4ffe9;
}
.atsr-booking__btn--active {
    background: #27EAA6;
    font-weight: 700;
}
.atsr-booking__btn:disabled {
    opacity: 0.5;
    cursor: default;
}

/* ── Form section (below divider) ── */
.atsr-booking__form-section {
    border-top: 1px solid #E5FFF5;
    padding-top: 25px;
    display: flex;
    flex-direction: column;
    gap: 24px;
}

/* ── Form header ── */
.atsr-booking__form-header {
    text-align: center;
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.atsr-booking__form-title {
    font-family: "Host Grotesk", sans-serif;
    font-weight: 700;
    font-size: 24px;
    line-height: 1.3;
    color: #1A4D4D;
    margin: 0;
}
.atsr-booking__form-subtitle {
    font-family: "Host Grotesk", sans-serif;
    font-weight: 400;
    font-size: 16px;
    line-height: 1.4;
    color: #1A4D4D;
    opacity: 0.7;
    margin: 0;
}

/* ── Input fields ── */
.atsr-booking__field {
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.atsr-booking__field-label {
    font-family: "Host Grotesk", sans-serif;
    font-weight: 700;
    font-size: 18px;
    line-height: 1.3;
    color: #1A4D4D;
}
.atsr-booking__input-wrap {
    display: flex;
    align-items: center;
    gap: 8px;
    background: #E8F5F1;
    border-radius: 24px;
    padding: 12px 16px;
    height: 54px;
    box-sizing: border-box;
}
.atsr-booking__input-wrap svg {
    flex-shrink: 0;
}
.atsr-booking__input-wrap input,
.atsr-booking__input-wrap select {
    flex: 1;
    border: none;
    background: transparent;
    font-family: "Host Grotesk", sans-serif;
    font-size: 16px;
    color: #1A4D4D;
    outline: none;
    line-height: normal;
}
.atsr-booking__input-wrap input::placeholder {
    color: rgba(26, 77, 77, 0.5);
}
.atsr-booking__input-wrap select {
    -webkit-appearance: none;
    appearance: none;
    cursor: pointer;
}
.atsr-booking__input-wrap--select {
    position: relative;
}
.atsr-booking__input-wrap--select::after {
    content: '';
    width: 10px;
    height: 10px;
    border-right: 2px solid #1A4D4D;
    border-bottom: 2px solid #1A4D4D;
    transform: rotate(45deg);
    flex-shrink: 0;
    margin-top: -4px;
}

/* ── Notice box ── */
.atsr-booking__notice {
    background: #F5FFFB;
    border: 1px solid #23E6A5;
    border-radius: 16px;
    padding: 25px;
}
.atsr-booking__notice p {
    font-family: "Host Grotesk", sans-serif;
    font-weight: 400;
    font-size: 14px;
    line-height: 1.4;
    color: #1A4D4D;
    opacity: 0.8;
    text-align: center;
    margin: 0;
}

/* ── Submit button ── */
.atsr-booking__submit {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 100%;
    height: 58px;
    border: none;
    border-radius: 9999px;
    background: linear-gradient(90deg, #23E6A5 0%, #CDFF6E 100%);
    cursor: pointer;
    padding: 19px 32px;
    transition: opacity 0.2s ease, transform 0.15s ease;
}
.atsr-booking__submit span {
    font-family: "Host Grotesk", "Host Grotesk", sans-serif;
    font-weight: 600;
    font-size: 16px;
    line-height: 20px;
    color: #1E4B4B;
}
.atsr-booking__submit svg {
    color: #1E4B4B;
    flex-shrink: 0;
}
.atsr-booking__submit:hover:not(:disabled) {
    opacity: 0.9;
    transform: translateY(-1px);
}
.atsr-booking__submit:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

/* ── Status message ── */
.atsr-booking__status {
    text-align: center;
    font-family: "Host Grotesk", sans-serif;
    font-size: 14px;
    line-height: 1.4;
    min-height: 0;
}
.atsr-booking__status:empty {
    display: none;
}
.atsr-booking__status--success {
    color: #1A4D4D;
    background: #EBFFF6;
    padding: 12px 16px;
    border-radius: 12px;
}
.atsr-booking__status--error {
    color: #c0392b;
    background: #fdf2f2;
    padding: 12px 16px;
    border-radius: 12px;
}

/* ── Mobile responsive ── */
@media (max-width: 768px) {
    .atsr-booking {
        padding: 20px 16px;
        gap: 32px;
    }
    .atsr-booking__title {
        font-size: 24px;
    }
    .atsr-booking__subtitle {
        font-size: 16px;
    }
    .atsr-booking__dates {
        grid-template-columns: repeat(3, 1fr);
    }
    .atsr-booking__times {
        grid-template-columns: repeat(3, 1fr);
    }
    .atsr-booking__btn {
        font-size: 13px;
        height: 42px;
        padding: 0 8px;
    }
    .atsr-booking__form-title {
        font-size: 20px;
    }
    .atsr-booking__label span {
        font-size: 16px;
    }
}

@media (max-width: 480px) {
    .atsr-booking__dates {
        grid-template-columns: repeat(2, 1fr);
    }
    .atsr-booking__times {
        grid-template-columns: repeat(2, 1fr);
    }
}

/* ==========================================================================
   20. GHL FORM STATUS MESSAGES
   Used by forms submitting via atsr-ghl-forms.js (contact, book-a-consult,
   eligibility fallback). Shown inline after submit attempt.
   ========================================================================== */

.atsr-ghl-form-status {
    font-family: "Host Grotesk", sans-serif;
    font-size: 14px;
    line-height: 1.5;
    padding: 12px 16px;
    border-radius: 12px;
    margin-top: 12px;
    text-align: center;
}
.atsr-ghl-form-status:empty {
    display: none;
}
.atsr-ghl-form-status--pending {
    background: #F5FFFB;
    color: #1A4D4D;
    border: 1px solid #E5FFF5;
}
.atsr-ghl-form-status--success {
    background: #EBFFF6;
    color: #1A4D4D;
    border: 1px solid #23E6A5;
    font-weight: 600;
}
.atsr-ghl-form-status--error {
    background: #fdf2f2;
    color: #c0392b;
    border: 1px solid #f5c6cb;
}

/* ==========================================================================
   21. GLOBAL OVERRIDES
   Force relative logo path to prevent broken logos on domain clones
   ========================================================================== */
.atsr-header-logo img {
    content: url('/wp-content/uploads/2026/03/ATSR-Logo-Final-H.png') !important;
}

/* ==========================================================================
   22. RELATED QUALIFICATIONS — [atsr_qual_related]
   Cards REUSE the homepage `.atsr-fea-industries-card` class, so they inherit
   that block's exact chrome + hover (lift -8px + two-layer shadow, image
   zoom scale(1.06), card transition). Here we add only: section/grid layout,
   image box, content padding, title, description, and the CTA (arrow slide +
   growing underline + title→green) — all fired by the shared card hover so the
   button animation matches Featured Industries.
   3-up desktop → 2-up tablet → 1-up phone.
   ========================================================================== */
.atsr-qual-related {
    width: 100%;
    /* background + padding set on the Elementor container by the editor */
}
.atsr-qual-related .atsr-qual-related__heading {
    font-family: "Host Grotesk", sans-serif;
    font-weight: 700;
    font-size: 48px;
    line-height: 1.2;
    color: #1A4D4D;
    text-align: center;
    margin: 0 0 32px;
}
@media (max-width: 768px) {
    .atsr-qual-related .atsr-qual-related__heading { font-size: 32px; }
}
.atsr-qual-related__grid {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 28px;
    align-items: stretch;
    max-width: 1140px;
    margin: 0 auto;
}
.atsr-qual-related__grid > * {
    flex: 1 1 300px;
    max-width: 380px;
    min-width: 0;
}

/* Chrome (bg/radius/overflow/lift/shadow) comes from .atsr-fea-industries-card.
   Just make it a clean, full-height clickable block with predictable spacing. */
.atsr-qual-related-card {
    /* Must be a flex column so __body can flex:1 and push the CTA to the bottom. */
    display: flex;
    flex-direction: column;
    /* height:auto — NOT 100%. `align-items:stretch` on the grid only stretches items
       whose cross-size is auto; an explicit height cancels it, and 100% against an
       auto-height flex container is indefinite. That made every card fall back to its
       own content height, so cards ended up uneven and the CTAs never lined up. */
    height: auto;
    text-decoration: none;
    background: #FFFFFF;        /* the shared class supplies chrome only; set card bg here */
    gap: 0 !important;          /* control spacing via body padding, not flex gap */
}

/* Image — full-bleed top; zoom-on-hover inherited (.atsr-fea-industries-card:hover img). */
.atsr-qual-related-card__media {
    position: relative;
    aspect-ratio: 16 / 10;
    overflow: hidden;
    background: linear-gradient(135deg, #23E6A5, #CDFF6E);
}
.atsr-qual-related-card__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.atsr-qual-related-card__media-fallback {
    position: absolute;
    inset: 0;
    background: linear-gradient(135deg, #23E6A5, #CDFF6E);
}

.atsr-qual-related-card__body {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    padding: 22px 24px 26px;
}
.atsr-qual-related .atsr-qual-related-card__title {
    font-family: "Host Grotesk", sans-serif;
    font-weight: 700;
    font-size: 24px;
    line-height: 1.3;
    color: #1A4D4D;
    margin: 0 0 10px;
    transition: color 0.3s ease;
}
.atsr-qual-related .atsr-qual-related-card__desc {
    font-family: "Host Grotesk", sans-serif;
    font-size: 16px;
    line-height: 1.6;
    color: rgba(26, 77, 77, 0.8);
    margin: 0 0 18px;
}

/* CTA — arrow slide + growing underline (mirrors the Featured Industries button). */
.atsr-qual-related .atsr-qual-related-card__cta {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin-top: auto;
    font-family: "Host Grotesk", sans-serif;
    font-weight: 700;
    font-size: 16px;
    color: #23E6A5;
    transition: color 0.3s ease;
}
.atsr-qual-related-card__cta-text {
    position: relative;
    transition: transform 0.45s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.atsr-qual-related-card__cta-text::after {
    content: "";
    position: absolute;
    left: 0;
    bottom: -3px;
    height: 2px;
    width: 0;
    background: #23E6A5;
    transition: width 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.atsr-qual-related-card__cta svg {
    flex: none;
    transition: transform 0.45s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
/* fired by the shared card hover — mirrors the Featured Industries button:
   arrow flies right across the label, label nudges left, underline sweeps in. */
.atsr-fea-industries-card.atsr-qual-related-card:hover .atsr-qual-related-card__title { color: #23E6A5; }
.atsr-fea-industries-card.atsr-qual-related-card:hover .atsr-qual-related-card__cta svg { transform: translateX(140px); }
.atsr-fea-industries-card.atsr-qual-related-card:hover .atsr-qual-related-card__cta-text { transform: translateX(-26px); }
.atsr-fea-industries-card.atsr-qual-related-card:hover .atsr-qual-related-card__cta-text::after { width: 100%; }

/* The grid is flexbox, not CSS grid — `grid-template-columns` here was a no-op left
   over from an earlier version. It already reflows 3-up → 2-up → 1-up via
   `flex: 1 1 300px`, so only the gaps (and the 1-up basis) need setting. */
@media (max-width: 1024px) {
    .atsr-qual-related__grid { gap: 20px; }
}
@media (max-width: 600px) {
    .atsr-qual-related__grid { gap: 18px; }
    .atsr-qual-related__grid > * { flex-basis: 100%; max-width: 100%; }
    .atsr-qual-related__heading { margin-bottom: 22px; }
    .atsr-qual-related-card__body { padding: 20px 20px 22px; }
}


