{"id":99,"date":"2025-09-05T19:03:35","date_gmt":"2025-09-05T19:03:35","guid":{"rendered":"https:\/\/greensolv.com\/savings_calculator\/"},"modified":"2026-06-12T19:16:39","modified_gmt":"2026-06-12T19:16:39","slug":"calculadora-de-ahorros","status":"publish","type":"page","link":"https:\/\/greensolv.com\/es\/savings_calculator\/","title":{"rendered":"Greensolv \u2013 Calculadora de ahorro"},"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-71abc454 elementor-widget elementor-widget-html\" data-id=\"71abc454\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@300;400;500;600;700;900&display=swap\" rel=\"stylesheet\">\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\r\n\r\n<style>\r\n  \/* ==================== VARIABLES & BASE ==================== *\/\r\n  .gsv26-tool {\r\n    --gsv26-max-width: 1280px;\r\n    --gsv26-px: 48px;\r\n    --gsv26-mobile-px: 32px;\r\n    \r\n    --gsv26-accent: #0CBC41;\r\n    --gsv26-ink: #252527;\r\n    --gsv26-white: #ffffff;\r\n    --gsv26-muted: rgba(37,37,39,0.70);\r\n    --gsv26-soft: rgba(37,37,39,0.04);\r\n    --gsv26-line: rgba(37,37,39,0.08);\r\n    \r\n    --gsv26-radius: 24px;\r\n    --gsv26-radiusLg: 32px;\r\n    --gsv26-gap: clamp(20px, 3vw, 32px);\r\n    \r\n    --gsv26-shadow: 0 1px 3px rgba(0,0,0,0.02), 0 12px 40px rgba(0,0,0,0.06);\r\n    --gsv26-shadowHover: 0 4px 12px rgba(0,0,0,0.04), 0 20px 60px rgba(0,0,0,0.12);\r\n\r\n    font-family: Roboto, system-ui, -apple-system, sans-serif;\r\n    color: var(--gsv26-ink);\r\n    line-height: 1.6;\r\n  }\r\n\r\n  .gsv26-tool * { box-sizing: border-box; }\r\n\r\n  \/* ==================== CONTAINER ==================== *\/\r\n  .gsv26-tool .gsv26-container {\r\n    width: min(var(--gsv26-max-width), calc(100% - var(--gsv26-px)));\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n    position: relative;\r\n    z-index: 2;\r\n  }\r\n\r\n  .gsv26-tool .gsv26-section-tanks {\r\n    position: relative;\r\n    padding: clamp(60px, 10vh, 100px) 0;\r\n    overflow: hidden;\r\n    background: transparent;\r\n  }\r\n\r\n  \/* Reveal on scroll *\/\r\n  @media (prefers-reduced-motion: no-preference) {\r\n    .gsv26-tool .gsv26-reveal {\r\n      opacity: 0;\r\n      transform: translateY(14px);\r\n      transition: opacity 0.65s ease, transform 0.65s ease;\r\n      will-change: opacity, transform;\r\n    }\r\n    .gsv26-tool .gsv26-reveal.gsv26-is-in {\r\n      opacity: 1;\r\n      transform: none;\r\n    }\r\n  }\r\n\r\n  \/* ==================== BENTO DESIGN ==================== *\/\r\n  .gsv26-tool .gsHome-ambientGlow {\r\n    position: absolute;\r\n    top: 50%; left: 50%;\r\n    transform: translate(-50%, -50%);\r\n    width: 80%; height: 80%;\r\n    background: radial-gradient(circle, rgba(12, 188, 65, 0.08) 0%, transparent 65%);\r\n    filter: blur(80px);\r\n    z-index: 0;\r\n    pointer-events: none;\r\n  }\r\n\r\n  .gsv26-tool .gsHome-bentoSection {\r\n    background-color: rgba(255, 255, 255, 0.45);\r\n    backdrop-filter: blur(24px);\r\n    -webkit-backdrop-filter: blur(24px);\r\n    border-radius: var(--gsv26-radiusLg);\r\n    border: 1px solid rgba(255, 255, 255, 0.7);\r\n    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.03);\r\n    padding: clamp(40px, 8vh, 80px) clamp(16px, 4vw, 40px);\r\n  }\r\n\r\n  .gsv26-tool .gsHome-bentoHeader {\r\n    text-align: center;\r\n    max-width: 700px;\r\n    margin: 0 auto 50px;\r\n  }\r\n\r\n  .gsv26-tool .gsBento-h2 {\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    margin: 0;\r\n    font-size: clamp(32px, 5vw, 44px);\r\n    color: var(--gsv26-ink);\r\n    line-height: 1.2;\r\n  }\r\n\r\n  .gsv26-tool .gsHome-bentoIntro {\r\n    margin: 20px auto 0;\r\n    max-width: 640px;\r\n    color: var(--gsv26-muted);\r\n    font-size: clamp(15px, 1.8vw, 17px);\r\n  }\r\n\r\n  \/* ==================== 1,2,3 STEPS ==================== *\/\r\n  .gsv26-tool .gsHome-stepsGrid { \r\n    display: grid; \r\n    grid-template-columns: repeat(3, 1fr); \r\n    gap: var(--gsv26-gap); \r\n    margin-bottom: 56px; \r\n  }\r\n\r\n  .gsv26-tool .gsHome-stepCard {\r\n    position: relative; padding: 48px 36px 44px; \r\n    background: var(--gsv26-white); \r\n    border: 1px solid var(--gsv26-line); \r\n    border-radius: var(--gsv26-radius);\r\n    box-shadow: var(--gsv26-shadow);\r\n    text-align: center; \r\n    transition: transform .35s ease, box-shadow .35s ease, border-color .35s ease, background .35s ease; \r\n    overflow: hidden; display: flex; flex-direction: column; align-items: center;\r\n    cursor: pointer;\r\n  }\r\n  .gsv26-tool .gsHome-stepCard::before { \r\n    content: ''; position: absolute; top: 0; left: 0; right: 0; height: 6px; \r\n    background: linear-gradient(90deg, transparent, var(--gsv26-accent), transparent); \r\n    opacity: 0; transition: opacity 0.4s ease; \r\n  }\r\n  .gsv26-tool .gsHome-stepCard:hover { \r\n    border-color: rgba(12,188,65,0.3); transform: translateY(-4px); \r\n    box-shadow: var(--gsv26-shadowHover); \r\n  }\r\n  .gsv26-tool .gsHome-stepCard:hover::before { opacity: 1; }\r\n\r\n  .gsv26-tool .gsHome-stepCard--accent { \r\n    background: linear-gradient(135deg, rgba(12,188,65,0.95), rgba(12,188,65,0.85)); \r\n    border-color: var(--gsv26-accent); \r\n  }\r\n  .gsv26-tool .gsHome-stepCard--accent .gsTanks-h3 { color: #ffffff; }\r\n  .gsv26-tool .gsHome-stepCard--accent .gsHome-stepNumber { color: #ffffff; background: rgba(255,255,255,0.2); }\r\n  .gsv26-tool .gsHome-stepCard--accent::before { background: linear-gradient(90deg, transparent, rgba(255,255,255,0.5), transparent); }\r\n  .gsv26-tool .gsHome-stepCard--accent:hover { \r\n    background: linear-gradient(135deg, rgba(12,188,65,1), rgba(12,188,65,0.9)); \r\n    box-shadow: 0 12px 48px rgba(12,188,65,0.25); \r\n  }\r\n\r\n  .gsv26-tool .gsHome-stepIcon { \r\n    display: inline-flex; align-items: center; justify-content: center; \r\n    width: 88px; height: 88px; margin: 0 auto 24px; border-radius: 50%; \r\n    background: linear-gradient(135deg, rgba(12,188,65,0.1), rgba(12,188,65,0.05)); \r\n    border: 3px dotted rgba(12,188,65,0.3); transition: all 0.4s ease; \r\n  }\r\n  .gsv26-tool .gsHome-stepCard:hover .gsHome-stepIcon { border-style: solid; }\r\n  .gsv26-tool .gsHome-stepCard--accent .gsHome-stepIcon { background: rgba(255,255,255,0.15); border-color: rgba(255,255,255,0.4); }\r\n  .gsv26-tool .gsHome-stepCard--accent:hover .gsHome-stepIcon { background: rgba(255,255,255,0.25); border-color: rgba(255,255,255,0.6); }\r\n\r\n  .gsv26-tool .gsHome-stepNumber { \r\n    display: block; font-family: \"Oswald\", sans-serif; font-size: 32px; \r\n    font-weight: 700; color: var(--gsv26-accent); line-height: 1; \r\n  }\r\n  .gsv26-tool .gsHome-stepCard--accent .gsHome-stepNumber { color: #fff; }\r\n  \r\n  .gsv26-tool .gsTanks-h3 { \r\n    margin: 0; font-family: \"Oswald\", sans-serif; font-size: clamp(20px, 2.5vw, 24px); \r\n    color: var(--gsv26-ink); font-weight: 700; text-transform: uppercase; letter-spacing: 0.02em; line-height: 1.2;\r\n  }\r\n\r\n  \/* ==================== CTA BAR ==================== *\/\r\n  .gsv26-tool .gs-cta-bar { \r\n    display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 40px; \r\n    background: linear-gradient(135deg, #111214 0%, #1b1d20 100%); \r\n    border-radius: var(--gsv26-radius); padding: 36px 44px; position: relative; overflow: hidden; \r\n  }\r\n  .gsv26-tool .gs-cta-bar::before { \r\n    content: ''; position: absolute; top: -80px; left: -60px; width: 300px; height: 300px; \r\n    background: radial-gradient(circle, rgba(12,188,65,0.16) 0%, transparent 70%); pointer-events: none; \r\n  }\r\n  .gsv26-tool .gs-cta-bar::after { \r\n    content: ''; position: absolute; inset: 0; \r\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); \r\n    background-size: 40px 40px; pointer-events: none; \r\n  }\r\n  .gsv26-tool .gs-cta-left, .gsv26-tool .gs-cta-right { position: relative; z-index: 1; }\r\n  .gsv26-tool .gs-cta-eyebrow { \r\n    display: inline-flex; align-items: center; gap: 8px; font-size: 11px; font-weight: 700; \r\n    letter-spacing: 1.5px; text-transform: uppercase; color: var(--gsv26-accent); margin-bottom: 10px; \r\n  }\r\n  .gsv26-tool .gs-cta-eyebrow::before { \r\n    content: ''; display: inline-block; width: 20px; height: 2px; background: var(--gsv26-accent); border-radius: 2px; \r\n  }\r\n  .gsv26-tool .gs-cta-headline { \r\n    font-family: \"Oswald\", sans-serif; font-size: clamp(26px, 3.5vw, 38px); font-weight: 700; \r\n    color: #ffffff; text-transform: uppercase; margin-bottom: 10px; \r\n  }\r\n  .gsv26-tool .gs-cta-sub { font-size: 15px; color: rgba(255,255,255,0.5); max-width: 480px; }\r\n  \r\n  .gsv26-tool .gs-cta-btn { \r\n    display: inline-flex; align-items: center; gap: 12px; border: none; \r\n    background: var(--gsv26-accent); color: #fff; border-radius: 14px; padding: 18px 32px; \r\n    cursor: pointer; font-family: \"Oswald\", sans-serif; font-size: 20px; font-weight: 600; \r\n    text-transform: uppercase; transition: all 0.25s ease; box-shadow: 0 8px 32px rgba(12,188,65,0.35); \r\n  }\r\n  .gsv26-tool .gs-cta-btn:hover { \r\n    transform: translateY(-3px); box-shadow: 0 16px 48px rgba(12,188,65,0.45); background: #0dce49; \r\n  }\r\n  .gsv26-tool .gs-cta-arrow { font-size: 22px; transition: transform 0.25s ease; }\r\n  .gsv26-tool .gs-cta-btn:hover .gs-cta-arrow { transform: translateX(4px); }\r\n  .gsv26-tool .gs-cta-trust { \r\n    display: flex; align-items: center; justify-content: center; gap: 16px; margin-top: 12px; \r\n    font-size: 12px; color: rgba(255,255,255,0.3); font-weight: 500; \r\n  }\r\n\r\n  \/* Responsive Steps *\/\r\n  @media (max-width: 980px) { \r\n    .gsv26-tool .gsHome-stepsGrid { grid-template-columns: 1fr; max-width: 560px; margin: 0 auto 56px; } \r\n  }\r\n  @media (max-width: 820px) { \r\n    .gsv26-tool .gs-cta-bar { grid-template-columns: 1fr; text-align: center; } \r\n    .gsv26-tool .gs-cta-btn { width: 100%; justify-content: center; } \r\n    .gsv26-tool .gs-cta-eyebrow { justify-content: center; } \r\n  }\r\n  @media (max-width: 640px) { \r\n    .gsv26-tool .gsv26-container { width: calc(100% - var(--gsv26-mobile-px)); } \r\n    .gsv26-tool .gsHome-bentoSection { padding: 40px 16px; }\r\n    .gsv26-tool .gsHome-stepCard { padding: 36px 24px 32px; } \r\n  }\r\n<\/style>\r\n\r\n<div class=\"gsv26-wrapper gsv26-tool\">\r\n  <section class=\"gsv26-section-tanks\">\r\n    \r\n    <div class=\"gsHome-ambientGlow\"><\/div>\r\n    \r\n    <div class=\"gsv26-container\">\r\n      <div class=\"gsHome-bentoSection gsv26-reveal\">\r\n        \r\n        <div class=\"gsHome-bentoHeader\">\r\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>\r\n          <p class=\"gsHome-bentoIntro\">You want to go further, greener, and more efficient. Your choices make the difference<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"gsHome-stepsGrid\">\r\n          <div class=\"gsHome-stepCard gsv26-reveal\">\r\n            <div class=\"gsHome-stepIcon\"><span class=\"gsHome-stepNumber\">1<\/span><\/div>\r\n            <h3 class=\"gsTanks-h3\">Choose the Chemical<\/h3>\r\n          <\/div>\r\n          <div class=\"gsHome-stepCard gsv26-reveal\">\r\n            <div class=\"gsHome-stepIcon\"><span class=\"gsHome-stepNumber\">2<\/span><\/div>\r\n            <h3 class=\"gsTanks-h3\">Choose the stripping system<\/h3>\r\n          <\/div>\r\n          <div class=\"gsHome-stepCard gsv26-reveal\">\r\n            <div class=\"gsHome-stepIcon\"><span class=\"gsHome-stepNumber\">3<\/span><\/div>\r\n            <h3 class=\"gsTanks-h3\">Get Instant Price Range<\/h3>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"gs-cta-bar gsv26-reveal\">\r\n          <div class=\"gs-cta-left\">\r\n            <div class=\"gs-cta-eyebrow\">Free \u00b7 No signup required \u00b7 Takes 60 seconds<\/div>\r\n            <div class=\"gs-cta-headline\">Not sure where to start?<\/div>\r\n            <div class=\"gs-cta-sub\">Answer 3 quick questions and get an instant price estimate for your stripping setup.<\/div>\r\n          <\/div>\r\n          <div class=\"gs-cta-right\">\r\n            <button type=\"button\" class=\"gs-cta-btn\" id=\"gs123OpenBtn\">\r\n              <span>START THE TOOL<\/span>\r\n              <span class=\"gs-cta-arrow\">\u2192<\/span>\r\n            <\/button>\r\n            <div class=\"gs-cta-trust\">\r\n              <span>\u2713 Instant results<\/span>\r\n              <span>\u2713 Expert follow-up<\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n<\/div>\r\n\r\n<script>\r\n\/\/ Le script d'apparition visuelle\r\n(function() {\r\n  if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\r\n  const scopeRoot = document.querySelector('.gsv26-tool');\r\n  if (!scopeRoot) return;\r\n  const targets = Array.from(scopeRoot.querySelectorAll('.gsv26-reveal'));\r\n  if(targets.length > 0) {\r\n    const io = new IntersectionObserver((entries) => {\r\n      entries.forEach(entry => {\r\n        if (!entry.isIntersecting) return;\r\n        entry.target.classList.add('gsv26-is-in');\r\n        io.unobserve(entry.target);\r\n      });\r\n    }, { threshold: 0.15, rootMargin: '50px 0px' });\r\n    targets.forEach(el => io.observe(el));\r\n  }\r\n})();\r\n<\/script>\r\n\r\n<style>\r\n    \/* ==================== WIDGET STYLES ==================== *\/\r\n    #gs123-widget {\r\n      --gs-green: #0CBC41;\r\n      --gs-green-hover: #0ea83b;\r\n      --gs-bg: #ffffff;\r\n      --gs-bg-soft: #f8fafc;\r\n      --gs-text: #0f172a;\r\n      --gs-muted: #64748b;\r\n      --gs-border: #e2e8f0;\r\n      --gs-border-hover: #cbd5e1;\r\n      --gs-radius-wrap: 24px;\r\n      --gs-radius-card: 16px;\r\n      --gs-radius-btn: 12px;\r\n      \r\n      font-family: Roboto, system-ui, -apple-system, Segoe UI, Arial, sans-serif;\r\n      color: var(--gs-text);\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      padding: clamp(10px, 2vh, 24px) clamp(10px, 1.5vw, 24px);\r\n      overflow-y: auto;\r\n    }\r\n  \r\n    #gs123-widget * { box-sizing: border-box; }\r\n  \r\n    #gs123-widget .gs-wrap { \r\n      display: grid; \r\n      grid-template-columns: 300px 1fr; \r\n      width: 100%;\r\n      max-width: 1440px;\r\n      height: min(96vh, 960px);\r\n      max-height: min(96vh, 960px);\r\n      margin: auto;\r\n      background: #fff; \r\n      border-radius: var(--gs-radius-wrap);\r\n      box-shadow: 0 24px 80px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.04);\r\n      overflow: hidden;\r\n      min-height: 0;\r\n    }\r\n  \r\n    \/* SIDEBAR *\/\r\n    #gs123-widget .gs-sidebar { \r\n      background: linear-gradient(160deg, #0f172a 0%, #1e293b 100%); \r\n      display: flex; flex-direction: column; position: relative; overflow: hidden; \r\n    }\r\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); }\r\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; }\r\n    \r\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; }\r\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; }\r\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); }\r\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; }\r\n    #gs123-widget .gs-sidebar-sub { font-size: 13px; color: rgba(255,255,255,0.5); line-height: 1.5; }\r\n    \r\n    #gs123-widget .gs-sidebar-steps { padding: 28px; flex: 1; display: flex; flex-direction: column; gap: 6px; position: relative; z-index: 1; }\r\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; }\r\n    #gs123-widget .gs-s-item.is-active { background: rgba(12,188,65,0.08); border-color: rgba(12,188,65,0.15); }\r\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; }\r\n    #gs123-widget .gs-s-item.is-done .gs-s-dot { background: var(--gs-green); border-color: var(--gs-green); color: #fff; }\r\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); }\r\n    #gs123-widget .gs-s-item.is-active .gs-s-dot::after { content: ''; width: 8px; height: 8px; background: var(--gs-green); border-radius: 50%; }\r\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; }\r\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); }\r\n    #gs123-widget .gs-s-txt span { font-size: 12px; color: rgba(255,255,255,0.25); line-height: 1.3; }\r\n    #gs123-widget .gs-s-item.is-active .gs-s-txt span { color: rgba(255,255,255,0.6); }\r\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; }\r\n  \r\n    \/* MAIN AREA *\/\r\n    #gs123-widget .gs-main { display: flex; flex-direction: column; overflow: hidden; background: #ffffff; position: relative; min-height: 0; }\r\n    \r\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; }\r\n    #gs123-widget .gs-prog-wrap { flex: 1; max-width: 400px; }\r\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; }\r\n    #gs123-widget .gs-progress { height: 6px; background: var(--gs-bg-soft); border-radius: 999px; overflow: hidden; }\r\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); }\r\n  \r\n    #gs123-widget .gs-body { flex: 1; display: flex; flex-direction: column; min-height: 0; padding: 0; background: var(--gs-bg-soft); }\r\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); }\r\n    #gs123-widget .gs-step.active { display: flex; }\r\n\r\n    #gs123-widget .gs-step-content { \r\n      flex: 1; \r\n      min-height: 0; \r\n      overflow-y: auto; \r\n      overscroll-behavior: contain;\r\n      -webkit-overflow-scrolling: touch;\r\n      display: block;\r\n      padding: 36px 40px 24px; \r\n    }\r\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; }\r\n    #gs123-widget .gs-nav .gs-nav-spacer { flex: 1; min-width: 12px; }\r\n  \r\n    @keyframes gsSlideUp { \r\n      from { opacity: 0; transform: translateY(16px) scale(0.99); } \r\n      to { opacity: 1; transform: translateY(0) scale(1); } \r\n    }\r\n  \r\n    \/* TYPOGRAPHY *\/\r\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; }\r\n    #gs123-widget .gs-sub-h { font-size: 15px; color: var(--gs-muted); margin: 0 0 28px; line-height: 1.6; }\r\n  \r\n    \/* GRIDS & CARDS *\/\r\n    #gs123-widget .gs-grid { display: grid; gap: 16px; margin-bottom: 28px; }\r\n    #gs123-widget .gs-grid.two { grid-template-columns: repeat(2, 1fr); max-width: 100%; }\r\n    #gs123-widget .gs-grid.two .gs-card { align-items: flex-start; text-align: left; }\r\n    #gs123-widget .gs-grid.two .gs-card p { text-align: left; }\r\n    #gs123-widget .gs-grid.four { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); }\r\n  \r\n    #gs123-widget .gs-card { \r\n      border: 2px solid var(--gs-border); \r\n      border-radius: var(--gs-radius-card); \r\n      background: #ffffff; \r\n      padding: 18px 16px; \r\n      cursor: pointer; \r\n      transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1); \r\n      position: relative; \r\n      overflow: visible; \r\n      min-height: 80px; \r\n      display: flex; flex-direction: column; justify-content: center;\r\n      align-items: center;\r\n      text-align: center;\r\n      box-shadow: 0 2px 8px rgba(0,0,0,0.02);\r\n      overflow-wrap: break-word;\r\n      hyphens: none;\r\n    }\r\n    \r\n    #gs123-widget .gs-card::before {\r\n      content: '\u2713'; position: absolute; top: 12px; right: 12px; width: 24px; height: 24px;\r\n      background: var(--gs-green); color: #fff; border-radius: 50%;\r\n      display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: bold;\r\n      opacity: 0; transform: scale(0.5); transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);\r\n    }\r\n  \r\n    #gs123-widget .gs-card:hover { \r\n      border-color: var(--gs-border-hover); \r\n      transform: translateY(-4px); \r\n      box-shadow: 0 12px 32px rgba(0,0,0,0.06); \r\n    }\r\n    \r\n    #gs123-widget .gs-card.selected { \r\n      border-color: var(--gs-green); \r\n      background: rgba(12,188,65,0.03); \r\n      box-shadow: 0 0 0 4px rgba(12,188,65,0.1), 0 12px 32px rgba(12,188,65,0.08); \r\n    }\r\n    #gs123-widget .gs-card.selected::before { opacity: 1; transform: scale(1); }\r\n    \r\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; }\r\n    #gs123-widget .gs-card p  { margin: 6px 0 0; font-size: 13px; color: var(--gs-muted); line-height: 1.5; text-align: center; }\r\n    \r\n    #gs123-widget .gs-card-big { justify-content: flex-start; align-items: flex-start; text-align: left; }\r\n    #gs123-widget .gs-card-big h4 { font-size: 22px; white-space: normal; }\r\n    #gs123-widget .gs-card-big p { text-align: left; }\r\n  \r\n    \/* SPLIT VIEW (Step 3) *\/\r\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; }\r\n    #gs123-widget .gs-split-col { display: flex; flex-direction: column; gap: 20px; min-height: 0; min-width: 0; }\r\n\r\n    \/* Desktop: pousser les accessoires au bas (step 3 estimate) *\/\r\n    @media (min-width: 1281px) {\r\n      #gs123-widget .gs-split-col { height: 100%; }\r\n      #gs123-widget .gs-split-col:nth-child(2) .gs-acc-wrapper { margin-top: auto; }\r\n    }\r\n  \r\n    #gs123-widget .gs-hero-box { \r\n      flex: 1; \r\n      min-height: 200px; \r\n      background: linear-gradient(135deg, rgba(12,188,65,.08), rgba(12,188,65,.02)); \r\n      border: 1px solid rgba(12,188,65,.15); \r\n      border-radius: var(--gs-radius-wrap); \r\n      display: flex; align-items: center; justify-content: center; \r\n      padding: 24px; \r\n      position: relative; \r\n    }\r\n    #gs123-widget .gs-hero-box img { \r\n      max-width: 100%; \r\n      max-height: 100%; \r\n      width: auto;\r\n      height: auto;\r\n      object-fit: contain; \r\n      filter: drop-shadow(0 20px 40px rgba(0,0,0,.15)); \r\n      transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1); \r\n    }\r\n    #gs123-widget .gs-hero-box:hover img { transform: scale(1.06) translateY(-8px); }\r\n  \r\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); }\r\n    #gs123-widget .gs-kv { display: grid; grid-template-columns: 130px 1fr; gap: 10px 16px; font-size: 14px; align-items: baseline; }\r\n    #gs123-widget .gs-kv b { color: var(--gs-muted); font-weight: 600; text-transform: uppercase; font-size: 11px; letter-spacing: 0.5px; }\r\n    #gs123-widget .gs-kv div { color: var(--gs-text); font-weight: 500; }\r\n  \r\n    #gs123-widget .gs-price-box { display: flex; flex-direction: column; align-items: flex-start; flex-shrink: 0; padding-top: 8px; }\r\n    \r\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; }\r\n    \r\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; }\r\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); }\r\n  \r\n    \/* NEW ACCESSORY TAB BAR OVERRIDES (Collapsible Tab) *\/\r\n    #gs123-widget .gs-acc-block { \r\n      width: 100%; margin-top: 16px; margin-bottom: 16px; \r\n      display: block; \r\n    }\r\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); }\r\n    #gs123-widget .gs-acc-toggle:hover { border-color: var(--gs-border-hover); background: var(--gs-bg-soft); }\r\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; }\r\n    #gs123-widget .gs-acc-toggle span { display: inline-block; transition: transform 0.3s ease; font-size: 14px; color: var(--gs-muted); }\r\n    #gs123-widget .gs-acc-toggle.open span { transform: rotate(180deg); }\r\n    \r\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; }\r\n    #gs123-widget .gs-acc-wrapper.open { display: flex !important; flex-direction: column; }\r\n    \r\n    #gs123-widget .gs-acc-slider-container { flex: 1; min-height: 0; position: relative; display: flex; align-items: center; padding: 16px 48px; overflow: hidden; }\r\n\r\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; }\r\n    #gs123-widget .gs-acc-track::-webkit-scrollbar { display: none; }\r\n\r\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; }\r\n\r\n    #gs123-widget .gs-acc-slide img { width: 100%; height: 150px; max-width: 100%; object-fit: contain; margin-bottom: 12px; }\r\n\r\n    #gs123-widget .gs-acc-meta { flex-shrink: 0; }\r\n    #gs123-widget .gs-acc-meta b { display: block; font-size: 14px; color: var(--gs-text); font-weight: 700; line-height: 1.3; }\r\n    #gs123-widget .gs-acc-meta span { display: block; font-size: 12px; color: var(--gs-muted); margin-top: 3px; }\r\n  \r\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; }\r\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); }\r\n    #gs123-widget .gs-acc-prev { left: 6px; }\r\n    #gs123-widget .gs-acc-next { right: 6px; }\r\n\r\n    @media (max-width: 1100px) {\r\n      #gs123-widget .gs-acc-slide { flex: 0 0 calc((100% - 16px) \/ 2); }\r\n    }\r\n  \r\n    \/* FORMS *\/\r\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);}\r\n    #gs123-widget .gs-form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }\r\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; }\r\n    #gs123-widget .gs-input::placeholder { color: #94a3b8; font-weight: 400; }\r\n    #gs123-widget .gs-input:hover, #gs123-widget .gs-select:hover { border-color: var(--gs-border-hover); background: #fff; }\r\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); }\r\n    #gs123-widget .gs-small { margin-top: 14px; font-size: 13px; color: var(--gs-muted); }\r\n  \r\n    \/* BUTTONS *\/\r\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; }\r\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); }\r\n    \r\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; }\r\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); }\r\n    \r\n    #gs123-widget .gs-btn.cls { font-size: 14px; color: var(--gs-muted); padding: 10px 20px; height: 40px; border-radius: 99px; }\r\n    #gs123-widget .gs-btn:disabled { opacity: 0.6; cursor: not-allowed; transform: none !important; box-shadow: none !important; }\r\n  \r\n    \/* MESSAGES & SPINNER *\/\r\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; }\r\n    #gs123-widget .gs-msg.gs-msg-show { display: block; }\r\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); }\r\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); }\r\n    \r\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; }\r\n    @keyframes gsSpin { to { transform: rotate(360deg); } }\r\n  \r\n    \/* ==================== RESPONSIVENESS ==================== *\/\r\n  \r\n    \/* MEDIUM: Tablettes et petits desktops *\/\r\n    @media (max-width: 1100px) {\r\n      #gs123-widget .gs-wrap { grid-template-columns: 260px 1fr; }\r\n      #gs123-widget .gs-sidebar-top { padding: 28px 24px 16px; }\r\n      #gs123-widget .gs-sidebar-title { font-size: 26px; }\r\n      #gs123-widget .gs-sidebar-steps { padding: 20px 24px; }\r\n      #gs123-widget .gs-sidebar-footer { padding: 16px 24px; }\r\n      #gs123-widget .gs-step-content { padding: 28px 32px 20px; }\r\n      #gs123-widget .gs-topbar { padding: 14px 32px; }\r\n      #gs123-widget .gs-nav { padding: 16px 32px; }\r\n    }\r\n  \r\n    @media (max-width: 1280px) {\r\n      #gs123-widget .gs-split {\r\n        display: flex !important;\r\n        flex-direction: column !important;\r\n        flex-wrap: nowrap;\r\n        gap: 24px;\r\n        flex: 0 1 auto;\r\n      }\r\n      #gs123-widget .gs-split-col {\r\n        width: 100% !important;\r\n        max-width: 100% !important;\r\n        flex: none !important;\r\n      }\r\n      #gs123-widget .gs-hero-box { min-height: 200px; }\r\n    }\r\n  \r\n    \/* TABLETTE \/ MOBILE: sidebar dispara\u00eet *\/\r\n    @media (max-width: 850px) {\r\n      #gs123-widget { padding: 0; align-items: stretch; overflow: hidden; }\r\n      #gs123-widget .gs-wrap { \r\n        grid-template-columns: 1fr; \r\n        grid-template-rows: auto 1fr; \r\n        border-radius: 0; \r\n        max-height: 100vh;\r\n        max-height: 100dvh;\r\n        height: 100dvh;\r\n        height: 100%;\r\n        width: 100%;\r\n        min-height: 0;\r\n      }\r\n      #gs123-widget .gs-main { min-height: 0; }\r\n      \r\n      \/* Sidebar \u2192 barre horizontale compacte *\/\r\n      #gs123-widget .gs-sidebar { flex-direction: row; align-items: center; justify-content: space-between; padding: 14px 20px; min-height: auto; }\r\n      #gs123-widget .gs-sidebar-top { padding: 0; border: none; display: flex; align-items: center; gap: 12px; flex-shrink: 0; }\r\n      #gs123-widget .gs-sidebar-logo { margin: 0; font-size: 11px; }\r\n      #gs123-widget .gs-sidebar-title { font-size: 18px; margin: 0; }\r\n      #gs123-widget .gs-sidebar-title br { display: none; }\r\n      #gs123-widget .gs-sidebar-title span { display: inline; }\r\n      #gs123-widget .gs-sidebar-sub, \r\n      #gs123-widget .gs-sidebar-steps, \r\n      #gs123-widget .gs-sidebar-footer { display: none; }\r\n      \r\n      #gs123-widget .gs-step-content { padding: 20px 20px 16px; }\r\n      #gs123-widget .gs-topbar { padding: 12px 20px; }\r\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; }\r\n      #gs123-widget .gs-nav button { width: 100%; justify-content: center; }\r\n      #gs123-widget .gs-nav .gs-nav-spacer { display: none; }\r\n      \r\n      #gs123-widget .gs-form { padding: 20px; }\r\n      #gs123-widget .gs-form-grid { grid-template-columns: 1fr; }\r\n      #gs123-widget .gs-grid.two { grid-template-columns: 1fr; }\r\n      #gs123-widget .gs-grid.four { grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); }\r\n      #gs123-widget .gs-price { font-size: 36px; text-align: center; }\r\n      #gs123-widget .gs-price-box { align-items: center; text-align: center; }\r\n      #gs123-widget .gs-chemical-badge { justify-content: center; }\r\n      \r\n      #gs123-widget .gs-split {\r\n        display: flex !important;\r\n        flex-direction: column !important;\r\n        flex-wrap: nowrap;\r\n        gap: 24px;\r\n        flex: 0 1 auto;\r\n      }\r\n      #gs123-widget .gs-split-col {\r\n        width: 100% !important;\r\n        max-width: 100% !important;\r\n        flex: none !important;\r\n        gap: 16px;\r\n      }\r\n      #gs123-widget .gs-hero-box { min-height: 200px; max-height: 260px; }\r\n      #gs123-widget .gs-hero-box img { min-height: 140px; }\r\n      #gs123-widget .gs-specs-box { flex-shrink: 0; }\r\n      #gs123-widget .gs-price-box { flex-shrink: 0; }\r\n      #gs123-widget .gs-acc-wrapper { min-height: 280px; overflow: hidden; }\r\n      #gs123-widget .gs-acc-slider-container { min-height: 240px; padding: 16px 44px; overflow: hidden; }\r\n      #gs123-widget .gs-acc-slide { padding: 10px; }\r\n      #gs123-widget .gs-acc-slide img { height: 130px; max-height: none; }\r\n      #gs123-widget .gs-acc-meta { padding-bottom: 0; }\r\n      #gs123-widget .gs-acc-nav-btn { width: 40px; height: 40px; min-width: 40px; min-height: 40px; }\r\n      #gs123-widget .gs-kv { grid-template-columns: 1fr 1fr; gap: 8px 12px; font-size: 13px; }\r\n      #gs123-widget .gs-grid.four { grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 20px; }\r\n      #gs123-widget .gs-grid.four .gs-card { min-height: 72px; }\r\n      #gs123-widget .gs-grid.four .gs-card:hover { transform: none; }\r\n    }\r\n  \r\n    \/* PETIT MOBILE *\/\r\n    @media (max-width: 480px) {\r\n      #gs123-widget .gs-grid.four { grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 16px; }\r\n      #gs123-widget .gs-grid.four .gs-card { min-height: 68px; padding: 12px 8px; }\r\n      #gs123-widget .gs-card { padding: 14px 10px; min-height: 64px; }\r\n      #gs123-widget .gs-card h4 { font-size: 13px; }\r\n      #gs123-widget .gs-h { font-size: 22px; }\r\n      #gs123-widget .gs-price { font-size: 32px; text-align: center; }\r\n      #gs123-widget .gs-price-box { align-items: center; text-align: center; }\r\n      #gs123-widget .gs-chemical-badge { justify-content: center; }\r\n      #gs123-widget .gs-hero-box { min-height: 180px; max-height: 220px; }\r\n      #gs123-widget .gs-hero-box img { min-height: 120px; }\r\n      #gs123-widget .gs-acc-wrapper { min-height: 260px; overflow: hidden; }\r\n      #gs123-widget .gs-acc-slider-container { min-height: 220px; padding: 12px 40px; overflow: hidden; }\r\n      #gs123-widget .gs-acc-slide { padding: 8px; }\r\n      #gs123-widget .gs-acc-slide img { height: 110px; max-height: none; }\r\n      #gs123-widget .gs-acc-meta { padding-bottom: 0; }\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #gs123-widget, #gs123-widget .gs-step, #gs123-widget .gs-card { animation: none !important; transition: none !important; transform: none !important; }\r\n      #gs123-widget .gs-spinner { animation: none !important; }\r\n    }\r\n  <\/style>\r\n  \r\n  <div class=\"gsv26-wrapper gsv26-tool\">\r\n    <div id=\"gs123-overlay\" 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>\r\n  \r\n    <div id=\"gs123-widget\" style=\"display:none;position:fixed;inset:0;z-index:99999;\"><\/div>\r\n  <\/div>\r\n  \r\n  <script>\r\n  \/\/ ==================== WIDGET SCRIPT ====================\r\n  (function(){\r\n  \r\n    const root    = document.getElementById(\"gs123-widget\");\r\n    const openBtn = document.getElementById(\"gs123OpenBtn\");\r\n    const overlay = document.getElementById(\"gs123-overlay\");\r\n    \r\n    document.addEventListener(\"click\", function(e) {\r\n      const btn = e.target.closest(\"#gs123OpenBtn, .gsHome-stepCard\");\r\n      if (btn) {\r\n        if(!started){ started = true; init(); }\r\n        else { openUI(); }\r\n      }\r\n    });\r\n  \r\n    if(!root || !overlay) return;\r\n  \r\n    let started = false;\r\n    let scrollY = 0;\r\n  \r\n    function lockBody(){\r\n      scrollY = window.scrollY;\r\n      document.body.style.overflow = \"hidden\";\r\n      document.body.style.position = \"fixed\";\r\n      document.body.style.top = \"-\" + scrollY + \"px\";\r\n      document.body.style.width = \"100%\";\r\n    }\r\n    function unlockBody(){\r\n      document.body.style.overflow = \"\";\r\n      document.body.style.position = \"\";\r\n      document.body.style.top = \"\";\r\n      document.body.style.width = \"\";\r\n      window.scrollTo(0, scrollY);\r\n    }\r\n  \r\n    root.style.opacity = \"0\";\r\n    root.style.transition = \"opacity .3s ease\";\r\n    overlay.style.opacity = \"0\";\r\n    overlay.style.transition = \"opacity .3s ease\";\r\n  \r\n    function openUI(){\r\n      lockBody();\r\n      root.style.display = \"flex\";\r\n      overlay.style.display = \"block\";\r\n      void root.offsetHeight;\r\n      root.style.opacity = \"1\";\r\n      overlay.style.opacity = \"1\";\r\n      \r\n      const wrap = root.querySelector('.gs-wrap');\r\n      if(wrap) {\r\n        wrap.style.transform = \"translateY(20px) scale(0.98)\";\r\n        wrap.style.transition = \"transform 0.4s cubic-bezier(0.16, 1, 0.3, 1)\";\r\n        void wrap.offsetHeight;\r\n        wrap.style.transform = \"translateY(0) scale(1)\";\r\n      }\r\n    }\r\n  \r\n    function closeUI(){\r\n      root.style.opacity = \"0\";\r\n      overlay.style.opacity = \"0\";\r\n      const wrap = root.querySelector('.gs-wrap');\r\n      if(wrap) wrap.style.transform = \"translateY(20px) scale(0.98)\";\r\n      \r\n      setTimeout(function(){\r\n        root.style.display = \"none\";\r\n        overlay.style.display = \"none\";\r\n        unlockBody();\r\n      }, 300);\r\n    }\r\n  \r\n    overlay.addEventListener(\"click\", closeUI);\r\n    document.addEventListener(\"keydown\", function(e){\r\n      if(e.key === \"Escape\" && root.style.display !== \"none\") closeUI();\r\n    });\r\n  \r\n    function escapeHtml(s){\r\n      return String(s || \"\").replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\").replaceAll(\">\", \"&gt;\").replaceAll('\"', \"&quot;\").replaceAll(\"'\", \"&#039;\");\r\n    }\r\n  \r\n    function formatMoney(amount, currency){\r\n      const numStr = Math.round(amount).toLocaleString('fr-CA');\r\n      if (currency === \"CAD\") return numStr + \" $ CAD\";\r\n      if (currency === \"EUR\") return numStr + \" \u20ac\";\r\n      return \"$ \" + numStr + \" USD\";\r\n    }\r\n\r\n    const CHEMICAL_URLS = {\r\n      en: \"https:\/\/greensolv.com\/chemicals-greensolv\/\",\r\n      fr: \"https:\/\/greensolv.com\/fr\/produits-chimiques-greensolv\/\",\r\n      es: \"https:\/\/greensolv.com\/es\/productos-quimicos-greensolv\/\"\r\n    };\r\n\r\nfunction detectLang(){\r\n      const path = (window.location.pathname || \"\").toLowerCase();\r\n      if(\/^\\\/fr(\\\/|$)\/.test(path)) return \"fr\";\r\n      if(\/^\\\/es(\\\/|$)\/.test(path)) return \"es\";\r\n      const docLang = (document.documentElement.lang || \"\").toLowerCase();\r\n      if(docLang.startsWith(\"fr\")) return \"fr\";\r\n      if(docLang.startsWith(\"es\")) return \"es\";\r\n      return \"en\";\r\n    }\r\n\r\n    function chemicalUrl(){\r\n      return CHEMICAL_URLS[detectLang()] || CHEMICAL_URLS.en;\r\n    }\r\n  \r\n    const CONFIG = {\r\n      AJAX_URL: (typeof ajaxurl !== 'undefined') ? ajaxurl : (document.querySelector('link[href*=\"wp-content\"]')?.href?.split('\/wp-content')[0] || '') + '\/wp-admin\/admin-ajax.php',\r\n      AJAX_ACTION: 'greensolv_123strip_inquiry'\r\n    };\r\n  \r\nconst FLOW = {\r\n  Wheels: {\r\n    question: \"How many wheels per day do you strip?\",\r\n    choices: [\r\n      { key:\"20-32\", label:\"Up to 20 wheels\/day\", tank:{ model:\"T4R\",  gal:140,  liters:530  } },\r\n      { key:\"30-48\", label:\"Up to 30 wheels\/day\", tank:{ model:\"T6R\",  gal:210,  liters:800  } },\r\n      { key:\"40-64\", label:\"Up to 40 wheels\/day\", tank:{ model:\"T8R\",  gal:290,  liters:1100 } },\r\n      { key:\"60-96\", label:\"Up to 60 wheels\/day\", tank:{ model:\"T12R\", gal:435,  liters:1650 } }\r\n    ]\r\n  },\r\nParts: {\r\n  question: \"What is the biggest size of the parts that need to be stripped?\",\r\n  choices: [\r\n    { key:\"100\", label:\"L48\\\" x W26\\\" x H32\\\"\", tank:{ model:\"T4R\",  gal:140,  liters:530  } },\r\n    { key:\"150\", label:\"L72\\\" x W26\\\" x H32\\\"\", tank:{ model:\"T6R\",  gal:210,  liters:800  } },\r\n    { key:\"200\", label:\"L48\\\" x W54\\\" x H32\\\"\", tank:{ model:\"T8R\",  gal:290,  liters:1100 } },\r\n    { key:\"300\", label:\"L72\\\" x W54\\\" x H32\\\"\", tank:{ model:\"T12R\", gal:435,  liters:1650 } }\r\n  ]\r\n}\r\n};\r\n  \r\n    const METALS = {\r\n      Wheels: [\"All metal\",\"Aluminium\",\"Steel\",\"Magnesium\",\"Stainless Steel\",\"Cast Iron\"],\r\n      Parts:  [\"All metal\",\"Aluminium\",\"Steel\",\"Titanium\",\"Magnesium\",\"Stainless Steel\",\"Copper\",\"Cast Iron\"]\r\n    };\r\n  \r\n    function chemicalFor(category, metal){\r\n      if(category === \"Wheels\"){\r\n        if(metal === \"Steel\" || metal === \"Stainless Steel\") return \"Steelstrip\";\r\n        return \"Wheelstrip\"; \r\n      }\r\n      if(metal === \"All metal\") return \"Aerostrip\"; \r\n      if(metal === \"Steel\" || metal === \"Stainless Steel\") return \"Steelstrip\";\r\n      return \"Alumistrip\";\r\n    }\r\n  \r\n    const PRICES_USD = {\r\n      T4R: { standard: 19013, aerostrip: 21444, steelstrip: 22360 },\r\n      T6R: { standard: 24482, aerostrip: 28129, steelstrip: 29503 },\r\n      T8R: { standard: 37514, aerostrip: 42550, steelstrip: 44448 },\r\n      T12R: { standard: 52234, aerostrip: 59787, steelstrip: 62634 }\r\n    };\r\n\r\n    const PRICES_CAD = {\r\n      T4R: { standard: 23787, aerostrip: 26320, steelstrip: 26167 },\r\n      T6R: { standard: 30128, aerostrip: 33927, steelstrip: 33698 },\r\n      T8R: { standard: 46176, aerostrip: 51422, steelstrip: 51106 },\r\n      T12R: { standard: 66841, aerostrip: 74711, steelstrip: 74236 }\r\n    };\r\n\r\n    const PRICES_EUR = {\r\n      T4R: { standard: 16115, aerostrip: 21270, steelstrip: 21308 },\r\n      T6R: { standard: 20640, aerostrip: 28372, steelstrip: 28429 },\r\n      T8R: { standard: 31655, aerostrip: 42332, steelstrip: 42411 },\r\n      T12R: { standard: 45425, aerostrip: 61441, steelstrip: 61560 }\r\n    };\r\n  \r\n    const TANK_IMAGES = {\r\n      T4R:  \"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/140-gallons.png\",\r\n      T6R:  \"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/210-gallons.png\",\r\n      T8R:  \"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/290gallons.png\",\r\n      T12R: \"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/t12.png\"\r\n    };\r\n  \r\n    function priceUSD(model, chem){\r\n      if(chem === \"Aerostrip\") return PRICES_USD[model].aerostrip;\r\n      if(chem === \"Steelstrip\") return PRICES_USD[model].steelstrip;\r\n      return PRICES_USD[model].standard;\r\n    }\r\n\r\n    function priceCAD(model, chem){\r\n      if(chem === \"Aerostrip\") return PRICES_CAD[model].aerostrip;\r\n      if(chem === \"Steelstrip\") return PRICES_CAD[model].steelstrip;\r\n      return PRICES_CAD[model].standard;\r\n    }\r\n\r\n    function priceEUR(model, chem){\r\n      if(chem === \"Aerostrip\") return PRICES_EUR[model].aerostrip;\r\n      if(chem === \"Steelstrip\") return PRICES_EUR[model].steelstrip;\r\n      return PRICES_EUR[model].standard;\r\n    }\r\n  \r\n    const ACCESSORIES = [\r\n      { name:\"Double-Row Rinse Table\", model:\"RT8R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/Double-Row-Rinse-Table.png\" },\r\n      { name:\"Double-Row Rinse Table\", model:\"RT12R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/RT12R.png\" },\r\n      { name:\"Rinse Table with grating platform\", model:\"RTGRATT8R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/RTGRATT8R.png\" },\r\n      { name:\"Lateral Hoisting System (2-leg)\", model:\"\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/Lateral-Hoisting-System-2-leg.png\" },\r\n      { name:\"Lateral Hoisting System (4-leg)\", model:\"4LHST8R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/4LHST8R.png\" },\r\n      { name:\"Basket Rack for parts\", model:\"BR4R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/BR4R.png\" },\r\n      { name:\"Basket Rack for parts\", model:\"BR6R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/BR6R.png\" },\r\n      { name:\"Wheel Rack\", model:\"R6R\", img:\"https:\/\/greensolv.com\/wp-content\/uploads\/2026\/02\/R6R.png\" }\r\n    ];\r\n  \r\n    const REPS = [\r\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\",\"Pennsylvania\",\"Georgia\",\"Minnesota\"], canada_provinces: [], countries: [] },\r\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\",\"Mexico\"] },\r\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\",\"Ireland\",\"Italy\",\"Switzerland\",\"France\",\"United Kingdom\"] }\r\n    ];\r\n  \r\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\"];\r\n    const CANADA_PROVINCES = [\"Alberta\",\"British Columbia\",\"Manitoba\",\"New Brunswick\",\"Newfoundland\",\"Nova Scotia\",\"Ontario\",\"Prince Edward Island\",\"Qu\u00e9bec\",\"Saskatchewan\"];\r\n    const INTERNATIONAL_COUNTRIES = [\"Australia\",\"Ireland\",\"Italy\",\"Switzerland\",\"France\",\"United Kingdom\",\"Japan\",\"Mexico\",\"Other\"];\r\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\"];\r\n  \r\n    function repsForTerritory(country, stateOrProvince){\r\n      const hits = [];\r\n      const place = (stateOrProvince || \"\").trim();\r\n      if(country === \"USA\"){\r\n        for(const r of REPS) if(r.usa_states.includes(place)) hits.push(r);\r\n      } else if(country === \"Canada\"){\r\n        for(const r of REPS) if(r.canada_provinces.includes(place)) hits.push(r);\r\n      } else {\r\n        if(place && place !== \"Other\"){\r\n          for(const r of REPS) if(r.countries.includes(place)) hits.push(r);\r\n        }\r\n      }\r\n      return hits;\r\n    }\r\n  \r\n    function pickPrimaryRep(country, territory) {\r\n      const hits = repsForTerritory(country, territory);\r\n      return hits.length > 0 ? hits[0] : null;\r\n    }\r\n  \r\n    let detectedCurrency = \"USD\";\r\n    let ipMeta = { ip:\"\", country_name:\"\", country:\"\", region:\"\", region_code:\"\" };\r\n  \r\n    async function detectByIP(){\r\n      try{\r\n        const res = await fetch(\"https:\/\/ipapi.co\/json\/\", { method:\"GET\" });\r\n        if(!res.ok) throw new Error(\"ipapi error\");\r\n        const data = await res.json();\r\n        ipMeta = { ip: data.ip || \"\", country_name: data.country_name || \"\", country: (data.country || \"\").toUpperCase(), region: data.region || \"\", region_code: data.region_code || \"\" };\r\n        \r\n        if (ipMeta.country === \"CA\") {\r\n            detectedCurrency = \"CAD\";\r\n        } else if (EU_COUNTRIES.includes(ipMeta.country)) {\r\n            detectedCurrency = \"EUR\";\r\n        } else {\r\n            detectedCurrency = \"USD\";\r\n        }\r\n} catch(e){\r\n        const tz = (Intl.DateTimeFormat().resolvedOptions().timeZone || \"\");\r\n        const lang = (navigator.language || \"\").toLowerCase();\r\n        const caZones = [\"Toronto\",\"Montreal\",\"Winnipeg\",\"Edmonton\",\"Vancouver\",\"Halifax\",\"St_Johns\",\"Regina\"];\r\n        const isCanada = caZones.some(z => tz.indexOf(z) > -1) || lang.indexOf(\"-ca\") > -1;\r\n\r\n        if(isCanada){ ipMeta.country = \"CA\"; ipMeta.country_name = \"Canada\"; detectedCurrency = \"CAD\"; }\r\n        else if(tz.indexOf(\"Europe\/\") === 0){ ipMeta.country = \"\"; ipMeta.country_name = \"Europe\"; detectedCurrency = \"EUR\"; }\r\n        else { ipMeta.country = \"\"; ipMeta.country_name = \"International\"; detectedCurrency = \"USD\"; }\r\n      }\r\n    }\r\n  \r\n    function regionToProvinceName(region){\r\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\"};\r\n      return map[(region || \"\").toUpperCase().trim()] || \"\";\r\n    }\r\n  \r\n    function prefillCountryTerritory(){\r\n      const c = root.querySelector(\"#fCountry\");\r\n      const t = root.querySelector(\"#fTerritory\");\r\n      if(!c || !t) return;\r\n  \r\n      if(ipMeta.country === \"CA\"){\r\n        c.value = \"Canada\";\r\n        t.innerHTML = territoryOptionsHTML(\"Canada\");\r\n        const prov = regionToProvinceName(ipMeta.region_code) || ipMeta.region || \"\";\r\n        if(prov && CANADA_PROVINCES.includes(prov)) t.value = prov;\r\n      } else if(ipMeta.country === \"US\"){\r\n        c.value = \"USA\";\r\n        t.innerHTML = territoryOptionsHTML(\"USA\");\r\n        const st = ipMeta.region || \"\";\r\n        if(st && USA_STATES.includes(st)) t.value = st;\r\n      } else {\r\n        c.value = \"International\";\r\n        t.innerHTML = territoryOptionsHTML(\"International\");\r\n        const cn = ipMeta.country_name || \"\";\r\n        t.value = (cn && INTERNATIONAL_COUNTRIES.includes(cn)) ? cn : \"Other\";\r\n      }\r\n    }\r\n  \r\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\", isLoading: false, formMsg: null, formMsgType: null, accSlideIndex: 0, accOpen: false };\r\n  \r\n    function progressPct(){ return {1:25, 2:50, 3:75, 4:100}[state.step] || 0; }\r\n    function stepLabel(){ return {1:\"Category\", 2:\"Volume\", 3:\"Metal & Estimate\", 4:\"Get Quote\"}[state.step] || \"\"; }\r\n  \r\n    function setStep(n){ state.step = n; state.formMsg = null; state.formMsgType = null; render(); if(state.step === 4) setTimeout(prefillCountryTerritory, 0); }\r\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.isLoading = false; state.formMsg = null; state.formMsgType = null; render(); }\r\n  \r\n    function back(){\r\n      if(state.step === 2){ setStep(1); return; }\r\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; }\r\n      if(state.step === 4){ setStep(3); return; }\r\n      setStep(1);\r\n    }\r\n  \r\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; setStep(2); }\r\n    function pickFlow(key){ const choice = FLOW[state.category].choices.find(x => x.key === key); if(choice){ state.flowKey = key; state.flowLabel = choice.label; state.model = choice.tank.model; state.gal = choice.tank.gal; state.liters = choice.tank.liters; setStep(3); } }\r\n    \r\n    function pickMetal(m){ \r\n      state.metal = m; \r\n      state.chem = chemicalFor(state.category, state.metal); \r\n      \r\n      state.accOpen = false; \r\n      state.currency = detectedCurrency; \r\n\r\n      if(state.currency === \"EUR\") {\r\n        state.priceShown = priceEUR(state.model, state.chem);\r\n      } else if(state.currency === \"CAD\") {\r\n        state.priceShown = priceCAD(state.model, state.chem);\r\n      } else {\r\n        state.priceShown = priceUSD(state.model, state.chem);\r\n      }\r\n      \r\n      state.priceUSD = priceUSD(state.model, state.chem);\r\n      \r\n      setStep(3); \r\n    }\r\n  \r\n    function countryOptionsHTML(){ return '<option value=\"\">Country<\/option><option value=\"USA\">USA<\/option><option value=\"Canada\">Canada<\/option><option value=\"International\">International<\/option>'; }\r\n  \r\n    function territoryOptionsHTML(country){\r\n      if(country === \"USA\"){ return '<option value=\"\">State<\/option>' + USA_STATES.map(s => `<option value=\"${escapeHtml(s)}\">${escapeHtml(s)}<\/option>`).join(\"\"); }\r\n      if(country === \"Canada\"){ return '<option value=\"\">Province<\/option>' + CANADA_PROVINCES.map(s => `<option value=\"${escapeHtml(s)}\">${escapeHtml(s)}<\/option>`).join(\"\"); }\r\n      if(country === \"International\"){ return '<option value=\"\">Country<\/option>' + INTERNATIONAL_COUNTRIES.map(s => `<option value=\"${escapeHtml(s)}\">${escapeHtml(s)}<\/option>`).join(\"\"); }\r\n      return '<option value=\"\">State \/ Province<\/option>';\r\n    }\r\n  \r\n    function showFormMsg(msg, isSuccess){ state.formMsg = msg; state.formMsgType = isSuccess ? 'success' : 'error'; render(); if(state.step === 4) setTimeout(prefillCountryTerritory, 0); }\r\n    function setLoading(loading){ state.isLoading = loading; render(); if(state.step === 4) setTimeout(prefillCountryTerritory, 0); }\r\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 = \"\"; }; }\r\n  \r\n    function sidebarHTML(){\r\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\" }];\r\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.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>`;\r\n    }\r\n  \r\n    function step1HTML(){ \r\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>`; \r\n    }\r\n  \r\n    function step2HTML(){ const cfg = FLOW[state.category]; 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(c.label)}<\/h4><p>Tank: <b>${escapeHtml(c.tank.model)}<\/b> \u00b7 ${escapeHtml(String(c.tank.gal))} US Gal.<\/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>`; }\r\n  \r\n    function step3HTML(){\r\n      const tankImg = TANK_IMAGES[state.model] || \"\";\r\n      if(state.metal){\r\n        const shown = formatMoney(state.priceShown, state.currency);\r\n        const accOpenClass = state.accOpen ? 'open' : '';\r\n\r\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>\r\n        \r\n        <div class=\"gs-grid two\" style=\"margin-bottom: 16px; align-items: stretch; max-width: 100%; flex-shrink: 0; gap: 20px;\">\r\n          \r\n          <div class=\"gs-hero-box\" style=\"margin: 0; height: 100%; min-height: 260px;\">\r\n            <img decoding=\"async\" src=\"${escapeHtml(tankImg)}\" alt=\"${escapeHtml(state.model)} Tank\" style=\"width: 100%; height: 100%; object-fit: contain;\">\r\n          <\/div>\r\n          \r\n          <div style=\"display: flex; flex-direction: column; gap: 16px; height: 100%;\">\r\n            \r\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;\">\r\n              <div class=\"gs-price\" style=\"margin: 0;\">${escapeHtml(shown)}<\/div>\r\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>\r\n            <\/div>\r\n            \r\n            <div class=\"gs-specs-box\" style=\"margin: 0; flex: 1; display: flex; flex-direction: column; justify-content: center;\">\r\n              <div class=\"gs-kv\">\r\n                <b>System<\/b><div>${escapeHtml(state.model)}<\/div>\r\n                <b>Capacity<\/b><div>${escapeHtml(String(state.gal))} US Gal. \/ ${escapeHtml(String(state.liters))} L<\/div>\r\n                <b>Category<\/b><div>${escapeHtml(state.category)}<\/div>\r\n                <b>Volume<\/b><div>${escapeHtml(state.flowLabel || \"\")}<\/div>\r\n                <b>Metal<\/b><div>${escapeHtml(state.metal)}<\/div>\r\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>\r\n              <\/div>\r\n            <\/div>\r\n\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n        <div class=\"gs-acc-block\">\r\n          <button class=\"gs-acc-toggle ${accOpenClass}\" data-action=\"toggleAcc\" type=\"button\">\r\n            Accessories <span>\u25bc<\/span>\r\n          <\/button>\r\n          <div class=\"gs-acc-wrapper ${accOpenClass}\">\r\n            <button class=\"gs-acc-nav-btn gs-acc-prev\" data-action=\"prevSlide\" type=\"button\">\u276e<\/button>\r\n            <div class=\"gs-acc-slider-container\">\r\n              <div class=\"gs-acc-track\">\r\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(\"\")}\r\n              <\/div>\r\n            <\/div>\r\n            <button class=\"gs-acc-nav-btn gs-acc-next\" data-action=\"nextSlide\" type=\"button\">\u276f<\/button>\r\n          <\/div>\r\n        <\/div>\r\n\r\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>`;\r\n      }\r\n      \r\n      const list = METALS[state.category] || [];\r\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>`;\r\n    }\r\n  \r\n    function step4FormHTML(){\r\n      const btnContent = state.isLoading ? '<span class=\"gs-spinner\"><\/span>Sending...' : 'Submit Request';\r\n      const msgClass = state.formMsgType === 'success' ? 'gs-msg-success' : 'gs-msg-error';\r\n      const msgShow  = state.formMsg ? 'gs-msg-show' : '';\r\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><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>`;\r\n    }\r\n  \r\n    async function submitLead(){\r\n      const name = (root.querySelector(\"#fName\") || {}).value || \"\"; const email = (root.querySelector(\"#fEmail\") || {}).value || \"\"; const country = (root.querySelector(\"#fCountry\") || {}).value || \"\"; const territory = (root.querySelector(\"#fTerritory\") || {}).value || \"\"; const honeypot = (root.querySelector(\"#fWebsite\") || {}).value || \"\";\r\n      if(honeypot){ showFormMsg(\"Thank you! A representative will contact you shortly.\", true); return; }\r\n      if(!name.trim()){ showFormMsg(\"Please enter your name.\", false); return; }\r\n      if(!email.trim() || !email.includes(\"@\")){ showFormMsg(\"Please enter a valid email address.\", false); return; }\r\n      if(!country){ showFormMsg(\"Please select your country.\", false); return; }\r\n      if(!territory){ showFormMsg(\"Please select your state\/province\/country.\", false); return; }\r\n      const rep = pickPrimaryRep(country, territory);\r\n      const payload = { action: CONFIG.AJAX_ACTION, name: name.trim(), email: email.trim(), country: country, territory: territory, category: state.category || '', flowLabel: state.flowLabel || '', model: state.model || '', gal: state.gal || '', liters: state.liters || '', metal: state.metal || '', chem: state.chem || '', priceUSD: state.priceUSD || '', priceShown: state.priceShown || '', currency: state.currency || 'USD', ipData: JSON.stringify(ipMeta), repEmail: rep ? rep.email : 'info@greensolv.com', repName: rep ? rep.name : 'Greensolv Team', repPhone: rep ? rep.phone : '' };\r\n      setLoading(true);\r\n      try {\r\n        const fd = new FormData(); for(const [key, value] of Object.entries(payload)){ fd.append(key, String(value)); }\r\n        const res = await fetch(CONFIG.AJAX_URL, { method: 'POST', body: fd, credentials: 'same-origin' });\r\n        const data = await res.json().catch(() => null);\r\n        if(!res.ok || !data || !data.success){ \r\n          const serverMsg = data && data.data && data.data.message ? data.data.message : 'Submission failed. Please try again.'; \r\n          throw new Error(serverMsg); \r\n        }\r\n\r\n        window.dataLayer = window.dataLayer || [];\r\n        window.dataLayer.push({\r\n          event: \"ready_to_strip_submit\",\r\n          form_name: \"1_2_3_ready_to_strip\",\r\n          lead_type: \"quote_request\",\r\n          category: state.category || \"\",\r\n          tank_model: state.model || \"\",\r\n          chemical: state.chem || \"\",\r\n          currency: state.currency || \"\",\r\n          value: Number(state.priceShown) || 0\r\n        });\r\n\r\n        showFormMsg(\"Thank you! A representative will contact you shortly.\", true);\r\n        const nameInput = root.querySelector(\"#fName\"); const emailInput = root.querySelector(\"#fEmail\");\r\n        if(nameInput) nameInput.value = \"\"; if(emailInput) emailInput.value = \"\";\r\n      } catch(err) { console.error(\"123 Strip form error:\", err); showFormMsg(err.message || \"Sorry, something went wrong. Please try again or email info@greensolv.com.\", false); } finally { setLoading(false); }\r\n    }\r\n  \r\n    function render(){\r\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>`;\r\n      bindActions(); bindCountrySelect();\r\n\r\n      var scrollable = root.querySelector('.gs-step.active .gs-step-content');\r\n      if(scrollable){\r\n        scrollable.addEventListener('wheel', function(e){\r\n          var maxScroll = this.scrollHeight - this.clientHeight;\r\n          if(maxScroll <= 0) return;\r\n          this.scrollTop += e.deltaY;\r\n          if(\r\n            (e.deltaY > 0 && this.scrollTop < maxScroll) ||\r\n            (e.deltaY < 0 && this.scrollTop > 0)\r\n          ){\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n          }\r\n        }, { passive: false });\r\n      }\r\n    }\r\n    \r\n    function bindActions(){\r\n      root.querySelectorAll(\"[data-action]\").forEach(el => { \r\n        el.onclick = function(){ \r\n          if(state.isLoading) return; \r\n          const action = el.getAttribute(\"data-action\"), value = el.getAttribute(\"data-value\"); \r\n          if(action === \"cat\") pickCategory(value); \r\n          if(action === \"flow\") pickFlow(value); \r\n          if(action === \"metal\") pickMetal(value); \r\n          if(action === \"back\") back(); \r\n          if(action === \"restart\") resetAll(); \r\n          if(action === \"moreInfo\") setStep(4); \r\n          if(action === \"submitLead\") submitLead(); \r\n          if(action === \"close\") closeUI(); \r\n          \r\n          if(action === \"toggleAcc\"){ state.accOpen = !state.accOpen; render(); }\r\n          if(action === \"prevSlide\"){ scrollAcc(-1); }\r\n          if(action === \"nextSlide\"){ scrollAcc(1); }\r\n        }; \r\n      });\r\n    }\r\n  \r\n    function scrollAcc(dir){\r\n      const track = root.querySelector('.gs-acc-track');\r\n      if(!track) return;\r\n      const card = track.querySelector('.gs-acc-slide');\r\n      const gap = 16;\r\n      const step = card ? (card.getBoundingClientRect().width + gap) : track.clientWidth;\r\n      track.scrollBy({ left: dir * step, behavior: 'smooth' });\r\n    }\r\n  \r\n    async function init(){ await detectByIP(); render(); openUI(); }\r\n  \r\n  })();\r\n  <\/script>\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":{"_angie_page":false,"footnotes":""},"class_list":["post-99","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - 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\/es\/calculadora-de-ahorros\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/calculadora-de-ahorros\/\" \/>\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-06-12T19:16:39+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"42 minutos\" \/>\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-06-12T19:16:39+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\":\"es\",\"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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/greensolv.com\\\/#organization\",\"name\":\"Greensolv\",\"url\":\"https:\\\/\\\/greensolv.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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 - Calculadora de ahorro","description":"Calcule su ahorro potencial con la calculadora de Greensolv y compare los costos operativos de los sistemas industriales de decapado de pintura.","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\/es\/calculadora-de-ahorros\/","og_locale":"es_MX","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\/es\/calculadora-de-ahorros\/","og_site_name":"Greensolv","article_publisher":"https:\/\/www.facebook.com\/greensolv\/","article_modified_time":"2026-06-12T19:16:39+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"42 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/greensolv.com\/savings_calculator\/","url":"https:\/\/greensolv.com\/savings_calculator\/","name":"Greensolv - Calculadora de ahorro","isPartOf":{"@id":"https:\/\/greensolv.com\/#website"},"datePublished":"2025-09-05T19:03:35+00:00","dateModified":"2026-06-12T19:16:39+00:00","description":"Calcule su ahorro potencial con la calculadora de Greensolv y compare los costos operativos de los sistemas industriales de decapado de pintura.","breadcrumb":{"@id":"https:\/\/greensolv.com\/savings_calculator\/#breadcrumb"},"inLanguage":"es","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":"es"},{"@type":"Organization","@id":"https:\/\/greensolv.com\/#organization","name":"Greensolv","url":"https:\/\/greensolv.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@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\/es\/wp-json\/wp\/v2\/pages\/99","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/comments?post=99"}],"version-history":[{"count":150,"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/pages\/99\/revisions"}],"predecessor-version":[{"id":4222,"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/pages\/99\/revisions\/4222"}],"wp:attachment":[{"href":"https:\/\/greensolv.com\/es\/wp-json\/wp\/v2\/media?parent=99"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}