// ===== page-home.jsx ===== const { useState: useSH, useEffect: useEH } = React; function HomePage({ navigate }) { return (
); } // ----- Pain points (3 cards) ----- function PainPoints({ navigate }) { const cards = [ { icon: , tag: '场景 · 01', title: '凌晨 3 点改完终稿', body: '明早 9 点要提交,导师说会查 AIGC。万一不过,重新写来不及。', cta: '立即自查一次', action: () => navigate('upload'), }, { icon: , tag: '场景 · 02', title: '上届师兄延毕的真实案例', body: '“我觉得自己写得挺自然的”——这是被打回前最常说的话。高校对 AI 生成文本的审查正在收紧。', cta: '提前避免', action: () => navigate('upload'), }, { icon: , tag: '场景 · 03', title: '知网一次 ¥80,刷不起', body: '改一版查一次,本科论文至少改 3–5 版。我们 ¥4.9 / 次,让你随便自查,改到放心为止。', cta: '立即省钱', action: () => navigate('upload'), }, ]; return (
{cards.map((c, i) => (
{c.icon}
{c.tag}
{c.title}

{c.body}

))}
); } // ----- Urgency banner (rotating messages, navy bg) ----- function UrgencyBanner() { const [i, setI] = useSH(0); useEH(() => { const id = setInterval(() => setI(v => (v + 1) % MOCK.URGENCY_BANNERS.length), 4500); return () => clearInterval(id); }, []); return (
{MOCK.URGENCY_BANNERS.map((b, idx) => (
i ? 'translateY(8px)' : 'translateY(-8px)'), }}> {b}
))}
); } // ----- Detection Principle — text comparison + algorithm pipeline ----- function DetectionPrinciple() { const { human, ai } = MOCK.DETECTION_DEMO; // Render text with -style highlights for hinted phrases (no hover required). // Hints come from mock data; we render them as inline marks so the user // immediately *sees* what the engine looked at — anxious scanning is faster // when the visual evidence is already on screen. const renderHighlighted = (text, hints, tone) => { let segments = [{ text, hint: null }]; hints.forEach(h => { const next = []; segments.forEach(s => { if (s.hint || !s.text.includes(h.phrase)) { next.push(s); return; } const idx = s.text.indexOf(h.phrase); if (idx > 0) next.push({ text: s.text.slice(0, idx), hint: null }); next.push({ text: h.phrase, hint: h.tip }); if (idx + h.phrase.length < s.text.length) next.push({ text: s.text.slice(idx + h.phrase.length), hint: null }); }); segments = next; }); return segments.map((s, i) => s.hint ? ( {s.text} ) : {s.text}); }; const Demo = ({ data, tone, label }) => { const accent = tone === 'ok' ? '#10B981' : '#EF4444'; const bg = tone === 'ok' ? 'bg-ok-50' : 'bg-bad-50'; const ring = tone === 'ok' ? 'ring-ok-100' : 'ring-bad-100'; const VerdictIcon = tone === 'ok' ? I.CheckCircle : I.AlertTriangle; return (
{tone === 'ok' ? : }
{label}
判定 · {data.verdict}

{renderHighlighted(data.text, data.hints, tone)}

); }; return (
{/* Left: stacked text demos */}
检测方法参考:Gehrmann et al. 2019 (GLTR)、Mitchell et al. 2023 (DetectGPT)、Vasilatos et al. 2023 等公开发表研究, 并基于中文学术写作语料进行了适配训练。
{/* Right: vertical pipeline */}
算法流程
PIPELINE v1.4
{/* vertical gradient line */}
    {MOCK.PIPELINE_STEPS.map((s, i) => ( {s.step}
    {s.title}
    {s.meta}
    {s.desc}
    ))}
); } function Stat3({ label, value, accent }) { return (
{label}
{value}
); } // ----- Rewrite Assist (fake door) ----- function RewriteAssist() { const [openTier, setOpenTier] = useSH(null); const tiers = MOCK.REWRITE_TIERS; return ( <>
{tiers.map((t, i) => { const Icon = I[t.icon] || I.FileText; return (
{t.badge.label}
{t.title}

{t.desc}

{t.tags.map(tag => ( {tag} ))}
); })}
说明:以上四项均为规划中功能,目前墨鉴仅提供 AIGC 检测服务本身。 我们不开发也不推荐任何"绕过检测"的工具——改写辅助的目标是帮助你把 AI 生成的段落改回你自己的表达,而非把检测分数虚假地刷低。
setOpenTier(null)} /> ); } // ----- Candidate / Waitlist modal ----- function CandidateModal({ tier, onClose }) { const [email, setEmail] = useSH(''); const [wechat, setWechat] = useSH(''); const [scenario, setScenario] = useSH(''); const [submitting, setSubmitting] = useSH(false); const [submitted, setSubmitted] = useSH(false); const [errorMsg, setErrorMsg] = useSH(null); useEH(() => { if (!tier) return; setEmail(''); setWechat(''); setScenario(''); setSubmitted(false); setSubmitting(false); setErrorMsg(null); const onKey = (e) => { if (e.key === 'Escape') onClose(); }; document.addEventListener('keydown', onKey); document.body.style.overflow = 'hidden'; return () => { document.removeEventListener('keydown', onKey); document.body.style.overflow = ''; }; }, [tier, onClose]); // After submitting, auto-close the modal 2s later useEH(() => { if (!submitted) return; const t = setTimeout(onClose, 2000); return () => clearTimeout(t); }, [submitted, onClose]); if (!tier) return null; const handleSubmit = async (e) => { e.preventDefault(); if (!email.trim() || submitting) return; setSubmitting(true); setErrorMsg(null); try { await window.API.joinWaitlist({ tier: tier.key, email: email.trim(), wechat: wechat.trim() || undefined, scenario: scenario.trim() || undefined, }); setSubmitted(true); } catch (err) { console.error('waitlist join failed', err); setErrorMsg(err?.message || '提交失败,请稍后重试'); } finally { setSubmitting(false); } }; return (
e.stopPropagation()}> {!submitted ? ( <>
{tier.badge.label} tier · {tier.key}

加入候补名单

你感兴趣的功能:{tier.title}。上线后第一时间通知你,并提供首批 50% 折扣。

setEmail(e.target.value)} placeholder="your@email.com" className="mt-1 w-full h-10 px-3 rounded-lg ring-1 ring-ink-200 bg-white text-[13.5px] focus:outline-none focus:ring-2 focus:ring-brand-500" />
setWechat(e.target.value)} placeholder="便于发送 Prompt 包" className="mt-1 w-full h-10 px-3 rounded-lg ring-1 ring-ink-200 bg-white text-[13.5px] focus:outline-none focus:ring-2 focus:ring-brand-500" />