Zandy-Wandy commited on
Commit
30ffd52
·
verified ·
1 Parent(s): 01a455a

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +1364 -19
index.html CHANGED
@@ -1,19 +1,1364 @@
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="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Matrix ECHO — Living Memory</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300;0,9..144,400;0,9..144,700;1,9..144,300;1,9..144,400&family=DM+Mono:ital,wght@0,300;0,400;1,300&display=swap" rel="stylesheet">
8
+ <style>
9
+ :root {
10
+ --flesh: #C4956A;
11
+ --flesh-pale: #E8C9A8;
12
+ --flesh-deep: #8B5E3C;
13
+ --scar: #7A3B3B;
14
+ --scar-bright: #C0514A;
15
+ --scar-pale: #D4897A;
16
+ --tissue: #2A1A14;
17
+ --tissue-mid: #3D2318;
18
+ --tissue-light: #5C3520;
19
+ --membrane: rgba(196, 149, 106, 0.08);
20
+ --nerve: #E8A87C;
21
+ --bg: #120A06;
22
+ --text: #D4B896;
23
+ --text-dim: #8A6848;
24
+ --text-bright: #F0D4B0;
25
+ }
26
+
27
+ * { margin: 0; padding: 0; box-sizing: border-box; }
28
+
29
+ html { scroll-behavior: smooth; }
30
+
31
+ body {
32
+ background: var(--bg);
33
+ color: var(--text);
34
+ font-family: 'Fraunces', Georgia, serif;
35
+ font-size: 17px;
36
+ line-height: 1.7;
37
+ overflow-x: hidden;
38
+ cursor: none;
39
+ }
40
+
41
+ /* ── CUSTOM CURSOR ── */
42
+ .cursor {
43
+ position: fixed;
44
+ width: 12px;
45
+ height: 12px;
46
+ background: var(--scar-bright);
47
+ border-radius: 50%;
48
+ pointer-events: none;
49
+ z-index: 9999;
50
+ transition: transform 0.1s ease, opacity 0.2s;
51
+ mix-blend-mode: screen;
52
+ }
53
+ .cursor-trail {
54
+ position: fixed;
55
+ width: 32px;
56
+ height: 32px;
57
+ border: 1px solid rgba(192, 81, 74, 0.4);
58
+ border-radius: 50%;
59
+ pointer-events: none;
60
+ z-index: 9998;
61
+ transition: all 0.15s ease;
62
+ }
63
+
64
+ /* ── NOISE OVERLAY ── */
65
+ body::before {
66
+ content: '';
67
+ position: fixed;
68
+ inset: 0;
69
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.04'/%3E%3C/svg%3E");
70
+ pointer-events: none;
71
+ z-index: 1000;
72
+ opacity: 0.6;
73
+ }
74
+
75
+ /* ── VEINS / ORGANIC LINES ── */
76
+ .vein-bg {
77
+ position: fixed;
78
+ inset: 0;
79
+ pointer-events: none;
80
+ z-index: 0;
81
+ opacity: 0.15;
82
+ }
83
+
84
+ /* ── HERO ── */
85
+ header {
86
+ position: relative;
87
+ min-height: 100vh;
88
+ display: flex;
89
+ align-items: center;
90
+ justify-content: center;
91
+ overflow: hidden;
92
+ padding: 4rem 2rem;
93
+ }
94
+
95
+ .hero-membrane {
96
+ position: absolute;
97
+ inset: 0;
98
+ background:
99
+ radial-gradient(ellipse at 30% 40%, rgba(122, 59, 59, 0.35) 0%, transparent 55%),
100
+ radial-gradient(ellipse at 70% 60%, rgba(90, 40, 20, 0.3) 0%, transparent 50%),
101
+ radial-gradient(ellipse at 50% 20%, rgba(196, 149, 106, 0.08) 0%, transparent 40%);
102
+ }
103
+
104
+ /* Pulsing biological blobs */
105
+ .blob {
106
+ position: absolute;
107
+ border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%;
108
+ filter: blur(60px);
109
+ animation: morph 8s ease-in-out infinite;
110
+ opacity: 0.12;
111
+ }
112
+ .blob-1 {
113
+ width: 500px; height: 500px;
114
+ background: var(--scar);
115
+ top: -100px; left: -100px;
116
+ animation-delay: 0s;
117
+ }
118
+ .blob-2 {
119
+ width: 400px; height: 400px;
120
+ background: var(--flesh-deep);
121
+ bottom: -80px; right: -80px;
122
+ animation-delay: -3s;
123
+ }
124
+ .blob-3 {
125
+ width: 300px; height: 300px;
126
+ background: var(--scar-bright);
127
+ top: 40%; left: 60%;
128
+ animation-delay: -5s;
129
+ opacity: 0.07;
130
+ }
131
+
132
+ @keyframes morph {
133
+ 0%, 100% { border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%; transform: rotate(0deg); }
134
+ 33% { border-radius: 70% 30% 50% 50% / 30% 60% 40% 70%; transform: rotate(120deg); }
135
+ 66% { border-radius: 50% 50% 30% 70% / 60% 40% 70% 30%; transform: rotate(240deg); }
136
+ }
137
+
138
+ .hero-content {
139
+ position: relative;
140
+ z-index: 2;
141
+ text-align: center;
142
+ max-width: 900px;
143
+ }
144
+
145
+ .hero-label {
146
+ font-family: 'DM Mono', monospace;
147
+ font-size: 0.7rem;
148
+ letter-spacing: 0.4em;
149
+ color: var(--scar-pale);
150
+ text-transform: uppercase;
151
+ display: block;
152
+ margin-bottom: 2rem;
153
+ opacity: 0;
154
+ animation: rise 1s ease 0.3s forwards;
155
+ }
156
+
157
+ .hero-title {
158
+ font-size: clamp(5rem, 15vw, 11rem);
159
+ font-weight: 300;
160
+ color: var(--flesh-pale);
161
+ line-height: 0.9;
162
+ letter-spacing: -0.03em;
163
+ margin-bottom: 0.5rem;
164
+ opacity: 0;
165
+ animation: rise 1.2s ease 0.5s forwards;
166
+ position: relative;
167
+ }
168
+
169
+ .hero-title .scar-letter {
170
+ color: var(--scar-bright);
171
+ font-style: italic;
172
+ position: relative;
173
+ }
174
+
175
+ .hero-title .scar-letter::after {
176
+ content: '';
177
+ position: absolute;
178
+ bottom: -4px;
179
+ left: 0; right: 0;
180
+ height: 2px;
181
+ background: linear-gradient(90deg, transparent, var(--scar-bright), transparent);
182
+ animation: scar-pulse 2s ease-in-out infinite;
183
+ }
184
+
185
+ @keyframes scar-pulse {
186
+ 0%, 100% { opacity: 0.4; transform: scaleX(0.8); }
187
+ 50% { opacity: 1; transform: scaleX(1); }
188
+ }
189
+
190
+ .hero-sub {
191
+ font-size: clamp(1rem, 2.5vw, 1.4rem);
192
+ font-weight: 300;
193
+ font-style: italic;
194
+ color: var(--text-dim);
195
+ margin-bottom: 3rem;
196
+ opacity: 0;
197
+ animation: rise 1s ease 0.8s forwards;
198
+ }
199
+
200
+ .hero-tagline {
201
+ font-family: 'DM Mono', monospace;
202
+ font-size: 0.85rem;
203
+ color: var(--nerve);
204
+ background: rgba(196, 149, 106, 0.06);
205
+ border: 1px solid rgba(196, 149, 106, 0.15);
206
+ border-left: 3px solid var(--scar-bright);
207
+ padding: 1rem 1.5rem;
208
+ text-align: left;
209
+ max-width: 600px;
210
+ margin: 0 auto 3rem;
211
+ opacity: 0;
212
+ animation: rise 1s ease 1s forwards;
213
+ line-height: 1.6;
214
+ }
215
+
216
+ .pulse-dot {
217
+ display: inline-block;
218
+ width: 8px; height: 8px;
219
+ background: var(--scar-bright);
220
+ border-radius: 50%;
221
+ margin-right: 0.5rem;
222
+ animation: heartbeat 1.2s ease-in-out infinite;
223
+ vertical-align: middle;
224
+ }
225
+
226
+ @keyframes heartbeat {
227
+ 0%, 100% { transform: scale(1); opacity: 1; }
228
+ 14% { transform: scale(1.3); }
229
+ 28% { transform: scale(1); }
230
+ 42% { transform: scale(1.2); }
231
+ 70% { opacity: 0.6; }
232
+ }
233
+
234
+ @keyframes rise {
235
+ from { opacity: 0; transform: translateY(24px); }
236
+ to { opacity: 1; transform: translateY(0); }
237
+ }
238
+
239
+ .scroll-cue {
240
+ position: absolute;
241
+ bottom: 2.5rem;
242
+ left: 50%;
243
+ transform: translateX(-50%);
244
+ display: flex;
245
+ flex-direction: column;
246
+ align-items: center;
247
+ gap: 0.5rem;
248
+ font-family: 'DM Mono', monospace;
249
+ font-size: 0.6rem;
250
+ letter-spacing: 0.3em;
251
+ color: var(--text-dim);
252
+ opacity: 0;
253
+ animation: rise 1s ease 1.5s forwards;
254
+ }
255
+ .scroll-cue::after {
256
+ content: '';
257
+ width: 1px;
258
+ height: 50px;
259
+ background: linear-gradient(to bottom, var(--scar-bright), transparent);
260
+ animation: drip 1.5s ease-in-out infinite;
261
+ }
262
+ @keyframes drip {
263
+ 0% { transform: scaleY(0); transform-origin: top; opacity: 1; }
264
+ 50% { transform: scaleY(1); transform-origin: top; opacity: 1; }
265
+ 100% { transform: scaleY(1); transform-origin: bottom; opacity: 0; }
266
+ }
267
+
268
+ /* ── SECTIONS ── */
269
+ section {
270
+ padding: 7rem 2rem;
271
+ position: relative;
272
+ }
273
+ .container { max-width: 1100px; margin: 0 auto; }
274
+
275
+ /* ── LIVE DEMO SECTION ── */
276
+ .demo-section {
277
+ background: var(--tissue);
278
+ border-top: 1px solid rgba(196, 149, 106, 0.1);
279
+ border-bottom: 1px solid rgba(196, 149, 106, 0.1);
280
+ }
281
+
282
+ .demo-grid {
283
+ display: grid;
284
+ grid-template-columns: 1fr 1fr;
285
+ gap: 2px;
286
+ background: rgba(196, 149, 106, 0.08);
287
+ border: 1px solid rgba(196, 149, 106, 0.1);
288
+ }
289
+
290
+ .demo-panel {
291
+ background: var(--tissue);
292
+ padding: 2rem;
293
+ }
294
+
295
+ .demo-panel-header {
296
+ font-family: 'DM Mono', monospace;
297
+ font-size: 0.65rem;
298
+ letter-spacing: 0.35em;
299
+ color: var(--scar-pale);
300
+ text-transform: uppercase;
301
+ display: flex;
302
+ align-items: center;
303
+ gap: 0.6rem;
304
+ margin-bottom: 1.5rem;
305
+ padding-bottom: 1rem;
306
+ border-bottom: 1px solid rgba(196, 149, 106, 0.1);
307
+ }
308
+
309
+ .status-dot {
310
+ width: 7px; height: 7px;
311
+ border-radius: 50%;
312
+ background: var(--scar-bright);
313
+ animation: heartbeat 1.2s ease-in-out infinite;
314
+ }
315
+
316
+ /* Scar formation interactive demo */
317
+ .scar-demo-input {
318
+ width: 100%;
319
+ background: rgba(196, 149, 106, 0.05);
320
+ border: 1px solid rgba(196, 149, 106, 0.15);
321
+ border-radius: 0;
322
+ padding: 1rem;
323
+ color: var(--text-bright);
324
+ font-family: 'DM Mono', monospace;
325
+ font-size: 0.8rem;
326
+ resize: none;
327
+ outline: none;
328
+ transition: border-color 0.2s;
329
+ min-height: 100px;
330
+ }
331
+ .scar-demo-input:focus {
332
+ border-color: rgba(192, 81, 74, 0.4);
333
+ }
334
+ .scar-demo-input::placeholder { color: var(--text-dim); }
335
+
336
+ .demo-btn {
337
+ margin-top: 1rem;
338
+ width: 100%;
339
+ padding: 0.8rem;
340
+ background: transparent;
341
+ border: 1px solid var(--scar);
342
+ color: var(--scar-pale);
343
+ font-family: 'DM Mono', monospace;
344
+ font-size: 0.7rem;
345
+ letter-spacing: 0.2em;
346
+ text-transform: uppercase;
347
+ cursor: none;
348
+ transition: all 0.2s ease;
349
+ position: relative;
350
+ overflow: hidden;
351
+ }
352
+ .demo-btn:hover {
353
+ background: rgba(122, 59, 59, 0.2);
354
+ border-color: var(--scar-bright);
355
+ color: var(--flesh-pale);
356
+ }
357
+ .demo-btn::before {
358
+ content: '';
359
+ position: absolute;
360
+ left: -100%;
361
+ top: 0; bottom: 0;
362
+ width: 100%;
363
+ background: linear-gradient(90deg, transparent, rgba(192, 81, 74, 0.1), transparent);
364
+ transition: left 0.4s ease;
365
+ }
366
+ .demo-btn:hover::before { left: 100%; }
367
+
368
+ /* Scar lattice visualization */
369
+ .lattice-canvas {
370
+ width: 100%;
371
+ height: 280px;
372
+ position: relative;
373
+ overflow: hidden;
374
+ background: rgba(18, 10, 6, 0.5);
375
+ border: 1px solid rgba(196, 149, 106, 0.08);
376
+ }
377
+
378
+ .scar-node {
379
+ position: absolute;
380
+ border-radius: 50%;
381
+ display: flex;
382
+ align-items: center;
383
+ justify-content: center;
384
+ font-family: 'DM Mono', monospace;
385
+ font-size: 0.55rem;
386
+ color: var(--flesh-pale);
387
+ text-align: center;
388
+ cursor: none;
389
+ transition: all 0.3s ease;
390
+ z-index: 2;
391
+ }
392
+
393
+ .scar-node:hover .node-tooltip {
394
+ opacity: 1;
395
+ transform: translateY(-8px);
396
+ }
397
+
398
+ .node-tooltip {
399
+ position: absolute;
400
+ bottom: 100%;
401
+ left: 50%;
402
+ transform: translateX(-50%) translateY(0px);
403
+ background: var(--tissue-mid);
404
+ border: 1px solid rgba(196, 149, 106, 0.2);
405
+ padding: 0.5rem 0.8rem;
406
+ font-size: 0.65rem;
407
+ color: var(--text);
408
+ white-space: nowrap;
409
+ opacity: 0;
410
+ transition: all 0.2s ease;
411
+ pointer-events: none;
412
+ z-index: 10;
413
+ margin-bottom: 8px;
414
+ }
415
+
416
+ svg.lattice-svg {
417
+ position: absolute;
418
+ inset: 0;
419
+ width: 100%;
420
+ height: 100%;
421
+ z-index: 1;
422
+ }
423
+
424
+ /* Scar feed */
425
+ .scar-feed {
426
+ max-height: 280px;
427
+ overflow-y: auto;
428
+ scrollbar-width: thin;
429
+ scrollbar-color: var(--scar) transparent;
430
+ }
431
+
432
+ .scar-entry {
433
+ padding: 0.8rem;
434
+ border-left: 2px solid var(--scar);
435
+ margin-bottom: 0.8rem;
436
+ background: rgba(122, 59, 59, 0.08);
437
+ opacity: 0;
438
+ transform: translateX(-10px);
439
+ animation: scar-appear 0.4s ease forwards;
440
+ }
441
+
442
+ .scar-entry.hallucination { border-left-color: var(--scar-bright); }
443
+ .scar-entry.logical { border-left-color: var(--flesh); }
444
+ .scar-entry.contextual { border-left-color: var(--nerve); }
445
+
446
+ @keyframes scar-appear {
447
+ to { opacity: 1; transform: translateX(0); }
448
+ }
449
+
450
+ .scar-type-badge {
451
+ font-family: 'DM Mono', monospace;
452
+ font-size: 0.55rem;
453
+ letter-spacing: 0.2em;
454
+ text-transform: uppercase;
455
+ color: var(--scar-pale);
456
+ margin-bottom: 0.3rem;
457
+ display: block;
458
+ }
459
+
460
+ .scar-claim {
461
+ font-size: 0.8rem;
462
+ color: var(--text-dim);
463
+ font-style: italic;
464
+ margin-bottom: 0.2rem;
465
+ }
466
+
467
+ .scar-correction {
468
+ font-size: 0.8rem;
469
+ color: var(--flesh-pale);
470
+ }
471
+
472
+ .scar-correction::before {
473
+ content: '→ ';
474
+ color: var(--scar-bright);
475
+ }
476
+
477
+ .scar-weight-bar {
478
+ height: 2px;
479
+ background: rgba(196, 149, 106, 0.1);
480
+ margin-top: 0.6rem;
481
+ position: relative;
482
+ overflow: hidden;
483
+ }
484
+
485
+ .scar-weight-fill {
486
+ height: 100%;
487
+ background: linear-gradient(90deg, var(--scar), var(--scar-bright));
488
+ transition: width 1s ease;
489
+ }
490
+
491
+ /* ── SCAR ANATOMY SECTION ── */
492
+ .anatomy-section { background: var(--bg); }
493
+
494
+ .anatomy-grid {
495
+ display: grid;
496
+ grid-template-columns: 1fr 1fr;
497
+ gap: 4rem;
498
+ align-items: start;
499
+ }
500
+
501
+ .anatomy-code {
502
+ background: var(--tissue);
503
+ border: 1px solid rgba(196, 149, 106, 0.1);
504
+ border-left: 3px solid var(--scar);
505
+ padding: 2rem;
506
+ font-family: 'DM Mono', monospace;
507
+ font-size: 0.78rem;
508
+ line-height: 2;
509
+ color: var(--text-dim);
510
+ position: relative;
511
+ overflow: hidden;
512
+ }
513
+
514
+ .anatomy-code::before {
515
+ content: '';
516
+ position: absolute;
517
+ top: 0; left: 0; right: 0;
518
+ height: 1px;
519
+ background: linear-gradient(90deg, var(--scar), transparent);
520
+ }
521
+
522
+ .code-kw { color: var(--flesh-pale); }
523
+ .code-field { color: var(--nerve); }
524
+ .code-val { color: var(--scar-pale); }
525
+ .code-comment { color: rgba(138, 104, 72, 0.5); font-style: italic; }
526
+ .code-type { color: var(--flesh); }
527
+
528
+ .anatomy-text { padding-top: 1rem; }
529
+
530
+ .section-eyebrow {
531
+ font-family: 'DM Mono', monospace;
532
+ font-size: 0.65rem;
533
+ letter-spacing: 0.4em;
534
+ color: var(--scar-pale);
535
+ text-transform: uppercase;
536
+ display: block;
537
+ margin-bottom: 1rem;
538
+ }
539
+
540
+ .section-title {
541
+ font-size: clamp(2rem, 4vw, 3rem);
542
+ font-weight: 300;
543
+ color: var(--flesh-pale);
544
+ line-height: 1.1;
545
+ margin-bottom: 1.5rem;
546
+ font-style: italic;
547
+ }
548
+
549
+ .section-body {
550
+ color: var(--text-dim);
551
+ font-size: 1rem;
552
+ line-height: 1.8;
553
+ margin-bottom: 1.2rem;
554
+ }
555
+
556
+ .section-body em { color: var(--flesh-pale); font-style: italic; }
557
+
558
+ /* field annotations */
559
+ .field-list { margin-top: 2rem; }
560
+ .field-item {
561
+ display: flex;
562
+ gap: 1rem;
563
+ padding: 0.8rem 0;
564
+ border-bottom: 1px solid rgba(196, 149, 106, 0.06);
565
+ align-items: flex-start;
566
+ }
567
+ .field-name {
568
+ font-family: 'DM Mono', monospace;
569
+ font-size: 0.75rem;
570
+ color: var(--nerve);
571
+ flex-shrink: 0;
572
+ width: 140px;
573
+ }
574
+ .field-desc {
575
+ font-size: 0.85rem;
576
+ color: var(--text-dim);
577
+ line-height: 1.5;
578
+ }
579
+
580
+ /* ── DOMAIN MAP SECTION ── */
581
+ .domain-section {
582
+ background: var(--tissue);
583
+ border-top: 1px solid rgba(196, 149, 106, 0.08);
584
+ border-bottom: 1px solid rgba(196, 149, 106, 0.08);
585
+ }
586
+
587
+ .domain-bars {
588
+ display: flex;
589
+ flex-direction: column;
590
+ gap: 1rem;
591
+ margin-top: 3rem;
592
+ }
593
+
594
+ .domain-row {
595
+ display: grid;
596
+ grid-template-columns: 130px 1fr 60px;
597
+ align-items: center;
598
+ gap: 1.2rem;
599
+ }
600
+
601
+ .domain-name {
602
+ font-family: 'DM Mono', monospace;
603
+ font-size: 0.72rem;
604
+ color: var(--text-dim);
605
+ text-align: right;
606
+ }
607
+
608
+ .domain-bar-track {
609
+ height: 6px;
610
+ background: rgba(196, 149, 106, 0.08);
611
+ position: relative;
612
+ overflow: hidden;
613
+ }
614
+
615
+ .domain-bar-fill {
616
+ height: 100%;
617
+ background: linear-gradient(90deg, var(--scar), var(--scar-bright));
618
+ width: 0%;
619
+ transition: width 1.5s cubic-bezier(0.23, 1, 0.32, 1);
620
+ position: relative;
621
+ }
622
+
623
+ .domain-bar-fill::after {
624
+ content: '';
625
+ position: absolute;
626
+ right: 0;
627
+ top: -2px; bottom: -2px;
628
+ width: 4px;
629
+ background: var(--scar-bright);
630
+ filter: blur(2px);
631
+ }
632
+
633
+ .domain-risk {
634
+ font-family: 'DM Mono', monospace;
635
+ font-size: 0.7rem;
636
+ color: var(--scar-pale);
637
+ text-align: right;
638
+ }
639
+
640
+ .domain-risk.high { color: var(--scar-bright); }
641
+ .domain-risk.medium { color: var(--flesh); }
642
+ .domain-risk.low { color: var(--text-dim); }
643
+
644
+ /* ── PIPELINE SECTION ── */
645
+ .pipeline-section { background: var(--bg); }
646
+
647
+ .pipeline-steps {
648
+ display: flex;
649
+ flex-direction: column;
650
+ gap: 0;
651
+ max-width: 680px;
652
+ margin: 4rem auto 0;
653
+ position: relative;
654
+ }
655
+
656
+ .pipeline-steps::before {
657
+ content: '';
658
+ position: absolute;
659
+ left: 24px;
660
+ top: 48px;
661
+ bottom: 48px;
662
+ width: 1px;
663
+ background: linear-gradient(to bottom, transparent, var(--scar), var(--scar), transparent);
664
+ opacity: 0.3;
665
+ }
666
+
667
+ .pipeline-step {
668
+ display: flex;
669
+ gap: 2rem;
670
+ padding: 2rem 0;
671
+ opacity: 0;
672
+ transform: translateY(16px);
673
+ transition: all 0.5s ease;
674
+ }
675
+ .pipeline-step.visible { opacity: 1; transform: translateY(0); }
676
+
677
+ .step-icon {
678
+ width: 50px;
679
+ height: 50px;
680
+ border: 1px solid rgba(196, 149, 106, 0.2);
681
+ display: flex;
682
+ align-items: center;
683
+ justify-content: center;
684
+ font-size: 1.2rem;
685
+ flex-shrink: 0;
686
+ position: relative;
687
+ background: var(--tissue);
688
+ }
689
+ .step-icon::before {
690
+ content: '';
691
+ position: absolute;
692
+ inset: -1px;
693
+ background: linear-gradient(135deg, rgba(192, 81, 74, 0.3), transparent);
694
+ z-index: -1;
695
+ }
696
+
697
+ .step-content { flex: 1; padding-top: 0.4rem; }
698
+
699
+ .step-label {
700
+ font-family: 'DM Mono', monospace;
701
+ font-size: 0.6rem;
702
+ letter-spacing: 0.35em;
703
+ color: var(--scar-pale);
704
+ text-transform: uppercase;
705
+ display: block;
706
+ margin-bottom: 0.3rem;
707
+ }
708
+
709
+ .step-name {
710
+ font-size: 1.1rem;
711
+ color: var(--flesh-pale);
712
+ font-style: italic;
713
+ display: block;
714
+ margin-bottom: 0.4rem;
715
+ }
716
+
717
+ .step-desc {
718
+ font-size: 0.88rem;
719
+ color: var(--text-dim);
720
+ line-height: 1.6;
721
+ }
722
+
723
+ /* ── STATS SECTION ── */
724
+ .stats-section {
725
+ background: var(--tissue);
726
+ border-top: 1px solid rgba(196, 149, 106, 0.08);
727
+ }
728
+
729
+ .stats-grid {
730
+ display: grid;
731
+ grid-template-columns: repeat(4, 1fr);
732
+ gap: 1px;
733
+ background: rgba(196, 149, 106, 0.08);
734
+ border: 1px solid rgba(196, 149, 106, 0.08);
735
+ margin-top: 3rem;
736
+ }
737
+
738
+ .stat-card {
739
+ background: var(--tissue);
740
+ padding: 2.5rem 2rem;
741
+ text-align: center;
742
+ position: relative;
743
+ overflow: hidden;
744
+ transition: background 0.3s;
745
+ }
746
+ .stat-card:hover { background: rgba(196, 149, 106, 0.04); }
747
+
748
+ .stat-card::before {
749
+ content: '';
750
+ position: absolute;
751
+ top: 0; left: 0; right: 0;
752
+ height: 2px;
753
+ background: linear-gradient(90deg, transparent, var(--scar), transparent);
754
+ transform: scaleX(0);
755
+ transition: transform 0.4s ease;
756
+ }
757
+ .stat-card:hover::before { transform: scaleX(1); }
758
+
759
+ .stat-number {
760
+ font-size: 3rem;
761
+ font-weight: 300;
762
+ color: var(--scar-bright);
763
+ display: block;
764
+ line-height: 1;
765
+ margin-bottom: 0.5rem;
766
+ font-style: italic;
767
+ }
768
+
769
+ .stat-label {
770
+ font-family: 'DM Mono', monospace;
771
+ font-size: 0.62rem;
772
+ letter-spacing: 0.25em;
773
+ color: var(--text-dim);
774
+ text-transform: uppercase;
775
+ }
776
+
777
+ /* ── FOOTER ── */
778
+ footer {
779
+ background: var(--bg);
780
+ padding: 5rem 2rem 3rem;
781
+ text-align: center;
782
+ border-top: 1px solid rgba(196, 149, 106, 0.08);
783
+ }
784
+
785
+ .footer-title {
786
+ font-size: 2rem;
787
+ font-weight: 300;
788
+ font-style: italic;
789
+ color: var(--flesh-pale);
790
+ display: block;
791
+ margin-bottom: 0.5rem;
792
+ }
793
+
794
+ .footer-org {
795
+ font-family: 'DM Mono', monospace;
796
+ font-size: 0.65rem;
797
+ letter-spacing: 0.5em;
798
+ color: var(--text-dim);
799
+ display: block;
800
+ margin-bottom: 2rem;
801
+ }
802
+
803
+ .footer-links {
804
+ display: flex;
805
+ justify-content: center;
806
+ gap: 2rem;
807
+ margin-bottom: 3rem;
808
+ }
809
+
810
+ .footer-link {
811
+ font-family: 'DM Mono', monospace;
812
+ font-size: 0.65rem;
813
+ letter-spacing: 0.25em;
814
+ color: var(--text-dim);
815
+ text-decoration: none;
816
+ text-transform: uppercase;
817
+ transition: color 0.2s;
818
+ }
819
+ .footer-link:hover { color: var(--flesh-pale); }
820
+
821
+ .footer-status {
822
+ font-family: 'DM Mono', monospace;
823
+ font-size: 0.62rem;
824
+ letter-spacing: 0.25em;
825
+ color: var(--text-dim);
826
+ display: flex;
827
+ align-items: center;
828
+ justify-content: center;
829
+ gap: 0.5rem;
830
+ }
831
+
832
+ /* ── SECTION HEADERS ── */
833
+ .section-header { text-align: center; margin-bottom: 1rem; }
834
+
835
+ /* ── SCROLLBAR ── */
836
+ ::-webkit-scrollbar { width: 4px; }
837
+ ::-webkit-scrollbar-track { background: var(--bg); }
838
+ ::-webkit-scrollbar-thumb { background: var(--scar); }
839
+
840
+ /* ── RESPONSIVE ── */
841
+ @media (max-width: 768px) {
842
+ .demo-grid { grid-template-columns: 1fr; }
843
+ .anatomy-grid { grid-template-columns: 1fr; }
844
+ .stats-grid { grid-template-columns: repeat(2, 1fr); }
845
+ .domain-row { grid-template-columns: 100px 1fr 50px; }
846
+ }
847
+ </style>
848
+ </head>
849
+ <body>
850
+
851
+ <div class="cursor" id="cursor"></div>
852
+ <div class="cursor-trail" id="cursorTrail"></div>
853
+
854
+ <!-- VEIN BACKGROUND SVG -->
855
+ <svg class="vein-bg" viewBox="0 0 1440 900" preserveAspectRatio="xMidYMid slice">
856
+ <path d="M0,450 C200,380 400,520 600,440 C800,360 1000,500 1200,420 C1300,380 1380,440 1440,420" stroke="rgba(122,59,59,0.4)" stroke-width="1" fill="none"/>
857
+ <path d="M0,200 C300,240 500,160 700,200 C900,240 1100,180 1440,220" stroke="rgba(196,149,106,0.2)" stroke-width="0.5" fill="none"/>
858
+ <path d="M0,700 C200,660 500,740 800,700 C1100,660 1300,720 1440,680" stroke="rgba(122,59,59,0.3)" stroke-width="0.8" fill="none"/>
859
+ <path d="M300,0 C320,200 280,400 300,600 C320,800 290,900 310,900" stroke="rgba(196,149,106,0.15)" stroke-width="0.5" fill="none"/>
860
+ <path d="M900,0 C880,150 920,350 890,550 C860,750 900,850 880,900" stroke="rgba(122,59,59,0.25)" stroke-width="0.8" fill="none"/>
861
+ </svg>
862
+
863
+ <!-- HERO -->
864
+ <header>
865
+ <div class="blob blob-1"></div>
866
+ <div class="blob blob-2"></div>
867
+ <div class="blob blob-3"></div>
868
+ <div class="hero-membrane"></div>
869
+ <div class="hero-content">
870
+ <span class="hero-label">Matrix · Corp · Intelligence · Substrate</span>
871
+ <h1 class="hero-title">
872
+ <span class="scar-letter">E</span>CHO
873
+ </h1>
874
+ <p class="hero-sub">It remembers every wound</p>
875
+ <div class="hero-tagline">
876
+ <span class="pulse-dot"></span>
877
+ <strong style="color:var(--flesh-pale)">Qwen3.5-27B · Opus 4.6 Distilled · Rust</strong><br>
878
+ A living model that crystallizes its mistakes into Scars — structured memories that grow stronger with every correction. The more it fails, the harder it is to fool.
879
+ </div>
880
+ </div>
881
+ <div class="scroll-cue">descend</div>
882
+ </header>
883
+
884
+ <!-- LIVE DEMO -->
885
+ <section class="demo-section">
886
+ <div class="container">
887
+ <div class="section-header">
888
+ <span class="section-eyebrow">Interactive Demo</span>
889
+ <h2 class="section-title">Watch a Scar form</h2>
890
+ </div>
891
+ <div class="demo-grid">
892
+
893
+ <!-- Left: correction input -->
894
+ <div class="demo-panel">
895
+ <div class="demo-panel-header">
896
+ <div class="status-dot"></div>
897
+ Correction Interface
898
+ </div>
899
+ <label style="font-family:'DM Mono',monospace;font-size:0.65rem;letter-spacing:0.2em;color:var(--text-dim);text-transform:uppercase;display:block;margin-bottom:0.5rem;">What the model said</label>
900
+ <textarea class="scar-demo-input" id="claimInput" placeholder="The derivative of x² is x" rows="3"></textarea>
901
+ <label style="font-family:'DM Mono',monospace;font-size:0.65rem;letter-spacing:0.2em;color:var(--text-dim);text-transform:uppercase;display:block;margin:1rem 0 0.5rem;">Correction</label>
902
+ <textarea class="scar-demo-input" id="correctionInput" placeholder="The derivative of x² is 2x" rows="3"></textarea>
903
+ <button class="demo-btn" id="formScarBtn">⬡ Crystallize Scar</button>
904
+
905
+ <div style="margin-top:2rem;">
906
+ <div class="demo-panel-header" style="margin-bottom:1rem;">
907
+ <div class="status-dot"></div>
908
+ Active Scar Feed
909
+ </div>
910
+ <div class="scar-feed" id="scarFeed">
911
+ <div class="scar-entry">
912
+ <span class="scar-type-badge">Factual</span>
913
+ <div class="scar-claim">"Paris is the capital of Germany"</div>
914
+ <div class="scar-correction">Paris is the capital of France</div>
915
+ <div class="scar-weight-bar"><div class="scar-weight-fill" style="width:72%"></div></div>
916
+ </div>
917
+ <div class="scar-entry hallucination">
918
+ <span class="scar-type-badge">Hallucination</span>
919
+ <div class="scar-claim">"Einstein won the Nobel Prize in 1925"</div>
920
+ <div class="scar-correction">Einstein won in 1921 for photoelectric effect</div>
921
+ <div class="scar-weight-bar"><div class="scar-weight-fill" style="width:88%"></div></div>
922
+ </div>
923
+ <div class="scar-entry logical">
924
+ <span class="scar-type-badge">Logical</span>
925
+ <div class="scar-claim">"All primes are odd therefore 2 is not prime"</div>
926
+ <div class="scar-correction">2 is the only even prime number</div>
927
+ <div class="scar-weight-bar"><div class="scar-weight-fill" style="width:55%"></div></div>
928
+ </div>
929
+ </div>
930
+ </div>
931
+ </div>
932
+
933
+ <!-- Right: lattice visualization -->
934
+ <div class="demo-panel">
935
+ <div class="demo-panel-header">
936
+ <div class="status-dot"></div>
937
+ Scar Lattice — Live
938
+ </div>
939
+ <div class="lattice-canvas" id="latticeCanvas">
940
+ <svg class="lattice-svg" id="latticeSvg"></svg>
941
+ <!-- nodes injected by JS -->
942
+ </div>
943
+ <div style="margin-top:1.5rem;padding:1rem;background:rgba(196,149,106,0.04);border:1px solid rgba(196,149,106,0.08);">
944
+ <div style="font-family:'DM Mono',monospace;font-size:0.65rem;letter-spacing:0.2em;color:var(--text-dim);text-transform:uppercase;margin-bottom:0.8rem;">Pre-scan Output</div>
945
+ <div id="scanOutput" style="font-family:'DM Mono',monospace;font-size:0.75rem;color:var(--nerve);line-height:1.8;">
946
+ <span style="color:var(--text-dim)">// Awaiting query...</span>
947
+ </div>
948
+ </div>
949
+ <textarea class="scar-demo-input" id="queryInput" placeholder="Ask something to trigger a pre-scan..." rows="2" style="margin-top:1rem;"></textarea>
950
+ <button class="demo-btn" id="scanBtn" style="margin-top:0.5rem;">⬡ Pre-Scan Lattice</button>
951
+ </div>
952
+ </div>
953
+ </div>
954
+ </section>
955
+
956
+ <!-- SCAR ANATOMY -->
957
+ <section class="anatomy-section">
958
+ <div class="container">
959
+ <div class="anatomy-grid">
960
+ <div class="anatomy-code">
961
+ <div><span class="code-kw">struct</span> <span class="code-type">Scar</span> {</div>
962
+ <div>&nbsp;&nbsp;<span class="code-field">id</span>: <span class="code-type">Uuid</span>,</div>
963
+ <div>&nbsp;&nbsp;<span class="code-field">domain</span>: <span class="code-type">String</span>, <span class="code-comment">// "math.calculus"</span></div>
964
+ <div>&nbsp;&nbsp;<span class="code-field">scar_type</span>: <span class="code-type">ScarType</span>,</div>
965
+ <div>&nbsp;&nbsp;<span class="code-field">original_claim</span>: <span class="code-type">String</span>,</div>
966
+ <div>&nbsp;&nbsp;<span class="code-field">correction</span>: <span class="code-type">String</span>,</div>
967
+ <div>&nbsp;&nbsp;<span class="code-field">confidence_at_time</span>: <span class="code-type">f32</span>, <span class="code-comment">// was 0.94</span></div>
968
+ <div>&nbsp;&nbsp;<span class="code-field">times_triggered</span>: <span class="code-type">u32</span>,</div>
969
+ <div>&nbsp;&nbsp;<span class="code-field">weight</span>: <span class="code-type">f32</span>, <span class="code-comment">// 0.0–1.0</span></div>
970
+ <div>&nbsp;&nbsp;<span class="code-field">fingerprint</span>: <span class="code-type">Vec&lt;f32&gt;</span>, <span class="code-comment">// 128-dim</span></div>
971
+ <div>&nbsp;&nbsp;<span class="code-field">created_at</span>: <span class="code-type">DateTime&lt;Utc&gt;</span>,</div>
972
+ <div>&nbsp;&nbsp;<span class="code-field">last_triggered</span>: <span class="code-type">Option&lt;DateTime&gt;</span>,</div>
973
+ <div>}</div>
974
+ <br>
975
+ <div><span class="code-kw">enum</span> <span class="code-type">ScarType</span> {</div>
976
+ <div>&nbsp;&nbsp;<span class="code-val">Factual</span> | <span class="code-val">Logical</span> | <span class="code-val">Contextual</span></div>
977
+ <div>&nbsp;&nbsp;| <span class="code-val">Hallucination</span> | <span class="code-val">Overconfidence</span></div>
978
+ <div>}</div>
979
+ </div>
980
+ <div class="anatomy-text">
981
+ <span class="section-eyebrow">The Primitive</span>
982
+ <h2 class="section-title">A Scar is a structured wound</h2>
983
+ <p class="section-body">Every correction ECHO receives becomes a <em>Scar</em> — a typed, weighted memory object that lives in the Scar Lattice. Unlike RAG or fine-tuning, Scars form instantly, cost no compute, and grow stronger every time they fire.</p>
984
+ <p class="section-body">The <em>fingerprint</em> is a 128-dim semantic vector computed in pure Rust — no ML model, just math. Similarity search across 10,000 Scars completes in microseconds via Rayon parallel scan.</p>
985
+ <div class="field-list">
986
+ <div class="field-item">
987
+ <span class="field-name">weight</span>
988
+ <span class="field-desc">Influence strength. Increases every time this Scar fires in a pre-scan. Decays slowly over time.</span>
989
+ </div>
990
+ <div class="field-item">
991
+ <span class="field-name">confidence_at_time</span>
992
+ <span class="field-desc">How certain the model was when it was wrong. High confidence + wrong = overconfidence Scar.</span>
993
+ </div>
994
+ <div class="field-item">
995
+ <span class="field-name">times_triggered</span>
996
+ <span class="field-desc">How many future queries activated this Scar. A proxy for how common this mistake pattern is.</span>
997
+ </div>
998
+ <div class="field-item">
999
+ <span class="field-name">fingerprint</span>
1000
+ <span class="field-desc">128-dim semantic vector. Used for cosine similarity matching against new queries in O(n) via rayon.</span>
1001
+ </div>
1002
+ </div>
1003
+ </div>
1004
+ </div>
1005
+ </div>
1006
+ </section>
1007
+
1008
+ <!-- DOMAIN WEAKNESS MAP -->
1009
+ <section class="domain-section">
1010
+ <div class="container">
1011
+ <div class="section-header">
1012
+ <span class="section-eyebrow">Domain Weakness Map</span>
1013
+ <h2 class="section-title" style="font-style:italic;font-weight:300;color:var(--flesh-pale);font-size:clamp(1.8rem,4vw,2.8rem);">Where it bleeds most</h2>
1014
+ <p style="color:var(--text-dim);max-width:500px;margin:0 auto;font-size:0.95rem;">Risk score = Scar volume + average weight + confidence at mistake. High risk domains get automatic confidence suppression.</p>
1015
+ </div>
1016
+ <div class="domain-bars" id="domainBars">
1017
+ <div class="domain-row">
1018
+ <span class="domain-name">math</span>
1019
+ <div class="domain-bar-track"><div class="domain-bar-fill" data-width="82"></div></div>
1020
+ <span class="domain-risk high">0.82</span>
1021
+ </div>
1022
+ <div class="domain-row">
1023
+ <span class="domain-name">history</span>
1024
+ <div class="domain-bar-track"><div class="domain-bar-fill" data-width="71"></div></div>
1025
+ <span class="domain-risk high">0.71</span>
1026
+ </div>
1027
+ <div class="domain-row">
1028
+ <span class="domain-name">science.physics</span>
1029
+ <div class="domain-bar-track"><div class="domain-bar-fill" data-width="64"></div></div>
1030
+ <span class="domain-risk medium">0.64</span>
1031
+ </div>
1032
+ <div class="domain-row">
1033
+ <span class="domain-name">coding</span>
1034
+ <div class="domain-bar-track"><div class="domain-bar-fill" data-width="48"></div></div>
1035
+ <span class="domain-risk medium">0.48</span>
1036
+ </div>
1037
+ <div class="domain-row">
1038
+ <span class="domain-name">geography</span>
1039
+ <div class="domain-bar-track"><div class="domain-bar-fill" data-width="31"></div></div>
1040
+ <span class="domain-risk low">0.31</span>
1041
+ </div>
1042
+ <div class="domain-row">
1043
+ <span class="domain-name">technology</span>
1044
+ <div class="domain-bar-track"><div class="domain-bar-fill" data-width="22"></div></div>
1045
+ <span class="domain-risk low">0.22</span>
1046
+ </div>
1047
+ </div>
1048
+ </div>
1049
+ </section>
1050
+
1051
+ <!-- PIPELINE -->
1052
+ <section class="pipeline-section">
1053
+ <div class="container">
1054
+ <div class="section-header">
1055
+ <span class="section-eyebrow">The Loop</span>
1056
+ <h2 class="section-title" style="font-style:italic;font-weight:300;color:var(--flesh-pale);font-size:clamp(1.8rem,4vw,2.8rem);">How ECHO heals itself</h2>
1057
+ </div>
1058
+ <div class="pipeline-steps" id="pipeline">
1059
+ <div class="pipeline-step">
1060
+ <div class="step-icon">💬</div>
1061
+ <div class="step-content">
1062
+ <span class="step-label">Input</span>
1063
+ <span class="step-name">User prompt arrives</span>
1064
+ <p class="step-desc">Raw query enters ECHO. Before a single token is generated, the Scar system intercepts.</p>
1065
+ </div>
1066
+ </div>
1067
+ <div class="pipeline-step">
1068
+ <div class="step-icon">🔬</div>
1069
+ <div class="step-content">
1070
+ <span class="step-label">Pre-Scan</span>
1071
+ <span class="step-name">Lattice searched for wounds</span>
1072
+ <p class="step-desc">128-dim fingerprint computed in Rust. Cosine similarity scan across all active Scars via Rayon. Top-k matches retrieved in microseconds.</p>
1073
+ </div>
1074
+ </div>
1075
+ <div class="pipeline-step">
1076
+ <div class="step-icon">⚠️</div>
1077
+ <div class="step-content">
1078
+ <span class="step-label">Caution Injection</span>
1079
+ <span class="step-name">Past wounds prepended</span>
1080
+ <p class="step-desc">If matching Scars found — a caution prompt is prepended: what was wrong before, what the correction was. Confidence suppressed up to 30% in risky domains.</p>
1081
+ </div>
1082
+ </div>
1083
+ <div class="pipeline-step">
1084
+ <div class="step-icon">🧠</div>
1085
+ <div class="step-content">
1086
+ <span class="step-label">Generation</span>
1087
+ <span class="step-name">Qwen3.5-27B runs in Rust</span>
1088
+ <p class="step-desc">Full inference via candle. The base model generates with scar context already in its window — no architecture change needed, just smarter input.</p>
1089
+ </div>
1090
+ </div>
1091
+ <div class="pipeline-step">
1092
+ <div class="step-icon">🩸</div>
1093
+ <div class="step-content">
1094
+ <span class="step-label">Correction</span>
1095
+ <span class="step-name">User corrects → Scar forms</span>
1096
+ <p class="step-desc">POST /v1/echo/correct. Scar crystallizes instantly. Duplicate check — if a similar Scar exists, its weight increases instead of creating a duplicate. Saved to disk atomically.</p>
1097
+ </div>
1098
+ </div>
1099
+ </div>
1100
+ </div>
1101
+ </section>
1102
+
1103
+ <!-- STATS -->
1104
+ <section class="stats-section">
1105
+ <div class="container">
1106
+ <div class="section-header">
1107
+ <span class="section-eyebrow">Architecture</span>
1108
+ <h2 class="section-title" style="font-style:italic;font-weight:300;color:var(--flesh-pale);font-size:clamp(1.8rem,4vw,2.8rem);">By the numbers</h2>
1109
+ </div>
1110
+ <div class="stats-grid">
1111
+ <div class="stat-card">
1112
+ <span class="stat-number" data-target="27">0</span>
1113
+ <span class="stat-label">Billion parameters</span>
1114
+ </div>
1115
+ <div class="stat-card">
1116
+ <span class="stat-number" data-target="128">0</span>
1117
+ <span class="stat-label">Scar fingerprint dims</span>
1118
+ </div>
1119
+ <div class="stat-card">
1120
+ <span class="stat-number" data-target="10000">0</span>
1121
+ <span class="stat-label">Max active Scars</span>
1122
+ </div>
1123
+ <div class="stat-card">
1124
+ <span class="stat-number" data-target="5">0</span>
1125
+ <span class="stat-label">Scar types</span>
1126
+ </div>
1127
+ </div>
1128
+ </div>
1129
+ </section>
1130
+
1131
+ <!-- FOOTER -->
1132
+ <footer>
1133
+ <span class="footer-title">Matrix ECHO</span>
1134
+ <span class="footer-org">Matrix · Corp · V1 · Rust · Qwen3.5-27B</span>
1135
+ <div class="footer-links">
1136
+ <a class="footer-link" href="https://huggingface.co/Matrix-Corp">HuggingFace</a>
1137
+ <a class="footer-link" href="https://github.com/zapgaming">GitHub</a>
1138
+ <a class="footer-link" href="https://huggingface.co/Jackrong/Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled">Base Model</a>
1139
+ </div>
1140
+ <div class="footer-status">
1141
+ <span class="pulse-dot" style="width:6px;height:6px;"></span>
1142
+ Architecture Complete · Build In Progress
1143
+ </div>
1144
+ </footer>
1145
+
1146
+ <script>
1147
+ // ── CURSOR ──
1148
+ const cursor = document.getElementById('cursor');
1149
+ const trail = document.getElementById('cursorTrail');
1150
+ let mx = 0, my = 0, tx = 0, ty = 0;
1151
+
1152
+ document.addEventListener('mousemove', e => {
1153
+ mx = e.clientX; my = e.clientY;
1154
+ cursor.style.left = mx - 6 + 'px';
1155
+ cursor.style.top = my - 6 + 'px';
1156
+ });
1157
+
1158
+ setInterval(() => {
1159
+ tx += (mx - tx) * 0.12;
1160
+ ty += (my - ty) * 0.12;
1161
+ trail.style.left = tx - 16 + 'px';
1162
+ trail.style.top = ty - 16 + 'px';
1163
+ }, 16);
1164
+
1165
+ // ── SCAR LATTICE VISUALIZATION ──
1166
+ const canvas = document.getElementById('latticeCanvas');
1167
+ const svg = document.getElementById('latticeSvg');
1168
+
1169
+ const scarData = [
1170
+ { id: 1, x: 20, y: 40, r: 18, domain: 'math', label: 'Math', type: 'Factual', weight: 0.72, color: '#C0514A' },
1171
+ { id: 2, x: 45, y: 25, r: 14, domain: 'math', label: 'Math', type: 'Logical', weight: 0.55, color: '#C0514A' },
1172
+ { id: 3, x: 65, y: 55, r: 22, domain: 'history', label: 'Hist', type: 'Hallucination', weight: 0.88, color: '#8B5E3C' },
1173
+ { id: 4, x: 30, y: 70, r: 12, domain: 'general', label: 'Gen', type: 'Contextual', weight: 0.34, color: '#7A3B3B' },
1174
+ { id: 5, x: 75, y: 30, r: 16, domain: 'science', label: 'Sci', type: 'Factual', weight: 0.61, color: '#C4956A' },
1175
+ { id: 6, x: 85, y: 70, r: 10, domain: 'coding', label: 'Code', type: 'Logical', weight: 0.42, color: '#8B5E3C' },
1176
+ { id: 7, x: 50, y: 80, r: 13, domain: 'history', label: 'Hist', type: 'Overconfidence', weight: 0.67, color: '#8B5E3C' },
1177
+ ];
1178
+
1179
+ const edges = [[1,2],[1,4],[2,5],[3,7],[5,6],[3,4]];
1180
+
1181
+ function renderLattice() {
1182
+ const w = canvas.offsetWidth;
1183
+ const h = canvas.offsetHeight;
1184
+
1185
+ // Draw edges
1186
+ svg.innerHTML = '';
1187
+ edges.forEach(([a, b]) => {
1188
+ const na = scarData.find(s => s.id === a);
1189
+ const nb = scarData.find(s => s.id === b);
1190
+ const line = document.createElementNS('http://www.w3.org/2000/svg', 'line');
1191
+ line.setAttribute('x1', na.x / 100 * w);
1192
+ line.setAttribute('y1', na.y / 100 * h);
1193
+ line.setAttribute('x2', nb.x / 100 * w);
1194
+ line.setAttribute('y2', nb.y / 100 * h);
1195
+ line.setAttribute('stroke', 'rgba(196,149,106,0.15)');
1196
+ line.setAttribute('stroke-width', '1');
1197
+ line.setAttribute('stroke-dasharray', '3,4');
1198
+ svg.appendChild(line);
1199
+ });
1200
+
1201
+ // Remove old nodes
1202
+ canvas.querySelectorAll('.scar-node').forEach(n => n.remove());
1203
+
1204
+ scarData.forEach(s => {
1205
+ const node = document.createElement('div');
1206
+ node.className = 'scar-node';
1207
+ node.style.cssText = `
1208
+ left: ${s.x / 100 * w - s.r}px;
1209
+ top: ${s.y / 100 * h - s.r}px;
1210
+ width: ${s.r * 2}px;
1211
+ height: ${s.r * 2}px;
1212
+ background: radial-gradient(circle at 35% 35%, ${s.color}88, ${s.color}33);
1213
+ border: 1px solid ${s.color}66;
1214
+ box-shadow: 0 0 ${s.weight * 20}px ${s.color}44;
1215
+ `;
1216
+ node.innerHTML = `
1217
+ <span style="font-size:${Math.max(0.45, s.r * 0.04)}rem">${s.label}</span>
1218
+ <div class="node-tooltip">${s.type} · weight: ${s.weight.toFixed(2)} · ${s.domain}</div>
1219
+ `;
1220
+ canvas.appendChild(node);
1221
+ });
1222
+ }
1223
+
1224
+ renderLattice();
1225
+ window.addEventListener('resize', renderLattice);
1226
+
1227
+ // ── SCAR FORMATION ──
1228
+ const scarFeed = document.getElementById('scarFeed');
1229
+ let scarCount = scarData.length;
1230
+
1231
+ const types = ['Factual', 'Logical', 'Hallucination', 'Contextual', 'Overconfidence'];
1232
+ const domains = ['math', 'history', 'coding', 'science.physics', 'general', 'geography'];
1233
+ const typeClasses = { Factual: '', Logical: 'logical', Hallucination: 'hallucination', Contextual: 'contextual', Overconfidence: 'hallucination' };
1234
+
1235
+ document.getElementById('formScarBtn').addEventListener('click', () => {
1236
+ const claim = document.getElementById('claimInput').value.trim();
1237
+ const correction = document.getElementById('correctionInput').value.trim();
1238
+ if (!claim || !correction) return;
1239
+
1240
+ const type = types[Math.floor(Math.random() * types.length)];
1241
+ const domain = domains[Math.floor(Math.random() * domains.length)];
1242
+ const weight = (0.4 + Math.random() * 0.5).toFixed(2);
1243
+
1244
+ const entry = document.createElement('div');
1245
+ entry.className = `scar-entry ${typeClasses[type]}`;
1246
+ entry.style.animationDelay = '0s';
1247
+ entry.innerHTML = `
1248
+ <span class="scar-type-badge">${type} · ${domain}</span>
1249
+ <div class="scar-claim">"${claim.slice(0, 60)}${claim.length > 60 ? '...' : ''}"</div>
1250
+ <div class="scar-correction">${correction.slice(0, 60)}${correction.length > 60 ? '...' : ''}</div>
1251
+ <div class="scar-weight-bar"><div class="scar-weight-fill" style="width:0%"></div></div>
1252
+ `;
1253
+ scarFeed.prepend(entry);
1254
+ setTimeout(() => {
1255
+ entry.querySelector('.scar-weight-fill').style.width = (weight * 100) + '%';
1256
+ }, 100);
1257
+
1258
+ // Add node to lattice
1259
+ const colors = { Factual:'#C0514A', Logical:'#C4956A', Hallucination:'#7A3B3B', Contextual:'#8B5E3C', Overconfidence:'#C0514A' };
1260
+ scarData.push({
1261
+ id: ++scarCount,
1262
+ x: 10 + Math.random() * 80,
1263
+ y: 10 + Math.random() * 80,
1264
+ r: 8 + Math.random() * 14,
1265
+ domain, label: domain.split('.')[0].slice(0,4),
1266
+ type, weight: parseFloat(weight),
1267
+ color: colors[type]
1268
+ });
1269
+ if (scarData.length > 2) {
1270
+ edges.push([scarData.length - 1, scarData.length - 3]);
1271
+ }
1272
+ renderLattice();
1273
+
1274
+ document.getElementById('claimInput').value = '';
1275
+ document.getElementById('correctionInput').value = '';
1276
+ });
1277
+
1278
+ // ── PRE-SCAN DEMO ──
1279
+ document.getElementById('scanBtn').addEventListener('click', () => {
1280
+ const query = document.getElementById('queryInput').value.trim();
1281
+ if (!query) return;
1282
+
1283
+ const out = document.getElementById('scanOutput');
1284
+ out.innerHTML = '<span style="color:var(--scar-pale)">// scanning lattice...</span>';
1285
+
1286
+ setTimeout(() => {
1287
+ const matches = Math.floor(Math.random() * 4);
1288
+ const domain = domains[Math.floor(Math.random() * domains.length)];
1289
+ const risk = (Math.random() * 0.9).toFixed(2);
1290
+ const suppression = (Math.min(0.3, Math.random() * 0.35)).toFixed(2);
1291
+
1292
+ if (matches === 0) {
1293
+ out.innerHTML = `<span style="color:var(--text-dim)">// no relevant scars found</span>
1294
+ <span style="color:var(--nerve)">caution_prompt: null</span>
1295
+ <span style="color:var(--nerve)">suppressed_confidence: 0.00</span>
1296
+ <span style="color:var(--text-dim)">// proceeding with full confidence</span>`;
1297
+ } else {
1298
+ out.innerHTML = `<span style="color:var(--scar-bright)">// ${matches} scar${matches > 1 ? 's' : ''} matched</span>
1299
+ <span style="color:var(--nerve)">domain: "${domain}"</span>
1300
+ <span style="color:var(--nerve)">domain_risk: ${risk}</span>
1301
+ <span style="color:var(--nerve)">suppressed_confidence: -${suppression}</span>
1302
+ <span style="color:var(--scar-pale)">caution_prompt: "[ECHO WARNING] Similar</span>
1303
+ <span style="color:var(--scar-pale)"> mistakes in ${domain}. Be careful."</span>`;
1304
+ }
1305
+ document.getElementById('queryInput').value = '';
1306
+ }, 600);
1307
+ });
1308
+
1309
+ // ── PIPELINE SCROLL ANIMATION ──
1310
+ const observer = new IntersectionObserver(entries => {
1311
+ entries.forEach((entry, i) => {
1312
+ if (entry.isIntersecting) {
1313
+ setTimeout(() => entry.target.classList.add('visible'), entry.target.dataset.delay || 0);
1314
+ }
1315
+ });
1316
+ }, { threshold: 0.2 });
1317
+
1318
+ document.querySelectorAll('.pipeline-step').forEach((step, i) => {
1319
+ step.dataset.delay = i * 100;
1320
+ observer.observe(step);
1321
+ });
1322
+
1323
+ // ── DOMAIN BAR ANIMATION ──
1324
+ const barObserver = new IntersectionObserver(entries => {
1325
+ entries.forEach(entry => {
1326
+ if (entry.isIntersecting) {
1327
+ entry.target.querySelectorAll('.domain-bar-fill').forEach(bar => {
1328
+ setTimeout(() => {
1329
+ bar.style.width = bar.dataset.width + '%';
1330
+ }, 200);
1331
+ });
1332
+ barObserver.unobserve(entry.target);
1333
+ }
1334
+ });
1335
+ }, { threshold: 0.3 });
1336
+ barObserver.observe(document.getElementById('domainBars'));
1337
+
1338
+ // ── STAT COUNTER ANIMATION ──
1339
+ function animateCounter(el, target, duration = 1500) {
1340
+ const start = performance.now();
1341
+ const update = now => {
1342
+ const t = Math.min((now - start) / duration, 1);
1343
+ const ease = 1 - Math.pow(1 - t, 3);
1344
+ const val = Math.floor(ease * target);
1345
+ el.textContent = val >= 1000 ? val.toLocaleString() : val;
1346
+ if (t < 1) requestAnimationFrame(update);
1347
+ };
1348
+ requestAnimationFrame(update);
1349
+ }
1350
+
1351
+ const statObserver = new IntersectionObserver(entries => {
1352
+ entries.forEach(entry => {
1353
+ if (entry.isIntersecting) {
1354
+ entry.target.querySelectorAll('[data-target]').forEach(el => {
1355
+ animateCounter(el, parseInt(el.dataset.target));
1356
+ });
1357
+ statObserver.unobserve(entry.target);
1358
+ }
1359
+ });
1360
+ }, { threshold: 0.4 });
1361
+ statObserver.observe(document.querySelector('.stats-grid'));
1362
+ </script>
1363
+ </body>
1364
+ </html>