/* ============================================================
   wcag-gs-elan.css
   WCAG 2.1 Level AA override for the GS-Elan Kentico template
   (TemplateId 1390 / C0070-GS-Elan).
   Injected via lsExternalResource. Loaded after the base theme
   and Bootstrap.

   Selectors verified against the live base CSS pulled from
   https://elan-map-test.dev-ws.realpage.com on 2026-05-07.
   Cross-checked against production CSS from
   https://vista121.com on 2026-05-07: all targeted selectors
   match (form border, sticky header, footer-7 opacity, footer
   link colors, content-link rule). Brand colors differ
   (dev rust/gold #883f2e/#b19148 vs prod navy #394f9c) but no
   contrast impact on overrides. Footer bg differs (dev #1d2f40
   vs prod #373737); rgba(255,255,255,0.92) still passes ~10:1
   and opacity:0.75 still passes ~6.5:1 on prod's gray.

   Specificity strategy:
   Every selector is prefixed with `body #form` (the ASP.NET
   WebForms page-level form ID, present on every Greystar page
   and wrapping all our target elements). That adds (1, 0, 2)
   to each rule's specificity, lifting our overrides above the
   widget-CSS bundles that load via rpWebpartCss_*. Rules that
   already contain a context ID (#main-contact, #footer-menu,
   etc.) become 2-ID chains.
   ============================================================ */


/* ------------------------------------------------------------
   TFS 2845711 — WCAG 2.4.7 Focus Visible
   Bootstrap suppresses focus rings on .navbar-toggle and
   .dropdown-toggle (outline:0). Restore visible focus.
   General fallback covers other interactive elements in case
   future markup adds outline-suppressing rules.
   ------------------------------------------------------------ */
body #form .navbar-toggle:focus-visible,
body #form .dropdown-toggle:focus-visible,
body #form .btn:focus-visible,
body #form .form-control:focus-visible,
body #form .header-CTA-button:focus-visible,
body #form .footer-CTA-Button:focus-visible,
body #form .social-CTA-button:focus-visible,
body #form a:focus-visible,
body #form button:focus-visible,
body #form input:focus-visible,
body #form select:focus-visible,
body #form textarea:focus-visible,
body #form [tabindex]:focus-visible,
body #form [role="button"]:focus-visible {
  /* Webkit-style two-ring halo: blue inner ring + white outer ring
     gives focus visibility on both light AND dark backgrounds.
     The `outline` declaration is intentionally omitted — outline
     paints on top of box-shadow and would cover the white ring. */
  outline-offset: 2px;
  box-shadow: 0 0 0 2px #005fcc, 0 0 0 3px #fff;
}

/* WCAG 2.4.13 AAA (Focus Appearance) — PME-507688 rework (Will Sharp,
   manual scan 2026-08-24): the shared blue+white ring above doesn't
   reliably clear 3:1 against every property's footer background (footers
   commonly run darker/branded compared to the form fields and buttons
   this shared rule also covers). Override just the footer link ring with
   a white+black double ring — one leg always clears 3:1 against any
   single backdrop, the same treatment already used for the Floor Plans V4
   focus rings. `.footer-widget footer a` is the same footer DOM shape
   already targeted below (contrast/decoration rules); scoping to it here
   keeps the header/body/CTA links above, which were not flagged, on
   their existing ring. */
body #form .footer-widget footer a:focus-visible {
  box-shadow: 0 0 0 2px #fff, 0 0 0 4px #000 !important;
}


/* ------------------------------------------------------------
   TFS 2849999 — WCAG 2.4.11 Focus Not Obscured
   header.header-navigation is position:fixed (top:0).
   Approx height when scrolled: 120px (50px top strip + 50–65px
   logo + padding). Reserve scroll space so tab-focused elements
   land below the sticky header.

   `html { scroll-padding-top }` is unique to the html element —
   no widget rule competes with it, so no prefix needed.
   ------------------------------------------------------------ */
html {
  scroll-padding-top: 130px;
}

body #form :focus-visible {
  scroll-margin-top: 130px;
}


/* ------------------------------------------------------------
   TFS 2849882 — WCAG 1.4.11 Non-text Contrast (form controls)
   Two distinct contact form patterns:
     1. /Contact.aspx dedicated form:
        #main-contact .form-control { border-bottom: 2px solid rgba(0,0,0,.3) }
        ≈ 2.4:1 — fails 3:1.
     2. Home page / floating mini contact form:
        body .contact-mobile-form .contactus-float-input-div input,
        body .contactus-float-input-div textarea
          { border-bottom: 2px solid #eaeaea }
        ≈ 1.36:1 — fails 3:1.
   ------------------------------------------------------------ */
