TeXray / index.html
openfree's picture
Update index.html
6febfe2 verified
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TeXray — AI 글 판별기</title>
<link href="https://fonts.googleapis.com/css2?family=Sora:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&family=Noto+Sans+KR:wght@300;400;500;700;900&display=swap" rel="stylesheet">
<style>
*{margin:0;padding:0;box-sizing:border-box;}
:root{
--bg:#f8f9fc;--bg-deep:#f0f2f8;--surface:#ffffff;--surface-alt:#f5f6fa;
--border:#e2e5f0;--border-hover:#c7cce0;
--shadow-sm:0 1px 3px rgba(15,23,42,0.04),0 1px 2px rgba(15,23,42,0.06);
--shadow:0 4px 16px rgba(15,23,42,0.06),0 1px 3px rgba(15,23,42,0.08);
--shadow-lg:0 12px 40px rgba(15,23,42,0.08),0 4px 12px rgba(15,23,42,0.06);
--text:#0f172a;--text-sec:#475569;--text-muted:#94a3b8;
--accent:#6366f1;--accent-light:#818cf8;--accent-bg:rgba(99,102,241,0.06);
--teal:#0d9488;--teal-bg:rgba(13,148,136,0.06);
--rose:#e11d48;--rose-bg:rgba(225,29,72,0.06);
--amber:#d97706;--amber-bg:rgba(217,119,6,0.06);
--green:#16a34a;
--radius:16px;--radius-sm:10px;--radius-xs:6px;
--font-display:'Sora','Noto Sans KR',sans-serif;
--font-body:'Noto Sans KR','Sora',sans-serif;
--font-mono:'JetBrains Mono',monospace;
--tr:0.25s cubic-bezier(0.4,0,0.2,1);
}
html{scroll-behavior:smooth;}
body{font-family:var(--font-body);background:var(--bg);color:var(--text);min-height:100vh;overflow-x:hidden;-webkit-font-smoothing:antialiased;}
::-webkit-scrollbar{width:6px;}::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:rgba(99,102,241,0.2);border-radius:10px;}
::selection{background:rgba(99,102,241,0.15);}
.bg-pattern{position:fixed;inset:0;z-index:0;pointer-events:none;
background:radial-gradient(ellipse 80% 50% at 20% 10%,rgba(99,102,241,0.04),transparent 50%),
radial-gradient(ellipse 60% 40% at 80% 90%,rgba(13,148,136,0.03),transparent 50%);}
.app-wrapper{position:relative;z-index:1;display:flex;flex-direction:column;min-height:100vh;max-width:900px;margin:0 auto;padding:24px 24px 48px;}
/* HEADER */
.header{text-align:center;padding:40px 0 32px;animation:fadeIn .8s ease-out;}
@keyframes fadeIn{from{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:translateY(0)}}
.header-eyebrow{font-family:var(--font-mono);font-size:11px;font-weight:600;letter-spacing:5px;text-transform:uppercase;color:var(--accent);margin-bottom:10px;}
.header-title{font-family:var(--font-display);font-size:48px;font-weight:800;line-height:1.15;letter-spacing:-1.5px;margin-bottom:12px;}
.gradient-text{background:linear-gradient(135deg,#6366f1,#0ea5e9 40%,#0d9488 70%,#6366f1);background-size:200% 200%;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:shimmer 6s ease-in-out infinite;}
@keyframes shimmer{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
.header-sub{font-size:14px;color:var(--text-sec);line-height:1.7;max-width:540px;margin:0 auto 18px;}
.header-sub b{color:var(--text);font-weight:600;}
.pill-row{display:flex;gap:6px;justify-content:center;flex-wrap:wrap;animation:fadeUp .8s .2s ease-out both;}
@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.pill{padding:4px 12px;background:var(--surface);border:1px solid var(--border);border-radius:20px;font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--text-muted);transition:var(--tr);box-shadow:var(--shadow-sm);}
.pill:hover{border-color:var(--accent);color:var(--accent);}
/* NAV */
.nav{display:flex;gap:4px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:4px;margin-bottom:24px;position:sticky;top:12px;z-index:100;box-shadow:var(--shadow);animation:fadeUp .8s .3s ease-out both;}
.nav-item{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:12px 8px;border-radius:var(--radius-sm);cursor:pointer;font-size:13px;font-weight:600;color:var(--text-muted);transition:var(--tr);user-select:none;}
.nav-item:hover{color:var(--text-sec);background:var(--surface-alt);}
.nav-item.active{color:#fff;background:linear-gradient(135deg,#6366f1,#4f46e5);box-shadow:0 4px 16px rgba(99,102,241,0.3),inset 0 1px 0 rgba(255,255,255,0.15);}
.nav-icon{font-size:14px;}
/* PANELS */
.panel{display:none;animation:panelIn .4s ease-out;}.panel.active{display:block;}
@keyframes panelIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
/* CARD */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:28px;margin-bottom:20px;box-shadow:var(--shadow-sm);transition:all .3s;}
.card:hover{box-shadow:var(--shadow);border-color:var(--border-hover);}
.card-header{display:flex;align-items:center;gap:12px;margin-bottom:6px;}
.card-icon{width:38px;height:38px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;}
.card-icon.purple{background:var(--accent-bg);border:1px solid rgba(99,102,241,0.15);}
.card-icon.teal{background:var(--teal-bg);border:1px solid rgba(13,148,136,0.15);}
.card-icon.amber{background:var(--amber-bg);border:1px solid rgba(217,119,6,0.15);}
.card-title{font-family:var(--font-display);font-size:17px;font-weight:700;}
.card-desc{font-size:12.5px;color:var(--text-muted);line-height:1.65;margin-bottom:18px;padding-left:50px;}
/* TEXTAREA */
.input-group{margin-bottom:18px;}.textarea-wrap{position:relative;}
textarea{width:100%;min-height:200px;padding:18px 20px 32px;background:var(--surface-alt);border:1.5px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-family:var(--font-body);font-size:14px;line-height:1.8;resize:vertical;outline:none;transition:border-color .3s,box-shadow .3s;}
textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(99,102,241,0.1);}
textarea::placeholder{color:var(--text-muted);font-size:13px;}
.char-counter{position:absolute;bottom:10px;right:16px;font-family:var(--font-mono);font-size:10px;color:var(--text-muted);background:var(--surface);padding:2px 8px;border-radius:4px;pointer-events:none;}
/* BUTTONS */
.btn-group{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.btn{padding:11px 22px;border:none;border-radius:var(--radius-sm);cursor:pointer;font-family:var(--font-body);font-weight:600;font-size:13px;transition:all .25s;letter-spacing:0.2px;}
.btn-primary{background:linear-gradient(135deg,#6366f1,#4f46e5);color:#fff;box-shadow:0 4px 16px rgba(99,102,241,0.25);}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(99,102,241,0.3);}
.btn-primary:active{transform:translateY(0);}.btn-primary:disabled{opacity:0.45;cursor:not-allowed;transform:none!important;}
.btn-ghost{padding:9px 16px;background:var(--surface);color:var(--text-muted);border:1px solid var(--border);font-size:12px;border-radius:var(--radius-xs);}
.btn-ghost:hover{background:var(--accent-bg);color:var(--accent);border-color:rgba(99,102,241,0.3);}
/* LOADING */
.loader{display:none;text-align:center;padding:48px 24px;}.loader.active{display:block;}
.loader-ring{width:44px;height:44px;border:3px solid rgba(99,102,241,0.12);border-top-color:var(--accent);border-radius:50%;animation:spin .9s linear infinite;margin:0 auto 16px;position:relative;}
.loader-ring::after{content:'';position:absolute;inset:4px;border:2px solid transparent;border-top-color:var(--teal);border-radius:50%;animation:spin 1.4s linear infinite reverse;}
@keyframes spin{to{transform:rotate(360deg)}}
.loader-text{font-size:13px;color:var(--text-sec);animation:breathe 2s ease-in-out infinite;}
.loader-dots{display:inline-flex;gap:4px;margin-top:8px;}
.loader-dots span{width:4px;height:4px;border-radius:50%;background:var(--accent);opacity:0.3;animation:dotP 1.2s ease-in-out infinite;}
.loader-dots span:nth-child(2){animation-delay:.15s;}.loader-dots span:nth-child(3){animation-delay:.3s;}
@keyframes dotP{0%,100%{opacity:0.2;transform:scale(0.8)}50%{opacity:1;transform:scale(1.2)}}
@keyframes breathe{0%,100%{opacity:1}50%{opacity:0.5}}
/* RESULT */
.result-html{border-radius:var(--radius);overflow:hidden;margin-top:16px;animation:rIn .5s ease-out;}
.result-html:empty{display:none;}
@keyframes rIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
.log-box{background:var(--surface-alt);border:1px solid var(--border);border-radius:var(--radius-xs);padding:14px 18px;font-family:var(--font-mono);font-size:11px;color:var(--text-muted);line-height:1.7;white-space:pre-wrap;margin-top:10px;}
.log-box:empty{display:none;}
/* FOOTER */
.footer{text-align:center;margin-top:48px;padding:24px 0;border-top:1px solid var(--border);}
.footer-brand{font-family:var(--font-display);font-size:13px;font-weight:600;color:var(--text-muted);margin-bottom:6px;}
.footer-tech{font-family:var(--font-mono);font-size:10px;color:var(--text-muted);opacity:0.6;letter-spacing:1px;}
.footer-line{width:40px;height:2px;background:linear-gradient(90deg,transparent,var(--accent),transparent);margin:10px auto;border-radius:2px;opacity:0.4;}
/* FILE */
.btn-file{position:relative;overflow:hidden;}.btn-file input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;font-size:0;}
.file-status{display:none;padding:8px 14px;background:var(--accent-bg);border:1px solid rgba(99,102,241,0.15);border-radius:var(--radius-sm);margin-top:10px;font-size:11px;color:var(--accent);align-items:center;gap:8px;}
.file-status.active{display:flex;}
.file-status .fname{font-weight:600;color:var(--text);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.file-status .fsize{color:var(--text-muted);font-family:var(--font-mono);font-size:10px;}
.file-status .fclose{cursor:pointer;color:var(--rose);margin-left:auto;font-size:13px;padding:0 4px;}
.file-loading{display:inline-block;width:12px;height:12px;border:2px solid var(--accent);border-top-color:transparent;border-radius:50%;animation:spin .6s linear infinite;}
/* ═══ COMPETITION TAB ═══ */
@keyframes cmpUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
@keyframes cmpBar{from{width:0%}}
@keyframes cmpGlow{0%,100%{box-shadow:0 0 0 2px rgba(99,102,241,0.08)}50%{box-shadow:0 0 0 4px rgba(99,102,241,0.15)}}
@keyframes cmpPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.03)}}
.cmp-hero{background:linear-gradient(135deg,#4f46e5,#6366f1 40%,#818cf8 70%,#a5b4fc);border-radius:var(--radius);padding:32px 28px;margin-bottom:16px;position:relative;overflow:hidden;animation:cmpUp .6s ease-out;}
.cmp-hero::before{content:'';position:absolute;top:-60%;right:-20%;width:50%;height:200%;background:radial-gradient(circle,rgba(255,255,255,0.08),transparent 60%);transform:rotate(20deg);}
.cmp-hero-title{font-family:var(--font-display);font-size:24px;font-weight:900;color:#fff;position:relative;}
.cmp-hero-sub{font-size:12px;color:rgba(255,255,255,0.8);line-height:1.7;margin-top:6px;position:relative;}
.cmp-hero-badge{display:inline-block;background:rgba(255,255,255,0.2);backdrop-filter:blur(8px);color:#fff;font-size:10px;font-weight:800;padding:5px 14px;border-radius:20px;margin-top:10px;animation:cmpPulse 2.5s ease-in-out infinite;position:relative;border:1px solid rgba(255,255,255,0.25);}
.cmp-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:16px;animation:cmpUp .8s .1s ease-out both;}
.cmp-stat{background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-sm);padding:16px 8px;text-align:center;transition:all .3s;box-shadow:var(--shadow-sm);}
.cmp-stat:hover{transform:translateY(-3px);border-color:var(--accent);box-shadow:var(--shadow);}
.cmp-stat-num{font-size:26px;font-weight:900;font-family:var(--font-display);color:var(--accent);}
.cmp-stat-label{font-size:9px;color:var(--text-muted);margin-top:3px;font-weight:600;line-height:1.4;}
.cmp-tw{animation:cmpUp .9s .2s ease-out both;margin-bottom:16px;overflow-x:auto;border-radius:var(--radius-sm);box-shadow:var(--shadow);}
.cmp-t{width:100%;border-collapse:collapse;background:var(--surface);}
.cmp-t thead th{background:linear-gradient(135deg,#4f46e5,#6366f1);color:#fff;padding:11px 7px;font-size:10px;font-weight:700;text-align:center;white-space:nowrap;}
.cmp-t thead th:first-child{text-align:left;padding-left:14px;min-width:120px;}
.cmp-t thead th.co{background:linear-gradient(135deg,#dc2626,#ef4444);font-size:11px;}
.cmp-t tbody td{padding:9px 7px;font-size:10px;text-align:center;color:var(--text-sec);border-bottom:1px solid var(--border);}
.cmp-t tbody tr:hover td{background:rgba(99,102,241,0.03);}
.cmp-t tbody td:first-child{text-align:left;padding-left:14px;font-weight:600;color:var(--text);}
.cmp-t tbody td:nth-child(2){background:rgba(99,102,241,0.04);font-weight:700;}
.cmp-t tbody tr:last-child td{border-bottom:none;}
.ck{color:#16a34a;font-weight:800;font-size:14px;}.cx{color:#dc2626;font-weight:700;font-size:12px;}
.cp{color:#d97706;font-weight:700;font-size:11px;}.cs{color:#6366f1;font-weight:900;font-size:13px;}
.cmp-dg{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px;animation:cmpUp 1s .4s ease-out both;}
.cmp-d{background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius-sm);padding:16px;transition:all .3s;position:relative;overflow:hidden;box-shadow:var(--shadow-sm);}
.cmp-d:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--border-hover);}
.cmp-d::after{content:'';position:absolute;top:0;left:0;right:0;height:3px;}
.cmp-d:nth-child(1)::after{background:linear-gradient(90deg,#6366f1,#a78bfa);}
.cmp-d:nth-child(2)::after{background:linear-gradient(90deg,#e11d48,#f97316);}
.cmp-d:nth-child(3)::after{background:linear-gradient(90deg,#0d9488,#06b6d4);}
.cmp-d:nth-child(4)::after{background:linear-gradient(90deg,#2563eb,#818cf8);}
.cmp-di{font-size:24px;margin-bottom:5px;}.cmp-dt{font-size:13px;font-weight:800;color:var(--text);margin-bottom:4px;}
.cmp-dd{font-size:9.5px;color:var(--text-muted);line-height:1.55;}
.cmp-dv{display:inline-block;background:var(--rose-bg);color:var(--rose);font-size:8.5px;font-weight:700;padding:2px 7px;border-radius:4px;margin-top:5px;}
.cmp-atk{animation:cmpUp 1.1s .6s ease-out both;margin-bottom:16px;}
.cmp-atk-title{font-size:13px;font-weight:800;color:var(--text);margin-bottom:10px;}
.cmp-ai{margin-bottom:8px;}.cmp-al{display:flex;justify-content:space-between;align-items:center;margin-bottom:3px;}
.cmp-an{font-size:10px;font-weight:600;color:var(--text-sec);}.cmp-aw{font-size:9px;color:var(--teal);font-weight:600;}
.cmp-ab{height:7px;background:var(--surface-alt);border:1px solid var(--border);border-radius:4px;overflow:hidden;}
.cmp-af{height:100%;border-radius:3px;animation:cmpBar 1.8s ease-out;}
.cmp-slogan{background:linear-gradient(135deg,#f5f3ff,#ede9fe,#e0e7ff);border:2px solid #c7d2fe;border-radius:var(--radius);padding:22px;text-align:center;animation:cmpGlow 3s ease-in-out infinite;}
.cmp-sm{font-family:var(--font-display);font-size:15px;font-weight:900;color:#4338ca;margin-bottom:6px;}
.cmp-ss{font-size:10.5px;color:#6366f1;line-height:1.8;}.cmp-ss b{color:#0d9488;}
@media(max-width:640px){
.app-wrapper{padding:12px 12px 32px;}.header{padding:24px 0 18px;}.header-title{font-size:32px;}
.nav{flex-wrap:wrap;position:static;}.nav-item{font-size:11px;padding:10px 6px;}
.card{padding:20px 16px;}.card-desc{padding-left:0;margin-top:8px;}
textarea{min-height:160px;font-size:13px;padding:14px 16px 28px;}.btn{padding:10px 16px;font-size:12px;}
.cmp-stats{grid-template-columns:repeat(2,1fr);}.cmp-dg{grid-template-columns:1fr;}
.cmp-stat-num{font-size:20px;}.cmp-hero-title{font-size:18px;}
}
</style>
</head>
<body>
<div class="bg-pattern"></div>
<div class="app-wrapper">
<header class="header">
<div class="header-eyebrow">AI Text Detector</div>
<h1 class="header-title"><span class="gradient-text">TeXray</span></h1>
<p class="header-sub"><b>5축+Perplexity+Humanizer탐지+모델추정</b> · <b>품질 측정</b> · <b>LLM 교차검증</b> · <b>표절 검사</b></p>
<div class="pill-row">
<span class="pill" style="background:linear-gradient(135deg,rgba(239,68,68,0.08),rgba(249,115,22,0.08));border-color:rgba(239,68,68,0.25);color:#dc2626;font-weight:700;">🔥 v5.1</span>
<span class="pill">Perplexity 확률</span><span class="pill">Humanizer 탐지</span>
<span class="pill">모델 추정</span><span class="pill">LLM 3중 검증</span><span class="pill">PDF·DOCX·HWP</span>
</div>
</header>
<nav class="nav">
<div class="nav-item active" data-tab="compare" onclick="switchTab('compare')"><span class="nav-icon">⚖️</span><span>서비스 비교</span></div>
<div class="nav-item" data-tab="detect" onclick="switchTab('detect')"><span class="nav-icon">🔍</span><span>생성 AI 여부 판별</span></div>
<div class="nav-item" data-tab="highlight" onclick="switchTab('highlight')"><span class="nav-icon">📊</span><span>구간별 분석</span></div>
<div class="nav-item" data-tab="plagiarism" onclick="switchTab('plagiarism')"><span class="nav-icon">📋</span><span>표절 검사</span></div>
</nav>
<!-- 서비스 비교 -->
<div class="panel active" id="panel-compare">
<div class="cmp-hero">
<div class="cmp-hero-title">🇰🇷 한국어 AI 판별 No.1</div>
<div class="cmp-hero-sub">카피킬러 · GPTZero · Turnitin · JustDone · Originality.ai 등<br>글로벌 8개 경쟁 서비스 정밀 분석 후 설계된 차세대 판별기</div>
<div class="cmp-hero-badge">🔬 v5.1 — 3대 킬러 기능 탑재</div>
</div>
<div class="cmp-stats">
<div class="cmp-stat"><div class="cmp-stat-num">8축</div><div class="cmp-stat-label">탐지 차원<br>(업계 최다)</div></div>
<div class="cmp-stat"><div class="cmp-stat-num">100%</div><div class="cmp-stat-label">테스트 정확도<br>(11/11 샘플)</div></div>
<div class="cmp-stat"><div class="cmp-stat-num">무료</div><div class="cmp-stat-label">완전 무료<br>(횟수 무제한)</div></div>
<div class="cmp-stat"><div class="cmp-stat-num">4종</div><div class="cmp-stat-label">모델 추정<br>(GPT/Claude/Gemini/PPX)</div></div>
</div>
<div class="cmp-tw">
<table class="cmp-t"><thead><tr>
<th>기능</th><th class="co">🔎 TeXray v5.1</th><th>📋 카피킬러</th><th>🅹 JustDone</th><th>🔍 GPTZero</th><th>🅾 Originality</th><th>🅃 Turnitin</th>
</tr></thead><tbody>
<tr><td>🎯 한국어 형태소</td><td><span class="cs">★ 전용</span></td><td><span class="ck"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="cp"></span></td></tr>
<tr><td>📊 탐지 축 수</td><td><span class="cs">8축</span></td><td>1~2</td><td>1</td><td>2</td><td>1</td><td>1</td></tr>
<tr><td>🧠 Perplexity 분석</td><td><span class="ck"></span> 4중</td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="ck"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td></tr>
<tr><td>🛡️ Humanizer 탐지</td><td><span class="ck"></span> 6시그널</td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="ck"></span></td><td><span class="ck"></span></td></tr>
<tr><td>🎯 AI 모델 추정</td><td><span class="cs">★ 4모델</span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="cp"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td></tr>
<tr><td>🤖 LLM 교차검증</td><td><span class="cs">★ 3모델</span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td></tr>
<tr><td>📝 근거 투명 공개</td><td><span class="cs">★ 8축별</span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="cp"></span></td><td><span class="cp"></span></td><td><span class="cx"></span></td></tr>
<tr><td>🎨 문장별 하이라이트</td><td><span class="ck"></span> 5단계</td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="ck"></span></td><td><span class="ck"></span></td><td><span class="ck"></span></td></tr>
<tr><td>📄 HWP/HWPX</td><td><span class="ck"></span></td><td><span class="ck"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td></tr>
<tr><td>📝 글 품질 측정</td><td><span class="ck"></span> 6항목</td><td><span class="cx"></span></td><td><span class="cp"></span></td><td><span class="cx"></span></td><td><span class="ck"></span></td><td><span class="cx"></span></td></tr>
<tr><td>🔍 표절 검사</td><td><span class="ck"></span> 5소스</td><td><span class="ck"></span> DB</td><td><span class="ck"></span></td><td><span class="cx"></span></td><td><span class="cx"></span></td><td><span class="ck"></span></td></tr>
<tr><td>💰 가격</td><td><b style="color:#16a34a">완전 무료</b></td><td style="color:var(--text-muted)">9,900원/건</td><td style="color:var(--text-muted)">$7.99~/월</td><td style="color:var(--text-muted)">$8.33~/월</td><td style="color:var(--text-muted)">$14.95/월</td><td style="color:var(--text-muted)">기관 전용</td></tr>
<tr><td>🎯 대상 모델</td><td><b style="color:#6366f1">전 AI 모델</b></td><td style="color:#dc2626">GPT만</td><td>범용</td><td>범용</td><td>범용</td><td>범용</td></tr>
<tr><td>⚠️ 핵심 약점</td><td style="font-size:8px;color:#6366f1">규칙 기반<br>(ML 미적용)</td><td style="font-size:8px;color:#dc2626">GPT만·89%불만</td><td style="font-size:8px;color:#dc2626">30%+편차</td><td style="font-size:8px;color:#dc2626">혼합41%</td><td style="font-size:8px;color:#dc2626">$14.95/월</td><td style="font-size:8px;color:#dc2626">기관만</td></tr>
</tbody></table>
</div>
<div class="cmp-dg">
<div class="cmp-d"><div class="cmp-di">🧠</div><div class="cmp-dt">Perplexity 확률 분석</div><div class="cmp-dd">GPTZero 핵심 기술을 한국어 특화. 문자 엔트로피 + Burstiness + TTR편차 + 종결엔트로피 4중 분석</div><div class="cmp-dv">vs GPTZero: 한국어 형태소 기반 → 더 정확</div></div>
<div class="cmp-d"><div class="cmp-di">🛡️</div><div class="cmp-dt">Humanizer/Bypasser 탐지</div><div class="cmp-dd">QuillBot 등 패러프레이즈 도구로 수정된 AI 글의 잔존 흔적 6가지 시그널로 탐지</div><div class="cmp-dv">vs Turnitin: 한국어 최초 Humanizer 탐지</div></div>
<div class="cmp-d"><div class="cmp-di">🎯</div><div class="cmp-dt">AI 모델 추정 (업계 유일)</div><div class="cmp-dd">GPT·Claude·Gemini·Perplexity 4모델 고유 지문을 복합 증거로 분석</div><div class="cmp-dv">vs 전 경쟁사: 모델 추정 기능 없음</div></div>
<div class="cmp-d"><div class="cmp-di">🤖</div><div class="cmp-dt">LLM 3중 교차검증 (업계 유일)</div><div class="cmp-dd">GPT-OSS-120B · Qwen3-32B · Kimi-K2 — 3개 독립 AI 직접 판독 + 다수결 투표</div><div class="cmp-dv">vs 전 경쟁사: LLM 교차검증 미보유</div></div>
</div>
<div class="cmp-atk">
<div class="cmp-atk-title">⚔️ 경쟁사 취약점 vs 우리의 강점</div>
<div class="cmp-ai"><div class="cmp-al"><span class="cmp-an">📋 카피킬러 — GPT만 탐지, 89% 불만율</span><span class="cmp-aw">→ 전 AI 모델 + 8축 투명 근거</span></div><div class="cmp-ab"><div class="cmp-af" style="width:92%;background:linear-gradient(90deg,#6366f1,#a78bfa)"></div></div></div>
<div class="cmp-ai"><div class="cmp-al"><span class="cmp-an">🅹 JustDone — 동일 텍스트 30%+ 점수 편차</span><span class="cmp-aw">→ 결정론적 점수 보장</span></div><div class="cmp-ab"><div class="cmp-af" style="width:95%;background:linear-gradient(90deg,#e11d48,#f97316)"></div></div></div>
<div class="cmp-ai"><div class="cmp-al"><span class="cmp-an">🔍 GPTZero — 혼합텍스트 41%, 편집AI 35%</span><span class="cmp-aw">→ Humanizer 탐지 + 섹션 분리</span></div><div class="cmp-ab"><div class="cmp-af" style="width:88%;background:linear-gradient(90deg,#0d9488,#06b6d4)"></div></div></div>
<div class="cmp-ai"><div class="cmp-al"><span class="cmp-an">🅃 Turnitin — 기관 전용, 학생 사전검사 불가</span><span class="cmp-aw">→ 누구나 무료 즉시 사용</span></div><div class="cmp-ab"><div class="cmp-af" style="width:90%;background:linear-gradient(90deg,#2563eb,#818cf8)"></div></div></div>
<div class="cmp-ai"><div class="cmp-al"><span class="cmp-an">🅾 Originality — $14.95/월, 비영어 취약</span><span class="cmp-aw">→ 완전 무료 + 한국어 전문</span></div><div class="cmp-ab"><div class="cmp-af" style="width:94%;background:linear-gradient(90deg,#7c3aed,#ec4899)"></div></div></div>
</div>
<div class="cmp-slogan">
<div class="cmp-sm">🇰🇷 한국어 AI 글을 가장 정확하게, 가장 투명하게, 완전 무료로</div>
<div class="cmp-ss">vs 카피킬러: "GPT만이 아닌, <b>모든 AI</b>를 탐지합니다" · vs GPTZero: "한국어 <b>형태소 분석</b>으로 더 정확합니다"<br>vs Turnitin: "누구나, <b>무료</b>로, 지금 바로" · vs JustDone: "항상 <b>동일한 결과</b>를 보장합니다"</div>
</div>
</div>
<!-- 생성 AI 여부 판별 -->
<div class="panel" id="panel-detect">
<div class="card">
<div class="card-header"><div class="card-icon purple">📄</div><div class="card-title">생성 AI 여부 판별</div></div>
<div class="card-desc">8축 앙상블(통계·문체·반복·구조·지문·Perplexity·Humanizer·모델추정) + 6항목 품질 측정 + LLM 3모델 교차검증<br><span style="display:inline-flex;align-items:center;gap:4px;margin-top:6px;padding:4px 10px;background:var(--accent-bg);border:1px solid rgba(99,102,241,0.12);border-radius:6px;font-size:10px;color:var(--accent);font-weight:600;">📎 PDF · DOCX · HWP · HWPX · TXT · MD · CSV 파일 업로드 지원</span></div>
<div class="input-group"><div class="textarea-wrap"><textarea id="input-detect" placeholder="AI 판별할 텍스트를 입력하세요 (최소 50자)" oninput="uc('input-detect','count-detect')"></textarea><div class="char-counter" id="count-detect">0자</div></div></div>
<div class="btn-group">
<button class="btn btn-primary" id="btn-detect" onclick="runDetect()">🚀 AI 판별 + 품질 분석</button>
<button class="btn btn-ghost btn-file">📁 파일 업로드<input type="file" accept=".pdf,.docx,.hwp,.hwpx,.txt,.md,.csv" onchange="loadFile(this,'input-detect','fs-detect')"></button>
<button class="btn btn-ghost" onclick="ls('input-detect','ai')">📝 AI 예시</button>
<button class="btn btn-ghost" onclick="ls('input-detect','human')">✍️ 인간 예시</button>
</div>
<div class="file-status" id="fs-detect"><span class="fname"></span><span class="fsize"></span><span class="fclose" onclick="clearInline('input-detect','fs-detect')"></span></div>
</div>
<div class="loader" id="loader-detect"><div class="loader-ring"></div><div class="loader-text">8축 분석 + LLM 교차검증 중</div><div class="loader-dots"><span></span><span></span><span></span></div></div>
<div class="result-html" id="result-detect"></div><div class="log-box" id="log-detect"></div>
</div>
<!-- 구간별 분석 -->
<div class="panel" id="panel-highlight">
<div class="card">
<div class="card-header"><div class="card-icon teal">📊</div><div class="card-title">구간별 분석</div></div>
<div class="card-desc">문장별 AI 확률을 5단계 색상으로 표시합니다. 마우스 오버 시 판정 근거를 확인하세요.<br><span style="display:inline-flex;align-items:center;gap:4px;margin-top:6px;padding:4px 10px;background:var(--teal-bg);border:1px solid rgba(13,148,136,0.12);border-radius:6px;font-size:10px;color:var(--teal);font-weight:600;">📎 PDF · DOCX · HWP · HWPX · TXT · MD · CSV 파일 업로드 지원</span></div>
<div class="input-group"><div class="textarea-wrap"><textarea id="input-highlight" placeholder="문장별 AI 확률 색상 표시 (최소 30자)" oninput="uc('input-highlight','count-highlight')"></textarea><div class="char-counter" id="count-highlight">0자</div></div></div>
<div class="btn-group">
<button class="btn btn-primary" id="btn-highlight" onclick="runHighlight()">📊 구간별 분석</button>
<button class="btn btn-ghost btn-file">📁 파일 업로드<input type="file" accept=".pdf,.docx,.hwp,.hwpx,.txt,.md,.csv" onchange="loadFile(this,'input-highlight','fs-highlight')"></button>
<button class="btn btn-ghost" onclick="ls('input-highlight','ai')">📝 AI 예시</button>
</div>
<div class="file-status" id="fs-highlight"><span class="fname"></span><span class="fsize"></span><span class="fclose" onclick="clearInline('input-highlight','fs-highlight')"></span></div>
</div>
<div class="loader" id="loader-highlight"><div class="loader-ring"></div><div class="loader-text">문장 분석 중</div><div class="loader-dots"><span></span><span></span><span></span></div></div>
<div class="result-html" id="result-highlight"></div>
</div>
<!-- 표절 검사 -->
<div class="panel" id="panel-plagiarism">
<div class="card">
<div class="card-header"><div class="card-icon amber">📋</div><div class="card-title">표절 검사</div></div>
<div class="card-desc">Brave Search 병렬(최대 20) + KCI · RISS · arXiv 학술DB + Gemini Google Search 통합 검사<br><span style="display:inline-flex;align-items:center;gap:4px;margin-top:6px;padding:4px 10px;background:var(--amber-bg);border:1px solid rgba(217,119,6,0.12);border-radius:6px;font-size:10px;color:var(--amber);font-weight:600;">📎 PDF · DOCX · HWP · HWPX · TXT · MD · CSV 파일 업로드 지원</span></div>
<div class="input-group"><div class="textarea-wrap"><textarea id="input-plagiarism" placeholder="표절 검사할 텍스트 (최소 50자)" oninput="uc('input-plagiarism','count-plagiarism')"></textarea><div class="char-counter" id="count-plagiarism">0자</div></div></div>
<div class="btn-group">
<button class="btn btn-primary" id="btn-plagiarism" onclick="runPlagiarism()">📋 표절 검사 시작</button>
<button class="btn btn-ghost btn-file">📁 파일 업로드<input type="file" accept=".pdf,.docx,.hwp,.hwpx,.txt,.md,.csv" onchange="loadFile(this,'input-plagiarism','fs-plagiarism')"></button>
<button class="btn btn-ghost" onclick="ls('input-plagiarism','ai')">📝 AI 예시</button>
</div>
<div class="file-status" id="fs-plagiarism"><span class="fname"></span><span class="fsize"></span><span class="fclose" onclick="clearInline('input-plagiarism','fs-plagiarism')"></span></div>
</div>
<div class="loader" id="loader-plagiarism"><div class="loader-ring"></div><div class="loader-text">웹검색 + 학술DB + 보고서 생성</div><div class="loader-dots"><span></span><span></span><span></span></div></div>
<div id="result-plagiarism-area" style="display:none;"><div class="result-html" id="result-plagiarism"></div><div class="log-box" id="result-plagiarism-log"></div></div>
</div>
<footer class="footer">
<div class="footer-brand">TeXray</div><div style="font-size:11px;color:var(--text-muted);margin-bottom:4px;">개발: <a href="https://vidraft.net" target="_blank" style="color:var(--accent);text-decoration:none;font-weight:600;">Vidraft.net</a></div><div class="footer-line"></div>
<div class="footer-tech">v5.1 · KIWI · GROQ · BRAVE · KCI · RISS · ARXIV · GEMINI</div>
</footer>
</div>
<script>
const B=window.location.origin;
const SA=`인공지능 기술은 현대 사회에서 매우 중요한 역할을 하고 있습니다. 특히 자연어 처리 분야에서의 발전은 눈부신 성과를 거두고 있습니다. 이러한 기술의 발전은 다양한 산업 분야에 긍정적인 영향을 미치고 있으며, 향후 더욱 발전할 것으로 예상됩니다.\n\n또한 생성형 AI의 등장으로 콘텐츠 제작 방식이 크게 변화하고 있습니다. 이를 통해 기업들은 효율적인 콘텐츠 생산이 가능해졌으며, 개인 사용자들도 다양한 창작 활동에 AI를 활용할 수 있게 되었습니다.\n\n나아가 AI 윤리와 규제에 대한 논의도 활발히 진행되고 있습니다.`;
const SH=`아 진짜 요즘 AI 때문에 머리 아프다ㅋㅋㅋ 어제 chatgpt한테 레포트 써달라고 했는데 완전 교과서 같은 글만 써줘서 그냥 내가 다시 썼음;;\n\n근데 생각해보면 AI가 쓴 글이랑 사람이 쓴 글이 확실히 다르긴 해. 뭔가... 너무 깔끔하달까?\n\n교수님이 AI 탐지기 돌린다고 해서 좀 무서운데 ㅠㅠ 걱정된다 진심으로.`;
function switchTab(t){document.querySelectorAll('.nav-item').forEach(e=>e.classList.remove('active'));document.querySelectorAll('.panel').forEach(e=>e.classList.remove('active'));document.querySelector(`[data-tab="${t}"]`).classList.add('active');document.getElementById(`panel-${t}`).classList.add('active');}
function uc(a,b){document.getElementById(b).textContent=document.getElementById(a).value.length+'자';}
function ls(id,t){const e=document.getElementById(id);e.value=t==='ai'?SA:SH;e.dispatchEvent(new Event('input'));}
function sw(id){document.getElementById(id).classList.add('active');}
function hw(id){document.getElementById(id).classList.remove('active');}
async function gc(api,data){
const urls=[`${B}/gradio/gradio_api/call${api}`,`${B}/gradio/api${api}`,`${B}/gradio_api/call${api}`,`${B}/api${api}`];
for(const u of urls){
try{const r=await fetch(u,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({data})});
if(!r.ok)continue;const j=await r.json();if(!j.event_id)continue;
return new Promise((ok,no)=>{const es=new EventSource(`${u}/${j.event_id}`);let d=false;
const h=e=>{if(d)return;try{const raw=JSON.parse(e.data);const p=Array.isArray(raw)?raw:(raw&&raw.data?raw.data:null);if(p){d=true;es.close();ok(p);}}catch{}};
es.onmessage=h;es.addEventListener('complete',h);
es.addEventListener('process_completed',e=>{if(d)return;try{const raw=JSON.parse(e.data);const out=raw&&raw.output&&raw.output.data?raw.output.data:null;if(out){d=true;es.close();ok(out);}}catch{}});
es.onerror=()=>{if(!d){d=true;es.close();no(new Error('연결 오류'));}};
setTimeout(()=>{if(!d){d=true;es.close();no(new Error('시간 초과'));}},120000);
});
}catch(e){continue;}
}throw new Error('API 연결 실패');
}
function showError(el,msg){el.innerHTML=`<div style="padding:28px;text-align:center;color:var(--rose);font-size:14px;background:var(--surface);border:1px solid rgba(225,29,72,0.2);border-radius:var(--radius);">⚠️ ${msg}</div>`;}
async function runDetect(){const t=document.getElementById('input-detect').value;if(!t||t.length<50){alert('최소 50자 이상 입력해주세요.');return;}const b=document.getElementById('btn-detect');b.disabled=true;document.getElementById('result-detect').innerHTML='';document.getElementById('log-detect').textContent='';sw('loader-detect');try{const d=await gc('/run_detection',[t]);hw('loader-detect');document.getElementById('result-detect').innerHTML=d[0]||'';document.getElementById('log-detect').textContent=d[1]||'';}catch(e){hw('loader-detect');showError(document.getElementById('result-detect'),e.message);}b.disabled=false;}
async function runHighlight(){const t=document.getElementById('input-highlight').value;if(!t||t.length<30){alert('텍스트를 입력해주세요.');return;}const b=document.getElementById('btn-highlight');b.disabled=true;sw('loader-highlight');try{const d=await gc('/run_highlight',[t]);hw('loader-highlight');document.getElementById('result-highlight').innerHTML=d[0]||'';}catch(e){hw('loader-highlight');showError(document.getElementById('result-highlight'),e.message);}b.disabled=false;}
async function runPlagiarism(){const t=document.getElementById('input-plagiarism').value;if(!t||t.length<50){alert('최소 50자 이상 입력해주세요.');return;}const b=document.getElementById('btn-plagiarism');b.disabled=true;document.getElementById('result-plagiarism-area').style.display='none';sw('loader-plagiarism');try{const d=await gc('/run_plagiarism',[t]);hw('loader-plagiarism');document.getElementById('result-plagiarism-area').style.display='block';document.getElementById('result-plagiarism').innerHTML=d[0]||'';document.getElementById('result-plagiarism-log').textContent=d[1]||'';}catch(e){hw('loader-plagiarism');document.getElementById('result-plagiarism-area').style.display='block';showError(document.getElementById('result-plagiarism'),e.message);}b.disabled=false;}
document.addEventListener('keydown',e=>{if(e.ctrlKey&&e.key==='Enter'){const a=document.querySelector('.panel.active');if(a){const btn=a.querySelector('.btn-primary');if(btn&&!btn.disabled)btn.click();}}});
async function uploadFileToGradio(file){const fd=new FormData();fd.append('files',file);const urls=[`${B}/gradio/gradio_api/upload`,`${B}/gradio/upload`,`${B}/gradio_api/upload`,`${B}/upload`];for(const u of urls){try{const r=await fetch(u,{method:'POST',body:fd});if(r.ok){const j=await r.json();return Array.isArray(j)?j[0]:j;}}catch{}}throw new Error('파일 업로드 실패');}
function makeFileData(p,n){return{path:p,meta:{_type:'gradio.FileData'},orig_name:n||'',mime_type:''};}
async function loadFile(input,tid,sid){const file=input.files&&input.files[0];if(!file)return;const fn=file.name,fs=Math.round(file.size/1024)+'KB';const se=document.getElementById(sid),ta=document.getElementById(tid);se.classList.add('active');se.querySelector('.fname').innerHTML=`<span class="file-loading"></span> ${fn} 추출 중...`;se.querySelector('.fsize').textContent=fs;try{const up=await uploadFileToGradio(file);const res=await gc('/extract_file_text',[makeFileData(up,fn)]);const text=res[0]||'';if(text.startsWith('⚠️')){se.querySelector('.fname').textContent='❌ '+text;se.querySelector('.fname').style.color='var(--rose)';return;}ta.value=text;ta.dispatchEvent(new Event('input'));se.querySelector('.fname').textContent='✅ '+fn;se.querySelector('.fname').style.color='var(--teal)';se.querySelector('.fsize').textContent=fs+' · '+text.length+'자';}catch(e){se.querySelector('.fname').textContent='❌ '+e.message;se.querySelector('.fname').style.color='var(--rose)';}input.value='';}
function clearInline(t,s){document.getElementById(s).classList.remove('active');document.getElementById(s).querySelector('.fname').style.color='';}
[{ta:'input-detect',fs:'fs-detect'},{ta:'input-highlight',fs:'fs-highlight'},{ta:'input-plagiarism',fs:'fs-plagiarism'}].forEach(({ta,fs})=>{const el=document.getElementById(ta);if(!el)return;el.addEventListener('dragover',e=>{e.preventDefault();el.style.borderColor='var(--accent)';el.style.background='rgba(99,102,241,0.03)';});el.addEventListener('dragleave',()=>{el.style.borderColor='';el.style.background='';});el.addEventListener('drop',e=>{e.preventDefault();el.style.borderColor='';el.style.background='';const f=e.dataTransfer.files&&e.dataTransfer.files[0];if(!f)return;if(!['pdf','docx','hwp','hwpx','txt','md','csv'].includes(f.name.split('.').pop().toLowerCase()))return;loadFile({files:[f],value:f.name},ta,fs);});});
</script>
</body>
</html>