/*
Theme Name:   Golden Eagle GS (Child)
Theme URI:    https://goldeneaglegs.com
Description:  Premium Enterprise WordPress Theme for Golden Eagle GS. Designed specifically for overseas recruitment, government services, visa processing, tourism, and business services. Built for Elementor Pro with enterprise architecture, high performance, scalability, accessibility, and SEO best practices. This child theme provides only the structural CSS overrides not achievable through Elementor Pro's native controls — all primary visual design (colors, typography, spacing) is governed by Elementor Global Settings.
Author:       Golden Eagle GS
Author URI:   https://goldeneaglegs.com
Template:     hello-elementor
Version:      1.0.0-v20.37
Text Domain:  golden-eagle-gs
*/

/* CRITICAL MOBILE FIX (RC5.4): universal box-sizing reset. Zero
   box-sizing declaration existed anywhere in this codebase before —
   the browser default (content-box) means width:100% + padding on
   the same element computes WIDER than the parent, since padding/
   border are added on top of the specified width rather than
   included within it. This project uses padding extensively on
   width-constrained containers (.ge-container, .ge-page-section,
   card grids). This is likely the real, systemic cause of the
   reported mobile overflow/white-screen bug — more fundamental than
   the honeypot-positioning and overflow-x:hidden fixes already
   shipped, which could mask but not fully eliminate this class of
   issue. Standard, zero-risk, universal modern-CSS practice. */
*, *::before, *::after {
  box-sizing: border-box;
}

/* ==========================================================================
   This file intentionally contains almost no component styling.
   Colors, typography, spacing, and component styles for ELEMENTOR
   WIDGETS are configured via:
   - Elementor > Site Settings > Global Colors
   - Elementor > Site Settings > Global Fonts
   - Elementor > Site Settings > Layout

   The :root block below is a SEPARATE, deliberate exception — see
   DESIGN_SYSTEM.md §1 for the full reasoning. Short version: Elementor
   auto-generates opaque internal IDs for its own Global Color/Font CSS
   variables (e.g. `--e-global-color-541e46e`), NOT variables named after
   the label an admin types into the picker. Child-theme CSS (this file,
   animation-system.css, print rules, focus states) cannot reliably
   reference Elementor's own variables by a predictable name. Instead,
   this theme defines its OWN authoritative custom properties here, and
   DESIGN_SYSTEM.md documents the exact hex/value each Elementor Global
   Color/Font must be manually set to, so both systems stay visually
   identical without one depending on the other's internal ID scheme.

   This file is otherwise reserved for:
   1. Structural fixes Elementor's UI cannot express
   2. Print stylesheet rules
   3. Accessibility-critical overrides (e.g., focus-visible states)
   4. Third-party plugin output normalization (WPML switcher, form plugins)

   Motion/interaction CSS for the sitewide reusable animation SYSTEM
   lives in /assets/css/animation-system.css (Stage 2, loaded site-wide).
   Page-SPECIFIC motion (stats count-up, timeline draw, custom cursor,
   FAQ search) is Stage 6 scope and loads conditionally — see
   functions.php's two separate enqueue functions for this split.
   ========================================================================== */