body #form #main-contact .form-control {
  border-bottom-color: #595959;
}

body #form .contact-mobile-form .contactus-float-input-div input,
body #form .contactus-float-input-div input,
body #form .contactus-float-input-div textarea {
  border-bottom-color: #595959;
}


/* ------------------------------------------------------------
   TFS 2852272 — WCAG 1.4.3 Contrast Minimum (text)
   Three confirmed offenders in the base:
     1. Footer links color: rgba(255,255,255,.5) on #1d2f40 ≈ 3.4:1
     2. Footer-7 links: opacity:.5 on color:#fff (effective ≈ 3.4:1).
     3. .video-mute-btn: color:#999 on white ≈ 2.9:1
   ------------------------------------------------------------ */
body #form #footer-menu ul li a,
body #form .footer-links a,
body #form #footerBottom,
body #form .footer-widget footer,
body #form .footer-widget footer a {
  color: rgba(255, 255, 255, 0.92);
}

body #form .footer-widget footer.footer-7 .footer-container a,
body #form .footer-widget footer.footer-7 .footer-container .footer-bottom .footer-bottom-row .footer-icons .additional-icons {
  opacity: 0.75;
  color: #fff;
}

/* Hover/focus restore: our specificity-bumped default (1,3,4) beats
   the base hover rule (0,4,3) in the `a` column, which kills the
   hover delta. Match our own selector specificity at the :hover/:focus
   level so it lifts back to opacity:1 on interaction. */
body #form .footer-widget footer.footer-7 .footer-container a:hover,
body #form .footer-widget footer.footer-7 .footer-container a:focus {
  opacity: 1;
}

body #form .video-mute-btn {
  color: #595959;
}


/* ------------------------------------------------------------
   TFS 2852341 — WCAG 1.4.1 Use of Color (inline links)
   Inline content links must be distinguishable without color.
   On internal pages, rich-text content lives in
   .inner-page-main-content .main-content-text. The home page
   has no such container, so this only fires on subpages with
   actual content links.

   TFS 2985969 — added `.inner-page-main .section-text a`.
   The About-page copy block is NOT in .main-content-text: the
   live ancestor chain is
     a < p < .section-text < .about-content-left < .section-left
       < #about-section-1.container-fluid < .inner-page-main
   (confirmed live on thearialiving.com; the wrapper div is
   authored in C0070-GS-Elan-About.ascx:19 as `.inner-page-main`
   — note the base CSS only styles the OUTER
   `.inner-page-main-content`, so the un-suffixed inner class had
   no underline rule reaching it). 23 of 45 flagged links on this
   template live in this container.

   Collision check: the homepage rule below is scoped to
   `.home-section .section-text a`; the About `.section-text` has
   no `.home-section` ancestor, so the two never overlap. No
   `text-decoration:none !important` in the Elan base stack
   targets content links — all 13 base `!important` strips are on
   header/nav/footer/social/CTA-button containers — so no
   `!important` counter is needed here (unlike Jackson-Square and
   Zen-Garden, whose bases strip on :hover/:focus/:active).

   TFS 2985969 (2nd defect) — added
   `#specials-flyout .specials-content a`.
   Same failure mode as the Teracy `.topCallout` miss: a prose link
   in a container that looks like chrome but is not. Confirmed live
   on thearialiving.com — `#specials-flyout` is a DIRECT CHILD of
   `form#form`:
     form#form > div#specials-flyout.collapse
       > div.specials-content > p.MsoNormal > a
   It has no <header>/<nav>/<footer> ancestor and is NOT inside
   `.inner-page-main`, so none of this file's other 1.4.1
   selectors reach it. Container text is "Resident Portal
   Click Here", i.e. a genuine link-in-text-block, and the anchor
   is classless so no shape-based opt-out applies. It is a
   Bootstrap `.collapse` flyout — hidden until the user opens it,
   and colour-only once open.
   ------------------------------------------------------------ */
body #form #main-general .main-content-text a,
body #form .inner-page-main-content .main-content-text a,
body #form .main-content-text a,
body #form .inner-page-main .section-text a,
body #form #specials-flyout .specials-content a,
body #form #contactusPrivacy a,
body #form a[href$="Privacy-policy.aspx"] {
  text-decoration: underline;
  text-underline-offset: 2px;
}

body #form .main-content-text a.btn,
body #form .main-content-text a.button,
body #form .main-content-text a.more-link,
body #form .main-content-text a.less-link,
body #form .main-content-text .footer-CTA-Button,
body #form .main-content-text .header-CTA-button {
  text-decoration: none;
}

