{"id":2074,"date":"2026-03-14T13:19:01","date_gmt":"2026-03-14T06:19:01","guid":{"rendered":"https:\/\/wucode.net\/?page_id=2074"},"modified":"2026-04-15T13:34:05","modified_gmt":"2026-04-15T06:34:05","slug":"chinh-sach-bao-mat","status":"publish","type":"page","link":"https:\/\/www.wucode.net\/en\/chinh-sach-bao-mat\/","title":{"rendered":"Ch\u00ednh s\u00e1ch b\u1ea3o m\u1eadt"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2074\" class=\"elementor elementor-2074\" data-elementor-post-type=\"page\">\n\t\t\t\t<div role=\"main\" class=\"elementor-element elementor-element-71be3ba e-con-full e-flex e-con e-parent\" data-id=\"71be3ba\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-70fd246 elementor-widget elementor-widget-particle_hero_section\" data-id=\"70fd246\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"particle_hero_section.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<style>\n\t\t\t#container-ph_canvas_70fd246 {\n\t\t\t\tposition: relative;\n\t\t\t\toverflow: hidden;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t}\n\t\t\t#canvas-ph_canvas_70fd246 {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0; left: 0; right: 0; bottom: 0;\n\t\t\t\tz-index: 0;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t\t#container-ph_canvas_70fd246 .ph-overlay {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0; left: 0; right: 0; bottom: 0;\n\t\t\t\tz-index: 5;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t\t#container-ph_canvas_70fd246 .ph-content-wrapper {\n\t\t\t\tposition: relative;\n\t\t\t\tz-index: 10;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\ttext-align: center;\n\t\t\t\tpointer-events: none; \n\t\t\t}\n\t\t\t#container-ph_canvas_70fd246 .ph-button {\n\t\t\t\tpointer-events: auto;\n\t\t\t\ttext-decoration: none;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t<\/style>\n\n\t\t<div id=\"container-ph_canvas_70fd246\" class=\"ph-container\">\n\t\t\t<canvas id=\"canvas-ph_canvas_70fd246\"><\/canvas>\n\t\t\t<div class=\"ph-overlay\"><\/div> <!-- Th\u00eam Background Overlay -->\n\t\t\t\n\t\t\t<div class=\"ph-content-wrapper\" id=\"content-ph_canvas_70fd246\">\n\t\t\t\t<div class=\"ph-heading-1\"><\/div>\n\t\t\t\t<div class=\"ph-heading-2\"><\/div>\n\t\t\t\t\n\t\t\t\t<a class=\"ph-button\">\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t<script>\n\t\t(function() {\n\t\t\tconst initCanvasWidget = () => {\n\t\t\t\tconst instanceId = 'ph_canvas_70fd246';\n\t\t\t\tconst config = {\"shapeType\":\"complex-svg\",\"shapeText\":null,\"shapeFontSize\":1200,\"iconPath\":null,\"iconViewBox\":null,\"svgSource\":\"media\",\"svgUrl\":\"https:\\\/\\\/www.wucode.net\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/Privacy-Banner-1.png\",\"svgInline\":null,\"shapeThickness\":15,\"particleShape\":\"diamond\",\"colors\":{\"base\":\"#000000\",\"accent1\":\"#000000\",\"accent2\":\"#000000\",\"shape\":null},\"triggerMode\":{\"desktop\":\"scroll\",\"tablet\":\"\",\"mobile\":\"\"},\"shapeSize\":{\"desktop\":70,\"tablet\":40,\"mobile\":50},\"totalParticles\":{\"desktop\":3500,\"tablet\":2500,\"mobile\":1500},\"particleSize\":{\"desktop\":2,\"tablet\":1.2,\"mobile\":1},\"animationSpeed\":{\"desktop\":0.1,\"tablet\":\"\",\"mobile\":0.15},\"shapePositionX\":{\"desktop\":0.7,\"tablet\":\"\",\"mobile\":0.7},\"shapePositionY\":{\"desktop\":0.5,\"tablet\":\"\",\"mobile\":0.8}};\n\t\t\t\tconst canvas = document.getElementById('canvas-' + instanceId);\n\t\t\t\tconst container = document.getElementById('container-' + instanceId);\n\t\t\t\t\n\t\t\t\tif (!canvas || !container || container.clientWidth === 0 || container.clientHeight === 0) {\n\t\t\t\t\tsetTimeout(initCanvasWidget, 100);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst ctx = canvas.getContext('2d', { willReadFrequently: true });\n\t\t\t\t\n\t\t\t\tlet isHovered = false;\n\t\t\t\tlet animationFrameId;\n\t\t\t\tlet particles = [];\n\t\t\t\tlet targetPoints = [];\n\t\t\t\tlet shapeParticleCount = 0;\n\t\t\t\tlet width = 0;\n\t\t\t\tlet height = 0;\n\t\t\t\tlet hoverTime = 0;\n\t\t\t\tlet isIntersecting = false;\n\t\t\t\tlet isVisible = true; \n\n\t\t\t\tconst getResVal = (valObj, w) => {\n\t\t\t\t\tif (w <= 767 && valObj.mobile !== '') return parseFloat(valObj.mobile);\n\t\t\t\t\tif (w <= 1024 && valObj.tablet !== '') return parseFloat(valObj.tablet);\n\t\t\t\t\treturn parseFloat(valObj.desktop);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst getResString = (valObj, w) => {\n\t\t\t\t\tif (w <= 767 && valObj.mobile !== '') return valObj.mobile;\n\t\t\t\t\tif (w <= 1024 && valObj.tablet !== '') return valObj.tablet;\n\t\t\t\t\treturn valObj.desktop;\n\t\t\t\t};\n\n\t\t\t\tconst handleHoverIn = () => {\n\t\t\t\t\tif (getResString(config.triggerMode, window.innerWidth) === 'hover') isHovered = true;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst handleHoverOut = () => {\n\t\t\t\t\tif (getResString(config.triggerMode, window.innerWidth) === 'hover') isHovered = false;\n\t\t\t\t};\n\n\t\t\t\tcontainer.addEventListener('mouseenter', handleHoverIn);\n\t\t\t\tcontainer.addEventListener('mouseleave', handleHoverOut);\n\t\t\t\tcontainer.addEventListener('touchstart', handleHoverIn, { passive: true });\n\t\t\t\tcontainer.addEventListener('touchend', handleHoverOut);\n\t\t\t\tcontainer.addEventListener('touchcancel', handleHoverOut);\n\n\t\t\t\tconst observer = new IntersectionObserver((entries) => {\n\t\t\t\t\tentries.forEach(entry => {\n\t\t\t\t\t\tisVisible = entry.isIntersecting; \n\t\t\t\t\t\t\n\t\t\t\t\t\tif (entry.intersectionRatio >= 0.4) {\n\t\t\t\t\t\t\tisIntersecting = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tisIntersecting = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (getResString(config.triggerMode, window.innerWidth) === 'scroll') {\n\t\t\t\t\t\t\tisHovered = isIntersecting;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}, { threshold: [0, 0.4] });\n\t\t\t\tobserver.observe(container);\n\n\t\t\t\tconst dpr = window.devicePixelRatio || 1;\n\n\t\t\t\tconst initParticles = async () => {\n\t\t\t\t\twidth = container.clientWidth;\n\t\t\t\t\theight = container.clientHeight;\n\n\t\t\t\t\tif (width <= 0 || height <= 0) return false;\n\n\t\t\t\t\tconst currentTrigger = getResString(config.triggerMode, window.innerWidth);\n\t\t\t\t\tif (currentTrigger === 'scroll') {\n\t\t\t\t\t\tisHovered = isIntersecting;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tisHovered = false; \n\t\t\t\t\t}\n\n\t\t\t\t\tconst currentParticlesCount = getResVal(config.totalParticles, window.innerWidth);\n\t\t\t\t\tconst currentPSize = getResVal(config.particleSize, window.innerWidth);\n\t\t\t\t\tconst currentSpeed = getResVal(config.animationSpeed, window.innerWidth);\n\t\t\t\t\tconst currentPosX = getResVal(config.shapePositionX, window.innerWidth);\n\t\t\t\t\tconst currentPosY = getResVal(config.shapePositionY, window.innerWidth);\n\t\t\t\t\tconst currentShapeSize = getResVal(config.shapeSize, window.innerWidth);\n\n\t\t\t\t\tcanvas.width = width * dpr;\n\t\t\t\t\tcanvas.height = height * dpr;\n\t\t\t\t\tcanvas.style.width = width + 'px';\n\t\t\t\t\tcanvas.style.height = height + 'px';\n\t\t\t\t\t\n\t\t\t\t\tctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\t\t\tctx.scale(dpr, dpr);\n\n\t\t\t\t\tconst offCanvas = document.createElement('canvas');\n\t\t\t\t\tconst offCtx = offCanvas.getContext('2d', { willReadFrequently: true });\n\t\t\t\t\toffCanvas.width = width;\n\t\t\t\t\toffCanvas.height = height;\n\t\t\t\t\t\n\t\t\t\t\tconst maxAllowedWidth = width * (currentShapeSize \/ 100);\n\t\t\t\t\t\n\t\t\t\t\tif (config.shapeType === 'complex-svg') {\n\t\t\t\t\t\tawait new Promise((resolve) => {\n\t\t\t\t\t\t\tconst img = new Image();\n\t\t\t\t\t\t\timg.crossOrigin = \"Anonymous\"; \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\timg.onload = () => {\n\t\t\t\t\t\t\t\tconst imgAspect = img.width \/ (img.height || 1);\n\t\t\t\t\t\t\t\tlet drawWidth = maxAllowedWidth;\n\t\t\t\t\t\t\t\tlet drawHeight = drawWidth \/ imgAspect;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (drawHeight > height * (currentShapeSize \/ 100)) {\n\t\t\t\t\t\t\t\t\tdrawHeight = height * (currentShapeSize \/ 100);\n\t\t\t\t\t\t\t\t\tdrawWidth = drawHeight * imgAspect;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\toffCtx.drawImage(\n\t\t\t\t\t\t\t\t\timg, \n\t\t\t\t\t\t\t\t\twidth * currentPosX - drawWidth \/ 2, \n\t\t\t\t\t\t\t\t\theight * currentPosY - drawHeight \/ 2, \n\t\t\t\t\t\t\t\t\tdrawWidth, \n\t\t\t\t\t\t\t\t\tdrawHeight\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\timg.onerror = resolve; \n\n\t\t\t\t\t\t\tif (config.svgSource === 'media' && config.svgUrl) {\n\t\t\t\t\t\t\t\timg.src = config.svgUrl;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\timg.src = 'data:image\/svg+xml;charset=utf-8,' + encodeURIComponent(config.svgInline);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t} else if (config.shapeType === 'icon') {\n\t\t\t\t\t\tconst path = new Path2D(config.iconPath);\n\t\t\t\t\t\tconst scale = maxAllowedWidth \/ config.iconViewBox;\n\t\t\t\t\t\t\n\t\t\t\t\t\toffCtx.translate(width * currentPosX, height * currentPosY);\n\t\t\t\t\t\toffCtx.scale(scale, scale);\n\t\t\t\t\t\toffCtx.translate(-config.iconViewBox \/ 2, -config.iconViewBox \/ 2);\n\t\t\t\t\t\t\n\t\t\t\t\t\toffCtx.lineWidth = config.shapeThickness \/ scale; \n\t\t\t\t\t\toffCtx.strokeStyle = 'black';\n\t\t\t\t\t\toffCtx.lineCap = 'round';\n\t\t\t\t\t\toffCtx.lineJoin = 'round';\n\t\t\t\t\t\toffCtx.stroke(path);\n\t\t\t\t\t\t\n\t\t\t\t\t\toffCtx.setTransform(1, 0, 0, 1, 0, 0); \n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet fontSize = config.shapeFontSize;\n\t\t\t\t\t\toffCtx.font = \"bold \" + fontSize + \"px sans-serif\";\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet textWidth = offCtx.measureText(config.shapeText).width;\n\t\t\t\t\t\tif (textWidth > maxAllowedWidth && textWidth > 0) {\n\t\t\t\t\t\t\tfontSize = Math.floor(fontSize * (maxAllowedWidth \/ textWidth));\n\t\t\t\t\t\t\toffCtx.font = \"bold \" + fontSize + \"px sans-serif\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\toffCtx.textAlign = 'center';\n\t\t\t\t\t\toffCtx.textBaseline = 'middle';\n\t\t\t\t\t\toffCtx.lineWidth = config.shapeThickness;\n\t\t\t\t\t\toffCtx.strokeStyle = 'black';\n\t\t\t\t\t\toffCtx.lineCap = 'round';\n\t\t\t\t\t\toffCtx.lineJoin = 'round';\n\t\t\t\t\t\toffCtx.strokeText(config.shapeText, width * currentPosX, height * currentPosY);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst imgData = offCtx.getImageData(0, 0, width, height).data;\n\t\t\t\t\ttargetPoints = [];\n\t\t\t\t\tconst gap = Math.max(Math.floor(width \/ 250), 4); \n\n\t\t\t\t\tfor (let y = 0; y < height; y += gap) {\n\t\t\t\t\t\tfor (let x = 0; x < width; x += gap) {\n\t\t\t\t\t\t\tconst index = (y * width + x) * 4;\n\t\t\t\t\t\t\tconst r = imgData[index];\n\t\t\t\t\t\t\tconst g = imgData[index + 1];\n\t\t\t\t\t\t\tconst b = imgData[index + 2];\n\t\t\t\t\t\t\tconst alpha = imgData[index + 3];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (alpha > 50) {\n\t\t\t\t\t\t\t\tconst originalColor = config.shapeType === 'complex-svg' \n\t\t\t\t\t\t\t\t\t? \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + (alpha \/ 255) + \")\" \n\t\t\t\t\t\t\t\t\t: config.colors.shape;\n\t\t\t\t\t\t\t\ttargetPoints.push({ x: x, y: y, color: originalColor });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (targetPoints.length > currentParticlesCount * 0.85) {\n\t\t\t\t\t\ttargetPoints.sort(() => Math.random() - 0.5);\n\t\t\t\t\t\ttargetPoints = targetPoints.slice(0, Math.floor(currentParticlesCount * 0.85));\n\t\t\t\t\t}\n\n\t\t\t\t\tparticles = [];\n\t\t\t\t\tshapeParticleCount = targetPoints.length;\n\n\t\t\t\t\tfor (let i = 0; i < currentParticlesCount; i++) {\n\t\t\t\t\t\tconst isShapeParticle = i < shapeParticleCount;\n\t\t\t\t\t\tconst target = isShapeParticle ? targetPoints[i] : null;\n\n\t\t\t\t\t\tlet particleType = 'bg-float';\n\t\t\t\t\t\tif (isShapeParticle) {\n\t\t\t\t\t\t\tparticleType = 'shape';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparticleType = Math.random() < 0.25 ? 'bg-suck' : 'bg-float';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst randomShapeTarget = shapeParticleCount > 0 \n\t\t\t\t\t\t\t? targetPoints[Math.floor(Math.random() * shapeParticleCount)] \n\t\t\t\t\t\t\t: { x: width * currentPosX, y: height * currentPosY };\n\n\t\t\t\t\t\tlet hoverColor = config.colors.base;\n\t\t\t\t\t\tif (isShapeParticle) {\n\t\t\t\t\t\t\thoverColor = target.color; \n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst rand = Math.random();\n\t\t\t\t\t\t\tif (rand > 0.98) hoverColor = config.colors.accent1;\n\t\t\t\t\t\t\telse if (rand > 0.8) hoverColor = config.colors.accent2;\n\t\t\t\t\t\t\telse hoverColor = config.colors.base;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparticles.push({\n\t\t\t\t\t\t\tx: Math.random() * width,\n\t\t\t\t\t\t\ty: Math.random() * height,\n\t\t\t\t\t\t\toriginX: Math.random() * width,\n\t\t\t\t\t\t\toriginY: Math.random() * height,\n\t\t\t\t\t\t\ttargetX: target ? target.x : Math.random() * width,\n\t\t\t\t\t\t\ttargetY: target ? target.y : Math.random() * height,\n\t\t\t\t\t\t\tmagnetX: randomShapeTarget.x,\n\t\t\t\t\t\t\tmagnetY: randomShapeTarget.y,\n\t\t\t\t\t\t\ttype: particleType,\n\t\t\t\t\t\t\tsize: Math.random() * (currentPSize * 0.8) + (currentPSize * 0.4),\n\t\t\t\t\t\t\tcolorHover: hoverColor,\n\t\t\t\t\t\t\tvx: (Math.random() - 0.5) * 0.3,\n\t\t\t\t\t\t\tvy: (Math.random() - 0.5) * 0.3,\n\t\t\t\t\t\t\tconfigSpeed: currentSpeed\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tparticles.sort((a, b) => a.colorHover.localeCompare(b.colorHover));\n\t\t\t\t\t\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\n\t\t\t\tconst draw = () => {\n\t\t\t\t\tif (!document.body.contains(canvas)) {\n\t\t\t\t\t\tif (animationFrameId) cancelAnimationFrame(animationFrameId);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tanimationFrameId = requestAnimationFrame(draw);\n\n\t\t\t\t\tif (!isVisible) return; \n\n\t\t\t\t\tif (width > 0 && height > 0) {\n\t\t\t\t\t\tctx.clearRect(0, 0, width, height);\n\n\t\t\t\t\t\tif (isHovered) hoverTime++; else hoverTime = 0;\n\n\t\t\t\t\t\tlet lastColor = null;\n\t\t\t\t\t\tctx.beginPath(); \n\n\t\t\t\t\t\tparticles.forEach(p => {\n\t\t\t\t\t\t\tlet tx, ty;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (isHovered) {\n\t\t\t\t\t\t\t\tif (p.type === 'shape') {\n\t\t\t\t\t\t\t\t\ttx = p.targetX; ty = p.targetY;\n\t\t\t\t\t\t\t\t\tp.x += (tx - p.x) * p.configSpeed;\n\t\t\t\t\t\t\t\t\tp.y += (ty - p.y) * p.configSpeed;\n\t\t\t\t\t\t\t\t} else if (p.type === 'bg-suck' && hoverTime > 40) {\n\t\t\t\t\t\t\t\t\tconst dx = p.magnetX - p.originX;\n\t\t\t\t\t\t\t\t\tconst dy = p.magnetY - p.originY;\n\t\t\t\t\t\t\t\t\tconst dist = Math.sqrt(dx * dx + dy * dy);\n\n\t\t\t\t\t\t\t\t\tif (dist < 20) {\n\t\t\t\t\t\t\t\t\t\tconst angle = Math.random() * Math.PI * 2;\n\t\t\t\t\t\t\t\t\t\tconst radius = Math.max(width, height) * 0.6; \n\t\t\t\t\t\t\t\t\t\tp.originX = width \/ 2 + Math.cos(angle) * radius;\n\t\t\t\t\t\t\t\t\t\tp.originY = height \/ 2 + Math.sin(angle) * radius;\n\t\t\t\t\t\t\t\t\t\tp.x = p.originX; p.y = p.originY;\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tconst newTarget = shapeParticleCount > 0 \n\t\t\t\t\t\t\t\t\t\t\t? targetPoints[Math.floor(Math.random() * shapeParticleCount)] \n\t\t\t\t\t\t\t\t\t\t\t: { x: width \/ 2, y: height \/ 2 };\n\t\t\t\t\t\t\t\t\t\tp.magnetX = newTarget.x;\n\t\t\t\t\t\t\t\t\t\tp.magnetY = newTarget.y;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tp.originX += dx * 0.01; \n\t\t\t\t\t\t\t\t\t\tp.originY += dy * 0.01;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttx = p.originX; ty = p.originY;\n\t\t\t\t\t\t\t\t\tp.x += (tx - p.x) * p.configSpeed;\n\t\t\t\t\t\t\t\t\tp.y += (ty - p.y) * p.configSpeed;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tp.originX += p.vx; p.originY += p.vy;\n\t\t\t\t\t\t\t\t\tif (p.originX < 0 || p.originX > width) p.vx *= -1;\n\t\t\t\t\t\t\t\t\tif (p.originY < 0 || p.originY > height) p.vy *= -1;\n\t\t\t\t\t\t\t\t\ttx = p.originX; ty = p.originY;\n\t\t\t\t\t\t\t\t\tp.x += (tx - p.x) * p.configSpeed;\n\t\t\t\t\t\t\t\t\tp.y += (ty - p.y) * p.configSpeed;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tp.originX += p.vx; p.originY += p.vy;\n\t\t\t\t\t\t\t\tif (p.originX < 0 || p.originX > width) p.vx *= -1;\n\t\t\t\t\t\t\t\tif (p.originY < 0 || p.originY > height) p.vy *= -1;\n\t\t\t\t\t\t\t\ttx = p.originX; ty = p.originY;\n\t\t\t\t\t\t\t\tp.x += (tx - p.x) * p.configSpeed;\n\t\t\t\t\t\t\t\tp.y += (ty - p.y) * p.configSpeed;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet currentColor = isHovered ? p.colorHover : config.colors.base;\n\n\t\t\t\t\t\t\tif (currentColor !== lastColor) {\n\t\t\t\t\t\t\t\tif (lastColor !== null) ctx.fill(); \n\t\t\t\t\t\t\t\tctx.fillStyle = currentColor;\n\t\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\t\t\tlastColor = currentColor;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\/\/ Thu\u1eadt to\u00e1n v\u1ebd h\u00ecnh d\u1ea1ng (Shape Generator)\n\t\t\t\t\t\t\tif (config.particleShape === 'square') {\n\t\t\t\t\t\t\t\tctx.rect(p.x - p.size, p.y - p.size, p.size * 2, p.size * 2);\n\t\t\t\t\t\t\t} else if (config.particleShape === 'triangle') {\n\t\t\t\t\t\t\t\tctx.moveTo(p.x, p.y - p.size);\n\t\t\t\t\t\t\t\tctx.lineTo(p.x + p.size, p.y + p.size);\n\t\t\t\t\t\t\t\tctx.lineTo(p.x - p.size, p.y + p.size);\n\t\t\t\t\t\t\t\tctx.lineTo(p.x, p.y - p.size);\n\t\t\t\t\t\t\t} else if (config.particleShape === 'diamond') {\n\t\t\t\t\t\t\t\tctx.moveTo(p.x, p.y - p.size);\n\t\t\t\t\t\t\t\tctx.lineTo(p.x + p.size, p.y);\n\t\t\t\t\t\t\t\tctx.lineTo(p.x, p.y + p.size);\n\t\t\t\t\t\t\t\tctx.lineTo(p.x - p.size, p.y);\n\t\t\t\t\t\t\t\tctx.lineTo(p.x, p.y - p.size);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\/\/ Default l\u00e0 Circle (H\u00ecnh tr\u00f2n)\n\t\t\t\t\t\t\t\tctx.moveTo(p.x + p.size, p.y);\n\t\t\t\t\t\t\t\tctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (lastColor !== null) ctx.fill(); \n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst run = async () => {\n\t\t\t\t\tif (document.fonts) {\n\t\t\t\t\t\tawait document.fonts.ready;\n\t\t\t\t\t}\n\t\t\t\t\tawait initParticles();\n\t\t\t\t\tdraw();\n\t\t\t\t};\n\n\t\t\t\trun();\n\n\t\t\t\tlet resizeTimeout;\n\t\t\t\tconst resizeObserver = new ResizeObserver((entries) => {\n\t\t\t\t\tfor (let entry of entries) {\n\t\t\t\t\t\tclearTimeout(resizeTimeout);\n\t\t\t\t\t\tresizeTimeout = setTimeout(async () => {\n\t\t\t\t\t\t\tawait initParticles();\n\t\t\t\t\t\t}, 150);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresizeObserver.observe(container);\n\t\t\t};\n\n\t\t\tif (document.readyState === 'loading') {\n\t\t\t\tdocument.addEventListener('DOMContentLoaded', initCanvasWidget);\n\t\t\t} else {\n\t\t\t\tsetTimeout(initCanvasWidget, 50);\n\t\t\t}\n\t\t})();\n\t\t<\/script>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div role=\"main\" class=\"elementor-element elementor-element-9803ba8 e-flex e-con-boxed e-con e-child\" data-id=\"9803ba8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;position&quot;:&quot;absolute&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2a2d39f elementor-widget elementor-widget-heading\" data-id=\"2a2d39f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Ch\u00ednh s\u00e1ch b\u1ea3o m\u1eadt<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b3ba9a4 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-heading\" data-id=\"b3ba9a4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Ch\u00ednh s\u00e1ch b\u1ea3o m\u1eadt c\u1ee7a Wucode Tech Services v\u1ec1 vi\u1ec7c thu th\u1eadp v\u00e0 b\u1ea3o v\u1ec7 th\u00f4ng tin kh\u00e1ch h\u00e0ng khi s\u1eed d\u1ee5ng d\u1ecbch v\u1ee5 thi\u1ebft k\u1ebf Website, App Mobile v\u00e0 gi\u1ea3i ph\u00e1p IT.<\/h2>\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<div role=\"main\" class=\"elementor-element elementor-element-191716f e-flex e-con-boxed e-con e-parent\" data-id=\"191716f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6392fdf elementor-widget elementor-widget-text-editor\" data-id=\"6392fdf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h3 data-path-to-node=\"4\">\u0110i\u1ec1u 1. GI\u1edaI THI\u1ec6U<\/h3><p data-path-to-node=\"5\">Ch\u00e0o m\u1eebng b\u1ea1n \u0111\u1ebfn v\u1edbi c\u00e1c d\u1ecbch v\u1ee5 \u0111\u01b0\u1ee3c v\u1eadn h\u00e0nh b\u1edfi <a href=\"https:\/\/www.wucode.net\"><b data-path-to-node=\"5\" data-index-in-node=\"52\">C\u00f4ng Ty TNHH Wucode Tech Services<\/b><\/a> (sau \u0111\u00e2y g\u1ecdi l\u00e0 \u201cWucode\u201d, \u201cCh\u00fang t\u00f4i\u201d). Ch\u00fang t\u00f4i cam k\u1ebft t\u00f4n tr\u1ecdng quy\u1ec1n ri\u00eang t\u01b0 v\u00e0 b\u1ea3o v\u1ec7 d\u1eef li\u1ec7u c\u00e1 nh\u00e2n c\u1ee7a ng\u01b0\u1eddi d\u00f9ng m\u1ed9t c\u00e1ch nghi\u00eam t\u00fac. Ch\u00ednh s\u00e1ch n\u00e0y gi\u00fap b\u1ea1n hi\u1ec3u c\u00e1ch ch\u00fang t\u00f4i thu th\u1eadp, x\u1eed l\u00fd v\u00e0 b\u1ea3o v\u1ec7 th\u00f4ng tin c\u1ee7a b\u1ea1n khi b\u1ea1n s\u1eed d\u1ee5ng d\u1ecbch v\u1ee5 thi\u1ebft k\u1ebf Website, App Mobile ho\u1eb7c truy c\u1eadp trang web c\u1ee7a ch\u00fang t\u00f4i.<\/p><h3 data-path-to-node=\"6\">\u0110i\u1ec1u 2. KHI N\u00c0O CH\u00daNG T\u00d4I THU TH\u1eacP D\u1eee LI\u1ec6U?<\/h3><p data-path-to-node=\"7\">Wucode thu th\u1eadp d\u1eef li\u1ec7u c\u00e1 nh\u00e2n c\u1ee7a b\u1ea1n trong c\u00e1c tr\u01b0\u1eddng h\u1ee3p sau:<\/p><ul data-path-to-node=\"8\"><li><p data-path-to-node=\"8,0,0\">Khi b\u1ea1n \u0111\u0103ng k\u00fd t\u01b0 v\u1ea5n d\u1ecbch v\u1ee5 ho\u1eb7c \u0111i\u1ec1n th\u00f4ng tin v\u00e0o Form li\u00ean h\u1ec7.<\/p><\/li><li><p data-path-to-node=\"8,1,0\">khi b\u1ea1n s\u1eed d\u1ee5ng c\u00e1c d\u1ecbch v\u1ee5 \u0111i\u1ec7n t\u1eed c\u1ee7a ch\u00fang t\u00f4i ho\u1eb7c t\u01b0\u01a1ng t\u00e1c qua Website (th\u00f4ng qua Cookie).<\/p><\/li><li><p data-path-to-node=\"8,2,0\">Khi b\u1ea1n g\u1eedi ph\u1ea3n h\u1ed3i, khi\u1ebfu n\u1ea1i ho\u1eb7c y\u00eau c\u1ea7u h\u1ed7 tr\u1ee3 k\u1ef9 thu\u1eadt.<\/p><\/li><li><p data-path-to-node=\"8,3,0\">Khi b\u1ea1n k\u00fd k\u1ebft h\u1ee3p \u0111\u1ed3ng d\u1ecbch v\u1ee5 thi\u1ebft k\u1ebf v\u00e0 ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m v\u1edbi ch\u00fang t\u00f4i.<\/p><\/li><\/ul><h3 data-path-to-node=\"9\">\u0110i\u1ec1u 3. CH\u00daNG T\u00d4I THU TH\u1eacP NH\u1eeeNG D\u1eee LI\u1ec6U G\u00cc?<\/h3><p data-path-to-node=\"10\">C\u00e1c d\u1eef li\u1ec7u c\u00e1 nh\u00e2n c\u01a1 b\u1ea3n bao g\u1ed3m nh\u01b0ng kh\u00f4ng gi\u1edbi h\u1ea1n:<\/p><ul data-path-to-node=\"11\"><li><p data-path-to-node=\"11,0,0\">H\u1ecd v\u00e0 t\u00ean, s\u1ed1 \u0111i\u1ec7n tho\u1ea1i, \u0111\u1ecba ch\u1ec9 email.<\/p><\/li><li><p data-path-to-node=\"11,1,0\">Th\u00f4ng tin doanh nghi\u1ec7p (T\u00ean c\u00f4ng ty, m\u00e3 s\u1ed1 thu\u1ebf).<\/p><\/li><li><p data-path-to-node=\"11,2,0\">\u0110\u1ecba ch\u1ec9 li\u00ean h\u1ec7 v\u00e0 th\u00f4ng tin thanh to\u00e1n.<\/p><\/li><li><p data-path-to-node=\"11,3,0\">C\u00e1c d\u1eef li\u1ec7u k\u1ef9 thu\u1eadt: \u0110\u1ecba ch\u1ec9 IP, lo\u1ea1i tr\u00ecnh duy\u1ec7t, h\u1ec7 \u0111i\u1ec1u h\u00e0nh v\u00e0 h\u00e0nh vi ng\u01b0\u1eddi d\u00f9ng tr\u00ean website th\u00f4ng qua c\u00f4ng c\u1ee5 ph\u00e2n t\u00edch.<\/p><\/li><\/ul><h3 data-path-to-node=\"12\">\u0110i\u1ec1u 4. M\u1ee4C \u0110\u00cdCH X\u1eec L\u00dd D\u1eee LI\u1ec6U<\/h3><p data-path-to-node=\"13\">Ch\u00fang t\u00f4i x\u1eed l\u00fd d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n nh\u1eb1m c\u00e1c m\u1ee5c \u0111\u00edch:<\/p><ul data-path-to-node=\"14\"><li><p data-path-to-node=\"14,0,0\">Cung c\u1ea5p, v\u1eadn h\u00e0nh v\u00e0 t\u1ed1i \u01b0u h\u00f3a d\u1ecbch v\u1ee5 thi\u1ebft k\u1ebf Web\/App theo y\u00eau c\u1ea7u.<\/p><\/li><li><p data-path-to-node=\"14,1,0\">Ph\u1ea3n h\u1ed3i c\u00e1c y\u00eau c\u1ea7u t\u01b0 v\u1ea5n, h\u1ed7 tr\u1ee3 k\u1ef9 thu\u1eadt v\u00e0 b\u00e1o gi\u00e1.<\/p><\/li><li><p data-path-to-node=\"14,2,0\">G\u1eedi th\u00f4ng b\u00e1o v\u1ec1 c\u00e1c b\u1ea3n c\u1eadp nh\u1eadt, n\u00e2ng c\u1ea5p h\u1ec7 th\u1ed1ng ho\u1eb7c \u01b0u \u0111\u00e3i m\u1edbi.<\/p><\/li><li><p data-path-to-node=\"14,3,0\">Ng\u0103n ch\u1eb7n c\u00e1c ho\u1ea1t \u0111\u1ed9ng gian l\u1eadn, t\u1ea5n c\u00f4ng m\u1ea1ng ho\u1eb7c vi ph\u1ea1m ph\u00e1p lu\u1eadt.<\/p><\/li><\/ul><h3 data-path-to-node=\"15\">\u0110i\u1ec1u 5. C\u00d4NG NGH\u1ec6 COOKIES V\u00c0 B\u00caN TH\u1ee8 BA<\/h3><p data-path-to-node=\"16\">Ch\u00fang t\u00f4i s\u1eed d\u1ee5ng &#8220;Cookie&#8221; \u0111\u1ec3 nh\u1eadn d\u1ea1ng thi\u1ebft b\u1ecb v\u00e0 ghi nh\u1edb tr\u1ea3i nghi\u1ec7m c\u1ee7a b\u1ea1n. Ngo\u00e0i ra, ch\u00fang t\u00f4i c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u00e1c c\u00f4ng c\u1ee5 ph\u00e2n t\u00edch (nh\u01b0 Google Analytics) \u0111\u1ec3 \u0111\u00e1nh gi\u00e1 hi\u1ec7u su\u1ea5t trang web. B\u1ea1n c\u00f3 quy\u1ec1n t\u1eeb ch\u1ed1i Cookie th\u00f4ng qua c\u00e0i \u0111\u1eb7t tr\u00ecnh duy\u1ec7t, nh\u01b0ng \u0111i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 l\u00e0m gi\u1ea3m tr\u1ea3i nghi\u1ec7m m\u1ed9t s\u1ed1 t\u00ednh n\u0103ng tr\u00ean website.<\/p><h3 data-path-to-node=\"17\">\u0110i\u1ec1u 6. CAM K\u1ebeT B\u1ea2O M\u1eacT<\/h3><p data-path-to-node=\"18\">Wucode th\u1ef1c hi\u1ec7n c\u00e1c bi\u1ec7n ph\u00e1p qu\u1ea3n l\u00fd v\u00e0 k\u1ef9 thu\u1eadt ph\u00f9 h\u1ee3p (nh\u01b0 m\u00e3 h\u00f3a SSL, t\u01b0\u1eddng l\u1eeda) \u0111\u1ec3 b\u1ea3o v\u1ec7 d\u1eef li\u1ec7u c\u00e1 nh\u00e2n. Tuy nhi\u00ean, trong m\u00f4i tr\u01b0\u1eddng internet, kh\u00f4ng c\u00f3 ph\u01b0\u01a1ng th\u1ee9c truy\u1ec1n \u0111\u01b0a n\u00e0o l\u00e0 b\u1ea3o m\u1eadt tuy\u1ec7t \u0111\u1ed1i 100%. Ch\u00fang t\u00f4i s\u1ebd n\u1ed7 l\u1ef1c h\u1ebft s\u1ee9c \u0111\u1ec3 b\u1ea3o v\u1ec7 th\u00f4ng tin nh\u01b0ng kh\u00f4ng th\u1ec3 cam k\u1ebft an to\u00e0n tuy\u1ec7t \u0111\u1ed1i tr\u01b0\u1edbc c\u00e1c s\u1ef1 c\u1ed1 b\u1ea5t kh\u1ea3 kh\u00e1ng.<\/p><h3 data-path-to-node=\"19\">\u0110i\u1ec1u 7. QUY\u1ec0N C\u1ee6A NG\u01af\u1edcI D\u00d9NG<\/h3><p data-path-to-node=\"20\">B\u1ea1n c\u00f3 to\u00e0n quy\u1ec1n \u0111\u1ed1i v\u1edbi d\u1eef li\u1ec7u c\u00e1 nh\u00e2n c\u1ee7a m\u00ecnh, bao g\u1ed3m:<\/p><ul data-path-to-node=\"21\"><li><p data-path-to-node=\"21,0,0\">Quy\u1ec1n \u0111\u01b0\u1ee3c bi\u1ebft v\u00e0 truy c\u1eadp th\u00f4ng tin \u0111ang \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef.<\/p><\/li><li><p data-path-to-node=\"21,1,0\">Quy\u1ec1n y\u00eau c\u1ea7u ch\u1ec9nh s\u1eeda th\u00f4ng tin kh\u00f4ng ch\u00ednh x\u00e1c.<\/p><\/li><li><p data-path-to-node=\"21,2,0\">Quy\u1ec1n r\u00fat l\u1ea1i s\u1ef1 \u0111\u1ed3ng \u00fd ho\u1eb7c y\u00eau c\u1ea7u x\u00f3a d\u1eef li\u1ec7u (v\u1edbi \u0111i\u1ec1u ki\u1ec7n vi\u1ec7c n\u00e0y kh\u00f4ng \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn ngh\u0129a v\u1ee5 h\u1ee3p \u0111\u1ed3ng \u0111ang th\u1ef1c hi\u1ec7n).<\/p><\/li><\/ul><h3 data-path-to-node=\"22\">\u0110i\u1ec1u 8. TH\u00d4NG TIN LI\u00caN H\u1ec6<\/h3><p data-path-to-node=\"23\">N\u1ebfu b\u1ea1n c\u00f3 b\u1ea5t k\u1ef3 c\u00e2u h\u1ecfi n\u00e0o v\u1ec1 Ch\u00ednh s\u00e1ch b\u1ea3o m\u1eadt n\u00e0y, vui l\u00f2ng li\u00ean h\u1ec7 v\u1edbi ch\u00fang t\u00f4i:<\/p><ul data-path-to-node=\"24\"><li><p data-path-to-node=\"24,0,0\"><b data-path-to-node=\"24,0,0\" data-index-in-node=\"0\">C\u00f4ng Ty TNHH Wucode Tech Services<\/b><\/p><\/li><li><p data-path-to-node=\"24,1,0\"><b data-path-to-node=\"24,1,0\" data-index-in-node=\"0\">Website:<\/b> <a href=\"https:\/\/www.wucode.net\/\">wucode.net<\/a><\/p><\/li><li><p data-path-to-node=\"24,2,0\"><b data-path-to-node=\"24,2,0\" data-index-in-node=\"0\">Email:<\/b> <a href=\"mailto:chris@wucode.net\">chris@wucode.net<\/a><\/p><\/li><li><p data-path-to-node=\"24,3,0\"><b data-path-to-node=\"24,3,0\" data-index-in-node=\"0\">\u0110\u1ecba ch\u1ec9:<\/b> 78\/1 \u0110\u00ecnh Nghi Xu\u00e2n, Khu Ph\u1ed1 14, Ph\u01b0\u1eddng B\u00ecnh Tr\u1ecb \u0110\u1ed9ng, Th\u00e0nh Ph\u1ed1 H\u1ed3 Ch\u00ed Minh<\/p><\/li><li><strong>Li\u00ean h\u1ec7<\/strong>: <a href=\"tel: 84908083563\">0908083563<\/a><\/li><\/ul>\t\t\t\t\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>Ch\u00ednh s\u00e1ch b\u1ea3o m\u1eadt Ch\u00ednh s\u00e1ch b\u1ea3o m\u1eadt c\u1ee7a Wucode Tech Services v\u1ec1 vi\u1ec7c thu th\u1eadp v\u00e0 b\u1ea3o v\u1ec7 th\u00f4ng tin kh\u00e1ch h\u00e0ng khi s\u1eed d\u1ee5ng d\u1ecbch v\u1ee5 thi\u1ebft k\u1ebf Website, App Mobile v\u00e0 gi\u1ea3i ph\u00e1p IT. \u0110i\u1ec1u 1. GI\u1edaI THI\u1ec6U Ch\u00e0o m\u1eebng b\u1ea1n \u0111\u1ebfn v\u1edbi c\u00e1c d\u1ecbch v\u1ee5 \u0111\u01b0\u1ee3c v\u1eadn h\u00e0nh b\u1edfi C\u00f4ng Ty [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2074","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.wucode.net\/en\/wp-json\/wp\/v2\/pages\/2074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wucode.net\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.wucode.net\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.wucode.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wucode.net\/en\/wp-json\/wp\/v2\/comments?post=2074"}],"version-history":[{"count":41,"href":"https:\/\/www.wucode.net\/en\/wp-json\/wp\/v2\/pages\/2074\/revisions"}],"predecessor-version":[{"id":4199,"href":"https:\/\/www.wucode.net\/en\/wp-json\/wp\/v2\/pages\/2074\/revisions\/4199"}],"wp:attachment":[{"href":"https:\/\/www.wucode.net\/en\/wp-json\/wp\/v2\/media?parent=2074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}