:root {
  /* Navy scale */
  --ge-color-navy-950: #050B14;
  --ge-color-navy-900: #0A1628;
  --ge-color-navy-850: #10203A;
  --ge-color-navy-800: #12213D;
  --ge-color-navy-700: #1C3357;

  /* Gold scale */
  --ge-color-gold-100: #F2DFA0;
  --ge-color-gold-300: #E8C878;
  --ge-color-gold-500: #C9A24B;
  --ge-color-gold-700: #9C7A2E;
  --ge-color-gold-900: #7A5E22;

  /* Text */
  --ge-color-text-primary: #FFFFFF;
  --ge-color-text-secondary: #B8C2D4;

  /* LIGHT-SURFACE TEXT (V19.1, 2026-10-04).
     --ge-color-text-primary/secondary are DARK-SURFACE tokens: #FFFFFF and
     #B8C2D4 are designed to sit on navy. Templates built on .ge-page-section
     (Request Manpower, Contact) render on the parent theme's white body, so
     those tokens are wrong there — #B8C2D4 on white measures 1.79:1 and
     #FFFFFF on white measures 1.00:1 and is invisible.

     This token centralises the muted light-surface value first used by
     .ge-form-hint in V14 (7.07:1 on white, AA for normal text). Headings on
     light surfaces use the existing --ge-color-navy-900 (18.4:1), so no
     second token is needed. Always pair a surface with its matching text
     token. */
  --ge-color-text-muted-on-light: #54595F;
  --ge-color-text-muted: #8A97AC;
  --ge-color-text-on-gold: #0A1628;

  /* Borders */
  --ge-color-border-subtle: rgba(201, 162, 75, 0.15);
  --ge-color-border-active: rgba(201, 162, 75, 0.6);

  /* Spacing scale — see DESIGN_SYSTEM.md §1.3 */
  --ge-space-1: 4px;
  --ge-space-2: 8px;
  --ge-space-3: 16px;
  --ge-space-4: 24px;
  --ge-space-5: 32px;
  --ge-space-6: 48px;
  --ge-space-7: 64px;
  --ge-space-8: 96px;
  --ge-space-9: 128px;

  /* Border radius scale — see COMPONENT_LIBRARY.md */
  --ge-radius-sm: 4px;
  --ge-radius-md: 8px;
  --ge-radius-lg: 12px;
  --ge-radius-pill: 999px;

  /* Feedback color — the single deliberate exception to the two-color
     palette, reserved for form/state errors only. See DESIGN_SYSTEM.md §1.5. */
  --ge-color-error: #C4544A;
  --ge-color-success: var(--ge-color-gold-500);

  /* Premium shadow scale — Stage 4.5. Tokenizes values that were
     previously inlined ad hoc in components-core.css (e.g. the button
     hover glow). Existing inline values are NOT retroactively edited
     (out of scope for this stage — see PROJECT_STATE.md), but every
     new luxury-layer utility uses these tokens, and any future refactor
     of Stage 3's inline values should point here instead of
     reintroducing new magic numbers. */
  --ge-shadow-sm: 0 2px 8px rgba(5, 11, 20, 0.25);
  --ge-shadow-md: 0 8px 24px rgba(5, 11, 20, 0.35);
  --ge-shadow-lg: 0 16px 48px rgba(5, 11, 20, 0.45);
  --ge-shadow-gold-glow: 0 0 24px rgba(201, 162, 75, 0.25);
  --ge-shadow-gold-glow-strong: 0 0 40px rgba(201, 162, 75, 0.4);

  /* Glass surface — Stage 4.5. Deliberately restricted-use token set;
     see DESIGN_LANGUAGE.md §Glass Surface Guidelines for the explicit
     "sticky header + modal backdrop only" performance-driven limit on
     where backdrop-filter may be used. */
  --ge-glass-bg: rgba(10, 22, 40, 0.85);
  --ge-glass-blur: 12px;
  --ge-glass-border: rgba(232, 200, 120, 0.12);

  /* Z-index scale — Stage 5. Added now because the Homepage Hero is
     the first place three independently-built systems (sticky Header,
     World Map background, Hero content) stack in the same viewport at
     once — a real, previously-latent gap now made explicit rather than
     left to ad hoc per-page magic numbers. */
  --ge-z-worldmap: 1;
  --ge-z-hero-content: 2;
  --ge-z-header: 100;
  --ge-z-drawer: 200;
  --ge-z-modal: 300;
  --ge-z-cursor: 9999; /* Stage 6A Part 4 — custom cursor sits above
    every other layer by design (a decorative, pointer-events:none
    overlay that should remain visible even over an open modal/drawer);
    intentionally not modal+1 or similarly "just above" the next
    value, since a raw high constant is the standard, unambiguous
    convention for a global cursor overlay. */

  /* Container width — Stage 5. Tokenizes the 1280px value already
     specified as a fixed number in DESIGN_SYSTEM.md §1.3/§0.6; added
     here now that page-specific CSS (home-hero.css) needs to reference
     it in code rather than repeat the literal number. */
  --ge-container-width: 1280px;

  /* Motion timing — see DESIGN_SYSTEM.md §6 */
  --ge-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
  --ge-ease-emphasis: cubic-bezier(0.16, 1, 0.3, 1);
  --ge-duration-fast: 150ms;
  --ge-duration-base: 300ms;
  --ge-duration-slow: 600ms;

  /* ===================================================================
     TYPOGRAPHY FOUNDATION — Stage 6B (post-Part-2 directive).
     ===================================================================
     Faithfully implements DESIGN_SYSTEM.md §1.2's already-approved type
     scale table — NOT a new design. Zero value here was invented for
     this addition except where explicitly marked EXTRAPOLATED below;
     every H1-H4 min/max/weight/line-height pair is copied directly
     from that table's Desktop/Mobile/Weight/Line-Height columns.

     WHY THIS EXISTS: DESIGN_SYSTEM.md §1.2 states this scale is "set
     as Elementor's default H1-H6/body/small sizes in Site Settings" —
     a correct instruction under this project's original, Elementor-
     first assumption. It was never also implemented as CSS, because
     no native template existed yet to need it. Since Stage 6
     (Builder Independence, ARCHITECTURE.md §0 principle 6), every
     native template renders headings with NO font-size at all when
     Elementor is inactive — verified by direct search, zero base
     heading typography existed anywhere in this codebase's CSS before
     this addition (see PROJECT_STATE.md's Stage 6B Part 2 record).
     This block closes that gap. It is not a redesign; it is the
     missing CSS implementation of a design decision approved back in
     Stage 2.

     FLUID TECHNIQUE: each value is a `clamp(MIN, PREFERRED, MAX)`
     expression interpolating smoothly between DESIGN_SYSTEM.md's
     Mobile and Desktop sizes across a 375px-1280px viewport range
     (375px: a conventional small-mobile baseline, not itself in
     DESIGN_SYSTEM.md; 1280px: this project's own existing
     `--ge-container-width` token, Stage 5 — content doesn't get wider
     past that point, so heading size shouldn't keep scaling past it
     either). At or below 375px width, each clamps to exactly
     DESIGN_SYSTEM.md's Mobile value; at or above 1280px, exactly its
     Desktop value — the approved endpoints are exact, not
     approximated; only the transition BETWEEN them is new.

     RANGES RESOLVED TO A SINGLE VALUE: DESIGN_SYSTEM.md gives H2 a
     desktop range (36-48px) and a weight range (600-700) rather than
     one fixed value. Resolved here to 48px / 700 (the upper end of
     each range) — a deliberate, single, documented choice, not
     scaled down. If a specific H2 instance is ever found to need the
     lighter end of either range, that's an existing-component-level
     override (matching how `.ge-timeline__title`/`.ge-blog-card__title`
     etc. already override the base scale for their own smaller
     card-title needs, per the CASCADE NOTE below), not a change to
     this foundation layer.

     H5/H6 — EXTRAPOLATED, not in DESIGN_SYSTEM.md's table (which
     stops at H4) — continuing that table's own step-down progression
     conservatively. Currently unused anywhere in this codebase
     (verified by search) — provided for completeness/future use, not
     because any current template needs them.

     LETTER-SPACING: DESIGN_SYSTEM.md's type table has no
     letter-spacing column for H1-H4 (only "Eyebrow," a distinct,
     non-heading style already implemented via `.ge-hero__eyebrow`
     etc., untouched by this addition). Set to `normal` here — the
     safe, spec-consistent default — rather than inventing a
     display-heading letter-spacing treatment (e.g. a fashionable
     slight negative tracking) that is not written anywhere in the
     approved spec. "Zero visual redesign" means not adding a look
     nobody approved, even a plausible-sounding one.

     FONT-FAMILY IS DELIBERATELY OUT OF SCOPE for this addition — see
     PROJECT_STATE.md's Stage 6B Typography Foundation record for why
     that remains a separate, still-open item.

     CASCADE NOTE: these are bare-element selectors (`h1`, `h2`, ...),
     the lowest possible CSS specificity — every existing, approved
     component class that already sets its own font-size/weight/
     line-height (`.ge-empty-state__title`, `.ge-service-card__title`/
     `.ge-job-card__title`, `.ge-blog-card__title`, `.ge-footer__heading`,
     confirmed by direct audit before writing this block) continues to
     override these defaults on exactly the properties it already sets
     — zero change to any of them. These rules only fill in headings
     that currently have NO explicit size at all
     (`.ge-hero__title`, `.ge-section-header__title`,
     `.ge-cta-block__title`, and any bare `<h1>`/`<h2>` from
     `the_title()` calls with no class) — see the same PROJECT_STATE.md
     record for the complete, audited list of exactly what changes.
     =================================================================== */
  --ge-text-h1: clamp(34px, 21.57px + 3.31vw, 64px);
  --ge-leading-h1: 1.1;
  --ge-weight-h1: 700;

  --ge-text-h2: clamp(28px, 19.71px + 2.21vw, 48px);
  --ge-leading-h2: 1.2;
  --ge-weight-h2: 700;

  --ge-text-h3: clamp(22px, 19.51px + 0.66vw, 28px);
  --ge-leading-h3: 1.25;
  --ge-weight-h3: 600;

  --ge-text-h4: clamp(18px, 17.17px + 0.22vw, 20px);
  --ge-leading-h4: 1.3;
  --ge-weight-h4: 600;

  --ge-text-h5: clamp(16px, 15.17px + 0.22vw, 18px); /* EXTRAPOLATED */
  --ge-leading-h5: 1.4; /* EXTRAPOLATED */
  --ge-weight-h5: 600; /* EXTRAPOLATED */

  --ge-text-h6: clamp(14px, 13.59px + 0.11vw, 15px); /* EXTRAPOLATED */
  --ge-leading-h6: 1.4; /* EXTRAPOLATED */
  --ge-weight-h6: 600; /* EXTRAPOLATED */
  --ge-tracking-h6: 0.02em; /* EXTRAPOLATED — a small, conservative
    tracking for the smallest heading level only, consistent with
    this project's existing pattern of adding slight positive tracking
    to its smallest/uppercase-adjacent text styles (Eyebrow's 0.12em,
    .ge-footer__heading's 0.04em) — not applied to H1-H5, which
    DESIGN_SYSTEM.md gives no basis for tracking at all (see above). */

  /* Premium Experience Phase 1: real typefaces, per DESIGN_SYSTEM.md
     §1.2's own named candidates. Loaded via Google Fonts (functions.php),
     not self-hosted — flagged as a real difference from "self-hosted"
     but functional today; self-hosting remains a future refinement. */
  --ge-font-display: 'Playfair Display', Georgia, serif;
  --ge-font-body: 'Inter', -apple-system, sans-serif;
}

