/* ============================================================
   wcag-c0051-gs-balcony.css
   WCAG 2.1 Level AA override for the C0051-GS-Balcony Kentico template
   (TemplateId 1366).

   Selectors verified against the live base CSS pulled from
   https://livethelaurels.com on 2026-05-07.

   IMPORTANT — this template namespaces all base rules under
   .template-balcony (set by a wrapper div inside <body>).
   All overrides below carry that prefix to match base
   specificity. Several base rules use !important on outline:none
   and box-shadow:none, so our focus rules use !important to win.

   Specificity strategy:
   Every selector is prefixed with `body #form` (the ASP.NET
   WebForms page-level form ID, present on every 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_*. Combined
   with the `.template-balcony` namespace already in each
   selector, rules sit at (1, 3+, 2+).
   ============================================================ */


/* ------------------------------------------------------------
   WCAG 2.4.7 Focus Visible
   Base suppresses outlines on:
     .template-balcony a:hover, .template-balcony a:focus
       { outline-color:transparent; outline-style:none }
     .template-balcony .btn-primary:hover ... { outline:none !important }
     .template-balcony .contact-form ... :focus
       { outline:none; box-shadow:none !important }
     .template-balcony .floorplan-search-bar .floorplan-search-moveindate:focus
       { outline:none }
     .template-balcony .contact-widget .contactus-float-input-div input:focus
       { outline:none }
     .footer-widget footer a:focus { outline:none }
   Restore visible focus rings.
   ------------------------------------------------------------ */
body #form .template-balcony a:focus-visible,
body #form .template-balcony button:focus-visible,
body #form .template-balcony .btn:focus-visible,
body #form .template-balcony .btn-primary:focus-visible,
body #form .template-balcony input:focus-visible,
body #form .template-balcony select:focus-visible,
body #form .template-balcony textarea:focus-visible,
body #form .template-balcony .navbar-toggle:focus-visible,
body #form .template-balcony .dropdown-toggle:focus-visible,
body #form .template-balcony .contact-form .form-control:focus-visible,
body #form .template-balcony .contact-us-enhanced .form-control:focus-visible,
body #form .template-balcony .contact-widget input:focus-visible,
body #form .template-balcony .contact-widget textarea:focus-visible,
body #form .template-balcony .floorplan-search-bar .floorplan-search-moveindate:focus-visible,
body #form .template-balcony [tabindex]:focus-visible,
body #form .template-balcony [role="button"]:focus-visible,
body #form .footer-widget footer a: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 !important;
  box-shadow: 0 0 0 2px #005fcc, 0 0 0 3px #fff !important;
}


/* ------------------------------------------------------------
   WCAG 2.4.11 Focus Not Obscured
   Base header is position:fixed with height:84px (.template-balcony header).
   Reserve scroll space + a small visual buffer.
   ------------------------------------------------------------ */
html {
  scroll-padding-top: 100px;
}

body #form .template-balcony :focus-visible {
  scroll-margin-top: 100px;
}


/* ------------------------------------------------------------
   WCAG 1.4.11 Non-text Contrast (form controls)
   Base: .template-balcony .contact-us-enhanced .form-group .form-control
         { border:2px solid #abaaab; border-width:0 0 2px }
   #abaaab on white ≈ 3.05:1 — borderline. Bump to #595959 (7:1).
   ------------------------------------------------------------ */
body #form .template-balcony .contact-us-enhanced .form-group .form-control,
body #form .template-balcony .contact-form .form-control,
body #form .template-balcony .contact-widget .contactus-float-input-div input,
body #form .template-balcony .contact-widget .contactus-float-input-div textarea {
  border-color: #595959 !important;
}


/* ------------------------------------------------------------
   WCAG 1.4.3 Contrast Minimum (footer disclosure only)
   The base rule `.template-balcony a { color:#919191 }` technically
   fails 4.5:1 on white, but we do NOT override the color here.
   Reason: shared template injection applies to every Greystar
   property on this template, and properties apply their own brand
   colors to body links. A blanket `color: #595959` would override
   per-property branding. If a specific property's brand color
   fails Silktide, fix it at that property's site-CSS level.
   We DO bump the footer-disclosure opacity (no brand impact).
   ------------------------------------------------------------ */
body #form .footer-widget footer .footer-disclosure {
  opacity: 0.85;
}


/* ------------------------------------------------------------
   WCAG 1.4.1 Use of Color (inline links)
   Underline inline content links so they're distinguishable
   without color. Scoped to body-content containers only —
   bare `p a` / `li a` / `dd a` selectors would bleed into
   footer nav (which uses `<ul><li><a>` for menu links) and
   footer disclosure (`<p><a>`), so we anchor to actual content
   containers instead.
   ------------------------------------------------------------ */
