{"id":16258434,"date":"2025-04-24T05:03:09","date_gmt":"2025-04-24T09:03:09","guid":{"rendered":"https:\/\/moovair.com\/?page_id=16258434"},"modified":"2026-02-25T11:36:14","modified_gmt":"2026-02-25T16:36:14","slug":"mistral-heat-pump","status":"publish","type":"page","link":"https:\/\/moovair.com\/en-ca\/mistral-heat-pump\/","title":{"rendered":"Mistral Heat Pump (Essential)"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;d50c1bc5-13b0-4764-b297-558025908a7b&#8221; background_image=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/Moovair-Mistral-Desktop-Banner-1.png&#8221; background_position=&#8221;top_center&#8221; hover_enabled=&#8221;0&#8243; background_image_tablet=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/Moovair-Mistral-Desktop-Banner-1.png&#8221; background_image_phone=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/Moovair-Mistral-Mobile-Banner-1.png&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221; min_height_last_edited=&#8221;on|desktop&#8221; min_height=&#8221;545px&#8221; sticky_enabled=&#8221;0&#8243; min_height_tablet=&#8221;545px&#8221; min_height_phone=&#8221;545px&#8221;][et_pb_row column_structure=&#8221;3_5,2_5&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;rgba(41,48,60,0.85)&#8221; max_width=&#8221;1360px&#8221; custom_margin_tablet=&#8221;0px||||false|false&#8221; custom_margin_phone=&#8221;0px||||false|false&#8221; custom_margin_last_edited=&#8221;on|phone&#8221; custom_padding=&#8221;20px|5px|20px|5px|false|false&#8221; custom_css_main_element=&#8221;display: flex;||justify-content: center;||align-items: center;&#8221; global_colors_info=&#8221;{}&#8221; custom_css_main_element_last_edited=&#8221;on|phone&#8221; custom_css_main_element_phone=&#8221;display: block;&#8221; custom_css_main_element_tablet=&#8221;display: flex;||justify-content: center;||align-items: center;&#8221;][et_pb_column type=&#8221;3_5&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; header_font=&#8221;Cera Pro Black|900||on|||||&#8221; header_text_color=&#8221;#FFFFFF&#8221; header_font_size=&#8221;70px&#8221; header_2_font=&#8221;|700||on|||||&#8221; header_2_text_color=&#8221;#FFFFFF&#8221; header_2_font_size=&#8221;42px&#8221; header_3_text_color=&#8221;#FFFFFF&#8221; header_3_font_size=&#8221;28px&#8221; header_3_line_height=&#8221;1.1em&#8221; background_color=&#8221;RGBA(255,255,255,0)&#8221; custom_padding=&#8221;|||25px|false|false&#8221; custom_padding_tablet=&#8221;25px|25px|25px||false|false&#8221; custom_padding_phone=&#8221;|15px||15px|false|false&#8221; custom_padding_last_edited=&#8221;on|desktop&#8221; animation_style=&#8221;fade&#8221; header_font_size_tablet=&#8221;48px&#8221; header_font_size_phone=&#8221;28px&#8221; header_font_size_last_edited=&#8221;on|desktop&#8221; header_2_font_size_tablet=&#8221;42px&#8221; header_2_font_size_phone=&#8221;24px&#8221; header_2_font_size_last_edited=&#8221;on|tablet&#8221; header_3_font_size_tablet=&#8221;24px&#8221; header_3_font_size_phone=&#8221;20px&#8221; header_3_font_size_last_edited=&#8221;on|desktop&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<p><!--<\/p>\n\n\n\n\n<h1 style=\"font-family: Cera Pro Black;\">Mistral <span style=\"font-family: Cera Pro;\">(Essential)<\/span><\/h1>\n\n\n\n\n<h2>Smart comfort made affordable<\/h2>\n\n\n\n\n<h3>Up to 25.8 SEER2 | 9.2 HSPF2 Region 5 | Heating to -25\u00b0C<\/h3>\n\n\n\n\n<p>--><br \/><span style=\"font-family: 'Cera Pro Black', Helvetica, Arial, Lucida, sans-serif; font-weight: 900; text-transform: uppercase; line-height: 1; font-size: 3rem; color: #ffffff !important;\">Mistral <span style=\"font-family: Cera Pro;\">(Essential)<\/span><\/span><\/p>\n<p style=\"padding-bottom: 20px; line-height: 1; font-family: 'Cera Pro', Helvetica, Arial, Lucida, sans-serif; font-weight: bold; text-transform: uppercase; font-size: 2rem; color: #ffffff !important;\">mart comfort made affordable<\/p>\n<p style=\"font-size: 1.2rem; color: #ffffff !important; line-height: 1.1em;\">Up to 25.8 SEER2 | 9.2 HSPF2 Region 5 | Heating to -25\u00b0C<\/p>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=&#8221;2_5&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/Moovair_Mistral_Unit.png&#8221; alt=&#8221;Moovair &#8211; Mistral Heat Pump&#8221; title_text=&#8221;Moovair_Mistral_Unit&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; max_width_tablet=&#8221;50%&#8221; max_width_phone=&#8221;50%&#8221; max_width_last_edited=&#8221;on|tablet&#8221; module_alignment=&#8221;center&#8221; custom_padding=&#8221;|20px|||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;cbebb943-82e8-4ec0-947d-cf77e34c50de&#8221; custom_margin=&#8221;0px|0px|0px|0px|false|false&#8221; custom_padding=&#8221;10px|0px|10px|0px|false|false&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;50px||||false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; header_font=&#8221;||||on|||#e35425|&#8221; header_font_size=&#8221;44px&#8221; header_2_font=&#8221;|700||||||#e35425|solid&#8221; header_font_size_tablet=&#8221;28px&#8221; header_font_size_phone=&#8221;30px&#8221; header_font_size_last_edited=&#8221;on|desktop&#8221; global_colors_info=&#8221;%91%93&#8243;]<!-- \n\n<h2 style=\"text-transform: uppercase; display: inline-block; border-bottom: 4px solid #e35425; padding-bottom: 4px;\">A value-driven solution with a compact design and easy installation.<\/h2>\n\n --><\/p>\n<h1 style=\"text-decoration:none; text-transform: uppercase; display: inline-block; padding-bottom: 4px;\">MISTRAL Heat Pump by Moovair:<br \/>\n<span style=\"font-size:0.8em\">Affordable, Without Compromising Quality <\/span><\/h1>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_2,1_2&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; module_alignment=&#8221;center&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<style class=\"wpcode-css-snippet\">:not(:defined)>* {\r\n    display: none;\r\n}\r\n\r\n.test-div {\r\n  width: 80%;\r\n  height: 80%;\r\n}\r\n\r\n\r\n\/* Responsive model-viewer *\/\r\nmodel-viewer {\r\n    width: 100%;\r\n    max-width: 640px;\r\n    height: auto;\r\n    aspect-ratio: 4 \/ 3; \/* Keeps proper proportions on all screens *\/\r\n    margin: 0 auto;\r\n    border-radius: 10px;\r\n    background-color: #fff;\r\n    box-sizing: border-box;\r\n    position: relative;\r\n}\r\n\r\n\/* Tablet *\/\r\n@media (min-width: 768px) and (max-width: 1024px) {\r\n    model-viewer {\r\n        width: 90%;\r\n        max-width: 720px;\r\n        aspect-ratio: 4 \/ 3;\r\n    }\r\n}\r\n\r\n\/* Desktop *\/\r\n@media (min-width: 1025px) {\r\n    model-viewer {\r\n        width: 680px;\r\n        height: 540px; \/* Desktop fixed size *\/\r\n        aspect-ratio: unset;\r\n    }\r\n}\r\n\r\n#ar-button {\r\n    background-image: url(https:\/\/cdn2.moovair.com\/ar\/_assets\/ic_view_in_ar_new_googblue_48dp.png);\r\n    background-repeat: no-repeat;\r\n    background-size: 20px 20px;\r\n    background-position: 12px 50%;\r\n    background-color: #fff;\r\n    position: absolute;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    white-space: nowrap;\r\n    bottom: 20px;\r\n    padding: 0px 16px 0px 40px;\r\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;\r\n    font-size: 14px;\r\n    font-weight: 500;\r\n    color: #4285f4;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    border-radius: 18px;\r\n    border: 1px solid #DADCE0;\r\n}\r\n\r\n#ar-button:active {\r\n    background-color: #E8EAED;\r\n}\r\n\r\n#ar-button:focus {\r\n    outline: none;\r\n}\r\n\r\n#ar-button:focus-visible {\r\n    outline: 1px solid #4285f4;\r\n}\r\n\r\n#logo-overlay {\r\n    position: absolute;\r\n    \/* KEY CHANGE: Reduced bottom padding from 20px to 10px *\/\r\n    bottom: -42px;\r\n    right: 10px;\r\n    width: 80px;\r\n    height: 80px;\r\n    object-fit: contain;\r\n    border-radius: 8px;\r\n    pointer-events: none;\r\n}\r\n\r\n.sel {\r\n  margin-top: -15px;\r\n  margin-left: 30px;\r\n  float: left;\r\n  width: 30vw;\r\n  \/* position: absolute; *\/\r\n  \/* display: inline-block; *\/\r\n  \/* left: 175px; *\/\r\n  \/* font-family: Arial, Helvetica, sans-serif; *\/\r\n  \/* background-color: rgb(147, 200, 147); *\/\r\n}\r\n\r\n.label {    \/* capacity *\/\r\n  \/* background-color: red; *\/\r\n  \/* display: inline-block; *\/\r\n  \/* height: 20px; *\/\r\n  \/* width: 78px; *\/\r\n  \/* width: 50vw; *\/\r\n  width: 100%;\r\n  text-align: left;\r\n  vertical-align: middle;\r\n  margin-bottom: 8px;\r\n  font-size: 1.8vh;\r\n  float: left;\r\n  clear: both;\r\n  \/* height: 50%; *\/\r\n\r\n  }\r\n\r\n.dropdown {\r\n  float: left;\r\n  background-color: white;\r\n  clear: both;\r\n  height: 2.5vh;\r\n  \/* width: 50vw; *\/\r\n  \/* width: 100%; *\/\r\n  \/* font-size: 1rem; *\/\r\n  font-size: 1.6vh;\r\n}\r\n\r\n.dropdown option {\r\n   \/* font-size: 1rem; *\/\r\n   font-size: 11pt;\r\n   \/* font-size: 1.6vh; *\/\r\n}\r\n\r\n.btns {\r\n  \/* position: relative; *\/\r\n  position: absolute;\r\n  \/* width: 90%; *\/\r\n  \/* width: 100px; *\/\r\n  \/* height: 50px; *\/\r\n  height: 5vh;\r\n  width: 100vw;\r\n  bottom: 0;\r\n  margin-bottom: 0;\r\n  \/* background-color: rgb(115, 0, 255); *\/\r\n  overflow: visible;\r\n margin-bottom:30px;\r\n}\r\n\r\n\/* measure button *\/\r\n.b1, .b2, .b3 {   \r\n  \/* position: absolute; *\/\r\n  \/* display: inline-block; *\/\r\n  \/* left: 110px; *\/\r\n  margin-left: 30px;\r\n  float: left;\r\n  white-space: nowrap;\r\n  height: 100%;\r\n}\r\n\r\n  .dot {\r\n    display: none;\r\n  }\r\n  \r\n  .glass {\r\n    background: rgba(255, 255, 255, 0.37);\r\n    backdrop-filter: blur(8px) contrast(0.89) saturate(1.27);\r\n    -webkit-backdrop-filter: blur(8px) contrast(0.89) saturate(1.27);\r\n    border: 1px solid rgba(255, 255, 255, 0.4);\r\n    padding: 0.5rem;\r\n    border-radius: 0.5rem;\r\n  }\r\n  \r\n  .dim {\r\n    border-radius: 4px;\r\n    border: none;\r\n    box-sizing: border-box;\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25);\r\n    color: rgba(0, 0, 0, 0.8);\r\n    display: block;\r\n    font-family: Futura, Helvetica Neue, sans-serif;\r\n    \/* font-size: 1em; *\/\r\n    font-size: 1.6vh;\r\n    font-weight: 700;\r\n    max-width: 128px;\r\n    overflow-wrap: break-word;\r\n    padding: 8px;\r\n    position: absolute;\r\n    width: max-content;\r\n    height: max-content;\r\n    transform: translate3d(-50%, -50%, 0);\r\n    pointer-events: none;\r\n    --min-hotspot-opacity: 0;\r\n  }\r\n  \r\n  \/* @media only screen and (max-width: 800px) {\r\n    .dim {\r\n      font-size: 3vw;\r\n    }\r\n  } *\/\r\n  \r\n  .dimensionLineContainer {\r\n    pointer-events: none;\r\n    display: block;\r\n  }\r\n  \r\n  .dimensionLine {\r\n    stroke: #16a5e6;\r\n    stroke-width: 2;\r\n    stroke-dasharray: 2;\r\n  }\r\n  \r\n  .hide {\r\n    display: none;\r\n  }\r\n\r\n  :not(:defined)>* {\r\n    display: none;\r\n  }\r\n  \r\n  #ar-button {\r\n    background-image: url(https:\/\/cdn2.moovair.com\/ar\/_assets\/ic_view_in_ar_new_googblue_48dp.png);\r\n    background-repeat: no-repeat;\r\n    background-size: 20px 20px;\r\n    background-position: 12px 50%;\r\n    background-color: #fff;\r\n    position: absolute;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    white-space: nowrap;\r\n    bottom: 132px;\r\n    padding: 0px 16px 0px 40px;\r\n    font-family: Roboto Regular, Helvetica Neue, sans-serif;\r\n    font-size: 14px;\r\n    color:#4285f4;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    border-radius: 18px;\r\n    border: 1px solid #DADCE0;\r\n  }\r\n\r\n  #ar-button:active {\r\n    background-color: #E8EAED;\r\n  }\r\n\r\n  #ar-button:focus {\r\n    outline: none;\r\n  }\r\n\r\n  #ar-button:focus-visible {\r\n    outline: 1px solid #4285f4;\r\n  }\r\n\r\n  @keyframes circle {\r\n    from { transform: translateX(-50%) rotate(0deg) translateX(50px) rotate(0deg); }\r\n    to   { transform: translateX(-50%) rotate(360deg) translateX(50px) rotate(-360deg); }\r\n  }\r\n\r\n  @keyframes elongate {\r\n    from { transform: translateX(100px); }\r\n    to   { transform: translateX(-100px); }\r\n  }\r\n\r\n  model-viewer > #ar-prompt {\r\n    position: absolute;\r\n    left: 50%;\r\n    bottom: 175px;\r\n    animation: elongate 2s infinite ease-in-out alternate;\r\n    display: none;\r\n  }\r\n\r\n  model-viewer[ar-status=\"session-started\"] > #ar-prompt {\r\n    display: block;\r\n  }\r\n\r\n  model-viewer > #ar-prompt > img {\r\n    animation: circle 4s linear infinite;\r\n  }\r\n\r\n  model-viewer > #ar-failure {\r\n    position: absolute;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    bottom: 175px;\r\n    display: none;\r\n  }\r\n\r\n  model-viewer[ar-tracking=\"not-tracking\"] > #ar-failure {\r\n    display: block;\r\n  }<\/style>[\/et_pb_code][et_pb_code _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;-70px||||false|false&#8221; custom_margin_tablet=&#8221;0px||||false|false&#8221; custom_margin_phone=&#8221;0px||||false|false&#8221; custom_margin_last_edited=&#8221;on|phone&#8221; global_colors_info=&#8221;{}&#8221;]<!--<link rel=\"stylesheet\" href=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/moovair.css\"> --><!-- [et_pb_line_break_holder] --><!--<script type=\"module\" src=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/moovair.js\"><\/script> --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->let base_URL = \"https:\/\/cdn2.moovair.com\/ar\/ar\/\";<!-- [et_pb_line_break_holder] --> \/\/ let base_URL = \"ar\/ar\/\";   \/\/ for local tests<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let type_model = \"outdoor\";<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  let use_two_outdoor_buttons = false;   \/\/ example: Myriad<!-- [et_pb_line_break_holder] -->  \/\/ let use_two_indoor_buttons = false;   \/\/ example: Mix moov <!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let capacities = [];<!-- [et_pb_line_break_holder] -->  let widths = [];<!-- [et_pb_line_break_holder] -->  let deeps = [];<!-- [et_pb_line_break_holder] -->  let heights = [];<!-- [et_pb_line_break_holder] -->  let offsets = [];<!-- [et_pb_line_break_holder] -->  let explodes = [];<!-- [et_pb_line_break_holder] -->  let enable_b = [];<!-- [et_pb_line_break_holder] -->  let glbs = [];<!-- [et_pb_line_break_holder] -->  let usdz = [];<!-- [et_pb_line_break_holder] -->  let consolle = [];<!-- [et_pb_line_break_holder] -->  let cassette = [];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ TO DISABLE A DROPBOX ELEMENT ONLY SET NAME EMPTY<!-- [et_pb_line_break_holder] -->  \/\/ SET ADITIONAL ANIM TO TRUE WHEN IN A DOUBLE FAN MODEL ONLY A FAN ROTATE<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ OUTDOORS 1<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  \/\/ OUTDOOR A<!-- [et_pb_line_break_holder] -->  let outdoor_a = \"mistral_x2\";<!-- [et_pb_line_break_holder] -->  capacities[outdoor_a] = \"9K\/12K\/15K BTU\";<!-- [et_pb_line_break_holder] -->  glbs[outdoor_a] = base_URL + outdoor_a + \".glb\";<!-- [et_pb_line_break_holder] -->  usdz[outdoor_a] = base_URL + outdoor_a + \".usdz\";<!-- [et_pb_line_break_holder] -->  widths[outdoor_a ] = \"30.1 in\";<!-- [et_pb_line_break_holder] -->  deeps[outdoor_a] = \"11.9 in\";<!-- [et_pb_line_break_holder] -->  heights[outdoor_a] = \"21.9 in\";<!-- [et_pb_line_break_holder] -->  offsets[outdoor_a] = 0.5;<!-- [et_pb_line_break_holder] -->  explodes[outdoor_a] = false;<!-- [et_pb_line_break_holder] -->  cassette[outdoor_a] = false;<!-- [et_pb_line_break_holder] -->  consolle[outdoor_a] = false;<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  \/\/ OUTDOOR B<!-- [et_pb_line_break_holder] -->  let outdoor_b = \"mistral_x4\";<!-- [et_pb_line_break_holder] -->  capacities[outdoor_b] = \"18K\/24K BTU\";<!-- [et_pb_line_break_holder] -->  glbs[outdoor_b] = base_URL + outdoor_b + \".glb\";<!-- [et_pb_line_break_holder] -->  usdz[outdoor_b] = base_URL + outdoor_b + \".usdz\";<!-- [et_pb_line_break_holder] -->  widths[outdoor_b ] = \"35 in\";<!-- [et_pb_line_break_holder] -->  deeps[outdoor_b] = \"13.5 in\";<!-- [et_pb_line_break_holder] -->  heights[outdoor_b] = \"26.5 in\";<!-- [et_pb_line_break_holder] -->  offsets[outdoor_b] = 1.0;<!-- [et_pb_line_break_holder] -->  explodes[outdoor_b] = false;<!-- [et_pb_line_break_holder] -->  cassette[outdoor_b] = false;<!-- [et_pb_line_break_holder] -->  consolle[outdoor_b] = false;<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  \/\/ OUTDOOR C<!-- [et_pb_line_break_holder] -->  let outdoor_c = \"\";<!-- [et_pb_line_break_holder] -->  capacities[outdoor_c] = \"18K\/24K BTU\";<!-- [et_pb_line_break_holder] -->  glbs[outdoor_c] = base_URL + outdoor_c + \".glb\";<!-- [et_pb_line_break_holder] -->  usdz[outdoor_c] = base_URL + outdoor_c + \".usdz\";<!-- [et_pb_line_break_holder] -->  widths[outdoor_c ] = \"40 in\";<!-- [et_pb_line_break_holder] -->  deeps[outdoor_c] = \"40 in\";<!-- [et_pb_line_break_holder] -->  heights[outdoor_c] = \"40 in\";<!-- [et_pb_line_break_holder] -->  offsets[outdoor_c] = 1.0;<!-- [et_pb_line_break_holder] -->  explodes[outdoor_c] = false;<!-- [et_pb_line_break_holder] -->  cassette[outdoor_c] = true;<!-- [et_pb_line_break_holder] -->  consolle[outdoor_c] = false;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ OUTDOOR D<!-- [et_pb_line_break_holder] -->  let outdoor_d = \"\";<!-- [et_pb_line_break_holder] -->  capacities[outdoor_d] = \"\";<!-- [et_pb_line_break_holder] -->  glbs[outdoor_d] = base_URL + outdoor_d + \".glb\";<!-- [et_pb_line_break_holder] -->  usdz[outdoor_d] = base_URL + outdoor_d + \".usdz\";<!-- [et_pb_line_break_holder] -->  widths[outdoor_d ] = \"\";<!-- [et_pb_line_break_holder] -->  deeps[outdoor_d] = \"\";<!-- [et_pb_line_break_holder] -->  heights[outdoor_d] = \"\";<!-- [et_pb_line_break_holder] -->  offsets[outdoor_d] = 0.2;<!-- [et_pb_line_break_holder] -->  explodes[outdoor_d] = false;<!-- [et_pb_line_break_holder] -->  cassette[outdoor_d] = false;<!-- [et_pb_line_break_holder] -->  consolle[outdoor_d] = false;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ -----------------------------------------------------------<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ OUTDOORS 2  \/\/ only Myriad<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  \/\/ OUTDOOR 2 A<!-- [et_pb_line_break_holder] -->  let outdoor_2_a = \"\";<!-- [et_pb_line_break_holder] -->  capacities[outdoor_2_a] = \"\";<!-- [et_pb_line_break_holder] -->  glbs[outdoor_2_a] = base_URL + outdoor_2_a + \".glb\";<!-- [et_pb_line_break_holder] -->  usdz[outdoor_2_a] = base_URL + outdoor_2_a + \".usdz\";<!-- [et_pb_line_break_holder] -->  widths[outdoor_2_a ] = \"35.04 in\";<!-- [et_pb_line_break_holder] -->  deeps[outdoor_2_a] = \"13.46 in\";<!-- [et_pb_line_break_holder] -->  heights[outdoor_2_a] = \"12.5 in\";<!-- [et_pb_line_break_holder] -->  offsets[outdoor_2_a] = 0.5;<!-- [et_pb_line_break_holder] -->  explodes[outdoor_2_a] = false;<!-- [et_pb_line_break_holder] -->  cassette[outdoor_2_a] = false;<!-- [et_pb_line_break_holder] -->  consolle[outdoor_2_a] = false;<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  \/\/ OUTDOOR 2 B<!-- [et_pb_line_break_holder] -->  let outdoor_2_b = \"\";<!-- [et_pb_line_break_holder] -->  capacities[outdoor_2_b] = \"\";<!-- [et_pb_line_break_holder] -->  glbs[outdoor_2_b] = base_URL + outdoor_2_b + \".glb\";<!-- [et_pb_line_break_holder] -->  usdz[outdoor_2_b] = base_URL + outdoor_2_b + \".usdz\";<!-- [et_pb_line_break_holder] -->  widths[outdoor_2_b ] = \"035.04 in\";<!-- [et_pb_line_break_holder] -->  deeps[outdoor_2_b] = \"013.46 in\";<!-- [et_pb_line_break_holder] -->  heights[outdoor_2_b] = \"012.5 in\";<!-- [et_pb_line_break_holder] -->  offsets[outdoor_2_b] = 1.0;<!-- [et_pb_line_break_holder] -->  explodes[outdoor_2_b] = false;<!-- [et_pb_line_break_holder] -->  cassette[outdoor_2_b] = false;<!-- [et_pb_line_break_holder] -->  consolle[outdoor_2_b] = false;<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  \/\/ OUTDOOR 2 C<!-- [et_pb_line_break_holder] -->  let outdoor_2_c = \"\";<!-- [et_pb_line_break_holder] -->  capacities[outdoor_2_c] = \"\";<!-- [et_pb_line_break_holder] -->  glbs[outdoor_2_c] = base_URL + outdoor_2_c + \".glb\";<!-- [et_pb_line_break_holder] -->  usdz[outdoor_2_c] = base_URL + outdoor_2_c + \".usdz\";<!-- [et_pb_line_break_holder] -->  widths[outdoor_2_c ] = \"40 in\";<!-- [et_pb_line_break_holder] -->  deeps[outdoor_2_c] = \"40 in\";<!-- [et_pb_line_break_holder] -->  heights[outdoor_2_c] = \"40 in\";<!-- [et_pb_line_break_holder] -->  offsets[outdoor_2_c] = 1.0;<!-- [et_pb_line_break_holder] -->  explodes[outdoor_2_c] = false;<!-- [et_pb_line_break_holder] -->  cassette[outdoor_2_c] = false;<!-- [et_pb_line_break_holder] -->  consolle[outdoor_2_c] = false;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ OUTDOOR 2 D<!-- [et_pb_line_break_holder] -->  let outdoor_2_d = \"\";<!-- [et_pb_line_break_holder] -->  capacities[outdoor_2_d] = \"\";<!-- [et_pb_line_break_holder] -->  glbs[outdoor_2_d] = base_URL + outdoor_2_d + \".glb\";<!-- [et_pb_line_break_holder] -->  usdz[outdoor_2_d] = base_URL + outdoor_2_d + \".usdz\";<!-- [et_pb_line_break_holder] -->  widths[outdoor_2_d ] = \"\";<!-- [et_pb_line_break_holder] -->  deeps[outdoor_2_d] = \"\";<!-- [et_pb_line_break_holder] -->  heights[outdoor_2_d] = \"\";<!-- [et_pb_line_break_holder] -->  offsets[outdoor_2_d] = 0.2;<!-- [et_pb_line_break_holder] -->  explodes[outdoor_2_d] = false;<!-- [et_pb_line_break_holder] -->  cassette[outdoor_2_d] = false;<!-- [et_pb_line_break_holder] -->  consolle[outdoor_2_d] = false;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ -----------------------------------------------------------<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  \/\/ INDOOR A<!-- [et_pb_line_break_holder] -->  let indoor_a = \"m-series-wall-mounted-without-sensor\";<!-- [et_pb_line_break_holder] -->  glbs[indoor_a] = base_URL + indoor_a + \".glb\";<!-- [et_pb_line_break_holder] -->  usdz[indoor_a] = base_URL + indoor_a + \".usdz\";<!-- [et_pb_line_break_holder] -->  widths[indoor_a] = \"40 in\";<!-- [et_pb_line_break_holder] -->  deeps[indoor_a] = \"9.8 in\";<!-- [et_pb_line_break_holder] -->  heights[indoor_a] = \"12.6 in\";<!-- [et_pb_line_break_holder] -->  offsets[indoor_a]  = 10;<!-- [et_pb_line_break_holder] -->  explodes[indoor_a] = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ INDOOR B<!-- [et_pb_line_break_holder] -->  let indoor_b = \"\";<!-- [et_pb_line_break_holder] -->  glbs[indoor_b] = base_URL + indoor_b + \".glb\";<!-- [et_pb_line_break_holder] -->  usdz[indoor_b] = base_URL + indoor_b + \".usdz\";<!-- [et_pb_line_break_holder] -->  widths[indoor_b] = \"40 in\";<!-- [et_pb_line_break_holder] -->  deeps[indoor_b] = \"9.7 in\";<!-- [et_pb_line_break_holder] -->  heights[indoor_b] = \"26.5 in\";<!-- [et_pb_line_break_holder] -->  offsets[indoor_b]  = 10;<!-- [et_pb_line_break_holder] -->  explodes[indoor_b] = false;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><model-viewer id=\"viewer\" alt=\"Moovair Morelis\" src=\"\" autoplay ar environment-image=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/neutral.hdr\" poster=\"\" shadow-intensity=\"1\" camera-controls touch-action=\"pan-y\" ios-src=\"\" xr-environment><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dot+X-Y+Z\" class=\"dot\" data-position=\"1 -1 1\" data-normal=\"1 0 0\"><\/button><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dot+X-Y-Z\" class=\"dot\" data-position=\"1 -1 -1\" data-normal=\"1 0 0\"><\/button><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dot+X+Y-Z\" class=\"dot\" data-position=\"1 1 -1\" data-normal=\"0 1 0\"><\/button><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dot-X+Y-Z\" class=\"dot\" data-position=\"-1 1 -1\" data-normal=\"0 1 0\"><\/button><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dot-X-Y-Z\" class=\"dot\" data-position=\"-1 -1 -1\" data-normal=\"-1 0 0\"><\/button><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dot-X-Y+Z\" class=\"dot\" data-position=\"-1 -1 1\" data-normal=\"-1 0 0\"><\/button><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dim+X-Y\" class=\"dim\" data-position=\"1 -1 0\" data-normal=\"1 0 0\"><\/button><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dim+X-Z\" class=\"dim\" data-position=\"1 0 -1\" data-normal=\"1 0 0\"><\/button><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dim+Y-Z\" class=\"dim\" data-position=\"0 -1 -1\" data-normal=\"0 1 0\"><\/button><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dim-X-Z\" class=\"dim\" data-position=\"-1 0 -1\" data-normal=\"-1 0 0\"><\/button><!-- [et_pb_line_break_holder] -->    <button slot=\"hotspot-dim-X-Y\" class=\"dim\" data-position=\"-1 -1 0\" data-normal=\"-1 0 0\"><\/button><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <svg id=\"dimLines\" width=\"100%\" height=\"100%\" xmlns=\"https:\/\/www.w3.org\/2000\/svg\" class=\"dimensionLineContainer\"><!-- [et_pb_line_break_holder] -->      <line class=\"dimensionLine\"><\/line><!-- [et_pb_line_break_holder] -->      <line class=\"dimensionLine\"><\/line><!-- [et_pb_line_break_holder] -->      <line class=\"dimensionLine\"><\/line><!-- [et_pb_line_break_holder] -->      <line class=\"dimensionLine\"><\/line><!-- [et_pb_line_break_holder] -->      <line class=\"dimensionLine\"><\/line><!-- [et_pb_line_break_holder] -->    <\/svg><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div id=\"thebtns\" class=\"btns\"><!-- [et_pb_line_break_holder] -->      <input id=\"button_outdoor_A\" class=\"b3 hide\" type=\"image\" src=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/icons\/outdoor.png\"\/><!-- [et_pb_line_break_holder] -->      <input id=\"button_myriad\" class=\"b3 hide\" type=\"image\" src=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/icons\/myriad.png\"\/><!-- [et_pb_line_break_holder] -->      <input id=\"button_myriad_plus\" class=\"b3 hide\" type=\"image\" src=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/icons\/myriad_plus.png\"\/><!-- [et_pb_line_break_holder] -->      <input id=\"button_indoor_A\" class=\"b3\" type=\"image\" src=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/icons\/indoor.png\"\/><!-- [et_pb_line_break_holder] -->      <input id=\"button_console\" class=\"b3 hide\" type=\"image\" src=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/icons\/console.png\"\/><!-- [et_pb_line_break_holder] -->      <input id=\"button_cassette\" class=\"b3 hide\" type=\"image\" src=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/icons\/cassette.png\"\/><!-- [et_pb_line_break_holder] -->      <input id=\"button_measure\" class=\"b1\" type=\"image\" src=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/icons\/measure.png\"\/><!-- [et_pb_line_break_holder] -->      <input id=\"button_explode\" class=\"b2 hide\" type=\"image\" src=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/icons\/explode.png\"\/><!-- [et_pb_line_break_holder] -->      <input id=\"button_implode\" class=\"b2 hide\" type=\"image\" src=\"https:\/\/cdn2.moovair.com\/ar\/_assets\/icons\/implode.png\"\/><!-- [et_pb_line_break_holder] -->      <\/p>\n<div id=\"sel_div\" class=\"sel hide\"><!-- [et_pb_line_break_holder] -->      <label class=\"label\">Capacity<\/label><!-- [et_pb_line_break_holder] -->      <select id=\"capacity_select\" class=\"dropdown\"><\/select><!-- [et_pb_line_break_holder] -->      <select id=\"capacity_select2\" class=\"dropdown hide\"><\/select><!-- [et_pb_line_break_holder] -->     <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/model-viewer>[\/et_pb_code][et_pb_code _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<script>let model_name = \"EMPTY\";\r\nlet model_url = \"EMPTY\";\r\nlet model_usdz = \"EMPTY\";\r\nlet model_glb = \"EMPTY\";\r\nlet width = \"-\";\r\nlet deep = \"-\";\r\nlet height = \"-\";\r\nlet offset = 0;\r\nlet enable_explode = false;\r\nlet center;\r\nlet size;\r\nlet offset_x;\r\nlet offset_y;\r\nlet offset_z;\r\nlet x2;\r\nlet y2;\r\nlet z2;\r\nlet actual_model = outdoor_a;\r\nlet value = outdoor_a;\r\n\r\nlet previus_model = actual_model;\r\nconsole.log(\"model glb: \" + glbs[actual_model]);\r\n\r\nlet show_dimensions = false;\r\nlet model_status = \"implode\";\r\n\r\nconst modelViewer = document.getElementById(\"viewer\");\r\ndocument.getElementById(\"viewer\").setAttribute(\"src\", glbs[actual_model]);\r\n\r\nconst sel_div = document.getElementById(\"sel_div\");\r\nconst select = document.getElementById(\"capacity_select\");\r\nconst select2 = document.getElementById(\"capacity_select2\"); \/\/ Myriad\r\nlet select_changes = 0;\r\n\r\n\/\/-----------------------------------------------------------------------------------------------------\r\n\r\nwindow.onload = function () {\r\n  console.log(\"The website is fully loaded!\");\r\n\r\n  const button_explode = document.getElementById(\"button_explode\");\r\n  const button_implode = document.getElementById(\"button_implode\");\r\n\r\n  const button_measure = document.getElementById(\"button_measure\");\r\n\r\n  const button_indoor_A = document.getElementById(\"button_indoor_A\");\r\n  const button_outdoor_A = document.getElementById(\"button_outdoor_A\");\r\n\r\n  const button_myriad = document.getElementById(\"button_myriad\");\r\n  const button_myriad_plus = document.getElementById(\"button_myriad_plus\");\r\n\r\n  const button_console = document.getElementById(\"button_console\");\r\n  const button_cassette = document.getElementById(\"button_cassette\");\r\n\r\n  sel_div.classList.remove(\"hide\");\r\n\r\n  \/\/ Myriad\r\n  if (use_two_outdoor_buttons) {\r\n    button_outdoor_A.classList.add(\"hide\");\r\n    button_indoor_A.classList.add(\"hide\");\r\n    button_myriad_plus.classList.remove(\"hide\");\r\n  } else {\r\n    \/\/ button_outdoor_A.classList.remove(\"hide\");\r\n    \/\/ button_indoor_A.classList.remove(\"hide\");\r\n    \/\/ button_myriad_plus.classList.remove(\"hide\");\r\n  }\r\n\r\n  const dimLines = modelViewer.querySelectorAll(\"line\");\r\n\r\n  const renderSVG = () => {\r\n    drawLine(\r\n      dimLines[0],\r\n      modelViewer.queryHotspot(\"hotspot-dot+X-Y+Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dot+X-Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dim+X-Y\")\r\n    );\r\n    drawLine(\r\n      dimLines[1],\r\n      modelViewer.queryHotspot(\"hotspot-dot+X-Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dot+X+Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dim+X-Z\")\r\n    );\r\n\r\n    drawLine(\r\n      dimLines[2],\r\n      modelViewer.queryHotspot(\"hotspot-dot+X+Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dot-X+Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dim+Y-Z\")\r\n    ); \/\/ FIX LINE WIDTH\r\n\r\n    drawLine(\r\n      dimLines[3],\r\n      modelViewer.queryHotspot(\"hotspot-dot-X+Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dot-X-Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dim-X-Z\")\r\n    );\r\n    drawLine(\r\n      dimLines[4],\r\n      modelViewer.queryHotspot(\"hotspot-dot-X-Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dot-X-Y+Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dim-X-Y\")\r\n    );\r\n  };\r\n\r\n  modelViewer.addEventListener(\"camera-change\", renderSVG);\r\n\r\n  function set_option(option, dropdown) {\r\n    if (option !== \"\") {\r\n      var opt = document.createElement(\"option\");\r\n      opt.value = option;\r\n      opt.innerHTML = capacities[option];\r\n      dropdown.appendChild(opt);\r\n    }\r\n  }\r\n\r\n  set_option(outdoor_a, select);\r\n  set_option(outdoor_b, select);\r\n  set_option(outdoor_c, select);\r\n  set_option(outdoor_d, select);\r\n\r\n  set_option(outdoor_2_a, select2);\r\n  set_option(outdoor_2_b, select2);\r\n  set_option(outdoor_2_c, select2);\r\n  set_option(outdoor_2_d, select2);\r\n\r\n  \/\/-----------------------------------------------------------------------------------------------\r\n\r\n  function changeSelect() {\r\n    select_changes += 1;\r\n\r\n    value = select.value;\r\n    console.log(\"Change Select: \" + value);\r\n    previus_model = actual_model;\r\n    actual_model = value;\r\n    show_dimensions = false;\r\n    setVisibility(show_dimensions);\r\n    width = widths[actual_model];\r\n    deep = deeps[actual_model];\r\n    height = heights[actual_model];\r\n    console.log(\r\n      \"width: \" + width + \" \/ deep: \" + deep + \" \/ height: \" + height\r\n    );\r\n\r\n    model_url = glbs[actual_model];\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  }\r\n\r\n  function changeSelect2() {\r\n    select_changes += 1;\r\n\r\n    value = select2.value;\r\n    console.log(\"Change Select2: \" + value);\r\n    previus_model = actual_model;\r\n    actual_model = value;\r\n    show_dimensions = false;\r\n    setVisibility(show_dimensions);\r\n    width = widths[actual_model];\r\n    deep = deeps[actual_model];\r\n    height = heights[actual_model];\r\n    console.log(\r\n      \"width: \" + width + \" \/ deep: \" + deep + \" \/ height: \" + height\r\n    );\r\n\r\n    model_url = glbs[actual_model];\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  }\r\n\r\n  select.addEventListener(\"change\", changeSelect);\r\n  select2.addEventListener(\"change\", changeSelect2);\r\n\r\n  \/\/--------------------------------------------------------------------------------------------------\r\n\/\/ New function to encapsulate dimension calculation\r\n\r\n  \r\n\tmodelViewer.addEventListener(\"load\", () => {\r\n    console.log(\r\n      \"VIEWER LOADED actual_model: \" + actual_model + \" type: \" + type_model\r\n    );\r\n\t\t\/\/ Call the new dimension calculation function\r\n  \r\n\r\n    show_dimensions = false;\r\ncenter = modelViewer.getBoundingBoxCenter();\r\n\t\t\r\n    setVisibility(show_dimensions);\r\n\r\n    model_status = \"implode\";\r\n\r\n    button_outdoor_A.classList.add(\"hide\");\r\n    button_indoor_A.classList.add(\"hide\");\r\n    button_explode.classList.add(\"hide\");\r\n    button_implode.classList.add(\"hide\");\r\n\r\n    \/\/center = modelViewer.getBoundingBoxCenter();\r\n\r\n    model_url = glbs[actual_model];\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n\r\n    if (enable_explode) {\r\n      console.log(\"enable explode\");\r\n      stopx();\r\n      button_explode.classList.remove(\"hide\");\r\n    } else {\r\n      console.log(\"running play\");\r\n      playx();\r\n    }\r\n\r\n    if (type_model == \"outdoor\") {\r\n      console.log(\"TYPE OUT DOOR\");\r\n      button_outdoor_A.classList.add(\"hide\");\r\n      button_indoor_A.classList.add(\"hide\");\r\n      button_cassette.classList.add(\"hide\");\r\n      button_console.classList.add(\"hide\");\r\n\r\n      sel_div.classList.remove(\"hide\");\r\n\r\n      if (consolle[actual_model]) {\r\n        console.log(\"CONSOLE TRUE\");\r\n        button_console.classList.remove(\"hide\");\r\n        sel_div.classList.remove(\"hide\");\r\n      }\r\n      if (cassette[actual_model]) {\r\n        console.log(\"CASSETTE TRUE\");\r\n        button_cassette.classList.remove(\"hide\");\r\n        sel_div.classList.remove(\"hide\");\r\n      }\r\n      if (!cassette[actual_model] && !consolle[actual_model]) {\r\n        console.log(\"NORMAL\");\r\n        button_indoor_A.classList.remove(\"hide\");\r\n      }\r\n    } else {\r\n      button_cassette.classList.add(\"hide\");\r\n      button_console.classList.add(\"hide\");\r\n      button_indoor_A.classList.add(\"hide\");\r\n      button_outdoor_A.classList.remove(\"hide\");\r\n      sel_div.classList.add(\"hide\");\r\n    }\r\n\r\n    \/\/ Myriad\r\n    if (use_two_outdoor_buttons) {\r\n      button_indoor_A.classList.add(\"hide\");\r\n\r\n      \/\/ button_outdoor_A.classList.add(\"hide\");\r\n      \/\/ button_myriad.classList.remove(\"hide\");\r\n      \/\/ button_myriad_plus.classList.remove(\"hide\");\r\n      \/\/ sel_div.classList.remove(\"hide\");\r\n    } else {\r\n    }\r\n\r\n    \/\/ Mix Moov Heat+\r\n    \/\/ if (use_two_indoor_buttons) {\r\n    \/\/   \/\/ button_indoor_A.classList.remove(\"hide\");\r\n    \/\/   \/\/ button_indoor_B.classList.remove(\"hide\");\r\n    \/\/ } else {\r\n    \/\/ }\r\n\r\n    width = widths[actual_model];\r\n    deep = deeps[actual_model];\r\n    height = heights[actual_model];\r\n    offset = offsets[actual_model];\r\n\r\n    size = modelViewer.getDimensions();\r\n    offset_x = (size.x * offset) \/ 100;\r\n    offset_y = (size.y * offset) \/ 100;\r\n    offset_z = (size.z * offset) \/ 100;\r\n    x2 = (size.x + offset_x) \/ 2;\r\n    y2 = (size.y + offset_y) \/ 2;\r\n    z2 = (size.z + offset_z) \/ 2;\r\n  });\r\n  \/\/  END MODEL LO-AD EVENT\r\n\r\n  button_explode.addEventListener(\"click\", explode);\r\n  button_implode.addEventListener(\"click\", implode);\r\n\r\n  const dimElements = [\r\n    ...modelViewer.querySelectorAll(\"button\"),\r\n    modelViewer.querySelector(\"#dimLines\"),\r\n  ];\r\n\r\n  function setVisibility(visible) {\r\n    console.log(\"set-Visibility: \" + visible);\r\n\t\r\n    dimElements.forEach((element) => {\r\n      if (visible) {\r\n       modelViewer.updateHotspot({\r\n        name: \"hotspot-dot+X-Y+Z\",\r\n         position: `${center.x + x2} ${center.y - y2} ${center.z + z2}`,\r\n       });\r\n           \r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dim+X-Y\",\r\n          position: `${center.x + x2 * 1} ${center.y - y2 * 1} ${center.z}`,\r\n        });\r\n\r\n        modelViewer.querySelector(\r\n          'button[slot=\"hotspot-dim+X-Y\"]'\r\n        ).textContent = deep;\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dot+X-Y-Z\",\r\n          position: `${center.x + x2} ${center.y - y2} ${center.z - z2}`,\r\n        });\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dim+X-Z\",\r\n          position: `${center.x + x2 * 1} ${center.y} ${center.z - z2 * 1}`,\r\n        });\r\n\r\n        modelViewer.querySelector(\r\n          'button[slot=\"hotspot-dim+X-Z\"]'\r\n        ).textContent = height;\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dot+X+Y-Z\",\r\n          position: `${center.x + x2} ${center.y + y2} ${center.z - z2}`,\r\n        });\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dim+Y-Z\",\r\n          position: `${center.x} ${center.y + y2 * 1} ${center.z - z2 * 1}`,\r\n        });\r\n\r\n        modelViewer.querySelector(\r\n          'button[slot=\"hotspot-dim+Y-Z\"]'\r\n        ).textContent = width;\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dot-X+Y-Z\",\r\n          position: `${center.x - x2} ${center.y + y2} ${center.z - z2}`,\r\n        });\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dim-X-Z\",\r\n          position: `${center.x - x2 * 1} ${center.y} ${center.z - z2 * 1}`,\r\n        });\r\n\r\n        modelViewer.querySelector(\r\n          'button[slot=\"hotspot-dim-X-Z\"]'\r\n        ).textContent = height;\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dot-X-Y-Z\",\r\n          position: `${center.x - x2} ${center.y - y2} ${center.z - z2}`,\r\n        });\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dim-X-Y\",\r\n          position: `${center.x - x2 * 1} ${center.y - y2 * 1} ${center.z}`,\r\n        });\r\n\r\n        modelViewer.querySelector(\r\n          'button[slot=\"hotspot-dim-X-Y\"]'\r\n        ).textContent = deep;\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dot-X-Y+Z\",\r\n          position: `${center.x - x2} ${center.y - y2} ${center.z + z2}`,\r\n        });\r\n\r\n        renderSVG();\r\n\r\n        element.classList.remove(\"hide\");\r\n      } else {\r\n        element.classList.add(\"hide\");\r\n      }\r\n    });\r\n  }\r\n\r\n  button_measure.addEventListener(\"click\", () => {\r\n    console.log(\r\n      \"button measure pressed \/ model_status: \" +\r\n        model_status +\r\n        \" \/ width: \" +\r\n        width +\r\n        \" \/ deep: \" +\r\n        deep +\r\n        \" \/ height: \" +\r\n        height\r\n    );\r\n  \r\n    if (model_status == \"implode\") {\r\n      show_dimensions = !show_dimensions;\r\n      setVisibility(show_dimensions);\r\n    }\r\n\r\n  });\r\n\r\n  button_outdoor_A.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button A pressed\");\r\n    \/\/ button_outdoor_A.classList.add(\"hide\");\r\n    \/\/ button_indoor_A.classList.remove(\"hide\");\r\n    type_model = \"outdoor\";\r\n    actual_model = previus_model;\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  button_indoor_A.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button B pressed\");\r\n    \/\/ button_indoor_A.classList.add(\"hide\");\r\n    \/\/ button_outdoor_A.classList.remove(\"hide\");\r\n    type_model = \"indoor\";\r\n    previus_model = actual_model;\r\n    actual_model = indoor_a;\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    console.log(\"model glb: \" + model_glb);\r\n    model_usdz = usdz[actual_model];\r\n    console.log(\"model usdz: \" + model_usdz);\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  button_cassette.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button cassette pressed\");\r\n    \/\/ button_indoor_A.classList.add(\"hide\");\r\n    \/\/ button_outdoor_A.classList.remove(\"hide\");\r\n    type_model = \"indoor\";\r\n    previus_model = actual_model;\r\n    actual_model = indoor_a;\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    console.log(\"model glb: \" + model_glb);\r\n    model_usdz = usdz[actual_model];\r\n    console.log(\"model usdz: \" + model_usdz);\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  button_console.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button cassette pressed\");\r\n    \/\/ button_indoor_A.classList.add(\"hide\");\r\n    \/\/ button_outdoor_A.classList.remove(\"hide\");\r\n    type_model = \"indoor\";\r\n    previus_model = actual_model;\r\n    actual_model = indoor_b;\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    console.log(\"model glb: \" + model_glb);\r\n    model_usdz = usdz[actual_model];\r\n    console.log(\"model usdz: \" + model_usdz);\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  button_myriad.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button Myriad pressed\");\r\n    type_model = \"outdoor\";\r\n\r\n    button_myriad.classList.add(\"hide\");\r\n    button_myriad_plus.classList.remove(\"hide\");\r\n    select2.classList.add(\"hide\");\r\n    select.classList.remove(\"hide\");\r\n\r\n    \/\/ actual_model = outdoor_a;\r\n    \/\/ actual_model = outdoor_2_a;\r\n    value = select.value;\r\n    previus_model = actual_model;\r\n    actual_model = value;\r\n\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  button_myriad_plus.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button Myriad plus pressed\");\r\n    type_model = \"outdoor\";\r\n\r\n    button_myriad_plus.classList.add(\"hide\");\r\n    button_myriad.classList.remove(\"hide\");\r\n    select.classList.add(\"hide\");\r\n    select2.classList.remove(\"hide\");\r\n\r\n    \/\/ actual_model = outdoor_2_a;\r\n    value = select2.value;\r\n    previus_model = actual_model;\r\n    actual_model = value;\r\n\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  async function playx() {\r\n    console.log(\"play animation\");\r\n    modelViewer.timeScale = 1;\r\n    await modelViewer.updateComplete;\r\n    modelViewer.pause();\r\n    modelViewer.play({ repetitions: 9999 });\r\n    modelViewer.appendAnimation(\"rotate\", {\r\n      weight: parseFloat(100),\r\n      repetitions: 9999,\r\n    });\r\n    modelViewer.appendAnimation(\"rotate2\", {\r\n      weight: parseFloat(100),\r\n      repetitions: 9999,\r\n    });\r\n  }\r\n\r\n  async function stopx() {\r\n    console.log(\"stop animation\");\r\n\tmodelViewer.animationName=\"explode\";\r\n    modelViewer.currentTime = 0;\r\n    modelViewer.timeScale = 0;\r\n    await modelViewer.updateComplete;\r\n    modelViewer.pause();\r\n  }\r\n\r\n  modelViewer.addEventListener(\"ar-model_status\", (event) => {\r\n    setVisibility(\r\n      show_dimensions && event.detail.model_status !== \"session-started\"\r\n    );\r\n  });\r\n\r\n  async function explode() {\r\n    console.log(\"exploding....\");\r\n    model_status = \"exploding\";\r\n    show_dimensions = false;\r\n    setVisibility(show_dimensions);\r\n    modelViewer.animationName = \"explode\";\r\n    modelViewer.timeScale = 1;\r\n    await modelViewer.updateComplete;\r\n    modelViewer.play({\r\n      repetitions: 1,\r\n    });\r\n  }\r\n\r\n  async function implode() {\r\n    console.log(\"imploding....\");\r\n    model_status = \"imploding\";\r\n    modelViewer.animationName = \"implode\";\r\n    modelViewer.timeScale = 1;\r\n    await modelViewer.updateComplete;\r\n    modelViewer.play({\r\n      repetitions: 1,\r\n    });\r\n  }\r\n\r\n  modelViewer.addEventListener(\"finished\", () => {\r\n    console.log(\"animation finished\");\r\n    if (model_status == \"exploding\") {\r\n      model_status = \"explode\";\r\n      console.log(\"Enabling implode button\");\r\n      button_explode.classList.add(\"hide\");\r\n      button_implode.classList.remove(\"hide\");\r\n    }\r\n    if (model_status == \"imploding\") {\r\n      model_status = \"implode\";\r\n      console.log(\"Enabling explode button\");\r\n      button_implode.classList.add(\"hide\");\r\n      button_explode.classList.remove(\"hide\");\r\n    }\r\n  });\r\n\/\/ New function to encapsulate dimension calculation\r\nfunction calculateDimensions() {\r\n    center = modelViewer.getBoundingBoxCenter();\r\n    size = modelViewer.getDimensions();\r\n    offset_x = (size.x * offset) \/ 100;\r\n    offset_y = (size.y * offset) \/ 100;\r\n    offset_z = (size.z * offset) \/ 100;\r\n    x2 = (size.x + offset_x) \/ 2;\r\n    y2 = (size.y + offset_y) \/ 2;\r\n    z2 = (size.z + offset_z) \/ 2;\r\n}\r\n\r\n\r\n  function drawLine(svgLine, dotHotspot1, dotHotspot2, dimensionHotspot) {\r\n    if (dotHotspot1 && dotHotspot2) {\r\n      svgLine.setAttribute(\"x1\", dotHotspot1.canvasPosition.x);\r\n      svgLine.setAttribute(\"y1\", dotHotspot1.canvasPosition.y);\r\n      svgLine.setAttribute(\"x2\", dotHotspot2.canvasPosition.x);\r\n      svgLine.setAttribute(\"y2\", dotHotspot2.canvasPosition.y);\r\n\r\n      if (dimensionHotspot && !dimensionHotspot.facingCamera) {\r\n        svgLine.classList.add(\"hide\");\r\n      } else {\r\n        svgLine.classList.remove(\"hide\");\r\n      }\r\n    }\r\n  }\r\n};<\/script>[\/et_pb_code][et_pb_code _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<script><!-- [et_pb_line_break_holder] -->(function() {<!-- [et_pb_line_break_holder] -->  \/\/ List of model filenames for which the measure button must be hidden<!-- [et_pb_line_break_holder] -->  const HIDE_MEASURE_FOR = [<!-- [et_pb_line_break_holder] -->    'm-series-wall-mounted-without-sensor'<!-- [et_pb_line_break_holder] -->    \/\/ 'other-model.glb',<!-- [et_pb_line_break_holder] -->  ];<!-- [et_pb_line_break_holder] -->  function shouldHideForSrc(src) {<!-- [et_pb_line_break_holder] -->    if (!src) return false;<!-- [et_pb_line_break_holder] -->    return HIDE_MEASURE_FOR.some(name => src.indexOf(name) !== -1);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function updateMeasureButton(viewer) {<!-- [et_pb_line_break_holder] -->    const src = viewer.getAttribute('src') || '';<!-- [et_pb_line_break_holder] -->    const hide = shouldHideForSrc(src);<!-- [et_pb_line_break_holder] -->    const measureBtn = viewer.querySelector('#button_measure');<!-- [et_pb_line_break_holder] -->    if (!measureBtn) return;<!-- [et_pb_line_break_holder] -->    measureBtn.classList.toggle('hide', hide);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function setupModelViewer(viewer) {<!-- [et_pb_line_break_holder] -->    \/\/ Run once in case the src is already set<!-- [et_pb_line_break_holder] -->    updateMeasureButton(viewer);<!-- [et_pb_line_break_holder] -->    \/\/ When the model actually loads (or src changes), re-check<!-- [et_pb_line_break_holder] -->    viewer.addEventListener('load', function() {<!-- [et_pb_line_break_holder] -->      updateMeasureButton(viewer);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  document.addEventListener('DOMContentLoaded', function() {<!-- [et_pb_line_break_holder] -->    document.querySelectorAll('model-viewer').forEach(setupModelViewer);<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  \/\/ Optional: handle model-viewers added later<!-- [et_pb_line_break_holder] -->  const observer = new MutationObserver(function(mutations) {<!-- [et_pb_line_break_holder] -->    mutations.forEach(function(mutation) {<!-- [et_pb_line_break_holder] -->      mutation.addedNodes.forEach(function(node) {<!-- [et_pb_line_break_holder] -->        if (node.nodeType !== 1) return; \/\/ ELEMENT_NODE<!-- [et_pb_line_break_holder] -->        if (node.matches && node.matches('model-viewer')) {<!-- [et_pb_line_break_holder] -->          setupModelViewer(node);<!-- [et_pb_line_break_holder] -->        } else if (node.querySelectorAll) {<!-- [et_pb_line_break_holder] -->          node.querySelectorAll('model-viewer').forEach(setupModelViewer);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  observer.observe(document.body, { childList: true, subtree: true });<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] -->[\/et_pb_code][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;|700|||||||&#8221; text_font_size=&#8221;22px&#8221; header_3_font=&#8221;|700|||||||&#8221; header_3_font_size=&#8221;24px&#8221; header_3_line_height=&#8221;1.3em&#8221; custom_padding=&#8221;50px||||false|false&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<h3>The MISTRAL Heat Pump by Moovair gives budget-conscious homeowners the best of both worlds: affordability and high performance. Reliable home heating and cooling\u2014enhanced by optional WiFi connectivity\u2014ensure efficient, convenient operation. With a compact design, easy installation, and a comprehensive 10-year limited warranty, Mistral is a smart, value-driven choice that just makes sense.<\/h3>\n<p><a href=\"\/en-ca\/about-heat-pumps\">Learn more about heat pumps<\/a><\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_2,1_2&#8243; make_equal=&#8221;on&#8221; custom_padding_last_edited=&#8221;on|desktop&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;0px||||false|false&#8221; custom_padding_tablet=&#8221;40px||||false|false&#8221; custom_padding_phone=&#8221;40px||||false|false&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_css_main_element=&#8221;display:flex;&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;||||||||&#8221; text_font_size=&#8221;20px&#8221; text_line_height=&#8221;1.3em&#8221; header_3_font=&#8221;|700|||||||&#8221; header_3_font_size=&#8221;24px&#8221; custom_margin=&#8221;auto||auto||false|false&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<h2 style=\"font-size: 1.8em; font-weight: 200; padding-bottom:15px;\">Just the Right Features. All the Flexibility<\/h2>\n<ul style=\"line-height: 1.8;\">\n<li>Efficient Performance: Brings outstanding heating and cooling operation up to 25.8 SEER2, featuring a base pan heater and cold climate capability.<\/li>\n<li>Cooling Mode: Like a conventional air conditioner, the heat pump extracts heat from inside the home and releases it outdoors, cooling the indoor space.<\/li>\n<li>Worry-Free Air Quality: A double filtration system, variable-speed indoor fan, and self-cleaning function promote a healthy indoor air environment.<\/li>\n<li>Various Sized-Units: Available in 9k, 12k, 15k, 18k, and 24k BTU models.<\/li>\n<li>Quiet, Safe, and Lengthy Operations: Corrosion-resistant coils and ultra-quiet performance help extend the unit\u2019s lifespan.<\/li>\n<\/ul>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/HeatOutput_Mistral-1.png&#8221; alt=&#8221;Graph illustrating the heat output percentages of the Mistral system at various BTU capacities under specific indoor and outdoor temperature conditions.&#8221; title_text=&#8221;Graph illustrating the heat output percentages of the Mistral system at various BTU capacities under specific indoor and outdoor temperature conditions.&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;10px||10px||true|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_button button_url=&#8221;https:\/\/cdn.master.ca\/documents\/en\/moovair\/brochures\/Moovair_MSeries_202602_EN_V03.pdf&#8221; url_new_window=&#8221;on&#8221; button_text=&#8221;Features and technical specifications available in the full brochure&#8221; button_alignment=&#8221;center&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_button=&#8221;on&#8221; button_text_color=&#8221;#FFFFFF&#8221; button_bg_color=&#8221;#e35425&#8243; button_border_radius=&#8221;100px&#8221; button_font=&#8221;||||||||&#8221; custom_padding=&#8221;10px|30px|10px|30px|true|true&#8221; hover_enabled=&#8221;0&#8243; button_text_size_tablet=&#8221;&#8221; button_text_size_phone=&#8221;16px&#8221; button_text_size_last_edited=&#8221;on|phone&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;%91%93&#8243; button_text_size__hover_enabled=&#8221;on|desktop&#8221; button_text_color__hover_enabled=&#8221;on|hover&#8221; button_text_color__hover=&#8221;#e35425&#8243; button_bg_color__hover_enabled=&#8221;on|desktop&#8221; button_bg_color__hover=&#8221;#FFFFFF&#8221; button_bg_enable_color__hover=&#8221;on&#8221; button_border_color__hover_enabled=&#8221;on|hover&#8221; button_border_color__hover=&#8221;#e35425&#8243; sticky_enabled=&#8221;0&#8243;][\/et_pb_button][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text module_class=&#8221;et_pb_text_5&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; text_font_size=&#8221;20px&#8221; text_line_height=&#8221;1.3em&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<h2 style=\"text-transform: uppercase; display: inline-block; border-bottom: 4px solid #e35425; padding-bottom: 4px; font-size:2.5rem\">Moovair M-Series: Heat pumps that work as hard as you do<\/h2>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_3,1_3,1_3&#8243; module_class=&#8221;cls-logos&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_3&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/MORELIS-1.png&#8221; alt=&#8221;Morelis logo featuring a stylized %22M%22 in orange and the word %22Morelis%22 in gray.&#8221; title_text=&#8221;Morelis logo featuring a stylized \u201cM\u201d in orange and the word \u201cMorelis\u201d in gray.&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; background_enable_color=&#8221;off&#8221; max_width=&#8221;200px&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_3&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/MERIDIAN.png&#8221; alt=&#8221;Logo of the Meridian brand featuring bold gray letters with an orange accent.&#8221; title_text=&#8221;Logo of the Meridian brand featuring bold gray letters with an orange accent.&#8221; align=&#8221;center&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; max_width=&#8221;200px&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_3&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/MISTRAL-1.png&#8221; alt=&#8221;MISTRAL logo featuring bold gray letters with an orange wave element.&#8221; title_text=&#8221;MISTRAL logo featuring bold gray letters with an orange wave element.&#8221; align=&#8221;right&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; max_width=&#8221;200px&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text module_class=&#8221;et_pb_text_5&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; text_font_size=&#8221;20px&#8221; text_line_height=&#8221;1.3em&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<p>Moovair heat pumps\u2014Morelis, Meridian, and Mistral\u2014are designed to provide a balance of advanced functionality and everyday reliability. This ensures efficient installations and long-term value for homeowners, without unnecessary complexities.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_2,1_2&#8243; make_equal=&#8221;on&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/Inverter-Compressor_EN-2.png&#8221; alt=&#8221;A detailed illustration of an inverter-driven compressor showcasing its internal components and design.&#8221; title_text=&#8221;A detailed illustration of an inverter-driven compressor showcasing its internal components and design.&#8221; align=&#8221;center&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; max_width=&#8221;50%&#8221; custom_padding=&#8221;10px||10px||true|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_css_main_element=&#8221;display:flex;&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; text_font_size=&#8221;20px&#8221; text_line_height=&#8221;1.3em&#8221; header_3_font=&#8221;|700|||||||&#8221; header_3_font_size=&#8221;24px&#8221; custom_margin=&#8221;auto||auto||false|false&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<h3>Energy efficiency for every home<\/h3>\n<p>These systems incorporate cutting-edge Inverter drive technology, which modulates compressor operation to limit temperature fluctuations and reduce energy consumption. By adjusting in precise increments up to 100% capacity, the system maintains the set temperature efficiently, offering maximum comfort and energy savings.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_2,1_2&#8243; make_equal=&#8221;on&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_css_main_element=&#8221;display:flex&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text module_class=&#8221;et_pb_text_5&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;auto||auto||false|false&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<h3><strong>Reliability Guaranteed with our Leading Warranty Coverage<\/strong><\/h3>\n<p>Moovair heat pumps are built to last and come with a comprehensive 10-year limited warranty on both parts and compressor. For added peace of mind, optional labor coverage of 5 and 10 years is also available, ensuring homeowners\u2019 investments remain protected for years to come.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/MoovairWarrantyLogo_EN-2.png&#8221; alt=&#8221;Warranty badges displaying 10 years for compressor and parts, along with 5 and 10 years for optional labour warranties.&#8221; title_text=&#8221;Warranty badges displaying 10 years for compressor and parts, along with 5 and 10 years for optional labour warranties.&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_2,1_2&#8243; make_equal=&#8221;on&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/Graphic-EN_WintervsSummer-2.png&#8221; alt=&#8221;Moovair system operation is illustrated with heating mode on the left and cooling mode on the right, showing air flow directions.&#8221; title_text=&#8221;Moovair system operation is illustrated with heating mode on the left and cooling mode on the right, showing air flow directions.&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_css_main_element=&#8221;display:flex&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text module_class=&#8221;et_pb_text_5&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;auto||auto||false|false&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<h3><strong>Heat pumps offer year-round home comfort<\/strong><\/h3>\n<p>A heat pump serves as an all-in-one climate control solution, providing both heating and cooling to maintain optimal indoor temperatures throughout the year. <\/p>\n<ul>\n<li><span> <strong>Cooling Mode<\/strong>: Like a conventional air conditioner, the heat pump extracts heat from inside the home and releases it outdoors, cooling the indoor space.  <\/span><\/li>\n<li><span> <strong>Heating Mode<\/strong>: Operating in reverse, the heat pump captures heat from the outside air and transfers it indoors to warm the home.  <\/span><\/li>\n<\/ul>\n<p><span>This dual functionality ensures efficient and consistent comfort in all seasons, with a single system.<\/span>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_2,1_2&#8243; make_equal=&#8221;on&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_css_main_element=&#8221;display:flex;&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;||||||||&#8221; text_font_size=&#8221;20px&#8221; text_line_height=&#8221;1.3em&#8221; header_3_font=&#8221;|700|||||||&#8221; header_3_font_size=&#8221;24px&#8221; custom_margin=&#8221;auto||auto||false|false&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<h3>How heat pump capacity impacts comfort<\/h3>\n<p>Heat pump capacity refers to the amount of heating or cooling a unit can provide, typically measured in British Thermal Units per hour (BTU\/h). Capacity can vary based on temperature, with performance often decreasing as outdoor temperatures drop. Designed to withstand these extremes, the Morelis 9,000 BTU\/h unit\u2014as an example\u2014delivers over 9,000 BTU\/h even when it\u2019s a freezing -25\u00b0C outside and 21\u00b0C inside.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/MSeries_ComparisonGraph.png&#8221; alt=&#8221;Graph showing the total net capacity (MBH) of three systems\u2014Morelis, Meridian, and Mistral\u2014across varying outdoor temperatures (\u00b0C).&#8221; title_text=&#8221;Graph showing the total net capacity (MBH) of three systems\u2014Morelis, Meridian, and Mistral\u2014across varying outdoor temperatures (\u00b0C).&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;10px||10px||true|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_2,1_2&#8243; make_equal=&#8221;on&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/moovair.com\/wp-content\/uploads\/COP-Graphic_EN-2.png&#8221; alt=&#8221;A diagram illustrating a Moovair system that absorbs heat from outside air and releases it into indoor air.&#8221; title_text=&#8221;A diagram illustrating a Moovair system that absorbs heat from outside air and releases it into indoor air.&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; max_width=&#8221;300px&#8221; module_alignment=&#8221;center&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_css_main_element=&#8221;display:flex;&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; text_font_size=&#8221;20px&#8221; text_line_height=&#8221;1.3em&#8221; header_3_font=&#8221;|700|||||||&#8221; header_3_font_size=&#8221;24px&#8221; custom_margin=&#8221;auto||auto||false|false&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<h3>The heating cycle and coefficient of performance (COP)<\/h3>\n<p><span>The efficiency of a heat pump is commonly evaluated using the Coefficient of Performance (COP), which is the ratio of heat output to electrical energy input. A higher COP indicates greater efficiency. <\/span><\/p>\n<p><span>For instance, a COP of 3 means that for every unit of electricity consumed, the heat pump produces three units of heat. <\/span><br \/>\n<span>COP is defined as the ratio between the rate at which the heat pump transfers thermal energy (in kW) and the amount of electrical power required to do the pumping (in kW).<\/span><\/p>\n<p><span style=\"margin-bottom: 10px; display: block;\">Advantages of High COP in MISTRAL by Moovair Heat Pumps: <\/span><\/p>\n<ul>\n<li><span> <strong>Increased Efficiency<\/strong>: More effective conversion of electricity into heating or cooling. <\/span><\/li>\n<li><span> <strong>Lower Energy Costs<\/strong>: Reduced utility bills due to efficient energy use. <\/span><\/li>\n<li><span> <strong>Environmental Benefits<\/strong>: Decreased carbon footprint through optimized energy consumption.<\/span><\/li>\n<\/ul>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;30px||||false|false&#8221; custom_padding=&#8221;||50px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]With Mistral heat pumps, you\u2019re not just buying a heating and cooling system\u2014you\u2019re investing in Canadian year-round home comfort, energy savings, and sustainability. The Mistral heat pump systems are engineered to deliver consistent performance, even in the coldest climates.[\/et_pb_text][et_pb_text _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; text_font_size=&#8221;20px&#8221; text_line_height=&#8221;1.3em&#8221; header_2_font=&#8221;|700|||||||&#8221; header_2_font_size=&#8221;32px&#8221; header_2_line_height=&#8221;1.1em&#8221; header_2_font_size_phone=&#8221;26px&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<h2 style=\"text-align: center;\">DOWNLOAD BROCHURE<\/h2>\n<p style=\"text-align: center;\">To explore more, download <span>the M-Series brochure<\/span>.<\/p>\n<p>[\/et_pb_text][et_pb_button button_url=&#8221;https:\/\/cdn.master.ca\/documents\/en\/moovair\/brochures\/Moovair_MSeries_202602_EN_V03.pdf&#8221; url_new_window=&#8221;on&#8221; button_text=&#8221;DOWNLOAD PDF BROCHURE&#8221; button_alignment=&#8221;center&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_button=&#8221;on&#8221; button_text_color=&#8221;#FFFFFF&#8221; button_bg_color=&#8221;#e35425&#8243; button_border_radius=&#8221;100px&#8221; button_font=&#8221;||||||||&#8221; custom_padding=&#8221;10px|30px|10px|30px|true|true&#8221; hover_enabled=&#8221;0&#8243; button_text_size_tablet=&#8221;&#8221; button_text_size_phone=&#8221;16px&#8221; button_text_size_last_edited=&#8221;on|phone&#8221; global_colors_info=&#8221;%91%93&#8243; button_text_size__hover_enabled=&#8221;on|desktop&#8221; button_text_color__hover_enabled=&#8221;on|hover&#8221; button_text_color__hover=&#8221;#e35425&#8243; button_bg_color__hover_enabled=&#8221;on|desktop&#8221; button_bg_color__hover=&#8221;#FFFFFF&#8221; button_bg_enable_color__hover=&#8221;on&#8221; button_border_color__hover_enabled=&#8221;on|hover&#8221; button_border_color__hover=&#8221;#e35425&#8243; sticky_enabled=&#8221;0&#8243;][\/et_pb_button][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;cbebb943-82e8-4ec0-947d-cf77e34c50de&#8221; custom_margin=&#8221;||0px||false|false&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; hover_enabled=&#8221;0&#8243; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221; custom_padding_last_edited=&#8221;on|phone&#8221; sticky_enabled=&#8221;0&#8243; custom_padding_phone=&#8221;|20px||20px|false|true&#8221; custom_padding_tablet=&#8221;0px||0px||false|false&#8221;][et_pb_row _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;#4a7b9c&#8221; border_radii=&#8221;on|50px|50px|50px|50px&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;||||||||&#8221; text_text_color=&#8221;#FFFFFF&#8221; text_font_size=&#8221;24px&#8221; text_line_height=&#8221;1.3em&#8221; header_3_font_size=&#8221;36px&#8221; width=&#8221;100%&#8221; custom_margin=&#8221;|20px||20px|true|true&#8221; custom_padding=&#8221;|20px||20px|true|true&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;%91%93&#8243;]<\/p>\n<p>Moovair dealers are supported by The Master Group, Canada\u2019s largest independently Canadian owned HVAC-R distributor. Through its 70 year history, The Master Group distinguishes itself for its extensive inventory, technical expertise, and exceptional customer service.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;30px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_button button_url=&#8221;\/dealer-locator\/&#8221; button_text=&#8221;FIND A DEALER FOR A QUOTE&#8221; button_alignment=&#8221;center&#8221; _builder_version=&#8221;4.22.1&#8243; _module_preset=&#8221;default&#8221; custom_button=&#8221;on&#8221; button_text_color=&#8221;#FFFFFF&#8221; button_bg_color=&#8221;#e35425&#8243; button_border_radius=&#8221;100px&#8221; button_font=&#8221;||||||||&#8221; custom_padding=&#8221;10px|30px|10px|30px|true|true&#8221; button_text_size_tablet=&#8221;&#8221; button_text_size_phone=&#8221;16px&#8221; button_text_size_last_edited=&#8221;on|phone&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;%91%93&#8243; button_text_size__hover_enabled=&#8221;on|desktop&#8221; button_text_color__hover_enabled=&#8221;on|hover&#8221; button_text_color__hover=&#8221;#e35425&#8243; button_bg_color__hover_enabled=&#8221;on|desktop&#8221; button_bg_color__hover=&#8221;#FFFFFF&#8221; button_bg_enable_color__hover=&#8221;on&#8221; button_border_color__hover_enabled=&#8221;on|hover&#8221; button_border_color__hover=&#8221;#e35425&#8243;][\/et_pb_button][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mistral (Essential) mart comfort made affordable Up to 25.8 SEER2 | 9.2 HSPF2 Region 5 | Heating to -25\u00b0C MISTRAL Heat Pump by Moovair: Affordable, Without Compromising Quality <style class=\"wpcode-css-snippet\">:not(:defined)>* {\r\n    display: none;\r\n}\r\n\r\n.test-div {\r\n  width: 80%;\r\n  height: 80%;\r\n}\r\n\r\n\r\n\/* Responsive model-viewer *\/\r\nmodel-viewer {\r\n    width: 100%;\r\n    max-width: 640px;\r\n    height: auto;\r\n    aspect-ratio: 4 \/ 3; \/* Keeps proper proportions on all screens *\/\r\n    margin: 0 auto;\r\n    border-radius: 10px;\r\n    background-color: #fff;\r\n    box-sizing: border-box;\r\n    position: relative;\r\n}\r\n\r\n\/* Tablet *\/\r\n@media (min-width: 768px) and (max-width: 1024px) {\r\n    model-viewer {\r\n        width: 90%;\r\n        max-width: 720px;\r\n        aspect-ratio: 4 \/ 3;\r\n    }\r\n}\r\n\r\n\/* Desktop *\/\r\n@media (min-width: 1025px) {\r\n    model-viewer {\r\n        width: 680px;\r\n        height: 540px; \/* Desktop fixed size *\/\r\n        aspect-ratio: unset;\r\n    }\r\n}\r\n\r\n#ar-button {\r\n    background-image: url(https:\/\/cdn2.moovair.com\/ar\/_assets\/ic_view_in_ar_new_googblue_48dp.png);\r\n    background-repeat: no-repeat;\r\n    background-size: 20px 20px;\r\n    background-position: 12px 50%;\r\n    background-color: #fff;\r\n    position: absolute;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    white-space: nowrap;\r\n    bottom: 20px;\r\n    padding: 0px 16px 0px 40px;\r\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;\r\n    font-size: 14px;\r\n    font-weight: 500;\r\n    color: #4285f4;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    border-radius: 18px;\r\n    border: 1px solid #DADCE0;\r\n}\r\n\r\n#ar-button:active {\r\n    background-color: #E8EAED;\r\n}\r\n\r\n#ar-button:focus {\r\n    outline: none;\r\n}\r\n\r\n#ar-button:focus-visible {\r\n    outline: 1px solid #4285f4;\r\n}\r\n\r\n#logo-overlay {\r\n    position: absolute;\r\n    \/* KEY CHANGE: Reduced bottom padding from 20px to 10px *\/\r\n    bottom: -42px;\r\n    right: 10px;\r\n    width: 80px;\r\n    height: 80px;\r\n    object-fit: contain;\r\n    border-radius: 8px;\r\n    pointer-events: none;\r\n}\r\n\r\n.sel {\r\n  margin-top: -15px;\r\n  margin-left: 30px;\r\n  float: left;\r\n  width: 30vw;\r\n  \/* position: absolute; *\/\r\n  \/* display: inline-block; *\/\r\n  \/* left: 175px; *\/\r\n  \/* font-family: Arial, Helvetica, sans-serif; *\/\r\n  \/* background-color: rgb(147, 200, 147); *\/\r\n}\r\n\r\n.label {    \/* capacity *\/\r\n  \/* background-color: red; *\/\r\n  \/* display: inline-block; *\/\r\n  \/* height: 20px; *\/\r\n  \/* width: 78px; *\/\r\n  \/* width: 50vw; *\/\r\n  width: 100%;\r\n  text-align: left;\r\n  vertical-align: middle;\r\n  margin-bottom: 8px;\r\n  font-size: 1.8vh;\r\n  float: left;\r\n  clear: both;\r\n  \/* height: 50%; *\/\r\n\r\n  }\r\n\r\n.dropdown {\r\n  float: left;\r\n  background-color: white;\r\n  clear: both;\r\n  height: 2.5vh;\r\n  \/* width: 50vw; *\/\r\n  \/* width: 100%; *\/\r\n  \/* font-size: 1rem; *\/\r\n  font-size: 1.6vh;\r\n}\r\n\r\n.dropdown option {\r\n   \/* font-size: 1rem; *\/\r\n   font-size: 11pt;\r\n   \/* font-size: 1.6vh; *\/\r\n}\r\n\r\n.btns {\r\n  \/* position: relative; *\/\r\n  position: absolute;\r\n  \/* width: 90%; *\/\r\n  \/* width: 100px; *\/\r\n  \/* height: 50px; *\/\r\n  height: 5vh;\r\n  width: 100vw;\r\n  bottom: 0;\r\n  margin-bottom: 0;\r\n  \/* background-color: rgb(115, 0, 255); *\/\r\n  overflow: visible;\r\n margin-bottom:30px;\r\n}\r\n\r\n\/* measure button *\/\r\n.b1, .b2, .b3 {   \r\n  \/* position: absolute; *\/\r\n  \/* display: inline-block; *\/\r\n  \/* left: 110px; *\/\r\n  margin-left: 30px;\r\n  float: left;\r\n  white-space: nowrap;\r\n  height: 100%;\r\n}\r\n\r\n  .dot {\r\n    display: none;\r\n  }\r\n  \r\n  .glass {\r\n    background: rgba(255, 255, 255, 0.37);\r\n    backdrop-filter: blur(8px) contrast(0.89) saturate(1.27);\r\n    -webkit-backdrop-filter: blur(8px) contrast(0.89) saturate(1.27);\r\n    border: 1px solid rgba(255, 255, 255, 0.4);\r\n    padding: 0.5rem;\r\n    border-radius: 0.5rem;\r\n  }\r\n  \r\n  .dim {\r\n    border-radius: 4px;\r\n    border: none;\r\n    box-sizing: border-box;\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25);\r\n    color: rgba(0, 0, 0, 0.8);\r\n    display: block;\r\n    font-family: Futura, Helvetica Neue, sans-serif;\r\n    \/* font-size: 1em; *\/\r\n    font-size: 1.6vh;\r\n    font-weight: 700;\r\n    max-width: 128px;\r\n    overflow-wrap: break-word;\r\n    padding: 8px;\r\n    position: absolute;\r\n    width: max-content;\r\n    height: max-content;\r\n    transform: translate3d(-50%, -50%, 0);\r\n    pointer-events: none;\r\n    --min-hotspot-opacity: 0;\r\n  }\r\n  \r\n  \/* @media only screen and (max-width: 800px) {\r\n    .dim {\r\n      font-size: 3vw;\r\n    }\r\n  } *\/\r\n  \r\n  .dimensionLineContainer {\r\n    pointer-events: none;\r\n    display: block;\r\n  }\r\n  \r\n  .dimensionLine {\r\n    stroke: #16a5e6;\r\n    stroke-width: 2;\r\n    stroke-dasharray: 2;\r\n  }\r\n  \r\n  .hide {\r\n    display: none;\r\n  }\r\n\r\n  :not(:defined)>* {\r\n    display: none;\r\n  }\r\n  \r\n  #ar-button {\r\n    background-image: url(https:\/\/cdn2.moovair.com\/ar\/_assets\/ic_view_in_ar_new_googblue_48dp.png);\r\n    background-repeat: no-repeat;\r\n    background-size: 20px 20px;\r\n    background-position: 12px 50%;\r\n    background-color: #fff;\r\n    position: absolute;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    white-space: nowrap;\r\n    bottom: 132px;\r\n    padding: 0px 16px 0px 40px;\r\n    font-family: Roboto Regular, Helvetica Neue, sans-serif;\r\n    font-size: 14px;\r\n    color:#4285f4;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    border-radius: 18px;\r\n    border: 1px solid #DADCE0;\r\n  }\r\n\r\n  #ar-button:active {\r\n    background-color: #E8EAED;\r\n  }\r\n\r\n  #ar-button:focus {\r\n    outline: none;\r\n  }\r\n\r\n  #ar-button:focus-visible {\r\n    outline: 1px solid #4285f4;\r\n  }\r\n\r\n  @keyframes circle {\r\n    from { transform: translateX(-50%) rotate(0deg) translateX(50px) rotate(0deg); }\r\n    to   { transform: translateX(-50%) rotate(360deg) translateX(50px) rotate(-360deg); }\r\n  }\r\n\r\n  @keyframes elongate {\r\n    from { transform: translateX(100px); }\r\n    to   { transform: translateX(-100px); }\r\n  }\r\n\r\n  model-viewer > #ar-prompt {\r\n    position: absolute;\r\n    left: 50%;\r\n    bottom: 175px;\r\n    animation: elongate 2s infinite ease-in-out alternate;\r\n    display: none;\r\n  }\r\n\r\n  model-viewer[ar-status=\"session-started\"] > #ar-prompt {\r\n    display: block;\r\n  }\r\n\r\n  model-viewer > #ar-prompt > img {\r\n    animation: circle 4s linear infinite;\r\n  }\r\n\r\n  model-viewer > #ar-failure {\r\n    position: absolute;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    bottom: 175px;\r\n    display: none;\r\n  }\r\n\r\n  model-viewer[ar-tracking=\"not-tracking\"] > #ar-failure {\r\n    display: block;\r\n  }<\/style><script>let model_name = \"EMPTY\";\r\nlet model_url = \"EMPTY\";\r\nlet model_usdz = \"EMPTY\";\r\nlet model_glb = \"EMPTY\";\r\nlet width = \"-\";\r\nlet deep = \"-\";\r\nlet height = \"-\";\r\nlet offset = 0;\r\nlet enable_explode = false;\r\nlet center;\r\nlet size;\r\nlet offset_x;\r\nlet offset_y;\r\nlet offset_z;\r\nlet x2;\r\nlet y2;\r\nlet z2;\r\nlet actual_model = outdoor_a;\r\nlet value = outdoor_a;\r\n\r\nlet previus_model = actual_model;\r\nconsole.log(\"model glb: \" + glbs[actual_model]);\r\n\r\nlet show_dimensions = false;\r\nlet model_status = \"implode\";\r\n\r\nconst modelViewer = document.getElementById(\"viewer\");\r\ndocument.getElementById(\"viewer\").setAttribute(\"src\", glbs[actual_model]);\r\n\r\nconst sel_div = document.getElementById(\"sel_div\");\r\nconst select = document.getElementById(\"capacity_select\");\r\nconst select2 = document.getElementById(\"capacity_select2\"); \/\/ Myriad\r\nlet select_changes = 0;\r\n\r\n\/\/-----------------------------------------------------------------------------------------------------\r\n\r\nwindow.onload = function () {\r\n  console.log(\"The website is fully loaded!\");\r\n\r\n  const button_explode = document.getElementById(\"button_explode\");\r\n  const button_implode = document.getElementById(\"button_implode\");\r\n\r\n  const button_measure = document.getElementById(\"button_measure\");\r\n\r\n  const button_indoor_A = document.getElementById(\"button_indoor_A\");\r\n  const button_outdoor_A = document.getElementById(\"button_outdoor_A\");\r\n\r\n  const button_myriad = document.getElementById(\"button_myriad\");\r\n  const button_myriad_plus = document.getElementById(\"button_myriad_plus\");\r\n\r\n  const button_console = document.getElementById(\"button_console\");\r\n  const button_cassette = document.getElementById(\"button_cassette\");\r\n\r\n  sel_div.classList.remove(\"hide\");\r\n\r\n  \/\/ Myriad\r\n  if (use_two_outdoor_buttons) {\r\n    button_outdoor_A.classList.add(\"hide\");\r\n    button_indoor_A.classList.add(\"hide\");\r\n    button_myriad_plus.classList.remove(\"hide\");\r\n  } else {\r\n    \/\/ button_outdoor_A.classList.remove(\"hide\");\r\n    \/\/ button_indoor_A.classList.remove(\"hide\");\r\n    \/\/ button_myriad_plus.classList.remove(\"hide\");\r\n  }\r\n\r\n  const dimLines = modelViewer.querySelectorAll(\"line\");\r\n\r\n  const renderSVG = () => {\r\n    drawLine(\r\n      dimLines[0],\r\n      modelViewer.queryHotspot(\"hotspot-dot+X-Y+Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dot+X-Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dim+X-Y\")\r\n    );\r\n    drawLine(\r\n      dimLines[1],\r\n      modelViewer.queryHotspot(\"hotspot-dot+X-Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dot+X+Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dim+X-Z\")\r\n    );\r\n\r\n    drawLine(\r\n      dimLines[2],\r\n      modelViewer.queryHotspot(\"hotspot-dot+X+Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dot-X+Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dim+Y-Z\")\r\n    ); \/\/ FIX LINE WIDTH\r\n\r\n    drawLine(\r\n      dimLines[3],\r\n      modelViewer.queryHotspot(\"hotspot-dot-X+Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dot-X-Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dim-X-Z\")\r\n    );\r\n    drawLine(\r\n      dimLines[4],\r\n      modelViewer.queryHotspot(\"hotspot-dot-X-Y-Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dot-X-Y+Z\"),\r\n      modelViewer.queryHotspot(\"hotspot-dim-X-Y\")\r\n    );\r\n  };\r\n\r\n  modelViewer.addEventListener(\"camera-change\", renderSVG);\r\n\r\n  function set_option(option, dropdown) {\r\n    if (option !== \"\") {\r\n      var opt = document.createElement(\"option\");\r\n      opt.value = option;\r\n      opt.innerHTML = capacities[option];\r\n      dropdown.appendChild(opt);\r\n    }\r\n  }\r\n\r\n  set_option(outdoor_a, select);\r\n  set_option(outdoor_b, select);\r\n  set_option(outdoor_c, select);\r\n  set_option(outdoor_d, select);\r\n\r\n  set_option(outdoor_2_a, select2);\r\n  set_option(outdoor_2_b, select2);\r\n  set_option(outdoor_2_c, select2);\r\n  set_option(outdoor_2_d, select2);\r\n\r\n  \/\/-----------------------------------------------------------------------------------------------\r\n\r\n  function changeSelect() {\r\n    select_changes += 1;\r\n\r\n    value = select.value;\r\n    console.log(\"Change Select: \" + value);\r\n    previus_model = actual_model;\r\n    actual_model = value;\r\n    show_dimensions = false;\r\n    setVisibility(show_dimensions);\r\n    width = widths[actual_model];\r\n    deep = deeps[actual_model];\r\n    height = heights[actual_model];\r\n    console.log(\r\n      \"width: \" + width + \" \/ deep: \" + deep + \" \/ height: \" + height\r\n    );\r\n\r\n    model_url = glbs[actual_model];\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  }\r\n\r\n  function changeSelect2() {\r\n    select_changes += 1;\r\n\r\n    value = select2.value;\r\n    console.log(\"Change Select2: \" + value);\r\n    previus_model = actual_model;\r\n    actual_model = value;\r\n    show_dimensions = false;\r\n    setVisibility(show_dimensions);\r\n    width = widths[actual_model];\r\n    deep = deeps[actual_model];\r\n    height = heights[actual_model];\r\n    console.log(\r\n      \"width: \" + width + \" \/ deep: \" + deep + \" \/ height: \" + height\r\n    );\r\n\r\n    model_url = glbs[actual_model];\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  }\r\n\r\n  select.addEventListener(\"change\", changeSelect);\r\n  select2.addEventListener(\"change\", changeSelect2);\r\n\r\n  \/\/--------------------------------------------------------------------------------------------------\r\n\/\/ New function to encapsulate dimension calculation\r\n\r\n  \r\n\tmodelViewer.addEventListener(\"load\", () => {\r\n    console.log(\r\n      \"VIEWER LOADED actual_model: \" + actual_model + \" type: \" + type_model\r\n    );\r\n\t\t\/\/ Call the new dimension calculation function\r\n  \r\n\r\n    show_dimensions = false;\r\ncenter = modelViewer.getBoundingBoxCenter();\r\n\t\t\r\n    setVisibility(show_dimensions);\r\n\r\n    model_status = \"implode\";\r\n\r\n    button_outdoor_A.classList.add(\"hide\");\r\n    button_indoor_A.classList.add(\"hide\");\r\n    button_explode.classList.add(\"hide\");\r\n    button_implode.classList.add(\"hide\");\r\n\r\n    \/\/center = modelViewer.getBoundingBoxCenter();\r\n\r\n    model_url = glbs[actual_model];\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n\r\n    if (enable_explode) {\r\n      console.log(\"enable explode\");\r\n      stopx();\r\n      button_explode.classList.remove(\"hide\");\r\n    } else {\r\n      console.log(\"running play\");\r\n      playx();\r\n    }\r\n\r\n    if (type_model == \"outdoor\") {\r\n      console.log(\"TYPE OUT DOOR\");\r\n      button_outdoor_A.classList.add(\"hide\");\r\n      button_indoor_A.classList.add(\"hide\");\r\n      button_cassette.classList.add(\"hide\");\r\n      button_console.classList.add(\"hide\");\r\n\r\n      sel_div.classList.remove(\"hide\");\r\n\r\n      if (consolle[actual_model]) {\r\n        console.log(\"CONSOLE TRUE\");\r\n        button_console.classList.remove(\"hide\");\r\n        sel_div.classList.remove(\"hide\");\r\n      }\r\n      if (cassette[actual_model]) {\r\n        console.log(\"CASSETTE TRUE\");\r\n        button_cassette.classList.remove(\"hide\");\r\n        sel_div.classList.remove(\"hide\");\r\n      }\r\n      if (!cassette[actual_model] && !consolle[actual_model]) {\r\n        console.log(\"NORMAL\");\r\n        button_indoor_A.classList.remove(\"hide\");\r\n      }\r\n    } else {\r\n      button_cassette.classList.add(\"hide\");\r\n      button_console.classList.add(\"hide\");\r\n      button_indoor_A.classList.add(\"hide\");\r\n      button_outdoor_A.classList.remove(\"hide\");\r\n      sel_div.classList.add(\"hide\");\r\n    }\r\n\r\n    \/\/ Myriad\r\n    if (use_two_outdoor_buttons) {\r\n      button_indoor_A.classList.add(\"hide\");\r\n\r\n      \/\/ button_outdoor_A.classList.add(\"hide\");\r\n      \/\/ button_myriad.classList.remove(\"hide\");\r\n      \/\/ button_myriad_plus.classList.remove(\"hide\");\r\n      \/\/ sel_div.classList.remove(\"hide\");\r\n    } else {\r\n    }\r\n\r\n    \/\/ Mix Moov Heat+\r\n    \/\/ if (use_two_indoor_buttons) {\r\n    \/\/   \/\/ button_indoor_A.classList.remove(\"hide\");\r\n    \/\/   \/\/ button_indoor_B.classList.remove(\"hide\");\r\n    \/\/ } else {\r\n    \/\/ }\r\n\r\n    width = widths[actual_model];\r\n    deep = deeps[actual_model];\r\n    height = heights[actual_model];\r\n    offset = offsets[actual_model];\r\n\r\n    size = modelViewer.getDimensions();\r\n    offset_x = (size.x * offset) \/ 100;\r\n    offset_y = (size.y * offset) \/ 100;\r\n    offset_z = (size.z * offset) \/ 100;\r\n    x2 = (size.x + offset_x) \/ 2;\r\n    y2 = (size.y + offset_y) \/ 2;\r\n    z2 = (size.z + offset_z) \/ 2;\r\n  });\r\n  \/\/  END MODEL LO-AD EVENT\r\n\r\n  button_explode.addEventListener(\"click\", explode);\r\n  button_implode.addEventListener(\"click\", implode);\r\n\r\n  const dimElements = [\r\n    ...modelViewer.querySelectorAll(\"button\"),\r\n    modelViewer.querySelector(\"#dimLines\"),\r\n  ];\r\n\r\n  function setVisibility(visible) {\r\n    console.log(\"set-Visibility: \" + visible);\r\n\t\r\n    dimElements.forEach((element) => {\r\n      if (visible) {\r\n       modelViewer.updateHotspot({\r\n        name: \"hotspot-dot+X-Y+Z\",\r\n         position: `${center.x + x2} ${center.y - y2} ${center.z + z2}`,\r\n       });\r\n           \r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dim+X-Y\",\r\n          position: `${center.x + x2 * 1} ${center.y - y2 * 1} ${center.z}`,\r\n        });\r\n\r\n        modelViewer.querySelector(\r\n          'button[slot=\"hotspot-dim+X-Y\"]'\r\n        ).textContent = deep;\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dot+X-Y-Z\",\r\n          position: `${center.x + x2} ${center.y - y2} ${center.z - z2}`,\r\n        });\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dim+X-Z\",\r\n          position: `${center.x + x2 * 1} ${center.y} ${center.z - z2 * 1}`,\r\n        });\r\n\r\n        modelViewer.querySelector(\r\n          'button[slot=\"hotspot-dim+X-Z\"]'\r\n        ).textContent = height;\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dot+X+Y-Z\",\r\n          position: `${center.x + x2} ${center.y + y2} ${center.z - z2}`,\r\n        });\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dim+Y-Z\",\r\n          position: `${center.x} ${center.y + y2 * 1} ${center.z - z2 * 1}`,\r\n        });\r\n\r\n        modelViewer.querySelector(\r\n          'button[slot=\"hotspot-dim+Y-Z\"]'\r\n        ).textContent = width;\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dot-X+Y-Z\",\r\n          position: `${center.x - x2} ${center.y + y2} ${center.z - z2}`,\r\n        });\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dim-X-Z\",\r\n          position: `${center.x - x2 * 1} ${center.y} ${center.z - z2 * 1}`,\r\n        });\r\n\r\n        modelViewer.querySelector(\r\n          'button[slot=\"hotspot-dim-X-Z\"]'\r\n        ).textContent = height;\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dot-X-Y-Z\",\r\n          position: `${center.x - x2} ${center.y - y2} ${center.z - z2}`,\r\n        });\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dim-X-Y\",\r\n          position: `${center.x - x2 * 1} ${center.y - y2 * 1} ${center.z}`,\r\n        });\r\n\r\n        modelViewer.querySelector(\r\n          'button[slot=\"hotspot-dim-X-Y\"]'\r\n        ).textContent = deep;\r\n\r\n        modelViewer.updateHotspot({\r\n          name: \"hotspot-dot-X-Y+Z\",\r\n          position: `${center.x - x2} ${center.y - y2} ${center.z + z2}`,\r\n        });\r\n\r\n        renderSVG();\r\n\r\n        element.classList.remove(\"hide\");\r\n      } else {\r\n        element.classList.add(\"hide\");\r\n      }\r\n    });\r\n  }\r\n\r\n  button_measure.addEventListener(\"click\", () => {\r\n    console.log(\r\n      \"button measure pressed \/ model_status: \" +\r\n        model_status +\r\n        \" \/ width: \" +\r\n        width +\r\n        \" \/ deep: \" +\r\n        deep +\r\n        \" \/ height: \" +\r\n        height\r\n    );\r\n  \r\n    if (model_status == \"implode\") {\r\n      show_dimensions = !show_dimensions;\r\n      setVisibility(show_dimensions);\r\n    }\r\n\r\n  });\r\n\r\n  button_outdoor_A.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button A pressed\");\r\n    \/\/ button_outdoor_A.classList.add(\"hide\");\r\n    \/\/ button_indoor_A.classList.remove(\"hide\");\r\n    type_model = \"outdoor\";\r\n    actual_model = previus_model;\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  button_indoor_A.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button B pressed\");\r\n    \/\/ button_indoor_A.classList.add(\"hide\");\r\n    \/\/ button_outdoor_A.classList.remove(\"hide\");\r\n    type_model = \"indoor\";\r\n    previus_model = actual_model;\r\n    actual_model = indoor_a;\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    console.log(\"model glb: \" + model_glb);\r\n    model_usdz = usdz[actual_model];\r\n    console.log(\"model usdz: \" + model_usdz);\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  button_cassette.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button cassette pressed\");\r\n    \/\/ button_indoor_A.classList.add(\"hide\");\r\n    \/\/ button_outdoor_A.classList.remove(\"hide\");\r\n    type_model = \"indoor\";\r\n    previus_model = actual_model;\r\n    actual_model = indoor_a;\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    console.log(\"model glb: \" + model_glb);\r\n    model_usdz = usdz[actual_model];\r\n    console.log(\"model usdz: \" + model_usdz);\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  button_console.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button cassette pressed\");\r\n    \/\/ button_indoor_A.classList.add(\"hide\");\r\n    \/\/ button_outdoor_A.classList.remove(\"hide\");\r\n    type_model = \"indoor\";\r\n    previus_model = actual_model;\r\n    actual_model = indoor_b;\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    console.log(\"model glb: \" + model_glb);\r\n    model_usdz = usdz[actual_model];\r\n    console.log(\"model usdz: \" + model_usdz);\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  button_myriad.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button Myriad pressed\");\r\n    type_model = \"outdoor\";\r\n\r\n    button_myriad.classList.add(\"hide\");\r\n    button_myriad_plus.classList.remove(\"hide\");\r\n    select2.classList.add(\"hide\");\r\n    select.classList.remove(\"hide\");\r\n\r\n    \/\/ actual_model = outdoor_a;\r\n    \/\/ actual_model = outdoor_2_a;\r\n    value = select.value;\r\n    previus_model = actual_model;\r\n    actual_model = value;\r\n\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  button_myriad_plus.addEventListener(\"click\", () => {\r\n    stopx();\r\n    console.log(\"button Myriad plus pressed\");\r\n    type_model = \"outdoor\";\r\n\r\n    button_myriad_plus.classList.add(\"hide\");\r\n    button_myriad.classList.remove(\"hide\");\r\n    select.classList.add(\"hide\");\r\n    select2.classList.remove(\"hide\");\r\n\r\n    \/\/ actual_model = outdoor_2_a;\r\n    value = select2.value;\r\n    previus_model = actual_model;\r\n    actual_model = value;\r\n\r\n    console.log(\"actual model: \" + actual_model);\r\n    enable_explode = explodes[actual_model];\r\n    model_glb = glbs[actual_model];\r\n    model_usdz = usdz[actual_model];\r\n    modelViewer.src = model_glb;\r\n    document.getElementById(\"viewer\").setAttribute(\"src\", model_glb);\r\n    document.getElementById(\"viewer\").setAttribute(\"ios-src\", model_usdz);\r\n  });\r\n\r\n  async function playx() {\r\n    console.log(\"play animation\");\r\n    modelViewer.timeScale = 1;\r\n    await modelViewer.updateComplete;\r\n    modelViewer.pause();\r\n    modelViewer.play({ repetitions: 9999 });\r\n    modelViewer.appendAnimation(\"rotate\", {\r\n      weight: parseFloat(100),\r\n      repetitions: 9999,\r\n    });\r\n    modelViewer.appendAnimation(\"rotate2\", {\r\n      weight: parseFloat(100),\r\n      repetitions: 9999,\r\n    });\r\n  }\r\n\r\n  async function stopx() {\r\n    console.log(\"stop animation\");\r\n\tmodelViewer.animationName=\"explode\";\r\n    modelViewer.currentTime = 0;\r\n    modelViewer.timeScale = 0;\r\n    await modelViewer.updateComplete;\r\n    modelViewer.pause();\r\n  }\r\n\r\n  modelViewer.addEventListener(\"ar-model_status\", (event) => {\r\n    setVisibility(\r\n      show_dimensions && event.detail.model_status !== \"session-started\"\r\n    );\r\n  });\r\n\r\n  async function explode() {\r\n    console.log(\"exploding....\");\r\n    model_status = \"exploding\";\r\n    show_dimensions = false;\r\n    setVisibility(show_dimensions);\r\n    modelViewer.animationName = \"explode\";\r\n    modelViewer.timeScale = 1;\r\n    await modelViewer.updateComplete;\r\n    modelViewer.play({\r\n      repetitions: 1,\r\n    });\r\n  }\r\n\r\n  async function implode() {\r\n    console.log(\"imploding....\");\r\n    model_status = \"imploding\";\r\n    modelViewer.animationName = \"implode\";\r\n    modelViewer.timeScale = 1;\r\n    await modelViewer.updateComplete;\r\n    modelViewer.play({\r\n      repetitions: 1,\r\n    });\r\n  }\r\n\r\n  modelViewer.addEventListener(\"finished\", () => {\r\n    console.log(\"animation finished\");\r\n    if (model_status == \"exploding\") {\r\n      model_status = \"explode\";\r\n      console.log(\"Enabling implode button\");\r\n      button_explode.classList.add(\"hide\");\r\n      button_implode.classList.remove(\"hide\");\r\n    }\r\n    if (model_status == \"imploding\") {\r\n      model_status = \"implode\";\r\n      console.log(\"Enabling explode button\");\r\n      button_implode.classList.add(\"hide\");\r\n      button_explode.classList.remove(\"hide\");\r\n    }\r\n  });\r\n\/\/ New function to encapsulate dimension calculation\r\nfunction calculateDimensions() {\r\n    center = modelViewer.getBoundingBoxCenter();\r\n    size = modelViewer.getDimensions();\r\n    offset_x = (size.x * offset) \/ 100;\r\n    offset_y = (size.y * offset) \/ 100;\r\n    offset_z = (size.z * offset) \/ 100;\r\n    x2 = (size.x + offset_x) \/ 2;\r\n    y2 = (size.y + offset_y) \/ 2;\r\n    z2 = (size.z + offset_z) \/ 2;\r\n}\r\n\r\n\r\n  function drawLine(svgLine, dotHotspot1, dotHotspot2, dimensionHotspot) {\r\n    if (dotHotspot1 && dotHotspot2) {\r\n      svgLine.setAttribute(\"x1\", dotHotspot1.canvasPosition.x);\r\n      svgLine.setAttribute(\"y1\", dotHotspot1.canvasPosition.y);\r\n      svgLine.setAttribute(\"x2\", dotHotspot2.canvasPosition.x);\r\n      svgLine.setAttribute(\"y2\", dotHotspot2.canvasPosition.y);\r\n\r\n      if (dimensionHotspot && !dimensionHotspot.facingCamera) {\r\n        svgLine.classList.add(\"hide\");\r\n      } else {\r\n        svgLine.classList.remove(\"hide\");\r\n      }\r\n    }\r\n  }\r\n};<\/script>The MISTRAL Heat Pump by Moovair gives budget-conscious homeowners the best of both worlds: affordability and high performance. Reliable home heating and cooling\u2014enhanced by optional [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":"","_wp_rev_ctl_limit":""},"dipi_cpt_category":[],"class_list":["post-16258434","page","type-page","status-publish","hentry"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/moovair.com\/en-ca\/wp-json\/wp\/v2\/pages\/16258434","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/moovair.com\/en-ca\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/moovair.com\/en-ca\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/moovair.com\/en-ca\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/moovair.com\/en-ca\/wp-json\/wp\/v2\/comments?post=16258434"}],"version-history":[{"count":15,"href":"https:\/\/moovair.com\/en-ca\/wp-json\/wp\/v2\/pages\/16258434\/revisions"}],"predecessor-version":[{"id":16266696,"href":"https:\/\/moovair.com\/en-ca\/wp-json\/wp\/v2\/pages\/16258434\/revisions\/16266696"}],"wp:attachment":[{"href":"https:\/\/moovair.com\/en-ca\/wp-json\/wp\/v2\/media?parent=16258434"}],"wp:term":[{"taxonomy":"dipi_cpt_category","embeddable":true,"href":"https:\/\/moovair.com\/en-ca\/wp-json\/wp\/v2\/dipi_cpt_category?post=16258434"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}