/* TFS 2985969 — button/CTA opt-out for the newly-covered About
   container. `.inner-page-main .section-text a` is (1,2,2), which
   out-specifies the shape-based opt-outs further down this file
   (`a.home-CTA` / `.section-CTA a` / `.CTA-button` at (1,1,2)),
   so those opt-outs are re-asserted at container scope (1,3,2)
   to keep button-shaped links un-underlined. Mirrors the
   `.main-content-text a.btn` opt-out above. */
body #form .inner-page-main .section-text a.btn,
body #form .inner-page-main .section-text a.button,
body #form .inner-page-main .section-text a.more-link,
body #form .inner-page-main .section-text a.less-link,
body #form .inner-page-main .section-text a.home-CTA,
body #form .inner-page-main .section-text a.CTA-button,
body #form .inner-page-main .section-text .footer-CTA-Button,
body #form .inner-page-main .section-text .header-CTA-button,
body #form .inner-page-main .section-text .section-CTA a,
body #form .inner-page-main .section-text .section-2-CTA a,
body #form .inner-page-main .section-text .section-3-CTA a {
  text-decoration: none;
}


/* ------------------------------------------------------------
   TFS 2870264 — WCAG 1.4.1 (homepage inline links)
   Elan's homepage uses `.home-section` rows. Inline text lives
   in `.section-left .section-text` (rich-text paragraphs) and
   `.home-content-overlay`. The three top CTA tiles are
   `<a class="home-CTA">` — the entire tile is the link, opted
   out. `.section-3-CTA` / `.section-CTA` wrappers hold
   `.CTA-button` and `.footer-CTA-Button` — also opted out.
   ------------------------------------------------------------ */
body #form .home-section .section-left a,
body #form .home-section .section-text a,
body #form .home-section .home-content-overlay a,
body #form .home-section .home-content-overlay p a {
  text-decoration: underline;
  text-underline-offset: 2px;
}

body #form a.home-CTA,
body #form .home-CTA,
body #form .home-CTA-overlay,
body #form .home-CTA-icon,
body #form .home-CTA-text,
body #form .section-CTA a,
body #form .section-2-CTA a,
body #form .section-3-CTA a,
body #form .home-section .CTA-button,
body #form .home-section a.CTA-button,
body #form .home-section a.footer-CTA-Button,
body #form .home-section a.header-CTA-button {
  text-decoration: none;
}


/* ------------------------------------------------------------
   WCAG 2.2 AA 2.5.8 Target Size (Pointer)
   ------------------------------------------------------------ */
/* WCAG 2.2 AA 2.5.8 Target Size (Pointer) — real fix (native checkbox can't be padded;
   appearance:none + explicit 24px sizing; :checked::after re-draws the check so consent UX is preserved) */
body .contact-mobile-form input[type="checkbox"],
#contactusPrivacy input[type="checkbox"],
#privacyDiv input[type="checkbox"],
#contactUsV1Privacy input[type="checkbox"] {
    -webkit-appearance: none;
    appearance: none;
    width: 24px; height: 24px;
    min-width: 24px; min-height: 24px;
    margin: 4px; padding: 0;
    border: 2px solid currentColor; border-radius: 3px;
    background: #fff; cursor: pointer; position: relative;
    vertical-align: middle; flex: 0 0 auto;
}
body .contact-mobile-form input[type="checkbox"]:checked::after,
#contactusPrivacy input[type="checkbox"]:checked::after,
#privacyDiv input[type="checkbox"]:checked::after,
#contactUsV1Privacy input[type="checkbox"]:checked::after {
    content: ""; position: absolute; left: 7px; top: 3px;
    width: 6px; height: 11px;
    border: solid #1a1a1a; border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}
body .contact-mobile-form input[type="checkbox"]:focus-visible,
#contactusPrivacy input[type="checkbox"]:focus-visible,
#privacyDiv input[type="checkbox"]:focus-visible,
#contactUsV1Privacy input[type="checkbox"]:focus-visible {
    outline: 2px solid; outline-offset: 2px;
}

/* TFS 2987209 — WCAG 2.2 AAA 2.5.5 Target Size (Enhanced): expand the consent
   checkbox's pointer hit-area to 44×44 without changing anything visually
   (Option B, plan §4.4/§0.5 J — live-prototyped pixel-identical to today).
   The painted box stays 24×24 (position:relative already set above); this
   adds a transparent ::before centred over the box that only widens the
   clickable/tappable region. Do not touch :checked::after or :focus-visible
   above, and do not remove min-width/min-height:24px on the box rule above —
   on ContactUsFloating templates that min-width is the only reason the box
   is 24px wide at all (rpWebpartCss_ContactUsFloating.css sets width:auto
   !important, §0.4 D). Uses symmetric inset offsets, not
   left/top:50%+transform: live click-testing found percentage-based
   centering lands ~1-2px off-centre (asymmetric vs. the border-box),
   which stole clicks from an adjacent control (Submit button /
   privacy-policy link) on 3 of 16 templates — insets centre reliably
   regardless of border width. */