h1, h2, h3 { font-family: var(--ge-font-display); }
/* RC5 mobile bug fix: defensive safety net. Root cause was two
   honeypot fields using position:absolute;left:-9999px (fixed
   separately, see page-contact.php/single-job_listing.php), but
   nothing in this codebase previously guarded against ANY future
   off-canvas element expanding the document's scrollable width.
   html/body overflow-x:hidden costs nothing and prevents this entire
   bug class from recurring. */
html, body { overflow-x: hidden; }

body { font-family: var(--ge-font-body); }

/* Base heading typography — applies DESIGN_SYSTEM.md's approved type
   scale (via the tokens above) to every heading element sitewide.
   See the :root block's TYPOGRAPHY FOUNDATION comment for the
   complete reasoning, including the cascade guarantee that no
   existing component's own heading styling is affected.

   SELECTORS QUALIFIED WITH `body` (v16, 2026-10-04) — MEASURED, NOT
   ASSUMED. The parent theme's assets/css/reset.css declares
   h1..h6 font-size (2.5/2/1.75/1.5/1.25/1rem) plus font-weight:500 and
   line-height:1.2, at the same (0,0,1) specificity as the bare element
   selectors used here, and WordPress enqueues it AFTER the child
   stylesheet. Source order therefore decided the cascade and the parent
   won: measured live at 1440px, h1 computed 40px and h2 32px, where
   these tokens resolve to 64px and 48px. Every heading on every page had
   been rendering at the parent's reset sizes, so this project's approved
   type scale had never actually taken effect.

   `body h1` raises specificity to (0,0,2), which beats (0,0,1)
   deterministically regardless of load order. No !important is used and
   no token value changes. Any component rule carrying a class — e.g.
   .ge-empty-state__title (0,1,0) — still outranks this and keeps its own
   styling, which is the cascade guarantee stated above. */
