
/* ===== css/pas-animations-v2.css ===== */
/* Prime Air Solutions — premium micro-animations (scroll-reveal + hover) */

/* Scroll-reveal (more visible): JS adds .pas-reveal ONLY to elements currently below the
   fold, so visible/above-fold content is NEVER hidden (no flash, JS-off = nothing hidden). */
.pas-reveal{opacity:0;transform:translateY(52px);
  transition:opacity .85s cubic-bezier(.16,.84,.44,1), transform .85s cubic-bezier(.16,.84,.44,1);
  will-change:opacity,transform}
.pas-reveal.is-visible{opacity:1;transform:none}
/* Applied by the 3.5 s failsafe: show instantly instead of fading. See the JS comment. */
.pas-reveal-snap{transition:none!important}
/* CRITICAL FIX: .alignwide sections center themselves with `transform:translateX(-50%)`.
   The generic reveal above sets `transform:translateY(...)` / `none`, which CLOBBERS that
   centering and shoves the whole section ~50% to the right (overflowing) — the "block is in
   the wrong place / needs a reload" bug. Compose both transforms so alignwide stays centered
   AND still animates. Must out-specify both `.pas-reveal` and `.alignwide`.

   MUST stay inside the SAME breakpoint as the theme rule it compensates for:
   the theme only applies `position:relative;left:50%;transform:translateX(-50%)` at
   `@media screen and (min-width:992px)`. Below that, .alignwide is a plain static
   full-width block — re-adding translateX(-50%) there shoved the whole section half its
   own width OFF the left edge of the phone/tablet screen (cut-off cards & text). */
@media screen and (min-width:992px){
  .alignwide.pas-reveal{transform:translate(-50%,52px)}
  .alignwide.pas-reveal.is-visible{transform:translateX(-50%)}
}
/* cards/images get an extra subtle scale-in for a richer reveal */
.pas-card.pas-reveal,.fs-service-card.pas-reveal,.wp-block-image.pas-reveal,
.fs-reviews__item.pas-reveal{transform:translateY(52px) scale(.94)}
.pas-card.pas-reveal.is-visible,.fs-service-card.pas-reveal.is-visible,
.wp-block-image.pas-reveal.is-visible,.fs-reviews__item.pas-reveal.is-visible{transform:none}

/* ===== Hero entrance on load (staggered fade + rise) ===== */
@keyframes pasHeroIn{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:none}}
.fs-home-slider__block>*{animation:pasHeroIn .8s cubic-bezier(.16,.84,.44,1) both}
.fs-home-slider__block>*:nth-child(1){animation-delay:.06s}
.fs-home-slider__block>*:nth-child(2){animation-delay:.20s}
.fs-home-slider__block>*:nth-child(3){animation-delay:.34s}
.fs-home-slider__block>*:nth-child(4){animation-delay:.48s}
.fs-home-slider__block>*:nth-child(5){animation-delay:.60s}

/* ===== Primary CTA: gentle attention pulse/glow (header + hero) =====
   The ring is a pseudo-element scaled+faded on the compositor. The previous version
   animated `box-shadow` on the button itself, which repaints the button and its text
   on every frame of a 2.6 s infinite loop — on mobile that was a permanent main-thread
   tax for three always-visible buttons. */
@keyframes pasPulse{0%{opacity:.5}70%{opacity:0}100%{opacity:0}}
.fs-header .button--primary:not(.fs-disabled),
.fs-home-slider__block .button--primary:not(.fs-disabled){position:relative}
/* The ring only fades. Scaling it would re-rasterise a 12 px blur every frame — the
   same trap that made the region-switcher glow the most expensive thing on the page. */
.fs-header .button--primary:not(.fs-disabled)::after,
.fs-home-slider__block .button--primary:not(.fs-disabled)::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  box-shadow:0 0 0 12px rgba(10,102,255,.5);will-change:opacity;
  animation:pasPulse 2.6s ease-out infinite}
.fs-header .button--primary:hover::after,
.fs-home-slider__block .button--primary:hover::after{animation:none;opacity:0}

/* count-up numbers don't reflow (avoid layout jump while animating) */
.pas-countup{display:inline-block;font-variant-numeric:tabular-nums}

/* Hover lift for cards (service cards, blog cards, review cards, map card) */
.fs-service-card,.fs-service-listings__item,.pas-card,.fs-reviews__item,
.fs-cards__item,.fs-steps__item,.wp-block-column{
  transition:transform .38s cubic-bezier(.16,.84,.44,1), box-shadow .38s ease}
.fs-service-card:hover,.fs-service-listings__item:hover,.pas-card:hover,
.fs-reviews__item:hover,.fs-cards__item:hover{
  transform:translateY(-6px);
  box-shadow:0 20px 44px rgba(15,19,32,.13)}

/* Image zoom on hover (blog cards + work/portfolio + collage) */
.pas-card-img,.fs-works__item,.fs-headline__collage-pic,.fs-blog__image,.wp-block-image{
  overflow:hidden}
.pas-card-img img,.fs-works__item img,.fs-headline__collage-pic img,.fs-blog__image img{
  transition:transform .55s cubic-bezier(.16,.84,.44,1)}
.pas-card:hover .pas-card-img img,
.fs-works__item:hover img,
.fs-headline__collage-pic:hover img{transform:scale(1.06)}

/* Buttons: subtle premium lift */
.button,.fs-button,a.button,.wp-block-button__link{
  transition:transform .25s ease, box-shadow .25s ease, background-color .25s ease}
.button:hover,.fs-button:hover,a.button:hover,.wp-block-button__link:hover{
  transform:translateY(-2px);
  box-shadow:0 10px 24px rgba(10,102,255,.22)}

/* Nav links: smooth color */
#menu-primary a{transition:color .2s ease}

/* Respect reduced-motion: disable all animation/motion */
@media (prefers-reduced-motion: reduce){
  .pas-reveal{opacity:1!important;transform:none!important;transition:none!important}
  .fs-service-card,.pas-card,.fs-reviews__item,.button,
  .pas-card-img img,.fs-works__item img,.fs-headline__collage-pic img{
    transition:none!important; transform:none!important}
  .fs-home-slider__block>*{animation:none!important}
  .fs-header .button--primary::after,.fs-home-slider__block .button--primary::after{
    animation:none!important;opacity:0!important}
}

/* Infinite decorative loops keep the compositor (and on some of them the main thread)
   busy for as long as the tab is open, including while they are scrolled far out of
   view. pas-animations-v2.js pauses them per-element via IntersectionObserver. */
.pas-anim-idle,.pas-anim-idle::before,.pas-anim-idle::after{animation-play-state:paused!important}

/* === Align contact section width with page body content (content-size 1336px) === */
.fs-touch{max-width:1336px;margin-left:auto;margin-right:auto}
.fs-map__content{max-width:1400px}

/* === Mobile map: stack the contact card ABOVE a normal-flow map (no broken overlay) === */
@media (max-width: 768px){
  .fs-map{position:relative!important;min-height:0!important;height:auto!important;
    overflow:visible!important;padding:2rem 0!important;display:block}
  .fs-map__content{position:relative!important;z-index:2;max-width:100%!important;
    margin:0 auto 1.25rem!important}
  /* The theme kills the card look below 992px — `.fs-map__block{box-shadow:none;
     padding:0 0 2rem}` — because in its own mobile design this is plain text on
     the page background, so no inner padding is needed. We put the shadow BACK
     (it reads as a card again), which means the padding has to come back too:
     without it the heading and the phone/email rows sat flush against the white
     card's edges with zero breathing room. Restore a mobile-sized inset. */
  .fs-map__block{max-width:100%!important;width:100%!important;
    box-shadow:0 10px 30px rgba(15,19,32,.10);
    padding:1.5rem 1.25rem 1.75rem!important;border-radius:12px}
  .fs-map__frame{position:relative!important;left:0!important;top:0!important;
    width:100%!important;height:260px!important;border-radius:12px;overflow:hidden;margin:0!important}
  .fs-map__frame a,.fs-map__frame img{width:100%!important;height:260px!important;border-radius:12px}
}


/* ===== css/pas-form-v3.css ===== */
/* Prime Air Solutions — contact form validation + success confirmation */

/* Invalid field highlight */
.pas-field-error input,
.pas-field-error textarea,
.pas-field-error select{
  border-color:#e23b3b!important;
  box-shadow:0 0 0 3px rgba(226,59,59,.12)!important}
