privateboard 0.1.0 → 0.1.3

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.
@@ -36,19 +36,30 @@
36
36
  --oxblood: #7A2E1A;
37
37
  --oxblood-deep: #4F1D10;
38
38
 
39
+ /* Cross-spine token aliases · used by the unified design system. */
40
+ --accent: var(--gold);
41
+ --warn: var(--oxblood);
42
+
39
43
  /* Confidence — text only, no fill */
40
44
  --conf-high: #3F5C2F;
41
45
  --conf-mid: #6E541A;
42
46
  --conf-low: #7A2E1A;
43
47
 
44
- /* Type · CJK fallbacks anchored on Songti SC for headless reach */
48
+ /* Type · CJK chain anchors on PingFang SC so Chinese glyphs render
49
+ as PingFang globally (user preference). Songti SC remains as a
50
+ last-resort fallback for headless contexts that can't reach
51
+ PingFang's font directory. */
45
52
  --serif: "Charter", "Source Serif Pro", "Iowan Old Style", Georgia,
46
- "Songti SC", "STSong", "Source Han Serif CN", "Noto Serif CJK SC", serif;
53
+ "PingFang SC", "PingFang TC", "Hiragino Sans GB",
54
+ "Source Han Sans CN", "Noto Sans CJK SC",
55
+ "Songti SC", "STSong", serif;
47
56
  --sans: "Inter", "Helvetica Neue", "Arial", -apple-system, BlinkMacSystemFont,
48
- "Songti SC", "STSong", "Hiragino Sans GB", "PingFang SC",
49
- "Source Han Sans CN", "Noto Sans CJK SC", sans-serif;
57
+ "PingFang SC", "PingFang TC", "Hiragino Sans GB",
58
+ "Source Han Sans CN", "Noto Sans CJK SC",
59
+ "Songti SC", "STSong", sans-serif;
50
60
  --mono: "SF Mono", "JetBrains Mono", "Menlo",
51
- "Songti SC", "STSong", monospace;
61
+ "PingFang SC", "PingFang TC", "Hiragino Sans GB",
62
+ "Source Han Sans CN", "Songti SC", "STSong", monospace;
52
63
  }
53
64
 
54
65
  * { box-sizing: border-box; margin: 0; padding: 0; }
