{"id":3599,"date":"2025-08-20T08:45:00","date_gmt":"2025-08-20T08:45:00","guid":{"rendered":"https:\/\/voitelukeskus.fi\/?page_id=3599"},"modified":"2026-01-27T13:30:05","modified_gmt":"2026-01-27T11:30:05","slug":"asiakasetu","status":"publish","type":"page","link":"https:\/\/voitelukeskus.fi\/sv\/asiakasetu\/","title":{"rendered":"Kundf\u00f6rdel"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3599\" class=\"elementor elementor-3599\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e52b863 e-flex e-con-boxed e-con e-parent\" data-id=\"e52b863\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4445690 e-grid e-con-full e-con e-child\" data-id=\"4445690\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9aa13f1 elementor-widget elementor-widget-image\" data-id=\"9aa13f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"129\" src=\"https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/Voitelukeskus_vaaka_AE.png\" class=\"attachment-large size-large wp-image-4474\" alt=\"\" srcset=\"https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/Voitelukeskus_vaaka_AE.png 800w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/Voitelukeskus_vaaka_AE-300x48.png 300w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/Voitelukeskus_vaaka_AE-768x124.png 768w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/Voitelukeskus_vaaka_AE-18x3.png 18w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/Voitelukeskus_vaaka_AE-600x97.png 600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b649827 elementor-widget elementor-widget-image\" data-id=\"b649827\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"189\" src=\"https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/finnelox_logo_AE.png\" class=\"attachment-large size-large wp-image-4473\" alt=\"\" srcset=\"https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/finnelox_logo_AE.png 800w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/finnelox_logo_AE-300x71.png 300w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/finnelox_logo_AE-768x181.png 768w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/finnelox_logo_AE-18x4.png 18w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/finnelox_logo_AE-600x142.png 600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ef6c5e0 e-flex e-con-boxed e-con e-parent\" data-id=\"ef6c5e0\" 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-cab30cc elementor-widget elementor-widget-heading\" data-id=\"cab30cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Voitelukeskus &amp; Finn-Elox \u2013 loistavat asiakasedut nykyisille ja uusille asiakkaille<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-62ba130 elementor-widget elementor-widget-text-editor\" data-id=\"62ba130\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tKun tilaat Voitelukeskukselta ja Finn-Eloxilta laadukkaita huoltotarvikkeita, saat asiakasedun \u2013 olitpa nykyinen tai uusi asiakas. Etu voi olla esimerkiksi tuote-etu, lahjakortti tai muu hy\u00f6ty seuraavaan hankintaasi.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f13094 elementor-widget elementor-widget-heading\" data-id=\"5f13094\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Tarkista etusi helposti:<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f80df6 elementor-widget elementor-widget-text-editor\" data-id=\"7f80df6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tSy\u00f6t\u00e4 laskunumerosi asiakasetukoneeseen, niin n\u00e4et heti, mink\u00e4 edun olet saanut seuraavan tilauksesi yhteyteen.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-778effa elementor-widget elementor-widget-shortcode\" data-id=\"778effa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">  <div id=\"spin-game\" class=\"game-wrap\">\r\n    \r\n    <div class=\"game-container\">\r\n      \r\n      <div class=\"game-header\">\r\n        <span class=\"header-badge\">\ud83c\udf81 ASIAKASETU<\/span>\r\n      <\/div>\r\n      \r\n      <div class=\"slot-section\">\r\n        <div class=\"slot-machine\">\r\n          <div class=\"slot-glow\"><\/div>\r\n          <div class=\"pointer pointer-left\"><\/div>\r\n          <div class=\"slot-reels\">\r\n            <div class=\"reel\"><div class=\"reel-inner\"><div class=\"symbol\">\u2022<\/div><\/div><\/div>\r\n            <div class=\"reel\"><div class=\"reel-inner\"><div class=\"symbol\">\u2022<\/div><\/div><\/div>\r\n            <div class=\"reel\"><div class=\"reel-inner\"><div class=\"symbol\">\u2022<\/div><\/div><\/div>\r\n          <\/div>\r\n          <div class=\"pointer pointer-right\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      \r\n      <div class=\"input-section\">\r\n        <label class=\"input-label\">Sy\u00f6t\u00e4 laskunumero<\/label>\r\n        <div class=\"input-group\">\r\n          <input type=\"text\" id=\"spin-code\" class=\"game-input\" autocomplete=\"off\" placeholder=\"esim. 123456\">\r\n          <button id=\"spin-btn\" class=\"game-btn\" type=\"button\">Pelaa<\/button>\r\n        <\/div>\r\n      <\/div>\r\n      \r\n      <div id=\"spin-status\" class=\"status\"><\/div>\r\n      <div id=\"connection-error\" class=\"connection-error\" style=\"display:none;\">\r\n        \u26a0\ufe0f Yhteys poikki. Kokeile my\u00f6hemmin uudelleen.\r\n      <\/div>\r\n      \r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- VOITTO POPUP -->\r\n  <div id=\"win-overlay\" class=\"overlay\">\r\n    <div class=\"overlay-card win-card\">\r\n      <div class=\"overlay-emoji\">\ud83c\udf89<\/div>\r\n      <h2 class=\"overlay-title\">Onneksi olkoon!<\/h2>\r\n      <div class=\"prize-section\">\r\n        <span class=\"prize-label\">Voitit:<\/span>\r\n        <div id=\"win-prize\" class=\"prize-box\"><\/div>\r\n      <\/div>\r\n      <p class=\"delivery-note\">Asiakasedun voitte lunastaa seuraavan tilauksen yhteyteen.<\/p>\r\n      <div class=\"overlay-timer\">\r\n        <div class=\"timer-bar\"><div id=\"win-progress\" class=\"timer-fill\"><\/div><\/div>\r\n        <span class=\"timer-hint\">Klikkaa sulkeaksesi<\/span>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- EI VOITTOA POPUP -->\r\n  <div id=\"lose-overlay\" class=\"overlay\">\r\n    <div class=\"overlay-card lose-card\">\r\n      <div class=\"overlay-emoji\">\ud83d\ude14<\/div>\r\n      <h2 class=\"overlay-title\">Ei voittoa<\/h2>\r\n      <p id=\"lose-message\" class=\"overlay-text\"><\/p>\r\n      <div class=\"overlay-timer\">\r\n        <div class=\"timer-bar\"><div id=\"lose-progress\" class=\"timer-fill\"><\/div><\/div>\r\n        <span class=\"timer-hint\">Klikkaa sulkeaksesi<\/span>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <canvas id=\"confetti-canvas\"><\/canvas>\r\n\r\n  <style>\r\n    :root { --blue: #084682; --yellow: #FFD000; }\r\n    .game-wrap { max-width: 520px; margin: 2rem auto; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; }\r\n    .game-container { background: #fff; border-radius: 24px; box-shadow: 0 20px 50px rgba(0,0,0,0.1); overflow: hidden; border: 3px solid var(--blue); }\r\n    .game-header { padding: 24px; text-align: center; }\r\n    .header-badge { display: inline-block; background: var(--blue); color: #fff; font-size: 0.85rem; font-weight: 700; padding: 10px 24px; border-radius: 50px; letter-spacing: 0.1em; }\r\n    .slot-section { padding: 20px 24px 32px; }\r\n    .slot-machine { display: flex; align-items: center; justify-content: center; gap: 12px; position: relative; }\r\n    .slot-glow { position: absolute; inset: -20px; background: radial-gradient(ellipse at center, rgba(8,70,130,0.1) 0%, transparent 70%); pointer-events: none; }\r\n    .pointer { width: 0; height: 0; border-top: 24px solid transparent; border-bottom: 24px solid transparent; z-index: 2; }\r\n    .pointer-left { border-left: 14px solid var(--yellow); }\r\n    .pointer-right { border-right: 14px solid var(--yellow); }\r\n    .slot-reels { display: flex; background: #f8fafc; border-radius: 20px; padding: 8px; gap: 4px; box-shadow: inset 0 2px 8px rgba(0,0,0,0.08), 0 0 0 3px var(--blue); }\r\n    .reel { width: 100px; height: 100px; background: #fff; border-radius: 14px; overflow: hidden; }\r\n    .reel-inner { display: flex; flex-direction: column; }\r\n    .symbol { width: 100px; height: 100px; display: flex; align-items: center; justify-content: center; font-size: 3.2rem; }\r\n    @keyframes spin { 0% { transform: translateY(0); } 100% { transform: translateY(-700px); } }\r\n    .input-section { padding: 0 24px 20px; }\r\n    .input-label { display: block; font-size: 0.9rem; font-weight: 600; color: #374151; margin-bottom: 12px; text-align: center; }\r\n    .input-group { display: flex; gap: 12px; }\r\n    .game-input { flex: 1; padding: 16px 20px; font-size: 16px; border: 2px solid #e5e7eb; border-radius: 14px; background: #f9fafb; outline: none; -webkit-appearance: none; }\r\n    .game-input:focus { border-color: var(--blue); box-shadow: 0 0 0 4px rgba(8,70,130,0.12); }\r\n    .game-btn { padding: 16px 28px; font-size: 1rem; font-weight: 700; color: #fff; background: var(--blue); border: none; border-radius: 14px; cursor: pointer; }\r\n    .game-btn:hover:not([disabled]) { background: var(--yellow); color: var(--blue); }\r\n    .game-btn[disabled] { opacity: 0.5; cursor: not-allowed; }\r\n    .status { min-height: 30px; display: flex; align-items: center; justify-content: center; gap: 8px; padding: 0 24px 10px; color: #666; font-size: 0.9rem; }\r\n    .spinner { width: 18px; height: 18px; border: 2px solid #e5e7eb; border-top-color: var(--blue); border-radius: 50%; animation: rotate 0.7s linear infinite; }\r\n    @keyframes rotate { to { transform: rotate(360deg); } }\r\n    \r\n    .connection-error { margin: 0 24px 24px; padding: 16px 20px; background: #fef2f2; border: 2px solid #fecaca; border-radius: 12px; color: #dc2626; font-weight: 600; text-align: center; }\r\n\r\n    \/* OVERLAYS *\/\r\n    .overlay { position: fixed; inset: 0; z-index: 9999; display: none; align-items: center; justify-content: center; padding: 20px; backdrop-filter: blur(12px); animation: fadeIn 0.2s; }\r\n    @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }\r\n    .overlay-card { text-align: center; padding: 40px 48px; border-radius: 28px; max-width: 420px; width: 100%; animation: slideUp 0.3s ease-out; }\r\n    @keyframes slideUp { from { opacity: 0; transform: translateY(30px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } }\r\n    \r\n    .win-card { background: linear-gradient(135deg, var(--yellow) 0%, #FFE033 100%); box-shadow: 0 25px 80px rgba(255,208,0,0.5); }\r\n    .win-card .overlay-emoji { font-size: 4rem; margin-bottom: 20px; animation: bounce 0.5s ease-in-out infinite; }\r\n    .win-card .overlay-title { font-size: 2rem; font-weight: 800; margin: 0 0 24px; color: var(--blue); }\r\n    \r\n    .prize-section { margin-bottom: 16px; }\r\n    .prize-label { display: block; font-size: 0.9rem; font-weight: 600; color: var(--blue); opacity: 0.8; margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.1em; }\r\n    .prize-box { display: inline-block; background: var(--blue); color: #fff; font-size: 1.4rem; font-weight: 700; padding: 14px 28px; border-radius: 14px; box-shadow: 0 4px 15px rgba(8,70,130,0.3); max-width: 100%; word-wrap: break-word; box-sizing: border-box; }\r\n    \r\n    .delivery-note { font-size: 0.95rem; line-height: 1.5; margin: 0; color: var(--blue); opacity: 0.85; font-weight: 500; }\r\n    \r\n    .win-card .timer-bar { background: rgba(8,70,130,0.15); }\r\n    .win-card .timer-fill { background: var(--blue); }\r\n    .win-card .timer-hint { color: var(--blue); opacity: 0.7; }\r\n    @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }\r\n    \r\n    .lose-card { background: #fff; box-shadow: 0 25px 80px rgba(0,0,0,0.2); }\r\n    .lose-card .overlay-emoji { font-size: 3.5rem; margin-bottom: 20px; }\r\n    .lose-card .overlay-title { font-size: 1.6rem; font-weight: 800; margin: 0 0 16px; color: #1f2937; }\r\n    .lose-card .overlay-text { font-size: 1rem; line-height: 1.5; margin: 0; color: #4b5563; }\r\n    .lose-card .timer-bar { background: #e5e7eb; }\r\n    .lose-card .timer-fill { background: var(--blue); }\r\n    .lose-card .timer-hint { color: #9ca3af; }\r\n\r\n    .overlay-timer { margin-top: 24px; }\r\n    .timer-bar { width: 140px; height: 4px; border-radius: 2px; margin: 0 auto 10px; overflow: hidden; }\r\n    .timer-fill { height: 100%; width: 100%; border-radius: 2px; transition: width 0.1s linear; }\r\n    .timer-hint { font-size: 0.75rem; font-weight: 500; }\r\n\r\n    #confetti-canvas { position: fixed; inset: 0; pointer-events: none; z-index: 10000; display: none; }\r\n    \r\n    @media (max-width: 520px) {\r\n      .game-wrap { margin: 1rem; }\r\n      .reel, .symbol { width: 80px; height: 80px; }\r\n      .symbol { font-size: 2.6rem; }\r\n      .input-group { flex-direction: column; }\r\n      \r\n      .overlay { padding: 16px; }\r\n      .overlay-card { padding: 28px 20px; border-radius: 24px; max-width: 100%; }\r\n      .win-card .overlay-emoji { font-size: 3rem; margin-bottom: 16px; }\r\n      .win-card .overlay-title { font-size: 1.5rem; margin-bottom: 20px; }\r\n      .prize-label { font-size: 0.8rem; margin-bottom: 6px; }\r\n      .prize-box { font-size: 1.15rem; padding: 12px 20px; border-radius: 12px; }\r\n      .delivery-note { font-size: 0.85rem; }\r\n      .overlay-timer { margin-top: 20px; }\r\n      .timer-bar { width: 100px; }\r\n      \r\n      .lose-card .overlay-emoji { font-size: 2.8rem; margin-bottom: 16px; }\r\n      .lose-card .overlay-title { font-size: 1.4rem; margin-bottom: 14px; }\r\n      .lose-card .overlay-text { font-size: 0.9rem; }\r\n    }\r\n    \r\n    @media (max-width: 375px) {\r\n      .overlay-card { padding: 24px 16px; }\r\n      .win-card .overlay-emoji { font-size: 2.5rem; margin-bottom: 12px; }\r\n      .win-card .overlay-title { font-size: 1.3rem; margin-bottom: 16px; }\r\n      .lose-card .overlay-emoji { font-size: 2.5rem; margin-bottom: 12px; }\r\n      .prize-label { font-size: 0.75rem; }\r\n      .prize-box { font-size: 1rem; padding: 10px 16px; }\r\n      .delivery-note { font-size: 0.8rem; }\r\n      .timer-hint { font-size: 0.7rem; }\r\n    }\r\n    \r\n    @supports (padding: env(safe-area-inset-top)) {\r\n      .overlay { \r\n        padding-top: max(16px, env(safe-area-inset-top)); \r\n        padding-bottom: max(16px, env(safe-area-inset-bottom)); \r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <script>\r\n  (function(){\r\n    var ajaxUrl = \"https:\/\/voitelukeskus.fi\/wp-admin\/admin-ajax.php\";\r\n    if (window.location.protocol === 'https:' && ajaxUrl.indexOf('http:') === 0) {\r\n      ajaxUrl = ajaxUrl.replace('http:', 'https:');\r\n    }\r\n\r\n    var btn = document.getElementById('spin-btn');\r\n    var inp = document.getElementById('spin-code');\r\n    var statusEl = document.getElementById('spin-status');\r\n    var errorEl = document.getElementById('connection-error');\r\n    var reels = Array.prototype.slice.call(document.querySelectorAll('.reel-inner'));\r\n\r\n    var winOverlay = document.getElementById('win-overlay');\r\n    var winTitle = winOverlay.querySelector('.overlay-title');\r\n    var winPrize = document.getElementById('win-prize');\r\n    var winNote = winOverlay.querySelector('.delivery-note');\r\n    var winProgress = document.getElementById('win-progress');\r\n    var loseOverlay = document.getElementById('lose-overlay');\r\n    var loseMsg = document.getElementById('lose-message');\r\n    var loseProgress = document.getElementById('lose-progress');\r\n\r\n    var SYMS = ['\ud83c\udf52','\ud83c\udf4b','\ud83c\udf4a','\u2b50','\ud83d\udd14','\ud83c\udf47','\ud83c\udf40'];\r\n    var CELL = window.innerWidth <= 520 ? 80 : 100;\r\n    var reelOrders = [];\r\n\r\n    var canvas = document.getElementById('confetti-canvas');\r\n    var ctx = canvas.getContext('2d');\r\n\r\n    function setStatus(msg) {\r\n      statusEl.innerHTML = msg ? '<div class=\"spinner\"><\/div><span>' + msg + '<\/span>' : '';\r\n    }\r\n\r\n    function showError() {\r\n      errorEl.style.display = 'block';\r\n    }\r\n\r\n    function hideError() {\r\n      errorEl.style.display = 'none';\r\n    }\r\n\r\n    function mountReels() {\r\n      reels.forEach(function(inner, idx) {\r\n        inner.style.animation = 'none';\r\n        inner.style.transform = 'translateY(0)';\r\n        var offset = Math.floor(Math.random() * SYMS.length);\r\n        var order = SYMS.slice(offset).concat(SYMS.slice(0, offset));\r\n        reelOrders[idx] = order;\r\n        inner.innerHTML = order.map(function(s) { return '<div class=\"symbol\">' + s + '<\/div>'; }).join('');\r\n      });\r\n    }\r\n\r\n    function startSpin() {\r\n      mountReels();\r\n      reels.forEach(function(inner, i) {\r\n        var dur = (1.2 + Math.random() * 0.6).toFixed(2);\r\n        setTimeout(function() {\r\n          inner.style.animation = 'spin ' + dur + 's linear infinite';\r\n        }, i * 50);\r\n      });\r\n    }\r\n\r\n    function stopReel(index, symbol) {\r\n      var inner = reels[index];\r\n      var order = reelOrders[index] || SYMS;\r\n      var targetIndex = Math.max(0, order.indexOf(symbol));\r\n      inner.style.animation = 'none';\r\n      inner.style.transform = 'translateY(-' + (targetIndex * CELL) + 'px)';\r\n    }\r\n\r\n    function stopAllReels(symbols, callback) {\r\n      var delay = 0;\r\n      symbols.forEach(function(sym, i) {\r\n        setTimeout(function() { \r\n          stopReel(i, sym); \r\n          if (i === symbols.length - 1 && callback) {\r\n            setTimeout(callback, 400);\r\n          }\r\n        }, delay);\r\n        delay += 350;\r\n      });\r\n    }\r\n\r\n    function confetti() {\r\n      canvas.style.display = 'block';\r\n      canvas.width = window.innerWidth;\r\n      canvas.height = window.innerHeight;\r\n      var particles = [];\r\n      var colors = ['#084682', '#FFD000', '#fff', '#059669'];\r\n      for (var i = 0; i < 150; i++) {\r\n        var angle = (Math.PI * 2 * i) \/ 150;\r\n        var speed = 6 + Math.random() * 10;\r\n        particles.push({ x: canvas.width\/2, y: canvas.height\/2, vx: Math.cos(angle)*speed, vy: Math.sin(angle)*speed-4, w: 5+Math.random()*6, h: 8+Math.random()*7, c: colors[Math.floor(Math.random()*colors.length)], r: Math.random()*Math.PI*2, vr: (Math.random()-0.5)*0.3 });\r\n      }\r\n      var frame = 0;\r\n      function draw() {\r\n        if (frame > 300) { canvas.style.display = 'none'; return; }\r\n        frame++;\r\n        ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n        particles.forEach(function(p) {\r\n          ctx.save(); ctx.translate(p.x, p.y); ctx.rotate(p.r); ctx.globalAlpha = Math.max(0, 1-frame\/300); ctx.fillStyle = p.c; ctx.fillRect(-p.w\/2, -p.h\/2, p.w, p.h); ctx.restore();\r\n          p.x += p.vx; p.y += p.vy; p.vy += 0.1; p.vx *= 0.99; p.r += p.vr;\r\n        });\r\n        requestAnimationFrame(draw);\r\n      }\r\n      draw();\r\n    }\r\n\r\n    function showOverlay(type, message, duration) {\r\n      var overlay, progress;\r\n      if (type === 'win') {\r\n        overlay = winOverlay;\r\n        progress = winProgress;\r\n        winPrize.innerHTML = message;\r\n        confetti();\r\n      } else {\r\n        overlay = loseOverlay;\r\n        progress = loseProgress;\r\n        loseMsg.textContent = message;\r\n      }\r\n      overlay.style.display = 'flex';\r\n      \r\n      var start = Date.now();\r\n      function tick() {\r\n        var remaining = Math.max(0, 100 - ((Date.now() - start) \/ duration) * 100);\r\n        progress.style.width = remaining + '%';\r\n        if (remaining > 0 && overlay.style.display !== 'none') {\r\n          requestAnimationFrame(tick);\r\n        } else if (remaining <= 0) {\r\n          hideOverlay(type);\r\n        }\r\n      }\r\n      tick();\r\n    }\r\n\r\n    function hideOverlay(type) {\r\n      var overlay, progress;\r\n      if (type === 'win') {\r\n        overlay = winOverlay;\r\n        progress = winProgress;\r\n      } else {\r\n        overlay = loseOverlay;\r\n        progress = loseProgress;\r\n      }\r\n      overlay.style.display = 'none';\r\n      progress.style.width = '100%';\r\n    }\r\n\r\n    winOverlay.addEventListener('click', function() { hideOverlay('win'); });\r\n    loseOverlay.addEventListener('click', function() { hideOverlay('lose'); });\r\n\r\n    function submit() {\r\n      var code = (inp.value || '').trim().toUpperCase();\r\n      if (!code) { return; }\r\n\r\n      btn.disabled = true;\r\n      hideError();\r\n      setStatus('Tarkistetaan...');\r\n      startSpin();\r\n\r\n      var fd = new FormData();\r\n      fd.append('action', 'check_spin_code_n8n');\r\n      fd.append('code', code);\r\n\r\n      fetch(ajaxUrl, { method: 'POST', body: fd, credentials: 'same-origin' })\r\n        .then(function(r) { \r\n          if (!r.ok) console.error('Network error (status):', r.status);\r\n          return r.text(); \r\n        })\r\n        .then(function(text) {\r\n          var data;\r\n          try {\r\n            data = JSON.parse(text);\r\n          } catch (err) {\r\n            console.error('Invalid JSON response from server:', text);\r\n            throw err;\r\n          }\r\n\r\n          if (data.connection_error) {\r\n            console.warn('Backend connection error.');\r\n            reels.forEach(function(inner) { inner.style.animation = 'none'; });\r\n            setStatus('');\r\n            showError();\r\n            btn.disabled = false;\r\n            return;\r\n          }\r\n          \r\n          var isWin = data.success === true;\r\n          var isAlreadyChecked = data.alreadyChecked === true;\r\n          var symbols = isWin ? ['\u2b50','\u2b50','\u2b50'] : ['\ud83c\udf4b','\ud83c\udf47','\ud83c\udf52'];\r\n          var displayText = data.prize || data.message || 'Yll\u00e4tys!';\r\n          \r\n          var overlayType;\r\n          if (isAlreadyChecked) {\r\n            overlayType = 'win';\r\n            winTitle.textContent = 'Laskunumero on jo tarkistettu.';\r\n            winNote.textContent = 'Ota meihin yhteytt\u00e4 mik\u00e4li her\u00e4\u00e4 lis\u00e4kysymyksi\u00e4.';\r\n          } else if (isWin) {\r\n            overlayType = 'win';\r\n            winTitle.textContent = 'Onneksi olkoon!';\r\n            winNote.textContent = 'Asiakasedun voitte lunastaa seuraavan tilauksen yhteyteen.';\r\n          } else {\r\n            overlayType = 'lose';\r\n          }\r\n          \r\n          setTimeout(function() {\r\n            stopAllReels(symbols, function() {\r\n              setStatus('');\r\n              showOverlay(overlayType, displayText, 20000);\r\n              btn.disabled = false;\r\n            });\r\n          }, 2000);\r\n        })\r\n        .catch(function(err) {\r\n          console.error('Fetch error:', err);\r\n          reels.forEach(function(inner) { inner.style.animation = 'none'; });\r\n          setStatus('');\r\n          showError();\r\n          btn.disabled = false;\r\n        });\r\n    }\r\n\r\n    mountReels();\r\n    reels.forEach(function(inner, i) {\r\n      inner.style.transform = 'translateY(-' + (Math.floor(Math.random() * SYMS.length) * CELL) + 'px)';\r\n    });\r\n\r\n    btn.addEventListener('click', submit);\r\n    inp.addEventListener('keydown', function(e) { \r\n      if (e.key === 'Enter') { e.preventDefault(); submit(); }\r\n    });\r\n  })();\r\n  <\/script>\r\n  \n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e10fb1 elementor-hidden-desktop elementor-hidden-tablet elementor-widget elementor-widget-image\" data-id=\"7e10fb1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"200\" src=\"https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/tausta_mobile_ae-copy-1024x256.png\" class=\"attachment-large size-large wp-image-4557\" alt=\"\" srcset=\"https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/tausta_mobile_ae-copy-1024x256.png 1024w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/tausta_mobile_ae-copy-300x75.png 300w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/tausta_mobile_ae-copy-768x192.png 768w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/tausta_mobile_ae-copy-1536x384.png 1536w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/tausta_mobile_ae-copy-18x5.png 18w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/tausta_mobile_ae-copy-600x150.png 600w, https:\/\/voitelukeskus.fi\/wp-content\/uploads\/2026\/01\/tausta_mobile_ae-copy.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Voitelukeskus &amp; Finn-Elox \u2013 loistavat asiakasedut nykyisille ja uusille asiakkaille Kun tilaat Voitelukeskukselta ja Finn-Eloxilta laadukkaita huoltotarvikkeita, saat asiakasedun \u2013 olitpa nykyinen tai uusi asiakas. Etu voi olla esimerkiksi tuote-etu, lahjakortti tai muu hy\u00f6ty seuraavaan hankintaasi. Tarkista etusi helposti: Sy\u00f6t\u00e4 laskunumerosi asiakasetukoneeseen, niin n\u00e4et heti, mink\u00e4 edun olet saanut seuraavan tilauksesi yhteyteen.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-3599","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/voitelukeskus.fi\/sv\/wp-json\/wp\/v2\/pages\/3599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/voitelukeskus.fi\/sv\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/voitelukeskus.fi\/sv\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/voitelukeskus.fi\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/voitelukeskus.fi\/sv\/wp-json\/wp\/v2\/comments?post=3599"}],"version-history":[{"count":113,"href":"https:\/\/voitelukeskus.fi\/sv\/wp-json\/wp\/v2\/pages\/3599\/revisions"}],"predecessor-version":[{"id":4583,"href":"https:\/\/voitelukeskus.fi\/sv\/wp-json\/wp\/v2\/pages\/3599\/revisions\/4583"}],"wp:attachment":[{"href":"https:\/\/voitelukeskus.fi\/sv\/wp-json\/wp\/v2\/media?parent=3599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}