@xuda.io/ai_module 1.1.5617 → 1.1.5618

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.
package/.env ADDED
@@ -0,0 +1 @@
1
+ OPENAI_API_KEY=sk-proj-XmeLaZ7RLn0nCc4nSaJHT3BlbkFJfKFulKrY55ILLnM1CytS
@@ -0,0 +1,47 @@
1
+
2
+ const body = document.body;
3
+ const langButtons = document.querySelectorAll('[data-set-lang]');
4
+ const sectionSearch = document.querySelector('#section-search');
5
+ const progress = document.querySelector('.read-progress span');
6
+
7
+ function setLanguage(lang) {
8
+ body.dataset.lang = lang;
9
+ document.documentElement.lang = lang;
10
+ document.documentElement.dir = lang === 'he' ? 'rtl' : 'ltr';
11
+ document.querySelectorAll('[data-en][data-he]').forEach((node) => {
12
+ const value = node.dataset[lang];
13
+ if (value) node.textContent = value;
14
+ });
15
+ langButtons.forEach((button) => {
16
+ button.setAttribute('aria-pressed', String(button.dataset.setLang === lang));
17
+ });
18
+ if (sectionSearch) {
19
+ sectionSearch.placeholder = lang === 'he' ? 'חפש נושא, חברה או שנה' : 'Search topic, company or year';
20
+ filterToc(sectionSearch.value);
21
+ }
22
+ localStorage.setItem('boazWikiLang', lang);
23
+ }
24
+
25
+ function filterToc(query) {
26
+ const active = body.dataset.lang;
27
+ const q = query.trim().toLowerCase();
28
+ document.querySelectorAll(`.toc nav[data-lang-panel="${active}"] a`).forEach((link) => {
29
+ link.hidden = q && !link.textContent.toLowerCase().includes(q);
30
+ });
31
+ }
32
+
33
+ langButtons.forEach((button) => {
34
+ button.addEventListener('click', () => setLanguage(button.dataset.setLang));
35
+ });
36
+
37
+ if (sectionSearch) {
38
+ sectionSearch.addEventListener('input', (event) => filterToc(event.target.value));
39
+ }
40
+
41
+ window.addEventListener('scroll', () => {
42
+ const max = document.documentElement.scrollHeight - window.innerHeight;
43
+ const pct = max > 0 ? (window.scrollY / max) * 100 : 0;
44
+ progress.style.width = `${pct}%`;
45
+ }, { passive: true });
46
+
47
+ setLanguage(localStorage.getItem('boazWikiLang') || 'en');
@@ -0,0 +1,563 @@
1
+ :root {
2
+ --ink: #1f2328;
3
+ --muted: #5c6572;
4
+ --line: #d8d0c4;
5
+ --paper: #f3eee4;
6
+ --panel: #fffdf8;
7
+ --panel-strong: #ffffff;
8
+ --blue: #2f4d63;
9
+ --green: #4f6445;
10
+ --gold: #9b6b39;
11
+ --red: #a05844;
12
+ --shadow: 0 24px 54px rgba(33, 38, 45, .09);
13
+ }
14
+
15
+ * { box-sizing: border-box; }
16
+
17
+ html {
18
+ scroll-behavior: smooth;
19
+ scroll-padding-top: 96px;
20
+ }
21
+
22
+ body {
23
+ margin: 0;
24
+ color: var(--ink);
25
+ font-family: "Segoe UI", Arial, "Noto Sans Hebrew", sans-serif;
26
+ line-height: 1.7;
27
+ background:
28
+ radial-gradient(circle at top left, rgba(47, 77, 99, .12), transparent 28%),
29
+ radial-gradient(circle at right 8% top 10%, rgba(79, 100, 69, .10), transparent 24%),
30
+ linear-gradient(180deg, #f7f2e8 0%, var(--paper) 100%);
31
+ }
32
+
33
+ body[data-lang="en"] [data-lang-panel="he"],
34
+ body[data-lang="he"] [data-lang-panel="en"] {
35
+ display: none !important;
36
+ }
37
+
38
+ h1,
39
+ h2,
40
+ h3 {
41
+ margin: 0 0 14px;
42
+ line-height: 1.12;
43
+ letter-spacing: -0.02em;
44
+ font-family: Georgia, "Times New Roman", Times, serif;
45
+ }
46
+
47
+ a {
48
+ color: inherit;
49
+ }
50
+
51
+ .read-progress {
52
+ position: fixed;
53
+ inset: 0 0 auto;
54
+ height: 4px;
55
+ z-index: 50;
56
+ }
57
+
58
+ .read-progress span {
59
+ display: block;
60
+ width: 0;
61
+ height: 100%;
62
+ background: linear-gradient(90deg, var(--blue), var(--green), var(--gold));
63
+ }
64
+
65
+ .site-header {
66
+ position: sticky;
67
+ top: 0;
68
+ z-index: 30;
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: space-between;
72
+ gap: 18px;
73
+ padding: 12px clamp(16px, 3vw, 34px);
74
+ border-bottom: 1px solid var(--line);
75
+ background: rgba(247, 242, 232, .9);
76
+ backdrop-filter: blur(16px);
77
+ }
78
+
79
+ .brand,
80
+ .top-nav a,
81
+ .button {
82
+ text-decoration: none;
83
+ }
84
+
85
+ .brand {
86
+ display: inline-flex;
87
+ align-items: center;
88
+ gap: 10px;
89
+ font-weight: 800;
90
+ letter-spacing: -0.01em;
91
+ }
92
+
93
+ .brand-mark {
94
+ display: grid;
95
+ place-items: center;
96
+ width: 42px;
97
+ height: 42px;
98
+ border-radius: 50%;
99
+ background: linear-gradient(145deg, #243548, #4f5d6b);
100
+ color: #fff;
101
+ font-size: 13px;
102
+ box-shadow: 0 10px 22px rgba(31, 35, 40, .2);
103
+ }
104
+
105
+ .top-nav {
106
+ display: flex;
107
+ gap: 12px;
108
+ flex-wrap: wrap;
109
+ justify-content: center;
110
+ color: var(--muted);
111
+ font-size: 14px;
112
+ }
113
+
114
+ .top-nav a {
115
+ padding: 8px 12px;
116
+ border: 1px solid transparent;
117
+ border-radius: 999px;
118
+ transition: background-color .18s ease, border-color .18s ease, color .18s ease;
119
+ }
120
+
121
+ .top-nav a:hover {
122
+ color: var(--blue);
123
+ background: rgba(47, 77, 99, .07);
124
+ border-color: rgba(47, 77, 99, .12);
125
+ }
126
+
127
+ .lang-switch {
128
+ display: inline-flex;
129
+ overflow: hidden;
130
+ border: 1px solid var(--line);
131
+ border-radius: 999px;
132
+ background: var(--panel-strong);
133
+ box-shadow: 0 8px 20px rgba(33, 38, 45, .06);
134
+ }
135
+
136
+ .lang-switch button {
137
+ border: 0;
138
+ padding: 8px 12px;
139
+ background: transparent;
140
+ color: var(--muted);
141
+ cursor: pointer;
142
+ font-weight: 800;
143
+ }
144
+
145
+ .lang-switch button[aria-pressed="true"] {
146
+ background: var(--ink);
147
+ color: #fff;
148
+ }
149
+
150
+ .page-shell {
151
+ display: grid;
152
+ grid-template-columns: minmax(0, 1fr) clamp(280px, 28vw, 340px);
153
+ gap: clamp(18px, 3vw, 32px);
154
+ align-items: start;
155
+ max-width: 1240px;
156
+ margin: 0 auto;
157
+ padding: clamp(18px, 3.5vw, 36px);
158
+ }
159
+
160
+ .page-shell > section,
161
+ .page-shell > .portrait-card {
162
+ min-width: 0;
163
+ }
164
+
165
+ .portrait-card--sticky {
166
+ grid-column: 2;
167
+ grid-row: 1 / span 4;
168
+ position: sticky;
169
+ top: 88px;
170
+ z-index: 2;
171
+ }
172
+
173
+ .hero {
174
+ grid-column: 1;
175
+ padding: clamp(26px, 4vw, 40px);
176
+ border: 1px solid var(--line);
177
+ border-radius: 28px;
178
+ background:
179
+ linear-gradient(180deg, rgba(255, 255, 255, .84), rgba(255, 255, 255, .96)),
180
+ linear-gradient(135deg, rgba(47, 77, 99, .08), rgba(79, 100, 69, .02));
181
+ box-shadow: var(--shadow);
182
+ }
183
+
184
+ .hero-copy + .hero-copy {
185
+ margin-top: 24px;
186
+ }
187
+
188
+ .kicker {
189
+ margin: 0 0 10px;
190
+ color: var(--red);
191
+ font-size: 12px;
192
+ font-weight: 800;
193
+ text-transform: uppercase;
194
+ letter-spacing: .12em;
195
+ }
196
+
197
+ .hero h1 {
198
+ font-size: clamp(42px, 6.8vw, 82px);
199
+ }
200
+
201
+ .lede {
202
+ max-width: 760px;
203
+ margin: 0;
204
+ color: #37404b;
205
+ font-size: clamp(18px, 2.1vw, 25px);
206
+ line-height: 1.5;
207
+ }
208
+
209
+ .hero-actions {
210
+ display: flex;
211
+ flex-wrap: wrap;
212
+ gap: 12px;
213
+ margin-top: 26px;
214
+ }
215
+
216
+ .button {
217
+ display: inline-flex;
218
+ align-items: center;
219
+ justify-content: center;
220
+ min-height: 42px;
221
+ padding: 9px 16px;
222
+ border: 1px solid var(--ink);
223
+ border-radius: 999px;
224
+ background: transparent;
225
+ font-weight: 800;
226
+ }
227
+
228
+ .button.primary {
229
+ background: var(--ink);
230
+ color: #fff;
231
+ }
232
+
233
+ .portrait-card {
234
+ border: 1px solid var(--line);
235
+ border-radius: 26px;
236
+ overflow: hidden;
237
+ background: var(--panel-strong);
238
+ box-shadow: var(--shadow);
239
+ }
240
+
241
+ .portrait-card__header {
242
+ padding: 18px 18px 14px;
243
+ background:
244
+ linear-gradient(180deg, rgba(47, 77, 99, .08), rgba(47, 77, 99, 0)),
245
+ linear-gradient(180deg, #fff, #fbf8f1);
246
+ border-bottom: 1px solid var(--line);
247
+ }
248
+
249
+ .portrait-card__eyebrow {
250
+ margin: 0 0 8px;
251
+ color: var(--blue);
252
+ font-size: 12px;
253
+ font-weight: 800;
254
+ text-transform: uppercase;
255
+ letter-spacing: .14em;
256
+ }
257
+
258
+ .portrait-card__header h2 {
259
+ margin: 0;
260
+ font-size: clamp(22px, 2.7vw, 30px);
261
+ }
262
+
263
+ .portrait-card__subhead {
264
+ margin: 8px 0 0;
265
+ color: var(--muted);
266
+ font-size: 13px;
267
+ line-height: 1.45;
268
+ }
269
+
270
+ .portrait-card img {
271
+ display: block;
272
+ width: 100%;
273
+ aspect-ratio: 4 / 5;
274
+ object-fit: cover;
275
+ object-position: 50% 18%;
276
+ background: #eef2f6;
277
+ }
278
+
279
+ .portrait-card dl {
280
+ margin: 0;
281
+ padding: 16px 18px 18px;
282
+ }
283
+
284
+ .portrait-card dl > div {
285
+ display: grid;
286
+ grid-template-columns: 92px minmax(0, 1fr);
287
+ gap: 12px;
288
+ padding: 10px 0;
289
+ border-top: 1px solid var(--line);
290
+ }
291
+
292
+ .portrait-card dl > div:first-child {
293
+ border-top: 0;
294
+ }
295
+
296
+ .portrait-card dt {
297
+ color: var(--muted);
298
+ font-size: 12px;
299
+ font-weight: 800;
300
+ text-transform: uppercase;
301
+ letter-spacing: .05em;
302
+ }
303
+
304
+ .portrait-card dd {
305
+ margin: 0;
306
+ color: var(--ink);
307
+ }
308
+
309
+ .timeline-band,
310
+ .ventures {
311
+ grid-column: 1;
312
+ padding: 18px 0 0;
313
+ }
314
+
315
+ .timeline-band h2,
316
+ .ventures h2 {
317
+ font-size: clamp(26px, 3.6vw, 38px);
318
+ }
319
+
320
+ .timeline,
321
+ .venture-grid {
322
+ display: grid;
323
+ grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
324
+ gap: 14px;
325
+ margin: 20px 0 0;
326
+ }
327
+
328
+ .timeline {
329
+ list-style: none;
330
+ padding: 0;
331
+ }
332
+
333
+ .timeline li,
334
+ .venture-grid article {
335
+ border: 1px solid var(--line);
336
+ border-radius: 18px;
337
+ background: linear-gradient(180deg, #fff, #fbf8f1);
338
+ box-shadow: 0 10px 26px rgba(33, 38, 45, .05);
339
+ }
340
+
341
+ .timeline li {
342
+ min-height: 144px;
343
+ padding: 18px;
344
+ }
345
+
346
+ .timeline strong {
347
+ display: block;
348
+ margin-bottom: 8px;
349
+ color: var(--blue);
350
+ font-size: 17px;
351
+ }
352
+
353
+ .timeline span,
354
+ .venture-grid p {
355
+ color: #37404b;
356
+ font-size: 14px;
357
+ }
358
+
359
+ .venture-grid article {
360
+ min-height: 180px;
361
+ padding: 18px;
362
+ }
363
+
364
+ .venture-grid h3 {
365
+ font-size: 18px;
366
+ color: var(--green);
367
+ }
368
+
369
+ .wiki-layout {
370
+ grid-column: 1;
371
+ display: grid;
372
+ grid-template-columns: minmax(220px, 300px) minmax(0, 1fr);
373
+ gap: 24px;
374
+ align-items: start;
375
+ padding: 22px 0 64px;
376
+ }
377
+
378
+ .toc {
379
+ position: sticky;
380
+ top: 88px;
381
+ max-height: calc(100vh - 104px);
382
+ overflow: auto;
383
+ border: 1px solid var(--line);
384
+ border-radius: 20px;
385
+ background: var(--panel-strong);
386
+ padding: 16px;
387
+ box-shadow: var(--shadow);
388
+ }
389
+
390
+ .toc label {
391
+ display: block;
392
+ margin-bottom: 8px;
393
+ color: var(--muted);
394
+ font-size: 13px;
395
+ font-weight: 800;
396
+ }
397
+
398
+ .toc input {
399
+ width: 100%;
400
+ margin-bottom: 12px;
401
+ padding: 10px 11px;
402
+ border: 1px solid var(--line);
403
+ border-radius: 12px;
404
+ font: inherit;
405
+ background: #fff;
406
+ }
407
+
408
+ .toc nav {
409
+ display: grid;
410
+ gap: 4px;
411
+ }
412
+
413
+ .toc a {
414
+ padding: 7px 8px;
415
+ border-inline-start: 3px solid transparent;
416
+ border-radius: 10px;
417
+ color: #37404b;
418
+ text-decoration: none;
419
+ font-size: 14px;
420
+ line-height: 1.35;
421
+ }
422
+
423
+ .toc a:hover {
424
+ border-color: var(--blue);
425
+ background: rgba(47, 77, 99, .07);
426
+ color: var(--blue);
427
+ }
428
+
429
+ .toc a[hidden] {
430
+ display: none;
431
+ }
432
+
433
+ .wiki-article {
434
+ border: 1px solid var(--line);
435
+ border-radius: 22px;
436
+ background: var(--panel-strong);
437
+ padding: clamp(20px, 4vw, 42px);
438
+ box-shadow: var(--shadow);
439
+ }
440
+
441
+ .wiki-section {
442
+ margin-top: 28px;
443
+ padding-top: 28px;
444
+ border-top: 1px solid var(--line);
445
+ scroll-margin-top: 84px;
446
+ }
447
+
448
+ .wiki-section:first-child {
449
+ margin-top: 0;
450
+ padding-top: 0;
451
+ border-top: 0;
452
+ }
453
+
454
+ .wiki-section h1 {
455
+ font-size: clamp(32px, 4.7vw, 54px);
456
+ }
457
+
458
+ .wiki-section h2 {
459
+ color: var(--blue);
460
+ font-size: clamp(22px, 3vw, 32px);
461
+ }
462
+
463
+ .wiki-section p {
464
+ margin: 0 0 15px;
465
+ color: #313942;
466
+ }
467
+
468
+ .wiki-section mark {
469
+ padding: 0 .12em;
470
+ background: #fff0a8;
471
+ color: inherit;
472
+ }
473
+
474
+ .site-footer {
475
+ padding: 24px clamp(18px, 4vw, 40px) 40px;
476
+ border-top: 1px solid var(--line);
477
+ color: var(--muted);
478
+ text-align: center;
479
+ }
480
+
481
+ @media (max-width: 1040px) {
482
+ .site-header {
483
+ flex-wrap: wrap;
484
+ }
485
+
486
+ .top-nav {
487
+ order: 3;
488
+ width: 100%;
489
+ justify-content: flex-start;
490
+ }
491
+
492
+ .page-shell {
493
+ grid-template-columns: 1fr;
494
+ }
495
+
496
+ .portrait-card--sticky {
497
+ grid-column: auto;
498
+ grid-row: auto;
499
+ position: static;
500
+ }
501
+
502
+ .wiki-layout {
503
+ grid-template-columns: 1fr;
504
+ }
505
+
506
+ .toc {
507
+ position: static;
508
+ max-height: none;
509
+ }
510
+ }
511
+
512
+ @media (max-width: 640px) {
513
+ .brand-text {
514
+ display: none;
515
+ }
516
+
517
+ .hero {
518
+ padding: 20px;
519
+ border-radius: 22px;
520
+ }
521
+
522
+ .hero h1 {
523
+ font-size: 40px;
524
+ }
525
+
526
+ .lede {
527
+ font-size: 18px;
528
+ }
529
+
530
+ .hero-actions {
531
+ gap: 10px;
532
+ }
533
+
534
+ .top-nav {
535
+ gap: 8px;
536
+ overflow-x: auto;
537
+ flex-wrap: nowrap;
538
+ padding-bottom: 2px;
539
+ scrollbar-width: none;
540
+ }
541
+
542
+ .top-nav::-webkit-scrollbar {
543
+ display: none;
544
+ }
545
+
546
+ .timeline,
547
+ .venture-grid {
548
+ grid-template-columns: 1fr;
549
+ }
550
+
551
+ .wiki-article {
552
+ padding: 18px;
553
+ }
554
+
555
+ .portrait-card__header h2 {
556
+ font-size: 24px;
557
+ }
558
+
559
+ .portrait-card dl > div {
560
+ grid-template-columns: 1fr;
561
+ gap: 2px;
562
+ }
563
+ }