.pas-field-error .wpforms-field-label,
.pas-field-error label{color:#e23b3b}

/* Per-field "what's wrong" message (under the field) */
.pas-field-msg{
  display:block;margin:7px 2px 0;
  color:#c5221f;font-size:13.5px;line-height:1.4;font-weight:600}
.pas-field-msg::before{content:"⚠ ";font-weight:700}

/* Summary banner shown at the top of the form on a failed submit */
.pas-form-summary{
  margin:0 0 18px;padding:13px 16px;border-radius:10px;
  background:#fdecec;border:1px solid rgba(179,38,30,.3);
  color:#b3261e;font-size:15px;font-weight:700;line-height:1.45}

/* Submit error notice */
.pas-form-error{
  margin:14px 0 0;padding:12px 16px;border-radius:8px;
  background:#fdecec;border:1px solid rgba(179,38,30,.25);
  color:#b3261e;font-size:15px;line-height:1.45}
.pas-form-error a{color:#b3261e;font-weight:700}

/* System-detail dropdowns (Number of systems, Age of system) — match text inputs */
.wpforms-field-select select.pas-select{
  -webkit-appearance:none;-moz-appearance:none;appearance:none;
  display:block;width:100%;height:50px;min-height:0;box-sizing:border-box;margin:0;
  padding:0 44px 0 20px;
  border:1px solid transparent;border-radius:4px;
  background-color:#f7f7f7;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5' fill='none' stroke='%23888' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 18px center;background-size:12px 8px;
  font-family:Inter,sans-serif;font-size:16px;line-height:16px;color:rgba(0,0,0,.7);
  cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease}
.wpforms-field-select select.pas-select:focus{
  outline:none;border-color:#0A66FF;box-shadow:0 0 0 3px rgba(10,102,255,.12)}
.wpforms-field-select select.pas-select:invalid{color:rgba(0,0,0,.45)}
.wpforms-field-select select.pas-select option{color:#16181d}
.wpforms-field-select select.pas-select option[disabled]{color:rgba(0,0,0,.45)}

/* "Get a Quote Now" → smooth scroll to the contact form, offset for the sticky header */
html{scroll-behavior:smooth}
#contact-form{display:block;scroll-margin-top:130px}
.pas-form-anchor{display:block;height:0;margin:0;padding:0}


/* ===== assets/leaflet.css ===== */
/* required styles */

.leaflet-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-container,
.leaflet-pane > svg,
.leaflet-pane > canvas,
.leaflet-zoom-box,
.leaflet-image-layer,
.leaflet-layer {
	position: absolute;
	left: 0;
	top: 0;
	}
.leaflet-container {
	overflow: hidden;
	}
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow {
	-webkit-user-select: none;
	   -moz-user-select: none;
	        user-select: none;
	  -webkit-user-drag: none;
	}
/* Prevents IE11 from highlighting tiles in blue */
.leaflet-tile::selection {
	background: transparent;
}
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
.leaflet-safari .leaflet-tile {
	image-rendering: -webkit-optimize-contrast;
	}
/* hack that prevents hw layers "stretching" when loading new tiles */
.leaflet-safari .leaflet-tile-container {
	width: 1600px;
	height: 1600px;
	-webkit-transform-origin: 0 0;
	}
.leaflet-marker-icon,
.leaflet-marker-shadow {
	display: block;
	}
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
.leaflet-container .leaflet-overlay-pane svg {
	max-width: none !important;
	max-height: none !important;
	}
.leaflet-container .leaflet-marker-pane img,
.leaflet-container .leaflet-shadow-pane img,
.leaflet-container .leaflet-tile-pane img,
.leaflet-container img.leaflet-image-layer,
.leaflet-container .leaflet-tile {
	max-width: none !important;
	max-height: none !important;
	width: auto;
	padding: 0;
	}

.leaflet-container{--leaflet-tile-blend:plus-lighter}
.leaflet-container img.leaflet-tile {
	/* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
	mix-blend-mode:var(--leaflet-tile-blend);
}

.leaflet-container.leaflet-touch-zoom {
	-ms-touch-action: pan-x pan-y;
	touch-action: pan-x pan-y;
	}
.leaflet-container.leaflet-touch-drag {
	-ms-touch-action: pinch-zoom;
	/* Fallback for FF which doesn't support pinch-zoom */
	touch-action: none;
	touch-action: pinch-zoom;
}
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
	-ms-touch-action: none;
	touch-action: none;
}
.leaflet-container {
	-webkit-tap-highlight-color: transparent;
}
.leaflet-container a {
	-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
}
.leaflet-tile {
	filter: inherit;
	visibility: hidden;
	}
.leaflet-tile-loaded {
	visibility: inherit;
	}
.leaflet-zoom-box {
	width: 0;
	height: 0;
	-moz-box-sizing: border-box;
	     box-sizing: border-box;
	z-index: 800;
	}
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
.leaflet-overlay-pane svg {
	-moz-user-select: none;
	}

.leaflet-pane         { z-index: 400; }

.leaflet-tile-pane    { z-index: 200; }
.leaflet-overlay-pane { z-index: 400; }
.leaflet-shadow-pane  { z-index: 500; }
.leaflet-marker-pane  { z-index: 600; }
.leaflet-tooltip-pane   { z-index: 650; }
.leaflet-popup-pane   { z-index: 700; }

.leaflet-map-pane canvas { z-index: 100; }
.leaflet-map-pane svg    { z-index: 200; }

.leaflet-vml-shape {
	width: 1px;
	height: 1px;
	}
.lvml {
	display: inline-block;
	position: absolute;
	}


/* control positioning */

.leaflet-control {
	position: relative;
	z-index: 800;
	pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
	pointer-events: auto;
	}
.leaflet-top,
.leaflet-bottom {
	position: absolute;
	z-index: 1000;
	pointer-events: none;
	}
.leaflet-top {
	top: 0;
	}
.leaflet-right {
	right: 0;
	}
.leaflet-bottom {
	bottom: 0;
	}
.leaflet-left {
	left: 0;
	}
.leaflet-control {
	float: left;
	clear: both;
	}
.leaflet-right .leaflet-control {
	float: right;
	}
.leaflet-top .leaflet-control {
	margin-top: 10px;
	}
.leaflet-bottom .leaflet-control {
	margin-bottom: 10px;
	}
.leaflet-left .leaflet-control {
	margin-left: 10px;
	}
.leaflet-right .leaflet-control {
	margin-right: 10px;
	}


/* zoom and fade animations */

.leaflet-fade-anim .leaflet-popup {
	opacity: 0;
	-webkit-transition: opacity 0.2s linear;
	   -moz-transition: opacity 0.2s linear;
	        transition: opacity 0.2s linear;
	}
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
	opacity: 1;
	}
.leaflet-zoom-animated {
	-webkit-transform-origin: 0 0;
	    -ms-transform-origin: 0 0;
	        transform-origin: 0 0;
	}
svg.leaflet-zoom-animated {
	will-change: transform;
}

.leaflet-zoom-anim .leaflet-zoom-animated {
	-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
	   -moz-transition:    -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
	        transition:         transform 0.25s cubic-bezier(0,0,0.25,1);
	}
.leaflet-zoom-anim .leaflet-tile,
.leaflet-pan-anim .leaflet-tile {
	-webkit-transition: none;
	   -moz-transition: none;
	        transition: none;
	}

.leaflet-zoom-anim .leaflet-zoom-hide {
	visibility: hidden;
	}


/* cursors */

.leaflet-interactive {
	cursor: pointer;
	}
.leaflet-grab {
	cursor: -webkit-grab;
	cursor:    -moz-grab;
	cursor:         grab;
	}
.leaflet-crosshair,
.leaflet-crosshair .leaflet-interactive {
	cursor: crosshair;
	}
.leaflet-popup-pane,
.leaflet-control {
	cursor: auto;
	}
.leaflet-dragging .leaflet-grab,
.leaflet-dragging .leaflet-grab .leaflet-interactive,
.leaflet-dragging .leaflet-marker-draggable {
	cursor: move;
	cursor: -webkit-grabbing;
	cursor:    -moz-grabbing;
	cursor:         grabbing;
	}

/* marker & overlays interactivity */
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-image-layer,
.leaflet-pane > svg path,
.leaflet-tile-container {
	pointer-events: none;
	}

.leaflet-marker-icon.leaflet-interactive,
.leaflet-image-layer.leaflet-interactive,
.leaflet-pane > svg path.leaflet-interactive,
svg.leaflet-image-layer.leaflet-interactive path {
	pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
	pointer-events: auto;
	}

/* visual tweaks */

.leaflet-container {
	background: #ddd;
	outline-offset: 1px;
	}
.leaflet-container a {
	color: #0078A8;
	}
.leaflet-zoom-box {
	border: 2px dotted #38f;
	background: rgba(255,255,255,0.5);
	}


/* general typography */
.leaflet-container {
	font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
	font-size: 12px;
	font-size: 0.75rem;
	line-height: 1.5;
	}


/* general toolbar styles */

.leaflet-bar {
	box-shadow: 0 1px 5px rgba(0,0,0,0.65);
	border-radius: 4px;
	}
.leaflet-bar a {
	background-color: #fff;
	border-bottom: 1px solid #ccc;
	width: 26px;
	height: 26px;
	line-height: 26px;
	display: block;
	text-align: center;
	text-decoration: none;
	color: black;
	}
.leaflet-bar a,
.leaflet-control-layers-toggle {
	background-position: 50% 50%;
	background-repeat: no-repeat;
	display: block;
	}
.leaflet-bar a:hover,
.leaflet-bar a:focus {
	background-color: #f4f4f4;
	}
.leaflet-bar a:first-child {
	border-top-left-radius: 4px;
	border-top-right-radius: 4px;
	}
.leaflet-bar a:last-child {
	border-bottom-left-radius: 4px;
	border-bottom-right-radius: 4px;
	border-bottom: none;
	}
.leaflet-bar a.leaflet-disabled {
	cursor: default;
	background-color: #f4f4f4;
	color: #bbb;
	}

.leaflet-touch .leaflet-bar a {
	width: 30px;
	height: 30px;
	line-height: 30px;
	}
.leaflet-touch .leaflet-bar a:first-child {
	border-top-left-radius: 2px;
	border-top-right-radius: 2px;
	}
.leaflet-touch .leaflet-bar a:last-child {
	border-bottom-left-radius: 2px;
	border-bottom-right-radius: 2px;
	}

/* zoom control */

.leaflet-control-zoom-in,
.leaflet-control-zoom-out {
	font: bold 18px 'Lucida Console', Monaco, monospace;
	text-indent: 1px;
	}

.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out  {
	font-size: 22px;
	}


/* layers control */

.leaflet-control-layers {
	box-shadow: 0 1px 5px rgba(0,0,0,0.4);
	background: #fff;
	border-radius: 5px;
	}
.leaflet-control-layers-toggle {
	background-image: url(images/layers.png);
	width: 36px;
	height: 36px;
	}
.leaflet-retina .leaflet-control-layers-toggle {
	background-image: url(images/layers-2x.png);
	background-size: 26px 26px;
	}
.leaflet-touch .leaflet-control-layers-toggle {
	width: 44px;
	height: 44px;
	}
.leaflet-control-layers .leaflet-control-layers-list,
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
	display: none;
	}
.leaflet-control-layers-expanded .leaflet-control-layers-list {
	display: block;
	position: relative;
	}
.leaflet-control-layers-expanded {
	padding: 6px 10px 6px 6px;
	color: #333;
	background: #fff;
	}
.leaflet-control-layers-scrollbar {
	overflow-y: scroll;
	overflow-x: hidden;
	padding-right: 5px;
	}
.leaflet-control-layers-selector {
	margin-top: 2px;
	position: relative;
	top: 1px;
	}
.leaflet-control-layers label {
	display: block;
	font-size: 13px;
	font-size: 1.08333em;
	}
.leaflet-control-layers-separator {
	height: 0;
	border-top: 1px solid #ddd;
	margin: 5px -10px 5px -6px;
	}

/* Default icon URLs */
.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
	background-image: url(images/marker-icon.png);
	}


/* attribution and scale controls */

.leaflet-container .leaflet-control-attribution {
	background: #fff;
	background: rgba(255, 255, 255, 0.8);
	margin: 0;
	}
.leaflet-control-attribution,
.leaflet-control-scale-line {
	padding: 0 5px;
	color: #333;
	line-height: 1.4;
	}
.leaflet-control-attribution a {
	text-decoration: none;
	}
.leaflet-control-attribution a:hover,
.leaflet-control-attribution a:focus {
	text-decoration: underline;
	}
.leaflet-attribution-flag {
	display: inline !important;
	vertical-align: baseline !important;
	width: 1em;
	height: 0.6669em;
	}
.leaflet-left .leaflet-control-scale {
	margin-left: 5px;
	}
.leaflet-bottom .leaflet-control-scale {
	margin-bottom: 5px;
	}
.leaflet-control-scale-line {
	border: 2px solid #777;
	border-top: none;
	line-height: 1.1;
	padding: 2px 5px 1px;
	white-space: nowrap;
	-moz-box-sizing: border-box;
	     box-sizing: border-box;
	background: rgba(255, 255, 255, 0.8);
	text-shadow: 1px 1px #fff;
	}
.leaflet-control-scale-line:not(:first-child) {
	border-top: 2px solid #777;
	border-bottom: none;
	margin-top: -2px;
	}
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
	border-bottom: 2px solid #777;
	}

.leaflet-touch .leaflet-control-attribution,
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
	box-shadow: none;
	}
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
	border: 2px solid rgba(0,0,0,0.2);
	background-clip: padding-box;
	}


