@anantagnanam/lms 0.0.0-stage → 0.2.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 (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -2
  3. package/astro/client.ts +355 -0
  4. package/astro/components/CertificateCard.astro +83 -0
  5. package/astro/components/CourseCard.astro +61 -0
  6. package/astro/components/CourseCatalog.astro +96 -0
  7. package/astro/components/CourseOverview.astro +308 -0
  8. package/astro/components/LearnerDashboard.astro +127 -0
  9. package/astro/components/LearningShell.astro +37 -0
  10. package/astro/components/LessonAvailabilityNote.astro +26 -0
  11. package/astro/components/LessonContent.astro +53 -0
  12. package/astro/components/LessonPlayer.astro +302 -0
  13. package/astro/components/MediaPlayer.astro +111 -0
  14. package/astro/components/index.ts +7 -0
  15. package/astro/layouts/AcademyLayout.astro +84 -0
  16. package/astro/media-player.ts +99 -0
  17. package/astro/pages/author-preview.astro +71 -0
  18. package/astro/pages/certificate.astro +57 -0
  19. package/astro/pages/cohort.astro +102 -0
  20. package/astro/pages/course.astro +90 -0
  21. package/astro/pages/dashboard.astro +34 -0
  22. package/astro/pages/index.astro +40 -0
  23. package/astro/pages/lesson.astro +103 -0
  24. package/astro/pages/library.astro +173 -0
  25. package/astro/pages/paths.astro +73 -0
  26. package/astro/pages/teach.astro +15 -0
  27. package/astro/quiz-drafts.ts +87 -0
  28. package/astro/quiz-player.ts +362 -0
  29. package/astro/styles.css +1300 -0
  30. package/dist/admin.d.ts +34 -0
  31. package/dist/admin.js +3231 -0
  32. package/dist/admin.js.map +1 -0
  33. package/dist/astro.d.ts +11 -0
  34. package/dist/astro.js +52 -0
  35. package/dist/astro.js.map +1 -0
  36. package/dist/commerce.d.ts +72 -0
  37. package/dist/commerce.js +0 -0
  38. package/dist/config-BX3beTpM.js +15 -0
  39. package/dist/config-BX3beTpM.js.map +1 -0
  40. package/dist/constants-Cnx7k82Z.js +161 -0
  41. package/dist/constants-Cnx7k82Z.js.map +1 -0
  42. package/dist/csv-DKq_4OWU.js +55 -0
  43. package/dist/csv-DKq_4OWU.js.map +1 -0
  44. package/dist/errors-ChzJS9al.js +16 -0
  45. package/dist/errors-ChzJS9al.js.map +1 -0
  46. package/dist/index.d.ts +13 -0
  47. package/dist/index.js +19 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/runtime.d.ts +773 -0
  50. package/dist/runtime.js +2840 -0
  51. package/dist/runtime.js.map +1 -0
  52. package/dist/schemas.d.ts +651 -0
  53. package/dist/schemas.js +347 -0
  54. package/dist/schemas.js.map +1 -0
  55. package/dist/server.d.ts +40 -0
  56. package/dist/server.js +65 -0
  57. package/dist/server.js.map +1 -0
  58. package/dist/types.d.ts +387 -0
  59. package/dist/types.js +0 -0
  60. package/package.json +83 -4
@@ -0,0 +1,1300 @@
1
+ .lms-root {
2
+ --lms-bg: var(--bg, #f7faf8);
3
+ --lms-surface: var(--surface, #fff);
4
+ --lms-soft: var(--surface-muted, #f2f7f3);
5
+ --lms-text: var(--text, #18271e);
6
+ --lms-muted: var(--muted, #637268);
7
+ --lms-border: var(--border, #d9e3dc);
8
+ --lms-accent: var(--brand, #237747);
9
+ --lms-accent-strong: var(--brand-strong, #195734);
10
+ --lms-tint: var(--brand-soft, #e5f3e9);
11
+ color: var(--lms-text);
12
+ font-family: var(
13
+ --font-body,
14
+ ui-sans-serif,
15
+ system-ui,
16
+ -apple-system,
17
+ BlinkMacSystemFont,
18
+ "Segoe UI",
19
+ sans-serif
20
+ );
21
+ font-size: 16px;
22
+ line-height: 1.65;
23
+ }
24
+ .lms-root * {
25
+ box-sizing: border-box;
26
+ }
27
+ .lms-root [hidden] {
28
+ display: none !important;
29
+ }
30
+ .lms-root a {
31
+ color: inherit;
32
+ text-underline-offset: 4px;
33
+ }
34
+ .lms-root h1,
35
+ .lms-root h2,
36
+ .lms-root h3 {
37
+ font-family: var(--font-display, var(--font-body, inherit));
38
+ line-height: 1.18;
39
+ letter-spacing: -0.035em;
40
+ font-weight: 650;
41
+ }
42
+ .lms-root h1 {
43
+ font-size: clamp(2.1rem, 5vw, 4.2rem);
44
+ margin-block: 0 1.4rem;
45
+ }
46
+ .lms-root h2 {
47
+ font-size: clamp(1.5rem, 2.8vw, 2rem);
48
+ margin-block: 0 1rem;
49
+ }
50
+ .lms-root h3 {
51
+ font-size: 1.25rem;
52
+ }
53
+ .lms-root p {
54
+ margin-block: 0.6rem 1.2rem;
55
+ }
56
+ .lms-root small {
57
+ color: var(--lms-muted);
58
+ font-size: 0.8rem;
59
+ }
60
+ .lms-root button,
61
+ .lms-root input,
62
+ .lms-root select,
63
+ .lms-root textarea {
64
+ font: inherit;
65
+ }
66
+ .lms-container {
67
+ max-width: 1200px;
68
+ margin-inline: auto;
69
+ padding-inline: clamp(1.2rem, 4vw, 2.5rem);
70
+ padding-block-end: 5rem;
71
+ }
72
+ .lms-eyebrow {
73
+ color: var(--lms-accent);
74
+ font-size: 0.68rem !important;
75
+ font-weight: 750;
76
+ letter-spacing: 0.14em;
77
+ text-transform: uppercase;
78
+ margin-block: 0 0.9rem !important;
79
+ }
80
+ .lms-lead {
81
+ font-size: clamp(1rem, 2vw, 1.2rem);
82
+ color: var(--lms-muted);
83
+ max-width: 62ch;
84
+ line-height: 1.7;
85
+ }
86
+ .lms-muted {
87
+ color: var(--lms-muted);
88
+ font-size: 0.875rem;
89
+ }
90
+ .lms-text {
91
+ white-space: pre-line;
92
+ overflow-wrap: anywhere;
93
+ max-width: 76ch;
94
+ }
95
+ .lms-skip {
96
+ position: absolute;
97
+ top: 0;
98
+ inset-inline-start: 1rem;
99
+ transform: translateY(-120%);
100
+ background: var(--lms-accent);
101
+ color: #fff !important;
102
+ padding: 1rem;
103
+ z-index: 100;
104
+ }
105
+ .lms-skip:focus {
106
+ transform: translateY(0);
107
+ }
108
+ .lms-site-header {
109
+ max-width: 1320px;
110
+ margin-inline: auto;
111
+ padding: 1.3rem clamp(1.2rem, 4vw, 2.5rem);
112
+ display: flex;
113
+ align-items: center;
114
+ justify-content: space-between;
115
+ border-block-end: 1px solid var(--lms-border);
116
+ gap: 2rem;
117
+ }
118
+ .lms-brand {
119
+ display: flex;
120
+ gap: 0.8rem;
121
+ align-items: center;
122
+ text-decoration: none;
123
+ font-weight: 700;
124
+ font-size: 1.05rem;
125
+ letter-spacing: -0.03em;
126
+ white-space: nowrap;
127
+ }
128
+ .lms-brand small {
129
+ display: block;
130
+ font-size: 0.55rem;
131
+ letter-spacing: 0.22em;
132
+ font-weight: 600;
133
+ }
134
+ .lms-brand-mark {
135
+ font-size: 2.6rem;
136
+ font-weight: 300;
137
+ color: var(--lms-accent);
138
+ }
139
+ .lms-site-header nav {
140
+ display: flex;
141
+ align-items: center;
142
+ gap: 1.5rem;
143
+ font-size: 0.85rem;
144
+ }
145
+ .lms-site-header nav a {
146
+ text-decoration: none;
147
+ }
148
+ .lms-site-footer {
149
+ border-block-start: 1px solid var(--lms-border);
150
+ padding: 2.2rem clamp(1.2rem, 4vw, 3rem);
151
+ display: flex;
152
+ align-items: center;
153
+ justify-content: space-between;
154
+ gap: 1rem;
155
+ font-size: 0.85rem;
156
+ max-width: 1320px;
157
+ margin-inline: auto;
158
+ }
159
+ .lms-site-footer p {
160
+ color: var(--lms-muted);
161
+ margin: 0;
162
+ }
163
+ .lms-subnav {
164
+ display: flex;
165
+ align-items: center;
166
+ gap: 1.5rem;
167
+ max-width: 1200px;
168
+ margin-inline: auto;
169
+ padding: 1.5rem clamp(1.2rem, 4vw, 2.5rem);
170
+ font-size: 0.8rem;
171
+ border-block-end: 1px solid var(--lms-border);
172
+ }
173
+ .lms-subnav a {
174
+ text-decoration: none;
175
+ color: var(--lms-muted);
176
+ }
177
+ .lms-subnav a[aria-current="page"] {
178
+ color: var(--lms-accent);
179
+ font-weight: 650;
180
+ }
181
+ .lms-hero {
182
+ padding-block: clamp(3.5rem, 9vw, 6.5rem) 4rem;
183
+ max-width: 850px;
184
+ }
185
+ .lms-hero h1 {
186
+ max-width: 16ch;
187
+ }
188
+ .lms-hero-notes {
189
+ display: flex;
190
+ gap: 1.5rem;
191
+ flex-wrap: wrap;
192
+ color: var(--lms-muted);
193
+ font-size: 0.8rem;
194
+ margin-block-start: 2rem;
195
+ }
196
+ .lms-section-heading {
197
+ display: flex;
198
+ gap: 1rem;
199
+ align-items: center;
200
+ justify-content: space-between;
201
+ margin-block: 1.5rem;
202
+ }
203
+ .lms-section-heading h2 {
204
+ margin: 0;
205
+ }
206
+ .lms-section-heading > a,
207
+ .lms-section-heading > span {
208
+ font-size: 0.8rem;
209
+ color: var(--lms-muted);
210
+ }
211
+ .lms-filters {
212
+ display: grid;
213
+ grid-template-columns: minmax(200px, 2fr) minmax(120px, 1fr) minmax(160px, 1fr) auto;
214
+ gap: 0.85rem;
215
+ align-items: end;
216
+ background: var(--lms-surface);
217
+ border: 1px solid var(--lms-border);
218
+ border-radius: 0.65rem;
219
+ padding: 1rem;
220
+ margin-block-end: 2rem;
221
+ }
222
+ .lms-filters label,
223
+ .lms-form label {
224
+ display: grid;
225
+ gap: 0.35rem;
226
+ font-size: 0.78rem;
227
+ font-weight: 600;
228
+ }
229
+ .lms-root input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]),
230
+ .lms-root select,
231
+ .lms-root textarea {
232
+ width: 100%;
233
+ padding: 0.7rem 0.9rem;
234
+ min-height: 44px;
235
+ border: 1px solid var(--lms-border);
236
+ border-radius: 0.4rem;
237
+ background: var(--lms-surface);
238
+ color: var(--lms-text);
239
+ font-size: 0.88rem;
240
+ }
241
+ .lms-root textarea {
242
+ resize: vertical;
243
+ }
244
+ .lms-root input[type="checkbox"],
245
+ .lms-root input[type="radio"] {
246
+ accent-color: var(--lms-accent);
247
+ width: 1.15rem;
248
+ height: 1.15rem;
249
+ flex-shrink: 0;
250
+ }
251
+ .lms-root :focus-visible {
252
+ outline: 2px solid var(--lms-accent);
253
+ outline-offset: 4px;
254
+ }
255
+ .lms-btn {
256
+ display: inline-flex;
257
+ justify-content: center;
258
+ align-items: center;
259
+ gap: 0.6rem;
260
+ min-height: 46px;
261
+ background: var(--lms-accent);
262
+ color: #fff !important;
263
+ text-decoration: none !important;
264
+ border: 1px solid var(--lms-accent);
265
+ border-radius: 0.45rem;
266
+ padding: 0.75rem 1.1rem;
267
+ font-size: 0.85rem;
268
+ font-weight: 650;
269
+ cursor: pointer;
270
+ transition: background 0.15s;
271
+ }
272
+ .lms-btn:hover {
273
+ background: var(--lms-accent-strong);
274
+ border-color: var(--lms-accent-strong);
275
+ }
276
+ .lms-btn:disabled {
277
+ opacity: 0.6;
278
+ cursor: wait;
279
+ }
280
+ .lms-btn-outline {
281
+ background: transparent;
282
+ color: var(--lms-accent) !important;
283
+ border-color: var(--lms-border);
284
+ }
285
+ .lms-btn-outline:hover {
286
+ background: var(--lms-tint);
287
+ border-color: var(--lms-accent);
288
+ }
289
+ .lms-btn-small {
290
+ min-height: 38px;
291
+ padding: 0.5rem 0.85rem;
292
+ }
293
+ .lms-actions {
294
+ display: flex;
295
+ gap: 0.65rem;
296
+ align-items: center;
297
+ flex-wrap: wrap;
298
+ margin-block: 1rem;
299
+ }
300
+ .lms-cards {
301
+ display: grid;
302
+ grid-template-columns: repeat(3, minmax(0, 1fr));
303
+ gap: 1.4rem;
304
+ }
305
+ .lms-course-card {
306
+ display: flex;
307
+ flex-direction: column;
308
+ overflow: hidden;
309
+ background: var(--lms-surface);
310
+ border: 1px solid var(--lms-border);
311
+ border-radius: 0.8rem;
312
+ transition:
313
+ border-color 0.15s,
314
+ box-shadow 0.15s;
315
+ }
316
+ .lms-course-card:hover {
317
+ border-color: var(--lms-accent);
318
+ box-shadow: 0 6px 20px rgb(18 53 30/0.055);
319
+ }
320
+ .lms-card-art {
321
+ display: block;
322
+ position: relative;
323
+ height: 210px;
324
+ background: var(--lms-tint);
325
+ text-decoration: none !important;
326
+ overflow: hidden;
327
+ }
328
+ .lms-card-art > img,
329
+ .lms-card-art picture,
330
+ .lms-card-art picture img {
331
+ width: 100%;
332
+ height: 100%;
333
+ object-fit: cover;
334
+ }
335
+ .lms-course-cover {
336
+ height: 100%;
337
+ display: flex;
338
+ flex-direction: column;
339
+ align-items: center;
340
+ justify-content: center;
341
+ color: var(--lms-accent);
342
+ gap: 0.2rem;
343
+ background:
344
+ radial-gradient(ellipse at 80% 20%, var(--lms-surface) 0, transparent 60%), var(--lms-tint);
345
+ }
346
+ .lms-course-cover > span {
347
+ font-size: 0.64rem;
348
+ letter-spacing: 0.1em;
349
+ text-transform: uppercase;
350
+ }
351
+ .lms-free-label {
352
+ position: absolute;
353
+ top: 1rem;
354
+ inset-inline-end: 1rem;
355
+ border-radius: 0.25rem;
356
+ letter-spacing: 0.09em;
357
+ font-size: 0.6rem;
358
+ font-weight: 750;
359
+ padding: 0.2rem 0.45rem;
360
+ background: var(--lms-surface);
361
+ color: var(--lms-accent);
362
+ }
363
+ .lms-card-body {
364
+ padding: 1.35rem;
365
+ display: flex;
366
+ flex-direction: column;
367
+ flex: 1;
368
+ }
369
+ .lms-card-meta {
370
+ display: flex;
371
+ justify-content: space-between;
372
+ gap: 0.7rem;
373
+ font-size: 0.68rem;
374
+ color: var(--lms-muted);
375
+ margin-block-end: 0.75rem;
376
+ text-transform: capitalize;
377
+ }
378
+ .lms-card-body h2 {
379
+ font-size: 1.35rem;
380
+ line-height: 1.3;
381
+ letter-spacing: -0.02em;
382
+ }
383
+ .lms-card-body h2 a {
384
+ text-decoration: none;
385
+ }
386
+ .lms-card-body > p {
387
+ font-size: 0.85rem;
388
+ color: var(--lms-muted);
389
+ margin-block: 0 1.5rem;
390
+ }
391
+ .lms-card-footer {
392
+ display: flex;
393
+ align-items: center;
394
+ justify-content: space-between;
395
+ font-size: 0.72rem;
396
+ color: var(--lms-muted);
397
+ border-block-start: 1px solid var(--lms-border);
398
+ padding-block-start: 1rem;
399
+ margin-block-start: auto;
400
+ }
401
+ .lms-card-footer > span:last-child {
402
+ font-size: 1.4rem;
403
+ color: var(--lms-accent);
404
+ }
405
+ .lms-card-body > small {
406
+ margin-block-start: 0.7rem;
407
+ }
408
+ .lms-empty {
409
+ padding: 3.5rem 1.5rem;
410
+ text-align: center;
411
+ background: var(--lms-surface);
412
+ border: 1px dashed var(--lms-border);
413
+ border-radius: 0.7rem;
414
+ margin-block: 1.5rem;
415
+ }
416
+ .lms-empty > span {
417
+ font-size: 2.5rem;
418
+ color: var(--lms-accent);
419
+ }
420
+ .lms-empty > p {
421
+ color: var(--lms-muted);
422
+ }
423
+ .lms-pagination {
424
+ display: flex;
425
+ justify-content: center;
426
+ padding-block: 2rem;
427
+ }
428
+ .lms-breadcrumbs {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: 0.6rem;
432
+ flex-wrap: wrap;
433
+ font-size: 0.72rem;
434
+ color: var(--lms-muted);
435
+ padding-block: 1.7rem;
436
+ }
437
+ .lms-breadcrumbs a {
438
+ text-decoration: none;
439
+ }
440
+ .lms-course-hero {
441
+ display: grid;
442
+ grid-template-columns: minmax(0, 1fr) 340px;
443
+ gap: 3rem;
444
+ align-items: start;
445
+ padding-block: 2rem 3rem;
446
+ }
447
+ .lms-course-hero h1 {
448
+ font-size: clamp(2rem, 4vw, 3.4rem);
449
+ }
450
+ .lms-tags {
451
+ display: flex;
452
+ gap: 0.6rem;
453
+ flex-wrap: wrap;
454
+ margin-block: 1.5rem;
455
+ }
456
+ .lms-tags > span {
457
+ border: 1px solid var(--lms-border);
458
+ border-radius: 1rem;
459
+ padding: 0.25rem 0.65rem;
460
+ font-size: 0.68rem;
461
+ text-transform: capitalize;
462
+ background: var(--lms-surface);
463
+ }
464
+ .lms-instructor {
465
+ font-size: 0.85rem;
466
+ color: var(--lms-muted);
467
+ }
468
+ .lms-enroll-card {
469
+ background: var(--lms-surface);
470
+ border: 1px solid var(--lms-border);
471
+ border-radius: 0.8rem;
472
+ box-shadow: 0 8px 25px rgb(18 53 30/0.06);
473
+ padding: 1.5rem;
474
+ }
475
+ .lms-enroll-card > img {
476
+ width: calc(100% + 3rem);
477
+ margin: -1.5rem -1.5rem 1.5rem;
478
+ height: 185px;
479
+ object-fit: cover;
480
+ border-radius: 0.8rem 0.8rem 0 0;
481
+ }
482
+ .lms-enroll-card h2 {
483
+ font-size: 1.4rem;
484
+ }
485
+ .lms-enroll-card .lms-btn {
486
+ width: 100%;
487
+ margin-block: 0.35rem;
488
+ }
489
+ .lms-benefits {
490
+ list-style: none;
491
+ padding: 0;
492
+ color: var(--lms-muted);
493
+ font-size: 0.78rem;
494
+ margin-block: 1.2rem 0;
495
+ }
496
+ .lms-benefits li {
497
+ padding-block: 0.35rem;
498
+ }
499
+ .lms-benefits li:before {
500
+ content: "✓";
501
+ color: var(--lms-accent);
502
+ margin-inline-end: 0.6rem;
503
+ }
504
+ .lms-course-content {
505
+ max-width: 780px;
506
+ }
507
+ .lms-content-section {
508
+ padding-block: 1.7rem;
509
+ border-block-start: 1px solid var(--lms-border);
510
+ }
511
+ .lms-content-section > p {
512
+ color: var(--lms-muted);
513
+ }
514
+ .lms-outcomes {
515
+ background: var(--lms-surface);
516
+ border: 1px solid var(--lms-border);
517
+ padding: 1.6rem;
518
+ border-radius: 0.65rem;
519
+ }
520
+ .lms-outcomes ul {
521
+ list-style: none;
522
+ padding: 0;
523
+ display: grid;
524
+ grid-template-columns: repeat(2, minmax(0, 1fr));
525
+ gap: 1rem;
526
+ font-size: 0.9rem;
527
+ }
528
+ .lms-outcomes li {
529
+ display: flex;
530
+ gap: 0.6rem;
531
+ align-items: start;
532
+ }
533
+ .lms-outcomes li > span {
534
+ color: var(--lms-accent);
535
+ }
536
+ .lms-curriculum details {
537
+ border: 1px solid var(--lms-border);
538
+ border-radius: 0.5rem;
539
+ margin-block: 0.65rem;
540
+ background: var(--lms-surface);
541
+ overflow: hidden;
542
+ }
543
+ .lms-curriculum summary {
544
+ display: flex;
545
+ align-items: center;
546
+ justify-content: space-between;
547
+ gap: 1rem;
548
+ padding: 1.1rem;
549
+ cursor: pointer;
550
+ list-style: none;
551
+ }
552
+ .lms-curriculum summary:after {
553
+ content: "+";
554
+ color: var(--lms-accent);
555
+ }
556
+ .lms-curriculum details[open] summary:after {
557
+ content: "−";
558
+ }
559
+ .lms-curriculum summary > span:first-child {
560
+ flex: 1;
561
+ }
562
+ .lms-curriculum summary small {
563
+ display: block;
564
+ font-size: 0.6rem;
565
+ letter-spacing: 0.1em;
566
+ margin-block-end: 0.35rem;
567
+ }
568
+ .lms-curriculum summary strong {
569
+ font-size: 0.95rem;
570
+ }
571
+ .lms-curriculum summary > span:nth-child(2) {
572
+ font-size: 0.72rem;
573
+ color: var(--lms-muted);
574
+ }
575
+ .lms-curriculum details > p {
576
+ padding-inline: 1.1rem;
577
+ font-size: 0.85rem;
578
+ }
579
+ .lms-curriculum ol {
580
+ list-style: none;
581
+ padding: 0;
582
+ margin: 0;
583
+ border-block-start: 1px solid var(--lms-border);
584
+ }
585
+ .lms-curriculum li {
586
+ display: flex;
587
+ gap: 0.8rem;
588
+ align-items: center;
589
+ padding: 0.8rem 1.1rem;
590
+ border-block-start: 1px solid var(--lms-border);
591
+ }
592
+ .lms-curriculum li:first-child {
593
+ border: 0;
594
+ }
595
+ .lms-curriculum li > div {
596
+ flex: 1;
597
+ }
598
+ .lms-curriculum li a,
599
+ .lms-curriculum li strong {
600
+ font-weight: 550;
601
+ font-size: 0.88rem;
602
+ text-decoration: none;
603
+ }
604
+ .lms-curriculum li small {
605
+ display: block;
606
+ font-size: 0.66rem;
607
+ margin-block-start: 0.1rem;
608
+ }
609
+ .lms-lesson-number {
610
+ font-size: 0.7rem;
611
+ color: var(--lms-accent);
612
+ width: 1.4rem;
613
+ }
614
+ .lms-badge {
615
+ border: 1px solid var(--lms-border);
616
+ border-radius: 1rem;
617
+ padding: 0.2rem 0.55rem;
618
+ font-size: 0.6rem;
619
+ white-space: nowrap;
620
+ letter-spacing: 0.025em;
621
+ text-transform: capitalize;
622
+ color: var(--lms-muted);
623
+ }
624
+ .lms-notice {
625
+ padding: 0.95rem 1.1rem;
626
+ border: 1px solid var(--lms-border);
627
+ border-inline-start: 3px solid var(--lms-accent);
628
+ border-radius: 0.35rem;
629
+ background: var(--lms-soft);
630
+ font-size: 0.85rem;
631
+ margin-block: 1rem;
632
+ overflow-wrap: anywhere;
633
+ }
634
+ .lms-notice p {
635
+ margin-block: 0.5rem 0;
636
+ }
637
+ .lms-notice-error {
638
+ border-inline-start-color: #b42318;
639
+ color: #b42318;
640
+ }
641
+ .lms-reviews {
642
+ display: grid;
643
+ grid-template-columns: repeat(2, minmax(0, 1fr));
644
+ gap: 1rem;
645
+ }
646
+ .lms-reviews article {
647
+ padding: 1.3rem;
648
+ border: 1px solid var(--lms-border);
649
+ border-radius: 0.5rem;
650
+ background: var(--lms-surface);
651
+ }
652
+ .lms-review-stars {
653
+ color: var(--lms-accent);
654
+ letter-spacing: 0.1em;
655
+ }
656
+ .lms-form {
657
+ display: grid;
658
+ gap: 1rem;
659
+ margin-block: 1.5rem;
660
+ }
661
+ .lms-form > .lms-btn {
662
+ justify-self: start;
663
+ }
664
+ .lms-form [data-lms-feedback] {
665
+ margin: 0;
666
+ font-size: 0.85rem;
667
+ min-height: 1px;
668
+ }
669
+ .lms-form [data-lms-feedback][data-tone="error"] {
670
+ color: #b42318;
671
+ }
672
+ .lms-reader-grid {
673
+ display: grid;
674
+ grid-template-columns: 270px minmax(0, 1fr);
675
+ gap: 2.3rem;
676
+ align-items: start;
677
+ }
678
+ .lms-course-sidebar {
679
+ background: var(--lms-surface);
680
+ border: 1px solid var(--lms-border);
681
+ border-radius: 0.65rem;
682
+ padding: 1.2rem;
683
+ position: sticky;
684
+ top: 1rem;
685
+ max-height: calc(100dvh - 2rem);
686
+ overflow: auto;
687
+ }
688
+ .lms-sidebar-course {
689
+ font-size: 1.05rem;
690
+ font-weight: 650;
691
+ text-decoration: none;
692
+ }
693
+ .lms-course-sidebar > p {
694
+ font-size: 0.75rem;
695
+ color: var(--lms-muted);
696
+ margin-block: 0.8rem 0.4rem;
697
+ }
698
+ .lms-course-sidebar details {
699
+ border-block-start: 1px solid var(--lms-border);
700
+ margin-block-start: 0.9rem;
701
+ padding-block-start: 0.8rem;
702
+ }
703
+ .lms-course-sidebar summary {
704
+ cursor: pointer;
705
+ list-style: none;
706
+ font-size: 0.85rem;
707
+ font-weight: 650;
708
+ }
709
+ .lms-course-sidebar summary small {
710
+ display: block;
711
+ font-size: 0.58rem;
712
+ letter-spacing: 0.1em;
713
+ font-weight: 500;
714
+ margin-block-end: 0.3rem;
715
+ }
716
+ .lms-course-sidebar ol {
717
+ list-style: none;
718
+ padding: 0;
719
+ margin-block: 0.6rem 0;
720
+ }
721
+ .lms-course-sidebar li a {
722
+ display: flex;
723
+ align-items: start;
724
+ gap: 0.55rem;
725
+ font-size: 0.77rem;
726
+ text-decoration: none;
727
+ padding: 0.6rem 0.4rem;
728
+ border-radius: 0.3rem;
729
+ }
730
+ .lms-course-sidebar li a[aria-current="page"] {
731
+ background: var(--lms-tint);
732
+ font-weight: 650;
733
+ color: var(--lms-accent);
734
+ }
735
+ .lms-course-sidebar li a > span:first-child {
736
+ color: var(--lms-accent);
737
+ }
738
+ .lms-course-sidebar li small {
739
+ display: block;
740
+ font-size: 0.62rem;
741
+ font-weight: 400;
742
+ }
743
+ .lms-root progress {
744
+ appearance: none;
745
+ width: 100%;
746
+ height: 7px;
747
+ border: 0;
748
+ border-radius: 1rem;
749
+ overflow: hidden;
750
+ display: block;
751
+ background: var(--lms-border);
752
+ margin-block: 0.5rem 1.2rem;
753
+ }
754
+ .lms-root progress::-webkit-progress-bar {
755
+ background: var(--lms-border);
756
+ }
757
+ .lms-root progress::-webkit-progress-value {
758
+ background: var(--lms-accent);
759
+ border-radius: 1rem;
760
+ }
761
+ .lms-root progress::-moz-progress-bar {
762
+ background: var(--lms-accent);
763
+ }
764
+ .lms-lesson {
765
+ min-width: 0;
766
+ padding-block: 1rem;
767
+ }
768
+ .lms-lesson h1 {
769
+ font-size: clamp(1.9rem, 3.5vw, 2.8rem);
770
+ }
771
+ .lms-lesson-body {
772
+ font-size: 1rem;
773
+ line-height: 1.9;
774
+ margin-block: 2rem;
775
+ }
776
+ .lms-lesson-body img {
777
+ max-width: 100%;
778
+ height: auto;
779
+ }
780
+ .lms-lesson-body pre {
781
+ overflow: auto;
782
+ border: 1px solid var(--lms-border);
783
+ border-radius: 0.4rem;
784
+ background: var(--lms-soft);
785
+ padding: 1rem;
786
+ }
787
+ .lms-lesson-body blockquote {
788
+ margin-inline: 0;
789
+ padding-inline-start: 1rem;
790
+ border-inline-start: 3px solid var(--lms-accent);
791
+ color: var(--lms-muted);
792
+ }
793
+ .lms-media {
794
+ margin-block: 1.5rem;
795
+ }
796
+ .lms-media iframe,
797
+ .lms-media video {
798
+ width: 100%;
799
+ aspect-ratio: 16/9;
800
+ border: 0;
801
+ border-radius: 0.6rem;
802
+ background: #0b1b12;
803
+ }
804
+ .lms-media audio {
805
+ width: 100%;
806
+ }
807
+ .lms-media-link {
808
+ display: block;
809
+ font-size: 0.75rem;
810
+ color: var(--lms-muted) !important;
811
+ margin-block-start: 0.5rem;
812
+ }
813
+ .lms-live-card {
814
+ padding: 1.5rem;
815
+ border: 1px solid var(--lms-border);
816
+ border-radius: 0.6rem;
817
+ background: var(--lms-tint);
818
+ }
819
+ .lms-resources {
820
+ padding: 1.3rem;
821
+ border: 1px solid var(--lms-border);
822
+ border-radius: 0.6rem;
823
+ background: var(--lms-surface);
824
+ }
825
+ .lms-resources h2 {
826
+ font-size: 1.2rem;
827
+ }
828
+ .lms-resources ul {
829
+ padding: 0;
830
+ list-style: none;
831
+ margin: 0;
832
+ }
833
+ .lms-resources li a {
834
+ display: flex;
835
+ gap: 0.7rem;
836
+ padding: 0.55rem;
837
+ font-size: 0.85rem;
838
+ text-decoration: none;
839
+ }
840
+ .lms-resources li span:first-child {
841
+ color: var(--lms-accent);
842
+ }
843
+ .lms-resources small {
844
+ display: block;
845
+ }
846
+ .lms-assessment {
847
+ padding: 1.5rem;
848
+ border: 1px solid var(--lms-border);
849
+ border-radius: 0.7rem;
850
+ background: var(--lms-surface);
851
+ margin-block: 2rem;
852
+ }
853
+ .lms-assessment h2 {
854
+ font-size: 1.4rem;
855
+ }
856
+ .lms-assessment > p {
857
+ font-size: 0.85rem;
858
+ }
859
+ .lms-assessment details {
860
+ font-size: 0.8rem;
861
+ margin-block: 1rem;
862
+ }
863
+ .lms-assessment summary {
864
+ cursor: pointer;
865
+ font-weight: 600;
866
+ }
867
+ .lms-quiz-question {
868
+ border: 1px solid var(--lms-border);
869
+ padding: 1rem;
870
+ border-radius: 0.4rem;
871
+ margin-block: 1rem;
872
+ }
873
+ .lms-quiz-question legend {
874
+ font-weight: 650;
875
+ font-size: 0.9rem;
876
+ padding-inline: 0.3rem;
877
+ }
878
+ .lms-quiz-option {
879
+ display: flex;
880
+ align-items: center;
881
+ gap: 0.7rem;
882
+ padding: 0.65rem;
883
+ font-size: 0.85rem;
884
+ cursor: pointer;
885
+ border-radius: 0.3rem;
886
+ }
887
+ .lms-quiz-option:hover {
888
+ background: var(--lms-soft);
889
+ }
890
+ .lms-quiz-timer {
891
+ color: var(--lms-accent);
892
+ font-size: 0.8rem;
893
+ font-weight: 650;
894
+ }
895
+ .lms-lesson-completion {
896
+ padding-block: 2rem;
897
+ }
898
+ .lms-lesson-navigation {
899
+ display: flex;
900
+ align-items: center;
901
+ justify-content: space-between;
902
+ gap: 1rem;
903
+ border-block: 1px solid var(--lms-border);
904
+ padding-block: 1.2rem;
905
+ font-size: 0.82rem;
906
+ }
907
+ .lms-achievement {
908
+ display: flex;
909
+ gap: 1.5rem;
910
+ align-items: center;
911
+ padding: 2rem;
912
+ border: 1px solid var(--lms-border);
913
+ border-radius: 0.6rem;
914
+ background: var(--lms-tint);
915
+ margin-block: 2rem;
916
+ }
917
+ .lms-achievement > span {
918
+ font-size: 3rem;
919
+ color: var(--lms-accent);
920
+ }
921
+ .lms-achievement h2 {
922
+ font-size: 1.4rem;
923
+ }
924
+ .lms-achievement p {
925
+ font-size: 0.88rem;
926
+ }
927
+ .lms-discussion {
928
+ padding: 1rem;
929
+ border-block-end: 1px solid var(--lms-border);
930
+ font-size: 0.88rem;
931
+ }
932
+ .lms-discussion strong {
933
+ font-size: 0.8rem;
934
+ }
935
+ .lms-discussion p {
936
+ white-space: pre-line;
937
+ overflow-wrap: anywhere;
938
+ }
939
+ .lms-discussion small {
940
+ font-size: 0.7rem;
941
+ }
942
+ .lms-dashboard-header {
943
+ padding-block: 3.5rem 2rem;
944
+ }
945
+ .lms-dashboard-header h1 {
946
+ font-size: clamp(2rem, 4vw, 3rem);
947
+ }
948
+ .lms-dashboard-grid {
949
+ display: grid;
950
+ grid-template-columns: minmax(0, 1fr) 300px;
951
+ gap: 2rem;
952
+ }
953
+ .lms-learning-card {
954
+ padding: 1.5rem;
955
+ background: var(--lms-surface);
956
+ border: 1px solid var(--lms-border);
957
+ border-radius: 0.65rem;
958
+ margin-block-end: 1.2rem;
959
+ }
960
+ .lms-learning-card-top {
961
+ display: flex;
962
+ justify-content: space-between;
963
+ gap: 1rem;
964
+ }
965
+ .lms-learning-card h3 {
966
+ font-size: 1.5rem;
967
+ margin-block: 0.4rem 1rem;
968
+ }
969
+ .lms-learning-card h3 a {
970
+ text-decoration: none;
971
+ }
972
+ .lms-learning-card > p {
973
+ font-size: 0.9rem;
974
+ color: var(--lms-muted);
975
+ }
976
+ .lms-progress-label {
977
+ font-size: 0.72rem;
978
+ color: var(--lms-muted);
979
+ display: flex;
980
+ justify-content: space-between;
981
+ gap: 0.5rem;
982
+ }
983
+ .lms-progress-label strong {
984
+ color: var(--lms-accent);
985
+ }
986
+ .lms-notifications {
987
+ padding: 1.5rem;
988
+ background: var(--lms-surface);
989
+ border: 1px solid var(--lms-border);
990
+ border-radius: 0.6rem;
991
+ align-self: start;
992
+ margin-block-start: 1.5rem;
993
+ }
994
+ .lms-notifications h2 {
995
+ font-size: 1.4rem;
996
+ }
997
+ .lms-notification {
998
+ border-block-end: 1px solid var(--lms-border);
999
+ padding-block: 0.9rem;
1000
+ font-size: 0.78rem;
1001
+ }
1002
+ .lms-notification p {
1003
+ color: var(--lms-muted);
1004
+ margin-block: 0.4rem;
1005
+ }
1006
+ .lms-notification button {
1007
+ background: transparent;
1008
+ border: 0;
1009
+ color: var(--lms-accent);
1010
+ padding: 0;
1011
+ cursor: pointer;
1012
+ font-size: 0.7rem;
1013
+ }
1014
+ .lms-learning-tip {
1015
+ margin-block-start: 2rem;
1016
+ font-size: 0.85rem;
1017
+ }
1018
+ .lms-learning-tip > span {
1019
+ font-size: 2.4rem;
1020
+ color: var(--lms-accent);
1021
+ }
1022
+ .lms-learning-tip h3 {
1023
+ font-size: 1.2rem;
1024
+ }
1025
+ .lms-learning-tip p {
1026
+ color: var(--lms-muted);
1027
+ }
1028
+ .lms-text-button {
1029
+ border: 0;
1030
+ background: none;
1031
+ color: var(--lms-muted);
1032
+ font-size: 0.75rem;
1033
+ cursor: pointer;
1034
+ text-decoration: underline;
1035
+ padding: 0.2rem;
1036
+ }
1037
+ .lms-certificate-page {
1038
+ max-width: 950px;
1039
+ margin-inline: auto;
1040
+ padding-block: 3rem;
1041
+ }
1042
+ .lms-certificate-intro {
1043
+ text-align: center;
1044
+ margin-block-end: 2.5rem;
1045
+ }
1046
+ .lms-certificate-intro h1 {
1047
+ font-size: clamp(2rem, 4vw, 3rem);
1048
+ }
1049
+ .lms-certificate-intro .lms-lead {
1050
+ margin-inline: auto;
1051
+ }
1052
+ .lms-certificate {
1053
+ background: var(--lms-surface);
1054
+ padding: clamp(1.5rem, 5vw, 4rem);
1055
+ border: 1px solid var(--lms-border);
1056
+ outline: 5px solid var(--lms-tint);
1057
+ outline-offset: -14px;
1058
+ text-align: center;
1059
+ position: relative;
1060
+ border-radius: 0.4rem;
1061
+ box-shadow: 0 8px 30px rgb(18 53 30/0.06);
1062
+ }
1063
+ .lms-certificate-top {
1064
+ display: flex;
1065
+ justify-content: space-between;
1066
+ align-items: center;
1067
+ margin-block-end: 2.5rem;
1068
+ font-size: 0.9rem;
1069
+ font-weight: 650;
1070
+ }
1071
+ .lms-certificate-mark {
1072
+ font-size: 3rem;
1073
+ font-weight: 300;
1074
+ color: var(--lms-accent);
1075
+ }
1076
+ .lms-certificate > h2 {
1077
+ font-size: clamp(1.8rem, 4vw, 3rem);
1078
+ color: var(--lms-accent);
1079
+ margin-block: 1rem;
1080
+ }
1081
+ .lms-certificate > h3 {
1082
+ font-size: 1.6rem;
1083
+ margin-block: 1rem 2rem;
1084
+ }
1085
+ .lms-certificate > p:not(.lms-eyebrow) {
1086
+ font-size: 0.85rem;
1087
+ color: var(--lms-muted);
1088
+ }
1089
+ .lms-certificate-rule {
1090
+ width: 80px;
1091
+ height: 2px;
1092
+ background: var(--lms-accent);
1093
+ margin: 2rem auto;
1094
+ }
1095
+ .lms-certificate-bottom {
1096
+ display: flex;
1097
+ justify-content: space-between;
1098
+ gap: 1rem;
1099
+ text-align: start;
1100
+ margin-block: 2rem;
1101
+ }
1102
+ .lms-certificate-bottom p {
1103
+ font-size: 0.8rem;
1104
+ }
1105
+ .lms-certificate > small {
1106
+ font-size: 0.6rem;
1107
+ overflow-wrap: anywhere;
1108
+ }
1109
+ .lms-certificate-revoked {
1110
+ opacity: 0.7;
1111
+ }
1112
+ .lms-certificate-controls {
1113
+ display: flex;
1114
+ align-items: start;
1115
+ justify-content: center;
1116
+ gap: 1rem;
1117
+ flex-wrap: wrap;
1118
+ margin-block: 2rem;
1119
+ }
1120
+ .lms-certificate-controls p {
1121
+ font-size: 0.8rem;
1122
+ width: 100%;
1123
+ text-align: center;
1124
+ }
1125
+ .lms-gate {
1126
+ padding-block: 4rem;
1127
+ text-align: center;
1128
+ max-width: 700px;
1129
+ margin-inline: auto;
1130
+ }
1131
+ .lms-gate h1 {
1132
+ font-size: 2.3rem;
1133
+ }
1134
+ .lms-gate p {
1135
+ color: var(--lms-muted);
1136
+ }
1137
+ @media (max-width: 1050px) {
1138
+ .lms-cards {
1139
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1140
+ }
1141
+ .lms-reader-grid {
1142
+ grid-template-columns: 230px minmax(0, 1fr);
1143
+ gap: 1.5rem;
1144
+ }
1145
+ .lms-course-hero {
1146
+ gap: 1.5rem;
1147
+ grid-template-columns: minmax(0, 1fr) 300px;
1148
+ }
1149
+ .lms-dashboard-grid {
1150
+ grid-template-columns: minmax(0, 1fr) 250px;
1151
+ }
1152
+ }
1153
+ @media (max-width: 800px) {
1154
+ .lms-course-hero,
1155
+ .lms-reader-grid,
1156
+ .lms-dashboard-grid {
1157
+ grid-template-columns: 1fr;
1158
+ }
1159
+ .lms-enroll-card {
1160
+ max-width: 600px;
1161
+ }
1162
+ .lms-course-sidebar {
1163
+ position: static;
1164
+ max-height: none;
1165
+ }
1166
+ .lms-course-sidebar > details:not([open]) {
1167
+ display: block;
1168
+ }
1169
+ .lms-filters {
1170
+ grid-template-columns: 1fr 1fr;
1171
+ }
1172
+ .lms-hero {
1173
+ padding-block: 3.5rem;
1174
+ }
1175
+ .lms-site-header {
1176
+ align-items: start;
1177
+ flex-direction: column;
1178
+ gap: 0.6rem;
1179
+ }
1180
+ .lms-site-header nav {
1181
+ gap: 1rem;
1182
+ flex-wrap: wrap;
1183
+ }
1184
+ .lms-site-footer {
1185
+ flex-direction: column;
1186
+ align-items: start;
1187
+ }
1188
+ .lms-notifications {
1189
+ margin: 0;
1190
+ }
1191
+ .lms-certificate-controls {
1192
+ flex-direction: column;
1193
+ align-items: stretch;
1194
+ }
1195
+ .lms-certificate-controls .lms-btn {
1196
+ width: 100%;
1197
+ }
1198
+ }
1199
+ @media (max-width: 550px) {
1200
+ .lms-cards,
1201
+ .lms-outcomes ul,
1202
+ .lms-reviews,
1203
+ .lms-filters {
1204
+ grid-template-columns: 1fr;
1205
+ }
1206
+ .lms-hero h1 {
1207
+ font-size: 2.6rem;
1208
+ }
1209
+ .lms-hero-notes {
1210
+ gap: 0.7rem 1rem;
1211
+ }
1212
+ .lms-card-art {
1213
+ height: 200px;
1214
+ }
1215
+ .lms-subnav {
1216
+ gap: 1rem;
1217
+ font-size: 0.72rem;
1218
+ }
1219
+ .lms-course-hero {
1220
+ padding-block: 1rem;
1221
+ }
1222
+ .lms-curriculum summary {
1223
+ padding: 0.9rem;
1224
+ }
1225
+ .lms-assessment {
1226
+ padding: 1rem;
1227
+ }
1228
+ .lms-lesson-navigation {
1229
+ font-size: 0.75rem;
1230
+ }
1231
+ .lms-achievement {
1232
+ padding: 1.2rem;
1233
+ gap: 1rem;
1234
+ }
1235
+ .lms-certificate-bottom {
1236
+ flex-direction: column;
1237
+ }
1238
+ .lms-section-heading {
1239
+ align-items: start;
1240
+ }
1241
+ }
1242
+ @media (prefers-reduced-motion: reduce) {
1243
+ .lms-root * {
1244
+ transition: none !important;
1245
+ scroll-behavior: auto !important;
1246
+ }
1247
+ }
1248
+ @media print {
1249
+ @page {
1250
+ size: A4 landscape;
1251
+ margin: 12mm;
1252
+ }
1253
+ .lms-site-header,
1254
+ .lms-site-footer,
1255
+ .lms-subnav,
1256
+ .lms-certificate-controls,
1257
+ .lms-certificate-intro,
1258
+ .site-header,
1259
+ .site-footer {
1260
+ display: none !important;
1261
+ }
1262
+ .lms-root {
1263
+ color: #18271e;
1264
+ --lms-accent: #237747;
1265
+ --lms-surface: #fff;
1266
+ --lms-muted: #637268;
1267
+ --lms-border: #d9e3dc;
1268
+ --lms-tint: #e5f3e9;
1269
+ }
1270
+ .lms-container,
1271
+ .lms-certificate-page {
1272
+ padding: 0;
1273
+ max-width: none;
1274
+ }
1275
+ .lms-certificate {
1276
+ box-shadow: none;
1277
+ break-inside: avoid;
1278
+ border-color: #237747;
1279
+ min-height: 170mm;
1280
+ padding: 16mm;
1281
+ }
1282
+ .lms-certificate-top {
1283
+ margin-block-end: 12mm;
1284
+ }
1285
+ .lms-certificate-controls ~ * {
1286
+ display: none;
1287
+ }
1288
+ }
1289
+ .lms-root .lms-lock-note {
1290
+ display: block;
1291
+ margin-block: 0.4rem;
1292
+ color: #526357;
1293
+ font-size: 0.85rem;
1294
+ }
1295
+ .lms-root .lms-locked-lesson {
1296
+ padding: 0.7rem 0.9rem;
1297
+ }
1298
+ .lms-root .lms-draft-status[data-tone="error"] {
1299
+ color: #9d2837;
1300
+ }