body .contact-mobile-form input[type="checkbox"]::before,
#contactusPrivacy input[type="checkbox"]::before,
#privacyDiv input[type="checkbox"]::before,
#contactUsV1Privacy input[type="checkbox"]::before {
    content: "";
    position: absolute;
    top: -12px; left: -12px; right: -12px; bottom: -12px;
}
#contactusPrivacy label {
    line-height: 30px;;
}
#contactusPrivacy a {
    margin-left: 10px;
}

/* TFS 2987209 — WCAG 2.2 AAA 2.5.5 Target Size (Enhanced): mobile-nav
   hamburger (56 domains — the single biggest fix in this workstream).
   Live-measured on `.header-bottom-container .menu-toggle`: 40×35 at
   ≤992px (fails), already 55×45 at ≥993px (passes) — breakpoint
   confirmed live at the exact 992/993 boundary, so this fix is gated
   to the failing range only. `.menu-toggle` is NOT unique on this
   template — it also names the flyout's own close button (different
   internals: `div.sp-close-box` + `div.sp-close-bar`, inside
   `#main-menu-flyout .menu-container`, NOT inside
   `.header-bottom-container`) — the selector below is scoped to the
   header opener specifically; confirmed live it reaches only that one
   element and the close button's `::before` never applies. Both the
   opener and Avana's `#menuButton` (above, same file family) have 3
   absolutely-positioned `div.hamburger-bar` children anchored to the
   button's own edges (top:0 / top:50%+translateY(-50%) / bottom:0,
   full button width) — growing the button's own box directly was
   confirmed live to spread the bars apart (the button's own desktop
   55×45 state already proves this: 55×6 bars at wider spacing than
   mobile's 40×4). Uses the same transparent ::before hit-area overlay
   technique instead (button already `position:relative`). Live-
   verified: bar spacing pixel-identical before/after at 375/993/1024px,
   the ~52×47 hit area clears 44×44 with no neighboring-control
   encroachment (nothing clickable within 22px at 375px), the flyout
   still opens on a click inside the enlarged area, and the flyout's own
   close button (which sits inside the opener's enlarged hit area once
   the drawer is open, at a higher z-index) is unaffected and still
   closes it normally. */
@media (max-width: 992px) {
  body .header-bottom-container .menu-toggle::before {
    content: "";
    position: absolute;
    top: -6px; left: -6px; right: -6px; bottom: -6px;
  }
}
/* ------------------------------------------------------------
   TFS 2985969 — Google Maps bleed opt-out (measured live)
   The Maps JS API injects its own colour-only anchors ("Terms",
   "Report a map error", "Open this area in Google Maps") into
   `.gm-style` INSIDE our content containers, so a container-scoped
   underline rule reaches them. Confirmed live on Elan /About.aspx,
   themckenzieapts.com home, and both Balcony homepages. These are
   third-party map chrome, not site prose — never underline them.

   `!important` and the `body #form` prefix are both required so
   this beats the content-container counters in this file family,
   including the `underline !important` interaction-state counters
   on Jackson-Square and Zen-Garden. States are listed explicitly
   because those counters are state-scoped.
   ------------------------------------------------------------ */
body #form .gm-style a,
body #form .gm-style a:hover,
body #form .gm-style a:focus,
body #form .gm-style a:active,
body #form .google-map-container a,
body #form .google-map-container a:hover,
body #form .google-map-container a:focus,
body #form .google-map-container a:active,
body #form .gm-style-cc a,
body #form a[href*="maps.google.com/maps?ll="],
body #form a[href^="https://www.google.com/maps/@"] {
  text-decoration: none !important;
}

/* ------------------------------------------------------------
   TFS 2905632 - WCAG 1.4.1 Use of Color (selected state)
   The Floor Plans bed/bath filter and view-switch tabs mark the
   selected item with a brand-color background + #fff text only
   (base rule sets border-color:transparent, no weight/underline).
   Add an underline so the selection is perceivable in greyscale
   and for color-blind users. `body #form` prefix keeps specificity
   above the rpWebpartCss_Floorplan* base bundles. No color changed.
   ------------------------------------------------------------ */