body h1 {
  font-size: var(--ge-text-h1);
  line-height: var(--ge-leading-h1);
  font-weight: var(--ge-weight-h1);
  letter-spacing: normal;
  margin: 0;
}

body h2 {
  font-size: var(--ge-text-h2);
  line-height: var(--ge-leading-h2);
  font-weight: var(--ge-weight-h2);
  letter-spacing: normal;
  margin: 0;
}

body h3 {
  font-size: var(--ge-text-h3);
  line-height: var(--ge-leading-h3);
  font-weight: var(--ge-weight-h3);
  letter-spacing: normal;
  margin: 0;
}

body h4 {
  font-size: var(--ge-text-h4);
  line-height: var(--ge-leading-h4);
  font-weight: var(--ge-weight-h4);
  letter-spacing: normal;
  margin: 0;
}

body h5 {
  font-size: var(--ge-text-h5);
  line-height: var(--ge-leading-h5);
  font-weight: var(--ge-weight-h5);
  letter-spacing: normal;
  margin: 0;
}

body h6 {
  font-size: var(--ge-text-h6);
  line-height: var(--ge-leading-h6);
  font-weight: var(--ge-weight-h6);
  letter-spacing: var(--ge-tracking-h6);
  margin: 0;
}

/* Accessibility: consistent visible focus state site-wide, independent of
   Elementor's per-widget focus styling, so keyboard navigation is never
   silently unstyled if a widget's own focus state is missing. */
