/* Furnace King FSE — base layer.
 * Reboot equivalent to the JupiterX/Bootstrap 4 baseline the site was designed on,
 * plus the structural rules the converted documents rely on. Per-document visual
 * values live in assets/css/generated/doc-<id>.css (computed from production). */

*, *::before, *::after { box-sizing: border-box; }
html { line-height: 1.15; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: transparent; }
body { margin: 0; text-align: left; overflow-x: hidden; }
img { vertical-align: middle; border-style: none; }
table { border-collapse: collapse; }
b, strong { font-weight: bolder; }
small { font-size: 80%; font-weight: 400; } /* Bootstrap 4 reboot (JupiterX); browser default is "smaller" */
a { background-color: transparent; }
a:hover { color: #0056b3; text-decoration: underline; }
h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: .5rem; }
p, ul, ol, dl, blockquote, figure { margin-top: 0; margin-bottom: 1rem; }
figure { margin: 0 0 1rem; }
ol ol, ul ul, ol ul, ul ol { margin-bottom: 0; }
.screen-reader-text { border: 0; clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; word-wrap: normal !important; }
[hidden] { display: none !important; }

/* Block-theme scaffolding: no block-gap strips between template parts. */
.wp-site-blocks > *, .wp-site-blocks > .wp-block-template-part { margin-block: 0; }
.wp-site-blocks { padding: 0; }
/* JupiterX let the first section's negative margin collapse through main; core sets flow-root here. */
.fk-main > .wp-block-post-content, .fkd .wp-block-post-content { display: block; }
/* JupiterX main is a stacking context (z-index 20): widgets placed behind content with z-index -1
   (Our Promise photo, blob images) must paint above its white background, not behind it. */
