利用規約

チーム・ゼロイチ 利用規約
本チーム・ゼロイチ利用規約(以下「本規約」といいます。)には、株式会社チーム・ゼロイチ(以下「当社」といいます。)の提供する、各種サービス(以下「本サービス」といいます。)のご利用にあたり、登録会員の皆様に遵守していただかなければならない事項及び当社と登録会員の皆様との間の権利義務関係が定められております。本サービスを登録会員としてご利用になる方は、本規約に同意する前に、必ず全文お読み下さいますようお願い致します。

第1条 適 用
本規約は、本サービスの利用に関する当社と登録会員との間の権利義務関係を定めることを目的とし登録会員と当社の間の本サービスの利用に関わる一切の関係に適用されます。

第2条 定 義
本規約において使用する以下の用語は各々以下に定める意味を有するものとします。
(1) 「当社ウェブサイト」とは、そのドメインが「team0-1.com」である当社が運営するウェブサイト(理由の如何を問わず当社のウェブサイトのドメイン又は内容が変更された場合は、当該変更後のウェブサイトを含みます。)を意味します。
(2) 「登録会員」とは、第3条に基づき本サービスの利用者としての登録がなされた個人又は法人を意味します。
(3) 「個人会員」とは、個人の登録会員を意味します。
(4) 「法人会員」とは、法人の登録会員を意味します。
(5) 「本サービス」とは、有償・無償を問わず、当社が提供する全サービスを意味します。
(6) 「個別サービス」」とは、本サービスのうち、内容及び対価等が個別に定められた第4条第1項に記載された具体的なサービスを意味します。
(7) 「利用契約」とは、第3条第4項に基づき当社と登録会員の間で成立する、本規約の諸規定に従った本サービスの基本契約を意味します。
(8) 「知的財産権」とは、著作権、特許権、実用新案権、商標権、意匠権その他の知的財産権(それらの権利を取得し、又はそれらの権利につき登録等を出願する権利を含む。)を意味します。
(9) 「反社会的勢力等」とは、暴力団、暴力団員、暴力団準構成員、暴力団関係企業等、総会屋等、社会運動等標ぼうゴロまたは特殊知能暴力集団等、その他これらに準ずる者、又は以下の行為を行う者を意味する。
 ① 暴力的な要求行為
 ② 法的な責任を超えた不当な要求行為
 ③ 取引に関して、脅迫的な言動をし、または暴力を用いる行為
 ④ 風説を流布し、偽計を用いまたは威力を用いて当社の信用を棄損し、または当社の業務を妨害する行為
 ⑤ その他これらに準ずる行為

第3条 登録手続及び登録事項の変更
1 本サービスの利用を希望する者(以下「登録希望者」といいます。)は、本規約を遵守することに同意し、かつ当社の定める一定の情報(以下「登録事項」といいます。)を当社の定める方法で当社に提供することにより、当社に対し、本サービスの利用の登録を申請することができます。
2 登録の申請は必ず本サービスを利用する個人又は法人自身が行わなければならず、原則として代理人による登録申請は認められません。また、本サービスの利用を希望する者は、登録の申請にあたり、真実、正確かつ最新の情報を当社に提供しなければなりません。
3 当社は、当社の基準に従って、登録希望者の登録の可否を判断し、当社が登録を認める場合にはその旨を登録希望者に当社ウェブサイト上にて通知し、この通知により登録希望者の登録会員としての登録は完了したものとします。
4 前項に定める登録の完了時に、本規約の諸規定に従った本サービスの基本契約が登録会員と当社の間に成立し、登録会員は本サービスを当社の定める方法で利用することができるようになります。
5 当社は、第1項に基づき登録を申請した者が、以下の各号のいずれかの事由に該当する場合は、登録を拒否することがあります。
(1) 本規約に違反するおそれがあると当社が判断した場合
(2) 当社に提供された登録事項の全部又は一部につき虚偽、誤記又は記載漏れがあった場合
(3) 過去に本サービスの利用の登録を取り消された者である場合
(4) 未成年者、成年被後見人、被保佐人又は被補助人のいずれかであり、法定代理人、後見人、保佐人又は補助人の同意等を得ていなかった場合
(5) 反社会的勢力等である場合
(6) その他、当社が登録を適当でないと判断した場合
6 登録会員は、登録事項に変更があった場合は、遅滞なく、当社の定める方法により、当該変更事項を当社に通知し、当社から要求された資料を提出するものとします。

