@forwardimpact/pathway 0.21.0 → 0.23.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 (123) hide show
  1. package/README.md +3 -3
  2. package/bin/fit-pathway.js +22 -22
  3. package/package.json +4 -3
  4. package/src/commands/agent.js +14 -10
  5. package/src/commands/behaviour.js +11 -1
  6. package/src/commands/build.js +11 -2
  7. package/src/commands/command-factory.js +4 -2
  8. package/src/commands/dev.js +9 -2
  9. package/src/commands/discipline.js +19 -2
  10. package/src/commands/driver.js +11 -1
  11. package/src/commands/index.js +1 -1
  12. package/src/commands/init.js +1 -1
  13. package/src/commands/interview.js +8 -8
  14. package/src/commands/job.js +41 -28
  15. package/src/commands/level.js +76 -0
  16. package/src/commands/progress.js +20 -20
  17. package/src/commands/questions.js +3 -3
  18. package/src/commands/skill.js +11 -1
  19. package/src/commands/stage.js +11 -1
  20. package/src/commands/tool.js +4 -3
  21. package/src/commands/track.js +11 -1
  22. package/src/components/action-buttons.js +3 -3
  23. package/src/components/builder.js +25 -25
  24. package/src/components/card.js +8 -104
  25. package/src/components/comparison-radar.js +4 -4
  26. package/src/components/detail.js +18 -120
  27. package/src/components/error-page.js +8 -68
  28. package/src/components/grid.js +12 -106
  29. package/src/components/list.js +7 -116
  30. package/src/components/nav.js +7 -60
  31. package/src/components/radar-chart.js +3 -3
  32. package/src/components/skill-matrix.js +7 -7
  33. package/src/css/bundles/app.css +25 -21
  34. package/src/css/bundles/handout.css +33 -33
  35. package/src/css/bundles/slides.css +25 -25
  36. package/src/css/pages/landing.css +5 -5
  37. package/src/formatters/index.js +5 -5
  38. package/src/formatters/interview/shared.js +23 -23
  39. package/src/formatters/job/description.js +18 -18
  40. package/src/formatters/job/dom.js +12 -12
  41. package/src/formatters/job/markdown.js +7 -7
  42. package/src/formatters/json-ld.js +24 -24
  43. package/src/formatters/{grade → level}/dom.js +31 -27
  44. package/src/formatters/{grade → level}/markdown.js +19 -28
  45. package/src/formatters/{grade → level}/microdata.js +28 -38
  46. package/src/formatters/level/shared.js +86 -0
  47. package/src/formatters/progress/markdown.js +2 -2
  48. package/src/formatters/progress/shared.js +51 -51
  49. package/src/formatters/questions/markdown.js +8 -6
  50. package/src/formatters/questions/shared.js +7 -7
  51. package/src/formatters/skill/dom.js +4 -4
  52. package/src/formatters/skill/markdown.js +1 -1
  53. package/src/formatters/skill/microdata.js +3 -3
  54. package/src/formatters/skill/shared.js +3 -3
  55. package/src/formatters/track/shared.js +1 -1
  56. package/src/handout-main.js +12 -12
  57. package/src/handout.html +32 -13
  58. package/src/index.html +33 -14
  59. package/src/lib/card-mappers.js +16 -16
  60. package/src/lib/cli-command.js +3 -3
  61. package/src/lib/cli-output.js +2 -2
  62. package/src/lib/error-boundary.js +3 -66
  63. package/src/lib/errors.js +7 -45
  64. package/src/lib/job-cache.js +12 -12
  65. package/src/lib/markdown.js +2 -109
  66. package/src/lib/reactive.js +7 -73
  67. package/src/lib/render.js +53 -201
  68. package/src/lib/router-core.js +2 -156
  69. package/src/lib/router-pages.js +2 -11
  70. package/src/lib/router-slides.js +2 -197
  71. package/src/lib/state.js +16 -65
  72. package/src/lib/utils.js +3 -10
  73. package/src/lib/yaml-loader.js +22 -80
  74. package/src/main.js +10 -10
  75. package/src/pages/agent-builder.js +12 -12
  76. package/src/pages/assessment-results.js +28 -24
  77. package/src/pages/interview-builder.js +6 -6
  78. package/src/pages/interview.js +8 -8
  79. package/src/pages/job-builder.js +7 -7
  80. package/src/pages/job.js +8 -8
  81. package/src/pages/landing.js +8 -8
  82. package/src/pages/level.js +122 -0
  83. package/src/pages/progress-builder.js +8 -8
  84. package/src/pages/progress.js +74 -74
  85. package/src/pages/self-assessment.js +7 -7
  86. package/src/pages/skill.js +1 -1
  87. package/src/slide-main.js +23 -23
  88. package/src/slides/chapter.js +4 -4
  89. package/src/slides/index.js +11 -11
  90. package/src/slides/interview.js +2 -2
  91. package/src/slides/job.js +4 -4
  92. package/src/slides/level.js +32 -0
  93. package/src/slides/overview.js +10 -10
  94. package/src/slides/progress.js +13 -13
  95. package/src/slides.html +32 -13
  96. package/src/types.js +1 -1
  97. package/templates/job.template.md +2 -2
  98. package/src/commands/grade.js +0 -60
  99. package/src/css/base.css +0 -56
  100. package/src/css/components/badges.css +0 -232
  101. package/src/css/components/buttons.css +0 -101
  102. package/src/css/components/forms.css +0 -191
  103. package/src/css/components/layout.css +0 -218
  104. package/src/css/components/nav.css +0 -206
  105. package/src/css/components/progress.css +0 -166
  106. package/src/css/components/states.css +0 -82
  107. package/src/css/components/surfaces.css +0 -347
  108. package/src/css/components/tables.css +0 -362
  109. package/src/css/components/top-bar.css +0 -180
  110. package/src/css/components/typography.css +0 -121
  111. package/src/css/components/utilities.css +0 -41
  112. package/src/css/pages/detail.css +0 -119
  113. package/src/css/reset.css +0 -50
  114. package/src/css/tokens.css +0 -162
  115. package/src/css/views/handout.css +0 -30
  116. package/src/css/views/print.css +0 -634
  117. package/src/css/views/slide-animations.css +0 -113
  118. package/src/css/views/slide-base.css +0 -331
  119. package/src/css/views/slide-sections.css +0 -597
  120. package/src/css/views/slide-tables.css +0 -275
  121. package/src/formatters/grade/shared.js +0 -86
  122. package/src/pages/grade.js +0 -122
  123. package/src/slides/grade.js +0 -32
