privateboard 0.1.2 → 0.1.4

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.
@@ -22,6 +22,12 @@
22
22
  --orange: #E65100;
23
23
  --orange-pale: #FFF3E0;
24
24
  --red: #C62828;
25
+ --paper: var(--bg);
26
+ --paper-soft: var(--bg-soft);
27
+ --ink-mid: var(--ink-soft);
28
+ /* Cross-spine token aliases · used by the unified design system. */
29
+ --accent: var(--brand);
30
+ --warn: var(--red);
25
31
  --sans: "Inter", "Helvetica Neue", "Arial", -apple-system, BlinkMacSystemFont,
26
32
  "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Source Han Sans CN",
27
33
  "Noto Sans CJK SC", sans-serif;
@@ -53,7 +59,7 @@ html, body {
53
59
  justify-content: space-between;
54
60
  align-items: center;
55
61
  font-family: var(--sans);
56
- font-size: 11.5px;
62
+ font-size: 12px;
57
63
  letter-spacing: 0.14em;
58
64
  text-transform: uppercase;
59
65
  font-weight: 500;
@@ -122,7 +128,7 @@ html, body {
122
128
  font-weight: 700;
123
129
  margin-bottom: 6px;
124
130
  }
125
- .byline-block .value { font-size: 13.5px; color: var(--ink); font-weight: 600; line-height: 1.45; }
131
+ .byline-block .value { font-size: 14px; color: var(--ink); font-weight: 600; line-height: 1.45; }
126
132
  .byline-block .signed-avatars { display: flex; margin-top: 4px; }
127
133
  .byline-block .signed-avatars img {
128
134
  width: 22px; height: 22px;
@@ -182,7 +188,7 @@ html, body {
182
188
  .body h4 { font-size: 13px; margin: 18px 0 8px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-soft); }
183
189
  .body p { margin: 12px 0; line-height: 1.62; color: var(--ink-soft); font-size: 15px; }
184
190
  .body ul, .body ol { margin: 12px 0 14px 22px; }
185
- .body li { margin: 6px 0; line-height: 1.55; color: var(--ink-soft); font-size: 14.5px; }
191
+ .body li { margin: 6px 0; line-height: 1.55; color: var(--ink-soft); font-size: 15px; }
186
192
  .body strong { color: var(--ink); font-weight: 700; }
187
193
  .body em { color: var(--ink); font-style: italic; }
188
194
  .body code {
@@ -190,16 +196,18 @@ html, body {
190
196
  border: 1px solid var(--rule);
191
197
  padding: 1px 7px;
192
198
  font-family: var(--mono);
193
- font-size: 12.5px;
199
+ font-size: 13px;
194
200
  color: var(--brand);
195
201
  border-radius: 2px;
196
202
  }
197
203
  .body code.badge-confidence-high { color: var(--green); border-color: rgba(46, 125, 50, 0.3); background: var(--green-pale); }
198
204
  .body code.badge-confidence-medium { color: var(--orange); border-color: rgba(230, 81, 0, 0.3); background: var(--orange-pale); }
199
205
  .body code.badge-confidence-low { color: var(--red); border-color: rgba(198, 40, 40, 0.3); background: rgba(198, 40, 40, 0.06); }
200
- .body code.badge-priority-p0 { background: var(--red); color: #fff; border-color: var(--red); font-weight: 700; }
201
- .body code.badge-priority-p1 { background: var(--orange); color: #fff; border-color: var(--orange); font-weight: 700; }
202
- .body code.badge-priority-p2 { background: var(--bg-soft); color: var(--ink-faint); }
206
+ /* Priority badges · typographic only · gartner severity palette:
207
+ red for P0 (highest), brand-deep for P1 (mid), ink-faint for P2. */
208
+ .body code.badge-priority-p0 { color: var(--red); }
209
+ .body code.badge-priority-p1 { color: var(--brand-deep); }
210
+ .body code.badge-priority-p2 { color: var(--ink-faint); }
203
211
  .body blockquote {
204
212
  padding: 14px 18px;
205
213
  margin: 22px 0;
@@ -237,7 +245,7 @@ html, body {
237
245
  .body h2.section-thesis { font-size: 12px; color: var(--brand); text-transform: uppercase; letter-spacing: 0.16em; }
238
246
  .body section.section-thesis p:first-child { font-size: 24px; color: var(--ink); font-weight: 600; line-height: 1.3; }
239
247
 
240
- .body section.section-frame-shift p:first-child { font-size: 16.5px; color: var(--ink); }
248
+ .body section.section-frame-shift p:first-child { font-size: 17px; color: var(--ink); }
241
249
 
242
250
  /* Headline Findings · key-findings flat list (Gartner default presentation). */
243
251
  .body section.section-headline-findings .pillars-grid { display: block; margin: 20px 0; }
@@ -251,7 +259,7 @@ html, body {
251
259
  position: absolute;
252
260
  top: 18px; left: 0;
253
261
  font-family: var(--mono);
254
- font-size: 12.5px;
262
+ font-size: 13px;
255
263
  color: var(--brand);
256
264
  font-weight: 700;
257
265
  letter-spacing: 0;
@@ -278,7 +286,7 @@ html, body {
278
286
  color: var(--brand);
279
287
  font-weight: 700;
280
288
  }
281
- .body section.section-big-ideas ol > li p:first-child strong { font-size: 16.5px; color: var(--ink); }
289
+ .body section.section-big-ideas ol > li p:first-child strong { font-size: 17px; color: var(--ink); }
282
290
 
283
291
  /* Why Now · Strategic Planning Assumption-style box. */
284
292
  .body section.section-why-now {
@@ -323,7 +331,7 @@ html, body {
323
331
  .body section.section-recommendations ol > li:has(code.badge-priority-p0)::before { background: var(--red); }
324
332
  .body section.section-recommendations ol > li p,
325
333
  .body section.section-the-bet ol > li p,
326
- .body section.section-considerations ol > li p { font-size: 14.5px; }
334
+ .body section.section-considerations ol > li p { font-size: 15px; }
327
335
  .body section.section-recommendations ol > li p:first-child strong,
328
336
  .body section.section-the-bet ol > li p:first-child strong,
329
337
  .body section.section-considerations ol > li p:first-child strong { font-size: 16px; color: var(--ink); }
@@ -371,7 +379,7 @@ html, body {
371
379
  position: relative;
372
380
  padding: 14px 0 14px 56px;
373
381
  border-top: 1px dashed var(--rule);
374
- font-size: 14.5px;
382
+ font-size: 15px;
375
383
  }
376
384
  .body section.section-new-questions ol > li:last-child { border-bottom: 1px dashed var(--rule); }
377
385
  .body section.section-new-questions ol > li::before {
@@ -387,7 +395,7 @@ html, body {
387
395
  width: 100%;
388
396
  border-collapse: collapse;
389
397
  margin: 18px 0 24px;
390
- font-size: 13.5px;
398
+ font-size: 14px;
391
399
  border-top: 2px solid var(--brand);
392
400
  }
393
401
  .body table.md-table th, .body table.md-table td {
@@ -401,28 +409,28 @@ html, body {
401
409
  color: var(--brand);
402
410
  font-family: var(--sans);
403
411
  font-weight: 700;
404
- font-size: 11px;
412
+ font-size: 12px;
405
413
  letter-spacing: 0.12em;
406
414
  text-transform: uppercase;
407
415
  border-bottom: 2px solid var(--rule-strong);
408
416
  }
409
- .body table.md-table td:first-child { font-weight: 600; color: var(--ink); }
417
+ .body table.md-table td:first-child { font-weight: 600; color: var(--ink); font-size: 14px; }
410
418
  .body table.md-table tr:hover td { background: var(--bg-emphasis); }
411
419
 
412
420
  .body h2.section-methodology {
413
421
  margin-top: 80px;
414
422
  padding-top: 20px;
415
- font-size: 11.5px;
423
+ font-size: 12px;
416
424
  color: var(--ink-faint);
417
425
  text-transform: uppercase;
418
426
  letter-spacing: 0.14em;
419
427
  font-weight: 700;
420
428
  border-top: 1px solid var(--rule);
421
429
  }
422
- .body section.section-methodology { color: var(--ink-faint); font-size: 12.5px; line-height: 1.55; background: var(--bg-soft); padding: 14px 16px; margin-top: 8px; border: 1px solid var(--rule); }
430
+ .body section.section-methodology { color: var(--ink-faint); font-size: 13px; line-height: 1.55; background: var(--bg-soft); padding: 14px 16px; margin-top: 8px; border: 1px solid var(--rule); }
423
431
  .body section.section-methodology strong { color: var(--ink-soft); font-family: var(--mono); font-size: 12px; }
424
432
 
425
- .body pre.codeblock { background: var(--bg-soft); border: 1px solid var(--rule); padding: 12px 14px; font-family: var(--mono); font-size: 12.5px; color: var(--ink-soft); }
433
+ .body pre.codeblock { background: var(--bg-soft); border: 1px solid var(--rule); padding: 12px 14px; font-family: var(--mono); font-size: 13px; color: var(--ink-soft); }
426
434
  .body pre.mermaid { background: var(--bg); border-top: 2px solid var(--brand); border-bottom: 1px solid var(--rule); padding: 28px 24px 24px; margin: 22px 0 28px; min-height: 380px; text-align: center; font-family: var(--mono); font-size: 11px; color: var(--ink-faint); }
427
435
  .body pre.mermaid svg text { font-family: var(--sans) !important; }
428
436
 
@@ -446,7 +454,7 @@ html, body {
446
454
  font-family: var(--sans);
447
455
  text-transform: uppercase;
448
456
  letter-spacing: 0.14em;
449
- font-size: 11.5px;
457
+ font-size: 12px;
450
458
  font-weight: 600;
451
459
  }
452
460
  .placeholder.error { color: var(--red); }
@@ -468,8 +476,8 @@ html, body {
468
476
  }
469
477
  .rec-rule code { flex: 0 0 auto; }
470
478
  .rec-rule-line { flex: 1 1 auto; height: 1px; background: var(--rule); display: block; }
471
- .rec-priority-p0 .rec-rule-line { background: var(--red); height: 1.5px; }
472
- .rec-priority-p1 .rec-rule-line { background: var(--brand); height: 1.5px; }
479
+ .rec-priority-p0 .rec-rule-line { background: var(--red); height: 2px; }
480
+ .rec-priority-p1 .rec-rule-line { background: var(--brand); height: 2px; }
473
481
  .rec-action {
474
482
  font-family: var(--sans); font-size: 22px; line-height: 1.28;
475
483
  color: var(--ink); font-weight: 700; letter-spacing: -0.018em;
@@ -489,7 +497,7 @@ html, body {
489
497
  .rec-meta-sep { color: var(--ink-faint); }
490
498
  .rec-risk {
491
499
  display: flex; align-items: flex-start; gap: 8px;
492
- font-size: 13.5px; line-height: 1.6; color: var(--ink-soft);
500
+ font-size: 14px; line-height: 1.6; color: var(--ink-soft);
493
501
  margin: 0; font-style: italic;
494
502
  }
495
503
  .rec-risk-icon { flex: 0 0 auto; color: var(--red); font-style: normal; }
@@ -535,51 +543,78 @@ html, body {
535
543
  font-style: normal; margin-left: 4px; vertical-align: -8px;
536
544
  line-height: 1; font-family: Georgia, serif;
537
545
  }
538
- .nq-why { font-size: 14.5px; line-height: 1.65; color: var(--ink-soft); margin: 0; max-width: 60ch; }
546
+ .nq-why { font-size: 15px; line-height: 1.65; color: var(--ink-soft); margin: 0; max-width: 60ch; }
539
547
 
540
548
  /* ─── Metric strip · per-spine treatment ─────────────────────────
541
549
  Inherits the spine-agnostic baseline in public/report.html's inline
542
550
  <style>; this block tweaks surface, accent + typography to match
543
551
  the spine's voice. No `border-left`, no parallel borders against
544
552
  adjacent .chapter-num / section h2. */
545
- /* Dense table-like treatment · 4-up grid by default, monospace
546
- everywhere, the value is primary but disciplined (not display-sized). */
547
- .body .metric-strip-grid {
548
- grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
549
- gap: 1px;
550
- background: var(--rule, rgba(0, 0, 0, 0.08));
551
- border: 0.5px solid var(--rule-soft, rgba(0, 0, 0, 0.12));
552
- }
553
+ /* Inherits the Swiss-editorial baseline (big thin numerals top, mute
554
+ mono label bottom, hairline grid). Gartner signature: monospace
555
+ value (research-note ledger feel) + brand-deep label colour. The
556
+ earlier "1px-rule table cells" treatment used `gap: 1px` over a
557
+ coloured grid background — retired because it doubled hairlines
558
+ against the baseline's outer top/bottom rules. */
553
559
  .body .metric-strip-intro {
554
560
  color: var(--ink-soft);
555
- font-family: var(--mono);
556
- border-bottom: 0.5px solid var(--rule-soft, rgba(0, 0, 0, 0.12));
557
- padding-bottom: 6px;
558
- margin-bottom: 0;
559
- }
560
- .body .metric-card {
561
- background: var(--bg);
562
- border: none;
563
- padding: 12px 14px;
564
- min-height: 84px;
565
- gap: 4px;
566
561
  }
567
562
  .body .metric-label {
568
563
  color: var(--brand-deep);
569
- font-family: var(--mono);
570
- font-size: 9.5px;
571
564
  font-weight: 700;
572
565
  }
566
+ /* Mono numerals at the editorial size · keeps the gartner table-feel
567
+ but lets the baseline's 56px / weight 300 hold for visual rhythm. */
573
568
  .body .metric-value {
574
569
  color: var(--ink);
575
570
  font-family: var(--mono);
576
- font-size: 22px;
577
- font-weight: 700;
578
- letter-spacing: -0.01em;
571
+ letter-spacing: -0.015em;
579
572
  }
580
573
  .body .metric-card[data-trend="up"] .metric-value { color: var(--green); }
581
574
  .body .metric-card[data-trend="down"] .metric-value { color: var(--brand-deep); }
582
575
  .body .metric-trend[data-trend="up"] { color: var(--green); }
583
576
  .body .metric-trend[data-trend="down"] { color: var(--brand-deep); }
584
- .body .metric-qualifier { color: var(--ink-soft); font-family: var(--mono); font-size: 11px; }
577
+ .body .metric-qualifier { color: var(--ink-soft); font-family: var(--mono); }
585
578
  .body .metric-attribution { color: var(--ink-faint); }
579
+
580
+ /* ─── Path comparison · per-spine treatment ──────────────────────
581
+ gartner uses brand-deep (weak) / green (strong) — its decision-
582
+ under-uncertainty palette. */
583
+ .body .path-comparison .path { background: var(--bg-soft); border-color: var(--rule-soft); }
584
+ .body .path-comparison .path-weak { border-top-color: var(--brand-deep); }
585
+ .body .path-comparison .path-strong { border-top-color: var(--green); }
586
+ .body .path-comparison .path-weak .path-tag { color: var(--brand-deep); }
587
+ .body .path-comparison .path-strong .path-tag { color: var(--green); }
588
+ .body .path-comparison .path-name { color: var(--ink); font-weight: 600; }
589
+ .body .path-comparison .path li { color: var(--ink-soft); }
590
+ .body .path-comparison .path-weak li::before { background: var(--brand-deep); }
591
+ .body .path-comparison .path-strong li::before { background: var(--green); }
592
+ .body .path-comparison-implication { color: var(--ink-soft); }
593
+
594
+ /* ─── Views-compared · per-spine · gartner-note ────────────────
595
+ Hairline frame · accent stripe on TOP (per project rule).
596
+ Alignment uses brand-deep, divergence uses red. */
597
+ .body .vc-section-label { color: var(--brand-deep); border-color: var(--rule-soft); }
598
+ .body .views-compared-alignment .vc-card {
599
+ border-color: var(--rule-soft);
600
+ border-top-color: var(--brand-deep);
601
+ }
602
+ .body .vc-card-headline { color: var(--ink); font-weight: 600; }
603
+ .body .vc-chip { color: var(--ink-soft); border-color: var(--rule-soft); }
604
+ .body .vc-card-note { color: var(--ink-soft); }
605
+ .body .vc-fork { border-color: var(--rule-soft); border-top-color: var(--red, #B43E2C); }
606
+ .body .vc-fork-hinge { color: var(--ink); }
607
+ .body .vc-side { border-color: var(--rule-soft); }
608
+ .body .vc-side-label { color: var(--red, #B43E2C); }
609
+ .body .vc-side-stance { color: var(--ink-soft); }
610
+ .body .vc-fork-resolution { color: var(--ink-soft); border-top-color: var(--rule-soft); }
611
+ .body .vc-resolution-label { color: var(--ink-faint); }
612
+ .body .vc-row-name { color: var(--ink); font-weight: 600; }
613
+ .body .vc-row-stance { color: var(--brand-deep); }
614
+ .body .vc-row-position { color: var(--ink-soft); }
615
+ .body .vc-row-quote { color: var(--ink); }
616
+ .body .views-compared-synthesis {
617
+ border-color: var(--rule-soft);
618
+ border-top-color: var(--ink-faint);
619
+ }
620
+ .body .vc-synthesis-body { color: var(--ink); }
@@ -22,6 +22,14 @@
22
22
  --blue-mid: #6285FF;
23
23
  --green: #1F7A4D;
24
24
  --green-pale: #E2F0E9;
25
+ --red: #B82F1A;
26
+ --paper: var(--bg);
27
+ --paper-soft: var(--soft);
28
+ --ink-mid: var(--ink-soft);
29
+ /* Cross-spine token aliases · used by the unified design system in
30
+ report.html. */
31
+ --accent: var(--blue);
32
+ --warn: var(--red);
25
33
  --sans: "Inter", "Helvetica Neue", "Arial", -apple-system, BlinkMacSystemFont,
26
34
  "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Source Han Sans CN",
27
35
  "Noto Sans CJK SC", sans-serif;
@@ -34,7 +42,7 @@ html, body {
34
42
  background: var(--bg);
35
43
  color: var(--ink);
36
44
  font-family: var(--sans);
37
- font-size: 15.5px;
45
+ font-size: 16px;
38
46
  line-height: 1.6;
39
47
  -webkit-font-smoothing: antialiased;
40
48
  min-height: 100vh;
@@ -121,7 +129,7 @@ html, body {
121
129
  font-weight: 700;
122
130
  margin-bottom: 6px;
123
131
  }
124
- .byline-block .value { font-size: 13.5px; color: var(--ink); font-weight: 600; }
132
+ .byline-block .value { font-size: 14px; color: var(--ink); font-weight: 600; }
125
133
  .byline-block .signed-avatars { display: flex; margin-top: 4px; }
126
134
  .byline-block .signed-avatars img {
127
135
  width: 24px; height: 24px;
@@ -185,16 +193,18 @@ html, body {
185
193
  border: 1px solid var(--rule);
186
194
  padding: 1px 7px;
187
195
  font-family: var(--mono);
188
- font-size: 12.5px;
196
+ font-size: 13px;
189
197
  color: var(--blue);
190
198
  border-radius: 2px;
191
199
  }
192
200
  .body code.badge-confidence-high { color: var(--green); border-color: rgba(31, 122, 77, 0.3); background: var(--green-pale); }
193
201
  .body code.badge-confidence-medium { color: #B8721A; border-color: rgba(184, 114, 26, 0.3); background: rgba(184, 114, 26, 0.06); }
194
202
  .body code.badge-confidence-low { color: #C62828; border-color: rgba(198, 40, 40, 0.3); background: rgba(198, 40, 40, 0.06); }
195
- .body code.badge-priority-p0 { background: var(--blue); color: #fff; border-color: var(--blue); font-weight: 700; }
196
- .body code.badge-priority-p1 { background: var(--navy); color: #fff; border-color: var(--navy); font-weight: 700; }
197
- .body code.badge-priority-p2 { background: var(--soft); color: var(--ink-faint); }
203
+ /* Priority badges · typographic only · mckinsey palette: deck blue
204
+ for P0, navy for P1, ink-faint for P2. */
205
+ .body code.badge-priority-p0 { color: var(--blue); }
206
+ .body code.badge-priority-p1 { color: var(--navy); }
207
+ .body code.badge-priority-p2 { color: var(--ink-faint); }
198
208
  .body blockquote {
199
209
  padding: 14px 18px;
200
210
  margin: 22px 0;
@@ -225,7 +235,7 @@ html, body {
225
235
  padding: 0;
226
236
  }
227
237
  .body section.section-bottom-line p { font-size: 22px; line-height: 1.4; color: #fff; font-weight: 500; max-width: 800px; }
228
- .body section.section-bottom-line p:not(:first-child) { font-size: 14.5px; line-height: 1.55; color: rgba(255, 255, 255, 0.78); margin-top: 18px; font-weight: 400; }
238
+ .body section.section-bottom-line p:not(:first-child) { font-size: 15px; line-height: 1.55; color: rgba(255, 255, 255, 0.78); margin-top: 18px; font-weight: 400; }
229
239
  .body section.section-bottom-line p strong { color: #fff; }
230
240
  .body section.section-bottom-line p em { color: var(--blue-mid); font-style: italic; }
231
241
 
@@ -286,7 +296,7 @@ html, body {
286
296
  padding: 22px 26px;
287
297
  margin: 22px 0 28px;
288
298
  }
289
- .body section.section-why-now p { font-size: 14.5px; line-height: 1.6; }
299
+ .body section.section-why-now p { font-size: 15px; line-height: 1.6; }
290
300
 
291
301
  /* Recommendations · numbered cards with priority dot. */
292
302
  .body section.section-recommendations ol,
@@ -357,7 +367,7 @@ html, body {
357
367
  position: relative;
358
368
  padding: 14px 0 14px 56px;
359
369
  border-top: 1px dashed var(--rule);
360
- font-size: 14.5px;
370
+ font-size: 15px;
361
371
  }
362
372
  .body section.section-new-questions ol > li:last-child { border-bottom: 1px dashed var(--rule); }
363
373
  .body section.section-new-questions ol > li::before {
@@ -373,7 +383,7 @@ html, body {
373
383
  width: 100%;
374
384
  border-collapse: collapse;
375
385
  margin: 22px 0 24px;
376
- font-size: 13.5px;
386
+ font-size: 14px;
377
387
  border-top: 2px solid var(--navy);
378
388
  }
379
389
  .body table.md-table th, .body table.md-table td {
@@ -387,11 +397,11 @@ html, body {
387
397
  color: var(--navy);
388
398
  font-family: var(--sans);
389
399
  font-weight: 700;
390
- font-size: 11px;
400
+ font-size: 12px;
391
401
  letter-spacing: 0.12em;
392
402
  text-transform: uppercase;
393
403
  }
394
- .body table.md-table td:first-child { font-weight: 600; color: var(--navy); }
404
+ .body table.md-table td:first-child { font-weight: 600; color: var(--navy); font-size: 14px; }
395
405
  .body table.md-table tr:hover td { background: var(--hover); }
396
406
 
397
407
  .body h2.section-methodology {
@@ -408,7 +418,7 @@ html, body {
408
418
  .body section.section-methodology { color: var(--ink-faint); font-size: 13px; line-height: 1.6; }
409
419
  .body section.section-methodology strong { color: var(--ink-soft); font-family: var(--mono); font-size: 12px; }
410
420
 
411
- .body pre.codeblock { background: var(--soft); border: 1px solid var(--rule); padding: 14px; font-family: var(--mono); font-size: 12.5px; color: var(--ink-soft); }
421
+ .body pre.codeblock { background: var(--soft); border: 1px solid var(--rule); padding: 14px; font-family: var(--mono); font-size: 13px; color: var(--ink-soft); }
412
422
  .body pre.mermaid { background: var(--bg); border-top: 2px solid var(--navy); border-bottom: 1px solid var(--rule); padding: 28px 24px 24px; margin: 22px 0 28px; min-height: 380px; text-align: center; font-family: var(--mono); font-size: 11px; color: var(--ink-faint); }
413
423
  .body pre.mermaid svg text { font-family: var(--sans) !important; }
414
424
 
@@ -474,7 +484,7 @@ html, body {
474
484
  .rec-meta-sep { color: var(--ink-faint); }
475
485
  .rec-risk {
476
486
  display: flex; align-items: flex-start; gap: 8px;
477
- font-size: 13.5px; line-height: 1.6; color: var(--ink-soft);
487
+ font-size: 14px; line-height: 1.6; color: var(--ink-soft);
478
488
  margin: 0; font-style: italic;
479
489
  }
480
490
  .rec-risk-icon { flex: 0 0 auto; color: #C62828; font-style: normal; }
@@ -527,34 +537,74 @@ html, body {
527
537
  <style>; this block tweaks surface, accent + typography to match
528
538
  the spine's voice. No `border-left`, no parallel borders against
529
539
  adjacent .chapter-num / section h2. */
530
- /* Clean white card with a thin top accent rule (navy) — boardroom
531
- deck feel. Top accent only (project rule: never `border-left` as
532
- callout treatment). */
540
+ /* Inherits the Swiss-editorial baseline (big thin numerals top, mute
541
+ mono label bottom, hairline grid). McKinsey palette: navy ink for
542
+ the value, green/red trends. The per-card border-top accent rail
543
+ from earlier iterations was retired — under the new layout it
544
+ collided with the baseline's `border-top` on the grid wrapper and
545
+ produced doubled hairlines. */
533
546
  .body .metric-strip-intro {
534
547
  color: var(--ink-soft);
535
- font-family: var(--mono);
536
- }
537
- .body .metric-card {
538
- background: #FFFFFF;
539
- border: 0.5px solid var(--rule-soft, rgba(0, 0, 0, 0.08));
540
- border-top: 2px solid var(--blue);
541
- padding: 16px 18px 14px;
542
548
  }
543
549
  .body .metric-label {
544
550
  color: var(--ink-soft);
545
- font-family: var(--mono);
546
551
  }
547
552
  .body .metric-value {
548
553
  color: var(--navy-deep, var(--blue-deep));
549
- font-family: "SF Mono", "JetBrains Mono", "Helvetica Neue", "Songti SC", monospace;
550
- font-size: 28px;
551
- font-weight: 700;
552
554
  }
553
- .body .metric-card[data-trend="up"] { border-top-color: var(--green, #1E8E3E); }
554
555
  .body .metric-card[data-trend="up"] .metric-value { color: var(--green, #1E8E3E); }
555
- .body .metric-card[data-trend="down"] { border-top-color: var(--red, #C5221F); }
556
556
  .body .metric-card[data-trend="down"] .metric-value { color: var(--red, #C5221F); }
557
557
  .body .metric-trend[data-trend="up"] { color: var(--green, #1E8E3E); }
558
558
  .body .metric-trend[data-trend="down"] { color: var(--red, #C5221F); }
559
- .body .metric-qualifier { color: var(--ink-mid); font-size: 12px; }
559
+ .body .metric-qualifier { color: var(--ink-mid); }
560
560
  .body .metric-attribution { color: var(--ink-faint); }
561
+
562
+ /* ─── Path comparison · per-spine treatment ──────────────────────
563
+ mckinsey uses red (weak) / green (strong) — clean deck palette
564
+ where the verdict reads at a glance. White card surface keeps
565
+ the boardroom register. */
566
+ .body .path-comparison .path {
567
+ background: #FFFFFF;
568
+ border: 1px solid var(--rule-soft, rgba(0, 0, 0, 0.08));
569
+ border-top-width: 3px;
570
+ }
571
+ .body .path-comparison .path-weak { border-top-color: var(--red, #C5221F); }
572
+ .body .path-comparison .path-strong { border-top-color: var(--green, #1E8E3E); }
573
+ .body .path-comparison .path-weak .path-tag { color: var(--red, #C5221F); }
574
+ .body .path-comparison .path-strong .path-tag { color: var(--green, #1E8E3E); }
575
+ .body .path-comparison .path-name { color: var(--navy-deep, var(--blue-deep)); font-weight: 600; }
576
+ .body .path-comparison .path li { color: var(--ink-soft); }
577
+ .body .path-comparison .path-weak li::before { background: var(--red, #C5221F); }
578
+ .body .path-comparison .path-strong li::before { background: var(--green, #1E8E3E); }
579
+ .body .path-comparison-implication { color: var(--ink-mid); }
580
+
581
+ /* ─── Views-compared · per-spine · mckinsey-deck ───────────────
582
+ Hairline frame · accent stripe on TOP (per project rule).
583
+ Alignment uses blue, divergence uses red. */
584
+ .body .vc-section-label { color: var(--blue); border-color: var(--rule-soft, rgba(0, 0, 0, 0.08)); }
585
+ .body .views-compared-alignment .vc-card {
586
+ border-color: var(--rule-soft, rgba(0, 0, 0, 0.08));
587
+ border-top-color: var(--blue);
588
+ }
589
+ .body .vc-card-headline { color: var(--navy-deep, var(--blue-deep)); font-weight: 600; }
590
+ .body .vc-chip { color: var(--ink-soft); border-color: var(--rule-soft); }
591
+ .body .vc-card-note { color: var(--ink-mid); }
592
+ .body .vc-fork {
593
+ border-color: var(--rule-soft, rgba(0, 0, 0, 0.08));
594
+ border-top-color: var(--red, #B7322C);
595
+ }
596
+ .body .vc-fork-hinge { color: var(--navy-deep, var(--blue-deep)); }
597
+ .body .vc-side { border-color: var(--rule-soft); }
598
+ .body .vc-side-label { color: var(--red, #B7322C); }
599
+ .body .vc-side-stance { color: var(--ink-mid); }
600
+ .body .vc-fork-resolution { color: var(--ink-mid); border-top-color: var(--rule-soft); }
601
+ .body .vc-resolution-label { color: var(--ink-faint); }
602
+ .body .vc-row-name { color: var(--navy-deep, var(--blue-deep)); font-weight: 600; }
603
+ .body .vc-row-stance { color: var(--blue); }
604
+ .body .vc-row-position { color: var(--ink-mid); }
605
+ .body .vc-row-quote { color: var(--navy-deep, var(--blue-deep)); }
606
+ .body .views-compared-synthesis {
607
+ border-color: var(--rule-soft);
608
+ border-top-color: var(--ink-faint);
609
+ }
610
+ .body .vc-synthesis-body { color: var(--ink); }