{"id":5121,"date":"2026-05-04T18:56:47","date_gmt":"2026-05-04T16:56:47","guid":{"rendered":"https:\/\/reschemindustries.com\/?page_id=5121"},"modified":"2026-09-14T15:33:31","modified_gmt":"2026-09-14T13:33:31","slug":"docet","status":"publish","type":"page","link":"https:\/\/reschemindustries.com\/en\/companies\/docet\/","title":{"rendered":"Docet"},"content":{"rendered":"<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/05\/reschem-industries-docet.webp\" alt=\"\"><\/p>\n<h1>Docet S.r.l. Chemical consulting <br class=\"uk-visible@m\">for construction and tailor made formulation development<\/h1>\n<div><span class=\"uk-badge uk-badge-docet\">Formulation Consulting<\/span><br \/>\n<span class=\"uk-badge uk-badge-docet\">Industrial Chemistry<\/span><br \/>\n<span class=\"uk-badge uk-badge-docet\">Construction Chemistry<\/span><\/div>\n<p>[arrow-down]<br \/>\n<img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/05\/reschem-industries-docet-visual.jpg\" alt=\"\"><\/p>\n<h2><strong class=\"text-docet\">Docet<\/strong> is the Reschem Industries Group company specialising in <strong class=\"text-docet\">chemical consulting<\/strong> and the development of <strong class=\"text-docet\">tailor made<\/strong> chemical products.<\/h2>\n<div>\n<p>Docet&#8217;s chemical consulting is dedicated to industrial sectors and construction chemistry, with an approach built on formulation focus, formulation innovation and technical commitment to every client. <\/p>\n<\/div>\n<hr>\n<div>Docet&#8217;s identity is built on three pillars<\/div>\n<ul>\n<li>\n<p>        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/05\/background-docet.jpg\" alt=\"\"><\/p>\n<h3>Formulation Focus<\/h3>\n<div>The ability to study and develop the right product for every application<\/div>\n<\/li>\n<li>\n<p>        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/05\/background-docet.jpg\" alt=\"\"><\/p>\n<h3>Formulation innovation<\/h3>\n<div>From laboratory research to fine-tuning the production process<\/div>\n<\/li>\n<li>\n<p>        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/05\/background-docet.jpg\" alt=\"\"><\/p>\n<h3>Technical support<\/h3>\n<div>On every project, both in Italy and abroad<\/div>\n<\/li>\n<\/ul>\n<h2>Docet S.r.l.<\/h2>\n<h3>Developing <br \/><strong>tailor made<\/strong> chemical products<\/h3>\n<hr>\n<ul>\n<li>\n<p>        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/05\/docet-icon-white.svg\" alt=\"\"><\/p>\n<div>Chemical consulting<\/div>\n<div>We work alongside our clients in product research, raw material analysis and defining the most suitable technical solution. Docet&#8217;s chemical consulting is the first step of every project.<\/div>\n<\/li>\n<li>\n<p>        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/05\/docet-icon-white.svg\" alt=\"\"><\/p>\n<div>Tailor made chemical formulation development<\/div>\n<div>\n<p>We create bespoke chemical formulations, built around the specific needs of each client and their market. Developing tailor made chemical products is how we respond to the most complex technical challenges.<\/p>\n<\/div>\n<\/li>\n<li>\n<p>        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/05\/docet-icon-white.svg\" alt=\"\"><\/p>\n<div>Formulation innovation<\/div>\n<div>Formulation innovation is our method: exploring new combinations, assessing alternative raw materials and proposing solutions that improve performance and sustainability.<\/div>\n<\/li>\n<li>\n<p>        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/05\/docet-icon-white.svg\" alt=\"\"><\/p>\n<div>Construction chemistry<\/div>\n<div>We develop bespoke chemical formulations for products in the construction chemicals industry. Our construction chemistry consulting helps manufacturers and applicators create products that perform better and are more durable and sustainable.<\/div>\n<\/li>\n<\/ul>\n<div>\n<h3><strong class=\"text-docet\">Docet chemical consulting<\/strong> and tailor made chemical product development serve:<\/h3>\n<p><a href=\"\/en\/contact\">Contact us<\/a><\/p>\n<\/div>\n<div>\n<div id=\"wp-globe-wrapper\" >\n<div id=\"globe-canvas-container\"><\/div>\n<p>    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/r134\/three.min.js\"><\/script><br \/>\n    <script>\n        (function() {\n            function inRange(val, min, max) { return val >= min ? val <= max : false; }\n\n            function isItaly(lat, lon) {\n                if (!inRange(lat, 36, 47.5)) return false;\n                if (!inRange(lon, 6.5, 18.5)) return false;\n                if (inRange(lat, 38.5, 41.5)) { if (inRange(lon, 8, 10)) return true; }\n                if (inRange(lat, 36, 38.5))   { if (inRange(lon, 12, 15.7)) return true; }\n                if (inRange(lat, 38.5, 40.5)) { if (inRange(lon, 15.5, 18.5)) return true; }\n                if (inRange(lat, 40.5, 43.5)) { if (inRange(lon, 13.5, 17.5)) return true; }\n                if (inRange(lat, 43.5, 44.5)) { if (inRange(lon, 10.5, 14.5)) return true; }\n                if (inRange(lat, 44.5, 47.5)) { if (inRange(lon, 6.5, 14)) return true; }\n                return false;\n            }\n\n            function initGlobe() {\n                if (typeof THREE === 'undefined') { setTimeout(initGlobe, 100); return; }\n\n                var COLOR_ACCENT = 0xff6600;\n                var COLOR_DOTS   = 0xd8d8d8;\n                var COLOR_NET    = 0x000000;\n\n                var ARC_POINTS    = 80;\n                var ARC_DURATION  = 900;\n                var ARC_PAUSE     = 150;\n                var ARC_HOLD      = 1800;\n                var FADE_DUR      = 500;\n                var DOT_SCALE_DUR = 300;\n\n                var MAP_URL = 'https:\/\/raw.githubusercontent.com\/mrdoob\/three.js\/master\/examples\/textures\/planets\/earth_atmos_2048.jpg';\n\n                var container = document.getElementById('globe-canvas-container');\n                if (!container) return;\n\n                var W = container.clientWidth, H = container.clientHeight;\n                var scene  = new THREE.Scene();\n                var camera = new THREE.PerspectiveCamera(45, W \/ H, 0.1, 1000);\n                camera.position.z = 17;\n\n                var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n                renderer.setSize(W, H);\n                renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n                container.appendChild(renderer.domElement);\n\n                var mainGroup = new THREE.Group();\n                scene.add(mainGroup);\n                mainGroup.rotation.y = 3.5;    \/\/ <<< Italia spostata a sinistra nel layout reale\n                mainGroup.rotation.x = 0.50;\n\n                function getCircleTexture() {\n                    var c = document.createElement('canvas');\n                    c.width = 32; c.height = 32;\n                    var ctx = c.getContext('2d');\n                    ctx.beginPath();\n                    ctx.arc(16, 16, 15, 0, 2 * Math.PI);\n                    ctx.fillStyle = 'rgb(255,255,255)';\n                    ctx.fill();\n                    var tex = new THREE.Texture(c);\n                    tex.needsUpdate = true;\n                    return tex;\n                }\n                var circleTex = getCircleTexture();\n\n                function easeOutBack(t) {\n                    var c1 = 1.70158;\n                    var c3 = c1 + 1;\n                    return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n                }\n\n                function latLonToVec3(lat, lon, r) {\n                    var phi   = (90 - lat) * (Math.PI \/ 180);\n                    var theta = (lon + 180) * (Math.PI \/ 180);\n                    return new THREE.Vector3(\n                        -(r * Math.sin(phi) * Math.cos(theta)),\n                        r * Math.cos(phi),\n                        r * Math.sin(phi) * Math.sin(theta)\n                    );\n                }\n\n                function buildArcPoints(startLat, startLon, endLat, endLon) {\n                    var R     = 5.05;\n                    var start = latLonToVec3(startLat, startLon, R);\n                    var end   = latLonToVec3(endLat, endLon, R);\n                    var mid   = new THREE.Vector3().addVectors(start, end).multiplyScalar(0.5);\n                    var dist  = start.distanceTo(end);\n                    mid.normalize().multiplyScalar(5 + dist * 0.45 + 0.5);\n                    var pts = [];\n                    for (var i = 0; i <= ARC_POINTS; i++) {\n                        var t = i \/ ARC_POINTS;\n                        pts.push(new THREE.Vector3(\n                            (1-t)*(1-t)*start.x + 2*(1-t)*t*mid.x + t*t*end.x,\n                            (1-t)*(1-t)*start.y + 2*(1-t)*t*mid.y + t*t*end.y,\n                            (1-t)*(1-t)*start.z + 2*(1-t)*t*mid.z + t*t*end.z\n                        ));\n                    }\n                    return pts;\n                }\n\n                var oLat = 41.9, oLon = 12.5;\n                var destinations = [\n                    [40.7, -74.0], [51.5, -0.12], [35.7, 139.7],\n                    [-23.5, -46.6], [1.3, 103.8], [25.2, 55.3],\n                    [19.4, -99.1], [-33.9, 18.4], [37.6, 55.8], [30.0, 31.2]\n                ];\n\n                var arcData   = [];\n                var arcLines  = [];\n                var dotMeshes = [];\n\n                var originDot = new THREE.Mesh(\n                    new THREE.SphereGeometry(0.09, 8, 8),\n                    new THREE.MeshBasicMaterial({ color: COLOR_ACCENT })\n                );\n                originDot.position.copy(latLonToVec3(oLat, oLon, 5.05));\n                mainGroup.add(originDot);\n\n                function buildArcLines() {\n                    arcLines.forEach(function(l) { mainGroup.remove(l); });\n                    dotMeshes.forEach(function(d) { mainGroup.remove(d); });\n                    arcLines  = [];\n                    dotMeshes = [];\n                    arcData   = [];\n\n                    destinations.forEach(function(d) {\n                        var pts = buildArcPoints(oLat, oLon, d[0], d[1]);\n                        var geo = new THREE.BufferGeometry().setFromPoints(pts);\n                        geo.setDrawRange(0, 0);\n                        var mat = new THREE.LineBasicMaterial({\n                            color: COLOR_ACCENT, transparent: true, opacity: 0.9, linewidth: 2\n                        });\n                        var line = new THREE.Line(geo, mat);\n                        mainGroup.add(line);\n                        arcLines.push(line);\n\n                        var dot = new THREE.Mesh(\n                            new THREE.SphereGeometry(0.09, 8, 8),\n                            new THREE.MeshBasicMaterial({ color: COLOR_ACCENT, transparent: true, opacity: 0 })\n                        );\n                        dot.position.copy(latLonToVec3(d[0], d[1], 5.05));\n                        dot.scale.set(0, 0, 0);\n                        mainGroup.add(dot);\n                        dotMeshes.push(dot);\n\n                        arcData.push({ pts: pts, geo: geo, drawn: 0, dotShown: false, dotStartTime: -1 });\n                    });\n                }\n\n                var animState = {\n                    phase: 'drawing',\n                    currentArc: 0,\n                    arcStartTime: 0,\n                    holdStartTime: 0,\n                    fadeStartTime: 0\n                };\n\n                function resetAnimation(now) {\n                    buildArcLines();\n                    animState.phase        = 'drawing';\n                    animState.currentArc   = 0;\n                    animState.arcStartTime = now;\n                }\n\n                function updateArcs(now) {\n                    var s = animState;\n\n                    arcData.forEach(function(ad, i) {\n                        if (ad.dotStartTime > 0) {\n                            var dp = (now - ad.dotStartTime) \/ DOT_SCALE_DUR;\n                            if (dp > 1) { dp = 1; }\n                            var sc = easeOutBack(dp);\n                            dotMeshes[i].scale.set(sc, sc, sc);\n                            dotMeshes[i].material.opacity = dp;\n                        }\n                    });<\/p>\n<p>                    if (s.phase === 'drawing') {\n                        var idx = s.currentArc;\n                        if (idx >= arcData.length) {\n                            s.phase = 'holding';\n                            s.holdStartTime = now;\n                            return;\n                        }\n                        var ad      = arcData[idx];\n                        var elapsed = now - s.arcStartTime;\n                        var prog    = elapsed \/ ARC_DURATION;\n                        if (prog > 1) { prog = 1; }<\/p>\n<p>                        var targetCount = Math.round(prog * (ARC_POINTS + 1));\n                        if (targetCount !== ad.drawn) {\n                            ad.drawn = targetCount;\n                            ad.geo.setDrawRange(0, targetCount);\n                        }<\/p>\n<p>                        if (prog >= 1) {\n                            if (!ad.dotShown) {\n                                ad.dotShown     = true;\n                                ad.dotStartTime = now;\n                            }\n                            if (elapsed >= ARC_DURATION + ARC_PAUSE) {\n                                s.currentArc++;\n                                s.arcStartTime = now;\n                            }\n                        }\n                    }<\/p>\n<p>                    if (s.phase === 'holding') {\n                        if (now - s.holdStartTime >= ARC_HOLD) {\n                            s.phase = 'fading';\n                            s.fadeStartTime = now;\n                        }\n                    }<\/p>\n<p>                    if (s.phase === 'fading') {\n                        var fp = (now - s.fadeStartTime) \/ FADE_DUR;\n                        if (fp > 1) { fp = 1; }\n                        var op = 1 - fp;\n                        arcLines.forEach(function(l) { l.material.opacity = op * 0.9; });\n                        dotMeshes.forEach(function(dm) { dm.material.opacity = op; });\n                        if (fp >= 1) { resetAnimation(now); }\n                    }\n                }<\/p>\n<p>                function createInnerGlobe(image) {\n                    var canvas = document.createElement('canvas');\n                    canvas.width  = image.width;\n                    canvas.height = image.height;\n                    var ctx = canvas.getContext('2d');\n                    ctx.drawImage(image, 0, 0);\n                    var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n                    var data    = imgData.data;<\/p>\n<p>                    var positions = [], colors = [];\n                    var colBase  = new THREE.Color(COLOR_DOTS);\n                    var colItaly = new THREE.Color(COLOR_ACCENT);<\/p>\n<p>                    for (var y = 0; y < canvas.height; y++) {\n                        for (var x = 0; x < canvas.width; x++) {\n                            var lat   = (1 - y \/ canvas.height) * 180 - 90;\n                            var lon   = (x \/ canvas.width) * 360 - 180;\n                            var italy = isItaly(lat, lon);\n                            if (!italy) {\n                                if (y % 4 !== 0) continue;\n                                if (x % 4 !== 0) continue;\n                            }\n                            var idx2 = (y * canvas.width + x) * 4;\n                            if (data[idx2] < 50) continue;\n                            var phi   = (90 - lat) * (Math.PI \/ 180);\n                            var theta = (lon + 180) * (Math.PI \/ 180);\n                            positions.push(\n                                -(5 * Math.sin(phi) * Math.cos(theta)),\n                                5 * Math.cos(phi),\n                                5 * Math.sin(phi) * Math.sin(theta)\n                            );\n                            var col = italy ? colItaly : colBase;\n                            colors.push(col.r, col.g, col.b);\n                        }\n                    }\n\n                    var geo = new THREE.BufferGeometry();\n                    geo.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3));\n                    geo.setAttribute('color',    new THREE.Float32BufferAttribute(colors, 3));\n                    mainGroup.add(new THREE.Points(geo, new THREE.PointsMaterial({\n                        size: 0.028, vertexColors: true, map: circleTex,\n                        transparent: true, opacity: 1.0, sizeAttenuation: true\n                    })));\n\n                    buildArcLines();\n                    animState.arcStartTime = performance.now();\n                }\n\n                function createOuterNetwork() {\n                    var geo = new THREE.IcosahedronGeometry(6, 2);\n                    var wf  = new THREE.WireframeGeometry(geo);\n                    mainGroup.add(new THREE.LineSegments(wf, new THREE.LineBasicMaterial({\n                        color: COLOR_NET, transparent: true, opacity: 0.12\n                    })));\n                    var pos = geo.attributes.position.array;\n                    var dg  = new THREE.BufferGeometry();\n                    dg.setAttribute('position', new THREE.BufferAttribute(pos, 3));\n                    mainGroup.add(new THREE.Points(dg, new THREE.PointsMaterial({\n                        color: COLOR_NET, size: 0.05, map: circleTex,\n                        transparent: true, opacity: 0.35\n                    })));\n                }\n\n                var loader = new THREE.ImageLoader();\n                loader.setCrossOrigin('Anonymous');\n                loader.load(MAP_URL, function(img) {\n                    createInnerGlobe(img);\n                    createOuterNetwork();\n                });\n\n                var isDragging = false, prevX = 0, prevY = 0, velX = 0, velY = 0;\n                container.addEventListener('mousedown', function(e) {\n                    isDragging = true; prevX = e.clientX; prevY = e.clientY;\n                    velX = 0; velY = 0; container.style.cursor = 'grabbing';\n                });\n                window.addEventListener('mousemove', function(e) {\n                    if (!isDragging) return;\n                    var dx = e.clientX - prevX, dy = e.clientY - prevY;\n                    mainGroup.rotation.y += dx * 0.006;\n                    mainGroup.rotation.x += dy * 0.006;\n                    velY = dx * 0.006; velX = dy * 0.006;\n                    prevX = e.clientX; prevY = e.clientY;\n                });\n                window.addEventListener('mouseup', function() {\n                    isDragging = false; container.style.cursor = 'grab';\n                });\n                container.addEventListener('touchstart', function(e) {\n                    isDragging = true; prevX = e.touches[0].clientX; prevY = e.touches[0].clientY;\n                    velX = 0; velY = 0;\n                }, {passive: true});\n                window.addEventListener('touchmove', function(e) {\n                    if (!isDragging) return;\n                    var dx = e.touches[0].clientX - prevX, dy = e.touches[0].clientY - prevY;\n                    mainGroup.rotation.y += dx * 0.006;\n                    mainGroup.rotation.x += dy * 0.006;\n                    velY = dx * 0.006; velX = dy * 0.006;\n                    prevX = e.touches[0].clientX; prevY = e.touches[0].clientY;\n                }, {passive: true});\n                window.addEventListener('touchend', function() { isDragging = false; });\n\n                function animate() {\n                    requestAnimationFrame(animate);\n                    updateArcs(performance.now());\n                    if (!isDragging) {\n                        mainGroup.rotation.y += velY;\n                        mainGroup.rotation.x += velX;\n                        velY *= 0.94; velX *= 0.94;\n                        if (Math.abs(velY) < 0.0005) {\n                            if (Math.abs(velX) < 0.0005) {\n                                mainGroup.rotation.y += 0.0008;\n                            }\n                        }\n                    }\n                    renderer.render(scene, camera);\n                }\n                animate();\n\n                window.addEventListener('resize', function() {\n                    var w = container.clientWidth, h = container.clientHeight;\n                    camera.aspect = w \/ h; camera.updateProjectionMatrix();\n                    renderer.setSize(w, h);\n                });\n            }\n\n            if (document.readyState === 'complete') { initGlobe(); }\n            else { window.addEventListener('load', initGlobe); }\n        })();\n    <\/script>\n<\/div>\n<\/div>\n<div>\n<h3><strong class=\"text-docet\">Docet chemical consulting<\/strong> and tailor made chemical product development serve:<\/h3>\n<p><a href=\"\/en\/contact\">Contact us<\/a><\/p>\n<\/div>\n<div>\n<h3><span class=\"uk-text-uppercase\">Industrial sectors with special applications<\/span><\/h3>\n<\/div>\n<div>\n<h3><span class=\"uk-text-uppercase\">Construction chemistry and building chemicals<\/span><\/h3>\n<\/div>\n<div>\n<h3><span class=\"uk-text-uppercase\">Companies that need bespoke chemical formulations<\/span><\/h3>\n<\/div>\n<div>\n<p>        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/05\/reschem-industries-docet.webp\" alt=\"\"><\/p>\n<div>Do you have a tailor made chemical product development project, or are you looking for chemical consulting<br \/>\nfor construction chemistry? Docet is the partner you need.<\/div>\n<p><a href=\"https:\/\/docet.srl\/\"><span uk-icon=\"link\"><\/span> Visit the Docet website <\/a><\/p>\n<\/div>\n<div>\n<h2>Contact us<\/h2>\n<div>\n<p>Would you like more information <br class=\"uk-visible@m\" \/>about our Company and our Services? <br class=\"uk-visible@m\" \/>Get in touch.<\/p>\n<\/div>\n<p><a href=\"\/en\/contact\/\">Request information<\/a><\/p>\n<\/div>\n<p><!--more--><br \/>\n<!-- {\"type\":\"layout\",\"children\":[{\"type\":\"section\",\"props\":{\"animation\":\"slide-bottom-medium\",\"animation_delay\":\"200\",\"header_transparent\":true,\"header_transparent_noplaceholder\":false,\"image\":\"wp-content\/uploads\/2026\/05\/reschem-industries-docet-gradient.jpg\",\"image_effect\":\"fixed\",\"image_position\":\"center-center\",\"image_size\":\"cover\",\"media_overlay\":\"rgba(0, 0, 0, 0.4)\",\"padding_bottom\":\"none\",\"padding_remove_horizontal\":false,\"padding_top\":\"large\",\"style\":\"secondary\",\"title_breakpoint\":\"xl\",\"title_position\":\"top-left\",\"title_rotation\":\"left\",\"vertical_align\":\"middle\",\"width\":\"large\",\"width_expand\":\"right\"},\"children\":[{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"breadcrumbs\",\"props\":{\"margin_bottom\":\"medium\",\"show_current\":true,\"show_home\":true}},{\"type\":\"image\",\"props\":{\"image\":\"wp-content\/uploads\/2026\/05\/reschem-industries-docet.webp\",\"image_svg_color\":\"emphasis\",\"image_width\":300,\"margin_bottom\":\"default\",\"margin_top\":\"default\"},\"name\":\"Company logo\"},{\"type\":\"headline\",\"props\":{\"content\":\"Docet S.r.l. Chemical consulting <br class=\\\"uk-visible@m\\\">for construction and tailor made formulation development\",\"image_align\":\"left\",\"image_margin\":\"xsmall\",\"margin_remove_top\":true,\"maxwidth\":\"2xlarge\",\"title_element\":\"h1\",\"title_style\":\"h2\"},\"name\":\"h1\"},{\"type\":\"text\",\"props\":{\"column_breakpoint\":\"m\",\"content\":\"<span class=\\\"uk-badge uk-badge-docet\\\">Formulation Consulting<\/span> \\n<span class=\\\"uk-badge uk-badge-docet\\\">Industrial Chemistry<\/span> \\n<span class=\\\"uk-badge uk-badge-docet\\\">Construction Chemistry<\/span>\",\"margin_bottom\":\"medium\",\"margin_top\":\"default\"}}]}],\"props\":{\"margin_bottom\":\"large\",\"padding_remove_horizontal\":false}},{\"type\":\"row\",\"props\":{\"layout\":\"1-5,4-5\",\"margin_bottom\":\"remove\"},\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\",\"width_medium\":\"1-5\"},\"children\":[{\"type\":\"icon\",\"props\":{\"icon\":\"arrow-down\",\"icon_width\":\"30\",\"margin_bottom\":\"default\",\"margin_top\":\"default\",\"parallax_y\":\"200\",\"position\":\"relative\"}}]},{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\",\"width_medium\":\"4-5\"},\"children\":[{\"type\":\"image\",\"props\":{\"animation\":\"parallax\",\"image\":\"wp-content\/uploads\/2026\/05\/reschem-industries-docet-visual.jpg\",\"image_svg_color\":\"emphasis\",\"image_width\":1500,\"margin\":\"default\",\"margin_bottom\":\"remove\",\"margin_top\":\"default\",\"parallax_y\":\"-200\"}}]}]}],\"name\":\"heading\"},{\"type\":\"section\",\"props\":{\"animation\":\"slide-bottom-medium\",\"animation_delay\":\"200\",\"background_color_gradient\":\"linear-gradient(0deg,rgba(21, 31, 109, 1) 0%, rgba(255, 255, 255, 1) 30%);\",\"image_position\":\"center-center\",\"overlap\":false,\"padding\":\"large\",\"padding_remove_top\":false,\"padding_top\":\"large\",\"preserve_color\":false,\"style\":\"default\",\"title_breakpoint\":\"xl\",\"title_position\":\"top-left\",\"title_rotation\":\"left\",\"vertical_align\":\"middle\",\"width\":\"default\"},\"children\":[{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"headline\",\"props\":{\"content\":\"<strong class=\\\"text-docet\\\">Docet<\/strong> is the Reschem Industries Group company specialising in <strong class=\\\"text-docet\\\">chemical consulting<\/strong> and the development of <strong class=\\\"text-docet\\\">tailor made<\/strong> chemical products.\",\"image_align\":\"left\",\"image_margin\":\"xsmall\",\"margin_bottom\":\"medium\",\"text_align\":\"center\",\"title_color\":\"primary\",\"title_element\":\"h2\",\"title_style\":\"h1\"},\"name\":\"h2\"},{\"type\":\"text\",\"props\":{\"column_breakpoint\":\"m\",\"content\":\"\n\n<p>Docet's chemical consulting is dedicated to industrial sectors and construction chemistry, with an approach built on formulation focus, formulation innovation and technical commitment to every client. <\/p>\n\n\",\"margin\":\"default\",\"margin_bottom\":\"medium\",\"margin_top\":\"default\",\"text_align\":\"center\"}},{\"type\":\"divider\",\"props\":{\"divider_element\":\"hr\",\"divider_style\":\"icon\"}},{\"type\":\"headline\",\"props\":{\"content\":\"Docet's identity is built on three pillars\",\"image_align\":\"left\",\"image_margin\":\"xsmall\",\"margin_bottom\":\"large\",\"margin_top\":\"default\",\"text_align\":\"center\",\"title_element\":\"div\",\"title_style\":\"h3\"}},{\"type\":\"gallery\",\"props\":{\"filter_align\":\"left\",\"filter_all\":true,\"filter_grid_breakpoint\":\"m\",\"filter_grid_width\":\"auto\",\"filter_position\":\"top\",\"filter_style\":\"tab\",\"grid_column_gap\":\"small\",\"grid_default\":\"1\",\"grid_medium\":\"3\",\"grid_parallax\":\"100\",\"grid_row_gap\":\"small\",\"grid_small\":\"2\",\"image_border\":\"rounded\",\"image_box_shadow\":\"large\",\"image_expand\":false,\"image_height\":768,\"image_width\":1024,\"item_animation\":true,\"lightbox_bg_close\":true,\"link_style\":\"default\",\"link_text\":\"Read more\",\"margin_bottom\":\"default\",\"margin_top\":\"default\",\"media_overlay\":\"rgba(0, 0, 0, 0.3)\",\"meta_align\":\"below-title\",\"meta_element\":\"div\",\"meta_style\":\"text-meta\",\"overlay_hover\":false,\"overlay_link\":false,\"overlay_mode\":\"cover\",\"overlay_position\":\"bottom-left\",\"overlay_style\":\"\",\"overlay_transition\":\"fade\",\"show_content\":true,\"show_hover_image\":true,\"show_hover_video\":true,\"show_link\":true,\"show_meta\":true,\"show_title\":true,\"text_align\":\"left\",\"text_color\":\"light\",\"title_element\":\"h3\",\"title_hover_style\":\"reset\",\"title_margin_auto\":true,\"title_style\":\"h3\"},\"children\":[{\"type\":\"gallery_item\",\"props\":{\"content\":\"The ability to study and develop the right product for every application\",\"image\":\"wp-content\/uploads\/2026\/05\/background-docet.jpg\",\"title\":\"Formulation Focus\"}},{\"type\":\"gallery_item\",\"props\":{\"content\":\"From laboratory research to fine-tuning the production process\",\"image\":\"wp-content\/uploads\/2026\/05\/background-docet.jpg\",\"title\":\"Formulation innovation\"}},{\"type\":\"gallery_item\",\"props\":{\"content\":\"On every project, both in Italy and abroad\",\"image\":\"wp-content\/uploads\/2026\/05\/background-docet.jpg\",\"title\":\"Technical support\"}}]}]}]}],\"name\":\"Intro\"},{\"type\":\"section\",\"props\":{\"animation\":\"slide-bottom-medium\",\"animation_delay\":\"200\",\"id\":\"why-choose-us\",\"image_position\":\"center-center\",\"padding_bottom\":\"large\",\"padding_remove_horizontal\":false,\"padding_top\":\"large\",\"style\":\"primary\",\"title_breakpoint\":\"xl\",\"title_position\":\"top-left\",\"title_rotation\":\"left\",\"vertical_align\":\"middle\",\"width\":\"large\"},\"children\":[{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"headline\",\"props\":{\"class\":\"text-docet\",\"content\":\"Docet S.r.l.\",\"image_align\":\"left\",\"image_margin\":\"xsmall\",\"margin_bottom\":\"small\",\"text_align\":\"left\",\"title_element\":\"h2\",\"title_style\":\"text-meta\"}},{\"type\":\"headline\",\"props\":{\"class\":\"uk-text-uppercase\",\"content\":\"Developing <br \/><strong>tailor made<\/strong> chemical products\",\"image_align\":\"left\",\"image_margin\":\"xsmall\",\"margin_top\":\"small\",\"text_align\":\"left\",\"title_element\":\"h3\",\"title_style\":\"heading-medium\"}},{\"type\":\"divider\",\"props\":{\"divider_element\":\"hr\",\"margin_top\":\"medium\"}}]}],\"props\":{\"margin_bottom\":\"large\"}},{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"grid\",\"props\":{\"content_align\":false,\"content_column_breakpoint\":\"m\",\"content_dropcap\":false,\"content_margin_auto\":false,\"filter_align\":\"left\",\"filter_all\":true,\"filter_grid_breakpoint\":\"m\",\"filter_grid_width\":\"auto\",\"filter_position\":\"top\",\"filter_style\":\"tab\",\"grid_column_align\":false,\"grid_column_gap\":\"large\",\"grid_default\":\"1\",\"grid_divider\":false,\"grid_medium\":\"2\",\"grid_row_align\":false,\"grid_row_gap\":\"large\",\"grid_small\":\"2\",\"image_align\":\"top\",\"image_grid_breakpoint\":\"m\",\"image_grid_width\":\"1-2\",\"image_svg_color\":\"emphasis\",\"image_width\":40,\"item_animation\":true,\"lightbox_bg_close\":true,\"link_style\":\"default\",\"link_text\":\"Read more\",\"margin_bottom\":\"large\",\"margin_top\":\"default\",\"meta_align\":\"below-title\",\"meta_element\":\"div\",\"meta_style\":\"text-meta\",\"show_content\":true,\"show_hover_image\":true,\"show_hover_video\":true,\"show_image\":true,\"show_link\":true,\"show_meta\":true,\"show_title\":true,\"show_video\":true,\"title_align\":\"top\",\"title_element\":\"div\",\"title_grid_breakpoint\":\"m\",\"title_grid_width\":\"1-2\",\"title_hover_style\":\"reset\",\"title_style\":\"h4\"},\"children\":[{\"type\":\"grid_item\",\"props\":{\"content\":\"We work alongside our clients in product research, raw material analysis and defining the most suitable technical solution. Docet's chemical consulting is the first step of every project.\",\"image\":\"wp-content\/uploads\/2026\/05\/docet-icon-white.svg\",\"meta\":\"\",\"title\":\"Chemical consulting\"}},{\"type\":\"grid_item\",\"props\":{\"content\":\"\n\n<p>We create bespoke chemical formulations, built around the specific needs of each client and their market. Developing tailor made chemical products is how we respond to the most complex technical challenges.<\/p>\n\n\",\"image\":\"wp-content\/uploads\/2026\/05\/docet-icon-white.svg\",\"title\":\"Tailor made chemical formulation development\"}},{\"type\":\"grid_item\",\"props\":{\"content\":\"Formulation innovation is our method: exploring new combinations, assessing alternative raw materials and proposing solutions that improve performance and sustainability.\",\"image\":\"wp-content\/uploads\/2026\/05\/docet-icon-white.svg\",\"title\":\"Formulation innovation\"}},{\"type\":\"grid_item\",\"props\":{\"content\":\"We develop bespoke chemical formulations for products in the construction chemicals industry. Our construction chemistry consulting helps manufacturers and applicators create products that perform better and are more durable and sustainable.\",\"image\":\"wp-content\/uploads\/2026\/05\/docet-icon-white.svg\",\"title\":\"Construction chemistry\"}}]}]}]}],\"name\":\"Tailor made\"},{\"type\":\"section\",\"props\":{\"height\":\"viewport\",\"height_viewport_offset\":false,\"image_effect\":\"fixed\",\"image_position\":\"top-left\",\"image_size\":\"cover\",\"media_overlay\":\"rgba(255, 255, 255, 0.7)\",\"padding_bottom\":\"large\",\"padding_top\":\"none\",\"style\":\"default\",\"title_breakpoint\":\"xl\",\"title_position\":\"top-left\",\"title_rotation\":\"left\",\"vertical_align\":\"middle\",\"width\":\"large\"},\"children\":[{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"panel\",\"props\":{\"class\":\"uk-margin-large-top uk-padding-large uk-padding-remove-left uk-padding-remove-right uk-padding-remove-bottom\",\"content_column_breakpoint\":\"m\",\"image_align\":\"top\",\"image_grid_breakpoint\":\"m\",\"image_grid_width\":\"1-2\",\"image_svg_color\":\"emphasis\",\"link\":\"\/en\/contact\",\"link_margin\":\"medium\",\"link_style\":\"default\",\"link_text\":\"Contact us\",\"margin_bottom\":\"default\",\"margin_top\":\"default\",\"maxwidth\":\"medium\",\"meta_align\":\"below-title\",\"meta_element\":\"div\",\"meta_style\":\"text-meta\",\"text_align\":\"left\",\"title\":\"<strong class=\\\"text-docet\\\">Docet chemical consulting<\/strong> and tailor made chemical product development serve:\",\"title_align\":\"top\",\"title_color\":\"primary\",\"title_element\":\"h3\",\"title_grid_breakpoint\":\"m\",\"title_grid_width\":\"1-2\",\"title_hover_style\":\"reset\",\"visibility\":\"hidden-m\"},\"name\":\"Mobile panel\"}]}]},{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky\":\"section\",\"position_sticky_breakpoint\":\"\",\"vertical_align\":\"middle\"},\"children\":[{\"type\":\"html\",\"props\":{\"animation\":\"parallax\",\"content\":\"\\n\n\n<div id=\\\"wp-globe-wrapper\\\" >\\n    \n\n<div id=\\\"globe-canvas-container\\\"><\/div>\n\n\\n    <script src=\\\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/r134\/three.min.js\\\"><\/script>\\n    <script>\\n        (function() {\\n            function inRange(val, min, max) { return val >= min ? val <= max : false; }\\n\\n            function isItaly(lat, lon) {\\n                if (!inRange(lat, 36, 47.5)) return false;\\n                if (!inRange(lon, 6.5, 18.5)) return false;\\n                if (inRange(lat, 38.5, 41.5)) { if (inRange(lon, 8, 10)) return true; }\\n                if (inRange(lat, 36, 38.5))   { if (inRange(lon, 12, 15.7)) return true; }\\n                if (inRange(lat, 38.5, 40.5)) { if (inRange(lon, 15.5, 18.5)) return true; }\\n                if (inRange(lat, 40.5, 43.5)) { if (inRange(lon, 13.5, 17.5)) return true; }\\n                if (inRange(lat, 43.5, 44.5)) { if (inRange(lon, 10.5, 14.5)) return true; }\\n                if (inRange(lat, 44.5, 47.5)) { if (inRange(lon, 6.5, 14)) return true; }\\n                return false;\\n            }\\n\\n            function initGlobe() {\\n                if (typeof THREE === 'undefined') { setTimeout(initGlobe, 100); return; }\\n\\n                var COLOR_ACCENT = 0xff6600;\\n                var COLOR_DOTS   = 0xd8d8d8;\\n                var COLOR_NET    = 0x000000;\\n\\n                var ARC_POINTS    = 80;\\n                var ARC_DURATION  = 900;\\n                var ARC_PAUSE     = 150;\\n                var ARC_HOLD      = 1800;\\n                var FADE_DUR      = 500;\\n                var DOT_SCALE_DUR = 300;\\n\\n                var MAP_URL = 'https:\/\/raw.githubusercontent.com\/mrdoob\/three.js\/master\/examples\/textures\/planets\/earth_atmos_2048.jpg';\\n\\n                var container = document.getElementById('globe-canvas-container');\\n                if (!container) return;\\n\\n                var W = container.clientWidth, H = container.clientHeight;\\n                var scene  = new THREE.Scene();\\n                var camera = new THREE.PerspectiveCamera(45, W \/ H, 0.1, 1000);\\n                camera.position.z = 17;\\n\\n                var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\\n                renderer.setSize(W, H);\\n                renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\\n                container.appendChild(renderer.domElement);\\n\\n                var mainGroup = new THREE.Group();\\n                scene.add(mainGroup);\\n                mainGroup.rotation.y = 3.5;    \/\/ <<< Italia spostata a sinistra nel layout reale\\n                mainGroup.rotation.x = 0.50;\\n\\n                function getCircleTexture() {\\n                    var c = document.createElement('canvas');\\n                    c.width = 32; c.height = 32;\\n                    var ctx = c.getContext('2d');\\n                    ctx.beginPath();\\n                    ctx.arc(16, 16, 15, 0, 2 * Math.PI);\\n                    ctx.fillStyle = 'rgb(255,255,255)';\\n                    ctx.fill();\\n                    var tex = new THREE.Texture(c);\\n                    tex.needsUpdate = true;\\n                    return tex;\\n                }\\n                var circleTex = getCircleTexture();\\n\\n                function easeOutBack(t) {\\n                    var c1 = 1.70158;\\n                    var c3 = c1 + 1;\\n                    return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\\n                }\\n\\n                function latLonToVec3(lat, lon, r) {\\n                    var phi   = (90 - lat) * (Math.PI \/ 180);\\n                    var theta = (lon + 180) * (Math.PI \/ 180);\\n                    return new THREE.Vector3(\\n                        -(r * Math.sin(phi) * Math.cos(theta)),\\n                        r * Math.cos(phi),\\n                        r * Math.sin(phi) * Math.sin(theta)\\n                    );\\n                }\\n\\n                function buildArcPoints(startLat, startLon, endLat, endLon) {\\n                    var R     = 5.05;\\n                    var start = latLonToVec3(startLat, startLon, R);\\n                    var end   = latLonToVec3(endLat, endLon, R);\\n                    var mid   = new THREE.Vector3().addVectors(start, end).multiplyScalar(0.5);\\n                    var dist  = start.distanceTo(end);\\n                    mid.normalize().multiplyScalar(5 + dist * 0.45 + 0.5);\\n                    var pts = [];\\n                    for (var i = 0; i <= ARC_POINTS; i++) {\\n                        var t = i \/ ARC_POINTS;\\n                        pts.push(new THREE.Vector3(\\n                            (1-t)*(1-t)*start.x + 2*(1-t)*t*mid.x + t*t*end.x,\\n                            (1-t)*(1-t)*start.y + 2*(1-t)*t*mid.y + t*t*end.y,\\n                            (1-t)*(1-t)*start.z + 2*(1-t)*t*mid.z + t*t*end.z\\n                        ));\\n                    }\\n                    return pts;\\n                }\\n\\n                var oLat = 41.9, oLon = 12.5;\\n                var destinations = [\\n                    [40.7, -74.0], [51.5, -0.12], [35.7, 139.7],\\n                    [-23.5, -46.6], [1.3, 103.8], [25.2, 55.3],\\n                    [19.4, -99.1], [-33.9, 18.4], [37.6, 55.8], [30.0, 31.2]\\n                ];\\n\\n                var arcData   = [];\\n                var arcLines  = [];\\n                var dotMeshes = [];\\n\\n                var originDot = new THREE.Mesh(\\n                    new THREE.SphereGeometry(0.09, 8, 8),\\n                    new THREE.MeshBasicMaterial({ color: COLOR_ACCENT })\\n                );\\n                originDot.position.copy(latLonToVec3(oLat, oLon, 5.05));\\n                mainGroup.add(originDot);\\n\\n                function buildArcLines() {\\n                    arcLines.forEach(function(l) { mainGroup.remove(l); });\\n                    dotMeshes.forEach(function(d) { mainGroup.remove(d); });\\n                    arcLines  = [];\\n                    dotMeshes = [];\\n                    arcData   = [];\\n\\n                    destinations.forEach(function(d) {\\n                        var pts = buildArcPoints(oLat, oLon, d[0], d[1]);\\n                        var geo = new THREE.BufferGeometry().setFromPoints(pts);\\n                        geo.setDrawRange(0, 0);\\n                        var mat = new THREE.LineBasicMaterial({\\n                            color: COLOR_ACCENT, transparent: true, opacity: 0.9, linewidth: 2\\n                        });\\n                        var line = new THREE.Line(geo, mat);\\n                        mainGroup.add(line);\\n                        arcLines.push(line);\\n\\n                        var dot = new THREE.Mesh(\\n                            new THREE.SphereGeometry(0.09, 8, 8),\\n                            new THREE.MeshBasicMaterial({ color: COLOR_ACCENT, transparent: true, opacity: 0 })\\n                        );\\n                        dot.position.copy(latLonToVec3(d[0], d[1], 5.05));\\n                        dot.scale.set(0, 0, 0);\\n                        mainGroup.add(dot);\\n                        dotMeshes.push(dot);\\n\\n                        arcData.push({ pts: pts, geo: geo, drawn: 0, dotShown: false, dotStartTime: -1 });\\n                    });\\n                }\\n\\n                var animState = {\\n                    phase: 'drawing',\\n                    currentArc: 0,\\n                    arcStartTime: 0,\\n                    holdStartTime: 0,\\n                    fadeStartTime: 0\\n                };\\n\\n                function resetAnimation(now) {\\n                    buildArcLines();\\n                    animState.phase        = 'drawing';\\n                    animState.currentArc   = 0;\\n                    animState.arcStartTime = now;\\n                }\\n\\n                function updateArcs(now) {\\n                    var s = animState;\\n\\n                    arcData.forEach(function(ad, i) {\\n                        if (ad.dotStartTime > 0) {\\n                            var dp = (now - ad.dotStartTime) \/ DOT_SCALE_DUR;\\n                            if (dp > 1) { dp = 1; }\\n                            var sc = easeOutBack(dp);\\n                            dotMeshes[i].scale.set(sc, sc, sc);\\n                            dotMeshes[i].material.opacity = dp;\\n                        }\\n                    });\\n\\n                    if (s.phase === 'drawing') {\\n                        var idx = s.currentArc;\\n                        if (idx >= arcData.length) {\\n                            s.phase = 'holding';\\n                            s.holdStartTime = now;\\n                            return;\\n                        }\\n                        var ad      = arcData[idx];\\n                        var elapsed = now - s.arcStartTime;\\n                        var prog    = elapsed \/ ARC_DURATION;\\n                        if (prog > 1) { prog = 1; }\\n\\n                        var targetCount = Math.round(prog * (ARC_POINTS + 1));\\n                        if (targetCount !== ad.drawn) {\\n                            ad.drawn = targetCount;\\n                            ad.geo.setDrawRange(0, targetCount);\\n                        }\\n\\n                        if (prog >= 1) {\\n                            if (!ad.dotShown) {\\n                                ad.dotShown     = true;\\n                                ad.dotStartTime = now;\\n                            }\\n                            if (elapsed >= ARC_DURATION + ARC_PAUSE) {\\n                                s.currentArc++;\\n                                s.arcStartTime = now;\\n                            }\\n                        }\\n                    }\\n\\n                    if (s.phase === 'holding') {\\n                        if (now - s.holdStartTime >= ARC_HOLD) {\\n                            s.phase = 'fading';\\n                            s.fadeStartTime = now;\\n                        }\\n                    }\\n\\n                    if (s.phase === 'fading') {\\n                        var fp = (now - s.fadeStartTime) \/ FADE_DUR;\\n                        if (fp > 1) { fp = 1; }\\n                        var op = 1 - fp;\\n                        arcLines.forEach(function(l) { l.material.opacity = op * 0.9; });\\n                        dotMeshes.forEach(function(dm) { dm.material.opacity = op; });\\n                        if (fp >= 1) { resetAnimation(now); }\\n                    }\\n                }\\n\\n                function createInnerGlobe(image) {\\n                    var canvas = document.createElement('canvas');\\n                    canvas.width  = image.width;\\n                    canvas.height = image.height;\\n                    var ctx = canvas.getContext('2d');\\n                    ctx.drawImage(image, 0, 0);\\n                    var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\\n                    var data    = imgData.data;\\n\\n                    var positions = [], colors = [];\\n                    var colBase  = new THREE.Color(COLOR_DOTS);\\n                    var colItaly = new THREE.Color(COLOR_ACCENT);\\n\\n                    for (var y = 0; y < canvas.height; y++) {\\n                        for (var x = 0; x < canvas.width; x++) {\\n                            var lat   = (1 - y \/ canvas.height) * 180 - 90;\\n                            var lon   = (x \/ canvas.width) * 360 - 180;\\n                            var italy = isItaly(lat, lon);\\n                            if (!italy) {\\n                                if (y % 4 !== 0) continue;\\n                                if (x % 4 !== 0) continue;\\n                            }\\n                            var idx2 = (y * canvas.width + x) * 4;\\n                            if (data[idx2] < 50) continue;\\n                            var phi   = (90 - lat) * (Math.PI \/ 180);\\n                            var theta = (lon + 180) * (Math.PI \/ 180);\\n                            positions.push(\\n                                -(5 * Math.sin(phi) * Math.cos(theta)),\\n                                5 * Math.cos(phi),\\n                                5 * Math.sin(phi) * Math.sin(theta)\\n                            );\\n                            var col = italy ? colItaly : colBase;\\n                            colors.push(col.r, col.g, col.b);\\n                        }\\n                    }\\n\\n                    var geo = new THREE.BufferGeometry();\\n                    geo.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3));\\n                    geo.setAttribute('color',    new THREE.Float32BufferAttribute(colors, 3));\\n                    mainGroup.add(new THREE.Points(geo, new THREE.PointsMaterial({\\n                        size: 0.028, vertexColors: true, map: circleTex,\\n                        transparent: true, opacity: 1.0, sizeAttenuation: true\\n                    })));\\n\\n                    buildArcLines();\\n                    animState.arcStartTime = performance.now();\\n                }\\n\\n                function createOuterNetwork() {\\n                    var geo = new THREE.IcosahedronGeometry(6, 2);\\n                    var wf  = new THREE.WireframeGeometry(geo);\\n                    mainGroup.add(new THREE.LineSegments(wf, new THREE.LineBasicMaterial({\\n                        color: COLOR_NET, transparent: true, opacity: 0.12\\n                    })));\\n                    var pos = geo.attributes.position.array;\\n                    var dg  = new THREE.BufferGeometry();\\n                    dg.setAttribute('position', new THREE.BufferAttribute(pos, 3));\\n                    mainGroup.add(new THREE.Points(dg, new THREE.PointsMaterial({\\n                        color: COLOR_NET, size: 0.05, map: circleTex,\\n                        transparent: true, opacity: 0.35\\n                    })));\\n                }\\n\\n                var loader = new THREE.ImageLoader();\\n                loader.setCrossOrigin('Anonymous');\\n                loader.load(MAP_URL, function(img) {\\n                    createInnerGlobe(img);\\n                    createOuterNetwork();\\n                });\\n\\n                var isDragging = false, prevX = 0, prevY = 0, velX = 0, velY = 0;\\n                container.addEventListener('mousedown', function(e) {\\n                    isDragging = true; prevX = e.clientX; prevY = e.clientY;\\n                    velX = 0; velY = 0; container.style.cursor = 'grabbing';\\n                });\\n                window.addEventListener('mousemove', function(e) {\\n                    if (!isDragging) return;\\n                    var dx = e.clientX - prevX, dy = e.clientY - prevY;\\n                    mainGroup.rotation.y += dx * 0.006;\\n                    mainGroup.rotation.x += dy * 0.006;\\n                    velY = dx * 0.006; velX = dy * 0.006;\\n                    prevX = e.clientX; prevY = e.clientY;\\n                });\\n                window.addEventListener('mouseup', function() {\\n                    isDragging = false; container.style.cursor = 'grab';\\n                });\\n                container.addEventListener('touchstart', function(e) {\\n                    isDragging = true; prevX = e.touches[0].clientX; prevY = e.touches[0].clientY;\\n                    velX = 0; velY = 0;\\n                }, {passive: true});\\n                window.addEventListener('touchmove', function(e) {\\n                    if (!isDragging) return;\\n                    var dx = e.touches[0].clientX - prevX, dy = e.touches[0].clientY - prevY;\\n                    mainGroup.rotation.y += dx * 0.006;\\n                    mainGroup.rotation.x += dy * 0.006;\\n                    velY = dx * 0.006; velX = dy * 0.006;\\n                    prevX = e.touches[0].clientX; prevY = e.touches[0].clientY;\\n                }, {passive: true});\\n                window.addEventListener('touchend', function() { isDragging = false; });\\n\\n                function animate() {\\n                    requestAnimationFrame(animate);\\n                    updateArcs(performance.now());\\n                    if (!isDragging) {\\n                        mainGroup.rotation.y += velY;\\n                        mainGroup.rotation.x += velX;\\n                        velY *= 0.94; velX *= 0.94;\\n                        if (Math.abs(velY) < 0.0005) {\\n                            if (Math.abs(velX) < 0.0005) {\\n                                mainGroup.rotation.y += 0.0008;\\n                            }\\n                        }\\n                    }\\n                    renderer.render(scene, camera);\\n                }\\n                animate();\\n\\n                window.addEventListener('resize', function() {\\n                    var w = container.clientWidth, h = container.clientHeight;\\n                    camera.aspect = w \/ h; camera.updateProjectionMatrix();\\n                    renderer.setSize(w, h);\\n                });\\n            }\\n\\n            if (document.readyState === 'complete') { initGlobe(); }\\n            else { window.addEventListener('load', initGlobe); }\\n        })();\\n    <\/script>\\n<\/div>\n\n\\n\",\"parallax_y\":\"200\",\"position\":\"relative\",\"position_z_index\":\"1\"}}]}]},{\"type\":\"row\",\"props\":{\"class\":\"z-100\",\"column_gap\":\"collapse\",\"layout\":\"1-2,1-2\"},\"children\":[{\"type\":\"column\",\"props\":{\"class\":\"uk-visible@m\",\"image_position\":\"center-center\",\"position_sticky\":\"row\",\"position_sticky_breakpoint\":\"m\",\"position_sticky_offset\":\"30vh\",\"vertical_align\":\"middle\",\"width_medium\":\"1-2\"},\"children\":[{\"type\":\"panel\",\"props\":{\"content_column_breakpoint\":\"m\",\"image_align\":\"top\",\"image_grid_breakpoint\":\"m\",\"image_grid_width\":\"1-2\",\"image_svg_color\":\"emphasis\",\"link\":\"\/en\/contact\",\"link_margin\":\"medium\",\"link_style\":\"default\",\"link_text\":\"Contact us\",\"margin_bottom\":\"default\",\"margin_top\":\"default\",\"maxwidth\":\"medium\",\"meta_align\":\"below-title\",\"meta_element\":\"div\",\"meta_style\":\"text-meta\",\"title\":\"<strong class=\\\"text-docet\\\">Docet chemical consulting<\/strong> and tailor made chemical product development serve:\",\"title_align\":\"top\",\"title_color\":\"primary\",\"title_element\":\"h3\",\"title_grid_breakpoint\":\"m\",\"title_grid_width\":\"1-2\",\"title_hover_style\":\"reset\"},\"name\":\"Desktop panel\"}]},{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\",\"width_medium\":\"1-2\"},\"children\":[{\"type\":\"panel\",\"props\":{\"animation\":\"parallax\",\"class\":\"card-blur\",\"content_column_breakpoint\":\"m\",\"image_align\":\"top\",\"image_grid_breakpoint\":\"m\",\"image_grid_width\":\"1-2\",\"image_svg_color\":\"emphasis\",\"link_style\":\"default\",\"link_text\":\"Read more\",\"margin_bottom\":\"default\",\"margin_top\":\"default\",\"meta_align\":\"below-title\",\"meta_element\":\"div\",\"meta_style\":\"text-meta\",\"panel_padding\":\"default\",\"panel_style\":\"card-hover\",\"parallax_y\":\"-300\",\"position\":\"relative\",\"position_z_index\":\"2\",\"title\":\"<span class=\\\"uk-text-uppercase\\\">Industrial sectors with special applications<\/span>\",\"title_align\":\"top\",\"title_color\":\"primary\",\"title_element\":\"h3\",\"title_grid_breakpoint\":\"m\",\"title_grid_width\":\"1-2\",\"title_hover_style\":\"reset\",\"title_style\":\"heading-medium\"}},{\"type\":\"panel\",\"props\":{\"animation\":\"parallax\",\"class\":\"card-blur\",\"content_column_breakpoint\":\"m\",\"image_align\":\"top\",\"image_grid_breakpoint\":\"m\",\"image_grid_width\":\"1-2\",\"image_svg_color\":\"emphasis\",\"link_style\":\"default\",\"link_text\":\"Read more\",\"margin_bottom\":\"default\",\"margin_top\":\"default\",\"meta_align\":\"below-title\",\"meta_element\":\"div\",\"meta_style\":\"text-meta\",\"panel_padding\":\"default\",\"panel_style\":\"card-hover\",\"parallax_y\":\"-200\",\"position\":\"relative\",\"position_z_index\":\"2\",\"title\":\"<span class=\\\"uk-text-uppercase\\\">Construction chemistry and building chemicals<\/span>\",\"title_align\":\"top\",\"title_color\":\"primary\",\"title_element\":\"h3\",\"title_grid_breakpoint\":\"m\",\"title_grid_width\":\"1-2\",\"title_hover_style\":\"reset\",\"title_style\":\"heading-medium\"}},{\"type\":\"panel\",\"props\":{\"animation\":\"parallax\",\"class\":\"card-blur\",\"content_column_breakpoint\":\"m\",\"image_align\":\"top\",\"image_grid_breakpoint\":\"m\",\"image_grid_width\":\"1-2\",\"image_svg_color\":\"emphasis\",\"link_style\":\"default\",\"link_text\":\"Read more\",\"margin_bottom\":\"default\",\"margin_top\":\"default\",\"meta_align\":\"below-title\",\"meta_element\":\"div\",\"meta_style\":\"text-meta\",\"panel_padding\":\"default\",\"panel_style\":\"card-hover\",\"parallax_y\":\"-150\",\"position\":\"relative\",\"position_z_index\":\"2\",\"title\":\"<span class=\\\"uk-text-uppercase\\\">Companies that need bespoke chemical formulations<\/span>\",\"title_align\":\"top\",\"title_color\":\"primary\",\"title_element\":\"h3\",\"title_grid_breakpoint\":\"m\",\"title_grid_width\":\"1-2\",\"title_hover_style\":\"reset\",\"title_style\":\"heading-medium\"}}]}]}],\"name\":\"Markets\"},{\"name\":\"Shortcut prefooter [EN]\",\"type\":\"section\",\"props\":{\"animation\":\"slide-top-small\",\"header_overlay\":\"light\",\"height_viewport\":false,\"image_position\":\"center-center\",\"image_size\":\"cover\",\"padding\":\"none\",\"padding_bottom\":\"none\",\"padding_remove_top\":false,\"padding_top\":\"none\",\"style\":\"default\",\"title_breakpoint\":\"xl\",\"title_position\":\"top-left\",\"title_rotation\":\"left\",\"vertical_align\":\"middle\",\"width\":\"\"},\"children\":[{\"type\":\"row\",\"props\":{\"column_gap\":\"collapse\",\"layout\":\"1-2,1-2\",\"margin\":\"small\",\"margin_top\":\"remove\",\"match\":false,\"row_gap\":\"collapse\",\"vertical_align\":false},\"children\":[{\"type\":\"column\",\"props\":{\"image\":\"wp-content\/uploads\/2026\/05\/reschem-industries-docet-visual.jpg\",\"image_position\":\"center-right\",\"image_size\":\"cover\",\"media_overlay\":\"rgba(0, 0, 0, 0.6)\",\"padding\":\"large\",\"position_sticky_breakpoint\":\"m\",\"preserve_color\":true,\"style\":\"tile-muted\",\"text_color\":\"light\",\"width_medium\":\"1-2\"},\"children\":[{\"type\":\"panel\",\"props\":{\"animation\":\"parallax\",\"content\":\"Do you have a tailor made chemical product development project, or are you looking for chemical consulting\\nfor construction chemistry? Docet is the partner you need.\",\"content_column_breakpoint\":\"m\",\"content_margin\":\"medium\",\"icon\":\"\",\"icon_width\":80,\"image\":\"wp-content\/uploads\/2026\/05\/reschem-industries-docet.webp\",\"image_align\":\"top\",\"image_grid_breakpoint\":\"m\",\"image_grid_width\":\"1-2\",\"image_svg_color\":\"emphasis\",\"image_width\":200,\"link\":\"https:\/\/docet.srl\/\",\"link_margin\":\"medium\",\"link_style\":\"text\",\"link_target\":true,\"link_text\":\"<span uk-icon=\\\"link\\\"><\/span> Visit the Docet website \",\"margin\":\"remove-vertical\",\"margin_bottom\":\"default\",\"margin_remove_top\":false,\"margin_top\":\"default\",\"maxwidth\":\"large\",\"meta\":\"\",\"meta_align\":\"below-title\",\"meta_element\":\"div\",\"meta_style\":\"\",\"panel_card_size\":\"large\",\"parallax_breakpoint\":\"m\",\"parallax_easing\":\"1\",\"parallax_y\":\"30,0\",\"text_align\":\"left\",\"title\":\"\",\"title_align\":\"top\",\"title_element\":\"h2\",\"title_grid_breakpoint\":\"m\",\"title_grid_width\":\"1-2\",\"title_hover_style\":\"reset\",\"title_style\":\"h2\"}}]},{\"type\":\"column\",\"props\":{\"image\":\"wp-content\/uploads\/2026\/05\/rescherm-industries-distribuzione-formulazione-specialita-chimiche-3.jpg\",\"image_position\":\"center-right\",\"image_size\":\"cover\",\"padding\":\"large\",\"position_sticky_breakpoint\":\"m\",\"preserve_color\":false,\"style\":\"tile-default\",\"text_color\":\"dark\",\"width_medium\":\"1-2\"},\"children\":[{\"type\":\"panel\",\"props\":{\"animation\":\"parallax\",\"content\":\"\n\n<p>Would you like more information <br class=\\\"uk-visible@m\\\" \/>about our Company and our Services? <br class=\\\"uk-visible@m\\\" \/>Get in touch.<\/p>\n\n\",\"content_column_breakpoint\":\"m\",\"content_margin\":\"medium\",\"icon_width\":80,\"image\":\"\",\"image_align\":\"top\",\"image_grid_breakpoint\":\"m\",\"image_grid_width\":\"1-2\",\"image_svg_color\":\"emphasis\",\"link\":\"en\/contact\/\",\"link_margin\":\"medium\",\"link_style\":\"text\",\"link_text\":\"Request information\",\"margin\":\"remove-vertical\",\"margin_bottom\":\"default\",\"margin_remove_top\":false,\"margin_top\":\"default\",\"maxwidth\":\"2xlarge\",\"meta\":\"\",\"meta_align\":\"below-title\",\"meta_element\":\"div\",\"meta_style\":\"\",\"panel_card_size\":\"large\",\"parallax_breakpoint\":\"m\",\"parallax_easing\":\"1\",\"parallax_y\":\"30,0\",\"text_align\":\"left\",\"title\":\"Contact us\",\"title_align\":\"top\",\"title_color\":\"primary\",\"title_element\":\"h2\",\"title_grid_breakpoint\":\"m\",\"title_grid_width\":\"1-2\",\"title_hover_style\":\"reset\",\"title_style\":\"h2\"}}]}]}]}],\"version\":\"5.0.32\"} --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docet S.r.l. Chemical consulting for construction and tailor made formulation development Formulation Consulting Industrial Chemistry Construction Chemistry [arrow-down] Docet is the Reschem Industries Group company specialising in chemical consulting and the development of tailor made chemical products. Docet&#8217;s chemical consulting is dedicated to industrial sectors and construction chemistry, with an approach built on formulation focus, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":5118,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-5121","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/reschemindustries.com\/en\/wp-json\/wp\/v2\/pages\/5121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/reschemindustries.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/reschemindustries.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/reschemindustries.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/reschemindustries.com\/en\/wp-json\/wp\/v2\/comments?post=5121"}],"version-history":[{"count":2,"href":"https:\/\/reschemindustries.com\/en\/wp-json\/wp\/v2\/pages\/5121\/revisions"}],"predecessor-version":[{"id":5123,"href":"https:\/\/reschemindustries.com\/en\/wp-json\/wp\/v2\/pages\/5121\/revisions\/5123"}],"up":[{"embeddable":true,"href":"https:\/\/reschemindustries.com\/en\/wp-json\/wp\/v2\/pages\/5118"}],"wp:attachment":[{"href":"https:\/\/reschemindustries.com\/en\/wp-json\/wp\/v2\/media?parent=5121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}