プライバシーポリシー

プライバシーポリシー

株式会社チーム・ゼロイチ(以下「当社」といいます。)は、当社の提供するサービス(以下「本サービス」といいます。)における、本サービスを利用する者(以下「利用者」といいます。)についての個人情報を含む利用者情報の取扱いについて、以下のとおりプライバシーポリシー(以下「本ポリシー」といいます。)を定めます。

1 収集する利用者情報及び収集方法
本ポリシーにおいて、「利用者情報」とは、利用者の識別に係る情報、本サービスによって得られた評価情報、その他利用者に関連して生成又は蓄積された情報であって、本ポリシーに基づき当社が収集するものを意味するものとします。本サービスにおいて当社が収集する利用者情報は、その収集方法に応じて、以下のようなものとなります。

(1) 利用者からご提供いただく情報
利用者が本サービスを利用するために、ご提供いただく情報は以下のとおりです。
・氏名
・メールアドレス
・生年月日
・クレジットカード情報
・写真
・その他当社が定める入力フォームに利用者が入力する情報
・その他本サービスの過程で利用者が当社に提供する情報

(2) 利用者が本サービスの利用において、他のサービスと連携を許可することにより、当該他のサービスからご提供いただく情報
利用者が本サービスを利用するにあたり、ソーシャル・ネットワーク・サービス等の外部サービスとの連携を許可した場合には、その許可の際にご同意いただいた内容に基づき、以下の情報を当該外部サービスから収集します。
・当該外部サービスで利用者が利用するID
・その他当該外部サービスのプライバシー設定により利用者が連携先に開示を認めた情報

(3) 利用者が本サービスを利用するにあたって、当社が収集する情報
当社は、本サービスへのアクセス状況やそのご利用方法に関する情報を収集することがあります。これには以下の情報が含まれます。
・端末情報
・ログ情報
・Cookie及び匿名ID

2 利用目的

2-1 利用者情報は、2-2に定めるとおり本サービスの提供のために利用されるほか、2-3に定めるとおり、その他の目的にも利用される場合があります。

2-2 本サービスのサービス提供にかかわる利用者情報の具体的な利用目的は以下のとおりです。
(1) 本サービスに関する登録の受付、本人確認、利用料金の計算等本サービスの提供、維持、保護及び改善のため
(2) 本サービスの利用者に対する評価等を本サービスの委託者(当該利用者を本サービスの対象とすることを委託した者(法人会員など)を意味する。以下同じ。)に提供するため
(3) 本サービスに関するご案内、お問い合わせ等への対応のため
(4) 本サービスに関する当社の規約、ポリシー等(以下「規約等」といいます。)に違反する行為に対する対応のため
(5) 本サービスに関する規約等の変更などを通知するため
(6) 上記の利用目的に付随する利用目的のため

2-3 上記2-2以外の利用目的は以下のとおりです。
【利用目的】
当社のサービスに関連して、個人を識別できない形式に加工した統計データを作成するため
【対応する利用者情報の項目】
・利用者の評価情報
・利用者のスキル特性
・利用者の年齢、性別
・利用者の勤務する業界、役職、所属部署
・その他当社が定める入力フォームに利用者が入力する情報

3 第三者提供
当社は、利用者情報のうち、個人情報については、個人情報保護法その他の法令に基づき開示が認められる場合を除くほか、あらかじめ利用者の同意を得ないで、第三者に提供しません。但し、次に掲げる場合はこの限りではありません。
(1) 本サービスの利用者に対する評価等を、書面又は電磁的情報にして送付する方法で、本サービスの委託者(法人会員など)に提供する場合
(2) 当社が、利用目的の達成に必要な範囲内において個人情報の取扱いの全部又は一部を、当社の業務委託先等の取引先、本サービス及び個別サービスの講師等に委託する場合
(3) 合併その他の事由による事業の承継に伴って個人情報が提供される場合
(4) 国の機関もしくは地方公共団体又はその委託を受けた者が法令の定める事務を遂行することに対して協力する必要がある場合であって、利用者の同意を得ることによって当該事務の遂行に支障を及ぼすおそれがある場合
(5) その他、個人情報保護法その他の法令で認められる場合

