{"id":99,"date":"2025-09-05T19:03:35","date_gmt":"2025-09-05T19:03:35","guid":{"rendered":"https:\/\/greensolv.com\/savings_calculator\/"},"modified":"2026-09-18T00:43:16","modified_gmt":"2026-09-18T00:43:16","slug":"calculateur-depargne","status":"publish","type":"page","link":"https:\/\/greensolv.com\/fr\/savings_calculator\/","title":{"rendered":"Greensolv - Calculateur d'\u00e9conomies"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"99\" class=\"elementor elementor-99\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fe584dc e-con-full e-flex e-con e-parent\" data-id=\"fe584dc\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-079b75d elementor-widget elementor-widget-html\" data-id=\"079b75d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@300;400;500;700&family=Oswald:wght@500;600;700&display=swap\" rel=\"stylesheet\">\r\n\r\n<div id=\"gscalc-translations\" style=\"display:none;\" aria-hidden=\"true\">\r\n  <span id=\"tr-method-chem\">Other chemicals<\/span>\r\n  <span id=\"tr-method-sand\">Sandblasting<\/span>\r\n  <span id=\"tr-method-singe\">Singeing \/ Torching<\/span>\r\n<\/div>\r\n\r\n<div class=\"gscalc-outer\">\r\n\r\n<div class=\"gscalc-hero\">\r\n  <span class=\"gscalc-hero-badge\">\r\n    <span class=\"gscalc-hero-dot\"><\/span>\r\n    <span class=\"tp-label\">PRICING<\/span>\r\n  <\/span>\r\n  <h2 class=\"gscalc-hero-title\"><span class=\"tp-label\">SAVINGS CALCULATOR<\/span><\/h2>\r\n  <p class=\"gscalc-hero-sub\"><span class=\"tp-label\">See how much you can save by switching to Greensolv. Enter your daily volume and compare costs instantly.<\/span><\/p>\r\n<\/div>\r\n\r\n<div class=\"gscalc-root\">\r\n\r\n  <div class=\"gscalc-panel gscalc-panel--left\">\r\n\r\n    <div class=\"gscalc-section-label\"><span class=\"tp-label\">01<\/span><\/div>\r\n    <h3 class=\"gscalc-step-title\"><span class=\"tp-label\">Industry<\/span><\/h3>\r\n    <div class=\"gscalc-industry-row\" id=\"gscalc-industry-btns\">\r\n      <button class=\"gscalc-ind-btn gscalc-ind-btn--active\" data-type=\"metal\">\r\n        <span class=\"tp-label\">Metal Parts<\/span>\r\n      <\/button>\r\n      <button class=\"gscalc-ind-btn\" data-type=\"wheel\">\r\n        <span class=\"tp-label\">Wheels<\/span>\r\n      <\/button>\r\n    <\/div>\r\n\r\n    <div class=\"gscalc-divider\"><\/div>\r\n\r\n    <div class=\"gscalc-inputs-row\">\r\n      <div class=\"gscalc-field\">\r\n        <div class=\"gscalc-section-label\"><span class=\"tp-label\">02<\/span><\/div>\r\n        <h3 class=\"gscalc-step-title\"><span class=\"tp-label\">Daily volume<\/span><\/h3>\r\n        <div class=\"gscalc-input-wrap\">\r\n          <input type=\"number\" id=\"gscalc-volume\" min=\"1\" class=\"gscalc-input\" autocomplete=\"off\">\r\n          <span class=\"gscalc-unit tp-label\" id=\"gscalc-unit\">sq ft<\/span>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"gscalc-field\">\r\n        <div class=\"gscalc-section-label\"><span class=\"tp-label\">03<\/span><\/div>\r\n        <h3 class=\"gscalc-step-title\"><span class=\"tp-label\">Current method<\/span><\/h3>\r\n        <div class=\"gscalc-select-wrap\">\r\n          <select id=\"gscalc-method\" class=\"gscalc-select\"><\/select>\r\n          <span class=\"gscalc-chevron\">\u25be<\/span>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"gscalc-divider\"><\/div>\r\n\r\n    <div class=\"gscalc-result-block\">\r\n      <p class=\"gscalc-result-label\"><span class=\"tp-label\">Annual savings with Greensolv<\/span><\/p>\r\n      <div class=\"gscalc-result-amount\" id=\"gscalc-result\">$0<\/div>\r\n      <p class=\"gscalc-result-note\"><span class=\"tp-label\">*<\/span> <span id=\"gscalc-currency\">USD<\/span> <span class=\"tp-label\">\u00b7 250 working days\/year \u00b7 includes labor (<\/span><span id=\"gscalc-hourly-rate\">$30<\/span><span class=\"tp-label\">\/h), capital, chemicals, gas, sand &amp; electricity.<\/span><\/p>\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n  <div class=\"gscalc-panel gscalc-panel--right\">\r\n\r\n    <div class=\"gscalc-charts-row\">\r\n\r\n      <div class=\"gscalc-chart-block\">\r\n        <div class=\"gscalc-chart-header\">\r\n          <div class=\"gscalc-section-label\"><span class=\"tp-label\">COST COMPARISON<\/span><\/div>\r\n          <h3 class=\"gscalc-chart-title\" id=\"gscalc-chart-title\"><span class=\"tp-label\">STRIPPING COST \/ SQFT<\/span><\/h3>\r\n        <\/div>\r\n        <div class=\"gscalc-chart-outer\">\r\n          <div class=\"gscalc-y-axis-col\" id=\"gscalc-y-axis\"><\/div>\r\n          <div class=\"gscalc-chart-wrap\" id=\"gscalc-chart-wrap\"><\/div>\r\n        <\/div>\r\n        <div class=\"gscalc-chart-legend\">\r\n          <span class=\"gscalc-legend-dot gscalc-legend-dot--green\"><\/span><span class=\"tp-label\">Greensolv<\/span>\r\n          <span class=\"gscalc-legend-dot gscalc-legend-dot--dark\"><\/span><span class=\"tp-label\">Competitors<\/span>\r\n        <\/div>\r\n        <div class=\"gscalc-savings-badge\" id=\"gscalc-savings-badge\">\r\n          <span class=\"gscalc-badge-label tp-label\">You save vs. selected method<\/span>\r\n          <span class=\"gscalc-badge-pct\" id=\"gscalc-badge-pct\">\u2014<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"gscalc-chart-block\">\r\n        <div class=\"gscalc-chart-header\">\r\n          <div class=\"gscalc-section-label\"><span class=\"tp-label\">LABOR COMPARISON<\/span><\/div>\r\n          <h3 class=\"gscalc-chart-title\" id=\"gscalc-labor-title\"><span class=\"tp-label\">LABOR (MIN. \/ SQFT)<\/span><\/h3>\r\n        <\/div>\r\n        <div class=\"gscalc-chart-outer\">\r\n          <div class=\"gscalc-y-axis-col\" id=\"gscalc-labor-y-axis\"><\/div>\r\n          <div class=\"gscalc-chart-wrap\" id=\"gscalc-labor-chart-wrap\"><\/div>\r\n        <\/div>\r\n        <div class=\"gscalc-chart-legend\">\r\n          <span class=\"gscalc-legend-dot gscalc-legend-dot--green\"><\/span><span class=\"tp-label\">Greensolv<\/span>\r\n          <span class=\"gscalc-legend-dot gscalc-legend-dot--dark\"><\/span><span class=\"tp-label\">Competitors<\/span>\r\n        <\/div>\r\n        <div class=\"gscalc-savings-badge\" id=\"gscalc-labor-badge\">\r\n          <span class=\"gscalc-badge-label tp-label\">Time saved vs. selected method<\/span>\r\n          <span class=\"gscalc-badge-pct\" id=\"gscalc-labor-badge-pct\">\u2014<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"gscalc-table-block\">\r\n      <div class=\"gscalc-table-header\">\r\n        <div class=\"gscalc-section-label\"><span class=\"tp-label\">FULL BREAKDOWN<\/span><\/div>\r\n        <h3 class=\"gscalc-chart-title\" id=\"gscalc-table-title\"><span class=\"tp-label\">PROCESS EFFICIENCY COMPARISON<\/span><\/h3>\r\n      <\/div>\r\n      <div class=\"gscalc-table-scroll\">\r\n        <table class=\"gscalc-table\" id=\"gscalc-table\">\r\n          <\/table>\r\n      <\/div>\r\n      <p class=\"gscalc-table-footnote\"><span class=\"tp-label\">*Initial capital investments, including equipment and chemicals, are not included in the usage cost.<\/span><\/p>\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n<\/div>\r\n<\/div>\r\n\r\n<style>\r\n\/* \u2500\u2500 Outer wrapper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-outer {\r\n  width: 100%;\r\n  max-width: 1280px;\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n  padding: 0 clamp(16px, 3vw, 40px);\r\n}\r\n.gscalc-outer *,\r\n.gscalc-outer *::before,\r\n.gscalc-outer *::after {\r\n  box-sizing: border-box;\r\n}\r\n\r\n\/* \u2500\u2500 Hero title \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-hero {\r\n  margin-bottom: 40px;\r\n  padding-top: 10px;\r\n}\r\n.gscalc-hero-badge {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  background: rgba(0,0,0,0.03);\r\n  border: 1px solid rgba(0,0,0,0.06);\r\n  color: #6b7280;\r\n  padding: 6px 16px;\r\n  border-radius: 999px;\r\n  font-family: 'Roboto', system-ui, sans-serif;\r\n  font-size: 11px;\r\n  font-weight: 700;\r\n  letter-spacing: 0.1em;\r\n  text-transform: uppercase;\r\n  margin-bottom: 16px;\r\n}\r\n.gscalc-hero-dot {\r\n  width: 6px;\r\n  height: 6px;\r\n  border-radius: 50%;\r\n  background: #0CBC41;\r\n  box-shadow: 0 0 8px rgba(12,188,65,0.6);\r\n}\r\n.gscalc-hero-title {\r\n  font-family: 'Oswald', 'DIN Condensed', 'Arial Narrow', sans-serif;\r\n  font-weight: 700;\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.02em;\r\n  line-height: 1.1;\r\n  color: #1a1a1c;\r\n  margin: 0 0 12px 0;\r\n  font-size: clamp(32px, 4vw, 44px);\r\n}\r\n.gscalc-hero-sub {\r\n  max-width: 80ch;\r\n  color: #6b7280;\r\n  line-height: 1.75;\r\n  font-family: 'Roboto', system-ui, sans-serif;\r\n  font-size: clamp(15px, 1.6vw, 17px);\r\n  margin: 0;\r\n}\r\n\r\n\/* \u2500\u2500 Scope root \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-root {\r\n  --green:      #0CBC41;\r\n  --green-dim:  rgba(12,188,65,.12);\r\n  --green-glow: rgba(12,188,65,.28);\r\n  --ink:        #1a1a1c;\r\n  --ink-mid:    #3a3a3d;\r\n  --ink-muted:  #7a7a84;\r\n  --surface:    #ffffff;\r\n  --surface-2:  #f6f8f6;\r\n  --border:     rgba(0,0,0,.08);\r\n  --border-str: rgba(0,0,0,.14);\r\n  --shadow:     0 2px 6px rgba(0,0,0,.04), 0 16px 48px rgba(0,0,0,.07);\r\n  --radius:     20px;\r\n  --radius-sm:  12px;\r\n  --font-body:  'Roboto', system-ui, sans-serif;\r\n  --font-head:  'Oswald', 'Arial Narrow', sans-serif;\r\n\r\n  display: grid;\r\n  grid-template-columns: 32% 68%;\r\n  align-items: start;\r\n  gap: 0;\r\n  font-family: var(--font-body);\r\n  color: var(--ink);\r\n  border-radius: var(--radius);\r\n  overflow: visible;\r\n  box-shadow: var(--shadow);\r\n  width: 100%;\r\n  max-width: 100%;\r\n  background: var(--surface);\r\n}\r\n\r\n\/* \u2500\u2500 Panels \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-panel {\r\n  background: var(--surface);\r\n  padding: clamp(20px, 3vw, 32px) clamp(16px, 2.5vw, 32px);\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 0;\r\n  min-width: 0;\r\n}\r\n\r\n.gscalc-panel--left {\r\n  border-right: 1px solid var(--border-str);\r\n  position: sticky;\r\n  top: 0;\r\n  align-self: start;\r\n}\r\n\r\n.gscalc-panel--right {\r\n  background: var(--surface-2);\r\n  gap: 20px;\r\n  overflow: hidden;\r\n}\r\n\r\n\/* \u2500\u2500 Section label (01, 02 \u2026) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-section-label {\r\n  font-family: var(--font-head);\r\n  font-size: 11px;\r\n  font-weight: 700;\r\n  letter-spacing: .18em;\r\n  text-transform: uppercase;\r\n  color: var(--green);\r\n  margin-bottom: 6px;\r\n}\r\n\r\n\/* \u2500\u2500 Step titles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-step-title {\r\n  font-family: var(--font-head);\r\n  font-size: clamp(16px, 2vw, 20px);\r\n  font-weight: 700;\r\n  text-transform: uppercase;\r\n  letter-spacing: .04em;\r\n  margin: 0 0 14px 0;\r\n  color: var(--ink);\r\n}\r\n\r\n\/* \u2500\u2500 Industry toggle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-industry-row {\r\n  display: flex;\r\n  gap: 10px;\r\n  margin-bottom: 28px;\r\n}\r\n\r\n.gscalc-ind-btn {\r\n  flex: 1 !important;\r\n  display: flex !important;\r\n  align-items: center !important;\r\n  justify-content: center !important;\r\n  padding: 13px 18px !important;\r\n  border-radius: var(--radius-sm) !important;\r\n  border: 2px solid var(--border-str) !important;\r\n  background: var(--surface) !important;\r\n  font-family: var(--font-head) !important;\r\n  font-size: 14px !important;\r\n  font-weight: 600 !important;\r\n  letter-spacing: .06em !important;\r\n  text-transform: uppercase !important;\r\n  color: var(--ink-muted) !important;\r\n  cursor: pointer !important;\r\n  transition: all .18s ease !important;\r\n  box-shadow: none !important;\r\n  line-height: 1.2 !important;\r\n  text-decoration: none !important;\r\n  outline: none !important;\r\n  width: auto !important;\r\n  height: auto !important;\r\n  margin: 0 !important;\r\n}\r\n.gscalc-ind-btn:hover {\r\n  border-color: var(--green) !important;\r\n  color: var(--green) !important;\r\n  background: var(--green-dim) !important;\r\n  box-shadow: none !important;\r\n  text-decoration: none !important;\r\n}\r\n.gscalc-ind-btn--active {\r\n  border-color: var(--green) !important;\r\n  background: var(--green) !important;\r\n  color: #fff !important;\r\n  box-shadow: 0 4px 14px var(--green-glow) !important;\r\n}\r\n.gscalc-ind-btn--active:hover {\r\n  border-color: var(--green) !important;\r\n  background: var(--green) !important;\r\n  color: #fff !important;\r\n}\r\n\r\n\/* \u2500\u2500 Divider \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-divider {\r\n  height: 1px;\r\n  background: var(--border);\r\n  margin: 4px 0 26px 0;\r\n}\r\n\r\n\/* \u2500\u2500 Inputs row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-inputs-row {\r\n  display: grid;\r\n  grid-template-columns: 1fr;\r\n  gap: 20px;\r\n  margin-bottom: 28px;\r\n}\r\n.gscalc-field { display: flex; flex-direction: column; }\r\n\r\n.gscalc-input-wrap {\r\n  display: flex;\r\n  align-items: stretch;\r\n  border: 2px solid var(--border-str);\r\n  border-radius: var(--radius-sm);\r\n  overflow: hidden;\r\n  background: #fff;\r\n  transition: border-color .15s;\r\n}\r\n.gscalc-input-wrap:focus-within {\r\n  border-color: var(--green);\r\n  box-shadow: 0 0 0 3px rgba(12,188,65,.12);\r\n}\r\n.gscalc-input {\r\n  flex: 1;\r\n  min-width: 0;\r\n  padding: 11px 12px;\r\n  border: none;\r\n  outline: none;\r\n  font-family: var(--font-body);\r\n  font-size: 15px;\r\n  font-weight: 700;\r\n  color: var(--ink);\r\n  background: transparent;\r\n  -moz-appearance: textfield;\r\n}\r\n.gscalc-input::-webkit-inner-spin-button,\r\n.gscalc-input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }\r\n.gscalc-unit {\r\n  padding: 11px 12px;\r\n  background: var(--surface-2);\r\n  font-size: 12px;\r\n  font-weight: 700;\r\n  color: var(--ink-muted);\r\n  border-left: 2px solid var(--border-str);\r\n  white-space: nowrap;\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.gscalc-select-wrap {\r\n  position: relative;\r\n}\r\n.gscalc-select {\r\n  width: 100%;\r\n  padding: 11px 36px 11px 12px;\r\n  border: 2px solid var(--border-str);\r\n  border-radius: var(--radius-sm);\r\n  background: #fff;\r\n  font-family: var(--font-body);\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  color: var(--ink);\r\n  cursor: pointer;\r\n  appearance: none;\r\n  outline: none;\r\n  transition: border-color .15s;\r\n}\r\n.gscalc-select:focus {\r\n  border-color: var(--green);\r\n  box-shadow: 0 0 0 3px rgba(12,188,65,.12);\r\n}\r\n.gscalc-chevron {\r\n  position: absolute;\r\n  right: 12px;\r\n  top: 50%;\r\n  transform: translateY(-50%);\r\n  color: var(--green);\r\n  font-size: 16px;\r\n  pointer-events: none;\r\n}\r\n\r\n\/* \u2500\u2500 Result block \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-result-block {\r\n  margin-top: auto;\r\n  background: linear-gradient(135deg, rgba(12,188,65,.07), rgba(12,188,65,.03));\r\n  border: 1.5px solid rgba(12,188,65,.25);\r\n  border-radius: var(--radius);\r\n  padding: 24px 26px 20px;\r\n  text-align: center;\r\n}\r\n.gscalc-result-label {\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  color: var(--ink-muted);\r\n  margin: 0 0 8px 0;\r\n  text-transform: uppercase;\r\n  letter-spacing: .06em;\r\n}\r\n.gscalc-result-amount {\r\n  font-family: var(--font-head);\r\n  font-size: clamp(36px, 4.5vw, 52px);\r\n  font-weight: 700;\r\n  color: var(--green);\r\n  letter-spacing: -.01em;\r\n  line-height: 1;\r\n  transition: color .3s ease;\r\n}\r\n.gscalc-result-note {\r\n  font-size: 11px;\r\n  color: var(--ink-muted);\r\n  margin: 12px 0 0 0;\r\n  line-height: 1.5;\r\n}\r\n\r\n\/* \u2500\u2500 Charts row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-charts-row {\r\n  display: grid;\r\n  grid-template-columns: 1fr;\r\n  gap: 20px;\r\n  min-width: 0;\r\n  overflow: hidden;\r\n}\r\n\r\n.gscalc-chart-block {\r\n  background: var(--surface);\r\n  border: 1px solid var(--border-str);\r\n  border-radius: var(--radius);\r\n  padding: clamp(16px, 2.5vw, 24px);\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 0;\r\n  min-width: 0;\r\n  overflow: hidden;\r\n}\r\n\r\n\/* \u2500\u2500 Chart panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-chart-header {\r\n  margin-bottom: 16px;\r\n}\r\n.gscalc-chart-title {\r\n  font-family: var(--font-head);\r\n  font-size: clamp(14px, 1.8vw, 18px);\r\n  font-weight: 700;\r\n  text-transform: uppercase;\r\n  letter-spacing: .04em;\r\n  margin: 0;\r\n  color: var(--ink);\r\n}\r\n\r\n.gscalc-chart-outer {\r\n  flex: 1;\r\n  display: flex;\r\n  flex-direction: row;\r\n  align-items: stretch;\r\n  min-height: 180px;\r\n  padding-bottom: 44px;\r\n  min-width: 0;\r\n  overflow: hidden;\r\n}\r\n\r\n.gscalc-y-axis-col {\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: space-between;\r\n  align-items: flex-end;\r\n  padding-right: 8px;\r\n  flex-shrink: 0;\r\n  width: 40px;\r\n}\r\n.gscalc-y-axis-col span {\r\n  font-size: 10px;\r\n  font-weight: 700;\r\n  color: var(--ink-muted);\r\n  white-space: nowrap;\r\n  line-height: 1;\r\n}\r\n\r\n.gscalc-chart-wrap {\r\n  flex: 1;\r\n  display: flex;\r\n  align-items: flex-end;\r\n  gap: 10px;\r\n  position: relative;\r\n  border-bottom: 2px solid var(--border-str);\r\n  border-left: 2px solid var(--border-str);\r\n  padding: 0 6px;\r\n  min-width: 0;\r\n  overflow: hidden;\r\n}\r\n\r\n.gscalc-chart-wrap .gscalc-grid-line {\r\n  position: absolute;\r\n  left: 0; right: 0;\r\n  height: 1px;\r\n  background: var(--border);\r\n  z-index: 0;\r\n}\r\n\r\n.gscalc-bar-group {\r\n  flex: 1;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: flex-end;\r\n  height: 100%;\r\n  position: relative;\r\n  z-index: 1;\r\n}\r\n.gscalc-bar {\r\n  width: 100%;\r\n  max-width: 70px;\r\n  border-radius: 8px 8px 0 0;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: flex-start;\r\n  padding-top: 6px;\r\n  transform: scaleY(0);\r\n  transform-origin: bottom;\r\n  animation: gscalcGrow .9s cubic-bezier(.22,1,.36,1) forwards;\r\n  transition: height .5s cubic-bezier(.22,1,.36,1);\r\n}\r\n@keyframes gscalcGrow {\r\n  to { transform: scaleY(1); }\r\n}\r\n.gscalc-bar-val {\r\n  font-size: 11px;\r\n  font-weight: 800;\r\n  color: #fff;\r\n  text-align: center;\r\n  line-height: 1.1;\r\n}\r\n.gscalc-bar--green { background: var(--green); }\r\n.gscalc-bar--dark  { background: var(--ink);   }\r\n\r\n.gscalc-bar--val-outside {\r\n  padding-top: 0;\r\n  position: relative;\r\n}\r\n.gscalc-bar--val-outside .gscalc-bar-val {\r\n  position: absolute;\r\n  top: -18px;\r\n  left: 50%;\r\n  transform: translateX(-50%);\r\n  color: var(--ink);\r\n  white-space: nowrap;\r\n}\r\n\r\n.gscalc-bar-label {\r\n  position: absolute;\r\n  bottom: -42px;\r\n  font-size: 10px;\r\n  font-weight: 700;\r\n  color: var(--ink-muted);\r\n  text-align: center;\r\n  width: 100%;\r\n  max-width: 100%;\r\n  line-height: 1.25;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n}\r\n.gscalc-bar-label.gscalc-bar-label--active {\r\n  color: var(--ink);\r\n  font-weight: 800;\r\n}\r\n\r\n.gscalc-chart-legend {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  margin-top: 8px;\r\n  font-size: 11px;\r\n  font-weight: 600;\r\n  color: var(--ink-muted);\r\n}\r\n.gscalc-legend-dot {\r\n  display: inline-block;\r\n  width: 10px; height: 10px;\r\n  border-radius: 50%;\r\n  flex-shrink: 0;\r\n}\r\n.gscalc-legend-dot--green { background: var(--green); }\r\n.gscalc-legend-dot--dark  { background: var(--ink); }\r\n\r\n.gscalc-savings-badge {\r\n  margin-top: 12px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  gap: 10px;\r\n  padding: 10px 14px;\r\n  background: #fff;\r\n  border: 1.5px solid var(--border-str);\r\n  border-radius: var(--radius-sm);\r\n}\r\n.gscalc-badge-label {\r\n  font-size: 11px;\r\n  font-weight: 600;\r\n  color: var(--ink-muted);\r\n  line-height: 1.3;\r\n}\r\n.gscalc-badge-pct {\r\n  font-family: var(--font-head);\r\n  font-size: 20px;\r\n  font-weight: 700;\r\n  color: var(--green);\r\n  white-space: nowrap;\r\n  flex-shrink: 0;\r\n}\r\n\r\n\/* \u2500\u2500 TABLE BLOCK \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n.gscalc-table-block {\r\n  background: var(--surface);\r\n  border: 1px solid var(--border-str);\r\n  border-radius: var(--radius);\r\n  padding: clamp(16px, 2.5vw, 24px);\r\n  min-width: 0;\r\n  overflow: hidden;\r\n}\r\n\r\n.gscalc-table-header {\r\n  margin-bottom: 16px;\r\n}\r\n\r\n.gscalc-table-scroll {\r\n  overflow-x: auto;\r\n  -webkit-overflow-scrolling: touch;\r\n}\r\n\r\n.gscalc-table {\r\n  width: 100%;\r\n  border-collapse: separate;\r\n  border-spacing: 0;\r\n  font-size: 12px;\r\n  line-height: 1.4;\r\n  table-layout: auto;\r\n}\r\n\r\n.gscalc-table thead th {\r\n  font-family: var(--font-head);\r\n  font-size: 11px;\r\n  font-weight: 700;\r\n  text-transform: uppercase;\r\n  letter-spacing: .06em;\r\n  color: var(--ink-muted);\r\n  padding: 8px 8px;\r\n  text-align: center;\r\n  border-bottom: 2px solid var(--border-str);\r\n  white-space: nowrap;\r\n  background: var(--surface-2);\r\n}\r\n\r\n.gscalc-table thead th:first-child {\r\n  text-align: left;\r\n  border-radius: var(--radius-sm) 0 0 0;\r\n}\r\n.gscalc-table thead th:last-child {\r\n  border-radius: 0 var(--radius-sm) 0 0;\r\n}\r\n\r\n.gscalc-table thead th.gscalc-th-green {\r\n  background: var(--green);\r\n  color: #fff;\r\n  letter-spacing: .08em;\r\n}\r\n\r\n.gscalc-table tbody td {\r\n  padding: 8px 10px;\r\n  text-align: center;\r\n  border-bottom: 1px solid var(--border);\r\n  font-weight: 500;\r\n  color: var(--ink-mid);\r\n  white-space: nowrap;\r\n}\r\n\r\n.gscalc-table tbody td:first-child {\r\n  text-align: left;\r\n  font-weight: 600;\r\n  color: var(--ink);\r\n}\r\n\r\n.gscalc-table tbody tr.gscalc-tr-separator td {\r\n  border-bottom: 4px solid #d1d5db;\r\n  padding-bottom: 14px;\r\n}\r\n.gscalc-table tbody tr:nth-child(2) td {\r\n  padding-top: 14px;\r\n}\r\n\r\n.gscalc-table tbody td.gscalc-td-green {\r\n  background: rgba(12,188,65,.06);\r\n  color: var(--green);\r\n  font-weight: 800;\r\n}\r\n\r\n.gscalc-table tbody tr.gscalc-tr-total td {\r\n  border-top: 2px solid var(--border-str);\r\n  border-bottom: none;\r\n  font-weight: 800;\r\n  font-size: 13px;\r\n  padding-top: 12px;\r\n  padding-bottom: 12px;\r\n}\r\n.gscalc-table tbody tr.gscalc-tr-total td:first-child {\r\n  color: var(--ink);\r\n}\r\n.gscalc-table tbody tr.gscalc-tr-total td.gscalc-td-green {\r\n  color: var(--green);\r\n  font-size: 14px;\r\n}\r\n\r\n.gscalc-table-footnote {\r\n  font-size: 11px;\r\n  color: var(--ink-muted);\r\n  margin: 12px 0 0 0;\r\n  line-height: 1.5;\r\n  font-style: italic;\r\n}\r\n\r\n\/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n@media (max-width: 890px) {\r\n  .gscalc-root {\r\n    grid-template-columns: 1fr;\r\n    gap: 0;\r\n    overflow: visible;\r\n    border-radius: var(--radius);\r\n  }\r\n  .gscalc-panel {\r\n    min-width: 0;\r\n    width: 100%;\r\n    max-width: 100%;\r\n    padding: clamp(20px, 4vw, 36px) clamp(16px, 3vw, 32px);\r\n  }\r\n  .gscalc-panel--left {\r\n    border-right: none;\r\n    border-bottom: 1px solid var(--border-str);\r\n    position: sticky;\r\n    top: 0;\r\n    z-index: 10;\r\n    background: var(--surface);\r\n  }\r\n  .gscalc-panel--right {\r\n    gap: 20px;\r\n    overflow: hidden;\r\n  }\r\n  .gscalc-table-scroll {\r\n    overflow-x: auto;\r\n    -webkit-overflow-scrolling: touch;\r\n    margin: 0 -4px;\r\n    padding: 0 4px;\r\n  }\r\n  .gscalc-savings-badge {\r\n    flex-wrap: wrap;\r\n    gap: 6px;\r\n  }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n  .gscalc-root {\r\n    border-radius: var(--radius-sm);\r\n  }\r\n  .gscalc-panel--left {\r\n    position: static;\r\n  }\r\n  .gscalc-panel {\r\n    padding: 20px 16px;\r\n  }\r\n  .gscalc-inputs-row { \r\n    grid-template-columns: 1fr; \r\n  }\r\n  .gscalc-industry-row {\r\n    gap: 8px;\r\n    margin-bottom: 20px;\r\n  }\r\n  .gscalc-ind-btn {\r\n    padding: 10px 10px !important;\r\n    font-size: 12px !important;\r\n  }\r\n  .gscalc-chart-block {\r\n    padding: 16px 12px;\r\n  }\r\n  .gscalc-chart-outer { \r\n    min-height: 160px; \r\n  }\r\n  .gscalc-chart-wrap { \r\n    min-height: 140px; \r\n    gap: 6px;\r\n    padding: 0 4px;\r\n  }\r\n  .gscalc-y-axis-col {\r\n    width: 32px;\r\n    padding-right: 4px;\r\n  }\r\n  .gscalc-y-axis-col span {\r\n    font-size: 9px;\r\n  }\r\n  .gscalc-bar-label {\r\n    font-size: 9px;\r\n    width: 100%;\r\n    bottom: -36px;\r\n  }\r\n  .gscalc-chart-title {\r\n    font-size: 14px;\r\n  }\r\n  .gscalc-bar-val {\r\n    font-size: 9px;\r\n  }\r\n  .gscalc-bar {\r\n    max-width: 56px;\r\n    border-radius: 6px 6px 0 0;\r\n  }\r\n  .gscalc-badge-pct {\r\n    font-size: 18px;\r\n  }\r\n  .gscalc-badge-label {\r\n    font-size: 10px;\r\n  }\r\n  .gscalc-result-amount {\r\n    font-size: clamp(28px, 8vw, 44px);\r\n  }\r\n  .gscalc-table-block {\r\n    padding: 16px 12px;\r\n  }\r\n  .gscalc-table { \r\n    font-size: 11px; \r\n  }\r\n  .gscalc-table thead th {\r\n    font-size: 9px;\r\n    padding: 8px 6px;\r\n    letter-spacing: .02em;\r\n  }\r\n  .gscalc-table tbody td { \r\n    padding: 8px 6px; \r\n  }\r\n  .gscalc-table tbody td:first-child {\r\n    font-size: 10px;\r\n    white-space: normal;\r\n    min-width: 100px;\r\n  }\r\n  .gscalc-result-block {\r\n    padding: 20px 16px 16px;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n\r\n  const WORKING_DAYS = 250;\r\n  let currentCurrency = 'USD';\r\n  let exchangeRate = 1;\r\n  let industry = 'metal';\r\n  let method   = 'Other chemicals';\r\n  let isMetric = false;\r\n  let CURRENT_DATA = {};\r\n\r\n  \/* \u2500\u2500 DATA GENERATOR (Handles Metric Conversions) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function generateData(metric) {\r\n    const mult = metric ? 10.76391 : 1;\r\n    const areaLabel = metric ? 'm\u00b2' : 'sq ft';\r\n    const areaLabelUpper = metric ? 'M\u00b2' : 'SQ FT';\r\n\r\n    return {\r\n      metal: {\r\n        unitLabel: areaLabel,\r\n        defaultVolume: metric ? 25 : 250,\r\n        chartTitle: '<span class=\"tp-label\">STRIPPING COST \/ ' + areaLabelUpper + '<\/span>',\r\n        laborTitle: '<span class=\"tp-label\">LABOR (MIN. \/ ' + areaLabelUpper + ')<\/span>',\r\n        tableTitle: '<span class=\"tp-label\">PROCESS EFFICIENCY COMPARISON \u2014 STRIP 1 ' + areaLabelUpper + '<\/span>',\r\n        maxY: metric ? 120 : 12,\r\n        ySteps: metric ? [120, 100, 80, 60, 40, 20, 0] : [12, 10, 8, 6, 4, 2, 0],\r\n        laborMaxY: metric ? 120 : 12,\r\n        laborYSteps: metric ? [120, 100, 80, 60, 40, 20, 0] : [12, 10, 8, 6, 4, 2, 0],\r\n        greensolvCost: 1.50 * mult,\r\n        greensolvLabor: 1 * mult,\r\n        columns: ['<span class=\"tp-label\">Greensolv<\/span>', '<span class=\"tp-label\">Other chemicals<\/span>', '<span class=\"tp-label\">Sandblasting<\/span>'],\r\n        bars: [\r\n          { label: '<span class=\"tp-label\">Greensolv<\/span>', cost: 1.50 * mult, key: null },\r\n          { label: '<span class=\"tp-label\">Other<br>chemicals<\/span>', cost: 3.75 * mult, key: 'Other chemicals' },\r\n          { label: '<span class=\"tp-label\">Sandblasting<\/span>', cost: 10.80 * mult, key: 'Sandblasting' }\r\n        ],\r\n        laborBars: [\r\n          { label: '<span class=\"tp-label\">Greensolv<\/span>', minutes: 1 * mult, key: null },\r\n          { label: '<span class=\"tp-label\">Other<br>chemicals<\/span>', minutes: 3 * mult, key: 'Other chemicals' },\r\n          { label: '<span class=\"tp-label\">Sandblasting<\/span>', minutes: 10 * mult, key: 'Sandblasting' }\r\n        ],\r\n        tableRows: [\r\n          { label: '<span class=\"tp-label\">Labor (min. \/ ' + areaLabel + ')<\/span>', isCurrency: false, suffix: ' min.', values: [1 * mult, 3 * mult, 10 * mult] },\r\n          { label: '<span class=\"tp-label\">Labor ($ \/ ' + areaLabel + ') @ $30\/h<\/span>', isCurrency: true, values: [0.50 * mult, 1.50 * mult, 5.00 * mult] },\r\n          { label: '<span class=\"tp-label\">Material ($ \/ ' + areaLabel + ')<\/span>', isCurrency: true, values: [0.85 * mult, 1.75 * mult, 5.50 * mult] },\r\n          { label: '<span class=\"tp-label\">Others ($ \/ ' + areaLabel + ') (electricity, mud)<\/span>', isCurrency: true, values: [0.15 * mult, 0.50 * mult, 0.30 * mult] }\r\n        ],\r\n        totalRow: { label: '<span class=\"tp-label\">Total usage cost* ($ \/ ' + areaLabel + ')<\/span>', isCurrency: true, values: [1.50 * mult, 3.75 * mult, 10.80 * mult] }\r\n      },\r\n      wheel: {\r\n        unitLabel: 'wheels',\r\n        defaultVolume: 20,\r\n        chartTitle: '<span class=\"tp-label\">STRIPPING COST \/ WHEEL<\/span>',\r\n        laborTitle: '<span class=\"tp-label\">LABOR (MIN. \/ WHEEL)<\/span>',\r\n        tableTitle: '<span class=\"tp-label\">PROCESS EFFICIENCY COMPARISON \u2014 STRIP 1 WHEEL<\/span>',\r\n        maxY: 35,\r\n        ySteps: [35, 30, 25, 20, 15, 10, 5, 0],\r\n        laborMaxY: 35,\r\n        laborYSteps: [35, 30, 25, 20, 15, 10, 5, 0],\r\n        greensolvCost: 5.00,\r\n        greensolvLabor: 3,\r\n        columns: ['<span class=\"tp-label\">Greensolv<\/span>', '<span class=\"tp-label\">Other chemicals<\/span>', '<span class=\"tp-label\">Sandblasting<\/span>', '<span class=\"tp-label\">Singeing \/ Torching<\/span>'],\r\n        bars: [\r\n          { label: '<span class=\"tp-label\">Greensolv<\/span>', cost: 5.00, key: null },\r\n          { label: '<span class=\"tp-label\">Other<br>chemicals<\/span>', cost: 14.00, key: 'Other chemicals' },\r\n          { label: '<span class=\"tp-label\">Sandblasting<\/span>', cost: 32.00, key: 'Sandblasting' },\r\n          { label: '<span class=\"tp-label\">Singeing \/<br>Torching<\/span>', cost: 8.00, key: 'Singeing' }\r\n        ],\r\n        laborBars: [\r\n          { label: '<span class=\"tp-label\">Greensolv<\/span>', minutes: 3, key: null },\r\n          { label: '<span class=\"tp-label\">Other<br>chemicals<\/span>', minutes: 10, key: 'Other chemicals' },\r\n          { label: '<span class=\"tp-label\">Sandblasting<\/span>', minutes: 30, key: 'Sandblasting' },\r\n          { label: '<span class=\"tp-label\">Singeing \/<br>Torching<\/span>', minutes: 10, key: 'Singeing' }\r\n        ],\r\n        tableRows: [\r\n          { label: '<span class=\"tp-label\">Labor (min. \/ wheel)<\/span>', isCurrency: false, suffix: ' min.', values: [3, 10, 30, 10] },\r\n          { label: '<span class=\"tp-label\">Labor ($ \/ wheel) @ $30\/h<\/span>', isCurrency: true, values: [1.50, 5.00, 15.00, 5.00] },\r\n          { label: '<span class=\"tp-label\">Material ($ \/ wheel)<\/span>', isCurrency: true, values: [3.00, 7.00, 15.00, 3.00] },\r\n          { label: '<span class=\"tp-label\">Others ($ \/ wheel) (electricity, mud)<\/span>', isCurrency: true, values: [0.50, 2.00, 2.00, 0.00] }\r\n        ],\r\n        totalRow: { label: '<span class=\"tp-label\">Total usage cost* ($ \/ wheel)<\/span>', isCurrency: true, values: [5.00, 14.00, 32.00, 8.00] }\r\n      }\r\n    };\r\n  }\r\n\r\n  \/\/ Generate initial data (Imperial by default)\r\n  CURRENT_DATA = generateData(false);\r\n\r\n  \/* \u2500\u2500 FORMATTING HELPERS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  \r\n  \/\/ Format for large integers (No decimals, dynamic spacing vs comma)\r\n  const fmtNoDecimals = n => {\r\n    let formatted = Math.round(n).toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 0 });\r\n    \/\/ Si on n'est pas aux US (isMetric = true), on remplace les virgules par des espaces\r\n    return isMetric ? formatted.replace(\/,\/g, ' ') : formatted;\r\n  };\r\n  \r\n  \/\/ Custom money formatter to handle CAD vs USD syntax correctly\r\n  const formatMoney = (amount, noDecimals = false) => {\r\n    let val = noDecimals ? fmtNoDecimals(amount) : amount.toFixed(2);\r\n    return currentCurrency === 'CAD' ? val + ' $' : '$' + val;\r\n  };\r\n  \r\n  const fmtPct = n => Math.round(n) + '%';\r\n\r\n  \/* \u2500\u2500 IP GEOLOCATION FOR CURRENCY & UNITS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  fetch('https:\/\/get.geojs.io\/v1\/ip\/country.json')\r\n    .then(res => res.json())\r\n    .then(data => {\r\n      \/\/ 1. Detect if Metric (Not USA)\r\n      isMetric = (data.country !== 'US');\r\n      CURRENT_DATA = generateData(isMetric);\r\n\r\n      \/\/ 2. Auto-update input volume & unit if user hasn't modified the default\r\n      if (industry === 'metal') {\r\n        document.getElementById('gscalc-unit').innerHTML = `<span class=\"tp-label\">${CURRENT_DATA.metal.unitLabel}<\/span>`;\r\n        const volInput = document.getElementById('gscalc-volume');\r\n        if (volInput.value == \"250\" && isMetric) {\r\n            volInput.value = CURRENT_DATA.metal.defaultVolume;\r\n        } else if (volInput.value == \"25\" && !isMetric) {\r\n            volInput.value = CURRENT_DATA.metal.defaultVolume;\r\n        }\r\n      }\r\n\r\n      \/\/ 3. Currency logic (CAD vs USD)\r\n      if (data.country === 'CA' || data.country === 'CAN') {\r\n        currentCurrency = 'CAD';\r\n        const currEl = document.getElementById('gscalc-currency');\r\n        if(currEl) currEl.textContent = 'CAD';\r\n        \r\n        return fetch('https:\/\/open.er-api.com\/v6\/latest\/USD');\r\n      } else {\r\n        renderMethods();\r\n        renderAll();\r\n        calc();\r\n        return null;\r\n      }\r\n    })\r\n    .then(res => res ? res.json() : null)\r\n    .then(data => {\r\n      if (data && data.rates && data.rates.CAD) {\r\n        exchangeRate = data.rates.CAD;\r\n        const hourlyEl = document.getElementById('gscalc-hourly-rate');\r\n        if (hourlyEl) hourlyEl.textContent = formatMoney(30 * exchangeRate);\r\n        \r\n        renderAll();\r\n        calc();\r\n      }\r\n    })\r\n    .catch(err => {\r\n      console.log('Geolocation or Exchange rate failed', err);\r\n      \/\/ Fallback\r\n      CURRENT_DATA = generateData(false);\r\n      renderAll();\r\n      calc();\r\n    });\r\n\r\n  \/* \u2500\u2500 CHART RENDER (reusable) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function renderBarChart(wrapId, yAxisId, bars, maxY, ySteps, valuePrefix, valueSuffix, selectedMethod, isCurrency = false) {\r\n    const wrap  = document.getElementById(wrapId);\r\n    const yAxis = document.getElementById(yAxisId);\r\n    if (!wrap) return;\r\n\r\n    if (yAxis) {\r\n      yAxis.innerHTML = ySteps.map(v => {\r\n        const displayV = isCurrency ? Math.round(v * exchangeRate) : v;\r\n        return `<span class=\"tp-label\">${valuePrefix}${displayV}${valueSuffix}<\/span>`;\r\n      }).join('');\r\n    }\r\n\r\n    let html = '';\r\n    ySteps.forEach(val => {\r\n      const pct = (val \/ maxY) * 100;\r\n      html += '<div class=\"gscalc-grid-line\" style=\"bottom:' + pct + '%;\"><\/div>';\r\n    });\r\n\r\n    bars.forEach(bar => {\r\n      const val = bar.cost !== undefined ? bar.cost : bar.minutes;\r\n      const heightPct  = (val \/ maxY) * 100;\r\n      const isGreensolv = bar.key === null;\r\n      const isSelected  = bar.key !== null && bar.key === selectedMethod;\r\n      const barClass    = isGreensolv ? 'gscalc-bar--green' : 'gscalc-bar--dark';\r\n      const labelClass  = isSelected ? 'gscalc-bar-label--active' : '';\r\n      \r\n      let displayVal;\r\n      if (bar.cost !== undefined) {\r\n        displayVal = formatMoney(bar.cost * exchangeRate);\r\n      } else {\r\n        let m = bar.minutes;\r\n        let mStr = (m % 1 !== 0) ? m.toFixed(1) : m;\r\n        displayVal = '<span class=\"tp-label\">' + mStr + ' min.<\/span>';\r\n      }\r\n      \r\n      const outsideClass = heightPct < 15 ? ' gscalc-bar--val-outside' : '';\r\n\r\n      html += '<div class=\"gscalc-bar-group\">' +\r\n                '<div class=\"gscalc-bar ' + barClass + outsideClass + '\" style=\"height:' + heightPct + '%;\">' +\r\n                  '<span class=\"gscalc-bar-val\">' + displayVal + '<\/span>' +\r\n                '<\/div>' +\r\n                '<span class=\"gscalc-bar-label ' + labelClass + '\">' + bar.label + '<\/span>' +\r\n              '<\/div>';\r\n    });\r\n\r\n    wrap.innerHTML = html;\r\n  }\r\n\r\n  \/* \u2500\u2500 TOTAL COST CHART \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function renderCostChart() {\r\n    const d = CURRENT_DATA[industry];\r\n    document.getElementById('gscalc-chart-title').innerHTML = d.chartTitle;\r\n    let prefix = currentCurrency === 'CAD' ? '' : '$';\r\n    let suffix = currentCurrency === 'CAD' ? ' $' : '';\r\n    renderBarChart('gscalc-chart-wrap', 'gscalc-y-axis', d.bars, d.maxY, d.ySteps, prefix, suffix, method, true);\r\n  }\r\n\r\n  \/* \u2500\u2500 LABOR CHART \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function renderLaborChart() {\r\n    const d = CURRENT_DATA[industry];\r\n    document.getElementById('gscalc-labor-title').innerHTML = d.laborTitle;\r\n    renderBarChart('gscalc-labor-chart-wrap', 'gscalc-labor-y-axis', d.laborBars, d.laborMaxY, d.laborYSteps, '', '', method, false);\r\n  }\r\n\r\n  \/* \u2500\u2500 TABLE RENDER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function renderTable() {\r\n    const d   = CURRENT_DATA[industry];\r\n    const tbl = document.getElementById('gscalc-table');\r\n    const ttl = document.getElementById('gscalc-table-title');\r\n    if (!tbl) return;\r\n    if (ttl) ttl.innerHTML = d.tableTitle;\r\n\r\n    let html = '<thead><tr><th><span class=\"tp-label\">Category<\/span><\/th>';\r\n    d.columns.forEach((col, i) => {\r\n      html += '<th' + (i === 0 ? ' class=\"gscalc-th-green\"' : '') + '>' + col + '<\/th>';\r\n    });\r\n    html += '<\/tr><\/thead><tbody>';\r\n\r\n    d.tableRows.forEach((row, rowIndex) => {\r\n      let trClass = rowIndex === 0 ? 'gscalc-tr-separator' : '';\r\n      html += '<tr class=\"' + trClass + '\"><td>' + row.label + '<\/td>';\r\n      row.values.forEach((v, i) => {\r\n        let displayV;\r\n        if (row.isCurrency) {\r\n            displayV = formatMoney(v * exchangeRate);\r\n        } else {\r\n            let mStr = (v % 1 !== 0) ? v.toFixed(1) : v;\r\n            displayV = mStr + (row.suffix || '');\r\n        }\r\n        html += '<td' + (i === 0 ? ' class=\"gscalc-td-green\"' : '') + '><span class=\"tp-label\">' + displayV + '<\/span><\/td>';\r\n      });\r\n      html += '<\/tr>';\r\n    });\r\n\r\n    \/\/ Total row\r\n    html += '<tr class=\"gscalc-tr-total\"><td>' + d.totalRow.label + '<\/td>';\r\n    d.totalRow.values.forEach((v, i) => {\r\n      let displayV = d.totalRow.isCurrency ? formatMoney(v * exchangeRate) : v;\r\n      html += '<td' + (i === 0 ? ' class=\"gscalc-td-green\"' : '') + '><span class=\"tp-label\">' + displayV + '<\/span><\/td>';\r\n    });\r\n    html += '<\/tr><\/tbody>';\r\n\r\n    tbl.innerHTML = html;\r\n  }\r\n\r\n  \/* \u2500\u2500 BADGES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function updateBadges() {\r\n    const d = CURRENT_DATA[industry];\r\n\r\n    \/\/ Cost badge\r\n    const costBar = d.bars.find(b => b.key === method);\r\n    const badgePct = document.getElementById('gscalc-badge-pct');\r\n    if (badgePct) {\r\n      if (costBar) {\r\n        const savings = ((costBar.cost - d.greensolvCost) \/ costBar.cost) * 100;\r\n        badgePct.innerHTML = `<span class=\"tp-label\">${fmtPct(savings)}<\/span> <span class=\"tp-label\">cheaper<\/span>`;\r\n      } else {\r\n        badgePct.innerHTML = '\u2014';\r\n      }\r\n    }\r\n\r\n    \/\/ Labor badge\r\n    const laborBar = d.laborBars.find(b => b.key === method);\r\n    const laborPct = document.getElementById('gscalc-labor-badge-pct');\r\n    if (laborPct) {\r\n      if (laborBar) {\r\n        const savings = ((laborBar.minutes - d.greensolvLabor) \/ laborBar.minutes) * 100;\r\n        laborPct.innerHTML = `<span class=\"tp-label\">${fmtPct(savings)}<\/span> <span class=\"tp-label\">faster<\/span>`;\r\n      } else {\r\n        laborPct.innerHTML = '\u2014';\r\n      }\r\n    }\r\n  }\r\n\r\n  \/* \u2500\u2500 CALCULATOR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function animateAmount(el, from, to, ms) {\r\n    let start = null;\r\n    const ease = t => 1 - Math.pow(1 - t, 4);\r\n    const step = ts => {\r\n      if (!start) start = ts;\r\n      const p = Math.min((ts - start) \/ ms, 1);\r\n      \r\n      \/\/ Enl\u00e8ve les d\u00e9cimales en appliquant fmtNoDecimals \u00e0 chaque \u00e9tape de l'animation\r\n      el.textContent = formatMoney(from + (to - from) * ease(p), true);\r\n      \r\n      if (p < 1) requestAnimationFrame(step);\r\n      else el.textContent = formatMoney(to, true);\r\n    };\r\n    requestAnimationFrame(step);\r\n  }\r\n\r\n  function calc() {\r\n    const d      = CURRENT_DATA[industry];\r\n    const volume = parseFloat(document.getElementById('gscalc-volume').value) || 0;\r\n    const bar    = d.bars.find(b => b.key === method);\r\n    if (!bar) return;\r\n\r\n    \/\/ Arrondir directement le r\u00e9sultat pour s'assurer de ne jamais avoir de d\u00e9cimales dans les calculs ult\u00e9rieurs\r\n    const saving = Math.round(Math.max(0, (bar.cost - d.greensolvCost) * exchangeRate * volume * WORKING_DAYS));\r\n    const el     = document.getElementById('gscalc-result');\r\n    \/\/ Enlever les espaces et autres caract\u00e8res non num\u00e9riques pour bien relire la valeur pr\u00e9c\u00e9dente\r\n    const prev   = parseFloat(el.textContent.replace(\/[^0-9.-]\/g, '')) || 0;\r\n\r\n    animateAmount(el, prev, saving, 600);\r\n  }\r\n\r\n  \/* \u2500\u2500 METHOD SELECT (TRANSLATION-SAFE) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function renderMethods() {\r\n    const sel = document.getElementById('gscalc-method');\r\n    const d   = CURRENT_DATA[industry];\r\n    const methods = d.bars.filter(b => b.key !== null).map(b => b.key);\r\n\r\n    if (!methods.includes(method)) method = methods[0];\r\n\r\n    \/\/ Grab pre-translated strings from the hidden DOM elements\r\n    const trChem = document.getElementById('tr-method-chem') ? document.getElementById('tr-method-chem').innerText : 'Other chemicals';\r\n    const trSand = document.getElementById('tr-method-sand') ? document.getElementById('tr-method-sand').innerText : 'Sandblasting';\r\n    const trSinge = document.getElementById('tr-method-singe') ? document.getElementById('tr-method-singe').innerText : 'Singeing \/ Torching';\r\n\r\n    sel.innerHTML = methods.map(m => {\r\n      let displayTxt = m;\r\n      if (m === 'Other chemicals') displayTxt = trChem;\r\n      else if (m === 'Sandblasting') displayTxt = trSand;\r\n      else if (m === 'Singeing') displayTxt = trSinge;\r\n\r\n      return '<option value=\"' + m + '\">' + displayTxt + '<\/option>';\r\n    }).join('');\r\n    sel.value = method;\r\n  }\r\n\r\n  \/* \u2500\u2500 INDUSTRY SWITCH \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function switchIndustry(type) {\r\n    industry = type;\r\n\r\n    document.querySelectorAll('.gscalc-ind-btn').forEach(btn => {\r\n      btn.classList.toggle('gscalc-ind-btn--active', btn.dataset.type === type);\r\n    });\r\n\r\n    const d = CURRENT_DATA[industry];\r\n    document.getElementById('gscalc-unit').innerHTML = `<span class=\"tp-label\">${d.unitLabel}<\/span>`;\r\n    document.getElementById('gscalc-volume').value     = d.defaultVolume;\r\n\r\n    renderMethods();\r\n    renderAll();\r\n    calc();\r\n  }\r\n\r\n  \/* \u2500\u2500 RENDER ALL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  function renderAll() {\r\n    renderCostChart();\r\n    renderLaborChart();\r\n    renderTable();\r\n    updateBadges();\r\n  }\r\n\r\n  \/* \u2500\u2500 EVENTS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  document.querySelectorAll('.gscalc-ind-btn').forEach(btn => {\r\n    btn.addEventListener('click', () => switchIndustry(btn.dataset.type));\r\n  });\r\n\r\n  \/\/ Event Listener avec Limite Automatique du volume maximum\r\n  document.getElementById('gscalc-volume').addEventListener('input', function() {\r\n    let val = parseInt(this.value) || 0;\r\n    \r\n    \/\/ D\u00e9finir la limite (Max) selon l'industrie et l'unit\u00e9 de mesure\r\n    let maxVol = 1000; \r\n    if (industry === 'metal') {\r\n       maxVol = isMetric ? 1000 : 10000;\r\n    } else if (industry === 'wheel') {\r\n       maxVol = 1000;\r\n    }\r\n\r\n    if (val > maxVol) {\r\n      this.value = maxVol;\r\n    }\r\n    \r\n    calc();\r\n  });\r\n\r\n  document.getElementById('gscalc-method').addEventListener('change', e => {\r\n    method = e.target.value;\r\n    renderAll();\r\n    calc();\r\n  });\r\n\r\n  \/* \u2500\u2500 INIT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  const d0 = CURRENT_DATA[industry];\r\n  document.getElementById('gscalc-unit').innerHTML = `<span class=\"tp-label\">${d0.unitLabel}<\/span>`;\r\n  document.getElementById('gscalc-volume').value     = d0.defaultVolume;\r\n\r\n  renderMethods();\r\n  renderAll();\r\n\r\n  \/\/ Initial value without animation (and no decimals)\r\n  const initBar  = d0.bars.find(b => b.key === method);\r\n  const initSave = initBar ? Math.round((initBar.cost - d0.greensolvCost) * d0.defaultVolume * WORKING_DAYS) : 0;\r\n  document.getElementById('gscalc-result').textContent = formatMoney(initSave, true);\r\n\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3dff2bf4 e-con-full e-flex e-con e-parent\" data-id=\"3dff2bf4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7bbd615 elementor-widget elementor-widget-shortcode\" data-id=\"7bbd615\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><style>\n  .gs-123-teaser.gsv26-tool {\n    --gsv26-max-width: 1280px;\n    --gsv26-px: 48px;\n    --gsv26-mobile-px: 32px;\n    --gsv26-accent: #0CBC41;\n    --gsv26-ink: #252527;\n    --gsv26-white: #ffffff;\n    --gsv26-muted: rgba(37,37,39,0.70);\n    --gsv26-soft: rgba(37,37,39,0.04);\n    --gsv26-line: rgba(37,37,39,0.08);\n    --gsv26-radius: 24px;\n    --gsv26-radiusLg: 32px;\n    --gsv26-gap: clamp(20px, 3vw, 32px);\n    --gsv26-shadow: 0 1px 3px rgba(0,0,0,0.02), 0 12px 40px rgba(0,0,0,0.06);\n    --gsv26-shadowHover: 0 4px 12px rgba(0,0,0,0.04), 0 20px 60px rgba(0,0,0,0.12);\n    font-family: Roboto, system-ui, -apple-system, sans-serif;\n    color: var(--gsv26-ink);\n    line-height: 1.6;\n  }\n\n  .gs-123-teaser.gsv26-tool * { box-sizing: border-box; }\n\n  .gs-123-teaser .gsv26-container {\n    width: min(var(--gsv26-max-width), calc(100% - var(--gsv26-px)));\n    margin-left: auto;\n    margin-right: auto;\n    position: relative;\n    z-index: 2;\n  }\n\n  .gs-123-teaser .gsv26-section-tanks {\n    position: relative;\n    padding: clamp(60px, 10vh, 100px) 0;\n    overflow: hidden;\n    background: transparent;\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    .gs-123-teaser .gsv26-reveal {\n      opacity: 0;\n      transform: translateY(14px);\n      transition: opacity 0.65s ease, transform 0.65s ease;\n      will-change: opacity, transform;\n    }\n    .gs-123-teaser .gsv26-reveal.gsv26-is-in {\n      opacity: 1;\n      transform: none;\n    }\n  }\n\n  .gs-123-teaser .gsHome-ambientGlow {\n    position: absolute;\n    top: 50%; left: 50%;\n    transform: translate(-50%, -50%);\n    width: 80%; height: 80%;\n    background: radial-gradient(circle, rgba(12, 188, 65, 0.08) 0%, transparent 65%);\n    filter: blur(80px);\n    z-index: 0;\n    pointer-events: none;\n  }\n\n  .gs-123-teaser .gsHome-bentoSection {\n    background-color: rgba(255, 255, 255, 0.45);\n    backdrop-filter: blur(24px);\n    -webkit-backdrop-filter: blur(24px);\n    border-radius: var(--gsv26-radiusLg);\n    border: 1px solid rgba(255, 255, 255, 0.7);\n    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.03);\n    padding: clamp(40px, 8vh, 80px) clamp(16px, 4vw, 40px);\n  }\n\n  .gs-123-teaser .gsHome-bentoHeader {\n    text-align: center;\n    max-width: 700px;\n    margin: 0 auto 50px;\n  }\n\n  .gs-123-teaser .gsBento-h2 {\n    font-family: \"Oswald\", \"DIN Condensed\", \"Arial Narrow\", sans-serif;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.02em;\n    margin: 0;\n    font-size: clamp(32px, 5vw, 44px);\n    color: var(--gsv26-ink);\n    line-height: 1.2;\n  }\n\n  .gs-123-teaser .gsHome-bentoIntro {\n    margin: 20px auto 0;\n    max-width: 640px;\n    color: var(--gsv26-muted);\n    font-size: clamp(15px, 1.8vw, 17px);\n  }\n\n  .gs-123-teaser .gsHome-stepsGrid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: var(--gsv26-gap);\n    margin-bottom: 56px;\n  }\n\n  .gs-123-teaser .gsHome-stepCard {\n    position: relative; padding: 48px 36px 44px;\n    background: var(--gsv26-white);\n    border: 1px solid var(--gsv26-line);\n    border-radius: var(--gsv26-radius);\n    box-shadow: var(--gsv26-shadow);\n    text-align: center;\n    transition: transform .35s ease, box-shadow .35s ease, border-color .35s ease, background .35s ease;\n    overflow: hidden; display: flex; flex-direction: column; align-items: center;\n    cursor: pointer;\n  }\n  .gs-123-teaser .gsHome-stepCard::before {\n    content: ''; position: absolute; top: 0; left: 0; right: 0; height: 6px;\n    background: linear-gradient(90deg, transparent, var(--gsv26-accent), transparent);\n    opacity: 0; transition: opacity 0.4s ease;\n  }\n  .gs-123-teaser .gsHome-stepCard:hover {\n    border-color: rgba(12,188,65,0.3); transform: translateY(-4px);\n    box-shadow: var(--gsv26-shadowHover);\n  }\n  .gs-123-teaser .gsHome-stepCard:hover::before { opacity: 1; }\n\n  .gs-123-teaser .gsHome-stepIcon {\n    display: inline-flex; align-items: center; justify-content: center;\n    width: 88px; height: 88px; margin: 0 auto 24px; border-radius: 50%;\n    background: linear-gradient(135deg, rgba(12,188,65,0.1), rgba(12,188,65,0.05));\n    border: 3px dotted rgba(12,188,65,0.3); transition: all 0.4s ease;\n  }\n  .gs-123-teaser .gsHome-stepCard:hover .gsHome-stepIcon { border-style: solid; }\n\n  .gs-123-teaser .gsHome-stepNumber {\n    display: block; font-family: \"Oswald\", sans-serif; font-size: 32px;\n    font-weight: 700; color: var(--gsv26-accent); line-height: 1;\n  }\n\n  .gs-123-teaser .gsTanks-h3 {\n    margin: 0; font-family: \"Oswald\", sans-serif; font-size: clamp(20px, 2.5vw, 24px);\n    color: var(--gsv26-ink); font-weight: 700; text-transform: uppercase; letter-spacing: 0.02em; line-height: 1.2;\n  }\n\n  .gs-123-teaser .gs-cta-bar {\n    display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 40px;\n    background: linear-gradient(135deg, #111214 0%, #1b1d20 100%);\n    border-radius: var(--gsv26-radius); padding: 36px 44px; position: relative; overflow: hidden;\n  }\n  .gs-123-teaser .gs-cta-bar::before {\n    content: ''; position: absolute; top: -80px; left: -60px; width: 300px; height: 300px;\n    background: radial-gradient(circle, rgba(12,188,65,0.16) 0%, transparent 70%); pointer-events: none;\n  }\n  .gs-123-teaser .gs-cta-bar::after {\n    content: ''; position: absolute; inset: 0;\n    background-image: linear-gradient(rgba(12,188,65,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(12,188,65,0.04) 1px, transparent 1px);\n    background-size: 40px 40px; pointer-events: none;\n  }\n  .gs-123-teaser .gs-cta-left, .gs-123-teaser .gs-cta-right { position: relative; z-index: 1; }\n  .gs-123-teaser .gs-cta-eyebrow {\n    display: inline-flex; align-items: center; gap: 8px; font-size: 11px; font-weight: 700;\n    letter-spacing: 1.5px; text-transform: uppercase; color: var(--gsv26-accent); margin-bottom: 10px;\n  }\n  .gs-123-teaser .gs-cta-eyebrow::before {\n    content: ''; display: inline-block; width: 20px; height: 2px; background: var(--gsv26-accent); border-radius: 2px;\n  }\n  .gs-123-teaser .gs-cta-headline {\n    font-family: \"Oswald\", sans-serif; font-size: clamp(26px, 3.5vw, 38px); font-weight: 700;\n    color: #ffffff; text-transform: uppercase; margin-bottom: 10px;\n  }\n  .gs-123-teaser .gs-cta-sub { font-size: 15px; color: rgba(255,255,255,0.5); max-width: 480px; }\n\n  .gs-123-teaser .gs-cta-btn {\n    display: inline-flex; align-items: center; gap: 12px; border: none;\n    background: var(--gsv26-accent); color: #fff; border-radius: 14px; padding: 18px 32px;\n    cursor: pointer; font-family: \"Oswald\", sans-serif; font-size: 20px; font-weight: 600;\n    text-transform: uppercase; transition: all 0.25s ease; box-shadow: 0 8px 32px rgba(12,188,65,0.35);\n  }\n  .gs-123-teaser .gs-cta-btn:hover {\n    transform: translateY(-3px); box-shadow: 0 16px 48px rgba(12,188,65,0.45); background: #0dce49;\n  }\n  .gs-123-teaser .gs-cta-arrow { font-size: 22px; transition: transform 0.25s ease; }\n  .gs-123-teaser .gs-cta-btn:hover .gs-cta-arrow { transform: translateX(4px); }\n  .gs-123-teaser .gs-cta-trust {\n    display: flex; align-items: center; justify-content: center; gap: 16px; margin-top: 12px;\n    font-size: 12px; color: rgba(255,255,255,0.3); font-weight: 500;\n  }\n\n  @media (max-width: 980px) {\n    .gs-123-teaser .gsHome-stepsGrid { grid-template-columns: 1fr; max-width: 560px; margin: 0 auto 56px; }\n  }\n  @media (max-width: 820px) {\n    .gs-123-teaser .gs-cta-bar { grid-template-columns: 1fr; text-align: center; }\n    .gs-123-teaser .gs-cta-btn { width: 100%; justify-content: center; }\n    .gs-123-teaser .gs-cta-eyebrow { justify-content: center; }\n  }\n  @media (max-width: 640px) {\n    .gs-123-teaser .gsv26-container { width: calc(100% - var(--gsv26-mobile-px)); }\n    .gs-123-teaser .gsHome-bentoSection { padding: 40px 16px; }\n    .gs-123-teaser .gsHome-stepCard { padding: 36px 24px 32px; }\n  }\n<\/style>\n\n<div class=\"gsv26-wrapper gsv26-tool gs-123-teaser\">\n  <section class=\"gsv26-section-tanks\">\n    <div class=\"gsHome-ambientGlow\"><\/div>\n    <div class=\"gsv26-container\">\n      <div class=\"gsHome-bentoSection gsv26-reveal\">\n        <div class=\"gsHome-bentoHeader\">\n          <h2 class=\"gsBento-h2\"><span style=\"color: var(--gsv26-ink);\">1, 2, 3<\/span> <span style=\"color: var(--gsv26-accent);\">READY TO STRIP<\/span><\/h2>\n          <p class=\"gsHome-bentoIntro\">You want to go further, greener, and more efficient. Your choices make the difference<\/p>\n        <\/div>\n\n        <div class=\"gsHome-stepsGrid\">\n          <div class=\"gsHome-stepCard gsv26-reveal\">\n            <div class=\"gsHome-stepIcon\"><span class=\"gsHome-stepNumber\">1<\/span><\/div>\n            <h3 class=\"gsTanks-h3\">Choose the Chemical<\/h3>\n          <\/div>\n          <div class=\"gsHome-stepCard gsv26-reveal\">\n            <div class=\"gsHome-stepIcon\"><span class=\"gsHome-stepNumber\">2<\/span><\/div>\n            <h3 class=\"gsTanks-h3\">Choose the stripping system<\/h3>\n          <\/div>\n          <div class=\"gsHome-stepCard gsv26-reveal\">\n            <div class=\"gsHome-stepIcon\"><span class=\"gsHome-stepNumber\">3<\/span><\/div>\n            <h3 class=\"gsTanks-h3\">Get Instant Price Range<\/h3>\n          <\/div>\n        <\/div>\n\n        <div class=\"gs-cta-bar gsv26-reveal\">\n          <div class=\"gs-cta-left\">\n            <div class=\"gs-cta-eyebrow\">Free \u00b7 No signup required \u00b7 Takes 60 seconds<\/div>\n            <div class=\"gs-cta-headline\">Not sure where to start?<\/div>\n            <div class=\"gs-cta-sub\">Answer 3 quick questions and get an instant price estimate for your stripping setup.<\/div>\n          <\/div>\n          <div class=\"gs-cta-right\">\n            <button type=\"button\" class=\"gs-cta-btn\" id=\"gs123OpenBtn\">\n              <span>START THE TOOL<\/span>\n              <span class=\"gs-cta-arrow\">\u2192<\/span>\n            <\/button>\n            <div class=\"gs-cta-trust\">\n              <span>\u2713 Instant results<\/span>\n              <span>\u2713 Expert follow-up<\/span>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n<\/div>\n\n<script>\n(function() {\n  if (window.__gs123TeaserReveal) return;\n  window.__gs123TeaserReveal = true;\n  if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n  const scopeRoot = document.querySelector('.gs-123-teaser');\n  if (!scopeRoot) return;\n  const targets = Array.from(scopeRoot.querySelectorAll('.gsv26-reveal'));\n  if (targets.length === 0) return;\n  const io = new IntersectionObserver((entries) => {\n    entries.forEach(entry => {\n      if (!entry.isIntersecting) return;\n      entry.target.classList.add('gsv26-is-in');\n      io.unobserve(entry.target);\n    });\n  }, { threshold: 0.15, rootMargin: '50px 0px' });\n  targets.forEach(el => io.observe(el));\n})();\n<\/script>\n    \n<style>\n    #gs123-widget {\n      --gs-green: #0CBC41;\n      --gs-green-hover: #0ea83b;\n      --gs-bg: #ffffff;\n      --gs-bg-soft: #f8fafc;\n      --gs-text: #0f172a;\n      --gs-muted: #64748b;\n      --gs-border: #e2e8f0;\n      --gs-border-hover: #cbd5e1;\n      --gs-radius-wrap: 24px;\n      --gs-radius-card: 16px;\n      --gs-radius-btn: 12px;\n      font-family: Roboto, system-ui, -apple-system, Segoe UI, Arial, sans-serif;\n      color: var(--gs-text);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      padding: clamp(10px, 2vh, 24px) clamp(10px, 1.5vw, 24px);\n      overflow-y: auto;\n    }\n    #gs123-widget * { box-sizing: border-box; }\n    #gs123-widget .gs-wrap {\n      display: grid;\n      grid-template-columns: 300px 1fr;\n      width: 100%;\n      max-width: 1440px;\n      height: min(96vh, 960px);\n      max-height: min(96vh, 960px);\n      margin: auto;\n      background: #fff;\n      border-radius: var(--gs-radius-wrap);\n      box-shadow: 0 24px 80px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.04);\n      overflow: hidden;\n      min-height: 0;\n    }\n    #gs123-widget .gs-sidebar {\n      background: linear-gradient(160deg, #0f172a 0%, #1e293b 100%);\n      display: flex; flex-direction: column; position: relative; overflow: hidden;\n    }\n    #gs123-widget .gs-sidebar::before { content: ''; position: absolute; bottom: -100px; right: -100px; width: 400px; height: 400px; background: radial-gradient(circle, rgba(12,188,65,0.15) 0%, transparent 60%); filter: blur(20px); }\n    #gs123-widget .gs-sidebar::after { content: ''; position: absolute; inset: 0; background-image: radial-gradient(rgba(255,255,255,0.03) 1px, transparent 1px); background-size: 24px 24px; }\n    #gs123-widget .gs-sidebar-top { padding: 36px 28px 20px; border-bottom: 1px solid rgba(255,255,255,0.05); position: relative; z-index: 1; }\n    #gs123-widget .gs-sidebar-logo { font-family: \"Oswald\", sans-serif; font-size: 12px; font-weight: 600; letter-spacing: 2.5px; text-transform: uppercase; color: var(--gs-green); margin-bottom: 20px; display: flex; align-items: center; gap: 8px; }\n    #gs123-widget .gs-sidebar-logo::before { content: ''; width: 8px; height: 8px; background: var(--gs-green); border-radius: 50%; box-shadow: 0 0 12px rgba(12,188,65,0.8); }\n    #gs123-widget .gs-sidebar-title { font-family: \"Oswald\", sans-serif; font-size: 30px; font-weight: 700; color: #ffffff; text-transform: uppercase; line-height: 1.15; margin: 0 0 12px; }\n    #gs123-widget .gs-sidebar-sub { font-size: 13px; color: rgba(255,255,255,0.5); line-height: 1.5; }\n    #gs123-widget .gs-sidebar-steps { padding: 28px; flex: 1; display: flex; flex-direction: column; gap: 6px; position: relative; z-index: 1; }\n    #gs123-widget .gs-s-item { display: flex; align-items: center; gap: 14px; padding: 10px 14px; border-radius: 12px; transition: all 0.3s ease; border: 1px solid transparent; }\n    #gs123-widget .gs-s-item.is-active { background: rgba(12,188,65,0.08); border-color: rgba(12,188,65,0.15); }\n    #gs123-widget .gs-s-dot { flex-shrink: 0; width: 28px; height: 28px; border-radius: 50%; border: 2px solid rgba(255,255,255,0.1); background: rgba(255,255,255,0.02); display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 800; color: transparent; transition: all 0.3s ease; }\n    #gs123-widget .gs-s-item.is-done .gs-s-dot { background: var(--gs-green); border-color: var(--gs-green); color: #fff; }\n    #gs123-widget .gs-s-item.is-active .gs-s-dot { border-color: var(--gs-green); background: rgba(12,188,65,0.15); box-shadow: 0 0 0 4px rgba(12,188,65,0.05); }\n    #gs123-widget .gs-s-item.is-active .gs-s-dot::after { content: ''; width: 8px; height: 8px; background: var(--gs-green); border-radius: 50%; }\n    #gs123-widget .gs-s-txt b { display: block; font-size: 12px; font-weight: 700; text-transform: uppercase; color: rgba(255,255,255,0.3); margin-bottom: 2px; letter-spacing: 0.5px; }\n    #gs123-widget .gs-s-item.is-active .gs-s-txt b, #gs123-widget .gs-s-item.is-done .gs-s-txt b { color: rgba(255,255,255,0.9); }\n    #gs123-widget .gs-s-txt span { font-size: 12px; color: rgba(255,255,255,0.25); line-height: 1.3; }\n    #gs123-widget .gs-s-item.is-active .gs-s-txt span { color: rgba(255,255,255,0.6); }\n    #gs123-widget .gs-sidebar-footer { padding: 20px 28px; border-top: 1px solid rgba(255,255,255,0.05); font-size: 11px; color: rgba(255,255,255,0.2); position: relative; z-index: 1; }\n    #gs123-widget .gs-main { display: flex; flex-direction: column; overflow: hidden; background: #ffffff; position: relative; min-height: 0; }\n    #gs123-widget .gs-topbar { padding: 16px 40px; background: rgba(255,255,255,0.95); backdrop-filter: blur(8px); border-bottom: 1px solid var(--gs-border); display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-shrink: 0; z-index: 10; }\n    #gs123-widget .gs-prog-wrap { flex: 1; max-width: 400px; }\n    #gs123-widget .gs-prog-label { font-size: 12px; font-weight: 700; color: var(--gs-muted); text-transform: uppercase; margin-bottom: 8px; letter-spacing: 0.5px; }\n    #gs123-widget .gs-progress { height: 6px; background: var(--gs-bg-soft); border-radius: 999px; overflow: hidden; }\n    #gs123-widget .gs-progress > div { height: 100%; background: linear-gradient(90deg, #0ea83b, var(--gs-green)); border-radius: 999px; transition: width 0.5s cubic-bezier(0.22, 1, 0.36, 1); }\n    #gs123-widget .gs-body { flex: 1; display: flex; flex-direction: column; min-height: 0; padding: 0; background: var(--gs-bg-soft); }\n    #gs123-widget .gs-step { flex: 1; display: none; flex-direction: column; min-height: 0; animation: gsSlideUp 0.4s cubic-bezier(0.16, 1, 0.3, 1); }\n    #gs123-widget .gs-step.active { display: flex; }\n    #gs123-widget .gs-step-content {\n      flex: 1;\n      min-height: 0;\n      overflow-y: auto;\n      overscroll-behavior: contain;\n      -webkit-overflow-scrolling: touch;\n      display: block;\n      padding: 36px 40px 24px;\n    }\n    #gs123-widget .gs-nav { flex-shrink: 0; padding: 20px 40px; background: #ffffff; border-top: 1px solid var(--gs-border); display: flex; gap: 12px; align-items: center; flex-wrap: wrap; z-index: 10; }\n    #gs123-widget .gs-nav .gs-nav-spacer { flex: 1; min-width: 12px; }\n    @keyframes gsSlideUp {\n      from { opacity: 0; transform: translateY(16px) scale(0.99); }\n      to { opacity: 1; transform: translateY(0) scale(1); }\n    }\n    #gs123-widget .gs-h { font-family: \"Oswald\", sans-serif; font-size: clamp(24px, 3vw, 36px); font-weight: 700; text-transform: uppercase; margin: 0 0 8px; color: var(--gs-text); letter-spacing: 0.5px; line-height: 1.15; }\n    #gs123-widget .gs-sub-h { font-size: 15px; color: var(--gs-muted); margin: 0 0 28px; line-height: 1.6; }\n    #gs123-widget .gs-grid { display: grid; gap: 16px; margin-bottom: 28px; }\n    #gs123-widget .gs-grid.two { grid-template-columns: repeat(2, 1fr); max-width: 100%; }\n    #gs123-widget .gs-grid.two .gs-card { align-items: flex-start; text-align: left; }\n    #gs123-widget .gs-grid.two .gs-card p { text-align: left; }\n    #gs123-widget .gs-grid.four { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); }\n    #gs123-widget .gs-card {\n      border: 2px solid var(--gs-border);\n      border-radius: var(--gs-radius-card);\n      background: #ffffff;\n      padding: 18px 16px;\n      cursor: pointer;\n      transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);\n      position: relative;\n      overflow: visible;\n      min-height: 80px;\n      display: flex; flex-direction: column; justify-content: center;\n      align-items: center;\n      text-align: center;\n      box-shadow: 0 2px 8px rgba(0,0,0,0.02);\n      overflow-wrap: break-word;\n      hyphens: none;\n    }\n    #gs123-widget .gs-card::before {\n      content: '\u2713'; position: absolute; top: 12px; right: 12px; width: 24px; height: 24px;\n      background: var(--gs-green); color: #fff; border-radius: 50%;\n      display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: bold;\n      opacity: 0; transform: scale(0.5); transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n    #gs123-widget .gs-card:hover {\n      border-color: var(--gs-border-hover);\n      transform: translateY(-4px);\n      box-shadow: 0 12px 32px rgba(0,0,0,0.06);\n    }\n    #gs123-widget .gs-card.selected {\n      border-color: var(--gs-green);\n      background: rgba(12,188,65,0.03);\n      box-shadow: 0 0 0 4px rgba(12,188,65,0.1), 0 12px 32px rgba(12,188,65,0.08);\n    }\n    #gs123-widget .gs-card.selected::before { opacity: 1; transform: scale(1); }\n    #gs123-widget .gs-card h4 { margin: 0; font-size: 15px; font-weight: 700; color: var(--gs-text); line-height: 1.3; white-space: nowrap; }\n    #gs123-widget .gs-card p  { margin: 6px 0 0; font-size: 13px; color: var(--gs-muted); line-height: 1.5; text-align: center; }\n    #gs123-widget .gs-card-big { justify-content: flex-start; align-items: flex-start; text-align: left; }\n    #gs123-widget .gs-card-big h4 { font-size: 22px; white-space: normal; }\n    #gs123-widget .gs-card-big p { text-align: left; }\n    #gs123-widget .gs-split { display: grid; grid-template-columns: 1fr 1.4fr; gap: 32px; flex: 1; min-height: 0; padding-bottom: 24px; align-items: stretch; }\n    #gs123-widget .gs-split-col { display: flex; flex-direction: column; gap: 20px; min-height: 0; min-width: 0; }\n    @media (min-width: 1281px) {\n      #gs123-widget .gs-split-col { height: 100%; }\n      #gs123-widget .gs-split-col:nth-child(2) .gs-acc-wrapper { margin-top: auto; }\n    }\n    #gs123-widget .gs-hero-box {\n      flex: 1;\n      min-height: 200px;\n      background: linear-gradient(135deg, rgba(12,188,65,.08), rgba(12,188,65,.02));\n      border: 1px solid rgba(12,188,65,.15);\n      border-radius: var(--gs-radius-wrap);\n      display: flex; align-items: center; justify-content: center;\n      padding: 24px;\n      position: relative;\n    }\n    #gs123-widget .gs-hero-box img {\n      max-width: 100%;\n      max-height: 100%;\n      width: auto;\n      height: auto;\n      object-fit: contain;\n      filter: drop-shadow(0 20px 40px rgba(0,0,0,.15));\n      transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n    #gs123-widget .gs-hero-box:hover img { transform: scale(1.06) translateY(-8px); }\n    #gs123-widget .gs-specs-box { background: #fff; border: 1px solid var(--gs-border); border-radius: var(--gs-radius-card); padding: 20px 24px; flex-shrink: 0; box-shadow: 0 4px 12px rgba(0,0,0,0.02); }\n    #gs123-widget .gs-kv { display: grid; grid-template-columns: 130px 1fr; gap: 10px 16px; font-size: 14px; align-items: baseline; }\n    #gs123-widget .gs-kv b { color: var(--gs-muted); font-weight: 600; text-transform: uppercase; font-size: 11px; letter-spacing: 0.5px; }\n    #gs123-widget .gs-kv div { color: var(--gs-text); font-weight: 500; }\n    #gs123-widget .gs-price-box { display: flex; flex-direction: column; align-items: flex-start; flex-shrink: 0; padding-top: 8px; }\n    #gs123-widget .gs-price { font-family: \"Oswald\", sans-serif; font-size: clamp(32px, 4vw, 48px); font-weight: 700; line-height: 1; color: var(--gs-text); margin-bottom: 8px; letter-spacing: -0.5px; }\n    #gs123-widget .gs-chemical-badge { display: inline-flex; align-items: center; gap: 12px; padding: 12px 20px; background: rgba(12,188,65,0.1); border: 1px solid rgba(12,188,65,0.2); border-radius: var(--gs-radius-btn); color: var(--gs-green); font-size: 16px; font-weight: 800; flex-wrap: wrap; }\n    #gs123-widget .gs-chemical-badge span { font-size: 11px; font-weight: 700; opacity: .8; text-transform: uppercase; letter-spacing: 1px; color: var(--gs-text); }\n    #gs123-widget .gs-acc-block { width: 100%; margin-top: 16px; margin-bottom: 16px; display: block; }\n    #gs123-widget .gs-acc-toggle { width: 100%; display: flex; align-items: center; justify-content: space-between; padding: 16px 24px; background: #fff; border: 2px solid var(--gs-border); border-radius: var(--gs-radius-card); font-family: \"Oswald\", sans-serif; font-size: 18px; font-weight: 600; text-transform: uppercase; color: var(--gs-text); cursor: pointer; transition: all 0.2s ease; box-shadow: 0 4px 12px rgba(0,0,0,0.02); }\n    #gs123-widget .gs-acc-toggle:hover { border-color: var(--gs-border-hover); background: var(--gs-bg-soft); }\n    #gs123-widget .gs-acc-toggle.open { border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-color: var(--gs-border); background: var(--gs-bg-soft); border-bottom-color: transparent; box-shadow: none; }\n    #gs123-widget .gs-acc-toggle span { display: inline-block; transition: transform 0.3s ease; font-size: 14px; color: var(--gs-muted); }\n    #gs123-widget .gs-acc-toggle.open span { transform: rotate(180deg); }\n    #gs123-widget .gs-acc-wrapper { display: none !important; border: 2px solid var(--gs-border); border-top: none; border-radius: 0 0 var(--gs-radius-card) var(--gs-radius-card); background: #fff; min-height: 320px; position: relative; box-shadow: 0 8px 24px rgba(0,0,0,0.04); flex: none; }\n    #gs123-widget .gs-acc-wrapper.open { display: flex !important; flex-direction: column; }\n    #gs123-widget .gs-acc-slider-container { flex: 1; min-height: 0; position: relative; display: flex; align-items: center; padding: 16px 48px; overflow: hidden; }\n    #gs123-widget .gs-acc-track { display: flex; gap: 16px; width: 100%; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; -webkit-overflow-scrolling: touch; padding: 8px 4px; scrollbar-width: none; }\n    #gs123-widget .gs-acc-track::-webkit-scrollbar { display: none; }\n    #gs123-widget .gs-acc-slide { flex: 0 0 calc((100% - 32px) \/ 3); scroll-snap-align: start; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; text-align: center; background: #fff; padding: 12px; box-sizing: border-box; }\n    #gs123-widget .gs-acc-slide img { width: 100%; height: 150px; max-width: 100%; object-fit: contain; margin-bottom: 12px; }\n    #gs123-widget .gs-acc-meta { flex-shrink: 0; }\n    #gs123-widget .gs-acc-meta b { display: block; font-size: 14px; color: var(--gs-text); font-weight: 700; line-height: 1.3; }\n    #gs123-widget .gs-acc-meta span { display: block; font-size: 12px; color: var(--gs-muted); margin-top: 3px; }\n    #gs123-widget .gs-acc-nav-btn { position: absolute; top: 50%; transform: translateY(-50%); width: 38px; height: 38px; border-radius: 50%; background: #ffffff; border: 1px solid var(--gs-border); box-shadow: 0 4px 12px rgba(0,0,0,0.05); color: var(--gs-text); font-size: 14px; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 10; transition: all 0.2s ease; }\n    #gs123-widget .gs-acc-nav-btn:hover { background: var(--gs-bg-soft); border-color: var(--gs-border-hover); transform: translateY(-50%) scale(1.1); }\n    #gs123-widget .gs-acc-prev { left: 6px; }\n    #gs123-widget .gs-acc-next { right: 6px; }\n    @media (max-width: 1100px) {\n      #gs123-widget .gs-acc-slide { flex: 0 0 calc((100% - 16px) \/ 2); }\n    }\n    #gs123-widget .gs-form { padding: 28px; border: 1px solid var(--gs-border); border-radius: var(--gs-radius-wrap); background: #fff; margin-bottom: 24px; max-width: 800px; box-shadow: 0 4px 20px rgba(0,0,0,0.03);}\n    #gs123-widget .gs-form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }\n    #gs123-widget .gs-input, #gs123-widget .gs-select { width: 100%; border: 1px solid var(--gs-border); border-radius: var(--gs-radius-btn); padding: 14px 18px; font-size: 16px; font-weight: 500; outline: none; background: var(--gs-bg-soft); color: var(--gs-text); font-family: Roboto, system-ui, sans-serif; transition: all .2s ease; height: 52px; }\n    #gs123-widget .gs-input::placeholder { color: #94a3b8; font-weight: 400; }\n    #gs123-widget .gs-input:hover, #gs123-widget .gs-select:hover { border-color: var(--gs-border-hover); background: #fff; }\n    #gs123-widget .gs-input:focus, #gs123-widget .gs-select:focus { border-color: var(--gs-green); background: #fff; box-shadow: 0 0 0 4px rgba(12,188,65,.15); }\n    #gs123-widget .gs-small { margin-top: 14px; font-size: 13px; color: var(--gs-muted); }\n    #gs123-widget .gs-btn { appearance: none; border: 1px solid var(--gs-border); background: #fff; color: var(--gs-text); border-radius: var(--gs-radius-btn); padding: 12px 24px; font-weight: 600; font-size: 15px; font-family: Roboto, system-ui, sans-serif; cursor: pointer; transition: all .2s cubic-bezier(0.16, 1, 0.3, 1); height: 48px; display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; }\n    #gs123-widget .gs-btn:hover { transform: translateY(-2px); border-color: var(--gs-border-hover); box-shadow: 0 8px 24px rgba(0,0,0,.06); background: var(--gs-bg-soft); }\n    #gs123-widget .gs-btn.primary { background: var(--gs-green); border-color: var(--gs-green); color: #fff; box-shadow: 0 8px 24px rgba(12,188,65,.25); font-weight: 700; letter-spacing: 0.5px; }\n    #gs123-widget .gs-btn.primary:hover { background: var(--gs-green-hover); border-color: var(--gs-green-hover); box-shadow: 0 12px 32px rgba(12,188,65,.35); transform: translateY(-3px); }\n    #gs123-widget .gs-btn.cls { font-size: 14px; color: var(--gs-muted); padding: 10px 20px; height: 40px; border-radius: 99px; }\n    #gs123-widget .gs-btn:disabled { opacity: 0.6; cursor: not-allowed; transform: none !important; box-shadow: none !important; }\n    #gs123-widget .gs-msg { margin-top: 16px; padding: 14px 18px; border-radius: var(--gs-radius-btn); font-size: 14px; font-weight: 600; display: none; animation: gsFade 0.3s ease; }\n    #gs123-widget .gs-msg.gs-msg-show { display: block; }\n    #gs123-widget .gs-msg.gs-msg-success { background: rgba(16, 185, 129, 0.1); color: #059669; border: 1px solid rgba(16, 185, 129, 0.2); }\n    #gs123-widget .gs-msg.gs-msg-error { background: rgba(239, 68, 68, 0.1); color: #b91c1c; border: 1px solid rgba(239, 68, 68, 0.2); }\n    #gs123-widget .gs-spinner { display: inline-block; width: 20px; height: 20px; border: 3px solid rgba(255,255,255,.3); border-top-color: #fff; border-radius: 50%; animation: gsSpin .8s linear infinite; vertical-align: middle; margin-right: 10px; }\n    @keyframes gsSpin { to { transform: rotate(360deg); } }\n    @media (max-width: 1100px) {\n      #gs123-widget .gs-wrap { grid-template-columns: 260px 1fr; }\n      #gs123-widget .gs-sidebar-top { padding: 28px 24px 16px; }\n      #gs123-widget .gs-sidebar-title { font-size: 26px; }\n      #gs123-widget .gs-sidebar-steps { padding: 20px 24px; }\n      #gs123-widget .gs-sidebar-footer { padding: 16px 24px; }\n      #gs123-widget .gs-step-content { padding: 28px 32px 20px; }\n      #gs123-widget .gs-topbar { padding: 14px 32px; }\n      #gs123-widget .gs-nav { padding: 16px 32px; }\n    }\n    @media (max-width: 1280px) {\n      #gs123-widget .gs-split {\n        display: flex !important;\n        flex-direction: column !important;\n        flex-wrap: nowrap;\n        gap: 24px;\n        flex: 0 1 auto;\n      }\n      #gs123-widget .gs-split-col {\n        width: 100% !important;\n        max-width: 100% !important;\n        flex: none !important;\n      }\n      #gs123-widget .gs-hero-box { min-height: 200px; }\n    }\n    @media (max-width: 850px) {\n      #gs123-widget { padding: 0; align-items: stretch; overflow: hidden; }\n      #gs123-widget .gs-wrap {\n        grid-template-columns: 1fr;\n        grid-template-rows: auto 1fr;\n        border-radius: 0;\n        max-height: 100vh;\n        max-height: 100dvh;\n        height: 100dvh;\n        height: 100%;\n        width: 100%;\n        min-height: 0;\n      }\n      #gs123-widget .gs-main { min-height: 0; }\n      #gs123-widget .gs-sidebar { flex-direction: row; align-items: center; justify-content: space-between; padding: 14px 20px; min-height: auto; }\n      #gs123-widget .gs-sidebar-top { padding: 0; border: none; display: flex; align-items: center; gap: 12px; flex-shrink: 0; }\n      #gs123-widget .gs-sidebar-logo { margin: 0; font-size: 11px; }\n      #gs123-widget .gs-sidebar-title { font-size: 18px; margin: 0; }\n      #gs123-widget .gs-sidebar-title br { display: none; }\n      #gs123-widget .gs-sidebar-title span { display: inline; }\n      #gs123-widget .gs-sidebar-sub,\n      #gs123-widget .gs-sidebar-steps,\n      #gs123-widget .gs-sidebar-footer { display: none; }\n      #gs123-widget .gs-step-content { padding: 20px 20px 16px; }\n      #gs123-widget .gs-topbar { padding: 12px 20px; }\n      #gs123-widget .gs-nav { padding: 16px 20px; padding-bottom: max(16px, env(safe-area-inset-bottom)); flex-direction: column-reverse; gap: 10px; flex-shrink: 0; }\n      #gs123-widget .gs-nav button { width: 100%; justify-content: center; }\n      #gs123-widget .gs-nav .gs-nav-spacer { display: none; }\n      #gs123-widget .gs-form { padding: 20px; }\n      #gs123-widget .gs-form-grid { grid-template-columns: 1fr; }\n      #gs123-widget .gs-grid.two { grid-template-columns: 1fr; }\n      #gs123-widget .gs-grid.four { grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); }\n      #gs123-widget .gs-price { font-size: 36px; text-align: center; }\n      #gs123-widget .gs-price-box { align-items: center; text-align: center; }\n      #gs123-widget .gs-chemical-badge { justify-content: center; }\n      #gs123-widget .gs-split {\n        display: flex !important;\n        flex-direction: column !important;\n        flex-wrap: nowrap;\n        gap: 24px;\n        flex: 0 1 auto;\n      }\n      #gs123-widget .gs-split-col {\n        width: 100% !important;\n        max-width: 100% !important;\n        flex: none !important;\n        gap: 16px;\n      }\n      #gs123-widget .gs-hero-box { min-height: 200px; max-height: 260px; }\n      #gs123-widget .gs-hero-box img { min-height: 140px; }\n      #gs123-widget .gs-specs-box { flex-shrink: 0; }\n      #gs123-widget .gs-price-box { flex-shrink: 0; }\n      #gs123-widget .gs-acc-wrapper { min-height: 280px; overflow: hidden; }\n      #gs123-widget .gs-acc-slider-container { min-height: 240px; padding: 16px 44px; overflow: hidden; }\n      #gs123-widget .gs-acc-slide { padding: 10px; }\n      #gs123-widget .gs-acc-slide img { height: 130px; max-height: none; }\n      #gs123-widget .gs-acc-meta { padding-bottom: 0; }\n      #gs123-widget .gs-acc-nav-btn { width: 40px; height: 40px; min-width: 40px; min-height: 40px; }\n      #gs123-widget .gs-kv { grid-template-columns: 1fr 1fr; gap: 8px 12px; font-size: 13px; }\n      #gs123-widget .gs-grid.four { grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 20px; }\n      #gs123-widget .gs-grid.four .gs-card { min-height: 72px; }\n      #gs123-widget .gs-grid.four .gs-card:hover { transform: none; }\n    }\n    @media (max-width: 480px) {\n      #gs123-widget .gs-grid.four { grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 16px; }\n      #gs123-widget .gs-grid.four .gs-card { min-height: 68px; padding: 12px 8px; }\n      #gs123-widget .gs-card { padding: 14px 10px; min-height: 64px; }\n      #gs123-widget .gs-card h4 { font-size: 13px; }\n      #gs123-widget .gs-h { font-size: 22px; }\n      #gs123-widget .gs-price { font-size: 32px; text-align: center; }\n      #gs123-widget .gs-price-box { align-items: center; text-align: center; }\n      #gs123-widget .gs-chemical-badge { justify-content: center; }\n      #gs123-widget .gs-hero-box { min-height: 180px; max-height: 220px; }\n      #gs123-widget .gs-hero-box img { min-height: 120px; }\n      #gs123-widget .gs-acc-wrapper { min-height: 260px; overflow: hidden; }\n      #gs123-widget .gs-acc-slider-container { min-height: 220px; padding: 12px 40px; overflow: hidden; }\n      #gs123-widget .gs-acc-slide { padding: 8px; }\n      #gs123-widget .gs-acc-slide img { height: 110px; max-height: none; }\n      #gs123-widget .gs-acc-meta { padding-bottom: 0; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      #gs123-widget, #gs123-widget .gs-step, #gs123-widget .gs-card { animation: none !important; transition: none !important; transform: none !important; }\n      #gs123-widget .gs-spinner { animation: none !important; }\n    }\n<\/style>\n\n<div class=\"gs-123-tool\" data-lenis-prevent>\n  <div id=\"gs123-overlay\" data-lenis-prevent style=\"display:none;position:fixed;inset:0;background:rgba(15, 23, 42, 0.6); backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px); z-index:99998;\"><\/div>\n  <div id=\"gs123-widget\" data-lenis-prevent style=\"display:none;position:fixed;inset:0;z-index:99999;\"><\/div>\n<\/div>\n\n<script>\n(function(){\n  if (window.__gs123ToolInit) return;\n  window.__gs123ToolInit = true;\n\n  const GS_AJAX_URL = \"https:\\\/\\\/greensolv.com\\\/wp-admin\\\/admin-ajax.php\";\n  const GS_PAGE_LANG = \"fr\";\n\n  const root    = document.getElementById(\"gs123-widget\");\n  const overlay = document.getElementById(\"gs123-overlay\");\n  if(!root || !overlay) return;\n\n  let started = false;\n  let scrollY = 0;\n\n  document.addEventListener(\"click\", function(e) {\n    const btn = e.target.closest(\"#gs123OpenBtn, .gsHome-stepCard\");\n    if (!btn) return;\n    if(!started){ started = true; init(); }\n    else { openUI(); }\n  });\n\n  function lockBody(){\n    scrollY = window.scrollY;\n    if (window.lenis && typeof window.lenis.stop === \"function\") {\n      window.lenis.stop();\n    }\n    document.body.style.overflow = \"hidden\";\n    document.body.style.position = \"fixed\";\n    document.body.style.top = \"-\" + scrollY + \"px\";\n    document.body.style.width = \"100%\";\n  }\n  function unlockBody(){\n    document.body.style.overflow = \"\";\n    document.body.style.position = \"\";\n    document.body.style.top = \"\";\n    document.body.style.width = \"\";\n    window.scrollTo(0, scrollY);\n    if (window.lenis && typeof window.lenis.start === \"function\") {\n      window.lenis.start();\n    }\n  }\n\n  root.style.opacity = \"0\";\n  root.style.transition = \"opacity .3s ease\";\n  overlay.style.opacity = \"0\";\n  overlay.style.transition = \"opacity .3s ease\";\n\n  function openUI(){\n    lockBody();\n    root.style.display = \"flex\";\n    overlay.style.display = \"block\";\n    void root.offsetHeight;\n    root.style.opacity = \"1\";\n    overlay.style.opacity = \"1\";\n\n    const wrap = root.querySelector('.gs-wrap');\n    if(wrap) {\n      wrap.style.transform = \"translateY(20px) scale(0.98)\";\n      wrap.style.transition = \"transform 0.4s cubic-bezier(0.16, 1, 0.3, 1)\";\n      void wrap.offsetHeight;\n      wrap.style.transform = \"translateY(0) scale(1)\";\n    }\n  }\n\n  function closeUI(){\n    root.style.opacity = \"0\";\n    overlay.style.opacity = \"0\";\n    const wrap = root.querySelector('.gs-wrap');\n    if(wrap) wrap.style.transform = \"translateY(20px) scale(0.98)\";\n\n    setTimeout(function(){\n      root.style.display = \"none\";\n      overlay.style.display = \"none\";\n      unlockBody();\n    }, 300);\n  }\n\n  overlay.addEventListener(\"click\", closeUI);\n  document.addEventListener(\"keydown\", function(e){\n    if(e.key === \"Escape\" && root.style.display !== \"none\") closeUI();\n  });\n\n  function escapeHtml(s){\n    return String(s || \"\").replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\").replaceAll(\">\", \"&gt;\").replaceAll('\"', \"&quot;\").replaceAll(\"'\", \"&#039;\");\n  }\n\n  function formatMoney(amount, currency){\n    const numStr = Math.round(amount).toLocaleString('fr-CA');\n    if (currency === \"CAD\") return numStr + \" $ CAD\";\n    if (currency === \"EUR\") return numStr + \" \u20ac\";\n    return \"$ \" + numStr + \" USD\";\n  }\n\n  const CHEMICAL_URLS = {\n    en: \"https:\/\/greensolv.com\/chemicals-greensolv\/\",\n    fr: \"https:\/\/greensolv.com\/fr\/produits-chimiques-greensolv\/\",\n    es: \"https:\/\/greensolv.com\/es\/productos-quimicos-greensolv\/\"\n  };\n\n  function detectLang(){\n    if (GS_PAGE_LANG === \"fr\" || GS_PAGE_LANG === \"es\" || GS_PAGE_LANG === \"en\") return GS_PAGE_LANG;\n    const path = (window.location.pathname || \"\").toLowerCase();\n    if(\/^\\\/fr(\\\/|$)\/.test(path)) return \"fr\";\n    if(\/^\\\/es(\\\/|$)\/.test(path)) return \"es\";\n    const docLang = (document.documentElement.lang || \"\").toLowerCase();\n    if(docLang.startsWith(\"fr\")) return \"fr\";\n    if(docLang.startsWith(\"es\")) return \"es\";\n    return \"en\";\n  }\n\n  function chemicalUrl(){\n    return CHEMICAL_URLS[detectLang()] || CHEMICAL_URLS.en;\n  }\n\n  const CONFIG = {\n    AJAX_URL: GS_AJAX_URL || ((typeof ajaxurl !== 'undefined') ? ajaxurl : (document.querySelector('link[href*=\"wp-content\"]')?.href?.split('\/wp-content')[0] || '') + '\/wp-admin\/admin-ajax.php'),\n    AJAX_ACTION: 'greensolv_123strip_inquiry'\n  };\n\n  const FLOW = {\n    Wheels: {\n      question: \"How many wheels per day do you strip?\",\n      choices: [\n        { key:\"20-32\", label:\"Up to 20 wheels\/day\", tank:{ model:\"T4R\",  gal:140,  liters:530  } },\n        { key:\"30-48\", label:\"Up to 30 wheels\/day\", tank:{ model:\"T6R\",  gal:210,  liters:800  } },\n        { key:\"40-64\", label:\"Up to 40 wheels\/day\", tank:{ model:\"T8R\",  gal:290,  liters:1100 } },\n        { key:\"60-96\", label:\"Up to 60 wheels\/day\", tank:{ model:\"T12R\", gal:435,  liters:1650 } },\n        { key:\"custom-wheels\", label:\"More than 60 wheels\/day\", labelFr:\"Plus de 60 roues par jour\", tank:{ model:\"Custom\", gal:\"\", liters:\"\", custom:true } }\n      ]\n    },\n    Parts: {\n      question: \"What is the biggest size of the parts that need to be stripped?\",\n      choices: [\n        { key:\"100\", label:\"L48\\\" x W26\\\" x H32\\\"\", tank:{ model:\"T4R\",  gal:140,  liters:530  } },\n        { key:\"150\", label:\"L72\\\" x W26\\\" x H32\\\"\", tank:{ model:\"T6R\",  gal:210,  liters:800  } },\n        { key:\"200\", label:\"L48\\\" x W54\\\" x H32\\\"\", tank:{ model:\"T8R\",  gal:290,  liters:1100 } },\n        { key:\"300\", label:\"L72\\\" x W54\\\" x H32\\\"\", tank:{ model:\"T12R\", gal:435,  liters:1650 } },\n        { key:\"custom-parts\", label:\"Other dimensions\", labelFr:\"Autres dimensions\", tank:{ model:\"Custom\", gal:\"\", liters:\"\", custom:true } }\n      ]\n    }\n  };\n\n  function choiceLabel(choice) {\n    if (detectLang() === \"fr\" && choice.labelFr) {\n      return choice.labelFr;\n    }\n    return choice.label;\n  }\n\n  function tankLabel(tank) {\n    if (tank && tank.custom) {\n      return detectLang() === \"fr\" ? \"R\u00e9servoir : Sur mesure\" : \"Tank: Custom\";\n    }\n    return \"Tank: <b>\" + escapeHtml(tank.model) + \"<\/b> \u00b7 \" + escapeHtml(String(tank.gal)) + \" US Gal.\";\n  }\n\n  const METALS = {\n    Wheels: [\"All metal\",\"Aluminium\",\"Steel\",\"Magnesium\",\"Stainless Steel\",\"Cast Iron\"],\n    Parts:  [\"All metal\",\"Aluminium\",\"Steel\",\"Titanium\",\"Magnesium\",\"Stainless Steel\",\"Copper\",\"Cast Iron\"]\n  };\n\n  function chemicalFor(category, metal){\n    if(category === \"Wheels\"){\n      if(metal === \"Steel\" || metal === \"Stainless Steel\") return \"Steelstrip\";\n      return \"Wheelstrip\";\n    }\n    if(metal === \"All metal\") return \"Aerostrip\";\n    if(metal === \"Steel\" || metal === \"Stainless Steel\") return \"Steelstrip\";\n    return \"Alumistrip\";\n  }\n\n  const PRICES_USD = {\n    T4R: { standard: 19013, aerostrip: 21444, steelstrip: 13840 },\n    T6R: { standard: 24482, aerostrip: 28129, steelstrip: 16722 },\n    T8R: { standard: 37514, aerostrip: 42550, steelstrip: 26797 },\n    T12R: { standard: 52234, aerostrip: 59787, steelstrip: 36158 }\n  };\n  const PRICES_CAD = {\n    T4R: { standard: 23787, aerostrip: 26320, steelstrip: 17305 },\n    T6R: { standard: 30128, aerostrip: 33927, steelstrip: 20406 },\n    T8R: { standard: 46176, aerostrip: 51422, steelstrip: 32750 },\n    T12R: { standard: 66841, aerostrip: 74711, steelstrip: 46703 }\n  };\n  const PRICES_EUR = {\n    T4R: { standard: 16115, aerostrip: 21270, steelstrip: 11600 },\n    T6R: { standard: 20640, aerostrip: 28372, steelstrip: 13868 },\n    T8R: { standard: 31655, aerostrip: 42332, steelstrip: 22303 },\n    T12R: { standard: 45425, aerostrip: 61441, steelstrip: 31396 }\n  };\n\n  const TANK_IMAGES = {\n    T4R:  \"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/140-gallons.png\",\n    T6R:  \"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/210-gallons.png\",\n    T8R:  \"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/290gallons.png\",\n    T12R: \"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/t12.png\"\n  };\n\n  function priceUSD(model, chem){\n    if(chem === \"Aerostrip\") return PRICES_USD[model].aerostrip;\n    if(chem === \"Steelstrip\") return PRICES_USD[model].steelstrip;\n    return PRICES_USD[model].standard;\n  }\n  function priceCAD(model, chem){\n    if(chem === \"Aerostrip\") return PRICES_CAD[model].aerostrip;\n    if(chem === \"Steelstrip\") return PRICES_CAD[model].steelstrip;\n    return PRICES_CAD[model].standard;\n  }\n  function priceEUR(model, chem){\n    if(chem === \"Aerostrip\") return PRICES_EUR[model].aerostrip;\n    if(chem === \"Steelstrip\") return PRICES_EUR[model].steelstrip;\n    return PRICES_EUR[model].standard;\n  }\n\n  const ACCESSORIES = [\n    { name:\"Double-Row Rinse Table\", model:\"RT8R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/Double-Row-Rinse-Table.png\" },\n    { name:\"Double-Row Rinse Table\", model:\"RT12R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/RT12R.png\" },\n    { name:\"Rinse Table with grating platform\", model:\"RTGRATT8R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/RTGRATT8R.png\" },\n    { name:\"Lateral Hoisting System (2-leg)\", model:\"\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/Lateral-Hoisting-System-2-leg.png\" },\n    { name:\"Lateral Hoisting System (4-leg)\", model:\"4LHST8R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/4LHST8R.png\" },\n    { name:\"Basket Rack for parts\", model:\"BR4R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/BR4R.png\" },\n    { name:\"Basket Rack for parts\", model:\"BR6R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/BR6R.png\" },\n    { name:\"Wheel Rack\", model:\"R6R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/R6R.png\" }\n  ];\n\n  const REPS = [\n    { id: \"matthew\", name: \"Matthew Green\", title: \"Representative\", email: \"mgreen@greensolv.com\", phone: \"609-870-0191\", usa_states: [\"Arizona\",\"Wyoming\",\"North Carolina\",\"Missouri\",\"California\",\"Delaware\",\"South Carolina\",\"Nebraska\",\"Nevada\",\"Maryland\",\"Arkansas\",\"North Dakota\",\"Hawaii\",\"New Jersey\",\"Tennessee\",\"South Dakota\",\"Florida\",\"Virginia\",\"Mississippi\",\"Kansas\",\"Iowa\",\"West Virginia\",\"Louisiana\",\"Alabama\",\"Montana\",\"Georgia\",\"Minnesota\"], canada_provinces: [], countries: [] },\n    { id: \"martin\", name: \"Martin Pageau\", title: \"Representative\", email: \"mpageau@greensolv.com\", phone: \"514-349-1642\", usa_states: [\"Connecticut\",\"Massachusetts\",\"Maine\",\"New Hampshire\",\"Rhode Island\",\"New York\",\"Vermont\",\"Alaska\",\"Oregon\",\"Washington\",\"Colorado\",\"Puerto Rico\"], canada_provinces: [\"Qu\u00e9bec\",\"Newfoundland\",\"Nova Scotia\",\"New Brunswick\",\"Prince Edward Island\",\"Alberta\",\"British Columbia\",\"Manitoba\",\"Saskatchewan\"], countries: [\"Japan\"] },\n    { id: \"andre\", name: \"Andr\u00e9 B\u00e9lair\", title: \"Representative\", email: \"abelair@greensolv.com\", phone: \"514-983-3911\", usa_states: [\"Oklahoma\",\"New Mexico\",\"Texas\",\"Utah\",\"Idaho\",\"Illinois\",\"Indiana\",\"Kentucky\",\"Michigan\",\"Ohio\",\"Pennsylvania\",\"Wisconsin\"], canada_provinces: [\"Ontario\"], countries: [\"Australia\",\"Austria\",\"Belgium\",\"Bulgaria\",\"Croatia\",\"Cyprus\",\"Czech Republic\",\"Denmark\",\"Estonia\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Latvia\",\"Liechtenstein\",\"Lithuania\",\"Luxembourg\",\"Malta\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Slovakia\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"United Kingdom\"] },\n    { id: \"armando\", name: \"Armando Padilla-Zarco\", title: \"Representative\", email: \"apadilla@greensolv.com\", phone: \"514-291-3123\", usa_states: [], canada_provinces: [], countries: [\"Mexico\"] }\n  ];\n\n  const USA_STATES = [\"Alabama\",\"Alaska\",\"Arizona\",\"Arkansas\",\"California\",\"Colorado\",\"Connecticut\",\"Delaware\",\"Florida\",\"Georgia\",\"Hawaii\",\"Idaho\",\"Illinois\",\"Indiana\",\"Iowa\",\"Kansas\",\"Kentucky\",\"Louisiana\",\"Maine\",\"Maryland\",\"Massachusetts\",\"Michigan\",\"Minnesota\",\"Mississippi\",\"Missouri\",\"Montana\",\"Nebraska\",\"Nevada\",\"New Hampshire\",\"New Jersey\",\"New Mexico\",\"New York\",\"North Carolina\",\"North Dakota\",\"Ohio\",\"Oklahoma\",\"Oregon\",\"Pennsylvania\",\"Puerto Rico\",\"Rhode Island\",\"South Carolina\",\"South Dakota\",\"Tennessee\",\"Texas\",\"Utah\",\"Vermont\",\"Virginia\",\"Washington\",\"West Virginia\",\"Wisconsin\",\"Wyoming\"];\n  const CANADA_PROVINCES = [\"Alberta\",\"British Columbia\",\"Manitoba\",\"New Brunswick\",\"Newfoundland\",\"Nova Scotia\",\"Ontario\",\"Prince Edward Island\",\"Qu\u00e9bec\",\"Saskatchewan\"];\n  const INTERNATIONAL_COUNTRIES = [\"Australia\",\"Austria\",\"Belgium\",\"Bulgaria\",\"Croatia\",\"Cyprus\",\"Czech Republic\",\"Denmark\",\"Estonia\",\"Finland\",\"France\",\"Germany\",\"Greece\",\"Hungary\",\"Iceland\",\"Ireland\",\"Italy\",\"Japan\",\"Latvia\",\"Liechtenstein\",\"Lithuania\",\"Luxembourg\",\"Malta\",\"Mexico\",\"Netherlands\",\"Norway\",\"Poland\",\"Portugal\",\"Romania\",\"Slovakia\",\"Slovenia\",\"Spain\",\"Sweden\",\"Switzerland\",\"United Kingdom\",\"Other\"];\n  const EU_COUNTRIES = [\"DE\", \"IE\", \"IT\", \"LV\", \"LT\", \"LU\", \"MT\", \"NL\", \"PL\", \"PT\", \"CZ\", \"RO\", \"SK\", \"SI\", \"SE\", \"HU\", \"AT\", \"BE\", \"BG\", \"CY\", \"HR\", \"DK\", \"ES\", \"EE\", \"FI\", \"FR\", \"GR\", \"EL\", \"IS\", \"LI\", \"NO\", \"CH\", \"GB\", \"UK\"];\n\n  function repsForTerritory(country, stateOrProvince){\n    const hits = [];\n    const place = (stateOrProvince || \"\").trim();\n    if(country === \"USA\"){\n      for(const r of REPS) if(r.usa_states.includes(place)) hits.push(r);\n    } else if(country === \"Canada\"){\n      for(const r of REPS) if(r.canada_provinces.includes(place)) hits.push(r);\n    } else {\n      if(place && place !== \"Other\"){\n        for(const r of REPS) if(r.countries.includes(place)) hits.push(r);\n      }\n    }\n    return hits;\n  }\n\n  function pickPrimaryRep(country, territory) {\n    const hits = repsForTerritory(country, territory);\n    return hits.length > 0 ? hits[0] : null;\n  }\n\n  let detectedCurrency = \"USD\";\n  let ipMeta = { ip:\"\", country_name:\"\", country:\"\", region:\"\", region_code:\"\" };\n\n  async function detectByIP(){\n    try{\n      const res = await fetch(\"https:\/\/ipapi.co\/json\/\", { method:\"GET\" });\n      if(!res.ok) throw new Error(\"ipapi error\");\n      const data = await res.json();\n      ipMeta = { ip: data.ip || \"\", country_name: data.country_name || \"\", country: (data.country || \"\").toUpperCase(), region: data.region || \"\", region_code: data.region_code || \"\" };\n\n      if (ipMeta.country === \"CA\") {\n          detectedCurrency = \"CAD\";\n      } else if (EU_COUNTRIES.includes(ipMeta.country)) {\n          detectedCurrency = \"EUR\";\n      } else {\n          detectedCurrency = \"USD\";\n      }\n    } catch(e){\n      const tz = (Intl.DateTimeFormat().resolvedOptions().timeZone || \"\");\n      const navLang = (navigator.language || \"\").toLowerCase();\n      const caZones = [\"Toronto\",\"Montreal\",\"Winnipeg\",\"Edmonton\",\"Vancouver\",\"Halifax\",\"St_Johns\",\"Regina\"];\n      const isCanada = caZones.some(z => tz.indexOf(z) > -1) || navLang.indexOf(\"-ca\") > -1;\n\n      if(isCanada){ ipMeta.country = \"CA\"; ipMeta.country_name = \"Canada\"; detectedCurrency = \"CAD\"; }\n      else if(tz.indexOf(\"Europe\/\") === 0){ ipMeta.country = \"\"; ipMeta.country_name = \"Europe\"; detectedCurrency = \"EUR\"; }\n      else { ipMeta.country = \"\"; ipMeta.country_name = \"International\"; detectedCurrency = \"USD\"; }\n    }\n  }\n\n  function regionToProvinceName(region){\n    const map = {\"QC\":\"Qu\u00e9bec\",\"ON\":\"Ontario\",\"BC\":\"British Columbia\",\"AB\":\"Alberta\",\"MB\":\"Manitoba\",\"SK\":\"Saskatchewan\",\"NB\":\"New Brunswick\",\"NS\":\"Nova Scotia\",\"NL\":\"Newfoundland\",\"PE\":\"Prince Edward Island\",\"YT\":\"Yukon\",\"NT\":\"Northwest Territories\",\"NU\":\"Nunavut\"};\n    return map[(region || \"\").toUpperCase().trim()] || \"\";\n  }\n\n  function prefillCountryTerritory(){\n    const c = root.querySelector(\"#fCountry\");\n    const t = root.querySelector(\"#fTerritory\");\n    if(!c || !t) return;\n\n    if(ipMeta.country === \"CA\"){\n      c.value = \"Canada\";\n      t.innerHTML = territoryOptionsHTML(\"Canada\");\n      const prov = regionToProvinceName(ipMeta.region_code) || ipMeta.region || \"\";\n      if(prov && CANADA_PROVINCES.includes(prov)) t.value = prov;\n    } else if(ipMeta.country === \"US\"){\n      c.value = \"USA\";\n      t.innerHTML = territoryOptionsHTML(\"USA\");\n      const st = ipMeta.region || \"\";\n      if(st && USA_STATES.includes(st)) t.value = st;\n    } else {\n      c.value = \"International\";\n      t.innerHTML = territoryOptionsHTML(\"International\");\n      const cn = ipMeta.country_name || \"\";\n      t.value = (cn && INTERNATIONAL_COUNTRIES.includes(cn)) ? cn : \"Other\";\n    }\n  }\n\n  const state = { step: 1, category: null, flowKey: null, flowLabel: null, model: null, gal: null, liters: null, metal: null, chem: null, priceUSD: null, priceShown: null, currency: \"USD\", isCustom: false, isLoading: false, formMsg: null, formMsgType: null, formDone: false, accSlideIndex: 0, accOpen: false };\n\n  function progressPct(){ return {1:25, 2:50, 3:75, 4:100}[state.step] || 0; }\n  function stepLabel(){ return {1:\"Category\", 2:\"Volume\", 3:\"Metal & Estimate\", 4:\"Get Quote\"}[state.step] || \"\"; }\n\n  function setStep(n){ state.step = n; state.formMsg = null; state.formMsgType = null; render(); if(state.step === 4) setTimeout(prefillCountryTerritory, 0); }\n  function resetAll(){ state.step = 1; state.category = null; state.flowKey = null; state.flowLabel = null; state.model = null; state.gal = null; state.liters = null; state.metal = null; state.chem = null; state.priceUSD = null; state.priceShown = null; state.accOpen = false; state.currency = detectedCurrency; state.isCustom = false; state.isLoading = false; state.formMsg = null; state.formMsgType = null; state.formDone = false; render(); }\n\n  function back(){\n    if(state.step === 2){ setStep(1); return; }\n    if(state.step === 3){ if(state.metal){ state.metal = null; state.chem = null; state.priceUSD = null; state.priceShown = null; render(); return; } setStep(2); return; }\n    if(state.step === 4){ state.isCustom ? setStep(2) : setStep(3); return; }\n    setStep(1);\n  }\n\n  function pickCategory(cat){ state.category = cat; state.flowKey = null; state.flowLabel = null; state.model = null; state.gal = null; state.liters = null; state.metal = null; state.chem = null; state.priceUSD = null; state.priceShown = null; state.isCustom = false; setStep(2); }\n  function pickFlow(key){\n    const choice = FLOW[state.category].choices.find(x => x.key === key);\n    if(choice){\n      state.flowKey = key;\n      state.flowLabel = choiceLabel(choice);\n      state.model = choice.tank.model;\n      state.gal = choice.tank.gal;\n      state.liters = choice.tank.liters;\n      state.metal = null;\n      state.chem = null;\n      state.priceUSD = null;\n      state.priceShown = null;\n      state.isCustom = !!choice.tank.custom;\n      state.isCustom ? setStep(4) : setStep(3);\n    }\n  }\n\n  function pickMetal(m){\n    state.metal = m;\n    state.chem = chemicalFor(state.category, state.metal);\n    state.accOpen = false;\n    state.currency = detectedCurrency;\n\n    if(state.currency === \"EUR\") {\n      state.priceShown = priceEUR(state.model, state.chem);\n    } else if(state.currency === \"CAD\") {\n      state.priceShown = priceCAD(state.model, state.chem);\n    } else {\n      state.priceShown = priceUSD(state.model, state.chem);\n    }\n\n    state.priceUSD = priceUSD(state.model, state.chem);\n\n    window.dataLayer = window.dataLayer || [];\n    window.dataLayer.push({\n      event: \"ready_to_strip_view_estimate\",\n      form_name: \"1_2_3_ready_to_strip\",\n      category: state.category || \"\",\n      tank_model: state.model || \"\",\n      chemical: state.chem || \"\",\n      metal: state.metal || \"\",\n      currency: state.currency || \"\",\n      estimated_system_price: Number(state.priceShown) || 0\n    });\n\n    setStep(3);\n  }\n\n  function countryOptionsHTML(){ return '<option value=\"\">Country<\/option><option value=\"USA\">USA<\/option><option value=\"Canada\">Canada<\/option><option value=\"International\">International<\/option>'; }\n\n  function territoryOptionsHTML(country){\n    if(country === \"USA\"){ return '<option value=\"\">State<\/option>' + USA_STATES.map(s => `<option value=\"${escapeHtml(s)}\">${escapeHtml(s)}<\/option>`).join(\"\"); }\n    if(country === \"Canada\"){ return '<option value=\"\">Province<\/option>' + CANADA_PROVINCES.map(s => `<option value=\"${escapeHtml(s)}\">${escapeHtml(s)}<\/option>`).join(\"\"); }\n    if(country === \"International\"){ return '<option value=\"\">Country<\/option>' + INTERNATIONAL_COUNTRIES.map(s => `<option value=\"${escapeHtml(s)}\">${escapeHtml(s)}<\/option>`).join(\"\"); }\n    return '<option value=\"\">State \/ Province<\/option>';\n  }\n\n  function showFormMsg(msg, isSuccess){\n    state.formMsg = msg;\n    state.formMsgType = isSuccess ? 'success' : 'error';\n\n    \/\/ Final success screen: one render to confirmation UI\n    if (isSuccess && state.formDone) {\n      render();\n      return;\n    }\n\n    \/\/ Step 4 error\/validation: keep DOM + filled fields, update message only\n    if (!isSuccess && state.step === 4 && !state.formDone) {\n      var el = root.querySelector('.gs-step.active .gs-msg');\n      if (el) {\n        el.textContent = msg;\n        el.classList.add('gs-msg-show', 'gs-msg-error');\n        el.classList.remove('gs-msg-success');\n      }\n      return;\n    }\n\n    render();\n    if (state.step === 4) setTimeout(prefillCountryTerritory, 0);\n  }\n\n  function setLoading(loading){\n    state.isLoading = loading;\n\n    \/\/ Always in-place on step 4 (including after formDone) so finally\n    \/\/ does not trigger a second render after the success confirmation.\n    if (state.step === 4) {\n      var btn = root.querySelector('[data-action=\"submitLead\"]');\n      var back = root.querySelector('[data-action=\"back\"]');\n      if (btn) {\n        btn.disabled = loading;\n        btn.innerHTML = loading\n          ? '<span class=\"gs-spinner\"><\/span>Sending...'\n          : 'Submit Request';\n      }\n      if (back) back.disabled = loading;\n      return;\n    }\n\n    render();\n  }\n  function bindCountrySelect(){ const c = root.querySelector(\"#fCountry\"); const t = root.querySelector(\"#fTerritory\"); if(!c || !t) return; c.onchange = function(){ t.innerHTML = territoryOptionsHTML(c.value); t.value = \"\"; }; }\n\n  function sidebarHTML(){\n    const steps = [{ n:1, label:\"What to strip?\", val: state.category || \"Wheels or Parts\" },{ n:2, label:\"Volume\", val: state.flowLabel || \"Daily capacity\" },{ n:3, label:\"Metal & Estimate\", val: state.metal || \"Instant price range\" },{ n:4, label:\"Get a Quote\", val: \"Expert follow-up\" }];\n    return `<div class=\"gs-sidebar\"><div class=\"gs-sidebar-top\"><div class=\"gs-sidebar-logo\">Greensolv<\/div><h2 class=\"gs-sidebar-title\">1, 2, 3<br>Ready to<br><span style=\"color:var(--gs-green)\">Strip<\/span><\/h2><p class=\"gs-sidebar-sub\">3 quick questions. Instant price estimate.<\/p><\/div><div class=\"gs-sidebar-steps\">${steps.map(s => { const isDone = state.step > s.n, isActive = state.step === s.n; const cls = (isDone ? 'is-done ' : '') + (isActive ? 'is-active' : ''); const val = isDone ? (s.n===1 ? state.category : s.n===2 ? state.flowLabel : s.n===3 ? (state.isCustom ? \"Custom quote\" : state.metal) : s.val) : s.val; return `<div class=\"gs-s-item ${cls}\"><div class=\"gs-s-dot\">${isDone ? '\u2713' : ''}<\/div><div class=\"gs-s-txt\"><b>${s.n}. ${s.label}<\/b><span>${escapeHtml(val || '')}<\/span><\/div><\/div>`; }).join('')}<\/div><div class=\"gs-sidebar-footer\">\u00a9 Greensolv \u00b7 Prices reflect Tank + Chemicals total.<\/div><\/div>`;\n  }\n\n  function step1HTML(){\n    return `<div class=\"gs-step active\"><div class=\"gs-step-content\"><h3 class=\"gs-h\">STEP #1 What do you want to strip?<\/h3><p class=\"gs-sub-h\">Select your material type to get started.<\/p><div class=\"gs-grid two\" style=\"max-width:620px;\"><div class=\"gs-card gs-card-big ${state.category===\"Wheels\" ? \"selected\":\"\"}\" data-action=\"cat\" data-value=\"Wheels\"><h4>Wheels<\/h4><p>Select this if you strip wheels<\/p><\/div><div class=\"gs-card gs-card-big ${state.category===\"Parts\" ? \"selected\":\"\"}\" data-action=\"cat\" data-value=\"Parts\"><h4>Parts<\/h4><p>Parts, hooks, racks, fixtures<\/p><\/div><\/div><div class=\"gs-note\" style=\"font-size:14px; color:var(--gs-muted); font-weight:500;\">Choose a category to automatically advance to the next step.<\/div><\/div><div class=\"gs-nav\"><\/div><\/div>`;\n  }\n\n  function step2HTML(){\n    const cfg = FLOW[state.category];\n    return `<div class=\"gs-step active\"><div class=\"gs-step-content\"><h3 class=\"gs-h\">STEP #2 ${escapeHtml(cfg.question)}<\/h3><p class=\"gs-sub-h\">This determines the recommended size of your strip tank system.<\/p><div class=\"gs-grid two\">${cfg.choices.map(c => `<div class=\"gs-card ${state.flowKey === c.key ? \"selected\" : \"\"}\" data-action=\"flow\" data-value=\"${escapeHtml(c.key)}\"><h4>${escapeHtml(choiceLabel(c))}<\/h4><p>${tankLabel(c.tank)}<\/p><\/div>`).join(\"\")}<\/div><\/div><div class=\"gs-nav\"><button class=\"gs-btn\" data-action=\"back\" type=\"button\">\u2190 Back<\/button><button class=\"gs-btn\" data-action=\"restart\" type=\"button\">Restart<\/button><\/div><\/div>`;\n  }\n\n  function step3HTML(){\n    const tankImg = TANK_IMAGES[state.model] || \"\";\n    if(state.metal){\n      const shown = formatMoney(state.priceShown, state.currency);\n      const accOpenClass = state.accOpen ? 'open' : '';\n\n      return `<div class=\"gs-step active\"><div class=\"gs-step-content\"><h3 class=\"gs-h\">STEP #3 Your Estimate<\/h3><p class=\"gs-sub-h\">Based on your selections \u2014 tank + chemical included.<\/p>\n      <div class=\"gs-grid two\" style=\"margin-bottom: 16px; align-items: stretch; max-width: 100%; flex-shrink: 0; gap: 20px;\">\n        <div class=\"gs-hero-box\" style=\"margin: 0; height: 100%; min-height: 260px;\">\n          <img decoding=\"async\" src=\"${escapeHtml(tankImg)}\" alt=\"${escapeHtml(state.model)} Tank\" style=\"width: 100%; height: 100%; object-fit: contain;\">\n        <\/div>\n        <div style=\"display: flex; flex-direction: column; gap: 16px; height: 100%;\">\n          <div class=\"gs-price-box\" style=\"width: 100%; text-align: center; display: flex; flex-direction: column; align-items: center; justify-content: center; background: #fff; border: 1px solid var(--gs-border); border-radius: var(--gs-radius-card); padding: 24px 20px; box-shadow: 0 4px 12px rgba(0,0,0,0.02); margin: 0; flex-shrink: 0;\">\n            <div class=\"gs-price\" style=\"margin: 0;\">${escapeHtml(shown)}<\/div>\n            <p style=\"margin: 10px 0 0; font-size: 11px; line-height: 1.4; color: var(--gs-muted); max-width: 420px;\">Prices are subject to change without notice. This estimate is for informational purposes only and does not constitute a formal quote or binding offer.<\/p>\n          <\/div>\n          <div class=\"gs-specs-box\" style=\"margin: 0; flex: 1; display: flex; flex-direction: column; justify-content: center;\">\n            <div class=\"gs-kv\">\n              <b>System<\/b><div>${escapeHtml(state.model)}<\/div>\n              <b>Capacity<\/b><div>${escapeHtml(String(state.gal))} US Gal. \/ ${escapeHtml(String(state.liters))} L<\/div>\n              <b>Category<\/b><div>${escapeHtml(state.category)}<\/div>\n              <b>Volume<\/b><div>${escapeHtml(state.flowLabel || \"\")}<\/div>\n              <b>Metal<\/b><div>${escapeHtml(state.metal)}<\/div>\n              <b style=\"color: var(--gs-green);\">Chemical<\/b><div style=\"color: var(--gs-green); font-weight: 700;\"><a href=\"${chemicalUrl()}\" target=\"_blank\" style=\"color: inherit; text-decoration: underline;\">${escapeHtml(state.chem)}<\/a><\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"gs-acc-block\">\n        <button class=\"gs-acc-toggle ${accOpenClass}\" data-action=\"toggleAcc\" type=\"button\">\n          Accessories <span>\u25bc<\/span>\n        <\/button>\n        <div class=\"gs-acc-wrapper ${accOpenClass}\">\n          <button class=\"gs-acc-nav-btn gs-acc-prev\" data-action=\"prevSlide\" type=\"button\">\u276e<\/button>\n          <div class=\"gs-acc-slider-container\">\n            <div class=\"gs-acc-track\">\n              ${ACCESSORIES.map(acc => `<div class=\"gs-acc-slide\"><img decoding=\"async\" src=\"${escapeHtml(acc.img)}\" alt=\"${escapeHtml(acc.name)}\"><div class=\"gs-acc-meta\"><b>${escapeHtml(acc.name)}<\/b>${acc.model ? `<span>Model: ${escapeHtml(acc.model)}<\/span>` : ''}<\/div><\/div>`).join(\"\")}\n            <\/div>\n          <\/div>\n          <button class=\"gs-acc-nav-btn gs-acc-next\" data-action=\"nextSlide\" type=\"button\">\u276f<\/button>\n        <\/div>\n      <\/div>\n      <\/div><div class=\"gs-nav\"><button class=\"gs-btn\" data-action=\"back\" type=\"button\">\u2190 Change Metal<\/button><button class=\"gs-btn\" data-action=\"restart\" type=\"button\">Restart<\/button><div class=\"gs-nav-spacer\"><\/div><button class=\"gs-btn primary\" data-action=\"moreInfo\" type=\"button\">Contact an Expert<\/button><\/div><\/div>`;\n    }\n\n    const list = METALS[state.category] || [];\n    return `<div class=\"gs-step active\"><div class=\"gs-step-content\"><h3 class=\"gs-h\">STEP #3 What kind of metal are you stripping?<\/h3><p class=\"gs-sub-h\">This determines the right chemical for your operation.<\/p><div class=\"gs-split\"><div class=\"gs-split-col\"><div class=\"gs-hero-box\"><img decoding=\"async\" src=\"${escapeHtml(tankImg)}\" alt=\"${escapeHtml(state.model)} Tank\"><\/div><div class=\"gs-specs-box\"><div class=\"gs-kv\"><b>Selected<\/b><div>${escapeHtml(state.category)} \u00b7 ${escapeHtml(state.flowLabel || \"\")}<\/div><b>Recommended tank<\/b><div><strong>${escapeHtml(state.model)}<\/strong> \u00b7 ${escapeHtml(String(state.gal))} US Gal. \/ ${escapeHtml(String(state.liters))} L<\/div><\/div><\/div><\/div><div class=\"gs-split-col\" style=\"justify-content:flex-start;\"><div class=\"gs-grid four\">${list.map(m => `<div class=\"gs-card\" data-action=\"metal\" data-value=\"${escapeHtml(m)}\"><h4>${escapeHtml(m)}<\/h4><\/div>`).join(\"\")}<\/div><\/div><\/div><\/div><div class=\"gs-nav\"><button class=\"gs-btn\" data-action=\"back\" type=\"button\">\u2190 Back<\/button><button class=\"gs-btn\" data-action=\"restart\" type=\"button\">Restart<\/button><\/div><\/div>`;\n  }\n\n  function step4FormHTML(){\n    if (state.formDone) {\n      const msg = escapeHtml(state.formMsg || \"Thank you! A representative will contact you shortly.\");\n      return `<div class=\"gs-step active\"><div class=\"gs-step-content\"><h3 class=\"gs-h\">Request sent<\/h3><p class=\"gs-sub-h\">We have received your estimate request.<\/p><div class=\"gs-form\"><div class=\"gs-msg gs-msg-success gs-msg-show\">${msg}<\/div><\/div><\/div><div class=\"gs-nav\"><div class=\"gs-nav-spacer\"><\/div><button class=\"gs-btn primary\" data-action=\"restart\" type=\"button\">Start another estimate<\/button><\/div><\/div>`;\n    }\n\n    const btnContent = state.isLoading ? '<span class=\"gs-spinner\"><\/span>Sending...' : 'Submit Request';\n    const msgClass = state.formMsgType === 'success' ? 'gs-msg-success' : 'gs-msg-error';\n    const msgShow  = state.formMsg ? 'gs-msg-show' : '';\n    const companyPlaceholder = detectLang() === \"fr\" ? \"Nom de la compagnie\" : \"Company Name\";\n    const phonePlaceholder = detectLang() === \"fr\" ? \"Num\u00e9ro de t\u00e9l\u00e9phone\" : \"Phone Number\";\n\n    return `<div class=\"gs-step active\"><div class=\"gs-step-content\"><h3 class=\"gs-h\">Get a more detailed quote<\/h3><p class=\"gs-sub-h\">Complete the form below and a representative will contact you shortly.<\/p><div class=\"gs-form\"><div class=\"gs-form-grid\"><div><input class=\"gs-input\" id=\"fName\" type=\"text\" placeholder=\"Full Name\" required><\/div><div><input class=\"gs-input\" id=\"fEmail\" type=\"email\" placeholder=\"Email Address\" required><\/div><div><input class=\"gs-input\" id=\"fCompany\" type=\"text\" placeholder=\"${escapeHtml(companyPlaceholder)}\"><\/div><div><input class=\"gs-input\" id=\"fPhone\" type=\"tel\" placeholder=\"${escapeHtml(phonePlaceholder)}\"><\/div><div><select class=\"gs-select\" id=\"fCountry\" required>${countryOptionsHTML()}<\/select><\/div><div><select class=\"gs-select\" id=\"fTerritory\" required>${territoryOptionsHTML(\"\")}<\/select><\/div><\/div><input type=\"text\" id=\"fWebsite\" style=\"position:absolute;left:-9999px;opacity:0;\"><div class=\"gs-msg ${msgClass} ${msgShow}\">${escapeHtml(state.formMsg || '')}<\/div><div class=\"gs-small\">Tip: country and territory are auto-filled when possible.<\/div><\/div><\/div><div class=\"gs-nav\"><button class=\"gs-btn\" data-action=\"back\" type=\"button\" ${state.isLoading ? 'disabled' : ''}>\u2190 Back<\/button><div class=\"gs-nav-spacer\"><\/div><button class=\"gs-btn primary\" data-action=\"submitLead\" type=\"button\" ${state.isLoading ? 'disabled' : ''}>${btnContent}<\/button><\/div><\/div>`;\n  }\n\n  async function submitLead(){\n    const name = (root.querySelector(\"#fName\") || {}).value || \"\";\n    const email = (root.querySelector(\"#fEmail\") || {}).value || \"\";\n    const company = (root.querySelector(\"#fCompany\") || {}).value || \"\";\n    const phone = (root.querySelector(\"#fPhone\") || {}).value || \"\";\n    const country = (root.querySelector(\"#fCountry\") || {}).value || \"\";\n    const territory = (root.querySelector(\"#fTerritory\") || {}).value || \"\";\n    const honeypot = (root.querySelector(\"#fWebsite\") || {}).value || \"\";\n\n    if(honeypot){ showFormMsg(\"Thank you! A representative will contact you shortly.\", true); return; }\n    if(!name.trim()){ showFormMsg(\"Please enter your name.\", false); return; }\n    if(!email.trim() || !email.includes(\"@\")){ showFormMsg(\"Please enter a valid email address.\", false); return; }\n    if(!country){ showFormMsg(\"Please select your country.\", false); return; }\n    if(!territory){ showFormMsg(\"Please select your state\/province\/country.\", false); return; }\n\n    const rep = pickPrimaryRep(country, territory);\n    const payload = {\n      action: CONFIG.AJAX_ACTION,\n      name: name.trim(),\n      email: email.trim(),\n      company: company.trim(),\n      phone: phone.trim(),\n      country: country,\n      territory: territory,\n      category: state.category || '',\n      flowLabel: state.flowLabel || '',\n      model: state.model || '',\n      gal: state.gal || '',\n      liters: state.liters || '',\n      metal: state.metal || '',\n      chem: state.chem || '',\n      priceUSD: state.priceUSD || '',\n      priceShown: state.priceShown || '',\n      currency: state.currency || 'USD',\n      isCustom: state.isCustom ? 'Yes' : 'No',\n      lang: detectLang(),\n      ipData: JSON.stringify(ipMeta),\n      repEmail: rep ? rep.email : 'info@greensolv.com',\n      repName: rep ? rep.name : 'Greensolv Team',\n      repPhone: rep ? rep.phone : ''\n    };\n\n    setLoading(true);\n    try {\n      const fd = new FormData();\n      for(const [key, value] of Object.entries(payload)){ fd.append(key, String(value)); }\n      const res = await fetch(CONFIG.AJAX_URL, { method: 'POST', body: fd, credentials: 'same-origin' });\n      const data = await res.json().catch(() => null);\n      if(!res.ok || !data || !data.success){\n        const serverMsg = data && data.data && data.data.message ? data.data.message : 'Submission failed. Please try again.';\n        throw new Error(serverMsg);\n      }\n\n      const serverData = data.data || {};\n      const leadId = serverData.lead_id || '';\n      const isRealLead = serverData.submission === 'lead' && !!leadId;\n\n      \/\/ Track only a real lead \u2014 never honeypot (submission: ignored)\n      if (isRealLead) {\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push({\n          event: \"ready_to_strip_submit\",\n          form_name: \"1_2_3_ready_to_strip\",\n          lead_type: \"quote_request\",\n          category: state.category || \"\",\n          tank_model: state.model || \"\",\n          chemical: state.chem || \"\",\n          currency: state.currency || \"\",\n          estimated_system_price: Number(state.priceShown) || 0,\n          lead_id: leadId\n        });\n        state.formDone = true;\n      }\n\n      showFormMsg(\"Thank you! A representative will contact you shortly.\", true);\n      if (!state.formDone) {\n        const nameInput = root.querySelector(\"#fName\");\n        const emailInput = root.querySelector(\"#fEmail\");\n        const companyInput = root.querySelector(\"#fCompany\");\n        const phoneInput = root.querySelector(\"#fPhone\");\n        if(nameInput) nameInput.value = \"\";\n        if(emailInput) emailInput.value = \"\";\n        if(companyInput) companyInput.value = \"\";\n        if(phoneInput) phoneInput.value = \"\";\n      }\n    } catch(err) {\n      console.error(\"123 Strip form error:\", err);\n      showFormMsg(err.message || \"Sorry, something went wrong. Please try again or email info@greensolv.com.\", false);\n    } finally {\n      setLoading(false);\n    }\n  }\n\n  function render(){\n    root.innerHTML = `<div class=\"gs-wrap\">${sidebarHTML()}<div class=\"gs-main\"><div class=\"gs-topbar\"><div class=\"gs-prog-wrap\"><div class=\"gs-prog-label\">Step ${state.step} of 4 \u2014 ${stepLabel()}<\/div><div class=\"gs-progress\"><div style=\"width:${progressPct()}%\"><\/div><\/div><\/div><button class=\"gs-btn cls\" data-action=\"close\" type=\"button\">\u2715 Close<\/button><\/div><div class=\"gs-body\">${state.step === 1 ? step1HTML() : \"\"}${state.step === 2 ? step2HTML() : \"\"}${state.step === 3 ? step3HTML() : \"\"}${state.step === 4 ? step4FormHTML() : \"\"}<\/div><\/div><\/div>`;\n    bindActions(); bindCountrySelect();\n\n    var scrollable = root.querySelector('.gs-step.active .gs-step-content');\n    if(scrollable){\n      scrollable.addEventListener('wheel', function(e){\n        var maxScroll = this.scrollHeight - this.clientHeight;\n        if(maxScroll <= 0) return;\n        this.scrollTop += e.deltaY;\n        if(\n          (e.deltaY > 0 && this.scrollTop < maxScroll) ||\n          (e.deltaY < 0 && this.scrollTop > 0)\n        ){\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      }, { passive: false });\n    }\n  }\n\n  function bindActions(){\n    root.querySelectorAll(\"[data-action]\").forEach(el => {\n      el.onclick = function(){\n        if(state.isLoading) return;\n        const action = el.getAttribute(\"data-action\"), value = el.getAttribute(\"data-value\");\n        if(action === \"cat\") pickCategory(value);\n        if(action === \"flow\") pickFlow(value);\n        if(action === \"metal\") pickMetal(value);\n        if(action === \"back\") back();\n        if(action === \"restart\") resetAll();\n        if(action === \"moreInfo\") setStep(4);\n        if(action === \"submitLead\") submitLead();\n        if(action === \"close\") closeUI();\n        if(action === \"toggleAcc\"){ state.accOpen = !state.accOpen; render(); }\n        if(action === \"prevSlide\"){ scrollAcc(-1); }\n        if(action === \"nextSlide\"){ scrollAcc(1); }\n      };\n    });\n  }\n\n  function scrollAcc(dir){\n    const track = root.querySelector('.gs-acc-track');\n    if(!track) return;\n    const card = track.querySelector('.gs-acc-slide');\n    const gap = 16;\n    const step = card ? (card.getBoundingClientRect().width + gap) : track.clientWidth;\n    track.scrollBy({ left: dir * step, behavior: 'smooth' });\n  }\n\n  async function init(){ await detectByIP(); render(); openUI(); }\n\n})();\n<\/script>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Greensolv<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-99","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Greensolv - Savings calculator<\/title>\n<meta name=\"description\" content=\"Estimate your potential savings with Greensolv\u2019s calculator and compare the operating costs of industrial paint stripping systems.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/greensolv.com\/fr\/calculateur-depargne\/\" \/>\n<meta property=\"og:locale\" content=\"fr_CA\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Greensolv - Savings calculator\" \/>\n<meta property=\"og:description\" content=\"Estimate your potential savings with Greensolv\u2019s calculator and compare the operating costs of industrial paint stripping systems.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/greensolv.com\/fr\/calculateur-depargne\/\" \/>\n<meta property=\"og:site_name\" content=\"Greensolv\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/greensolv\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-18T00:43:16+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimation du temps de lecture\" \/>\n\t<meta name=\"twitter:data1\" content=\"42 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/savings_calculator\\\/\",\"url\":\"https:\\\/\\\/greensolv.com\\\/savings_calculator\\\/\",\"name\":\"Greensolv - Savings calculator\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/greensolv.com\\\/#website\"},\"datePublished\":\"2025-09-05T19:03:35+00:00\",\"dateModified\":\"2026-09-18T00:43:16+00:00\",\"description\":\"Estimate your potential savings with Greensolv\u2019s calculator and compare the operating costs of industrial paint stripping systems.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/greensolv.com\\\/savings_calculator\\\/#breadcrumb\"},\"inLanguage\":\"fr-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/greensolv.com\\\/savings_calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/savings_calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/greensolv.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Greensolv &#8211; Savings calculator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/#website\",\"url\":\"https:\\\/\\\/greensolv.com\\\/\",\"name\":\"Greensolv\",\"description\":\"Greensolv\",\"publisher\":{\"@id\":\"https:\\\/\\\/greensolv.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/greensolv.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-CA\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/#organization\",\"name\":\"Greensolv\",\"url\":\"https:\\\/\\\/greensolv.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-CA\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/greensolv.com\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/greensolv.png\",\"contentUrl\":\"https:\\\/\\\/greensolv.com\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/greensolv.png\",\"width\":400,\"height\":95,\"caption\":\"Greensolv\"},\"image\":{\"@id\":\"https:\\\/\\\/greensolv.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/greensolv\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/greensolv-inc.\\\/?originalSubdomain=fr\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC2QinAkroLYi9IWiI535img\",\"https:\\\/\\\/www.instagram.com\\\/greensolv_inc\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@greensolv?lang=en\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Greensolv - Calculateur d'\u00e9conomies","description":"Estimez vos \u00e9conomies potentielles avec le calculateur de Greensolv et comparez les co\u00fbts d'exploitation des syst\u00e8mes de d\u00e9capage industriels.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/greensolv.com\/fr\/calculateur-depargne\/","og_locale":"fr_CA","og_type":"article","og_title":"Greensolv - Savings calculator","og_description":"Estimate your potential savings with Greensolv\u2019s calculator and compare the operating costs of industrial paint stripping systems.","og_url":"https:\/\/greensolv.com\/fr\/calculateur-depargne\/","og_site_name":"Greensolv","article_publisher":"https:\/\/www.facebook.com\/greensolv\/","article_modified_time":"2026-09-18T00:43:16+00:00","twitter_card":"summary_large_image","twitter_misc":{"Estimation du temps de lecture":"42 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/greensolv.com\/savings_calculator\/","url":"https:\/\/greensolv.com\/savings_calculator\/","name":"Greensolv - Calculateur d'\u00e9conomies","isPartOf":{"@id":"https:\/\/greensolv.com\/#website"},"datePublished":"2025-09-05T19:03:35+00:00","dateModified":"2026-09-18T00:43:16+00:00","description":"Estimez vos \u00e9conomies potentielles avec le calculateur de Greensolv et comparez les co\u00fbts d'exploitation des syst\u00e8mes de d\u00e9capage industriels.","breadcrumb":{"@id":"https:\/\/greensolv.com\/savings_calculator\/#breadcrumb"},"inLanguage":"fr-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/greensolv.com\/savings_calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/greensolv.com\/savings_calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/greensolv.com\/"},{"@type":"ListItem","position":2,"name":"Greensolv &#8211; Savings calculator"}]},{"@type":"WebSite","@id":"https:\/\/greensolv.com\/#website","url":"https:\/\/greensolv.com\/","name":"Greensolv","description":"Greensolv","publisher":{"@id":"https:\/\/greensolv.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/greensolv.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-CA"},{"@type":"Organization","@id":"https:\/\/greensolv.com\/#organization","name":"Greensolv","url":"https:\/\/greensolv.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/greensolv.com\/#\/schema\/logo\/image\/","url":"https:\/\/greensolv.com\/wp-content\/uploads\/2025\/09\/greensolv.png","contentUrl":"https:\/\/greensolv.com\/wp-content\/uploads\/2025\/09\/greensolv.png","width":400,"height":95,"caption":"Greensolv"},"image":{"@id":"https:\/\/greensolv.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/greensolv\/","https:\/\/www.linkedin.com\/company\/greensolv-inc.\/?originalSubdomain=fr","https:\/\/www.youtube.com\/channel\/UC2QinAkroLYi9IWiI535img","https:\/\/www.instagram.com\/greensolv_inc\/","https:\/\/www.tiktok.com\/@greensolv?lang=en"]}]}},"_links":{"self":[{"href":"https:\/\/greensolv.com\/fr\/wp-json\/wp\/v2\/pages\/99","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/greensolv.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/greensolv.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/greensolv.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/greensolv.com\/fr\/wp-json\/wp\/v2\/comments?post=99"}],"version-history":[{"count":153,"href":"https:\/\/greensolv.com\/fr\/wp-json\/wp\/v2\/pages\/99\/revisions"}],"predecessor-version":[{"id":4913,"href":"https:\/\/greensolv.com\/fr\/wp-json\/wp\/v2\/pages\/99\/revisions\/4913"}],"wp:attachment":[{"href":"https:\/\/greensolv.com\/fr\/wp-json\/wp\/v2\/media?parent=99"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}