body #form .fp2-bed-bath ul li.active > a,
body #form .FloorPlansV2 .fp-switch-tabs .btn-default.active,
body #form .FloorPlansV3 .fp-switch-tabs .btn-default.active {
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* ------------------------------------------------------------
   TFS 2905631 - WCAG 1.4.11 Non-text Contrast (form controls)
   The full-width Neighborhood search input has no perceivable
   resting border: base CSS (rpWebpartCss_NeighborhoodFullWidth.css)
   sets `border:none; background:none; color:#fff` on a dark
   rgba(0,0,0,.83) search overlay. Add a light 1px boundary at
   #cfcfcf (~9.6:1 on that dark surface; matches the widget's
   existing placeholder color). All 21 priority templates use this
   dark default - none override it to a light surface.
   ------------------------------------------------------------ */
body #form .neighborhood-widget .neighborhood-widget__search .form-group .form-control {
  border: 1px solid #cfcfcf;
}

/* ------------------------------------------------------------
   TFS 2982346 - WCAG 2.2 AA 2.5.8 Target Size (Pointer): footer links

   Live-measured on elan08022023.sat-ws.realpage.com/Contact.aspx at 1280x900
   (headless Chrome, border-box heights): 3 footer target(s) under 24x24.

     footer .footer-property-logo a                 226.7 x 16, display:inline, wraps an <img>
     footer .footer-phone-content a.footer-phone    111 x 19, display:inline
     footer .footer-logo.footer-pmclogo a           52.4 x 18, display:inline, wraps an <img>

   These are display:inline, where `line-height` cannot help - it does not
   change an inline element's border-box height. inline-block is what makes
   min-height apply. No padding and no negative-margin cancel is used: each
   target sits in a line box already at or above 24px, so the box grows into
   existing leading. Verified by injecting these rules into the live SAT page:
   0 targets remaining, document height +0px, no horizontal overflow.

   SCOPE PREFIX: scoped on the `footer` element. On THIS template
   `.footer-widget footer` also matches, so either prefix would work - the bare
   `footer` is used for consistency across the 18 template files in this ticket,
   three of which genuinely need it (Zen-Garden and Au-Courant nest
   `footer > .footer-widget`, reversed; Jackson-Square has no `.footer-widget`
   element at all). `footer` is a superset of both nestings. Verified against
   the live SAT DOM per template - not assumed.
   ------------------------------------------------------------ */

footer .footer-property-logo a {
    display: inline-block;
    min-height: 24px;
}

footer .footer-phone-content a.footer-phone {
    display: inline-block;
    min-height: 24px;
}

footer .footer-logo.footer-pmclogo a {
    display: inline-block;
    min-height: 24px;
}

/* ------------------------------------------------------------
   TFS 2987209 — WCAG 2.2 AAA 2.5.5 Target Size (Enhanced), 44x44
   C0070-GS-Elan. Measured live at 375/768/1440.
   Override file is wcag-gs-elan.css (NOT wcag-c0070-gs-elan.css).

   *** PRE-EXISTING BLOCKER, NOT INTRODUCED HERE ***
   #specials-flyout renders open on load at every viewport and its
   close button sits exactly on top of button.menu-toggle. A real
   click on either does nothing because the page throws
   "Uncaught TypeError: $(...).expander is not a function" before
   Bootstrap's collapse handlers bind. A 3x3 grid inside the
   hamburger hit 0/9 points at all three viewports. Since #menuElem
   lives inside #main-menu-flyout, which only opens from that
   hamburger, NO Elan nav link is reachable by a real user on this
   build. The nav geometry below was obtained by opening the flyout
   programmatically. The rules are correct and will take effect once
   that JS defect is fixed; they simply cannot be click-verified on
   this build. Raised separately — it is a click-stealing defect in
   its own right, unrelated to target size.
   ------------------------------------------------------------ */

/* Nav links fail ONLY in the <=640px band, where the master drops
   them to line-height:56px/font-size:32px and they render 40px tall.
   At 768 they are 50px and at 1440 they are 76px — both already
   pass — so the rule is gated to avoid touching compliant states.
   The anchor is display:inline, where min-height cannot apply at
   all; inline-block is what actually does the work here (it lets the
   existing 56px line-height form the box). min-height is the safety
   net, and min-width guards the narrowest label "404" at 50.14px,
   which has only 6.14px of headroom.
   Base selector is `#main-menu-flyout #menuElem li a` (two IDs);
   the selector below matches that weight plus #form.
   NOTE: an overlay is not viable here regardless — div.menu-container
   is overflow:auto at level 3 from the anchor and would clip it,
   the same clipping trap already hit on this ticket. */
@media (max-width: 640px) {
    body #form #main-menu-flyout #menuElem li a {
        box-sizing: border-box;
        display: inline-block;
        min-width: 44px;
        min-height: 44px;
    }
}