:focus-visible {
  outline: 2px solid var(--ge-color-gold-300);
  outline-offset: 2px;
}

/* Skip-to-content link: visually hidden until focused */
.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 100000;
  padding: 12px 20px;
  background: var(--ge-color-navy-900);
  color: var(--ge-color-gold-300);
  text-decoration: none;
  font-weight: 600;
}

.skip-link:focus {
  left: 8px;
  top: 8px;
}

/* Standard visually-hidden ("sr-only") utility — content present for
   screen readers/assistive tech but not visually rendered. Added in
   Stage 5 Part 2 for the Statistics section's accessible number
   announcement pattern (a static, correctly-formatted number for
   assistive tech, paired with an aria-hidden animated counter for
   sighted users) — a standard, broadly-applicable accessibility
   utility that belongs in this file's existing "Accessibility-critical
   overrides" scope per its own header comment, not a page-specific rule. */
/* Job detail badges — Premium Presentation phase. Same visual
   treatment as .ge-badge (home-part3.css, gold-outline pill) but
   defined here, sitewide, so single-job_listing.php doesn't need to
   enqueue Homepage-only CSS for one component — reuses the same
   design tokens, not a new visual language. */
.ge-job-detail__badges {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ge-space-2);
  margin: var(--ge-space-4) 0;
}

.ge-job-detail__badge {
  display: inline-flex;
  align-items: center;
  padding: var(--ge-space-1) var(--ge-space-3);
  border: 1px solid var(--ge-color-gold-500);
  border-radius: var(--ge-radius-pill);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--ge-color-gold-300);
  background: transparent;
}

.ge-job-detail__facts {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--ge-space-4);
  margin: var(--ge-space-6) 0;
}

@media (min-width: 768px) {
  .ge-job-detail__facts {
    grid-template-columns: repeat(3, 1fr);
  }
}

.ge-job-detail__fact-label {
  font-size: 13px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--ge-color-text-secondary);
}

.ge-job-detail__fact-value {
  font-weight: 600;
  color: var(--ge-color-text-primary);
}

/* Job-detail reading rhythm — v20.10. MEASURED, NOT ASSUMED. On
   production v20.8 at a 1440px viewport, `body h2 { margin: 0 }` above
   wins at specificity (0,0,2) over the parent reset's heading margins,
   so every job-detail heading computed margin-top:0 / margin-bottom:0
   and sat with a measured 0.0px gap against its own body text.

   These rules restore the rhythm for exactly the three headings
   single-job_listing.php emits — Job Description, Apply for This
   Position, Related Jobs. The child combinator confines them to direct
   children of the section container, verified against the live DOM
   (div.ge-page-section > div.ge-container > h2), so a heading inside
   post_content, inside the application form, or in the footer
   (.ge-footer__column h2) is never matched. The .single-job_listing
   body class keeps every other template's headings unchanged — this is
   deliberately NOT a sitewide heading change. No token value is altered
   and no existing rule is edited. */
.single-job_listing .ge-page-section > .ge-container > h2 {
  margin: var(--ge-space-6) 0 var(--ge-space-3);
}

/* With the facts grid now conditional in single-job_listing.php, the
   "Job Description" heading becomes the container's FIRST child on any
   job that has no fact tiles — which is every job on production today.
   The section already supplies var(--ge-space-8) of top padding at
   >=768px, so no additional top margin is wanted in that position. */
