


<style id="elementor-post-21834">.elementor-21834 .elementor-element.elementor-element-fb96bef{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--margin-top:-133px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;}.elementor-21834 .elementor-element.elementor-element-6240bd5{--display:flex;}.elementor-widget-heading .elementor-heading-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );color:var( --e-global-color-primary );}.elementor-21834 .elementor-element.elementor-element-3c2f269{text-align:center;}.elementor-21834 .elementor-element.elementor-element-3c2f269 .elementor-heading-title{font-family:"Roboto", Sans-serif;font-size:29px;font-weight:600;-webkit-text-stroke-color:#000;stroke:#000;text-shadow:0px 0px 0px rgba(0,0,0,0.3);color:#33558B;}.elementor-21834 .elementor-element.elementor-element-3c2f269 .elementor-heading-title a{transition-duration:0s;}.elementor-21834 .elementor-element.elementor-element-3c2f269 > .elementor-widget-container{padding:0px 0px 0px 0px;}.elementor-21834 .elementor-element.elementor-element-bf4081c{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}.elementor-21834 .elementor-element.elementor-element-9c73e71{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}.elementor-21834 .elementor-element.elementor-element-63fe7a7{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}.elementor-21834 .elementor-element.elementor-element-f88d446{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}.elementor-widget-text-editor{font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );color:var( --e-global-color-text );}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:var( --e-global-color-primary );}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap, .elementor-widget-text-editor.elementor-drop-cap-view-default .elementor-drop-cap{color:var( --e-global-color-primary );border-color:var( --e-global-color-primary );}.elementor-21834 .elementor-element.elementor-element-e01cf74{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}.elementor-21834 .elementor-element.elementor-element-0db17a2{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}.elementor-21834 .elementor-element.elementor-element-7522c0a{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}.elementor-widget-image .widget-image-caption{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}@media(max-width:1024px){.elementor-21834 .elementor-element.elementor-element-3c2f269 > .elementor-widget-container{padding:0px 0px 0px 0px;}}@media(max-width:767px){.elementor-21834 .elementor-element.elementor-element-f863eeb > .elementor-widget-container{margin:96px 0px 0px 0px;}.elementor-21834 .elementor-element.elementor-element-6240bd5{--margin-top:-21px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;}.elementor-21834 .elementor-element.elementor-element-3c2f269{text-align:center;}.elementor-21834 .elementor-element.elementor-element-3c2f269 .elementor-heading-title{font-size:17px;-webkit-text-stroke-width:0px;stroke-width:0px;}.elementor-21834 .elementor-element.elementor-element-3c2f269 > .elementor-widget-container{padding:010px 010px 5px 010px;}.elementor-21834 .elementor-element.elementor-element-bf4081c{--margin-top:-30px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;}}</style>{"id":21834,"date":"2026-09-24T11:05:20","date_gmt":"2026-09-24T07:05:20","guid":{"rendered":"https:\/\/datvale.ge\/%e1%83%9a%e1%83%90%e1%83%9b%e1%83%98%e1%83%9c%e1%83%90%e1%83%a2%e1%83%98%e1%83%a1-%e1%83%99%e1%83%90%e1%83%9a%e1%83%99%e1%83%a3%e1%83%9a%e1%83%90%e1%83%a2%e1%83%9d%e1%83%a0%e1%83%98\/"},"modified":"2026-10-07T17:33:58","modified_gmt":"2026-10-07T13:33:58","slug":"laminate-calculator","status":"publish","type":"page","link":"https:\/\/datvale.ge\/en\/laminate-calculator\/","title":{"rendered":"Laminate Calculator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"21834\" class=\"elementor elementor-21834 elementor-20497\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fb96bef e-flex e-con-boxed e-con e-parent\" data-id=\"fb96bef\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f863eeb elementor-widget elementor-widget-html\" data-id=\"f863eeb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"dv-kalkulatorebi-banner\">\r\n\r\n  <img decoding=\"async\"\r\n    src=\"https:\/\/datvale.ge\/wp-content\/uploads\/2026\/10\/remontis-kalkulatori-2.webp\"\r\n    alt=\"Datvale Calculators\"\r\n  >\r\n\r\n<\/div>\r\n\r\n<style>\r\n\r\n.dv-kalkulatorebi-banner,\r\n.dv-kalkulatorebi-banner *{\r\n  box-sizing:border-box;\r\n}\r\n\r\n.dv-kalkulatorebi-banner{\r\n  position:relative;\r\n  overflow:hidden;\r\n\r\n  width:100%;\r\n  height:215px;\r\n\r\n  margin:18px 0;\r\n\r\n  border-radius:22px;\r\n\r\n  background:#eef1f4;\r\n}\r\n\r\n.dv-kalkulatorebi-banner img{\r\n  display:block;\r\n\r\n  width:100%;\r\n  height:100%;\r\n\r\n  margin:0;\r\n  padding:0;\r\n\r\n  border:0;\r\n\r\n  object-fit:cover;\r\n  object-position:center;\r\n\r\n  image-rendering:auto;\r\n}\r\n\r\n\r\n\/* TABLET *\/\r\n\r\n@media(max-width:900px){\r\n\r\n  .dv-kalkulatorebi-banner{\r\n    height:190px;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* MOBILE *\/\r\n\r\n@media(max-width:700px){\r\n\r\n  .dv-kalkulatorebi-banner{\r\n    height:183px;\r\n\r\n    margin:10px 0;\r\n\r\n    border-radius:14px;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* SMALL MOBILE *\/\r\n\r\n@media(max-width:380px){\r\n\r\n  .dv-kalkulatorebi-banner{\r\n    height:165px;\r\n  }\r\n\r\n}\r\n\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6240bd5 e-flex e-con-boxed e-con e-parent\" data-id=\"6240bd5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3c2f269 elementor-widget elementor-widget-heading\" data-id=\"3c2f269\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Laminate Installation Cost 2026 \u2013 Laminate Calculator<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bf4081c e-flex e-con-boxed e-con e-parent\" data-id=\"bf4081c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0509732 elementor-widget elementor-widget-html\" data-id=\"0509732\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"dv-laminate-calculator\">\r\n\r\n<style>\r\n#dv-laminate-calculator,\r\n#dv-laminate-calculator *{box-sizing:border-box}\r\n\r\n#dv-laminate-calculator{\r\n  --dv-blue:#0b3a78;\r\n  --dv-blue-2:#1764bd;\r\n  --dv-text:#173558;\r\n  --dv-muted:#5f7287;\r\n  --dv-border:#e3ebf5;\r\n\r\n  position:relative;\r\n  width:100%;\r\n  max-width:1260px;\r\n  margin:26px auto;\r\n  padding:42px 22px;\r\n  border:1px solid var(--dv-border);\r\n  border-radius:24px;\r\n  background:\r\n    radial-gradient(circle at top right,rgba(52,86,150,.09),transparent 34%),\r\n    linear-gradient(180deg,#f8fbff 0%,#eef4fb 100%);\r\n  color:var(--dv-text);\r\n  font-family:system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;\r\n  box-shadow:0 16px 42px rgba(11,58,120,.10);\r\n}\r\n\r\n#dv-laminate-calculator .dv-calculator{width:100%;max-width:1180px;margin:0 auto}\r\n\r\n#dv-laminate-calculator .dv-input-card,\r\n#dv-laminate-calculator .dv-result-card,\r\n#dv-laminate-calculator .dv-summary,\r\n#dv-laminate-calculator .dv-info-card,\r\n#dv-laminate-calculator .dv-related{\r\n  border:1px solid var(--dv-border);\r\n  border-radius:22px;\r\n  background:#fff;\r\n  box-shadow:0 16px 40px rgba(11,58,120,.10);\r\n}\r\n\r\n#dv-laminate-calculator .dv-input-card{padding:28px;margin-bottom:24px}\r\n\r\n#dv-laminate-calculator .dv-section-title{\r\n  display:inline-flex;align-items:center;gap:11px;margin:0 0 22px;\r\n  color:var(--dv-text);font-size:24px;font-weight:950;line-height:1.18\r\n}\r\n\r\n#dv-laminate-calculator .dv-section-number{\r\n  display:inline-flex;width:36px;height:36px;align-items:center;justify-content:center;\r\n  flex:0 0 36px;border-radius:50%;background:linear-gradient(135deg,var(--dv-blue),var(--dv-blue-2));\r\n  color:#fff;font-size:14px;font-weight:950\r\n}\r\n\r\n#dv-laminate-calculator .dv-input-grid{\r\n  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px\r\n}\r\n\r\n#dv-laminate-calculator .dv-field label{\r\n  display:block;min-height:21px;margin-bottom:8px;color:var(--dv-text);font-size:14px;font-weight:850\r\n}\r\n\r\n#dv-laminate-calculator .dv-input-wrap{position:relative}\r\n\r\n#dv-laminate-calculator input,\r\n#dv-laminate-calculator select{\r\n  display:block;width:100%;height:56px;margin:0;border:1px solid #d8e3ef;border-radius:14px;\r\n  outline:none;background:#f8fbff;color:var(--dv-text);font-size:16px;font-weight:800\r\n}\r\n\r\n#dv-laminate-calculator input{padding:0 52px 0 15px}\r\n#dv-laminate-calculator select{padding:0 42px 0 15px;cursor:pointer}\r\n\r\n#dv-laminate-calculator input:focus,\r\n#dv-laminate-calculator select:focus{\r\n  border-color:var(--dv-blue-2);background:#fff;box-shadow:0 0 0 4px rgba(23,100,189,.10)\r\n}\r\n\r\n#dv-laminate-calculator .dv-unit{\r\n  position:absolute;top:50%;right:14px;transform:translateY(-50%);\r\n  color:var(--dv-muted);font-size:13px;font-weight:850;pointer-events:none\r\n}\r\n\r\n#dv-laminate-calculator .dv-note{\r\n  margin-top:20px;padding:14px 16px;border:1px solid #dce7f2;border-radius:14px;\r\n  background:#f8fbff;color:#526b84;font-size:13px;line-height:1.55;font-weight:650\r\n}\r\n\r\n#dv-laminate-calculator .dv-calculate-v2{\r\n  width:100%;min-height:58px;margin-top:22px;padding:14px 24px;border:0;border-radius:14px;\r\n  cursor:pointer;background:linear-gradient(135deg,var(--dv-blue),var(--dv-blue-2));\r\n  color:#fff;font-size:17px;font-weight:950;box-shadow:0 12px 28px rgba(11,58,120,.22)\r\n}\r\n\r\n#dv-laminate-calculator .dv-error{\r\n  display:none;margin-top:14px;padding:13px 15px;border:1px solid rgba(174,32,32,.18);\r\n  border-radius:12px;background:#fff2f2;color:#a32020;font-size:14px;font-weight:850\r\n}\r\n\r\n#dv-laminate-calculator .dv-output{display:none;scroll-margin-top:140px}\r\n#dv-laminate-calculator .dv-output.dv-show{display:block}\r\n\r\n#dv-laminate-calculator .dv-results{\r\n  display:grid;grid-template-columns:1fr;gap:18px;max-width:1080px;margin:0 auto\r\n}\r\n\r\n#dv-laminate-calculator .dv-result-card{overflow:hidden}\r\n\r\n#dv-laminate-calculator .dv-result-head{\r\n  display:flex;align-items:center;gap:10px;padding:17px 20px;\r\n  background:linear-gradient(135deg,var(--dv-blue),var(--dv-blue-2));color:#fff\r\n}\r\n\r\n#dv-laminate-calculator .dv-result-icon{\r\n  display:inline-flex;width:34px;height:34px;align-items:center;justify-content:center;\r\n  flex:0 0 34px;border-radius:10px;background:rgba(255,255,255,.14);font-size:17px\r\n}\r\n\r\n#dv-laminate-calculator .dv-result-head h3{margin:0;color:#fff;font-size:18px;font-weight:950}\r\n#dv-laminate-calculator .dv-result-body{padding:10px 18px 15px}\r\n\r\n#dv-laminate-calculator .dv-row{\r\n  display:grid;grid-template-columns:minmax(0,1fr) auto;gap:15px;align-items:center;\r\n  padding:12px 0;border-bottom:1px dashed #d9e4ef\r\n}\r\n\r\n#dv-laminate-calculator .dv-row:last-child{border-bottom:0}\r\n#dv-laminate-calculator .dv-row-name{color:#425a74;font-size:14px;line-height:1.45;font-weight:650}\r\n#dv-laminate-calculator .dv-row-value{color:var(--dv-text);text-align:right;white-space:nowrap;font-size:15px;font-weight:950}\r\n\r\n#dv-laminate-calculator .dv-card-total{\r\n  margin:7px 0 2px;padding:14px 15px;border:1px solid #d8e3ef;border-radius:13px;\r\n  background:#f4f8fd;color:var(--dv-text);font-size:15px;font-weight:950;text-align:right\r\n}\r\n\r\n#dv-laminate-calculator .dv-summary{max-width:1080px;margin:22px auto 0;padding:26px}\r\n\r\n#dv-laminate-calculator .dv-summary-grid{\r\n  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px\r\n}\r\n\r\n#dv-laminate-calculator .dv-summary-item{\r\n  padding:18px;border:1px solid #e1e9f3;border-radius:16px;background:#f8fbff;text-align:center\r\n}\r\n\r\n#dv-laminate-calculator .dv-summary-label{\r\n  display:block;margin-bottom:7px;color:var(--dv-muted);font-size:13px;font-weight:850\r\n}\r\n\r\n#dv-laminate-calculator .dv-summary-value{color:var(--dv-text);font-size:22px;font-weight:950}\r\n\r\n#dv-laminate-calculator .dv-grand-total{\r\n  margin-top:16px;padding:29px 20px;border-radius:18px;\r\n  background:linear-gradient(135deg,var(--dv-blue),var(--dv-blue-2));\r\n  color:#fff;text-align:center;box-shadow:0 14px 30px rgba(11,58,120,.20)\r\n}\r\n\r\n#dv-laminate-calculator .dv-grand-total small{\r\n  display:block;margin-bottom:8px;color:rgba(255,255,255,.82);font-size:14px;font-weight:850\r\n}\r\n\r\n#dv-laminate-calculator .dv-grand-total strong{\r\n  display:block;color:#fff;font-size:clamp(34px,6vw,52px);line-height:1;font-weight:1000\r\n}\r\n\r\n#dv-laminate-calculator .dv-pdf-button{\r\n  width:100%;min-height:56px;margin-top:15px;padding:14px 22px;border:0;border-radius:14px;\r\n  cursor:pointer;background:linear-gradient(135deg,#13795b,#0e9a70);color:#fff;font-size:16px;font-weight:950\r\n}\r\n\r\n#dv-laminate-calculator .dv-info-card{max-width:1080px;margin:20px auto 0;padding:22px}\r\n#dv-laminate-calculator .dv-info-card h3{margin:0 0 10px;color:var(--dv-text);font-size:20px;font-weight:950}\r\n#dv-laminate-calculator .dv-info-card p{margin:0;color:#526b84;font-size:13px;line-height:1.65;font-weight:650}\r\n\r\n#dv-laminate-calculator .dv-related{max-width:1080px;margin:20px auto 0;padding:22px}\r\n#dv-laminate-calculator .dv-related-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}\r\n\r\n#dv-laminate-calculator .dv-related-link{\r\n  display:flex;align-items:center;gap:12px;padding:17px 16px;border:1px solid #d8e3ef;\r\n  border-radius:16px;background:#f8fbff;color:var(--dv-blue);text-decoration:none\r\n}\r\n\r\n#dv-laminate-calculator .dv-related-icon{\r\n  display:inline-flex;width:42px;height:42px;flex:0 0 42px;align-items:center;justify-content:center;\r\n  border-radius:12px;color:#fff;background:linear-gradient(135deg,var(--dv-blue),var(--dv-blue-2));font-size:20px\r\n}\r\n\r\n#dv-laminate-calculator .dv-related-text{min-width:0;flex:1}\r\n#dv-laminate-calculator .dv-related-text strong{display:block;margin-bottom:4px;color:var(--dv-blue);font-size:15px;font-weight:950}\r\n#dv-laminate-calculator .dv-related-text small{display:block;color:var(--dv-muted);font-size:12px;line-height:1.45}\r\n#dv-laminate-calculator .dv-related-arrow{font-size:18px;font-weight:950}\r\n\r\n@media(max-width:900px){\r\n  #dv-laminate-calculator .dv-input-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\r\n  #dv-laminate-calculator .dv-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\r\n  #dv-laminate-calculator .dv-related-grid{grid-template-columns:1fr}\r\n}\r\n\r\n@media(max-width:600px){\r\n  #dv-laminate-calculator{margin:18px auto;padding:24px 12px}\r\n  #dv-laminate-calculator .dv-input-card,\r\n  #dv-laminate-calculator .dv-summary,\r\n  #dv-laminate-calculator .dv-related{padding:18px}\r\n  #dv-laminate-calculator .dv-input-grid,\r\n  #dv-laminate-calculator .dv-summary-grid{grid-template-columns:1fr}\r\n  #dv-laminate-calculator .dv-row{grid-template-columns:1fr;gap:5px}\r\n  #dv-laminate-calculator .dv-row-value{text-align:left;white-space:normal}\r\n}\r\n\r\n\/* After the first free calculation *\/\r\n#dv-laminate-calculator .dv-free-next-step{\r\n  display:none;\r\n  max-width:1080px;\r\n  margin:0 auto 20px;\r\n  padding:22px 24px;\r\n  border:1px solid #d7e6f5;\r\n  border-radius:20px;\r\n  background:\r\n    radial-gradient(circle at top right,rgba(23,100,189,.12),transparent 34%),\r\n    linear-gradient(135deg,#ffffff 0%,#eef5fc 100%);\r\n  box-shadow:0 14px 34px rgba(11,58,120,.10);\r\n}\r\n\r\n#dv-laminate-calculator .dv-free-next-step.dv-show{\r\n  display:grid;\r\n  grid-template-columns:minmax(0,1fr) auto;\r\n  gap:22px;\r\n  align-items:center;\r\n}\r\n\r\n#dv-laminate-calculator .dv-free-next-step-kicker{\r\n  display:inline-block;\r\n  margin-bottom:6px;\r\n  color:#13795b;\r\n  font-size:12px;\r\n  font-weight:950;\r\n}\r\n\r\n#dv-laminate-calculator .dv-free-next-step h3{\r\n  margin:0 0 7px;\r\n  color:#173558;\r\n  font-size:22px;\r\n  font-weight:950;\r\n  line-height:1.2;\r\n}\r\n\r\n#dv-laminate-calculator .dv-free-next-step p{\r\n  margin:0;\r\n  color:#526b84;\r\n  font-size:14px;\r\n  line-height:1.55;\r\n  font-weight:650;\r\n}\r\n\r\n#dv-laminate-calculator .dv-free-next-step a{\r\n  display:inline-flex;\r\n  min-width:240px;\r\n  min-height:52px;\r\n  align-items:center;\r\n  justify-content:center;\r\n  padding:13px 20px;\r\n  border-radius:13px;\r\n  background:linear-gradient(135deg,#0b3a78,#1764bd);\r\n  color:#fff!important;\r\n  font-size:14px;\r\n  font-weight:950;\r\n  text-decoration:none!important;\r\n  text-align:center;\r\n  box-shadow:0 10px 24px rgba(11,58,120,.20);\r\n}\r\n\r\n@media(max-width:600px){\r\n  #dv-laminate-calculator .dv-free-next-step.dv-show{\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n  #dv-laminate-calculator .dv-free-next-step{\r\n    padding:18px;\r\n  }\r\n\r\n  #dv-laminate-calculator .dv-free-next-step a{\r\n    width:100%;\r\n    min-width:0;\r\n  }\r\n}\r\n\r\n\/* Company call request *\/\r\n#dv-laminate-calculator .dv-call-request{\r\n  display:none;\r\n  width:100%;\r\n  max-width:100%;\r\n  min-width:0;\r\n  margin-top:14px;\r\n  padding:18px;\r\n  border:1px solid #d8e3ef;\r\n  border-radius:16px;\r\n  background:#f8fbff;\r\n  overflow:hidden;\r\n}\r\n\r\n#dv-laminate-calculator .dv-call-request-title{\r\n  margin:0 0 6px;\r\n  color:var(--dv-text);\r\n  font-size:17px;\r\n  font-weight:950;\r\n}\r\n\r\n#dv-laminate-calculator .dv-call-request-text{\r\n  margin:0 0 12px;\r\n  color:var(--dv-muted);\r\n  font-size:13px;\r\n  line-height:1.5;\r\n  font-weight:650;\r\n}\r\n\r\n#dv-laminate-calculator .dv-call-request-row{\r\n  display:grid;\r\n  width:100%;\r\n  max-width:100%;\r\n  min-width:0;\r\n  grid-template-columns:minmax(0,1fr) auto;\r\n  gap:10px;\r\n  align-items:center;\r\n}\r\n\r\n#dv-laminate-calculator .dv-call-phone{\r\n  display:block;\r\n  width:100%;\r\n  max-width:100%;\r\n  min-width:0;\r\n  height:52px;\r\n  padding:0 14px;\r\n  border:1px solid #d8e3ef;\r\n  border-radius:12px;\r\n  outline:none;\r\n  background:#fff;\r\n  color:var(--dv-text);\r\n  font-size:15px;\r\n  font-weight:750;\r\n}\r\n\r\n#dv-laminate-calculator .dv-call-phone:focus{\r\n  border-color:#13795b;\r\n  box-shadow:0 0 0 4px rgba(19,121,91,.10);\r\n}\r\n\r\n#dv-laminate-calculator .dv-call-request-row.dv-has-saved-phone{\r\n  grid-template-columns:1fr;\r\n}\r\n\r\n#dv-laminate-calculator .dv-call-request-row.dv-has-saved-phone .dv-call-phone{\r\n  display:none;\r\n}\r\n\r\n#dv-laminate-calculator .dv-request-call-btn{\r\n  min-height:52px;\r\n  max-width:100%;\r\n  min-width:0;\r\n  padding:13px 20px;\r\n  border:0;\r\n  border-radius:12px;\r\n  cursor:pointer;\r\n  background:linear-gradient(135deg,#13795b,#0e9a70);\r\n  color:#fff;\r\n  font-size:14px;\r\n  font-weight:950;\r\n  white-space:nowrap;\r\n  box-shadow:0 10px 24px rgba(19,121,91,.22);\r\n}\r\n\r\n#dv-laminate-calculator .dv-request-call-btn:disabled{\r\n  opacity:.65;\r\n  cursor:wait;\r\n}\r\n\r\n#dv-laminate-calculator .dv-call-request-status{\r\n  display:none;\r\n  margin-top:10px;\r\n  padding:10px 12px;\r\n  border-radius:10px;\r\n  font-size:13px;\r\n  line-height:1.45;\r\n  font-weight:800;\r\n}\r\n\r\n#dv-laminate-calculator .dv-call-request-status.dv-success{\r\n  display:block;\r\n  background:#eefaf5;\r\n  color:#13795b;\r\n  border:1px solid rgba(19,121,91,.16);\r\n}\r\n\r\n#dv-laminate-calculator .dv-call-request-status.dv-error{\r\n  display:block;\r\n  background:#fff2f2;\r\n  color:#a32020;\r\n  border:1px solid rgba(174,32,32,.18);\r\n}\r\n\r\n@media(max-width:600px){\r\n  #dv-laminate-calculator .dv-call-request{\r\n    width:100%;\r\n    max-width:100%;\r\n    min-width:0;\r\n    overflow:hidden;\r\n  }\r\n\r\n  #dv-laminate-calculator .dv-call-request-row{\r\n    width:100%;\r\n    max-width:100%;\r\n    min-width:0;\r\n    grid-template-columns:minmax(0,1fr);\r\n  }\r\n\r\n  #dv-laminate-calculator .dv-call-phone{\r\n    width:100%;\r\n    max-width:100%;\r\n    min-width:0;\r\n  }\r\n\r\n  #dv-laminate-calculator .dv-request-call-btn{\r\n    display:block;\r\n    width:100%;\r\n    max-width:100%;\r\n    min-width:0;\r\n    white-space:normal;\r\n    overflow-wrap:anywhere;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<div class=\"dv-calculator\">\r\n\r\n  <div class=\"dv-input-card\">\r\n\r\n    <h3 class=\"dv-section-title\">Select the main laminate details<\/h3>\r\n\r\n    <div class=\"dv-input-grid\">\r\n\r\n      <div class=\"dv-field\">\r\n        <label for=\"dvLArea\">Floor area<\/label>\r\n        <div class=\"dv-input-wrap\">\r\n          <input id=\"dvLArea\" type=\"number\" min=\"5\" max=\"1000\" step=\"1\" placeholder=\"e.g. 60\" inputmode=\"decimal\">\r\n          <span class=\"dv-unit\">m\u00b2<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"dv-field\">\r\n        <label for=\"dvLType\">Laminate type<\/label>\r\n        <select id=\"dvLType\">\r\n          <option value=\"ac3_8\">AC3 \/ Class 31 \/ 7-8 mm<\/option>\r\n          <option value=\"ac4_8\" selected>AC4 \/ Class 32 \/ 8 mm<\/option>\r\n          <option value=\"ac4_10\">AC4 \/ Class 32 \/ 10 mm<\/option>\r\n          <option value=\"ac5_10\">AC5 \/ Class 33 \/ 10 mm<\/option>\r\n          <option value=\"ac5_12\">AC5 \/ Class 33 \/ 12 mm<\/option>\r\n        <\/select>\r\n      <\/div>\r\n\r\n      <div class=\"dv-field\">\r\n        <label for=\"dvLPattern\">Installation type<\/label>\r\n        <select id=\"dvLPattern\">\r\n          <option value=\"straight\">Straight installation<\/option>\r\n          <option value=\"diagonal\">Diagonal installation<\/option>\r\n        <\/select>\r\n      <\/div>\r\n\r\n      <div class=\"dv-field\">\r\n        <label for=\"dvLUnderlay\">Underlay<\/label>\r\n        <select id=\"dvLUnderlay\">\r\n          <option value=\"0.8\">2 mm Economy - 0.80 \u20be\/m\u00b2<\/option>\r\n          <option value=\"3\" selected>3 mm Standard - 3 \u20be\/m\u00b2<\/option>\r\n          <option value=\"5\">5 mm Standard - 5 \u20be\/m\u00b2<\/option>\r\n          <option value=\"10\">3 mm Premium wood fiber - 10 \u20be\/m\u00b2<\/option>\r\n          <option value=\"12\">5 mm Premium wood fiber - 12 \u20be\/m\u00b2<\/option>\r\n        <\/select>\r\n      <\/div>\r\n\r\n      <div class=\"dv-field\">\r\n        <label for=\"dvLPlinth\">Skirting board length<\/label>\r\n        <div class=\"dv-input-wrap\">\r\n          <input id=\"dvLPlinth\" type=\"number\" min=\"0\" max=\"1000\" step=\"0.1\" placeholder=\"e.g. 32\" inputmode=\"decimal\">\r\n          <span class=\"dv-unit\">linear m<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"dv-field\">\r\n        <label for=\"dvLPrice\">Laminate price per 1 m\u00b2<\/label>\r\n        <div class=\"dv-input-wrap\">\r\n          <input id=\"dvLPrice\" type=\"number\" min=\"1\" max=\"500\" step=\"0.1\" value=\"28.9\" inputmode=\"decimal\">\r\n          <span class=\"dv-unit\">\u20be<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"dv-note\">\r\n      The laminate price changes automatically based on the selected class and thickness, but you can also manually enter the price from a specific store.\r\n    <\/div>\r\n\r\n    <button class=\"dv-calculate-v2\" id=\"dvLCalculateFreeFlowV2\" type=\"button\">\r\n      Calculate Laminate Cost\r\n    <\/button>\r\n\r\n    <div class=\"dv-error\" id=\"dvLError\">\r\n      Please enter the floor area and laminate price correctly.\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n  <div class=\"dv-output\" id=\"dvLOutput\">\r\n\r\n    <div class=\"dv-free-next-step\" id=\"dvLFreeNextStep\">\r\n      <div>\r\n        <span class=\"dv-free-next-step-kicker\">\u2713 Free calculation used<\/span>\r\n        <h3>A package is required for the next calculation<\/h3>\r\n        <p>\r\n          You have used one free calculation.\r\n          Choose a package to make another calculation.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <a href=\"https:\/\/datvale.ge\/en\/packages\/\">\r\n        Choose a Package\r\n      <\/a>\r\n    <\/div>\r\n\r\n    <div class=\"dv-results\">\r\n\r\n      <div class=\"dv-result-card\">\r\n        <div class=\"dv-result-head\"><span class=\"dv-result-icon\">\ud83d\udcd0<\/span><h3>Selected Details<\/h3><\/div>\r\n        <div class=\"dv-result-body\">\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Floor area<\/span><span class=\"dv-row-value\" id=\"rLArea\">\u2014<\/span><\/div>\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Laminate type<\/span><span class=\"dv-row-value\" id=\"rLType\">\u2014<\/span><\/div>\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Installation type<\/span><span class=\"dv-row-value\" id=\"rLPattern\">\u2014<\/span><\/div>\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Laminate to Purchase Including Waste<\/span><span class=\"dv-row-value\" id=\"rLPurchaseArea\">\u2014<\/span><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"dv-result-card\">\r\n        <div class=\"dv-result-head\"><span class=\"dv-result-icon\">\ud83e\udeb5<\/span><h3>Laminate Material<\/h3><\/div>\r\n        <div class=\"dv-result-body\">\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Laminate price per 1 m\u00b2<\/span><span class=\"dv-row-value\" id=\"rLRate\">\u2014<\/span><\/div>\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Total Material Cost<\/span><span class=\"dv-row-value\" id=\"rLMaterial\">\u2014<\/span><\/div>\r\n          <div class=\"dv-card-total\">Laminate Material: <span id=\"rLMaterialTotal\">\u2014<\/span><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"dv-result-card\">\r\n        <div class=\"dv-result-head\"><span class=\"dv-result-icon\">\ud83e\udde9<\/span><h3>Underlay<\/h3><\/div>\r\n        <div class=\"dv-result-body\">\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Underlay Quantity<\/span><span class=\"dv-row-value\" id=\"rLUnderlayArea\">\u2014<\/span><\/div>\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Underlay Price per 1 m\u00b2<\/span><span class=\"dv-row-value\" id=\"rLUnderlayRate\">\u2014<\/span><\/div>\r\n          <div class=\"dv-card-total\">Underlay: <span id=\"rLUnderlayTotal\">\u2014<\/span><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"dv-result-card\">\r\n        <div class=\"dv-result-head\"><span class=\"dv-result-icon\">\ud83d\udd28<\/span><h3>Laminate Installation<\/h3><\/div>\r\n        <div class=\"dv-result-body\">\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Labor Cost per 1 m\u00b2<\/span><span class=\"dv-row-value\" id=\"rLLaborRate\">\u2014<\/span><\/div>\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Installation Labor<\/span><span class=\"dv-row-value\" id=\"rLLabor\">\u2014<\/span><\/div>\r\n          <div class=\"dv-card-total\">Laminate Installation: <span id=\"rLLaborTotal\">\u2014<\/span><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"dv-result-card\">\r\n        <div class=\"dv-result-head\"><span class=\"dv-result-icon\">\ud83d\udccf<\/span><h3>Skirting Board<\/h3><\/div>\r\n        <div class=\"dv-result-body\">\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Skirting board length<\/span><span class=\"dv-row-value\" id=\"rLPlinthLength\">\u2014<\/span><\/div>\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">PVC Skirting Board Material<\/span><span class=\"dv-row-value\" id=\"rLPlinthMaterial\">\u2014<\/span><\/div>\r\n          <div class=\"dv-row\"><span class=\"dv-row-name\">Skirting Board Installation<\/span><span class=\"dv-row-value\" id=\"rLPlinthLabor\">\u2014<\/span><\/div>\r\n          <div class=\"dv-card-total\">Total Skirting Board Cost: <span id=\"rLPlinthTotal\">\u2014<\/span><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"dv-summary\">\r\n\r\n      <h3 class=\"dv-section-title\">\r\n        <span class=\"dv-section-number\">2<\/span>\r\n        Cost Summary\r\n      <\/h3>\r\n\r\n      <div class=\"dv-summary-grid\">\r\n\r\n        <div class=\"dv-summary-item\">\r\n          <span class=\"dv-summary-label\">Materials<\/span>\r\n          <span class=\"dv-summary-value\" id=\"rLMaterialsSummary\">\u2014<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"dv-summary-item\">\r\n          <span class=\"dv-summary-label\">Labor<\/span>\r\n          <span class=\"dv-summary-value\" id=\"rLLaborSummary\">\u2014<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"dv-summary-item\">\r\n          <span class=\"dv-summary-label\">Skirting Board<\/span>\r\n          <span class=\"dv-summary-value\" id=\"rLPlinthSummary\">\u2014<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"dv-summary-item\">\r\n          <span class=\"dv-summary-label\">Contingency - 5%<\/span>\r\n          <span class=\"dv-summary-value\" id=\"rLContingency\">\u2014<\/span>\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"dv-grand-total\">\r\n        <small>Estimated Total Cost of Laminate Installation<\/small>\r\n        <strong id=\"rLTotal\">\u2014<\/strong>\r\n      <\/div>\r\n\r\n      <button class=\"dv-pdf-button\" id=\"dvLPdf\" type=\"button\">\r\n        \ud83d\udcc4 Download PDF\r\n      <\/button>\r\n\r\n      <div class=\"dv-call-request\" id=\"dvLCallRequest\">\r\n        <h4 class=\"dv-call-request-title\">Would you like a company consultation?<\/h4>\r\n        <p class=\"dv-call-request-text\">\r\n          Request a company call and they will contact you with additional information.\r\n        <\/p>\r\n\r\n        <div class=\"dv-call-request-row\" id=\"dvLCallRow\">\r\n          <input\r\n            class=\"dv-call-phone\"\r\n            id=\"dvLCallPhone\"\r\n            type=\"tel\"\r\n            inputmode=\"tel\"\r\n            autocomplete=\"tel\"\r\n            placeholder=\"e.g. 599123456\"\r\n          >\r\n\r\n          <button\r\n            class=\"dv-request-call-btn\"\r\n            id=\"dvLRequestCall\"\r\n            type=\"button\"\r\n          >\r\n            Request a Company Call\r\n          <\/button>\r\n        <\/div>\r\n\r\n        <div\r\n          class=\"dv-call-request-status\"\r\n          id=\"dvLCallStatus\"\r\n          aria-live=\"polite\"\r\n        ><\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"dv-info-card dv-related\">\r\n      <div class=\"dv-related-grid\">\r\n\r\n        <a class=\"dv-related-link\" href=\"https:\/\/datvale.ge\/en\/flooring-calculators\/\" target=\"_blank\" rel=\"noopener\">\r\n          <span class=\"dv-related-icon\">\ud83c\udfe0<\/span>\r\n          <span class=\"dv-related-text\"><strong>Flooring Calculators<\/strong><small>View other flooring calculators<\/small><\/span>\r\n          <span class=\"dv-related-arrow\">\u2192<\/span>\r\n        <\/a>\r\n\r\n        <a class=\"dv-related-link\" href=\"https:\/\/datvale.ge\/en\/parquet-calculator\/\" target=\"_blank\" rel=\"noopener\">\r\n          <span class=\"dv-related-icon\">\ud83e\udeb5<\/span>\r\n          <span class=\"dv-related-text\"><strong>Parquet Calculator<\/strong><small>Calculate the cost of classic parquet installation<\/small><\/span>\r\n          <span class=\"dv-related-arrow\">\u2192<\/span>\r\n        <\/a>\r\n\r\n        <a class=\"dv-related-link\" href=\"https:\/\/datvale.ge\/en\/renovation-calculator\/\" target=\"_blank\" rel=\"noopener\">\r\n          <span class=\"dv-related-icon\">\ud83d\udee0\ufe0f<\/span>\r\n          <span class=\"dv-related-text\"><strong>Renovation Calculator<\/strong><small>Calculate the estimated total cost of your apartment renovation<\/small><\/span>\r\n          <span class=\"dv-related-arrow\">\u2192<\/span>\r\n        <\/a>\r\n\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n<script src=\"https:\/\/datvale.ge\/wp-content\/uploads\/datvale-assets\/jspdf.umd.min.js\"><\/script>\r\n\r\n<script>\r\n(function(){\r\n\r\n\"use strict\";\r\n\r\nconst root=document.getElementById(\"dv-laminate-calculator\");\r\nif(!root)return;\r\n\r\nconst $=id=>root.querySelector(\"#\"+id);\r\n\r\nconst names={\r\n  type:{\r\n    ac3_8:\"AC3 \/ Class 31 \/ 7-8 mm\",\r\n    ac4_8:\"AC4 \/ Class 32 \/ 8 mm\",\r\n    ac4_10:\"AC4 \/ Class 32 \/ 10 mm\",\r\n    ac5_10:\"AC5 \/ Class 33 \/ 10 mm\",\r\n    ac5_12:\"AC5 \/ Class 33 \/ 12 mm\"\r\n  },\r\n  pattern:{\r\n    straight:\"Straight installation\",\r\n    diagonal:\"Diagonal installation\"\r\n  }\r\n};\r\n\r\nconst laminateRates={\r\n  ac3_8:22.9,\r\n  ac4_8:28.9,\r\n  ac4_10:33.4,\r\n  ac5_10:35.9,\r\n  ac5_12:44.9\r\n};\r\n\r\nconst rates={\r\n  laborStraight:12,\r\n  laborDiagonal:15,\r\n  plinthMaterialPerM:2.4,\r\n  plinthLaborPerM:7,\r\n  contingency:0.05\r\n};\r\n\r\nfunction numberValue(id){\r\n  const value=parseFloat(String($(id).value||\"\").replace(\",\",\".\"));\r\n  return Number.isFinite(value)?value:0;\r\n}\r\n\r\nfunction money(value){\r\n  return new Intl.NumberFormat(\"en-US\",{\r\n    minimumFractionDigits:0,\r\n    maximumFractionDigits:0\r\n  }).format(Math.round(value))+\" \u20be\";\r\n}\r\n\r\nfunction moneyDecimal(value){\r\n  return new Intl.NumberFormat(\"en-US\",{\r\n    minimumFractionDigits:2,\r\n    maximumFractionDigits:2\r\n  }).format(value)+\" \u20be\";\r\n}\r\n\r\nfunction decimal(value,digits){\r\n  return new Intl.NumberFormat(\"en-US\",{\r\n    minimumFractionDigits:digits,\r\n    maximumFractionDigits:digits\r\n  }).format(value);\r\n}\r\n\r\n$(\"dvLType\").addEventListener(\"change\",function(){\r\n  $(\"dvLPrice\").value=laminateRates[this.value].toFixed(1);\r\n});\r\n\r\nlet dvLaminateClickBusy=false;\r\n\r\nfunction showLaminateFreeNextStep(){\r\n  const box=$(\"dvLFreeNextStep\");\r\n\r\n  if(box){\r\n    box.classList.add(\"dv-show\");\r\n  }\r\n}\r\n\r\nfunction openLaminateRegistrationPopup(){\r\n\r\n  const redirect=\r\n    window.location.pathname+\r\n    window.location.search+\r\n    window.location.hash;\r\n\r\n  if(typeof window.openAuthModal===\"function\"){\r\n    window.openAuthModal(\r\n      \"register\",\r\n      redirect\r\n    );\r\n\r\n    return true;\r\n  }\r\n\r\n  const trigger=document.querySelector(\r\n    '.cpdf-auth[data-auth-action=\"register\"]'\r\n  );\r\n\r\n  if(trigger){\r\n    trigger.setAttribute(\r\n      \"data-redirect\",\r\n      redirect\r\n    );\r\n\r\n    trigger.click();\r\n    return true;\r\n  }\r\n\r\n  window.location.href=\r\n    \"\/en\/login\/?redirect_to=\"+\r\n    encodeURIComponent(redirect);\r\n\r\n  return false;\r\n}\r\n\r\nfunction openLaminatePackagePrompt(){\r\n\r\n  if(\r\n    typeof window.jQuery!==\"undefined\" &&\r\n    window.jQuery(\"#membership-modal\").length\r\n  ){\r\n    window.jQuery(\r\n      \"#membership-modal\"\r\n    ).css(\r\n      \"display\",\r\n      \"block\"\r\n    );\r\n\r\n    return true;\r\n  }\r\n\r\n  const trigger=document.querySelector(\r\n    \"#membership-purchase-btn, .membership-purchase-btn, [data-membership-modal]\"\r\n  );\r\n\r\n  if(trigger){\r\n    trigger.click();\r\n    return true;\r\n  }\r\n\r\n  window.location.href=\"\/en\/packages\/\";\r\n  return false;\r\n}\r\n\r\nasync function authorizeLaminateFlow(){\r\n\r\n  if(\r\n    !window.DatvaleHtmlAccess ||\r\n    typeof window.DatvaleHtmlAccess.authorize!==\"function\"\r\n  ){\r\n    alert(\r\n      \"The access system could not be loaded. Refresh the page and try again.\"\r\n    );\r\n\r\n    return{\r\n      allowed:false,\r\n      mode:\"error\"\r\n    };\r\n  }\r\n\r\n  const result=\r\n    await window.DatvaleHtmlAccess.authorize(\r\n      \"laminate\"\r\n    );\r\n\r\n  if(\r\n    result &&\r\n    result.success &&\r\n    result.data &&\r\n    result.data.allowed===true\r\n  ){\r\n    return{\r\n      allowed:true,\r\n      mode:result.data.mode||\"membership\"\r\n    };\r\n  }\r\n\r\n  const data=\r\n    result&&result.data\r\n      ?result.data\r\n      :{};\r\n\r\n  if(data.code===\"login_required\"){\r\n    openLaminateRegistrationPopup();\r\n\r\n    return{\r\n      allowed:false,\r\n      mode:\"login_required\"\r\n    };\r\n  }\r\n\r\n  if(data.code===\"package_required\"){\r\n    openLaminatePackagePrompt();\r\n\r\n    return{\r\n      allowed:false,\r\n      mode:\"package_required\"\r\n    };\r\n  }\r\n\r\n  alert(\r\n    data.message||\r\n    \"Access could not be verified. Please try again.\"\r\n  );\r\n\r\n  return{\r\n    allowed:false,\r\n    mode:\"error\"\r\n  };\r\n}\r\n\r\nasync function claimLaminateFreeCalculation(){\r\n\r\n  if(\r\n    !window.DatvaleHtmlAccess ||\r\n    typeof window.DatvaleHtmlAccess.claimFree!==\"function\"\r\n  ){\r\n    return false;\r\n  }\r\n\r\n  const result=\r\n    await window.DatvaleHtmlAccess.claimFree(\r\n      \"laminate\"\r\n    );\r\n\r\n  return !!(\r\n    result &&\r\n    result.success &&\r\n    result.data &&\r\n    result.data.claimed===true\r\n  );\r\n}\r\n\r\nfunction calculateLaminate(showError){\r\n\r\n  const area=numberValue(\"dvLArea\");\r\n  const type=$(\"dvLType\").value;\r\n  const pattern=$(\"dvLPattern\").value;\r\n  const underlayRate=parseFloat($(\"dvLUnderlay\").value)||0;\r\n  const plinthLength=Math.max(0,numberValue(\"dvLPlinth\"));\r\n  const laminateRate=numberValue(\"dvLPrice\");\r\n\r\n  if(area<5||area>1000||laminateRate<=0){\r\n    $(\"dvLError\").style.display=showError?\"block\":\"none\";\r\n    $(\"dvLOutput\").classList.remove(\"dv-show\");\r\n    return false;\r\n  }\r\n\r\n  $(\"dvLError\").style.display=\"none\";\r\n\r\n  const wasteRate=pattern===\"straight\"?0.05:0.10;\r\n  const purchaseArea=area*(1+wasteRate);\r\n\r\n  const laminateMaterial=purchaseArea*laminateRate;\r\n\r\n  const underlayArea=area*1.05;\r\n  const underlayCost=underlayArea*underlayRate;\r\n\r\n  const laborRate=pattern===\"straight\"?rates.laborStraight:rates.laborDiagonal;\r\n  const laborCost=area*laborRate;\r\n\r\n  const plinthMaterial=plinthLength*rates.plinthMaterialPerM;\r\n  const plinthLabor=plinthLength*rates.plinthLaborPerM;\r\n  const plinthTotal=plinthMaterial+plinthLabor;\r\n\r\n  const materials=laminateMaterial+underlayCost+plinthMaterial;\r\n  const labor=laborCost+plinthLabor;\r\n\r\n  const subtotal=materials+labor;\r\n  const contingency=subtotal*rates.contingency;\r\n  const total=subtotal+contingency;\r\n\r\n  $(\"rLArea\").textContent=decimal(area,0)+\" m\u00b2\";\r\n  $(\"rLType\").textContent=names.type[type];\r\n  $(\"rLPattern\").textContent=names.pattern[pattern];\r\n  $(\"rLPurchaseArea\").textContent=\r\n    decimal(purchaseArea,1)+\" m\u00b2 \u2022 \"+Math.round(wasteRate*100)+\"% allowance\";\r\n\r\n  $(\"rLRate\").textContent=moneyDecimal(laminateRate)+\" \/ m\u00b2\";\r\n  $(\"rLMaterial\").textContent=money(laminateMaterial);\r\n  $(\"rLMaterialTotal\").textContent=money(laminateMaterial);\r\n\r\n  $(\"rLUnderlayArea\").textContent=decimal(underlayArea,1)+\" m\u00b2\";\r\n  $(\"rLUnderlayRate\").textContent=moneyDecimal(underlayRate)+\" \/ m\u00b2\";\r\n  $(\"rLUnderlayTotal\").textContent=money(underlayCost);\r\n\r\n  $(\"rLLaborRate\").textContent=moneyDecimal(laborRate)+\" \/ m\u00b2\";\r\n  $(\"rLLabor\").textContent=money(laborCost);\r\n  $(\"rLLaborTotal\").textContent=money(laborCost);\r\n\r\n  $(\"rLPlinthLength\").textContent=plinthLength>0?decimal(plinthLength,1)+\" linear m\":\"Not specified\";\r\n  $(\"rLPlinthMaterial\").textContent=plinthLength>0?money(plinthMaterial):\"0 \u20be\";\r\n  $(\"rLPlinthLabor\").textContent=plinthLength>0?money(plinthLabor):\"0 \u20be\";\r\n  $(\"rLPlinthTotal\").textContent=money(plinthTotal);\r\n\r\n  $(\"rLMaterialsSummary\").textContent=money(materials);\r\n  $(\"rLLaborSummary\").textContent=money(labor);\r\n  $(\"rLPlinthSummary\").textContent=money(plinthTotal);\r\n  $(\"rLContingency\").textContent=money(contingency);\r\n  $(\"rLTotal\").textContent=money(total);\r\n\r\n  $(\"dvLOutput\").classList.remove(\"dv-show\");\r\n  void $(\"dvLOutput\").offsetWidth;\r\n  $(\"dvLOutput\").classList.add(\"dv-show\");\r\n\r\n  window.setTimeout(function(){\r\n    $(\"dvLOutput\").scrollIntoView({behavior:\"smooth\",block:\"start\"});\r\n  },120);\r\n\r\n  return true;\r\n}\r\n\r\nconst dvLCalculateFreeFlowV2=$(\"dvLCalculateFreeFlowV2\");\r\n\r\nif(dvLCalculateFreeFlowV2){\r\n\r\n  dvLCalculateFreeFlowV2.addEventListener(\"click\",async function(event){\r\n\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    event.stopImmediatePropagation();\r\n\r\n    if(dvLaminateClickBusy)return;\r\n\r\n    dvLaminateClickBusy=true;\r\n\r\n    const button=this;\r\n    const originalText=button.textContent;\r\n\r\n    button.disabled=true;\r\n    button.textContent=\"Checking access...\";\r\n\r\n    try{\r\n\r\n      const access=await authorizeLaminateFlow();\r\n\r\n      if(!access||!access.allowed)return;\r\n\r\n      const success=calculateLaminate(true);\r\n\r\n      if(!success)return;\r\n\r\n      triggerLaminateCompletedSms();\r\n\r\n      if(access.mode===\"free\"){\r\n        const claimed=\r\n          await claimLaminateFreeCalculation();\r\n\r\n        if(claimed){\r\n          showLaminateFreeNextStep();\r\n        }\r\n      }\r\n\r\n    }finally{\r\n\r\n      button.disabled=false;\r\n      button.textContent=originalText;\r\n      dvLaminateClickBusy=false;\r\n    }\r\n\r\n  },true);\r\n\r\n}\r\n\r\nconst dvLCallRequest=$(\"dvLCallRequest\");\r\nconst dvLRequestCall=$(\"dvLRequestCall\");\r\nconst dvLCallPhone=$(\"dvLCallPhone\");\r\nconst dvLCallStatus=$(\"dvLCallStatus\");\r\nconst dvLCallRow=$(\"dvLCallRow\");\r\n\r\nlet dvLCallConfig={\r\n  enabled:false,\r\n  isLoggedIn:false,\r\n  hasSavedPhone:false\r\n};\r\n\r\nfunction laminateAjaxUrl(){\r\n  return(\r\n    window.cpdf_auth &&\r\n    window.cpdf_auth.ajaxurl\r\n  )\r\n    ?window.cpdf_auth.ajaxurl\r\n    :\"\/wp-admin\/admin-ajax.php\";\r\n}\r\n\r\nfunction setLaminateCallStatus(message,type){\r\n  if(!dvLCallStatus)return;\r\n\r\n  dvLCallStatus.textContent=message||\"\";\r\n  dvLCallStatus.classList.remove(\"dv-success\",\"dv-error\");\r\n\r\n  if(type){\r\n    dvLCallStatus.classList.add(\r\n      type===\"success\"?\"dv-success\":\"dv-error\"\r\n    );\r\n  }\r\n}\r\n\r\nfunction syncLaminateCallPhoneVisibility(){\r\n  const useSavedPhone=\r\n    dvLCallConfig.isLoggedIn &&\r\n    dvLCallConfig.hasSavedPhone;\r\n\r\n  if(dvLCallRow){\r\n    dvLCallRow.classList.toggle(\r\n      \"dv-has-saved-phone\",\r\n      useSavedPhone\r\n    );\r\n  }\r\n\r\n  if(dvLCallPhone){\r\n    dvLCallPhone.required=!useSavedPhone;\r\n\r\n    if(useSavedPhone){\r\n      dvLCallPhone.value=\"\";\r\n    }\r\n  }\r\n}\r\n\r\nasync function loadLaminateCallConfig(){\r\n  try{\r\n\r\n    const response=await fetch(\r\n      laminateAjaxUrl()+\r\n      \"?action=gosms_call_request_config&calculator=laminate&_=\"+\r\n      Date.now(),\r\n      {\r\n        method:\"GET\",\r\n        credentials:\"same-origin\",\r\n        cache:\"no-store\"\r\n      }\r\n    );\r\n\r\n    const json=await response.json();\r\n\r\n    if(!json||!json.success||!json.data)return;\r\n\r\n    dvLCallConfig={\r\n      enabled:json.data.enabled===true,\r\n      isLoggedIn:json.data.is_logged_in===true,\r\n      hasSavedPhone:json.data.has_saved_phone===true\r\n    };\r\n\r\n    if(dvLCallRequest){\r\n      dvLCallRequest.style.display=\r\n        dvLCallConfig.enabled?\"block\":\"none\";\r\n    }\r\n\r\n    syncLaminateCallPhoneVisibility();\r\n\r\n  }catch(error){\r\n\r\n    if(dvLCallRequest){\r\n      dvLCallRequest.style.display=\"none\";\r\n    }\r\n  }\r\n}\r\n\r\nasync function requestLaminateCompanyCall(){\r\n\r\n  if(!dvLRequestCall||!dvLCallConfig.enabled)return;\r\n\r\n  const useSavedPhone=\r\n    dvLCallConfig.isLoggedIn &&\r\n    dvLCallConfig.hasSavedPhone;\r\n\r\n  const phone=\r\n    !useSavedPhone&&dvLCallPhone\r\n      ?String(dvLCallPhone.value||\"\").trim()\r\n      :\"\";\r\n\r\n  if(!useSavedPhone&&!phone){\r\n\r\n    setLaminateCallStatus(\r\n      \"Please enter a phone number, e.g. 599123456\",\r\n      \"error\"\r\n    );\r\n\r\n    if(dvLCallPhone){\r\n      dvLCallPhone.focus();\r\n    }\r\n\r\n    return;\r\n  }\r\n\r\n  const originalText=dvLRequestCall.textContent;\r\n\r\n  dvLRequestCall.disabled=true;\r\n  dvLRequestCall.textContent=\"Sending...\";\r\n\r\n  setLaminateCallStatus(\"\",null);\r\n\r\n  try{\r\n\r\n    const body=new URLSearchParams();\r\n\r\n    body.set(\"action\",\"gosms_request_call\");\r\n    body.set(\"calculator\",\"laminate\");\r\n\r\n    if(phone){\r\n      body.set(\"phone\",phone);\r\n    }\r\n\r\n    const response=await fetch(\r\n      laminateAjaxUrl(),\r\n      {\r\n        method:\"POST\",\r\n        credentials:\"same-origin\",\r\n        headers:{\r\n          \"Content-Type\":\"application\/x-www-form-urlencoded; charset=UTF-8\"\r\n        },\r\n        body:body.toString()\r\n      }\r\n    );\r\n\r\n    const json=await response.json();\r\n\r\n    if(json&&json.success){\r\n\r\n      setLaminateCallStatus(\r\n        json.data&&json.data.message\r\n          ?json.data.message\r\n          :\"Your request has been received. You will be contacted soon.\",\r\n        \"success\"\r\n      );\r\n\r\n      return;\r\n    }\r\n\r\n    const data=json&&json.data?json.data:{};\r\n\r\n    if(data&&data.disabled){\r\n\r\n      dvLCallConfig.enabled=false;\r\n\r\n      if(dvLCallRequest){\r\n        dvLCallRequest.style.display=\"none\";\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    if(data&&data.need_phone){\r\n\r\n      dvLCallConfig.hasSavedPhone=false;\r\n\r\n      syncLaminateCallPhoneVisibility();\r\n\r\n      setLaminateCallStatus(\r\n        data.message||\r\n        \"Please enter a phone number.\",\r\n        \"error\"\r\n      );\r\n\r\n      if(dvLCallPhone){\r\n        dvLCallPhone.focus();\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    setLaminateCallStatus(\r\n      data&&data.message\r\n        ?data.message\r\n        :\"The request could not be sent. Please try again.\",\r\n      \"error\"\r\n    );\r\n\r\n  }catch(error){\r\n\r\n    setLaminateCallStatus(\r\n      \"The request could not be sent. Please try again.\",\r\n      \"error\"\r\n    );\r\n\r\n  }finally{\r\n\r\n    dvLRequestCall.disabled=false;\r\n    dvLRequestCall.textContent=originalText;\r\n  }\r\n}\r\n\r\nasync function triggerLaminateCompletedSms(){\r\n\r\n  try{\r\n\r\n    const body=new URLSearchParams();\r\n\r\n    body.set(\r\n      \"action\",\r\n      \"gosms_calculator_completed\"\r\n    );\r\n\r\n    body.set(\r\n      \"calculator\",\r\n      \"laminate\"\r\n    );\r\n\r\n    await fetch(\r\n      laminateAjaxUrl(),\r\n      {\r\n        method:\"POST\",\r\n        credentials:\"same-origin\",\r\n        headers:{\r\n          \"Content-Type\":\"application\/x-www-form-urlencoded; charset=UTF-8\"\r\n        },\r\n        body:body.toString()\r\n      }\r\n    );\r\n\r\n  }catch(error){}\r\n}\r\n\r\nloadLaminateCallConfig();\r\n\r\nif(dvLRequestCall){\r\n  dvLRequestCall.addEventListener(\r\n    \"click\",\r\n    requestLaminateCompanyCall\r\n  );\r\n}\r\n\r\n\/* PDF *\/\r\n$(\"dvLPdf\").addEventListener(\"click\",async function(){\r\n\r\n  if(!$(\"dvLOutput\").classList.contains(\"dv-show\")){\r\n\r\n    const access=await authorizeLaminateFlow();\r\n\r\n    if(!access||!access.allowed)return;\r\n\r\n    const success=calculateLaminate(true);\r\n\r\n    if(!success)return;\r\n\r\n    triggerLaminateCompletedSms();\r\n\r\n    if(access.mode===\"free\"){\r\n\r\n      const claimed=\r\n        await claimLaminateFreeCalculation();\r\n\r\n      if(claimed){\r\n        showLaminateFreeNextStep();\r\n      }\r\n    }\r\n  }\r\n\r\n  const btn=this;\r\n  const old=btn.innerHTML;\r\n\r\n  btn.disabled=true;\r\n  btn.textContent=\"Preparing PDF...\";\r\n\r\n  const jsPDFCtor=\r\n    window.jspdf&&window.jspdf.jsPDF\r\n      ?window.jspdf.jsPDF\r\n      :null;\r\n\r\n  if(!jsPDFCtor){\r\n    btn.disabled=false;\r\n    btn.innerHTML=old;\r\n    alert(\"The jsPDF generator could not be loaded.\");\r\n    return;\r\n  }\r\n\r\n  try{\r\n\r\n    const doc=new jsPDFCtor({\r\n      orientation:\"portrait\",\r\n      unit:\"mm\",\r\n      format:\"a4\",\r\n      compress:true\r\n    });\r\n\r\n    const pageWidth=doc.internal.pageSize.getWidth();\r\n    const pageHeight=doc.internal.pageSize.getHeight();\r\n\r\n    const marginX=14;\r\n    const topMargin=14;\r\n    const bottomMargin=14;\r\n    const contentWidth=pageWidth-marginX*2;\r\n\r\n    let y=topMargin;\r\n\r\n    const blue=[11,58,120];\r\n    const lightBlue=[244,248,253];\r\n    const border=[216,227,239];\r\n\r\n    async function textToPng(text,options){\r\n\r\n      const opts=Object.assign({\r\n        fontSize:18,\r\n        fontWeight:700,\r\n        color:\"#173558\",\r\n        width:800,\r\n        align:\"left\",\r\n        paddingX:4,\r\n        paddingY:2\r\n      },options||{});\r\n\r\n      const canvas=document.createElement(\"canvas\");\r\n      const scale=2;\r\n\r\n      canvas.width=Math.max(20,Math.ceil(opts.width*scale));\r\n      canvas.height=Math.max(28,Math.ceil((opts.fontSize*1.8+opts.paddingY*2)*scale));\r\n\r\n      const ctx=canvas.getContext(\"2d\");\r\n\r\n      ctx.scale(scale,scale);\r\n      ctx.clearRect(0,0,canvas.width\/scale,canvas.height\/scale);\r\n\r\n      ctx.fillStyle=opts.color;\r\n      ctx.font=opts.fontWeight+\" \"+opts.fontSize+'px \"Segoe UI\", Arial, sans-serif';\r\n      ctx.textBaseline=\"middle\";\r\n\r\n      let x=opts.paddingX;\r\n\r\n      if(opts.align===\"center\"){\r\n        ctx.textAlign=\"center\";\r\n        x=opts.width\/2;\r\n      }else if(opts.align===\"right\"){\r\n        ctx.textAlign=\"right\";\r\n        x=opts.width-opts.paddingX;\r\n      }else{\r\n        ctx.textAlign=\"left\";\r\n      }\r\n\r\n      ctx.fillText(\r\n        String(text||\"\"),\r\n        x,\r\n        canvas.height\/scale\/2\r\n      );\r\n\r\n      return{\r\n        data:canvas.toDataURL(\"image\/png\"),\r\n        width:opts.width,\r\n        height:canvas.height\/scale\r\n      };\r\n    }\r\n\r\n    async function addTextImage(text,x,yPos,widthPx,mmWidth,options){\r\n\r\n      const rendered=\r\n        await textToPng(\r\n          text,\r\n          Object.assign(\r\n            {width:widthPx},\r\n            options||{}\r\n          )\r\n        );\r\n\r\n      const mmHeight=\r\n        mmWidth*\r\n        (rendered.height\/rendered.width);\r\n\r\n      doc.addImage(\r\n        rendered.data,\r\n        \"PNG\",\r\n        x,\r\n        yPos,\r\n        mmWidth,\r\n        mmHeight,\r\n        undefined,\r\n        \"FAST\"\r\n      );\r\n\r\n      return mmHeight;\r\n    }\r\n\r\n    function ensureSpace(needed){\r\n\r\n      if(y+needed>pageHeight-bottomMargin){\r\n        doc.addPage();\r\n        y=topMargin;\r\n      }\r\n    }\r\n\r\n    let h=\r\n      await addTextImage(\r\n        \"Laminate Installation Cost Estimate\",\r\n        marginX,\r\n        y,\r\n        900,\r\n        contentWidth,\r\n        {\r\n          fontSize:34,\r\n          fontWeight:800,\r\n          color:\"#0b3a78\",\r\n          align:\"center\"\r\n        }\r\n      );\r\n\r\n    y+=h+2;\r\n\r\n    h=\r\n      await addTextImage(\r\n        \"Datvale.ge\",\r\n        marginX,\r\n        y,\r\n        700,\r\n        contentWidth,\r\n        {\r\n          fontSize:16,\r\n          fontWeight:700,\r\n          color:\"#304a66\",\r\n          align:\"center\"\r\n        }\r\n      );\r\n\r\n    y+=h+7;\r\n\r\n    doc.setFillColor(...blue);\r\n\r\n    doc.roundedRect(\r\n      marginX,\r\n      y,\r\n      contentWidth,\r\n      9,\r\n      2,\r\n      2,\r\n      \"F\"\r\n    );\r\n\r\n    await addTextImage(\r\n      \"Entered Data\",\r\n      marginX+2,\r\n      y+.7,\r\n      850,\r\n      contentWidth-4,\r\n      {\r\n        fontSize:20,\r\n        fontWeight:800,\r\n        color:\"#ffffff\",\r\n        align:\"left\"\r\n      }\r\n    );\r\n\r\n    y+=11;\r\n\r\n    const inputRows=[\r\n      [\"Floor area\",numberValue(\"dvLArea\")+\" m\u00b2\"],\r\n      [\"Laminate type\",names.type[$(\"dvLType\").value]],\r\n      [\"Installation type\",names.pattern[$(\"dvLPattern\").value]],\r\n      [\"Skirting board length\",numberValue(\"dvLPlinth\")+\" linear m\"]\r\n    ];\r\n\r\n    for(const row of inputRows){\r\n\r\n      ensureSpace(14);\r\n\r\n      await addTextImage(\r\n        row[0],\r\n        marginX+3,\r\n        y+.7,\r\n        900,\r\n        contentWidth*.68,\r\n        {\r\n          fontSize:18,\r\n          fontWeight:700,\r\n          color:\"#173558\",\r\n          align:\"left\"\r\n        }\r\n      );\r\n\r\n      await addTextImage(\r\n        row[1],\r\n        marginX+contentWidth*.70,\r\n        y+.7,\r\n        400,\r\n        contentWidth*.27,\r\n        {\r\n          fontSize:18,\r\n          fontWeight:800,\r\n          color:\"#071f39\",\r\n          align:\"right\"\r\n        }\r\n      );\r\n\r\n      doc.setDrawColor(225,233,242);\r\n\r\n      doc.line(\r\n        marginX+3,\r\n        y+9,\r\n        marginX+contentWidth-3,\r\n        y+9\r\n      );\r\n\r\n      y+=12;\r\n    }\r\n\r\n    y+=5;\r\n\r\n    const cards=\r\n      $(\"dvLOutput\")\r\n        .querySelectorAll(\r\n          \".dv-result-card\"\r\n        );\r\n\r\n    for(const card of cards){\r\n\r\n      const title=\r\n        card.querySelector(\r\n          \".dv-result-head h3\"\r\n        );\r\n\r\n      const rows=\r\n        Array.from(\r\n          card.querySelectorAll(\r\n            \".dv-row\"\r\n          )\r\n        );\r\n\r\n      const total=\r\n        card.querySelector(\r\n          \".dv-card-total\"\r\n        );\r\n\r\n      const estimated=\r\n        13+\r\n        rows.length*12+\r\n        (total?13:4);\r\n\r\n      ensureSpace(estimated);\r\n\r\n      doc.setDrawColor(...border);\r\n\r\n      doc.roundedRect(\r\n        marginX,\r\n        y,\r\n        contentWidth,\r\n        estimated,\r\n        2,\r\n        2,\r\n        \"S\"\r\n      );\r\n\r\n      doc.setFillColor(...blue);\r\n\r\n      doc.roundedRect(\r\n        marginX,\r\n        y,\r\n        contentWidth,\r\n        9,\r\n        2,\r\n        2,\r\n        \"F\"\r\n      );\r\n\r\n      await addTextImage(\r\n        title\r\n          ?title.textContent.trim()\r\n          :\"\",\r\n        marginX+2,\r\n        y+.7,\r\n        850,\r\n        contentWidth-4,\r\n        {\r\n          fontSize:20,\r\n          fontWeight:800,\r\n          color:\"#ffffff\",\r\n          align:\"left\"\r\n        }\r\n      );\r\n\r\n      y+=11;\r\n\r\n      for(const row of rows){\r\n\r\n        const n=\r\n          row.querySelector(\r\n            \".dv-row-name\"\r\n          );\r\n\r\n        const v=\r\n          row.querySelector(\r\n            \".dv-row-value\"\r\n          );\r\n\r\n        await addTextImage(\r\n          n\r\n            ?n.textContent.trim()\r\n            :\"\",\r\n          marginX+3,\r\n          y+.7,\r\n          900,\r\n          contentWidth*.68,\r\n          {\r\n            fontSize:18,\r\n            fontWeight:700,\r\n            color:\"#173558\",\r\n            align:\"left\"\r\n          }\r\n        );\r\n\r\n        await addTextImage(\r\n          v\r\n            ?v.textContent.trim()\r\n            :\"\",\r\n          marginX+contentWidth*.70,\r\n          y+.7,\r\n          400,\r\n          contentWidth*.27,\r\n          {\r\n            fontSize:18,\r\n            fontWeight:800,\r\n            color:\"#071f39\",\r\n            align:\"right\"\r\n          }\r\n        );\r\n\r\n        doc.setDrawColor(225,233,242);\r\n\r\n        doc.line(\r\n          marginX+3,\r\n          y+9,\r\n          marginX+contentWidth-3,\r\n          y+9\r\n        );\r\n\r\n        y+=12;\r\n      }\r\n\r\n      if(total){\r\n\r\n        doc.setFillColor(...lightBlue);\r\n        doc.setDrawColor(...border);\r\n\r\n        doc.roundedRect(\r\n          marginX+3,\r\n          y,\r\n          contentWidth-6,\r\n          10,\r\n          1.5,\r\n          1.5,\r\n          \"FD\"\r\n        );\r\n\r\n        await addTextImage(\r\n          total.textContent\r\n            .replace(\/\\s+\/g,\" \")\r\n            .trim(),\r\n          marginX+4,\r\n          y+.8,\r\n          900,\r\n          contentWidth-8,\r\n          {\r\n            fontSize:18,\r\n            fontWeight:800,\r\n            color:\"#071f39\",\r\n            align:\"right\"\r\n          }\r\n        );\r\n\r\n        y+=12;\r\n      }\r\n\r\n      y+=4;\r\n    }\r\n\r\n    ensureSpace(50);\r\n\r\n    await addTextImage(\r\n      \"Cost Summary\",\r\n      marginX,\r\n      y,\r\n      850,\r\n      contentWidth,\r\n      {\r\n        fontSize:23,\r\n        fontWeight:800,\r\n        color:\"#071f39\",\r\n        align:\"left\"\r\n      }\r\n    );\r\n\r\n    y+=12;\r\n\r\n    const items=\r\n      Array.from(\r\n        $(\"dvLOutput\")\r\n          .querySelectorAll(\r\n            \".dv-summary-item\"\r\n          )\r\n      );\r\n\r\n    const gap=3;\r\n    const boxWidth=(contentWidth-gap*3)\/4;\r\n\r\n    for(let i=0;i<items.length;i++){\r\n\r\n      const label=\r\n        items[i].querySelector(\r\n          \".dv-summary-label\"\r\n        );\r\n\r\n      const value=\r\n        items[i].querySelector(\r\n          \".dv-summary-value\"\r\n        );\r\n\r\n      const x=\r\n        marginX+\r\n        i*(boxWidth+gap);\r\n\r\n      doc.setFillColor(...lightBlue);\r\n      doc.setDrawColor(...border);\r\n\r\n      doc.roundedRect(\r\n        x,\r\n        y,\r\n        boxWidth,\r\n        18,\r\n        2,\r\n        2,\r\n        \"FD\"\r\n      );\r\n\r\n      await addTextImage(\r\n        label\r\n          ?label.textContent.trim()\r\n          :\"\",\r\n        x+1.5,\r\n        y+1.5,\r\n        420,\r\n        boxWidth-3,\r\n        {\r\n          fontSize:18,\r\n          fontWeight:800,\r\n          color:\"#071f39\",\r\n          align:\"center\"\r\n        }\r\n      );\r\n\r\n      await addTextImage(\r\n        value\r\n          ?value.textContent.trim()\r\n          :\"\",\r\n        x+1.5,\r\n        y+8.5,\r\n        420,\r\n        boxWidth-3,\r\n        {\r\n          fontSize:18,\r\n          fontWeight:800,\r\n          color:\"#071f39\",\r\n          align:\"center\"\r\n        }\r\n      );\r\n    }\r\n\r\n    y+=21;\r\n\r\n    ensureSpace(25);\r\n\r\n    doc.setFillColor(...blue);\r\n\r\n    doc.roundedRect(\r\n      marginX,\r\n      y,\r\n      contentWidth,\r\n      18,\r\n      2,\r\n      2,\r\n      \"F\"\r\n    );\r\n\r\n    await addTextImage(\r\n      \"Estimated Total Cost of Laminate Installation\",\r\n      marginX+2,\r\n      y+2,\r\n      850,\r\n      contentWidth-4,\r\n      {\r\n        fontSize:13,\r\n        fontWeight:700,\r\n        color:\"#ffffff\",\r\n        align:\"center\"\r\n      }\r\n    );\r\n\r\n    await addTextImage(\r\n      $(\"rLTotal\").textContent.trim(),\r\n      marginX+2,\r\n      y+8,\r\n      850,\r\n      contentWidth-4,\r\n      {\r\n        fontSize:34,\r\n        fontWeight:800,\r\n        color:\"#ffffff\",\r\n        align:\"center\"\r\n      }\r\n    );\r\n\r\n    y+=22;\r\n\r\n    await addTextImage(\r\n      \"Datvale.ge - The calculated amount is an estimated cost.\",\r\n      marginX,\r\n      y,\r\n      850,\r\n      contentWidth,\r\n      {\r\n        fontSize:13,\r\n        fontWeight:600,\r\n        color:\"#425a74\",\r\n        align:\"center\"\r\n      }\r\n    );\r\n\r\n    doc.save(\r\n      \"Datvale-laminate-cost-estimate.pdf\"\r\n    );\r\n\r\n  }catch(error){\r\n\r\n    console.error(\r\n      \"Datvale laminate PDF error:\",\r\n      error\r\n    );\r\n\r\n    alert(\r\n      \"The PDF could not be generated.\"\r\n    );\r\n\r\n  }finally{\r\n\r\n    btn.disabled=false;\r\n    btn.innerHTML=old;\r\n  }\r\n\r\n});\r\n\r\n})();\r\n<\/script>\r\n\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9c73e71 e-flex e-con-boxed e-con e-parent\" data-id=\"9c73e71\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d697ad3 elementor-widget elementor-widget-html\" data-id=\"d697ad3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<a\r\n  href=\"https:\/\/datvale.ge\/en\/property-insurance\/\"\r\n  class=\"dv-property-offer\"\r\n  aria-label=\"Calculate the cost of property insurance\"\r\n>\r\n\r\n  <div class=\"dv-property-offer-copy\">\r\n\r\n    <strong>\r\n      Calculate the cost of property insurance\r\n    <\/strong>\r\n\r\n    <span>\r\n      Get a special offer for your apartment or house\r\n    <\/span>\r\n\r\n  <\/div>\r\n\r\n  <div class=\"dv-property-offer-button\">\r\n    Calculate Price\r\n    <b>\u2192<\/b>\r\n  <\/div>\r\n\r\n<\/a>\r\n\r\n\r\n<style>\r\n\r\n.dv-property-offer,\r\n.dv-property-offer *{\r\n  box-sizing:border-box;\r\n}\r\n\r\n.dv-property-offer{\r\n  position:relative;\r\n  overflow:hidden;\r\n\r\n  width:100%;\r\n\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n\r\n  gap:20px;\r\n\r\n  padding:18px 20px;\r\n\r\n  border:1px solid rgba(110,73,22,.16);\r\n  border-radius:18px;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle at 90% 0%,\r\n      rgba(255,255,255,.88),\r\n      transparent 28%\r\n    ),\r\n    linear-gradient(\r\n      135deg,\r\n      #f4dfb4 0%,\r\n      #d6aa5c 48%,\r\n      #b88132 100%\r\n    );\r\n\r\n  box-shadow:\r\n    0 14px 34px rgba(106,70,19,.20),\r\n    inset 0 1px 0 rgba(255,255,255,.58);\r\n\r\n  text-decoration:none !important;\r\n\r\n  transition:\r\n    transform .22s ease,\r\n    box-shadow .22s ease;\r\n}\r\n\r\n.dv-property-offer::before{\r\n  content:\"\";\r\n\r\n  position:absolute;\r\n  top:-80px;\r\n  right:90px;\r\n\r\n  width:170px;\r\n  height:170px;\r\n\r\n  border-radius:50%;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle,\r\n      rgba(255,255,255,.36),\r\n      transparent 68%\r\n    );\r\n\r\n  pointer-events:none;\r\n}\r\n\r\n.dv-property-offer:hover{\r\n  transform:translateY(-2px);\r\n\r\n  box-shadow:\r\n    0 18px 42px rgba(106,70,19,.27),\r\n    inset 0 1px 0 rgba(255,255,255,.62);\r\n\r\n  text-decoration:none !important;\r\n}\r\n\r\n\r\n.dv-property-offer-copy{\r\n  position:relative;\r\n  z-index:2;\r\n\r\n  min-width:0;\r\n\r\n  display:flex;\r\n  flex-direction:column;\r\n\r\n  gap:4px;\r\n}\r\n\r\n.dv-property-offer-copy strong{\r\n  color:#2e2111;\r\n\r\n  font-size:19px;\r\n  line-height:1.2;\r\n\r\n  font-weight:950;\r\n\r\n  letter-spacing:-.01em;\r\n}\r\n\r\n.dv-property-offer-copy span{\r\n  color:rgba(46,33,17,.78);\r\n\r\n  font-size:13px;\r\n  line-height:1.35;\r\n\r\n  font-weight:700;\r\n}\r\n\r\n\r\n.dv-property-offer-button{\r\n  position:relative;\r\n  z-index:2;\r\n\r\n  flex:0 0 auto;\r\n\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  gap:7px;\r\n\r\n  min-height:46px;\r\n\r\n  padding:11px 16px;\r\n\r\n  border:1px solid rgba(46,33,17,.10);\r\n  border-radius:11px;\r\n\r\n  background:#21170c;\r\n\r\n  color:#ffffff;\r\n\r\n  font-size:13px;\r\n  line-height:1;\r\n\r\n  font-weight:900;\r\n\r\n  white-space:nowrap;\r\n\r\n  box-shadow:\r\n    0 7px 18px rgba(33,23,12,.20);\r\n}\r\n\r\n.dv-property-offer-button b{\r\n  font-size:15px;\r\n  line-height:1;\r\n\r\n  transition:transform .2s ease;\r\n}\r\n\r\n.dv-property-offer:hover\r\n.dv-property-offer-button b{\r\n  transform:translateX(2px);\r\n}\r\n\r\n\r\n\/* TABLET *\/\r\n\r\n@media(max-width:900px){\r\n\r\n  .dv-property-offer{\r\n    padding:16px 17px;\r\n\r\n    border-radius:15px;\r\n  }\r\n\r\n  .dv-property-offer-copy strong{\r\n    font-size:17px;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* MOBILE *\/\r\n\r\n@media(max-width:600px){\r\n\r\n  .dv-property-offer{\r\n    gap:10px;\r\n\r\n    padding:12px;\r\n\r\n    border-radius:13px;\r\n  }\r\n\r\n  .dv-property-offer-copy{\r\n    gap:2px;\r\n  }\r\n\r\n  .dv-property-offer-copy strong{\r\n    font-size:14px;\r\n    line-height:1.2;\r\n  }\r\n\r\n  .dv-property-offer-copy span{\r\n    font-size:10.5px;\r\n    line-height:1.25;\r\n  }\r\n\r\n  .dv-property-offer-button{\r\n    min-height:37px;\r\n\r\n    padding:8px 10px;\r\n\r\n    border-radius:8px;\r\n\r\n    font-size:10.5px;\r\n  }\r\n\r\n  .dv-property-offer-button b{\r\n    font-size:12px;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* SMALL MOBILE *\/\r\n\r\n@media(max-width:380px){\r\n\r\n  .dv-property-offer{\r\n    gap:8px;\r\n\r\n    padding:10px;\r\n  }\r\n\r\n  .dv-property-offer-copy strong{\r\n    font-size:13px;\r\n  }\r\n\r\n  .dv-property-offer-copy span{\r\n    font-size:9.5px;\r\n  }\r\n\r\n  .dv-property-offer-button{\r\n    padding:7px 8px;\r\n\r\n    font-size:10px;\r\n  }\r\n\r\n}\r\n\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-63fe7a7 e-flex e-con-boxed e-con e-parent\" data-id=\"63fe7a7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d0fa1af elementor-widget elementor-widget-html\" data-id=\"d0fa1af\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<section class=\"dv-partners\">\r\n\r\n  <div class=\"dv-partners-head\">\r\n\r\n    <span>DATVALE.GE PARTNERS<\/span>\r\n\r\n    <h2>Special Offers<\/h2>\r\n\r\n    <p>\r\n      Take advantage of special offers from Datvale partner companies\r\n      for renovation, construction and interior projects.\r\n    <\/p>\r\n\r\n  <\/div>\r\n\r\n\r\n  <div class=\"dv-partners-grid\">\r\n\r\n\r\n    <!-- NEW LIGHT -->\r\n\r\n    <article class=\"dv-card\">\r\n\r\n      <div class=\"dv-logo\">\r\n\r\n        <img decoding=\"async\"\r\n          src=\"https:\/\/datvale.ge\/wp-content\/uploads\/2025\/06\/dbd6fc01-a56b-490f-b2a5-59f3445fe63a.jpg\"\r\n          alt=\"New Light\"\r\n          loading=\"lazy\"\r\n        >\r\n\r\n        <span class=\"dv-badge\">\r\n          -15%\r\n        <\/span>\r\n\r\n      <\/div>\r\n\r\n\r\n      <button\r\n        class=\"dv-toggle\"\r\n        type=\"button\"\r\n        aria-expanded=\"false\"\r\n      >\r\n        View Offer\r\n      <\/button>\r\n\r\n\r\n      <div class=\"dv-details\">\r\n\r\n        <h3>New Light<\/h3>\r\n\r\n\r\n        <div class=\"dv-type\">\r\n          Lighting Store\r\n        <\/div>\r\n\r\n\r\n        <p>\r\n          A wide selection of international lighting brands, including\r\n          Philips, Eglo, Artemide, Luceplan, Vibia, Osram and more.\r\n        <\/p>\r\n\r\n\r\n        <div class=\"dv-links\">\r\n\r\n          <a href=\"https:\/\/newlight.ge\/\" target=\"_blank\" rel=\"noopener\">\r\n            newlight.ge\r\n          <\/a>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n    <\/article>\r\n\r\n\r\n\r\n    <!-- NOVA -->\r\n\r\n    <article class=\"dv-card\">\r\n\r\n      <div class=\"dv-logo\">\r\n\r\n        <img decoding=\"async\"\r\n          src=\"https:\/\/datvale.ge\/wp-content\/uploads\/2025\/08\/\u10da\u10dd\u10d2\u10dd\u10d4\u10d1\u10d8-26-2.png\"\r\n          alt=\"Nova\"\r\n          loading=\"lazy\"\r\n        >\r\n\r\n        <span class=\"dv-badge\">\r\n          Up to 20%\r\n        <\/span>\r\n\r\n      <\/div>\r\n\r\n\r\n      <button\r\n        class=\"dv-toggle\"\r\n        type=\"button\"\r\n        aria-expanded=\"false\"\r\n      >\r\n        View Offer\r\n      <\/button>\r\n\r\n\r\n      <div class=\"dv-details\">\r\n\r\n        <h3>Nova<\/h3>\r\n\r\n\r\n        <div class=\"dv-type\">\r\n          Construction & Renovation Hypermarket\r\n        <\/div>\r\n\r\n\r\n        <p>\r\n          A wide range of construction and renovation products,\r\n          including own-brand manufacturing and international brands\r\n          for renovation and construction projects.\r\n        <\/p>\r\n\r\n\r\n        <div class=\"dv-links\">\r\n\r\n          <a href=\"https:\/\/nova.ge\/\" target=\"_blank\" rel=\"noopener\">\r\n            nova.ge\r\n          <\/a>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n    <\/article>\r\n\r\n\r\n\r\n    <!-- VITRA -->\r\n\r\n    <article class=\"dv-card\">\r\n\r\n      <div class=\"dv-logo\">\r\n\r\n        <img decoding=\"async\"\r\n          src=\"https:\/\/datvale.ge\/wp-content\/uploads\/2025\/06\/\u10da\u10dd\u10d2\u10dd\u10d4\u10d1\u10d8-28.png\"\r\n          alt=\"VitrA Georgia\"\r\n          loading=\"lazy\"\r\n        >\r\n\r\n        <span class=\"dv-badge\">\r\n          -15%\r\n        <\/span>\r\n\r\n      <\/div>\r\n\r\n\r\n      <button\r\n        class=\"dv-toggle\"\r\n        type=\"button\"\r\n        aria-expanded=\"false\"\r\n      >\r\n        View Offer\r\n      <\/button>\r\n\r\n\r\n      <div class=\"dv-details\">\r\n\r\n        <h3>VitrA Georgia<\/h3>\r\n\r\n\r\n        <div class=\"dv-type\">\r\n          Sanitary Ware & Ceramic Tiles\r\n        <\/div>\r\n\r\n\r\n        <p>\r\n          A wide selection of bathroom sanitary ware and ceramic tiles\r\n          for creating a modern and functional bathroom.\r\n        <\/p>\r\n\r\n\r\n        <div class=\"dv-links\">\r\n\r\n          <a href=\"https:\/\/vitra.com.ge\/ka\/\" target=\"_blank\" rel=\"noopener\">\r\n            vitra.com.ge\r\n          <\/a>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n    <\/article>\r\n\r\n\r\n\r\n    <!-- CAPAROL -->\r\n\r\n    <article class=\"dv-card\">\r\n\r\n      <div class=\"dv-logo\">\r\n\r\n        <img decoding=\"async\"\r\n          src=\"https:\/\/datvale.ge\/wp-content\/uploads\/2025\/10\/24.09.2025-33.png\"\r\n          alt=\"Caparol\"\r\n          loading=\"lazy\"\r\n        >\r\n\r\n        <span class=\"dv-badge\">\r\n          -10%\r\n        <\/span>\r\n\r\n      <\/div>\r\n\r\n\r\n      <button\r\n        class=\"dv-toggle\"\r\n        type=\"button\"\r\n        aria-expanded=\"false\"\r\n      >\r\n        View Offer\r\n      <\/button>\r\n\r\n\r\n      <div class=\"dv-details\">\r\n\r\n        <h3>Caparol<\/h3>\r\n\r\n\r\n        <div class=\"dv-type\">\r\n          Paints & Finishing Materials\r\n        <\/div>\r\n\r\n\r\n        <p>\r\n          An international brand of interior and facade paints,\r\n          decorative coatings and finishing materials.\r\n        <\/p>\r\n\r\n\r\n        <div class=\"dv-address\">\r\n\r\n          <span>\r\n            Tbilisi \u2014 8 Petre Kavtaradze St. \u2022 599 44 55 67\r\n          <\/span>\r\n\r\n          <span>\r\n            Tbilisi \u2014 15 Samtredia St. \u2022 599 58 26 25\r\n          <\/span>\r\n\r\n          <span>\r\n            Batumi \u2014 35 Pushkin St. \u2022 558 04 04 96\r\n          <\/span>\r\n\r\n        <\/div>\r\n\r\n\r\n        <div class=\"dv-links\">\r\n\r\n          <a href=\"https:\/\/caparol.ge\" target=\"_blank\" rel=\"noopener\">\r\n            caparol.ge\r\n          <\/a>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n    <\/article>\r\n\r\n\r\n  <\/div>\r\n\r\n\r\n  <!-- ALL PARTNERS -->\r\n\r\n  <div class=\"dv-all-partners\">\r\n\r\n    <a href=\"https:\/\/datvale.ge\/en\/partners\/\">\r\n      All Partners\r\n    <\/a>\r\n\r\n  <\/div>\r\n\r\n<\/section>\r\n\r\n\r\n<style>\r\n\r\n.dv-partners,\r\n.dv-partners *{\r\n  box-sizing:border-box;\r\n}\r\n\r\n\r\n.dv-partners{\r\n  --blue:#0b4187;\r\n  --blue2:#176bc5;\r\n  --text:#173a61;\r\n  --muted:#65788c;\r\n  --border:#e1e9f2;\r\n  --light:#f7faff;\r\n\r\n  width:100%;\r\n  max-width:1200px;\r\n\r\n  margin:40px auto;\r\n  padding:0 15px;\r\n\r\n  font-family:\r\n    system-ui,\r\n    -apple-system,\r\n    BlinkMacSystemFont,\r\n    \"Segoe UI\",\r\n    sans-serif;\r\n}\r\n\r\n\r\n\/* HEADER *\/\r\n\r\n.dv-partners-head{\r\n  max-width:760px;\r\n\r\n  margin:0 auto 28px;\r\n\r\n  text-align:center;\r\n}\r\n\r\n\r\n.dv-partners-head > span{\r\n  display:block;\r\n\r\n  margin-bottom:7px;\r\n\r\n  color:var(--blue2);\r\n\r\n  font-size:12px;\r\n  font-weight:900;\r\n  letter-spacing:.08em;\r\n}\r\n\r\n\r\n.dv-partners-head h2{\r\n  margin:0 0 9px;\r\n\r\n  color:var(--text);\r\n\r\n  font-size:clamp(27px,4vw,38px);\r\n  line-height:1.15;\r\n  font-weight:950;\r\n}\r\n\r\n\r\n.dv-partners-head p{\r\n  margin:0;\r\n\r\n  color:var(--muted);\r\n\r\n  font-size:15px;\r\n  line-height:1.6;\r\n}\r\n\r\n\r\n\/* GRID *\/\r\n\r\n.dv-partners-grid{\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    repeat(4,minmax(0,1fr));\r\n\r\n  gap:16px;\r\n\r\n  align-items:start;\r\n}\r\n\r\n\r\n\/* CARD *\/\r\n\r\n.dv-card{\r\n  position:relative;\r\n\r\n  width:100%;\r\n  height:220px;\r\n\r\n  overflow:hidden;\r\n\r\n  border:\r\n    1px solid var(--border);\r\n\r\n  border-radius:20px;\r\n\r\n  background:#fff;\r\n\r\n  box-shadow:\r\n    0 8px 28px rgba(27,61,98,.08);\r\n\r\n  transition:\r\n    transform .22s ease,\r\n    box-shadow .22s ease,\r\n    border-color .22s ease;\r\n}\r\n\r\n\r\n.dv-card:hover{\r\n  transform:translateY(-3px);\r\n\r\n  border-color:#cfdeed;\r\n\r\n  box-shadow:\r\n    0 15px 36px rgba(27,61,98,.13);\r\n}\r\n\r\n\r\n.dv-card.dv-open{\r\n  height:auto;\r\n  overflow:visible;\r\n}\r\n\r\n\r\n\/* LOGO *\/\r\n\r\n.dv-logo{\r\n  position:relative;\r\n\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  width:100%;\r\n  height:158px;\r\n\r\n  padding:20px;\r\n\r\n  background:#fff;\r\n}\r\n\r\n\r\n.dv-logo img{\r\n  display:block;\r\n\r\n  width:auto;\r\n  height:auto;\r\n\r\n  max-width:100%;\r\n  max-height:105px;\r\n\r\n  object-fit:contain;\r\n}\r\n\r\n\r\n\/* BADGE *\/\r\n\r\n.dv-badge{\r\n  position:absolute;\r\n\r\n  top:12px;\r\n  right:12px;\r\n\r\n  z-index:2;\r\n\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  min-height:31px;\r\n\r\n  padding:6px 10px;\r\n\r\n  border-radius:100px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      135deg,\r\n      var(--blue),\r\n      var(--blue2)\r\n    );\r\n\r\n  color:#fff;\r\n\r\n  font-size:11px;\r\n  line-height:1;\r\n  font-weight:950;\r\n\r\n  box-shadow:\r\n    0 6px 15px rgba(11,65,135,.23);\r\n}\r\n\r\n\r\n\/* BUTTON *\/\r\n\r\n.dv-toggle{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  width:calc(100% - 28px);\r\n  height:46px;\r\n\r\n  margin:0 14px 16px;\r\n\r\n  padding:10px 12px;\r\n\r\n  border:0;\r\n\r\n  border-radius:12px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      135deg,\r\n      var(--blue),\r\n      var(--blue2)\r\n    );\r\n\r\n  color:#fff;\r\n\r\n  font:inherit;\r\n\r\n  font-size:13px;\r\n  font-weight:900;\r\n\r\n  cursor:pointer;\r\n\r\n  box-shadow:\r\n    0 7px 18px rgba(11,65,135,.18);\r\n\r\n  transition:\r\n    transform .2s ease,\r\n    box-shadow .2s ease,\r\n    background .2s ease;\r\n}\r\n\r\n\r\n.dv-toggle:hover{\r\n  transform:translateY(-1px);\r\n\r\n  box-shadow:\r\n    0 10px 23px rgba(11,65,135,.25);\r\n}\r\n\r\n\r\n\/* DETAILS *\/\r\n\r\n.dv-details{\r\n  display:none;\r\n\r\n  padding:18px;\r\n\r\n  border-top:\r\n    1px solid var(--border);\r\n\r\n  background:var(--light);\r\n}\r\n\r\n\r\n.dv-card.dv-open .dv-details{\r\n  display:block;\r\n}\r\n\r\n\r\n\/* OPEN BUTTON *\/\r\n\r\n.dv-card.dv-open .dv-toggle{\r\n  margin-bottom:14px;\r\n\r\n  background:#eaf2fb;\r\n\r\n  color:var(--blue);\r\n\r\n  box-shadow:none;\r\n}\r\n\r\n\r\n\/* NAME *\/\r\n\r\n.dv-details h3{\r\n  margin:0 0 7px;\r\n\r\n  color:var(--text);\r\n\r\n  font-size:18px;\r\n  line-height:1.3;\r\n  font-weight:950;\r\n}\r\n\r\n\r\n\/* TYPE *\/\r\n\r\n.dv-type{\r\n  display:inline-block;\r\n\r\n  margin-bottom:12px;\r\n\r\n  padding:5px 9px;\r\n\r\n  border-radius:7px;\r\n\r\n  background:#e8f1fb;\r\n\r\n  color:var(--blue);\r\n\r\n  font-size:11px;\r\n  line-height:1.35;\r\n  font-weight:850;\r\n}\r\n\r\n\r\n\/* DESCRIPTION *\/\r\n\r\n.dv-details p{\r\n  margin:0;\r\n\r\n  color:#49637d;\r\n\r\n  font-size:13px;\r\n  line-height:1.62;\r\n}\r\n\r\n\r\n\/* LINKS *\/\r\n\r\n.dv-links{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n\r\n  gap:8px;\r\n\r\n  margin-top:14px;\r\n}\r\n\r\n\r\n.dv-links a{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  flex:1 1 auto;\r\n\r\n  min-height:40px;\r\n\r\n  padding:9px 12px;\r\n\r\n  border:\r\n    1px solid #d2dfed;\r\n\r\n  border-radius:10px;\r\n\r\n  background:#fff;\r\n\r\n  color:\r\n    var(--blue)!important;\r\n\r\n  font-size:12px;\r\n  font-weight:900;\r\n\r\n  text-decoration:none!important;\r\n\r\n  transition:\r\n    background .2s ease,\r\n    border-color .2s ease;\r\n}\r\n\r\n\r\n.dv-links a:hover{\r\n  background:#edf5fd;\r\n\r\n  border-color:#bcd2e8;\r\n}\r\n\r\n\r\n\/* CAPAROL ADDRESSES *\/\r\n\r\n.dv-address{\r\n  display:flex;\r\n  flex-direction:column;\r\n\r\n  gap:6px;\r\n\r\n  margin-top:13px;\r\n}\r\n\r\n\r\n.dv-address span{\r\n  display:block;\r\n\r\n  padding:8px 10px;\r\n\r\n  border:\r\n    1px solid #e2eaf3;\r\n\r\n  border-radius:9px;\r\n\r\n  background:#fff;\r\n\r\n  color:#526a82;\r\n\r\n  font-size:11px;\r\n  line-height:1.45;\r\n}\r\n\r\n\r\n\/* ALL PARTNERS BUTTON *\/\r\n\r\n.dv-all-partners{\r\n  display:flex;\r\n  justify-content:center;\r\n\r\n  margin-top:22px;\r\n}\r\n\r\n\r\n.dv-all-partners a{\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  min-height:46px;\r\n\r\n  padding:10px 22px;\r\n\r\n  border-radius:12px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      135deg,\r\n      var(--blue),\r\n      var(--blue2)\r\n    );\r\n\r\n  color:#fff!important;\r\n\r\n  font-size:13px;\r\n  font-weight:900;\r\n\r\n  text-decoration:none!important;\r\n\r\n  box-shadow:\r\n    0 7px 18px rgba(11,65,135,.18);\r\n\r\n  transition:\r\n    transform .2s ease,\r\n    box-shadow .2s ease;\r\n}\r\n\r\n\r\n.dv-all-partners a:hover{\r\n  transform:translateY(-1px);\r\n\r\n  box-shadow:\r\n    0 10px 23px rgba(11,65,135,.25);\r\n}\r\n\r\n\r\n\/* TABLET *\/\r\n\r\n@media(max-width:950px){\r\n\r\n  .dv-partners-grid{\r\n    grid-template-columns:\r\n      repeat(2,minmax(0,1fr));\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* MOBILE *\/\r\n\r\n@media(max-width:700px){\r\n\r\n  .dv-partners{\r\n    margin:28px auto;\r\n\r\n    padding:0 9px;\r\n  }\r\n\r\n\r\n  .dv-partners-head{\r\n    margin-bottom:20px;\r\n  }\r\n\r\n\r\n  .dv-partners-head p{\r\n    font-size:14px;\r\n  }\r\n\r\n\r\n  .dv-partners-grid{\r\n    grid-template-columns:\r\n      repeat(2,minmax(0,1fr));\r\n\r\n    gap:10px;\r\n  }\r\n\r\n\r\n  .dv-card{\r\n    height:174px;\r\n\r\n    border-radius:15px;\r\n  }\r\n\r\n\r\n  .dv-logo{\r\n    height:120px;\r\n\r\n    padding:12px;\r\n  }\r\n\r\n\r\n  .dv-logo img{\r\n    max-height:82px;\r\n  }\r\n\r\n\r\n  .dv-badge{\r\n    top:7px;\r\n    right:7px;\r\n\r\n    min-height:25px;\r\n\r\n    padding:5px 7px;\r\n\r\n    font-size:9px;\r\n  }\r\n\r\n\r\n  .dv-toggle{\r\n    width:calc(100% - 16px);\r\n    height:40px;\r\n\r\n    margin:0 8px 14px;\r\n\r\n    padding:7px;\r\n\r\n    border-radius:9px;\r\n\r\n    font-size:10.5px;\r\n  }\r\n\r\n\r\n  .dv-details{\r\n    padding:14px 11px;\r\n  }\r\n\r\n\r\n  .dv-details h3{\r\n    font-size:16px;\r\n  }\r\n\r\n\r\n  .dv-type{\r\n    margin-bottom:10px;\r\n\r\n    font-size:10px;\r\n  }\r\n\r\n\r\n  .dv-details p{\r\n    font-size:11.5px;\r\n\r\n    line-height:1.6;\r\n  }\r\n\r\n\r\n  .dv-links{\r\n    flex-direction:column;\r\n  }\r\n\r\n\r\n  .dv-links a{\r\n    width:100%;\r\n  }\r\n\r\n\r\n  .dv-address span{\r\n    font-size:10.5px;\r\n  }\r\n\r\n\r\n  .dv-all-partners{\r\n    margin-top:18px;\r\n  }\r\n\r\n\r\n  .dv-all-partners a{\r\n    min-height:42px;\r\n\r\n    padding:9px 18px;\r\n\r\n    font-size:11px;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* VERY SMALL MOBILE *\/\r\n\r\n@media(max-width:340px){\r\n\r\n  .dv-partners-grid{\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<script>\r\n\r\n(function(){\r\n\r\n  const section =\r\n    document.querySelector('.dv-partners');\r\n\r\n\r\n  if(!section){\r\n    return;\r\n  }\r\n\r\n\r\n  const buttons =\r\n    section.querySelectorAll('.dv-toggle');\r\n\r\n\r\n  buttons.forEach(function(button){\r\n\r\n    button.addEventListener(\r\n      'click',\r\n      function(){\r\n\r\n        const card =\r\n          button.closest('.dv-card');\r\n\r\n\r\n        const isOpen =\r\n          card.classList.contains('dv-open');\r\n\r\n\r\n        \/*\r\n         * Close all open cards\r\n         *\/\r\n\r\n        section\r\n          .querySelectorAll('.dv-card.dv-open')\r\n          .forEach(function(openCard){\r\n\r\n            openCard\r\n              .classList\r\n              .remove('dv-open');\r\n\r\n\r\n            const openButton =\r\n              openCard.querySelector('.dv-toggle');\r\n\r\n\r\n            if(openButton){\r\n\r\n              openButton.textContent =\r\n                'View Offer';\r\n\r\n\r\n              openButton.setAttribute(\r\n                'aria-expanded',\r\n                'false'\r\n              );\r\n\r\n            }\r\n\r\n          });\r\n\r\n\r\n        \/*\r\n         * Open the selected card\r\n         *\/\r\n\r\n        if(!isOpen){\r\n\r\n          card\r\n            .classList\r\n            .add('dv-open');\r\n\r\n\r\n          button.textContent =\r\n            'Close Offer';\r\n\r\n\r\n          button.setAttribute(\r\n            'aria-expanded',\r\n            'true'\r\n          );\r\n\r\n        }\r\n\r\n      }\r\n    );\r\n\r\n  });\r\n\r\n})();\r\n\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f88d446 e-flex e-con-boxed e-con e-parent\" data-id=\"f88d446\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bd3acfa elementor-widget elementor-widget-text-editor\" data-id=\"bd3acfa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Laminate Installation and Cost<\/h2>\n<p><strong>Laminate installation<\/strong> is one of the most popular flooring solutions for residential and commercial spaces. The final cost depends on the floor area, selected material, laminate class and thickness, underlay, skirting boards, and installation method.<\/p>\n<p>The <strong>price of laminate<\/strong> can vary significantly depending on quality, durability class, and design. Datvale\u2019s Laminate Calculator allows you to estimate in advance the required amount of material, labor costs, and additional materials.<\/p>\n<h2>Laminate Installation Cost<\/h2>\n<p>The <strong>cost of laminate installation<\/strong> includes more than just labor. To calculate the full budget, you should consider the laminate itself, underlay, skirting boards, material waste, and installation work.<\/p>\n<p>With straight installation, material waste is usually relatively low. Diagonal or more complex installation may require additional material and can also increase labor costs.<\/p>\n<p>The calculator automatically estimates the total approximate cost based on these details.<\/p>\n<h2>Laminate Price<\/h2>\n<p>The <strong>price of laminate<\/strong> depends on its class, thickness, manufacturer, surface quality, and intended use.<\/p>\n<p>Different laminate classes are designed for different levels of traffic and wear. A mid-range product may be sufficient for residential spaces, while rooms with heavier use may benefit from a more durable material.<\/p>\n<p>More expensive <strong>laminate flooring<\/strong> is not always necessary, so it is important to consider the specific purpose of the room when making your choice.<\/p>\n<h2>Laminate Class and Thickness<\/h2>\n<p>One of the key factors when choosing laminate is its class and thickness.<\/p>\n<p>Higher-class <strong>laminate flooring<\/strong> is generally designed for more intensive use. Thickness can affect floor rigidity, stability, and in some cases noise reduction.<\/p>\n<p>In the calculator, you can choose the appropriate laminate type and enter its price so that the final estimate matches your selected product as closely as possible.<\/p>\n<h2>How Much Laminate Do I Need?<\/h2>\n<p>To determine the required amount of material, you first need to know the total floor area.<\/p>\n<p>In practice, <strong>laminate installation<\/strong> always involves some material waste. Laminate may need to be cut around walls, corners, doorways, and other complex areas.<\/p>\n<p>For this reason, the required amount should not exactly match the room area. The calculator includes an additional allowance depending on the selected installation method.<\/p>\n<h2>Straight and Diagonal Laminate Installation<\/h2>\n<p><strong>Laminate installation<\/strong> can be done in different directions.<\/p>\n<p>Straight installation is the most common option and usually results in less material waste.<\/p>\n<p>Diagonal installation creates a different visual effect but requires more cutting and labor. As a result, the <strong>cost of laminate installation<\/strong> may be higher.<\/p>\n<p>Once you select the installation method in the calculator, this difference is automatically reflected in the result.<\/p>\n<h2>Underlay for Laminate Flooring<\/h2>\n<p>Using a suitable underlay beneath laminate flooring is important for helping with minor surface irregularities, reducing noise, and improving installation conditions.<\/p>\n<p>Underlay types and prices vary. The right choice depends on the subfloor, the room\u2019s purpose, and the desired quality level.<\/p>\n<p>A complete <strong>flooring installation<\/strong> should be planned with an appropriately selected underlay.<\/p>\n<h2>Skirting Board Cost<\/h2>\n<p>After laminate installation is complete, skirting boards are usually installed around the perimeter of the room.<\/p>\n<p>The cost of skirting boards depends on the room perimeter, material type, and installation price.<\/p>\n<p>For this reason, the <strong>price of laminate<\/strong> alone does not determine the total flooring budget. Skirting boards should also be included in the full cost estimate.<\/p>\n<h2>Flooring Installation and Subfloor Preparation<\/h2>\n<p>High-quality <strong>flooring installation<\/strong> starts with a properly prepared subfloor.<\/p>\n<p>The surface should be sufficiently level, solid, and dry. If the subfloor has significant irregularities, additional leveling work may be required before laminate installation.<\/p>\n<p>Laminate installed on an uneven base may begin to move, make noise, or develop damaged joints over time.<\/p>\n<h2>What Affects the Final Laminate Cost?<\/h2>\n<p>The final cost is mainly influenced by:<\/p>\n<ul>\n<li>floor area<\/li>\n<li><strong>laminate price<\/strong><\/li>\n<li>laminate class and thickness<\/li>\n<li>installation method<\/li>\n<li>underlay type<\/li>\n<li>quantity of skirting boards<\/li>\n<li>labor cost<\/li>\n<li>additional material allowance<\/li>\n<\/ul>\n<p>Changes in these factors can significantly affect the <strong>cost of laminate installation<\/strong>.<\/p>\n<h2>How to Use the Laminate Calculator<\/h2>\n<p>First, enter the total floor area. Then select the preferred <strong>laminate flooring<\/strong>, including its class and thickness.<\/p>\n<p>Next, choose the installation method and underlay, and enter the required skirting board length.<\/p>\n<p>The calculator will automatically estimate the required amount of laminate, underlay, skirting boards, labor, and other related costs.<\/p>\n<p>The result will help you estimate the <strong>cost of laminate installation<\/strong> in advance and plan your complete <strong>flooring installation<\/strong> budget more accurately.<\/p>\n<p>Follow us on <a href=\"http:\/\/facebook.com\/datvale.ge\">Facebook<\/a> and <a href=\"http:\/\/youtube.com\/@datvale\" target=\"_blank\" rel=\"noopener\">YouTube<\/a>.<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e01cf74 e-flex e-con-boxed e-con e-parent\" data-id=\"e01cf74\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8c0a617 elementor-widget elementor-widget-html\" data-id=\"8c0a617\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2>Frequently Asked Questions About Laminate Installation<\/h2>\r\n\r\n<h3>How much does laminate installation cost?<\/h3>\r\n<p>\r\nThe cost of laminate installation depends on the floor area, installation pattern,\r\nlabor cost, and additional materials. To estimate the total cost,\r\nyou can use the Laminate Calculator.\r\n<\/p>\r\n\r\n<h3>How much laminate do I need for a 20 m\u00b2 room?<\/h3>\r\n<p>\r\nThe required amount depends on the installation method and material waste.\r\nUsually, you should allow for slightly more material than the exact floor area of the room.\r\n<\/p>\r\n\r\n<h3>Is underlay necessary under laminate flooring?<\/h3>\r\n<p>\r\nUnderlay is used in most laminate flooring installations.\r\nThe type of underlay should be selected according to the subfloor and the laminate manufacturer\u2019s requirements.\r\n<\/p>\r\n\r\n<h3>Which is more expensive, straight or diagonal installation?<\/h3>\r\n<p>\r\nDiagonal installation usually requires more cutting, results in more material waste,\r\nand involves more labor, so the final cost may be higher.\r\n<\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0db17a2 e-flex e-con-boxed e-con e-parent\" data-id=\"0db17a2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e827af2 elementor-widget elementor-widget-html\" data-id=\"e827af2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2>Laminate Care After Installation<\/h2>\r\n\r\n<p>\r\nProper laminate care is important for maintaining the appearance of the surface\r\nand ensuring long-term use. After installation, pay attention to\r\nmoisture levels, proper cleaning, and the use of suitable cleaning products.\r\nFor detailed guidance, see\r\nlaminate care and floor cleaning recommendations.\r\n<\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7522c0a e-flex e-con-boxed e-con e-parent\" data-id=\"7522c0a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-29f3615 elementor-widget elementor-widget-image\" data-id=\"29f3615\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/datvale.ge\/wp-content\/uploads\/2026\/09\/laminatis-kalkulatori-1024x341.webp\" class=\"attachment-large size-large wp-image-21833\" alt=\"Laminate Installation\" srcset=\"https:\/\/datvale.ge\/wp-content\/uploads\/2026\/09\/laminatis-kalkulatori-1024x341.webp 1024w, https:\/\/datvale.ge\/wp-content\/uploads\/2026\/09\/laminatis-kalkulatori-300x100.webp 300w, https:\/\/datvale.ge\/wp-content\/uploads\/2026\/09\/laminatis-kalkulatori-768x256.webp 768w, https:\/\/datvale.ge\/wp-content\/uploads\/2026\/09\/laminatis-kalkulatori.webp 1100w, https:\/\/datvale.ge\/wp-content\/uploads\/2026\/09\/laminatis-kalkulatori-600x200.webp 600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\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>Laminate Installation Cost 2026 \u2013 Laminate Calculator Select the main laminate details Floor area m\u00b2 Laminate type AC3 \/ Class 31 \/ 7-8 mmAC4 \/ Class 32 \/ 8 mmAC4 \/ Class 32 \/ 10 mmAC5 \/ Class 33 \/ 10 mmAC5 \/ Class 33 \/ 12 mm Installation type Straight installationDiagonal installation Underlay 2&#8230;<\/p>\n","protected":false},"author":67,"featured_media":0,"parent":0,"menu_order":14,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-21834","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/datvale.ge\/en\/wp-json\/wp\/v2\/pages\/21834","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datvale.ge\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/datvale.ge\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/datvale.ge\/en\/wp-json\/wp\/v2\/users\/67"}],"replies":[{"embeddable":true,"href":"https:\/\/datvale.ge\/en\/wp-json\/wp\/v2\/comments?post=21834"}],"version-history":[{"count":1,"href":"https:\/\/datvale.ge\/en\/wp-json\/wp\/v2\/pages\/21834\/revisions"}],"predecessor-version":[{"id":22108,"href":"https:\/\/datvale.ge\/en\/wp-json\/wp\/v2\/pages\/21834\/revisions\/22108"}],"wp:attachment":[{"href":"https:\/\/datvale.ge\/en\/wp-json\/wp\/v2\/media?parent=21834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}