4 個人情報の開示
当社は、利用者から個人情報保護法の定めに基づき個人情報の開示を求められたときは、利用者ご本人からのご請求であることを確認の上で、利用者に対し、遅滞なく開示を行います(当該個人情報が存在しないときにはその旨を通知いたします。)。但し、個人情報保護法その他の法令により、当社が開示の義務を負わない場合や、個別サービスとして提供している利用者の評価情報・スキル特性は、この限りではありません。なお、個人情報の開示につきましては、手数料(1件当たり1,000円)を頂戴しておりますので、あらかじめ御了承ください。

5 個人情報の訂正及び利用停止等
5-1 当社は、利用者から、(1)個人情報が真実でないという理由によって個人情報保護法の定めに基づきその内容の訂正を求められた場合、及び(2)あらかじめ公表された利用目的の範囲を超えて取り扱われているという理由又は偽りその他不正の手段により収集されたものであるという理由により、個人情報保護法の定めに基づきその利用の停止を求められた場合には、利用者ご本人からのご請求であることを確認の上で遅滞なく必要な調査を行い、その結果に基づき、個人情報の内容の訂正または利用停止を行い、その旨を利用者に通知します。なお、合理的な理由に基づいて訂正または利用停止を行わない旨の決定をしたときは、利用者に対しその旨を通知いたします。
5-2 当社は、利用者から、利用者の個人情報について消去を求められた場合、当社が当該請求に応じる必要があると判断した場合は、利用者ご本人からのご請求であることを確認の上で、個人情報の消去を行い、その旨を利用者に通知します。
5-3 個人情報保護法その他の法令により、当社が訂正等または利用停止等の義務を負わない場合は、前2項の規定は適用されません。

6 お問い合わせ窓口
ご意見、ご質問、苦情のお申出その他利用情報の取扱いに関するお問い合わせは、下記の窓口までお願い致します。
所在地: 東京都千代田区有楽町一丁目1−2
     東京ミッドタウン日比谷6F「BASE Q」Q-LOUNGE
担当:  代表取締役 赤木 優理

【2021年8月7日制定】