.single-job_listing .ge-page-section > .ge-container > h2:first-child {
  margin-top: 0;
}

/* Reading measure for the job description. .entry-content carried no
   rule in style.css or any of the 19 files in assets/css/, so it ran
   the full container width — measured 1280px at 1440px, roughly 200
   characters per line. Scoped to single job pages; the seven other
   templates that emit .entry-content are deliberately left unchanged. */
.single-job_listing .entry-content {
  max-width: 72ch;
}

/* Job detail: remove the stacked top spacing above the facts grid — v20.12.
   MEASURED on production v20.11 at 1440px, uncached:

     hero bottom -> first tile ....... 144px of dead space
       .ge-page-section padding-top ..  96px  (var(--ge-space-8), >=768px)
     + .ge-job-detail__facts margin-top 48px  (var(--ge-space-6))

   Those two STACK rather than collapse, because the section's padding sits
   between them. The grid itself is only 48px tall, so three quarters of the
   distance from the hero to the first tile was empty.

   Zeroing only the grid's TOP margin leaves the section's own padding to do
   the separating, which is the same rhythm every other page section uses.
   The grid keeps its bottom margin, so the gap down to the "Job Description"
   heading is unchanged — that one already collapses correctly against the
   heading's own 48px top margin and resolves to 48px, not 96px.

   Result: hero -> tiles 96px, tiles -> heading 48px. No negative margin, no
   hidden content, no change to --ge-space-6 or --ge-space-8, and no change to
   .ge-page-section, which is sitewide. The .single-job_listing body class
   confines this to the single job template; .ge-job-detail__facts is not
   emitted by any other template, so this rule cannot reach another page. */
.single-job_listing .ge-job-detail__facts {
  margin-top: 0;
}

.ge-footer__social {
  display: flex;
  gap: var(--ge-space-3);
  margin: var(--ge-space-4) 0 0;
  padding: 0;
  list-style: none;
}

.ge-footer__social a {
  color: var(--ge-color-text-secondary);
  transition: color var(--ge-duration-fast) var(--ge-ease-standard);
}

.ge-footer__social a:hover {
  color: var(--ge-color-gold-300);
}

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

/* Generic max-width/centering container — added Stage 6, Part 1.
   Every Homepage section (Stage 5) reused `.ge-home-hero__content`
   for this same behavior, which was always a Hero-specific class
   carrying its own decorative ::before vignette (see home-hero.css)
   that a sitewide Header/Footer must NOT inherit. Rather than reuse
   that class outside the Homepage (which Part 1-4's docblocks already
   flagged as an available future extraction — see
   HOMEPAGE_IMPLEMENTATION.md §1.4/§8), this is the properly-named,
   vignette-free utility for every future non-Homepage use, starting
   with header.php/footer.php. Existing Homepage sections are left
   exactly as approved and are NOT retargeted to this class. */
.ge-container {
  width: 100%;
  max-width: var(--ge-container-width);
  margin-inline: auto;
}

/* Sitewide vertical section rhythm for non-Homepage templates
   (index.php, 404.php, and future single/archive templates) — added
   Stage 6, Part 1. Deliberately named `.ge-page-section`, NOT
   `.ge-section`: Part 2 (Stage 5) already defined `.ge-section` in
   `home-part2.css` for the identical purpose, but that file is
   registered-only and front-page-conditional (Homepage sections only)
   — reusing that exact class name here, in a sitewide file, would
   create two same-named rules in two different stylesheets (a
   collision this project's own duplicate-selector verification scan
   exists to catch), and would risk silently depending on CSS cascade
   order rather than being an intentional, obviously-distinct utility.
   `home-part2.css` is left completely untouched. */
.ge-page-section {
  padding-block: var(--ge-space-6);
}

@media (min-width: 768px) {
  .ge-page-section {
    padding-block: var(--ge-space-8);
  }
}

/* Respect reduced-motion at the stylesheet level as a baseline safety net,
   in addition to the JS-level checks in each motion script. */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Print stylesheet baseline for content-heavy pages (Contact, FAQ, Document
   Requirements) — hides decorative/interactive chrome, keeps content legible. */
@media print {
  header.site-header,
  footer.site-footer,
  .ge-whatsapp-float,
  .ge-custom-cursor {
    display: none !important;
  }

  body {
    background: #fff !important;
    color: #000 !important;
  }
}