/* Header CTAs — both 38px tall at 1440, hidden below that. Selector
   is the CLASS, not `a.header-CTA-button`: #header-CTA is an <a> but
   #header-specials-CTA is a <button>, so an anchor-qualified
   selector would miss half of them. Both are already inline-block
   with no height declared, so min-height applies directly. */
body #form .header-CTA-button {
    box-sizing: border-box;
    min-height: 44px;
}

/* All three phone instances fail (97.17x17 / 111.05x19 / 111.05x19
   at 375). The header one has no size rules at all and is
   display:inline, so it needs the display change; the
   footer-contact one is already inline-block. */
body #form .contact-section-phone > a.seo-number,
body #form a.footer-phone.seo-number {
    box-sizing: border-box;
    display: inline-block;
    min-height: 44px;
}

/* Header phone needs MORE than min-height. A 1px-step edge scan
   showed that sizing it to 44px still left only 38px effectively
   clickable at all three viewports: 2px is covered by the parent
   .header-top-container and 4px by the SIBLING
   div.header-bottom-container, which is position:relative and so
   paints above a static anchor. elementsFromPoint at the bottom
   edge returned .header-bottom-container ahead of the link.
   Sizing alone therefore does NOT satisfy 2.5.5 here — the target
   must also win the paint order, hence position:relative + z-index.
   This is why the fix is verified with hit-tests rather than
   bounding-box arithmetic: the box measured 44px while the real
   target was 38px. */
body #form #header-phone > a.seo-number {
    box-sizing: border-box;
    display: inline-block;
    position: relative;
    z-index: 1;
    min-height: 44px;
}
/* button.menu-toggle is already fixed by this ticket's shipped
   ::before overlay in this same file (verified live: effective hit
   area ~52x46). Deliberately not touched — and note .menu-toggle
   ::before is therefore TAKEN on this template. */

/* Address / "get directions" link — 96.25x17 at 375, fails on
   height (width passes at 96.25px, so no min-width).

   display:inline-block, NOT inline-flex: this anchor wraps three
   stacked <span> address lines in the header (and two <div>s in the
   footer). inline-flex would lay those out as a ROW and visibly
   break the address block — the same failure mode already seen on
   Teracy's icon-tile nav and Aurora's stacked icon+label phone
   link, which is why inline-flex is used sparingly on this ticket
   rather than as a default.

   position:relative + z-index for the same reason as the header
   phone above: this link also sits inside .header-top-container,
   whose sibling div.header-bottom-container is position:relative
   and paints over a static anchor, silently eating several px off
   the bottom of the real hit area.

   NOTE: id="directionsLink" is DUPLICATED on this template (once in
   #header-address, once in #footer-address) — a pre-existing 4.1.1
   defect, not introduced here and not fixed here. Both instances
   are scoped explicitly by their parent so this rule does not rely
   on the id being unique. min-height is a no-op on whichever
   instance already passes. */
body #form #header-address a#directionsLink,
body #form #footer-address a#directionsLink {
    box-sizing: border-box;
    display: inline-block;
    position: relative;
    z-index: 1;
    min-height: 44px;
}

/* ------------------------------------------------------------
   WCAG 2.2 AA 2.5.8 Target Size (Minimum) — TFS 3040687
   Shared-component block. IDENTICAL BYTES in every wcag-*.css —
   this issue spans 23 templates, so nothing here is template-tuned.

   Source of truth: Silktide check `ensure-minimum-target-size`
   pulled from PROD 2026-08-24 — 182 sites / 1,034 flagged elements
   (test/3040687-target-size/silktide-prod/raw-flagged.json). Every
   rule cites the bucket and the geometry Silktide reported, and each
   was measured in headless Chrome before being included.

   Specificity: `body` prefix + !important rather than this template's
   own namespace prefix. The namespace would narrow the match and miss
   elements rendered outside the template wrapper (the decoy anchor is
   one of those).

   *** NEVER ADD `display` TO A TEXT-LINK RULE HERE. ***
   MEASURED, then SEEN in a screenshot: `display:inline-block` on
   a[href*="greystar.com/privacy"] made that link drop ~9px BELOW its row-mates
   ("DISCLOSURES & LICENSES", "DMCA AGENT") in the elan08022023 footer — a
   visible zig-zag, because inline-block turns the link into an atomic box that
   carries its own padding into the line layout. Vertical padding on a plain
   INLINE link grows the hit box (what the scanner measures) while the glyphs
   stay exactly on the baseline. Padding alone is sufficient; `display` is not
   needed anywhere in this block except the decoy's `display:none`.

   *** 24.0px IS NOT ENOUGH — read before editing any value below. ***
   TFS 2955118 established empirically (see the Tableau and Ascension
   notes earlier in this file) that a target landing on EXACTLY 24.0px
   is still flagged by the scanner: ".CMSSiteMapLink at 32px passes,
   footer links at 24.0 do not." So every rule here OVERSHOOTS:
     - text links  -> vertical padding, which composes with any existing
                      padding instead of replacing it, and never caps the
                      box the way line-height does
     - icon/dots   -> 28px, not 24px
   Do NOT "tidy" these back to min-height:24px / line-height:24px. That
   reintroduces the 24.0 failure AND, because these rules carry
   !important, would override the working padding-based rules that some
   templates (e.g. Ascension) already ship.
   ------------------------------------------------------------ */

