/* ==========================================================================
   Accessibility font scaling  â€”  Pojo "One Click Accessibility" (legacy)
   --------------------------------------------------------------------------
   Loaded last, after style.css and responsive.css.

   WHY THIS FILE EXISTS
   The plugin scales text with cascading percentages:
       body.pojo-a11y-resize-font-200 p,li,label,input,select,textarea,span,â€¦
           { font-size: 200% !important }
       body.pojo-a11y-resize-font-200 h1â€¦h6, h1 spanâ€¦h6 span
           { font-size: 266% !important }
   Because a percentage font-size resolves against the PARENT's computed size,
   every nested element multiplies again. Measured on the live site at step 200:
       .privacy-checkbox .wpcf7-list-item-label   12.95px -> 4096px  (x316)
       .main-contact-form input                   19.05px ->  256px  (x13)
   while anything the plugin does not select stays completely frozen:
       .submit-col .global-btn, .wpcf7-response-output, .elementor-button,
       .cc-btn, .cc-root                          x1.00 (no scaling at all)

   STRATEGY
   1. Two scaling curves are exposed as custom properties.
   2. <body> is scaled once, in px, from the step class.
   3. Inside every content root the inherited text elements are reset to
      `font-size: inherit`, which collapses the percentage chain to a single
      multiplication.
   4. Every element that originally carried an explicit size is re-declared as
      calc(original * curve), reproducing the theme's own breakpoints.

   RULE A â€” with no `pojo-a11y-resize-font-*` class on <body>, nothing here
   matches, so the site renders byte-identically. The `:root` variable block in
   Section 1 is the only ungated rule in the file.

   RULE B â€” #pojo-a11y-toolbar is touched in exactly one place, SECTION 6, and
   only inside the step gate. Every other rule in this file is scoped to a
   content root so it cannot reach the toolbar. With no step class the toolbar
   is byte-identical to the plugin's own rendering.
   ========================================================================== */


/* ==========================================================================
   SECTION 1 â€” SCALING VARIABLES
   --------------------------------------------------------------------------
   The toolbar emits nine step classes: 130,140,â€¦,200 (first click = 130,
   +10 per click, reset removes the class). 120 exists in the plugin's
   stylesheet but is never applied by the toolbar; it is defined here anyway so
   a database/inline override cannot leave the page unscaled.

   --a11y-scale        text, headings, lists     130 = 1.08   ->  200 = 1.60
   --a11y-scale-form   forms, buttons, cookie    130 = 1.15   ->  200 = 1.75
   --a11y-scale-tool   accessibility toolbar     130 = 1.03   ->  200 = 1.25

   FIRST CLICK IS DELIBERATELY GENTLE. The first step used to be +15% on text
   and +30% on forms, which was reported as jumping too far for one click.
   Measured across 137 text elements on /landing/, the old first click moved
   60 of them by x1.15 and 27 by x1.30. The starting points are now +8% and
   +15%; the MAXIMUM is unchanged at 1.60 / 1.75, so nothing is lost at the
   top of the range - the nine steps simply spread the same travel more
   evenly instead of spending a third of it on the first press.

   The text curve now advances by 0.52 / 7 = 0.0742857 per step, the form
   curve by 0.60 / 7 = 0.0857143, and the toolbar curve by 0.22 / 7 =
   0.0314286 - still deliberately the shallowest of the three, see SECTION 6.

   Every value is >= 1.0, and every rule in this file is either
   `calc(<base> * <curve>)` or a `max()` floor multiplied by a curve, so no
   element can ever compute SMALLER than its design size at any step. Verified
   on the live page: 0 of 137 elements decrease on the first click.
   ========================================================================== */

:root {
    --a11y-scale: 1;
    --a11y-scale-form: 1;
    --a11y-scale-tool: 1;
    --a11y-scale-circle: 1;
    --a11y-scale-circle-m: 1;
    --a11y-cb-min: 0px;
}

body.pojo-a11y-resize-font-120 { --a11y-scale: 1.0400; --a11y-scale-form: 1.0750; --a11y-scale-tool: 1.0150; --a11y-scale-circle: 1.0200; --a11y-scale-circle-m: 1.0063; --a11y-cb-min: 0px; }
body.pojo-a11y-resize-font-130 { --a11y-scale: 1.0800; --a11y-scale-form: 1.1500; --a11y-scale-tool: 1.0300; --a11y-scale-circle: 1.0375; --a11y-scale-circle-m: 1.0125; --a11y-cb-min: 0px; }
body.pojo-a11y-resize-font-140 { --a11y-scale: 1.1543; --a11y-scale-form: 1.2357; --a11y-scale-tool: 1.0614; --a11y-scale-circle: 1.0750; --a11y-scale-circle-m: 1.0250; --a11y-cb-min: 7.5px; }
body.pojo-a11y-resize-font-150 { --a11y-scale: 1.2286; --a11y-scale-form: 1.3214; --a11y-scale-tool: 1.0929; --a11y-scale-circle: 1.1125; --a11y-scale-circle-m: 1.0375; --a11y-cb-min: 8.5px; }
body.pojo-a11y-resize-font-160 { --a11y-scale: 1.3029; --a11y-scale-form: 1.4071; --a11y-scale-tool: 1.1243; --a11y-scale-circle: 1.1500; --a11y-scale-circle-m: 1.0500; --a11y-cb-min: 9.5px; }
body.pojo-a11y-resize-font-170 { --a11y-scale: 1.3771; --a11y-scale-form: 1.4929; --a11y-scale-tool: 1.1557; --a11y-scale-circle: 1.1875; --a11y-scale-circle-m: 1.0625; --a11y-cb-min: 10.3px; }
body.pojo-a11y-resize-font-180 { --a11y-scale: 1.4514; --a11y-scale-form: 1.5786; --a11y-scale-tool: 1.1871; --a11y-scale-circle: 1.2250; --a11y-scale-circle-m: 1.0750; --a11y-cb-min: 11px; }
body.pojo-a11y-resize-font-190 { --a11y-scale: 1.5257; --a11y-scale-form: 1.6643; --a11y-scale-tool: 1.2186; --a11y-scale-circle: 1.2625; --a11y-scale-circle-m: 1.0875; --a11y-cb-min: 11.5px; }
body.pojo-a11y-resize-font-200 { --a11y-scale: 1.6000; --a11y-scale-form: 1.7500; --a11y-scale-tool: 1.2500; --a11y-scale-circle: 1.3000; --a11y-scale-circle-m: 1.1000; --a11y-cb-min: 12px; }


/* ==========================================================================
   SECTION 2 â€” BODY SCALING
   --------------------------------------------------------------------------
   Measured base: body computes to 16px at 375 / 900 / 1440 / 1905px.
   Declared in px (not a flat px per step) so the plugin's own percentage rules
   inside #pojo-a11y-toolbar keep resolving exactly as they did before.
   `html body[â€¦]` out-specifies the plugin's `body.pojo-a11y-resize-font-200`.
   ========================================================================== */

html body[class*="pojo-a11y-resize-font-"] {
    font-size: calc(16px * var(--a11y-scale)) !important;
}


/* ==========================================================================
   SECTION 3 â€” REMOVE PERCENTAGE COMPOUNDING
   --------------------------------------------------------------------------
   Content roots discovered on the live site and in the theme templates:

     .elementor                    Elementor pages  (/ and /home/)
     .login-banner .login-section  single.php
     .description-section          page.php, 404.php, single.php, search.php
     .gold-card-banner             404.php
     .error-content .general-content
     .home-banner .users-grid
     .login-wraper .login-form-wraper
     .faq-accordian-section .accordion          search.php
     .privacy-content              template-privacy.php + both modal shortcodes
     .privacy-wrapper              #privacyModal / #accessibilityModal
     .breadcrums .text-wraper .content-wraper   shared partials
     .wpcf7 .main-contact-form .form-main-wrapper .cf7-success-message

   #pojo-a11y-toolbar and #cc-banner-root are deliberately absent â€” the toolbar
   must not change (Rule B) and the cookie banner is handled in Section 4b.

   `:where()` contributes zero specificity, so every explicit size restored in
   Sections 4 and 5 wins over this reset without needing extra weight.
   Intentionally sized spans (.wpcf7-list-item-label, .pv-links > span,
   .elementor-icon-list-text, .wpcf7-not-valid-tip, .elementor-button-text â€¦)
   are all re-declared later and are therefore not flattened.
   ========================================================================== */

body[class*="pojo-a11y-resize-font-"] :is(
    .elementor,
    .login-banner, .login-section,
    .description-section,
    .gold-card-banner,
    .error-content, .general-content,
    .home-banner, .users-grid,
    .login-wraper, .login-form-wraper,
    .faq-accordian-section, .accordion,
    .privacy-content, .privacy-wrapper,
    .breadcrums, .text-wraper, .content-wraper,
    .wpcf7, .main-contact-form, .form-main-wrapper, .cf7-success-message
) :where(p, li, span, label, legend, code, pre, dd, dt, blockquote) {
    font-size: inherit !important;
}

/* Elementor heading widgets render as <h2> or <p> depending on the widget's
   HTML-tag setting; both are neutralised so no 266% rule can survive. Every
   heading present on / and /home/ carries an explicit size (Section 5); this
   is the safety net for widgets added later. */
body[class*="pojo-a11y-resize-font-"] .elementor :where(
    h1, h2, h3, h4, h5, h6, .elementor-heading-title
) {
    font-size: inherit !important;
}

/* Theme templates use bare heading tags sized by Bootstrap 5. Verified on
   /2026/05/18/hello-world/ : .login-banner h1 = 27.625px @375 and 40px @1440,
   i.e. exactly calc(1.375rem + 1.5vw) capped at 2.5rem from 1200px up.
   Restated in px/vw so the html root font-size is never a hidden dependency. */
body[class*="pojo-a11y-resize-font-"] :is(
    .login-banner, .login-section, .description-section, .gold-card-banner,
    .error-content, .general-content, .home-banner, .users-grid,
    .login-wraper, .faq-accordian-section, .privacy-content, .privacy-wrapper,
    .text-wraper, .content-wraper
) h1 { font-size: calc((22px + 1.5vw) * var(--a11y-scale)) !important; }

body[class*="pojo-a11y-resize-font-"] :is(
    .login-banner, .login-section, .description-section, .gold-card-banner,
    .error-content, .general-content, .home-banner, .users-grid,
    .login-wraper, .faq-accordian-section, .privacy-content, .privacy-wrapper,
    .text-wraper, .content-wraper
) h2 { font-size: calc((21.2px + 0.9vw) * var(--a11y-scale)) !important; }

body[class*="pojo-a11y-resize-font-"] :is(
    .login-banner, .login-section, .description-section, .gold-card-banner,
    .error-content, .general-content, .home-banner, .users-grid,
    .login-wraper, .faq-accordian-section, .privacy-content, .privacy-wrapper,
    .text-wraper, .content-wraper
) h3 { font-size: calc((20.8px + 0.6vw) * var(--a11y-scale)) !important; }

body[class*="pojo-a11y-resize-font-"] :is(
    .login-banner, .login-section, .description-section, .gold-card-banner,
    .error-content, .general-content, .home-banner, .users-grid,
    .login-wraper, .faq-accordian-section, .privacy-content, .privacy-wrapper,
    .text-wraper, .content-wraper
) h4 { font-size: calc((20.4px + 0.3vw) * var(--a11y-scale)) !important; }

body[class*="pojo-a11y-resize-font-"] :is(
    .login-banner, .login-section, .description-section, .gold-card-banner,
    .error-content, .general-content, .home-banner, .users-grid,
    .login-wraper, .faq-accordian-section, .privacy-content, .privacy-wrapper,
    .text-wraper, .content-wraper
) h5 { font-size: calc(20px * var(--a11y-scale)) !important; }

body[class*="pojo-a11y-resize-font-"] :is(
    .login-banner, .login-section, .description-section, .gold-card-banner,
    .error-content, .general-content, .home-banner, .users-grid,
    .login-wraper, .faq-accordian-section, .privacy-content, .privacy-wrapper,
    .text-wraper, .content-wraper
) h6 { font-size: calc(16px * var(--a11y-scale)) !important; }

@media (min-width: 1200px) {
    body[class*="pojo-a11y-resize-font-"] :is(
        .login-banner, .login-section, .description-section, .gold-card-banner,
        .error-content, .general-content, .home-banner, .users-grid,
        .login-wraper, .faq-accordian-section, .privacy-content, .privacy-wrapper,
        .text-wraper, .content-wraper
    ) h1 { font-size: calc(40px * var(--a11y-scale)) !important; }

    body[class*="pojo-a11y-resize-font-"] :is(
        .login-banner, .login-section, .description-section, .gold-card-banner,
        .error-content, .general-content, .home-banner, .users-grid,
        .login-wraper, .faq-accordian-section, .privacy-content, .privacy-wrapper,
        .text-wraper, .content-wraper
    ) h2 { font-size: calc(32px * var(--a11y-scale)) !important; }

    body[class*="pojo-a11y-resize-font-"] :is(
        .login-banner, .login-section, .description-section, .gold-card-banner,
        .error-content, .general-content, .home-banner, .users-grid,
        .login-wraper, .faq-accordian-section, .privacy-content, .privacy-wrapper,
        .text-wraper, .content-wraper
    ) h3 { font-size: calc(28px * var(--a11y-scale)) !important; }

    body[class*="pojo-a11y-resize-font-"] :is(
        .login-banner, .login-section, .description-section, .gold-card-banner,
        .error-content, .general-content, .home-banner, .users-grid,
        .login-wraper, .faq-accordian-section, .privacy-content, .privacy-wrapper,
        .text-wraper, .content-wraper
    ) h4 { font-size: calc(24px * var(--a11y-scale)) !important; }
}