第4条 個別サービスの内容
1 個別サービスの内容は、下記のとおりとします。
(1) ウェイクアッパーVillage : 社内起業家として目覚める実践型イノベーション学習コミュニティ。(個人会員及び法人会員対象)
(2) アクセラレーターVillage : イノベーティブな視点で事業創造を牽引する、社内アクセラレーター育成プログラム。(個人会員及び法人会員対象)
(3) 社内覚醒Lab : サークル感覚で楽しく新規事業にトライ。部署を問わず多くのイノベーター人材を覚醒させる仕組みを社内にも。(法人会員対象)
(4) ポテンシャルSearch : 新規事業のコアスキルを学びつつ、あなたに眠るイノベーション領域での強みを可視化する。(法人会員対象)
(5) ノウハウStock : イノベーションを加速させるノウハウの全てがここに。(法人会員対象)
(6) 上記のほか、当社が新たに提供することとしたサービス
2 当社は、別段の告知無く、個別サービスの内容及び対価を変更することができます。
3 個別サービスの内容については、当社ウェブサイト上で随時掲載する本サービス及び個別サービスに関するルール、諸規定等によって定められるものとします。

第5条 料金及び支払方法
1 登録会員は、次条に基づき個別サービスにかかる契約が成立した場合、個別サービス利用の対価として、当社が別途定める利用料金を負担するものとします。
2 登録会員は、当社に対し、当社の指定する方法で、当社が別途定める期日までに、別途の定めがない場合は、個別サービスにかかる契約成立の翌月末日までに、利用料金を支払うものとします。振込手数料その他支払に必要な費用は登録会員の負担とします。
3 登録会員が利用料金の支払を遅滞した場合、登録会員は年14.6%の割合による遅延損害金を当社に支払うものとします。

第6条 個別サービスにかかる契約の成立
1 登録会員は、有効に登録会員として登録されている期間内に限り、本規約の目的の範囲内でかつ本規約に違反しない範囲内で、当社に対し、当社の定める方法に従い、個別サービスを受ける旨の申込みを行い、当社がこれを承諾することにより、利用することができます。かかる承諾により、当社と登録会員との間で、登録会員を委託者、当社を受託者する個別サービスを提供する内容の準委任契約が成立します。
2 法人会員は、当社に対し、法人会員の役員又は従業員を利用者として、個別サービスを受ける旨の申込みを行なうことができます。
3 当社は、登録会員からの個別サービスを受ける旨の申込みに対し、任意に、承諾又は不承諾を決定することができます。

第7条 本サービス及び個別サービスの利用
1 登録会員は、本サービス及び個別サービスの利用にあたり、以下の各号のいずれかに該当する行為をしてはなりません。また、法人会員は、法人会員の役員又は従業員に、以下の各号のいずれかに該当する行為をさせてはなりません。
(1) 当社、当社の業務委託先等の取引先、本サービス及び個別サービスの講師や他の利用者又は第三者の知的財産権、肖像権、プライバシー、名誉、その他の権利又は利益を侵害する行為
(2) 犯罪行為に関連する行為又は公序良俗に反する行為
(3) 当社による本サービス及び個別サービスの運営を妨害するおそれのある行為
(4) その他、当社が不適切と判断する行為
2 当社は、登録会員又は法人会員の役員若しくは従業員の行為が前項各号のいずれかに該当し、又は該当するおそれがあると判断した場合(法人会員の故意又は過失なく、法人会員の役員若しくは従業員の行為が対象となる場合を含みます。)には、ただちに、当該登録会員、役員又は従業員に対し、本サービス及び個別サービスの全部又は一部の提供を停止することができるものとします。当社は、本項に基づき当社が行った措置に基づき登録会員に生じた損害について一切の責任を負いません。

第8条 パスワード等の管理
1 登録会員は、自己の責任において、パスワード及び登録したメールアドレス等(登録に際して利用したFacebook、Twitter等のSNSのアカウントを含みます。以下「パスワード等」といいます。)を管理及び保管するものとし、これを第三者に利用させ、又は、貸与、譲渡、名義変更、売買等をしてはならないものとします。
2 パスワード等の管理不十分、使用上の過誤、第三者の使用等による損害の責任は登録会員が負うものとし、当社は一切の責任を負いません。
3 登録会員は、パスワード等が盗まれ、又は、第三者に使用されていることが判明した場合には、直ちにその旨を当社に通知するとともに、当社からの指示に従うものとします。

第9条 本サービス及び個別サービスの停止又は中断
1 当社は、以下のいずれかに該当する場合には、登録会員に事前に通知することなく、本サービスの利用の全部又は一部を永久的に停止又は一時的に中断することができるものとします。
(1) 本サービスに係るコンピューター・システムの点検又は保守作業を定期的又は緊急に行う場合
(2) コンピューター、通信回線等が事故により停止した場合
(3) 火災、停電、天災地変などの不可抗力により本サービス又は個別サービスの運営ができなくなった場合
(4) その他、当社が停止又は中断を必要と判断した場合
2 当社は、前項に基づき当社が行った措置に基づき登録会員に生じた損害について一切の責任を負いません。

