GoshawkVortexAI commited on
Commit
ab3f9b8
·
verified ·
1 Parent(s): cdbc72d

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +449 -18
index.html CHANGED
@@ -1,19 +1,450 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </html>
 
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=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"}[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>