/* 404.php ships an inline `style="font-size:30px"` on its error heading.
   An !important stylesheet rule out-specifies the inline declaration, which is
   what lets it scale at all. */
body[class*="pojo-a11y-resize-font-"] .error-content .text-wraper h3 {
    font-size: calc(30px * var(--a11y-scale)) !important;
}


/* ==========================================================================
   SECTION 4 â€” FORMS, BUTTONS, MESSAGES
   --------------------------------------------------------------------------
   Sizes below are the theme's own, read out of assets/css/style.css and
   assets/css/responsive.css and confirmed against the live computed styles.
   px and vw only â€” no em/rem, so nothing re-inherits and re-multiplies.
   Media order reproduces the source order: base -> 1681 -> 767 -> 600.
   ========================================================================== */

/* --- base (assets/css/style.css) -------------------------------------- */

body[class*="pojo-a11y-resize-font-"] input,
body[class*="pojo-a11y-resize-font-"] textarea,
body[class*="pojo-a11y-resize-font-"] select {
    font-size: calc(1vw * var(--a11y-scale-form)) !important;
    line-height: 1 !important;
}

body[class*="pojo-a11y-resize-font-"] .main-contact-form label span:first-child {
    font-size: calc(1.18vw * var(--a11y-scale-form)) !important;
    line-height: 1 !important;
}

body[class*="pojo-a11y-resize-font-"] .submit-col .global-btn {
    font-size: calc(1.4vw * var(--a11y-scale-form)) !important;
    line-height: 1.3 !important;
}

body[class*="pojo-a11y-resize-font-"] .new-home-contact .submit-col .global-btn {
    font-size: calc(1.3vw * var(--a11y-scale-form)) !important;
    line-height: 1.6 !important;
}

body[class*="pojo-a11y-resize-font-"] .privacy-checkbox p,
body[class*="pojo-a11y-resize-font-"] .checkbox-group .first.last .wpcf7-list-item-label {
    font-size: calc(0.9vw * var(--a11y-scale-form)) !important;
    line-height: 1 !important;
}

/* READABILITY FLOOR â€” the theme has no override between 768px and 1024px, so
   these vw sizes bottom out around 900px viewport width. Measured at rest with
   accessibility OFF at 900px: consent label 6.1px, response output 6.3px,
   validation tip 6.3px. Scaling a 6px string by 1.75 still only reaches 11px,
   so the feature would do nothing useful there. max() raises the floor INSIDE
   the gate only â€” the default render is untouched, so Rule A still holds.

   THE FLOOR RAMPS IN; IT IS NOT APPLIED ON THE FIRST CLICK.
   A flat 12px floor is the right size at the TOP of the range and far too big
   as an opening move: it does not scale the text, it JUMPS it straight to
   12px and then scales that. Measured on the consent label with the old flat
   floor, first click:

       viewport   at rest   1st click   ratio
       1920       13.06px    15.02px    x1.15   (no floor - vw already > 12)
       1440        9.79px    13.80px    x1.41
        900        6.12px    13.80px    x2.26

   x2.26 for one press of a button is exactly the reported problem, and 1440
   is a normal laptop, so most users saw the x1.41 version of it.

   `--a11y-cb-min` is 0 for the first click, so step 130 is a plain x1.15 on
   the label's own size at EVERY width - the same first click the rest of the
   form gets. From step 140 the floor fades in (7.5 -> 12px) and reaches its
   full value at maximum, so the 768-1024 band still ends up readable. Now:

       viewport   1st click            maximum
       1920       13.06 -> 15.02  x1.15    22.86px
       1440        9.79 -> 11.26  x1.15    21.00px
        900        6.12 ->  7.04  x1.15    21.00px

   The ramp is 7.5 / 8.5 / 9.5 / 10.3 / 11 / 11.5 / 12 rather than a straight
   line from 9.5, because the floor has to fade in from BELOW the label's own
   size or the second click inherits the same jump the first one just lost.
   Measured at 900px, the worst step-to-step ratio:

       flat 12px floor          x2.26 on click 1
       ramp starting at 9.5px   x1.15 on click 1, then x1.67 on click 2
       ramp starting at 7.5px   x1.15 on click 1, then x1.32 on click 2

   Monotonic at every width - each step is larger than the one before it. */

body[class*="pojo-a11y-resize-font-"] .privacy-checkbox .wpcf7-list-item-label,
body[class*="pojo-a11y-resize-font-"] .checkbox-group .first.last .wpcf7-list-item-label {
    font-size: calc(max(var(--a11y-cb-min), 0.58vw) * var(--a11y-scale-form)) !important;
    line-height: 1.25 !important;
}

body[class*="pojo-a11y-resize-font-"] .new-home-contact .privacy-checkbox .wpcf7-list-item-label,
body[class*="pojo-a11y-resize-font-"] .new-home-contact .checkbox-group .first.last .wpcf7-list-item-label {
    font-size: calc(max(var(--a11y-cb-min), 0.68vw) * var(--a11y-scale-form)) !important;
    line-height: 1.3 !important;
}

body[class*="pojo-a11y-resize-font-"] .privacy-checkbox input[type="checkbox"]:checked::before {
    font-size: calc(0.9vw * var(--a11y-scale-form)) !important;
    line-height: 1 !important;
}

body[class*="pojo-a11y-resize-font-"] .wpcf7-not-valid-tip {
    font-size: calc(max(14px, 0.7vw) * var(--a11y-scale-form)) !important;
    line-height: 1.2 !important;
}

body[class*="pojo-a11y-resize-font-"] .wpcf7 form .wpcf7-response-output {
    font-size: calc(max(14px, 0.7vw) * var(--a11y-scale-form)) !important;
    line-height: 1.3 !important;
}

body[class*="pojo-a11y-resize-font-"] .success-title {
    font-size: calc(1.3vw * var(--a11y-scale-form)) !important;
    line-height: 1.3 !important;
}

/* --- @media (min-width: 1681px) ---------------------------------------- */

@media (min-width: 1681px) {
    body[class*="pojo-a11y-resize-font-"] .new-home-contact .submit-col .global-btn {
        font-size: calc(1.3vw * var(--a11y-scale-form)) !important;
    }
}

/* --- @media (max-width: 767px) ----------------------------------------- */