/* popup */

.leaflet-popup {
	position: absolute;
	text-align: center;
	margin-bottom: 20px;
	}
.leaflet-popup-content-wrapper {
	padding: 1px;
	text-align: left;
	border-radius: 12px;
	}
.leaflet-popup-content {
	margin: 13px 24px 13px 20px;
	line-height: 1.3;
	font-size: 13px;
	font-size: 1.08333em;
	min-height: 1px;
	}
.leaflet-popup-content p {
	margin: 17px 0;
	margin: 1.3em 0;
	}
.leaflet-popup-tip-container {
	width: 40px;
	height: 20px;
	position: absolute;
	left: 50%;
	margin-top: -1px;
	margin-left: -20px;
	overflow: hidden;
	pointer-events: none;
	}
.leaflet-popup-tip {
	width: 17px;
	height: 17px;
	padding: 1px;

	margin: -10px auto 0;
	pointer-events: auto;

	-webkit-transform: rotate(45deg);
	   -moz-transform: rotate(45deg);
	    -ms-transform: rotate(45deg);
	        transform: rotate(45deg);
	}
.leaflet-popup-content-wrapper,
.leaflet-popup-tip {
	background: white;
	color: #333;
	box-shadow: 0 3px 14px rgba(0,0,0,0.4);
	}
.leaflet-container a.leaflet-popup-close-button {
	position: absolute;
	top: 0;
	right: 0;
	border: none;
	text-align: center;
	width: 24px;
	height: 24px;
	font: 16px/24px Tahoma, Verdana, sans-serif;
	color: #757575;
	text-decoration: none;
	background: transparent;
	}
.leaflet-container a.leaflet-popup-close-button:hover,
.leaflet-container a.leaflet-popup-close-button:focus {
	color: #585858;
	}
.leaflet-popup-scrolled {
	overflow: auto;
	}

.leaflet-oldie .leaflet-popup-content-wrapper {
	-ms-zoom: 1;
	}
.leaflet-oldie .leaflet-popup-tip {
	width: 24px;
	margin: 0 auto;

	-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
	filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
	}

.leaflet-oldie .leaflet-control-zoom,
.leaflet-oldie .leaflet-control-layers,
.leaflet-oldie .leaflet-popup-content-wrapper,
.leaflet-oldie .leaflet-popup-tip {
	border: 1px solid #999;
	}


/* div icon */

.leaflet-div-icon {
	background: #fff;
	border: 1px solid #666;
	}


/* Tooltip */
/* Base styles for the element that has a tooltip */
.leaflet-tooltip {
	position: absolute;
	padding: 6px;
	background-color: #fff;
	border: 1px solid #fff;
	border-radius: 3px;
	color: #222;
	white-space: nowrap;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
	pointer-events: none;
	box-shadow: 0 1px 3px rgba(0,0,0,0.4);
	}
.leaflet-tooltip.leaflet-interactive {
	cursor: pointer;
	pointer-events: auto;
	}
.leaflet-tooltip-top:before,
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
	position: absolute;
	pointer-events: none;
	border: 6px solid transparent;
	background: transparent;
	content: "";
	}

/* Directions */

.leaflet-tooltip-bottom {
	margin-top: 6px;
}
.leaflet-tooltip-top {
	margin-top: -6px;
}
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-top:before {
	left: 50%;
	margin-left: -6px;
	}
.leaflet-tooltip-top:before {
	bottom: 0;
	margin-bottom: -12px;
	border-top-color: #fff;
	}
.leaflet-tooltip-bottom:before {
	top: 0;
	margin-top: -12px;
	margin-left: -6px;
	border-bottom-color: #fff;
	}
.leaflet-tooltip-left {
	margin-left: -6px;
}
.leaflet-tooltip-right {
	margin-left: 6px;
}
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
	top: 50%;
	margin-top: -6px;
	}
.leaflet-tooltip-left:before {
	right: 0;
	margin-right: -12px;
	border-left-color: #fff;
	}
.leaflet-tooltip-right:before {
	left: 0;
	margin-left: -12px;
	border-right-color: #fff;
	}

/* Printing */

@media print {
	/* Prevent printers from removing background-images of controls. */
	.leaflet-control {
		-webkit-print-color-adjust: exact;
		print-color-adjust: exact;
		}
	}


/* ===== css/pas-map-v7.css ===== */
/* Prime Air Solutions — IP-based service-area map */
.fs-map__frame { position: relative; }

#pas-map {
  width: 100%;
  height: 540px;
  max-width: 100%;
  border: 0;
  border-radius: 8px;
  overflow: hidden;
  background: #e9eef5;
  z-index: 0;
}

#pas-map .leaflet-container { border-radius: 8px; font-family: inherit; }

/* Bottom-gap fix: the map block (.fs-map) takes its height from the contact card
   (.fs-map__content) overlaid on the left. The map itself was a fixed 540px inside a
   560px frame, so when the card was taller (~595px) a blank strip showed below the map
   before the footer. On desktop stretch the frame + map to fill the whole block. */