/** * イノマネVillage LP — Elementor カスタムJS * 配置場所: WordPress 管理画面 > Elementor > サイト設定 > カスタムコード * または プラグイン「Code Snippets」などで 閉じタグ前に追加 * * ─── EmailJS 設定手順 ─────────────────────────────────────── * 1. https://www.emailjs.com/ で無料アカウント作成 * 2. Email Services → Custom SMTP → info@signup.team0-1.com を追加 * Service ID をメモ(例: service_xxxxxxx) * 3. Email Templates を2つ作成(下記 EMAILJS CONFIG 参照) * 4. Account > Public Key をコピー * 5. 下記 EMAILJS CONFIG の値を実際のものに書き換える * ──────────────────────────────────────────────────────────── */ (function () { 'use strict'; /* ============================================================ EMAILJS CONFIG — ★ここを実際の値に書き換えてください★ ============================================================ */ const EMAILJS_PUBLIC_KEY = 'YOUR_EMAILJS_PUBLIC_KEY'; // Public Key const EMAILJS_SERVICE_ID = 'YOUR_SERVICE_ID'; // Email Service ID const EMAILJS_TEMPLATE_USER = 'YOUR_TEMPLATE_USER_ID'; // ユーザー御礼テンプレートID const EMAILJS_TEMPLATE_ADMIN = 'YOUR_TEMPLATE_ADMIN_ID'; // 管理者通知テンプレートID /* ============================================================ */ /* ── EmailJS 初期化 ─────────────────────────────────────── */ if (typeof emailjs !== 'undefined') { emailjs.init({ publicKey: EMAILJS_PUBLIC_KEY }); } /* ── DOM refs ──────────────────────────────────────────────── */ const header = document.getElementById('js-header'); const burger = document.getElementById('js-burger'); const drawer = document.getElementById('js-drawer'); const overlay = document.getElementById('js-overlay'); const closeBtn = document.getElementById('js-drawer-close'); const floatCta = document.getElementById('js-float-cta'); const priceEl = document.getElementById('js-price-num'); /* ── Header scroll shadow ───────────────────────────────────── */ function onScroll() { const y = window.scrollY; if (header) header.classList.toggle('is-scrolled', y > 40); const heroEl = document.getElementById('sec-hero'); const threshold = heroEl ? heroEl.offsetTop + heroEl.offsetHeight * 0.5 : 500; if (floatCta) floatCta.classList.toggle('is-visible', y > threshold); } window.addEventListener('scroll', onScroll, { passive: true }); onScroll(); /* ── Drawer ─────────────────────────────────────────────────── */ function openDrawer() { if (!drawer || !overlay) return; drawer.classList.add('is-open'); overlay.classList.add('is-open'); document.body.style.overflow = 'hidden'; const spans = burger ? burger.querySelectorAll('span') : []; if (spans[0]) spans[0].style.transform = 'rotate(45deg) translateY(7px)'; if (spans[1]) spans[1].style.opacity = '0'; if (spans[2]) spans[2].style.transform = 'rotate(-45deg) translateY(-7px)'; } function closeDrawer() { if (!drawer || !overlay) return; drawer.classList.remove('is-open'); overlay.classList.remove('is-open'); document.body.style.overflow = ''; if (burger) { burger.querySelectorAll('span').forEach(s => { s.style.transform = ''; s.style.opacity = '' }); } } if (burger) burger.addEventListener('click', openDrawer); if (closeBtn) closeBtn.addEventListener('click', closeDrawer); if (overlay) overlay.addEventListener('click', closeDrawer); if (drawer) drawer.querySelectorAll('a').forEach(a => a.addEventListener('click', closeDrawer)); /* ── Scroll Reveal ──────────────────────────────────────────── */ if ('IntersectionObserver' in window) { const ro = new IntersectionObserver(entries => { entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('is-visible'); ro.unobserve(e.target); } }); }, { threshold: 0.08, rootMargin: '0px 0px -40px 0px' }); document.querySelectorAll('.js-reveal').forEach(el => ro.observe(el)); } else { document.querySelectorAll('.js-reveal').forEach(el => el.classList.add('is-visible')); } /* ── Price counter 0 → 200 ──────────────────────────────────── */ function runCounter(el, end, ms) { let start = null; const step = ts => { if (!start) start = ts; const p = Math.min((ts - start) / ms, 1); el.textContent = Math.round((1 - Math.pow(1 - p, 4)) * end); if (p < 1) requestAnimationFrame(step); else el.textContent = end; }; requestAnimationFrame(step); } if (priceEl) { if ('IntersectionObserver' in window) { let fired = false; const co = new IntersectionObserver(entries => { if (entries[0].isIntersecting && !fired) { fired = true; runCounter(priceEl, 200, 1600); co.disconnect(); } }, { threshold: 0.5 }); co.observe(priceEl); } else { priceEl.textContent = '200'; } } /* ── Smooth scroll (ヘッダー高さ 76px 分オフセット) ──────── */ document.querySelectorAll('a[href^="#"]').forEach(a => { a.addEventListener('click', function (e) { const id = this.getAttribute('href'); if (!id || id === '#') return; const target = document.querySelector(id); if (!target) return; e.preventDefault(); window.scrollTo({ top: target.getBoundingClientRect().top + window.scrollY - 76, behavior: 'smooth' }); }); }); /* ── Hero v2: overlay parallax ──────────────────────────────── */ const heroBg = document.querySelector('.p-hero-v2__bg'); if (heroBg && window.matchMedia('(min-width:768px)').matches) { window.addEventListener('scroll', () => { heroBg.style.transform = `translateY(${window.scrollY * 0.28}px)`; }, { passive: true }); } /* ── Solution: dim siblings on hover ───────────────────────── */ const solItems = document.querySelectorAll('.p-solution__item'); solItems.forEach(item => { item.addEventListener('mouseenter', () => { solItems.forEach(o => { if (o !== item) { o.style.opacity = '0.72'; o.style.transform = 'scale(0.997)'; o.style.transition = 'opacity .3s, transform .3s'; } }); }); item.addEventListener('mouseleave', () => { solItems.forEach(o => { o.style.opacity = ''; o.style.transform = ''; }); }); }); /* ── Empathy card 3D tilt ───────────────────────────────────── */ document.querySelectorAll('.p-empathy__card').forEach(card => { card.addEventListener('mousemove', e => { const r = card.getBoundingClientRect(); const x = (e.clientX - r.left) / r.width - 0.5; const y = (e.clientY - r.top) / r.height - 0.5; card.style.transform = `perspective(700px) rotateY(${x * 6}deg) rotateX(${-y * 6}deg) scale(1.018)`; card.style.transition = 'transform .08s ease'; }); card.addEventListener('mouseleave', () => { card.style.transform = ''; card.style.transition = 'transform .45s ease, border-color .3s, background .3s'; }); }); /* ── Value2 card ripple ─────────────────────────────────────── */ document.querySelectorAll('.p-value2__card').forEach(card => { card.addEventListener('click', e => { const r = card.getBoundingClientRect(); const rp = document.createElement('span'); Object.assign(rp.style, { position:'absolute', borderRadius:'50%', background:'rgba(79,70,229,.12)', width:'0', height:'0', left:(e.clientX - r.left)+'px', top:(e.clientY - r.top)+'px', transform:'translate(-50%,-50%)', animation:'lxRipple .6s ease-out forwards', pointerEvents:'none' }); card.style.position = 'relative'; card.style.overflow = 'hidden'; card.appendChild(rp); setTimeout(() => rp.remove(), 700); }); }); const ks = document.createElement('style'); ks.textContent = '@keyframes lxRipple{to{width:300px;height:300px;opacity:0}}'; document.head.appendChild(ks); /* ── Steps hover ────────────────────────────────────────────── */ document.querySelectorAll('.p-steps__item').forEach(item => { item.addEventListener('mouseenter', () => { item.style.background = '#f0f4ff'; }); item.addEventListener('mouseleave', () => { item.style.background = ''; }); }); /* ── Comparison table row hover ─────────────────────────────── */ document.querySelectorAll('.p-comparison__table tbody tr').forEach(row => { row.style.transition = 'background .2s'; row.addEventListener('mouseenter', () => row.style.background = 'rgba(255,255,255,.04)'); row.addEventListener('mouseleave', () => row.style.background = ''); }); /* ── Active nav on scroll ───────────────────────────────────── */ const sections = document.querySelectorAll('section[id]'); const navLinks = document.querySelectorAll('.l-header__nav a[href^="#"]'); if ('IntersectionObserver' in window && navLinks.length) { const ao = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { const id = entry.target.id; navLinks.forEach(a => { const active = a.getAttribute('href') === `#${id}`; a.style.color = active ? '#4f46e5' : ''; a.style.borderBottomColor = active ? '#4f46e5' : ''; }); } }); }, { threshold: 0.35, rootMargin: '-76px 0px 0px 0px' }); sections.forEach(s => ao.observe(s)); } /* ── Voice cards lift on hover ──────────────────────────────── */ document.querySelectorAll('.p-voices__card').forEach(card => { card.addEventListener('mouseenter', () => { card.style.transform = 'translateY(-4px)'; card.style.transition = 'transform .3s ease, box-shadow .3s, border-color .3s'; }); card.addEventListener('mouseleave', () => { card.style.transform = ''; }); }); /* ============================================================ CTA インラインフォーム — 送信処理 ============================================================ */ const ctaForm = document.getElementById('js-cta-form'); const ctaThanks = document.getElementById('js-cta-thanks'); const FIELDS = [ { id: 'cta-name', errId: 'err-name', required: true, label: '氏名' }, { id: 'cta-company', errId: 'err-company', required: true, label: '企業名' }, { id: 'cta-department', errId: 'err-department', required: true, label: '部署名' }, { id: 'cta-position', errId: 'err-position', required: true, label: '役職' }, { id: 'cta-email', errId: 'err-email', required: true, label: 'メールアドレス', type: 'email' }, { id: 'cta-message', errId: 'err-message', required: false, label: '問題意識など' }, ]; FIELDS.forEach(f => { const el = document.getElementById(f.id); const err = document.getElementById(f.errId); if (!el || !err) return; el.addEventListener('input', () => { if (el.value.trim()) { err.textContent = ''; el.classList.remove('is-error'); } }); }); function validateForm() { let valid = true; FIELDS.forEach(f => { if (!f.required) return; const el = document.getElementById(f.id); const err = document.getElementById(f.errId); if (!el || !err) return; const val = el.value.trim(); if (!val) { err.textContent = `${f.label}を入力してください`; el.classList.add('is-error'); valid = false; } else if (f.type === 'email' && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val)) { err.textContent = '正しいメールアドレスを入力してください'; el.classList.add('is-error'); valid = false; } else { err.textContent = ''; el.classList.remove('is-error'); } }); const privacyChk = document.getElementById('cta-privacy'); const privacyErr = document.getElementById('err-privacy'); if (privacyChk && !privacyChk.checked) { if (privacyErr) privacyErr.textContent = 'プライバシーポリシーへの同意が必要です'; valid = false; } else if (privacyErr) { privacyErr.textContent = ''; } return valid; } function getFormValues() { return FIELDS.reduce((acc, f) => { const el = document.getElementById(f.id); acc[f.id.replace('cta-', '')] = el ? el.value.trim() : ''; return acc; }, {}); } if (ctaForm) { ctaForm.addEventListener('submit', async function (e) { e.preventDefault(); if (!validateForm()) { const firstErr = ctaForm.querySelector('.is-error'); if (firstErr) firstErr.focus(); return; } const submitBtn = ctaForm.querySelector('.p-cta__form-submit'); const origHTML = submitBtn ? submitBtn.innerHTML : ''; if (submitBtn) { submitBtn.disabled = true; submitBtn.innerHTML = ' 送信中…'; } /* 既存エラーメッセージを削除 */ const prevErr = ctaForm.querySelector('.p-cta__send-error'); if (prevErr) prevErr.remove(); const vals = getFormValues(); const now = new Date().toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' }); /* ── 1. DB 保存 ─────────────────────────────────────── */ let dbOk = false; try { const res = await fetch('tables/inomane_inquiries', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: vals.name, company: vals.company, department: vals.department, position: vals.position, email: vals.email, message: vals.message || '', submitted_at: now, status: 'new' }) }); if (res.ok) dbOk = true; } catch (err) { console.warn('[DB] 保存エラー:', err); } /* ── 2. EmailJS 送信 ────────────────────────────────── */ let mailOk = false; if (typeof emailjs !== 'undefined' && EMAILJS_SERVICE_ID !== 'YOUR_SERVICE_ID' && EMAILJS_TEMPLATE_USER !== 'YOUR_TEMPLATE_USER_ID') { try { /* ユーザー御礼メール */ await emailjs.send(EMAILJS_SERVICE_ID, EMAILJS_TEMPLATE_USER, { to_email: vals.email, to_name: vals.name, company: vals.company, department: vals.department, position: vals.position, email: vals.email, message: vals.message || '(記載なし)', submitted_at: now }); /* 管理者通知メール */ await emailjs.send(EMAILJS_SERVICE_ID, EMAILJS_TEMPLATE_ADMIN, { name: vals.name, company: vals.company, department: vals.department, position: vals.position, email: vals.email, message: vals.message || '(記載なし)', submitted_at: now }); mailOk = true; } catch (err) { console.warn('[EmailJS] 送信エラー:', err); } } else { console.warn('[EmailJS] 未設定のためメール送信をスキップ'); mailOk = true; /* 未設定時はフォーム完了扱い */ } /* ── 3. 完了 or エラー処理 ──────────────────────────── */ if (dbOk || mailOk) { ctaForm.style.display = 'none'; if (ctaThanks) { ctaThanks.style.display = 'flex'; ctaThanks.scrollIntoView({ behavior: 'smooth', block: 'center' }); } } else { /* 送信失敗 */ if (submitBtn) { submitBtn.disabled = false; submitBtn.innerHTML = origHTML; } const errDiv = document.createElement('div'); errDiv.className = 'p-cta__send-error'; errDiv.textContent = '送信に失敗しました。時間をおいて再度お試しください。'; ctaForm.insertBefore(errDiv, ctaForm.querySelector('.p-cta__form-submit')); } }); } })();