@media (max-width: 767px) {
    body[class*="pojo-a11y-resize-font-"] input,
    body[class*="pojo-a11y-resize-font-"] textarea,
    body[class*="pojo-a11y-resize-font-"] select {
        font-size: calc(16px * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .form-field select {
        font-size: calc(4.4vw * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .main-contact-form label span:first-child {
        font-size: calc(3.4vw * var(--a11y-scale-form)) !important;
        line-height: 1 !important;
    }

    body[class*="pojo-a11y-resize-font-"] .privacy-checkbox .wpcf7-list-item-label {
        font-size: calc(9px * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .new-home-contact .privacy-checkbox .wpcf7-list-item-label,
    body[class*="pojo-a11y-resize-font-"] .new-home-contact .checkbox-group .first.last .wpcf7-list-item-label {
        font-size: calc(9px * var(--a11y-scale-form)) !important;
    }

    /* responsive.css declares this AFTER the 9px rules and at equal specificity,
       so it must stay last here too or the CF7-internal label (hidden on
       .privacy-checkbox.first, visible in other checkbox groups) drops to 9px. */
    body[class*="pojo-a11y-resize-font-"] .first.last .wpcf7-list-item-label {
        font-size: calc(14px * var(--a11y-scale-form)) !important;
        line-height: 1.2 !important;
    }

    body[class*="pojo-a11y-resize-font-"] .privacy-checkbox input[type="checkbox"]:checked::before {
        font-size: calc(12px * var(--a11y-scale-form)) !important;
    }

    /* Mobile floor is 12px, not the 14px used above: the consent tip carries
       the theme's `text-wrap: nowrap`, and 14px x 1.75 would push the single
       line past a 360px viewport. 12px x 1.75 = 21px still fits. */
    body[class*="pojo-a11y-resize-font-"] .wpcf7-not-valid-tip {
        font-size: calc(max(12px, 3vw) * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .wpcf7 form .wpcf7-response-output {
        font-size: calc(12px * var(--a11y-scale-form)) !important;
        line-height: 1.5 !important;
    }

    body[class*="pojo-a11y-resize-font-"] .submit-col .global-btn {
        font-size: calc(5vw * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .new-home-contact .submit-col .global-btn {
        font-size: calc(6.5vw * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .success-title {
        font-size: calc(18px * var(--a11y-scale-form)) !important;
    }
}


/* ==========================================================================
   SECTION 4b â€” COOKIE BANNER (#cc-banner-root)
   --------------------------------------------------------------------------
   Original sizes read from the inline <style id="cc-style"> block:
       .cc-root 14px / lh 1.5   .cc-title 16px      .cc-btn font:inherit (14px)
       .cc-lang-toggle 12px     .cc-modal-head h2 18px
       .cc-modal-close 24px/lh1 .cc-cat-desc 13px   .cc-required-badge 11px
       .cc-cookies-list (+ th/td) 12px

   Measured at step 200 before this file: .cc-title 16 -> 37.24px (runaway,
   266% of 14px) and .cc-body 14 -> 28px, while .cc-root, .cc-btn and every
   non-<p>/<span> element stayed frozen at 1.00x. Everything below is a calc
   against the curve, so nothing can freeze and nothing can compound.

   Curve: --a11y-scale-form, per Section 1, which assigns cookie elements to
   the form curve. (Section 4b's snippet shows --a11y-scale; the discrepancy is
   noted in the report â€” swapping the variable name is a one-line change.)
   ========================================================================== */

/* The generic collapse rule is keyed off the .cc-root CLASS, never the
   #cc-banner-root ID. An id would score (1,1,1) and out-rank every explicit
   pin below â€” `.cc-root .cc-title` is only (0,3,0) â€” silently flattening the
   whole banner back to the root size. Class-only keeps the pins on top. */

body[class*="pojo-a11y-resize-font-"] .cc-root :where(
    p, li, span, label, div, td, th, strong, em, small, a, button
) {
    font-size: inherit !important;
}

body[class*="pojo-a11y-resize-font-"] .cc-root {
    font-size: calc(14px * var(--a11y-scale-form)) !important;
    line-height: 1.5 !important;
}

/* .cc-title and .cc-btn start from a BUMPED baseline (16 -> 18, 14 -> 15) so
   the very first click is an unmistakable jump: title 16 -> 23.4px and button
   14 -> 19.5px, rather than 20.8 / 18.2. Both are still calc() against the
   curve, so nothing freezes and nothing compounds. */

body[class*="pojo-a11y-resize-font-"] .cc-title,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-title {
    font-size: calc(18px * var(--a11y-scale-form)) !important;
    line-height: 1.2 !important;
}

body[class*="pojo-a11y-resize-font-"] .cc-body,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-body {
    font-size: calc(14px * var(--a11y-scale-form)) !important;
    line-height: 1.5 !important;
}

body[class*="pojo-a11y-resize-font-"] .cc-btn,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-btn {
    font-size: calc(15px * var(--a11y-scale-form)) !important;
    line-height: 1.5 !important;
}

/* Each pin below is emitted twice â€” bare and .cc-root-scoped â€” so it wins
   whether the element sits in the banner or in the settings modal, and so it
   out-specifies the collapse rule above in both places. */

body[class*="pojo-a11y-resize-font-"] .cc-lang-toggle,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-lang-toggle {
    font-size: calc(12px * var(--a11y-scale-form)) !important;
    line-height: 1.5 !important;
}

body[class*="pojo-a11y-resize-font-"] .cc-modal-head h2,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-modal-head h2 {
    font-size: calc(18px * var(--a11y-scale-form)) !important;
    line-height: 1.3 !important;
}

body[class*="pojo-a11y-resize-font-"] .cc-modal-close,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-modal-close {
    font-size: calc(24px * var(--a11y-scale-form)) !important;
    line-height: 1 !important;
}

body[class*="pojo-a11y-resize-font-"] .cc-cat-desc,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-cat-desc {
    font-size: calc(13px * var(--a11y-scale-form)) !important;
    line-height: 1.5 !important;
}

body[class*="pojo-a11y-resize-font-"] .cc-required-badge,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-required-badge {
    font-size: calc(11px * var(--a11y-scale-form)) !important;
    line-height: 1.4 !important;
}

body[class*="pojo-a11y-resize-font-"] .cc-cookies-list,
body[class*="pojo-a11y-resize-font-"] .cc-cookies-list th,
body[class*="pojo-a11y-resize-font-"] .cc-cookies-list td,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-cookies-list,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-cookies-list th,
body[class*="pojo-a11y-resize-font-"] .cc-root .cc-cookies-list td {
    font-size: calc(12px * var(--a11y-scale-form)) !important;
    line-height: 1.5 !important;
}


/* ==========================================================================
   SECTION 4c â€” VALIDATION TIP POSITIONING
   --------------------------------------------------------------------------
   Text-field tips are static block elements that push the next field down â€”
   that auto-tracking behaviour is correct at every scale and is left alone.

   Only .privacy-checkbox.first .wpcf7-not-valid-tip is absolutely positioned
   off fixed offsets that do not track the font:
       desktop  bottom: -0.9vw            (-2vw for .new-home-contact)
       <=767px  top: 24px  / 36px
       <=600px  top: 51px !important
   With the tip at 1.75x those offsets leave the tip sitting on top of the
   checkbox label.

   The containing block is the problem, not just the offset. CF7 gives
   span.wpcf7-form-control-wrap `position: relative`, and in this row that span
   wraps ONLY the 18px checkbox â€” measured 38 x 22px at 375. The consent text is
   a SIBLING of that span (span.custom-check-label.wpcf7-list-item-label, 43px
   tall), so anchoring the tip to the wrap's own bottom edge drops it straight
   onto the middle of the consent text no matter which offset is used.

   Fix: take the wrap out of the positioning chain (position: static) and make
   the row itself the containing block, then anchor the tip to the row's bottom.
   `bottom: 0` auto-tracks however tall the consent label grows. Scaled
   padding-bottom on the row reserves the strip the tip occupies, so the tip
   never spills into the submit button below.

   position:static on the TIP is deliberately not used â€” the tip would then be
   laid out inside the ~38px-wide wrap and squeeze into a one-word column.
   ========================================================================== */

body[class*="pojo-a11y-resize-font-"] .privacy-checkbox.first {
    position: relative !important;
    padding-bottom: calc(max(14px, 0.7vw) * var(--a11y-scale-form) * 1.5 + 6px) !important;
}

body[class*="pojo-a11y-resize-font-"] .privacy-checkbox.first .wpcf7-form-control-wrap {
    position: static !important;
}

body[class*="pojo-a11y-resize-font-"] .privacy-checkbox.first .wpcf7-not-valid-tip,
body[class*="pojo-a11y-resize-font-"] .new-home-contact .privacy-checkbox.first .wpcf7-not-valid-tip {
    position: absolute !important;
    top: auto !important;
    bottom: 0 !important;
    right: 0 !important;
    left: auto !important;
    width: auto !important;
    max-width: 100% !important;
    margin: 0 !important;
    transform: none !important;
}

@media (max-width: 767px) {
    body[class*="pojo-a11y-resize-font-"] .privacy-checkbox.first {
        padding-bottom: calc(max(12px, 3vw) * var(--a11y-scale-form) * 1.5 + 6px) !important;
    }
}


/* ==========================================================================
   SECTION 5 â€” HEADINGS, BUTTONS, LISTS  (Elementor per-element sizes)
   --------------------------------------------------------------------------
   Every font-size declaration found in the page CSS files, restated against
   the curve, in the source media order (base -> 1024 -> 767).

     post-2.css   (/ , page-id-2)     27 declarations
     post-7.css   (/home/, page-id-7) 13 declarations
     post-10.css  (elementor-kit-10)   0 declarations

   Headings and icon lists use --a11y-scale; Elementor buttons use
   --a11y-scale-form. Where a size switches unit across a breakpoint (vw -> px)
   both variants are emitted.
   ========================================================================== */

/* ---------- post-2.css : base ------------------------------------------ */

body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-35756de .elementor-heading-title { font-size: calc(1vw    * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-018e35d .elementor-heading-title { font-size: calc(1.16vw * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-376ab17 .elementor-heading-title { font-size: calc(1.4vw  * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-b9a1332 .elementor-heading-title { font-size: calc(1.3vw  * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-06f057d .elementor-heading-title { font-size: calc(0.9vw  * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-2da207c .elementor-heading-title { font-size: calc(0.9vw  * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-d360c12 .elementor-heading-title { font-size: calc(0.9vw  * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-d25ee08 .elementor-heading-title { font-size: calc(0.9vw  * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-a1c56f7 .elementor-heading-title { font-size: calc(0.9vw  * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-f3fe74f .elementor-heading-title { font-size: calc(0.9vw  * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-0ab9270 .elementor-heading-title { font-size: calc(1.3vw  * var(--a11y-scale)) !important; }

body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-6579471 .elementor-icon-list-item > .elementor-icon-list-text,
body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-6579471 .elementor-icon-list-item > a {
    font-size: calc(0.9vw * var(--a11y-scale)) !important;
}

body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-d818c2e .elementor-button {
    font-size: calc(1.23vw * var(--a11y-scale-form)) !important;
}

/* ---------- post-2.css : @media (max-width: 1024px) -------------------- */

@media (max-width: 1024px) {
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-d818c2e .elementor-button {
        font-size: calc(2.4vw * var(--a11y-scale-form)) !important;
    }
}

/* ---------- post-2.css : @media (max-width: 767px) --------------------- */

@media (max-width: 767px) {
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-35756de .elementor-heading-title { font-size: calc(8px   * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-018e35d .elementor-heading-title { font-size: calc(5vw   * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-376ab17 .elementor-heading-title { font-size: calc(5vw   * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-b9a1332 .elementor-heading-title { font-size: calc(5vw   * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-06f057d .elementor-heading-title { font-size: calc(4vw   * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-2da207c .elementor-heading-title { font-size: calc(4vw   * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-d360c12 .elementor-heading-title { font-size: calc(4vw   * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-d25ee08 .elementor-heading-title { font-size: calc(4vw   * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-a1c56f7 .elementor-heading-title { font-size: calc(4vw   * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-f3fe74f .elementor-heading-title { font-size: calc(4vw   * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-0ab9270 .elementor-heading-title { font-size: calc(5.7vw * var(--a11y-scale)) !important; }

    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-6579471 .elementor-icon-list-item > .elementor-icon-list-text,
    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-6579471 .elementor-icon-list-item > a {
        font-size: calc(4vw * var(--a11y-scale)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .elementor-2 .elementor-element.elementor-element-d818c2e .elementor-button {
        font-size: calc(4.6vw * var(--a11y-scale-form)) !important;
    }
}

/* ---------- post-7.css : base ------------------------------------------ */

body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-e35af55 .elementor-heading-title { font-size: calc(1vw    * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-fbe440a .elementor-heading-title { font-size: calc(2vw    * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-53e545c .elementor-heading-title { font-size: calc(2vw    * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-dcfad32 .elementor-heading-title { font-size: calc(1.1vw  * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-98c6e51 .elementor-heading-title { font-size: calc(1.15vw * var(--a11y-scale)) !important; }
body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-9a3f99f .elementor-heading-title { font-size: calc(0.64vw * var(--a11y-scale)) !important; }

body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-2dd9023 .elementor-icon-list-item > .elementor-icon-list-text,
body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-2dd9023 .elementor-icon-list-item > a {
    font-size: calc(1.05vw * var(--a11y-scale)) !important;
}

/* ---------- post-7.css : @media (max-width: 767px) --------------------- */

@media (max-width: 767px) {
    body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-e35af55 .elementor-heading-title { font-size: calc(8px     * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-fbe440a .elementor-heading-title { font-size: calc(41px    * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-dcfad32 .elementor-heading-title { font-size: calc(20px    * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-98c6e51 .elementor-heading-title { font-size: calc(20.71px * var(--a11y-scale)) !important; }
    body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-9a3f99f .elementor-heading-title { font-size: calc(9.9px   * var(--a11y-scale)) !important; }

    body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-2dd9023 .elementor-icon-list-item > .elementor-icon-list-text,
    body[class*="pojo-a11y-resize-font-"] .elementor-7 .elementor-element.elementor-element-2dd9023 .elementor-icon-list-item > a {
        font-size: calc(20px * var(--a11y-scale)) !important;
    }
}

/* ---------- post-219.css : Elementor "single" theme-builder template ----
   /404 and any unmatched URL are NOT rendered by the theme's 404.php â€” an
   Elementor template (.elementor-219.elementor-location-single) takes over and
   pulls in post-219.css. Three declarations, one button, all breakpoints. */

body[class*="pojo-a11y-resize-font-"] .elementor-219 .elementor-element.elementor-element-b7bfd1f .elementor-button {
    font-size: calc(1.23vw * var(--a11y-scale-form)) !important;
}

@media (max-width: 1024px) {
    body[class*="pojo-a11y-resize-font-"] .elementor-219 .elementor-element.elementor-element-b7bfd1f .elementor-button {
        font-size: calc(2.4vw * var(--a11y-scale-form)) !important;
    }
}

@media (max-width: 767px) {
    body[class*="pojo-a11y-resize-font-"] .elementor-219 .elementor-element.elementor-element-b7bfd1f .elementor-button {
        font-size: calc(4.6vw * var(--a11y-scale-form)) !important;
    }
}

/* ---------- theme text outside Elementor widgets ----------------------- */
/* Privacy / accessibility modal body copy (assets/css/style.css) and the
   footer policy links, all of which the Section 3 reset would otherwise
   flatten to the body size. */

body[class*="pojo-a11y-resize-font-"] .privacy-wrapper .privacy-content h2 {
    font-size: calc(1.4vw * var(--a11y-scale)) !important;
    line-height: 1.6 !important;
}

body[class*="pojo-a11y-resize-font-"] .privacy-wrapper .privacy-content h3 {
    font-size: calc(1.1vw * var(--a11y-scale)) !important;
    line-height: 1.6 !important;
}

body[class*="pojo-a11y-resize-font-"] .privacy-wrapper .privacy-content :where(p, li, a, div) {
    font-size: calc(0.8vw * var(--a11y-scale)) !important;
    line-height: 1.7 !important;
}

body[class*="pojo-a11y-resize-font-"] .pv-links > span,
body[class*="pojo-a11y-resize-font-"] .pv-link {
    font-size: calc(0.8vw * var(--a11y-scale)) !important;
    line-height: 1 !important;
}

@media (max-width: 767px) {
    body[class*="pojo-a11y-resize-font-"] .privacy-wrapper .privacy-content h2 {
        font-size: calc(18px * var(--a11y-scale)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .privacy-wrapper .privacy-content h3 {
        font-size: calc(16px * var(--a11y-scale)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .privacy-wrapper .privacy-content :where(p, li, a) {
        font-size: calc(12px * var(--a11y-scale)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .pv-links > span,
    body[class*="pojo-a11y-resize-font-"] .pv-link {
        font-size: calc(14px * var(--a11y-scale)) !important;
    }
}


/* ==========================================================================
   SECTION 6 - ACCESSIBILITY TOOLBAR  (#pojo-a11y-toolbar)
   --------------------------------------------------------------------------
   Requested behaviour: the toolbar's own menu items should grow noticeably
   LESS than the page content they control, so the widget stays compact while
   the site text gets large.

   Left alone, the plugin scales its own menu on the same percentage curve as
   everything else - the item label goes 12.8px -> 25.6px at step 200, which is
   a doubling of a panel that is already the largest fixed element on screen.
   Here it rides --a11y-scale-tool instead: 12.8 -> 13.4px at the first click
   and 12.8 -> 16px at maximum, against 1.60x for body text.

   Baselines are the measured computed values with the toolbar untouched:
       li.pojo-a11y-toolbar-item a  and its .pojo-a11y-toolbar-icon span  12.8px
       p.pojo-a11y-toolbar-title                                          16px
   The title is included so it keeps its proportion to the items; the plugin
   excludes it from its own p rule, which would otherwise leave it frozen while
   the items moved.

   This is the ONLY rule in the file that reaches inside #pojo-a11y-toolbar,
   and it is gated like everything else - with no step class the toolbar is
   byte-identical to the plugin's stock rendering.
   ========================================================================== */

html body[class*="pojo-a11y-resize-font-"] #pojo-a11y-toolbar .pojo-a11y-toolbar-overlay ul.pojo-a11y-toolbar-items li.pojo-a11y-toolbar-item a,
html body[class*="pojo-a11y-resize-font-"] #pojo-a11y-toolbar .pojo-a11y-toolbar-overlay ul.pojo-a11y-toolbar-items li.pojo-a11y-toolbar-item a span,
html body[class*="pojo-a11y-resize-font-"] #pojo-a11y-toolbar li.pojo-a11y-toolbar-item a,
html body[class*="pojo-a11y-resize-font-"] #pojo-a11y-toolbar li.pojo-a11y-toolbar-item a span {
    font-size: calc(12.8px * var(--a11y-scale-tool)) !important;
    line-height: 1.5 !important;
}

html body[class*="pojo-a11y-resize-font-"] #pojo-a11y-toolbar p.pojo-a11y-toolbar-title {
    font-size: calc(16px * var(--a11y-scale-tool)) !important;
    line-height: 1.4 !important;
}


/* ==========================================================================
   SECTION 7 - CHECKBOX TICK VISIBILITY IN THE COLOUR MODES
   --------------------------------------------------------------------------
   Gate: the pojo colour-mode body classes, NOT the resize-font class. With no
   colour mode chosen nothing here matches, so Rule A still holds - this file
   contributes zero computed differences to the default render.

   The consent checkbox is an appearance:none box whose tick is a ::before
   glyph. In the default design the box is TRANSPARENT and the tick is #fff,
   so the tick is only legible because of whatever ancestor happens to be
   painted behind it. Measured contrast of tick against the effective backdrop:

       default              #fff on #00211b (elementor section)   16.94:1
       high contrast        #fff on #000    (label)               21.00:1
       negative contrast    #fff on #000    (input)               21.00:1
       grayscale            #fff on #00211b (elementor section)   16.94:1
       light background     #000 on #fff    (input)               21.00:1

   All five pass today, but three of them pass only because an ancestor
   happens to be dark - nothing in the checkbox's own rules guarantees it. Any
   future section background change silently turns the tick invisible in those
   modes. High contrast and grayscale therefore get a self-contained pair: an
   opaque white box with a black tick and a black border. That is 21:1, it
   carries no hue so grayscale cannot flatten it, and it does not depend on any
   ancestor.

   NEGATIVE CONTRAST IS DELIBERATELY DIFFERENT. The plugin pins that mode's
   input background to #000 through a selector carrying an id
   (:not(#pojo-a11y-toolbar)), which outranks anything reachable here without
   an id of its own. Forcing a white box there was measured and it LOST the
   background but WON the tick colour - black tick on the plugin's black box,
   contrast 1.00:1, invisible. So negative contrast keeps the plugin's black
   box and only the tick is pinned, to #fff: 21:1.

   Light background is likewise NOT restated - assets/css/style.css already
   pins that mode to white box / black tick, and its selector also carries an
   id, so re-declaring here would only start a specificity fight to reach the
   value it already has.
   ========================================================================== */

html body.pojo-a11y-high-contrast .privacy-checkbox input[type="checkbox"],
html body.pojo-a11y-high-contrast .new-home-contact .privacy-checkbox input[type="checkbox"],
html body.pojo-a11y-high-contrast .checkbox-group .first.last input[type="checkbox"],
html body.pojo-a11y-grayscale .privacy-checkbox input[type="checkbox"],
html body.pojo-a11y-grayscale .new-home-contact .privacy-checkbox input[type="checkbox"],
html body.pojo-a11y-grayscale .checkbox-group .first.last input[type="checkbox"] {
    -webkit-appearance: none !important;
    appearance: none !important;
    background: #fff !important;
    background-color: #fff !important;
    border: 1px solid #000 !important;
    opacity: 1 !important;
}

html body.pojo-a11y-high-contrast .privacy-checkbox input[type="checkbox"]:checked::before,
html body.pojo-a11y-high-contrast .new-home-contact .privacy-checkbox input[type="checkbox"]:checked::before,
html body.pojo-a11y-high-contrast .checkbox-group .first.last input[type="checkbox"]:checked::before,
html body.pojo-a11y-grayscale .privacy-checkbox input[type="checkbox"]:checked::before,
html body.pojo-a11y-grayscale .new-home-contact .privacy-checkbox input[type="checkbox"]:checked::before,
html body.pojo-a11y-grayscale .checkbox-group .first.last input[type="checkbox"]:checked::before {
    content: "\2713" !important;
    color: #000 !important;
    opacity: 1 !important;
}

/* Negative contrast: black box is the plugin's, tick forced white on top. */
html body.pojo-a11y-negative-contrast .privacy-checkbox input[type="checkbox"]:checked::before,
html body.pojo-a11y-negative-contrast .new-home-contact .privacy-checkbox input[type="checkbox"]:checked::before,
html body.pojo-a11y-negative-contrast .checkbox-group .first.last input[type="checkbox"]:checked::before {
    content: "\2713" !important;
    color: #fff !important;
    opacity: 1 !important;
}


/* ==========================================================================
   SECTION 8 - MEDIA STAYS VISIBLE IN THE COLOUR MODES
   --------------------------------------------------------------------------
   Gate: the pojo colour-mode body classes only. Nothing here matches the
   default render, so Rule A still holds.

   THE BUG
   The plugin repaints the page with the `background` SHORTHAND, e.g.

       body.pojo-a11y-high-contrast img { background: #808080 !important }

   A shorthand resets every longhand it owns, so this both paints a plate AND
   sets `background-image: none`. Two things break:

   1. Transparent artwork gets an opaque plate behind it. Measured on / in high
      contrast: every <img> computed background-color rgb(128,128,128), <svg>
      and <video> rgb(0,0,0). The site logo, the six amenity icons and the mute
      button are transparent PNGs, so each one rendered as a grey slab with the
      artwork barely readable on top. Photographs looked fine only because they
      are opaque and cover their own plate.

   2. Any real CSS background image is wiped. On this site the only author-set
      background image outside unused vendor assets is the custom <select>
      arrow in assets/css/style.css, which disappeared entirely.

   THE FIX
   1. Give media elements their transparency back with background-color, NOT
      the shorthand - using the shorthand here would re-wipe background-image
      and re-break anything that legitimately has one.
   2. Re-declare the select arrow, plus the position/size/repeat longhands the
      plugin's shorthand reset to initial.

   WHAT IS DELIBERATELY LEFT ALONE
   assets/css/style.css adds its own plates in light-background mode
   (.icon-bg img, .transparent-bg, .transparent-bg img, .svg-btn-cion svg,
   .btn-icon .elementor-button-icon). Those exist so pale line-art stays
   readable once the page turns white, and they are wanted. Their selectors
   carry an id via :not(#pojo-a11y-toolbar), scoring (1,3,1), so they keep
   winning over the (0,1,2) reset below - by design, not by accident.

   #pojo-a11y-toolbar is unaffected: the plugin already exempts it from the
   blanket rules, so its media is transparent to begin with and this reset is
   a no-op there.
   ========================================================================== */

html body.pojo-a11y-high-contrast img:not(#pojo-a11y-toolbar),
html body.pojo-a11y-high-contrast svg:not(#pojo-a11y-toolbar),
html body.pojo-a11y-high-contrast video:not(#pojo-a11y-toolbar),
html body.pojo-a11y-high-contrast picture:not(#pojo-a11y-toolbar),
html body.pojo-a11y-high-contrast canvas:not(#pojo-a11y-toolbar),
html body.pojo-a11y-negative-contrast img:not(#pojo-a11y-toolbar),
html body.pojo-a11y-negative-contrast svg:not(#pojo-a11y-toolbar),
html body.pojo-a11y-negative-contrast video:not(#pojo-a11y-toolbar),
html body.pojo-a11y-negative-contrast picture:not(#pojo-a11y-toolbar),
html body.pojo-a11y-negative-contrast canvas:not(#pojo-a11y-toolbar),
html body.pojo-a11y-light-background img:not(#pojo-a11y-toolbar),
html body.pojo-a11y-light-background svg:not(#pojo-a11y-toolbar),
html body.pojo-a11y-light-background video:not(#pojo-a11y-toolbar),
html body.pojo-a11y-light-background picture:not(#pojo-a11y-toolbar),
html body.pojo-a11y-light-background canvas:not(#pojo-a11y-toolbar),
html body.pojo-a11y-grayscale img:not(#pojo-a11y-toolbar),
html body.pojo-a11y-grayscale svg:not(#pojo-a11y-toolbar),
html body.pojo-a11y-grayscale video:not(#pojo-a11y-toolbar),
html body.pojo-a11y-grayscale picture:not(#pojo-a11y-toolbar),
html body.pojo-a11y-grayscale canvas:not(#pojo-a11y-toolbar) {
    background-color: transparent !important;
}

/* Custom <select> arrow, wiped by the plugin's background shorthand.
   Dark modes keep the theme's cream arrow (readable on the black field). */
html body.pojo-a11y-high-contrast select:not(#pojo-a11y-toolbar),
html body.pojo-a11y-negative-contrast select:not(#pojo-a11y-toolbar),
html body.pojo-a11y-grayscale select:not(#pojo-a11y-toolbar) {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='10' viewBox='0 0 16 10'%3E%3Cpath d='M1 1l7 7 7-7' stroke='%23FAF3E8' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important;
    background-repeat: no-repeat !important;
    background-position: right 1vw center !important;
    background-size: 1vw !important;
}

/* Light background turns the field white, so the cream arrow would vanish -
   same glyph, black stroke. */
html body.pojo-a11y-light-background select:not(#pojo-a11y-toolbar) {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='10' viewBox='0 0 16 10'%3E%3Cpath d='M1 1l7 7 7-7' stroke='%23000000' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important;
    background-repeat: no-repeat !important;
    background-position: right 1vw center !important;
    background-size: 1vw !important;
}

@media (max-width: 767px) {
    html body.pojo-a11y-high-contrast select:not(#pojo-a11y-toolbar),
    html body.pojo-a11y-negative-contrast select:not(#pojo-a11y-toolbar),
    html body.pojo-a11y-grayscale select:not(#pojo-a11y-toolbar),
    html body.pojo-a11y-light-background select:not(#pojo-a11y-toolbar) {
        background-position: right 16px center !important;
        background-size: 14px !important;
    }
}


/* --------------------------------------------------------------------------
   SECTION 8b - DARK ARTWORK IN THE DARK COLOUR MODES
   --------------------------------------------------------------------------
   Section 8 removes the plugin's plate from every image. For artwork that is
   light that is exactly right. Two images on this site are DARK artwork and
   were only legible because of the plate they were sitting on - measured by
   rasterising each file and averaging the luminance of its opaque pixels:

       mute.png                    lum   0   (pure black glyph)
       mexico_Desktop_vector.svg   lum  26
       every logo / price / icon1-6  lum 237-255

   mute.png is a control - the video mute toggle - so it has to stay readable.
   In the dark modes its button paints black (negative contrast) or dark purple
   rgb(96,0,64) (high contrast), and a black glyph on either is unreadable.
   Inverting the glyph gives white-on-dark: measured 13.4:1 in high contrast.
   Light background is excluded on purpose - that mode turns the button white,
   where the original black glyph is already correct.

   mexico_Desktop_vector.svg is deliberately NOT inverted. It is
   .shape-img.new-home-shape, a 152x780 decorative divider between the copy
   panel and the hero photo. Inverting it would drop a full-height white bar
   through the layout. Left alone it simply blends into the dark page, which is
   what a decorative divider should do in a high-contrast mode - and it is
   already an improvement on the plugin's stock rendering, which turned it into
   a solid grey slab. Flagged rather than "fixed".
   -------------------------------------------------------------------------- */

html body.pojo-a11y-high-contrast .mute-toggle img:not(#pojo-a11y-toolbar),
html body.pojo-a11y-high-contrast img.muteIcon:not(#pojo-a11y-toolbar),
html body.pojo-a11y-negative-contrast .mute-toggle img:not(#pojo-a11y-toolbar),
html body.pojo-a11y-negative-contrast img.muteIcon:not(#pojo-a11y-toolbar) {
    filter: invert(1) !important;
}


/* ==========================================================================
   SECTION 9 - COOKIE POPUP TOGGLE SWITCHES (.cc-toggle / .cc-slider)
   --------------------------------------------------------------------------
   Gate: the pojo colour-mode body classes only. Rule A unaffected.

   The consent categories in the cookie settings modal are iOS-style switches:

       label.cc-toggle (44x24)
         > input[type=checkbox]        opacity:0, 0x0   - visually hidden
         > span.cc-slider              the pill, ::before is the round knob

   The whole on/off signal is CARRIED BY THE PILL COLOUR, from <style id="cc-style">:

       .cc-slider                         background #D1D5DB  (grey  = off)
       .cc-toggle input:checked+.cc-slider background #10B981  (green = on)
       .cc-slider::before                 background #FFF     (knob, both states)

   The plugin repaints every element with `background: <colour> !important`, and
   the pill is just a <span>, so it gets flattened to a single flat colour in
   both states. The knob is a ::before, which the plugin never selects, so it
   stays #FFF. Measured on the live modal:

       mode                OFF pill   ON pill    knob     result
       default             #D1D5DB    #10B981    #FFF     correct
       high contrast       #000       #000       #FFF     on == off
       negative contrast   #000       #000       #FFF     on == off
       light background    #FFF       #FFF       #FFF     INVISIBLE, 1:1
       grayscale           #D1D5DB    #10B981    #FFF     survives, but the
                                                          grayscale filter
                                                          renders the two ~1.7:1
                                                          apart

   Light background is the worst case - white knob on a white pill on a white
   modal: the control cannot be seen at all, let alone read.

   FIX
   Stop depending on hue and encode the state as HOLLOW vs FILLED, which
   survives any colour mode and any form of colour blindness, and still reads
   after a grayscale filter:

       off  =  pill in the page's background colour + 2px ring + knob in the
               page's FOREGROUND colour
       on   =  pill FILLED with the foreground colour + knob in the background
               colour

   The knob is therefore always the inverse of its own pill, and the two states
   are inverses of each other, so ON and OFF are never confusable.

   The ring is `box-shadow: inset`, not `border`. A border would sit inside the
   44x24 box (box-sizing:border-box comes from the theme's `*` rule) and shrink
   the slider's content box to 20px, while the knob is positioned `top:3px`
   with `height:18px` off that content box - it would overhang and clip. An
   inset shadow paints in the same place with zero layout effect.

   Knob position is untouched: cc-style already translates it, including the
   RTL `translateX(-20px)` variant this site uses.
   ========================================================================== */

/* --- dark modes: page is black, foreground is white --------------------- */

html body.pojo-a11y-high-contrast .cc-toggle input + .cc-slider:not(#pojo-a11y-toolbar),
html body.pojo-a11y-negative-contrast .cc-toggle input + .cc-slider:not(#pojo-a11y-toolbar) {
    background: #000 !important;
    box-shadow: inset 0 0 0 2px #fff !important;
}

html body.pojo-a11y-high-contrast .cc-toggle input + .cc-slider:not(#pojo-a11y-toolbar)::before,
html body.pojo-a11y-negative-contrast .cc-toggle input + .cc-slider:not(#pojo-a11y-toolbar)::before {
    background: #fff !important;
}

html body.pojo-a11y-high-contrast .cc-toggle input:checked + .cc-slider:not(#pojo-a11y-toolbar),
html body.pojo-a11y-negative-contrast .cc-toggle input:checked + .cc-slider:not(#pojo-a11y-toolbar) {
    background: #fff !important;
    box-shadow: inset 0 0 0 2px #fff !important;
}

html body.pojo-a11y-high-contrast .cc-toggle input:checked + .cc-slider:not(#pojo-a11y-toolbar)::before,
html body.pojo-a11y-negative-contrast .cc-toggle input:checked + .cc-slider:not(#pojo-a11y-toolbar)::before {
    background: #000 !important;
}

/* --- light modes: page is white, foreground is black -------------------- */

html body.pojo-a11y-light-background .cc-toggle input + .cc-slider:not(#pojo-a11y-toolbar),
html body.pojo-a11y-grayscale .cc-toggle input + .cc-slider:not(#pojo-a11y-toolbar) {
    background: #fff !important;
    box-shadow: inset 0 0 0 2px #000 !important;
}

html body.pojo-a11y-light-background .cc-toggle input + .cc-slider:not(#pojo-a11y-toolbar)::before,
html body.pojo-a11y-grayscale .cc-toggle input + .cc-slider:not(#pojo-a11y-toolbar)::before {
    background: #000 !important;
}

html body.pojo-a11y-light-background .cc-toggle input:checked + .cc-slider:not(#pojo-a11y-toolbar),
html body.pojo-a11y-grayscale .cc-toggle input:checked + .cc-slider:not(#pojo-a11y-toolbar) {
    background: #000 !important;
    box-shadow: inset 0 0 0 2px #000 !important;
}

html body.pojo-a11y-light-background .cc-toggle input:checked + .cc-slider:not(#pojo-a11y-toolbar)::before,
html body.pojo-a11y-grayscale .cc-toggle input:checked + .cc-slider:not(#pojo-a11y-toolbar)::before {
    background: #fff !important;
}


/* ==========================================================================
   SECTION 10 - LET THE 100vh HERO CONTAINER SCROLL WHEN TEXT IS ENLARGED
   --------------------------------------------------------------------------
   Gate: the resize-font step classes. Nothing here applies at rest.

   .elementor-element-419b32c is the hero container. It carries the theme's
   `y-hidden` class, which post-2.css defines as `overflow-y: hidden`, and on
   wide screens it is height-capped to the viewport - responsive.css locks
   .main-wrapper to `max-height:100vh; overflow:hidden !important` from 1280px
   up, and this flex child stretches to fill it.

   At the default size the content fits exactly, so nothing is lost. Once the
   text is scaled the content grows past the cap, and because BOTH the
   container (overflow-y:hidden) and the page (.main-wrapper overflow:hidden)
   are locked, the overflow is simply clipped and unreachable - there is
   nothing to scroll. Measured at 1920x1031:

       step        container scrollHeight   clipped and unreachable
       none        1031 (= clientHeight)      0px
       130         1071                      40px
       200         1291                     260px

   Flipping the container's own overflow to `auto` inside the gate gives the
   clipped content somewhere to go, without unlocking the page layout the
   design depends on. Verified: at step 200 the container scrolls the full
   260px.

   This engages ONLY where the container is actually height-capped. Where the
   height is content-driven the container just grows and the PAGE scrolls, so
   `auto` never produces a scrollbar and no nested scroll trap appears:

       375px    h 1253 -> 2150   inner overflow 0    page scroll 972 -> 1875
       1024px   h  507 -> 1085   inner overflow 0    page scroll   0 ->  285
       1300px   h  800 -> 800    inner overflow 196  page scroll   0 (capped)

   overscroll-behavior:contain stops a wheel gesture that reaches the bottom of
   the container from chaining to the document behind it.

   NOTE - not fixable from CSS: a scrollable region should also be reachable by
   keyboard, which needs tabindex="0" (and ideally role="region" plus a label)
   on the container. That is an HTML change, so it is flagged rather than done
   here.
   ========================================================================== */

body[class*="pojo-a11y-resize-font-"] .elementor-element-419b32c,
body[class*="pojo-a11y-resize-font-"] .e-con.y-hidden {
    overflow-y: auto !important;
    overscroll-behavior: contain !important;

    /* See SECTION 10b - without this the top of the content is unreachable. */
    justify-content: flex-start !important;
    justify-content: safe center !important;
}


/* ==========================================================================
   SECTION 10b - WHY `safe center` AND NOT JUST `center`
   --------------------------------------------------------------------------
   The container is `display:flex; flex-direction:column; justify-content:
   center`. Centring is fine while the content fits, but once it is TALLER than
   the container the overflow spills equally in BOTH directions - and a scroll
   container cannot scroll to a negative offset. The half that lands above the
   scroll origin is permanently unreachable.

   That is the "I can scroll to the bottom but the top is cut off" symptom.
   Measured at 1920x1031, step 200, with the container already at scrollTop 0:

       child 1   top -221px      <- above the origin, unreachable
       child 2   top  -69px      <- partly unreachable
       child 3   top  279px
       ...

   Making overflow scrollable did not help by itself, because scrollTop 0 was
   ALREADY as far up as the browser would go. It also explains why the earlier
   reachable range looked small: at step 200 the container reported 260px of
   scroll, but the real overflow was 519px - the other 259px sat above the
   origin and could never be scrolled to.

   `safe center` keeps centring while the content fits and silently degrades to
   start alignment the moment it would overflow, so nothing is ever pushed off
   the top. It is declared AFTER a plain `flex-start`, so a browser too old to
   parse the `safe` keyword drops that line and keeps flex-start - always
   top-aligned while scaled, which is slightly less pretty but still loses no
   content. Support for `safe`: Chrome/Edge 93+, Firefox 63+, Safari 15.4+.

   After the fix, at scrollTop 0:

       step   first child top   full scroll range   top clipped
       none        +104px             0px              no (rule not applied)
       130          +38px            80px              no
       200          +38px           519px              no

   Only the main axis is touched. `align-items: center` governs the cross axis,
   and the container was measured with scrollWidth == clientWidth (715px) and a
   minimum child offset of +63px, so there is no horizontal overflow to rescue
   and no reason to risk changing horizontal centring.
   ========================================================================== */


/* ==========================================================================
   SECTION 11 - FORM CONTROL GEOMETRY
   --------------------------------------------------------------------------
   Gate: the resize-font step classes. Nothing here applies at rest.

   Sections 4/4b scaled the TEXT in the form. They did not scale the BOXES, and
   every box on this form is sized in vw or fixed px, so the text grew inside a
   container that never moved. Measured at 1920 with the deployed file:

       element                base      step 130       step 200
       input   font           19.2px    25.0px         33.6px
       input   height         42px      42px  (fixed)  42px  (fixed)
       submit  font           25.0px    32.4px         43.7px
       submit  line box       39.9px    51.9px         69.9px
       submit  height         42px      42px  (fixed)  42px  (fixed)

   So at step 200 the submit button was trying to draw a 70px line of text
   inside a 42px box - the label sat off-centre and was clipped top and bottom.
   That is the reported "height and position is not showing properly".

   WHAT IS SCALED
   - input / textarea / select: height and padding, on the form curve, mirroring
     the theme's own values per breakpoint (2.2vw base, 40px <=767, 38px <=600).
   - the custom select arrow's background-position / background-size, so it
     stays pinned to the field edge as the field grows.
   - checkbox width/height AND their margin-left, so the gap between box and
     consent text scales with the box.

   THE SUBMIT BUTTON IS DELIBERATELY DIFFERENT
   `height: auto` + `min-height: calc(<original> * curve)` + `line-height: 1.2`.
   Three findings drove this:
     1. Scaling `height` outright still clipped, because the theme's
        `line-height: 1.6` on a 43.7px font is a 70px line box - taller than a
        scaled 2.2vw box at some steps. auto height can never clip; the
        min-height keeps it on the design grid.
     2. line-height 1.6 is fine at 25px and enormous at 44px. 1.2 keeps the
        button proportionate; measured need at step 200 drops 70px -> 52px.
     3. The button's HORIZONTAL padding is deliberately NOT scaled. Scaling it
        was tried and measured: 1.4vw * 1.75 = 47px per side ate the 256px
        button down to 162px of content while the label needs 186px, so it
        wrapped to two lines and the button ballooned to 157px tall. The button
        is `w-100`, so horizontal padding buys nothing and only squeezes.

   FLEX SHRINK ON THE CONSENT ROW
   The consent checkbox lives in `span.wpcf7-form-control-wrap`, a flex item
   with the default `flex: 0 1 auto`. Enlarging the checkbox did not widen its
   wrapper - the wrapper stayed at 38px while the checkbox grew to 50px, so the
   box overflowed its own wrapper and sat 12px ON TOP of the consent text.
   Pinning the wrapper chain to `flex: none` lets it take its natural width and
   the label reflow around it. Measured horizontal clearance between checkbox
   and label (negative = clear):

       step   before        after
       none   -10px         -10px  (unchanged)
       130     -1px         -12px
       200    +12px         -17px  (was overlapping)
   ========================================================================== */

/* --- fields: height + padding ------------------------------------------- */

body[class*="pojo-a11y-resize-font-"] .new-home-contact input:not([type="checkbox"]):not([type="radio"]),
body[class*="pojo-a11y-resize-font-"] textarea,
body[class*="pojo-a11y-resize-font-"] select {
    height: calc(2.2vw * var(--a11y-scale-form)) !important;
    padding: calc(0.5vw * var(--a11y-scale-form)) calc(1vw * var(--a11y-scale-form)) calc(0.2vw * var(--a11y-scale-form)) calc(1vw * var(--a11y-scale-form)) !important;
}

body[class*="pojo-a11y-resize-font-"] input:not([type="checkbox"]):not([type="radio"]),
body[class*="pojo-a11y-resize-font-"] textarea,
body[class*="pojo-a11y-resize-font-"] select {
    padding: calc(0.4vw * var(--a11y-scale-form)) calc(1vw * var(--a11y-scale-form));
}

body[class*="pojo-a11y-resize-font-"] select {
    background-position: right calc(1vw * var(--a11y-scale-form)) center !important;
    background-size: calc(1vw * var(--a11y-scale-form)) !important;
    padding: calc(0.7vw * var(--a11y-scale-form)) calc(1.4vw * var(--a11y-scale-form)) !important;
    padding-right: calc(3vw * var(--a11y-scale-form)) !important;
}

/* --- submit button: auto height, scaled floor, tightened leading -------- */

body[class*="pojo-a11y-resize-font-"] .submit-col .global-btn {
    height: auto !important;
    min-height: calc(2.2vw * var(--a11y-scale-form)) !important;
    line-height: 1.2 !important;
}

/* --- checkboxes. Source order mirrors the theme: `.first.last input` is
       declared BEFORE `.new-home-contact .privacy-checkbox input` because the
       two tie on specificity and the theme resolves them by order. Reversing
       them shrinks the consent box from 1.5vw to 1vw. ---------------------- */

body[class*="pojo-a11y-resize-font-"] .first.last input[type="checkbox"] {
    width: calc(1vw * var(--a11y-scale-form)) !important;
    height: calc(1vw * var(--a11y-scale-form)) !important;
    margin-left: calc(0.5vw * var(--a11y-scale-form)) !important;
    padding: 0 !important;
}

body[class*="pojo-a11y-resize-font-"] .privacy-checkbox input[type="checkbox"] {
    width: calc(1.2vw * var(--a11y-scale-form)) !important;
    height: calc(1.2vw * var(--a11y-scale-form)) !important;
    margin-left: calc(0.6vw * var(--a11y-scale-form)) !important;
    padding: 0 !important;
    flex: none !important;
}

body[class*="pojo-a11y-resize-font-"] .new-home-contact .privacy-checkbox input[type="checkbox"] {
    width: calc(1.5vw * var(--a11y-scale-form)) !important;
    height: calc(1.5vw * var(--a11y-scale-form)) !important;
}

/* Stop the CF7 wrapper chain from shrinking below the enlarged checkbox. */
body[class*="pojo-a11y-resize-font-"] .privacy-checkbox .wpcf7-form-control-wrap,
body[class*="pojo-a11y-resize-font-"] .privacy-checkbox .wpcf7-form-control.wpcf7-checkbox,
body[class*="pojo-a11y-resize-font-"] .privacy-checkbox .wpcf7-list-item.first.last {
    flex: none !important;
}

@media (max-width: 767px) {
    body[class*="pojo-a11y-resize-font-"] input:not([type="checkbox"]):not([type="radio"]),
    body[class*="pojo-a11y-resize-font-"] textarea,
    body[class*="pojo-a11y-resize-font-"] select {
        padding: calc(8px * var(--a11y-scale-form)) calc(16px * var(--a11y-scale-form)) !important;
        height: calc(40px * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .form-field select {
        padding: calc(12px * var(--a11y-scale-form)) calc(16px * var(--a11y-scale-form)) !important;
        padding-right: calc(40px * var(--a11y-scale-form)) !important;
        background-position: right calc(16px * var(--a11y-scale-form)) center !important;
        background-size: calc(14px * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .submit-col .global-btn {
        min-height: calc(40px * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .first.last input[type="checkbox"] {
        width: calc(22px * var(--a11y-scale-form)) !important;
        height: calc(22px * var(--a11y-scale-form)) !important;
        margin-left: calc(13px * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .privacy-checkbox input[type="checkbox"] {
        width: calc(18px * var(--a11y-scale-form)) !important;
        height: calc(18px * var(--a11y-scale-form)) !important;
        margin-left: calc(12px * var(--a11y-scale-form)) !important;
    }
}

@media (max-width: 600px) {
    body[class*="pojo-a11y-resize-font-"] .new-home-contact input:not([type="checkbox"]):not([type="radio"]),
    body[class*="pojo-a11y-resize-font-"] textarea,
    body[class*="pojo-a11y-resize-font-"] select {
        height: calc(38px * var(--a11y-scale-form)) !important;
    }

    body[class*="pojo-a11y-resize-font-"] .new-home-contact .submit-col .global-btn {
        min-height: calc(38px * var(--a11y-scale-form)) !important;
    }
}


/* ==========================================================================
   SECTION 12 - LANDING PAGE  (/landing/ , page-id-702, .elementor-702)
   --------------------------------------------------------------------------
   SCOPE: every selector below is scoped to `.elementor-702` or `.lp-form`,
   both of which exist ONLY on /landing/. Nothing in this section can reach any
   other page, and nothing above this comment was modified.

   Gate: the same `pojo-a11y-resize-font-*` step classes as the rest of the
   file, so Rule A still holds - with no size chosen the landing page renders
   byte-identically.

   WHY IT IS NEEDED
   Sections 3-5 were written for `/` (.elementor-2), `/home/` (.elementor-7)
   and the Elementor single template (.elementor-219). /landing/ is a fourth
   Elementor document with its own stylesheet, `post-702.css`, plus a page-only
   theme stylesheet, `assets/css/lp-style.css`, and neither was represented.
   Measured on the live page at 1440 with the deployed file, step 200:

     element                              base       step 200      result
     h2 heading            2.7vw          38.88px -> 25.60px       SHRANK x0.66
     h2 heading            3.4vw          48.96px -> 25.60px       SHRANK x0.52
     p  heading            1.2vw          17.28px -> 51.20px       RAN AWAY x2.96
     p  heading            1.1vw          15.84px -> 51.20px       RAN AWAY x3.23
     p  heading            0.95vw         13.68px -> 51.20px       RAN AWAY x3.74
     p  heading            0.85vw         12.24px -> 51.20px       RAN AWAY x4.18
     span.neighborhood-circle-small        24.48px -> 51.20px      RAN AWAY x2.09
     a.elementor-item      1.3vw          18.72px -> 18.72px       FROZEN x1.00
     span.elementor-button-text 1.5vw      21.60px -> 21.60px      FROZEN x1.00

   Two distinct causes:

   a) SHRANK - Section 3's `.elementor :where(h1..h6,.elementor-heading-title)`
      safety net collapses every heading to the body size. That is correct only
      where an explicit per-element size is restored afterwards, and post-702
      had no such rules. All 66 heading widgets on the page carry an explicit
      size in post-702.css; all 66 are restored below.

   b) RAN AWAY - Elementor renders a heading widget with the HTML-tag setting
      `p` as a literal `<p class="elementor-heading-title">`. The plugin's own
      `p:not(.pojo-a11y-toolbar-title)` scores (0,2,2) while Section 3's
      `body[attr] :is(.elementor,...) :where(p,...)` scores only (0,2,1), so the
      plugin wins and the percentage chain survives. 39 of the 66 headings on
      this page use the `p` tag. The same tie-break also lets the CF7 wrapper
      `<p>` elements run to 200%, which inflates their `<br>` line boxes and
      pushes the form fields apart.

      Fixed page-locally by SECTION 12a, which adds an `html` element to reach
      (0,2,3) and beat the plugin. The shared Section 3 rule is left exactly as
      it was, so no other page changes.

   c) FROZEN - `<a>` and `<button>` are not in the plugin's selector list at
      all, so the nav menu links and the two Elementor buttons never moved.

   post-702.css font-size declarations extracted: 135, in 2 media contexts
   (base and max-width:767px), collapsing to 26 distinct value groups.
   post-10.css (elementor-kit-10): 0 font-size declarations.
   lp-style.css adds 4 more (.horiz-currencly, .neighborhood-circle-small at
   base and at max-width:768px) plus the form geometry handled in 12e.

   `:is(...)` is used to group the element-id selectors. `:is()` takes the
   specificity of its most specific argument - a single class here - so
   `html body[attr] .elementor-702 :is(#a,#b,...) .elementor-heading-title`
   scores (0,4,2) exactly as the expanded form would, and outranks 12a's
   (0,2,3), the plugin's (0,2,2) and Section 3's (0,2,1).
   ========================================================================== */


/* --------------------------------------------------------------------------
   SECTION 12a - kill the <p>/<li> percentage chain on this page only
   --------------------------------------------------------------------------
   (0,2,3): html + body = 2 elements, [attr] + .elementor-702 = 2 classes,
   :is(p,li) = 1 element. Beats the plugin's (0,2,2).

   Deliberately limited to p and li. span/label/legend/code/pre/dd/dt/
   blockquote are already collapsed correctly by Section 3, and widening this
   rule to them would out-specify Section 4's own pins on
   .wpcf7-not-valid-tip (0,2,1) and .success-title (0,2,1) and flatten the
   validation messages.
   -------------------------------------------------------------------------- */

html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(p, li) {
    font-size: inherit !important;
}


/* --------------------------------------------------------------------------
   SECTION 12b - post-702.css, base breakpoint
   -------------------------------------------------------------------------- */

/* 2.7vw - hero + section titles (12 widgets, lh 1.1 / 1 kept from source) */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
    .elementor-element-7fb6dfa, .elementor-element-1916f61, .elementor-element-7555beb,
    .elementor-element-ed2eb6a, .elementor-element-6bafbf6, .elementor-element-6d047d7,
    .elementor-element-f220106, .elementor-element-6980793, .elementor-element-f21fc0e,
    .elementor-element-95e3de9, .elementor-element-ac1f361, .elementor-element-61300ee
) .elementor-heading-title {
    font-size: calc(2.7vw * var(--a11y-scale)) !important;
}

/* 3.4vw - the single largest heading on the page */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-3c79fd0 .elementor-heading-title {
    font-size: calc(3.4vw * var(--a11y-scale)) !important;
}

/* 2.5vw */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
    .elementor-element-d7c1442, .elementor-element-d8e8eea, .elementor-element-832242c,
    .elementor-element-a7d98b5, .elementor-element-31e2670, .elementor-element-6239359,
    .elementor-element-b9c6c6d, .elementor-element-cc5a454, .elementor-element-4f983c9,
    .elementor-element-345d1ea, .elementor-element-399ce60
) .elementor-heading-title {
    font-size: calc(2.5vw * var(--a11y-scale)) !important;
}

/* 2vw */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
    .elementor-element-779b5de, .elementor-element-fb9ade0, .elementor-element-7b0e64d,
    .elementor-element-4cc147b, .elementor-element-e4c3392, .elementor-element-ae0214e
) .elementor-heading-title {
    font-size: calc(2vw * var(--a11y-scale)) !important;
}

/* 1.8vw */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-cdeab25 .elementor-heading-title {
    font-size: calc(1.8vw * var(--a11y-scale)) !important;
}

/* 1.2vw */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
    .elementor-element-1d10206, .elementor-element-ac94ad8, .elementor-element-92d9991,
    .elementor-element-4510a7b, .elementor-element-3cd3dff, .elementor-element-c50f24c,
    .elementor-element-6f395de, .elementor-element-ee9581c, .elementor-element-737d33a,
    .elementor-element-516312b, .elementor-element-919156e, .elementor-element-663ae9f,
    .elementor-element-7092c2e, .elementor-element-45cbe13
) .elementor-heading-title {
    font-size: calc(1.2vw * var(--a11y-scale)) !important;
}

/* 1.1vw */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
    .elementor-element-d2becda, .elementor-element-c3ae172, .elementor-element-fd684cc,
    .elementor-element-dae4883, .elementor-element-aa58572, .elementor-element-e0cdfc5,
    .elementor-element-3a207f8, .elementor-element-6bbaa18, .elementor-element-7f34591,
    .elementor-element-4a84061, .elementor-element-9f944b3, .elementor-element-e5f860c,
    .elementor-element-f60699e, .elementor-element-ccadf63, .elementor-element-eef9638,
    .elementor-element-b0a830f
) .elementor-heading-title {
    font-size: calc(1.1vw * var(--a11y-scale)) !important;
}

/* 0.95vw */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
    .elementor-element-2dd16d4, .elementor-element-8e9e1ab
) .elementor-heading-title {
    font-size: calc(0.95vw * var(--a11y-scale)) !important;
}

/* 0.85vw - smallest heading on the page. READABILITY FLOOR: 0.85vw is 7.6px at
   a 900px viewport, and the theme has no override between 768 and 1024, so
   even at maximum it would only reach 12px. max() lifts it inside the gate
   only; the default render is untouched. */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-e6af4c9 .elementor-heading-title {
    font-size: calc(max(11px, 0.85vw) * var(--a11y-scale)) !important;
}

/* Header nav links - <a>, which the plugin never selects, so it was frozen. */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-9494f65 .elementor-nav-menu .elementor-item {
    font-size: calc(1.3vw * var(--a11y-scale)) !important;
}

/* Elementor Pro's nav-menu stylesheet pins `line-height: 20px` on every menu
   link (elementor-pro/assets/css/custom-pro-widget-nav-menu.min.css). 20px is
   a 1.07 ratio at the design size and a hard clip once the link is scaled: the
   <ul> already wraps, so at step 200 the second row of links was drawn 12px
   INTO the first row. Measured at 1440, step 200, before this rule:
       row 1 links  top 56  height 20   text 30px tall  -> spills to 68
       row 2 links  top 76                              -> 8px overlap
   Restating it as calc(20px * curve) keeps the source's own ratio at every
   step and at every breakpoint (desktop 1.3vw/20px, dropdown 16px/20px). The
   header container is height:auto / min-height:0, so it absorbs the extra row
   by itself - measured 84px -> 93px at step 200 - and needs no rule here.
   After: rows at top 46 and top 78, both 32px tall. No overlap. */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-9494f65 .elementor-nav-menu a.elementor-item,
html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-9494f65 .elementor-nav-menu a.elementor-sub-item {
    line-height: calc(20px * var(--a11y-scale)) !important;
}

/* Elementor buttons ride the FORM curve, as everywhere else in this file.
   .elementor-button-text is a <span> already collapsed to inherit by
   Section 3, so sizing the button itself is enough. */
html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-5018619 .elementor-button {
    font-size: calc(1.3vw * var(--a11y-scale-form)) !important;
}

html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-3754928 .elementor-button {
    font-size: calc(1.5vw * var(--a11y-scale-form)) !important;
}

/* --- lp-style.css spans that carry an intentional size of their own.
       Both live INSIDE a <p class="elementor-heading-title">, so without these
       they would inherit the heading rule above instead of keeping their own
       proportion. (0,3,2) beats Section 3's span collapse at (0,2,1). ------- */

html body[class*="pojo-a11y-resize-font-"] .elementor-702 .horiz-currencly {
    font-size: calc(2vw * var(--a11y-scale)) !important;
}

html body[class*="pojo-a11y-resize-font-"] .elementor-702 .neighborhood-circle-small {
    font-size: calc(1.7vw * var(--a11y-scale)) !important;
}


/* --------------------------------------------------------------------------
   SECTION 12c - post-702.css, @media (max-width: 767px)
   Emitted in the source's own breakpoint. Several widgets switch unit across
   the breakpoint (2.7vw -> 24px, 1.2vw -> 16px, 2.5vw -> 7vw), so both
   variants are declared - overriding only the base value would destroy the
   mobile size.
   -------------------------------------------------------------------------- */

@media (max-width: 767px) {

    /* 24px */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-7fb6dfa, .elementor-element-1916f61, .elementor-element-7555beb,
        .elementor-element-ed2eb6a, .elementor-element-6bafbf6, .elementor-element-3c79fd0,
        .elementor-element-6d047d7, .elementor-element-f220106
    ) .elementor-heading-title {
        font-size: calc(24px * var(--a11y-scale)) !important;
    }

    /* 6vw */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-6980793, .elementor-element-f21fc0e, .elementor-element-95e3de9,
        .elementor-element-ac1f361, .elementor-element-61300ee, .elementor-element-d8e8eea,
        .elementor-element-832242c, .elementor-element-a7d98b5, .elementor-element-31e2670
    ) .elementor-heading-title {
        font-size: calc(6vw * var(--a11y-scale)) !important;
    }

    /* 7vw */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-d7c1442, .elementor-element-b9c6c6d, .elementor-element-cc5a454,
        .elementor-element-4f983c9, .elementor-element-345d1ea, .elementor-element-399ce60
    ) .elementor-heading-title {
        font-size: calc(7vw * var(--a11y-scale)) !important;
    }

    /* 6.1vw */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-6239359 .elementor-heading-title {
        font-size: calc(6.1vw * var(--a11y-scale)) !important;
    }

    /* 22px */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-779b5de, .elementor-element-fb9ade0, .elementor-element-7b0e64d,
        .elementor-element-4cc147b, .elementor-element-e4c3392, .elementor-element-ae0214e
    ) .elementor-heading-title {
        font-size: calc(22px * var(--a11y-scale)) !important;
    }

    /* 18px */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-cdeab25 .elementor-heading-title {
        font-size: calc(18px * var(--a11y-scale)) !important;
    }

    /* 16px */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-1d10206, .elementor-element-ac94ad8, .elementor-element-92d9991,
        .elementor-element-4510a7b, .elementor-element-3cd3dff, .elementor-element-c50f24c,
        .elementor-element-6f395de, .elementor-element-ee9581c, .elementor-element-737d33a,
        .elementor-element-516312b, .elementor-element-919156e, .elementor-element-663ae9f,
        .elementor-element-7092c2e, .elementor-element-45cbe13
    ) .elementor-heading-title {
        font-size: calc(16px * var(--a11y-scale)) !important;
    }

    /* 3.5vw */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-d2becda, .elementor-element-c3ae172, .elementor-element-fd684cc,
        .elementor-element-dae4883, .elementor-element-aa58572, .elementor-element-3a207f8,
        .elementor-element-6bbaa18, .elementor-element-7f34591, .elementor-element-4a84061
    ) .elementor-heading-title {
        font-size: calc(3.5vw * var(--a11y-scale)) !important;
    }

    /* 4vw */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-9f944b3, .elementor-element-e5f860c, .elementor-element-f60699e,
        .elementor-element-ccadf63, .elementor-element-eef9638, .elementor-element-b0a830f
    ) .elementor-heading-title {
        font-size: calc(4vw * var(--a11y-scale)) !important;
    }

    /* 4.5vw */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-e0cdfc5 .elementor-heading-title {
        font-size: calc(4.5vw * var(--a11y-scale)) !important;
    }

    /* 14px */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-2dd16d4, .elementor-element-8e9e1ab
    ) .elementor-heading-title {
        font-size: calc(14px * var(--a11y-scale)) !important;
    }

    /* 12px - the base rule above uses max(11px, 0.85vw); on mobile the source
       gives a real px value, so the floor is not needed here. */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-e6af4c9 .elementor-heading-title {
        font-size: calc(12px * var(--a11y-scale)) !important;
    }

    /* Nav: the menu is a dropdown below 1024px and post-702.css sizes the
       dropdown links separately from the desktop links. Both are emitted. */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-9494f65 .elementor-nav-menu--dropdown .elementor-item,
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-9494f65 .elementor-nav-menu--dropdown .elementor-sub-item {
        font-size: calc(16px * var(--a11y-scale)) !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-5018619 .elementor-button {
        font-size: calc(13px * var(--a11y-scale-form)) !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-3754928 .elementor-button {
        font-size: calc(16px * var(--a11y-scale-form)) !important;
    }
}

/* lp-style.css declares its own mobile band at 768px, not 767px. Mirrored
   exactly so nothing changes at rest at a 768px viewport. */
@media (max-width: 768px) {
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .horiz-currencly {
        font-size: calc(4vw * var(--a11y-scale)) !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .neighborhood-circle-small {
        font-size: calc(3.7vw * var(--a11y-scale)) !important;
    }
}


/* --------------------------------------------------------------------------
   SECTION 12d - landing form GEOMETRY (assets/css/lp-style.css)
   --------------------------------------------------------------------------
   The landing form is `.new-home-contact.lp-form`, so Section 11 already
   matches it - but Section 11 mirrors the SHARED theme geometry (2.2vw fields,
   1.5vw checkbox) while lp-style.css deliberately overrides the landing form
   to 2.7vw fields and a 1.3vw checkbox. Section 11 out-specifies lp-style
   (0,4,2) vs (0,1,0), so with accessibility on, the landing fields were being
   scaled from the WRONG baseline and came out visibly shorter than the design.

   Measured at 1440, step 200, before this block:
       .lp-form input   height  38.9px  (2.2vw x 1.75)   design wants 47.8px
       submit  button   min-h   38.9px                    design wants 47.8px
       consent checkbox        26.5px  (1.5vw x 1.75)    design wants 23.0px

   Every value below is lp-style's own, multiplied by the form curve.
   (0,4,3) / (0,3,2) - one element more than Section 11, so these win.
   -------------------------------------------------------------------------- */

html body[class*="pojo-a11y-resize-font-"] .lp-form input:not([type="checkbox"]):not([type="radio"]),
html body[class*="pojo-a11y-resize-font-"] .lp-form textarea,
html body[class*="pojo-a11y-resize-font-"] .lp-form select {
    height: calc(2.7vw * var(--a11y-scale-form)) !important;
    padding: calc(0.8vw * var(--a11y-scale-form)) 1vw calc(0.5vw * var(--a11y-scale-form)) 1vw !important;
}

/* Submit: `height:auto` + a scaled `min-height` floor, for the reason given in
   Section 11 - a fixed height cannot contain a line box that grows with the
   font, and clipped the label at the upper steps. Horizontal padding stays at
   lp-style's 1vw: the button is `w-100`, so scaling it only narrows the
   content box and forces the label to wrap. */
html body[class*="pojo-a11y-resize-font-"] .lp-form .submit-col .global-btn {
    height: auto !important;
    min-height: calc(2.7vw * var(--a11y-scale-form)) !important;
    padding: calc(0.4vw * var(--a11y-scale-form)) 1vw calc(0.5vw * var(--a11y-scale-form)) 1vw !important;
    line-height: 1.2 !important;
}

html body[class*="pojo-a11y-resize-font-"] .lp-form .privacy-checkbox input[type="checkbox"] {
    width: calc(1.3vw * var(--a11y-scale-form)) !important;
    height: calc(1.3vw * var(--a11y-scale-form)) !important;
    min-width: calc(1.3vw * var(--a11y-scale-form)) !important;
    padding: 0 !important;
    flex: none !important;
}

@media (max-width: 768px) {
    html body[class*="pojo-a11y-resize-font-"] .lp-form input:not([type="checkbox"]):not([type="radio"]),
    html body[class*="pojo-a11y-resize-font-"] .lp-form textarea,
    html body[class*="pojo-a11y-resize-font-"] .lp-form select {
        height: calc(38px * var(--a11y-scale-form)) !important;
        padding: calc(14px * var(--a11y-scale-form)) 10px calc(10px * var(--a11y-scale-form)) 10px !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .lp-form .submit-col .global-btn {
        min-height: calc(38px * var(--a11y-scale-form)) !important;
        padding: calc(4px * var(--a11y-scale-form)) 10px !important;
        /* lp-style pins the landing submit to 22px here. Section 4's shared
           mobile rule scales `.new-home-contact .submit-col .global-btn` from
           6.5vw instead, which is 24.4px at 375 and the wrong baseline for
           this form. */
        font-size: calc(22px * var(--a11y-scale-form)) !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .lp-form .privacy-checkbox input[type="checkbox"] {
        width: calc(20px * var(--a11y-scale-form)) !important;
        height: calc(20px * var(--a11y-scale-form)) !important;
        min-width: calc(20px * var(--a11y-scale-form)) !important;
    }
}


/* --------------------------------------------------------------------------
   SECTION 12e - landing consent tick stays centred in its box
   --------------------------------------------------------------------------
   The tick is a ::before glyph absolutely positioned at top:54% / left:50%
   with translate(-50%,-50%) (assets/css/style.css), and lp-style.css moves it
   to top:58% below 768px. Both offsets are percentages of the BOX, and
   Section 12d scales the box, so the anchor tracks correctly on its own.

   What does not track is the glyph SIZE: style.css sizes it at 0.9vw, which is
   tuned to the shared 1.2vw box. The landing box is 1.3vw, so re-deriving the
   glyph from the landing box keeps the same optical ratio at every step, in
   every colour mode. 0.9 / 1.2 x 1.3 = 0.975vw; mobile 12 / 18 x 20 = 13.3px.

   Gate is the resize class only - the colour-mode tick COLOURS are Section 7's
   job and are unchanged. This block is purely geometry, which is what keeps
   the tick inside the box once high contrast / negative contrast / light
   background / grayscale repaint it.
   -------------------------------------------------------------------------- */

html body[class*="pojo-a11y-resize-font-"] .lp-form .privacy-checkbox input[type="checkbox"]:checked::before {
    font-size: calc(0.975vw * var(--a11y-scale-form)) !important;
    line-height: 1 !important;
}

@media (max-width: 768px) {
    html body[class*="pojo-a11y-resize-font-"] .lp-form .privacy-checkbox input[type="checkbox"]:checked::before {
        font-size: calc(13.3px * var(--a11y-scale-form)) !important;
    }
}


/* --------------------------------------------------------------------------
   SECTION 12f - landing consent tick VISIBILITY in the colour modes
   --------------------------------------------------------------------------
   Gate: the colour-mode classes only, so Rule A is unaffected.

   Section 7 already gives the shared form a self-contained white box / black
   tick in high contrast and grayscale, and a white tick on the plugin's black
   box in negative contrast. On /landing/ those pins were being partly undone,
   because lp-style.css restyles the same control at a higher weight than the
   theme's own rules:

       .lp-form .privacy-checkbox input                     (0,2,1)
           background: transparent !important
           border: 1px solid #1E4E39 !important
       .lp-form .privacy-checkbox input[type=checkbox]:checked::before  (0,4,2)
           color: #1E4E39 !important

   Section 7's box rule is (0,3,3) and its tick rule (0,4,3), so both still
   win - but only by one element in the tick's case, and the BORDER is the
   part that matters: in negative contrast the plugin paints the box black and
   lp-style's #1E4E39 border is 1.3:1 against it, so the box edge disappears
   and the tick appears to float in the page. Restating the border per mode at
   (0,4,3) fixes the outline in all four modes, and re-pinning the tick colour
   at the same weight makes the win explicit rather than incidental.

   Contrast after this block (tick vs box, box border vs box):
       high contrast      #000 tick on #fff box, #000 border   21.00:1
       grayscale          #000 tick on #fff box, #000 border   21.00:1
       negative contrast  #fff tick on #000 box, #fff border   21.00:1
       light background   #000 tick on #fff box, #000 border   21.00:1

   Light background is restated here even though assets/css/style.css already
   pins the tick colour for that mode - its selector carries an id and wins,
   but it does not touch the BORDER, which lp-style leaves at #1E4E39 on a
   white box: 5.9:1 for a 1px hairline. #000 is the same value the other three
   modes use and keeps the four modes consistent.
   -------------------------------------------------------------------------- */

html body.pojo-a11y-high-contrast .lp-form .privacy-checkbox input[type="checkbox"],
html body.pojo-a11y-grayscale .lp-form .privacy-checkbox input[type="checkbox"],
html body.pojo-a11y-light-background .lp-form .privacy-checkbox input[type="checkbox"] {
    -webkit-appearance: none !important;
    appearance: none !important;
    background: #fff !important;
    background-color: #fff !important;
    border: 1px solid #000 !important;
    opacity: 1 !important;
}

html body.pojo-a11y-high-contrast .lp-form .privacy-checkbox input[type="checkbox"]:checked::before,
html body.pojo-a11y-grayscale .lp-form .privacy-checkbox input[type="checkbox"]:checked::before,
html body.pojo-a11y-light-background .lp-form .privacy-checkbox input[type="checkbox"]:checked::before {
    content: "\2713" !important;
    color: #000 !important;
    opacity: 1 !important;
}

/* Negative contrast: the plugin pins this mode's input background to #000
   through an id-bearing selector, so the box cannot be turned white from here
   (measured: forcing it lost the background but won the tick, giving a black
   tick on the plugin's black box, 1.00:1). The box is left black and only the
   tick and the outline are pinned to #fff. */
html body.pojo-a11y-negative-contrast .lp-form .privacy-checkbox input[type="checkbox"] {
    border: 1px solid #fff !important;
    opacity: 1 !important;
}

html body.pojo-a11y-negative-contrast .lp-form .privacy-checkbox input[type="checkbox"]:checked::before {
    content: "\2713" !important;
    color: #fff !important;
    opacity: 1 !important;
}


/* ==========================================================================
   SECTION 13 - LANDING PAGE STAT CIRCLES  (/landing/ only)
   --------------------------------------------------------------------------
   DESKTOP / LAPTOP / TABLET. The whole section is wrapped in
   `@media (min-width: 768px)`. Mobile is handled separately in SECTION 13b -
   it is a different layout, not a narrower one, so it needed its own
   measurements and its own curve.

   THE PROBLEM
   The four "stat circle" rows are not made of CSS circles. Each row is ONE
   flat ring <img>, with the numbers and captions in absolutely positioned
   boxes floated on top of it:

       .elementor-element-12ecaab   5 circles   13K / 1M / 170K / 2K / 3.8B
       .elementor-element-5b496a3   4 circles   1.8k / 3.3k / 100 dunam / 2.5K
       .elementor-element-6f3e881   1 circle    440 m
       .elementor-element-3f26faa   6 circles   220 / 450 / 138 / 15 / 2 / 32

   Section 12 scales the text; the ring artwork is a bitmap and cannot follow.
   Measured as `text corner distance from the circle centre / circle radius`,
   where anything at or above 1.00 means the text has crossed the ring:

       circle      at rest   step 130   step 200
       790f014       0.91      1.14       1.60
       4f07fae       0.71      1.07       1.50
       2a83d77       0.78      1.11       1.56
       32575ad       0.72      1.03       1.44
       095d2af       0.66      0.82       1.15
       ...16 circles measured in total, worst case 1.60

   THE FIX - SCALE THE WHOLE ROW, NOT THE TEXT
   Capping the font size was tried first and rejected: `790f014` already sits
   at 0.91 of its radius at the design size, so the largest cap it can take is
   0.95/0.91 = 1.04. That is no enlargement at all, which defeats the point of
   the accessibility control.

   Instead the ROW is scaled - ring artwork and text together - with
   `transform: scale()`, and the text inside is pinned back to its design size
   so it does not scale twice. The composition is then identical to the design
   at every step, just larger: every ratio stays exactly at its rest value.

   The transform is applied to the ROW ELEMENT ITSELF, never to the inner
   `.e-con-inner`. That matters: the text boxes are `position: absolute` and
   their containing block is the row (`position: relative`). Transforming the
   inner wrapper makes THAT the containing block instead, and the offsets
   re-resolve against a narrower box - measured drift of up to 7.7% of the
   image width, which is comparable to a circle's radius and threw the numbers
   visibly off-centre. Transforming the row keeps the containing block where
   it already was: measured drift 0.00%.

   THE CURVE: --a11y-scale-circle, 1.0375 -> 1.3000
   This is its own curve, not `min(--a11y-scale, cap)`. A capped main curve
   was tried first and it plateaued: --a11y-scale passes 1.2 at step 150, so
   the circles grew for three clicks and then stopped dead for the remaining
   five. A dedicated curve spends the whole available range across all eight
   steps instead, so every click moves. Measured at 1440, the ring artwork:

       step   0    130   140   150   160   170   180   190   200
       px   1080  1121  1161  1202  1242  1283  1323  1364  1404

   1.30 is the ceiling and it is geometry, not taste: the ring image is 75vw
   inside a 99vw parent, so it reaches the parent edge at 1.32. Measured
   headroom is 1.32 at 1440 and 1920, 1.31 at 800 - 1.30 clears all three with
   a margin. The circles therefore top out lower than the rest of the page
   (1.30 against 1.60); there is no way around that while the rings are a
   fixed bitmap.

   #3f26faa is the exception: its ring image is already full-bleed (1425px of
   a 1425px parent), so there is nothing to scale into. It rides the same
   curve as a FONT multiplier instead, which its short captions can absorb -
   worst case 0.60 at rest, 0.78 at maximum.

   AFTER, at 375 / 800 / 1024 / 1440 / 1920:
       step 0     worst 0.91  (unchanged - the design)
       step 130   worst 0.96  (was 1.14)
       step 200   worst 0.96  (was 1.60)
   and the worst case holds at 0.96 for every step in between - the ratio is
   constant because ring and text scale together.
   ========================================================================== */

@media (min-width: 768px) {

    /* The transformed row's BORDER BOX grows even though its ink does not -
       the row is 93vw wide while the ring image inside it is only 75vw. At
       step 200 that pushed documentElement.scrollWidth to 1516 against a
       1440 viewport, i.e. a horizontal scrollbar over empty space.

       `overflow-x: clip` on the parent section stops the transformed box from
       contributing to scrollable overflow. Nothing visible is lost: measured
       at step 200 the ring image is 1404px inside a 1425px parent, so the
       artwork never reaches the clip edge. `clip` rather than `hidden` on
       purpose - `hidden` would make these sections scroll containers, which
       would also make them the scrollport for anything inside them.
       After: scrollWidth 1425 / 1440. */

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-61e8e81,
        .elementor-element-246d82f,
        .elementor-element-eb00da0
    ) {
        overflow-x: clip;
    }

    /* --- the rows themselves -------------------------------------------- */

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab,
        .elementor-element-5b496a3,
        .elementor-element-6f3e881
    ) {
        transform: scale(var(--a11y-scale-circle));
        transform-origin: center center;
    }

    /* #6f3e881 grows from its RIGHT edge, not its centre.
       -------------------------------------------------------------------
       The other two rows are ring artwork centred in their parent - 232px of
       margin on each side at rest - so scaling from the centre eats into that
       margin symmetrically and still has 17px to spare at maximum.

       This row is a SINGLE circle, and it is flush against the right edge of
       its parent: measured at 1920, image right = parent right = 1847, i.e.
       ZERO margin on that side and 414px of unused space on the other. Scaling
       from the centre therefore pushed it 97px past the parent's right edge,
       straight into the `overflow-x: clip` above, and the right third of the
       ring plus the end of "440" were cut off.

       Anchoring the origin to `right center` pins that edge and lets the
       circle grow leftwards into the 414px it already has. Measured spill past
       the parent's right edge, per step:

           centre origin   0 -> +42 -> +71 -> +97   (clipped from step 130 on)
           right origin    0 ->   0 ->   0 ->   0

       The row's own box overhangs to the LEFT once scaled, but that half is
       empty - the artwork only occupies the right 230px of it - so the clip
       has nothing to remove there. */

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-6f3e881 {
        transform-origin: right center;
    }

    /* --- pin the text back to its design size ----------------------------
       Without these the text would scale twice: once from Section 12 and
       again from the row transform. Each selector carries one class more than
       its Section 12 counterpart - (0,5,2) against (0,4,2) - so it wins
       without needing any extra weight. Values are post-702.css's own. */

    /* numbers, 2.7vw */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab, .elementor-element-5b496a3, .elementor-element-6f3e881
    ) :is(
        .elementor-element-6980793, .elementor-element-f21fc0e, .elementor-element-95e3de9,
        .elementor-element-ac1f361, .elementor-element-61300ee, .elementor-element-d8e8eea,
        .elementor-element-832242c, .elementor-element-a7d98b5, .elementor-element-31e2670
    ) .elementor-heading-title {
        font-size: 2.7vw !important;
    }

    /* the lone 440m figure, 2.5vw */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab, .elementor-element-5b496a3, .elementor-element-6f3e881
    ) .elementor-element-d7c1442 .elementor-heading-title {
        font-size: 2.5vw !important;
    }

    /* captions, 1.1vw */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab, .elementor-element-5b496a3, .elementor-element-6f3e881
    ) :is(
        .elementor-element-d2becda, .elementor-element-c3ae172, .elementor-element-fd684cc,
        .elementor-element-dae4883, .elementor-element-aa58572, .elementor-element-3a207f8,
        .elementor-element-6bbaa18, .elementor-element-7f34591, .elementor-element-4a84061,
        .elementor-element-e0cdfc5
    ) .elementor-heading-title {
        font-size: 1.1vw !important;
    }

    /* Two spans carry a size of their own INSIDE a pinned heading, so pinning
       the heading is not enough - `.neighborhood-circle-small` is what pushed
       circle 790f014 to 1.60 in the first place. */
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab, .elementor-element-5b496a3, .elementor-element-6f3e881
    ) .horiz-currencly {
        font-size: 2vw !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab, .elementor-element-5b496a3, .elementor-element-6f3e881
    ) .neighborhood-circle-small {
        font-size: 1.7vw !important;
    }

    /* --- #3f26faa: full-bleed artwork, so cap the font instead ----------- */

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-3f26faa :is(
        .elementor-element-b9c6c6d, .elementor-element-cc5a454, .elementor-element-4f983c9,
        .elementor-element-345d1ea, .elementor-element-399ce60
    ) .elementor-heading-title {
        font-size: calc(2.5vw * var(--a11y-scale-circle)) !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-3f26faa :is(
        .elementor-element-9f944b3, .elementor-element-e5f860c, .elementor-element-f60699e,
        .elementor-element-ccadf63, .elementor-element-eef9638, .elementor-element-b0a830f
    ) .elementor-heading-title {
        font-size: calc(1.1vw * var(--a11y-scale-circle)) !important;
    }

    /* --- #3f26faa: keep the text on the circle's centre line -------------
       This row is the only one that scales its TEXT rather than the whole
       row, so it is the only one where the text block changes height - and
       its six boxes are anchored by `top`, not by their centre. The box
       therefore grows downwards out of the ring while the ring stays put.
       Measured at 1920, text-block centre against the ring centre:

           step 0     -3px   (the design - effectively centred)
           step 200   +7 to +12px  low

       Re-anchoring to `top: 50%` and pulling back by half the box's own
       height keeps the centre on the ring's centre line whatever the text
       does. `bottom: auto` is required: with top, bottom AND a content
       height all in play the browser drops `bottom` anyway, but stating it
       makes the intent explicit rather than relying on that. After:

           step 200   -3 to -5px   same as the design */

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-3f26faa :is(
        .elementor-element-e5077ba, .elementor-element-f0e484c, .elementor-element-17ec628,
        .elementor-element-cf4a92a, .elementor-element-ed056fa, .elementor-element-a1964df
    ) {
        top: 50% !important;
        bottom: auto !important;
        transform: translateY(-50%) !important;
    }

    /* --- #3f26faa: the section title must not ride onto the last ring ----
       "הפרויקט" (.elementor-element-3c79fd0) is absolutely positioned and
       RIGHT-anchored, so every extra pixel of type extends LEFTWARDS, into
       the circles. On the main text curve it reached 1.60 while this row's
       circles only reach 1.30, so it closed the gap and then crossed it.
       Measured at 1920 - the rightmost ring ends at x=1507, the title's left
       edge:

           step 0     1583   clear by 76px
           x1.60      1453   OVERLAPPING the ring by 54px
           x1.30      1518   clear by 11px

       Even --a11y-scale-circle on its own was too much at the NARROW end.
       The gap the title has to grow into is itself in vw, but the title's
       own width is set by the Hebrew word, so the two do not shrink at the
       same rate - at 800px the design gap is only 30px to begin with:

           clearance at max     1920    1440    800
           x --a11y-scale-circle  33px    7px     2px

       2px is positive but it is not a margin, it is a coincidence. The title
       therefore rides 65% of the circle curve: `1 + (curve - 1) * 0.65`, a
       plain calc that still yields eight distinct values, one per click.

           clearance at max     1920    1440    800
           x 65% of the curve     33px   23px    12px

       Declared inside the min-width gate only, so the mobile rule in
       SECTION 12c (24px) is untouched. */

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-3f26faa .elementor-element-3c79fd0 .elementor-heading-title {
        font-size: calc(3.4vw * (1 + (var(--a11y-scale-circle) - 1) * 0.65)) !important;
    }
}


/* ==========================================================================
   SECTION 13b - THE SAME CIRCLES, ON MOBILE
   --------------------------------------------------------------------------
   Same problem, same cure, different numbers - because mobile is a different
   layout, not a narrower one. Elementor swaps the artwork below 768px: the
   wide desktop ring strip is display:none and a pair of stacked mobile ring
   images takes over, so every measurement had to be redone at 375.

   Measured at 375, text-corner distance / circle radius (>=1.00 = outside):

       row       circle     at rest   step 200
       12ecaab   6e13557      0.86      1.71
       5b496a3   790f014      1.01      1.76
       5b496a3   2a83d77      0.83      1.47
       6f3e881   4f07fae      0.79      1.67

   THE MOBILE CEILING IS MUCH LOWER, and it is measured, not chosen. The two
   stacked rows are 328px of artwork inside a 360px parent - 16px of margin a
   side, against 232px on desktop:

       maxScale = 360 / 328 = 1.10        (desktop: 1.32)

   So mobile gets its own curve, --a11y-scale-circle-m, 1.0125 -> 1.1000 in
   eight even steps. Each click moves the artwork about 4px. That is modest,
   but it is the whole of the room that exists: at 1.10 the rings land exactly
   on the parent edge, measured ink spill -16px -> 0px across the range.

   #6f3e881 is the exception again. On mobile it is still a single circle
   pinned to the right (193px of slack on the left, 0 on the right), so it
   keeps `transform-origin: right center` and rides the FULL desktop curve -
   it has the room for 1.30 that the other two do not.

   #3f26faa is deliberately absent. Below 768px that row is not circles at
   all - the ring strip collapses to a 360x24 rule and the figures reflow
   underneath it. Measured at 375 its text stays inside 18-364px of a 375
   viewport at step 200 and the document never exceeds 360px, so there is
   nothing to fix and a circle-shaped fix would be wrong.

   BREAKPOINTS MIRROR THE SOURCES, which disagree with each other by 1px:
   post-702.css switches its heading sizes at max-width:767, lp-style.css
   switches .horiz-currencly / .neighborhood-circle-small at max-width:768.
   The pins below follow each one exactly, and the span block is declared
   AFTER Section 13's - so at exactly 768px the spans keep lp-style's mobile
   4vw / 3.7vw instead of being pinned to the desktop 2vw / 1.7vw, which would
   have made them SHRINK when the toolbar is switched on at that one width.
   ========================================================================== */

@media (max-width: 767px) {

    /* Same reason as Section 13: the transformed box grows past the parent
       even when the ink does not, and without this the 6f3e881 row pushed
       documentElement.scrollWidth to 442 against a 375 viewport. */

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-61e8e81,
        .elementor-element-246d82f,
        .elementor-element-eb00da0
    ) {
        overflow-x: clip;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab,
        .elementor-element-5b496a3
    ) {
        transform: scale(var(--a11y-scale-circle-m));
        transform-origin: center center;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-6f3e881 {
        transform: scale(var(--a11y-scale-circle));
        transform-origin: right center;
    }

    /* Pins, at post-702.css's own mobile values (6vw / 3.5vw / 7vw / 4.5vw),
       so the text does not scale twice. */

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab, .elementor-element-5b496a3, .elementor-element-6f3e881
    ) :is(
        .elementor-element-6980793, .elementor-element-f21fc0e, .elementor-element-95e3de9,
        .elementor-element-ac1f361, .elementor-element-61300ee, .elementor-element-d8e8eea,
        .elementor-element-832242c, .elementor-element-a7d98b5, .elementor-element-31e2670
    ) .elementor-heading-title {
        font-size: 6vw !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab, .elementor-element-5b496a3, .elementor-element-6f3e881
    ) :is(
        .elementor-element-d2becda, .elementor-element-c3ae172, .elementor-element-fd684cc,
        .elementor-element-dae4883, .elementor-element-aa58572, .elementor-element-3a207f8,
        .elementor-element-6bbaa18, .elementor-element-7f34591, .elementor-element-4a84061
    ) .elementor-heading-title {
        font-size: 3.5vw !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-6f3e881 .elementor-element-d7c1442 .elementor-heading-title {
        font-size: 7vw !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 .elementor-element-6f3e881 .elementor-element-e0cdfc5 .elementor-heading-title {
        font-size: 4.5vw !important;
    }
}

/* lp-style.css's own band, one pixel wider than post-702's. */
@media (max-width: 768px) {
    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab, .elementor-element-5b496a3, .elementor-element-6f3e881
    ) .horiz-currencly {
        font-size: 4vw !important;
    }

    html body[class*="pojo-a11y-resize-font-"] .elementor-702 :is(
        .elementor-element-12ecaab, .elementor-element-5b496a3, .elementor-element-6f3e881
    ) .neighborhood-circle-small {
        font-size: 3.7vw !important;
    }
}