/* NOTE: 769px, not 768px. pas-animations-v2.css switches the map to the stacked
   mobile layout at `@media (max-width:768px)` (frame forced to a fixed 260px).
   With this block at `min-width:768px` BOTH matched at exactly 768px — a very
   common tablet width (iPad portrait) — and this file loads later, so its
   `height:auto !important` beat the 260px. `#pas-map`'s `height:100%` then
   resolved against an auto-height parent and collapsed to 0: the map vanished
   completely, leaving a blank band between the contact card and the footer.
   Keep the two ranges disjoint. */
@media (min-width: 769px) {
  .fs-map__frame { top: 0 !important; bottom: 0 !important; height: auto !important; }
  #pas-map { height: 100% !important; }
}

/* The contact-card row (.fs-map__content) is a transparent sibling that sits ON
   TOP of the map and was swallowing every click — so the map, its zoom buttons and
   the San Diego/Sacramento toggle were all unclickable. Let clicks pass through the
   transparent area to the map, while keeping the card itself interactive. */
.fs-map__content{ pointer-events:none; }
.fs-map__content .fs-map__block{ pointer-events:auto; }

/* Per-page CSS has `.fs-map__frame a{display:block;width:100%;height:560px}` (plus a
   mobile 260px !important variant) — leftovers for the OLD static-image map. They
   stretch Leaflet's attribution links (and our "Open in Maps" link) to 560px each,
   ballooning the attribution bar so it covers the map's right side and blocks the
   toggle/zoom clicks. Restore normal link sizing inside the Leaflet map. */
.fs-map__frame .leaflet-control-attribution a{
  display:inline !important; width:auto !important; height:auto !important;
}
.fs-map__frame a.pas-map__link{
  display:none !important; width:auto !important; height:auto !important;
}

/* Zoom +/- buttons — proper square buttons styled to match the dark tool column
   (the per-page `.fs-map__frame a{height:560px}` rule otherwise distorts them). */