@@ -1,634 +0,0 @@
1
- /**
2
- * Print Styles
3
- *
4
- * Print-only media queries for all views.
5
- */
6
-
7
- @layer print {
8
- @media print {
9
- @page {
10
- size: landscape;
11
- margin: 0; /* Remove margins to eliminate space for browser headers/footers */
12
- }
13
-
14
- /* Force landscape orientation */
15
- html,
16
- body {
17
- width: 100%;
18
- height: 100%;
19
- }
20
-
21
- /* Slide view base print styles */
22
- .slide-view {
23
- padding: 0.75cm;
24
- max-width: none;
25
- background: white !important;
26
- animation: none !important;
27
- min-height: auto;
28
- }
29
-
30
- .slide-view::before {
31
- display: none !important;
32
- }
33
-
34
- .slide-nav {
35
- display: none !important;
36
- }
37
-
38
- .slide-view main {
39
- padding-bottom: 0;
40
- }
41
-
42
- /* Reduce text sizes for compact print */
43
- .slide-view {
44
- font-size: 11px;
45
- }
46
-
47
- .slide-view .page-title {
48
- font-size: 20px;
49
- margin-bottom: 0.25rem;
50
- }
51
-
52
- .slide-view .page-description {
53
- font-size: 11px;
54
- margin-bottom: 0.5rem;
55
- display: block !important;
56
- }
57
-
58
- /* Ensure text-muted paragraphs in header are visible */
59
- .slide-view .page-header .text-muted,
60
- .slide-view .page-header p {
61
- display: block !important;
62
- visibility: visible !important;
63
- font-size: 10px;
64
- color: #475569 !important;
65
- -webkit-print-color-adjust: exact;
66
- print-color-adjust: exact;
67
- }
68
-
69
- .slide-view .section-title,
70
- .slide-section-title {
71
- font-size: 14px;
72
- margin-bottom: 0.35rem;
73
- padding-bottom: 0.2rem;
74
- }
75
-
76
- /* Compact page header */
77
- .slide-view .page-header {
78
- page-break-after: avoid;
79
- margin-bottom: 0.75rem;
80
- padding: 0.5rem;
81
- background: none !important;
82
- box-shadow: none !important;
83
- backdrop-filter: none !important;
84
- }
85
-
86
- .slide-view .page-header::before {
87
- display: none !important;
88
- }
89
-
90
- /* Compact sections */
91
- .section,
92
- .section-detail,
93
- .slide-section {
94
- margin-top: 0.5rem;
95
- margin-bottom: 0.5rem;
96
- padding: 0.5rem;
97
- page-break-inside: avoid;
98
- background: none !important;
99
- box-shadow: none !important;
100
- backdrop-filter: none !important;
101
- }
102
-
103
- /* Two-column layout for modifier tables */
104
- .slide-view .modifier-tables-row,
105
- .track-detail .section-detail + .section-detail {
106
- display: inline-block;
107
- width: 48%;
108
- vertical-align: top;
109
- margin-right: 2%;
110
- page-break-inside: avoid;
111
- }
112
-
113
- .track-detail {
114
- display: block;
115
- }
116
-
117
- .track-detail .section-detail {
118
- page-break-inside: avoid;
119
- }
120
-
121
- /* Force modifier sections into columns */
122
- .slide-view .print-columns {
123
- display: flex;
124
- flex-wrap: wrap;
125
- gap: 1rem;
126
- }
127
-
128
- .slide-view .print-columns > * {
129
- flex: 1 1 45%;
130
- min-width: 250px;
131
- max-width: 48%;
132
- }
133
-
134
- /* Compact tables */
135
- .slide-view .data-table,
136
- .slide-view .level-table,
137
- .slide-view .table {
138
- page-break-inside: avoid;
139
- font-size: 10px;
140
- margin-bottom: 0.5rem;
141
- }
142
-
143
- .slide-view .data-table th,
144
- .slide-view .data-table td,
145
- .slide-view .level-table th,
146
- .slide-view .level-table td,
147
- .slide-view .table th,
148
- .slide-view .table td {
149
- padding: 0.25rem 0.5rem;
150
- }
151
-
152
- .slide-view .table-container {
153
- overflow: visible;
154
- }
155
-
156
- /* Compact stats grid */
157
- .slide-stats,
158
- .stats-grid {
159
- gap: 0.5rem;
160
- margin-bottom: 0.5rem;
161
- }
162
-
163
- .slide-stat,
164
- .stat-card {
165
- padding: 0.35rem;
166
- background: none !important;
167
- border: 1px solid #cbd5e1;
168
- }
169
-
170
- .slide-stat::before,
171
- .stat-card::before {
172
- display: none !important;
173
- }
174
-
175
- .slide-stat-value,
176
- .stat-value {
177
- font-size: 16px;
178
- -webkit-print-color-adjust: exact;
179
- print-color-adjust: exact;
180
- }
181
-
182
- .slide-stat-label,
183
- .stat-label {
184
- font-size: 9px;
185
- margin-top: 0.125rem;
186
- }
187
-
188
- /* Ensure 4-column grid fits in landscape */
189
- .slide-progression-summary {
190
- grid-template-columns: repeat(4, 1fr);
191
- gap: 0.5rem;
192
- }
193
-
194
- /* Preserve badge colors */
195
- .slide-view .badge,
196
- .slide-view .level-badge,
197
- .slide-view .info-tag,
198
- .badge,
199
- .level-badge,
200
- .info-tag {
201
- -webkit-print-color-adjust: exact;
202
- print-color-adjust: exact;
203
- background-color: inherit !important;
204
- animation: none !important;
205
- }
206
-
207
- .badge-broad,
208
- .badge-negative,
209
- .badge-primary,
210
- .badge-secondary,
211
- .badge-default {
212
- -webkit-print-color-adjust: exact;
213
- print-color-adjust: exact;
214
- }
215
-
216
- /* Preserve text colors */
217
- .text-muted,
218
- .text-primary,
219
- .text-success,
220
- .text-warning,
221
- .text-error,
222
- .modifier-positive,
223
- .modifier-negative,
224
- .slide-modifier-positive,
225
- .slide-modifier-negative {
226
- -webkit-print-color-adjust: exact;
227
- print-color-adjust: exact;
228
- }
229
-
230
- /* Preserve level dot colors */
231
- .slide-view .level-dot,
232
- .slide-view .level-dot.filled,
233
- .level-dot,
234
- .level-dot.filled {
235
- -webkit-print-color-adjust: exact;
236
- print-color-adjust: exact;
237
- animation: none !important;
238
- }
239
-
240
- .slide-view .level-dot.filled.level-1,
241
- .slide-view .level-dot.filled.level-2,
242
- .slide-view .level-dot.filled.level-3,
243
- .slide-view .level-dot.filled.level-4,
244
- .slide-view .level-dot.filled.level-5 {
245
- -webkit-print-color-adjust: exact;
246
- print-color-adjust: exact;
247
- }
248
-
249
- /* Links */
250
- .slide-view a {
251
- text-decoration: underline;
252
- color: var(--color-text);
253
- }
254
-
255
- .slide-view a::after {
256
- content: none;
257
- }
258
-
259
- /* Page break controls */
260
- .page-break-before {
261
- page-break-before: always;
262
- }
263
-
264
- .page-break-after {
265
- page-break-after: always;
266
- }
267
-
268
- /* Remove decorative backgrounds */
269
- .slide-question,
270
- .slide-driver-item,
271
- .slide-progression-stat {
272
- background: none;
273
- border: 1px solid #cbd5e1;
274
- box-shadow: none !important;
275
- backdrop-filter: none !important;
276
- }
277
-
278
- .slide-question::before,
279
- .slide-driver-item::before {
280
- display: none !important;
281
- }
282
-
283
- /* Compact skill/behaviour rows */
284
- .slide-skill-row,
285
- .slide-behaviour-row,
286
- .slide-change-row {
287
- padding: 0.2rem 0.5rem;
288
- margin-bottom: 0.15rem;
289
- background: none !important;
290
- }
291
-
292
- .slide-skill-row.header,
293
- .slide-behaviour-row.header,
294
- .slide-change-row.header {
295
- background: #f1f5f9 !important;
296
- -webkit-print-color-adjust: exact;
297
- print-color-adjust: exact;
298
- }
299
-
300
- /* Compact related lists */
301
- .slide-view .related-list li {
302
- padding: 0.2rem 0.5rem;
303
- margin-bottom: 0.1rem;
304
- background: none !important;
305
- }
306
-
307
- /* Driver coverage compact */
308
- .slide-driver-coverage {
309
- gap: 0.5rem;
310
- }
311
-
312
- .slide-driver-item {
313
- padding: 0.35rem;
314
- }
315
-
316
- /* Content columns for formatters */
317
- .content-columns {
318
- display: grid;
319
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
320
- gap: 0.75rem;
321
- }
322
-
323
- .content-columns .column {
324
- page-break-inside: avoid;
325
- }
326
-
327
- /* Stats row compact */
328
- .stats {
329
- display: flex;
330
- gap: 0.75rem;
331
- margin-bottom: 0.5rem;
332
- flex-wrap: wrap;
333
- }
334
-
335
- .stat {
336
- padding: 0.35rem;
337
- min-width: 80px;
338
- background: none !important;
339
- border: 1px solid #cbd5e1;
340
- }
341
-
342
- .stat-value {
343
- font-size: 16px;
344
- -webkit-print-color-adjust: exact;
345
- print-color-adjust: exact;
346
- }
347
-
348
- .stat-label {
349
- font-size: 9px;
350
- }
351
-
352
- /* Detail sections compact */
353
- .detail-section {
354
- margin-bottom: 0.5rem;
355
- page-break-inside: avoid;
356
- }
357
-
358
- .detail-section .section-title {
359
- font-size: 13px;
360
- margin-bottom: 0.25rem;
361
- padding-bottom: 0.15rem;
362
- }
363
-
364
- .list-item {
365
- padding: 0.25rem 0.5rem;
366
- margin-bottom: 0.25rem;
367
- }
368
-
369
- .list-item .label {
370
- font-size: 9px;
371
- margin-bottom: 0.1rem;
372
- }
373
-
374
- .list-item p {
375
- font-size: 10px;
376
- margin: 0;
377
- }
378
-
379
- /* Related lists compact */
380
- .related-list {
381
- margin: 0.25rem 0;
382
- padding-left: 1rem;
383
- }
384
-
385
- .related-list li {
386
- padding: 0.1rem 0;
387
- font-size: 10px;
388
- }
389
-
390
- /* Level table compact */
391
- .level-table {
392
- font-size: 10px;
393
- }
394
-
395
- .level-table th,
396
- .level-table td {
397
- padding: 0.2rem 0.4rem;
398
- }
399
-
400
- /* Badges compact */
401
- .slide-view .badges,
402
- .slide-view .page-meta,
403
- .badges,
404
- .page-meta {
405
- margin-bottom: 0.25rem;
406
- }
407
-
408
- .slide-view .badge,
409
- .badge {
410
- padding: 0.1rem 0.35rem;
411
- font-size: 9px;
412
- }
413
-
414
- /* Auto-grid layouts for print */
415
- .auto-grid-xs,
416
- .auto-grid-sm,
417
- .auto-grid-md,
418
- .auto-grid-lg {
419
- gap: 0.75rem;
420
- }
421
-
422
- .auto-grid-lg {
423
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
424
- }
425
-
426
- /* Radar charts compact for print */
427
- .radar-container,
428
- .slide-radar-container {
429
- margin: 0.5rem 0;
430
- }
431
-
432
- .radar-container svg,
433
- .slide-radar-container svg {
434
- max-width: 320px;
435
- max-height: 320px;
436
- }
437
-
438
- /* Skill matrix and behaviour profile compact */
439
- .skill-matrix,
440
- .behaviour-profile {
441
- font-size: 10px;
442
- }
443
-
444
- .skill-matrix th,
445
- .skill-matrix td,
446
- .behaviour-profile th,
447
- .behaviour-profile td {
448
- padding: 0.2rem 0.4rem;
449
- }
450
-
451
- /* Job detail page compact */
452
- .job-detail-page .section {
453
- margin-top: 0.5rem;
454
- margin-bottom: 0.5rem;
455
- }
456
-
457
- /* Job description HTML formatting for print */
458
- .job-description-print-section {
459
- display: block !important;
460
- page-break-before: always;
461
- }
462
-
463
- /* Hide the "Job Description" section title */
464
- .job-description-print-section > .section-title {
465
- display: none !important;
466
- }
467
-
468
- .job-description-print-only {
469
- font-size: 8px;
470
- line-height: 1.35;
471
- /* Two-column layout like an academic paper */
472
- column-count: 2;
473
- column-gap: 2rem;
474
- column-rule: 1px solid #e2e8f0;
475
- }
476
-
477
- .job-description-print-only h1 {
478
- font-size: 12px;
479
- margin: 0 0 0.4rem;
480
- page-break-after: avoid;
481
- break-after: avoid-column;
482
- column-span: all;
483
- }
484
-
485
- .job-description-print-only h2 {
486
- font-size: 10px;
487
- margin: 0.6rem 0 0.3rem;
488
- border-bottom: 1px solid #cbd5e1;
489
- padding-bottom: 0.1rem;
490
- page-break-after: avoid;
491
- break-after: avoid-column;
492
- break-inside: avoid;
493
- }
494
-
495
- .job-description-print-only h3 {
496
- font-size: 9px;
497
- margin: 0.4rem 0 0.2rem;
498
- page-break-after: avoid;
499
- break-after: avoid-column;
500
- break-inside: avoid;
501
- }
502
-
503
- .job-description-print-only p {
504
- margin: 0.25rem 0;
505
- }
506
-
507
- .job-description-print-only ul {
508
- margin: 0.25rem 0;
509
- padding-left: 1.25rem;
510
- }
511
-
512
- .job-description-print-only li {
513
- margin: 0.15rem 0;
514
- }
515
-
516
- .job-description-print-only strong {
517
- font-weight: 600;
518
- }
519
-
520
- /* Page brand header for print */
521
- .page-brand-header {
522
- position: fixed;
523
- top: 0;
524
- left: 0;
525
- right: 0;
526
- background: white;
527
- z-index: 100;
528
- padding: var(--space-xs) var(--space-md);
529
- margin-bottom: 0;
530
- border-bottom: 1px solid var(--color-border);
531
- }
532
-
533
- .page-brand-header .brand-tag {
534
- background: linear-gradient(
535
- 135deg,
536
- #f472b6 0%,
537
- #a78bfa 50%,
538
- #38bdf8 100%
539
- );
540
- color: white;
541
- -webkit-print-color-adjust: exact;
542
- print-color-adjust: exact;
543
- }
544
-
545
- main {
546
- padding-top: 3rem;
547
- }
548
-
549
- /* Handout view: hide brand header — chapter covers provide branding */
550
- .handout-view .page-brand-header {
551
- display: none !important;
552
- }
553
-
554
- .handout-view main {
555
- padding-top: 0;
556
- }
557
-
558
- /* Chapter cover print styles */
559
- .chapter-cover {
560
- page-break-after: always;
561
- min-height: 100vh;
562
- display: flex;
563
- flex-direction: column;
564
- justify-content: center;
565
- align-items: center;
566
- }
567
-
568
- /* Handout view: page breaks between chapters and sections */
569
- .handout-view .chapter-cover {
570
- page-break-before: always;
571
- page-break-after: auto;
572
- }
573
-
574
- .handout-view .detail-page {
575
- page-break-before: always;
576
- border-bottom: none;
577
- margin-bottom: 0;
578
- padding-bottom: 0;
579
- }
580
-
581
- .handout-view main > :first-child {
582
- page-break-before: auto;
583
- }
584
-
585
- /* Checklist print styles */
586
- .checklist-section {
587
- page-break-inside: avoid;
588
- margin-bottom: var(--space-lg);
589
- }
590
-
591
- .checklist-group {
592
- margin-bottom: var(--space-md);
593
- }
594
-
595
- .checklist-group-header {
596
- font-weight: 600;
597
- margin-bottom: var(--space-xs);
598
- }
599
-
600
- .checklist-items {
601
- list-style: none;
602
- padding: 0;
603
- margin: 0;
604
- }
605
-
606
- .checklist-item {
607
- display: flex;
608
- align-items: flex-start;
609
- gap: var(--space-sm);
610
- padding: var(--space-xs) 0;
611
- border-bottom: 1px solid var(--color-border);
612
- }
613
-
614
- .checklist-item::before {
615
- content: "☐";
616
- font-size: var(--font-size-lg);
617
- flex-shrink: 0;
618
- }
619
-
620
- /* Human-only badge for print */
621
- .badge-human-only {
622
- background: #fef3c7;
623
- color: #92400e;
624
- print-color-adjust: exact;
625
- -webkit-print-color-adjust: exact;
626
- }
627
-
628
- .human-only-row {
629
- background: rgba(254, 243, 199, 0.3);
630
- print-color-adjust: exact;
631
- -webkit-print-color-adjust: exact;
632
- }
633
- }
634
- }