/* =============================================================================
 * 70-elementor-bridge.css -- reconcile Elementor's page CSS with the sheet.
 *
 * BYTE-IDENTICAL across both sites.
 *
 * *** THIS FILE CANNOT WIN BY ENQUEUE ORDER. IT WINS BY SPECIFICITY. ***
 *
 * Elementor's css_print_method is `external` on both sites, so each page's kit
 * and widget styles compile to a separate file -- post-163.css (AT kit),
 * post-228.css (GF kit), post-<id>.css per page -- and those are printed LATE,
 * after everything enqueue.php registers. Being last in the dependency chain
 * buys nothing here.
 *
 * TWO STANDING RULES THAT HAVE ALREADY COST SESSIONS ON THIS ESTATE:
 *
 *   1. NEVER GREP SERVED HTML FOR A HEX. The kit compiles to an external
 *      stylesheet, so the hex is not in the HTML. A grep is a GUARANTEED FALSE
 *      NEGATIVE -- it will tell you the colour is gone when it is fine, or
 *      fine when it is gone. Read computed styles with
 *      computed-style-harvest.cjs. Every rule in this file must trace to a
 *      measured property.
 *
 *   2. ALWAYS CACHE-BUST WITH ?v=<epoch>. Neither host has a page cache. The
 *      trap is the browser's own max-age=86400 -- you will "verify" a fix
 *      against a day-old stylesheet and conclude it did not work.
 *
 * Also: Elementor Element Caching (3.22+) can serve cached widget HTML for up
 * to 24h. WS0 step 0.6 sets it inactive on both sites; compat-elementor.php
 * warns under WP_DEBUG if it is ever switched back on.
 *
 * Page counts this file has to serve:
 *   AutoTransport  16 Elementor pages,  2 classic
 *   GlobeFreight   10 Elementor pages, 17 classic
 *
 * -----------------------------------------------------------------------------
 * THE GOVERNING FACT: THIS FILE IS ALMOST EMPTY, ON PURPOSE.
 *
 * AutoTransport's pass condition is an EMPTY DIFF. Every declaration here is a
 * declaration that CHANGES an Elementor page -- which is the 16 of 18 AT pages
 * that already look the way the owner approved. So the bar for adding a rule
 * is not "this would be tidier", it is "the measurement shows the sheet and
 * the kit collide".
 *
 * THE MEASUREMENT SAYS THEY DO NOT COLLIDE ON AUTOTRANSPORT.
 *   at-target-*.json, 24 harvests, 8 URLs x 3 viewports:
 *     horizontalOverflowPx = 0 on EVERY ONE. No page is escaping its container
 *     today, and no page needs to.
 *     .ast-container measures max-width 1240px / padding 0 20px at 1366 and
 *     max-width 100% / padding 0 20px at 768 and 390 -- which is exactly what
 *     .qt-container in 30-sheet.css computes from --qt-measure and --qt-gutter.
 *     The kit's content width and --qt-measure already agree.
 * -----------------------------------------------------------------------------
 * ========================================================================== */


/* ---- full-bleed escape ---------------------------------------------------
 * NO ESCAPE RULE SHIPS. That is a measured decision, not an omission.
 *
 * The sheet in 30-sheet.css constrains content to --qt-measure. Elementor hero
 * sections are designed to run edge to edge, and inside a narrower sheet they
 * would render as strips -- so the instinct is to write
 * `.elementor-section-stretched { margin-inline: calc(50% - 50vw); width: 100vw }`.
 *
 * DO NOT. Three reasons, all measured:
 *   1. AT already renders every Elementor page at 0px horizontal overflow with
 *      the SAME container width this theme computes. There is nothing to
 *      escape from; adding an escape would change 16 approved pages.
 *   2. 100vw includes the scrollbar gutter. On a page tall enough to scroll --
 *      which is all of them -- 100vw exceeds the client width and introduces
 *      horizontal overflow at 1366. That is the exact failure the 0px gate at
 *      390/768/1366 exists to catch, and it would be SELF-INFLICTED.
 *   3. Escaping everything reintroduces the bug 30-sheet.css exists to
 *      prevent: content sitting directly on the textured body, which is how
 *      GF-003 shipped dark text on dark grey.
 *
 * If a specific GlobeFreight hero genuinely needs to bleed after activation,
 * add it HERE as a named section id from a measurement -- never as a blanket
 * rule, and re-run the overflow gate at all three widths. */


/* ---- container width -----------------------------------------------------
 * Nothing ships. .elementor-container carries its own content width from the
 * kit (AT kit 163, GF kit 228) and the AT measurement shows it already matches
 * --qt-measure. Writing a width here would fight the kit on every page for no
 * measured benefit, and it would break the empty diff. */


/* ---- typography inheritance ---------------------------------------------
 * Nothing ships. theme.json emits ':root :where(...)' rules at low specificity
 * and post-<id>.css overrides them EVERY TIME -- which is why theme.json
 * carries no pixels. But the kit's typography is the LOOK THE OWNER APPROVED:
 *   MEASURED AT, h2.elementor-heading-title = rgb(241,90,41) 30px/39px/600 on
 *   about-us and services, all three widths.
 * Overriding it here would repaint every Elementor heading on 16 pages. The
 * theme owns the CHROME; the kit keeps the page content. That division is the
 * whole architecture. */


/* ---- Elementor buttons ---------------------------------------------------
 * Nothing ships, and this is the one people will want to change.
 *
 * .elementor-button and .qt-btn--primary SHOULD resolve to the same computed
 * values, and on AutoTransport they already do -- the measured CTA is #FFFFFF
 * on #C2431C at 5.11:1, which is exactly --qt-accent-contrast on --qt-accent.
 * Re-declaring it here would add a second home for the same fact and the two
 * would drift the first time someone edits the kit.
 *
 * If a GF Elementor button measures off-brand after activation, fix it in the
 * kit (one place, editable by the owner) -- not here. */


/* ---- the free Shortcode widget ------------------------------------------
 * How [quadtech_form] is placed on Elementor pages. GlobeFreight has NO
 * Elementor Pro, so the free Shortcode widget is the only available placement
 * mechanism -- it must not be styled into something fragile. The iframe
 * carries its own sizing via .qt-form-frame in 60-forms.css, so the only rule
 * needed is one that stops the widget's own wrapper clipping it. */
.elementor-widget-shortcode .qt-form-frame {
	max-width: 100%;
}


/* ---- ElementsKit / HFE (GlobeFreight only) -------------------------------
 * GF runs ElementsKit Lite and HFE. HFE's header #238 currently supplies GF's
 * branding; once quadtech-gf is active the THEME owns the header and HFE's
 * must be retired -- otherwise GF renders TWO headers, which it has done
 * before (the double-menu defect fixed in GF-002).
 *
 * This is a DEPLOYMENT step, not a CSS one, and there is deliberately no
 * `display:none` here. Hiding a duplicate header with CSS would leave its
 * markup, its scripts and its 17 duplicate menu links in the DOM for screen
 * readers and crawlers -- a hidden second nav is worse than a visible one.
 * Retire the HFE template in wp-admin. */


/* ---- Elementor kit colour globals ---------------------------------------
 * AT kit 163, GF kit 228. The whole point of ADR-0007 is that these stop being
 * the source of truth for CHROME. Do NOT re-point them at var(--qt-*) from
 * here: the kit is a plugin database record and a CSS rule cannot own it. The
 * tokens win because the theme's chrome no longer reads the kit -- not because
 * this file overrides it. */
