.elementor-kit-7{--e-global-color-primary:#1C4C79;--e-global-color-secondary:#2E73B8;--e-global-color-text:#16202B;--e-global-color-accent:#0E2A45;--e-global-color-73aa81f:#143A5C;--e-global-color-c6302b3:#7FA8CC;--e-global-color-6fbfa1a:#DAE3EA;--e-global-color-64a2b74:#EEF3F7;--e-global-color-efce29f:#45525E;--e-global-color-4ca2ca7:#6B7884;--e-global-color-437d68a:#D5DDE4;--e-global-color-0e4528b:#F5F8FB;--e-global-typography-primary-font-family:"Oswald";--e-global-typography-primary-font-weight:700;--e-global-typography-primary-text-transform:uppercase;--e-global-typography-secondary-font-family:"Hanken Grotesk";--e-global-typography-secondary-font-weight:700;--e-global-typography-text-font-family:"Hanken Grotesk";--e-global-typography-text-font-size:16px;--e-global-typography-text-font-weight:400;--e-global-typography-text-line-height:1.6em;--e-global-typography-accent-font-family:"Hanken Grotesk";--e-global-typography-accent-font-weight:600;--e-global-typography-accent-text-transform:none;}.elementor-kit-7 e-page-transition{background-color:#FFBC7D;}.elementor-section.elementor-section-boxed > .elementor-container{max-width:1200px;}.e-con{--container-max-width:1200px;}.elementor-widget:not(:last-child){--kit-widget-spacing:24px;}.elementor-element{--widgets-spacing:24px 24px;--widgets-spacing-row:24px;--widgets-spacing-column:24px;}{}h1.entry-title{display:var(--page-title-display);}.site-header .site-branding{flex-direction:column;align-items:stretch;}.site-header{padding-inline-end:0px;padding-inline-start:0px;}.site-footer .site-branding{flex-direction:column;align-items:stretch;}@media(max-width:1024px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:1024px;}.e-con{--container-max-width:1024px;}}@media(max-width:767px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:767px;}.e-con{--container-max-width:767px;}}/* Start custom CSS *//* =========================================================================
   PUTNAM MAINTENANCE - ELEMENTOR GLOBAL CSS
   Privy Clear - v1.0 - July 2026
   Companion to putnam-brand.css + Brand Guide v1.2
   =========================================================================

   WHERE THIS GOES
   ---------------
   Paste the whole file into:  Elementor -> Site Settings -> Custom CSS
   (Elementor Pro; loads site-wide on every page, before page-level CSS.)
   Do NOT split it across page-level Custom CSS boxes - one source of truth.

   DO THIS FIRST (so the marketing team can edit colors/fonts in the UI):
   ----------------------------------------------------------------------
   Elementor -> Site Settings -> Global Colors - set EXACTLY these:
     Primary    #1C4C79   (Navy - headlines, primary buttons)
     Secondary  #2E73B8   (Blue - links, secondary CTA)
     Text       #16202B   (Ink - body text)
     Accent     #0E2A45   (Navy 900 - footer, dark sections)
     + Custom colors: Navy Deep #143A5C - Blue Soft #7FA8CC -
       Pale #DAE3EA - Pale Tint #EEF3F7 - Slate #45525E -
       Slate Light #6B7884 - Border #D5DDE4 - Surface #F5F8FB

   Elementor -> Site Settings -> Global Fonts:
     Primary (headlines) : Oswald - 700 - uppercase
     Secondary (sub-head): Hanken Grotesk - 700
     Text (body)         : Hanken Grotesk - 400 - 16px - line-height 1.6
     Accent (buttons)    : Hanken Grotesk - 600

   Elementor -> Custom Fonts (or wp_head snippet) - load once:
   <link href="https://fonts.googleapis.com/css2?family=Oswald:wght@500;600;700&family=Hanken+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">

   WHY THE !important FLAGS
   ------------------------
   Elementor generates per-element CSS (`.elementor-kit-##` and
   `.elementor-element-XXXX`) that outranks plain .elementor-kit-7s. Every
   !important below exists ONLY to beat that generated CSS so the brand
   stays consistent even when a widget has leftover inline settings.
   Rule of thumb for the team: style with Global Colors/Fonts first;
   this sheet is the safety net + the polish Elementor can't do natively.

   HOW TO USE THE UTILITY CLASSES
   ------------------------------
   On any container/widget: Advanced -> CSS Classes -> add e.g. `pm-card`.
   Class inventory: pm-section--tint / --navy - pm-eyebrow - pm-slogan -
   pm-lead - pm-card - pm-card--feature - pm-btn-ghost-on-dark -
   pm-trust-bar - pm-sticky-cta - pm-reveal (see bottom).
   ========================================================================= */

/* =========================================================================
   1 - DESIGN TOKENS
   Mirror of putnam-brand.css. Elementor's own vars (--e-global-color-*)
   are aliased so UI-picked colors and CSS tokens can't drift apart.
   ========================================================================= */
:root {
  /* Brand - aliased to Elementor Global Colors where they exist */
  --pm-navy:        var(--e-global-color-primary, #1C4C79);
  --pm-blue:        var(--e-global-color-secondary, #2E73B8);
  --pm-ink:         var(--e-global-color-text, #16202B);
  --pm-navy-900:    var(--e-global-color-accent, #0E2A45);
  --pm-navy-deep:   #143A5C;
  --pm-blue-soft:   #7FA8CC;
  --pm-pale:        #DAE3EA;
  --pm-pale-tint:   #EEF3F7;
  --pm-white:       #FFFFFF;

  /* Neutrals */
  --pm-slate:       #45525E;Use custom CSS to style your content or add the ".elementor-kit-7" prefix to target specific elements.
Need Help

  --pm-slate-light: #6B7884;
  --pm-border:      #D5DDE4;
  --pm-surface:     #F5F8FB;

  /* Semantic - forms/system only */
  --pm-success: #2E7D4F;
  --pm-warning: #B8791A;
  --pm-error:   #C0392B;

  /* Typography */
  --pm-font-display: "Oswald", "Arial Narrow", sans-serif;
  --pm-font-body:    "Hanken Grotesk", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;

  /* Type scale */
  --pm-text-xs: .75rem;  --pm-text-sm: .875rem; --pm-text-base: 1rem;
  --pm-text-lg: 1.125rem; --pm-text-xl: 1.25rem; --pm-text-2xl: 1.5rem;

  /* Spacing (8px grid) */
  --pm-space-1: .25rem; --pm-space-2: .5rem;  --pm-space-3: .75rem;
  --pm-space-4: 1rem;   --pm-space-5: 1.5rem; --pm-space-6: 2rem;
  --pm-space-7: 3rem;   --pm-space-8: 4rem;   --pm-space-9: 6rem;

  /* Layout */
  --pm-container: 1200px;
  --pm-section-y: clamp(3.5rem, 8vw, 6rem);

  /* Radius */
  --pm-radius-sm: 6px; --pm-radius: 10px; --pm-radius-lg: 16px;
  --pm-radius-btn: 8px; --pm-radius-pill: 999px;

  /* Shadows - navy-tinted, layered soft. Never harsh black. */
  --pm-shadow-sm: 0 1px 2px rgba(14,42,69,.06);
  --pm-shadow:    0 2px 6px rgba(14,42,69,.05), 0 6px 20px rgba(14,42,69,.08);
  --pm-shadow-lg: 0 4px 10px rgba(14,42,69,.06), 0 16px 40px rgba(14,42,69,.12);

  /* Motion - spring-like ease, never linear/ease-in-out */
  --pm-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --pm-dur:  .25s;
  --pm-dur-slow: .6s;
}

/* =========================================================================
   2 - BASE TYPOGRAPHY (safety net under Global Fonts)
   ========================================================================= */
body {
  font-family: var(--pm-font-body);
  font-size: var(--pm-text-base);
  line-height: 1.6;
  color: var(--pm-ink);
  -webkit-font-smoothing: antialiased;
}

/* Display headings - Oswald, ALWAYS uppercase (matches shirts & vans).
   Covers native h1/h2 AND Elementor Heading widgets set to h1/h2. */
h1, h2,
.elementor-widget-heading h1.elementor-heading-title,
.elementor-widget-heading h2.elementor-heading-title {
  font-family: var(--pm-font-display) !important;
  font-weight: 700;
  text-transform: uppercase !important;
  color: var(--pm-navy);
}
h1, .elementor-widget-heading h1.elementor-heading-title {
  font-size: clamp(2.5rem, 6vw, 4rem);
  line-height: 1.05;
  letter-spacing: .015em;
}
h2, .elementor-widget-heading h2.elementor-heading-title {
  font-size: clamp(2rem, 5vw, 3rem);
  font-weight: 600;
  line-height: 1.08;
  letter-spacing: .02em;
}

/* Sub-headings - Hanken, sentence case */
h3, h4, h5, h6,
.elementor-widget-heading h3.elementor-heading-title,
.elementor-widget-heading h4.elementor-heading-title,
.elementor-widget-heading h5.elementor-heading-title {
  font-family: var(--pm-font-body) !important;
  font-weight: 700;
  text-transform: none;
  color: var(--pm-navy);
}
h3, .elementor-widget-heading h3.elementor-heading-title { font-size: var(--pm-text-2xl); line-height: 1.25; }
h4, .elementor-widget-heading h4.elementor-heading-title { font-size: var(--pm-text-xl);  line-height: 1.3; }
h5, .elementor-widget-heading h5.elementor-heading-title { font-size: var(--pm-text-lg); font-weight: 600; }

/* Body copy - Text Editor widget + native */
p { max-width: 70ch; }
.elementor-widget-text-editor { font-family: var(--pm-font-body); line-height: 1.6; }

/* Eyebrow / kicker - add class to a Heading widget above H1/H2 */
.pm-eyebrow,
.pm-eyebrow .elementor-heading-title {
  font-family: var(--pm-font-body) !important;
  font-size: var(--pm-text-sm) !important;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--pm-blue) !important;
}

/* Slogan lockup - ONE CALL HANDLES IT ALL */
.pm-slogan,
.pm-slogan .elementor-heading-title {
  font-family: var(--pm-font-display) !important;
  font-weight: 700;
  text-transform: uppercase !important;
  letter-spacing: .14em !important;
  color: var(--pm-navy);
}

.pm-lead, .pm-lead p { font-size: var(--pm-text-lg); color: var(--pm-slate); line-height: 1.6; }

/* Links - content areas only (never inside nav/buttons) */
.elementor-widget-text-editor a:not(.elementor-button) {
  color: var(--pm-navy);
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color var(--pm-dur) var(--pm-ease);
}
.elementor-widget-text-editor a:not(.elementor-button):hover { color: var(--pm-blue); }

/* =========================================================================
   3 - SECTION HELPERS  (Advanced -> CSS Classes on the Container)
   ========================================================================= */
.pm-section--tint { background-color: var(--pm-pale-tint) !important; }
.pm-section--surface { background-color: var(--pm-surface) !important; }
.pm-section--navy {
  background-color: var(--pm-navy-900) !important;
  color: var(--pm-white);
}
.pm-section--navy h1, .pm-section--navy h2, .pm-section--navy h3,
.pm-section--navy .elementor-heading-title { color: var(--pm-white) !important; }
.pm-section--navy p, .pm-section--navy .elementor-widget-text-editor { color: rgba(255,255,255,.85); }
.pm-section--navy .pm-eyebrow, .pm-section--navy .pm-eyebrow .elementor-heading-title { color: var(--pm-blue-soft) !important; }

/* =========================================================================
   4 - BUTTONS
   Beats Elementor's kit-level button CSS so every Button widget,
   form submit, and popup button matches the brand automatically.
   ========================================================================= */
.elementor-button,
button.elementor-button,
a.elementor-button {
  font-family: var(--pm-font-body) !important;
  font-weight: 600 !important;
  font-size: var(--pm-text-base);
  line-height: 1;
  padding: .875rem 1.75rem;
  border-radius: var(--pm-radius-btn) !important;
  background-color: var(--pm-navy);
  color: var(--pm-white);
  border: 2px solid transparent;
  transition: background-color var(--pm-dur) var(--pm-ease),
              color var(--pm-dur) var(--pm-ease),
              border-color var(--pm-dur) var(--pm-ease),
              box-shadow var(--pm-dur) var(--pm-ease),
              transform var(--pm-dur) var(--pm-ease);
}
.elementor-button:hover {
  background-color: var(--pm-navy-deep);
  color: var(--pm-white);
  box-shadow: var(--pm-shadow);
  transform: translateY(-1px);
}
.elementor-button:active { transform: translateY(0) scale(.98); }

/* Variants - add the class to the Button widget (Advanced -> CSS Classes) */
.pm-btn--blue .elementor-button { background-color: var(--pm-blue) !important; }
.pm-btn--blue .elementor-button:hover { background-color: #235D96 !important; }

.pm-btn--secondary .elementor-button {
  background-color: transparent !important;
  color: var(--pm-navy) !important;
  border-color: var(--pm-navy) !important;
}
.pm-btn--secondary .elementor-button:hover { background-color: var(--pm-pale-tint) !important; }

.pm-btn--ondark .elementor-button {
  background-color: var(--pm-white) !important;
  color: var(--pm-navy) !important;
}
.pm-btn--ondark .elementor-button:hover { background-color: var(--pm-pale) !important; }

.pm-btn--lg .elementor-button { padding: 1.125rem 2.25rem !important; font-size: var(--pm-text-lg) !important; }

/* Emergency / call button - used in utility bar + sticky mobile bar */
.pm-btn--call .elementor-button {
  background-color: transparent !important;
  color: var(--pm-navy) !important;
  border-color: var(--pm-border) !important;
  font-variant-numeric: tabular-nums;
}
.pm-btn--call .elementor-button:hover { border-color: var(--pm-navy) !important; }

.elementor-button:focus-visible {
  outline: 3px solid var(--pm-blue-soft) !important;
  outline-offset: 2px;
}

/* =========================================================================
   5 - CARDS
   pm-card on a Container = the standard white card.
   pm-card--feature = the hover-lift version for service grids.
   ========================================================================= */
.pm-card {
  background-color: var(--pm-white);
  border: 1px solid var(--pm-border);
  border-radius: var(--pm-radius);
  padding: var(--pm-space-6);
  box-shadow: var(--pm-shadow-sm);
}
.pm-card--feature {
  transition: box-shadow var(--pm-dur-slow) var(--pm-ease),
              transform var(--pm-dur-slow) var(--pm-ease),
              border-color var(--pm-dur-slow) var(--pm-ease);
}
.pm-card--feature:hover {
  box-shadow: var(--pm-shadow-lg);
  border-color: var(--pm-blue-soft);
  transform: translateY(-4px);
}
/* Make the whole service card clickable: give the card's heading link
   a stretched hit area (link the Heading widget, add pm-card-link). */
.pm-card { position: relative; }
.pm-card-link a::after { content: ""; position: absolute; inset: 0; }

/* Icon chip inside service cards (Icon widget wrapper) */
.pm-icon-chip {
  width: 56px; height: 56px;
  display: flex; align-items: center; justify-content: center;
  background-color: var(--pm-pale-tint);
  border-radius: var(--pm-radius);
  color: var(--pm-navy);
  transition: background-color var(--pm-dur) var(--pm-ease), color var(--pm-dur) var(--pm-ease);
}
.pm-card--feature:hover .pm-icon-chip { background-color: var(--pm-navy); color: var(--pm-white); }
.pm-card--feature:hover .pm-icon-chip svg,
.pm-card--feature:hover .pm-icon-chip i { color: var(--pm-white) !important; fill: var(--pm-white) !important; }

/* =========================================================================
   6 - FORMS (Elementor Pro Form widget)
   ========================================================================= */
.elementor-field-group .elementor-field-label {
  font-family: var(--pm-font-body);
  font-size: var(--pm-text-sm);
  font-weight: 600;
  color: var(--pm-ink);
}
.elementor-field-group .elementor-field-textual {
  font-family: var(--pm-font-body) !important;
  font-size: var(--pm-text-base);
  color: var(--pm-ink);
  background-color: var(--pm-white);
  border: 1.5px solid var(--pm-border) !important;
  border-radius: var(--pm-radius-btn) !important;
  padding: .75rem 1rem;
  transition: border-color var(--pm-dur) var(--pm-ease), box-shadow var(--pm-dur) var(--pm-ease);
}
.elementor-field-group .elementor-field-textual:focus {
  border-color: var(--pm-blue) !important;
  box-shadow: 0 0 0 3px rgba(46,115,184,.18);
  outline: none;
}
.elementor-field-group .elementor-field-textual::placeholder { color: var(--pm-slate-light); }
.elementor-message.elementor-message-success { color: var(--pm-success); }
.elementor-message.elementor-message-danger  { color: var(--pm-error); }
.elementor-field-group .elementor-error .elementor-field-textual { border-color: var(--pm-error) !important; }

/* =========================================================================
   7 - HEADER / NAV (Theme Builder header template)
   ========================================================================= */
/* Utility bar (Tier 1) - thin, navy-900 */
.pm-utility-bar {
  background-color: var(--pm-navy-900) !important;
  color: var(--pm-white);
  font-size: var(--pm-text-sm);
}
.pm-utility-bar a { color: var(--pm-white); text-decoration: none; opacity: .9; transition: opacity var(--pm-dur) var(--pm-ease); }
.pm-utility-bar a:hover { opacity: 1; }

/* Primary nav labels - Oswald caps per brand */
.pm-main-nav .elementor-nav-menu a.elementor-item {
  font-family: var(--pm-font-display) !important;
  font-weight: 600;
  font-size: 1rem;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--pm-navy);
  transition: color var(--pm-dur) var(--pm-ease);
}
.pm-main-nav .elementor-nav-menu a.elementor-item:hover,
.pm-main-nav .elementor-nav-menu a.elementor-item.elementor-item-active { color: var(--pm-blue); }

/* Active-page underline that grows in */
.pm-main-nav .elementor-nav-menu a.elementor-item { position: relative; }
.pm-main-nav .elementor-nav-menu a.elementor-item::after {
  content: ""; position: absolute; left: 0; right: 100%; bottom: -6px;
  height: 3px; background: var(--pm-blue);
  transition: right var(--pm-dur-slow) var(--pm-ease);
}
.pm-main-nav .elementor-nav-menu a.elementor-item:hover::after,
.pm-main-nav .elementor-nav-menu a.elementor-item.elementor-item-active::after { right: 0; }

/* Dropdown/mega panels */
.pm-main-nav .elementor-nav-menu--dropdown {
  border: 1px solid var(--pm-border);
  border-radius: var(--pm-radius);
  box-shadow: var(--pm-shadow-lg);
  overflow: hidden;
}
.pm-main-nav .elementor-nav-menu--dropdown a {
  font-family: var(--pm-font-body) !important;
  text-transform: none;
  font-weight: 500;
}

/* Sticky header: use Elementor's "Sticky: Top" + add pm-header class.
   elementor-sticky--effects fires after scroll offset (set offset ~64). */
.pm-header { transition: box-shadow var(--pm-dur-slow) var(--pm-ease), background-color var(--pm-dur-slow) var(--pm-ease); }
.pm-header.elementor-sticky--effects { background-color: rgba(255,255,255,.96) !important; box-shadow: var(--pm-shadow); }


/* =========================================================================
   8 - STICKY MOBILE CALL/SCHEDULE BAR
   Build once in the header template: a Container with two buttons,
   class pm-sticky-cta. Hidden on desktop; fixed to bottom on mobile.
   ========================================================================= */
.pm-sticky-cta { display: none; }
@media (max-width: 767px) {
  .pm-sticky-cta {
    display: flex !important;
    position: fixed !important;
    bottom: 0; left: 0; right: 0;
    z-index: 999;
    gap: var(--pm-space-2);
    padding: var(--pm-space-2) var(--pm-space-3)
             calc(var(--pm-space-2) + env(safe-area-inset-bottom));
    background-color: rgba(255,255,255,.97);
    border-top: 1px solid var(--pm-border);
    box-shadow: 0 -6px 20px rgba(14,42,69,.10);
  }
  .pm-sticky-cta .elementor-button { width: 100%; justify-content: center; }
  /* Keep page content from hiding behind the bar */
  body { padding-bottom: 76px; }
}

/* =========================================================================
   9 - TRUST BAR (25+ yrs - Licensed & Insured - 24/7 Emergency - Local)
   ========================================================================= */
.pm-trust-bar {
  background-color: var(--pm-navy) !important;
  color: var(--pm-white);
}
.pm-trust-bar .elementor-icon-list-text,
.pm-trust-bar .elementor-widget-text-editor { color: var(--pm-white); font-weight: 600; }
.pm-trust-bar .elementor-icon-list-icon i,
.pm-trust-bar .elementor-icon-list-icon svg { color: var(--pm-blue-soft); fill: var(--pm-blue-soft); }

/* =========================================================================
   10 - BREADCRUMBS (Rank Math breadcrumbs shortcode)
   ========================================================================= */
.rank-math-breadcrumb, .rank-math-breadcrumb a {
  font-family: var(--pm-font-body);
  font-size: var(--pm-text-sm);
  color: var(--pm-slate-light);
  text-decoration: none;
}
.rank-math-breadcrumb a:hover { color: var(--pm-blue); }
.rank-math-breadcrumb .separator { margin: 0 .5em; color: var(--pm-border); }

/* =========================================================================
   11 - MOTION - scroll reveal + reduced-motion respect
   Prefer Elementor Motion Effects for one-offs; use pm-reveal for the
   consistent site-wide fade-up so every section enters the same way.
   Requires the tiny IntersectionObserver snippet (see build guide #CSS).
   ========================================================================= */
.pm-reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity var(--pm-dur-slow) var(--pm-ease),
              transform var(--pm-dur-slow) var(--pm-ease);
}
.pm-reveal.is-visible { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .pm-reveal { opacity: 1; transform: none; transition: none; }
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

/* Editor safety: never hide content inside the Elementor editor */
.elementor-editor-active .pm-reveal { opacity: 1; transform: none; }

/* =========================================================================
   12 - ACCESSIBILITY
   ========================================================================= */
:focus-visible { outline: 3px solid var(--pm-blue-soft); outline-offset: 2px; }
.pm-skip-link {
  position: absolute; left: -9999px; top: 0; z-index: 1000;
  background: var(--pm-navy); color: var(--pm-white);
  padding: var(--pm-space-3) var(--pm-space-5); border-radius: 0 0 var(--pm-radius-sm) 0;
}
.pm-skip-link:focus { left: 0; }

/* =========================================================================
   13 - UTILITY BAR CONTENT OVERRIDES (icon list + buttons-as-links)
   The utility bar right side is built from Button widgets and the left from
   an Icon List. This makes them all read as plain white text on the navy bar
   instead of navy buttons / blue icon-list text.
   ========================================================================= */
.pm-utility-bar .elementor-icon-list-text,
.pm-utility-bar .elementor-icon-list-icon i,
.pm-utility-bar .elementor-icon-list-icon svg {
  color: #FFFFFF !important;
  fill: #FFFFFF !important;
}
.pm-utility-bar .elementor-button {
  background-color: transparent !important;
  color: #FFFFFF !important;
  border: 0 !important;
  padding: 0 !important;
  box-shadow: none !important;
  transform: none !important;
  font-family: var(--pm-font-body) !important;
  font-weight: 500 !important;
  font-size: var(--pm-text-sm) !important;
  line-height: 1.4;
  opacity: .9;
  transition: opacity var(--pm-dur) var(--pm-ease);
}
.pm-utility-bar .elementor-button:hover {
  background-color: transparent !important;
  opacity: 1;
  transform: none !important;
}
.pm-utility-bar .elementor-button .elementor-button-icon,
.pm-utility-bar .elementor-button .elementor-button-icon svg {
  color: var(--pm-blue-soft) !important;
  fill: var(--pm-blue-soft) !important;
}

/* =========================================================================
   14 - TIER 2 HEADER ROW (logo | nav | actions)
   Add class pm-header-actions to the container holding the Call + Schedule
   buttons. It then hugs its two buttons and sits at the right, instead of
   stretching Full-Width and squeezing the nav into multiple lines.
   ========================================================================= */
.pm-header-actions {
  display: flex !important;
  flex: 0 0 auto !important;   /* size to content, do not grow */
  width: auto !important;      /* beat the Full-Width (100%) setting */
  align-items: center;
  gap: var(--pm-space-3);
  margin-left: auto;           /* push the group to the right edge */
}
/* Let the nav take the middle space so its items stay on one line */
.pm-header .elementor-widget-nav-menu { flex: 1 1 auto; }



/* =========================================================================
   16 - FOOTER (Theme Builder footer template)
   Classes: pm-footer (whole footer, navy) - pm-footer-head (column titles) -
   pm-footer-nav (the Nav Menu widgets in each column) - pm-footer-bottom
   (copyright/license bar).
   ========================================================================= */
.pm-footer {
  background-color: var(--pm-navy-900) !important;
  color: rgba(255,255,255,.82);
}
.pm-footer h1, .pm-footer h2, .pm-footer h3,
.pm-footer .elementor-heading-title { color: #FFFFFF; }

/* Column headings */
.pm-footer-head,
.pm-footer-head .elementor-heading-title {
  font-family: var(--pm-font-body) !important;
  font-size: var(--pm-text-sm) !important;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: #FFFFFF !important;
  margin-bottom: var(--pm-space-4);
}

/* Footer link lists (Nav Menu widget, vertical) */
.pm-footer-nav .elementor-nav-menu a.elementor-item {
  font-family: var(--pm-font-body) !important;
  text-transform: none !important;
  font-weight: 400;
  font-size: var(--pm-text-sm);
  color: rgba(255,255,255,.78) !important;
  padding: .35rem 0 !important;
  transition: color var(--pm-dur) var(--pm-ease);
}
.pm-footer-nav .elementor-nav-menu a.elementor-item:hover { color: var(--pm-blue-soft) !important; }
.pm-footer-nav .elementor-nav-menu a.elementor-item::after { display: none !important; }

/* NAP / contact text + links */
.pm-footer p, .pm-footer .elementor-widget-text-editor,
.pm-footer .elementor-icon-list-text { color: rgba(255,255,255,.82); }
.pm-footer a { color: rgba(255,255,255,.82); }
.pm-footer a:hover { color: var(--pm-blue-soft); }
.pm-footer .elementor-icon-list-icon i,
.pm-footer .elementor-icon-list-icon svg { color: var(--pm-blue-soft); fill: var(--pm-blue-soft); }

/* Social icons */
.pm-footer .elementor-social-icon {
  background-color: rgba(255,255,255,.10) !important;
  transition: background-color var(--pm-dur) var(--pm-ease);
}
.pm-footer .elementor-social-icon:hover { background-color: var(--pm-blue) !important; }

/* Bottom bar (copyright / license numbers) */
.pm-footer-bottom {
  border-top: 1px solid rgba(255,255,255,.12);
  color: rgba(255,255,255,.60);
  font-size: var(--pm-text-xs);
}
.pm-footer-bottom a { color: rgba(255,255,255,.60); }
.pm-footer-bottom a:hover { color: var(--pm-blue-soft); }

/* =========================================================================
   17 - FOOTER COLUMN LAYOUT
   Columns live inside the boxed container's .e-con-inner. Force that wrapper
   to a horizontal row, and force each column to size to a flex basis (beating
   Elementor's per-element full-width). Brand wider; stacks on mobile.
   ========================================================================= */
.pm-footer-cols > .e-con-inner {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: wrap !important;
  gap: 40px;
  align-items: flex-start;
}
.pm-footer-cols .pm-footer-col {
  flex: 1 1 150px !important;
  width: auto !important;
  min-width: 140px;
}
.pm-footer-cols .pm-footer-col--brand {
  flex: 1.6 1 240px !important;
}
@media (max-width: 767px) {
  .pm-footer-cols > .e-con-inner { flex-direction: column !important; gap: 28px; }
  .pm-footer-cols .pm-footer-col,
  .pm-footer-cols .pm-footer-col--brand { flex: 1 1 100% !important; width: 100% !important; }
}

/* =========================================================================
   18 - SERVICE PAGES (Single template)
   Classes: pm-service-intro (lead) - pm-signs-list (checklist, from [pm_signs])
   - pm-faqs / pm-faq (accordion, from [pm_faqs]) - pm-related-grid /
   pm-related-card (from [pm_related]).
   ========================================================================= */
.pm-service-intro, .pm-service-intro p { font-size: var(--pm-text-lg); color: var(--pm-slate); line-height: 1.6; }

/* Signs checklist */
.pm-signs-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: .85rem 2.5rem; }
.pm-signs-list li { position: relative; padding-left: 2.1rem; line-height: 1.5; color: var(--pm-ink); }
.pm-signs-list li::before { content: ""; position: absolute; left: 0; top: .1em; width: 1.4rem; height: 1.4rem; border-radius: 999px; background: var(--pm-navy) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") center / 0.9rem no-repeat; }
@media (max-width: 767px) { .pm-signs-list { grid-template-columns: 1fr; } }

/* FAQ accordion (native details/summary, no JS) */
.pm-faqs { max-width: 820px; }
.pm-faq { border-bottom: 1px solid var(--pm-border); }
.pm-faq summary { cursor: pointer; list-style: none; position: relative; padding: 1.15rem 2.5rem 1.15rem 0; font-family: var(--pm-font-body); font-weight: 600; font-size: var(--pm-text-lg); color: var(--pm-navy); }
.pm-faq summary::-webkit-details-marker { display: none; }
.pm-faq summary::after { content: "+"; position: absolute; right: .25rem; top: 50%; transform: translateY(-50%); font-size: 1.4rem; color: var(--pm-blue); line-height: 1; }
.pm-faq[open] summary::after { content: "\2212"; }
.pm-faq-a { padding: 0 0 1.25rem; color: var(--pm-slate); line-height: 1.6; }
.pm-faq-a p { margin: 0 0 .75rem; }

/* Related services cards */
.pm-related-grid { display: flex; flex-wrap: wrap; gap: 1rem; }
.pm-related-card { display: inline-flex; align-items: center; padding: .9rem 1.5rem; background: var(--pm-white); border: 1px solid var(--pm-border); border-radius: var(--pm-radius); font-weight: 600; color: var(--pm-navy); text-decoration: none; transition: border-color var(--pm-dur) var(--pm-ease), box-shadow var(--pm-dur) var(--pm-ease), transform var(--pm-dur) var(--pm-ease); }
.pm-related-card:hover { border-color: var(--pm-blue-soft); box-shadow: var(--pm-shadow); transform: translateY(-2px); color: var(--pm-blue); }

/* =====================================================================
   19 - SERVICE PAGE FIXES & POLISH
   Two real bugs + polish for the single-service template:
   (a) The pm-section* family never had a base PADDING rule - only the
       background modifiers existed - so every service section computed
       to 0 vertical padding. Restore the section rhythm here.
   (b) CTA buttons on the navy bands inherited the default navy fill,
       so navy-on-navy made them invisible. Give buttons a legible
       on-dark treatment (solid-white primary, ghost-white secondary).
   ===================================================================== */

/* (a) Vertical rhythm - the template mixes several section classes,
   so cover the whole family (idempotent when a section has two). */
.pm-section,
.pm-service-hero,
.pm-signs,
.pm-section--tint,
.pm-section--navy {
  padding-top: var(--pm-section-y) !important;
  padding-bottom: var(--pm-section-y) !important;
}

/* (b) Buttons on navy sections
   Fallback: ANY button on navy is at least legible (ghost white). */
.pm-section--navy .elementor-button {
  background-color: transparent !important;
  color: var(--pm-white) !important;
  border: 2px solid rgba(255, 255, 255, 0.6) !important;
}
.pm-section--navy .elementor-button:hover {
  background-color: var(--pm-white) !important;
  color: var(--pm-navy) !important;
  border-color: var(--pm-white) !important;
}
/* Primary CTA on navy (pm-book) - solid white, reads as the main action. */
.pm-section--navy .pm-book .elementor-button {
  background-color: var(--pm-white) !important;
  color: var(--pm-navy) !important;
  border-color: var(--pm-white) !important;
}
.pm-section--navy .pm-book .elementor-button:hover {
  background-color: rgba(255, 255, 255, 0.88) !important;
  color: var(--pm-navy) !important;
  border-color: rgba(255, 255, 255, 0.88) !important;
}
/* Secondary / phone on navy (pm-btn--call) - explicit ghost white. */
.pm-section--navy .pm-btn--call .elementor-button {
  background-color: transparent !important;
  color: var(--pm-white) !important;
  border: 2px solid rgba(255, 255, 255, 0.6) !important;
}
.pm-section--navy .pm-btn--call .elementor-button:hover {
  background-color: var(--pm-white) !important;
  color: var(--pm-navy) !important;
  border-color: var(--pm-white) !important;
}

/* =====================================================================
   20 - SERVICE HERO (elevated: rating, chips, sub-headline, image
   frame with floating proof card, and the certification trust bar)
   Classes go on the OUTER container of each piece.
   Layout (2 columns) is set in Elementor; this styles the contents.
   ===================================================================== */

/* Left copy column - keep the reading measure tight next to the image */
.pm-hero-copy { max-width: 640px; }

/* --- Rating proof (from [pm_rating]; hidden until a number is set) --- */
.pm-rating { display: inline-flex; align-items: center; flex-wrap: wrap; gap: .5rem; margin-bottom: 1.15rem; }
.pm-rating-stars { color: #E8963B; letter-spacing: 2px; font-size: 1.05rem; line-height: 1; }
.pm-rating strong { color: var(--pm-navy); font-weight: 700; font-size: .98rem; }
.pm-rating-count { color: var(--pm-slate); font-size: .9rem; }
.pm-rating-g { display: inline-grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; background: var(--pm-white); border: 1px solid var(--pm-border); font-family: var(--pm-font-display); font-weight: 700; font-size: .78rem; color: #4285F4; }

/* --- Sub-headline under the big H1 (sentence case, not Oswald caps) --- */
.pm-hero-subhead, .pm-hero-subhead .elementor-heading-title {
  font-family: var(--pm-font-body) !important;
  text-transform: none !important;
  font-weight: 700;
  font-size: var(--pm-text-xl);
  color: var(--pm-ink);
  line-height: 1.25;
  margin-top: .75rem;
}

/* --- Trust chips (Family-Owned / 25+ Years / 24-7 / etc.) --- */
.pm-hero-chips { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: 1.4rem; }
.pm-chip {
  display: inline-flex; align-items: center; gap: .45rem;
  background: var(--pm-white); border: 1px solid var(--pm-border);
  color: var(--pm-navy); font-weight: 600; font-size: .85rem;
  padding: .5rem .9rem; border-radius: var(--pm-radius-pill);
  box-shadow: var(--pm-shadow-sm);
}
.pm-chip::before { content: "\2713"; color: var(--pm-blue); font-weight: 700; font-size: .9rem; line-height: 1; }

/* --- Micro reassurance line under the buttons --- */
.pm-hero-micro, .pm-hero-micro p { color: var(--pm-slate-light); font-size: .85rem; font-weight: 500; margin: 1.1rem 0 0; }
.pm-hero-micro strong { color: var(--pm-blue); font-weight: 700; }

/* --- Media column: image frame + overlays --- */
.pm-hero-media { position: relative; }
.pm-hero-img img {
  display: block; width: 100%; height: auto; object-fit: cover;
  border-radius: var(--pm-radius-lg);
  box-shadow: var(--pm-shadow-lg);
}
/* 24-7 badge, top-right of the image */
.pm-hero-badge, .pm-hero-badge .elementor-heading-title {
  position: absolute; top: 1rem; right: 1rem; z-index: 2; margin: 0;
  background: var(--pm-navy); color: var(--pm-white) !important;
  font-family: var(--pm-font-display); text-transform: uppercase;
  letter-spacing: .05em; font-size: .78rem; font-weight: 700;
  padding: .5rem .8rem; border-radius: var(--pm-radius-sm);
  box-shadow: var(--pm-shadow);
}
/* floating review card, overlapping the bottom-left corner */
.pm-hero-proof {
  position: absolute; left: -1.5rem; bottom: -1.5rem; z-index: 3;
  max-width: 250px;
  background: var(--pm-white); border: 1px solid var(--pm-border);
  border-radius: var(--pm-radius); box-shadow: var(--pm-shadow-lg);
  padding: .9rem 1.1rem;
}
.pm-hero-proof .pm-rating { margin: 0 0 .35rem; }
.pm-hero-proof p { margin: 0; color: var(--pm-slate); font-size: .82rem; line-height: 1.45; }

/* --- Certification trust bar (its own section below the hero) --- */
/* Put pm-badgebar on the OUTER container; use an inline Icon List inside. */
.pm-badgebar { border-top: 1px solid var(--pm-border); }
.pm-badgebar .elementor-icon-list-items { justify-content: space-between; gap: .7rem 1.6rem; }
.pm-badgebar .elementor-icon-list-item { color: var(--pm-slate); font-weight: 600; font-size: .85rem; }
.pm-badgebar .elementor-icon-list-text { color: var(--pm-slate); }
.pm-badgebar .elementor-icon-list-icon svg,
.pm-badgebar .elementor-icon-list-icon i { color: var(--pm-blue) !important; fill: var(--pm-blue) !important; width: 18px; height: 18px; }

/* --- Responsive --- */
@media (max-width: 1024px) {
  .pm-hero-proof { left: 1rem; bottom: 1rem; }
}
@media (max-width: 767px) {
  .pm-hero-copy { max-width: none; }
  .pm-hero-proof { position: static; margin-top: 1rem; max-width: none; }
  .pm-hero-badge { top: .6rem; right: .6rem; }
  .pm-badgebar .elementor-icon-list-items { justify-content: flex-start; }
}

/* =====================================================================
   21 - HERO REFINEMENTS (fixes after the first hero build)
   ===================================================================== */

/* Chips: the Text Editor's inner <p> carries a bottom margin that pushes
   the label to the top of the pill. Zero it so the label centers and the
   pill isn't over-tall. */
.pm-chip .elementor-widget-container { line-height: 1; }
.pm-chip p { margin: 0 !important; line-height: 1.2 !important; }

/* 24/7 badge: beat the global H2 sizing so it stays a small chip,
   whatever heading tag the widget uses. */
.pm-hero-badge .elementor-heading-title {
  font-size: .78rem !important;
  line-height: 1.15 !important;
  letter-spacing: .05em !important;
  text-transform: uppercase !important;
}

/* Floating review card content (from [pm_rating style="card"]) */
.pm-proof { display: flex; flex-direction: column; gap: .3rem; }
.pm-proof-num { display: inline-flex; align-items: center; gap: .5rem; }
.pm-proof-num strong { font-family: var(--pm-font-display); font-size: 1.7rem; color: var(--pm-navy); line-height: 1; }
.pm-proof-num .pm-rating-stars { color: #E8963B; letter-spacing: 2px; font-size: 1rem; line-height: 1; }
.pm-proof p { margin: 0; color: var(--pm-slate); font-size: .8rem; line-height: 1.4; }

/* Trust bar: make it a compact strip (not a tall padded section) and
   fix the text colour (Elementor was rendering it blue). */
.pm-badgebar { padding-top: 1.25rem !important; padding-bottom: 1.25rem !important; }
.pm-badgebar .elementor-icon-list-items { align-items: center; }
.pm-badgebar .elementor-icon-list-item { color: var(--pm-slate) !important; }
.pm-badgebar .elementor-icon-list-item:hover { color: var(--pm-navy) !important; }
.pm-badgebar .elementor-icon-list-text { color: inherit !important; font-weight: 600; font-size: .85rem; }
.pm-badgebar .elementor-icon-list-icon { display: inline-flex; align-items: center; }
.pm-badgebar .elementor-icon-list-icon svg,
.pm-badgebar .elementor-icon-list-icon i { color: var(--pm-blue) !important; fill: var(--pm-blue) !important; width: 17px; height: 17px; }

/* =====================================================================
   22 - SUB-HEADLINE SIZE FIX
   pm-hero-subhead is an H2, so the global H2 rule (higher specificity +
   !important) was overriding Section 20. Raise specificity so the
   sub-headline stays a calm, body-weight line whatever tag it uses.
   ===================================================================== */
.elementor-widget-heading.pm-hero-subhead .elementor-heading-title,
.pm-hero-subhead .elementor-heading-title {
  font-family: var(--pm-font-body) !important;
  text-transform: none !important;
  font-weight: 700 !important;
  font-size: var(--pm-text-xl) !important;
  line-height: 1.25 !important;
  letter-spacing: 0 !important;
  color: var(--pm-ink) !important;
}

/* =====================================================================
   23 - 24/7 BADGE FIX (removes the stray bubble)
   Section 20 applied the chip styling AND absolute positioning to BOTH
   the badge wrapper and its inner heading title, so the wrapper collapsed
   into a tiny empty bubble while the label floated out on its own.
   Keep the wrapper as the single chip; reset the title to inline text.
   ===================================================================== */
.pm-hero-badge .elementor-heading-title {
  position: static !important;
  top: auto !important;
  right: auto !important;
  background: transparent !important;
  padding: 0 !important;
  box-shadow: none !important;
}

/* =====================================================================
   24 - SECTION TEXTURE (opt-in blueprint grid for navy bands)
   Add the class "pm-texture" to a navy section's OUTER container to
   overlay a faint blueprint grid. Pure CSS in a ::before layer, so it
   never touches the container's own background or block clicks. Meant
   for the navy CTA / emergency bands only - keep white/tint clean.
   ===================================================================== */
.pm-texture { position: relative; }
.pm-texture::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  background-image:
    linear-gradient(rgba(255, 255, 255, 0.07) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255, 255, 255, 0.07) 1px, transparent 1px);
  background-size: 26px 26px;
}
.pm-texture > * { position: relative; z-index: 1; }

/* =====================================================================
   25 - THE PROBLEM (elevated: two-column, pull-quote + moments)
   Two-column layout is set in Elementor. This styles the pieces:
   - pm-pullquote        : the tinted quote card (::before quote mark)
   - pm-quote / -label   : the quote text + small label inside it
   - pm-hl               : soft highlight on a key phrase in body copy
   - pm-moments / -moment: row of three "relatable moments" (Icon Box,
                           icon position Left)
   ===================================================================== */

/* Pull-quote card */
.pm-pullquote {
  position: relative; overflow: hidden;
  background: var(--pm-pale-tint);
  border: 1px solid var(--pm-border);
  border-radius: var(--pm-radius-lg);
  padding: 2.3rem 1.9rem 1.8rem;
}
.pm-pullquote::before {
  content: "\201C";
  position: absolute; top: .05rem; left: .7rem;
  font-family: var(--pm-font-display); font-weight: 700;
  font-size: 7rem; line-height: 1; color: var(--pm-blue-soft);
  opacity: .35; pointer-events: none;
}
.pm-quote, .pm-quote p, .pm-quote .elementor-heading-title {
  position: relative;
  font-family: var(--pm-font-display) !important;
  text-transform: uppercase !important;
  font-weight: 700 !important;
  font-size: clamp(1.35rem, 2vw, 1.85rem) !important;
  line-height: 1.12 !important;
  letter-spacing: .01em;
  color: var(--pm-navy) !important;
  margin: 1.4rem 0 0 !important;
}
.pm-quote em, .pm-quote .elementor-heading-title em { color: var(--pm-blue) !important; font-style: normal; }
.pm-quote-label, .pm-quote-label p {
  position: relative;
  display: flex; align-items: center; gap: .5rem;
  margin: 1.1rem 0 0 !important;
  color: var(--pm-slate-light); font-weight: 600; font-size: .82rem;
}
.pm-quote-label::before { content: ""; flex: none; width: 22px; height: 2px; background: var(--pm-blue-soft); }

/* Soft highlight on a key phrase (wrap it in <span class="pm-hl">) */
.pm-hl {
  color: var(--pm-blue); font-weight: 700;
  box-shadow: inset 0 -.42em 0 rgba(127, 168, 204, 0.28);
}

/* Relatable moments - three Icon Box widgets (icon position: Left) */
.pm-moments { border-top: 1px solid var(--pm-border); }
.pm-moment .elementor-icon-box-wrapper { display: flex; align-items: flex-start; gap: .85rem; text-align: left; }
.pm-moment .elementor-icon-box-icon { margin: 0 !important; flex: none; }
.pm-moment .elementor-icon-box-icon .elementor-icon {
  width: 40px; height: 40px; border-radius: 10px;
  background: var(--pm-surface); border: 1px solid var(--pm-border);
  color: var(--pm-blue) !important; fill: var(--pm-blue) !important;
  font-size: 18px; display: flex; align-items: center; justify-content: center;
}
.pm-moment .elementor-icon-box-icon .elementor-icon svg { width: 19px; height: 19px; }
.pm-moment .elementor-icon-box-title {
  margin: 0 0 .15rem !important;
  font-family: var(--pm-font-body) !important;
  text-transform: none !important;
  font-size: .98rem !important; font-weight: 700; color: var(--pm-ink) !important;
}
.pm-moment .elementor-icon-box-description { color: var(--pm-slate-light); font-size: .84rem; line-height: 1.45; }

/* =====================================================================
   26 - QUOTE LABEL FIX
   The pm-quote-label paragraph was inheriting body size/colour (a
   per-widget style outranked Section 25) and flex was wrongly applied
   to the inner <p>. Flex belongs on the wrapper only (dash + text);
   the paragraph is a small, muted caption. Force it with !important.
   ===================================================================== */
.pm-quote-label { display: flex !important; align-items: center; gap: .5rem; margin-top: 1.1rem !important; }
.pm-quote-label p {
  display: block !important;
  margin: 0 !important;
  font-size: .82rem !important;
  font-weight: 600 !important;
  color: var(--pm-slate-light) !important;
  line-height: 1.4 !important;
}

/* =====================================================================
   27 - SERVICE GRID  (.pm-service-grid)
   Used by three surfaces, so change with care:
     - [pm_services]        capabilities repeater, static cards + CTAs
     - /services/ hub       linked trade cards
     - Home page            static HTML block, linked trade cards
   Linked cards use .pm-service-more (arrow, hover-slide).
   CTA cards use .pm-service-actions + .pm-service-cta and carry
   .pm-service-card--static (see Section 29, which kills the hover-lift).
   .pm-service-cta mirrors Section 4's .elementor-button exactly, so the
   Schedule buttons in these cards match every other button on the site.
   Desktop keeps every card on ONE row and squeezes; tablet wraps; mobile stacks.
   ===================================================================== */
.pm-service-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 1.1rem;
}
.pm-service-card {
  display: flex; flex-direction: column;
  background: var(--pm-white);
  border: 1px solid var(--pm-border);
  border-radius: var(--pm-radius-lg);
  padding: 1.6rem 1.6rem 1.35rem;
  text-decoration: none;
  box-shadow: var(--pm-shadow);
  transition: transform var(--pm-dur) var(--pm-ease), box-shadow var(--pm-dur) var(--pm-ease), border-color var(--pm-dur) var(--pm-ease);
}
.pm-service-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--pm-shadow-lg);
  border-color: var(--pm-blue-soft);
}

/* Section 29 flattens every --static card. Give the lift back to the ones that
   actually have a button in them, so the About "difference" cards (also --static,
   but genuinely non-interactive) stay flat. */
.pm-service-card--static:has(.pm-service-actions):hover {
  transform: translateY(-4px);
  box-shadow: var(--pm-shadow-lg);
  border-color: var(--pm-blue-soft);
}

.pm-service-ic {
  width: 46px; height: 46px; border-radius: 12px;
  background: var(--pm-pale-tint);
  display: grid; place-items: center; margin-bottom: 1rem;
}
.pm-service-ic img { width: 24px; height: 24px; object-fit: contain; }
.pm-service-title {
  font-family: var(--pm-font-display); text-transform: uppercase; font-weight: 700;
  font-size: 1.25rem; color: var(--pm-navy); letter-spacing: .01em; margin: 0 0 .5rem;
}
.pm-service-desc { color: var(--pm-slate); font-size: .93rem; line-height: 1.55; margin: 0 0 1rem; flex: 1; }
.pm-service-more {
  font-weight: 700; font-size: .9rem; color: var(--pm-blue);
  display: inline-flex; align-items: center; gap: .4rem; margin-top: auto;
}
.pm-service-more::after {
  content: "\2192"; font-size: 1.05rem; line-height: 1;
  transition: transform var(--pm-dur) var(--pm-ease);
}
.pm-service-card:hover .pm-service-more::after { transform: translateX(3px); }

/* CTA buttons for capability cards ([pm_services]) — matches Section 4 */
.pm-service-actions {
  display: flex; flex-wrap: wrap; gap: .5rem;
  margin-top: auto;
}
.pm-service-cta {
  appearance: none; cursor: pointer;
  font-family: var(--pm-font-body);
  font-weight: 600;
  font-size: var(--pm-text-base);
  line-height: 1;
  padding: .875rem 1.75rem;
  border-radius: var(--pm-radius-btn);
  background-color: var(--pm-navy);
  color: var(--pm-white);
  border: 2px solid transparent;
  text-decoration: none;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background-color var(--pm-dur) var(--pm-ease),
              color var(--pm-dur) var(--pm-ease),
              border-color var(--pm-dur) var(--pm-ease),
              box-shadow var(--pm-dur) var(--pm-ease),
              transform var(--pm-dur) var(--pm-ease);
}
.pm-service-cta:hover {
  background-color: var(--pm-navy-deep);
  color: var(--pm-white);
  box-shadow: var(--pm-shadow);
  transform: translateY(-1px);
}
.pm-service-cta:active { transform: translateY(0) scale(.98); }
.pm-service-cta:focus-visible { outline: 3px solid var(--pm-blue-soft); outline-offset: 2px; }

/* Call variant — mirrors .pm-btn--call */
.pm-service-cta--call {
  background-color: transparent;
  color: var(--pm-navy);
  border-color: var(--pm-border);
  font-variant-numeric: tabular-nums;
}
.pm-service-cta--call:hover {
  background-color: transparent;
  color: var(--pm-navy);
  border-color: var(--pm-navy);
}

/* Optional closing line under the grid */
.pm-service-closer { display: flex; align-items: flex-start; gap: .65rem; margin-top: 2rem; }
.pm-service-closer::before { content: ""; flex: none; width: 26px; height: 2px; background: var(--pm-blue-soft); margin-top: .65rem; }
.pm-service-closer p { margin: 0 !important; color: var(--pm-slate-light) !important; font-size: .95rem !important; font-weight: 500 !important; }

/* --- Responsive: one row on desktop, wrap on tablet, stack on mobile --- */
/* grid-auto-flow: column is what keeps 5 or 6 cards on a single row.
   auto-fit can't do it — it needs a definite column minimum to count with,
   and a definite minimum is exactly what forces the wrap. */
@media (min-width: 1025px) {
  .pm-service-grid {
    grid-template-columns: none;
    grid-auto-flow: column;
    grid-auto-columns: minmax(0, 1fr);
    gap: .85rem;
  }
  .pm-service-card    { padding: 1.35rem 1.15rem 1.15rem; }
  .pm-service-title   { font-size: 1.08rem; }
  .pm-service-desc    { font-size: .88rem; }
  .pm-service-actions { gap: .4rem; }
  /* Full button padding won't fit a squeezed card — keep the look, shrink the box */
  .pm-service-cta     { padding: .7rem 1.1rem; font-size: .9rem; }
}

@media (max-width: 767px) {
  .pm-service-grid { grid-template-columns: 1fr; }
}

/* =====================================================================
   28 - PROBLEM MOMENTS (dynamic, from [pm_moments])
   Renders the current service's moments repeater (icon + title + line)
   as a three-up row. Replaces the static Icon Box widgets. Fully
   dynamic - fills itself per service, hides if the repeater is empty.
   ===================================================================== */
.pm-moments-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
  border-top: 1px solid var(--pm-border);
  padding-top: 1.9rem;
  margin-top: 2.5rem;
}
.pm-moment-item { display: flex; gap: .85rem; align-items: flex-start; }
.pm-moment-ic {
  flex: none; width: 40px; height: 40px; border-radius: 10px;
  background: var(--pm-surface); border: 1px solid var(--pm-border);
  display: grid; place-items: center;
}
.pm-moment-ic img { width: 20px; height: 20px; object-fit: contain; }
.pm-moment-title { display: block; color: var(--pm-ink); font-weight: 700; font-size: .98rem; margin-bottom: .15rem; }
.pm-moment-desc { display: block; color: var(--pm-slate-light); font-size: .84rem; line-height: 1.45; }
@media (max-width: 767px) { .pm-moments-grid { grid-template-columns: 1fr; gap: 1.25rem; } }

/* =====================================================================
   29 - CAPABILITY CARDS WITHOUT A LINK
   [pm_services] now renders the capabilities repeater. Linked cards are
   <a> (hover-lift + arrow, from Section 27). Link-less cards are static
   <div> - kill the hover-lift and pointer so they don't look clickable.
   ===================================================================== */
.pm-service-card--static { cursor: default; }
.pm-service-card--static:hover {
  transform: none;
  box-shadow: var(--pm-shadow);
  border-color: var(--pm-border);
}

/* =====================================================================
   30 - SIGNS CARD + CTA
   Wraps the [pm_signs] checklist in a clean "symptom-checker" panel and
   adds a call-to-action at the recognition moment. The checklist itself
   is still styled by Section 18; this adds the card + the CTA footer.
   Structure: pm-signs-card > [pm_signs] + pm-signs-cta (text + buttons).
   ===================================================================== */
.pm-signs-card {
  background: var(--pm-white);
  border: 1px solid var(--pm-border);
  border-radius: var(--pm-radius-lg);
  box-shadow: var(--pm-shadow);
  padding: 2rem 2.1rem;
}
.pm-signs-cta {
  display: flex; align-items: center; justify-content: space-between;
  gap: 1.25rem; flex-wrap: wrap;
  margin-top: 1.6rem; padding-top: 1.4rem;
  border-top: 1px solid var(--pm-border);
}
.pm-signs-cta p, .pm-signs-cta .elementor-widget-text-editor p { margin: 0 !important; color: var(--pm-slate); font-size: 1rem; line-height: 1.5; }
.pm-signs-cta strong { color: var(--pm-navy); font-weight: 700; }
@media (max-width: 767px) {
  .pm-signs-card { padding: 1.5rem 1.4rem; }
  .pm-signs-cta { align-items: flex-start; }
}

/* =====================================================================
   31 - SIGNS CTA ROW FIX
   The button container inside pm-signs-cta was a full-width Elementor
   container, so it couldn't fit beside the text and wrapped underneath.
   Size it to its content so the text + buttons share the row.
   ===================================================================== */
.pm-signs-cta > .e-con { flex: 0 0 auto; width: auto !important; }

/* =====================================================================
   32 - MOMENT ITEM LAYOUT FIX
   [pm_moments] outputs icon + title + desc as siblings; in the flex row
   they lined up side-by-side. Use a grid so the icon sits on the left
   and the title stacks above the description.
   ===================================================================== */
.pm-moment-item { display: grid; grid-template-columns: auto 1fr; column-gap: .85rem; row-gap: .15rem; align-items: start; }
.pm-moment-ic { grid-column: 1; grid-row: 1 / 3; }
.pm-moment-title { grid-column: 2; grid-row: 1; }
.pm-moment-desc { grid-column: 2; grid-row: 2; }

/* =====================================================================
   33 - MOMENTS: SINGLE DIVIDER
   Both the .pm-moments container (Section 25, from the old Icon Box
   build) and the .pm-moments-grid (Section 28) drew a top border, so
   two lines showed above the moments. The container border is the one
   that also shows when the repeater is empty - keep it; drop the grid's.
   ===================================================================== */
.pm-moments-grid { border-top: none; padding-top: 0; }


/* ==== PM Section 34 - Google review floating badge ==== */
.pm-rev-badge{position:fixed;right:20px;bottom:20px;z-index:9998;display:flex;align-items:stretch;background:#fff;border:1px solid #D5DDE4;border-radius:12px;box-shadow:0 6px 24px rgba(14,42,69,.16);font-family:'Hanken Grotesk',sans-serif;overflow:hidden;transition:transform .18s ease,box-shadow .18s ease}
.pm-rev-badge:hover{transform:translateY(-2px);box-shadow:0 10px 30px rgba(14,42,69,.22)}
.pm-rev-link{display:flex;align-items:center;gap:.6rem;padding:.58rem .5rem .58rem .8rem;text-decoration:none}
.pm-rev-g{display:block;width:24px;height:24px;flex:0 0 24px}
.pm-rev-g svg{display:block;width:100%;height:100%}
.pm-rev-body{display:flex;flex-direction:column;line-height:1.15}
.pm-rev-stars{color:#E8963B;font-size:.82rem;letter-spacing:1.5px}
.pm-rev-cta{color:#16202B;font-size:.82rem;font-weight:600}
.pm-rev-x{border:0;background:transparent;color:#6B7884;font-size:1.05rem;line-height:1;padding:0 .55rem;cursor:pointer;border-left:1px solid #EEF3F7}
.pm-rev-x:hover{color:#16202B;background:#F5F8FB}
@media (max-width:600px){.pm-rev-badge{right:12px;bottom:12px}.pm-rev-cta{font-size:.78rem}.pm-rev-g{width:20px;height:20px;flex-basis:20px}}

/* ==== PM Section 35 - Hero price chip ==== */
.pm-price-chip{display:inline-flex;align-items:baseline;gap:.4rem;margin-top:1rem;padding:.5rem .9rem;background:#EEF3F7;border:1px solid #D5DDE4;border-radius:10px;font-family:'Hanken Grotesk',sans-serif;font-size:.95rem;color:#16202B;line-height:1.2}
.pm-price-amt{font-family:'Oswald',sans-serif;font-weight:600;font-size:1.15rem;color:#1C4C79;letter-spacing:.3px}
.pm-price-note{color:#45525E;font-size:.88rem}
@media (max-width:600px){.pm-price-chip{font-size:.9rem}}

/* ==== PM Section 36 - Pricing "no surprises" promise strip ==== */
.pm-promise-strip{display:grid;grid-template-columns:repeat(4,1fr);background:#fff;border:1px solid #D5DDE4;border-radius:14px;box-shadow:0 4px 18px rgba(14,42,69,.06);overflow:hidden;max-width:1200px;margin:0 auto}
.pm-promise{display:flex;align-items:center;gap:.7rem;padding:1.05rem 1.15rem;border-left:1px solid #EEF3F7}
.pm-promise:first-child{border-left:0}
.pm-promise-ic{flex:0 0 34px;width:34px;height:34px;display:flex;align-items:center;justify-content:center;background:#EEF3F7;border-radius:9px;color:#2E73B8}
.pm-promise-ic svg{width:19px;height:19px}
.pm-promise-txt{display:flex;flex-direction:column;line-height:1.2}
.pm-promise-txt b{font-family:'Oswald',sans-serif;font-weight:600;font-size:.98rem;color:#16202B;letter-spacing:.2px}
.pm-promise-txt span{font-size:.82rem;color:#45525E;margin-top:.12rem}
@media (max-width:900px){.pm-promise-strip{grid-template-columns:repeat(2,1fr)}.pm-promise{border-left:1px solid #EEF3F7}.pm-promise:nth-child(odd){border-left:0}.pm-promise:nth-child(n+3){border-top:1px solid #EEF3F7}}
@media (max-width:520px){.pm-promise-strip{grid-template-columns:1fr}.pm-promise{border-left:0;border-top:1px solid #EEF3F7}.pm-promise:first-child{border-top:0}}

/* ==== PM Section 37 - Maintenance plan teaser band ==== */
.pm-plan-card{display:grid;grid-template-columns:1.5fr 1fr;gap:2rem;align-items:center;max-width:1100px;margin:0 auto;background:linear-gradient(135deg,#0E2A45 0%,#1C4C79 100%);border-radius:18px;padding:2.4rem 2.6rem;box-shadow:0 18px 44px rgba(14,42,69,.22)}
.pm-plan-eyebrow{font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:2px;font-size:.78rem;font-weight:600;color:#7FA8CC;margin:0 0 .5rem}
.pm-plan-title{font-family:'Oswald',sans-serif;font-weight:600;font-size:1.7rem;line-height:1.14;color:#fff;margin:0 0 .55rem;text-transform:none}
.pm-plan-sub{color:#C7D6E5;font-size:.95rem;line-height:1.45;margin:0 0 1.15rem}
.pm-plan-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:.5rem 1.4rem}
.pm-plan-list li{position:relative;padding-left:1.55rem;color:#EEF3F7;font-size:.92rem;line-height:1.35}
.pm-plan-list li::before{content:"\2713";position:absolute;left:0;top:0;color:#E8963B;font-weight:700}
.pm-plan-aside{text-align:center;background:rgba(255,255,255,.06);border:1px solid rgba(127,168,204,.28);border-radius:14px;padding:1.6rem 1.3rem}
.pm-plan-price{font-family:'Oswald',sans-serif;font-weight:700;font-size:2.5rem;line-height:1;color:#fff}
.pm-plan-per{font-size:1rem;color:#7FA8CC;font-weight:400}
.pm-plan-alt{color:#B9CBDD;font-size:.82rem;margin:.45rem 0 1.15rem}
.pm-plan-cta{display:inline-block;background:#E8963B;color:#0E2A45;font-family:'Oswald',sans-serif;font-weight:600;text-transform:uppercase;letter-spacing:.5px;font-size:.9rem;padding:.8rem 1.7rem;border-radius:10px;text-decoration:none;transition:transform .15s ease,box-shadow .15s ease}
.pm-plan-cta:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(232,150,59,.42)}
.pm-plan-note{color:#8FA6BC;font-size:.76rem;margin:.9rem 0 0}
@media (max-width:820px){.pm-plan-card{grid-template-columns:1fr;padding:1.9rem 1.6rem;gap:1.5rem}.pm-plan-list{grid-template-columns:1fr}.pm-plan-title{font-size:1.5rem}}

/* ==== PM Section 39 - Mobile/tablet side gutters (service template) ==== */
@media (max-width:1024px){.elementor-location-single .e-con.e-parent{padding-left:22px !important;padding-right:22px !important}}


/* ==== PM Section 42 - Problem section mobile rhythm (<=767): tighten the loose 56px gap, and re-seat the moments divider - more room above the line (away from the pull quote), less below (closer to the moments) ==== */
@media (max-width:767px){
.e-con:has(> .pm-pullquote){gap:30px !important}
.pm-moments{margin-top:24px !important;padding-top:30px !important}
.pm-moments-grid{margin-top:0 !important}
}

/* ==== PM Section 43 - Service-area coverage chips ==== */
.pm-area-chips{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1rem}
.pm-area-chip{display:inline-flex;align-items:center;background:#EEF3F7;border:1px solid #D5DDE4;color:#1C4C79;font-family:'Hanken Grotesk',sans-serif;font-size:.9rem;font-weight:600;padding:.42rem .85rem;border-radius:20px}

/* ==== PM Section 44 - Local reviews ==== */
.pm-area-reviews{display:grid;grid-template-columns:repeat(3,1fr);gap:1.1rem}
.pm-area-review{margin:0;background:#fff;border:1px solid #D5DDE4;border-radius:14px;padding:1.4rem 1.5rem;box-shadow:0 4px 18px rgba(14,42,69,.06);display:flex;flex-direction:column;gap:.85rem}
.pm-area-review-quote{margin:0;color:#16202B;font-size:1rem;line-height:1.55}
.pm-area-review-quote::before{content:"\201C";font-family:'Oswald',sans-serif;font-size:2.2rem;line-height:0;color:#7FA8CC;position:relative;top:.55rem;margin-right:.12rem}
.pm-area-review-by{font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.04em;font-size:.8rem;color:#45525E;font-weight:600}
@media (max-width:900px){.pm-area-reviews{grid-template-columns:1fr}}

/* ==== PM Section 45 - Nearby areas ====
   The .pm-area-nearby / .pm-area-nearby-link styles live in the
   "Town link chips" block just below (Section 49 group), which covers both
   the Services-hub "Serving" band and the area-page "Nearby" band. Not
   duplicated here to avoid a conflicting override. */

/* ==== PM Section 46 - Map embed (responsive; fixed so it can't overflow) ==== */
.pm-area-map{position:relative;width:100%;aspect-ratio:16/9;border-radius:14px;overflow:hidden;border:1px solid #D5DDE4;margin-top:1.2rem}
.pm-area-map iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
/* Hero map: at mobile the Elementor shortcode wrapper collapses to a line-box
   (~21px) because .pm-hero-map sizes via aspect-ratio and its only child is
   position:absolute — nothing in flow for the wrapper to measure. The map then
   paints outside its own box and lands on the .pm-hero-proof card below it.
   Explicit height + clearing the ratio fixes the chain. Mobile only: at 768px+
   the wrapper measures correctly and the card is meant to float on the map. */
@media (max-width: 767px){
  .pm-hero-media .elementor-widget-shortcode:has(.pm-hero-map){min-height:200px}
  .pm-hero-map{height:200px;aspect-ratio:auto}
}

/* ==== PM Section 48 - "Outside the circle" call nudge ==== */
.pm-area-nudge{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1.4rem;max-width:1200px;margin:0 auto;background:#EEF3F7;border:1px solid #D5DDE4;border-radius:14px;padding:1rem 1.6rem}
.pm-area-nudge-ic{flex:0 0 auto;display:flex}
.pm-area-nudge-ic svg{width:24px;height:24px;display:block}
.pm-area-nudge-txt{margin:0;flex:1 1 auto;min-width:0;max-width:none;color:#45525E;font-size:1rem;line-height:1.45}
.pm-area-nudge-txt strong{color:#16202B;font-weight:600}
.pm-area-nudge-btn{flex:0 0 auto;white-space:nowrap;display:inline-flex;align-items:center;background:#1C4C79;color:#fff;font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.04em;font-size:.85rem;font-weight:600;padding:.65rem 1.2rem;border-radius:9px;text-decoration:none;transition:background .15s ease,transform .15s ease}
.pm-area-nudge-btn:hover{background:#2E73B8;color:#fff;transform:translateY(-2px)}
@media (max-width:680px){.pm-area-nudge{gap:.55rem .85rem}.pm-area-nudge-txt{flex:1 1 180px;font-size:.95rem}.pm-area-nudge-btn{flex:1 1 100%;justify-content:center;margin-top:.25rem}}

/* ==== PM Section 49 - Reviews: center the grid (graceful for 1-3+ reviews) ==== */
.pm-area-reviews{display:flex !important;flex-wrap:wrap !important;justify-content:center !important}
.pm-area-review{flex:1 1 320px;max-width:380px}
/* ==== Town link chips (Serving the Upper Cumberland band + area Nearby band) ==== */
.pm-area-nearby{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:.6rem}
.pm-area-nearby-link{display:inline-flex;align-items:center;background:#fff;border:1px solid #D5DDE4;color:#1C4C79;text-decoration:none;font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.04em;font-size:.82rem;font-weight:600;padding:.55rem 1.05rem;border-radius:8px;transition:border-color .15s ease,color .15s ease,transform .15s ease}
.pm-area-nearby-link:hover{border-color:#7FA8CC;color:#2E73B8;transform:translateY(-2px)}

/* ==== PM Section 51 - Membership tiers (Comfort / Whole-Home) ==== */
.pm-tiers{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;max-width:900px;margin:0 auto;align-items:stretch}
.pm-tier{position:relative;border-radius:18px;padding:2rem 1.9rem;display:flex;flex-direction:column}
.pm-tier--comfort{background:#EEF3F7;border:1px solid #D5DDE4}
.pm-tier--featured{background:linear-gradient(160deg,#1C4C79,#0E2A45);color:#fff;box-shadow:0 18px 44px rgba(14,42,69,.24)}
.pm-tier-badge{position:absolute;top:1.4rem;right:1.4rem;font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.08em;font-size:.66rem;font-weight:600;color:#fff;border:1px solid rgba(255,255,255,.5);border-radius:20px;padding:.3rem .7rem}
.pm-tier-name{font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.5px;font-size:1.35rem;font-weight:600;color:#1C4C79;margin:0}
.pm-tier--featured .pm-tier-name{color:#fff}
.pm-tier-price{font-family:'Oswald',sans-serif;font-weight:700;font-size:2.9rem;line-height:1;color:#1C4C79;margin:.3rem 0 .1rem}
.pm-tier--featured .pm-tier-price{color:#fff}
.pm-tier-price span{font-size:1rem;font-weight:400;color:#6B7884}
.pm-tier--featured .pm-tier-price span{color:#9DB6CE}
.pm-tier-alt{font-size:.85rem;color:#6B7884;margin:0 0 .9rem}
.pm-tier--featured .pm-tier-alt{color:#9DB6CE}
.pm-tier-tag{font-style:italic;font-size:.92rem;color:#45525E;margin:0 0 1.1rem;padding-bottom:1.05rem;border-bottom:1px solid #D5DDE4}
.pm-tier--featured .pm-tier-tag{color:#C7D6E5;border-color:rgba(127,168,204,.3)}
.pm-tier-list{list-style:none;margin:0 0 1.4rem;padding:0;display:flex;flex-direction:column;gap:.7rem;flex:1}
.pm-tier-list li{position:relative;padding-left:1.9rem;font-size:.92rem;line-height:1.4;color:#16202B}
.pm-tier--featured .pm-tier-list li{color:#EAF1F8}
.pm-tier-list li::before{content:"";position:absolute;left:0;top:.05rem;width:18px;height:18px;background-repeat:no-repeat;background-size:contain;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='%232E73B8'/%3E%3Cpath d='M8 12.5l2.5 2.5 5-5.5' fill='none' stroke='%23ffffff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.pm-tier--featured .pm-tier-list li::before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='%235B9BD5'/%3E%3Cpath d='M8 12.5l2.5 2.5 5-5.5' fill='none' stroke='%23ffffff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.pm-tier-plus{padding-left:0 !important;font-weight:600;color:#1C4C79 !important;margin-bottom:.05rem}
.pm-tier--featured .pm-tier-plus{color:#AECDEA !important}
.pm-tier-plus::before{display:none !important}
.pm-tier-cta{display:block;text-align:center;margin-top:auto;background:#1C4C79;color:#fff;font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.5px;font-size:.9rem;font-weight:600;padding:.85rem 1rem;border-radius:10px;text-decoration:none;transition:background .15s ease,transform .15s ease}
.pm-tier-cta:hover{background:#2E73B8;transform:translateY(-2px)}
.pm-tier-cta--gold{background:#E8963B;color:#0E2A45}
.pm-tier-cta--gold:hover{background:#d9822f}
@media (max-width:720px){.pm-tiers{grid-template-columns:1fr;max-width:420px}}

/* ==== PM Section 52b - In-content buttons (Gutenberg Button block) ==== */
.pm-article .wp-block-buttons{display:flex;flex-wrap:wrap;gap:.8rem;margin:1.8rem 0}
.pm-article .wp-block-button{margin:0}
.pm-article .wp-block-button__link{
  display:inline-block;background:#1C4C79 !important;color:#fff !important;
  font-family:'Oswald',sans-serif;font-weight:600;text-transform:uppercase;letter-spacing:.4px;
  font-size:1rem;padding:.8rem 1.6rem;border-radius:11px;text-decoration:none;
  box-shadow:0 10px 26px rgba(28,76,121,.28);transition:background .15s ease,transform .15s ease}
.pm-article .wp-block-button__link:hover{background:#2E73B8 !important;transform:translateY(-2px)}
/* Pick "Outline" in the block toolbar for a secondary button */
.pm-article .wp-block-button.is-style-outline .wp-block-button__link{
  background:transparent !important;color:#1C4C79 !important;border:2px solid #1C4C79;box-shadow:none}
.pm-article .wp-block-button.is-style-outline .wp-block-button__link:hover{background:#1C4C79 !important;color:#fff !important}

/* ==== PM Section 54 - How-it-works steps (left-aligned, connected) ==== */
.pm-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:2rem;margin:0}
.pm-step{position:relative;text-align:left}
/* connector line linking the numbers across the row */
.pm-step:not(:last-child)::before{content:"";position:absolute;top:23px;left:56px;right:-2rem;height:2px;background:#DCE5EC}
.pm-step-num{position:relative;z-index:1;width:46px;height:46px;border-radius:50%;background:#1C4C79;color:#fff;font-family:'Oswald',sans-serif;font-weight:600;font-size:1.25rem;display:flex;align-items:center;justify-content:center;margin:0 0 1.1rem;box-shadow:0 6px 16px rgba(28,76,121,.25)}
.pm-step h3{font-family:'Oswald',sans-serif;font-size:1.2rem;color:#16202B;margin:0 0 .5rem;text-transform:uppercase;letter-spacing:.4px}
.pm-step p{color:#556472;font-size:.96rem;line-height:1.55;margin:0}
@media (max-width:720px){
  .pm-steps{grid-template-columns:1fr;gap:1.6rem;max-width:440px}
  .pm-step{padding-left:64px;min-height:46px}
  .pm-step-num{position:absolute;left:0;top:0;margin:0}
  .pm-step:not(:last-child)::before{display:none}
}

/* ==== PM Section 55 - Blueprint grid texture (light sections) ====
   Add BOTH classes "pm-texture pm-texture--light" to a white/tint section's
   OUTER container. Reuses the Section 24 ::before; just recolors the grid to
   your light border tone and fades it so it stays subtle. ==== */
.pm-texture--light::before{
  background-image:
    linear-gradient(#DCE5EC 1px, transparent 1px),
    linear-gradient(90deg, #DCE5EC 1px, transparent 1px);
  background-size:30px 30px;
  opacity:.55;
  -webkit-mask-image:radial-gradient(130% 105% at 50% 0%, #000 35%, transparent 88%);
          mask-image:radial-gradient(130% 105% at 50% 0%, #000 35%, transparent 88%);
}

/* ==== PM Section 57 - "What a visit covers" card (left-aligned) ==== */
.pm-includes{max-width:950px;margin:0;background:#fff;border:1px solid #D5DDE4;border-radius:18px;box-shadow:0 12px 34px rgba(14,42,69,.08);padding:2.2rem 2.5rem}
.pm-includes-badge{display:inline-flex;align-items:center;gap:.4rem;font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.08em;font-size:.72rem;font-weight:600;color:#2E73B8;background:#EEF3F7;border:1px solid #D5DDE4;border-radius:20px;padding:.35rem .9rem;margin-bottom:1.4rem}
.pm-includes .elementor-icon-list-items{display:grid !important;grid-template-columns:1fr 1fr !important;gap:.9rem 2.4rem !important;margin:0 !important}
.pm-includes .elementor-icon-list-item{margin:0 !important;padding:0 !important}
.pm-includes .elementor-icon-list-text{color:#16202B !important;font-size:1rem !important;font-family:'Hanken Grotesk',sans-serif !important;line-height:1.35}
.pm-includes .elementor-icon-list-icon{align-self:flex-start;margin-top:2px}
.pm-includes .elementor-icon-list-icon svg,.pm-includes .elementor-icon-list-icon i{fill:#2E73B8 !important;color:#2E73B8 !important}
@media (max-width:640px){.pm-includes{padding:1.6rem 1.4rem}.pm-includes .elementor-icon-list-items{grid-template-columns:1fr !important}}

/* ==== PM Section 58 - Hero membership plans (compact) ====
   NOTE: the CTA colour/underline rules carry !important on purpose. These
   buttons live inside a Text Editor widget, so Section 2's global content-link
   rule (.elementor-widget-text-editor a:not(.elementor-button), 0,3,1) outranks
   plain .pm-hplan-cta (0,2,0) and repaints them navy + underlined at rest and
   blue on hover. !important is the durable fix; a longer .elementor-kit-7 only ties. */
.pm-hero-plans{display:flex;gap:2.5rem;align-items:stretch;padding-top:14px}
.pm-hplan{flex:1 1 0;min-width:0;position:relative;border-radius:16px;padding:1.5rem 1.4rem;display:flex;flex-direction:column;background:#fff;border:1px solid #D5DDE4;box-shadow:0 8px 26px rgba(14,42,69,.08)}
.pm-hplan--featured{background:linear-gradient(160deg,#1C4C79,#0E2A45);color:#fff;border-color:transparent;box-shadow:0 16px 38px rgba(14,42,69,.28)}
.pm-hplan-badge{position:absolute;top:-11px;left:50%;transform:translateX(-50%);white-space:nowrap;font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.06em;font-size:.6rem;font-weight:600;color:#0E2A45;background:#E8963B;border-radius:20px;padding:.28rem .8rem}
.pm-hplan-name{font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.4px;font-size:1.05rem;font-weight:600;color:#1C4C79;margin:0}
.pm-hplan--featured .pm-hplan-name{color:#fff}
.pm-hplan-price{font-family:'Oswald',sans-serif;font-weight:700;font-size:2.1rem;line-height:1;color:#1C4C79;margin:.25rem 0 0}
.pm-hplan--featured .pm-hplan-price{color:#fff}
.pm-hplan-price span{font-size:.85rem;font-weight:400;color:#6B7884}
.pm-hplan--featured .pm-hplan-price span{color:#9DB6CE}
.pm-hplan-alt{font-size:.78rem;color:#6B7884;margin:.1rem 0 .9rem;padding-bottom:.9rem;border-bottom:1px solid #E1E8EF}
.pm-hplan--featured .pm-hplan-alt{color:#9DB6CE;border-color:rgba(127,168,204,.25)}
.pm-hplan-list{list-style:none;margin:0 0 1.1rem;padding:0;display:flex;flex-direction:column;gap:.45rem;flex:1}
.pm-hplan-list li{position:relative;padding-left:1.4rem;font-size:.82rem;line-height:1.3;color:#16202B}
.pm-hplan--featured .pm-hplan-list li{color:#EAF1F8}
.pm-hplan-list li::before{content:"";position:absolute;left:0;top:.12rem;width:14px;height:14px;background-repeat:no-repeat;background-size:contain;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='%232E73B8'/%3E%3Cpath d='M8 12.5l2.5 2.5 5-5.5' fill='none' stroke='%23ffffff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.pm-hplan--featured .pm-hplan-list li::before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='%235B9BD5'/%3E%3Cpath d='M8 12.5l2.5 2.5 5-5.5' fill='none' stroke='%23ffffff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.pm-hplan-cta{display:block;text-align:center;margin-top:auto;background:#1C4C79;color:#fff !important;font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.4px;font-size:.78rem;font-weight:600;padding:.65rem;border-radius:9px;text-decoration:none !important;transition:background .15s ease,transform .15s ease}
.pm-hplan-cta:hover{background:#2E73B8;color:#fff !important;text-decoration:none !important;transform:translateY(-2px)}
.pm-hplan-cta:focus-visible{outline:3px solid #7FA8CC;outline-offset:2px}
.pm-hplan-cta--gold{background:#E8963B;color:#0E2A45 !important}
.pm-hplan-cta--gold:hover{background:#d9822f;color:#0E2A45 !important;transform:translateY(-2px)}
@media (max-width:520px){.pm-hero-plans{flex-direction:column}}

/* ==== PM Section 59 - Contact / Schedule page ==== */
/* Split hero */
.pm-contact-hero{display:grid;grid-template-columns:1fr 1fr;gap:2.6rem;align-items:start;max-width:1080px;margin:0 auto}
.pm-call-row{display:flex;flex-wrap:wrap;align-items:center;gap:.9rem;margin:1.4rem 0 .4rem}
.pm-call-btn{display:inline-flex;align-items:center;gap:.55rem;background:#1C4C79;color:#fff;font-family:'Oswald',sans-serif;text-transform:uppercase;letter-spacing:.4px;font-weight:600;font-size:1.2rem;padding:.8rem 1.4rem;border-radius:11px;text-decoration:none;box-shadow:0 10px 26px rgba(28,76,121,.28);transition:background .15s ease,transform .15s ease}
.pm-call-btn:hover{background:#2E73B8;transform:translateY(-2px)}
.pm-call-or{color:#6B7884;font-size:.9rem;max-width:220px;line-height:1.35}
.pm-contact-chips{display:flex;flex-direction:column;gap:.6rem;margin:1.3rem 0 0;padding:0;list-style:none}
.pm-contact-chips li{position:relative;padding-left:1.8rem;color:#16202B;font-size:.96rem;line-height:1.4}
.pm-contact-chips li::before{content:"";position:absolute;left:0;top:.08rem;width:18px;height:18px;background-repeat:no-repeat;background-size:contain;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='%232E73B8'/%3E%3Cpath d='M8 12.5l2.5 2.5 5-5.5' fill='none' stroke='%23ffffff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
/* Form card */
.pm-form-card{background:#fff;border:1px solid #D5DDE4;border-radius:18px;box-shadow:0 16px 40px rgba(14,42,69,.10);padding:1.9rem 1.9rem 2rem}
.pm-form-card .pm-form-title,.pm-form-card h2{font-family:'Oswald',sans-serif;font-weight:600;font-size:1.4rem;color:#1C4C79;margin:0 0 .35rem;text-transform:none}
.pm-form-card .pm-form-sub{color:#556472;font-size:.92rem;line-height:1.5;margin:0 0 1.3rem}
.pm-form-card .elementor-field-group > label{font-family:'Hanken Grotesk',sans-serif;font-weight:600;font-size:.82rem;color:#45525E;margin-bottom:.3rem}
.pm-form-card input,.pm-form-card select,.pm-form-card textarea{border:1px solid #D5DDE4 !important;border-radius:9px !important;padding:.72rem .85rem !important;font-size:.95rem !important;background:#fff !important;color:#16202B !important}
.pm-form-card input:focus,.pm-form-card select:focus,.pm-form-card textarea:focus{border-color:#2E73B8 !important;box-shadow:0 0 0 3px rgba(46,115,184,.12) !important;outline:none}
.pm-form-card button[type=submit],.pm-form-card .elementor-button{width:100%;background:#E8963B !important;color:#0E2A45 !important;font-family:'Oswald',sans-serif !important;text-transform:uppercase !important;letter-spacing:.5px !important;font-weight:600 !important;font-size:1rem !important;padding:.9rem !important;border-radius:10px !important;border:none !important;transition:background .15s ease}
.pm-form-card button[type=submit]:hover,.pm-form-card .elementor-button:hover{background:#d9822f !important}
.pm-form-fineprint{font-size:.78rem;color:#8595A4;margin:.9rem 0 0;text-align:center}
/* Details band */
.pm-contact-details{display:grid;grid-template-columns:repeat(3,1fr);gap:1.6rem;max-width:960px;margin:0 auto}
.pm-detail{background:#fff;border:1px solid #D5DDE4;border-radius:14px;padding:1.5rem 1.5rem;text-align:center}
.pm-detail-ic{font-size:1.7rem;display:block;margin-bottom:.55rem}
.pm-detail h3{font-family:'Oswald',sans-serif;font-weight:600;font-size:1.02rem;color:#1C4C79;margin:0 0 .55rem;text-transform:uppercase;letter-spacing:.4px}
.pm-detail p{color:#45525E;font-size:.95rem;line-height:1.55;margin:0}
.pm-detail a{color:#2E73B8;text-decoration:none;font-weight:600}
.pm-detail a:hover{text-decoration:underline}
@media (max-width:860px){.pm-contact-hero{grid-template-columns:1fr;gap:1.8rem}.pm-contact-details{grid-template-columns:1fr}.pm-call-or{max-width:none}}

/* ==== PM Section 62 - DOORWAY CARDS (Commercial + University icon boxes) ==== */
.pm-doorway {
  position: relative;
  background: var(--pm-white);
  border: 1px solid var(--pm-border);
  border-radius: var(--pm-radius-lg);
  padding: 1.6rem 1.7rem;
  height: 100%;
  transition: transform var(--pm-dur) var(--pm-ease),
              box-shadow var(--pm-dur) var(--pm-ease),
              border-color var(--pm-dur) var(--pm-ease);
}
.pm-doorway:hover {
  transform: translateY(-4px);
  box-shadow: var(--pm-shadow-lg);
  border-color: var(--pm-blue-soft);
}

/* Note: do NOT set display:flex on .elementor-icon-box-wrapper. Elementor's own
   position classes (elementor-position-inline-start / block-start) already lay
   the box out — overriding it forces a row and ignores the Position control. */

/* Icon chip — inverts on hover, same move as .pm-card--feature */
.pm-doorway .elementor-icon {
  /* inline-grid, NOT grid — a block-level grid ignores the text-align:center
     Elementor puts on the wrapper, and the chip jams against the left edge. */
  display: inline-grid; place-items: center;
  line-height: 0;
  width: 52px; height: 52px;
  border-radius: 14px;
  background: var(--pm-pale-tint);
  color: var(--pm-blue);
  transition: background-color var(--pm-dur) var(--pm-ease),
              color var(--pm-dur) var(--pm-ease);
}
/* Font Awesome viewBoxes are not square (store-alt and graduation-cap are both
   0 0 640 512). Forcing width AND height squashes them — set one, auto the other. */
.pm-doorway .elementor-icon svg { width: auto; height: 24px; }
/* Font Awesome icons are fill-based; uploaded brand SVGs are stroke-based.
   Blanket `fill:none` strips FA icons to a traced outline — scope them apart. */
.pm-doorway .elementor-icon svg.e-font-icon-svg      { fill: currentColor; stroke: none; }
.pm-doorway .elementor-icon svg:not(.e-font-icon-svg) { fill: none; stroke: currentColor; }
.pm-doorway:hover .elementor-icon {
  background: var(--pm-navy);
  color: var(--pm-white);
}

.pm-doorway .elementor-icon-box-title {
  font-family: var(--pm-font-display);
  text-transform: uppercase; font-weight: 700;
  font-size: 1.2rem; letter-spacing: .01em;
  color: var(--pm-navy);
  margin: 0 0 .45rem;
}
.pm-doorway .elementor-icon-box-title a { color: inherit; text-decoration: none; }

/* Stretched link — makes the whole card clickable from the title anchor */
.pm-doorway .elementor-icon-box-title a::after {
  content: ""; position: absolute; inset: 0;
}

.pm-doorway .elementor-icon-box-description {
  color: var(--pm-slate);
  font-size: .95rem; line-height: 1.55;
  margin: 0;
}

/* CTA line, per card */
.pm-doorway .elementor-icon-box-description::after {
  display: block;
  margin-top: .85rem;
  font-weight: 700; font-size: .9rem;
  color: var(--pm-blue);
}
.pm-doorway--commercial .elementor-icon-box-description::after { content: "Commercial services \2192"; }
.pm-doorway--university .elementor-icon-box-description::after { content: "Putnam Maintenance University \2192"; }

@media (max-width: 767px) {
  .pm-doorway { padding: 1.3rem 1.35rem; }
  .pm-doorway .elementor-icon { width: 46px; height: 46px; border-radius: 12px; }
  .pm-doorway .elementor-icon svg { width: auto; height: 21px; }
}
/* ==== PM Section 63 - IMAGE ==== 
   Add "pm-img" to an Image widget (or its container) via Advanced -> CSS Classes.
   Matches the hero image treatment: rounded corners + soft shadow.
   ================================================================= */
.pm-img img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--pm-radius-lg);
  box-shadow: var(--pm-shadow-lg);
}

/* ==========================================================================
   PM Section 64 — TRADE CARDS (Services Loop Grid)   v6 · Elementor V4, verified
   Photo-led loop item for the five trades. Order in the card:
   photo → title → blurb → two-button footer (stacked).

   Fixes baked in:
     • Columns set in the LOOP GRID WIDGET, never in CSS (see Section 65).
     • Container padding zeroed at all breakpoints so the photo bleeds to edges.
     • Icon chip forced to 46px and clipped (can't fill the card).
     • Title + blurb styled DIRECTLY (V4 has no .elementor-widget-container
       / .elementor-heading-title wrappers).
     • Blurb clamped to 2 lines.
     • 24/7 badge overrides Elementor's reserved container ::before (inset:0).
     • Footer buttons stacked full-width; View arrow sits beside text.

   Class placement (Advanced → CSS Classes):
     .pm-trade-card   → loop CONTAINER (.e-con)
     .pm-trade-img    → Image  widget   (ACF hero_image)
     .pm-trade-ic     → Image  widget   (ACF icon — optional)
     .pm-trade-name   → Heading H3      (Post Title)
     .pm-trade-desc   → Text   widget    (ACF short_description)
     .pm-trade-foot   → Container holding two Button widgets:
         .pm-btn-view → Button "View Services"  Link: Dynamic → Permalink
         .pm-btn-call → Button "Call"           Link: tel:+19315597823
   ========================================================================== */

/* --- Card shell ----------------------------------------------------------- */
.pm-trade-card{
  --pm-trade-img-h: 170px;              /* photo height + chip anchor stay in sync */
  position: relative;                   /* positioning context for chip + badge    */
  display: flex; flex-direction: column;
  height: 100%;                         /* equal-height cards across the loop grid  */
  background: var(--pm-white);
  border: 1px solid var(--pm-border);
  border-radius: var(--pm-radius-lg);
  overflow: hidden;                     /* clips the photo to the rounded corners   */
  transition: transform var(--pm-dur) var(--pm-ease),
              box-shadow var(--pm-dur) var(--pm-ease),
              border-color var(--pm-dur) var(--pm-ease);
}
.pm-trade-card:hover{
  transform: translateY(-4px);
  box-shadow: var(--pm-shadow-lg);
  border-color: var(--pm-blue-soft);
}

/* Kill Elementor/Hello container padding at EVERY breakpoint so the photo bleeds
   to the top and side edges. 2nd .elementor-kit-7 covers "boxed" containers whose padding
   sits on .e-con-inner. */
.e-con.e-parent.pm-trade-card,
.e-con.e-parent.pm-trade-card > .e-con-inner{
  padding: 0 !important;
}

/* --- Photo ---------------------------------------------------------------- */
.pm-trade-img,
.pm-trade-img .elementor-widget-container{ line-height: 0; }
.pm-trade-img img{
  width: 100%; height: var(--pm-trade-img-h);
  object-fit: cover; display: block;
}
.pm-trade-img:not(:has(img)){ display: none; }      /* no photo → collapse the slot */

/* --- Icon chip (floats bottom-left on the photo; forced small + clipped) --- */
.pm-trade-card .pm-trade-ic{
  position: absolute;
  top: calc(var(--pm-trade-img-h) - 58px);          /* 46px chip + 12px inset above seam */
  left: 1rem;
  z-index: 2;
  width: 46px !important; height: 46px !important;
  display: grid; place-items: center;
  background: var(--pm-white);
  border-radius: 12px;
  box-shadow: var(--pm-shadow);
  overflow: hidden;                                 /* clip a too-big icon asset */
  pointer-events: none;                             /* keep the whole card clickable */
}
.pm-trade-card .pm-trade-ic img{
  width: 24px !important; height: 24px !important;
  max-width: 24px !important; object-fit: contain;
}
.pm-trade-ic:not(:has(img)){ display: none; }       /* no icon set → no chip */

/* --- Title (styled directly — V4 flat DOM) -------------------------------- */
.pm-trade-name{
  margin: 1.15rem 1.3rem .5rem;                     /* top = gap from photo; bottom = gap to blurb */
  font-family: var(--pm-font-display) !important;
  text-transform: uppercase !important;
  font-weight: 700 !important;
  font-size: 1.2rem !important;
  line-height: 1.15 !important;
  letter-spacing: .01em !important;
  color: var(--pm-navy) !important;
}
/* Heading text lives in .elementor-heading-title (V4 heading widget) —
   style it there so it beats Elementor's global heading font. */
.pm-trade-card .pm-trade-name .elementor-heading-title{
  font-family: "Oswald","Barlow Condensed","Arial Narrow",sans-serif !important;
  text-transform: uppercase !important;
  font-weight: 700 !important;
  font-size: 1.2rem !important;
  line-height: 1.15 !important;
  letter-spacing: .01em !important;
  color: var(--pm-navy) !important;
}

/* --- Blurb (styled + clamped directly — V4 flat DOM) ---------------------- */
.pm-trade-desc{
  margin: 0 1.3rem .7rem;                          /* top 0; extra bottom padding before the footer */
  color: var(--pm-slate);
  font-size: .92rem;
  line-height: 1.55;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;                            /* change to 3 for taller cards */
  overflow: hidden;
}

/* --- Capability chips (dynamic via [pm_trade_chips]) — below blurb, above footer */
.pm-trade-chips{
  display: flex; flex-wrap: wrap; gap: .4rem;
  margin: 0 1.3rem 1.1rem;              /* top 0; bottom = room before the footer */
}
.pm-trade-chips:empty{ display: none; }
.pm-chip{
  font-size: .72rem; font-weight: 600; color: var(--pm-navy);
  background: var(--pm-pale-tint); padding: .22rem .6rem;
  border-radius: 999px; letter-spacing: .01em; white-space: nowrap;
}

/* --- 24/7 badge (top-right; overrides Elementor's reserved ::before) ------ */
.pm-trade-card::before{
  content: "24/7 SERVICE";
  position: absolute;
  inset: .8rem .8rem auto auto !important;          /* top right bottom left — beats inset:0 */
  width: auto !important; height: auto !important;
  z-index: 3;
  font-family: var(--pm-font-display);
  font-weight: 700; font-size: .78rem; letter-spacing: .03em;
  color: var(--pm-white);
  background: var(--pm-navy);
  padding: .28rem .62rem;
  border-radius: 999px;
  box-shadow: var(--pm-shadow);
  pointer-events: none;                             /* keep the whole card clickable */
}

/* --- Two-action footer (View + Call) — stacked, full-width ---------------- */
.pm-trade-foot{
  margin-top: auto;                                 /* pins the footer to the card bottom */
  display: flex; flex-direction: column;            /* stacked: View on top, Call below */
  align-items: stretch;                             /* each button fills the card width   */
  gap: .5rem;
  border-top: 1px solid var(--pm-border);
  padding: 1rem 1.3rem 1.15rem !important;          /* built-in spacing, no manual pad */
}
.pm-trade-foot > *{ margin: 0 !important; }         /* kill Elementor widget gaps */
.pm-trade-foot .pm-btn-view{ flex: none; }          /* no horizontal grow when stacked */
.pm-trade-foot .elementor-button{
  display: flex !important; align-items: center; justify-content: center;
  width: 100%; min-height: 44px;                    /* equal height → buttons line up */
  padding: .5rem 1rem !important;
  font-size: .82rem !important;
  text-transform: uppercase; letter-spacing: .02em;
}
.pm-btn-call .elementor-button{ white-space: nowrap; }

/* Arrow BESIDE the label — target the flex content-wrapper, NOT the <a>. */
.pm-btn-view .elementor-button-content-wrapper{ gap: .45rem; }
.pm-btn-view .elementor-button-content-wrapper::after{
  content: "\2192"; font-size: 1rem; line-height: 1;
  transition: transform var(--pm-dur) var(--pm-ease);
}
.pm-btn-view .elementor-button:hover .elementor-button-content-wrapper::after{
  transform: translateX(3px);
}

/* --- Mobile --------------------------------------------------------------- */
@media (max-width: 767px){
  .pm-trade-card{ --pm-trade-img-h: 150px; }        /* chip anchor follows automatically */
}
/* ==========================================================================
   PM Section 65 — SERVICES LOOP GRID (adaptive columns)
   SEPARATE from Section 64 — this styles the Loop Grid WIDGET, not the card.
   Put class `pm-services-grid` on the Loop Grid widget (Advanced → CSS Classes).
   auto-fit fills the row and collapses empty tracks, so 4/5/6 items all look
   balanced with no lopsided gap. Do NOT delete this when editing the cards.
   ========================================================================== */
.pm-services-grid.elementor-grid,
.pm-services-grid .elementor-grid,
.pm-services-grid .elementor-loop-container{
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)) !important;
  gap: 1.5rem !important;
}
/* ==========================================================================
   PM Section 66 — $99 SERVICE-CALL BAR (full-width navy band under the hero)
   Build:
     Section/Container → class `pm-fee-bar`, width Full, background --pm-navy-900
       HTML widget     → the .pm-fee-inner markup above
   ========================================================================== */

/* Band: force the navy and zero Elementor's own padding/margins so the bar
   height is set ONLY by .pm-fee-inner below (bulletproof against theme padding). */
.pm-fee-bar{ background: var(--pm-navy-900) !important; padding: 0 !important; }
.pm-fee-bar > .e-con-inner{ padding: 0 !important; }
.pm-fee-bar .e-con-inner > *{ margin: 0 !important; }

/* Inner row: centered, max-width matched to the page; this sets the height. */
.pm-fee-inner{
  max-width: 1200px;
  margin: 0 auto;
  padding: 1.1rem 1.5rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem 1.5rem;
  flex-wrap: wrap;
  color: #fff;
}

/* Offer group — price + line stay together if the row wraps. */
.pm-fee-offer{
  display: flex;
  align-items: center;
  gap: .8rem;
  flex-wrap: wrap;
}
.pm-fee-price{
  font-family: var(--pm-font-display);
  font-weight: 700;
  font-size: 2.1rem;
  line-height: 1;
  letter-spacing: .01em;
  color: var(--pm-blue-soft);
}
.pm-fee-lead{
  font-weight: 700;
  font-size: 1.02rem;
  line-height: 1.3;
  color: #fff;
}
.pm-fee-lead .thin{
  font-weight: 400;
  color: #c9d6e2;
}

/* Soft CTA — a link, not a button, so it doesn't fight the hero's Schedule button. */
.pm-fee-cta{
  flex: none;
  font-family: var(--pm-font-display);
  text-transform: uppercase;
  font-weight: 700;
  font-size: .9rem;
  letter-spacing: .03em;
  color: var(--pm-blue-soft);
  text-decoration: none;
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  transition: color var(--pm-dur) var(--pm-ease);
}
.pm-fee-cta::after{
  content: "\2192";
  font-size: 1rem;
  transition: transform var(--pm-dur) var(--pm-ease);
}
.pm-fee-cta:hover{ color: #fff; }
.pm-fee-cta:hover::after{ transform: translateX(3px); }
.pm-fee-cta:focus-visible{
  outline: 2px solid var(--pm-blue-soft);
  outline-offset: 3px;
  border-radius: 4px;
}

/* Mobile: stack and center. */
@media (max-width: 640px){
  .pm-fee-inner{
    flex-direction: column;
    justify-content: center;
    text-align: center;
    gap: .7rem;
  }
  .pm-fee-offer{ justify-content: center; }
}
/* $99 fee CTA — button element, on-brand hover.
   Overrides Hello Elementor's default button:hover/:focus (#c36 pink). */
.pm-fee-inner .pm-fee-cta{
  appearance: none;
  background: transparent;
  border: 0;
  cursor: pointer;
  padding: .5rem 1rem;
  border-radius: var(--pm-radius-btn);
  transition: background-color var(--pm-dur) var(--pm-ease),
              color var(--pm-dur) var(--pm-ease);
}

.pm-fee-inner .pm-fee-cta:hover,
.pm-fee-inner .pm-fee-cta:focus,
.pm-fee-inner .pm-fee-cta:focus-visible{
  background-color: var(--pm-white);
  color: var(--pm-navy);
}

.pm-fee-inner .pm-fee-cta:focus-visible{
  outline: 2px solid var(--pm-blue-soft);
  outline-offset: 3px;
}
/* ==========================================================================
   PM Section 67 — PUTNAM MAINTENANCE UNIVERSITY HIGHLIGHT (home page)
   Split image + story band. Layout only — colors come from .pm-section--navy,
   .pm-eyebrow, and .pm-btn--ondark (existing kit utilities).
   ========================================================================== */

/* Band: photo bleeds to the top/bottom edges — the text column carries padding. */
.pm-uni{ padding-top: 0 !important; padding-bottom: 0 !important; }
.pm-uni > .e-con-inner{ padding-top: 0 !important; padding-bottom: 0 !important; }

/* Two equal columns; the photo stretches to match the text side's height. */
.pm-uni-inner{
  display: grid !important;
  grid-template-columns: 1fr 1fr;
  gap: 0 3.5rem;
  align-items: stretch;
  max-width: 1200px;
  margin-inline: auto;
}

/* Photo column — fills its half edge-to-edge, full height. */
.pm-uni-photo{
  min-height: 420px;
  background-size: cover !important;
  background-position: center !important;
  background-repeat: no-repeat !important;
}

/* Text column. */
.pm-uni-body{
  align-self: center;
  padding: 4.5rem 0;
}
.pm-uni-body p{ color: #c9d6e2; max-width: 46ch; }

/* Proof points (Icon List) — on-dark colors, tighter spacing. */
.pm-uni-points .elementor-icon-list-item{ margin-bottom: .6rem; }
.pm-uni-points .elementor-icon-list-text{ color: #fff; font-weight: 600; }
.pm-uni-points .elementor-icon-list-icon svg,
.pm-uni-points .elementor-icon-list-icon i{ fill: var(--pm-blue-soft); color: var(--pm-blue-soft); }

/* Mobile: stack, photo on top, restore side padding on the text. */
@media (max-width: 820px){
  .pm-uni-inner{ grid-template-columns: 1fr; gap: 0; }
  .pm-uni-photo{ min-height: 260px; }
  .pm-uni-body{ padding: 2.6rem 1.3rem; }
}

/* =========================================================================
   7B - MOBILE NAV  (REPLACES Sections 15, 40, 41 and the earlier
   "HEADER — MOBILE MENU" block pasted into Section 7)

   DELETE THOSE FOUR BLOCKS when you paste this in. Everything they did is
   carried over below - nothing is dropped. See the audit for line-by-line.

   Why one block: the mobile menu activates at <=1024px (verified: hamburger
   at 1024, full nav at 1100), but Sections 15/40/41 were all scoped <=767px,
   so tablets ran the menu with none of the fixes applied.

   Two queries on purpose:
     <=1024px  menu mechanics   (matches Elementor's real breakpoint)
     <=767px   phone-only layout (utility bar + inline CTAs) - unchanged
   ========================================================================= */

/* ---------- MENU MECHANICS (<=1024px) ---------- */
@media (max-width: 1024px){

  /* Anchor the panel to the whole header row, not the narrow nav widget,
     so it drops below the header full-width. (was Section 15) */
  .pm-header{ position: relative; }
  .pm-header .elementor-widget-nav-menu{ position: static !important; }
  .pm-header .pm-main-nav{ flex: 1 1 auto !important; width: auto !important; }
  .pm-main-nav .elementor-menu-toggle{ margin-left: auto !important; margin-right: 0 !important; }

  /* Hamburger: 44x44 minimum touch target (was 33x33) */
  .pm-header .elementor-menu-toggle{
    min-width: 44px !important; min-height: 44px !important;
    display: flex !important; align-items: center !important; justify-content: center !important;
  }

  /* Panel: full width, flush under the header bar (no 10px gap) */
  .pm-header .elementor-nav-menu--dropdown{
    position: absolute !important;
    left: 0 !important; right: 0 !important; width: 100% !important;
    top: 100% !important;
    margin-top: 0 !important;
    border-top: 0 !important;
    z-index: 1000;
    box-shadow: var(--pm-shadow-lg);
    overflow-y: auto !important;
  }

  /* Submenus flow inline instead of absolute flyouts, so all items show
     without scrolling a cramped inner box. SmartMenus writes these inline
     via JS - hence !important. */
  .pm-header .elementor-nav-menu--dropdown .sub-menu{
    position: static !important;
    width: auto !important; min-width: 0 !important; max-width: none !important;
    max-height: none !important; margin: 0 !important;
    overflow: visible !important;
    box-shadow: none !important; border-radius: 0 !important;
  }

  /* Rows: flex so the caret can be pushed to the right edge.
     padding-right is 0 - the caret owns that space. */
  .pm-header .elementor-nav-menu--dropdown a.elementor-item{
    display: flex !important; align-items: center;
    padding: 0 0 0 20px !important;
    min-height: 58px;
    font-size: 16px !important;
    border-bottom: 0 !important;          /* separator lives on the li */
    color: var(--pm-navy);
    transition: none !important;          /* no fade: Section 7's .25s colour
                                             transition made the text crawl
                                             navy->white while the background
                                             snapped, giving a ~100ms
                                             navy-on-navy blink on every tap */
  }
  .pm-header .elementor-nav-menu--dropdown a.elementor-sub-item{
    padding: 14px 20px 14px 34px !important;   /* indent = visual hierarchy */
    font-size: 15px !important;
  }
  .pm-header .elementor-nav-menu--dropdown li:not(:last-child){
    border-bottom: 1px solid rgba(0,0,0,.06);
  }

  /* THE TAP FIX: caret sits at the right edge, full row height, with a
     divider. Before: 56px caret mid-row, 182px of dead zone to its right
     that navigated instead of toggling (85% of the row). */
  .pm-header .elementor-nav-menu--dropdown .sub-arrow{
    margin-left: auto !important;
    width: 72px !important;
    align-self: stretch !important;
    display: flex !important; align-items: center !important; justify-content: center !important;
    padding: 0 !important;
    border-left: 1px solid rgba(255,255,255,.25);
  }
  /* CARET HIT-FIX (this is what made "tap to close" navigate).
     SmartMenus decides toggle-vs-follow-link with:
         f = $(e.target).is(".sub-arrow")
         if (isCollapsible && (toggleMode || f)) { close; return false; }
     collapsibleBehavior is "default", so toggleMode is false and f is the ONLY
     thing that prevents navigation. Elementor renders an <svg> INSIDE the
     .sub-arrow span, so tapping the visible chevron makes the svg the event
     target, f is false, and the browser follows the parent link.
     pointer-events:none removes the svg from hit-testing, so every tap in the
     caret zone resolves to the span itself and f is true. */
  .pm-header .elementor-nav-menu--dropdown .sub-arrow *{
    pointer-events: none !important;
  }

  /* Caret follows the row's text colour (was always black) */
  .pm-header .elementor-nav-menu--dropdown .sub-arrow,
  .pm-header .elementor-nav-menu--dropdown .sub-arrow svg,
  .pm-header .elementor-nav-menu--dropdown .sub-arrow i{
    color: currentColor !important; fill: currentColor !important;
  }

  /* Colour states. .elementor-item-active is the fix for the current-page
     row, which was blue #2E73B8 on grey #3F444B = 1.99:1. Now 8.90:1. */
  .pm-header .elementor-nav-menu--dropdown a.elementor-item:hover,
  .pm-header .elementor-nav-menu--dropdown a.elementor-item.highlighted,
  .pm-header .elementor-nav-menu--dropdown a.elementor-item.elementor-item-active,
  .pm-header .elementor-nav-menu--dropdown a.elementor-item[aria-expanded="true"]{
    background-color: var(--pm-navy) !important;
    color: #fff !important;
  }
  /* Sub-items get the soft tint, not Elementor's off-brand charcoal */
  .pm-header .elementor-nav-menu--dropdown a.elementor-sub-item:hover,
  .pm-header .elementor-nav-menu--dropdown a.elementor-sub-item.highlighted,
  .pm-header .elementor-nav-menu--dropdown a.elementor-sub-item.elementor-item-active{
    background-color: var(--pm-pale-tint) !important;
    color: var(--pm-navy) !important;
  }

  /* Section 7's growing blue underline is a DESKTOP flourish; inside the
     panel it drew a stray 3px bar at bottom:-6px on every row. */
  .pm-header .elementor-nav-menu--dropdown a.elementor-item::after{
    display: none !important;
  }
}

/* ---------- PHONE-ONLY LAYOUT (<=767px) - unchanged behaviour ---------- */
@media (max-width: 767px){
  /* Utility bar is desktop/tablet only (was Section 15) */
  .pm-utility-bar{ display: none !important; }
  /* Inline Call/Schedule would overflow the phone header; the sticky
     bottom bar (Section 8) carries them instead. (was Section 40)
     Tablet 768-1024 keeps the inline CTAs - do not widen this. */
  .pm-header .pm-header-actions{ display: none !important; }
}


/* ==== PM Section 68 - Membership page v2 (plan cards, compare table, system credit, join form) ====
   Page: /maintenance-plan/ (page ID 65). Guide: "Putnam Maintenance - Maintenance Plan Page v2 Build Guide.md".
   Reuses: .pm-hplan* (hero plan cards), .pm-form-card / .pm-call-row / .pm-call-btn / .pm-contact-chips /
   .pm-contact-hero / .pm-form-fineprint (Section 59), .pm-steps (54), .pm-faq, .pm-section--navy.
   New classes: .pm-perk-credit, .pm-hplan-more, .pm-compare*, .pm-credit*, .pm-join-form, .pm-plan-fineprint.
   No JS-added classes on purpose - FlyingPress "remove unused CSS" would strip them. State uses :checked. */

/* 68a - Hero plan cards: highlight the system-credit perk + "compare" link */
.pm-hplan-list li.pm-perk-credit{font-weight:700}
.pm-hplan-list li.pm-perk-credit::before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='%23E8963B'/%3E%3Cpath d='M8 12.5l2.5 2.5 5-5.5' fill='none' stroke='%230E2A45' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important}
.pm-hplan-more{display:block;text-align:center;margin:1rem 0 0;font-size:.86rem;font-weight:600;color:#2E73B8 !important;text-decoration:none !important}
.pm-hplan-more:hover{text-decoration:underline !important}

/* 68b - Compare table */
.pm-compare{max-width:880px;margin:0 auto;overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:18px}
/* Elementor widgets are flex items (min-width:auto) - let the table shrink instead of widening the page */
.elementor-widget:has(.pm-compare){min-width:0;max-width:100%}
.pm-compare:focus-visible{outline:3px solid #7FA8CC;outline-offset:3px}
.pm-compare-table{width:100%;min-width:0;border-collapse:separate;border-spacing:0;background:#fff;border:1px solid #D5DDE4;border-radius:18px;box-shadow:0 12px 34px rgba(14,42,69,.08);font-family:'Hanken Grotesk',sans-serif;table-layout:fixed}
/* neutralize the Hello theme table reset (grid borders + zebra stripes + 15px margin) */
.pm-compare .pm-compare-table{margin:0}
.pm-compare .pm-compare-table th,.pm-compare .pm-compare-table td{border:0;border-bottom:1px solid #E6ECF1;background-color:transparent}
.pm-compare .pm-compare-table tbody > tr > th,.pm-compare .pm-compare-table tbody > tr > td{background-color:transparent}
.pm-compare-table th,.pm-compare-table td{padding:.95rem 1.1rem;text-align:center;vertical-align:middle;color:#16202B;font-size:.95rem;line-height:1.35}
.pm-compare-table tbody tr:last-child th,.pm-compare-table tbody tr:last-child td{border-bottom:0}
.pm-compare-table col.pm-compare-col-perk{width:46%}
.pm-compare-table tbody th{text-align:left;font-weight:600;color:#16202B}
.pm-compare-table tbody th small{display:block;font-weight:400;color:#6B7884;font-size:.8rem;margin-top:.15rem}
.pm-compare-table thead th{padding:1.4rem 1rem 1.1rem;border-bottom:1px solid #D5DDE4;position:relative}
.pm-compare-name{display:block;font-family:'Oswald',sans-serif;font-weight:600;text-transform:uppercase;letter-spacing:.4px;font-size:1.05rem;color:#1C4C79}
.pm-compare-price{display:block;font-family:'Oswald',sans-serif;font-weight:700;font-size:1.9rem;line-height:1.1;color:#1C4C79;margin-top:.2rem}
.pm-compare-price small{font-size:.85rem;font-weight:400;color:#6B7884}
.pm-compare-alt{display:block;font-size:.8rem;color:#6B7884}
.pm-compare-badge{display:inline-block;background:#E8963B;color:#0E2A45;font-family:'Oswald',sans-serif;font-weight:600;font-size:.62rem;letter-spacing:.06em;text-transform:uppercase;border-radius:20px;padding:.25rem .75rem;margin-bottom:.45rem}
/* featured (Whole-Home) column */
.pm-compare .pm-compare-table .pm-compare-feat{background:#F3F7FB}
.pm-compare .pm-compare-table thead .pm-compare-feat{background:linear-gradient(160deg,#1C4C79,#0E2A45);border-top-right-radius:17px}
.pm-compare-table thead .pm-compare-feat .pm-compare-name,.pm-compare-table thead .pm-compare-feat .pm-compare-price{color:#fff}
.pm-compare-table thead .pm-compare-feat .pm-compare-price small,.pm-compare-table thead .pm-compare-feat .pm-compare-alt{color:#9DB6CE}
.pm-compare-table td strong{font-family:'Oswald',sans-serif;font-weight:600;font-size:1.1rem;color:#1C4C79;letter-spacing:.2px}
.pm-compare-table td small{display:block;font-size:.78rem;color:#6B7884}
/* included / not-included marks */
.pm-yes,.pm-no{display:inline-block;width:22px;height:22px;background-repeat:no-repeat;background-size:contain;vertical-align:middle}
.pm-yes{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='%232E73B8'/%3E%3Cpath d='M8 12.5l2.5 2.5 5-5.5' fill='none' stroke='%23ffffff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.pm-no{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 12h10' stroke='%23B5C2CE' stroke-width='2.4' stroke-linecap='round'/%3E%3C/svg%3E")}
/* CTA row */
.pm-compare .pm-compare-table tfoot td{padding:1rem 1.1rem 1.3rem;border-bottom:0}
.pm-compare-table tfoot .pm-hplan-cta{max-width:220px;margin:0 auto}
@media (max-width:600px){
.pm-compare-table col.pm-compare-col-perk{width:40%}
.pm-compare-table th,.pm-compare-table td{padding:.7rem .4rem;font-size:.8rem}
.pm-compare-table tbody th{padding-left:.75rem}
.pm-compare-table tbody th small{font-size:.72rem}
.pm-compare-table thead th{padding:1rem .3rem .8rem}
.pm-compare-name{font-size:.82rem}
.pm-compare-price{font-size:1.3rem}
.pm-compare-price small,.pm-compare-alt{font-size:.68rem}
.pm-compare-badge{font-size:.5rem;padding:.2rem .45rem}
.pm-compare-table td strong{font-size:.9rem}
.pm-compare-table td small{font-size:.68rem}
.pm-yes,.pm-no{width:19px;height:19px}
.pm-compare .pm-compare-table tfoot td{padding:.8rem .35rem 1rem}
.pm-compare-table tfoot .pm-hplan-cta{font-size:.66rem;padding:.6rem .3rem;line-height:1.2}
}

/* 68c - System credit band (sits on .pm-section--navy) */
.pm-credit{display:grid !important;grid-template-columns:1fr 1.05fr;gap:3rem;align-items:center;max-width:1080px;margin:0 auto}
.pm-credit-facts{list-style:none;margin:1.4rem 0 0;padding:0;display:flex;flex-direction:column;gap:.7rem}
.pm-credit-facts li{position:relative;padding-left:1.9rem;color:#EAF1F8;font-size:1rem;line-height:1.45}
.pm-credit-facts li::before{content:"";position:absolute;left:0;top:.12rem;width:20px;height:20px;background-repeat:no-repeat;background-size:contain;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='%23E8963B'/%3E%3Cpath d='M8 12.5l2.5 2.5 5-5.5' fill='none' stroke='%230E2A45' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.pm-credit-facts b{color:#fff}
.pm-credit-ladder{background:rgba(255,255,255,.06);border:1px solid rgba(157,182,206,.25);border-radius:18px;padding:1.6rem 1.6rem 1.3rem}
.pm-credit-legend{display:flex;flex-wrap:wrap;gap:1.2rem;margin:0 0 1.1rem;font-size:.82rem;color:#9DB6CE}
.pm-credit-key{display:inline-flex;align-items:center;gap:.45rem}
.pm-credit-key::before{content:"";width:12px;height:12px;border-radius:3px;background:#5B9BD5}
.pm-credit-key--wh::before{background:#E8963B}
.pm-credit-row{display:grid;grid-template-columns:4.6rem 1fr;gap:.9rem;align-items:center;padding:.65rem 0;border-top:1px solid rgba(157,182,206,.18)}
.pm-credit-legend + .pm-credit-row{border-top:0}
.pm-credit-yr{font-family:'Oswald',sans-serif;font-weight:600;text-transform:uppercase;letter-spacing:.4px;font-size:.82rem;color:#EAF1F8;line-height:1.2}
.pm-credit-yr small{display:block;font-family:'Hanken Grotesk',sans-serif;text-transform:none;letter-spacing:0;font-weight:400;font-size:.72rem;color:#9DB6CE}
.pm-credit-bars{display:flex;flex-direction:column;gap:.35rem}
.pm-credit-bar{position:relative;display:block;height:16px;min-width:6px;border-radius:5px;background:#5B9BD5;width:calc(var(--y,1) * 3.9%)}
.pm-credit-bar--wh{background:#E8963B;width:calc(var(--y,1) * 7.8%)}
.pm-credit-bar b{position:absolute;left:100%;top:50%;transform:translateY(-50%);margin-left:.55rem;white-space:nowrap;font-family:'Oswald',sans-serif;font-weight:600;font-size:.86rem;color:#fff;letter-spacing:.2px}
.pm-credit-note{font-size:.78rem;line-height:1.5;color:#9DB6CE;margin:1rem 0 0}
@media (max-width:900px){.pm-credit{grid-template-columns:1fr;gap:2rem}}
@media (max-width:480px){.pm-credit-ladder{padding:1.2rem 1rem 1rem}.pm-credit-row{grid-template-columns:3.8rem 1fr}}

/* 68d - Join form: plan + billing as selectable cards, acceptance checkbox.
   Put "pm-join-form" on the Form WIDGET (Advanced -> CSS Classes); its container keeps "pm-form-card". */
/* Section 59's .pm-contact-hero grid, forced over Elementor's container display var (used as a full-width container here) */
.pm-contact-hero.e-con{display:grid !important;grid-template-columns:1fr 1fr;gap:2.6rem;align-items:start;max-width:1080px;margin:0 auto;width:100%}
@media (max-width:860px){.pm-contact-hero.e-con{grid-template-columns:1fr;gap:1.8rem}}
.pm-credit.e-con{width:100%}
.pm-join-form .elementor-field-type-radio .elementor-field-subgroup{display:grid !important;grid-template-columns:1fr 1fr;gap:.6rem;width:100%}
.pm-join-form .elementor-field-type-radio .elementor-field-option{position:relative;display:block !important;margin:0 !important;padding:0 !important}
.pm-join-form .elementor-field-type-radio input[type=radio]{position:absolute !important;opacity:0 !important;width:1px !important;height:1px !important;padding:0 !important;margin:0 !important;border:0 !important}
.pm-join-form .elementor-field-type-radio .elementor-field-option label{display:flex !important;align-items:center;gap:.6rem;min-height:54px;margin:0 !important;padding:.75rem .9rem;border:1.5px solid #D5DDE4;border-radius:10px;background:#fff;color:#16202B;font-family:'Hanken Grotesk',sans-serif;font-weight:600;font-size:.9rem;line-height:1.3;cursor:pointer;transition:border-color .15s ease,background .15s ease,box-shadow .15s ease}
.pm-join-form .elementor-field-type-radio .elementor-field-option label::before{content:"";flex:0 0 18px;width:18px;height:18px;border-radius:50%;border:2px solid #9FB1C1;background:#fff;box-sizing:border-box;transition:border .15s ease}
.pm-join-form .elementor-field-type-radio .elementor-field-option label:hover{border-color:#2E73B8}
.pm-join-form .elementor-field-type-radio input:checked + label{border-color:#1C4C79;background:#EEF3F7;box-shadow:0 0 0 3px rgba(46,115,184,.12)}
.pm-join-form .elementor-field-type-radio input:checked + label::before{border:5px solid #1C4C79}
.pm-join-form .elementor-field-type-radio input:focus-visible + label{outline:3px solid #7FA8CC;outline-offset:2px}
.pm-join-form .elementor-field-type-acceptance .elementor-field-option{display:flex;align-items:flex-start;gap:.6rem}
.pm-join-form input[type=checkbox]{flex:0 0 18px;width:18px !important;height:18px !important;min-height:0 !important;padding:0 !important;margin:.1rem 0 0 !important;accent-color:#1C4C79}
.pm-join-form .elementor-field-type-acceptance label{font-weight:400 !important;font-size:.84rem !important;line-height:1.45;color:#45525E !important}
@media (max-width:480px){.pm-join-form .elementor-field-type-radio .elementor-field-subgroup{grid-template-columns:1fr}}

/* 68e - Plan fine print (under the compare table / credit band) */
.pm-plan-fineprint{max-width:760px;margin:1.2rem auto 0;text-align:center;font-size:.78rem;line-height:1.5;color:#6B7884}
.pm-section--navy .pm-plan-fineprint{color:#9DB6CE}

/* 68f - Anchor targets (#compare, #join) clear the sticky header when jumped to */
#compare,#join{scroll-margin-top:96px}


/* ==== PM Section 69 - Call button fixes (.pm-call-btn from Section 59) ====
   1) WordPress swaps the phone emoji for a dark Twemoji <img class="emoji"> - render it white.
   2) Hello theme's a:hover / a:active (color #336) out-specify .pm-call-btn - keep the text white.
   Applies everywhere .pm-call-btn is used (/maintenance-plan/ join section, /schedule/). */
.pm-call-btn img.emoji{filter:brightness(0) invert(1);width:1em !important;height:1em !important;margin:0 !important;vertical-align:-.1em}
.pm-call-btn:hover,.pm-call-btn:focus,.pm-call-btn:active,.pm-call-btn:visited{color:#fff !important;text-decoration:none !important}


/* ==== PM Section 70 - Floating widgets: ServiceTitan chat bubble + Google review badge + mobile sticky bar ====
   The ServiceTitan Chat-to-Text widget (WPCode snippet 1682, Site Wide Footer) injects a fixed box at the
   bottom-right with no id/class: body > div > iframe[src*="text2chat-widget.servicetitan.com"].
   Closed = 84x84 bubble; open = large panel (420x800 on desktop). Its z-index is 99999.
   - Desktop/tablet: the review badge (.pm-rev-badge, Section 34) moves to the bottom-LEFT so the chat
     bubble no longer covers it.
   - Mobile (<=767px, where .pm-sticky-cta shows as a 65px bottom bar): the badge sits bottom-left ABOVE
     the bar, and the chat bubble (closed state only) is lifted above the bar. The open chat panel is left
     alone so it can use the full screen. */
.pm-rev-badge{right:auto !important;left:20px !important}
@media (max-width:767px){
.pm-rev-badge{left:12px !important;right:auto !important;bottom:76px !important}
body > div:has(> iframe[src*="text2chat-widget.servicetitan.com"])[style*="height: 84px"]{bottom:64px !important}
}


/* ==== PM Section 71 - Customer portal login links (ServiceTitan customer portal) ====
   - Top utility bar: button .pm-util-login (header template 127, before the phone number). Desktop only -
     the utility bar's right side is hidden on tablet/mobile. Adds a person icon (CSS mask, inherits the
     white text color) and a thin divider between it and the phone number.
   - Primary Menu item "Customer Login" carries the menu CSS class pm-nav-mobile-only: hidden in the
     desktop horizontal nav, shown only in the hamburger dropdown (tablet/mobile).
   - Footer: "Customer Portal" item in the Footer - Legal menu points to the portal (no CSS needed). */
.elementor-nav-menu--main .pm-nav-mobile-only{display:none !important}
.pm-util-login{padding-right:24px;border-right:1px solid rgba(255,255,255,.25)}
.pm-util-login .elementor-button-text{display:inline-flex;align-items:center;gap:.4rem}
.pm-util-login .elementor-button-text::before{content:"";width:15px;height:15px;flex:0 0 15px;background-color:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='8' r='4'/%3E%3Cpath d='M4 21c0-4 3.6-6.5 8-6.5s8 2.5 8 6.5'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='8' r='4'/%3E%3Cpath d='M4 21c0-4 3.6-6.5 8-6.5s8 2.5 8 6.5'/%3E%3C/svg%3E") center/contain no-repeat}
.pm-util-login .elementor-button:hover .elementor-button-text{text-decoration:underline}


/* ==== PM Section 72 - Hide floating widgets while the mobile menu is open ====
   When the hamburger dropdown (.pm-main-nav toggle gets .elementor-active) is open, the Google review badge
   (Section 34/70) and the closed ServiceTitan chat bubble (Section 70) floated over the last menu items
   (e.g. "Customer Login"). Hide both until the menu closes. */
body:has(.pm-main-nav .elementor-menu-toggle.elementor-active) .pm-rev-badge,
body:has(.pm-main-nav .elementor-menu-toggle.elementor-active) > div:has(> iframe[src*="text2chat-widget.servicetitan.com"])[style*="height: 84px"]{display:none !important}

/* ==== PM Section 75 - Footer links in Text Editor widgets stay white ==== */
.pm-footer .elementor-widget-text-editor a:not(.elementor-button) {
  color: rgba(255,255,255,.82);
  text-decoration: none;
}
.pm-footer .elementor-widget-text-editor a:not(.elementor-button):hover,
.pm-footer .elementor-widget-text-editor a:not(.elementor-button):focus-visible {
  color: var(--pm-blue-soft);
}


/* Desktop nav: let 3rd-level flyouts (Services > Heating and Cooling > AC Repair, etc.) show outside the first dropdown */
.pm-main-nav .elementor-nav-menu--main .elementor-nav-menu--dropdown{overflow:visible}/* End custom CSS */