Delete index.html
Browse files- index.html +0 -450
index.html
DELETED
|
@@ -1,450 +0,0 @@
|
|
| 1 |
-
<!DOCTYPE html>
|
| 2 |
-
<html lang="tr">
|
| 3 |
-
<head>
|
| 4 |
-
<meta charset="UTF-8">
|
| 5 |
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 6 |
-
<title>LexIntel – Yapay Zekâ Destekli Hukuki Belge Analiz Platformu</title>
|
| 7 |
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
| 8 |
-
<style>
|
| 9 |
-
:root{--bg:#080a26;--panel:#12154a;--panel2:#0e1038;--line:#2a2f6e;--text:#eef0ff;--muted:#a4a9d6;--v:#8b5cf6;--i:#6366f1;--g:#22c55e;--r:#ef4444;--a:#f59e0b;--b:#3b82f6}
|
| 10 |
-
*{box-sizing:border-box;margin:0;padding:0}
|
| 11 |
-
html{scroll-behavior:smooth}
|
| 12 |
-
body{font-family:Inter,system-ui,sans-serif;color:var(--text);line-height:1.5;background:var(--bg);overflow-x:hidden}
|
| 13 |
-
body:before{content:"";position:fixed;inset:0;z-index:-1;background:radial-gradient(900px 520px at 85% -5%,#3a2f9a88,transparent 60%),radial-gradient(800px 500px at -10% 25%,#1d2a9a66,transparent 60%),radial-gradient(700px 400px at 60% 100%,#6d28d933,transparent 60%)}
|
| 14 |
-
a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}
|
| 15 |
-
.wrap{max-width:1240px;margin:0 auto;padding:0 24px}
|
| 16 |
-
header{position:sticky;top:0;z-index:20;backdrop-filter:blur(14px);background:#080a26b8;border-bottom:1px solid #ffffff10}
|
| 17 |
-
header .wrap{display:flex;align-items:center;justify-content:space-between;height:68px}
|
| 18 |
-
.logo{display:flex;align-items:center;gap:10px;font-weight:800;font-size:24px}.logo svg{width:38px;height:38px}.logo b{color:var(--v)}
|
| 19 |
-
nav a{margin-left:26px;color:var(--muted);font-size:15px}nav a:hover{color:#fff}
|
| 20 |
-
.btn{display:inline-flex;align-items:center;gap:10px;padding:15px 28px;border-radius:14px;font-weight:700;font-size:17px;border:0;color:#fff;background:linear-gradient(135deg,#6366f1,#8b5cf6);box-shadow:0 12px 32px -10px #7c5cf5;transition:transform .15s,filter .15s}
|
| 21 |
-
.btn:hover{filter:brightness(1.12);transform:translateY(-1px)}
|
| 22 |
-
.btn.s{padding:10px 16px;font-size:14px;border-radius:10px;box-shadow:none}
|
| 23 |
-
.btn.g{background:#1d2160;box-shadow:none;border:1px solid var(--line)}
|
| 24 |
-
:focus-visible{outline:2px solid #c4b5fd;outline-offset:2px}
|
| 25 |
-
|
| 26 |
-
.hero{display:grid;grid-template-columns:1fr 1.15fr;gap:48px;align-items:center;padding:56px 0 40px}
|
| 27 |
-
.pill{display:inline-block;padding:6px 14px;border-radius:99px;background:#6366f122;border:1px solid #6366f155;color:#c7d2fe;font-size:13px;margin-bottom:18px}
|
| 28 |
-
h1{font-size:clamp(36px,4.8vw,60px);line-height:1.08;font-weight:800;letter-spacing:-.025em}
|
| 29 |
-
.grad{background:linear-gradient(90deg,#c4b5fd,#818cf8 55%,#60a5fa);-webkit-background-clip:text;background-clip:text;color:transparent}
|
| 30 |
-
.lead{margin:22px 0;color:var(--muted);font-size:18px;max-width:540px}
|
| 31 |
-
.checks{list-style:none;display:grid;gap:10px;margin:0 0 30px}
|
| 32 |
-
.checks li{display:flex;gap:12px;align-items:center;font-size:16px}
|
| 33 |
-
.checks i{flex:none;width:24px;height:24px;border-radius:50%;background:var(--i);display:grid;place-items:center;font-style:normal;font-size:13px}
|
| 34 |
-
.sub{margin-top:14px;color:#a5b4fc;font-size:14px}
|
| 35 |
-
|
| 36 |
-
.dash{background:linear-gradient(160deg,#1a1e5c,#0d0f36);border:1px solid var(--line);border-radius:22px;padding:18px;box-shadow:0 50px 90px -30px #000,0 0 80px -20px #6366f155;transform:perspective(1600px) rotateY(-7deg) rotateX(2deg);transition:transform .5s}
|
| 37 |
-
.dash:hover{transform:none}
|
| 38 |
-
.dtop{display:flex;justify-content:space-between;margin-bottom:14px;font-size:13px;color:var(--muted)}
|
| 39 |
-
.av{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;background:linear-gradient(135deg,#8b5cf6,#3b82f6);font-size:11px;font-weight:700;color:#fff;margin-right:8px}
|
| 40 |
-
.dgrid{display:grid;grid-template-columns:120px 1fr;gap:14px}
|
| 41 |
-
.side{display:grid;gap:4px;align-content:start;font-size:13px}.side span{padding:9px 11px;border-radius:9px;color:var(--muted)}.side .on{background:linear-gradient(90deg,#5b5ff0,#7c5cf5);color:#fff}
|
| 42 |
-
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
|
| 43 |
-
.stat{background:#171b57;border:1px solid var(--line);border-radius:12px;padding:12px}
|
| 44 |
-
.stat small{color:var(--muted);font-size:11px;display:block}.stat b{font-size:21px;display:block}.stat em{font-style:normal;font-size:11px}
|
| 45 |
-
.up{color:var(--g)}.dn{color:var(--r)}
|
| 46 |
-
.row2{display:grid;grid-template-columns:1.4fr 1fr;gap:10px;margin-top:10px}
|
| 47 |
-
.card{background:#171b57;border:1px solid var(--line);border-radius:12px;padding:12px;font-size:12px}.card h4{font-size:13px;margin-bottom:8px}
|
| 48 |
-
.bars{display:flex;align-items:flex-end;gap:7px;height:92px}
|
| 49 |
-
.bars div{flex:1;border-radius:5px 5px 0 0;background:linear-gradient(180deg,#a78bfa,#4f46e5);transform-origin:bottom;animation:grow 1.1s cubic-bezier(.2,.8,.2,1) both}
|
| 50 |
-
@keyframes grow{from{transform:scaleY(.05)}}
|
| 51 |
-
.donut{display:flex;align-items:center;gap:12px}
|
| 52 |
-
.ring{width:84px;height:84px;border-radius:50%;flex:none;display:grid;place-items:center}
|
| 53 |
-
.ring span{width:58px;height:58px;border-radius:50%;background:#171b57;display:grid;place-items:center;font-weight:700;font-size:13px}
|
| 54 |
-
.lg{display:grid;gap:3px;font-size:11px;color:var(--muted)}.lg i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}
|
| 55 |
-
.item{display:flex;justify-content:space-between;gap:8px;align-items:center;background:#0f1243;border-radius:8px;padding:8px 10px;font-size:12px;margin-top:6px}
|
| 56 |
-
.tag{padding:3px 10px;border-radius:99px;font-size:11px;font-weight:600;white-space:nowrap}
|
| 57 |
-
.c0{background:#3b82f62b;color:#93c5fd}.c1{background:#f59e0b2b;color:#fcd34d}.c2{background:#22c55e26;color:#86efac}.c3{background:#8b5cf63a;color:#c4b5fd}
|
| 58 |
-
|
| 59 |
-
section{padding:64px 0}
|
| 60 |
-
h2{font-size:clamp(26px,3.2vw,38px);letter-spacing:-.015em;margin-bottom:10px}
|
| 61 |
-
.secsub{color:var(--muted);max-width:660px;margin-bottom:34px}
|
| 62 |
-
.feat{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
|
| 63 |
-
.f{text-align:left;background:linear-gradient(160deg,#171a52,#0f1240);border:1px solid var(--line);border-radius:18px;padding:22px;transition:transform .2s,border-color .2s,box-shadow .2s}
|
| 64 |
-
.f:hover{transform:translateY(-4px);border-color:#7c5cf5;box-shadow:0 20px 40px -20px #6366f1}
|
| 65 |
-
.ic{width:44px;height:44px;border-radius:13px;background:linear-gradient(135deg,#6366f1aa,#8b5cf655);display:grid;place-items:center;font-size:21px;margin-bottom:14px}
|
| 66 |
-
.f h3{font-size:16px;margin-bottom:6px}.f p{color:var(--muted);font-size:14px}.f u{display:block;margin-top:12px;font-size:13px;color:#a5b4fc;text-decoration:none}
|
| 67 |
-
|
| 68 |
-
.app{border:1px solid var(--line);border-radius:24px;background:linear-gradient(160deg,#12154a,#0b0d33);box-shadow:0 40px 90px -40px #000;overflow:hidden}
|
| 69 |
-
.tabs{display:flex;gap:4px;padding:10px;border-bottom:1px solid var(--line);overflow-x:auto;background:#0a0c2e}
|
| 70 |
-
.tab{padding:11px 18px;border-radius:11px;border:0;background:none;color:var(--muted);font-weight:600;font-size:14px;white-space:nowrap}
|
| 71 |
-
.tab:hover{color:#fff}.tab.on{background:linear-gradient(90deg,#5b5ff0,#7c5cf5);color:#fff}
|
| 72 |
-
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;padding:18px 18px 0}
|
| 73 |
-
.kpi{background:#171b57;border:1px solid var(--line);border-radius:14px;padding:14px 16px}.kpi small{color:var(--muted);font-size:12px}.kpi b{display:block;font-size:26px}
|
| 74 |
-
.pane{display:none;padding:18px}.pane.on{display:block}
|
| 75 |
-
.two{display:grid;grid-template-columns:1fr 1fr;gap:18px}
|
| 76 |
-
textarea{width:100%;min-height:230px;resize:vertical;background:#0b0d33;color:var(--text);border:1px solid var(--line);border-radius:14px;padding:16px;font:inherit;font-size:15px}
|
| 77 |
-
textarea:focus{outline:2px solid var(--v)}
|
| 78 |
-
.row{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}
|
| 79 |
-
.res{background:#0b0d33;border:1px solid var(--line);border-radius:14px;padding:20px;min-height:230px}
|
| 80 |
-
.muted{color:var(--muted)}
|
| 81 |
-
.big{font-size:26px;font-weight:800;margin:2px 0}
|
| 82 |
-
.m{display:grid;grid-template-columns:150px 1fr 46px;gap:10px;align-items:center;font-size:13px;margin-top:9px}
|
| 83 |
-
.m div{height:9px;border-radius:9px;background:#171b57;overflow:hidden}.m div i{display:block;height:100%;background:linear-gradient(90deg,#6366f1,#a78bfa);transition:width .6s}
|
| 84 |
-
.drop{border:2px dashed #4b52b8;border-radius:16px;padding:34px;text-align:center;background:#0b0d33;transition:.2s}
|
| 85 |
-
.drop.over{background:#1b1f6a;border-color:#a78bfa}
|
| 86 |
-
table{width:100%;border-collapse:collapse;font-size:14px}
|
| 87 |
-
th{text-align:left;color:var(--muted);font-weight:600;padding:10px;border-bottom:1px solid var(--line);font-size:12px}
|
| 88 |
-
td{padding:11px 10px;border-bottom:1px solid #ffffff0d}
|
| 89 |
-
.tw{overflow-x:auto}
|
| 90 |
-
.search{width:100%;max-width:320px;background:#0b0d33;border:1px solid var(--line);border-radius:10px;padding:10px 14px;color:var(--text);font:inherit;font-size:14px}
|
| 91 |
-
.rep{display:grid;grid-template-columns:240px 1fr;gap:28px;align-items:center}
|
| 92 |
-
.rep .ring{width:200px;height:200px}.rep .ring span{width:140px;height:140px;font-size:20px;flex-direction:column}
|
| 93 |
-
pre{background:#060822;border:1px solid var(--line);border-radius:14px;padding:18px;overflow-x:auto;font-size:13px;color:#c7d2fe;line-height:1.6}
|
| 94 |
-
.who{display:grid;grid-template-columns:repeat(5,1fr);gap:14px}
|
| 95 |
-
.who div{border:1px solid var(--line);border-radius:16px;padding:20px;background:#0f1240;font-weight:600;font-size:15px}.who span{display:block;font-size:28px;margin-bottom:8px}
|
| 96 |
-
.trust{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);border-radius:18px;background:#0b0d33;margin-top:16px}
|
| 97 |
-
.trust div{padding:22px;text-align:center;border-right:1px solid var(--line)}.trust div:last-child{border:0}.trust b{display:block;font-size:20px}.trust small{color:var(--muted)}
|
| 98 |
-
.cta{margin:20px 0 60px;padding:40px;border-radius:24px;border:1px solid #6366f1;background:linear-gradient(135deg,#3236c4,#1a1c63);display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap}.cta h2{margin:0}
|
| 99 |
-
footer{padding:26px 0 40px;color:var(--muted);font-size:13px;border-top:1px solid var(--line)}
|
| 100 |
-
#toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%,40px);background:#22c55e;color:#04210f;padding:11px 20px;border-radius:12px;font-weight:700;opacity:0;transition:.3s;z-index:50}#toast.on{opacity:1;transform:translate(-50%,0)}
|
| 101 |
-
.app{position:relative}
|
| 102 |
-
.lock{position:absolute;inset:0;z-index:5;display:none;place-items:center;text-align:center;padding:24px;background:#080a26e6;backdrop-filter:blur(8px)}
|
| 103 |
-
.lock.on{display:grid}
|
| 104 |
-
.modal{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:20px;background:#04051acc;backdrop-filter:blur(6px)}
|
| 105 |
-
.modal[hidden]{display:none}
|
| 106 |
-
.mbox{position:relative;width:100%;max-width:420px;background:linear-gradient(160deg,#171b5c,#0d0f36);border:1px solid var(--line);border-radius:22px;padding:28px;box-shadow:0 40px 90px -20px #000}
|
| 107 |
-
.mbox h3{font-size:22px;margin-bottom:16px}
|
| 108 |
-
.x{position:absolute;top:14px;right:16px;background:none;border:0;color:var(--muted);font-size:18px}
|
| 109 |
-
.mtabs{display:flex;gap:6px;background:#0a0c2e;border-radius:12px;padding:4px;margin-bottom:16px}
|
| 110 |
-
.mtabs button{flex:1;border:0;background:none;padding:9px;border-radius:9px;color:var(--muted);font-weight:600}
|
| 111 |
-
.mtabs button.on{background:linear-gradient(90deg,#5b5ff0,#7c5cf5);color:#fff}
|
| 112 |
-
.mbox label{display:block;font-size:13px;color:var(--muted);margin:12px 0 5px}
|
| 113 |
-
.mbox input{width:100%;background:#0b0d33;border:1px solid var(--line);border-radius:10px;padding:12px 14px;color:var(--text);font:inherit}
|
| 114 |
-
.mbox input:focus{outline:2px solid var(--v)}
|
| 115 |
-
#aerr{color:#fca5a5;font-size:13px;min-height:20px;margin-top:10px}
|
| 116 |
-
#auth{display:flex;gap:8px;align-items:center}
|
| 117 |
-
#auth .nm{font-size:14px;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
| 118 |
-
@media(max-width:560px){#auth .nm{display:none}}
|
| 119 |
-
@media(max-width:1020px){.hero,.two,.rep{grid-template-columns:1fr}.dash{transform:none}.feat,.kpis,.trust{grid-template-columns:repeat(2,1fr)}.who{grid-template-columns:repeat(2,1fr)}.trust div:nth-child(2){border-right:0}nav{display:none}}
|
| 120 |
-
@media(max-width:560px){.dgrid{grid-template-columns:1fr}.side{display:none}.stats{grid-template-columns:repeat(2,1fr)}.row2,.feat,.who{grid-template-columns:1fr}.m{grid-template-columns:110px 1fr 42px}}
|
| 121 |
-
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
|
| 122 |
-
</style>
|
| 123 |
-
</head>
|
| 124 |
-
<body>
|
| 125 |
-
<header><div class="wrap">
|
| 126 |
-
<a class="logo" href="#"><svg viewBox="0 0 48 48" fill="none"><rect x="3" y="3" width="42" height="36" rx="10" stroke="#8b5cf6" stroke-width="3.5"/><path d="M14 39v7l9-7" stroke="#8b5cf6" stroke-width="3.5" stroke-linejoin="round"/><path d="M24 12v18M16 16h16M16 16l-4 8h8l-4-8zM32 16l-4 8h8l-4-8z" stroke="#c4b5fd" stroke-width="2.2" stroke-linejoin="round" stroke-linecap="round"/></svg><span>Lex<b>Intel</b></span></a>
|
| 127 |
-
<nav><a href="#ozellikler">Özellikler</a><a href="#uygulama">Uygulama</a><a href="#kimler">Kimler Kullanır</a></nav>
|
| 128 |
-
<div id="auth"></div>
|
| 129 |
-
</div></header>
|
| 130 |
-
|
| 131 |
-
<div class="wrap">
|
| 132 |
-
<div class="hero">
|
| 133 |
-
<div>
|
| 134 |
-
<span class="pill">⚖️ Hukuk ekipleri için yapay zekâ</span>
|
| 135 |
-
<h1>Hukuki Belgeleri <span class="grad">Akıllı Analiz Edin,</span> Zamandan Kazanın!</h1>
|
| 136 |
-
<p class="lead">LexIntel; dava dilekçelerini, mahkeme kararlarını, sözleşmeleri ve yönetmelikleri otomatik tanır, sınıflandırır ve raporlar.</p>
|
| 137 |
-
<ul class="checks">
|
| 138 |
-
<li><i>✓</i>Dava dilekçesi sınıflandırma</li><li><i>✓</i>Mahkeme kararı analizi</li><li><i>✓</i>Sözleşme ve yönetmelik kategorilendirme</li><li><i>✓</i>Otomatik belge tanıma ve toplu analiz</li>
|
| 139 |
-
</ul>
|
| 140 |
-
<a class="btn" href="#uygulama">🚀 Şimdi Deneyin →</a>
|
| 141 |
-
<p class="sub">Daha hızlı ve tutarlı hukuki süreçler için yapay zekâ gücü!</p>
|
| 142 |
-
</div>
|
| 143 |
-
<div class="dash" aria-label="Yönetim paneli örneği">
|
| 144 |
-
<div class="dtop"><span>Son 30 Gün ⌄</span><span><span class="av">AY</span>Av. Ahmet Yılmaz</span></div>
|
| 145 |
-
<div class="dgrid">
|
| 146 |
-
<div class="side"><span class="on">Panel</span><span>Belgeler</span><span>Analizler</span><span>Raporlar</span><span>Ayarlar</span><span>Yardım</span></div>
|
| 147 |
-
<div>
|
| 148 |
-
<div class="stats">
|
| 149 |
-
<div class="stat"><small>Toplam Belge</small><b>18.742</b><em class="up">↑ %12,5</em></div>
|
| 150 |
-
<div class="stat"><small>Dava Dilekçesi</small><b>%38,4</b><em class="up">↑ %2,1</em></div>
|
| 151 |
-
<div class="stat"><small>Mahkeme Kararı</small><b>%27,9</b><em class="up">↑ %1,3</em></div>
|
| 152 |
-
<div class="stat"><small>Sözleşme</small><b>%24,6</b><em class="dn">↓ %0,7</em></div>
|
| 153 |
-
</div>
|
| 154 |
-
<div class="row2">
|
| 155 |
-
<div class="card"><h4>Günlük Analiz Hacmi</h4><div class="bars"><div style="height:40%"></div><div style="height:58%;animation-delay:.08s"></div><div style="height:46%;animation-delay:.16s"></div><div style="height:72%;animation-delay:.24s"></div><div style="height:64%;animation-delay:.32s"></div><div style="height:88%;animation-delay:.4s"></div><div style="height:78%;animation-delay:.48s"></div><div style="height:96%;animation-delay:.56s"></div></div></div>
|
| 156 |
-
<div class="card"><h4>Belge Türü Dağılımı</h4><div class="donut"><div class="ring" style="background:conic-gradient(#3b82f6 0 38%,#f59e0b 38% 66%,#22c55e 66% 91%,#8b5cf6 91% 100%)"><span>%96</span></div><div class="lg"><div><i style="background:#3b82f6"></i>Dilekçe</div><div><i style="background:#f59e0b"></i>Karar</div><div><i style="background:#22c55e"></i>Sözleşme</div><div><i style="background:#8b5cf6"></i>Yönetmelik</div></div></div></div>
|
| 157 |
-
</div>
|
| 158 |
-
<div class="card" style="margin-top:10px"><h4>Son Analizler</h4>
|
| 159 |
-
<div class="item"><span>Kıdem tazminatı talebi</span><span class="tag c0">Dava Dilekçesi</span></div>
|
| 160 |
-
<div class="item"><span>Yargıtay 9. HD – 2025/4412</span><span class="tag c1">Mahkeme Kararı</span></div>
|
| 161 |
-
<div class="item"><span>Ticari kira sözleşmesi</span><span class="tag c2">Sözleşme</span></div>
|
| 162 |
-
</div>
|
| 163 |
-
</div>
|
| 164 |
-
</div>
|
| 165 |
-
</div>
|
| 166 |
-
</div>
|
| 167 |
-
|
| 168 |
-
<section id="ozellikler">
|
| 169 |
-
<h2>Hukuk ekibiniz için eksiksiz belge zekâsı</h2>
|
| 170 |
-
<p class="secsub">Bir özelliğe tıklayın, doğrudan uygulamada deneyin.</p>
|
| 171 |
-
<div class="feat">
|
| 172 |
-
<button class="f" onclick="go('tek')"><div class="ic">📄</div><h3>Dava dilekçesi sınıflandırma</h3><p>Dilekçeleri dava türüne ve hukuk dalına göre ayırır.</p><u>Dene →</u></button>
|
| 173 |
-
<button class="f" onclick="go('tek')"><div class="ic">⚖️</div><h3>Mahkeme kararı analizi</h3><p>Karar metninden yargı mercii ve karar türünü çıkarır.</p><u>Dene →</u></button>
|
| 174 |
-
<button class="f" onclick="go('tek')"><div class="ic">📑</div><h3>Sözleşme ve yönetmelik kategorilendirme</h3><p>Sözleşmeleri ve mevzuat metinlerini türlerine göre etiketler.</p><u>Dene →</u></button>
|
| 175 |
-
<button class="f" onclick="go('tek')"><div class="ic">🔍</div><h3>Otomatik belge tanıma</h3><p>Belgenin ne olduğunu siz söylemeden tespit eder.</p><u>Dene →</u></button>
|
| 176 |
-
<button class="f" onclick="go('toplu')"><div class="ic">🗂️</div><h3>Toplu belge analizi</h3><p>Birçok dosyayı tek seferde yükleyip aynı anda işler.</p><u>Dene →</u></button>
|
| 177 |
-
<button class="f" onclick="go('gecmis')"><div class="ic">🕘</div><h3>Analiz geçmişi ve raporlama</h3><p>Tüm analizleri saklar, rapor ve CSV üretir.</p><u>Aç →</u></button>
|
| 178 |
-
<button class="f" onclick="go('panel')"><div class="ic">🖥️</div><h3>Kullanıcı dostu yönetim paneli</h3><p>Sonuçları ve istatistikleri tek ekrandan izleyin.</p><u>Aç →</u></button>
|
| 179 |
-
<button class="f" onclick="go('api')"><div class="ic">🔌</div><h3>Kurumsal entegrasyona uygun mimari</h3><p>REST API ile mevcut sistemlerinize bağlanır.</p><u>Aç →</u></button>
|
| 180 |
-
</div>
|
| 181 |
-
</section>
|
| 182 |
-
|
| 183 |
-
<section id="uygulama">
|
| 184 |
-
<h2>Uygulamayı deneyin</h2>
|
| 185 |
-
<p class="secsub">Analizler tarayıcınızda saklanır; hiçbir belge sunucuya gönderilmez. Demo, anahtar kelime tabanlıdır; gerçek modeliniz için “Entegrasyon” sekmesine bakın.</p>
|
| 186 |
-
<div class="app">
|
| 187 |
-
<div class="tabs" role="tablist">
|
| 188 |
-
<button class="tab on" data-t="tek">Tek belge</button><button class="tab" data-t="toplu">Toplu analiz</button><button class="tab" data-t="gecmis">Analiz geçmişi</button><button class="tab" data-t="panel">Rapor ve panel</button><button class="tab" data-t="api">Entegrasyon</button><button class="tab" data-t="db">Veritabanı (JSON)</button>
|
| 189 |
-
</div>
|
| 190 |
-
<div class="lock" id="lock"><div><div style="font-size:38px">🔐</div><h3 style="font-size:22px;margin:8px 0">Devam etmek için üye girişi yapın</h3><p class="muted" style="margin-bottom:18px;max-width:360px">Analizleriniz hesabınıza özel JSON veritabanında saklanır.</p><div class="row" style="justify-content:center"><button class="btn s" onclick="modal('in')">Giriş yap</button><button class="btn s g" onclick="modal('up')">Üye ol</button></div></div></div>
|
| 191 |
-
<div class="kpis">
|
| 192 |
-
<div class="kpi"><small>Toplam analiz</small><b id="k1">0</b></div>
|
| 193 |
-
<div class="kpi"><small>En sık belge türü</small><b id="k2" style="font-size:19px;padding-top:6px">–</b></div>
|
| 194 |
-
<div class="kpi"><small>Ortalama güven</small><b id="k3">–</b></div>
|
| 195 |
-
<div class="kpi"><small>Bugün</small><b id="k4">0</b></div>
|
| 196 |
-
</div>
|
| 197 |
-
|
| 198 |
-
<div class="pane on" id="p-tek"><div class="two">
|
| 199 |
-
<div>
|
| 200 |
-
<textarea id="txt" placeholder="Belge metnini buraya yapıştırın veya bir .txt dosyası yükleyin…"></textarea>
|
| 201 |
-
<div class="row">
|
| 202 |
-
<button class="btn s" onclick="runOne()">Analiz et</button>
|
| 203 |
-
<label class="btn s g">📎 Dosya yükle<input type="file" id="f1" accept=".txt,.md,.text" hidden></label>
|
| 204 |
-
<button class="btn s g" onclick="sample(0)">Dilekçe örneği</button><button class="btn s g" onclick="sample(1)">Karar örneği</button><button class="btn s g" onclick="sample(2)">Sözleşme örneği</button><button class="btn s g" onclick="sample(3)">Yönetmelik örneği</button>
|
| 205 |
-
</div>
|
| 206 |
-
</div>
|
| 207 |
-
<div class="res" id="out" aria-live="polite"><p class="muted">Sonuç burada görünecek.</p></div>
|
| 208 |
-
</div></div>
|
| 209 |
-
|
| 210 |
-
<div class="pane" id="p-toplu">
|
| 211 |
-
<div class="drop" id="drop"><div style="font-size:34px">🗂️</div><p style="font-weight:700;margin:6px 0">Dosyaları buraya sürükleyin</p><p class="muted" style="font-size:14px;margin-bottom:14px">Birden fazla .txt / .md dosyası seçebilirsiniz</p><label class="btn s">Dosya seç<input type="file" id="f2" accept=".txt,.md,.text" multiple hidden></label></div>
|
| 212 |
-
<div class="tw" style="margin-top:16px"><table><thead><tr><th>Dosya</th><th>Tür</th><th>Alt kategori</th><th>Güven</th></tr></thead><tbody id="bt"><tr><td colspan="4" class="muted">Henüz dosya yüklenmedi.</td></tr></tbody></table></div>
|
| 213 |
-
</div>
|
| 214 |
-
|
| 215 |
-
<div class="pane" id="p-gecmis">
|
| 216 |
-
<div class="row" style="margin:0 0 14px;justify-content:space-between"><input class="search" id="q" placeholder="Geçmişte ara…"><div class="row" style="margin:0"><button class="btn s g" onclick="csv()">⬇ CSV indir</button><button class="btn s g" onclick="clearH()">Geçmişi temizle</button></div></div>
|
| 217 |
-
<div class="tw"><table><thead><tr><th>Tarih</th><th>Belge</th><th>Tür</th><th>Alt kategori</th><th>Güven</th></tr></thead><tbody id="ht"></tbody></table></div>
|
| 218 |
-
</div>
|
| 219 |
-
|
| 220 |
-
<div class="pane" id="p-panel">
|
| 221 |
-
<div class="rep"><div class="ring" id="ring"><span id="rt">0<small class="muted" style="font-size:12px">analiz</small></span></div><div id="legend"></div></div>
|
| 222 |
-
<div class="row"><button class="btn s" onclick="window.print()">🖨 Raporu yazdır</button><button class="btn s g" onclick="csv()">⬇ CSV indir</button><button class="btn s g" onclick="demoFill()">Örnek veri ekle</button></div>
|
| 223 |
-
</div>
|
| 224 |
-
|
| 225 |
-
<div class="pane" id="p-db">
|
| 226 |
-
<p class="muted" style="margin-bottom:12px">Hesabınız ve analizleriniz aşağıdaki JSON yapısında saklanır. Şifre düz metin olarak asla tutulmaz.</p>
|
| 227 |
-
<pre id="jv" style="max-height:320px"></pre>
|
| 228 |
-
<div class="row"><button class="btn s" onclick="expMine()">⬇ Verilerimi indir (JSON)</button><label class="btn s g">⬆ JSON içe aktar<input type="file" id="fj" accept=".json,application/json" hidden></label><button class="btn s g" id="expAll" onclick="expAll()" hidden>⬇ Tüm veritabanı (yönetici)</button></div>
|
| 229 |
-
</div>
|
| 230 |
-
|
| 231 |
-
<div class="pane" id="p-api">
|
| 232 |
-
<p class="muted" style="margin-bottom:12px">Kendi modelinizi bağlamak için sayfadaki <code>API_URL</code> değişkenine uç noktanızı yazın. Beklenen yanıt: <code>{"label":"Sözleşme","confidence":0.94}</code></p>
|
| 233 |
-
<pre id="code">curl -X POST https://api.sirketiniz.com/v1/classify \
|
| 234 |
-
-H "Authorization: Bearer $API_KEY" \
|
| 235 |
-
-H "Content-Type: application/json" \
|
| 236 |
-
-d '{"text": "KİRA SÖZLEŞMESİ Madde 1..."}'
|
| 237 |
-
|
| 238 |
-
// JavaScript
|
| 239 |
-
const r = await fetch(API_URL, {
|
| 240 |
-
method: "POST",
|
| 241 |
-
headers: {"Content-Type": "application/json"},
|
| 242 |
-
body: JSON.stringify({ text })
|
| 243 |
-
});
|
| 244 |
-
const { label, confidence } = await r.json();</pre>
|
| 245 |
-
<div class="row"><button class="btn s" onclick="copyCode()">Kodu kopyala</button></div>
|
| 246 |
-
</div>
|
| 247 |
-
</div>
|
| 248 |
-
</section>
|
| 249 |
-
|
| 250 |
-
<section id="kimler">
|
| 251 |
-
<h2>Kimler kullanabilir?</h2>
|
| 252 |
-
<p class="secsub">Belge yükü yüksek olan her hukuk ekibi için tasarlandı.</p>
|
| 253 |
-
<div class="who"><div><span>👩⚖️</span>Avukatlar ve hukuk büroları</div><div><span>🏛️</span>Hukuk müşavirlikleri</div><div><span>🏢</span>Şirketlerin hukuk departmanları</div><div><span>🤝</span>Danışmanlık firmaları</div><div><span>🚀</span>Hukuki teknoloji girişimleri</div></div>
|
| 254 |
-
<div class="trust"><div><b>⚡ Hızlı</b><small>Saniyeler içinde sonuç</small></div><div><b>🗂️ Toplu</b><small>Yüzlerce belge tek seferde</small></div><div><b>🔌 API</b><small>Kolay entegrasyon</small></div><div><b>🔒 Güvenli</b><small>Belgeleriniz tarayıcınızda kalır</small></div></div>
|
| 255 |
-
</section>
|
| 256 |
-
|
| 257 |
-
<div class="cta"><h2>Belge sürecinizi<br>otomatiğe alın.</h2><a class="btn" href="#uygulama">Uygulamayı deneyin →</a></div>
|
| 258 |
-
<footer><p style="max-width:760px">LexIntel bir karar destek aracıdır; hukuki danışmanlık yerine geçmez. Sonuçlar bir hukuk profesyoneli tarafından doğrulanmalıdır.</p></footer>
|
| 259 |
-
</div>
|
| 260 |
-
<div class="modal" id="modal" hidden><div class="mbox" role="dialog" aria-modal="true" aria-labelledby="mt">
|
| 261 |
-
<button class="x" onclick="closeM()" aria-label="Kapat">✕</button>
|
| 262 |
-
<h3 id="mt">Giriş yap</h3>
|
| 263 |
-
<div class="mtabs"><button id="mi" onclick="modal('in')">Giriş</button><button id="mu" onclick="modal('up')">Üye ol</button></div>
|
| 264 |
-
<div id="nw"><label for="an">Ad soyad</label><input id="an" autocomplete="name"></div>
|
| 265 |
-
<label for="ae">E-posta</label><input id="ae" type="email" autocomplete="email">
|
| 266 |
-
<label for="ap">Şifre (en az 6 karakter)</label><input id="ap" type="password" autocomplete="current-password">
|
| 267 |
-
<p id="aerr" role="alert"></p>
|
| 268 |
-
<button class="btn" style="width:100%;justify-content:center;margin-top:6px" onclick="submitAuth()" id="sb">Giriş yap</button>
|
| 269 |
-
</div></div>
|
| 270 |
-
<div id="toast" role="status"></div>
|
| 271 |
-
|
| 272 |
-
<script>
|
| 273 |
-
const API_URL=""; // örn. "https://api.sirketiniz.com/v1/classify"
|
| 274 |
-
const TYPES={
|
| 275 |
-
"Dava Dilekçesi":{c:"c0",col:"#3b82f6",w:["davacı","davalı","dilekçe","talep ederiz","talep ederim","hâkimliğine","hakimliğine","vekili","arz ve talep","muhterem"]},
|
| 276 |
-
"Mahkeme Kararı":{c:"c1",col:"#f59e0b",w:["hüküm","gerekçe","karar verildi","oybirliği","yargıtay","daire","esas no","karar no","hükmedildi","reddine","onanmasına","kesin olarak"]},
|
| 277 |
-
"Sözleşme":{c:"c2",col:"#22c55e",w:["sözleşme","taraflar","kiraya veren","kiracı","bedel","feshi","imza","işveren","işçi","alıcı","satıcı","yüklenici"]},
|
| 278 |
-
"Yönetmelik / Mevzuat":{c:"c3",col:"#8b5cf6",w:["yönetmelik","kanun","resmî gazete","resmi gazete","amaç ve kapsam","tanımlar","yürütme","dayanak","yürürlük","tebliğ"]}
|
| 279 |
-
};
|
| 280 |
-
const SUBS={
|
| 281 |
-
"İş Hukuku":["işçi","işveren","kıdem","ihbar","iş mahkemesi","fazla mesai"],
|
| 282 |
-
"Kira / Gayrimenkul":["kira","kiracı","kiraya veren","tapu","taşınmaz","tahliye"],
|
| 283 |
-
"Ticaret Hukuku":["ticaret","şirket","anonim","limited","çek","senet","iflas"],
|
| 284 |
-
"Aile Hukuku":["boşanma","nafaka","velayet","evlilik","aile mahkemesi"],
|
| 285 |
-
"Ceza Hukuku":["sanık","ceza","cumhuriyet savcısı","suç","hapis","iddianame"],
|
| 286 |
-
"İdare / Vergi":["idare mahkemesi","vergi","belediye","idari işlem","iptal davası"],
|
| 287 |
-
"Tüketici / Borçlar":["tüketici","ayıplı","tazminat","borç","alacak","haksız fiil"]
|
| 288 |
-
};
|
| 289 |
-
const SAMPLES=[
|
| 290 |
-
"İŞ MAHKEMESİ SAYIN HÂKİMLİĞİNE\nDavacı vekili olarak; davalı işverence haksız feshedilen iş sözleşmesi nedeniyle kıdem ve ihbar tazminatının tahsilini talep ederiz. Arz ve talep ederim.",
|
| 291 |
-
"T.C. YARGITAY 9. HUKUK DAİRESİ\nEsas No: 2025/1234 Karar No: 2025/5678\nGEREKÇE: Dosya kapsamı incelenmiş; işçilik alacağına ilişkin yerel mahkeme kararının onanmasına oybirliği ile karar verildi.",
|
| 292 |
-
"KİRA SÖZLEŞMESİ\nMadde 1 – Taraflar: Kiraya veren ve kiracı. Madde 2 – Kira bedeli aylık 25.000 TL'dir. Madde 3 – Sözleşmenin feshi yazılı bildirimle yapılır. İmza.",
|
| 293 |
-
"KİŞİSEL VERİLERİN KORUNMASI HAKKINDA YÖNETMELİK\nAmaç ve kapsam: Bu Yönetmelik ... Dayanak: 6698 sayılı Kanun. Tanımlar: Bu Yönetmelikte geçen ... Yürürlük: Resmî Gazete'de yayımı tarihinde yürürlüğe girer."
|
| 294 |
-
];
|
| 295 |
-
const $=id=>document.getElementById(id);
|
| 296 |
-
/* JSON veritabanı: {users:[], history:[]} → tarayıcıda (localStorage) saklanır */
|
| 297 |
-
let DB={users:[],history:[]},ses=null,H=[],mode="in";
|
| 298 |
-
try{const d=JSON.parse(localStorage.getItem("lexintel_db")||"null");if(d&&Array.isArray(d.users))DB={users:d.users,history:d.history||[]};ses=localStorage.getItem("lexintel_ses")}catch(e){}
|
| 299 |
-
const me=()=>DB.users.find(u=>u.id===ses);
|
| 300 |
-
if(!me())ses=null;
|
| 301 |
-
const persist=()=>{try{localStorage.setItem("lexintel_db",JSON.stringify(DB))}catch(e){toast("Kayıt yapılamadı")}};
|
| 302 |
-
const save=()=>{if(!ses)return;DB.history=DB.history.filter(h=>h.u!==ses).concat(H.map(h=>({...h,u:ses})));persist()};
|
| 303 |
-
const loadH=()=>{H=DB.history.filter(h=>h.u===ses).sort((a,b)=>b.d-a.d)};
|
| 304 |
-
loadH();
|
| 305 |
-
const hex=b=>[...new Uint8Array(b)].map(x=>x.toString(16).padStart(2,"0")).join("");
|
| 306 |
-
async function hashPw(pw,salt){
|
| 307 |
-
const k=await crypto.subtle.importKey("raw",new TextEncoder().encode(pw),"PBKDF2",false,["deriveBits"]);
|
| 308 |
-
return hex(await crypto.subtle.deriveBits({name:"PBKDF2",salt:new TextEncoder().encode(salt),iterations:150000,hash:"SHA-256"},k,256));
|
| 309 |
-
}
|
| 310 |
-
function modal(m){
|
| 311 |
-
mode=m;$("modal").hidden=false;$("aerr").textContent="";
|
| 312 |
-
$("mt").textContent=m==="in"?"Giriş yap":"Üye ol";$("sb").textContent=m==="in"?"Giriş yap":"Hesap oluştur";
|
| 313 |
-
$("nw").style.display=m==="up"?"block":"none";
|
| 314 |
-
$("mi").classList.toggle("on",m==="in");$("mu").classList.toggle("on",m==="up");
|
| 315 |
-
$("ap").autocomplete=m==="in"?"current-password":"new-password";
|
| 316 |
-
setTimeout(()=>$(m==="up"?"an":"ae").focus(),30);
|
| 317 |
-
}
|
| 318 |
-
const closeM=()=>{$("modal").hidden=true};
|
| 319 |
-
async function submitAuth(){
|
| 320 |
-
const er=$("aerr"),email=$("ae").value.trim().toLowerCase(),pw=$("ap").value,name=$("an").value.trim();er.textContent="";
|
| 321 |
-
if(!/^\S+@\S+\.\S+$/.test(email)){er.textContent="Geçerli bir e-posta girin.";return}
|
| 322 |
-
if(pw.length<6){er.textContent="Şifre en az 6 karakter olmalı.";return}
|
| 323 |
-
try{
|
| 324 |
-
if(mode==="up"){
|
| 325 |
-
if(!name){er.textContent="Ad soyad girin.";return}
|
| 326 |
-
if(DB.users.some(u=>u.email===email)){er.textContent="Bu e-posta zaten kayıtlı. Giriş yapın.";return}
|
| 327 |
-
const salt=hex(crypto.getRandomValues(new Uint8Array(16)));
|
| 328 |
-
const u={id:"u"+Date.now().toString(36),name,email,salt,hash:await hashPw(pw,salt),role:DB.users.length?"uye":"yonetici",created:new Date().toISOString()};
|
| 329 |
-
DB.users.push(u);ses=u.id;
|
| 330 |
-
}else{
|
| 331 |
-
const u=DB.users.find(x=>x.email===email);
|
| 332 |
-
if(!u||u.hash!==await hashPw(pw,u.salt)){er.textContent="E-posta veya şifre hatalı.";return}
|
| 333 |
-
ses=u.id;
|
| 334 |
-
}
|
| 335 |
-
}catch(e){er.textContent="Bu tarayıcıda güvenli bağlantı (HTTPS) gerekli.";return}
|
| 336 |
-
try{localStorage.setItem("lexintel_ses",ses)}catch(e){}
|
| 337 |
-
persist();loadH();closeM();$("ap").value="";refresh();toast("Hoş geldiniz, "+me().name.split(" ")[0]);
|
| 338 |
-
}
|
| 339 |
-
function logout(){ses=null;try{localStorage.removeItem("lexintel_ses")}catch(e){}H=[];refresh();toast("Çıkış yapıldı")}
|
| 340 |
-
const need=()=>{if(ses&&me())return true;modal("in");return false};
|
| 341 |
-
function renderAuth(){
|
| 342 |
-
const u=me(),a=$("auth");
|
| 343 |
-
a.innerHTML=u?`<span class="av" style="margin:0">${esc(u.name.split(" ").map(x=>x[0]).join("").slice(0,2).toUpperCase())}</span><span class="nm">${esc(u.name)}</span><button class="btn s g" onclick="logout()">Çıkış</button>`
|
| 344 |
-
:`<button class="btn s g" onclick="modal('in')">Giriş yap</button><button class="btn s" onclick="modal('up')">Üye ol</button>`;
|
| 345 |
-
$("lock").classList.toggle("on",!u);
|
| 346 |
-
$("expAll").hidden=!(u&&u.role==="yonetici");
|
| 347 |
-
$("jv").textContent=u?JSON.stringify({kullanici:{id:u.id,ad:u.name,eposta:u.email,rol:u.role,kayit:u.created},analizler:H.slice(0,20).map(h=>({tarih:new Date(h.d).toISOString(),belge:h.n,tur:h.l,alt:h.s,guven:+h.c.toFixed(2)}))},null,2)+(H.length>20?"\n// … ilk 20 kayıt gösteriliyor":""):"{}";
|
| 348 |
-
}
|
| 349 |
-
function dl(obj,name){const a=document.createElement("a");a.href=URL.createObjectURL(new Blob([JSON.stringify(obj,null,2)],{type:"application/json"}));a.download=name;a.click()}
|
| 350 |
-
function expMine(){const u=me();if(!u)return;dl({kullanici:{id:u.id,ad:u.name,eposta:u.email,rol:u.role,kayit:u.created},analizler:H},"lexintel-verilerim.json")}
|
| 351 |
-
function expAll(){const u=me();if(u&&u.role==="yonetici")dl(DB,"lexintel-db.json")}
|
| 352 |
-
document.addEventListener("keydown",e=>{if(e.key==="Escape")closeM();if(e.key==="Enter"&&!$("modal").hidden)submitAuth()});
|
| 353 |
-
const esc=s=>String(s).replace(/[&<>"]/g,c=>({"&":"&","<":"<",">":">",'"':"""}[c]));
|
| 354 |
-
function toast(m){const t=$("toast");t.textContent=m;t.classList.add("on");setTimeout(()=>t.classList.remove("on"),1800)}
|
| 355 |
-
|
| 356 |
-
async function classify(text){
|
| 357 |
-
if(API_URL){
|
| 358 |
-
try{const r=await fetch(API_URL,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text})});
|
| 359 |
-
const j=await r.json();return{label:j.label,conf:j.confidence,scores:[[j.label,j.confidence]],sub:j.sub||"–"}}catch(e){toast("API hatası, demo kullanılıyor")}
|
| 360 |
-
}
|
| 361 |
-
const t=text.toLocaleLowerCase("tr");
|
| 362 |
-
const raw=Object.entries(TYPES).map(([k,v])=>[k,v.w.reduce((s,x)=>s+(t.includes(x)?1:0),0)]);
|
| 363 |
-
const sum=raw.reduce((s,[,v])=>s+v,0);
|
| 364 |
-
if(!sum)return null;
|
| 365 |
-
const scores=raw.map(([k,v])=>[k,v/sum]).sort((a,b)=>b[1]-a[1]);
|
| 366 |
-
const top=raw.slice().sort((a,b)=>b[1]-a[1])[0][1];
|
| 367 |
-
const conf=Math.min(.99,scores[0][1]*.7+Math.min(top,6)/6*.3);
|
| 368 |
-
const sc=Object.entries(SUBS).map(([k,w])=>[k,w.reduce((s,x)=>s+(t.includes(x)?1:0),0)]).sort((a,b)=>b[1]-a[1]);
|
| 369 |
-
return{label:scores[0][0],conf,scores,sub:sc[0][1]?sc[0][0]:"Genel"};
|
| 370 |
-
}
|
| 371 |
-
function add(name,text,r){
|
| 372 |
-
const e={d:Date.now(),n:name,l:r.label,s:r.sub,c:r.conf,x:text.slice(0,120)};
|
| 373 |
-
H.unshift(e);H=H.slice(0,500);save();refresh();return e;
|
| 374 |
-
}
|
| 375 |
-
async function runOne(){
|
| 376 |
-
if(!need())return;
|
| 377 |
-
const text=$("txt").value.trim();
|
| 378 |
-
if(!text){$("out").innerHTML='<p class="muted">Önce bir belge metni yapıştırın veya dosya yükleyin.</p>';return}
|
| 379 |
-
const r=await classify(text);
|
| 380 |
-
if(!r){$("out").innerHTML='<p class="muted">Belge türü belirlenemedi. Daha uzun veya daha belirgin bir metin deneyin.</p>';return}
|
| 381 |
-
add(text.split("\n")[0].slice(0,50)||"Belge",text,r);
|
| 382 |
-
const T=TYPES[r.label]||{c:"c0"};
|
| 383 |
-
$("out").innerHTML=`<small class="muted">Tespit edilen belge türü</small><div class="big grad">${esc(r.label)}</div>
|
| 384 |
-
<span class="tag ${T.c}">${esc(r.sub)}</span> <span class="tag c3">Güven %${Math.round(r.conf*100)}</span>
|
| 385 |
-
<div style="margin-top:12px">${r.scores.map(([k,v])=>`<div class="m"><span>${esc(k)}</span><div><i style="width:${Math.round(v*100)}%"></i></div><b>%${Math.round(v*100)}</b></div>`).join("")}</div>
|
| 386 |
-
<p class="muted" style="font-size:12px;margin-top:14px">Sonuç Geçmiş sekmesine kaydedildi.</p>`;
|
| 387 |
-
}
|
| 388 |
-
function sample(i){$("txt").value=SAMPLES[i];runOne()}
|
| 389 |
-
const readF=f=>new Promise(res=>{const r=new FileReader();r.onload=()=>res(String(r.result));r.onerror=()=>res("");r.readAsText(f)});
|
| 390 |
-
$("f1").onchange=async e=>{const f=e.target.files[0];if(f){$("txt").value=await readF(f);runOne()}e.target.value=""};
|
| 391 |
-
async function batch(files){
|
| 392 |
-
if(!need())return;
|
| 393 |
-
const tb=$("bt");tb.innerHTML="";
|
| 394 |
-
for(const f of files){
|
| 395 |
-
const text=await readF(f);const r=text?await classify(text):null;
|
| 396 |
-
if(r){add(f.name,text,r);tb.insertAdjacentHTML("beforeend",`<tr><td>${esc(f.name)}</td><td><span class="tag ${TYPES[r.label]?TYPES[r.label].c:"c0"}">${esc(r.label)}</span></td><td>${esc(r.sub)}</td><td>%${Math.round(r.conf*100)}</td></tr>`)}
|
| 397 |
-
else tb.insertAdjacentHTML("beforeend",`<tr><td>${esc(f.name)}</td><td colspan="3" class="muted">Belirlenemedi veya okunamadı</td></tr>`);
|
| 398 |
-
}
|
| 399 |
-
toast(files.length+" dosya analiz edildi");
|
| 400 |
-
}
|
| 401 |
-
$("f2").onchange=e=>{batch([...e.target.files]);e.target.value=""};
|
| 402 |
-
$("fj").onchange=async e=>{
|
| 403 |
-
const f=e.target.files[0];e.target.value="";if(!f||!need())return;
|
| 404 |
-
try{
|
| 405 |
-
const j=JSON.parse(await readF(f));
|
| 406 |
-
const arr=(j.analizler||[]).filter(x=>x&&x.tur&&x.belge).map(x=>({d:Date.parse(x.tarih)||Date.now(),n:String(x.belge),l:String(x.tur),s:String(x.alt||"–"),c:Number(x.guven)||0,x:""}));
|
| 407 |
-
H=H.concat(arr).sort((a,b)=>b.d-a.d).slice(0,500);save();refresh();toast(arr.length+" kayıt içe aktarıldı");
|
| 408 |
-
}catch(err){toast("Geçersiz JSON dosyası")}
|
| 409 |
-
};
|
| 410 |
-
const dz=$("drop");
|
| 411 |
-
["dragenter","dragover"].forEach(ev=>dz.addEventListener(ev,e=>{e.preventDefault();dz.classList.add("over")}));
|
| 412 |
-
["dragleave","drop"].forEach(ev=>dz.addEventListener(ev,e=>{e.preventDefault();dz.classList.remove("over")}));
|
| 413 |
-
dz.addEventListener("drop",e=>batch([...e.dataTransfer.files]));
|
| 414 |
-
|
| 415 |
-
function refresh(){
|
| 416 |
-
renderAuth();
|
| 417 |
-
$("k1").textContent=H.length;
|
| 418 |
-
const cnt={};H.forEach(h=>cnt[h.l]=(cnt[h.l]||0)+1);
|
| 419 |
-
const top=Object.entries(cnt).sort((a,b)=>b[1]-a[1])[0];
|
| 420 |
-
$("k2").textContent=top?top[0]:"–";
|
| 421 |
-
$("k3").textContent=H.length?"%"+Math.round(H.reduce((s,h)=>s+h.c,0)/H.length*100):"–";
|
| 422 |
-
const day=new Date().toDateString();$("k4").textContent=H.filter(h=>new Date(h.d).toDateString()===day).length;
|
| 423 |
-
const q=($("q").value||"").toLocaleLowerCase("tr");
|
| 424 |
-
const rows=H.filter(h=>(h.n+h.l+h.s).toLocaleLowerCase("tr").includes(q));
|
| 425 |
-
$("ht").innerHTML=rows.length?rows.map(h=>`<tr><td>${new Date(h.d).toLocaleString("tr-TR",{dateStyle:"short",timeStyle:"short"})}</td><td>${esc(h.n)}</td><td><span class="tag ${TYPES[h.l]?TYPES[h.l].c:"c0"}">${esc(h.l)}</span></td><td>${esc(h.s)}</td><td>%${Math.round(h.c*100)}</td></tr>`).join(""):'<tr><td colspan="5" class="muted">Kayıt yok. Bir belge analiz edin.</td></tr>';
|
| 426 |
-
const keys=Object.keys(TYPES);let acc=0;const stops=[];
|
| 427 |
-
keys.forEach(k=>{const p=H.length?(cnt[k]||0)/H.length*100:0;stops.push(`${TYPES[k].col} ${acc}% ${acc+p}%`);acc+=p});
|
| 428 |
-
$("ring").style.background=H.length?`conic-gradient(${stops.join(",")})`:"#171b57";
|
| 429 |
-
$("rt").innerHTML=H.length+'<small class="muted" style="font-size:12px">analiz</small>';
|
| 430 |
-
$("legend").innerHTML=keys.map(k=>`<div class="m" style="grid-template-columns:150px 1fr 70px"><span><i style="display:inline-block;width:9px;height:9px;border-radius:50%;background:${TYPES[k].col};margin-right:8px"></i>${k}</span><div><i style="width:${H.length?(cnt[k]||0)/H.length*100:0}%"></i></div><b>${cnt[k]||0} adet</b></div>`).join("");
|
| 431 |
-
}
|
| 432 |
-
$("q").oninput=refresh;
|
| 433 |
-
function csv(){
|
| 434 |
-
if(!H.length){toast("Dışa aktarılacak kayıt yok");return}
|
| 435 |
-
const L=[["Tarih","Belge","Tür","Alt kategori","Güven"],...H.map(h=>[new Date(h.d).toISOString(),h.n,h.l,h.s,Math.round(h.c*100)+"%"])];
|
| 436 |
-
const s="\ufeff"+L.map(r=>r.map(c=>'"'+String(c).replace(/"/g,'""')+'"').join(";")).join("\n");
|
| 437 |
-
const a=document.createElement("a");a.href=URL.createObjectURL(new Blob([s],{type:"text/csv;charset=utf-8"}));a.download="lexintel-analizler.csv";a.click();
|
| 438 |
-
}
|
| 439 |
-
function clearH(){if(confirm("Tüm analiz geçmişi silinsin mi?")){H=[];save();refresh()}}
|
| 440 |
-
async function demoFill(){if(!need())return;for(let k=0;k<2;k++)for(const s of SAMPLES){const r=await classify(s);if(r)add(s.split("\n")[0].slice(0,50),s,r)}toast("Örnek veriler eklendi")}
|
| 441 |
-
function copyCode(){navigator.clipboard&&navigator.clipboard.writeText($("code").textContent).then(()=>toast("Kopyalandı"),()=>toast("Kopyalanamadı"))}
|
| 442 |
-
function go(t){document.querySelector(`.tab[data-t="${t}"]`).click();$("uygulama").scrollIntoView()}
|
| 443 |
-
document.querySelectorAll(".tab").forEach(b=>b.onclick=()=>{
|
| 444 |
-
document.querySelectorAll(".tab").forEach(x=>x.classList.toggle("on",x===b));
|
| 445 |
-
document.querySelectorAll(".pane").forEach(p=>p.classList.toggle("on",p.id==="p-"+b.dataset.t));
|
| 446 |
-
});
|
| 447 |
-
refresh();
|
| 448 |
-
</script>
|
| 449 |
-
</body>
|
| 450 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|