.fs-map__frame .leaflet-control-zoom{
  border:0 !important; border-radius:10px !important; overflow:hidden;
  box-shadow:0 2px 10px rgba(0,0,0,.28) !important;
}
.fs-map__frame .leaflet-control-zoom a{
  display:flex !important; align-items:center; justify-content:center;
  width:40px !important; height:40px !important; line-height:1 !important;
  background:#2b3038 !important; color:#fff !important; border:0 !important;
  font-size:24px !important; font-weight:400; text-indent:0; text-decoration:none;
}
.fs-map__frame .leaflet-control-zoom a.leaflet-control-zoom-in{ border-bottom:1px solid rgba(255,255,255,.14) !important; }
.fs-map__frame .leaflet-control-zoom a:hover{ background:#3a4047 !important; }
.fs-map__frame .leaflet-control-zoom a.leaflet-disabled{ color:rgba(255,255,255,.35) !important; background:#2b3038 !important; }
@media (max-width:600px){ .fs-map__frame .leaflet-control-zoom a{ width:36px !important; height:36px !important; font-size:21px !important; } }

/* The theme flags embedded maps with .fs-map__frame_disabled and paints a full-cover
   "Click to use the map" ::before overlay (z-index:2) to trap scroll. Our Leaflet map
   already has scroll-wheel zoom off, and that overlay sits ON TOP of the controls and
   blocks the San Diego/Sacramento toggle, the zoom buttons and the pins. Remove it. */
.fs-map__frame_disabled::before{ content:none !important; display:none !important; }
.fs-map__frame_disabled{ pointer-events:auto !important; }

/* Service-area switch (San Diego / Sacramento) — top-right control */
.pas-map-toggle{
  display:flex; background:#fff; border-radius:9px; overflow:hidden;
  box-shadow:0 2px 12px rgba(0,0,0,.22); font-family:inherit;
}
.pas-map-toggle button{
  border:0; background:#fff; color:#2c3340;
  font-size:13px; font-weight:700; line-height:1; letter-spacing:.01em;
  padding:10px 16px; cursor:pointer; white-space:nowrap;
  transition:background .15s ease, color .15s ease;
}
.pas-map-toggle button + button{ border-left:1px solid #eceff4; }
.pas-map-toggle button:hover{ background:#f4f6fa; color:#0b1733; }
.pas-map-toggle button.is-active{ background:#E11D2A; color:#fff; }
@media (max-width:600px){ .pas-map-toggle button{ padding:8px 12px; font-size:12px; } }

/* Comfortable reach: the top-right corner spans the map's full height; the
   region toggle stays pinned at the top while the zoom +/- and the tool column
   float at the map's VERTICAL CENTER — so they're at hand at any page scroll
   position (no need to line the page up with the map's top edge). */
#pas-map .leaflet-top.leaflet-right{
  height:100%;
  display:flex; flex-direction:column; align-items:flex-end;
}
#pas-map .leaflet-top.leaflet-right .leaflet-control-zoom{ margin-top:auto; }
#pas-map .leaflet-top.leaflet-right .pas-map-tools{ margin-bottom:auto; }

/* Map tools — dark rounded icon buttons (fuseservice.com style) */
.pas-map-tools{ display:flex; flex-direction:column; gap:8px; }
.pas-map-tool{
  width:40px; height:40px; padding:0;
  display:flex; align-items:center; justify-content:center;
  background:#2b3038; color:#fff; border:0; border-radius:10px; cursor:pointer;
  box-shadow:0 2px 10px rgba(0,0,0,.28);
  transition:background .15s ease, transform .1s ease;
}
.pas-map-tool svg{ width:20px; height:20px; display:block; }
.pas-map-tool:hover{ background:#3a4047; }
.pas-map-tool:active{ transform:scale(.93); }
.pas-map-tool.is-active{ background:#E11D2A; }
@media (max-width:600px){ .pas-map-tool{ width:36px; height:36px; } .pas-map-tool svg{ width:18px; height:18px; } }

/* Distance label for the measure tool */
.pas-measure-label{
  background:#E11D2A; color:#fff; font-weight:700; font-size:12px; line-height:1; font-family:inherit; white-space:nowrap;
  padding:4px 8px; border-radius:6px; box-shadow:0 3px 10px rgba(225,29,42,.4);
  transform:translate(12px,-28px);
}

/* CRITICAL: the theme stretches every img inside .fs-map__frame to
   `width:100%!important; height:560px!important` (it was built to hold one
   static map image). That collapses Leaflet's 256px tiles to width:0 /
   height:560 so the map paints as a blank box with only the outline showing.
   Restore correct tile sizing (256px tiles keep retina @2x crispness). */
.fs-map__frame .leaflet-tile {
  width: 256px !important;
  height: 256px !important;
  max-width: none !important;
  max-height: none !important;
}
.fs-map__frame .leaflet-marker-pane img,
.fs-map__frame .leaflet-shadow-pane img,
.fs-map__frame .leaflet-image-layer {
  width: auto !important;
  height: auto !important;
  max-width: none !important;
  max-height: none !important;
}

/* The "Open in Google Maps" link lived INSIDE .fs-map__frame (overflow:hidden),
   right after the 540px map, so the frame clipped it — only the tops of the blue
   letters poked out below the map (the "ugly pixels"). The map is fully interactive
   (area toggle, tools, clickable pins), so this redundant link is hidden. */
.pas-map__link {
  display: none !important;
  align-items: center;
  gap: 6px;
  margin-top: 14px;
  font-size: 15px;
  font-weight: 600;
  color: #0A66FF;
  text-decoration: none;
}
.pas-map__link:hover { text-decoration: underline; }
.pas-map__link-city { font-weight: 700; }

/* Keep the Leaflet canvas EXACTLY as tall as the visible frame. On the stacked
   mobile layout pas-animations-v2.css pins `.fs-map__frame` to 260px with
   `overflow:hidden`, but the canvas was 360px (and 540px at exactly 768px) — so
   Leaflet sized the view for a taller box and the bottom third of the service
   area was silently clipped off. Same range as the frame rule (max-width:768px). */
@media (max-width: 768px) {
  #pas-map { height: 260px; }
}

/* Service-area pin + city label on the map */
.pas-map-pin{ position:relative; }
.pas-map-pin__dot{
  position:absolute; left:-8px; top:-8px;
  width:16px; height:16px; border-radius:50%;
  background:#E11D2A; border:3px solid #fff;
  box-shadow:0 2px 8px rgba(225,29,42,.5);
}
.pas-map-pin__label{
  position:absolute; left:14px; top:-14px; white-space:nowrap;
  background:#E11D2A; color:#fff; font-weight:700; font-size:13px;
  padding:4px 10px; border-radius:6px;
  box-shadow:0 4px 14px rgba(225,29,42,.35);
}
.pas-map-pin__label::after{
  content:""; position:absolute; left:-5px; top:50%; transform:translateY(-50%);
  border:5px solid transparent; border-right-color:#E11D2A;
}

/* ===== Global header tweaks (loaded on every page) ===== */
/* Top utility bar: show Blog · Contacts · Membership Plans.
   The per-page CSS hides both secondary menus with `#menu-secondary,
   #menu-secondary-1{display:none!important}` (an id selector), so we have to
   beat it with an equally-strong id-level selector of higher specificity. */
.fs-header__top .fs-header__submenu{ display:flex!important; align-items:center; }
.fs-header__top #menu-secondary{ display:flex!important; align-items:center; gap:1.75rem; flex-wrap:wrap; }
.fs-header__top #menu-secondary .menu-item>a{ font-size:.9rem; font-weight:600; color:#3a4150; }
.fs-header__top #menu-secondary .menu-item>a:hover,
.fs-header__top #menu-secondary .current-menu-item>a{ color:#0A66FF; }

/* Burger breakpoint (≤1280px): the top bar gets cramped, so hide its links and
   surface them inside the slide-out menu instead (the theme already shows the
   content submenu there — we just have to un-hide its list). */
@media (max-width:1280px){
  .fs-header__top .fs-header__submenu{ display:none!important; }
  .fs-header__content #menu-secondary-1{ display:block!important; width:100%; }
  .fs-header__content #menu-secondary-1 .menu-item>a{ font-weight:600; }
}

/* "Membership Plans" stays styled like the other top-bar links — just a faint
   glint sweeps across it now and then to subtly catch the eye. */
.fs-header__top #menu-secondary a[href="membership.html"],
.fs-header__content #menu-secondary-1 a[href="membership.html"]{
  position:relative; overflow:hidden;
}
.fs-header__top #menu-secondary a[href="membership.html"]::after,
.fs-header__content #menu-secondary-1 a[href="membership.html"]::after{
  content:""; position:absolute; top:0; bottom:0; left:0; width:28%;
  background:linear-gradient(110deg, transparent 0%, rgba(255,255,255,.75) 50%, transparent 100%);
  pointer-events:none; will-change:transform;
  animation:pasMemShine 6.5s ease-in-out infinite;
}
/* translateX, not left: `left` relayouts the header on every frame of an infinite
   animation; a transform stays on the compositor. Offsets are % of the 28%-wide
   sweep itself, so -160% ≈ the old left:-45% and 540% ≈ the old left:150%. */
@keyframes pasMemShine{ 0%{transform:translateX(-160%) skewX(-20deg)} 15%{transform:translateX(540%) skewX(-20deg)} 100%{transform:translateX(540%) skewX(-20deg)} }
@media (prefers-reduced-motion: reduce){
  .fs-header__top #menu-secondary a[href="membership.html"]::after,
  .fs-header__content #menu-secondary-1 a[href="membership.html"]::after{ animation:none; display:none; }
}

/* Roomier spacing between main-nav items (was too cramped) */
.fs-header__menu ul{ gap:2rem!important; }
@media (max-width:1200px){ .fs-header__menu ul{ gap:1.35rem!important; } }

/* ===== Keep the cursor sane over the contact form (never let it vanish) ===== */
.wpforms-form, .wpforms-form *{ cursor:auto; }
.wpforms-form input[type="text"], .wpforms-form input[type="email"],
.wpforms-form input[type="tel"], .wpforms-form input[type="url"],
.wpforms-form input[type="number"], .wpforms-form textarea{ cursor:text!important; }
.wpforms-form select, .wpforms-form button, .wpforms-form input[type="submit"],
.wpforms-form input[type="checkbox"], .wpforms-form input[type="radio"],
.wpforms-form label, .wpforms-form a{ cursor:pointer!important; }

/* ===== Blog FAQ accordion (added at the bottom of each article) ===== */
.pas-faq{ margin:8px 0 6px; }
.pas-faq details{ border:1px solid #e6ebf2; border-radius:12px; margin:0 0 12px; background:#fff; }
.pas-faq summary{ cursor:pointer; padding:15px 18px; font-weight:700; font-size:17px; color:#0f1320;
  list-style:none; display:flex; gap:14px; justify-content:space-between; align-items:center; }
.pas-faq summary::-webkit-details-marker{ display:none; }
.pas-faq summary::after{ content:"+"; font-size:24px; line-height:1; color:#E11D2A; font-weight:400; flex:0 0 auto; }
.pas-faq details[open] summary::after{ content:"\2013"; }
.pas-faq details[open] summary{ border-bottom:1px solid #eef1f6; }
.pas-faq details p{ margin:0!important; padding:14px 18px 17px; color:#444e5c; line-height:1.65; font-size:16px; }

/* ===== Mobile burger menu: slide-in left drawer + tap-to-close dimmed backdrop ===== */
.pas-menu-backdrop{
  position:fixed; inset:0; z-index:99998;
  background:rgba(15,23,42,.5);
  opacity:0; visibility:hidden; transition:opacity .25s ease;
}
.pas-menu-backdrop.is-show{ opacity:1; visibility:visible; }
@media (min-width:1281px){
  /* Desktop never uses the burger — keep the backdrop fully out of the way */
  .pas-menu-backdrop{ display:none!important; }
}
@media (max-width:1280px){
  /* When open, the full-screen menu becomes a left drawer; the rest of the screen
     shows the dimmed backdrop, so a tap anywhere outside the menu closes it. */
  .fs-header .fs-header__content.fs-header__content_show{
    position:fixed!important; top:0!important; left:0!important; right:auto!important; bottom:0!important;
    width:min(82vw,340px)!important; max-width:340px!important; height:100%!important;
    overflow-y:auto!important; -webkit-overflow-scrolling:touch;
    z-index:99999!important;
    background:#fff!important;
    box-shadow:18px 0 44px rgba(0,0,0,.30);
    padding-bottom:32px;
  }

  /* ===== Contact form on mobile =====
     The theme turns the contact form into a JS-toggled modal/overlay on small
     screens (opened by a ".js--toggle-touch" button). That toggle lives in the
     dead LiteSpeed-delayed theme bundle, so on a phone the form never opens —
     it looks like "there is no form". Force the form to always show inline and
     hide the now-useless modal chrome. The real submit (.wpforms-submit) stays. */
  .fs-headline__side,
  .fs-touch__overlay,
  .fs-touch__form,
  .fs-touch__form .wpforms-container,
  .fs-touch__form .wpforms-form{
    display:block!important; position:static!important; transform:none!important;
    opacity:1!important; visibility:visible!important; pointer-events:auto!important;
    max-width:100%!important; width:auto!important; height:auto!important;
    left:auto!important; right:auto!important; top:auto!important; bottom:auto!important;
  }
  .fs-touch__overlay-close.js--toggle-touch,
  .fs-touch__cancel.js--toggle-touch,
  .fs-headline .button.button--primary.js--toggle-touch{
    display:none!important;
  }
  /* CRITICAL: the form column's ::before is the modal's full-screen dimmer —
     position:fixed; inset:0; pointer-events:auto — so it sits invisibly over the
     whole page and EATS every tap (form looks visible but is "not clickable").
     Kill the modal backdrop pseudo-elements so the inline form is interactive. */
  .fs-headline__side::before, .fs-headline__side::after,
  .fs-touch__overlay::before, .fs-touch__overlay::after,
  .fs-touch::before, .fs-touch::after{
    display:none!important; content:none!important; pointer-events:none!important;
  }
  /* Belt-and-suspenders: keep the form chain non-layered & fully interactive */
  .fs-touch .fs-headline__side, .fs-touch .fs-touch__overlay{ z-index:auto!important; }
  .fs-touch__form, .fs-touch__form *{ pointer-events:auto!important; }
  /* The form column (.fs-headline__side) carries its own copy of the section
     heading (used as the modal title). With the form now shown inline, that
     duplicates the heading already in .fs-headline__main — hide the copy. */
  .fs-headline__side .fs-headline__subheading,
  .fs-headline__side .fs-headline__title,
  .fs-headline__side .fs-headline__desc{
    display:none!important;
  }
}

/* ---- Served-city pins + labels (map mirrors the city list) ---- */
.leaflet-tooltip.pas-city-tip{
  background:#fff; color:#0b1733; border:0; border-radius:7px;
  box-shadow:0 2px 8px rgba(11,23,51,.32); padding:3px 9px; white-space:nowrap;
  font:800 12.5px/1.1 Inter,-apple-system,Arial,sans-serif; pointer-events:none;
}
.leaflet-tooltip.pas-city-tip::before{ display:none; }   /* clean pill, no arrow */
.pas-city-dot{ filter:drop-shadow(0 1px 2px rgba(0,0,0,.4)); }
/* Anchor city — bold red name pill (e.g. "Sacramento, CA"), like the reference */
.leaflet-tooltip.pas-city-tip--home{
  background:#E11D2A; color:#fff; box-shadow:0 3px 12px rgba(225,29,42,.45);
  font-size:15px; padding:5px 13px; border-radius:9px; letter-spacing:.01em;
}
.pas-city-dot--home{ filter:drop-shadow(0 0 4px rgba(225,29,42,.85)); }
@media (max-width:768px){   /* same breakpoint as the stacked mobile map layout */
  .leaflet-tooltip.pas-city-tip{ font-size:11px; padding:2px 7px; }
  .leaflet-tooltip.pas-city-tip--home{ font-size:12.5px; padding:3px 9px; }
}

/* ---- Bold, unified service-area zone (single neon-glowing outline) ---- */
.pas-area-glow{ filter:drop-shadow(0 0 4px rgba(225,29,42,.9)) drop-shadow(0 0 13px rgba(225,29,42,.5)); }

/* ===== Header main nav — clearer spacing, SITE-WIDE (loaded on every page) ===== */
.fs-header .fs-header__content .fs-header__menu > ul{ gap:34px !important; }
.fs-header .fs-header__content .fs-header__menu .menu-item > a{
  font-weight:600 !important; letter-spacing:.004em; color:#0f1733 !important; transition:color .15s ease;
}
.fs-header .fs-header__content .fs-header__menu .menu-item > a:hover,
.fs-header .fs-header__content .fs-header__menu .current-menu-item > a{
  color:#0A66FF !important; text-decoration:underline; text-underline-offset:7px; text-decoration-thickness:2px;
}
@media (max-width:1240px){ .fs-header .fs-header__content .fs-header__menu > ul{ gap:24px !important; } }
/* Service-area map popup (city click -> ZIP code) */
.pas-pop{ font-family:Inter,Arial,sans-serif; text-align:center; min-width:150px; }
.pas-pop strong{ font-size:15px; color:#0f1320; }
.pas-pop-zip{ display:inline-block; margin-top:5px; font-weight:800; color:#E11D2A; font-size:13.5px; letter-spacing:.01em; }
.pas-pop-sub{ color:#6b7686; font-size:12px; }
.leaflet-popup-content{ margin:11px 15px; }


/* ===== css/pas-services-v2.css ===== */
/* Prime Air Solutions — top-level service categories (Air Conditioning / Heating / Appliance Repair) */
.pas-cat-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:1.25rem;
}
@media (max-width:980px){ .pas-cat-grid{ grid-template-columns:1fr 1fr; } }
@media (max-width:680px){ .pas-cat-grid{ grid-template-columns:1fr; } }

.pas-cat{
  background:var(--color-gray-light,#f5f7fa);
  border:1px solid #e6e9ef;
  border-radius:14px;
  padding:1.75rem 1.6rem;
  display:flex;
  flex-direction:column;
  transition:transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.pas-cat:hover{
  transform:translateY(-4px);
  border-color:#cfe0ff;
  box-shadow:0 16px 34px rgba(10,102,255,.12);
}

.pas-cat__head{ display:flex; align-items:center; gap:.9rem; margin-bottom:.85rem; }
.pas-cat__icon{
  flex:0 0 auto;
  width:58px; height:58px;
  border-radius:14px;
  background:#0A66FF;
  color:#fff;
  display:flex; align-items:center; justify-content:center;
  box-shadow:0 8px 18px rgba(10,102,255,.28);
}
.pas-cat__icon svg{ width:34px; height:34px; }
.pas-cat__title{
  margin:0;
  font-size:1.55rem;
  line-height:1.2;
  font-weight:600;
  color:var(--color-main,#0c1320);
  font-family:var(--font-family-secondary,inherit);
}

.pas-cat__desc{
  margin:0 0 1.15rem;
  color:#5a6473;
  font-size:1rem;
  line-height:1.5;
}

.pas-cat__list{
  list-style:none;
  margin:0 0 1.6rem;
  padding:0;
  display:grid;
  gap:.6rem;
}
.pas-cat__list li{ position:relative; padding-left:1.7rem; }
.pas-cat__list li::before{
  content:"";
  position:absolute; left:.1rem; top:.42em;
  width:9px; height:9px;
  border:2px solid #0A66FF;
  border-radius:50%;
}
.pas-cat__list a{
  color:#2c3340;
  text-decoration:none;
  font-size:1rem;
  font-weight:500;
  transition:color .2s ease;
}
.pas-cat__list a:hover{ color:#0A66FF; text-decoration:underline; }

.pas-cat__btn{
  margin-top:auto;
  align-self:stretch;
  text-align:center;
  justify-content:center;
}

/* ===== Brands strip (HVAC brands we service) =====
   The theme renders this as a Swiper carousel, but the swiper often doesn't
   initialise here — leaving a grid that (a) hides every brand past the 6th and
   (b) collapses the SVG logos to 0×0. Force a clean, full, wrapping row that
   shows ALL brands (previous + current) regardless of swiper state. */
.fs-carousel-image-medium .swiper-wrapper{
  display:flex!important; flex-wrap:wrap;
  justify-content:center; align-items:center;
  gap:1.5rem 2.75rem; transform:none!important;
}
.fs-carousel-image-medium .swiper-slide{
  display:flex!important; align-items:center; justify-content:center;
  width:auto!important; min-width:0!important; margin:0!important; flex:0 0 auto;
}
/* un-hide brands beyond the 6th (theme hides them when swiper isn't initialised) */
.fs-carousel-image-medium .swiper:not(.swiper-initialized) .swiper-wrapper .swiper-slide:nth-child(n+7){display:flex!important}
.fs-carousel-image-medium .swiper-slide img{
  width:auto!important; height:46px!important;
  max-width:160px!important; max-height:46px!important;
  object-fit:contain;
}
.fs-carousel-image-medium .fs-carousel__arrow{display:none!important}

/* ===== Homepage hero: real-photo collage (replaces the artificial composite) ===== */
.pas-hero__collage{
  flex:1 1 55%;
  display:grid;
  grid-template-columns:1.3fr 1fr;
  grid-template-rows:repeat(2, minmax(0, 1fr));
  gap:16px;
  height:480px;            /* definite height so the 1fr rows (and the spanning
                              main photo) resolve cleanly with no empty gap */
  align-self:center;
  position:relative; z-index:2;
}
.pas-hero__pic{
  margin:0; overflow:hidden; border-radius:18px;
  box-shadow:0 22px 48px rgba(11,23,51,.18); background:#e9eef5;
}
.pas-hero__pic img{
  width:100%; height:100%; object-fit:cover; display:block;
  transition:transform .6s cubic-bezier(.16,.84,.44,1);
}
.pas-hero__pic:hover img{ transform:scale(1.05); }
.pas-hero__pic--main{ grid-row:1 / span 2; }
@media (max-width:980px){ .pas-hero__collage{ min-height:380px; gap:12px; } }
@media (max-width:768px){
  .pas-hero__collage{ width:100%; grid-template-columns:1fr 1fr; grid-template-rows:170px 170px; min-height:0; margin-top:10px; }
}
@media (max-width:480px){ .pas-hero__collage{ grid-template-rows:128px 128px; gap:10px; } }

/* ===== Full-bleed photo hero (original full-screen-photo style) ===== */
/* Break the hero out of the page container so the PHOTO spans the full viewport
   width edge-to-edge; the inner .fs-container keeps the text aligned with the
   content blocks below (which stay inside the normal container). */
.pas-hero--photo{ position:relative; overflow:hidden; min-height:620px; display:flex; align-items:center; background:#0b1320;
  width:100vw; max-width:100vw; margin-left:calc(50% - 50vw); margin-right:calc(50% - 50vw); }
.pas-hero--photo .pas-hero__bg{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; object-position:center 26%; z-index:0; }
.pas-hero--photo::after{ content:""; position:absolute; inset:0; z-index:1;
  background:linear-gradient(90deg, rgba(8,14,28,.88) 0%, rgba(8,14,28,.70) 40%, rgba(8,14,28,.32) 70%, rgba(8,14,28,.10) 100%); }
.pas-hero--photo .fs-container{ position:relative; z-index:2; width:100%; }
.pas-hero--photo .pas-hero__text{ max-width:600px; flex:none; }
.pas-hero--photo .pas-hero__eyebrow{ color:#fff; background:rgba(255,255,255,.16); }
.pas-hero--photo .pas-hero__title{ color:#fff; }
.pas-hero--photo .pas-hero__title span{ color:#5aa0ff; }
.pas-hero--photo .pas-hero__desc{ color:rgba(255,255,255,.92); }
.pas-hero--photo .pas-hero__call{ background:rgba(255,255,255,.10); border-color:rgba(255,255,255,.55); color:#fff; }
.pas-hero--photo .pas-hero__call:hover{ background:#fff; border-color:#fff; color:#0b1733; }
.pas-hero--photo .pas-hero__badges img{ filter:drop-shadow(0 4px 12px rgba(0,0,0,.45)); }
@media (max-width:768px){
  .pas-hero--photo{ min-height:540px; }
  .pas-hero--photo .pas-hero__bg{ object-position:center 22%; }
  .pas-hero--photo::after{ background:linear-gradient(180deg, rgba(8,14,28,.45) 0%, rgba(8,14,28,.55) 40%, rgba(8,14,28,.86) 100%); }
}

/* Hero variant whose subject sits on the LEFT (e.g. a technician at work):
   push the headline + dark scrim to the RIGHT and keep the subject in frame. */
.pas-hero--right .pas-hero__bg{ object-position:14% 32%; }
.pas-hero--right.pas-hero--photo::after{
  background:linear-gradient(270deg, rgba(8,14,28,.86) 0%, rgba(8,14,28,.66) 42%, rgba(8,14,28,.30) 72%, rgba(8,14,28,.08) 100%); }
.pas-hero--right .pas-hero__text{ margin-left:auto; }
@media (max-width:768px){
  .pas-hero--right .pas-hero__bg{ object-position:16% 26%; }
  .pas-hero--right.pas-hero--photo::after{
    background:linear-gradient(180deg, rgba(8,14,28,.42) 0%, rgba(8,14,28,.55) 42%, rgba(8,14,28,.86) 100%); }
  .pas-hero--right .pas-hero__text{ margin-left:0; }
}

/* ===== "Services — HVAC & Appliance" tiles =====
   The markup tags the list with .pas-svc-list-even (meant to make the 3 cards
   equal) but the theme never styled that class, so the cards spanned unevenly
   with awkward diagonally-clipped photos. Render 3 equal full-image tiles with a
   readable dark gradient and white text. */
.fs-service-cards__list.pas-svc-list-even{ grid-template-columns:repeat(3,1fr)!important; gap:1.25rem; }
.pas-svc-list-even .fs-service-cards__item-tile{ grid-column:auto!important; min-height:340px; border-radius:14px; }
.pas-svc-list-even .fs-service-cards__image{
  display:block!important; position:absolute!important; inset:0!important;
  width:100%!important; height:100%!important; clip-path:none!important;
}
.pas-svc-list-even .fs-service-cards__image::after{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(11,19,32,.10) 30%, rgba(11,19,32,.55) 64%, rgba(11,19,32,.86) 100%);
}
.pas-svc-list-even .fs-service-cards__about{
  position:relative; z-index:2;
  min-height:340px!important; justify-content:flex-end!important;
  padding:1.5rem!important;
}
.pas-svc-list-even .fs-service-cards__icon{ left:1.5rem; top:1.5rem; z-index:2; }
.pas-svc-list-even .fs-service-cards__icon svg{ filter:drop-shadow(0 2px 6px rgba(0,0,0,.5)); }
.pas-svc-list-even .fs-service-cards__icon svg [fill]{ fill:#fff; }
.pas-svc-list-even .fs-service-cards__title{ color:#fff!important; max-width:none!important; font-weight:600; }
.pas-svc-list-even .fs-service-cards__desc{ color:#fff!important; opacity:.92!important; max-width:none!important; margin-top:.4rem; }
.pas-svc-list-even .fs-service-cards__more{ color:#fff!important; margin-top:1rem; }
@media (max-width:900px){ .fs-service-cards__list.pas-svc-list-even{ grid-template-columns:1fr!important; } }

/* ===== Trustworthy Google-style review cards (avatar · name · time · logo · stars · verified) ===== */
.pas-rev{ background:#fff; border:1px solid #e6ebf3; border-radius:16px; padding:20px;
  box-shadow:0 4px 18px rgba(15,19,32,.07); display:flex; flex-direction:column; gap:13px; }
/* Cards are clickable links to the source review (Yelp / Thumbtack / Google / BBB). */
a.pas-rev{ text-decoration:none; color:inherit; cursor:pointer;
  transition:transform .15s ease, box-shadow .15s ease, border-color .15s ease; }
a.pas-rev:hover{ transform:translateY(-3px); box-shadow:0 12px 30px rgba(15,19,32,.13); border-color:#cdd9ec; }
a.pas-rev:focus-visible{ outline:2px solid #0A66FF; outline-offset:2px; }
a.pas-rev .pas-rev-name{ color:#101826; }
.pas-rev-head{ display:flex; align-items:center; gap:12px; }
.pas-rev-ava{ flex:0 0 auto; width:44px; height:44px; border-radius:50%;
  display:flex; align-items:center; justify-content:center; color:#fff;
  font:800 16px/1 Inter,Arial,sans-serif; letter-spacing:.5px; }
.pas-rev-id{ flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
.pas-rev-name{ font:800 15.5px/1.2 Inter,Arial,sans-serif; color:#101826;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.pas-rev-when{ font-size:13px; color:#6c7684; }
.pas-rev-logo{ flex:0 0 auto; width:22px; height:22px; object-fit:contain; }
.pas-rev-rate{ display:flex; align-items:center; gap:8px; }
.pas-rev-stars{ display:inline-flex; gap:1px; }
.pas-rev-stars svg{ display:block; }
.pas-rev-verified{ display:inline-flex; align-items:center; }
.pas-rev-verified svg{ display:block; }
.pas-rev-text{ margin:0; color:#39424f; font-size:14.5px; line-height:1.6;
  display:-webkit-box; -webkit-line-clamp:6; -webkit-box-orient:vertical; overflow:hidden; }
/* Geo-region toggle: the non-active region's review grid carries [hidden]; this
   beats the .pas-rev-grid{display:grid} rule so the hidden set truly disappears. */
.pas-reviews .pas-rev-grid[hidden]{ display:none; }

/* ===== Header main nav — clearer spacing so items don't run together ===== */
.fs-header .fs-header__content .fs-header__menu > ul{ gap:34px !important; }
.fs-header .fs-header__content .fs-header__menu .menu-item > a{
  font-weight:600 !important; letter-spacing:.004em; color:#0f1733 !important;
  transition:color .15s ease;
}
.fs-header .fs-header__content .fs-header__menu .menu-item > a:hover,
.fs-header .fs-header__content .fs-header__menu .current-menu-item > a{
  color:#0A66FF !important; text-decoration:underline; text-underline-offset:7px; text-decoration-thickness:2px;
}
@media (max-width:1240px){ .fs-header .fs-header__content .fs-header__menu > ul{ gap:24px !important; } }


/* ===== css/pas-lightbox.css ===== */
/* Prime Air Solutions — on-site photo lightbox (no new tab, in-page preview) */
.pas-lb-overlay{
  position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;
  background:rgba(8,12,20,.92);opacity:0;visibility:hidden;transition:opacity .22s ease;
  -webkit-tap-highlight-color:transparent;backdrop-filter:saturate(120%) blur(2px);
}
.pas-lb-overlay.is-open{opacity:1;visibility:visible}
.pas-lb-stage{position:relative;width:92vw;height:88vh;display:flex;align-items:center;justify-content:center}
.pas-lb-figure{margin:0;display:flex;flex-direction:column;align-items:center;gap:14px;max-width:100%;max-height:100%}
.pas-lb-img{
  max-width:92vw;max-height:80vh;width:auto;height:auto;object-fit:contain;border-radius:10px;
  box-shadow:0 24px 70px rgba(0,0,0,.55);background:#0b1320;
  opacity:0;transform:scale(.985);transition:opacity .2s ease,transform .2s ease;
}
.pas-lb-img.is-ready{opacity:1;transform:none}
.pas-lb-cap{
  color:rgba(255,255,255,.92);font:500 14.5px/1.45 Inter,Arial,sans-serif;text-align:center;
  max-width:760px;padding:0 12px;text-shadow:0 1px 2px rgba(0,0,0,.5)
}
.pas-lb-count{
  position:absolute;top:-2px;left:50%;transform:translateX(-50%);
  color:rgba(255,255,255,.7);font:600 13px/1 Inter,Arial,sans-serif;letter-spacing:.04em
}
/* controls */
.pas-lb-btn{
  position:absolute;z-index:2;display:flex;align-items:center;justify-content:center;
  border:0;cursor:pointer;color:#fff;background:rgba(255,255,255,.12);
  border:1px solid rgba(255,255,255,.22);border-radius:999px;transition:background .15s ease,transform .15s ease;
}
.pas-lb-btn:hover{background:rgba(255,255,255,.26)}
.pas-lb-btn:active{transform:scale(.94)}
.pas-lb-btn svg{width:24px;height:24px;stroke:#fff;stroke-width:2.4;fill:none;stroke-linecap:round;stroke-linejoin:round}
.pas-lb-close{top:14px;right:14px;width:46px;height:46px}
.pas-lb-prev,.pas-lb-next{top:50%;transform:translateY(-50%);width:52px;height:52px}
.pas-lb-prev{left:8px}
.pas-lb-next{right:8px}
.pas-lb-prev:active,.pas-lb-next:active{transform:translateY(-50%) scale(.94)}
.pas-lb-spin{position:absolute;width:42px;height:42px;border:3px solid rgba(255,255,255,.25);border-top-color:#fff;border-radius:50%;animation:pas-lb-spin .8s linear infinite;opacity:0;transition:opacity .2s}
.pas-lb-overlay.is-loading .pas-lb-spin{opacity:1}
@keyframes pas-lb-spin{to{transform:rotate(360deg)}}
body.pas-lb-lock{overflow:hidden}
/* gallery grid (self-contained so any page including this file can show a photo gallery) */
.pas-gal{padding:54px 20px;font-family:Inter,-apple-system,Arial,sans-serif;background:#fff}
.pas-gal-inner{max-width:1160px;margin:0 auto}
.pas-gal h2{font:900 clamp(26px,4vw,40px)/1.15 Inter,Arial,sans-serif;letter-spacing:-.02em;color:#0f1320;margin:0 0 8px;text-align:center}
.pas-gal-sub{color:#5a6473;font-size:16px;text-align:center;max-width:680px;margin:0 auto 32px}
.pas-works-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}
.pas-works-grid--few{grid-template-columns:repeat(2,minmax(220px,360px));justify-content:center}
.pas-works-grid--single{grid-template-columns:minmax(260px,460px);justify-content:center}
.pas-work{display:block;border-radius:14px;overflow:hidden;background:#eef2f8;aspect-ratio:4/3;box-shadow:0 4px 16px rgba(15,19,32,.08)}
.pas-work img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .35s ease}
.pas-work:hover img{transform:scale(1.06)}
.pas-work.pas-lb{cursor:zoom-in}
.pas-work.is-extra{display:none}
.pas-works-grid.is-expanded .pas-work.is-extra{display:block}
.pas-works-more{text-align:center;margin-top:24px}
.pas-works-toggle{cursor:pointer;font:700 15px/1 Inter,Arial,sans-serif;color:#0b1733;background:#fff;border:2px solid #0b1733;border-radius:999px;padding:13px 30px;transition:background .15s ease,color .15s ease}
.pas-works-toggle:hover{background:#0b1733;color:#fff}
.pas-works-toggle[hidden]{display:none}
@media(max-width:760px){.pas-works-grid:not(.pas-works-grid--single){grid-template-columns:1fr 1fr!important;gap:10px!important}}
@media(max-width:640px){
  .pas-lb-prev,.pas-lb-next{width:44px;height:44px}
  .pas-lb-prev{left:4px}.pas-lb-next{right:4px}
  .pas-lb-img{max-height:74vh}
  .pas-lb-cap{font-size:13.5px}
}
@media (prefers-reduced-motion: reduce){
  .pas-lb-overlay,.pas-lb-img{transition:none}
  .pas-lb-spin{animation:none}
}


/* ===== css/pas-mobile.css ===== */
/* ============================================================
   pas-mobile.css — site-wide mobile/responsive polish (2026-06)
   Loaded LAST on every page so it wins. Everything is scoped to
   small screens (<=768px / <=480px); desktop is untouched.
   Additive & corrective only — no structural/layout rewrites.
   ============================================================ */

@media (max-width:768px){

  /* --- Long-form article readability (homepage "Top HVAC Services"
         SEO block .fs-easy-editor__wysiwyg + the slim legal pages).
         The WP export shipped tight line-height + near-zero heading
         margins, which read as cramped on a phone. --- */
  .fs-easy-editor__wysiwyg p,
  .fs-page-slim p{ line-height:1.72; margin-bottom:1.05rem; }
  .fs-easy-editor__wysiwyg h2,
  .fs-page-slim h2{ margin:1.5rem 0 .55rem; line-height:1.28; }
  .fs-easy-editor__wysiwyg h3,
  .fs-page-slim h3{ margin:1.25rem 0 .45rem; line-height:1.3; }
  .fs-easy-editor__wysiwyg li,
  .fs-page-slim li{ margin-bottom:.45rem; line-height:1.62; }
  .fs-easy-editor__wysiwyg ul, .fs-easy-editor__wysiwyg ol,
  .fs-page-slim ul, .fs-page-slim ol{ margin:.55rem 0 1rem; }

  /* Long unbreakable strings (URLs, DBA names, emails) must wrap,
     never push the layout or clip at the right edge. */
  .entry-content p, .entry-content li,
  .fs-headline__desc p, .fs-page-slim p, .fs-page-slim li{
    overflow-wrap:break-word; word-wrap:break-word;
  }

  /* --- Homepage photo hero: guarantee text legibility over the
         photo on small screens (the gradient alone can be thin where
         the image is light). --- */
  .pas-hero--photo .pas-hero__title,
  .pas-hero--photo .pas-hero__desc{ text-shadow:0 2px 12px rgba(0,0,0,.5); }

  /* --- Service cards (homepage + service pages). The icon is absolutely
         positioned top-left (top:1.5rem); the title is the first in-flow
         child and was colliding with it. Reserve a top zone (padding-top)
         so the title drops cleanly below the icon. The absolute icon is
         unaffected by padding-top, so they separate. --- */
  .pas-svc-list-even .fs-service-cards__item-tile,
  .pas-svc-list-even .fs-service-cards__about{ min-height:290px!important; }
  .pas-svc-list-even .fs-service-cards__about{ padding:4.6rem 1.25rem 1.5rem!important; }

  /* --- "Our recent work" gallery: photos had mixed aspect ratios.
         Force uniform, cleanly-cropped thumbnails. --- */
  .pas-work{ overflow:hidden; border-radius:12px; }
  .pas-works-grid .pas-work img,
  .pas-works-grid img{
    aspect-ratio:4/3; object-fit:cover;
    width:100%; height:auto; display:block;
  }
}

@media (max-width:480px){
  .pas-svc-list-even .fs-service-cards__item-tile,
  .pas-svc-list-even .fs-service-cards__about{ min-height:270px!important; }
  .pas-works-grid{ grid-template-columns:1fr 1fr!important; gap:10px!important; }
}

/* --- Compact hero for plain text-only pages (Contacts, Legal, etc.)
       Theme default ships 80px bottom padding on the grid which leaves
       a large empty zone below the page title. Collapse it site-wide. --- */
.fs-hero-no-image .fs-hero__grid,
.fs-hero-centered.fs-hero-no-image .fs-hero__grid{
  padding-bottom: 20px !important;
}

/* ============================================================
   HORIZONTAL-OVERFLOW FIXES
   `html,body{overflow-x:hidden}` only HIDES sideways overflow in
   desktop browsers — iOS Safari/Chrome still let the user pan, which
   is what makes a phone show half-empty screens with clipped cards.
   Each rule below removes the actual cause instead of masking it.
   ============================================================ */

/* 1. Call banner full-bleed hack.
      The theme ships `@media (max-width:680px){.fs-callbanner{margin:0 -1.25rem}}`,
      which assumes the banner sits inside a `.fs-container` (20px side padding)
      so the negative margins just cancel it out. On areas.html the exported
      markup drops the banner straight into `.fs-content` (zero padding), so the
      same -20px/-20px pushed it 20px past BOTH viewport edges. Only neutralise
      the un-padded case; every in-container banner keeps its full-bleed look. */
@media (max-width:680px){
  .fs-content > .fs-callbanner{ margin-left:0 !important; margin-right:0 !important; }
}

/* 2. Review cards grid. `minmax(330px,1fr)` cannot shrink below 330px, so on a
      320-370px phone every card ran past the right edge. `min(330px,100%)` keeps
      the 330px preference on roomy screens and collapses to the column width on
      narrow ones. */
.pas-rev-grid{ grid-template-columns:repeat(auto-fill,minmax(min(330px,100%),1fr)); }

/* 3. Contact block: the support@ address is one unbreakable 279px token and the
      flex item defaulted to `min-width:auto`, so it could not shrink — it spilled
      past the right edge on 320px phones. */
.fs-map__contacts-field{ min-width:0; }
.fs-map__contacts-field a,
.fs-map__contacts-field span{ min-width:0; overflow-wrap:anywhere; }

/* 3b. The email is the one value that cannot be shortened or hyphenated:
      "support@yourprimeservice.com" is 279px at the theme's 1.125rem, while the
      card leaves 278px at 390px wide — one pixel short, so it broke mid-word as
      "…yourprimeservice.co / m". Scale just this line so it always lands on a
      single line. Room = viewport - 40 (page gutter) - 40 (card padding)
      - 24 (icon) - 8 (gap); the glyph run is ~15.5x the font size, hence 6.3vw.
      Clamped to 13-18px; overflow-wrap above stays as a last-resort net. */
@media (max-width:768px){
  .fs-map__contacts-field a[href^="mailto:"]{
    font-size:clamp(0.8125rem, calc(6.3vw - 7.2px), 1.125rem);
  }
}

/* 4. DUPLICATE sticky call bar.
      The theme ships its own fixed bottom phone bar `.fs-button-phone`, parked
      off-screen with `transform:translateY(100%)` until something adds
      `.fs-button-phone_show`. In this static export NOTHING ever adds that class
      (it appears only in the two theme stylesheets), so the bar is dead markup —
      but the theme still reserves room for it with
      `body:has(.fs-button-phone) .fs-wrapper{padding-bottom:77px}`.
      Result on a phone: 147px of blank white space under the footer (77px for the
      bar that never appears + 70px for the real one, #pas-callbar, added by
      pas-geo-region-v3.js) — and a second identical "(619) 759-5111" CTA one CSS
      class away from appearing on top of the real one.
      Retire the dead bar and reclaim its space; #pas-callbar is the live one. */
.fs-button-phone{ display:none !important; }
body:has(.fs-button-phone) .fs-wrapper{ padding-bottom:0 !important; }

