{"id":6998,"date":"2026-03-20T02:43:46","date_gmt":"2026-03-20T06:43:46","guid":{"rendered":"https:\/\/epoxy.express\/epoxy-and-polymer-project-price-calculator\/"},"modified":"2026-06-12T23:44:20","modified_gmt":"2026-06-13T03:44:20","slug":"epoxy-and-polymer-project-price-calculator","status":"publish","type":"page","link":"https:\/\/epoxy.express\/en\/epoxy-and-polymer-project-price-calculator\/","title":{"rendered":"Epoxy and polymer project price calculator!"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"6998\" class=\"elementor elementor-6998 elementor-4900\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-61e525e e-flex e-con-boxed e-con e-parent\" data-id=\"61e525e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e6b2b0b elementor-widget elementor-widget-html\" data-id=\"e6b2b0b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- CDN Libraries -->\r\n<script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\r\n<script src=\"https:\/\/code.jquery.com\/jquery-3.7.1.min.js\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"><\/script>\r\n\r\n<!-- Tailwind Config for WP -->\r\n<script>\r\ntailwind.config={theme:{extend:{colors:{brand:{red:'#CC0000',dark:'#1c1c1c',slate:'#334155',surface:'#F8FAFC',light:'#f4f4f5'}}}},fontFamily:{sans:['Inter','system-ui','sans-serif'],display:['Outfit','sans-serif']}}\r\n<\/script>\r\n\r\n<!-- Custom CSS -->\r\n<style>\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&family=Outfit:wght@600;800&family=Noto+Sans+Arabic:wght@400;700&display=swap');\r\n#epoxy-app-wrapper { font-size: 15px; font-weight: 500; transition: background-color 0.3s ease, color 0.3s ease; }\r\n.chart-container { position: relative; width: 100%; max-width: 100%; margin: 0 auto; height: 320px; max-height: 420px; }\r\n@media (min-width: 768px) { .chart-container { height: 380px; } }\r\n[dir=\"rtl\"] { font-family: 'Noto Sans Arabic', sans-serif; }\r\n.glass-card { background: rgba(255, 255, 255, 0.2); border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 1.25rem; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); }\r\ninput[type=range] { appearance: none; background: #cbd5e1; height: 8px; border-radius: 4px; }\r\ninput[type=range]::-webkit-slider-thumb { appearance: none; width: 22px; height: 22px; background: #CC0000; border-radius: 50%; cursor: pointer; border: 3px solid white; box-shadow: 0 3px 6px rgba(0,0,0,0.4); }\r\n.fade-in { animation: fadeIn 0.4s ease-out forwards; }\r\n@keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }\r\n.receipt-line { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px dashed rgba(0,0,0,0.15); font-size: 14px; }\r\n.tab-content { display: none; }\r\n.tab-content.active { display: block; }\r\n.system-btn.active { border-color: #CC0000; background-color: rgba(204,0,0,0.04); box-shadow: inset 0 2px 4px rgba(0,0,0,0.05); }\r\n.expert-btn.active, .cond-btn.active, .type-btn.active { background-color: #1c1c1c; border-color: #1c1c1c; color: white; }\r\n.hero-card-dark { background: #1c1c1c; background-image: radial-gradient(#333 1px, transparent 1px); background-size: 20px 20px; }\r\n\r\n\/* Print Styles *\/\r\n@media print {\r\n    nav, header, footer, #tab-navigation, .tab-content:not(#tab-calculator), #theme-toggle { display: none !important; }\r\n    body { background: white !important; color: black !important; }\r\n    #epoxy-app-wrapper { width:100%; border: none !important; padding: 0 !important; margin: 0 !important; box-shadow: none !important; }\r\n    main { padding: 0 !important; margin: 0 !important; max-width: 100% !important; }\r\n    .lg\\:col-span-5 { display: none !important; }\r\n    .lg\\:col-span-7 { width: 100% !important; grid-column: span 12 \/ span 12 !important; }\r\n    .glass-card, .hero-card-dark { background: white !important; border: 2px solid #1c1c1c !important; box-shadow: none !important; break-inside: avoid; color: #1c1c1c !important; }\r\n    .hero-card-dark * { color: #1c1c1c !important; text-shadow: none !important; }\r\n    .hero-card-dark .text-brand-red { color: #CC0000 !important; }\r\n    #submission-form, button, #verify-modal { display: none !important; }\r\n    .receipt-line { border-bottom: 1px solid #cbd5e1 !important; }\r\n}\r\n<\/style>\r\n\r\n<!-- Root App Wrapper (Replaces <body>) -->\r\n<div id=\"epoxy-app-wrapper\" class=\"bg-slate-50 text-slate-800 antialiased font-sans rounded-2xl shadow-md border border-slate-300 w-full\" style=\"width:100%;\">\r\n    \r\n    <main class=\"py-10 w-full px-4 md:px-10\">\r\n        \r\n        <!-- Tab Navigation -->\r\n        <header class=\"text-center mb-8 fade-in\">\r\n            <div class=\"flex flex-wrap justify-center gap-2 p-1.5 bg-slate-200\/60 rounded-2xl inline-flex overflow-hidden\" id=\"tab-navigation\">\r\n                <button data-tab=\"calculator\" class=\"tab-btn active px-5 py-3 rounded-xl text-xs font-black uppercase transition-all bg-brand-dark text-white shadow-lg scale-105\" data-i18n=\"tab_calc\">Project Dashboard<\/button>\r\n                <button data-tab=\"strategy\" class=\"tab-btn px-5 py-3 rounded-xl text-xs font-black uppercase transition-all text-slate-600 hover:text-brand-dark hover:bg-slate-100\" data-i18n=\"tab_strat\">Capital Expansion<\/button>\r\n                <button data-tab=\"market\" class=\"tab-btn px-5 py-3 rounded-xl text-xs font-black uppercase transition-all text-slate-600 hover:text-brand-dark hover:bg-slate-100\" data-i18n=\"tab_market\">Market Report<\/button>\r\n                <button data-tab=\"compliance\" class=\"tab-btn px-5 py-3 rounded-xl text-xs font-black uppercase transition-all text-slate-600 hover:text-brand-dark hover:bg-slate-100\" data-i18n=\"tab_comp\">Laws & Standards<\/button>\r\n                <button data-tab=\"faq\" class=\"tab-btn px-5 py-3 rounded-xl text-xs font-black uppercase transition-all text-slate-600 hover:text-brand-dark hover:bg-slate-100\" data-i18n=\"tab_faq\">FAQ & Expert<\/button>\r\n            <\/div>\r\n        <\/header>\r\n\r\n        <section id=\"tab-calculator\" class=\"tab-content active fade-in\">\r\n            <p class=\"text-base mb-8 text-slate-700 font-medium leading-relaxed max-w-4xl mx-auto text-center\" data-i18n=\"intro_calc\">This interactive dashboard models costs, margins, and logistical constraints for polymer coating installations. Adjust the area and parameters to instantly visualize the operational feasibility of an industrial project.<\/p>\r\n            \r\n            <div class=\"grid grid-cols-1 lg:grid-cols-12 gap-10\">\r\n                <div class=\"lg:col-span-5 space-y-6\">\r\n                    <div class=\"glass-card p-8 border-t-4 border-brand-dark\">\r\n                        <h3 class=\"text-xs font-black mb-8 uppercase flex items-center gap-3 text-brand-dark tracking-[0.2em] italic border-b border-slate-300 pb-3\">\r\n                            <span class=\"text-2xl\">\ud83e\uddee<\/span><span data-i18n=\"cfg_title\">Logistics Configurations<\/span>\r\n                        <\/h3>\r\n                        <div class=\"space-y-10\">\r\n                            \r\n                            <!-- PROJECT TYPE & UNITS -->\r\n                            <div>\r\n                                <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 italic\" data-i18n=\"label_proj_type\">Project Type<\/label>\r\n                                <div class=\"flex gap-2 font-black italic mb-4\" id=\"type-buttons\">\r\n                                    <button data-type=\"residential\" class=\"type-btn active flex-1 py-3 rounded-lg text-sm border-2 transition-all bg-brand-dark border-brand-dark text-white shadow-md\" data-i18n=\"type_res\">Residential (-25%)<\/button>\r\n                                    <button data-type=\"commercial\" class=\"type-btn flex-1 py-3 rounded-lg text-sm border-2 border-slate-300 text-slate-700 transition-all hover:bg-slate-200\" data-i18n=\"type_com\">Commercial<\/button>\r\n                                <\/div>\r\n                                \r\n                                <div id=\"units-container\" class=\"flex justify-between items-center bg-slate-100 p-4 rounded-xl border border-slate-300 shadow-inner transition-all duration-300\">\r\n                                    <div class=\"flex-1\">\r\n                                        <p class=\"text-xs font-black text-brand-dark uppercase leading-tight\" data-i18n=\"label_units\">Units (Same building)<\/p>\r\n                                        <p class=\"text-[11px] text-brand-red font-bold mt-1\" data-i18n=\"desc_units\">Extra -5% per 2 extra units<\/p>\r\n                                    <\/div>\r\n                                    <input type=\"number\" id=\"input-units\" value=\"1\" min=\"1\" class=\"w-20 p-2 bg-white rounded-lg text-center text-lg font-black text-brand-dark border border-slate-300 focus:border-brand-red outline-none shadow-sm\" \/>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class=\"pt-6 border-t border-slate-300\">\r\n                                <div class=\"flex justify-between items-center mb-4\">\r\n                                    <label class=\"text-xs font-black text-slate-700 uppercase italic\" data-i18n=\"label_area\">Area (sq ft per unit)<\/label>\r\n                                    <span class=\"text-[11px] font-bold text-brand-red bg-red-50 px-2.5 py-1 rounded-full border border-red-200 shadow-sm\">Max: 500,000<\/span>\r\n                                <\/div>\r\n                                <input type=\"number\" id=\"input-area\" value=\"1000\" max=\"500000\" class=\"w-full p-5 bg-white rounded-xl text-4xl font-black text-brand-dark outline-none border-2 border-slate-300 focus:border-brand-red text-center shadow-inner italic transition-colors duration-300\" \/>\r\n                                <input type=\"range\" id=\"range-area\" min=\"100\" max=\"500000\" step=\"500\" value=\"1000\" class=\"w-full mt-6\" \/>\r\n                            <\/div>\r\n                            \r\n                            <div>\r\n                                <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 italic\" data-i18n=\"label_experts\">Deployed Team (Experts)<\/label>\r\n                                <div class=\"flex gap-2 font-black italic\" id=\"expert-buttons\">\r\n                                    <button data-val=\"2\" class=\"expert-btn active flex-1 py-3 rounded-lg text-sm border-2 transition-all shadow-md\">2<\/button>\r\n                                    <button data-val=\"4\" class=\"expert-btn flex-1 py-3 rounded-lg text-sm border-2 border-slate-300 text-slate-700 transition-all hover:bg-slate-200\">4<\/button>\r\n                                    <button data-val=\"6\" class=\"expert-btn flex-1 py-3 rounded-lg text-sm border-2 border-slate-300 text-slate-700 transition-all hover:bg-slate-200\">6<\/button>\r\n                                    <button data-val=\"8\" class=\"expert-btn flex-1 py-3 rounded-lg text-sm border-2 border-slate-300 text-slate-700 transition-all hover:bg-slate-200\">8<\/button>\r\n                                <\/div>\r\n                            <\/div>\r\n                            \r\n                            <!-- CONDITION AND CRACKS -->\r\n                            <div class=\"pt-6 border-t border-slate-300\">\r\n                                <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 italic\" data-i18n=\"label_condition\">Slab Condition<\/label>\r\n                                <div class=\"flex gap-2 font-black italic mb-6\" id=\"condition-buttons\">\r\n                                    <button data-cond=\"used\" class=\"cond-btn active flex-1 py-3 rounded-lg text-sm border-2 transition-all shadow-md\" data-i18n=\"cond_used\">Used (Existing)<\/button>\r\n                                    <button data-cond=\"new\" class=\"cond-btn flex-1 py-3 rounded-lg text-sm border-2 border-slate-300 text-slate-700 transition-all hover:bg-slate-200\" data-i18n=\"cond_new\">New<\/button>\r\n                                <\/div>\r\n\r\n                                <div id=\"cracks-container\" class=\"space-y-4 transition-all duration-300 bg-slate-100 p-5 rounded-2xl border border-slate-200\">\r\n                                    <label class=\"text-xs font-black text-brand-red uppercase block mb-3 italic flex items-center gap-2\"><span>\ud83e\ude79<\/span> <span data-i18n=\"label_cracks\">Repairs (Cracks & Imperfections)<\/span><\/label>\r\n                                    \r\n                                    <div class=\"flex justify-between items-center bg-white p-4 rounded-xl border border-slate-300 shadow-sm\">\r\n                                        <div class=\"flex-1 pr-4\">\r\n                                            <p class=\"text-[11px] font-black text-brand-dark uppercase leading-tight\" data-i18n=\"crack_small\">Small (&lt; 35\" len, &lt; 2.5\" dep)<\/p>\r\n                                            <p class=\"text-[11px] text-brand-red font-bold mt-1\">$115 \/ unit<\/p>\r\n                                        <\/div>\r\n                                        <input type=\"number\" id=\"crack-small\" value=\"0\" min=\"0\" class=\"w-20 p-3 bg-slate-50 rounded-lg text-center text-lg font-black text-brand-dark border border-slate-300 focus:border-brand-red outline-none\" \/>\r\n                                    <\/div>\r\n\r\n                                    <div class=\"flex justify-between items-center bg-white p-4 rounded-xl border border-slate-300 shadow-sm\">\r\n                                        <div class=\"flex-1 pr-4\">\r\n                                            <p class=\"text-[11px] font-black text-brand-dark uppercase leading-tight\" data-i18n=\"crack_med\">Medium (35-55\" len, 3\" dep)<\/p>\r\n                                            <p class=\"text-[11px] text-brand-red font-bold mt-1\">$175 \/ unit<\/p>\r\n                                        <\/div>\r\n                                        <input type=\"number\" id=\"crack-med\" value=\"0\" min=\"0\" class=\"w-20 p-3 bg-slate-50 rounded-lg text-center text-lg font-black text-brand-dark border border-slate-300 focus:border-brand-red outline-none\" \/>\r\n                                    <\/div>\r\n\r\n                                    <div class=\"flex justify-between items-center bg-white p-4 rounded-xl border border-slate-300 shadow-sm\">\r\n                                        <div class=\"flex-1 pr-4\">\r\n                                            <p class=\"text-[11px] font-black text-brand-dark uppercase leading-tight\" data-i18n=\"crack_large\">Major (&gt; 55\" len, &gt; 3\" dep)<\/p>\r\n                                            <p class=\"text-[11px] text-brand-red font-bold mt-1\">$250 \/ unit<\/p>\r\n                                        <\/div>\r\n                                        <input type=\"number\" id=\"crack-large\" value=\"0\" min=\"0\" class=\"w-20 p-3 bg-slate-50 rounded-lg text-center text-lg font-black text-brand-dark border border-slate-300 focus:border-brand-red outline-none\" \/>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                            \r\n                            <div class=\"pt-6 border-t border-slate-300\">\r\n                                <label class=\"text-xs font-black text-slate-700 uppercase block mb-4 italic flex items-center gap-2\"><span>\ud83e\uddea<\/span> <span data-i18n=\"label_system\">Resin System<\/span><\/label>\r\n                                <div class=\"space-y-3\" id=\"systems-container\"><\/div>\r\n                            <\/div>\r\n                            \r\n                            <div id=\"btn-express\" class=\"p-5 rounded-2xl border-2 border-slate-300 bg-white cursor-pointer transition-all flex items-center justify-between hover:border-brand-red shadow-sm mt-8\">\r\n                                <div class=\"flex items-center gap-4\">\r\n                                    <span class=\"text-3xl\" id=\"icon-express\">\u26a1<\/span>\r\n                                    <span class=\"font-black uppercase text-sm tracking-widest italic text-brand-dark\" data-i18n=\"label_express\">24h Priority Express<\/span>\r\n                                <\/div>\r\n                                <div class=\"w-12 h-6 rounded-full p-1 transition-all bg-slate-300\" id=\"toggle-express-bg\">\r\n                                    <div class=\"w-4 h-4 bg-white rounded-full transition-all shadow-sm\" id=\"toggle-express-dot\"><\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"p-6 bg-brand-dark rounded-2xl text-white italic font-bold border-l-8 border-brand-red shadow-xl\">\r\n                        <p class=\"text-[10px] uppercase text-brand-red mb-2 tracking-widest font-black\" data-i18n=\"cnesst_title\">CNESST Operational Standard (8h\/day)<\/p>\r\n                        <p class=\"text-sm leading-relaxed opacity-95\" data-i18n=\"cnesst_desc\">The timeline calculation strictly respects the 8h\/day limit of technical work per employee to ensure a perfect anchor profile and prevent burnout.<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"lg:col-span-7 space-y-8\">\r\n                    <div class=\"hero-card-dark p-12 rounded-[2.5rem] text-white shadow-2xl relative overflow-hidden group border-2 border-slate-800\">\r\n                        <p class=\"text-slate-300 text-xs font-black uppercase tracking-[0.4em] mb-6 italic text-center\" data-i18n=\"out_gross\">ESTIMATED PROJECT INVESTMENT (GROSS)<\/p>\r\n                        <div class=\"text-6xl md:text-8xl lg:text-[7rem] font-black tracking-tighter italic text-center drop-shadow-2xl leading-none flex flex-col md:flex-row justify-center items-center md:items-baseline gap-3 text-white\">\r\n                            <span id=\"out-total\">0<\/span> <span class=\"text-3xl md:text-4xl font-display uppercase text-brand-red\">CAD $<\/span>\r\n                        <\/div>\r\n                        <div class=\"grid grid-cols-2 gap-6 mt-12\">\r\n                            <div class=\"p-6 bg-white\/10 rounded-3xl backdrop-blur-md border border-white\/10 font-black italic\">\r\n                                <p class=\"text-[10px] uppercase opacity-80 mb-2 text-slate-300 tracking-widest\" data-i18n=\"out_net\">Projected Net Profit<\/p>\r\n                                <p class=\"text-3xl md:text-4xl text-brand-red tracking-tighter drop-shadow-md\" id=\"out-net\">+$0<\/p>\r\n                            <\/div>\r\n                            <div class=\"p-6 bg-white\/10 rounded-3xl backdrop-blur-md border border-white\/10 font-black italic text-center\">\r\n                                <p class=\"text-[10px] uppercase opacity-80 mb-2 text-slate-300 tracking-widest\" data-i18n=\"out_duration\">Project Duration<\/p>\r\n                                <p class=\"text-3xl md:text-4xl tracking-tighter drop-shadow-md\"><span id=\"out-days\">0<\/span> <span class=\"text-xl opacity-80\" data-i18n=\"days_unit\">Day(s)<\/span><\/p>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"glass-card p-10 shadow-xl border-t-8 border-brand-red relative overflow-hidden\">\r\n                        <div class=\"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-8 border-b border-slate-300 pb-5 gap-4\">\r\n                            <h3 class=\"text-2xl font-black uppercase tracking-tighter italic flex items-center gap-3 text-brand-dark\">\r\n                                <span class=\"text-3xl\">\ud83e\uddfe<\/span><span data-i18n=\"receipt_title\">Detailed Strategic Receipt<\/span>\r\n                            <\/h3>\r\n                            <button onclick=\"window.print()\" class=\"flex items-center gap-2 px-5 py-3 bg-white hover:bg-slate-100 rounded-xl text-[11px] font-black uppercase tracking-widest text-brand-dark transition-colors border-2 border-slate-300 shadow-sm w-full sm:w-auto justify-center\">\r\n                                <span class=\"text-lg\">\ud83d\udda8\ufe0f<\/span> <span data-i18n=\"btn_print\">Print \/ Save PDF<\/span>\r\n                            <\/button>\r\n                        <\/div>\r\n                        \r\n                        <div class=\"space-y-6 font-bold italic font-black text-sm\">\r\n                            <div class=\"bg-slate-50 p-6 rounded-2xl border-2 border-slate-200\">\r\n                                <h4 class=\"text-xs uppercase font-black text-brand-dark mb-4 flex items-center gap-3 italic\"><span class=\"text-lg\">\ud83d\udce6<\/span> <span data-i18n=\"rec_mat_title\">Section 1: Materials & Resins<\/span><\/h4>\r\n                                <div class=\"receipt-line text-slate-600\"><span><span data-i18n=\"rec_mat_raw\">Gross Product Cost<\/span><\/span> <span id=\"out-mat-raw\" class=\"text-base\">$0<\/span><\/div>\r\n                                <div class=\"receipt-line text-brand-dark\"><span><span data-i18n=\"rec_mat_margin\">Management Margin (20%)<\/span><\/span> <span id=\"out-mat-margin\" class=\"text-base\">+$0<\/span><\/div>\r\n                                \r\n                                <!-- KITS HIGHLIGHT -->\r\n                                <div class=\"flex justify-between items-center bg-red-50 p-4 rounded-xl border border-red-200 mt-4 shadow-sm\">\r\n                                    <span class=\"text-xs uppercase font-black text-brand-dark flex items-center gap-2\"><span class=\"text-lg\">\ud83e\udea3<\/span> <span data-i18n=\"rec_mat_qty\">Required Product Kits<\/span><\/span>\r\n                                    <span id=\"out-mat-qty\" class=\"text-2xl font-black text-brand-red\">0 Kits<\/span>\r\n                                <\/div>\r\n                                \r\n                                <div class=\"flex justify-between font-black text-xl pt-4 mt-4 border-t-2 border-slate-300 text-brand-dark\"><span data-i18n=\"rec_mat_total\">Total Materials<\/span><span id=\"out-mat-final\">$0<\/span><\/div>\r\n                            <\/div>\r\n                            \r\n                            <div class=\"bg-slate-50 p-6 rounded-2xl border-2 border-slate-200\">\r\n                                <h4 class=\"text-xs uppercase font-black text-brand-dark mb-4 flex items-center gap-3 italic\"><span class=\"text-lg\">\ud83d\udd27<\/span> <span data-i18n=\"rec_lab_title\">Section 2: Labor & Expertise<\/span><\/h4>\r\n                                <div class=\"receipt-line text-slate-600\"><span><span data-i18n=\"rec_lab_raw\">CCQ Base Salary<\/span> (<span id=\"out-hours\">0<\/span>h)<\/span> <span id=\"out-lab-raw\" class=\"text-base\">$0<\/span><\/div>\r\n                                <div class=\"receipt-line text-brand-dark\"><span><span data-i18n=\"rec_lab_margin\">Expertise Markup (25%)<\/span><\/span> <span id=\"out-lab-margin\" class=\"text-base\">+$0<\/span><\/div>\r\n                                <div class=\"flex justify-between font-black text-xl pt-4 mt-4 border-t-2 border-slate-300 text-brand-dark\"><span data-i18n=\"rec_lab_total\">Total Expertise<\/span><span id=\"out-lab-final\">$0<\/span><\/div>\r\n                            <\/div>\r\n\r\n                            <div class=\"bg-slate-100 p-6 rounded-2xl border-2 border-slate-300\" id=\"receipt-repairs-section\">\r\n                                <h4 class=\"text-xs uppercase font-black text-brand-dark mb-4 flex items-center gap-3 italic\"><span class=\"text-lg\">\ud83e\ude79<\/span> <span data-i18n=\"rec_repairs_title\">Section 3: Preparation & Repairs<\/span><\/h4>\r\n                                <div class=\"receipt-line text-brand-red font-black text-base\"><span><span data-i18n=\"rec_repairs_items\">Patching (Cracks\/Imperfections)<\/span><\/span> <span id=\"out-repairs\">$0<\/span><\/div>\r\n                            <\/div>\r\n                            \r\n                            <div class=\"bg-slate-800 p-6 rounded-2xl border-2 border-slate-700 hidden\" id=\"receipt-discount-section\">\r\n                                <h4 class=\"text-xs uppercase font-black text-white mb-3 flex items-center gap-3 italic\"><span class=\"text-lg\">\ud83c\udf81<\/span> <span data-i18n=\"rec_discount_title\">Applicable Discounts<\/span><\/h4>\r\n                                <div class=\"receipt-line text-white border-white\/20 font-black text-lg\"><span><span id=\"out-discount-label\">Residential Discount<\/span><\/span> <span id=\"out-discount-val\" class=\"text-brand-red drop-shadow-md\">-$0<\/span><\/div>\r\n                            <\/div>\r\n\r\n                            <div class=\"bg-brand-dark p-6 rounded-2xl text-white shadow-xl mt-6 border border-slate-700\">\r\n                                <div class=\"receipt-line border-white\/20 text-slate-200\">\r\n                                    <span class=\"flex items-center gap-3\"><span class=\"text-brand-red text-xl\">\u2696\ufe0f<\/span> <span data-i18n=\"rec_comp\" class=\"text-sm\">RBQ & Compliance Fees (7%)<\/span><\/span><span id=\"out-comp\" class=\"text-lg font-black text-white\">$0<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                            \r\n                            <div class=\"pt-8 px-4 space-y-3 border-t-4 border-brand-dark\">\r\n                                <div class=\"flex justify-between text-slate-600 uppercase text-[11px]\"><span data-i18n=\"rec_subtotal\">Net Subtotal before Taxes<\/span> <span id=\"out-sub\" class=\"font-black text-brand-dark text-base\">$0<\/span><\/div>\r\n                                <div class=\"receipt-line text-slate-600\"><span><span data-i18n=\"rec_tps\">GST (5%)<\/span><\/span> <span id=\"out-tps\" class=\"font-black text-brand-dark text-base\">$0<\/span><\/div>\r\n                                <div class=\"receipt-line text-slate-600\"><span><span data-i18n=\"rec_tvq\">QST (9.975%)<\/span><\/span> <span id=\"out-tvq\" class=\"font-black text-brand-dark text-base\">$0<\/span><\/div>\r\n                                <div class=\"flex justify-between text-3xl font-black pt-6 mt-6 border-t-4 border-brand-red uppercase text-brand-dark\">\r\n                                    <span data-i18n=\"rec_grand\">Net to Pay<\/span><span id=\"out-grand\">$0<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"glass-card p-10 space-y-8 mt-8 shadow-xl border border-slate-200\">\r\n                        <div class=\"flex justify-between items-center border-b border-slate-300 pb-5\">\r\n                            <h4 class=\"font-black uppercase tracking-[0.2em] text-xs text-brand-dark italic flex items-center gap-3\"><span class=\"text-xl\">\u23f1\ufe0f<\/span> <span data-i18n=\"timeline_title\">Timeline (8h\/day)<\/span><\/h4>\r\n                            <span class=\"px-4 py-1.5 bg-slate-100 text-brand-dark rounded-full text-[10px] font-black uppercase tracking-widest border border-slate-300\" id=\"timeline-logic\">Logic: 0h \/ (2 Exp x 8h)<\/span>\r\n                        <\/div>\r\n                        <div class=\"grid grid-cols-1 md:grid-cols-2 gap-8 font-bold italic\">\r\n                            <div class=\"space-y-4\">\r\n                                <div class=\"flex items-center gap-4 p-4 bg-slate-50 rounded-2xl border-l-4 border-slate-400 shadow-sm\"><span class=\"w-8 h-8 rounded-full bg-slate-700 text-white flex items-center justify-center text-xs font-black not-italic\">1<\/span><div class=\"flex-1\"><p class=\"text-xs uppercase font-black text-brand-dark\" data-i18n=\"tl_prep_title\">Mechanical Preparation<\/p><p class=\"text-[10px] text-slate-600 leading-none uppercase mt-1\" data-i18n=\"tl_prep_desc\">Diamond grinding CSP 3<\/p><\/div><span class=\"text-sm font-black text-brand-dark\" id=\"time-1\">0h<\/span><\/div>\r\n                                <div class=\"flex items-center gap-4 p-4 bg-slate-50 rounded-2xl border-l-4 border-brand-red shadow-sm\"><span class=\"w-8 h-8 rounded-full bg-brand-red text-white flex items-center justify-center text-xs font-black not-italic\">2<\/span><div class=\"flex-1\"><p class=\"text-xs uppercase font-black text-brand-dark\" data-i18n=\"tl_base_title\">Base Coat & Saturation<\/p><p class=\"text-[10px] text-slate-600 leading-none uppercase mt-1\" data-i18n=\"tl_base_desc\">Moisture Test &lt; 4%<\/p><\/div><span class=\"text-sm font-black text-brand-dark\" id=\"time-2\">0h<\/span><\/div>\r\n                            <\/div>\r\n                            <div class=\"space-y-4\">\r\n                                <div class=\"flex items-center gap-4 p-4 bg-slate-50 rounded-2xl border-l-4 border-slate-800 shadow-sm\"><span class=\"w-8 h-8 rounded-full bg-slate-800 text-white flex items-center justify-center text-xs font-black not-italic\">3<\/span><div class=\"flex-1\"><p class=\"text-xs uppercase font-black text-brand-dark\" data-i18n=\"tl_fin_title\">Polyaspartic Sealant<\/p><p class=\"text-[10px] text-slate-600 leading-none uppercase mt-1\" data-i18n=\"tl_fin_desc\">Fast Cure & UV Resistance<\/p><\/div><span class=\"text-sm font-black text-brand-dark\" id=\"time-3\">0h<\/span><\/div>\r\n                                <div class=\"p-4 bg-brand-dark rounded-2xl text-white shadow-lg border border-slate-700\">\r\n                                    <div class=\"flex justify-between items-center mb-3\"><span class=\"text-[10px] uppercase font-black text-brand-red tracking-widest\" data-i18n=\"tl_total\">Total Project Hours<\/span><span class=\"text-sm font-black text-white\" id=\"time-total\">0 Hours<\/span><\/div>\r\n                                    <div class=\"w-full bg-slate-800 h-2.5 rounded-full overflow-hidden mt-2\"><div class=\"bg-brand-red h-full shadow-[0_0_10px_#CC0000]\" style=\"width: 100%;\"><\/div><\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div> \r\n            <\/div> \r\n            \r\n            <div class=\"glass-card p-10 md:p-14 shadow-2xl border-t-8 border-brand-dark relative overflow-hidden mt-12\" style=\"width:100%;\">\r\n                <h3 class=\"text-3xl font-black mb-10 uppercase tracking-tighter italic flex items-center gap-4 border-b-2 border-slate-200 pb-5 text-brand-dark\">\r\n                    <span class=\"text-4xl\">\u2709\ufe0f<\/span><span data-i18n=\"form_title\">Send my estimate<\/span>\r\n                <\/h3>\r\n                <form id=\"submission-form\" class=\"space-y-8 w-full\">\r\n                    <div class=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\r\n                        <div>\r\n                            <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 tracking-wide\" data-i18n=\"form_fname\">First Name<\/label>\r\n                            <input type=\"text\" id=\"form-fname\" required class=\"w-full p-4 bg-slate-50 rounded-xl text-base font-bold text-brand-dark outline-none border-2 border-slate-200 focus:border-brand-red transition-colors\" \/>\r\n                        <\/div>\r\n                        <div>\r\n                            <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 tracking-wide\" data-i18n=\"form_lname\">Last Name<\/label>\r\n                            <input type=\"text\" id=\"form-lname\" required class=\"w-full p-4 bg-slate-50 rounded-xl text-base font-bold text-brand-dark outline-none border-2 border-slate-200 focus:border-brand-red transition-colors\" \/>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\r\n                        <div>\r\n                            <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 tracking-wide\" data-i18n=\"form_email\">Email Address<\/label>\r\n                            <input type=\"email\" id=\"form-email\" required class=\"w-full p-4 bg-slate-50 rounded-xl text-base font-bold text-brand-dark outline-none border-2 border-slate-200 focus:border-brand-red transition-colors\" \/>\r\n                        <\/div>\r\n                        <div>\r\n                            <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 tracking-wide\" data-i18n=\"form_phone\">Phone<\/label>\r\n                            <input type=\"tel\" id=\"form-phone\" required class=\"w-full p-4 bg-slate-50 rounded-xl text-base font-bold text-brand-dark outline-none border-2 border-slate-200 focus:border-brand-red transition-colors\" \/>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class=\"grid grid-cols-1\">\r\n                        <div>\r\n                            <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 tracking-wide\" data-i18n=\"form_location\">Work Location (City \/ ZIP Code)<\/label>\r\n                            <input type=\"text\" id=\"form-location\" required class=\"w-full p-4 bg-slate-50 rounded-xl text-base font-bold text-brand-dark outline-none border-2 border-slate-200 focus:border-brand-red transition-colors\" \/>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div>\r\n                        <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 tracking-wide\" data-i18n=\"form_info\">General information about your project<\/label>\r\n                        <textarea id=\"form-info\" rows=\"5\" required class=\"w-full p-4 bg-slate-50 rounded-xl text-base font-bold text-brand-dark outline-none border-2 border-slate-200 focus:border-brand-red transition-colors\"><\/textarea>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"grid grid-cols-1 md:grid-cols-2 gap-8 mt-6\">\r\n                        <div>\r\n                            <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 tracking-wide\" data-i18n=\"form_file_example\">Finish example (Optional)<\/label>\r\n                            <input type=\"file\" id=\"form-file-example\" accept=\"image\/*,.pdf\" class=\"w-full p-3 bg-slate-50 rounded-xl text-sm text-brand-dark outline-none border-2 border-slate-200 focus:border-brand-red transition-colors file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-sm file:font-bold file:bg-red-50 file:text-brand-red hover:file:bg-red-100\" \/>\r\n                        <\/div>\r\n                        <div>\r\n                            <label class=\"text-xs font-black text-slate-700 uppercase block mb-3 tracking-wide\" data-i18n=\"form_file_plan\">Floor plan (Optional)<\/label>\r\n                            <input type=\"file\" id=\"form-file-plan\" accept=\"image\/*,.pdf\" class=\"w-full p-3 bg-slate-50 rounded-xl text-sm text-brand-dark outline-none border-2 border-slate-200 focus:border-brand-red transition-colors file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-sm file:font-bold file:bg-red-50 file:text-brand-red hover:file:bg-red-100\" \/>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"pt-8 border-t-2 border-slate-200 mt-8\">\r\n                        <button type=\"submit\" class=\"w-full p-6 bg-brand-red text-white font-black text-xl uppercase tracking-widest rounded-xl hover:bg-red-800 transition-colors flex items-center justify-center gap-4 shadow-xl\">\r\n                            <span class=\"text-2xl\">\u2709\ufe0f<\/span> <span data-i18n=\"form_submit\">Review & Send Estimate<\/span>\r\n                        <\/button>\r\n                    <\/div>\r\n                <\/form>\r\n            <\/div>\r\n\r\n        <\/section> <section id=\"tab-strategy\" class=\"tab-content fade-in mt-10\">\r\n            <p class=\"text-base mb-8 text-slate-700 font-medium leading-relaxed max-w-4xl\" data-i18n=\"intro_strat\">This section analyzes the physical infrastructure required to support growth. It highlights capital investments (heavy tooling) versus the impact of salaries on long-term profitability via interactive visual projections.<\/p>\r\n            <div class=\"space-y-8 font-bold italic font-black\">\r\n                <div class=\"glass-card p-10 border-l-8 border-brand-dark shadow-xl relative overflow-hidden border-slate-200\">\r\n                    <div class=\"grid lg:grid-cols-12 gap-12 items-start\">\r\n                        <div class=\"lg:col-span-7 space-y-8 relative z-10\">\r\n                            <div class=\"inline-flex items-center gap-3 px-6 py-3 bg-slate-100 text-brand-dark rounded-full text-[11px] font-black uppercase tracking-[0.2em] italic border border-slate-300 shadow-sm\"><span class=\"text-lg\">\ud83d\udd27<\/span> <span data-i18n=\"inv_badge\">Resources & Technical Inventory<\/span><\/div>\r\n                            <h2 class=\"text-5xl font-black tracking-tighter uppercase italic leading-none underline decoration-brand-red decoration-8 underline-offset-8 text-brand-dark\" data-i18n=\"inv_title\">Industrial Capacity<\/h2>\r\n                            <p class=\"text-slate-700 text-sm leading-relaxed font-bold italic\" data-i18n=\"inv_desc\">Depreciation is calculated on acquiring certified industrial equipment (Purchase) vs Rental. New machines are amortized over 45 residential 500 sq ft projects.<\/p>\r\n                            <div class=\"overflow-x-auto shadow-md rounded-2xl border border-slate-300\">\r\n                                <table class=\"w-full text-left font-black italic bg-white\">\r\n                                    <thead>\r\n                                        <tr class=\"text-[11px] uppercase text-slate-600 border-b-2 border-slate-300 bg-slate-100\">\r\n                                            <th class=\"py-5 px-5\" data-i18n=\"inv_col_1\">Specialized Equipment<\/th><th class=\"py-5 px-5\" data-i18n=\"inv_col_2\">New Price<\/th><th class=\"py-5 px-5\" data-i18n=\"inv_col_3\">Rental (Day)<\/th><th class=\"py-5 px-5\" data-i18n=\"inv_col_4\">Suppliers<\/th>\r\n                                        <\/tr>\r\n                                    <\/thead>\r\n                                    <tbody class=\"text-sm divide-y divide-slate-200\" id=\"inventory-table\"><\/tbody>\r\n                                <\/table>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <div class=\"lg:col-span-5 p-8 hero-card-dark rounded-[3rem] text-white shadow-2xl flex flex-col justify-center border-2 border-slate-800 relative z-10 w-full h-[450px]\">\r\n                            <h5 class=\"text-xs font-black uppercase tracking-widest text-brand-red mb-6 text-center italic\" data-i18n=\"chart_growth_title\">SCALABILITY CAPACITY VS SALARIES (6 MONTHS)<\/h5>\r\n                            <div class=\"chart-container\"><canvas id=\"growthChart\"><\/canvas><\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <section id=\"tab-market\" class=\"tab-content fade-in font-black italic mt-10\">\r\n            <p class=\"text-base mb-8 text-slate-700 font-sans font-medium leading-relaxed max-w-4xl\" data-i18n=\"intro_market\">A qualitative and quantitative summary of the current market. This section explores economic trends in chemical engineering, maps key competitors, and visually breaks down customer segments in the coating industry.<\/p>\r\n            <div class=\"glass-card p-10 shadow-2xl relative overflow-hidden border-slate-200\">\r\n                <div class=\"flex flex-col lg:flex-row gap-12 items-start\">\r\n                    <div class=\"flex-1 space-y-8\">\r\n                        <div id=\"market-full-study\" class=\"text-base\"><\/div>\r\n                        <section class=\"pt-8 border-t-2 border-slate-200 mt-8\">\r\n                            <h3 class=\"text-2xl font-black text-brand-dark uppercase italic mb-6\" data-i18n=\"players_title\">Top 10 Players & Finance ($M)<\/h3>\r\n                            <div class=\"grid gap-4\" id=\"players-list\"><\/div>\r\n                        <\/section>\r\n                    <\/div>\r\n                    <div class=\"lg:w-1\/3 w-full p-8 bg-slate-50 rounded-[2.5rem] shadow-inner border-2 border-slate-200 self-start sticky top-10\">\r\n                        <p class=\"text-[11px] uppercase font-black text-center text-slate-600 mb-8 tracking-widest italic underline decoration-brand-red decoration-2\" data-i18n=\"chart_market_title\">Montreal Segmentation 2026<\/p>\r\n                        <div class=\"chart-container\"><canvas id=\"marketChart\"><\/canvas><\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <section id=\"tab-compliance\" class=\"tab-content fade-in font-black italic mt-10\">\r\n            <p class=\"text-base mb-8 text-slate-700 font-sans font-medium leading-relaxed max-w-4xl\" data-i18n=\"intro_comp\">Vital documentation detailing regulatory barriers to entry. These boxes synthesize the strict obligations imposed by various government agencies, justifying operational protocols and material choices.<\/p>\r\n            <div class=\"glass-card p-12 space-y-12 shadow-2xl border-b-8 border-brand-dark relative overflow-hidden border-slate-200\">\r\n                <div class=\"flex flex-col md:flex-row items-center gap-10 border-b-2 border-slate-200 pb-12 relative z-10\">\r\n                    <div class=\"p-12 hero-card-dark rounded-full border-8 border-slate-200 flex-shrink-0 shadow-xl\"><span class=\"text-7xl\">\ud83d\udee1\ufe0f<\/span><\/div>\r\n                    <div class=\"space-y-6 flex-1 text-center md:text-left\">\r\n                        <h2 class=\"text-5xl lg:text-6xl font-black tracking-tighter uppercase italic underline decoration-brand-red decoration-8 underline-offset-8 text-brand-dark\" data-i18n=\"comp_title_main\">Legal Framework & Standards<\/h2>\r\n                        <p class=\"text-slate-700 leading-relaxed font-bold italic text-xl max-w-3xl\" data-i18n=\"comp_desc_main\">Exhaustive analysis of restrictions, laws, and mandatory procedures for floor renovation, repair, and replacement in Quebec and Canada.<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n                <div id=\"compliance-list\" class=\"grid md:grid-cols-2 gap-10 relative z-10\"><\/div>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <section id=\"tab-faq\" class=\"tab-content fade-in font-black italic mt-10\">\r\n            <p class=\"text-base mb-8 text-slate-700 font-sans font-medium leading-relaxed max-w-4xl\" data-i18n=\"intro_faq\">Interactive textual resources. The FAQ dispels common technical myths, while the consultation guide structures the approach to qualifying prospects to ensure perfect alignment between client needs and proposed engineering.<\/p>\r\n            <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-12\">\r\n                <div class=\"glass-card p-12 shadow-2xl border-t-8 border-brand-dark\">\r\n                    <h2 class=\"text-3xl font-black tracking-tighter uppercase italic mb-10 text-brand-dark flex items-center gap-4 border-b border-slate-200 pb-4\">\r\n                        <span class=\"text-brand-dark text-4xl\">\u2139\ufe0f<\/span><span data-i18n=\"faq_title\">Frequently Asked Questions<\/span>\r\n                    <\/h2>\r\n                    <div id=\"faq-container\" class=\"space-y-5\"><\/div>\r\n                <\/div>\r\n                <div class=\"glass-card p-12 shadow-2xl border-t-8 border-brand-red\">\r\n                    <h2 class=\"text-3xl font-black tracking-tighter uppercase italic mb-6 text-brand-dark flex items-center gap-4 border-b border-slate-200 pb-4\">\r\n                        <span class=\"text-brand-red text-4xl\">\ud83d\udcac<\/span><span data-i18n=\"consult_title\">Expert Consultation<\/span>\r\n                    <\/h2>\r\n                    <p class=\"text-slate-600 text-sm mb-8 font-medium\" data-i18n=\"consult_desc\">Qualifying questions asked by our experts during the initial evaluation of your project.<\/p>\r\n                    <div id=\"consult-container\" class=\"space-y-5\"><\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <!-- Confirmation Modal -->\r\n        <div id=\"verify-modal\" style=\"z-index: 999999 !important;\" class=\"hidden fixed inset-0 overflow-y-auto bg-brand-dark\/95 backdrop-blur-md opacity-0 transition-opacity duration-300\">\r\n            <div class=\"flex min-h-screen items-center justify-center p-4 py-12\">\r\n                <div class=\"bg-white rounded-3xl w-full max-w-3xl shadow-2xl transform scale-95 transition-transform duration-300 flex flex-col border border-slate-200 my-auto\" id=\"verify-modal-content\">\r\n                    <div class=\"p-6 md:p-8 border-b-2 border-slate-200 flex justify-between items-center sticky top-0 bg-white z-20 rounded-t-3xl\">\r\n                        <h3 class=\"text-2xl font-black text-brand-dark uppercase italic flex items-center gap-3\"><span class=\"text-3xl\">\ud83d\udd0d<\/span> <span data-i18n=\"modal_title\">Verification of your estimate<\/span><\/h3>\r\n                        <button id=\"close-modal\" class=\"text-slate-400 hover:text-brand-red text-4xl leading-none transition-colors\">&times;<\/button>\r\n                    <\/div>\r\n                    <div class=\"p-6 md:p-8 space-y-6 text-base font-medium\" id=\"verify-details\">\r\n                        <!-- Filled by JavaScript -->\r\n                    <\/div>\r\n                    <div class=\"p-6 md:p-8 border-t-2 border-slate-200 bg-slate-50 flex flex-col sm:flex-row gap-4 rounded-b-3xl\">\r\n                        <button id=\"btn-cancel-send\" class=\"flex-1 p-4 bg-white border-2 border-slate-300 text-slate-700 font-black text-lg uppercase tracking-widest rounded-xl hover:bg-slate-100 hover:border-slate-400 transition-colors\" data-i18n=\"btn_modify\">Modify<\/button>\r\n                        <button id=\"btn-confirm-send\" class=\"flex-[2] p-4 bg-brand-red text-white font-black text-lg uppercase tracking-widest rounded-xl hover:bg-red-800 transition-colors flex items-center justify-center gap-3 shadow-lg\">\r\n                            <span class=\"text-xl\">\ud83d\ude80<\/span> <span data-i18n=\"btn_confirm\">Confirm & Send<\/span>\r\n                        <\/button>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/main>\r\n\r\n    <footer class=\"py-16 border-t-2 border-slate-200 text-center font-bold italic bg-white shadow-inner font-black transition-colors duration-300 mt-auto w-full\">\r\n        <div class=\"w-full px-4 space-y-8\">\r\n            <div class=\"flex flex-col items-center gap-8\">\r\n                <span class=\"text-5xl opacity-80\">\ud83c\udfe2<\/span>\r\n                <div class=\"flex flex-wrap justify-center gap-8 text-[11px] uppercase font-black tracking-widest text-slate-600\">\r\n                    <span class=\"flex items-center gap-3\"><span class=\"text-brand-red text-lg\">\u2705<\/span> RBQ Certification 2026-2027<\/span>\r\n                    <span class=\"flex items-center gap-3\"><span class=\"text-brand-red text-lg\">\ud83d\udccd<\/span> Montreal \u2022 Laval \u2022 South Shore<\/span>\r\n                    <span class=\"flex items-center gap-3\"><span class=\"text-brand-red text-lg\">\ud83d\udee1\ufe0f<\/span> $2M Liability Insurance<\/span>\r\n                    <span class=\"flex items-center gap-3\"><span class=\"text-brand-red text-lg\">\u23f1\ufe0f<\/span> Max Cycle 8h \/ Day<\/span>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/footer>\r\n\r\n<\/div> <!-- End Root Wrapper -->\r\n\r\n<!-- Logic JS (Wrapped safely for Elementor\/WordPress) -->\r\n<script>\r\nfunction initEpoxyApp() {\r\n    const MAX_HOURS_PER_DAY = 8;\r\n    const EXPERT_HOURLY_RATE = 75;\r\n    \/\/ Defaulting to English ('en') state for initialization\r\n    const state = { lang: 'en', activeTab: 'calculator', projectType: 'residential', area: 1000, units: 1, experts: 2, system: 'polyurea_flakes', isExpress: false, condition: 'used' };\r\n\r\n    const translations = {\r\n        fr: {\r\n            nav_title: \"\u00c9poxy Express Montr\u00e9al\", main_title: \"Architecture Strat\u00e9gique 2026-2027\", main_subtitle: \"Vision Industrielle Montr\u00e9al : Expertise Technique & Scalabilit\u00e9\",\r\n            intro_calc: \"Ce tableau de bord interactif mod\u00e9lise les co\u00fbts, les marges et les contraintes logistiques pour la mise en place de rev\u00eatements polym\u00e8res. Ajustez la superficie et les param\u00e8tres pour visualiser instantan\u00e9ment la faisabilit\u00e9 op\u00e9rationnelle d'un projet industriel.\",\r\n            intro_strat: \"Cette section analyse l'infrastructure physique requise pour soutenir la croissance. Elle met en \u00e9vidence les investissements en capital (outillage lourd) par rapport \u00e0 l'impact des salaires sur la rentabilit\u00e9 \u00e0 long terme via des projections visuelles interactives.\",\r\n            intro_market: \"Un r\u00e9sum\u00e9 qualitatif et quantitatif du march\u00e9 actuel. Cette section explore les tendances \u00e9conomiques de l'ing\u00e9nierie chimique, cartographie les principaux concurrents et ventile visuellement les segments de client\u00e8le de l'industrie du rev\u00eatement.\",\r\n            intro_comp: \"Une documentation vitale d\u00e9taillant les barri\u00e8res \u00e0 l'entr\u00e9e r\u00e9glementaires. Ces encadr\u00e9s synth\u00e9tisent les obligations strictes impos\u00e9es par diverses agences gouvernementales, justifiant les protocoles op\u00e9rationnels et les choix de mat\u00e9riaux.\",\r\n            intro_faq: \"Ressources interactives textuelles. La FAQ dissipe les mythes techniques courants, tandis que le guide de consultation structure l'approche de qualification des prospects pour assurer un alignement parfait entre le besoin du client et l'ing\u00e9nierie propos\u00e9e.\",\r\n            tab_calc: \"Dashboard Projet\", tab_strat: \"Expansion Capital\", tab_market: \"Rapport March\u00e9\", tab_comp: \"Lois & Normes\", tab_faq: \"FAQ & Expert\", \r\n            cfg_title: \"Configurations Logistiques\", out_gross: \"INVESTISSEMENT PROJET ESTIM\u00c9 (BRUT)\", out_net: \"Rentabilit\u00e9 Nette Projet\u00e9e\", receipt_title: \"Facture D\u00e9taill\u00e9e Strat\u00e9gique\", \r\n            faq_title: \"Foire Aux Questions\", consult_title: \"Consultation d'Expert\", consult_desc: \"Questions qualifiantes pos\u00e9es par nos experts lors de l'\u00e9valuation initiale de votre projet.\", labels: ['R\u00e9sidentiel', 'Commercial', 'Institutionnel', 'Art'],\r\n            label_proj_type: \"Type de projet\", type_res: \"R\u00e9sidentiel (-25%)\", type_com: \"Commercial\",\r\n            label_units: \"Unit\u00e9s (M\u00eame immeuble)\", desc_units: \"-5% extra \/ 2 unit\u00e9s add.\",\r\n            label_area: \"Superficie (pi\u00b2 par unit\u00e9)\", label_experts: \"\u00c9quipe D\u00e9ploy\u00e9e\", label_express: \"Priorit\u00e9 Express 24h\", cnesst_title: \"Norme Op\u00e9rationnelle CNESST (8h\/jour)\", cnesst_desc: \"Le calcul des d\u00e9lais respecte rigoureusement la limite de 8h de travail technique par jour pour assurer un profil d'ancrage parfait et pr\u00e9venir l'\u00e9puisement professionnel.\",\r\n            label_condition: \"\u00c9tat de la dalle\", cond_new: \"Neuve (Nouvelle)\", cond_used: \"Usag\u00e9e (Existante)\", label_cracks: \"R\u00e9paration (Fissures & Imperfections)\", crack_small: \"Petites (< 35\\\" long, < 2.5\\\" prof.)\", crack_med: \"Moyennes (35-55\\\" long, 3\\\" prof.)\", crack_large: \"Majeures (> 55\\\" long, > 3\\\" prof.)\",\r\n            out_duration: \"Dur\u00e9e Chantier\", days_unit: \"Jour(s)\", rec_mat_title: \"Section 1 : Mat\u00e9riaux\", rec_mat_raw: \"Co\u00fbt Brut\", rec_mat_margin: \"Marge (20%)\", rec_mat_qty: \"Kits de produit requis\", rec_mat_total: \"Total Mat\u00e9riaux\", unit_gal: \"Kits\",\r\n            rec_lab_title: \"Section 2 : Main-d'\u0153uvre\", rec_lab_raw: \"Salaire CCQ\", rec_lab_margin: \"Markup Expertise (25%)\", rec_lab_total: \"Total Expertise\", rec_repairs_title: \"Section 3 : R\u00e9parations\", rec_repairs_items: \"Colmatage (Fissures\/Imperfections)\", rec_comp: \"Conformit\u00e9 RBQ (7%)\", rec_discount_title: \"Rabais Applicables\", discount_res_base: \"Rabais R\u00e9sidentiel\", discount_multi: \"Rabais Volume & R\u00e9sidentiel\", rec_subtotal: \"Sous-total Net\", rec_tps: \"TPS (5%)\", rec_tvq: \"TVQ (9.975%)\", rec_grand: \"Net \u00e0 Payer\",\r\n            timeline_title: \"Timeline\", tl_prep_title: \"Pr\u00e9paration\", tl_base_title: \"Base Coat\", tl_fin_title: \"Scellant\", tl_total: \"Volume Projet\", tl_prep_desc: \"Meulage diamant CSP 3\", tl_base_desc: \"Test Humidit\u00e9 < 4%\", tl_fin_desc: \"Cure Rapide & R\u00e9sistance UV\",\r\n            inv_badge: \"Inventaire\", inv_title: \"Capacit\u00e9 Industrielle\", inv_desc: \"L'amortissement est calcul\u00e9 sur l'acquisition d'\u00e9quipement industriel certifi\u00e9 (Purchase) vs Location. Les machines neuves sont amorties sur 45 projets r\u00e9sidentiels de 500 pi\u00b2.\", inv_col_1: \"\u00c9quipement\", inv_col_2: \"Prix Neuf\", inv_col_3: \"Location\", inv_col_4: \"Fournisseurs\", chart_growth_title: \"SCALABILIT\u00c9\",\r\n            players_title: \"Top 10 Joueurs\", chart_market_title: \"Segmentation Montr\u00e9al 2026\", comp_title_main: \"Cadre L\u00e9gal & Normes\", comp_desc_main: \"Analyse exhaustive des restrictions, des lois et des proc\u00e9dures obligatoires pour la r\u00e9fection, la r\u00e9paration et le remplacement de planchers au Qu\u00e9bec et Canada.\",\r\n            form_title: \"Envoyer ma soumission\", form_fname: \"Pr\u00e9nom\", form_lname: \"Nom\", form_email: \"Adresse email\", form_phone: \"T\u00e9l\u00e9phone\", form_location: \"Lieu des travaux (Ville\/Code Postal)\", form_info: \"Informations g\u00e9n\u00e9rales sur votre projet\", form_file_example: \"Exemple de finition (Optionnel)\", form_file_plan: \"Plan des lieux (Optionnel)\", form_submit: \"V\u00e9rifier & Envoyer la soumission\",\r\n            btn_print: \"Imprimer \/ PDF\", modal_title: \"V\u00e9rification de votre soumission\", btn_modify: \"Modifier\", btn_confirm: \"Confirmer & Envoyer\", sect_client: \"D\u00e9tails Client\", sect_project: \"D\u00e9tails du Projet\", sect_estimate: \"Estimation Technique\",\r\n            copy_notice: \"Une copie de cette estimation sera envoy\u00e9e \u00e0 votre adresse email.\",\r\n            market_study_html: `<h2 class=\"text-4xl font-black uppercase italic leading-none border-b-4 border-brand-red pb-3 text-brand-dark\">\u00c9tude de March\u00e9 Montr\u00e9al 2026-2027<\/h2><section class=\"space-y-6 mt-6\"><h3 class=\"text-xl font-black text-brand-dark uppercase italic underline decoration-brand-red decoration-4 underline-offset-4\">\u00c9volution & Contexte \u00c9conomique<\/h3><p class=\"text-base leading-relaxed font-medium text-slate-700\">L'industrie du rev\u00eatement polym\u00e8re \u00e0 Montr\u00e9al conna\u00eet une mutation structurelle. Malgr\u00e9 des co\u00fbts d'emprunt stabilis\u00e9s, le segment de la r\u00e9novation affiche une r\u00e9silience notable. Les propri\u00e9taires cherchent des solutions de resurfa\u00e7age pour prolonger la dur\u00e9e de vie des dalles plut\u00f4t que le remplacement complet.<\/p><h3 class=\"text-xl font-black text-brand-dark uppercase italic mt-8 underline decoration-brand-red decoration-4 underline-offset-4\">Ing\u00e9nierie Chimique<\/h3><div class=\"overflow-x-auto shadow-sm rounded-xl border border-slate-300 mt-4\"><table class=\"w-full text-left bg-white\"><thead class=\"text-xs uppercase text-slate-600 border-b-2 border-slate-300 bg-slate-100\"><tr><th class=\"p-4\">Caract\u00e9ristique<\/th><th class=\"p-4\">\u00c9poxy 100%<\/th><th class=\"p-4 text-brand-red\">Polyaspartique<\/th><th class=\"p-4 text-slate-800\">Poly-Ciment<\/th><\/tr><\/thead><tbody class=\"text-sm divide-y divide-slate-200\"><tr><td class=\"p-4 font-bold text-slate-700\">R\u00e9sistance UV<\/td><td class=\"p-4\">Faible (jaunit)<\/td><td class=\"p-4 font-black text-brand-red\">Excellente<\/td><td class=\"p-4\">Bonne<\/td><\/tr><tr><td class=\"p-4 font-bold text-slate-700\">Cure \/ Reprise<\/td><td class=\"p-4\">24-48h<\/td><td class=\"p-4 font-black text-brand-red\">1-4 heures<\/td><td class=\"p-4\">12h<\/td><\/tr><tr><td class=\"p-4 font-bold text-slate-700\">Choc Thermique<\/td><td class=\"p-4\">Faible<\/td><td class=\"p-4\">Mod\u00e9r\u00e9e<\/td><td class=\"p-4 font-black text-slate-800\">Excellente (120\u00b0C)<\/td><\/tr><\/tbody><\/table><\/div><\/section><section class=\"space-y-6 mt-8\"><h3 class=\"text-xl font-black text-brand-dark uppercase italic underline decoration-brand-red decoration-4 underline-offset-4\">Analyse de Rentabilit\u00e9<\/h3><p class=\"text-base leading-relaxed font-medium text-slate-700\">La marge nette moyenne en construction au Qu\u00e9bec est de 5-10%. Les entreprises d'\u00e9poxy visent 20-35% brut, mais font face \u00e0 d'\u00e9normes frais fixes. Un taux de survie de 5 ans exige une marge op\u00e9rationnelle > 20.5%.<\/p><\/section>`,\r\n            faqs: [\r\n                { q: \"Quelle est la diff\u00e9rence entre l'\u00e9poxy et le polyaspartique ?\", a: \"L'\u00e9poxy est extr\u00eamement dur mais sensible aux UV (jaunissement) et long \u00e0 durcir. Le polyaspartique est flexible, 100% r\u00e9sistant aux UV et permet une remise en service en 24 heures.\" }, \r\n                { q: \"Combien de temps dure l'installation ?\", a: \"Typiquement 1 \u00e0 2 jours pour un garage r\u00e9sidentiel avec du polyaspartique. Les syst\u00e8mes complexes (polyur\u00e9thane-ciment) peuvent prendre de 3 \u00e0 5 jours selon la superficie.\" },\r\n                { q: \"Pourquoi le mordan\u00e7age \u00e0 l'acide est-il d\u00e9conseill\u00e9 ?\", a: \"L'acide ne cr\u00e9e pas de profil d'ancrage ad\u00e9quat (CSP 3 requis) et ins\u00e8re de l'eau et des sels hygroscopiques dans le b\u00e9ton, causant le d\u00e9collement de la r\u00e9sine apr\u00e8s un hiver.\" },\r\n                { q: \"Mon b\u00e9ton est fissur\u00e9, pouvez-vous le r\u00e9parer ?\", a: \"Oui, la r\u00e9paration des fissures \u00e0 l'aide de colmatages \u00e9poxy structuraux fait partie int\u00e9grante de notre pr\u00e9paration m\u00e9canique.\" },\r\n                { q: \"Offrez-vous une garantie ?\", a: \"Oui, nos installations sont couvertes par une garantie contre le d\u00e9collement, s\u00e9curis\u00e9e par notre cautionnement de 20 000$ \u00e0 la RBQ.\" },\r\n                { q: \"Quels sont les avantages des plinthes \u00e0 gorge (cove base) ?\", a: \"Essentielles pour la norme MAPAQ, elles \u00e9liminent les angles droits o\u00f9 les bact\u00e9ries se logent, permettant un nettoyage \u00e0 grande eau parfaitement hygi\u00e9nique.\" },\r\n                { q: \"Le rev\u00eatement est-il glissant l'hiver ?\", a: \"Nous ajoutons syst\u00e9matiquement des agr\u00e9gats (oxyde d'aluminium ou flocons pleins) pour cr\u00e9er une texture antid\u00e9rapante certifi\u00e9e s\u00e9curitaire.\" },\r\n                { q: \"Quelle est la dur\u00e9e de vie d'un plancher \u00e9poxy ?\", a: \"S'il est bien pr\u00e9par\u00e9 (au diamant) et entretenu, un plancher polym\u00e8re industriel peut durer de 15 \u00e0 20 ans.\" },\r\n                { q: \"Comment entretenir mon nouveau plancher ?\", a: \"Un simple nettoyage \u00e0 l'eau chaude avec un savon neutre (pH 7). \u00c9vitez les d\u00e9graissants abrasifs qui ternissent le lustre.\" },\r\n                { q: \"Pourquoi la pr\u00e9paration au diamant est-elle cruciale ?\", a: \"Elle enl\u00e8ve la laitance du b\u00e9ton et ouvre les pores, permettant \u00e0 la base \u00e9poxy de p\u00e9n\u00e9trer et de fusionner chimiquement avec la dalle.\" }\r\n            ],\r\n            consulting: [\r\n                { q: \"Quelle est l'utilisation principale de cet espace ?\", a: \"D\u00e9termine le niveau de r\u00e9sistance \u00e0 l'abrasion et aux chocs requis.\" }, \r\n                { q: \"Quel est l'\u00e2ge et l'\u00e9tat actuel de votre dalle de b\u00e9ton ?\", a: \"Aide \u00e0 \u00e9valuer les besoins en colmatage, en nivellement et la porosit\u00e9 potentielle.\" },\r\n                { q: \"Avez-vous remarqu\u00e9 des signes d'humidit\u00e9 ou d'efflorescence ?\", a: \"Indique la n\u00e9cessit\u00e9 absolue d'un test d'humidit\u00e9 (F2170) et potentiellement d'un pare-vapeur \u00e9poxy.\" },\r\n                { q: \"Le sol sera-t-il expos\u00e9 \u00e0 des produits chimiques ou \u00e0 des chocs thermiques ?\", a: \"Oriente le choix vers un \u00e9poxy 100% solide ou un syst\u00e8me de polyur\u00e9thane-ciment (r\u00e9siste \u00e0 120\u00b0C).\" },\r\n                { q: \"Quel est le type de trafic pr\u00e9vu (pi\u00e9tonnier, chariots \u00e9l\u00e9vateurs) ?\", a: \"Influence l'\u00e9paisseur totale du syst\u00e8me (mils) et la charge de compression.\" },\r\n                { q: \"Quelles sont vos contraintes de temps pour la r\u00e9alisation des travaux ?\", a: \"D\u00e9termine si une r\u00e9sine \u00e0 cure rapide (Polyaspartique) est requise pour minimiser l'arr\u00eat de production.\" },\r\n                { q: \"Avez-vous des exigences r\u00e9glementaires sp\u00e9cifiques (MAPAQ, Sant\u00e9 Canada) ?\", a: \"Oblige l'int\u00e9gration de plinthes \u00e0 gorge sanitaires et de finis non-poreux stricts.\" },\r\n                { q: \"Quel type de finition et de texture antid\u00e9rapante pr\u00e9f\u00e9rez-vous ?\", a: \"Assure l'\u00e9quilibre parfait entre l'esth\u00e9tique et la conformit\u00e9 CNESST de s\u00e9curit\u00e9.\" },\r\n                { q: \"La zone est-elle expos\u00e9e \u00e0 la lumi\u00e8re directe du soleil ?\", a: \"Si oui, un topcoat aliphatique 100% r\u00e9sistant aux UV est obligatoire.\" },\r\n                { q: \"Quel est le budget allou\u00e9 pour cette mise \u00e0 niveau structurelle ?\", a: \"Permet de concevoir la meilleure ing\u00e9nierie de syst\u00e8me respectant vos param\u00e8tres financiers.\" }\r\n            ]\r\n        },\r\n        en: {\r\n            nav_title: \"Epoxy Express Montreal\", main_title: \"Strategic Architecture 2026-2027\", main_subtitle: \"Montreal Industrial Vision: Technical Expertise & Scalability\",\r\n            intro_calc: \"This interactive dashboard models costs, margins, and logistical constraints for polymer coating installations. Adjust the area and parameters to instantly visualize the operational feasibility of an industrial project.\",\r\n            intro_strat: \"This section analyzes the physical infrastructure required to support growth. It highlights capital investments (heavy tooling) versus the impact of salaries on long-term profitability via interactive visual projections.\",\r\n            intro_market: \"A qualitative and quantitative summary of the current market. This section explores economic trends in chemical engineering, maps key competitors, and visually breaks down customer segments in the coating industry.\",\r\n            intro_comp: \"Vital documentation detailing regulatory barriers to entry. These boxes synthesize the strict obligations imposed by various government agencies, justifying operational protocols and material choices.\",\r\n            intro_faq: \"Interactive textual resources. The FAQ dispels common technical myths, while the consultation guide structures the approach to qualifying prospects to ensure perfect alignment between client needs and proposed engineering.\",\r\n            tab_calc: \"Project Dashboard\", tab_strat: \"Capital Expansion\", tab_market: \"Market Report\", tab_comp: \"Laws & Standards\", tab_faq: \"FAQ & Expert\", \r\n            cfg_title: \"Logistics Configurations\", out_gross: \"ESTIMATED PROJECT INVESTMENT (GROSS)\", out_net: \"Projected Net Profit\", receipt_title: \"Detailed Strategic Receipt\", \r\n            faq_title: \"Frequently Asked Questions\", consult_title: \"Expert Consultation\", consult_desc: \"Qualifying questions asked by our experts during the initial evaluation of your project.\", labels: ['Residential', 'Commercial', 'Institutional', 'Art'],\r\n            label_proj_type: \"Project Type\", type_res: \"Residential (-25%)\", type_com: \"Commercial\",\r\n            label_units: \"Units (Same building)\", desc_units: \"Extra -5% per 2 extra units\",\r\n            label_area: \"Area (sq ft per unit)\", label_experts: \"Deployed Team (Experts)\", label_express: \"24h Priority Express\", cnesst_title: \"CNESST Operational Standard (8h\/day)\", cnesst_desc: \"The timeline calculation strictly respects the 8h\/day limit of technical work per employee to ensure a perfect anchor profile and prevent burnout.\",\r\n            label_condition: \"Slab Condition\", cond_new: \"New\", cond_used: \"Used (Existing)\", label_cracks: \"Repairs (Cracks & Imperfections)\", crack_small: \"Small (< 35\\\" len, < 2.5\\\" dep)\", crack_med: \"Medium (35-55\\\" len, 3\\\" dep)\", crack_large: \"Major (> 55\\\" len, > 3\\\" dep)\",\r\n            out_duration: \"Project Duration\", days_unit: \"Day(s)\", rec_mat_title: \"Section 1: Materials & Resins\", rec_mat_raw: \"Gross Product Cost\", rec_mat_margin: \"Management Margin (20%)\", rec_mat_qty: \"Required Product Kits\", rec_mat_total: \"Total Materials\", unit_gal: \"Kits\",\r\n            rec_lab_title: \"Section 2: Labor & Expertise\", rec_lab_raw: \"CCQ Base Salary\", rec_lab_margin: \"Expertise Markup (25%)\", rec_lab_total: \"Total Expertise\", rec_repairs_title: \"Section 3: Preparation & Repairs\", rec_repairs_items: \"Patching (Cracks\/Imperfections)\", rec_comp: \"RBQ & Compliance Fees (7%)\", rec_discount_title: \"Applicable Discounts\", discount_res_base: \"Residential Discount\", discount_multi: \"Volume & Residential Discount\", rec_subtotal: \"Net Subtotal before Taxes\", rec_tps: \"GST (5%)\", rec_tvq: \"QST (9.975%)\", rec_grand: \"Net to Pay\",\r\n            timeline_title: \"Timeline (8h\/day)\", tl_prep_title: \"Mechanical Preparation\", tl_base_title: \"Base Coat & Saturation\", tl_fin_title: \"Polyaspartic Sealant\", tl_total: \"Total Project Hours\", tl_prep_desc: \"Diamond grinding CSP 3\", tl_base_desc: \"Moisture Test < 4%\", tl_fin_desc: \"Fast Cure & UV Resistance\",\r\n            inv_badge: \"Resources & Technical Inventory\", inv_title: \"Industrial Capacity\", inv_desc: \"Depreciation is calculated on acquiring certified industrial equipment (Purchase) vs Rental. New machines are amortized over 45 residential 500 sq ft projects.\", inv_col_1: \"Specialized Equipment\", inv_col_2: \"New Price\", inv_col_3: \"Rental (Day)\", inv_col_4: \"Suppliers\", chart_growth_title: \"SCALABILITY CAPACITY VS SALARIES (6 MONTHS)\",\r\n            players_title: \"Top 10 Players & Finance ($M)\", chart_market_title: \"Montreal Segmentation 2026\", comp_title_main: \"Legal Framework & Standards\", comp_desc_main: \"Exhaustive analysis of restrictions, laws, and mandatory procedures for floor renovation, repair, and replacement in Quebec and Canada.\",\r\n            form_title: \"Send my estimate\", form_fname: \"First Name\", form_lname: \"Last Name\", form_email: \"Email Address\", form_phone: \"Phone\", form_location: \"Work Location (City\/ZIP Code)\", form_info: \"General information about your project\", form_file_example: \"Finish example (Optional)\", form_file_plan: \"Floor plan (Optional)\", form_submit: \"Review & Send Estimate\",\r\n            btn_print: \"Print \/ Save PDF\", modal_title: \"Verification of your estimate\", btn_modify: \"Modify\", btn_confirm: \"Confirm & Send\", sect_client: \"Client Details\", sect_project: \"Project Details\", sect_estimate: \"Technical Estimate\",\r\n            copy_notice: \"A copy of this estimate will be sent to your email address.\",\r\n            market_study_html: `<h2 class=\"text-4xl font-black uppercase italic leading-none border-b-4 border-brand-red pb-3 text-brand-dark\">Montreal Market Analysis 2026-2027<\/h2><section class=\"space-y-6 mt-6\"><h3 class=\"text-xl font-black text-brand-dark uppercase italic underline decoration-brand-red decoration-4 underline-offset-4\">Evolution & Economic Context<\/h3><p class=\"text-base leading-relaxed font-medium text-slate-700\">The polymer coating industry in Montreal is undergoing structural changes. Despite stabilized borrowing costs, the renovation segment shows notable resilience. Owners are seeking resurfacing solutions to extend the lifespan of slabs rather than full replacement.<\/p><h3 class=\"text-xl font-black text-brand-dark uppercase italic mt-8 underline decoration-brand-red decoration-4 underline-offset-4\">Chemical Engineering<\/h3><div class=\"overflow-x-auto shadow-sm rounded-xl border border-slate-300 mt-4\"><table class=\"w-full text-left bg-white\"><thead class=\"text-xs uppercase text-slate-600 border-b-2 border-slate-300 bg-slate-100\"><tr><th class=\"p-4\">Characteristic<\/th><th class=\"p-4\">100% Epoxy<\/th><th class=\"p-4 text-brand-red\">Polyaspartic<\/th><th class=\"p-4 text-slate-800\">Poly-Cement<\/th><\/tr><\/thead><tbody class=\"text-sm divide-y divide-slate-200\"><tr><td class=\"p-4 font-bold text-slate-700\">UV Resistance<\/td><td class=\"p-4\">Low (yellows)<\/td><td class=\"p-4 font-black text-brand-red\">Excellent<\/td><td class=\"p-4\">Good<\/td><\/tr><tr><td class=\"p-4 font-bold text-slate-700\">Cure \/ Return<\/td><td class=\"p-4\">24-48h<\/td><td class=\"p-4 font-black text-brand-red\">1-4 hours<\/td><td class=\"p-4\">12h<\/td><\/tr><tr><td class=\"p-4 font-bold text-slate-700\">Thermal Shock<\/td><td class=\"p-4\">Low<\/td><td class=\"p-4\">Moderate<\/td><td class=\"p-4 font-black text-slate-800\">Excellent (120\u00b0C)<\/td><\/tr><\/tbody><\/table><\/div><\/section><section class=\"space-y-6 mt-8\"><h3 class=\"text-xl font-black text-brand-dark uppercase italic underline decoration-brand-red decoration-4 underline-offset-4\">Profitability Analysis<\/h3><p class=\"text-base leading-relaxed font-medium text-slate-700\">The average net margin in construction in Quebec is 5-10%. Epoxy companies target 20-35% gross, but face huge fixed costs. A 5-year survival rate requires an operating margin > 20.5%.<\/p><\/section>`,\r\n            faqs: [\r\n                { q: \"What is the difference between epoxy and polyaspartic?\", a: \"Epoxy is extremely hard but sensitive to UV (yellowing) and takes longer to cure. Polyaspartic is flexible, 100% UV resistant, and allows return to service in 24 hours.\" },\r\n                { q: \"How long does installation take?\", a: \"Typically 1 to 2 days for a residential garage with polyaspartic. Complex systems (polyurethane-cement) can take 3 to 5 days depending on the area.\" },\r\n                { q: \"Why is acid etching not recommended?\", a: \"Acid does not create an adequate anchor profile (CSP 3 required) and introduces water and hygroscopic salts into the concrete, causing the resin to peel after winter.\" },\r\n                { q: \"My concrete is cracked, can you repair it?\", a: \"Yes, repairing cracks using structural epoxy patching is an integral part of our mechanical preparation.\" },\r\n                { q: \"Do you offer a warranty?\", a: \"Yes, our installations are covered by a warranty against peeling, secured by our $20,000 RBQ bond.\" },\r\n                { q: \"What are the benefits of a cove base?\", a: \"Essential for MAPAQ standards, they eliminate right angles where bacteria harbor, allowing for perfectly hygienic washdowns.\" },\r\n                { q: \"Is the coating slippery in winter?\", a: \"We systematically add aggregates (aluminum oxide or full flakes) to create a certified safe anti-slip texture.\" },\r\n                { q: \"What is the lifespan of an epoxy floor?\", a: \"If properly prepared (diamond grind) and maintained, an industrial polymer floor can last 15 to 20 years.\" },\r\n                { q: \"How do I maintain my new floor?\", a: \"Simply mop with warm water and a neutral soap (pH 7). Avoid abrasive degreasers that dull the gloss.\" },\r\n                { q: \"Why is diamond grinding preparation crucial?\", a: \"It removes concrete laitance and opens the pores, allowing the epoxy base coat to penetrate and chemically fuse with the slab.\" }\r\n            ],\r\n            consulting: [\r\n                { q: \"What is the primary use of this space?\", a: \"Determines the required level of abrasion and impact resistance.\" },\r\n                { q: \"What is the age and current condition of your concrete slab?\", a: \"Helps assess patching and leveling needs, as well as potential porosity.\" },\r\n                { q: \"Have you noticed any signs of moisture or efflorescence?\", a: \"Indicates the absolute need for a moisture test (F2170) and potentially an epoxy vapor barrier.\" },\r\n                { q: \"Will the floor be exposed to chemicals or thermal shocks?\", a: \"Guides the choice between 100% solid epoxy or a polyurethane-cement system (resists 120\u00b0C).\" },\r\n                { q: \"What type of traffic is expected (pedestrian, forklifts)?\", a: \"Influences the total system thickness (mils) and compressive load capacity.\" },\r\n                { q: \"What are your time constraints for completing the work?\", a: \"Determines if a fast-cure resin (Polyaspartic) is required to minimize operational downtime.\" },\r\n                { q: \"Do you have specific regulatory requirements (MAPAQ, CFIA)?\", a: \"Mandates the integration of sanitary cove bases and strict non-porous finishes.\" },\r\n                { q: \"What type of finish and anti-slip texture do you prefer?\", a: \"Ensures the perfect balance between aesthetics and CNESST safety compliance.\" },\r\n                { q: \"Is the area exposed to direct sunlight?\", a: \"If yes, a 100% UV-resistant aliphatic topcoat is mandatory.\" },\r\n                { q: \"What is the allocated budget for this structural upgrade?\", a: \"Allows us to design the best system engineering that meets your financial parameters.\" }\r\n            ]\r\n        },\r\n        ar: {\r\n            nav_title: \"\u0627\u0644\u0647\u0646\u062f\u0633\u0629 \u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u0629\", main_title: \"\u0627\u0644\u0647\u0646\u062f\u0633\u0629 \u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u0629 2026-2027\", main_subtitle: \"\u0631\u0624\u064a\u0629 \u0645\u0648\u0646\u062a\u0631\u064a\u0627\u0644 \u0627\u0644\u0635\u0646\u0627\u0639\u064a\u0629\",\r\n            intro_calc: \"\u062a\u0635\u0645\u0645 \u0644\u0648\u062d\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629 \u0627\u0644\u062a\u0641\u0627\u0639\u0644\u064a\u0629 \u0647\u0630\u0647 \u0627\u0644\u062a\u0643\u0627\u0644\u064a\u0641 \u0648\u0627\u0644\u0647\u0648\u0627\u0645\u0634 \u0648\u0627\u0644\u0642\u064a\u0648\u062f \u0627\u0644\u0644\u0648\u062c\u0633\u062a\u064a\u0629. \u0627\u0636\u0628\u0637 \u0627\u0644\u0645\u0633\u0627\u062d\u0629 \u0648\u0627\u0644\u0645\u0639\u0644\u0645\u0627\u062a \u0644\u062a\u0635\u0648\u0631 \u0627\u0644\u062c\u062f\u0648\u0649 \u0627\u0644\u062a\u0634\u063a\u064a\u0644\u064a\u0629 \u0639\u0644\u0649 \u0627\u0644\u0641\u0648\u0631.\",\r\n            intro_strat: \"\u064a\u062d\u0644\u0644 \u0647\u0630\u0627 \u0627\u0644\u0642\u0633\u0645 \u0627\u0644\u0628\u0646\u064a\u0629 \u0627\u0644\u062a\u062d\u062a\u064a\u0629 \u0627\u0644\u0645\u0627\u062f\u064a\u0629 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 \u0644\u062f\u0639\u0645 \u0627\u0644\u0646\u0645\u0648. \u064a\u0633\u0644\u0637 \u0627\u0644\u0636\u0648\u0621 \u0639\u0644\u0649 \u0627\u0644\u0627\u0633\u062a\u062b\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0631\u0623\u0633\u0645\u0627\u0644\u064a\u0629 \u0645\u0642\u0627\u0628\u0644 \u062a\u0623\u062b\u064a\u0631 \u0627\u0644\u0631\u0648\u0627\u062a\u0628.\",\r\n            intro_market: \"\u0645\u0644\u062e\u0635 \u0646\u0648\u0639\u064a \u0648\u0643\u0645\u064a \u0644\u0644\u0633\u0648\u0642 \u0627\u0644\u062d\u0627\u0644\u064a. \u064a\u0633\u062a\u0643\u0634\u0641 \u0647\u0630\u0627 \u0627\u0644\u0642\u0633\u0645 \u0627\u0644\u0627\u062a\u062c\u0627\u0647\u0627\u062a \u0627\u0644\u0627\u0642\u062a\u0635\u0627\u062f\u064a\u0629 \u0648\u064a\u0631\u0633\u0645 \u062e\u0631\u0627\u0626\u0637 \u0644\u0644\u0645\u0646\u0627\u0641\u0633\u064a\u0646 \u0627\u0644\u0631\u0626\u064a\u0633\u064a\u064a\u0646.\",\r\n            intro_comp: \"\u0648\u062b\u0627\u0626\u0642 \u062d\u064a\u0648\u064a\u0629 \u062a\u0641\u0635\u0644 \u0627\u0644\u062d\u0648\u0627\u062c\u0632 \u0627\u0644\u062a\u0646\u0638\u064a\u0645\u064a\u0629. \u062a\u062c\u0645\u0639 \u0647\u0630\u0647 \u0627\u0644\u0645\u0631\u0628\u0639\u0627\u062a \u0627\u0644\u0627\u0644\u062a\u0632\u0627\u0645\u0627\u062a \u0627\u0644\u0635\u0627\u0631\u0645\u0629 \u0627\u0644\u062a\u064a \u062a\u0641\u0631\u0636\u0647\u0627 \u0627\u0644\u0648\u0627\u0644\u0648\u0643\u0644\u0627\u062a \u0627\u0644\u062d\u0643\u0648\u0645\u064a\u0629.\",\r\n            intro_faq: \"\u0645\u0648\u0627\u0631\u062f \u0646\u0635\u064a\u0629 \u062a\u0641\u0627\u0639\u0644\u064a\u0629. \u062a\u0628\u062f\u062f \u0627\u0644\u0623\u0633\u0626\u0644\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629 \u0627\u0644\u062e\u0631\u0627\u0641\u0627\u062a \u0627\u0644\u062a\u0642\u0646\u064a\u0629\u060c \u0628\u064a\u0646\u0645\u0627 \u064a\u0648\u062c\u0647 \u062f\u0644\u064a\u0644 \u0627\u0644\u0627\u0633\u062a\u0634\u0627\u0631\u0629 \u0627\u0644\u062a\u0623\u0647\u064a\u0644.\",\r\n            tab_calc: \"\u0644\u0648\u062d\u0629 \u062a\u062d\u0643\u0645 \u0627\u0644\u0645\u0634\u0631\u0648\u0639\", tab_strat: \"\u062a\u0648\u0633\u0639 \u0631\u0623\u0633 \u0627\u0644\u0645\u0627\u0644\", tab_market: \"\u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0633\u0648\u0642\", tab_comp: \"\u0627\u0644\u0642\u0648\u0627\u0646\u064a\u0646 \u0648\u0627\u0644\u0645\u0639\u0627\u064a\u064a\u0631\", tab_faq: \"\u0627\u0644\u0623\u0633\u0626\u0644\u0629 \u0648\u0627\u0644\u0627\u0633\u062a\u0634\u0627\u0631\u0627\u062a\", \r\n            cfg_title: \"\u0627\u0644\u062a\u0643\u0648\u064a\u0646\u0627\u062a \u0627\u0644\u0644\u0648\u062c\u0633\u062a\u064a\u0629\", out_gross: \"\u0627\u0644\u0627\u0633\u062a\u062b\u0645\u0627\u0631 \u0627\u0644\u062a\u0642\u062f\u064a\u0631\u064a \u0644\u0644\u0645\u0634\u0631\u0648\u0639\", out_net: \"\u0627\u0644\u0631\u0628\u062d \u0627\u0644\u0635\u0627\u0641\u064a\", receipt_title: \"\u0641\u0627\u062a\u0648\u0631\u0629 \u0645\u0641\u0635\u0644\u0629\", \r\n            faq_title: \"\u0627\u0644\u0623\u0633\u0626\u0644\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629\", consult_title: \"\u0627\u0633\u062a\u0634\u0627\u0631\u0629 \u0627\u0644\u062e\u0628\u0631\u0627\u0621\", consult_desc: \"\u0623\u0633\u0626\u0644\u0629 \u062a\u0623\u0647\u064a\u0644\u064a\u0629 \u064a\u0637\u0631\u062d\u0647\u0627 \u062e\u0628\u0631\u0627\u0624\u0646\u0627 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u062a\u0642\u064a\u064a\u0645 \u0627\u0644\u0623\u0648\u0644\u064a \u0644\u0645\u0634\u0631\u0648\u0639\u0643.\", labels: ['\u0633\u0643\u0646\u064a', '\u062a\u062c\u0627\u0631\u064a', '\u0645\u0624\u0633\u0633\u064a', '\u0641\u0646\u064a'],\r\n            label_proj_type: \"\u0646\u0648\u0639 \u0627\u0644\u0645\u0634\u0631\u0648\u0639\", type_res: \"\u0633\u0643\u0646\u064a (-25\u066a)\", type_com: \"\u062a\u062c\u0627\u0631\u064a\",\r\n            label_units: \"\u0627\u0644\u0648\u062d\u062f\u0627\u062a (\u0646\u0641\u0633 \u0627\u0644\u0645\u0628\u0646\u0649)\", desc_units: \"\u062e\u0635\u0645 \u0625\u0636\u0627\u0641\u064a -5\u066a \u0644\u0643\u0644 \u0648\u062d\u062f\u062a\u064a\u0646\",\r\n            label_area: \"\u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0645\u0634\u0631\u0648\u0639\", label_experts: \"\u0627\u0644\u062e\u0628\u0631\u0627\u0621\", label_express: \"\u0623\u0648\u0644\u0648\u064a\u0629 \u0633\u0631\u064a\u0639\u0629 24 \u0633\u0627\u0639\u0629\", cnesst_title: \"\u0627\u0644\u0645\u0639\u064a\u0627\u0631 \u0627\u0644\u062a\u0634\u063a\u064a\u0644\u064a\", cnesst_desc: \"\u064a\u062d\u062a\u0631\u0645 \u0627\u0644\u062d\u062f \u0627\u0644\u0632\u0645\u0646\u064a \u0627\u0644\u0628\u0627\u0644\u063a 8 \u0633\u0627\u0639\u0627\u062a \u0644\u0645\u0646\u0639 \u0627\u0644\u0625\u0631\u0647\u0627\u0642.\",\r\n            label_condition: \"\u062d\u0627\u0644\u0629 \u0627\u0644\u0644\u0648\u062d\", cond_new: \"\u062c\u062f\u064a\u062f\", cond_used: \"\u0645\u0633\u062a\u062e\u062f\u0645 (\u0645\u0648\u062c\u0648\u062f)\", label_cracks: \"\u0625\u0635\u0644\u0627\u062d (\u0634\u0642\u0648\u0642 \u0648\u0639\u064a\u0648\u0628)\", crack_small: \"\u0635\u063a\u064a\u0631\u0629 (< 35\\\" \u0637\u0648\u0644, < 2.5\\\" \u0639\u0645\u0642)\", crack_med: \"\u0645\u062a\u0648\u0633\u0637\u0629 (35-55\\\" \u0637\u0648\u0644, 3\\\" \u0639\u0645\u0642)\", crack_large: \"\u0643\u0628\u064a\u0631\u0629 (> 55\\\" \u0637\u0648\u0644, > 3\\\" \u0639\u0645\u0642)\",\r\n            out_duration: \"\u0627\u0644\u0645\u062f\u0629\", days_unit: \"\u064a\u0648\u0645\", rec_mat_title: \"\u0627\u0644\u0645\u0648\u0627\u062f\", rec_mat_raw: \"\u0627\u0644\u062a\u0643\u0644\u0641\u0629\", rec_mat_margin: \"\u0647\u0627\u0645\u0634\", rec_mat_qty: \"\u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629\", rec_mat_total: \"\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0645\u0648\u0627\u062f\", unit_gal: \"\u0645\u062c\u0645\u0648\u0639\u0629\",\r\n            rec_lab_title: \"\u0627\u0644\u0639\u0645\u0627\u0644\u0629\", rec_lab_raw: \"\u0627\u0644\u0631\u0627\u062a\u0628\", rec_lab_margin: \"\u0627\u0644\u062e\u0628\u0631\u0629\", rec_lab_total: \"\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0639\u0645\u0627\u0644\u0629\", rec_repairs_title: \"\u0627\u0644\u0642\u0633\u0645 3: \u0625\u0635\u0644\u0627\u062d\u0627\u062a\", rec_repairs_items: \"\u062a\u0631\u0642\u064a\u0639 (\u0634\u0642\u0648\u0642\/\u0639\u064a\u0648\u0628)\", rec_comp: \"\u0631\u0633\u0648\u0645 \u0627\u0644\u0627\u0645\u062a\u062b\u0627\u0644\", rec_discount_title: \"\u0627\u0644\u062e\u0635\u0648\u0645\u0627\u062a\", discount_res_base: \"\u062e\u0635\u0645 \u0633\u0643\u0646\u064a\", discount_multi: \"\u062e\u0635\u0645 \u062d\u062c\u0645\", rec_subtotal: \"\u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a\", rec_tps: \"\u0627\u0644\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0641\u064a\u062f\u0631\u0627\u0644\u064a\u0629\", rec_tvq: \"\u0636\u0631\u064a\u0628\u0629 \u0627\u0644\u0645\u0642\u0627\u0637\u0639\u0629\", rec_grand: \"\u0627\u0644\u0635\u0627\u0641\u064a\",\r\n            timeline_title: \"\u0627\u0644\u062c\u062f\u0648\u0644 \u0627\u0644\u0632\u0645\u0646\u064a\", tl_prep_title: \"\u0627\u0644\u062a\u062d\u0636\u064a\u0631\", tl_base_title: \"\u0627\u0644\u0623\u0633\u0627\u0633\", tl_fin_title: \"\u0627\u0644\u0645\u0627\u0646\u0639\", tl_total: \"\u0625\u062c\u0645\u0627\u0644\u064a \u0627\u0644\u0633\u0627\u0639\u0627\u062a\", tl_prep_desc: \"\u0635\u0642\u0644 \u0645\u0627\u0633\u064a\", tl_base_desc: \"\u0627\u062e\u062a\u0628\u0627\u0631 \u0627\u0644\u0631\u0637\u0648\u0628\u0629\", tl_fin_desc: \"\u0639\u0644\u0627\u062c \u0633\u0631\u064a\u0639\",\r\n            inv_badge: \"\u0627\u0644\u0645\u0648\u0627\u0631\u062f\", inv_title: \"\u0627\u0644\u0642\u062f\u0631\u0629 \u0627\u0644\u0635\u0646\u0627\u0639\u064a\u0629\", inv_desc: \"\u064a\u062a\u0645 \u0627\u0633\u062a\u0647\u0644\u0627\u0643 \u0627\u0644\u0645\u0639\u062f\u0627\u062a \u0639\u0644\u0649 45 \u0645\u0634\u0631\u0648\u0639\u0627\u064b.\", inv_col_1: \"\u0627\u0644\u0645\u0639\u062f\u0627\u062a\", inv_col_2: \"\u0627\u0644\u0633\u0639\u0631\", inv_col_3: \"\u0627\u0644\u0625\u064a\u062c\u0627\u0631\", inv_col_4: \"\u0627\u0644\u0645\u0648\u0631\u062f\u064a\u0646\", chart_growth_title: \"\u0627\u0644\u0642\u062f\u0631\u0629\",\r\n            players_title: \"\u0623\u0641\u0636\u0644 \u0627\u0644\u0644\u0627\u0639\u0628\u064a\u0646\", chart_market_title: \"\u062a\u062c\u0632\u0626\u0629 \u0645\u0648\u0646\u062a\u0631\u064a\u0627\u0644\", comp_title_main: \"\u0627\u0644\u0642\u0648\u0627\u0646\u064a\u0646 \u0648\u0627\u0644\u0645\u0639\u0627\u064a\u064a\u0631\", comp_desc_main: \"\u062a\u062d\u0644\u064a\u0644 \u0627\u0644\u0642\u064a\u0648\u062f \u0648\u0627\u0644\u0642\u0648\u0627\u0646\u064a\u0646.\",\r\n            form_title: \"\u0625\u0631\u0633\u0627\u0644 \u062a\u0642\u062f\u064a\u0631\u064a\", form_fname: \"\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644\", form_lname: \"\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0626\u0644\u0629\", form_email: \"\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\", form_phone: \"\u0627\u0644\u0647\u0627\u062a\u0641\", form_location: \"\u0645\u0643\u0627\u0646 \u0627\u0644\u0639\u0645\u0644\", form_info: \"\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0645\u0634\u0631\u0648\u0639\", form_file_example: \"\u0645\u062b\u0627\u0644 \u0639\u0644\u0649 \u0627\u0644\u062a\u0634\u0637\u064a\u0628 (\u0627\u062e\u062a\u064a\u0627\u0631\u064a)\", form_file_plan: \"\u0645\u062e\u0637\u0637 \u0627\u0644\u0623\u0631\u0636\u064a\u0629 (\u0627\u062e\u062a\u064a\u0627\u0631\u064a)\", form_submit: \"\u0645\u0631\u0627\u062c\u0639\u0629 \u0648\u0625\u0631\u0633\u0627\u0644\",\r\n            btn_print: \"\u0637\u0628\u0627\u0639\u0629 \/ PDF\", modal_title: \"\u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0627\u0644\u062a\u0642\u062f\u064a\u0631\", btn_modify: \"\u062a\u0639\u062f\u064a\u0644\", btn_confirm: \"\u062a\u0623\u0643\u064a\u062f \u0648\u0625\u0631\u0633\u0627\u0644\", sect_client: \"\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0639\u0645\u064a\u0644\", sect_project: \"\u062a\u0641\u0627\u0635\u064a\u0644 \u0627\u0644\u0645\u0634\u0631\u0648\u0639\", sect_estimate: \"\u0627\u0644\u062a\u0642\u062f\u064a\u0631 \u0627\u0644\u0641\u0646\u064a\",\r\n            copy_notice: \"\u0633\u064a\u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u0646\u0633\u062e\u0629 \u0645\u0646 \u0647\u0630\u0627 \u0627\u0644\u062a\u0642\u062f\u064a\u0631 \u0625\u0644\u0649 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064a\u062f\u0643 \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a.\",\r\n            market_study_html: `<h2 class=\"text-4xl font-black uppercase italic leading-none border-b-4 border-brand-red pb-3 text-brand-dark\">\u062a\u062d\u0644\u064a\u0644 \u0633\u0648\u0642 \u0645\u0648\u0646\u062a\u0631\u064a\u0627\u0644 2026<\/h2><p class=\"text-base leading-relaxed font-medium text-slate-700 mt-4\">\u062a\u0634\u0647\u062f \u0635\u0646\u0627\u0639\u0629 \u0627\u0644\u0637\u0644\u0627\u0621 \u0627\u0644\u0628\u0648\u0644\u064a\u0645\u0631 \u0641\u064a \u0645\u0648\u0646\u062a\u0631\u064a\u0627\u0644 \u062a\u063a\u064a\u0631\u0627\u062a \u0647\u064a\u0643\u0644\u064a\u0629...<\/p>`,\r\n            faqs: [\r\n                { q: \"\u0645\u0627 \u0627\u0644\u0641\u0631\u0642 \u0628\u064a\u0646 \u0627\u0644\u0625\u064a\u0628\u0648\u0643\u0633\u064a \u0648\u0627\u0644\u0628\u0648\u0644\u064a \u0623\u0633\u0628\u0627\u0631\u062a\u064a\u0643\u061f\", a: \"\u0627\u0644\u0625\u064a\u0628\u0648\u0643\u0633\u064a \u0635\u0644\u0628 \u0644\u0644\u063a\u0627\u064a\u0629 \u0648\u0644\u0643\u0646\u0647 \u062d\u0633\u0627\u0633 \u0644\u0644\u0623\u0634\u0639\u0629 \u0641\u0648\u0642 \u0627\u0644\u0628\u0646\u0641\u0633\u062c\u064a\u0629 (\u0627\u0644\u0627\u0635\u0641\u0631\u0627\u0631) \u0648\u064a\u0633\u062a\u063a\u0631\u0642 \u0648\u0642\u062a\u064b\u0627 \u0623\u0637\u0648\u0644 \u0644\u0644\u0645\u0639\u0627\u0644\u062c\u0629. \u0627\u0644\u0628\u0648\u0644\u064a \u0623\u0633\u0628\u0627\u0631\u062a\u064a\u0643 \u0645\u0631\u0646 \u0648\u0645\u0642\u0627\u0648\u0645 \u0644\u0644\u0623\u0634\u0639\u0629 \u0641\u0648\u0642 \u0627\u0644\u0628\u0646\u0641\u0633\u062c\u064a\u0629 \u0628\u0646\u0633\u0628\u0629 100\u066a \u0648\u064a\u0633\u0645\u062d \u0628\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u062e\u062f\u0645\u0629 \u062e\u0644\u0627\u0644 24 \u0633\u0627\u0639\u0629.\" },\r\n                { q: \"\u0643\u0645 \u062a\u0633\u062a\u063a\u0631\u0642 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u062b\u0628\u064a\u062a\u061f\", a: \"\u0639\u0627\u062f\u0629 \u0645\u0646 \u064a\u0648\u0645 \u0625\u0644\u0649 \u064a\u0648\u0645\u064a\u0646 \u0644\u0644\u0645\u0631\u0622\u0628 \u0627\u0644\u0633\u0643\u0646\u064a \u0645\u0639 \u0627\u0644\u0628\u0648\u0644\u064a \u0623\u0633\u0628\u0627\u0631\u062a\u064a\u0643. \u0627\u0644\u0623\u0646\u0638\u0645\u0629 \u0627\u0644\u0645\u0639\u0642\u062f\u0629 (\u0623\u0633\u0645\u0646\u062a \u0627\u0644\u0628\u0648\u0644\u064a \u064a\u0648\u0631\u064a\u062b\u0627\u0646) \u0642\u062f \u062a\u0633\u062a\u063a\u0631\u0642 \u0645\u0646 3 \u0625\u0644\u0649 5 \u0623\u064a\u0627\u0645.\" },\r\n                { q: \"\u0644\u0645\u0627\u0630\u0627 \u0644\u0627 \u064a\u064f\u0646\u0635\u062d \u0628\u0627\u0644\u062d\u0641\u0631 \u0627\u0644\u062d\u0645\u0636\u064a\u061f\", a: \"\u0644\u0627 \u064a\u064f\u0646\u0634\u0626 \u0627\u0644\u062d\u0645\u0636 \u0645\u0644\u0641 \u062a\u0639\u0631\u064a\u0641 \u0631\u0628\u0637 \u0645\u0646\u0627\u0633\u0628 (CSP 3 \u0645\u0637\u0644\u0648\u0628) \u0648\u064a\u062f\u062e\u0644 \u0627\u0644\u0645\u0627\u0621 \u0648\u0627\u0644\u0623\u0645\u0644\u0627\u062d \u0641\u064a \u0627\u0644\u062e\u0631\u0633\u0627\u0646\u0629\u060c \u0645\u0645\u0627 \u064a\u0624\u062f\u064a \u0625\u0644\u0649 \u062a\u0642\u0634\u064a\u0631 \u0627\u0644\u0631\u0627\u062a\u0646\u062c \u0628\u0639\u062f \u0627\u0644\u0634\u062a\u0627\u0621.\" },\r\n                { q: \"\u0627\u0644\u062e\u0631\u0633\u0627\u0646\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u064a \u0645\u062a\u0634\u0642\u0642\u0629\u060c \u0647\u0644 \u064a\u0645\u0643\u0646\u0643\u0645 \u0625\u0635\u0644\u0627\u062d\u0647\u0627\u061f\", a: \"\u0646\u0639\u0645\u060c \u0625\u0635\u0644\u0627\u062d \u0627\u0644\u0634\u0642\u0648\u0642 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u0639\u062c\u0648\u0646 \u0627\u0644\u0625\u064a\u0628\u0648\u0643\u0633\u064a \u0627\u0644\u0647\u064a\u0643\u0644\u064a \u062c\u0632\u0621 \u0644\u0627 \u064a\u062a\u062c\u0632\u0623 \u0645\u0646 \u0627\u0644\u062a\u062d\u0636\u064a\u0631 \u0627\u0644\u0645\u064a\u0643\u0627\u0646\u064a\u0643\u064a \u0644\u062f\u064a\u0646\u0627.\" },\r\n                { q: \"\u0647\u0644 \u062a\u0642\u062f\u0645\u0648\u0646 \u0636\u0645\u0627\u0646\u064b\u0627\u061f\", a: \"\u0646\u0639\u0645\u060c \u062a\u0631\u0643\u064a\u0628\u0627\u062a\u0646\u0627 \u0645\u063a\u0637\u0627\u0629 \u0628\u0636\u0645\u0627\u0646 \u0636\u062f \u0627\u0644\u062a\u0642\u0634\u064a\u0631\u060c \u0645\u062f\u0639\u0648\u0645\u0629 \u0628\u0633\u0646\u062f RBQ \u0628\u0642\u064a\u0645\u0629 20,000 \u062f\u0648\u0644\u0627\u0631.\" },\r\n                { q: \"\u0645\u0627 \u0647\u064a \u0641\u0648\u0627\u0626\u062f \u0627\u0644\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0645\u062c\u0648\u0641\u0629 (Cove Base)\u061f\", a: \"\u0636\u0631\u0648\u0631\u064a\u0629 \u0644\u0645\u0639\u0627\u064a\u064a\u0631 MAPAQ\u060c \u062d\u064a\u062b \u062a\u0642\u0636\u064a \u0639\u0644\u0649 \u0627\u0644\u0632\u0648\u0627\u064a\u0627 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u064a \u062a\u062a\u0643\u0627\u062b\u0631 \u0641\u064a\u0647\u0627 \u0627\u0644\u0628\u0643\u062a\u064a\u0631\u064a\u0627\u060c \u0645\u0645\u0627 \u064a\u0633\u0645\u062d \u0628\u063a\u0633\u064a\u0644 \u0635\u062d\u064a \u062a\u0645\u0627\u0645\u064b\u0627.\" },\r\n                { q: \"\u0647\u0644 \u064a\u0643\u0648\u0646 \u0627\u0644\u0637\u0644\u0627\u0621 \u0632\u0644\u0642\u064b\u0627 \u0641\u064a \u0627\u0644\u0634\u062a\u0627\u0621\u061f\", a: \"\u0646\u0636\u064a\u0641 \u062f\u0627\u0626\u0645\u064b\u0627 \u0631\u0643\u0627\u0645\u064b\u0627 (\u0623\u0643\u0633\u064a\u062f \u0627\u0644\u0623\u0644\u0648\u0645\u0646\u064a\u0648\u0645 \u0623\u0648 \u0631\u0642\u0627\u0626\u0642 \u0643\u0627\u0645\u0644\u0629) \u0644\u0625\u0646\u0634\u0627\u0621 \u0646\u0633\u064a\u062c \u0622\u0645\u0646 \u0648\u0645\u0636\u0627\u062f \u0644\u0644\u0627\u0646\u0632\u0644\u0627\u0642.\" },\r\n                { q: \"\u0645\u0627 \u0647\u0648 \u0627\u0644\u0639\u0645\u0631 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0644\u0623\u0631\u0636\u064a\u0629 \u0627\u0644\u0625\u064a\u0628\u0648\u0643\u0633\u064a\u061f\", a: \"\u0625\u0630\u0627 \u062a\u0645 \u062a\u062d\u0636\u064a\u0631\u0647\u0627 \u0628\u0634\u0643\u0644 \u0635\u062d\u064a\u062d (\u0635\u0642\u0644 \u0628\u0627\u0644\u0645\u0627\u0633) \u0648\u0635\u064a\u0627\u0646\u062a\u0647\u0627\u060c \u064a\u0645\u0643\u0646 \u0623\u0646 \u062a\u062f\u0648\u0645 \u0627\u0644\u0623\u0631\u0636\u064a\u0629 \u0627\u0644\u0635\u0646\u0627\u0639\u064a\u0629 \u0645\u0646 15 \u0625\u0644\u0649 20 \u0639\u0627\u0645\u064b\u0627.\" },\r\n                { q: \"\u0643\u064a\u0641 \u0623\u062d\u0627\u0641\u0638 \u0639\u0644\u0649 \u0623\u0631\u0636\u064a\u062a\u064a \u0627\u0644\u062c\u062f\u064a\u062f\u0629\u061f\", a: \"\u0628\u0628\u0633\u0627\u0637\u0629 \u0627\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0645\u0627\u0621 \u0627\u0644\u062f\u0627\u0641\u0626 \u0645\u0639 \u0635\u0627\u0628\u0648\u0646 \u0645\u062d\u0627\u064a\u062f (pH 7). \u062a\u062c\u0646\u0628 \u0645\u0632\u064a\u0644\u0627\u062a \u0627\u0644\u062f\u0647\u0648\u0646 \u0627\u0644\u0643\u0627\u0634\u0637\u0629 \u0627\u0644\u062a\u064a \u062a\u0628\u0647\u062a \u0627\u0644\u0644\u0645\u0639\u0627\u0646.\" },\r\n                { q: \"\u0644\u0645\u0627\u0630\u0627 \u064a\u0639\u062a\u0628\u0631 \u0627\u0644\u062a\u062d\u0636\u064a\u0631 \u0628\u0627\u0644\u0645\u0627\u0633 \u0623\u0645\u0631\u064b\u0627 \u062d\u0627\u0633\u0645\u064b\u0627\u061f\", a: \"\u064a\u0632\u064a\u0644 \u0637\u0628\u0642\u0629 \u0627\u0644\u062e\u0631\u0633\u0627\u0646\u0629 \u0627\u0644\u0636\u0639\u064a\u0641\u0629 \u0648\u064a\u0641\u062a\u062d \u0627\u0644\u0645\u0633\u0627\u0645\u060c \u0645\u0645\u0627 \u064a\u0633\u0645\u062d \u0644\u0637\u0628\u0642\u0629 \u0627\u0644\u0625\u064a\u0628\u0648\u0643\u0633\u064a \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629 \u0628\u0627\u0644\u062a\u063a\u0644\u063a\u0644 \u0648\u0627\u0644\u0627\u0646\u062f\u0645\u0627\u062c \u0643\u064a\u0645\u064a\u0627\u0626\u064a\u064b\u0627 \u0645\u0639 \u0627\u0644\u0644\u0648\u062d.\" }\r\n            ],\r\n            consulting: [\r\n                { q: \"\u0645\u0627 \u0647\u0648 \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0631\u0626\u064a\u0633\u064a \u0644\u0647\u0630\u0647 \u0627\u0644\u0645\u0633\u0627\u062d\u0629\u061f\", a: \"\u064a\u062d\u062f\u062f \u0645\u0633\u062a\u0648\u0649 \u0645\u0642\u0627\u0648\u0645\u0629 \u0627\u0644\u062a\u0622\u0643\u0644 \u0648\u0627\u0644\u062a\u0623\u062b\u064a\u0631 \u0627\u0644\u0645\u0637\u0644\u0648\u0628.\" },\r\n                { q: \"\u0645\u0627 \u0647\u0648 \u0639\u0645\u0631 \u0648\u062d\u0627\u0644\u0629 \u0627\u0644\u0644\u0648\u062d \u0627\u0644\u062e\u0631\u0633\u0627\u0646\u064a \u0627\u0644\u062d\u0627\u0644\u064a\u061f\", a: \"\u064a\u0633\u0627\u0639\u062f \u0641\u064a \u062a\u0642\u064a\u064a\u0645 \u0627\u062d\u062a\u064a\u0627\u062c\u0627\u062a \u0627\u0644\u0625\u0635\u0644\u0627\u062d \u0648\u0627\u0644\u062a\u0633\u0648\u064a\u0629\u060c \u0628\u0627\u0644\u0625\u0636\u0627\u0641\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0645\u064a\u0629 \u0627\u0644\u0645\u062d\u062a\u0645\u0644\u0629.\" },\r\n                { q: \"\u0647\u0644 \u0644\u0627\u062d\u0638\u062a \u0623\u064a \u0639\u0644\u0627\u0645\u0627\u062a \u0644\u0644\u0631\u0637\u0648\u0628\u0629 \u0623\u0648 \u0627\u0644\u062a\u0632\u0647\u064a\u0631\u061f\", a: \"\u064a\u0634\u064a\u0631 \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u062c\u0629 \u0627\u0644\u0645\u0627\u0633\u0629 \u0644\u0627\u062e\u062a\u0628\u0627\u0631 \u0627\u0644\u0631\u0637\u0648\u0628\u0629 (F2170) \u0648\u0631\u0628\u0645\u0627 \u062d\u0627\u062c\u0632 \u0628\u062e\u0627\u0631 \u0625\u064a\u0628\u0648\u0643\u0633\u064a.\" },\r\n                { q: \"\u0647\u0644 \u0633\u062a\u062a\u0639\u0631\u0636 \u0627\u0644\u0623\u0631\u0636\u064a\u0629 \u0644\u0644\u0645\u0648\u0627\u062f \u0627\u0644\u0643\u064a\u0645\u064a\u0627\u0626\u064a\u0629 \u0623\u0648 \u0627\u0644\u0635\u062f\u0645\u0627\u062a \u0627\u0644\u062d\u0631\u0627\u0631\u064a\u0629\u061f\", a: \"\u064a\u0648\u062c\u0647 \u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631 \u0628\u064a\u0646 \u0625\u064a\u0628\u0648\u0643\u0633\u064a \u0635\u0644\u0628 100\u066a \u0623\u0648 \u0646\u0638\u0627\u0645 \u0623\u0633\u0645\u0646\u062a \u0628\u0648\u0644\u064a \u064a\u0648\u0631\u064a\u062b\u0627\u0646 (\u064a\u0642\u0627\u0648\u0645 120 \u062f\u0631\u062c\u0629 \u0645\u0626\u0648\u064a\u0629).\" },\r\n                { q: \"\u0645\u0627 \u0646\u0648\u0639 \u062d\u0631\u0643\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u0645\u062a\u0648\u0642\u0639\u0629 (\u0645\u0634\u0627\u0629\u060c \u0631\u0627\u0641\u0639\u0627\u062a \u0634\u0648\u0643\u064a\u0629)\u061f\", a: \"\u064a\u0624\u062b\u0631 \u0639\u0644\u0649 \u0627\u0644\u0633\u0645\u0643 \u0627\u0644\u0643\u0644\u064a \u0644\u0644\u0646\u0638\u0627\u0645 \u0648\u0642\u062f\u0631\u0629 \u062a\u062d\u0645\u0644 \u0627\u0644\u0636\u063a\u0637.\" },\r\n                { q: \"\u0645\u0627 \u0647\u064a \u0642\u064a\u0648\u062f \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u0645\u062a\u0627\u062d\u0629 \u0644\u0625\u0646\u062c\u0627\u0632 \u0627\u0644\u0639\u0645\u0644\u061f\", a: \"\u064a\u062d\u062f\u062f \u0645\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0631\u0627\u062a\u0646\u062c \u0633\u0631\u064a\u0639 \u0627\u0644\u0645\u0639\u0627\u0644\u062c\u0629 (\u0628\u0648\u0644\u064a \u0623\u0633\u0628\u0627\u0631\u062a\u064a\u0643) \u0645\u0637\u0644\u0648\u0628\u064b\u0627 \u0644\u062a\u0642\u0644\u064a\u0644 \u0648\u0642\u062a \u0627\u0644\u062a\u0648\u0642\u0641 \u0639\u0646 \u0627\u0644\u0639\u0645\u0644.\" },\r\n                { q: \"\u0647\u0644 \u0644\u062f\u064a\u0643 \u0645\u062a\u0637\u0644\u0628\u0627\u062a \u062a\u0646\u0638\u064a\u0645\u064a\u0629 \u0645\u062d\u062f\u062f\u0629 (MAPAQ)\u061f\", a: \"\u064a\u0641\u0631\u0636 \u062f\u0645\u062c \u0627\u0644\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0645\u062c\u0648\u0641\u0629 \u0627\u0644\u0635\u062d\u064a\u0629 \u0648\u062a\u0634\u0637\u064a\u0628\u0627\u062a \u063a\u064a\u0631 \u0645\u0633\u0627\u0645\u064a\u0629 \u0635\u0627\u0631\u0645\u0629.\" },\r\n                { q: \"\u0645\u0627 \u0646\u0648\u0639 \u0627\u0644\u062a\u0634\u0637\u064a\u0628 \u0648\u0627\u0644\u0646\u0633\u064a\u062c \u0627\u0644\u0645\u0636\u0627\u062f \u0644\u0644\u0627\u0646\u0632\u0644\u0627\u0642 \u0627\u0644\u0630\u064a \u062a\u0641\u0636\u0644\u0647\u061f\", a: \"\u064a\u0636\u0645\u0646 \u0627\u0644\u062a\u0648\u0627\u0632\u0646 \u0627\u0644\u0645\u062b\u0627\u0644\u064a \u0628\u064a\u0646 \u0627\u0644\u062c\u0645\u0627\u0644\u064a\u0627\u062a \u0648\u0627\u0644\u0627\u0645\u062a\u062b\u0627\u0644 \u0644\u0633\u0644\u0627\u0645\u0629 CNESST.\" },\r\n                { q: \"\u0647\u0644 \u0627\u0644\u0645\u0646\u0637\u0642\u0629 \u0645\u0639\u0631\u0636\u0629 \u0644\u0623\u0634\u0639\u0629 \u0627\u0644\u0634\u0645\u0633 \u0627\u0644\u0645\u0628\u0627\u0634\u0631\u0629\u061f\", a: \"\u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0627\u0644\u0625\u062c\u0627\u0628\u0629 \u0646\u0639\u0645\u060c \u0641\u0625\u0646 \u0627\u0644\u0637\u0628\u0642\u0629 \u0627\u0644\u0639\u0644\u0648\u064a\u0629 \u0627\u0644\u0645\u0642\u0627\u0648\u0645\u0629 \u0644\u0644\u0623\u0634\u0639\u0629 \u0641\u0648\u0642 \u0627\u0644\u0628\u0646\u0641\u0633\u062c\u064a\u0629 \u0628\u0646\u0633\u0628\u0629 100\u066a \u0625\u0644\u0632\u0627\u0645\u064a\u0629.\" },\r\n                { q: \"\u0645\u0627 \u0647\u064a \u0627\u0644\u0645\u064a\u0632\u0627\u0646\u064a\u0629 \u0627\u0644\u0645\u062e\u0635\u0635\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0647\u064a\u0643\u0644\u064a\u061f\", a: \"\u064a\u0633\u0645\u062d \u0644\u0646\u0627 \u0628\u062a\u0635\u0645\u064a\u0645 \u0623\u0641\u0636\u0644 \u0647\u0646\u062f\u0633\u0629 \u0646\u0638\u0627\u0645 \u062a\u0644\u0628\u064a \u0645\u0639\u0627\u064a\u064a\u0631\u0643 \u0627\u0644\u0645\u0627\u0644\u064a\u0629.\" }\r\n            ]\r\n        }\r\n    };\r\n\r\n    const systemsData = {\r\n        polyurea_flakes: { name: \"Polyurea \/ Flakes\", min: 7.5, mat: 0.45, prepTime: 0.015, applyTime: 0.02, coverage: 150, icon: '\ud83e\uddf1', desc: \"Flexible base + 100% saturation vinyl flakes + UV Polyaspartic Topcoat.\", details: \"Max contracts 400-600 sq ft. Diamond CSP 3 prep.\" },\r\n        epoxy_100: { name: \"100% Solid Epoxy\", min: 6.5, mat: 0.35, prepTime: 0.012, applyTime: 0.015, coverage: 125, icon: '\ud83c\udfed', desc: \"Heavy industrial standard. Zero solvent, extreme chemical resistance.\", details: \"Diamond grinding mandatory. Monolithic mirror finish.\" },\r\n        epoxy_metallique: { name: \"Metallic Epoxy\", min: 10.5, mat: 0.52, prepTime: 0.018, applyTime: 0.035, coverage: 100, icon: '\ud83c\udfa8', desc: \"High gloss monolithic art. Mica pigments for marbled depth effects.\", details: \"Complex manual technique. Includes opaque base.\" },\r\n        inst_health: { name: \"Health \/ MAPAQ\", min: 14, mat: 0.60, prepTime: 0.025, applyTime: 0.03, coverage: 120, icon: '\ud83c\udfe5', desc: \"Biosecure sterile surfaces. Sanitary cove base integration.\", details: \"Antimicrobial additives. CHUM\/MAPAQ compliant.\" },\r\n        art_custom: { name: \"HD Abstract Design\", min: 22, mat: 0.65, prepTime: 0.03, applyTime: 0.05, coverage: 90, icon: '\ud83d\udc41\ufe0f', desc: \"Encapsulated custom art. HD printing or logos under crystal resin.\", details: \"Precision polymer leveling. Visual lens effect.\" },\r\n        poly_ciment: { name: \"Polyurethane-Cement\", min: 16, mat: 0.60, prepTime: 0.03, applyTime: 0.04, coverage: 60, icon: '\ud83c\udf21\ufe0f', desc: \"Extreme thermal mortar. Resists from -40\u00b0C to +120\u00b0C.\", details: \"Steel trowel application. Structural anchoring grooves.\" }\r\n    };\r\n\r\n    const inventoryData = [\r\n        { item: \"Husqvarna PG Diamond Grinder\", price: \"$18,000\", rental: \"$350 \/ day\", supplier: \"CDMQ \/ Simplex\" },\r\n        { item: \"Ermator HEPA Industrial Vacuum\", price: \"$6,500\", rental: \"$120 \/ day\", supplier: \"CDMQ Montreal\" },\r\n        { item: \"Collomix High Velocity Mixer\", price: \"$1,200\", rental: \"$40 \/ day\", supplier: \"Sika Canada \/ CDMQ\" },\r\n        { item: \"Diamond Segments (Consumables)\", price: \"$450 \/ set\", rental: \"N\/A\", supplier: \"Can-Lak \/ CDMQ\" },\r\n        { item: \"Safety Equipment & Respirators\", price: \"$800 \/ expert\", rental: \"N\/A\", supplier: \"Grainger \/ SPI\" }\r\n    ];\r\n\r\n    const topPlayers = [\r\n        { n: \"B\u00e9ton Surface\", s: \"$12M - $15M\", type: { fr: \"R\u00e9seau Franchises\", en: \"Franchise Network\", ar: \"\u0634\u0628\u0643\u0629 \u0627\u0645\u062a\u064a\u0627\u0632\" }, emp: \"60+\", teams: \"15+\", fund: { fr: \"Mod\u00e8le National\", en: \"National Model\", ar: \"\u0646\u0645\u0648\u0630\u062c \u0648\u0637\u0646\u064a\" } },\r\n        { n: \"Stonhard Canada\", s: \"$15M+\", type: { fr: \"Multinationale\", en: \"Multinational\", ar: \"\u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u062c\u0646\u0633\u064a\u0627\u062a\" }, emp: \"100-200\", teams: \"40+\", fund: { fr: \"Corporate Global\", en: \"Global Corporate\", ar: \"\u0634\u0631\u0643\u0629 \u0639\u0627\u0644\u0645\u064a\u0629\" } },\r\n        { n: \"Surfacex\", s: \"$6M - $10M\", type: { fr: \"Franchise Hist.\", en: \"Historic Franchise\", ar: \"\u0627\u0645\u062a\u064a\u0627\u0632 \u062a\u0627\u0631\u064a\u062e\u064a\" }, emp: \"40-60\", teams: \"12+\", fund: { fr: \"Investissement Priv\u00e9\", en: \"Private Invest.\", ar: \"\u0627\u0633\u062a\u062b\u0645\u0627\u0631 \u062e\u0627\u0635\" } },\r\n        { n: \"PolySurface\", s: \"$5M - $9M\", type: { fr: \"Ind\u00e9pendant\", en: \"Independent\", ar: \"\u0645\u0633\u062a\u0642\u0644\" }, emp: \"30-50\", teams: \"10+\", fund: { fr: \"Auto-financ\u00e9\", en: \"Self-funded\", ar: \"\u062a\u0645\u0648\u064a\u0644 \u0630\u0627\u062a\u064a\" } },\r\n        { n: \"Sika Canada\", s: \"$100M+\", type: { fr: \"Manufacturier\", en: \"Manufacturer\", ar: \"\u0627\u0644\u0635\u0627\u0646\u0639\" }, emp: \"N\/A\", teams: \"N\/A\", fund: { fr: \"Sika AG (Suisse)\", en: \"Sika AG (Swiss)\", ar: \"\u0633\u064a\u0643\u0627 \u0627\u0644\u0633\u0648\u064a\u0633\u0631\u064a\u0629\" } },\r\n        { n: \"B-Protek\", s: \"$5M - $7M\", type: { fr: \"Franchise Tech\", en: \"Tech Franchise\", ar: \"\u0627\u0645\u062a\u064a\u0627\u0632 \u062a\u0642\u0646\u064a\" }, emp: \"20-35\", teams: \"8+\", fund: { fr: \"Capital Priv\u00e9\", en: \"Private Capital\", ar: \"\u0631\u0623\u0633 \u0645\u0627\u0644 \u062e\u0627\u0635\" } },\r\n        { n: \"Magic Epoxy\", s: \"$2.5M - $4.5M\", type: { fr: \"PME Sp\u00e9cialis\u00e9e\", en: \"Specialized SME\", ar: \"\u0634\u0631\u0643\u0629 \u0645\u062a\u062e\u0635\u0635\u0629\" }, emp: \"10-20\", teams: \"5+\", fund: { fr: \"Ind\u00e9pendant\", en: \"Independent\", ar: \"\u0645\u0633\u062a\u0642\u0644\" } },\r\n        { n: \"Pro Specs Polym\u00e8res\", s: \"$2.0M - $3.5M\", type: { fr: \"PME Industrielle\", en: \"Industrial SME\", ar: \"\u0634\u0631\u0643\u0629 \u0635\u0646\u0627\u0639\u064a\u0629\" }, emp: \"12-25\", teams: \"6+\", fund: { fr: \"Partenaires B2B\", en: \"B2B Partners\", ar: \"\u0634\u0631\u0643\u0627\u0621 B2B\" } },\r\n        { n: \"Epoxy Factory\", s: \"$1.5M - $2.5M\", type: { fr: \"Propri\u00e9taire-Op\", en: \"Owner-Op\", ar: \"\u0645\u0627\u0644\u0643 \u0645\u0634\u063a\u0644\" }, emp: \"5-12\", teams: \"3+\", fund: { fr: \"Familial\", en: \"Family\", ar: \"\u0639\u0627\u0626\u0644\u064a\" } },\r\n        { n: \"Epoxy Montr\u00e9al\", s: \"~$1M\", type: { fr: \"Artisan Local\", en: \"Local Artisan\", ar: \"\u062d\u0631\u0641\u064a \u0645\u062d\u0644\u064a\" }, emp: \"5-10\", teams: \"2\", fund: { fr: \"Auto-financ\u00e9\", en: \"Self-funded\", ar: \"\u062a\u0645\u0648\u064a\u0644 \u0630\u0627\u062a\u064a\" } }\r\n    ];\r\n\r\n    const complianceData = [\r\n        { gov: \"Health Canada\", icon: \"\ud83c\udfe5\", color: \"text-red-500\", bg: \"bg-red-50\", border: \"border-red-200\", title: { fr: \"R\u00e9glementation COV & Air\", en: \"VOC Regulations\", ar: \"\u0644\u0648\u0627\u0626\u062d \u062c\u0648\u062f\u0629 \u0627\u0644\u0647\u0648\u0627\u0621\" }, desc: { fr: \"Loi f\u00e9d\u00e9rale limitant les compos\u00e9s organiques volatils (COV).\", en: \"Federal law limiting VOCs.\", ar: \"\u0642\u0627\u0646\u0648\u0646 \u0627\u062a\u062d\u0627\u062f\u064a \u064a\u062d\u062f \u0645\u0646 \u0627\u0644\u0645\u0631\u0643\u0628\u0627\u062a \u0627\u0644\u0639\u0636\u0648\u064a\u0629 \u0627\u0644\u0645\u062a\u0637\u0627\u064a\u0631\u0629.\" }, proc: { fr: \"Utilisation exclusive de r\u00e9sines 100% solides.\", en: \"Exclusive use of 100% solid resins.\", ar: \"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062d\u0635\u0631\u064a \u0644\u0631\u0627\u062a\u0646\u062c\u0627\u062a \u0635\u0644\u0628\u0629 \u0628\u0646\u0633\u0628\u0629 100\u066a.\" } },\r\n        { gov: \"CNESST\", icon: \"\ud83d\udc77\", color: \"text-brand-dark\", bg: \"bg-slate-100\", border: \"border-slate-300\", title: { fr: \"Poussi\u00e8re de Silice & RSST\", en: \"Silica Dust & Safety\", ar: \"\u063a\u0628\u0627\u0631 \u0627\u0644\u0633\u064a\u0644\u064a\u0643\u0627\" }, desc: { fr: \"Le meulage lib\u00e8re de la silice cristalline. Limite de 8h\/jour.\", en: \"Concrete grinding releases silica. Strict limits on work hours.\", ar: \"\u0637\u062d\u0646 \u0627\u0644\u062e\u0631\u0633\u0627\u0646\u0629 \u064a\u0637\u0644\u0642 \u0627\u0644\u0633\u064a\u0644\u064a\u0643\u0627.\" }, proc: { fr: \"Meuleuses coupl\u00e9es \u00e0 aspirateurs HEPA.\", en: \"Grinders coupled with HEPA vacuums.\", ar: \"\u0637\u0648\u0627\u062d\u064a\u0646 \u0645\u0642\u062a\u0631\u0646\u0629 \u0628\u0645\u0643\u0627\u0646\u0633 HEPA.\" } },\r\n        { gov: \"MAPAQ\", icon: \"\ud83c\udf7d\ufe0f\", color: \"text-brand-dark\", bg: \"bg-slate-100\", border: \"border-slate-300\", title: { fr: \"Salubrit\u00e9 Alimentaire\", en: \"Food Safety\", ar: \"\u0633\u0644\u0627\u0645\u0629 \u0627\u0644\u0623\u063a\u0630\u064a\u0629\" }, desc: { fr: \"Les planchers doivent \u00eatre lisses, non absorbants et lavables.\", en: \"Floors must be smooth and non-absorbent.\", ar: \"\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0627\u0644\u0623\u0631\u0636\u064a\u0627\u062a \u0646\u0627\u0639\u0645\u0629 \u0648\u063a\u064a\u0631 \u0645\u0627\u0635\u0629.\" }, proc: { fr: \"Plinthe \u00e0 gorge (Cove Base) de 4 pouces requise.\", en: \"4-inch monolithic cove base required.\", ar: \"\u0625\u0646\u0634\u0627\u0621 \u0642\u0627\u0639\u062f\u0629 \u0645\u062c\u0648\u0641\u0629 \u0645\u062a\u062c\u0627\u0646\u0633\u0629.\" } },\r\n        { gov: \"RBQ\", icon: \"\ud83d\udee1\ufe0f\", color: \"text-brand-dark\", bg: \"bg-slate-100\", border: \"border-slate-300\", title: { fr: \"Licence 9.0 & Humidit\u00e9\", en: \"License 9.0 & Moisture\", ar: \"\u0627\u0644\u062a\u0631\u062e\u064a\u0635 9.0\" }, desc: { fr: \"Licence 9.0 requise. Mordan\u00e7age acide proscrit.\", en: \"License 9.0 required. Acid etching prohibited.\", ar: \"\u0631\u062e\u0635\u0629 \u0645\u0637\u0644\u0648\u0628\u0629. \u0627\u0644\u062d\u0641\u0631 \u0627\u0644\u062d\u0645\u0636\u064a \u0645\u062d\u0638\u0648\u0631.\" }, proc: { fr: \"Test d'humidit\u00e9 (ASTM F2170) syst\u00e9matique.\", en: \"Moisture test required systematically.\", ar: \"\u0627\u062e\u062a\u0628\u0627\u0631 \u0627\u0644\u0631\u0637\u0648\u0628\u0629 ASTM.\" } }\r\n    ];\r\n\r\n    function initUI() {\r\n        const systemsContainer = document.getElementById('systems-container');\r\n        if(!systemsContainer) return;\r\n        let sysHtml = '';\r\n        for(let key in systemsData) {\r\n            const s = systemsData[key];\r\n            sysHtml += `<button data-sys=\"${key}\" class=\"system-btn p-5 rounded-2xl border-2 text-left transition-all flex items-start gap-5 ${state.system === key ? 'active border-brand-red bg-red-50 shadow-inner' : 'border-slate-300 bg-slate-50 hover:border-slate-400'} w-full\"><div class=\"p-3 rounded-xl mt-1 text-2xl ${state.system === key ? 'bg-brand-red text-white' : 'bg-slate-300 text-slate-700'}\">${s.icon}<\/div><div class=\"flex-1 italic font-bold\"><span class=\"font-black text-sm uppercase block mb-1 leading-none italic text-brand-dark\">${s.name}<\/span><p class=\"text-xs text-slate-800 font-bold leading-relaxed\">${s.desc}<\/p><p class=\"text-[11px] text-brand-red font-black mt-2 uppercase italic\">${s.details} | <span class=\"bg-red-100 text-brand-red px-2 py-0.5 rounded\">Yield: ${s.coverage} sq ft\/kit<\/span><\/p><\/div><\/button>`;\r\n        }\r\n        systemsContainer.innerHTML = sysHtml;\r\n\r\n        const invTable = document.getElementById('inventory-table');\r\n        let invHtml = '';\r\n        inventoryData.forEach(d => { invHtml += `<tr class=\"hover:bg-slate-200 transition-colors\"><td class=\"py-5 px-5 font-black text-brand-dark italic\">${d.item}<\/td><td class=\"py-5 px-5 font-black text-brand-red italic\">${d.price}<\/td><td class=\"py-5 px-5 text-brand-dark font-bold italic\">${d.rental}<\/td><td class=\"py-5 px-5 text-slate-600 uppercase tracking-tighter italic font-black\">${d.supplier}<\/td><\/tr>`; });\r\n        invTable.innerHTML = invHtml;\r\n\r\n        renderPlayers(); renderCompliance(); renderFAQAndConsulting();\r\n    }\r\n\r\n    function renderFAQAndConsulting() {\r\n        const data = translations[state.lang];\r\n        let faqHtml = '';\r\n        data.faqs.forEach((item, i) => { faqHtml += `<div class=\"p-6 bg-slate-50 rounded-2xl border-2 border-slate-200 hover:border-brand-dark transition-colors\"><h4 class=\"font-black text-brand-dark text-xs uppercase tracking-wide mb-3 flex items-start gap-3\"><span class=\"text-brand-red opacity-80\">${i+1}.<\/span> ${item.q}<\/h4><p class=\"text-sm text-slate-700 leading-relaxed font-bold\">${item.a}<\/p><\/div>`; });\r\n        document.getElementById('faq-container').innerHTML = faqHtml;\r\n        let consultHtml = '';\r\n        data.consulting.forEach((item, i) => { consultHtml += `<div class=\"p-6 bg-red-50 rounded-2xl border-l-4 border-brand-red hover:bg-red-100 transition-colors\"><h4 class=\"font-black text-brand-dark text-xs uppercase tracking-wide mb-3 flex items-start gap-3\"><span class=\"text-brand-red\">${i+1}.<\/span> ${item.q}<\/h4><p class=\"text-sm text-slate-700 leading-relaxed font-bold\">${item.a}<\/p><\/div>`; });\r\n        document.getElementById('consult-container').innerHTML = consultHtml;\r\n    }\r\n\r\n    function renderPlayers() {\r\n        const list = document.getElementById('players-list');\r\n        let playersHtml = '';\r\n        topPlayers.forEach((p, i) => { playersHtml += `<div class=\"flex flex-col md:flex-row justify-between items-start md:items-center p-5 bg-white rounded-2xl shadow-sm border-2 border-slate-200 gap-5 hover:shadow-md transition-shadow\"><div class=\"flex-1 w-full\"><div class=\"flex justify-between md:justify-start items-center gap-4 mb-3\"><span class=\"font-black text-sm uppercase italic text-brand-dark\">${i+1}. ${p.n}<\/span><span class=\"px-3 py-1 bg-slate-100 rounded-lg text-[10px] font-bold text-slate-700 uppercase border border-slate-300\">${p.type[state.lang] || p.type['en']}<\/span><\/div><div class=\"grid grid-cols-2 gap-3 mt-2\"><p class=\"text-xs text-slate-600 font-bold uppercase tracking-tight flex items-center gap-2\"><span class=\"text-lg\">\ud83d\udce6<\/span> ${p.emp} Emp. | ${p.teams} Teams<\/p><p class=\"text-xs text-slate-600 font-bold uppercase tracking-tight flex items-center gap-2\"><span class=\"text-lg\">\ud83d\udcc8<\/span> ${p.fund[state.lang] || p.fund['en']}<\/p><\/div><\/div><div class=\"text-left md:text-right\"><span class=\"text-xl font-black text-brand-red italic\">${p.s}<\/span><p class=\"text-[10px] uppercase tracking-widest text-slate-500 mt-1\">Finance<\/p><\/div><\/div>`; });\r\n        list.innerHTML = playersHtml;\r\n    }\r\n\r\n    function renderCompliance() {\r\n        const list = document.getElementById('compliance-list');\r\n        let compHtml = '';\r\n        complianceData.forEach(c => { compHtml += `<div class=\"p-8 rounded-3xl border-2 ${c.bg} ${c.border} space-y-6 shadow-sm hover:scale-[1.02] transition-transform\"><div class=\"flex items-center gap-5 ${c.color} font-black\"><span class=\"text-4xl\">${c.icon}<\/span><h4 class=\"text-2xl uppercase italic tracking-tighter\">${c.gov}<\/h4><\/div><h5 class=\"text-base font-black uppercase text-brand-dark border-b-2 border-slate-300 pb-3\">${c.title[state.lang] || c.title['en']}<\/h5><div class=\"space-y-5\"><div><span class=\"text-[10px] uppercase tracking-widest text-slate-600 font-bold block mb-2\">Law \/ Restriction:<\/span><p class=\"text-sm text-slate-700 leading-relaxed font-bold italic\">${c.desc[state.lang] || c.desc['en']}<\/p><\/div><div class=\"p-5 bg-white rounded-xl shadow-inner border border-slate-300\"><span class=\"text-[10px] uppercase tracking-widest ${c.color} font-black block mb-2\">Mandatory Procedure:<\/span><p class=\"text-xs text-brand-dark leading-relaxed font-black\">${c.proc[state.lang] || c.proc['en']}<\/p><\/div><\/div><\/div>`; });\r\n        list.innerHTML = compHtml;\r\n    }\r\n\r\n    function updateCalculations() {\r\n        const sys = systemsData[state.system];\r\n        const mult = state.isExpress ? 1.35 : 1;\r\n        const totalArea = state.area * state.units;\r\n        const totalManHours = totalArea * (sys.prepTime + sys.applyTime) * mult;\r\n        const totalBase = totalArea * sys.min * mult;\r\n        const dailyCapacity = state.experts * MAX_HOURS_PER_DAY;\r\n        const daysRequired = Math.ceil(totalManHours \/ dailyCapacity);\r\n\r\n        const qtyProduct = Math.ceil(totalArea \/ sys.coverage);\r\n\r\n        const matRaw = totalBase * sys.mat; \r\n        const matMargin = matRaw * 0.20; \r\n        const matFinal = matRaw + matMargin;\r\n        \r\n        const laborRaw = totalManHours * EXPERT_HOURLY_RATE; \r\n        const laborExpertise = laborRaw * 0.25; \r\n        const laborFinal = laborRaw + laborExpertise;\r\n        \r\n        const smallCracks = parseInt(document.getElementById('crack-small').value) || 0;\r\n        const medCracks = parseInt(document.getElementById('crack-med').value) || 0;\r\n        const largeCracks = parseInt(document.getElementById('crack-large').value) || 0;\r\n        const repairsCost = (state.condition === 'new') ? 0 : (smallCracks * 115) + (medCracks * 175) + (largeCracks * 250);\r\n\r\n        const compliance = totalBase * 0.07; \r\n        const grossSubtotal = matFinal + laborFinal + repairsCost + compliance;\r\n        \r\n        let discountPercent = 0;\r\n        let discountLabel = \"\";\r\n        \r\n        if (state.projectType === 'residential') {\r\n            discountPercent = 25; \r\n            discountLabel = translations[state.lang].discount_res_base;\r\n            \r\n            if (state.units > 1) {\r\n                const extraDiscount = Math.floor((state.units - 1) \/ 2) * 5;\r\n                discountPercent += extraDiscount;\r\n                discountLabel = `${translations[state.lang].discount_multi} (${discountPercent}%)`;\r\n            }\r\n            if(discountPercent > 65) discountPercent = 65;\r\n        }\r\n        \r\n        const discountAmount = grossSubtotal * (discountPercent \/ 100);\r\n        const netSubtotal = grossSubtotal - discountAmount;\r\n        \r\n        const tps = netSubtotal * 0.05; \r\n        const tvq = netSubtotal * 0.09975; \r\n        const grandTotal = netSubtotal + tps + tvq;\r\n        \r\n        const netProfit = grossSubtotal - matRaw - laborRaw - compliance - discountAmount;\r\n\r\n        const fmt = (num) => new Intl.NumberFormat(state.lang, { maximumFractionDigits: 0 }).format(num);\r\n\r\n        document.getElementById('out-total').textContent = fmt(grandTotal);\r\n        document.getElementById('out-net').textContent = (netProfit > 0 ? '+' : '') + '$' + fmt(netProfit);\r\n        document.getElementById('out-days').textContent = daysRequired;\r\n        document.getElementById('out-mat-raw').textContent = '$' + fmt(matRaw);\r\n        document.getElementById('out-mat-margin').textContent = '+$' + fmt(matMargin);\r\n        document.getElementById('out-mat-final').textContent = '$' + fmt(matFinal);\r\n        document.getElementById('out-mat-qty').textContent = fmt(qtyProduct) + ' ' + translations[state.lang].unit_gal;\r\n        \r\n        document.getElementById('out-hours').textContent = Math.round(totalManHours);\r\n        document.getElementById('out-lab-raw').textContent = '$' + fmt(laborRaw);\r\n        document.getElementById('out-lab-margin').textContent = '+$' + fmt(laborExpertise);\r\n        document.getElementById('out-lab-final').textContent = '$' + fmt(laborFinal);\r\n        document.getElementById('out-repairs').textContent = '+$' + fmt(repairsCost);\r\n        document.getElementById('out-comp').textContent = '+$' + fmt(compliance);\r\n        \r\n        const discountSection = document.getElementById('receipt-discount-section');\r\n        if(discountPercent > 0) {\r\n            discountSection.classList.remove('hidden');\r\n            document.getElementById('out-discount-label').textContent = discountLabel;\r\n            document.getElementById('out-discount-val').textContent = '-$' + fmt(discountAmount);\r\n        } else {\r\n            discountSection.classList.add('hidden');\r\n        }\r\n        \r\n        document.getElementById('out-sub').textContent = '$' + fmt(netSubtotal);\r\n        document.getElementById('out-tps').textContent = '+$' + fmt(tps);\r\n        document.getElementById('out-tvq').textContent = '+$' + fmt(tvq);\r\n        document.getElementById('out-grand').textContent = '$' + fmt(grandTotal);\r\n        document.getElementById('timeline-logic').textContent = `Logic: ${Math.round(totalManHours)}h \/ (${state.experts} Exp x 8h)`;\r\n        document.getElementById('time-1').textContent = Math.ceil(totalManHours * 0.4) + 'h';\r\n        document.getElementById('time-2').textContent = Math.ceil(totalManHours * 0.3) + 'h';\r\n        document.getElementById('time-3').textContent = Math.ceil(totalManHours * 0.3) + 'h';\r\n        document.getElementById('time-total').textContent = Math.round(totalManHours) + ' Hours';\r\n    }\r\n\r\n    let marketChartInstance = null; let growthChartInstance = null;\r\n    function renderCharts() {\r\n        const textColor = '#1c1c1c';\r\n        if(state.activeTab === 'market') {\r\n            if(marketChartInstance) marketChartInstance.destroy();\r\n            marketChartInstance = new Chart(document.getElementById('marketChart').getContext('2d'), { type: 'doughnut', data: { labels: translations[state.lang].labels || translations['en'].labels, datasets: [{ data: [40, 25, 25, 10], backgroundColor: ['#1c1c1c', '#CC0000', '#64748b', '#e2e8f0'], borderWidth: 0 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'bottom', labels: { color: textColor, font: { size: 12, weight: 'bold' } } } } } });\r\n        }\r\n        if(state.activeTab === 'strategy') {\r\n            if(growthChartInstance) growthChartInstance.destroy();\r\n            const calcMonth = (exp) => ({ cap: ((exp * 25) \/ 14) * 4.33 * 500, sal: exp * EXPERT_HOURLY_RATE * 25 * 4.33 });\r\n            const gData = [calcMonth(2), calcMonth(4), calcMonth(4), calcMonth(6), calcMonth(8), calcMonth(8)];\r\n            growthChartInstance = new Chart(document.getElementById('growthChart').getContext('2d'), { type: 'line', data: { labels: ['M1', 'M2', 'M3', 'M4', 'M5', 'M6'], datasets: [ { label: 'Capacity (sq ft)', data: gData.map(d=>d.cap), borderColor: '#CC0000', yAxisID: 'y', tension: 0.3, borderWidth: 3 }, { label: 'Salaries ($)', data: gData.map(d=>d.sal), borderColor: '#64748b', yAxisID: 'y1', borderDash: [5,5], tension: 0.3, borderWidth: 2 } ] }, options: { responsive: true, maintainAspectRatio: false, scales: { y: { type: 'linear', display: true, position: 'left', ticks: { color: '#f8fafc', font: { size: 11 } } }, y1: { type: 'linear', display: true, position: 'right', grid: { drawOnChartArea: false }, ticks: { color: '#f8fafc', font: { size: 11 } } } }, plugins: { legend: { labels: { color: '#f8fafc', font: {weight: 'bold', size: 12} } } } } });\r\n        }\r\n    }\r\n\r\n    document.querySelectorAll('.lang-btn').forEach(btn => {\r\n        btn.addEventListener('click', function() {\r\n            state.lang = this.getAttribute('data-lang');\r\n            document.querySelectorAll('.lang-btn').forEach(b => { b.classList.remove('bg-white', 'shadow', 'text-brand-red'); b.classList.add('text-slate-500', 'hover:text-brand-dark'); });\r\n            this.classList.add('bg-white', 'shadow', 'text-brand-red'); this.classList.remove('text-slate-500', 'hover:text-brand-dark');\r\n            document.getElementById('epoxy-app-wrapper').dir = state.lang === 'ar' ? 'rtl' : 'ltr'; \r\n            document.querySelectorAll('[data-i18n]').forEach(el => { const key = el.getAttribute('data-i18n'); if(translations[state.lang] && translations[state.lang][key]) el.innerHTML = translations[state.lang][key]; });\r\n            document.getElementById('market-full-study').innerHTML = translations[state.lang].market_study_html;\r\n            renderPlayers(); renderCompliance(); renderFAQAndConsulting(); updateCalculations(); renderCharts();\r\n        });\r\n    });\r\n\r\n    document.querySelectorAll('.tab-btn').forEach(btn => {\r\n        btn.addEventListener('click', function() {\r\n            document.querySelectorAll('.tab-btn').forEach(b => { b.classList.remove('bg-brand-dark', 'text-white', 'shadow-lg', 'scale-105'); b.classList.add('text-slate-600', 'hover:text-brand-dark', 'hover:bg-slate-100'); });\r\n            this.classList.add('bg-brand-dark', 'text-white', 'shadow-lg', 'scale-105'); this.classList.remove('text-slate-600', 'hover:text-brand-dark', 'hover:bg-slate-100');\r\n            const tabId = this.getAttribute('data-tab'); state.activeTab = tabId;\r\n            document.querySelectorAll('.tab-content').forEach(tc => tc.classList.remove('active'));\r\n            document.getElementById('tab-' + tabId).classList.add('active');\r\n            renderCharts();\r\n        });\r\n    });\r\n\r\n    \/\/ Project Type Listeners\r\n    document.querySelectorAll('.type-btn').forEach(btn => {\r\n        btn.addEventListener('click', function() {\r\n            state.projectType = this.getAttribute('data-type');\r\n            document.querySelectorAll('.type-btn').forEach(b => { \r\n                b.classList.remove('active', 'bg-brand-dark', 'border-brand-dark', 'text-white', 'shadow-md'); \r\n                b.classList.add('border-slate-300', 'text-slate-700', 'hover:bg-slate-200'); \r\n            });\r\n            this.classList.add('active', 'bg-brand-dark', 'border-brand-dark', 'text-white', 'shadow-md'); \r\n            this.classList.remove('border-slate-300', 'text-slate-700', 'hover:bg-slate-200');\r\n            \r\n            const unitsContainer = document.getElementById('units-container');\r\n            if(state.projectType === 'commercial') {\r\n                unitsContainer.style.display = 'none';\r\n                document.getElementById('input-units').value = 1;\r\n                state.units = 1;\r\n            } else {\r\n                unitsContainer.style.display = 'flex';\r\n            }\r\n            updateCalculations();\r\n        });\r\n    });\r\n\r\n    \/\/ Units and Area Listeners\r\n    document.getElementById('input-units').addEventListener('input', function() {\r\n        if(this.value < 1) this.value = 1;\r\n        state.units = this.value;\r\n        updateCalculations();\r\n    });\r\n\r\n    const inputArea = document.getElementById('input-area'); const rangeArea = document.getElementById('range-area');\r\n    inputArea.addEventListener('input', function() { state.area = this.value; rangeArea.value = this.value; updateCalculations(); });\r\n    rangeArea.addEventListener('input', function() { state.area = this.value; inputArea.value = this.value; updateCalculations(); });\r\n\r\n    document.getElementById('systems-container').addEventListener('click', function(e) {\r\n        const btn = e.target.closest('.system-btn'); if (!btn) return;\r\n        state.system = btn.getAttribute('data-sys');\r\n        document.querySelectorAll('.system-btn').forEach(b => {\r\n            b.classList.remove('active', 'border-brand-red', 'bg-red-50', 'shadow-inner'); b.classList.add('border-slate-300', 'bg-slate-50', 'hover:border-slate-400');\r\n            const iconDiv = b.querySelector('div'); iconDiv.classList.remove('bg-brand-red', 'text-white'); iconDiv.classList.add('bg-slate-300', 'text-slate-700');\r\n        });\r\n        btn.classList.add('active', 'border-brand-red', 'bg-red-50', 'shadow-inner'); btn.classList.remove('border-slate-300', 'bg-slate-50', 'hover:border-slate-400');\r\n        const btnIconDiv = btn.querySelector('div'); btnIconDiv.classList.add('bg-brand-red', 'text-white'); btnIconDiv.classList.remove('bg-slate-300', 'text-slate-700');\r\n        updateCalculations();\r\n    });\r\n\r\n    document.querySelectorAll('.expert-btn').forEach(btn => {\r\n        btn.addEventListener('click', function() {\r\n            state.experts = parseInt(this.getAttribute('data-val'));\r\n            document.querySelectorAll('.expert-btn').forEach(b => { b.classList.remove('active', 'bg-brand-dark', 'border-brand-dark', 'text-white', 'shadow-md'); b.classList.add('border-slate-300', 'text-slate-700', 'hover:bg-slate-200'); });\r\n            this.classList.add('active', 'bg-brand-dark', 'border-brand-dark', 'text-white', 'shadow-md'); this.classList.remove('border-slate-300', 'text-slate-700', 'hover:bg-slate-200');\r\n            updateCalculations();\r\n        });\r\n    });\r\n\r\n    document.querySelectorAll('.cond-btn').forEach(btn => {\r\n        btn.addEventListener('click', function() {\r\n            state.condition = this.getAttribute('data-cond');\r\n            document.querySelectorAll('.cond-btn').forEach(b => { \r\n                b.classList.remove('active', 'bg-brand-dark', 'border-brand-dark', 'text-white', 'shadow-md'); \r\n                b.classList.add('border-slate-300', 'text-slate-700', 'hover:bg-slate-200'); \r\n            });\r\n            this.classList.add('active', 'bg-brand-dark', 'border-brand-dark', 'text-white', 'shadow-md'); \r\n            this.classList.remove('border-slate-300', 'text-slate-700', 'hover:bg-slate-200');\r\n            \r\n            const cracksContainer = document.getElementById('cracks-container');\r\n            if(state.condition === 'new') {\r\n                cracksContainer.style.display = 'none';\r\n                document.getElementById('crack-small').value = 0;\r\n                document.getElementById('crack-med').value = 0;\r\n                document.getElementById('crack-large').value = 0;\r\n            } else {\r\n                cracksContainer.style.display = 'block';\r\n            }\r\n            updateCalculations();\r\n        });\r\n    });\r\n\r\n    ['crack-small', 'crack-med', 'crack-large'].forEach(id => {\r\n        document.getElementById(id).addEventListener('input', function() {\r\n            if (this.value < 0) this.value = 0;\r\n            updateCalculations();\r\n        });\r\n    });\r\n\r\n    document.getElementById('btn-express').addEventListener('click', function() {\r\n        state.isExpress = !state.isExpress;\r\n        const iconExpress = document.getElementById('icon-express'); const toggleBg = document.getElementById('toggle-express-bg'); const toggleDot = document.getElementById('toggle-express-dot');\r\n        if(state.isExpress) {\r\n            this.classList.add('border-brand-red', 'bg-red-50', 'shadow-inner'); this.classList.remove('border-slate-300', 'bg-white');\r\n            iconExpress.classList.add('text-brand-red', 'animate-pulse');\r\n            toggleBg.classList.remove('bg-slate-300'); toggleBg.classList.add('bg-brand-red'); toggleDot.classList.add(state.lang === 'ar' ? '-translate-x-6' : 'translate-x-6');\r\n        } else {\r\n            this.classList.remove('border-brand-red', 'bg-red-50', 'shadow-inner'); this.classList.add('border-slate-300', 'bg-white');\r\n            iconExpress.classList.remove('text-brand-red', 'animate-pulse');\r\n            toggleBg.classList.remove('bg-brand-red'); toggleBg.classList.add('bg-slate-300'); toggleDot.classList.remove('translate-x-6', '-translate-x-6');\r\n        }\r\n        updateCalculations();\r\n    });\r\n\r\n    document.getElementById('submission-form').addEventListener('submit', function(e) {\r\n        e.preventDefault();\r\n        \r\n        const fname = document.getElementById('form-fname').value;\r\n        const lname = document.getElementById('form-lname').value;\r\n        const email = document.getElementById('form-email').value;\r\n        const phone = document.getElementById('form-phone').value;\r\n        const location = document.getElementById('form-location').value;\r\n        const info = document.getElementById('form-info').value;\r\n        \r\n        const totalAmount = document.getElementById('out-grand').textContent;\r\n        const systemName = systemsData[state.system].name;\r\n        const conditionText = state.condition === 'new' ? translations[state.lang].cond_new : translations[state.lang].cond_used;\r\n        const expressText = state.isExpress ? 'Yes' : 'No';\r\n        const projectTypeText = state.projectType === 'residential' ? translations[state.lang].type_res : translations[state.lang].type_com;\r\n        \r\n        const totalArea = state.area * state.units;\r\n        const qtyProduct = document.getElementById('out-mat-qty').textContent;\r\n\r\n        const smallCracks = document.getElementById('crack-small').value;\r\n        const medCracks = document.getElementById('crack-med').value;\r\n        const largeCracks = document.getElementById('crack-large').value;\r\n\r\n        \/\/ NOTE: Payload keys remain the original French ones to prevent breaking the WordPress PHP backend handler. Only user-facing text is translated.\r\n        window.epoxyPendingPayload = {\r\n            _subject: `New estimate - ${fname} ${lname} - ${location}`,\r\n            Nom_Complet: `${fname} ${lname}`,\r\n            Email: email,\r\n            Telephone: phone,\r\n            Lieu: location,\r\n            Type_Projet: projectTypeText,\r\n            Nombre_Unites: state.projectType === 'residential' ? state.units : 'N\/A',\r\n            Notes_Client: info,\r\n            \r\n            TECH_Superficie: `${totalArea} sq ft`,\r\n            TECH_Systeme: systemName,\r\n            TECH_Quantite_Produits: qtyProduct,\r\n            TECH_Dalle: conditionText,\r\n            TECH_Fissures_Petites: smallCracks,\r\n            TECH_Fissures_Moyennes: medCracks,\r\n            TECH_Fissures_Majeures: largeCracks,\r\n            TECH_Express_24h: expressText,\r\n            \r\n            PRIX_Materiaux: document.getElementById('out-mat-final').textContent,\r\n            PRIX_MainOeuvre: document.getElementById('out-lab-final').textContent,\r\n            PRIX_Reparations: document.getElementById('out-repairs').textContent,\r\n            PRIX_Conformite_RBQ: document.getElementById('out-comp').textContent,\r\n            PRIX_Rabais: document.getElementById('out-discount-val') ? document.getElementById('out-discount-val').textContent : '$0',\r\n            PRIX_Sous_Total: document.getElementById('out-sub').textContent,\r\n            PRIX_Taxes: '$' + (parseFloat(document.getElementById('out-tps').textContent.replace(\/[^0-9.-]+\/g,\"\")) + parseFloat(document.getElementById('out-tvq').textContent.replace(\/[^0-9.-]+\/g,\"\"))).toFixed(2),\r\n            PRIX_GRAND_TOTAL: totalAmount\r\n        };\r\n\r\n        const t = translations[state.lang];\r\n        let summaryHtml = `\r\n            <div class=\"bg-slate-100 p-5 rounded-xl border-2 border-slate-200\">\r\n                <h4 class=\"font-black text-brand-dark uppercase text-[11px] tracking-widest mb-3 border-b-2 border-slate-200 pb-2\">${t.sect_client}<\/h4>\r\n                <div class=\"grid grid-cols-2 gap-3 text-slate-800 text-sm\">\r\n                    <p><strong>Name:<\/strong> ${fname} ${lname}<\/p>\r\n                    <p><strong>Phone:<\/strong> ${phone}<\/p>\r\n                    <p class=\"col-span-2\"><strong>Email:<\/strong> ${email}<\/p>\r\n                    <p class=\"col-span-2\"><strong>Location:<\/strong> ${location}<\/p>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"bg-slate-100 p-5 rounded-xl border-2 border-slate-200 mt-4\">\r\n                <h4 class=\"font-black text-brand-dark uppercase text-[11px] tracking-widest mb-3 border-b-2 border-slate-200 pb-2\">${t.sect_project}<\/h4>\r\n                <div class=\"text-slate-800 text-sm\">\r\n                    <p><strong>Type:<\/strong> ${projectTypeText} ${state.projectType === 'residential' ? '(' + state.units + ' units)' : ''}<\/p>\r\n                    <p class=\"mt-3 p-3 bg-white border border-slate-200 rounded-lg italic\">\"${info}\"<\/p>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"bg-red-50 p-5 rounded-xl border-2 border-red-200 mt-4\">\r\n                <h4 class=\"font-black text-brand-red uppercase text-[11px] tracking-widest mb-3 border-b-2 border-red-200 pb-2\">${t.sect_estimate}<\/h4>\r\n                <div class=\"grid grid-cols-2 gap-3 text-brand-dark text-sm\">\r\n                    <p><strong>Area:<\/strong> ${totalArea} sq ft<\/p>\r\n                    <p><strong>System:<\/strong> ${systemName}<\/p>\r\n                    <p class=\"font-bold text-brand-red\"><strong>Material:<\/strong> ${qtyProduct}<\/p>\r\n                    <p><strong>Slab:<\/strong> ${conditionText}<\/p>\r\n                    <p><strong>Express:<\/strong> ${expressText}<\/p>\r\n                    <p class=\"col-span-2\"><strong>Repairs:<\/strong> Small(${smallCracks}), Medium(${medCracks}), Major(${largeCracks})<\/p>\r\n                <\/div>\r\n                <div class=\"mt-5 pt-4 border-t-2 border-red-200 text-2xl font-black text-brand-dark flex justify-between items-end\">\r\n                    <span class=\"text-sm uppercase tracking-widest\">Estimated Total:<\/span>\r\n                    <span class=\"text-brand-red\">${totalAmount}<\/span>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"mt-4 p-3 bg-slate-100 rounded-xl border border-slate-200 text-center\">\r\n                <p class=\"text-xs font-bold text-slate-600 italic flex items-center justify-center gap-2\"><span>\ud83d\udce8<\/span> ${t.copy_notice}<\/p>\r\n            <\/div>\r\n        `;\r\n\r\n        document.getElementById('verify-details').innerHTML = summaryHtml;\r\n\r\n        const modal = document.getElementById('verify-modal');\r\n        const modalContent = document.getElementById('verify-modal-content');\r\n        modal.classList.remove('hidden');\r\n        void modal.offsetWidth;\r\n        modal.classList.remove('opacity-0');\r\n        modalContent.classList.remove('scale-95');\r\n    });\r\n\r\n    function closeModal() {\r\n        const modal = document.getElementById('verify-modal');\r\n        const modalContent = document.getElementById('verify-modal-content');\r\n        modal.classList.add('opacity-0');\r\n        modalContent.classList.add('scale-95');\r\n        setTimeout(() => { modal.classList.add('hidden'); }, 300);\r\n    }\r\n\r\n    document.getElementById('close-modal').addEventListener('click', closeModal);\r\n    document.getElementById('btn-cancel-send').addEventListener('click', closeModal);\r\n    \r\n    document.getElementById('btn-confirm-send').addEventListener('click', async function() {\r\n        const btn = this;\r\n        const originalText = btn.innerHTML;\r\n        btn.innerHTML = '<span class=\"text-xl animate-spin\">\u23f3<\/span> <span>Sending...<\/span>';\r\n        btn.disabled = true;\r\n\r\n        try {\r\n            \/\/ WordPress AJAX API URL\r\n            let endpointUrl = '\/wp-admin\/admin-ajax.php';\r\n            \r\n            \/\/ Checking for AJAX URL if WordPress is located in a subfolder\r\n            if (typeof ajaxurl !== 'undefined') {\r\n                endpointUrl = ajaxurl;\r\n            } else if (typeof elementorFrontend !== 'undefined' && elementorFrontend.config && elementorFrontend.config.urls && elementorFrontend.config.urls.ajaxurl) {\r\n                endpointUrl = elementorFrontend.config.urls.ajaxurl;\r\n            } else {\r\n                const scripts = document.getElementsByTagName('script');\r\n                for (let i = 0; i < scripts.length; i++) {\r\n                    if (scripts[i].src && scripts[i].src.includes('\/wp-includes\/')) {\r\n                        endpointUrl = scripts[i].src.split('\/wp-includes\/')[0] + '\/wp-admin\/admin-ajax.php';\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            \r\n            const formData = new FormData();\r\n            formData.append('action', 'epoxy_submit_quote');\r\n            formData.append('payload', JSON.stringify(window.epoxyPendingPayload));\r\n\r\n            const fileExample = document.getElementById('form-file-example').files[0];\r\n            const filePlan = document.getElementById('form-file-plan').files[0];\r\n            if (fileExample) formData.append('file_example', fileExample);\r\n            if (filePlan) formData.append('file_plan', filePlan);\r\n\r\n            const response = await fetch(endpointUrl, { \r\n                method: 'POST',\r\n                body: formData\r\n            });\r\n            \r\n            const textResult = await response.text();\r\n            let result;\r\n\r\n            try {\r\n                result = JSON.parse(textResult);\r\n            } catch (e) {\r\n                \/\/ Not JSON (missing PHP snippet, wrong URL, 404\/500)\r\n                if (textResult.trim() === '0' || textResult.includes('<body') || textResult.includes('<!DOCTYPE')) {\r\n                    throw new Error(\"PHP bridge not found. Verify PHP code is active on WordPress.\");\r\n                }\r\n                throw new Error(\"Unexpected server response: \" + textResult.substring(0, 150) + \"...\");\r\n            }\r\n\r\n            \/\/ PHP JSON response check\r\n            if (response.ok && result.success) {\r\n                btn.innerHTML = '<span class=\"text-xl\">\u2705<\/span> <span>Estimate sent successfully!<\/span>';\r\n                btn.classList.remove('bg-brand-red', 'hover:bg-red-800');\r\n                btn.classList.add('bg-green-600', 'hover:bg-green-700');\r\n                \r\n                setTimeout(() => {\r\n                    closeModal();\r\n                    btn.innerHTML = originalText;\r\n                    btn.classList.remove('bg-green-600', 'hover:bg-green-700');\r\n                    btn.classList.add('bg-brand-red', 'hover:bg-red-800');\r\n                    btn.disabled = false;\r\n                    document.getElementById('submission-form').reset();\r\n                }, 2500);\r\n            } else {\r\n                \/\/ PHP error (e.g. wp_mail failed)\r\n                const serverMsg = result.data ? (typeof result.data === 'string' ? result.data : JSON.stringify(result.data)) : 'Unknown server error';\r\n                throw new Error(\"Refused by WordPress: \" + serverMsg + \"\\n\\nMake sure your SMTP plugin is configured to send emails.\");\r\n            }\r\n\r\n        } catch (error) {\r\n            console.error(error);\r\n            alert(\"Sending error:\\n\\n\" + error.message);\r\n            btn.innerHTML = originalText;\r\n            btn.disabled = false;\r\n        }\r\n    });\r\n\r\n    initUI(); updateCalculations();\r\n    document.getElementById('market-full-study').innerHTML = translations[state.lang].market_study_html;\r\n    renderFAQAndConsulting(); renderCharts();\r\n}\r\n\r\nif (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', initEpoxyApp);\r\n} else {\r\n    initEpoxyApp();\r\n}\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Project Dashboard Capital Expansion Market Report Laws &#038; Standards FAQ &#038; Expert This interactive dashboard models costs, margins, and logistical constraints for polymer coating installations. Adjust the area and parameters to instantly visualize the operational feasibility of an industrial project. \ud83e\uddeeLogistics Configurations Project Type Residential (-25%) Commercial Units (Same building) Extra -5% per 2 extra [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6838,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-6998","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/epoxy.express\/en\/wp-json\/wp\/v2\/pages\/6998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/epoxy.express\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/epoxy.express\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/epoxy.express\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/epoxy.express\/en\/wp-json\/wp\/v2\/comments?post=6998"}],"version-history":[{"count":10,"href":"https:\/\/epoxy.express\/en\/wp-json\/wp\/v2\/pages\/6998\/revisions"}],"predecessor-version":[{"id":7009,"href":"https:\/\/epoxy.express\/en\/wp-json\/wp\/v2\/pages\/6998\/revisions\/7009"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/epoxy.express\/en\/wp-json\/wp\/v2\/media\/6838"}],"wp:attachment":[{"href":"https:\/\/epoxy.express\/en\/wp-json\/wp\/v2\/media?parent=6998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}