/* 1. Hidden decoy anchor — 85 rows / 29 sites, reported 54x22.
      <a href="#" tabindex="-1" aria-hidden="true" rel="nofollow"
         style="opacity:.01;position:absolute;z-index:-999">___</a>
      Not a real control. Its inline style carries no !important, so
      this wins and takes it out of hit-testing and the a11y tree. */
body a[aria-hidden="true"][tabindex="-1"][rel="nofollow"] {
    display: none !important;
}

/* 2. Site-map page links — 371 rows / 52 sites, the largest bucket.
      Reported ~71x19, stacked about one line-height apart.
      NOTE: a.CMSListMenuLink (5 rows) is deliberately EXCLUDED — that
      is the primary-nav class, and forcing line-height on it across 22
      templates risks every page's header for 5 rows. */
body a.CMSSiteMapLink {
    padding-top: 5px !important;
    padding-bottom: 5px !important;
}

/* 3. Social icon links — NOT handled here. 44 rows / 23 sites, flagged at
      11.4x24 / 17.2x24 (icon-font glyph on a `display:inline` anchor).

      MEASURED: every fleet-wide formulation broke something.
        - `display:inline-flex` + min-28  -> SHRANK compliant icons
                                             (balcony 44x44 -> 28x28, slate 33 -> 28)
        - `display:inline-block` + min-28 -> same shrink (the box comes from the
                                             parent's layout; any display override
                                             re-computes it)
        - `padding: 4px 8px` (no shrink)  -> the extra width WRAPS the icon row
                                             onto a second line: slateqanew
                                             UL.header-social 5 icons, vertical
                                             centre spread 0px -> 28.6px (visible
                                             zig-zag); emerald +8px, balcony +4px.

      The containers differ per template, so this needs a container-scoped rule,
      not a fleet-wide one. **TFS 2982346 owns social-icon target size** and has
      per-template branches for exactly this. Left to that ticket on purpose.
      Do not re-add a global `a.facebook`-style rule here. */

/* 4. Hero scroll-down affordance — 18 rows / 15 sites, reported 9x16. */
body a#scroll-down {
    padding: 6px 8px !important;
}

/* 5. Hamburger / nav toggle — reported 16x6. a.dropdown-toggle is already
      handled elsewhere in this file; only the button form is new.

      min-* rather than padding: a <button> is inline-block by default, so
      min-width/min-height apply and can only ever RAISE a dimension. An
      earlier `padding: 10px` shorthand REPLACED the button's own padding and
      grew emerald10262023's header button from 90.5x44 to 110.5x47 — 20px
      wider for no benefit, since it was already compliant. Verified with
      min-*: elan08022023 menu-toggle stays 40x35 @375 and 55x45 @1440. */
body button.menu-toggle {
    min-width: 28px !important;
    min-height: 28px !important;
}

/* 6. Carousel dots and gallery pagination.
      padding + background-clip:content-box grows the HIT AREA while the
      painted dot keeps its original size, so the carousel looks the same.
      The padding is per-widget because the dots differ in size, and with
      box-sizing:border-box the content box (= the painted area) is
      28px - 2*padding. Get this wrong and the dot visibly SHRINKS.
        .owl-dot          measured  7x7  -> padding 10px leaves  8px painted
        flexslider dots   measured 14x14 -> padding  7px leaves 14px painted */
body button.owl-dot,
body .owl-dots button.owl-dot {
    box-sizing: border-box !important;
    min-width: 28px !important;
    min-height: 28px !important;
    padding: 10px !important;
    margin-left: 2px !important;
    margin-right: 2px !important;
    background-clip: content-box !important;
}
body .flex-control-nav a,
body .flex-control-paging a {
    box-sizing: border-box !important;
    min-width: 28px !important;
    min-height: 28px !important;
    padding: 7px !important;
    background-clip: content-box !important;
}
/* a.pagination-item is deliberately NOT handled here. MEASURED REGRESSION:
   on haute011326.sat-ws the gallery tiles are
   `a.fancybox3.gallery-item.pagination-item` at display:block, 469.5x449.5.
   Forcing `display:inline-block` collapsed them to 28px and shortened the page
   by 3,936px — it destroys the gallery grid. The flagged element was a
   380x2 collapsed inline on one site (17 rows, 1 site); that is not worth
   risking every gallery on the fleet. Route it to its own ticket with a
   container-scoped selector if it matters. */

