/* Pre-launch review layer (2026-10-10).
 *
 * Linked LAST on every page, after each band's own sheets. Everything here is either an
 * element the review added (`gy-added` / `gy-*`) or a state Duda's runtime used to drive and
 * the port never carried. /gm/* is served must-revalidate, so an edit here goes live with the
 * deploy; nothing in this file is content-hashed.
 */

/* ---------------------------------------------------------------- drawer sub-menus
 * Every group starts CLOSED, the current page's included, and the caret opens it
 * (runtime.js §9). `data-gy-sub` is stamped by the script, so with JS off the menu keeps
 * Duda's own behaviour instead of becoming unreachable.
 *
 * max-height clips the CONTENT box, so the list's own vertical padding has to collapse with
 * it or a "closed" group still stands 20px tall. The panel is also opacity:0 until Duda's
 * cascade opens it, so the open state restores that as well as the height.
 */
#dm#dm .layout-drawer li[data-gy-sub] > .unifiednav__container[data-depth] {
  transition: max-height 0.3s ease, opacity 0.25s ease, padding 0.3s ease !important;
  overflow: hidden !important;
}
#dm#dm .layout-drawer li[data-gy-sub]:not(.unifiednav__item-wrap_open) > .unifiednav__container[data-depth] {
  max-height: 0 !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  margin-top: 0 !important;
  margin-bottom: 0 !important;
  opacity: 0 !important;
  pointer-events: none !important;
  visibility: hidden;
}
#dm#dm .layout-drawer li[data-gy-sub].unifiednav__item-wrap_open > .unifiednav__container[data-depth] {
  max-height: var(--gy-sub-h, 3200px) !important;
  opacity: 1 !important;
  pointer-events: auto !important;
  visibility: visible;
}
#dm#dm .layout-drawer li[data-gy-sub] > a.unifiednav__item_has-sub-nav .icon::before {
  display: inline-block;
  transition: transform 0.25s ease;
}
#dm#dm .layout-drawer li[data-gy-sub]:not(.unifiednav__item-wrap_open) > a.unifiednav__item_has-sub-nav .icon::before {
  transform: rotate(0deg) !important;
}
#dm#dm .layout-drawer li[data-gy-sub].unifiednav__item-wrap_open > a.unifiednav__item_has-sub-nav .icon::before {
  transform: rotate(180deg) !important;
}
#dm#dm .layout-drawer li[data-gy-sub] > a.unifiednav__item_has-sub-nav .icon {
  cursor: pointer;
}

/* ---------------------------------------------------------------- legal links
 * The footer pair sits in the existing centred "Privacy Policy" paragraph and inherits its
 * ink. The form line follows the SUBMIT button, which is left-aligned at every band, and has
 * to clear it: Duda floats `.dmformsubmit`, so a following block otherwise flows up beside it.
 */
#dm .gy-legal-sep {
  display: initial;
  font-weight: bold;
  padding: 0 2px;
}
/* At 768 the footer column is 287px wide and the pair needs a few px more than that at 14px;
   keep the two labels on one row rather than orphaning "Service". */
html[data-mg-active-band="t"] #dm .dmFooterContainer p:has(> .gy-legal-sep) {
  white-space: nowrap;
}
html[data-mg-active-band="t"] #dm .dmFooterContainer p:has(> .gy-legal-sep) a {
  font-size: 13px !important;
}
#dm .dmform .gy-form-legal {
  clear: both;
  padding-top: 15px;
  text-align: left;
  font-size: 14px;
  line-height: 1.4;
  white-space: nowrap;
  color: rgb(16, 16, 16);
}
#dm .dmform .gy-form-legal a {
  color: rgb(16, 16, 16);
  text-decoration: underline;
}
#dm .dmform .gy-form-legal a:hover {
  color: rgb(1, 173, 239);
}
/* In-page jump to the Terms half of the combined legal page; the header is fixed on the
   tablet and phone bands. */
#dm .gy-anchor {
  scroll-margin-top: 24px;
}
html[data-mg-active-band="t"] #dm .gy-anchor {
  scroll-margin-top: 150px;
}
html[data-mg-active-band="m"] #dm .gy-anchor {
  scroll-margin-top: 120px;
}

/* ---------------------------------------------------------------- 404 heading
 * The message is now the page's <h1>; it keeps the box and type the <div> had.
 */
#dm #error-container h1.description.gy-h1 {
  font-family: inherit;
  font-size: 22px;
  font-weight: 400;
  line-height: 44px;
  letter-spacing: normal;
  color: inherit;
  margin: 45px 0;
  padding: 0;
  text-transform: none;
}

/* ---------------------------------------------------------------- blog-post pager
 * The numbers are anchors without an href in the capture, so they showed a text cursor.
 */
#dm .mainBlog .pagination-nav .pagination-link {
  cursor: pointer;
}
#dm .mainBlog .pagination-nav .pagination-link.disabled {
  cursor: default;
}

/* ---------------------------------------------------------------- /blog-search
 */
/* The index's own list hides `.blog-name` (show-blog-title="false"); live's results page shows
   it, centred, as the line that says how many posts matched. */
#dm#dm .mainBlog .gy-search-heading {
  display: block !important;
  text-align: center;
  margin: 10px 0 30px;
}

/* ---------------------------------------------------------------- scroll lock
 * Belt and braces for the phone band, where the document itself is the scroller.
 */
html.gy-drawer-open,
html.gy-drawer-open body {
  overscroll-behavior: contain;
}

/* ---------------------------------------------------------------- phone CTA label
 * The footer "Call us Today For a Free Estimate" button is 300px wide on phones (280 at 320)
 * and its 15px label, letter-spaced 5px, needs ~460px — so it broke onto two lines inside a
 * fixed 70px box. Tighten the tracking and size on the phone band only so it reads on one
 * line; desktop and tablet (670px button) are untouched.
 */
html[data-mg-active-band="m"] #dm#dm a.u_1506988566 .text {
  white-space: nowrap !important;
  letter-spacing: 1px !important;
  font-size: clamp(11.5px, 3.5vw, 13.5px) !important;
}