第10条 情報の保存
当社は、法人会員の役員又は従業員に関する情報、登録会員が送受信した情報、その他の情報を運営上一定期間保存していた場合であっても、かかる情報を保存する義務を負うものではなく、当社はいつでもこれらの情報を削除できるものとします。なお、当社は本条に基づき当社が行った措置に基づき登録会員に生じた損害について一切の責任を負いません。

第11条 権利帰属
当社ウェブサイト、本サービス及び個別サービスに関する所有権及び知的財産権は全て当社又は当社にライセンスを許諾している者に帰属しており、本規約に定める登録に基づく本サービスの利用許諾は、当社ウェブサイト又は本サービス若しくは個別サービスに関する当社又は当社にライセンスを許諾している者の知的財産権の使用許諾を意味するものではありません。登録会員は、いかなる理由によっても当社又は当社にライセンスを許諾している者の知的財産権を侵害するおそれのある行為(個別サービスの漏洩、無断録音、無断録画、同種サービスの事業化リバースエンジニアリングを含みますが、これらに限定されません。)をしないものとします。

第12条 登録取消等
1 当社は、登録会員が、以下の各号のいずれかの事由に該当する場合は、事前に通知又は催告することなく、当該登録会員について本サービス又は個別サービスの利用を一時的に停止し、又は登録会員としての登録を取り消すことができます。
(1) 本規約のいずれかの条項に違反した場合
(2) 登録事項に虚偽の事実があることが判明した場合
(3) 当社、他の登録会員又は第三者に損害を生じさせるおそれのある目的又は方法で本サービスを利用した、又は利用しようとした場合
(4) 手段の如何を問わず、本サービスの運営を妨害した場合
(5) 支払停止若しくは支払不能となり、又は破産手続開始、民事再生手続開始、会社更生手続開始、特別清算開始若しくはこれらに類する手続の開始の申立てがあった場合
(6) 自ら振出し、若しくは引受けた手形又は小切手につき、不渡りの処分を受けた場合
(7) 差押、仮差押、仮処分、強制執行又は競売の申立てがあった場合
(8) 租税公課の滞納処分を受けた場合
(9) 死亡した場合又は後見開始、保佐開始若しくは補助開始の審判を受けた場合
(10) その他、当社が登録会員としての登録の継続を適当でないと判断した場合
2 前項各号のいずれかの事由に該当した場合、登録会員は、当社に対して負っている債務の一切について当然に期限の利益を失い、直ちに当社に対して全ての債務の支払を行わなければなりません。
3 当社は、本条に基づき当社が行った行為により登録会員に生じた損害について一切の責任を負いません。
4 登録会員は、当社所定の方法で当社に通知することにより、自己の登録会員としての登録を取り消すことができます。

第13条 保証の否認及び免責
1 当社は、登録会員の具体的な業績向上等につき如何なる保証も行うものではありません。当社は登録会員に対し本規約において規定されている内容を超えて如何なる保証も行うものではありません。
2 当社ウェブサイトから他のウェブサイトへのリンク又は他のウェブサイトから当社ウェブサイトへのリンクが提供されている場合でも、当社は、当社ウェブサイト以外のウェブサイト及びそこから得られる情報に関して如何なる理由に基づいても一切の責任を負わないものとします。

第14条 紛争処理及び損害賠償
1 登録会員は、本規約に違反することにより、又は本サービスの利用に関連して当社に損害を与えた場合、当社に対しその損害を賠償しなければなりません。
2 登録会員が、本サービスに関連して、当社の業務委託先等の取引先、本サービス及び個別サービスの講師や他の登録会員その他の第三者からクレームを受け又はそれらの者との間で紛争を生じた場合には、直ちにその内容を当社に通知するとともに、登録会員の費用と責任において当該クレーム又は紛争を処理し、当社からの要請に基づき、その結果を当社に報告するものとします。
3 登録会員による本サービスの利用に関連して、当社が、当社の業務委託先等の取引先、本サービス及び個別サービスの講師や他の登録会員その他の第三者から権利侵害その他の理由により何らかの請求を受けた場合は、登録会員は当該請求に基づき当社が当該第三者に支払を余儀なくされた金額を賠償しなければなりません。