/* 7. Header / footer phone links — NOT handled here. 6 rows / 5 sites,
      flagged at ~102x19.

      MEASURED ON PROD (181-site sweep, 2026-08-25): the rule
        a.footer-phone.seo-number, a.header-phone.seo-number
          { padding-top:5px; padding-bottom:5px }
      SHRANK the phone CTA on 30 live sites — e.g. affinityatkendrick.com,
      esprialiving.com, affinityathudson.com: a.btn.footer-phone.seo-number went
      137x38 -> 137x32, and apartmentsdavie.com 175x46.6 -> 175x40.6. On those
      templates the element is a styled button whose own padding is larger than
      5px, and `padding-top/bottom` REPLACES it rather than adding to it.

      6 flagged rows is not worth a visible shrink on 30 sites. `min-height`
      would be safe but is a no-op on the inline instances that are actually
      flagged, so it would buy nothing. Needs a per-template rule that knows
      whether the phone renders as inline text or as a button. */

/* 8. "Read More" expander — 26 rows. Measured on encorerise.com: 94.5x20,
      `display:inline`, no sibling controls in its row, so vertical padding is
      safe here and lifts it to 38px.

      REMOVED from this rule after measurement, do not re-add:
        a[href*="greystar.com/privacy"] (38 rows / 7 sites) — every instance
          measured is ALREADY compliant (mirabellahouston 95.3x44,
          capitalplaceatsouthwood 94.6x44 and 132x27, thegeorgianapts 41x28).
          Padding them gained nothing and BROKE the footer legal row: on
          elan08022023 the base CSS makes that link `display:inline-block` at
          44px alongside "Disclosures & Licenses" / "DMCA Agent"; +9px padding
          grew it to 62px and dropped its centre 9px BELOW its row-mates —
          visible zig-zag, confirmed in a screenshot.
        a[href*="onlineleasing.realpage.com"] (12 rows) — no instance measured
          under 24px, so there was no evidence it needed the rule, and it
          carries the same row-breaking risk.
      Both need a per-template, container-scoped rule if they are ever a real
      failure. A fleet-wide href selector cannot tell "already fine" from
      "too small". */
body a.more-link {
    padding-top: 9px !important;
    padding-bottom: 9px !important;
}

/* 9. In-prose content links — the last and largest remaining bucket
      (~191 rows), e.g. neighbourhood/POI links inside pasted body copy:
        a "Bert Fields Park"  109.7x18  parent p.MsoNormal  prose 425 chars

      These are arguably EXEMPT under 2.5.8's Inline exception, but
      Silktide flags them, so they are padded here to clear the check.

      4px, not more: the flagged links measure 17-22px tall, so +8px lands them
      at 25-30px — clear of 24 without enlarging the box further than needed.
      Measured on thegeorgianapts-dallas.com/Neighborhood.aspx: pad 4px gives
      minHeight 26.0; pad 7px gives 32.0 but widens the box-overlap between
      links on adjacent lines from 26px to 32px for no compliance gain.

      Vertical padding on an INLINE box grows the hit area (which is what
      Silktide measures) without pushing text lines apart. Measured on
      thegeorgianapts-dallas.com/Neighborhood.aspx, altalongwood.com and
      thearialiving.com/site-map.aspx: body scrollHeight delta 0 at
      1440px, but -20px to +27px at 375px, and scrollWidth delta 0 at
      every width. None of these links carry a background-color or border
      (measured: 0 of them), so the enlarged box is invisible. So: no horizontal overflow, small vertical movement
      on mobile — QA regression check §3a in the validation guide.

      Scope is deliberately narrow — p / td / span, classless links only.
      DO NOT broaden this to `a:not([class])`: measured on
      mirabellahouston.com that also pads already-compliant 44px nav and
      footer links up to 57px, inflates the footer logo 170px -> 184px,
      and SHRANK a 44px CTA to 30px. */
body p a:not([class]),
body td a:not([class]),
body span a:not([class]) {
    padding-top: 4px !important;
    padding-bottom: 4px !important;
}
/* ---------- end WCAG 2.5.8 Target Size (TFS 3040687) ---------- */
