taleem-player 1.0.14 → 1.0.16

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.
@@ -1,601 +1 @@
1
-
2
- /* =====================================================
3
- TALEEM — Single Public Stylesheet
4
-
5
- /* -------------------------------
6
- Global Page Reset
7
- ------------------------------- */
8
-
9
- html,body {
10
- height: 100%;
11
- overflow: hidden;
12
- margin: 0;
13
- font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
14
- background: var(--backgroundColor, #0b1220);
15
- color: var(--primaryColor, #e6e9ff);
16
- }
17
-
18
- #app {
19
- position: relative;
20
- width: 100vw;
21
- min-height: 100vh;
22
- overflow: hidden;
23
- }
24
-
25
- /* -------------------------------
26
- Browser / Player Layers
27
- ------------------------------- */
28
- .taleem-browser-bg {
29
- position: absolute;
30
- inset: 0;
31
- z-index: 0;
32
- background-size: cover;
33
- background-position: center;
34
- }
35
-
36
- .taleem-browser-slide {
37
- position: relative;
38
- z-index: 1;
39
- }
40
-
41
- /* -------------------------------
42
- Base Slide Grammar
43
- ------------------------------- */
44
- .slide {
45
- height: 100vh;
46
- box-sizing: border-box;
47
-
48
- display: flex;
49
- flex-direction: column;
50
- justify-content: center;
51
- align-items: center;
52
-
53
- padding: 64px 80px;
54
- gap: 32px;
55
-
56
- overflow: hidden;
57
- background: transparent;
58
- color: var(--primaryColor, #e6e9ff);
59
-
60
- font-size: 2.4rem;
61
- line-height: 1.6;
62
- letter-spacing: 0.01em;
63
- text-align: center;
64
- }
65
-
66
- /* -------------------------------
67
- Global Image Safety
68
- ------------------------------- */
69
- .slide img {
70
- max-width: 100%;
71
- max-height: 100%;
72
- height: auto;
73
- width: auto;
74
- display: block;
75
- }
76
-
77
- /* -------------------------------
78
- Headings
79
- ------------------------------- */
80
- .slide h1 {
81
- margin: 0;
82
- letter-spacing: -0.015em;
83
- }
84
-
85
- /* -------------------------------
86
- Slide Types
87
- ------------------------------- */
88
- .slide.titleSlide h1 {
89
- font-size: 5.6rem;
90
- font-weight: 700;
91
- line-height: 1.2;
92
- }
93
-
94
- .slide.titleAndSubtitle h1 {
95
- font-size: 5.8rem;
96
- font-weight: 700;
97
- }
98
-
99
- .slide.titleAndSubtitle h2 {
100
- font-size: 3.8rem;
101
- font-weight: 400;
102
- opacity: 0.8;
103
- margin: 0;
104
- }
105
-
106
- .slide.titleAndPara h1 {
107
- font-size: 4.8rem;
108
- font-weight: 600;
109
- }
110
-
111
- .slide.titleAndPara p {
112
- font-size: 3rem;
113
- max-width: 70ch;
114
- opacity: 0.9;
115
- margin: 0;
116
- }
117
-
118
- /* -------------------------------
119
- Bullet List
120
- ------------------------------- */
121
- .slide.bulletList ul {
122
- list-style: disc;
123
- padding-left: 2rem;
124
- margin: 0;
125
- }
126
-
127
- .slide.bulletList li {
128
- font-size: 3.6rem;
129
- margin-bottom: 1rem;
130
- text-align: left;
131
- font-weight: 500;
132
- }
133
-
134
- /* -------------------------------
135
- Image Variants
136
- ------------------------------- */
137
- .slide.imageSlide {
138
- padding: 0;
139
- }
140
-
141
- .slide.imageSlide img {
142
- object-fit: contain;
143
- }
144
-
145
- .slide.imageWithTitle {
146
- position: relative;
147
- padding: 48px;
148
- }
149
-
150
- .slide.imageWithTitle img {
151
- height: calc(100vh - 96px);
152
- border-radius: 12px;
153
- }
154
-
155
- .slide.imageWithTitle h1 {
156
- position: absolute;
157
- bottom: 64px;
158
- left: 50%;
159
- transform: translateX(-50%);
160
- font-size: 4.6rem;
161
- background: rgba(0, 0, 0, 0.45);
162
- padding: 0.4em 0.8em;
163
- border-radius: 6px;
164
- }
165
-
166
- .slide.imageWithCaption {
167
- display: flex;
168
- flex-direction: column;
169
- justify-content: center;
170
- gap: 32px;
171
- height: 100vh;
172
- overflow: hidden;
173
- }
174
-
175
- .slide.imageWithCaption img {
176
- max-height: 55vh; /* reduce slightly */
177
- object-fit: contain;
178
- flex-shrink: 0;
179
- }
180
-
181
- .slide.imageWithCaption p {
182
- max-height: 20vh; /* hard cap text */
183
- overflow: hidden;
184
- text-overflow: ellipsis;
185
- }
186
-
187
- /* -------------------------------
188
- Two Column Text
189
- ------------------------------- */
190
-
191
-
192
- .slide.twoColumnText {
193
- flex-direction: row;
194
- justify-content: center; /* center the columns block */
195
- align-items: center;
196
- gap: 64px;
197
- }
198
-
199
- .slide.twoColumnText > div {
200
- flex: 1;
201
- max-width: 520px; /* keeps columns visually centered */
202
- }
203
-
204
-
205
- /* QUOTE SLIDE */
206
- .slide.quoteSlide {
207
- display: flex;
208
- flex-direction: column;
209
- justify-content: center;
210
- gap: 32px;
211
- height: 100vh;
212
- overflow: hidden;
213
- }
214
-
215
- .slide.quoteSlide blockquote {
216
- max-height: 60vh;
217
- overflow: hidden;
218
- }
219
-
220
- .slide.quoteSlide cite {
221
- flex-shrink: 0;
222
- }
223
-
224
- /* -------------------------------
225
- Quote Slide
226
- ------------------------------- */
227
- .slide.quoteSlide blockquote {
228
- font-size: 3.8rem;
229
- font-style: italic;
230
- max-width: 60ch;
231
- }
232
-
233
- .slide.quoteSlide cite {
234
- font-size: 2.4rem;
235
- opacity: 0.75;
236
- }
237
-
238
- /* -------------------------------
239
- Big Number
240
- ------------------------------- */
241
- .slide.bigNumber .number {
242
- font-size: 9rem;
243
- font-weight: 700;
244
- }
245
-
246
- /* -------------------------------
247
- Fill Image (Full Bleed)
248
- ------------------------------- */
249
- .slide.fillImage {
250
- padding: 0;
251
- height: 100vh;
252
- display: block;
253
- }
254
-
255
- .slide.fillImage img {
256
- width: 100%;
257
- height: 100%;
258
- object-fit: cover;
259
- }
260
-
261
- /* -------------------------------
262
- Demo / Player UI (Optional)
263
- ------------------------------- */
264
- #timebar {
265
- position: fixed;
266
- bottom: 0;
267
- left: 0;
268
- right: 0;
269
- height: 32px;
270
- background: rgba(0, 0, 0, 0.6);
271
- backdrop-filter: blur(6px);
272
- z-index: 10;
273
- }
274
-
275
-
276
- /* -------------------------------
277
- Image + Bullets (Side by Side)
278
- ------------------------------- */
279
-
280
- .slide.imageRightBulletsLeft,
281
- .slide.imageLeftBulletsRight {
282
- display: flex;
283
- flex-direction: row;
284
- align-items: center;
285
- gap: 64px;
286
- text-align: left;
287
- }
288
-
289
- /* image on right */
290
- .slide.imageRightBulletsLeft img {
291
- order: 2;
292
- }
293
- /* -------------------------------
294
- Table Slide
295
- ------------------------------- */
296
-
297
- .slide.table {
298
- display: flex;
299
- justify-content: center;
300
- align-items: center;
301
-
302
- width: 100%;
303
- height: 100vh;
304
-
305
- padding: 64px 80px;
306
- box-sizing: border-box;
307
- }
308
-
309
- /* actual table */
310
- .slide.table table {
311
- border-collapse: collapse;
312
- width: 100%;
313
- max-width: 1200px;
314
-
315
- font-size: 2.8rem;
316
- line-height: 1.4;
317
- text-align: center;
318
-
319
- color: var(--primaryColor, #e6e9ff);
320
- }
321
-
322
- /* header cells (title row) */
323
- .slide.table thead th {
324
- font-weight: 700; /* title row bold */
325
- padding: 20px 24px;
326
-
327
- border: 2px solid rgba(255, 255, 255, 0.35);
328
- }
329
-
330
- /* body cells */
331
- .slide.table tbody td {
332
- padding: 20px 24px;
333
-
334
- border: 2px solid rgba(255, 255, 255, 0.25);
335
- }
336
- /* hide empty table header row */
337
- .slide.table thead th:empty {
338
- display: none;
339
- }
340
-
341
- .slide.table thead tr:has(th:empty) {
342
- display: none;
343
- }
344
-
345
-
346
- /* =====================================================
347
- EQ — Final visual behavior
348
- ===================================================== */
349
-
350
- /* EQ should grow from TOP, not vertical center */
351
- .slide.eq.imageRightBulletsLeft {
352
- align-items: flex-start;
353
- }
354
-
355
- /* ---------- EQ: equation lines as table rows ---------- */
356
-
357
- .slide.eq.imageRightBulletsLeft .eq-lines {
358
- flex: 1;
359
- list-style: none; /* remove bullet visuals */
360
- padding: 0;
361
- margin: 0;
362
-
363
- display: flex;
364
- flex-direction: column;
365
- gap: 0;
366
- }
367
-
368
- .slide.eq.imageRightBulletsLeft .eq-lines li {
369
- padding: 14px 18px;
370
- font-size: 2.6rem;
371
- line-height: 1.45;
372
-
373
- border-bottom: 1px solid rgba(255, 255, 255, 0.18);
374
- background: rgba(255, 255, 255, 0.03);
375
-
376
- transition: background 0.25s ease, color 0.25s ease;
377
- }
378
-
379
- /* selected (latest) line */
380
- .slide.eq.imageRightBulletsLeft .eq-lines li:last-child {
381
- background: rgba(245, 197, 66, 0.18); /* soft yellow */
382
- color: #ffd7a3; /* warm / reddish */
383
- font-weight: 600;
384
- }
385
-
386
- /* ---------- RIGHT: fixed explanation panel ---------- */
387
-
388
- .slide.eq.imageRightBulletsLeft .eq-side-panel {
389
- flex: 1;
390
- height: 75vh; /* FIXED height → no shaking */
391
- overflow: hidden; /* contain layout */
392
-
393
- padding: 28px 32px;
394
-
395
- background: rgba(0, 0, 0, 0.35);
396
- border: 1px solid rgba(255, 255, 255, 0.18);
397
- border-radius: 16px;
398
-
399
- box-shadow: 0 12px 30px rgba(0, 0, 0, 0.45);
400
-
401
- display: flex;
402
- flex-direction: column;
403
- }
404
-
405
- /* ---------- Side panel items ---------- */
406
-
407
- .slide.eq.imageRightBulletsLeft .eq-explain-item {
408
- font-size: 1.6rem;
409
- line-height: 1.75;
410
- text-align:justify;
411
-
412
- word-wrap: break-word;
413
- overflow-wrap: break-word;
414
-
415
- background: rgba(255, 255, 255, 0.06);
416
- padding: 14px 18px;
417
- border-radius: 12px;
418
-
419
-
420
- }
421
-
422
- /* ---------- Side panel image ---------- */
423
-
424
- .slide.eq.imageRightBulletsLeft .eq-explain-image img {
425
- width: 70%;
426
- margin: 0 auto; /* center image */
427
- display: block;
428
-
429
- border-radius: 12px;
430
- }
431
-
432
- /* =====================================================
433
- Bar Chart Slide
434
- ===================================================== */
435
-
436
- .slide.barChart {
437
- justify-content: center;
438
- align-items: center;
439
- text-align: left;
440
- }
441
-
442
- .slide.barChart .bar-chart {
443
- width: 100%;
444
- max-width: 900px;
445
-
446
- display: flex;
447
- flex-direction: column;
448
- gap: 22px;
449
- }
450
-
451
- /* one bar row */
452
- .slide.barChart .bar-row {
453
- display: flex;
454
- align-items: center;
455
- gap: 20px;
456
- }
457
-
458
- /* label on the left */
459
- .slide.barChart .bar-label {
460
- width: 220px;
461
- font-size: 2.2rem;
462
- opacity: 0.9;
463
- flex-shrink: 0;
464
- }
465
-
466
- /* bar background */
467
- .slide.barChart .bar-track {
468
- flex: 1;
469
- height: 26px;
470
-
471
- background: rgba(255, 255, 255, 0.15);
472
- border-radius: 13px;
473
- overflow: hidden;
474
- }
475
-
476
- /* actual bar */
477
- .slide.barChart .bar-fill {
478
- height: 100%;
479
- width: 0;
480
-
481
- background: #ff9900;
482
- border-radius: 13px;
483
- }
484
-
485
- /* numeric value on right */
486
- .slide.barChart .bar-value {
487
- width: 48px;
488
- text-align: right;
489
- font-size: 2rem;
490
- opacity: 0.85;
491
- }
492
-
493
-
494
- /* -------------------------------
495
- Progress Bar Slide
496
- ------------------------------- */
497
-
498
- .slide.progressbar {
499
- justify-content: center;
500
- align-items: center;
501
- text-align: left;
502
- }
503
-
504
- .slide.progressbar .progressbar-item {
505
- width: 100%;
506
- max-width: 900px;
507
-
508
- display: flex;
509
- flex-direction: column;
510
- gap: 14px;
511
-
512
- margin-bottom: 28px;
513
- }
514
-
515
- .slide.progressbar .progressbar-label {
516
- font-size: 2.4rem;
517
- font-weight: 600;
518
- opacity: 0.9;
519
- }
520
-
521
- .slide.progressbar .progressbar-track {
522
- width: 100%;
523
- height: 28px;
524
-
525
- background: rgba(255, 255, 255, 0.18);
526
- border-radius: 14px;
527
- overflow: hidden;
528
- }
529
-
530
- .slide.progressbar .progressbar-fill {
531
- height: 100%;
532
- width: 0;
533
-
534
- background: #ff9900;
535
- border-radius: 14px;
536
-
537
- transition: width 0.6s ease;
538
- }
539
-
540
- /* -------------------------------
541
- Key Ideas Slide (Corner Words / 4 Quadrants)
542
- ------------------------------- */
543
-
544
- .slide.keyIdeasSlide {
545
- position: relative;
546
- width: 100%;
547
- height: 100vh;
548
- padding: 0;
549
- }
550
-
551
- /* base idea block */
552
- .slide.keyIdeasSlide .key-idea {
553
- position: absolute;
554
- width: 45%;
555
- height: 45%;
556
-
557
- display: flex;
558
- flex-direction: column;
559
- justify-content: center;
560
- align-items: center;
561
- gap: 16px;
562
-
563
- font-size: 4.2rem;
564
- font-weight: 700;
565
- letter-spacing: 0.02em;
566
- text-align: center;
567
- }
568
-
569
- /* icon */
570
- .slide.keyIdeasSlide .key-idea .icon {
571
- font-size: 5.2rem;
572
- line-height: 1;
573
- }
574
-
575
- /* label */
576
- .slide.keyIdeasSlide .key-idea .label {
577
- font-size: 3.6rem;
578
- font-weight: 600;
579
- }
580
-
581
- /* quadrants */
582
- .slide.keyIdeasSlide .key-idea:nth-child(1) {
583
- top: 0;
584
- left: 0;
585
- }
586
-
587
- .slide.keyIdeasSlide .key-idea:nth-child(2) {
588
- top: 0;
589
- right: 0;
590
- }
591
-
592
- .slide.keyIdeasSlide .key-idea:nth-child(3) {
593
- bottom: 0;
594
- left: 0;
595
- }
596
-
597
- .slide.keyIdeasSlide .key-idea:nth-child(4) {
598
- bottom: 0;
599
- right: 0;
600
- }
601
-
1
+ .slide{width:100%;height:100vh;box-sizing:border-box;padding:4rem 6rem;display:flex;flex-direction:column;justify-content:center;font-family:system-ui,-apple-system,sans-serif;align-items:center;background:var(--backgroundColor, #ffffff);color:var(--primaryColor, #111111)}.slide img{max-width:100%;max-height:100%;height:auto;width:auto;display:block}.slide h1,.slide h2,.slide h3,.slide p{margin:0}.slide ul{margin:0;padding-left:1.2em}.slide li{margin:0}.katex{font-size:1.4em}body{margin:0;font-family:system-ui,sans-serif}#app{height:100vh;box-sizing:border-box}.nav-test{position:fixed;left:0;right:0;bottom:0;height:90px;transition:opacity .5s ease;backdrop-filter:blur(0px);-webkit-backdrop-filter:blur(0px);background:#bbbbbcd9;border-top:1px solid rgba(0,0,0,.1);display:flex;align-items:center;gap:1rem;padding:0 1rem;z-index:999999}.nav-test span{font-weight:700;min-width:80px}input[type=range]{flex:1}.slide.titleAndSubtitle{align-items:center;text-align:center;gap:32px}.slide.titleAndSubtitle h1{font-size:5.8rem;font-weight:700;line-height:1.2;letter-spacing:-.015em;margin:0}.slide.titleAndSubtitle h2{font-size:2.3rem;font-weight:400;opacity:.8;margin:0}.slide.titleAndPara{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;padding-top:3rem;gap:1rem;text-align:center}.slide.titleAndPara h1{font-size:3rem;font-weight:700;line-height:1.2;max-width:1100px;margin:0 auto}.slide.titleAndPara p{font-size:2.2rem;line-height:1.7;max-width:1000px;margin:0 auto}@media(min-width:1024px){.slide.titleAndPara{padding-top:5rem;gap:2rem}.slide.titleAndPara h1{font-size:2.8rem;max-width:900px}.slide.titleAndPara p{font-size:1.6rem;max-width:750px;line-height:1.6}}@media(orientation:landscape){.slide.titleAndPara p{font-size:1.5rem;max-width:1100px;line-height:1.5}}@media(orientation:portrait){.slide.titleAndPara p{font-size:2.75rem;max-width:1100px;line-height:2.2;text-align:justify}}@media(min-width:1600px){.slide.titleAndPara{padding-top:6rem;gap:3rem}.slide.titleAndPara h1{font-size:4rem;max-width:1200px}.slide.titleAndPara p{font-size:2.4rem;max-width:1100px;line-height:1.8}}.slide.bulletList{align-items:center;text-align:left}.slide.bulletList ul{list-style:disc;padding-left:2rem;margin:0;max-width:900px}.slide.bulletList li{font-size:2.2rem;font-weight:500;line-height:2;margin-bottom:1rem}@media(orientation:portrait){.slide.bulletList li{line-height:3}}@media(min-width:1024px)and (max-width:1440px){.slide.bulletList ul{max-width:750px}.slide.bulletList li{font-size:3rem;line-height:1.8;margin-bottom:.8rem}}@media(min-width:1600px){.slide.bulletList ul{max-width:1100px}.slide.bulletList li{font-size:3rem;line-height:2.2}}.slide.twoColumnText{display:flex;flex-direction:row;font-size:2rem;line-height:1.7;justify-content:center;align-items:stretch;gap:4rem;text-align:center}.slide.twoColumnText>div{flex:1;max-width:600px;padding:2.5rem;border:1px solid white;border-radius:12px;box-shadow:0 12px 30px #00000014}@media(orientation:portrait){.slide.twoColumnText{flex-direction:column;font-size:3rem;line-height:2;gap:2rem}.slide.twoColumnText>div{max-width:100%}}@media(orientation:landscape){.slide.twoColumnText{font-size:1.5rem}.slide.twoColumnText>div{max-width:100%}}@media(min-width:1600px){.slide.twoColumnText{font-size:3rem;line-height:1.9;gap:3rem}.slide.twoColumnText>div{max-width:800px;padding:3rem}}.slide.imageSlide{padding:0;align-items:center;justify-content:center}.slide.imageSlide img{max-width:90%;max-height:90%;object-fit:contain}.slide.imageWithTitle{align-items:center;text-align:center;gap:2.5rem}.slide.imageWithTitle h1{font-size:2.5rem;font-weight:600;line-height:1.2;margin:0}.slide.imageWithTitle img{max-width:85%;max-height:70%;object-fit:contain}@media(orientation:portrait){.slide.imageWithTitle h1{font-size:3.2rem}.slide.imageWithTitle img{max-width:95%;max-height:65%}}.slide.imageWithCaption{margin:0;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:2.5rem}.slide.imageWithCaption img{max-width:85%;max-height:65%;object-fit:contain;display:block}.slide.imageWithCaption figcaption{font-size:2.4rem;line-height:1.6;max-width:800px;margin:0;opacity:.85}@media(orientation:portrait){.slide.imageWithCaption img{max-width:95%;max-height:60%}.slide.imageWithCaption figcaption{font-size:2.8rem}}.slide.imageLeftBulletsRight{flex-direction:row;align-items:center;justify-content:center;gap:4rem;text-align:left}.slide.imageLeftBulletsRight img{max-width:45%;max-height:75%;object-fit:contain}.slide.imageLeftBulletsRight ul{max-width:45%;margin:0;padding-left:2rem}.slide.imageLeftBulletsRight li{font-size:2rem;line-height:1.5;margin-bottom:1rem}@media(orientation:portrait){.slide.imageLeftBulletsRight{flex-direction:column;text-align:left}.slide.imageLeftBulletsRight img{max-width:85%}.slide.imageLeftBulletsRight ul{max-width:100%;padding-left:0;list-style-position:inside}}.slide.imageRightBulletsLeft{flex-direction:row;align-items:center;justify-content:center;gap:4rem;text-align:left}.slide.imageRightBulletsLeft img{order:2;max-width:45%;max-height:75%;object-fit:contain}.slide.imageRightBulletsLeft ul{order:1;max-width:45%;margin:0;padding-left:2rem}.slide.imageRightBulletsLeft li{font-size:2rem;line-height:1.5;margin-bottom:1rem}@media(orientation:portrait){.slide.imageRightBulletsLeft{flex-direction:column;text-align:left}.slide.imageRightBulletsLeft ul{order:1;max-width:100%;padding-left:0;list-style-position:inside}.slide.imageRightBulletsLeft img{order:2;max-width:85%}}.slide.table{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:4rem 2rem}.slide.table table{border-collapse:collapse;width:100%;max-width:1100px;table-layout:fixed}.slide.table td{padding:1rem;font-size:2.4rem;border:2px solid var(--primaryColor);word-break:break-word;text-align:center}@media(orientation:portrait){.slide.table td{font-size:1.8rem;padding:1rem 1.2rem}}.slide.barChart{align-items:center;justify-content:center;text-align:left}.slide.barChart .bar-chart{width:100%;max-width:900px;display:flex;flex-direction:column;gap:2.4rem}.slide.barChart .bar-row{display:flex;align-items:center;gap:2rem}.slide.barChart .bar-label{width:220px;flex-shrink:0;font-size:2.4rem;opacity:.9}.slide.barChart .bar-track{flex:1;height:28px;background:#00000014;border-radius:14px;overflow:hidden}.slide.barChart .bar-fill{height:100%;width:0;background:#f5c542;border-radius:14px;transition:width .6s ease}.slide.barChart .bar-value{width:60px;text-align:right;font-size:2.2rem;opacity:.85}@media(orientation:portrait){.slide.barChart .bar-label{width:140px;font-size:2rem}.slide.barChart .bar-value{width:48px;font-size:1.8rem}.slide.barChart .bar-track{height:22px}}.slide.progressbar{align-items:center;justify-content:center;text-align:center;gap:3rem}.slide.progressbar .progressbar-item{width:90%;max-width:900px}.slide.progressbar .progressbar-label{font-size:2.6rem;font-weight:500;margin-bottom:1.4rem}.slide.progressbar .progressbar-track{position:relative;height:46px;border-radius:999px;background:#00000040;box-shadow:inset 0 4px 8px #00000026}.slide.progressbar .progressbar-fill{height:100%;width:0;border-radius:999px;background:#f5c542;transition:width .6s ease;display:flex;align-items:center;padding-left:1.8rem;font-size:2.2rem;font-weight:600;color:#222}.slide.progressbar .progressbar-fill:before{content:attr(data-value) "%"}.slide.progressbar .progressbar-track:after{content:"100%";position:absolute;right:-75px;top:50%;transform:translateY(-50%);font-size:2.2rem;font-weight:500;opacity:.75}.slide.quoteSlide{margin:0;width:100%;align-items:center;justify-content:center;text-align:center;padding:6rem 10rem}.slide.quoteSlide p{font-size:4.2rem;line-height:1.4;font-weight:400;max-width:1100px;margin:0 auto;position:relative}.slide.quoteSlide p:before,.slide.quoteSlide p:after{font-size:6rem;opacity:.15;position:absolute}.slide.quoteSlide p:before{content:"\201c";left:-4rem;top:-2rem}.slide.quoteSlide p:after{content:"\201d";right:-4rem;bottom:-2rem}.slide.quoteSlide footer{margin-top:3rem;font-size:2.4rem;font-weight:500;opacity:.75}.slide.keyIdeasSlide{padding:2rem 6rem;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto;align-content:center;justify-items:center;gap:4rem;text-align:center}.slide.keyIdeasSlide .key-idea{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2.5rem}.slide.keyIdeasSlide .icon{font-size:8rem;line-height:1}.slide.keyIdeasSlide .label{font-size:3.6rem;font-weight:700;letter-spacing:.05em}@media(orientation:landscape)and (max-height:500px){.slide.keyIdeasSlide{padding:1.5rem 4rem;gap:3rem}.slide.keyIdeasSlide .icon{font-size:5rem}.slide.keyIdeasSlide .label{font-size:2.2rem}.slide.keyIdeasSlide .key-idea{gap:1.5rem}}.slide.fillImage{padding:0;display:flex}.slide.fillImage img{width:100%;height:100%;object-fit:cover}.slide.eq{display:flex;color:gray;flex-direction:row;align-items:flex-start;justify-content:space-between;gap:1rem;padding-left:3rem;padding-right:3rem;overflow:hidden}.slide.eq .eq-lines{flex:0 0 45%;min-width:0;overflow:hidden;list-style:none;padding:0;margin:0;display:flex;flex-direction:column}.slide.eq .eq-lines li{padding:4px 6px;font-size:1.25rem;line-height:1.3;border-bottom:1px solid rgba(255,255,255,.18);background:#ffffff08;overflow-x:auto;overflow-y:hidden;max-width:100%}.highlighted{background:#967c342e;color:#fff;font-weight:600;border:2px solid gold;border-radius:10px}.slide.eq .eq-side-panel{flex:0 0 55%;min-width:0;overflow:hidden;padding:6px;background:#00000059;border:1px solid rgba(255,255,255,.18);border-radius:16px;display:flex;flex-direction:column;gap:4px}.slide.eq .eq-explain-item{font-size:1.25rem;line-height:1.5;text-align:justify;background:#ffffff0f;padding:14px 18px;border-radius:12px;overflow-wrap:break-word}.slide.eq .eq-explain-image img{width:70%;margin:0 auto;display:block;border-radius:12px}@media(min-width:1024px){.slide.eq{gap:1.5rem}.slide.eq .eq-lines li{font-size:1.5rem}.slide.eq .eq-explain-item{font-size:1.2rem}}@media(min-width:1600px){.slide.eq{gap:2rem;padding-left:4rem;padding-right:4rem}.slide.eq .eq-lines,.slide.eq .eq-side-panel{flex:0 0 50%}.slide.eq .eq-lines li{font-size:2.25rem}.slide.eq .eq-explain-item{font-size:2.25rem;line-height:1.5em}}
@@ -0,0 +1,6 @@
1
+
2
+ :root {
3
+ --backgroundColor: #081b7a;
4
+ --primaryColor: #ccd0e4;
5
+ }
6
+
@@ -206,7 +206,6 @@ var goldenDeckV1 = {
206
206
 
207
207
  // src/spec/slideTypesV1.js
208
208
  var SLIDE_TYPES_V1 = [
209
- "titleSlide",
210
209
  "titleAndSubtitle",
211
210
  "titleAndPara",
212
211
  "bulletList",
@@ -217,14 +216,10 @@ var SLIDE_TYPES_V1 = [
217
216
  "imageLeftBulletsRight",
218
217
  "imageRightBulletsLeft",
219
218
  "table",
220
- "statistic",
221
- "donutChart",
222
- "bigNumber",
223
219
  "barChart",
220
+ "progressbar",
224
221
  "quoteSlide",
225
- "quoteWithImage",
226
- "cornerWordsSlide",
227
- "contactSlide",
222
+ "keyIdeasSlide",
228
223
  "fillImage",
229
224
  "eq"
230
225
  ];
@@ -157,8 +157,8 @@ var ImageWithTitleSlide = {
157
157
  render() {
158
158
  return `
159
159
  <section class="slide imageWithTitle">
160
- <img src="${src}" alt="" />
161
160
  <h1>${title}</h1>
161
+ <img src="${src}" alt="" />
162
162
  </section>
163
163
  `;
164
164
  }
@@ -262,13 +262,15 @@ var TableSlide = {
262
262
  type: "table",
263
263
  render() {
264
264
  return `
265
- <table class="slide table">
265
+ <section class="slide table">
266
+ <table>
266
267
  <tbody>
267
268
  ${rows.map(
268
269
  (row) => `<tr>${row.map((cell) => `<td>${cell}</td>`).join("")}</tr>`
269
270
  ).join("")}
270
271
  </tbody>
271
272
  </table>
273
+ </section>
272
274
  `;
273
275
  }
274
276
  });
@@ -339,7 +341,12 @@ var Progressbar = {
339
341
  <div class="progressbar-item">
340
342
  <div class="progressbar-label">${b.label}</div>
341
343
  <div class="progressbar-track">
342
- <div class="progressbar-fill" style="width:${b.value}%"></div>
344
+ <div
345
+ class="progressbar-fill"
346
+ style="width:${b.value}%"
347
+ data-value="${b.value}"
348
+ ></div>
349
+
343
350
  </div>
344
351
  </div>
345
352
  `;
@@ -411,25 +418,32 @@ var EqSlide = {
411
418
  type: "eq",
412
419
  fromJSON(raw) {
413
420
  const lines = raw.data ?? [];
421
+ const maxVisible = 3;
414
422
  return Object.freeze({
415
423
  type: "eq",
416
424
  lines,
417
- render({ visibleCount = lines.length } = {}) {
418
- const end = Math.min(visibleCount, lines.length);
419
- const visibleLines = lines.slice(0, end);
420
- const activeLine = end > 0 ? lines[end - 1] : null;
425
+ render({ activeIndex = -1 } = {}) {
426
+ let start = 0;
427
+ if (activeIndex >= maxVisible) {
428
+ start = activeIndex - (maxVisible - 1);
429
+ }
430
+ const visibleLines = lines.slice(start);
431
+ const activeLine = activeIndex >= 0 && activeIndex < lines.length ? lines[activeIndex] : null;
421
432
  const spItems = activeLine?.spItems ?? [];
422
433
  return `
423
- <section class="slide eq imageRightBulletsLeft">
434
+ <section class="slide eq">
424
435
 
425
- <!-- LEFT: lines (pure bullet behavior) -->
426
436
  <ul class="eq-lines">
427
- ${visibleLines.map(
428
- (line) => `<li class="eq-line">${line.content}</li>`
429
- ).join("")}
437
+ ${visibleLines.map((line, index) => {
438
+ const realIndex = start + index;
439
+ return `
440
+ <li class="eq-line ${realIndex === activeIndex ? "highlighted" : ""}">
441
+ ${line.content}
442
+ </li>
443
+ `;
444
+ }).join("")}
430
445
  </ul>
431
446
 
432
- <!-- RIGHT: explanation panel -->
433
447
  <div class="eq-side-panel">
434
448
  ${spItems.map((item) => {
435
449
  if (item.type === "spImage") {
@@ -188,8 +188,8 @@ var TaleemPlayer = (() => {
188
188
  render() {
189
189
  return `
190
190
  <section class="slide imageWithTitle">
191
- <img src="${src}" alt="" />
192
191
  <h1>${title}</h1>
192
+ <img src="${src}" alt="" />
193
193
  </section>
194
194
  `;
195
195
  }
@@ -293,13 +293,15 @@ var TaleemPlayer = (() => {
293
293
  type: "table",
294
294
  render() {
295
295
  return `
296
- <table class="slide table">
296
+ <section class="slide table">
297
+ <table>
297
298
  <tbody>
298
299
  ${rows.map(
299
300
  (row) => `<tr>${row.map((cell) => `<td>${cell}</td>`).join("")}</tr>`
300
301
  ).join("")}
301
302
  </tbody>
302
303
  </table>
304
+ </section>
303
305
  `;
304
306
  }
305
307
  });
@@ -370,7 +372,12 @@ var TaleemPlayer = (() => {
370
372
  <div class="progressbar-item">
371
373
  <div class="progressbar-label">${b.label}</div>
372
374
  <div class="progressbar-track">
373
- <div class="progressbar-fill" style="width:${b.value}%"></div>
375
+ <div
376
+ class="progressbar-fill"
377
+ style="width:${b.value}%"
378
+ data-value="${b.value}"
379
+ ></div>
380
+
374
381
  </div>
375
382
  </div>
376
383
  `;
@@ -442,25 +449,32 @@ var TaleemPlayer = (() => {
442
449
  type: "eq",
443
450
  fromJSON(raw) {
444
451
  const lines = raw.data ?? [];
452
+ const maxVisible = 3;
445
453
  return Object.freeze({
446
454
  type: "eq",
447
455
  lines,
448
- render({ visibleCount = lines.length } = {}) {
449
- const end = Math.min(visibleCount, lines.length);
450
- const visibleLines = lines.slice(0, end);
451
- const activeLine = end > 0 ? lines[end - 1] : null;
456
+ render({ activeIndex = -1 } = {}) {
457
+ let start = 0;
458
+ if (activeIndex >= maxVisible) {
459
+ start = activeIndex - (maxVisible - 1);
460
+ }
461
+ const visibleLines = lines.slice(start);
462
+ const activeLine = activeIndex >= 0 && activeIndex < lines.length ? lines[activeIndex] : null;
452
463
  const spItems = activeLine?.spItems ?? [];
453
464
  return `
454
- <section class="slide eq imageRightBulletsLeft">
465
+ <section class="slide eq">
455
466
 
456
- <!-- LEFT: lines (pure bullet behavior) -->
457
467
  <ul class="eq-lines">
458
- ${visibleLines.map(
459
- (line) => `<li class="eq-line">${line.content}</li>`
460
- ).join("")}
468
+ ${visibleLines.map((line, index) => {
469
+ const realIndex = start + index;
470
+ return `
471
+ <li class="eq-line ${realIndex === activeIndex ? "highlighted" : ""}">
472
+ ${line.content}
473
+ </li>
474
+ `;
475
+ }).join("")}
461
476
  </ul>
462
477
 
463
- <!-- RIGHT: explanation panel -->
464
478
  <div class="eq-side-panel">
465
479
  ${spItems.map((item) => {
466
480
  if (item.type === "spImage") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taleem-player",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
4
4
  "type": "module",
5
5
  "main": "./dist/taleem-player.umd.js",
6
6
  "module": "./dist/taleem-player.esm.js",