main.fk-main { position: relative; z-index: 20; background: #fff url("../images/line.png") repeat-y; background-position: 50% 50%; }

/* ---------------------------------------------------------------- converted documents */
.fkd { position: relative; }
.fkd :where(h1, h2, h3, h4, h5, h6, p, ul, ol, figure, blockquote, table, hr, details, summary) { margin: 0; padding: 0; }
.fkd :where(ul, ol) { padding: 0; }
.fkd :where(img) { height: auto; max-width: 100%; border: none; border-radius: 0; box-shadow: none; }
.fkd a { text-decoration: none; box-shadow: none; }
.fkd a:hover { text-decoration: none; }
.fkd .wp-block-group { box-sizing: border-box; }

.fke-s { position: relative; display: block; }
.fke-c { position: relative; display: flex; margin-inline: auto; width: 100%; }
.fke-col { position: relative; display: flex; min-height: 1px; }
.fke-ww { position: relative; width: 100%; display: flex; flex-wrap: wrap; align-content: flex-start; }
.fke-w { position: relative; width: 100%; }
/* Elementor: every element inside a column's widget wrap is full width (.elementor-widget-wrap > .elementor-element). */
.fke-ww > .fke-s { width: 100%; }
.fke-con { position: relative; display: flex; }
.fke-ci { display: flex; margin-inline: auto; width: 100%; }
@media (max-width: 767px) {
	.fke-c { flex-wrap: wrap; }
	.fke-col { width: 100%; }
}

/* JupiterX global heading typography (theme_mods jupiterx_typography_h1..h5) for RAW headings only:
   HTML widgets (estimator step labels are Limelight), text editors and post content. Widget headings
   (heading, image-box titles) carry their own converted styles and must not pick this up. */
:where(.fke-w-html, .fke-w-text-editor, .wp-block-post-content) :where(h1, h2, h3, h4, h5) { font-family: Limelight, serif; font-weight: 400; }
:where(.fke-w-html, .fke-w-text-editor, .wp-block-post-content) :where(h1) { font-size: 60px; line-height: 75px; color: #fff; }
:where(.fke-w-html, .fke-w-text-editor, .wp-block-post-content) :where(h2) { font-size: 50px; line-height: 65px; color: #000; }
:where(.fke-w-html, .fke-w-text-editor, .wp-block-post-content) :where(h3) { font-size: 30px; line-height: 40px; color: #000; }
:where(.fke-w-html, .fke-w-text-editor, .wp-block-post-content) :where(h4) { font-size: 24px; line-height: 35px; color: #000; }
:where(.fke-w-html, .fke-w-text-editor, .wp-block-post-content) :where(h5) { font-size: 20px; line-height: 46px; letter-spacing: 1.4px; color: #000; }
@media (max-width: 1024px) { :where(.fke-w-html, .fke-w-text-editor, .wp-block-post-content) :where(h2) { font-size: 30px; } }

/* Headings and text produced from Elementor widgets. */
/* Image-box titles that link (home "Heating" card) keep the title colour, as Elementor's widget CSS does. */
.fkd .fke-ib-t a { color: inherit; }
.fkd .wp-block-heading, .fkd .fke-t { margin: 0; padding: 0; }

/* Images: Elementor centred inline images inside a text-aligned wrapper. */
.fkd .wp-block-image { margin: 0; }
.fkd .wp-block-image img { vertical-align: middle; display: inline-block; }
.fkd .wp-block-image figcaption { margin: 0; }

/* Buttons: Elementor/Raven buttons are inline boxes aligned by the wrapper's text-align.
   Core gives .wp-block-button__link width/height 100%, which (with .wp-block-button display:contents)
   stretched unsized buttons across the band; no production button uses justify alignment. */
.fkd .wp-block-buttons { display: block; gap: 0; }
.fkd .wp-block-buttons > .wp-block-button { display: contents; }
.fkd .wp-block-button__link { display: inline-block; width: auto; height: auto; align-content: normal; border-radius: 0; padding: 0; background: none; color: inherit; font: inherit; text-decoration: none; word-break: normal; cursor: pointer; transition: all .3s; box-sizing: border-box; }
.fkd .wp-block-button__link:hover { text-decoration: none; }
.fk-btn__c { display: flex; align-items: center; justify-content: center; }
/* Raven's .raven-button-content fills the button's content box, so a fixed-height button (60px) centres its
   label; without it the label sat 5-9px high (sweep e). Auto-height buttons are unaffected. */
.fkd .wp-block-button__link > .fk-btn__c { height: 100%; }

/* Spacer and divider. */
.fkd .wp-block-spacer { margin: 0; clear: both; }
.fke-dv { display: flex; }
.fkd hr.wp-block-separator { border: 0; margin: 0; opacity: 1; height: 0; background: none; width: 100%; color: inherit; }

/* Icon list (glyph drawn by a CSS mask so the list stays a plain list). */
.fk-icon-list { list-style: none; margin: 0; padding: 0; }
.fk-icon-list > li { display: flex; align-items: center; position: relative; }
.fk-icon-list > li > a { display: flex; align-items: center; color: inherit; }
.fk-icon-list--inline { display: flex; flex-wrap: wrap; }

/* Icons and social icons (inline owned SVG). */
.fk-icon-wrap { line-height: 1; }
.fk-icon { display: inline-block; line-height: 1; text-align: center; color: inherit; }
.fk-svg { display: inline-block; vertical-align: middle; }
.fk-social { display: flex; flex-wrap: wrap; }
.fk-social__link { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; }
/* Elementor hover animations, copied from e-animation-pulse-shrink.min.css / e-animation-grow.min.css
   (header/footer social icons pulse, home icon boxes grow). Production has no reduced-motion variant. */
@keyframes fk-anim-pulse-shrink { to { transform: scale(.9); } }
.fk-anim-pulse-shrink:active, .fk-anim-pulse-shrink:focus, .fk-anim-pulse-shrink:hover { animation-name: fk-anim-pulse-shrink; animation-duration: .3s; animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; }
.fk-anim-grow { transition-duration: .3s; transition-property: transform; }
.fk-anim-grow:active, .fk-anim-grow:focus, .fk-anim-grow:hover { transform: scale(1.1); }
.fk-social__link svg { width: 1em; height: 1em; }

/* Star rating. */
.fk-stars { display: inline-flex; line-height: 1; }
.fk-star { display: inline-block; vertical-align: top; }

/* Toggles rebuilt as <details>: hide the native marker, Elementor drew its own icon. */
.fke-tg > summary { list-style: none; cursor: pointer; display: flex; align-items: center; }
.fke-tg > summary::-webkit-details-marker { display: none; }

/* Maps / embeds. */
.fk-map iframe { display: block; border: 0; width: 100%; }
.fkd .wp-block-embed { margin: 0; }

/* Gravity Forms baseline (Gravity Forms' own CSS is off; per-form values are generated). */
/* Selects: Elementor Pro hid the native arrow and drew its eicons caret 10px from the right with a soft
   shadow (.elementor-select-wrapper::before); the same on the Gravity Forms select container. */
.fk-gf-wrap .ginput_container_select { position: relative; display: flex; width: 100%; }
.fk-gf-wrap .ginput_container_select select { -webkit-appearance: none; -moz-appearance: none; appearance: none; flex-basis: 100%; padding-inline-end: 20px; }
.fk-gf-wrap .ginput_container_select::before { content: ""; position: absolute; top: 50%; right: 10px; transform: translateY(-50%); width: 11px; height: 15px; pointer-events: none; background-color: currentColor; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 9 5'%3E%3Cpath d='M0 0h9L4.5 5z'/%3E%3C/svg%3E") center / 11px 6px no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 9 5'%3E%3Cpath d='M0 0h9L4.5 5z'/%3E%3C/svg%3E") center / 11px 6px no-repeat; filter: drop-shadow(0 0 3px rgba(0, 0, 0, .3)); z-index: 1; }
.fk-gf-wrap .gform_wrapper, .fk-gf-wrap form { margin: 0; }
.fk-gf-wrap .gform_fields { display: flex; flex-wrap: wrap; }
.fk-gf-wrap .gfield { box-sizing: border-box; width: 100%; min-width: 0; }
.fk-gf-wrap .ginput_container { width: 100%; }
.fk-gf-wrap .hidden_label > .gfield_label, .fk-gf-wrap .gfield_label.screen-reader-text, .fk-gf-wrap .gform_validation_container, .fk-gf-wrap .gfield--type-honeypot { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; margin: -1px; padding: 0; border: 0; }
.fk-gf-wrap .gfield_validation_message, .fk-gf-wrap .validation_message { color: #c02b0a; font-size: 14px; line-height: 1.4; margin-top: 4px; width: 100%; }
.fk-gf-wrap .gfield_error input, .fk-gf-wrap .gfield_error textarea, .fk-gf-wrap .gfield_error select { border-color: #c02b0a !important; }
.fk-gf-wrap .gform_validation_errors { color: #c02b0a; margin: 0 0 12px; font-size: 14px; }
.fk-gf-wrap .gform_confirmation_message { padding: 10px 0; }
.fk-gf-wrap .gform_ajax_spinner { margin-left: 10px; width: 20px; height: 20px; }
.fk-gf-wrap .gform_button { cursor: pointer; -webkit-appearance: none; appearance: none; }
.fk-gf-wrap .gform_footer { width: 100%; }

/* Carousels (fk.js lays out slides; settings are CSS custom properties). */
.fk-carousel { position: relative; }
.fk-carousel__viewport { overflow: hidden; position: relative; transition: height .3s; }
.fk-carousel__track { display: flex; flex-wrap: nowrap; transition-property: transform; transition-timing-function: ease; will-change: transform; }
.fk-carousel__track > * { flex: 0 0 100%; min-width: 0; margin: 0; }
.fk-carousel__prev, .fk-carousel__next { position: absolute; z-index: 2; display: flex; align-items: center; justify-content: center; background: none; border: 0; padding: 0; cursor: pointer; color: inherit; }
.fk-carousel__prev svg, .fk-carousel__next svg { width: 1em; height: 1em; }
.fk-imgs .fk-carousel__slide { margin: 0; }
.fk-tm__comment, .fk-tm__name, .fk-tm__position { margin: 0; }
.fk-tm__icon svg { display: block; }
.fk-share { display: flex; flex-wrap: wrap; margin: 0; padding: 0; }
.fk-share__btn { display: flex; align-items: center; text-decoration: none !important; overflow: hidden; }

/* Scroll motion (fk.js sets the transform). */
.fk-motion { transition: transform 100ms cubic-bezier(0, .33, .07, 1.03); }

/* Shape dividers keep Elementor's geometry; the generated file sets size/colour. */
.fk-shape svg { display: block; }

/* Breadcrumbs block (Raven default markup). */
.fk-breadcrumbs .breadcrumb { display: flex; flex-wrap: wrap; padding: 0; margin: 0; list-style: none; justify-content: inherit; }
.fk-breadcrumbs, .fk-breadcrumbs .raven-breadcrumbs-default { display: block; }
.fk-breadcrumbs .breadcrumb-item + .breadcrumb-item { padding-left: .5rem; }
.fk-breadcrumbs .breadcrumb-item + .breadcrumb-item::before { display: inline-block; padding-right: .5rem; content: "/"; color: inherit; }
.fk-breadcrumbs a { color: inherit; }

@media (prefers-reduced-motion: reduce) {
	.fkd *, .fk-header * { transition-duration: 0s !important; }
}

/* Post grids: Raven spaces columns with negative grid margins + item padding; core's
   .wp-block-post-template{max-width:100%} capped the grid and ate the margins (blog cards 300 vs 330px). */
.fkd .fk-posts__grid { max-width: none; }

/* JupiterX ships Bootstrap 4's reboot: form controls inherit font and line height. Raw HTML widgets rely
   on it (estimator calculator cards were 8px shorter with the browser's line-height:normal). */
.fke-w-html :where(input, button, select, optgroup, textarea) { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; }

/* Core gives :where(.wp-block-post-excerpt) block-gap margins (24px); Elementor/Raven excerpts have none
   (home blog cards sat 11px low). Converted rules still set the measured margin-bottom. */
.fkd .wp-block-post-excerpt { margin-top: 0; margin-bottom: 0; }

/* Bootstrap's p { margin-bottom: 1rem } on production for text editors, HTML widgets and post content.
   Specificity sits between the .fkd reset and the measured per-widget rules (Mississauga guidance
   paragraphs lost their 16px gaps when the sampled paragraph carried an inline margin). */
.fkd :where(.fke-w-text-editor, .fke-w-html, .wp-block-post-content) p { margin-bottom: 1rem; }
