@hviana/sema 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/AGENTS.md +470 -0
  2. package/AUTHORS.md +12 -0
  3. package/COMMERCIAL-LICENSE.md +19 -0
  4. package/CONTRIBUTING.md +15 -0
  5. package/HOW_IT_WORKS.md +4210 -0
  6. package/LICENSE.md +117 -0
  7. package/README.md +290 -0
  8. package/TRADEMARKS.md +19 -0
  9. package/example/demo.ts +46 -0
  10. package/example/train_base.ts +2675 -0
  11. package/index.html +893 -0
  12. package/package.json +25 -0
  13. package/src/alphabet.ts +34 -0
  14. package/src/alu/README.md +332 -0
  15. package/src/alu/src/alu.ts +541 -0
  16. package/src/alu/src/expr.ts +339 -0
  17. package/src/alu/src/index.ts +115 -0
  18. package/src/alu/src/kernel-arith.ts +377 -0
  19. package/src/alu/src/kernel-bits.ts +199 -0
  20. package/src/alu/src/kernel-logic.ts +102 -0
  21. package/src/alu/src/kernel-nd.ts +235 -0
  22. package/src/alu/src/kernel-numeric.ts +466 -0
  23. package/src/alu/src/operation.ts +344 -0
  24. package/src/alu/src/parser.ts +574 -0
  25. package/src/alu/src/resonance.ts +161 -0
  26. package/src/alu/src/text.ts +83 -0
  27. package/src/alu/src/value.ts +327 -0
  28. package/src/alu/test/alu.test.ts +1004 -0
  29. package/src/bytes.ts +62 -0
  30. package/src/config.ts +227 -0
  31. package/src/derive/README.md +295 -0
  32. package/src/derive/src/deduction.ts +263 -0
  33. package/src/derive/src/index.ts +24 -0
  34. package/src/derive/src/priority-queue.ts +70 -0
  35. package/src/derive/src/rewrite.ts +127 -0
  36. package/src/derive/src/trie.ts +242 -0
  37. package/src/derive/test/derive.test.ts +137 -0
  38. package/src/extension.ts +42 -0
  39. package/src/geometry.ts +511 -0
  40. package/src/index.ts +38 -0
  41. package/src/ingest-cache.ts +224 -0
  42. package/src/mind/articulation.ts +137 -0
  43. package/src/mind/attention.ts +1061 -0
  44. package/src/mind/canonical.ts +107 -0
  45. package/src/mind/graph-search.ts +1100 -0
  46. package/src/mind/index.ts +18 -0
  47. package/src/mind/junction.ts +347 -0
  48. package/src/mind/learning.ts +246 -0
  49. package/src/mind/match.ts +507 -0
  50. package/src/mind/mechanisms/alu.ts +33 -0
  51. package/src/mind/mechanisms/cast.ts +568 -0
  52. package/src/mind/mechanisms/confluence.ts +268 -0
  53. package/src/mind/mechanisms/cover.ts +248 -0
  54. package/src/mind/mechanisms/extraction.ts +422 -0
  55. package/src/mind/mechanisms/recall.ts +241 -0
  56. package/src/mind/mind.ts +483 -0
  57. package/src/mind/pipeline-mechanism.ts +326 -0
  58. package/src/mind/pipeline.ts +300 -0
  59. package/src/mind/primitives.ts +201 -0
  60. package/src/mind/rationale.ts +275 -0
  61. package/src/mind/reasoning.ts +198 -0
  62. package/src/mind/recognition.ts +234 -0
  63. package/src/mind/resonance.ts +0 -0
  64. package/src/mind/trace.ts +108 -0
  65. package/src/mind/traverse.ts +556 -0
  66. package/src/mind/types.ts +281 -0
  67. package/src/rabitq-hnsw/README.md +303 -0
  68. package/src/rabitq-hnsw/src/database.ts +492 -0
  69. package/src/rabitq-hnsw/src/heap.ts +90 -0
  70. package/src/rabitq-hnsw/src/hnsw.ts +514 -0
  71. package/src/rabitq-hnsw/src/index.ts +15 -0
  72. package/src/rabitq-hnsw/src/prng.ts +39 -0
  73. package/src/rabitq-hnsw/src/rabitq.ts +308 -0
  74. package/src/rabitq-hnsw/src/store.ts +994 -0
  75. package/src/rabitq-hnsw/test/hnsw.test.ts +1213 -0
  76. package/src/store-sqlite.ts +928 -0
  77. package/src/store.ts +2148 -0
  78. package/src/vec.ts +124 -0
  79. package/test/00-extract.test.mjs +151 -0
  80. package/test/01-floor.test.mjs +20 -0
  81. package/test/02-roundtrip.test.mjs +83 -0
  82. package/test/03-recall.test.mjs +98 -0
  83. package/test/04-think.test.mjs +627 -0
  84. package/test/05-concepts.test.mjs +84 -0
  85. package/test/08-storage.test.mjs +948 -0
  86. package/test/09-edges.test.mjs +65 -0
  87. package/test/11-universality.test.mjs +180 -0
  88. package/test/13-conversation.test.mjs +228 -0
  89. package/test/14-scaling.test.mjs +503 -0
  90. package/test/15-decomposition-gap.test.mjs +0 -0
  91. package/test/16-bridge.test.mjs +250 -0
  92. package/test/17-intelligence.test.mjs +240 -0
  93. package/test/18-alu.test.mjs +209 -0
  94. package/test/19-nd.test.mjs +254 -0
  95. package/test/20-stability.test.mjs +489 -0
  96. package/test/21-partial.test.mjs +158 -0
  97. package/test/22-multihop.test.mjs +130 -0
  98. package/test/23-rationale.test.mjs +316 -0
  99. package/test/24-generalization.test.mjs +416 -0
  100. package/test/25-embedding.test.mjs +75 -0
  101. package/test/26-cooperative.test.mjs +89 -0
  102. package/test/27-saturation-drop.test.mjs +637 -0
  103. package/test/28-unknowable.test.mjs +88 -0
  104. package/test/29-counterfactual.test.mjs +476 -0
  105. package/test/30-conflict-resolution.test.mjs +166 -0
  106. package/test/31-audit.test.mjs +288 -0
  107. package/test/32-confluence.test.mjs +173 -0
  108. package/test/33-multi-candidate.test.mjs +222 -0
  109. package/test/34-cross-region.test.mjs +252 -0
  110. package/tsconfig.json +16 -0
