"use client"; // ============================================================ // BEFORE — 최초 구축 버전 (다크 네이비 토큰 테마) · 개인 기록용 보존 // 002/003 리디자인 이전 모습. 자체 완결(explicit hex), 현재 globals와 독립. // ============================================================ import { useEffect, useMemo, useState } from "react"; const C = { bg: "#0a0e1a", bg2: "#0d1322", card: "#141b2d", green: "#25e07f", amber: "#ffb23e", muted: "#8b94a7", line: "#26304a", gpt: "#25e07f", claude: "#c08bff", gemini: "#4d9bff", }; const MATCH = { teamA: { short: "한국", name: "Korea Republic", flag: "🇰🇷" }, teamB: { short: "체코", name: "Czechia", flag: "🇨🇿" }, kickoff: "2026-06-12T11:00:00+09:00", lockAt: "2026-06-12T10:50:00+09:00", venue: "Estadio Guadalajara", }; const AIS = [ { model: "GPT", color: C.gpt, outcome: "A", score: "2 - 1", conf: 62, reason: "전환 속도와 핵심 공격 자원에서 우위", out: "한국 승" }, { model: "Claude", color: C.claude, outcome: "D", score: "1 - 1", conf: 41, reason: "체코 수비 조직력과 세트피스가 변수", out: "무승부" }, { model: "Gemini", color: C.gemini, outcome: "B", score: "0 - 2", conf: 28, reason: "체코의 원정 폼과 역습 효율을 높게 평가", out: "체코 승" }, ]; function useCountdown(iso: string) { const [now, setNow] = useState(null); useEffect(() => { setNow(Date.now()); const t = setInterval(() => setNow(Date.now()), 1000); return () => clearInterval(t); }, []); if (now === null) return null; const diff = Math.max(0, new Date(iso).getTime() - now); return { d: Math.floor(diff / 86400000), h: Math.floor((diff % 86400000) / 3600000), m: Math.floor((diff % 3600000) / 60000), s: Math.floor((diff % 60000) / 1000), }; } const pad = (n: number) => String(n).padStart(2, "0"); export default function Before() { const cd = useCountdown(MATCH.kickoff); const [outcome, setOutcome] = useState(null); const [a, setA] = useState(1); const [b, setB] = useState(0); const [step, setStep] = useState<"pick" | "form" | "done">("pick"); const [nick, setNick] = useState(""); const [total, setTotal] = useState(1284); const [dist, setDist] = useState({ A: 48, D: 27, B: 25 }); const matched = useMemo(() => AIS.filter((p) => p.outcome === outcome).map((p) => p.model), [outcome]); const wrap: React.CSSProperties = { background: C.bg, color: "#fff", minHeight: "100dvh" }; const card: React.CSSProperties = { background: C.card, border: `1px solid ${C.line}`, borderRadius: 12 }; return (
{/* 기록용 라벨 */}
BEFORE — 최초 구축 버전 (기록용) · 현재 버전은 / 에서
{/* Sticky Top */}
TriplePick 🇰🇷 한국 vs 체코 🇨🇿
킥오프까지
{cd ? `${cd.d}일 ${pad(cd.h)}:${pad(cd.m)}:${pad(cd.s)}` : "—"}
● {total.toLocaleString()}명 픽 완료
{/* Hero */}
Triple Pick 2026
AI Prediction Arena

한국 첫 경기,
AI의 선택은 갈렸다

같은 데이터를 본 AI 셋이 서로 다른 예측을 했습니다.
당신의 픽을 찍고, 경기 끝나면 누가 맞았는지 확인하세요.

{/* Match card */}
Match 01 Matchday Prediction
VS
6.12(금) 11:00 KST · Group A
{MATCH.venue}
{/* AI predictions */}

AI의 예측

같은 데이터 · 다른 답
{AIS.map((p) => (
{p.model[0]}
{p.model}
{p.out} 예측
{p.score}
확신도 {p.conf}%

{p.reason} · 기준 2026-06-08

))}
{/* Your pick */}

당신의 선택 🟠

{([["A", "한국 승"], ["D", "무승부"], ["B", "체코 승"]] as [string, string][]).map(([v, l]) => ( ))}
:
{step === "pick" && ( )} {step === "form" && (
setNick(e.target.value)} placeholder="닉네임 (2~16자)" style={{ width: "100%", borderRadius: 8, border: `1px solid ${C.line}`, background: C.bg2, padding: "10px 12px", fontSize: 13, color: "#fff" }} />
)}
{step === "done" && outcome && (
내 예측
한국 {a}-{b} 체코 {outcome === "A" ? "한국 승" : outcome === "B" ? "체코 승" : "무승부"}

{matched.length ? <>당신은 {matched.join("·")}와 같은 선택입니다. 나머지 AI는 생각이 다릅니다. : <>당신은 AI 셋 모두와 다른 선택을 했습니다. 소신 픽! 🔥}
경기 끝나면 누가 맞았는지 알려드릴게요.

)}
{/* Crowd (세로 바) */}

Crowd Pick

● {total.toLocaleString()}명 참여
{([["한국 승", dist.A], ["무승부", dist.D], ["체코 승", dist.B]] as [string, number][]).map(([l, v]) => (
{l}{v}%
))}
{/* Prize */}
🏆

글로벌 축구 축전 끝까지 맞히면 100만 원

AI 이기고 끝까지 살아남으면 100만 원. 매 경기 픽하고, 최종 우승팀과 결승 스코어까지 맞히면 도전 자격.

{/* Footer */}

이 캠페인은 AIO2O가 운영하는 AI 예측 실험입니다. GPT·Claude·Gemini에 동일한 경기 데이터를 제공하고 모델별 예측 차이를 기록합니다.

본 콘텐츠는 스포츠 분석·엔터테인먼트 목적의 예측 게임이며 베팅·도박을 권유하지 않습니다. AI 예측은 실제 결과를 보장하지 않습니다.

© 2026 TriplePick · 운영 AIO2O@triplepick_ai
); } function Team({ flag, short, name }: { flag: string; short: string; name: string }) { return (
{flag}
{short}
{name}
); } function Stepper({ label, value, set, c }: { label: string; value: number; set: (n: number) => void; c: typeof C }) { const btn: React.CSSProperties = { width: 36, height: 36, display: "grid", placeItems: "center", borderRadius: 8, border: `1px solid ${c.line}`, background: c.bg2, color: "#fff", fontSize: 18, fontWeight: 700 }; return (
{label}
{value}
); }