第15条 個人情報の保護と例外及びビッグデータとしての活用
1 当社は、本サービスに関連して登録された情報を、当社ウェブサイト上に定める利用規約及びプライバシーポリシーに従い取り扱うことができるものとします。
2 法人会員が、法人会員の役員又は従業員を利用者として、個別サービスを利用した場合、当該利用者の個人情報及び個別サービスを通じて当社が得た情報(測定結果等を含みます。)を、法人会員に伝達することがあります。法人会員は、当該利用者に対し、個別サービス利用開始前までに、本項の情報伝達が為されること(伝達される項目、伝達方法を含みます。)の承諾を得なければなりません。その承諾は、当社所定の方法がある場合には、その方法に従ってください。
3 前項の情報伝達によって、利用者等からクレームを受け又はそれらの者との間で紛争を生じた場合には、登録会員は、そのクレーム又は紛争に対処しなければならないものとし、当該クレーム又は紛争に基づき当社が当該利用者等に支払を余儀なくされた場合は、当社に対し、その支払った金額を賠償しなければなりません。
4 当社は、本サービスに関連して登録された情報、並びに本サービス及び個別サービスの運営により得られた一切の情報(個人情報を含みますが、これに限りません。)につき、匿名化(一定の措置を講じて特定の個人を識別することができないように加工し、個人情報を復元することができないようにすることをいいます。)して、自由に利用し、加工し、販売及び使用許諾等をすることができます。

第16条 有効期間
利用契約は、登録会員について第3条に基づく登録が完了した日から当該登録会員の登録が取り消された日まで、当社と登録会員との間で有効に存続するものとします。

第17条 本規約等の変更
1 当社は、本規約(当社ウェブサイトに掲載する本サービスに関するルール、諸規定等を含みます。以下本条において同じ。)又は本サービスの内容を自由に変更できるものとします。
2 当社は、本規約の内容を変更した場合には、登録会員に当該変更内容を通知するものとし、当該変更内容の通知後、登録会員が本サービスを利用した場合又は当社の定める期間内に登録取消の手続をとらなかった場合には、登録会員は、本規約の変更に同意したものとみなします。

第18条 連絡又は通知
本サービスに関する問い合わせ、その他登録会員から当社に対する連絡又は通知、及び本規約の変更に関する通知その他当社から登録会員に対する連絡又は通知は、当社の定める方法で行うものとします。

第19条 反社会的勢力等の排除
登録会員は、反社会的勢力等と一切の関係を持たないものとします。また、法人会員は、自らの役員及び従業員が反社会的勢力等と関係を持たないように適切に指導するものとします。

第20条 本規約の譲渡等
1 登録会員は、当社の書面による事前の承諾なく、利用契約及び個別サービスにかかる契約(以下「利用契約等」といいます。)上の地位又は本規約に基づく権利若しくは義務につき、第三者に対し、譲渡、移転、担保設定、その他の処分をすることはできません。
2 当社は本サービスにかかる事業を他社に譲渡した場合には、当該事業譲渡に伴い利用契約等上の地位、本規約に基づく権利及び義務並びに登録会員の登録事項その他の顧客情報を当該事業譲渡の譲受人に譲渡することができるものとし、登録会員は、かかる譲渡につき本項において予め同意したものとします。なお、本項に定める事業譲渡には、通常の事業譲渡のみならず、会社分割その他事業が移転するあらゆる場合を含むものとします。

第21条 完全合意
本規約は、本規約に含まれる事項に関する当社と登録会員との完全な合意を構成し、口頭又は書面を問わず、本規約に含まれる事項に関する当社と登録会員との事前の合意、表明及び了解に優先します。

第22条 分離可能性
本規約のいずれかの条項又はその一部が、消費者契約法その他の法令等により無効又は執行不能と判断された場合であっても、本規約の残りの規定又は部分は、継続して完全に効力を有するものとします。また、当社及び登録会員は、当該無効若しくは執行不能の条項又は部分を適法とし、執行力を持たせるために必要な範囲で修正し、当該無効若しくは執行不能な条項又は部分の趣旨並びに法律的及び経済的に同等の効果を確保できるように努めるものとします。

第23条 存続規定
第5条(未払がある場合に限る。)、第7条第2項、第8条第2項、第9条第2項、第10条、第11条、第12条第2項及び第3項、第13条から第15条まで、並びに第20条から第25条までの規定は利用契約の終了後も有効に存続するものとします

第24条 準拠法及び管轄裁判所
本規約の準拠法は日本法とし、本規約に起因し又は関連する一切の紛争については、東京地方裁判所を第一審の専属的合意管轄裁判所とします。

第25条 消費者契約法に基づく修正
当社と登録会員との利用契約等が消費者契約法第2条第3項に定める消費者契約に該当する場合、本規約のうち、当社の損害賠償責任を完全に免責する規定は適用されないものとし、当社はかかる規定に定める登録会員に発生した損害が当社の債務不履行若しくは不法行為又は瑕疵担保責任に基づく場合には、損害の事由が生じた時点から過去に遡って1年の期間に登録会員から現実に受領した本サービスの利用料金の総額を上限として、損害賠償責任を負うものとします。

第26条 協議解決
当社及び登録会員は、本規約に定めのない事項又は本規約の解釈に疑義が生じた場合には、互いに信義誠実の原則に従って協議の上速やかに解決を図るものとします。

【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')); } }); } })();