package/index.html ADDED
@@ -0,0 +1,893 @@
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">
6
+ <title>© Sema — the mind without weights</title>
7
+ <meta
8
+ name="description"
9
+ content="© Sema: a deterministic, auditable, weight-free reasoning engine. No neural network, no GPU, no hallucination."
10
+ >
11
+ <style>
12
+ /* ———————————————————————————— tokens ———————————————————————————— */
13
+ :root {
14
+ --bg: #02040c;
15
+ --ink: #f2f7ff;
16
+ --dim: #93a7cf;
17
+ --cyan: #39e6ff;
18
+ --violet: #a878ff;
19
+ --magenta: #ff4fd8;
20
+ --amber: #ffc24b;
21
+ }
22
+ *, *::before, *::after {
23
+ box-sizing: border-box;
24
+ margin: 0;
25
+ padding: 0;
26
+ }
27
+ html {
28
+ scroll-behavior: smooth;
29
+ }
30
+ html, body {
31
+ height: 100%;
32
+ }
33
+ body {
34
+ font-family:
35
+ ui-sans-serif, system-ui, "Segoe UI", Roboto, Helvetica, Arial,
36
+ sans-serif;
37
+ background: var(--bg);
38
+ color: var(--ink);
39
+ min-height: 100svh;
40
+ overflow-x: hidden;
41
+ display: flex;
42
+ flex-direction: column;
43
+ }
44
+ a {
45
+ color: inherit;
46
+ }
47
+
48
+ /* ═══════════════════════ THE FIELD (fixed, full-bleed) ═══════════ */
49
+ .field {
50
+ position: fixed;
51
+ inset: 0;
52
+ z-index: 0;
53
+ overflow: hidden;
54
+ background: var(--bg);
55
+ }
56
+
57
+ /* — colour weather: two huge drifting orbs + aurora sweep — */
58
+ .orb {
59
+ position: absolute;
60
+ border-radius: 50%;
61
+ filter: blur(70px);
62
+ mix-blend-mode: screen;
63
+ }
64
+ .orb.a {
65
+ width: 75vmax;
66
+ height: 75vmax;
67
+ left: -25vmax;
68
+ top: -30vmax;
69
+ background: radial-gradient(
70
+ circle at 50% 50%,
71
+ rgba(57, 230, 255, 0.30),
72
+ rgba(57, 120, 255, 0.10) 45%,
73
+ transparent 70%
74
+ );
75
+ animation: orbA 26s ease-in-out infinite alternate;
76
+ }
77
+ .orb.b {
78
+ width: 70vmax;
79
+ height: 70vmax;
80
+ right: -28vmax;
81
+ bottom: -32vmax;
82
+ background: radial-gradient(
83
+ circle at 50% 50%,
84
+ rgba(255, 79, 216, 0.22),
85
+ rgba(168, 120, 255, 0.12) 45%,
86
+ transparent 70%
87
+ );
88
+ animation: orbB 32s ease-in-out infinite alternate;
89
+ }
90
+ .orb.c {
91
+ width: 44vmax;
92
+ height: 44vmax;
93
+ left: 34%;
94
+ top: 56%;
95
+ background: radial-gradient(
96
+ circle at 50% 50%,
97
+ rgba(255, 194, 75, 0.14),
98
+ transparent 65%
99
+ );
100
+ animation: orbA 40s ease-in-out infinite alternate-reverse;
101
+ }
102
+ @keyframes orbA {
103
+ from {
104
+ transform: translate3d(0, 0, 0) scale(1);
105
+ }
106
+ to {
107
+ transform: translate3d(9vmax, 7vmax, 0) scale(1.15);
108
+ }
109
+ }
110
+ @keyframes orbB {
111
+ from {
112
+ transform: translate3d(0, 0, 0) scale(1.1);
113
+ }
114
+ to {
115
+ transform: translate3d(-8vmax, -6vmax, 0) scale(0.95);
116
+ }
117
+ }
118
+
119
+ .aurora {
120
+ position: absolute;
121
+ inset: -40%;
122
+ background: conic-gradient(
123
+ from 180deg at 50% 50%,
124
+ transparent 0deg,
125
+ rgba(57, 230, 255, 0.07) 40deg,
126
+ transparent 105deg,
127
+ rgba(168, 120, 255, 0.09) 165deg,
128
+ transparent 230deg,
129
+ rgba(255, 79, 216, 0.06) 300deg,
130
+ transparent 360deg
131
+ );
132
+ animation: spin 70s linear infinite;
133
+ }
134
+ @keyframes spin {
135
+ to {
136
+ transform: rotate(1turn);
137
+ }
138
+ }
139
+
140
+ /* — the addressable lattice — */
141
+ .lattice {
142
+ position: absolute;
143
+ inset: -80px;
144
+ background-image:
145
+ radial-gradient(rgba(147, 167, 207, 0.28) 1px, transparent 1.7px),
146
+ radial-gradient(rgba(147, 167, 207, 0.14) 1px, transparent 1.7px);
147
+ background-size: 64px 64px, 16px 16px;
148
+ background-position: 0 0, 8px 8px;
149
+ mask-image: radial-gradient(
150
+ closest-side at 50% 46%,
151
+ #000 20%,
152
+ transparent 100%
153
+ );
154
+ -webkit-mask-image: radial-gradient(
155
+ closest-side at 50% 46%,
156
+ #000 20%,
157
+ transparent 100%
158
+ );
159
+ animation: drift 50s linear infinite alternate;
160
+ opacity: 0.8;
161
+ }
162
+ @keyframes drift {
163
+ to {
164
+ transform: translate3d(64px, 32px, 0);
165
+ }
166
+ }
167
+
168
+ /* — the memory graph: full-viewport SVG, curved learned edges — */
169
+ .graph {
170
+ position: absolute;
171
+ inset: 0;
172
+ width: 100%;
173
+ height: 100%;
174
+ }
175
+ .graph svg {
176
+ width: 100%;
177
+ height: 100%;
178
+ display: block;
179
+ }
180
+ .layerA {
181
+ animation: sway 30s ease-in-out infinite alternate;
182
+ transform-origin: 50% 50%;
183
+ }
184
+ .layerB {
185
+ animation: sway 44s ease-in-out infinite alternate-reverse;
186
+ transform-origin: 50% 50%;
187
+ }
188
+ @keyframes sway {
189
+ from {
190
+ transform: translate(0, 0) rotate(0.001deg);
191
+ }
192
+ to {
193
+ transform: translate(26px, -18px) rotate(0.4deg);
194
+ }
195
+ }
196
+
197
+ .graph path {
198
+ fill: none;
199
+ stroke-linecap: round;
200
+ }
201
+ .wire {
202
+ stroke-width: 1.6;
203
+ stroke-dasharray: 7 15;
204
+ animation: flow 2.4s linear infinite;
205
+ filter: drop-shadow(0 0 6px rgba(57, 230, 255, 0.55));
206
+ }
207
+ .wire.v {
208
+ filter: drop-shadow(0 0 6px rgba(168, 120, 255, 0.55));
209
+ }
210
+ .wire.m {
211
+ filter: drop-shadow(0 0 6px rgba(255, 79, 216, 0.45));
212
+ }
213
+ .wire.g {
214
+ filter: drop-shadow(0 0 6px rgba(255, 194, 75, 0.5));
215
+ }
216
+ .wire.slow {
217
+ animation-duration: 3.6s;
218
+ }
219
+ .wire.rev {
220
+ animation-direction: reverse;
221
+ }
222
+ @keyframes flow {
223
+ to {
224
+ stroke-dashoffset: -44;
225
+ }
226
+ }
227
+
228
+ .dot {
229
+ transform-box: fill-box;
230
+ transform-origin: center;
231
+ animation: beat 4s ease-in-out infinite;
232
+ }
233
+ .dot.d1 {
234
+ animation-delay: -0.7s;
235
+ }
236
+ .dot.d2 {
237
+ animation-delay: -1.4s;
238
+ }
239
+ .dot.d3 {
240
+ animation-delay: -2.1s;
241
+ }
242
+ .dot.d4 {
243
+ animation-delay: -2.8s;
244
+ }
245
+ .dot.d5 {
246
+ animation-delay: -3.5s;
247
+ }
248
+ @keyframes beat {
249
+ 0%, 100% {
250
+ transform: scale(0.8);
251
+ opacity: 0.65;
252
+ }
253
+ 50% {
254
+ transform: scale(1.25);
255
+ opacity: 1;
256
+ }
257
+ }
258
+
259
+ .ring {
260
+ transform-box: fill-box;
261
+ transform-origin: center;
262
+ fill: none;
263
+ stroke-width: 1.4;
264
+ animation: ripple 5s cubic-bezier(0.2, 0.65, 0.3, 1) infinite;
265
+ }
266
+ .ring.r2 {
267
+ animation-delay: -1.6s;
268
+ }
269
+ .ring.r3 {
270
+ animation-delay: -3.2s;
271
+ }
272
+ @keyframes ripple {
273
+ 0% {
274
+ transform: scale(0.4);
275
+ opacity: 0.9;
276
+ }
277
+ 80%, 100% {
278
+ transform: scale(3.4);
279
+ opacity: 0;
280
+ }
281
+ }
282
+
283
+ /* — cinematic finish: vignette + grain + scanline shimmer — */
284
+ .vignette {
285
+ position: absolute;
286
+ inset: 0;
287
+ background:
288
+ radial-gradient(
289
+ 120vmax 90vmax at 50% 42%,
290
+ transparent 30%,
291
+ rgba(2, 4, 12, 0.6) 75%,
292
+ rgba(2, 4, 12, 0.95) 100%
293
+ ),
294
+ linear-gradient(
295
+ 180deg,
296
+ rgba(2, 4, 12, 0.5),
297
+ transparent 18% 82%,
298
+ rgba(2, 4, 12, 0.75)
299
+ );
300
+ }
301
+ .grain {
302
+ position: absolute;
303
+ inset: 0;
304
+ opacity: 0.5;
305
+ mix-blend-mode: overlay;
306
+ pointer-events: none;
307
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.35'/%3E%3C/svg%3E");
308
+ }
309
+
310
+ /* ═══════════════════════════ THE HERO ═══════════════════════════ */
311
+ .hero {
312
+ position: relative;
313
+ z-index: 1;
314
+ flex: 1;
315
+ display: grid;
316
+ place-items: center;
317
+ padding: clamp(4rem, 10vh, 7rem) 1.2rem clamp(3rem, 8vh, 5rem);
318
+ text-align: center;
319
+ }
320
+ .stage {
321
+ position: relative;
322
+ display: grid;
323
+ place-items: center;
324
+ }
325
+
326
+ /* — counter-rotating hexagon rings behind the wordmark — */
327
+ .hexring {
328
+ position: absolute;
329
+ z-index: -1;
330
+ width: min(78vmin, 620px);
331
+ aspect-ratio: 1;
332
+ clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
333
+ background: conic-gradient(
334
+ from 0deg,
335
+ var(--cyan),
336
+ var(--violet),
337
+ var(--magenta),
338
+ var(--amber),
339
+ var(--cyan)
340
+ );
341
+ opacity: 0.5;
342
+ animation: spin 40s linear infinite;
343
+ filter: drop-shadow(0 0 30px rgba(57, 230, 255, 0.3));
344
+ }
345
+ .hexring::before {
346
+ content: "";
347
+ position: absolute;
348
+ inset: 2px;
349
+ clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
350
+ background: var(--bg);
351
+ }
352
+ .hexring.inner {
353
+ width: min(58vmin, 460px);
354
+ opacity: 0.35;
355
+ animation: spinrev 28s linear infinite;
356
+ }
357
+ @keyframes spinrev {
358
+ to {
359
+ transform: rotate(-1turn);
360
+ }
361
+ }
362
+
363
+ .hex-glow {
364
+ position: absolute;
365
+ z-index: -2;
366
+ width: min(70vmin, 560px);
367
+ aspect-ratio: 1;
368
+ border-radius: 50%;
369
+ background: radial-gradient(
370
+ circle,
371
+ rgba(57, 230, 255, 0.16),
372
+ rgba(168, 120, 255, 0.08) 45%,
373
+ transparent 70%
374
+ );
375
+ animation: breath 7s ease-in-out infinite;
376
+ }
377
+ @keyframes breath {
378
+ 0%, 100% {
379
+ transform: scale(0.94);
380
+ opacity: 0.7;
381
+ }
382
+ 50% {
383
+ transform: scale(1.06);
384
+ opacity: 1;
385
+ }
386
+ }
387
+
388
+ .kicker {
389
+ font-size: clamp(0.72rem, 1.8vw, 0.9rem);
390
+ letter-spacing: 0.55em;
391
+ padding-left: 0.55em;
392
+ text-transform: uppercase;
393
+ color: var(--dim);
394
+ animation: up 0.9s 0.1s cubic-bezier(0.2, 0.7, 0.2, 1) both;
395
+ }
396
+ .kicker b {
397
+ color: var(--cyan);
398
+ font-weight: 600;
399
+ }
400
+
401
+ h1 {
402
+ position: relative;
403
+ font-size: clamp(4.6rem, 19vw, 13rem);
404
+ font-weight: 900;
405
+ line-height: 0.95;
406
+ letter-spacing: 0.08em;
407
+ margin-left: 0.08em;
408
+ background: linear-gradient(
409
+ 95deg,
410
+ #8ff2ff 0%,
411
+ #fff 22%,
412
+ var(--cyan) 42%,
413
+ var(--violet) 68%,
414
+ var(--magenta) 100%
415
+ );
416
+ background-size: 250% 100%;
417
+ -webkit-background-clip: text;
418
+ background-clip: text;
419
+ color: transparent;
420
+ animation:
421
+ up 1s 0.2s cubic-bezier(0.2, 0.7, 0.2, 1) both,
422
+ sheen 8s 1.2s ease-in-out infinite;
423
+ filter: drop-shadow(0 0 22px rgba(57, 230, 255, 0.35)) drop-shadow(
424
+ 0 8px 60px rgba(168, 120, 255, 0.25)
425
+ );
426
+ }
427
+ @keyframes sheen {
428
+ 0%, 100% {
429
+ background-position: 0% 50%;
430
+ }
431
+ 50% {
432
+ background-position: 100% 50%;
433
+ }
434
+ }
435
+
436
+ /* ghost echo behind the wordmark */
437
+ .echo {
438
+ position: absolute;
439
+ left: 50%;
440
+ top: 50%;
441
+ z-index: -1;
442
+ user-select: none;
443
+ pointer-events: none;
444
+ font-size: clamp(4.6rem, 19vw, 13rem);
445
+ font-weight: 900;
446
+ line-height: 0.95;
447
+ letter-spacing: 0.08em;
448
+ padding-left: 0.08em;
449
+ white-space: nowrap;
450
+ color: transparent;
451
+ -webkit-text-stroke: 1px rgba(57, 230, 255, 0.22);
452
+ animation: echo 8s ease-in-out infinite;
453
+ }
454
+ @keyframes echo {
455
+ 0%, 100% {
456
+ transform: translate(-50%, -50%) scale(1.07);
457
+ opacity: 0.5;
458
+ }
459
+ 50% {
460
+ transform: translate(-50%, -50%) scale(1.13);
461
+ opacity: 0.9;
462
+ }
463
+ }
464
+
465
+ .tag {
466
+ margin-top: 1.1rem;
467
+ font-size: clamp(1.25rem, 4.2vw, 2rem);
468
+ font-weight: 650;
469
+ letter-spacing: 0.01em;
470
+ animation: up 1s 0.35s cubic-bezier(0.2, 0.7, 0.2, 1) both;
471
+ }
472
+ .tag em {
473
+ font-style: normal;
474
+ background: linear-gradient(90deg, var(--cyan), var(--violet));
475
+ -webkit-background-clip: text;
476
+ background-clip: text;
477
+ color: transparent;
478
+ }
479
+
480
+ .sub {
481
+ margin: 1.1rem auto 0;
482
+ max-width: 36em;
483
+ color: var(--dim);
484
+ font-size: clamp(0.98rem, 2.6vw, 1.15rem);
485
+ line-height: 1.7;
486
+ animation: up 1s 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both;
487
+ }
488
+ .sub b {
489
+ color: var(--ink);
490
+ font-weight: 600;
491
+ }
492
+
493
+ @keyframes up {
494
+ from {
495
+ opacity: 0;
496
+ transform: translateY(26px);
497
+ }
498
+ to {
499
+ opacity: 1;
500
+ transform: none;
501
+ }
502
+ }
503
+
504
+ .cta {
505
+ display: flex;
506
+ flex-wrap: wrap;
507
+ gap: 1rem;
508
+ justify-content: center;
509
+ margin-top: 2.4rem;
510
+ animation: up 1s 0.65s cubic-bezier(0.2, 0.7, 0.2, 1) both;
511
+ }
512
+ .btn {
513
+ position: relative;
514
+ display: inline-block;
515
+ text-decoration: none;
516
+ padding: 0.95em 2em;
517
+ border-radius: 999px;
518
+ font-weight: 750;
519
+ font-size: clamp(0.95rem, 2.6vw, 1.06rem);
520
+ letter-spacing: 0.03em;
521
+ transition:
522
+ transform 0.2s ease,
523
+ box-shadow 0.2s ease,
524
+ background 0.2s ease;
525
+ }
526
+ .btn:focus-visible {
527
+ outline: 2px solid var(--cyan);
528
+ outline-offset: 4px;
529
+ }
530
+ .btn.primary {
531
+ color: #021018;
532
+ background: linear-gradient(
533
+ 110deg,
534
+ var(--cyan),
535
+ var(--violet) 60%,
536
+ var(--magenta)
537
+ );
538
+ background-size: 200% 100%;
539
+ box-shadow:
540
+ 0 0 0 1px rgba(255, 255, 255, 0.25) inset,
541
+ 0 12px 40px rgba(57, 230, 255, 0.35);
542
+ animation: sheen 5s ease-in-out infinite;
543
+ }
544
+ .btn.primary:hover {
545
+ transform: translateY(-3px) scale(1.02);
546
+ box-shadow:
547
+ 0 0 0 1px rgba(255, 255, 255, 0.3) inset,
548
+ 0 18px 60px rgba(57, 230, 255, 0.55);
549
+ }
550
+ .btn.ghost {
551
+ color: var(--ink);
552
+ background:
553
+ linear-gradient(var(--bg), var(--bg)) padding-box,
554
+ linear-gradient(
555
+ 120deg,
556
+ rgba(57, 230, 255, 0.7),
557
+ rgba(168, 120, 255, 0.7)
558
+ ) border-box;
559
+ border: 1px solid transparent;
560
+ box-shadow: 0 0 24px rgba(57, 230, 255, 0.10);
561
+ }
562
+ .btn.ghost:hover {
563
+ transform: translateY(-3px);
564
+ box-shadow: 0 0 34px rgba(57, 230, 255, 0.28);
565
+ }
566
+
567
+ /* ═══════════════════════ TICKER + FOOTER ════════════════════════ */
568
+ .ticker {
569
+ position: relative;
570
+ z-index: 1;
571
+ overflow: hidden;
572
+ border-top: 1px solid rgba(147, 167, 207, 0.15);
573
+ border-bottom: 1px solid rgba(147, 167, 207, 0.15);
574
+ background: linear-gradient(
575
+ 90deg,
576
+ rgba(57, 230, 255, 0.05),
577
+ rgba(168, 120, 255, 0.05)
578
+ );
579
+ mask-image: linear-gradient(
580
+ 90deg,
581
+ transparent,
582
+ #000 12% 88%,
583
+ transparent
584
+ );
585
+ -webkit-mask-image: linear-gradient(
586
+ 90deg,
587
+ transparent,
588
+ #000 12% 88%,
589
+ transparent
590
+ );
591
+ }
592
+ .ticker .rail {
593
+ display: inline-flex;
594
+ white-space: nowrap;
595
+ width: max-content;
596
+ animation: scroll 34s linear infinite;
597
+ }
598
+ .ticker span {
599
+ padding: 0.72em 0;
600
+ font-size: 0.8rem;
601
+ letter-spacing: 0.28em;
602
+ text-transform: uppercase;
603
+ color: var(--dim);
604
+ }
605
+ .ticker span::after {
606
+ content: "⬡";
607
+ margin: 0 1.6em;
608
+ color: var(--cyan);
609
+ opacity: 0.7;
610
+ }
611
+ @keyframes scroll {
612
+ to {
613
+ transform: translateX(-50%);
614
+ }
615
+ }
616
+
617
+ footer {
618
+ position: relative;
619
+ z-index: 1;
620
+ padding: 1.4rem 1.2rem 1.8rem;
621
+ text-align: center;
622
+ color: var(--dim);
623
+ font-size: 0.83rem;
624
+ line-height: 1.9;
625
+ }
626
+ footer a {
627
+ color: var(--cyan);
628
+ text-decoration: none;
629
+ }
630
+ footer a:hover {
631
+ text-decoration: underline;
632
+ text-shadow: 0 0 12px rgba(57, 230, 255, 0.6);
633
+ }
634
+ footer .lic {
635
+ opacity: 0.85;
636
+ }
637
+
638
+ /* ————————————————————————— small screens ————————————————————————— */
639
+ @media (max-width: 640px) {
640
+ .lattice {
641
+ background-size: 44px 44px, 11px 11px;
642
+ }
643
+ .hexring {
644
+ width: 92vmin;
645
+ }
646
+ .hexring.inner {
647
+ width: 70vmin;
648
+ }
649
+ .kicker {
650
+ letter-spacing: 0.28em;
651
+ padding-left: 0.28em;
652
+ }
653
+ }
654
+
655
+ /* ————————————————————————— reduced motion ———————————————————————— */
656
+ @media (prefers-reduced-motion: reduce) {
657
+ *, *::before, *::after {
658
+ animation: none !important;
659
+ }
660
+ }
661
+ </style>
662
+ </head>
663
+ <body>
664
+ <!-- ═════════════════════ the living memory (decorative) ═══════════ -->
665
+ <div class="field" aria-hidden="true">
666
+ <div class="aurora"></div>
667
+ <div class="orb a"></div>
668
+ <div class="orb b"></div>
669
+ <div class="orb c"></div>
670
+ <div class="lattice"></div>
671
+
672
+ <div class="graph">
673
+ <svg
674
+ viewBox="0 0 1600 900"
675
+ preserveAspectRatio="xMidYMid slice"
676
+ role="presentation"
677
+ >
678
+ <defs>
679
+ <linearGradient id="gc" x1="0" y1="0" x2="1" y2="0">
680
+ <stop offset="0" stop-color="#39e6ff" stop-opacity=".9" />
681
+ <stop offset="1" stop-color="#a878ff" stop-opacity=".55" />
682
+ </linearGradient>
683
+ <linearGradient id="gv" x1="0" y1="0" x2="1" y2="1">
684
+ <stop offset="0" stop-color="#a878ff" stop-opacity=".85" />
685
+ <stop offset="1" stop-color="#ff4fd8" stop-opacity=".5" />
686
+ </linearGradient>
687
+ <linearGradient id="gg" x1="0" y1="0" x2="1" y2="0">
688
+ <stop offset="0" stop-color="#ffc24b" stop-opacity=".85" />
689
+ <stop offset="1" stop-color="#39e6ff" stop-opacity=".5" />
690
+ </linearGradient>
691
+ <radialGradient id="nd" cx=".35" cy=".35" r=".8">
692
+ <stop offset="0" stop-color="#fff" />
693
+ <stop offset=".45" stop-color="#39e6ff" />
694
+ <stop offset="1" stop-color="#39e6ff" stop-opacity="0" />
695
+ </radialGradient>
696
+ <radialGradient id="nv" cx=".35" cy=".35" r=".8">
697
+ <stop offset="0" stop-color="#fff" />
698
+ <stop offset=".45" stop-color="#a878ff" />
699
+ <stop offset="1" stop-color="#a878ff" stop-opacity="0" />
700
+ </radialGradient>
701
+ <radialGradient id="nm" cx=".35" cy=".35" r=".8">
702
+ <stop offset="0" stop-color="#fff" />
703
+ <stop offset=".45" stop-color="#ff4fd8" />
704
+ <stop offset="1" stop-color="#ff4fd8" stop-opacity="0" />
705
+ </radialGradient>
706
+ <radialGradient id="ng" cx=".35" cy=".35" r=".8">
707
+ <stop offset="0" stop-color="#fff" />
708
+ <stop offset=".45" stop-color="#ffc24b" />
709
+ <stop offset="1" stop-color="#ffc24b" stop-opacity="0" />
710
+ </radialGradient>
711
+ </defs>
712
+
713
+ <!-- back layer : long sweeping learned edges -->
714
+ <g class="layerB" opacity=".55">
715
+ <path
716
+ class="wire slow"
717
+ stroke="url(#gc)"
718
+ d="M-60,700 C260,560 420,760 700,640 S1150,420 1420,540 S1680,660 1720,600"
719
+ />
720
+ <path
721
+ class="wire v slow rev"
722
+ stroke="url(#gv)"
723
+ d="M-40,180 C300,300 520,120 820,220 S1300,340 1660,180"
724
+ />
725
+ <path
726
+ class="wire g slow"
727
+ stroke="url(#gg)"
728
+ d="M200,-40 C160,260 420,420 380,700 S300,880 340,960"
729
+ />
730
+ <path
731
+ class="wire m slow rev"
732
+ stroke="url(#gv)"
733
+ d="M1380,-60 C1300,240 1520,420 1440,660 S1360,880 1400,980"
734
+ />
735
+ <circle class="dot d2" cx="700" cy="640" r="7" fill="url(#nd)" />
736
+ <circle class="dot d4" cx="820" cy="220" r="7" fill="url(#nv)" />
737
+ <circle class="dot d1" cx="380" cy="700" r="6" fill="url(#ng)" />
738
+ <circle class="dot d3" cx="1440" cy="660" r="6" fill="url(#nm)" />
739
+ </g>
740
+
741
+ <!-- front layer : the constellations -->
742
+ <g class="layerA">
743
+ <!-- left weave -->
744
+ <path
745
+ class="wire"
746
+ stroke="url(#gc)"
747
+ d="M120,260 C200,180 300,200 360,140"
748
+ />
749
+ <path
750
+ class="wire g"
751
+ stroke="url(#gg)"
752
+ d="M360,140 C450,90 540,170 610,120"
753
+ />
754
+ <path
755
+ class="wire v rev"
756
+ stroke="url(#gv)"
757
+ d="M120,260 C180,360 320,340 400,420"
758
+ />
759
+ <circle class="dot" cx="120" cy="260" r="9" fill="url(#nd)" />
760
+ <circle class="dot d2" cx="360" cy="140" r="8" fill="url(#ng)" />
761
+ <circle class="dot d4" cx="610" cy="120" r="7" fill="url(#nv)" />
762
+ <circle class="dot d3" cx="400" cy="420" r="8" fill="url(#nm)" />
763
+ <circle class="ring" cx="120" cy="260" r="16" stroke="#39e6ff" />
764
+ <circle class="ring r2" cx="120" cy="260" r="16" stroke="#39e6ff" />
765
+
766
+ <!-- right weave -->
767
+ <path
768
+ class="wire m"
769
+ stroke="url(#gv)"
770
+ d="M1480,300 C1380,240 1300,320 1200,270"
771
+ />
772
+ <path
773
+ class="wire"
774
+ stroke="url(#gc)"
775
+ d="M1200,270 C1120,220 1060,300 980,260"
776
+ />
777
+ <path
778
+ class="wire g rev"
779
+ stroke="url(#gg)"
780
+ d="M1480,300 C1440,420 1300,440 1260,540"
781
+ />
782
+ <circle class="dot d1" cx="1480" cy="300" r="9" fill="url(#nm)" />
783
+ <circle class="dot d3" cx="1200" cy="270" r="8" fill="url(#nd)" />
784
+ <circle class="dot d5" cx="980" cy="260" r="7" fill="url(#nv)" />
785
+ <circle class="dot d2" cx="1260" cy="540" r="8" fill="url(#ng)" />
786
+ <circle
787
+ class="ring r3"
788
+ cx="1480"
789
+ cy="300"
790
+ r="16"
791
+ stroke="#a878ff"
792
+ />
793
+
794
+ <!-- bottom weave -->
795
+ <path
796
+ class="wire v"
797
+ stroke="url(#gv)"
798
+ d="M520,780 C640,720 760,800 900,740"
799
+ />
800
+ <path
801
+ class="wire rev"
802
+ stroke="url(#gc)"
803
+ d="M900,740 C1020,690 1100,770 1200,720"
804
+ />
805
+ <circle class="dot d5" cx="520" cy="780" r="8" fill="url(#nv)" />
806
+ <circle class="dot d1" cx="900" cy="740" r="9" fill="url(#nd)" />
807
+ <circle class="dot d3" cx="1200" cy="720" r="7" fill="url(#ng)" />
808
+ <circle class="ring r2" cx="900" cy="740" r="16" stroke="#39e6ff" />
809
+
810
+ <!-- top weave -->
811
+ <path
812
+ class="wire g"
813
+ stroke="url(#gg)"
814
+ d="M760,90 C880,130 1000,60 1120,110"
815
+ />
816
+ <circle class="dot d4" cx="760" cy="90" r="7" fill="url(#ng)" />
817
+ <circle class="dot d2" cx="1120" cy="110" r="7" fill="url(#nm)" />
818
+ </g>
819
+ </svg>
820
+ </div>
821
+
822
+ <div class="vignette"></div>
823
+ <div class="grain"></div>
824
+ </div>
825
+
826
+ <!-- ═══════════════════════════════ hero ═══════════════════════════ -->
827
+ <main class="hero">
828
+ <div class="stage">
829
+ <div class="hex-glow"></div>
830
+ <div class="hexring"></div>
831
+ <div class="hexring inner"></div>
832
+
833
+ <p class="kicker">
834
+ deterministic <b>·</b> auditable <b>·</b> weight-free
835
+ </p>
836
+ <div style="position: relative">
837
+ <span class="echo" aria-hidden="true">© SEMA</span>
838
+ <h1>SEMA</h1>
839
+ </div>
840
+ <p class="tag">The mind <em>without weights</em>.</p>
841
+ <p class="sub">
842
+ A reasoning engine that <b>keeps knowledge as knowledge</b> — exact,
843
+ content-addressed, inspectable — and derives every answer as a
844
+ <b>traceable proof</b> over what it was taught. No neural network. No
845
+ GPU. No hallucination.
846
+ </p>
847
+
848
+ <div class="cta">
849
+ <a class="btn primary" href="https://github.com/hviana/sema"
850
+ >View on GitHub</a>
851
+ <a class="btn ghost" href="mailto:rogernact@gmail.com">Contact</a>
852
+ </div>
853
+ </div>
854
+ </main>
855
+
856
+ <!-- ═══════════════════════════ ticker ═════════════════════════════ -->
857
+ <div class="ticker" aria-hidden="true">
858
+ <div class="rail">
859
+ <span>no gpu bills</span><span>no hallucinations</span><span>audit-ready
860
+ answers</span><span>runs on your hardware</span><span>total data
861
+ sovereignty</span><span>train in one pass</span><span>no api
862
+ costs</span><span>reproducible results</span><span>compliance
863
+ friendly</span>
864
+ <span>no gpu bills</span><span>no hallucinations</span><span>audit-ready
865
+ answers</span><span>runs on your hardware</span><span>total data
866
+ sovereignty</span><span>train in one pass</span><span>no api
867
+ costs</span><span>reproducible results</span><span>compliance
868
+ friendly</span>
869
+ </div>
870
+ </div>
871
+
872
+ <!-- ═══════════════════════════ footer ═════════════════════════════ -->
873
+ <footer>
874
+ <div>
875
+ © Henrique Viana — creator · academic contact:
876
+ <a href="mailto:hv5088@gmail.com">hv5088@gmail.com</a>
877
+ </div>
878
+ <div>
879
+ commercial licensing:
880
+ <a href="mailto:reis.marcelo@gmail.com">reis.marcelo@gmail.com</a> ·
881
+ <a href="mailto:rogernact@gmail.com">rogernact@gmail.com</a>
882
+ </div>
883
+ <div class="lic">
884
+ Released under the
885
+ <a href="https://github.com/hviana/sema/blob/main/LICENSE.md"
886
+ >PolyForm Noncommercial License 1.0.0</a>
887
+ — commercial use requires a
888
+ <a href="https://github.com/hviana/sema/blob/main/COMMERCIAL-LICENSE.md"
889
+ >separate license</a>.
890
+ </div>
891
+ </footer>
892
+ </body>
893
+ </html>