body #form .template-balcony .container-fluid.main a,
body #form .template-balcony .col-sm-12.content a,
body #form .template-balcony .main-content-text a,
body #form .template-balcony .inner-page-main-content a {
  text-decoration: underline;
  text-underline-offset: 2px;
}

body #form .template-balcony a.btn,
body #form .template-balcony a.button,
body #form .template-balcony .btn,
body #form .template-balcony .btn-primary,
body #form .template-balcony header a,
body #form .template-balcony nav a,
body #form .template-balcony .navbar a,
body #form .template-balcony .navbar-collapse a,
body #form .template-balcony .cta-header-btn,
body #form .template-balcony .header-CTA-button,
body #form .template-balcony .footer-CTA-Button,
body #form .template-balcony a.more-link,
body #form .template-balcony a.less-link,
body #form .footer-widget footer a {
  text-decoration: none;
}


/* ------------------------------------------------------------
   TFS 2870264 — WCAG 1.4.1 (homepage inline links)
   Balcony's homepage uses `.about-section` (the welcome
   row with three `.col-md-4` text columns: `<h4>` + `<p>`)
   and `.neighborhood-widget` (same pattern). `.callout`
   holds the section heading; rich-text paragraphs sit in
   `.col-md-4 > p`. The "more" link uses `<a class="more-btn">`
   — already opted out via `a.more-link` above; explicit
   opt-out here for the matching `more-btn` class too.
   ------------------------------------------------------------ */
body #form .template-balcony .about-section .col-md-4 a,
body #form .template-balcony .about-section .col-md-4 p a,
body #form .template-balcony .about-section .callout a,
body #form .template-balcony .neighborhood-widget .col-md-4 a,
body #form .template-balcony .neighborhood-widget .col-md-4 p a,
body #form .template-balcony .neighborhood-widget .callout a {
  text-decoration: underline;
  text-underline-offset: 2px;
}

body #form .template-balcony .about-section a.more-btn,
body #form .template-balcony .neighborhood-widget a.more-btn,
body #form .template-balcony a.more-btn,
body #form .template-balcony .more-btn {
  text-decoration: none;
}

/* ------------------------------------------------------------
   WCAG 2.2 AA 2.5.8 Target Size (Pointer)
   ------------------------------------------------------------ */
body #form .footer-widget footer a {
    line-height: 24px;
    margin: 5px 0;
    display: inline-block
}

/* ------------------------------------------------------------
   WCAG 1.4.3 Contrast Minimum — "Get Directions" button
   TFS 2870466

   Base: .btn-primary { background:#00A0B0; color:#fff; }
   White on #00A0B0 ≈ 3.13:1 — fails the 4.5:1 normal-text
   threshold. At 20px (~15pt) bold, the text qualifies as
   "large text" per WCAG (14pt+ bold), which only requires
   3:1 contrast — so bolding lets the existing palette pass.
   ------------------------------------------------------------ */
.template-balcony a.btn.btn-primary.btn-lg[href*="maps.google.com"] {
  font-weight: bold;
}

/* ------------------------------------------------------------
   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;
}

/* 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 2924977 - WCAG 2.2 AA 2.5.8 Target Size (Pointer)
   Banner carousel paging dots. The global flexslider.css hit-box fix
   (.flex-control-paging li a -> 24px) is outranked by the master rule
   .template-balcony .slides-banner-wrapper .flex-control-nav li a
   (specificity 0,3,2; it only sets 14px width/height - the dot's dark
   fill + inset shadow come from global .flex-control-paging li a).
   Grow the <a> to a 26px target (specificity 1,3,3) and redraw the
   14px dot on ::before so the inset shadow hugs the dot rather than
   ringing the enlarged border-box. Hover/active states preserved.
   ------------------------------------------------------------ */
body #form .template-balcony .slides-banner-wrapper .flex-control-nav li a {
  box-sizing: border-box;
  width: 26px;
  height: 26px;
  padding: 0;
  background: transparent;
  box-shadow: none;
  position: relative;
}
body #form .template-balcony .slides-banner-wrapper .flex-control-nav li a::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 14px;
  height: 14px;
  margin: -7px 0 0 -7px;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.5);
  box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3);
}
body #form .template-balcony .slides-banner-wrapper .flex-control-nav li a:hover::before {
  background: rgba(0, 0, 0, 0.7);
}
body #form .template-balcony .slides-banner-wrapper .flex-control-nav li a.flex-active::before {
  background: rgba(255, 255, 255, 0.9);
}
