{"id":16,"date":"2025-09-23T14:13:43","date_gmt":"2025-09-23T12:13:43","guid":{"rendered":"http:\/\/boarscale.com\/?page_id=16"},"modified":"2026-01-29T09:10:46","modified_gmt":"2026-01-29T08:10:46","slug":"16-2","status":"publish","type":"page","link":"https:\/\/boarscale.com\/","title":{"rendered":"Welcome to the Boarscale"},"content":{"rendered":"\n<div id=\"atmosphere-overlay\">\n    <div class=\"ambient-light\"><\/div>\n    <div id=\"particle-field\"><\/div>\n    \n    <div class=\"intro-trigger-logo\">\n        <img decoding=\"async\" src=\"https:\/\/boarscale.com\/wp-content\/uploads\/2025\/10\/sticker-2.png?v=2\" alt=\"Entrer\">\n        <div class=\"click-hint\">CLIQUEZ POUR ENTRER<\/div>\n    <\/div>\n<\/div>\n\n<style>\n    \/* 1. PAR D\u00c9FAUT : ON CACHE TOUT (Pour \u00e9viter le flash noir sur mobile) *\/\n    #atmosphere-overlay {\n        display: none; \n        position: fixed !important; top: 0 !important; left: 0 !important;\n        width: 100vw !important; height: 100vh !important;\n        background-color: #050505;\n        z-index: 999999999 !important;\n        overflow: hidden; cursor: none;\n    }\n\n    \/* 2. UNIQUEMENT SUR PC : ON R\u00c9ACTIVE L'AFFICHAGE *\/\n    \/* On utilise une classe .desktop-active que le JS ajoutera seulement sur PC *\/\n    #atmosphere-overlay.desktop-active {\n        display: flex !important;\n        justify-content: center; align-items: center;\n    }\n\n    \/* Styles internes *\/\n    .intro-trigger-logo {\n        position: absolute !important; top: 50% !important; left: 50% !important;\n        transform: translate(-50%, -50%) !important; z-index: 1000 !important;\n        text-align: center; cursor: pointer;\n        width: auto !important; max-width: 90% !important;\n        transition: opacity 0.3s ease;\n    }\n    .intro-trigger-logo img { display: block; margin: 0 auto; max-width: 200px; height: auto; }\n    .click-hint { color: white; font-family: sans-serif; font-size: 0.8rem; letter-spacing: 3px; margin-top: 20px; opacity: 0.5; }\n    .ambient-light {\n        position: absolute; top: 0; left: 0; width: 800px; height: 800px;\n        background: radial-gradient(circle, rgba(255,255,255,0.15) 0%, rgba(100,100,100,0.05) 40%, transparent 70%);\n        transform: translate(-50%, -50%); pointer-events: none; mix-blend-mode: screen;\n    }\n    #particle-field { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; }\n    .mini-logo {\n        position: absolute; width: 40px; height: auto; opacity: 0.1;\n        transform: translate(calc(var(--tx, 0) * 1px), calc(var(--ty, 0) * 1px)) scale(var(--s, 1));\n        transition: opacity 0.2s ease; will-change: transform, opacity; filter: brightness(0.5); \n    }\n    .mini-logo.lit { opacity: 0.8; filter: brightness(1.5); z-index: 10; }\n\n    \/* \u00c9tat Fin *\/\n    #atmosphere-overlay.finished { background-color: transparent !important; pointer-events: none; cursor: auto; }\n    #atmosphere-overlay.finished .intro-trigger-logo, #atmosphere-overlay.finished .ambient-light { opacity: 0 !important; }\n    #atmosphere-overlay.finished .mini-logo { opacity: 0 !important; transform: scale(0) !important; transition: opacity 0.5s ease-out; }\n<\/style>\n\n<script>\n(function() {\n    \/\/ --- 1. D\u00c9TECTION MOBILE AGRESSIVE (User Agent) ---\n    \/\/ Si on d\u00e9tecte \"Android\", \"iPhone\", \"iPad\", etc.\n    const isMobileUA = \/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini\/i.test(navigator.userAgent);\n    const isSmallScreen = window.innerWidth < 1025;\n\n    \/\/ Si Mobile d\u00e9tect\u00e9 : ON NE FAIT RIEN DU TOUT.\n    \/\/ Le CSS est d\u00e9j\u00e0 en \"display: none\", donc c'est invisible.\n    \/\/ On supprime juste le HTML pour nettoyer.\n    if (isMobileUA || isSmallScreen) {\n        const overlay = document.getElementById('atmosphere-overlay');\n        if (overlay) overlay.remove();\n        return; \/\/ ON ARR\u00caTE LE SCRIPT ICI. Le site chargera normalement.\n    }\n\n    \/\/ --- 2. SCRIPT PC UNIQUEMENT ---\n    \/\/ Si on arrive ici, c'est un PC.\n    function initDesktopIntro() {\n        const overlay = document.getElementById('atmosphere-overlay');\n        if(!overlay) return;\n\n        \/\/ On active l'affichage\n        overlay.classList.add('desktop-active');\n        document.body.appendChild(overlay); \/\/ T\u00e9l\u00e9portation\n\n        const light = document.querySelector('.ambient-light');\n        const container = document.getElementById('particle-field');\n        const trigger = document.querySelector('.intro-trigger-logo');\n\n        \/\/ \u25bc\u25bc\u25bc URL 2 : TON PETIT LOGO ICI \u25bc\u25bc\u25bc\n        const particleSrc = \"https:\/\/boarscale.com\/wp-content\/uploads\/2026\/01\/logo-gris.png\"; \n\n        const count = 100; const range = 250;\n        let particles = []; let mouseX = window.innerWidth\/2; let mouseY = window.innerHeight\/2;\n        let isRunning = true; let userInteract = false; let time = 0;\n\n        for(let i=0; i<count; i++) {\n            const img = document.createElement('img');\n            img.src = particleSrc; img.className = 'mini-logo';\n            const oX = Math.random() * window.innerWidth; const oY = Math.random() * window.innerHeight;\n            const s = 0.5 + Math.random() * 0.8;\n            img.style.left = oX + 'px'; img.style.top = oY + 'px'; img.style.setProperty('--s', s);\n            container.appendChild(img); particles.push({ el: img, ox: oX, oy: oY, x: 0, y: 0 });\n        }\n\n        function updatePos(x, y) {\n            mouseX = x; mouseY = y; userInteract = true;\n            if(light) light.style.transform = `translate(${x}px, ${y}px) translate(-50%, -50%)`;\n        }\n        document.addEventListener('mousemove', (e) => updatePos(e.clientX, e.clientY));\n\n        function render() {\n            if(!isRunning) return;\n            if(!userInteract) {\n                time += 0.02;\n                mouseX = (window.innerWidth\/2) + Math.sin(time) * (window.innerWidth\/4);\n                mouseY = (window.innerHeight\/2) + Math.cos(time*1.3) * (window.innerHeight\/6);\n                if(light) light.style.transform = `translate(${mouseX}px, ${mouseY}px) translate(-50%, -50%)`;\n            }\n            particles.forEach(p => {\n                const dx = mouseX - p.ox; const dy = mouseY - p.oy; const dist = Math.sqrt(dx*dx + dy*dy);\n                if(dist < range) {\n                    p.el.classList.add('lit'); const move = (range - dist) \/ range;\n                    p.x += (dx * 0.15 * move - p.x) * 0.1; p.y += (dy * 0.15 * move - p.y) * 0.1;\n                } else {\n                    p.el.classList.remove('lit'); p.x += (0 - p.x) * 0.1; p.y += (0 - p.y) * 0.1;\n                }\n                p.el.style.setProperty('--tx', p.x); p.el.style.setProperty('--ty', p.y);\n            });\n            requestAnimationFrame(render);\n        }\n        render();\n\n        trigger.addEventListener('click', function() {\n            if(!isRunning) return; isRunning = false;\n            overlay.classList.add('finished');\n            setTimeout(() => overlay.remove(), 600);\n        });\n    }\n\n    if(document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', initDesktopIntro);\n    } else {\n        initDesktopIntro();\n    }\n})();\n<\/script>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/New-Piskel-1.gif\" alt=\"\" class=\"wp-image-26\" style=\"width:328px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><strong>Pardon our dust \u2013 our website is coming soon!<\/strong><\/p>\n\n\n\n<div style=\"height:606px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div id=\"simon-grid-wrapper\">\n    <div class=\"simon-grid\">\n        <div class=\"s-btn\" data-id=\"0\"><\/div>\n        <div class=\"s-btn\" data-id=\"1\"><\/div>\n        <div class=\"s-btn\" data-id=\"2\"><\/div>\n        \n        <div class=\"s-btn\" data-id=\"3\"><\/div>\n        \n        <div class=\"center-panel\" onclick=\"startGame()\">\n            <div id=\"center-msg\">PLAY<\/div>\n            <div id=\"score-val\">0<\/div>\n        <\/div>\n        \n        <div class=\"s-btn\" data-id=\"4\"><\/div>\n        \n        <div class=\"s-btn\" data-id=\"5\"><\/div>\n        <div class=\"s-btn\" data-id=\"6\"><\/div>\n        <div class=\"s-btn\" data-id=\"7\"><\/div>\n    <\/div>\n<\/div>\n\n<style>\n    #simon-grid-wrapper {\n        display: flex;\n        justify-content: center;\n        padding: 20px;\n        background: transparent;\n        font-family: 'Arial', sans-serif;\n    }\n\n    .simon-grid {\n        display: grid;\n        grid-template-columns: repeat(3, 1fr); \/* 3 colonnes \u00e9gales *\/\n        gap: 10px; \/* Espace entre les carr\u00e9s *\/\n        width: 100%;\n        max-width: 350px; \/* Taille maximale du jeu *\/\n    }\n\n    \/* Les 8 boutons de jeu *\/\n    .s-btn {\n        background-color: #888; \/* Gris par d\u00e9faut *\/\n        aspect-ratio: 1 \/ 1; \/* Force le carr\u00e9 parfait *\/\n        border-radius: 8px;\n        cursor: pointer;\n        transition: background-color 0.1s, transform 0.1s;\n        box-shadow: 0 4px 0 #555; \/* Effet 3D l\u00e9ger *\/\n    }\n\n    .s-btn:active {\n        transform: translateY(4px); \/* Effet d'enfoncement *\/\n        box-shadow: 0 0 0 #555;\n    }\n\n    \/* Le panneau central *\/\n    .center-panel {\n        background-color: #222;\n        color: white;\n        aspect-ratio: 1 \/ 1;\n        border-radius: 8px;\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        align-items: center;\n        cursor: pointer;\n        user-select: none;\n        box-shadow: 0 4px 0 #000;\n        z-index: 10;\n    }\n    .center-panel:active { transform: translateY(2px); }\n\n    #center-msg {\n        font-weight: bold;\n        font-size: 20px;\n        letter-spacing: 1px;\n        margin-bottom: 5px;\n    }\n\n    #score-val {\n        font-size: 24px;\n        color: #ddd;\n        font-family: monospace;\n    }\n\n    \/* Couleurs actives (quand \u00e7a s'allume) *\/\n    \/* On d\u00e9finit 8 couleurs distinctes pour aider la m\u00e9moire *\/\n    .s-btn.lit-0 { background-color: #ff3333; box-shadow: 0 0 15px #ff3333; } \/* Rouge *\/\n    .s-btn.lit-1 { background-color: #ff9933; box-shadow: 0 0 15px #ff9933; } \/* Orange *\/\n    .s-btn.lit-2 { background-color: #ffff33; box-shadow: 0 0 15px #ffff33; } \/* Jaune *\/\n    .s-btn.lit-3 { background-color: #33ff33; box-shadow: 0 0 15px #33ff33; } \/* Vert *\/\n    .s-btn.lit-4 { background-color: #33ffff; box-shadow: 0 0 15px #33ffff; } \/* Cyan *\/\n    .s-btn.lit-5 { background-color: #3333ff; box-shadow: 0 0 15px #3333ff; } \/* Bleu *\/\n    .s-btn.lit-6 { background-color: #9933ff; box-shadow: 0 0 15px #9933ff; } \/* Violet *\/\n    .s-btn.lit-7 { background-color: #ff33ff; box-shadow: 0 0 15px #ff33ff; } \/* Rose *\/\n    \n    .s-btn.lit-error { background-color: #fff; box-shadow: 0 0 20px white; } \/* Flash blanc erreur *\/\n\n<\/style>\n\n<script>\n    (function() {\n        \/\/ Variables globales isol\u00e9es\n        let sequence = [];\n        let playerSequence = [];\n        let level = 0;\n        let isPlaying = false;\n        let iscpuTurn = false;\n        \n        \/\/ Configuration Audio (Gamme majeure de 8 notes)\n        const freqs = [261.63, 293.66, 329.63, 349.23, 392.00, 440.00, 493.88, 523.25]; \n        let audioCtx = new (window.AudioContext || window.webkitAudioContext)();\n\n        function playSound(index, duration = 300) {\n            if (audioCtx.state === 'suspended') audioCtx.resume();\n            \n            const osc = audioCtx.createOscillator();\n            const gain = audioCtx.createGain();\n            \n            \/\/ Son Triangle pour un c\u00f4t\u00e9 \"Jeu Vid\u00e9o 8-bit\"\n            osc.type = index === 'error' ? 'sawtooth' : 'triangle';\n            osc.frequency.value = index === 'error' ? 100 : freqs[index];\n            \n            osc.connect(gain);\n            gain.connect(audioCtx.destination);\n            \n            const now = audioCtx.currentTime;\n            gain.gain.setValueAtTime(0.1, now);\n            gain.gain.linearRampToValueAtTime(0, now + duration\/1000);\n            \n            osc.start();\n            osc.stop(now + duration\/1000 + 0.1);\n\n            \/\/ Gestion Visuelle\n            const btn = document.querySelector(`.s-btn[data-id=\"${index}\"]`);\n            if(btn && index !== 'error') {\n                btn.classList.add(`lit-${index}`);\n                setTimeout(() => btn.classList.remove(`lit-${index}`), duration);\n            }\n        }\n\n        \/\/ Fonction Globale pour d\u00e9marrer (attach\u00e9e \u00e0 window)\n        window.startGame = function() {\n            if (isPlaying) return;\n            sequence = [];\n            level = 0;\n            isPlaying = true;\n            document.getElementById('score-val').innerText = \"0\";\n            document.getElementById('center-msg').innerText = \"LISTEN\";\n            setTimeout(nextLevel, 800);\n        };\n\n        function nextLevel() {\n            playerSequence = [];\n            level++;\n            document.getElementById('score-val').innerText = (level - 1) * 10;\n            \n            \/\/ Ajoute un chiffre entre 0 et 7\n            sequence.push(Math.floor(Math.random() * 8));\n            playSequence();\n        }\n\n        async function playSequence() {\n            iscpuTurn = true;\n            document.querySelector('.simon-grid').style.pointerEvents = 'none'; \/\/ Bloque\n            \n            for (let i = 0; i < sequence.length; i++) {\n                await new Promise(r => setTimeout(r, 600));\n                playSound(sequence[i]);\n            }\n            \n            await new Promise(r => setTimeout(r, 500));\n            iscpuTurn = false;\n            document.querySelector('.simon-grid').style.pointerEvents = 'auto'; \/\/ D\u00e9bloque\n            document.getElementById('center-msg').innerText = \"GO !\";\n        }\n\n        function handleClick(e) {\n            if (!isPlaying || iscpuTurn) return;\n            \n            const id = parseInt(e.target.dataset.id);\n            if (isNaN(id)) return; \/\/ Clic hors bouton\n\n            playSound(id, 200);\n            playerSequence.push(id);\n\n            \/\/ V\u00e9rification\n            const currentStep = playerSequence.length - 1;\n            \n            if (playerSequence[currentStep] !== sequence[currentStep]) {\n                \/\/ ERREUR\n                playSound('error', 500);\n                document.getElementById('center-msg').innerText = \"PERDU\";\n                isPlaying = false;\n                setTimeout(() => {\n                     document.getElementById('center-msg').innerText = \"REJOUER\";\n                }, 1000);\n                return;\n            }\n\n            \/\/ SUCC\u00c8S TOUR\n            if (playerSequence.length === sequence.length) {\n                document.getElementById('center-msg').innerText = \"OK\";\n                setTimeout(nextLevel, 1000);\n            }\n        }\n\n        \/\/ Attachement des \u00e9couteurs d'\u00e9v\u00e9nements aux boutons\n        document.querySelectorAll('.s-btn').forEach(btn => {\n            btn.addEventListener('click', handleClick);\n        });\n\n    })();\n<\/script>\n\n\n\n<div style=\"height:699px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image alignright size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"619\" src=\"https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-1-1024x619.png\" alt=\"\" class=\"wp-image-66\" style=\"width:678px;height:auto\" srcset=\"https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-1-1024x619.png 1024w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-1-300x181.png 300w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-1-768x464.png 768w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-1-1536x928.png 1536w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-1-2048x1237.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<div style=\"height:534px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image alignleft size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"636\" src=\"https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-2-1024x636.png\" alt=\"\" class=\"wp-image-67\" style=\"width:798px;height:auto\" srcset=\"https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-2-1024x636.png 1024w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-2-300x186.png 300w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-2-768x477.png 768w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-2-1536x954.png 1536w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-2-2048x1271.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:727px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"height:1707px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1589\" src=\"https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-3-scaled.png\" alt=\"\" class=\"wp-image-69\" style=\"aspect-ratio:1.611108855414349;width:582px;height:auto\" srcset=\"https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-3-scaled.png 2560w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-3-300x186.png 300w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-3-1024x636.png 1024w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-3-768x477.png 768w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-3-1536x954.png 1536w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/09\/draw-3-2048x1271.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/boarscale.com\/wp-content\/uploads\/2025\/10\/ChatGPT-Image-2-oct.-2025-15_41_33-1.png\" alt=\"\" class=\"wp-image-149\" style=\"width:497px;height:auto\" srcset=\"https:\/\/boarscale.com\/wp-content\/uploads\/2025\/10\/ChatGPT-Image-2-oct.-2025-15_41_33-1.png 1536w, https:\/\/boarscale.com\/wp-content\/uploads\/2025\/10\/ChatGPT-Image-2-oct.-2025-15_41_33-1-300x200.png 300w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n\n\n\n<p><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>CLIQUEZ POUR ENTRER Pardon our dust \u2013 our website is coming soon! PLAY 0<\/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-16","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/boarscale.com\/index.php\/wp-json\/wp\/v2\/pages\/16","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/boarscale.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/boarscale.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/boarscale.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/boarscale.com\/index.php\/wp-json\/wp\/v2\/comments?post=16"}],"version-history":[{"count":67,"href":"https:\/\/boarscale.com\/index.php\/wp-json\/wp\/v2\/pages\/16\/revisions"}],"predecessor-version":[{"id":547,"href":"https:\/\/boarscale.com\/index.php\/wp-json\/wp\/v2\/pages\/16\/revisions\/547"}],"wp:attachment":[{"href":"https:\/\/boarscale.com\/index.php\/wp-json\/wp\/v2\/media?parent=16"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}