{"id":65,"date":"2026-09-28T00:35:27","date_gmt":"2026-09-28T00:35:27","guid":{"rendered":"https:\/\/producmetal.cl\/?page_id=65"},"modified":"2026-09-28T02:07:45","modified_gmt":"2026-09-28T02:07:45","slug":"home","status":"publish","type":"page","link":"https:\/\/producmetal.cl\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"65\" class=\"elementor elementor-65\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b29b972 e-con-full e-flex e-con e-parent\" data-id=\"b29b972\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-a00ca9a e-con-full e-flex e-con e-child\" data-id=\"a00ca9a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-db4bad7 e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"db4bad7\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6335fa6 elementor-widget__width-initial elementor-widget elementor-widget-image\" data-id=\"6335fa6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"768\" height=\"512\" src=\"https:\/\/producmetal.cl\/wp-content\/uploads\/2026\/09\/envios2-768x512.png\" class=\"attachment-medium_large size-medium_large wp-image-177\" alt=\"\" srcset=\"https:\/\/producmetal.cl\/wp-content\/uploads\/2026\/09\/envios2-768x512.png 768w, https:\/\/producmetal.cl\/wp-content\/uploads\/2026\/09\/envios2-300x200.png 300w, https:\/\/producmetal.cl\/wp-content\/uploads\/2026\/09\/envios2-1024x683.png 1024w, https:\/\/producmetal.cl\/wp-content\/uploads\/2026\/09\/envios2.png 1536w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-724f871 elementor-widget elementor-widget-image\" data-id=\"724f871\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"683\" height=\"1024\" src=\"https:\/\/producmetal.cl\/wp-content\/uploads\/2026\/09\/gabinete02321544-683x1024.png\" class=\"attachment-large size-large wp-image-71\" alt=\"\" srcset=\"https:\/\/producmetal.cl\/wp-content\/uploads\/2026\/09\/gabinete02321544-683x1024.png 683w, https:\/\/producmetal.cl\/wp-content\/uploads\/2026\/09\/gabinete02321544-200x300.png 200w, https:\/\/producmetal.cl\/wp-content\/uploads\/2026\/09\/gabinete02321544-768x1152.png 768w, https:\/\/producmetal.cl\/wp-content\/uploads\/2026\/09\/gabinete02321544.png 1024w\" sizes=\"(max-width: 683px) 100vw, 683px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ae50566 e-con-full e-flex e-con e-child\" data-id=\"ae50566\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f845bef elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"f845bef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div data-gabinete-metal><\/div>\n\n<script>\n(() => {\n  'use strict';\n\n  const host = document.currentScript.previousElementSibling;\n  if (!host || host.shadowRoot) return;\n\n  const root = host.attachShadow({ mode: 'open' });\n\n  root.innerHTML = `\n    <style>\n      :host {\n        display: block;\n        width: 100%;\n        contain: content;\n        background: transparent;\n      }\n\n      .scene {\n        width: 100%;\n        height: clamp(440px, 70vw, 800px);\n        background: transparent;\n        overflow: hidden;\n      }\n\n      canvas {\n        display: block;\n        width: 100%;\n        height: 100%;\n        background: transparent;\n      }\n    <\/style>\n\n    <div class=\"scene\">\n      <canvas\n        role=\"img\"\n        aria-label=\"Ensamblaje de gabinete met\u00e1lico\"\n      ><\/canvas>\n    <\/div>\n  `;\n\n  const canvas = root.querySelector('canvas');\n  const ctx = canvas.getContext('2d', { alpha: true });\n\n  let W = 0;\n  let H = 0;\n  let scale = 1;\n  let start = null;\n  let visible = true;\n  let faces = [];\n\n  const parts = [];\n  const reduce = matchMedia('(prefers-reduced-motion: reduce)');\n\n  const C = {\n    shell: [204, 207, 199],\n    frame: [168, 175, 165],\n    tray: [192, 199, 187],\n    dark: [61, 68, 61],\n    steel: [128, 138, 128]\n  };\n\n  function part(delay, offset, build) {\n    const p = { delay, offset, boxes: [] };\n\n    build((x, y, z, w, h, d, color = C.shell) => {\n      p.boxes.push({ x, y, z, w, h, d, color });\n    });\n\n    parts.push(p);\n  }\n\n  \/\/ Base.\n  part(0, [0, -110, 0], b => {\n    b(0, 0, 0, 230, 14, 170);\n    b(9, 14, 9, 212, 3, 152, C.dark);\n    b(0, 14, 0, 230, 14, 7);\n    b(0, 14, 163, 230, 14, 7);\n    b(0, 14, 7, 7, 14, 156);\n    b(223, 14, 7, 7, 14, 156);\n  });\n\n  \/\/ Panel posterior.\n  part(0.8, [0, 30, -160], b => {\n    b(3, 28, 0, 224, 414, 3);\n    b(3, 28, 3, 9, 414, 12);\n    b(218, 28, 3, 9, 414, 12);\n  });\n\n  \/\/ Lateral izquierdo.\n  part(1.65, [-160, 0, 0], b => {\n    b(0, 28, 5, 3, 414, 158);\n    b(3, 28, 153, 14, 414, 10);\n    b(3, 28, 5, 14, 414, 8);\n    b(3, 433, 13, 12, 9, 140);\n    b(3, 28, 13, 12, 9, 140);\n  });\n\n  \/\/ Lateral derecho.\n  part(2.5, [160, 0, 0], b => {\n    b(227, 28, 5, 3, 414, 158);\n    b(213, 28, 153, 14, 414, 10);\n    b(213, 28, 5, 14, 414, 8);\n    b(215, 433, 13, 12, 9, 140);\n    b(215, 28, 13, 12, 9, 140);\n  });\n\n  \/\/ Montante izquierdo.\n  part(3.35, [-60, 80, 140], b => {\n    b(22, 29, 128, 8, 405, 8, C.frame);\n\n    for (let y = 50; y < 420; y += 24) {\n      b(23, y, 136.1, 3, 7, 0.3, C.dark);\n    }\n  });\n\n  \/\/ Montante derecho.\n  part(3.85, [60, 80, 140], b => {\n    b(200, 29, 128, 8, 405, 8, C.frame);\n\n    for (let y = 50; y < 420; y += 24) {\n      b(202, y, 136.1, 3, 7, 0.3, C.dark);\n    }\n  });\n\n  \/\/ Bandejas interiores.\n  [91, 192, 293].forEach((y, i) => {\n    part(4.4 + i * 0.6, [0, 20, 200], b => {\n      b(29, y, 18, 172, 3, 118, C.tray);\n      b(29, y + 3, 18, 172, 13, 3, C.tray);\n      b(29, y + 3, 21, 3, 11, 115, C.tray);\n      b(198, y + 3, 21, 3, 11, 115, C.tray);\n      b(29, y - 9, 133, 172, 12, 3, C.tray);\n    });\n  });\n\n  \/\/ Tapa superior.\n  part(6.25, [0, 170, 0], b => {\n    b(-3, 442, -3, 236, 4, 176);\n    b(-3, 432, 167, 236, 10, 6);\n    b(-3, 432, -3, 6, 10, 170);\n    b(227, 432, -3, 6, 10, 170);\n  });\n\n  \/\/ Frente con aberturas reales.\n  part(7.15, [0, 0, 240], b => {\n    const x = 8;\n    const z = 171;\n    const w = 214;\n\n    let bottom = 27;\n\n    for (const y of [247, 277, 307, 337, 367]) {\n      b(x, bottom, z, w, y - bottom, 3);\n      b(x, y, z, 28, 8, 3);\n      b(x + w - 28, y, z, 28, 8, 3);\n\n      bottom = y + 8;\n    }\n\n    b(x, bottom, z, w, 437 - bottom, 3);\n    b(x, 27, 160, 3, 410, 11);\n    b(x + w - 3, 27, 160, 3, 410, 11);\n\n    b(190, 146, 174, 10, 31, 4, C.dark);\n    b(193, 151, 178, 4, 20, 3, C.steel);\n\n    [100, 360].forEach(y => {\n      b(5, y, 168, 7, 28, 9, C.steel);\n    });\n  });\n\n  function project(v) {\n    return [\n      W * 0.5 + (v[0] * 0.82 - v[2] * 0.72) * scale,\n      H * 0.54 +\n        (v[0] * 0.32 + v[2] * 0.365 - v[1] * 0.94) * scale\n    ];\n  }\n\n  function addBox(b, o) {\n    const x = b.x - 115 + o[0];\n    const y = b.y - 223 + o[1];\n    const z = b.z - 85 + o[2];\n\n    const w = b.w;\n    const h = b.h;\n    const d = b.d;\n\n    const vertices = [\n      [x, y, z],\n      [x + w, y, z],\n      [x + w, y + h, z],\n      [x, y + h, z],\n      [x, y, z + d],\n      [x + w, y, z + d],\n      [x + w, y + h, z + d],\n      [x, y + h, z + d]\n    ];\n\n    [\n      [[4, 5, 6, 7], 0.92],\n      [[1, 2, 6, 5], 0.66],\n      [[3, 7, 6, 2], 1.12]\n    ].forEach(([ids, light]) => {\n      const verts = ids.map(i => vertices[i]);\n\n      const depth = verts.reduce((sum, p) => {\n        return sum + p[0] * 0.72 + p[2] * 0.82 + p[1] * 0.564;\n      }, 0) \/ 4;\n\n      faces.push({\n        verts,\n        color: b.color,\n        light,\n        depth\n      });\n    });\n  }\n\n  function ease(t) {\n    t = Math.max(0, Math.min(1, t));\n    return t * t * t * (t * (t * 6 - 15) + 10);\n  }\n\n  function draw(t) {\n    ctx.clearRect(0, 0, W, H);\n    faces = [];\n\n    const cycle = t % 18.5;\n\n    \/\/ Sombra semitransparente sobre el fondo de tu p\u00e1gina.\n    ctx.save();\n    ctx.translate(W * 0.5, H * 0.86);\n    ctx.scale(1, 0.19);\n\n    const shadow = ctx.createRadialGradient(\n      0, 0, 0,\n      0, 0, W * 0.32\n    );\n\n    shadow.addColorStop(0, 'rgba(0,0,0,.46)');\n    shadow.addColorStop(1, 'rgba(0,0,0,0)');\n\n    ctx.fillStyle = shadow;\n    ctx.fillRect(-W, -W, W * 2, W * 2);\n    ctx.restore();\n\n    parts.forEach(p => {\n      let mix = reduce.matches\n        ? 0\n        : 1 - ease((cycle - 1.2 - p.delay) \/ 1.45);\n\n      if (!reduce.matches && cycle > 13.2) {\n        mix = ease(\n          (cycle - 13.2 - (7.15 - p.delay) * 0.16) \/ 2.4\n        );\n      }\n\n      const offset = p.offset.map(n => n * mix);\n\n      p.boxes.forEach(b => addBox(b, offset));\n    });\n\n    faces.sort((a, b) => a.depth - b.depth);\n\n    faces.forEach(f => {\n      const points = f.verts.map(project);\n\n      ctx.beginPath();\n\n      points.forEach((p, i) => {\n        if (i) {\n          ctx.lineTo(...p);\n        } else {\n          ctx.moveTo(...p);\n        }\n      });\n\n      ctx.closePath();\n\n      const color = factor => {\n        const rgb = f.color.map(n => {\n          return Math.min(255, Math.round(n * f.light * factor));\n        });\n\n        return `rgb(${rgb.join(',')})`;\n      };\n\n      const gradient = ctx.createLinearGradient(\n        points[0][0],\n        points[0][1],\n        points[2][0] + 0.01,\n        points[2][1] + 0.01\n      );\n\n      gradient.addColorStop(0, color(1.035));\n      gradient.addColorStop(0.52, color(1));\n      gradient.addColorStop(1, color(0.96));\n\n      ctx.fillStyle = gradient;\n      ctx.fill();\n\n      ctx.strokeStyle = 'rgba(65,73,63,.42)';\n      ctx.lineWidth = 0.6;\n      ctx.stroke();\n    });\n  }\n\n  function resize() {\n    const rect = canvas.getBoundingClientRect();\n\n    W = rect.width;\n    H = rect.height;\n\n    const dpr = Math.min(devicePixelRatio || 1, 2);\n\n    canvas.width = Math.round(W * dpr);\n    canvas.height = Math.round(H * dpr);\n\n    ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n\n    scale = Math.min(W \/ 760, H \/ 780);\n\n    draw(\n      start === null\n        ? 0\n        : (performance.now() - start) \/ 1000\n    );\n  }\n\n  function tick(now) {\n    if (!host.isConnected) {\n      observer.disconnect();\n      intersection.disconnect();\n      return;\n    }\n\n    if (start === null) start = now;\n\n    if (visible) {\n      draw((now - start) \/ 1000);\n    }\n\n    requestAnimationFrame(tick);\n  }\n\n  const observer = new ResizeObserver(resize);\n  observer.observe(canvas);\n\n  const intersection = new IntersectionObserver(entries => {\n    visible = entries[0].isIntersecting;\n  });\n\n  intersection.observe(host);\n\n  resize();\n  requestAnimationFrame(tick);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-65","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/producmetal.cl\/index.php?rest_route=\/wp\/v2\/pages\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/producmetal.cl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/producmetal.cl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/producmetal.cl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/producmetal.cl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=65"}],"version-history":[{"count":124,"href":"https:\/\/producmetal.cl\/index.php?rest_route=\/wp\/v2\/pages\/65\/revisions"}],"predecessor-version":[{"id":213,"href":"https:\/\/producmetal.cl\/index.php?rest_route=\/wp\/v2\/pages\/65\/revisions\/213"}],"wp:attachment":[{"href":"https:\/\/producmetal.cl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}