@@ -56,7 +67,7 @@ html, body {
56
67
  background: var(--paper);
57
68
  color: var(--ink);
58
69
  font-family: var(--sans);
59
- font-size: 14.5px;
70
+ font-size: 15px;
60
71
  line-height: 1.65;
61
72
  -webkit-font-smoothing: antialiased;
62
73
  text-rendering: optimizeLegibility;
@@ -77,7 +88,7 @@ html, body {
77
88
  display: flex; justify-content: space-between; align-items: center;
78
89
  gap: 14px;
79
90
  font-family: var(--mono);
80
- font-size: 10.5px;
91
+ font-size: 11px;
81
92
  letter-spacing: 0.18em;
82
93
  text-transform: uppercase;
83
94
  border-bottom: 1px solid var(--rule);
@@ -106,15 +117,6 @@ html, body {
106
117
  position: relative;
107
118
  border-bottom: 1px solid var(--rule);
108
119
  }
109
- /* Single thin gold rule across the top — the only ornament. */
110
- .cover::before {
111
- content: "";
112
- position: absolute;
113
- top: 0; left: 56px; right: 56px;
114
- height: 1px;
115
- background: var(--gold);
116
- }
117
-
118
120
  .cover-tag {
119
121
  display: flex;
120
122
  align-items: center;
@@ -168,7 +170,7 @@ html, body {
168
170
  @media (max-width: 720px) { .cover-byline { grid-template-columns: repeat(2, 1fr); gap: 22px; } }
169
171
  .byline-block .label {
170
172
  font-family: var(--mono);
171
- font-size: 9.5px;
173
+ font-size: 10px;
172
174
  letter-spacing: 0.24em;
173
175
  text-transform: uppercase;
174
176
  color: var(--gold);
@@ -177,7 +179,7 @@ html, body {
177
179
  }
178
180
  .byline-block .value {
179
181
  font-family: var(--sans);
180
- font-size: 12.5px;
182
+ font-size: 13px;
181
183
  color: var(--ink);
182
184
  font-weight: 400;
183
185
  line-height: 1.5;
@@ -200,7 +202,7 @@ html, body {
200
202
  }
201
203
  .cover-versions-label {
202
204
  font-family: var(--mono);
203
- font-size: 9.5px;
205
+ font-size: 10px;
204
206
  letter-spacing: 0.24em;
205
207
  text-transform: uppercase;
206
208
  color: var(--ink-faint);
@@ -248,7 +250,6 @@ html, body {
248
250
  font-size: 24px;
249
251
  line-height: 1.24;
250
252
  margin: 0 0 18px;
251
- max-width: 720px;
252
253
  letter-spacing: -0.018em;
253
254
  font-weight: 600;
254
255
  }
@@ -268,13 +269,15 @@ html, body {
268
269
  font-weight: 500;
269
270
  }
270
271
  .body p {
271
- margin: 12px 0;
272
+ margin: 14px 0;
272
273
  line-height: 1.7;
273
274
  color: var(--ink-soft);
274
- font-size: 14.5px;
275
+ /* 16px · comfortable reading register, body dominant over the
276
+ 14px table cells. Earlier 14.5 / 13.5 swings were too tight. */
277
+ font-size: 16px;
275
278
  }
276
- .body ul, .body ol { margin: 12px 0 16px 22px; }
277
- .body li { margin: 6px 0; line-height: 1.65; color: var(--ink-soft); font-size: 14px; }
279
+ .body ul, .body ol { margin: 14px 0 18px 22px; }
280
+ .body li { margin: 8px 0; line-height: 1.7; color: var(--ink-soft); font-size: 15px; }
278
281
  .body strong { color: var(--ink); font-weight: 600; }
279
282
  .body em { color: var(--gold-deep); font-style: italic; }
280
283
 
@@ -284,7 +287,7 @@ html, body {
284
287
  border: 1px solid var(--rule-strong);
285
288
  padding: 1px 7px;
286
289
  font-family: var(--mono);
287
- font-size: 11.5px;
290
+ font-size: 12px;
288
291
  color: var(--ink);
289
292
  letter-spacing: 0.04em;
290
293
  border-radius: 2px;
@@ -293,18 +296,12 @@ html, body {
293
296
  .body code.badge-confidence-high { color: var(--conf-high); border-color: rgba(63, 92, 47, 0.4); }
294
297
  .body code.badge-confidence-medium { color: var(--conf-mid); border-color: rgba(110, 84, 26, 0.4); }
295
298
  .body code.badge-confidence-low { color: var(--conf-low); border-color: rgba(122, 46, 26, 0.4); }
296
- .body code.badge-priority-p0 {
297
- background: var(--ink); color: var(--paper); border-color: var(--ink);
298
- font-weight: 600; letter-spacing: 0.14em;
299
- }
300
- .body code.badge-priority-p1 {
301
- background: transparent; color: var(--ink); border-color: var(--ink);
302
- font-weight: 600; letter-spacing: 0.12em;
303
- }
304
- .body code.badge-priority-p2 {
305
- background: transparent; color: var(--ink-faint); border-color: var(--rule-strong);
306
- letter-spacing: 0.1em;
307
- }
299
+ /* Priority badges · typographic only · a16z uses gold-deep for the
300
+ strong-priority accent (matches its accent throughout) and ink /
301
+ ink-faint for the rest. */
302
+ .body code.badge-priority-p0 { color: var(--gold-deep); }
303
+ .body code.badge-priority-p1 { color: var(--ink); }
304
+ .body code.badge-priority-p2 { color: var(--ink-faint); }
308
305
 
309
306
  .body blockquote {
310
307
  padding: 14px 0;
@@ -326,7 +323,7 @@ html, body {
326
323
  background: transparent;
327
324
  margin: 0 0 44px;
328
325
  padding: 0 0 36px;
329
- border-top: 1.5px solid var(--ink);
326
+ border-top: 2px solid var(--ink);
330
327
  padding-top: 28px;
331
328
  border-bottom: 1px solid var(--rule);
332
329
  }
@@ -368,7 +365,7 @@ html, body {
368
365
  margin: 0 0 44px;
369
366
  padding: 28px 0 36px;
370
367
  background: transparent;
371
- border-top: 1.5px solid var(--ink);
368
+ border-top: 2px solid var(--ink);
372
369
  border-bottom: 1px solid var(--rule);
373
370
  }
374
371
  .body section.section-thesis p:first-child {
@@ -387,7 +384,7 @@ html, body {
387
384
  font-style: italic;
388
385
  }
389
386
  .body section.section-thesis p:not(:first-child) {
390
- font-size: 14.5px; color: var(--ink-soft); font-style: normal;
387
+ font-size: 15px; color: var(--ink-soft); font-style: normal;
391
388
  }
392
389
 
393
390
  /* ─── Working hypothesis ────────────────────────────────────── */
@@ -411,7 +408,7 @@ html, body {
411
408
  research-note's strategic frame. */
412
409
  .body h2.section-strategic-outlook {
413
410
  font-family: var(--mono);
414
- font-size: 10.5px;
411
+ font-size: 11px;
415
412
  color: var(--gold);
416
413
  text-transform: uppercase;
417
414
  letter-spacing: 0.26em;
@@ -421,7 +418,7 @@ html, body {
421
418
  .body section.section-strategic-outlook {
422
419
  margin: 0 0 44px;
423
420
  padding: 28px 0 36px;
424
- border-top: 1.5px solid var(--ink);
421
+ border-top: 2px solid var(--ink);
425
422
  border-bottom: 1px solid var(--rule);
426
423
  }
427
424
  .body section.section-strategic-outlook p:first-child {
@@ -466,7 +463,7 @@ html, body {
466
463
  top: 24px; left: 0;
467
464
  font-family: var(--mono);
468
465
  font-weight: 500;
469
- font-size: 10.5px;
466
+ font-size: 11px;
470
467
  color: var(--gold);
471
468
  line-height: 1;
472
469
  letter-spacing: 0.16em;
@@ -483,7 +480,7 @@ html, body {
483
480
  letter-spacing: -0.005em;
484
481
  }
485
482
  .body section.section-critical-assumptions ol > li p {
486
- font-size: 13.5px;
483
+ font-size: 14px;
487
484
  line-height: 1.6;
488
485
  color: var(--ink-soft);
489
486
  }
@@ -512,7 +509,7 @@ html, body {
512
509
  border-top: 1px solid var(--gold);
513
510
  }
514
511
  .body section.section-scenario-tree h3:first-of-type {
515
- border-top: 1.5px solid var(--ink);
512
+ border-top: 2px solid var(--ink);
516
513
  padding-top: 18px;
517
514
  }
518
515
  .body section.section-scenario-tree p {
@@ -538,7 +535,7 @@ html, body {
538
535
  .body section.section-scenario-tree ul > li {
539
536
  position: relative;
540
537
  padding-left: 14px;
541
- font-size: 13.5px;
538
+ font-size: 14px;
542
539
  line-height: 1.6;
543
540
  color: var(--ink-soft);
544
541
  margin: 4px 0;
@@ -555,22 +552,22 @@ html, body {
555
552
  Override the default md-table treatment with a tighter,
556
553
  institutional-feel grid. Mono headers, hairline rules. */
557
554
  .body section.section-leading-indicators table.md-table {
558
- font-size: 13px;
559
- border-top: 1.5px solid var(--ink);
555
+ font-size: 14px;
556
+ border-top: 2px solid var(--ink);
560
557
  }
561
558
  .body section.section-leading-indicators table.md-table th {
562
559
  background: transparent;
563
560
  color: var(--gold);
564
561
  font-family: var(--mono);
565
562
  font-weight: 600;
566
- font-size: 9.5px;
563
+ font-size: 12px;
567
564
  letter-spacing: 0.22em;
568
565
  text-transform: uppercase;
569
566
  padding: 10px 12px;
570
567
  }
571
568
  .body section.section-leading-indicators table.md-table td {
572
569
  padding: 12px;
573
- font-size: 13px;
570
+ font-size: 14px;
574
571
  color: var(--ink-soft);
575
572
  vertical-align: top;
576
573
  line-height: 1.5;
@@ -580,7 +577,7 @@ html, body {
580
577
  font-weight: 600;
581
578
  color: var(--ink);
582
579
  font-family: var(--mono);
583
- font-size: 11.5px;
580
+ font-size: 14px;
584
581
  letter-spacing: 0.04em;
585
582
  width: 26%;
586
583
  }
@@ -616,7 +613,7 @@ html, body {
616
613
  font-size: 16px; line-height: 1.3; margin: 0 0 10px; font-weight: 600;
617
614
  }
618
615
  .body section.section-headline-findings .pillar p {
619
- font-size: 13.5px; color: var(--ink-soft); line-height: 1.6; margin: 8px 0;
616
+ font-size: 14px; color: var(--ink-soft); line-height: 1.6; margin: 8px 0;
620
617
  }
621
618
 
622
619
  /* ─── Big Ideas · disciplined typographic list ───────────────── */
@@ -667,7 +664,7 @@ html, body {
667
664
  border-top: 1px solid var(--gold);
668
665
  border-bottom: 1px solid var(--rule);
669
666
  }
670
- .body section.section-why-now p { font-size: 14.5px; line-height: 1.65; color: var(--ink); }
667
+ .body section.section-why-now p { font-size: 15px; line-height: 1.65; color: var(--ink); }
671
668
  .body section.section-why-now p:first-child { font-weight: 500; color: var(--ink); }
672
669
 
673
670
  /* ─── The Bet · disciplined numbered list ───────────────────── */
@@ -738,7 +735,7 @@ html, body {
738
735
  border-bottom: 1px solid var(--rule);
739
736
  }
740
737
  .body section.section-two-paths > p:first-child {
741
- font-size: 14.5px; color: var(--ink-soft); margin-bottom: 16px;
738
+ font-size: 15px; color: var(--ink-soft); margin-bottom: 16px;
742
739
  }
743
740
 
744
741
  /* ─── Recommendations / Considerations · editorial cards ───── */
@@ -752,17 +749,34 @@ html, body {
752
749
 
753
750
  .body section.section-recommendations li.rec-item,
754
751
  .body section.section-considerations li.rec-item {
755
- padding: 0; margin: 36px 0 0; list-style: none; border: none;
752
+ padding: 0;
753
+ /* Bigger inter-card gap (36 → 48) so each recommendation reads as
754
+ its own block; the user's complaint about the section was
755
+ "stacked / hard to see clearly" — most of that was the cards
756
+ packing too tight against each other after they each grew
757
+ critical-dependency + risk rows. */
758
+ margin: 48px 0 0;
759
+ list-style: none;
760
+ border: none;
756
761
  }
757
762
  .body section.section-recommendations li.rec-item:first-child,
758
763
  .body section.section-considerations li.rec-item:first-child { margin-top: 22px; }
759
764
  .body section.section-recommendations li.rec-item::before,
760
765
  .body section.section-considerations li.rec-item::before { display: none; }
761
766
 
762
- .rec-rule { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
767
+ /* Header row · "01 P0 ──────────" with a subtle hairline that
768
+ delimits the card without screaming. P0 still gets a gold tint to
769
+ carry priority, but no longer paints a 2px gold bar — the
770
+ priority badge itself is enough signal. */
771
+ .rec-rule {
772
+ display: flex;
773
+ align-items: center;
774
+ gap: 12px;
775
+ margin-bottom: 18px;
776
+ }
763
777
  .rec-num {
764
778
  font-family: var(--mono);
765
- font-size: 10.5px;
779
+ font-size: 11px;
766
780
  font-weight: 500;
767
781
  color: var(--ink-faint);
768
782
  letter-spacing: 0.2em;
@@ -774,37 +788,55 @@ html, body {
774
788
  font-size: 10px;
775
789
  padding: 2px 8px;
776
790
  }
777
- .rec-rule-line { flex: 1 1 auto; height: 1px; background: var(--rule); display: block; }
778
- .rec-priority-p0 .rec-rule-line { background: var(--gold); height: 1.5px; }
791
+ .rec-rule-line {
792
+ flex: 1 1 auto;
793
+ height: 1px;
794
+ background: var(--rule);
795
+ display: block;
796
+ opacity: 0.7;
797
+ }
779
798
  .rec-priority-p0 .rec-num { color: var(--gold); }
799
+
800
+ /* Action title · serif display, 19px so it reads as the card's
801
+ headline. Slight bump from 18 → 19 since body p is now 16px. */
780
802
  .rec-action {
781
803
  font-family: var(--serif);
782
- font-size: 18px;
783
- line-height: 1.32;
804
+ font-size: 19px;
805
+ line-height: 1.35;
784
806
  color: var(--ink);
785
807
  font-weight: 600;
786
808
  letter-spacing: -0.012em;
787
809
  margin: 0 0 14px;
788
810
  max-width: 64ch;
789
811
  }
812
+
813
+ /* Rationale · normal body register. Bumped 14 → 15.5 so it tracks
814
+ the new 16px body baseline (still slightly tighter to keep the
815
+ meta strip below readable as secondary). */
790
816
  .rec-rationale {
791
- font-size: 14px;
817
+ font-size: 16px;
792
818
  line-height: 1.7;
793
819
  color: var(--ink-soft);
794
- margin: 0 0 18px;
820
+ margin: 0 0 16px;
795
821
  max-width: 64ch;
796
822
  }
823
+
824
+ /* Meta strip · compressed inline label/value pairs. Same as before
825
+ but slightly larger gap so 3-4 pairs don't collide on one row. */
797
826
  .rec-meta {
798
- display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px;
799
- margin: 0 0 14px;
800
- font-size: 12.5px;
801
- line-height: 1.6;
827
+ display: flex;
828
+ flex-wrap: wrap;
829
+ align-items: baseline;
830
+ gap: 6px 14px;
831
+ margin: 0 0 12px;
832
+ font-size: 13px;
833
+ line-height: 1.65;
802
834
  color: var(--ink);
803
835
  }
804
836
  .rec-meta-pair { display: inline-flex; align-items: baseline; gap: 7px; min-width: 0; }
805
837
  .rec-meta-label {
806
838
  font-family: var(--mono);
807
- font-size: 9.5px;
839
+ font-size: 10px;
808
840
  color: var(--gold);
809
841
  letter-spacing: 0.22em;
810
842
  text-transform: uppercase;
@@ -812,29 +844,62 @@ html, body {
812
844
  }
813
845
  .rec-meta-value { color: var(--ink); font-weight: 500; }
814
846
  .rec-meta-sep { color: var(--ink-muted); }
847
+
848
+ /* Dependency · "DEPENDS ON — body". Same shape as risk row but in a
849
+ neutral ink-mid colour so it doesn't compete with the warning
850
+ register of the risk row. */
851
+ .rec-dependency {
852
+ display: flex;
853
+ align-items: flex-start;
854
+ gap: 8px;
855
+ font-size: 13px;
856
+ line-height: 1.65;
857
+ color: var(--ink-mid);
858
+ margin: 0 0 8px;
859
+ padding: 0;
860
+ background: transparent;
861
+ }
862
+ .rec-dependency-prefix {
863
+ font-family: var(--mono);
864
+ font-size: 10px;
865
+ color: var(--ink-faint);
866
+ letter-spacing: 0.22em;
867
+ text-transform: uppercase;
868
+ font-weight: 500;
869
+ flex: 0 0 auto;
870
+ }
871
+ .rec-dependency-sep { color: var(--ink-faint); margin: 0 2px; flex: 0 0 auto; }
872
+ .rec-dependency-text { flex: 1 1 auto; }
873
+
874
+ /* Risk · "RISK IF SKIPPED — body". Stripped the oxblood top-border
875
+ that gave every card a coloured rule (per the project rule about
876
+ not piling adjacent borders); the oxblood prefix + italic body do
877
+ the warning work themselves. Slightly larger body so it tracks
878
+ the rest of the card's new sizing. */
815
879
  .rec-risk {
816
- display: flex; align-items: flex-start; gap: 8px;
817
- font-size: 12.5px;
818
- line-height: 1.6;
880
+ display: flex;
881
+ align-items: flex-start;
882
+ gap: 8px;
883
+ font-size: 13px;
884
+ line-height: 1.65;
819
885
  color: var(--oxblood-deep);
820
886
  margin: 0;
821
- font-style: italic;
822
- padding: 12px 0 4px;
887
+ padding: 0;
823
888
  background: transparent;
824
- border-top: 1px solid var(--oxblood);
889
+ font-style: italic;
825
890
  }
826
891
  .rec-risk-text { flex: 1 1 auto; }
827
892
  .rec-risk-prefix {
828
893
  font-family: var(--mono);
829
894
  font-style: normal;
830
- font-size: 9.5px;
895
+ font-size: 10px;
831
896
  color: var(--oxblood);
832
897
  letter-spacing: 0.24em;
833
898
  text-transform: uppercase;
834
899
  font-weight: 500;
835
- margin-right: 4px;
900
+ flex: 0 0 auto;
836
901
  }
837
- .rec-risk-sep { color: var(--oxblood); margin-right: 4px; }
902
+ .rec-risk-sep { color: var(--oxblood); margin: 0 2px; flex: 0 0 auto; }
838
903
 
839
904
  /* ─── New Questions · op-ed cards ──────────────────────────── */
840
905
  .body section.section-new-questions ol { padding: 0; margin: 24px 0 0; list-style: none; }
@@ -846,7 +911,7 @@ html, body {
846
911
  .nq-rule { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
847
912
  .nq-num {
848
913
  font-family: var(--mono);
849
- font-size: 10.5px;
914
+ font-size: 11px;
850
915
  font-weight: 500;
851
916
  color: var(--gold);
852
917
  letter-spacing: 0.22em;
@@ -857,7 +922,7 @@ html, body {
857
922
  flex: 0 0 auto;
858
923
  display: inline-flex; align-items: baseline; gap: 6px;
859
924
  font-family: var(--mono);
860
- font-size: 9.5px;
925
+ font-size: 10px;
861
926
  letter-spacing: 0.2em;
862
927
  text-transform: uppercase;
863
928
  color: var(--ink-faint);
@@ -940,7 +1005,7 @@ html, body {
940
1005
  }
941
1006
  .body section.section-planning-assumption blockquote {
942
1007
  border: none; padding: 0; margin: 0; background: none;
943
- font-style: normal; font-size: 14.5px;
1008
+ font-style: normal; font-size: 15px;
944
1009
  }
945
1010
  .body section.section-planning-assumption blockquote::before { display: none; }
946
1011
  .body section.section-planning-assumption blockquote strong:first-child {
@@ -959,8 +1024,8 @@ html, body {
959
1024
  width: 100%;
960
1025
  border-collapse: collapse;
961
1026
  margin: 22px 0 28px;
962
- font-size: 13.5px;
963
- border-top: 1.5px solid var(--ink);
1027
+ font-size: 14px;
1028
+ border-top: 2px solid var(--ink);
964
1029
  }
965
1030
  .body table.md-table th, .body table.md-table td {
966
1031
  padding: 12px 14px;
@@ -974,11 +1039,11 @@ html, body {
974
1039
  color: var(--ink-faint);
975
1040
  font-family: var(--mono);
976
1041
  font-weight: 500;
977
- font-size: 10px;
1042
+ font-size: 12px;
978
1043
  letter-spacing: 0.18em;
979
1044
  text-transform: uppercase;
980
1045
  }
981
- .body table.md-table td:first-child { font-weight: 600; color: var(--ink); }
1046
+ .body table.md-table td:first-child { font-weight: 600; color: var(--ink); font-size: 14px; }
982
1047
 
983
1048
  /* ─── Methodology footer ──────────────────────────────────── */
984
1049
  .body h2.section-methodology {
@@ -994,14 +1059,14 @@ html, body {
994
1059
  }
995
1060
  .body section.section-methodology {
996
1061
  color: var(--ink-faint);
997
- font-size: 12.5px;
1062
+ font-size: 13px;
998
1063
  line-height: 1.65;
999
1064
  }
1000
1065
  .body section.section-methodology strong {
1001
1066
  color: var(--ink-soft);
1002
1067
  font-family: var(--mono);
1003
1068
  font-weight: 500;
1004
- font-size: 10.5px;
1069
+ font-size: 11px;
1005
1070
  letter-spacing: 0.12em;
1006
1071
  text-transform: uppercase;
1007
1072
  }
@@ -1012,7 +1077,7 @@ html, body {
1012
1077
  border-bottom: 1px solid var(--rule);
1013
1078
  padding: 14px 0;
1014
1079
  font-family: var(--mono);
1015
- font-size: 12.5px;
1080
+ font-size: 13px;
1016
1081
  color: var(--ink-soft);
1017
1082
  margin: 18px 0;
1018
1083
  overflow-x: auto;
@@ -1053,3 +1118,85 @@ html, body {
1053
1118
  font-size: 11px;
1054
1119
  }
1055
1120
  .placeholder.error { color: var(--oxblood); }
1121
+
1122
+ /* ─── Metric strip · per-spine treatment ─────────────────────────
1123
+ Inherits the spine-agnostic baseline in public/report.html's inline
1124
+ <style>; this block tweaks surface, accent + typography to match
1125
+ the spine's voice. No `border-left`, no parallel borders against
1126
+ adjacent .chapter-num / section h2. */
1127
+ /* Inherits the Swiss-editorial baseline. a16z signatures: gold-deep
1128
+ label colour (the spine's accent) + oxblood downside trend. The
1129
+ earlier card-surface tint + gold-soft frame was retired — under
1130
+ the baseline's hairline-grid layout it produced a doubled frame
1131
+ around each cell. */
1132
+ .body .metric-strip-intro {
1133
+ color: var(--ink-soft);
1134
+ }
1135
+ .body .metric-label {
1136
+ color: var(--gold-deep);
1137
+ font-weight: 700;
1138
+ }
1139
+ .body .metric-value {
1140
+ color: var(--ink);
1141
+ }
1142
+ .body .metric-card[data-trend="up"] .metric-value { color: var(--gold-deep); }
1143
+ .body .metric-card[data-trend="down"] .metric-value { color: var(--oxblood-deep); }
1144
+ .body .metric-trend[data-trend="up"] { color: var(--gold-deep); }
1145
+ .body .metric-trend[data-trend="down"] { color: var(--oxblood-deep); }
1146
+ .body .metric-qualifier { color: var(--ink-soft); }
1147
+ .body .metric-attribution { color: var(--ink-faint); letter-spacing: 0.08em; }
1148
+
1149
+ /* Colophon · 56px horizontal gutter to match this spine's wider
1150
+ body padding (most spines use 32px; a16z is the outlier). Without
1151
+ this the brand card sits flush with the .doc edge while the body
1152
+ content above sits 56px inset — visibly misaligned. */
1153
+ .colophon { margin: 32px 56px 8px; }
1154
+
1155
+ /* ─── Path comparison · per-spine treatment ──────────────────────
1156
+ a16z uses oxblood (weak) / gold-deep (strong) — investment-thesis
1157
+ "the contrarian read vs the obvious bet" framing. */
1158
+ .body .path-comparison .path {
1159
+ background: var(--gold-pale, rgba(201, 164, 107, 0.06));
1160
+ border: 1px solid var(--gold-soft, rgba(201, 164, 107, 0.18));
1161
+ border-top-width: 3px;
1162
+ }
1163
+ .body .path-comparison .path-weak { border-top-color: var(--oxblood-deep); }
1164
+ .body .path-comparison .path-strong { border-top-color: var(--gold-deep); }
1165
+ .body .path-comparison .path-weak .path-tag { color: var(--oxblood-deep); }
1166
+ .body .path-comparison .path-strong .path-tag { color: var(--gold-deep); }
1167
+ .body .path-comparison .path-name { color: var(--ink); font-weight: 600; }
1168
+ .body .path-comparison .path li { color: var(--ink-soft); }
1169
+ .body .path-comparison .path-weak li::before { background: var(--oxblood-deep); }
1170
+ .body .path-comparison .path-strong li::before { background: var(--gold-deep); }
1171
+ .body .path-comparison-implication { color: var(--ink-soft); }
1172
+
1173
+ /* ─── Views-compared · per-spine · a16z-thesis ─────────────────
1174
+ Hairline frame · accent stripe on TOP (per project rule).
1175
+ Alignment uses gold-deep, divergence uses oxblood-deep. */
1176
+ .body .vc-section-label { color: var(--gold-deep); border-color: var(--gold-soft, rgba(201, 164, 107, 0.2)); }
1177
+ .body .views-compared-alignment .vc-card {
1178
+ border-color: var(--gold-soft, rgba(201, 164, 107, 0.2));
1179
+ border-top-color: var(--gold-deep);
1180
+ }
1181
+ .body .vc-card-headline { color: var(--ink); font-weight: 600; }
1182
+ .body .vc-chip { color: var(--ink-soft); border-color: var(--gold-soft, rgba(201, 164, 107, 0.25)); }
1183
+ .body .vc-card-note { color: var(--ink-soft); }
1184
+ .body .vc-fork {
1185
+ border-color: var(--gold-soft, rgba(201, 164, 107, 0.2));
1186
+ border-top-color: var(--oxblood-deep, var(--gold-deep));
1187
+ }
1188
+ .body .vc-fork-hinge { color: var(--ink); }
1189
+ .body .vc-side { border-color: var(--gold-soft, rgba(201, 164, 107, 0.18)); }
1190
+ .body .vc-side-label { color: var(--oxblood-deep, var(--gold-deep)); }
1191
+ .body .vc-side-stance { color: var(--ink-soft); }
1192
+ .body .vc-fork-resolution { color: var(--ink-soft); border-top-color: var(--gold-soft, rgba(201, 164, 107, 0.18)); }
1193
+ .body .vc-resolution-label { color: var(--ink-faint); }
1194
+ .body .vc-row-name { color: var(--ink); font-weight: 600; }
1195
+ .body .vc-row-stance { color: var(--gold-deep); }
1196
+ .body .vc-row-position { color: var(--ink-soft); }
1197
+ .body .vc-row-quote { color: var(--ink); }
1198
+ .body .views-compared-synthesis {
1199
+ border-color: var(--gold-soft, rgba(201, 164, 107, 0.2));
1200
+ border-top-color: var(--ink-faint);
1201
+ }
1202
+ .body .vc-synthesis-body { color: var(--ink); }