{"id":7609,"date":"2026-01-14T18:21:03","date_gmt":"2026-01-14T17:21:03","guid":{"rendered":"https:\/\/innovacore.group\/?post_type=portfolio&p=7609"},"modified":"2026-03-17T10:40:53","modified_gmt":"2026-03-17T08:40:53","slug":"comave","status":"publish","type":"portfolio","link":"https:\/\/innovacore.group\/ja\/portfolio\/comave\/","title":{"rendered":"ComAve &#8211; \u7a76\u6975\u306e\u30d5\u30a1\u30f3\u4f53\u9a13\u3068\u5831\u916c"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">ComAve is revolutionizing the sports world by bridging the gap between passionate supporters and top European football clubs. Through a global platform that combines e-commerce, gamification, and an innovative loyalty program, ComAve offers fans more than just merchandise. They provide access to exclusive rewards, VIP treatments, and unique interactions, transforming the way fans connect with their favorite teams in a seamless digital environment.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u72ec\u5360\u7684\u306a\u5831\u916c\u3001\u30b2\u30fc\u30df\u30d5\u30a3\u30b1\u30fc\u30b7\u30e7\u30f3\u3001VIP\u4f53\u9a13\u3092\u901a\u3058\u3066\u4e3b\u8981\u30af\u30e9\u30d6\u3068\u3064\u306a\u304c\u308b\u3002<\/p>\n","protected":false},"featured_media":2369,"parent":0,"template":"","meta":{"inline_featured_image":false,"company_name":"ComAve","summary":"Ultimate<span class=\"ic-nycd\">\u30d5\u30a1\u30f3\u4f53\u9a13<\/span>& <span class=\"ic-nycd\">\u5831\u916c<\/span>","mission":"<p>ComAve \u306e\u30df\u30c3\u30b7\u30e7\u30f3\u306f\u30d5\u30a1\u30f3\u306e\u60c5\u71b1\u306b\u5831\u3044\u308b\u3053\u3068\u3067\u3059\u3002\u65e5\u5e38\u306e\u4ea4\u6d41\u3092\u901a\u3058\u3066\u5fd8\u308c\u3089\u308c\u306a\u3044\u3001\u5b9f\u4e16\u754c\u306e\u201c\u304a\u91d1\u3067\u8cb7\u3048\u306a\u3044\u201d\u4f53\u9a13\u3084\u516c\u5f0f\u7279\u5178\u3092\u89e3\u653e\u3059\u308b\u7d71\u4e00\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3092\u4f5c\u308b\u3053\u3068\u3067\u3001\u30b5\u30dd\u30fc\u30bf\u30fc\u3068\u30c1\u30fc\u30e0\u306e\u7d46\u3092\u6df1\u3081\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u307e\u3059\u3002<\/p>\n","impact":"<p>ComAve \u306f\u3001\u5358\u306a\u308b\u53d6\u5f15\u304b\u3089\u6df1\u3044\u5fe0\u8aa0\u5fc3\u306b\u57fa\u3065\u304f\u95a2\u4fc2\u3078\u3068\u79fb\u884c\u3055\u305b\u308b\u3053\u3068\u3067\u3001\u30b9\u30dd\u30fc\u30c4\u30d5\u30a1\u30f3\u306e\u95a2\u4e0e\u3092\u518d\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u3002\u30d5\u30a1\u30f3\u306e\u65c5\u3092\u30c7\u30b8\u30bf\u30eb\u5316\u3057\u3001\u6bd4\u985e\u306e\u306a\u3044\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u3067\u3001\u30af\u30e9\u30d6\u306e\u30ea\u30c6\u30f3\u30b7\u30e7\u30f3\u3092\u9ad8\u3081\u3001\u4e16\u754c\u4e2d\u306e\u30b5\u30dd\u30fc\u30bf\u30fc\u306b\u611f\u60c5\u7684\u306a\u5b9f\u8cea\u7684\u30ea\u30bf\u30fc\u30f3\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n","company_logo":"https:\/\/innovacore.group\/wp-content\/uploads\/comave-logo-innov-innovacore-optimized.jpg","website_url":"https:\/\/comave.com\/","linkedin_url":"https:\/\/www.linkedin.com\/company\/wherefanswin\/","location":"\u30ed\u30f3\u30c9\u30f3, \u30a4\u30ae\u30ea\u30b9","founded_year":"2020","key_numbers":{"item-0":{"metric_label":"\u8a66\u5408\u89b3\u5ba2\u6570","metric_value":"1919"},"item-1":{"metric_label":"VIP\u4f53\u9a13","metric_value":"1200"},"item-2":{"metric_label":"\u72ec\u81ea\u4f53\u9a13","metric_value":"212"}},"hiring_status":"\u63a1\u7528\u4e2d","sector":"\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9","company_type":"\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7","audience":["b2b_a_b2c"],"geo_scope":["\u30b0\u30ed\u30fc\u30d0\u30eb"],"business_model":["\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9"],"funding_stage":"\u6210\u9577\u671f","partnership_type":"\u8cb7\u53ce","logo_animation":"<div id=\"comave-particle-root\">\r\n    <canvas id=\"comaveCanvas\"><\/canvas>\r\n<\/div>\r\n\r\n<style>\r\n    #comave-particle-root {\r\n        width: 100%;\r\n        height: 300px; \/* Hauteur fixe respect\u00e9e *\/\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        background: transparent;\r\n        overflow: hidden;\r\n        cursor: crosshair;\r\n    }\r\n<\/style>\r\n\r\n<script>\r\n(function() {\r\n    const canvas = document.getElementById('comaveCanvas');\r\n    const ctx = canvas.getContext('2d', { willReadFrequently: true });\r\n    const root = document.getElementById('comave-particle-root');\r\n    \r\n    let width, height;\r\n    let particles = [];\r\n    let mouse = { x: -1000, y: -1000 };\r\n    const particleColor = '#f5f5f5'; \/\/ Gris clair Innovacore\r\n    let time = 0;\r\n\r\n    function init() {\r\n        width = root.offsetWidth;\r\n        height = 300;\r\n        \r\n        const dpr = window.devicePixelRatio || 1;\r\n        canvas.width = width * dpr;\r\n        canvas.height = height * dpr;\r\n        canvas.style.width = width + 'px';\r\n        canvas.style.height = height + 'px';\r\n        ctx.scale(dpr, dpr);\r\n\r\n        createLogoParticles();\r\n    }\r\n\r\n    function createLogoParticles() {\r\n        particles = [];\r\n        const cx = width \/ 2;\r\n        const cy = height \/ 2;\r\n        const isMobile = width < 600;\r\n\r\n        \/\/ --- 1. CONFIGURATION DU DESSIN ---\r\n        \/\/ On va dessiner le logo en blanc pour le scanner\r\n        ctx.fillStyle = 'white';\r\n        ctx.textAlign = 'left'; \r\n        ctx.textBaseline = 'middle';\r\n\r\n        \/\/ Dimensions relatives\r\n        const iconSize = isMobile ? 40 : 60; \/\/ Rayon de l'hexagone\r\n        const fontSizeMain = isMobile ? 40 : 70;\r\n        const fontSizeSub = isMobile ? 12 : 20;\r\n        const gap = isMobile ? 15 : 25; \/\/ Espace entre ic\u00f4ne et texte\r\n\r\n        \/\/ Calcul de la largeur totale pour centrer le tout\r\n        \/\/ Estimation : (Icon * 2) + Gap + TextWidth\r\n        ctx.font = `italic 900 ${fontSizeMain}px Arial, Helvetica, sans-serif`;\r\n        const textMetrics = ctx.measureText('ComAve');\r\n        const textWidth = textMetrics.width;\r\n        \r\n        const totalWidth = (iconSize * 2) + gap + textWidth;\r\n        const startX = cx - (totalWidth \/ 2);\r\n\r\n        \/\/ --- 2. DESSIN DE L'IC\u00d4NE (HEXAGONE) ---\r\n        const hexX = startX + iconSize; \/\/ Centre de l'hexagone\r\n        \r\n        \/\/ A. L'Hexagone plein\r\n        ctx.beginPath();\r\n        for (let i = 0; i < 6; i++) {\r\n            const angle = 2 * Math.PI \/ 6 * i;\r\n            \/\/ On tourne un peu pour avoir la pointe sur le c\u00f4t\u00e9 comme le logo\r\n            const x_i = hexX + iconSize * Math.cos(angle);\r\n            const y_i = cy + iconSize * Math.sin(angle);\r\n            if (i === 0) ctx.moveTo(x_i, y_i);\r\n            else ctx.lineTo(x_i, y_i);\r\n        }\r\n        ctx.closePath();\r\n        ctx.fill();\r\n\r\n        \/\/ B. Le \"C\" (Espace n\u00e9gatif)\r\n        \/\/ On change le mode de fusion pour \"gommer\" l'int\u00e9rieur\r\n        ctx.globalCompositeOperation = 'destination-out';\r\n        \r\n        \/\/ Le trou du C\r\n        ctx.font = `900 ${iconSize * 1.2}px Arial, sans-serif`;\r\n        ctx.textAlign = 'center';\r\n        ctx.fillText('C', hexX, cy + (iconSize * 0.1)); \r\n        \r\n        \/\/ Retour au mode normal pour dessiner la suite\r\n        ctx.globalCompositeOperation = 'source-over';\r\n        \r\n        \/\/ C. Le point central (si n\u00e9cessaire, le logo a un axe central)\r\n        \/\/ On remet un petit point au centre pour styliser le C comme le logo ComAve\r\n        ctx.fillStyle = 'white';\r\n        ctx.beginPath();\r\n        ctx.arc(hexX, cy, iconSize * 0.15, 0, Math.PI*2);\r\n        ctx.fill();\r\n\r\n        \/\/ --- 3. DESSIN DU TEXTE ---\r\n        const textX = startX + (iconSize * 2) + gap;\r\n        \r\n        \/\/ \"ComAve\"\r\n        ctx.textAlign = 'left';\r\n        ctx.font = `italic 900 ${fontSizeMain}px Arial, Helvetica, sans-serif`;\r\n        ctx.fillText('ComAve', textX, cy - (fontSizeMain * 0.15));\r\n\r\n        \/\/ \"United to win\"\r\n        ctx.font = `italic normal ${fontSizeSub}px Arial, Helvetica, sans-serif`;\r\n        ctx.fillText('United to win', textX, cy + (fontSizeMain * 0.5));\r\n\r\n        \/\/ --- 4. SCAN DES PIXELS ---\r\n        const density = 4;\r\n        const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height).data;\r\n        const dataWidth = canvas.width; \r\n\r\n        for (let y = 0; y < canvas.height; y += density) {\r\n            for (let x = 0; x < canvas.width; x += density) {\r\n                if (imageData[(y * dataWidth + x) * 4 + 3] > 128) {\r\n                    const dpr = window.devicePixelRatio || 1;\r\n                    particles.push({\r\n                        x: x \/ dpr,\r\n                        y: y \/ dpr,\r\n                        originX: x \/ dpr,\r\n                        originY: y \/ dpr,\r\n                        vx: 0, \r\n                        vy: 0,\r\n                        size: Math.random() * 1.5 + 0.5,\r\n                        force: Math.random() \r\n                    });\r\n                }\r\n            }\r\n        }\r\n        \r\n        ctx.clearRect(0, 0, width, height);\r\n    }\r\n\r\n    function draw() {\r\n        ctx.clearRect(0, 0, width, height);\r\n        time += 0.05;\r\n\r\n        ctx.fillStyle = particleColor;\r\n        \r\n        particles.forEach(p => {\r\n            \/\/ 1. Respiration\r\n            const waveX = Math.sin(time * 0.5 + p.y * 0.05) * 2;\r\n            const waveY = Math.cos(time * 0.3 + p.x * 0.05) * 2;\r\n\r\n            \/\/ 2. Interaction\r\n            const dx = mouse.x - p.x;\r\n            const dy = mouse.y - p.y;\r\n            const dist = Math.sqrt(dx*dx + dy*dy);\r\n            const radius = 80;\r\n\r\n            let repelX = 0;\r\n            let repelY = 0;\r\n\r\n            if (dist < radius) {\r\n                const force = (radius - dist) \/ radius;\r\n                const angle = Math.atan2(dy, dx);\r\n                repelX = -Math.cos(angle) * force * 20;\r\n                repelY = -Math.sin(angle) * force * 20;\r\n            }\r\n\r\n            \/\/ 3. Physique\r\n            const targetX = p.originX + waveX;\r\n            const targetY = p.originY + waveY;\r\n\r\n            const ax = (targetX - p.x) * 0.08;\r\n            const ay = (targetY - p.y) * 0.08;\r\n\r\n            p.vx += ax;\r\n            p.vy += ay;\r\n            p.vx += repelX * 0.5;\r\n            p.vy += repelY * 0.5;\r\n            p.vx *= 0.85; \r\n\r\n            p.x += p.vx;\r\n            p.y += p.vy;\r\n\r\n            ctx.beginPath();\r\n            ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);\r\n            ctx.fill();\r\n        });\r\n\r\n        requestAnimationFrame(draw);\r\n    }\r\n\r\n    const updateMouse = (e) => {\r\n        const r = canvas.getBoundingClientRect();\r\n        const cx = e.touches ? e.touches[0].clientX : e.clientX;\r\n        const cy = e.touches ? e.touches[0].clientY : e.clientY;\r\n        mouse.x = cx - r.left;\r\n        mouse.y = cy - r.top;\r\n    };\r\n\r\n    window.addEventListener('resize', init);\r\n    canvas.addEventListener('mousemove', updateMouse);\r\n    canvas.addEventListener('touchmove', updateMouse, {passive: true});\r\n    canvas.addEventListener('mouseleave', () => { mouse.x = -1000; mouse.y = -1000; });\r\n    canvas.addEventListener('touchend', () => { mouse.x = -1000; mouse.y = -1000; });\r\n\r\n    setTimeout(init, 50);\r\n    draw();\r\n})();\r\n<\/script>"},"pt":[],"pipeline":[],"class_list":["post-7609","portfolio","type-portfolio","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/innovacore.group\/ja\/wp-json\/wp\/v2\/portfolio\/7609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innovacore.group\/ja\/wp-json\/wp\/v2\/portfolio"}],"about":[{"href":"https:\/\/innovacore.group\/ja\/wp-json\/wp\/v2\/types\/portfolio"}],"version-history":[{"count":1,"href":"https:\/\/innovacore.group\/ja\/wp-json\/wp\/v2\/portfolio\/7609\/revisions"}],"predecessor-version":[{"id":7610,"href":"https:\/\/innovacore.group\/ja\/wp-json\/wp\/v2\/portfolio\/7609\/revisions\/7610"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/innovacore.group\/ja\/wp-json\/wp\/v2\/media\/2369"}],"wp:attachment":[{"href":"https:\/\/innovacore.group\/ja\/wp-json\/wp\/v2\/media?parent=7609"}],"wp:term":[{"taxonomy":"pt","embeddable":true,"href":"https:\/\/innovacore.group\/ja\/wp-json\/wp\/v2\/pt?post=7609"},{"taxonomy":"pipeline","embeddable":true,"href":"https:\/\/innovacore.group\/ja\/wp-json\/wp\/v2\/pipeline?post=7609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}