anentrypoint-design 0.0.383 → 0.0.385

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.
package/community.css CHANGED
@@ -273,7 +273,7 @@
273
273
  justify-content: center;
274
274
  width: 12px;
275
275
  height: 12px;
276
- font-size: 10px;
276
+ font-size: var(--fs-pico);
277
277
  transform: rotate(90deg);
278
278
  transition: transform var(--dur-base) var(--ease);
279
279
  flex-shrink: 0;
@@ -551,7 +551,7 @@
551
551
  display: inline-flex;
552
552
  align-items: center;
553
553
  justify-content: center;
554
- font-size: 10px;
554
+ font-size: var(--fs-pico);
555
555
  font-weight: 600;
556
556
  overflow: hidden;
557
557
  transition: box-shadow var(--dur-snap) var(--ease);
@@ -1151,7 +1151,7 @@
1151
1151
  border: none;
1152
1152
  background: transparent;
1153
1153
  color: var(--fg);
1154
- font-size: 18px;
1154
+ font-size: var(--fs-lg);
1155
1155
  line-height: 1;
1156
1156
  cursor: pointer;
1157
1157
  border-radius: var(--r-1);
@@ -1182,7 +1182,7 @@
1182
1182
  bar here was the generic accent-stripe tell; the real accent still lands
1183
1183
  on .cm-rb-author. */
1184
1184
  border-left: var(--bw-hair) solid var(--rule-strong);
1185
- font-size: 0.85rem;
1185
+ font-size: var(--fs-xs);
1186
1186
  }
1187
1187
  .cm-rb-label { flex: none; color: var(--fg-2); }
1188
1188
  .cm-rb-author { color: var(--accent); font-weight: 600; }
@@ -1201,7 +1201,7 @@
1201
1201
  border: none;
1202
1202
  background: transparent;
1203
1203
  color: var(--fg-2);
1204
- font-size: 13px;
1204
+ font-size: var(--fs-tiny);
1205
1205
  line-height: 1;
1206
1206
  cursor: pointer;
1207
1207
  border-radius: var(--r-1);
@@ -1216,7 +1216,7 @@
1216
1216
  gap: var(--space-2);
1217
1217
  width: 100%;
1218
1218
  padding: var(--space-2) var(--space-3);
1219
- font-size: 0.875rem;
1219
+ font-size: var(--fs-xs);
1220
1220
  font-weight: 500;
1221
1221
  }
1222
1222
  .cm-banner.clickable { cursor: pointer; }
@@ -1547,7 +1547,7 @@
1547
1547
  border: var(--bw-hair) solid var(--rule-strong);
1548
1548
  border-radius: var(--r-1);
1549
1549
  background: var(--bg-3); color: var(--fg);
1550
- cursor: pointer; font-size: 16px; line-height: 1;
1550
+ cursor: pointer; font-size: var(--fs-body); line-height: 1;
1551
1551
  }
1552
1552
  .vx-vc-btn:hover { background: var(--bg-4, var(--bg-3)); }
1553
1553
  .vx-vc-on { background: var(--accent); color: var(--accent-fg); border-color: var(--accent); }
@@ -1577,11 +1577,11 @@
1577
1577
  display: flex; align-items: center; justify-content: space-between;
1578
1578
  padding: var(--space-2); border-bottom: var(--bw-hair) solid var(--rule);
1579
1579
  }
1580
- .cm-tp-title { font-weight: 700; font-size: var(--fs-1, 14px); }
1580
+ .cm-tp-title { font-weight: 700; font-size: var(--fs-xs); }
1581
1581
  .cm-tp-head-actions { display: flex; gap: var(--space-1); }
1582
1582
  .cm-tp-new, .cm-tp-close {
1583
1583
  border: none; background: transparent; color: var(--fg-2, var(--fg));
1584
- cursor: pointer; font-size: 16px; width: 24px; height: 24px; border-radius: var(--r-1);
1584
+ cursor: pointer; font-size: var(--fs-body); width: 24px; height: 24px; border-radius: var(--r-1);
1585
1585
  }
1586
1586
  .cm-tp-new:hover, .cm-tp-close:hover { background: var(--bg-3); color: var(--fg); }
1587
1587
  .cm-tp-list { flex: 1; min-height: 0; overflow-y: auto; }
@@ -1597,9 +1597,9 @@
1597
1597
  .cm-tp-item.is-active { background: var(--bg-3); box-shadow: inset 3px 0 0 var(--accent); }
1598
1598
  .cm-tp-item.is-unread .cm-tp-item-title { font-weight: 700; }
1599
1599
  .cm-tp-dot { position: absolute; left: 4px; top: 50%; transform: translateY(-50%); width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }
1600
- .cm-tp-item-title { font-size: var(--fs-1, 14px); }
1601
- .cm-tp-item-snippet { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .8; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1602
- .cm-tp-item-meta { display: flex; gap: var(--space-2); font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
1600
+ .cm-tp-item-title { font-size: var(--fs-xs); }
1601
+ .cm-tp-item-snippet { font-size: var(--fs-micro); color: var(--fg-2, var(--fg)); opacity: .8; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1602
+ .cm-tp-item-meta { display: flex; gap: var(--space-2); font-size: var(--fs-micro); color: var(--fg-2, var(--fg)); opacity: .7; }
1603
1603
  .cm-tp-empty, .cm-forum-empty, .cm-channel-empty, .cm-member-empty {
1604
1604
  display: flex; flex-direction: column; align-items: center; gap: var(--space-2);
1605
1605
  padding: var(--space-4) var(--space-3); text-align: center;
@@ -1651,10 +1651,10 @@
1651
1651
  .cm-forum-item { display: flex; flex-direction: column; gap: var(--space-1); width: 100%; text-align: left; cursor: pointer; padding: var(--space-2) var(--space-3); border: none; background: transparent; border-bottom: var(--bw-hair) solid var(--rule); color: var(--fg); }
1652
1652
  .cm-forum-item:hover { background: var(--bg-3); }
1653
1653
  .cm-forum-item-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); }
1654
- .cm-forum-item-title { font-weight: 700; font-size: var(--fs-1, 14px); }
1655
- .cm-forum-item-replies { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .8; white-space: nowrap; }
1656
- .cm-forum-item-snippet { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .85; }
1657
- .cm-forum-item-meta { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
1654
+ .cm-forum-item-title { font-weight: 700; font-size: var(--fs-xs); }
1655
+ .cm-forum-item-replies { font-size: var(--fs-micro); color: var(--fg-2, var(--fg)); opacity: .8; white-space: nowrap; }
1656
+ .cm-forum-item-snippet { font-size: var(--fs-micro); color: var(--fg-2, var(--fg)); opacity: .85; }
1657
+ .cm-forum-item-meta { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; font-size: var(--fs-micro); color: var(--fg-2, var(--fg)); opacity: .7; }
1658
1658
  .cm-forum-item-tags { display: inline-flex; gap: var(--space-1); }
1659
1659
  /* 1px vertical is OFF-SCALE ON PURPOSE — the tag is an inline chip inside the
1660
1660
  forum meta row; --space-hair (2px) tips it past the row height. */
@@ -1663,7 +1663,7 @@
1663
1663
  /* PageView — cm-page / cm-page-* */
1664
1664
  .cm-page { display: flex; flex-direction: column; height: 100%; min-height: 0; overflow-y: auto; background: var(--bg-1, var(--bg-2)); color: var(--fg); }
1665
1665
  .cm-page-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); padding: var(--space-3); border-bottom: var(--bw-hair) solid var(--rule); }
1666
- .cm-page-title { margin: 0; font-size: var(--fs-3, 20px); font-weight: 700; }
1666
+ .cm-page-title { margin: 0; font-size: var(--fs-xl); font-weight: 700; }
1667
1667
  .cm-page-edit { padding: var(--space-1) var(--space-2); border: var(--bw-hair) solid var(--rule-strong); border-radius: var(--r-1); background: var(--bg-3); color: var(--fg); cursor: pointer; }
1668
1668
  .cm-page-body { padding: var(--space-3); line-height: 1.6; }
1669
1669
  .cm-page-empty { color: var(--fg-2, var(--fg)); opacity: .7; }
@@ -1677,8 +1677,11 @@
1677
1677
  .fd-page-inner > * { min-width: 0; }
1678
1678
  .fd-loading { display: flex; align-items: center; gap: var(--space-2, 10px); padding: var(--space-4, 24px); color: var(--fg-2, var(--fg)); }
1679
1679
  .fd-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-2, 10px); padding: var(--space-5, 32px) var(--space-3, 16px); color: var(--fg-2, var(--fg)); text-align: center; }
1680
+ /* 28px is an ICON size (empty-state mark), not a type tier — the --fs-* ladder
1681
+ tops out at --fs-xl (21px) before every remaining rung becomes a fluid
1682
+ heading clamp, so neither substitutes without visibly resizing the mark. */
1680
1683
  .fd-empty-glyph { font-size: 28px; opacity: .55; line-height: 1; }
1681
- .fd-pre { margin: 0; padding: var(--space-2, 10px); background: var(--bg-3, var(--panel-bg-2)); border: var(--bw-hair, 1px) solid var(--rule, var(--panel-accent)); border-radius: var(--r-1, 6px); overflow: auto; max-height: 460px; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; font-family: var(--font-mono, ui-monospace, monospace); font-size: 12px; line-height: 1.5; }
1684
+ .fd-pre { margin: 0; padding: var(--space-2, 10px); background: var(--bg-3, var(--panel-bg-2)); border: var(--bw-hair, 1px) solid var(--rule, var(--panel-accent)); border-radius: var(--r-1, 6px); overflow: auto; max-height: 460px; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; font-family: var(--font-mono, ui-monospace, monospace); font-size: var(--fs-micro); line-height: 1.5; }
1682
1685
  .fd-skill-body { max-height: 320px; }
1683
1686
  .fd-row-actions { display: inline-flex; gap: var(--space-1, 6px); align-items: center; }
1684
1687
  .fd-chat { display: flex; flex-direction: column; gap: var(--space-2, 10px); height: 100%; min-height: 0; }
package/dist/247420.css CHANGED
@@ -1642,6 +1642,11 @@
1642
1642
  .ds-247420 .ds-hero-stat:last-child { border-bottom: 0; padding-bottom: 0; }
1643
1643
  .ds-247420 .ds-hero-title {
1644
1644
  font-family: var(--ff-display); font-weight: 700;
1645
+ /* Bespoke display clamp, deliberately off the --fs-* ladder: --fs-hero is
1646
+ clamp(42px,7cqi,96px) and --fs-mega is clamp(56px,11cqi,168px). This lead
1647
+ runs a steeper 9cqi slope with a LOWER 40px floor so a two-line 16ch title
1648
+ still fits a narrow column, and a 116px ceiling between the two tiers.
1649
+ Snapping to either changes the hero's whole optical weight. */
1645
1650
  font-size: clamp(40px, 9cqi, 116px);
1646
1651
  line-height: 0.96; letter-spacing: var(--tr-tighter);
1647
1652
  margin: 0; max-width: 16ch; text-wrap: balance;
@@ -1685,6 +1690,12 @@
1685
1690
  .ds-247420 .ds-section-compact { margin-top: 0; margin-bottom: var(--space-4); }
1686
1691
  .ds-247420 .ds-section > h3 {
1687
1692
  font-family: var(--ff-body); font-weight: 600; font-size: var(--fs-h3);
1693
+ /* Zero top margin looks like it inverts the more-space-above-than-below rule,
1694
+ but it does not: this h3 is always the section's first child and .ds-section
1695
+ itself carries the --space-8 (96px) lead, so the effective space above is
1696
+ 96px against 32px below. Adding a top margin here would double the lead.
1697
+ Measured live on project_page: gapAboveInSection 0 with the section margin
1698
+ supplying the separation, gapBelow 32. */
1688
1699
  margin: 0 0 var(--space-5);
1689
1700
  letter-spacing: -0.01em;
1690
1701
  }
@@ -1776,7 +1787,7 @@
1776
1787
  }
1777
1788
  .ds-247420 .ds-cli-row {
1778
1789
  display: flex; gap: 10px;
1779
- font-family: var(--ff-mono); font-size: 13px; line-height: 1.6;
1790
+ font-family: var(--ff-mono); font-size: var(--fs-tiny); line-height: 1.6;
1780
1791
  padding: 3px 0;
1781
1792
  }
1782
1793
  .ds-247420 .ds-cli-row .prompt { color: var(--green-2); flex: 0 0 auto; user-select: none; }
@@ -1855,6 +1866,16 @@
1855
1866
  Changelog
1856
1867
  ============================================================ */
1857
1868
  .ds-247420 .ds-changelog-row {
1869
+ /* The !important is load-bearing and was empirically confirmed so -- do not
1870
+ remove it on a specificity argument. A changelog row carries three tracks
1871
+ (date, version, message) where a plain .row carries two, and the responsive
1872
+ blocks in responsive.css legitimately rewrite .row's template at several
1873
+ breakpoints. Those blocks are later in the cascade, so at tablet width the
1874
+ two-track override wins on source order and collapses the version column:
1875
+ measured live, removing this flag changes the computed template from
1876
+ "120.75px 77.625px 70.125px" to "103.5px 0px 165px" -- a zero-width column
1877
+ and the version silently gone. Scoping to .app does not help, because the
1878
+ competing rules would need to be scoped in lockstep. */
1858
1879
  grid-template-columns: minmax(110px, 14ch) minmax(60px, 9ch) minmax(0, 1fr) !important;
1859
1880
  }
1860
1881
  .ds-247420 .ds-changelog-ver {
@@ -1910,6 +1931,10 @@
1910
1931
  }
1911
1932
  .ds-247420 .kpi-card .num {
1912
1933
  font-family: var(--ff-body); font-weight: 600;
1934
+ /* Numeric display size, not a heading tier: --fs-h4 is clamp(19px,1.8cqi,
1935
+ 24px) — too small and too flat a slope for a KPI figure that must read as
1936
+ the loudest thing in its card, and --fs-h3 (22/30) tops out short of 32.
1937
+ Deliberate off-scale value tuned to the .kpi-card box. */
1913
1938
  font-size: clamp(22px, 3cqi, 32px); line-height: 1;
1914
1939
  letter-spacing: var(--tr-tight);
1915
1940
  }
@@ -2449,7 +2474,7 @@
2449
2474
  /* File icon — glyph chip, tinted per type. */
2450
2475
  .ds-247420 .ds-file-icon {
2451
2476
  display: inline-flex; align-items: center; justify-content: center;
2452
- width: 26px; height: 26px; font-size: 15px; line-height: 1;
2477
+ width: 26px; height: 26px; font-size: var(--fs-sm); line-height: 1;
2453
2478
  color: var(--fg-2);
2454
2479
  }
2455
2480
  .ds-247420 .ds-file-row[data-file-type="dir"] .ds-file-icon { color: var(--accent-ink); }
@@ -2473,7 +2498,7 @@
2473
2498
  display: inline-flex; align-items: center; justify-content: center;
2474
2499
  width: 28px; height: 28px; padding: 0;
2475
2500
  background: transparent; border: 0; border-radius: var(--r-1);
2476
- color: var(--fg-3); font-size: 14px; cursor: pointer;
2501
+ color: var(--fg-3); font-size: var(--fs-xs); cursor: pointer;
2477
2502
  transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
2478
2503
  }
2479
2504
  .ds-247420 .ds-file-act:hover { background: var(--bg-3); color: var(--fg); }
@@ -2572,7 +2597,7 @@
2572
2597
  .ds-247420 .ds-file-grid[data-density="compact"] .ds-file-row { padding: var(--space-1-5) var(--space-2-75); gap: var(--space-2-5); }
2573
2598
  .ds-247420 .ds-file-grid[data-density="compact"] .ds-file-row .title { font-size: var(--fs-xs); }
2574
2599
  .ds-247420 .ds-file-grid[data-density="compact"] .ds-file-row .ds-file-meta { font-size: var(--fs-micro); }
2575
- .ds-247420 .ds-file-grid[data-density="compact"] .ds-file-icon { width: 20px; height: 20px; font-size: 13px; }
2600
+ .ds-247420 .ds-file-grid[data-density="compact"] .ds-file-icon { width: 20px; height: 20px; font-size: var(--fs-tiny); }
2576
2601
 
2577
2602
  /* Thumbnail density — tile grid; image entries carry a real lazy thumbnail. */
2578
2603
  .ds-247420 .ds-file-grid-thumb {
@@ -2612,6 +2637,10 @@
2612
2637
  width: 100%; aspect-ratio: 4 / 3;
2613
2638
  background: var(--bg-2); border-radius: var(--r-1); overflow: hidden;
2614
2639
  }
2640
+ /* 24px is the ICON size inside a 34px chip, not a type tier — it is matched to
2641
+ the chip box, not to the text scale (the --fs-* rungs jump 21px -> fluid
2642
+ heading clamps, so neither substitutes without resizing the icon). Same
2643
+ reasoning for the other four .ds-*-glyph rules in this sheet. */
2615
2644
  .ds-247420 .ds-file-cell-media .ds-file-icon { width: 34px; height: 34px; font-size: 24px; }
2616
2645
  .ds-247420 .ds-file-cell-thumb { width: 100%; height: 100%; object-fit: cover; }
2617
2646
  /* Per-type icon tints on thumb tiles so the grid keeps the colour-coding the
@@ -2755,6 +2784,7 @@
2755
2784
  gap: var(--space-2); flex-wrap: wrap;
2756
2785
  padding: var(--space-4) var(--space-3); text-align: center;
2757
2786
  }
2787
+ /* Icon size, not type — see .ds-file-cell-media .ds-file-icon above. */
2758
2788
  .ds-247420 .ds-dropzone-glyph { font-size: 22px; color: var(--fg-3); }
2759
2789
  .ds-247420 .ds-dropzone-label { font-size: var(--fs-sm); color: var(--fg-3); }
2760
2790
  .ds-247420 .ds-dropzone.dragover {
@@ -2863,6 +2893,7 @@
2863
2893
  gap: var(--space-2); padding: var(--space-6) var(--space-3);
2864
2894
  color: var(--fg-3); text-align: center;
2865
2895
  }
2896
+ /* Icon size, not type — see .ds-file-cell-media .ds-file-icon above. */
2866
2897
  .ds-247420 .ds-file-empty-glyph { font-size: 34px; opacity: 0.55; }
2867
2898
  .ds-247420 .ds-file-empty-text { font-size: var(--fs-sm); }
2868
2899
 
@@ -2918,7 +2949,11 @@
2918
2949
  font-family: inherit; font-size: var(--fs-sm);
2919
2950
  }
2920
2951
  .ds-247420 .ds-modal-input:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
2921
- /* iOS auto-zooms inputs under 16px on focus, breaking the modal layout. */
2952
+ /* iOS auto-zooms inputs under 16px on focus, breaking the modal layout.
2953
+ Deliberately a literal, NOT var(--fs-body): --fs-body is re-declared to
2954
+ 15px under [data-typescale="sm"], which would silently drop this input back
2955
+ under the zoom threshold on any density-reduced page. The 16px here is a
2956
+ platform constant, not a point on the type scale. */
2922
2957
  @media (hover: none), (pointer: coarse) {
2923
2958
  .ds-247420 .ds-modal-input { font-size: 16px; min-height: 44px; }
2924
2959
  }
@@ -3015,6 +3050,7 @@
3015
3050
  display: flex; flex-direction: column; align-items: center; justify-content: center;
3016
3051
  gap: var(--space-2); padding: var(--space-6); color: var(--fg-3);
3017
3052
  }
3053
+ /* Icon size, not type — see .ds-file-cell-media .ds-file-icon above. */
3018
3054
  .ds-247420 .ds-preview-glyph { font-size: 34px; opacity: 0.6; }
3019
3055
 
3020
3056
  /* Thin scrollbars inside preview bodies. */
@@ -3258,7 +3294,7 @@
3258
3294
  width: 36px; height: 36px; flex-shrink: 0;
3259
3295
  border-radius: 50%; background: var(--bg-3); color: var(--fg);
3260
3296
  display: inline-flex; align-items: center; justify-content: center;
3261
- font-family: var(--ff-mono); font-size: 12px; font-weight: 600;
3297
+ font-family: var(--ff-mono); font-size: var(--fs-micro); font-weight: 600;
3262
3298
  text-transform: lowercase; letter-spacing: 0.02em; user-select: none;
3263
3299
  transition: transform 0.12s ease, box-shadow 0.12s ease;
3264
3300
  position: relative;
@@ -3299,6 +3335,9 @@
3299
3335
  border: 1px solid color-mix(in oklab, var(--mascot) 28%, transparent);
3300
3336
  }
3301
3337
  .ds-247420 .chat-bubble code {
3338
+ /* em-relative on purpose: inline code tracks the size of the prose it sits
3339
+ inside (the mono face runs optically large next to the system stack, hence
3340
+ 0.92). An absolute --fs-* tier would decouple it from its own paragraph. */
3302
3341
  font-family: var(--ff-mono); font-size: 0.92em;
3303
3342
  background: color-mix(in oklab, var(--fg) 10%, transparent);
3304
3343
  /* 1px block is deliberately under --space-hair (2px): inline <code> must not
@@ -3325,6 +3364,11 @@
3325
3364
  font-family: var(--ff-body); font-weight: 600;
3326
3365
  margin: var(--space-2) 0 var(--space-1); line-height: var(--lh-snug);
3327
3366
  }
3367
+ /* em-relative on purpose, NOT --fs-h1..h3: markdown headings inside a chat
3368
+ bubble are a hierarchy WITHIN the bubble's own type size, not page headings.
3369
+ The --fs-h* tiers are fluid clamp()s tuned to page container queries and
3370
+ would render a bubble heading at 34px+, dwarfing the message it labels.
3371
+ These stay a tight ratio ladder off whatever size the bubble is set at. */
3328
3372
  .ds-247420 .chat-bubble.chat-md h1 { font-size: 1.15em; }
3329
3373
  .ds-247420 .chat-bubble.chat-md h2 { font-size: 1.08em; }
3330
3374
  .ds-247420 .chat-bubble.chat-md h3 { font-size: 1.04em; }
@@ -3360,7 +3404,7 @@
3360
3404
  }
3361
3405
  /* Markdown tables + horizontal rules: agents routinely emit them, but they were
3362
3406
  unstyled (bare unspaced cells, vanished rules). */
3363
- .ds-247420 .chat-bubble.chat-md table { border-collapse: collapse; width: auto; max-width: 100%; margin: var(--space-2) 0; font-size: .95em; display: block; overflow-x: auto; }
3407
+ .ds-247420 .chat-bubble.chat-md table { border-collapse: collapse; width: auto; max-width: 100%; margin: var(--space-2) 0; font-size: .95em; /* em-relative: a table inside a bubble reads one notch down from the bubble's own copy, not off an absolute tier */ display: block; overflow-x: auto; }
3364
3408
  .ds-247420 .chat-bubble.chat-md th,
3365
3409
  .ds-247420 .chat-bubble.chat-md td { border: var(--bw-hair) solid var(--rule); padding: var(--space-1) var(--space-2-5); text-align: left; }
3366
3410
  .ds-247420 .chat-bubble.chat-md th { background: color-mix(in oklab, var(--fg) 5%, transparent); font-weight: 600; }
@@ -3470,6 +3514,9 @@
3470
3514
  }
3471
3515
  .ds-247420 .chat-file:hover { background: var(--bg-3); }
3472
3516
  .ds-247420 .chat-file .glyph {
3517
+ /* 22px is the ICON size inside a 36px chip — matched to the chip box, not to
3518
+ the type scale (--fs-xl is 21px, and above it every rung is a fluid
3519
+ heading clamp). Snapping it visibly resizes the mark. */
3473
3520
  font-size: 22px; width: 36px; height: 36px;
3474
3521
  display: inline-flex; align-items: center; justify-content: center;
3475
3522
  background: var(--bg-3);
@@ -3482,7 +3529,7 @@
3482
3529
  }
3483
3530
  .ds-247420 .chat-file .meta { display: flex; flex-direction: column; gap: var(--space-hair); min-width: 0; flex: 1; }
3484
3531
  .ds-247420 .chat-file .size { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); }
3485
- .ds-247420 .chat-file .go { font-family: var(--ff-mono); font-size: 16px; color: var(--fg-3); flex-shrink: 0; }
3532
+ .ds-247420 .chat-file .go { font-family: var(--ff-mono); font-size: var(--fs-body); color: var(--fg-3); flex-shrink: 0; }
3486
3533
  .ds-247420 .chat-file:hover .go { color: var(--accent-ink); }
3487
3534
 
3488
3535
  .ds-247420 .chat-msg.you .chat-pdf,
@@ -3500,7 +3547,7 @@
3500
3547
  background: color-mix(in oklab, var(--fg) 5%, var(--bg-2));
3501
3548
  border-bottom: 1px solid color-mix(in oklab, var(--fg) 10%, transparent);
3502
3549
  }
3503
- .ds-247420 .chat-pdf-head .glyph { font-size: 18px; color: var(--mascot); flex-shrink: 0; }
3550
+ .ds-247420 .chat-pdf-head .glyph { font-size: var(--fs-lg); color: var(--mascot); flex-shrink: 0; }
3504
3551
  .ds-247420 .chat-pdf-head .name { flex: 1; font-weight: 600; font-size: var(--fs-sm); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
3505
3552
  .ds-247420 .chat-pdf-head .size { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); }
3506
3553
  .ds-247420 .chat-pdf-head a { color: var(--accent-ink); font-family: var(--ff-mono); font-size: var(--fs-xs); text-decoration: none; }
@@ -3559,8 +3606,8 @@
3559
3606
  border-color: color-mix(in oklab, var(--accent) 55%, transparent);
3560
3607
  color: var(--accent-ink);
3561
3608
  }
3562
- .ds-247420 .chat-reactions .rxn .e { font-size: 14px; line-height: 1; }
3563
- .ds-247420 .chat-reactions .rxn .n { font-family: var(--ff-mono); font-weight: 600; font-size: 11px; color: var(--fg-2); }
3609
+ .ds-247420 .chat-reactions .rxn .e { font-size: var(--fs-xs); line-height: 1; }
3610
+ .ds-247420 .chat-reactions .rxn .n { font-family: var(--ff-mono); font-weight: 600; font-size: var(--fs-nano); color: var(--fg-2); }
3564
3611
  .ds-247420 .chat-reactions .rxn.you .n { color: var(--accent-ink); }
3565
3612
 
3566
3613
  .ds-247420 .chat-typing { display: inline-flex; gap: var(--space-1); align-items: center; }
@@ -3687,6 +3734,7 @@
3687
3734
 
3688
3735
  .ds-247420 .aicat-portrait { display: inline-flex; align-items: center; gap: var(--space-2-5); padding: var(--space-1) 0; }
3689
3736
  .ds-247420 .aicat-face {
3737
+ /* 24px is the ICON size inside a 32px round chip — see .chat-file .glyph. */
3690
3738
  width: 32px; height: 32px; font-size: 24px;
3691
3739
  display: inline-flex; align-items: center; justify-content: center;
3692
3740
  background: color-mix(in oklab, var(--mascot) 22%, var(--bg-2));
@@ -5625,7 +5673,7 @@
5625
5673
  }
5626
5674
  .ds-247420 .ds-err-path {
5627
5675
  display: inline-flex; gap: var(--space-1-75); align-items: baseline; flex-wrap: wrap; max-width: 100%;
5628
- font-family: var(--ff-mono); font-size: 13px; color: var(--panel-text-2);
5676
+ font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--panel-text-2);
5629
5677
  background: var(--panel-1); padding: var(--space-1-75) var(--space-2-75); border-radius: var(--r-0);
5630
5678
  overflow-wrap: anywhere; word-break: break-all;
5631
5679
  }
@@ -5683,6 +5731,9 @@
5683
5731
  .ds-247420 .ds-topbar-search { flex-basis: 100%; }
5684
5732
  }
5685
5733
  .ds-247420 .ds-empty-state { padding: clamp(var(--space-3), 5vw, var(--space-4)); text-align: center; color: var(--panel-text-3); }
5734
+ /* Fluid ICON size (empty-state mark), not a type tier: it scales with the
5735
+ viewport between 24 and 32px. Every fluid --fs-* tier is a heading clamp
5736
+ tuned to cqi + heading weight, so none of them substitutes here. */
5686
5737
  .ds-247420 .ds-empty-state-glyph { font-size: clamp(24px, 6vw, 32px); }
5687
5738
  .ds-247420 .ds-empty-state-msg { margin: var(--space-1-75) 0; }
5688
5739
  .ds-247420 .ds-empty-state-hint { margin: 0; font-size: var(--fs-sm); }
@@ -5702,20 +5753,20 @@
5702
5753
  .ds-247420 .ds-swatch-col { display: flex; flex-direction: column; gap: var(--space-1-75); }
5703
5754
  .ds-247420 .ds-swatch-chip { height: 48px; border-radius: var(--r-1); border: 1px solid var(--rule); background: var(--swatch, var(--panel-1)); }
5704
5755
  .ds-247420 .ds-swatch-chip--big { height: 64px; }
5705
- .ds-247420 .ds-swatch-name { font-family: var(--ff-mono); font-size: 11px; color: var(--fg-3); }
5756
+ .ds-247420 .ds-swatch-name { font-family: var(--ff-mono); font-size: var(--fs-nano); color: var(--fg-3); }
5706
5757
  .ds-247420 .ds-type-panel { padding: clamp(10px, 2.5vw, 14px) clamp(10px, 3vw, 18px); display: flex; flex-direction: column; gap: 14px; }
5707
5758
  .ds-247420 .ds-type-row {
5708
5759
  display: flex; align-items: baseline; gap: 14px;
5709
5760
  border-bottom: 1px solid var(--rule); padding-bottom: var(--space-2); flex-wrap: wrap;
5710
5761
  }
5711
- .ds-247420 .ds-type-row-label { flex: 0 0 64px; font-family: var(--ff-mono); font-size: 11px; color: var(--fg-3); }
5762
+ .ds-247420 .ds-type-row-label { flex: 0 0 64px; font-family: var(--ff-mono); font-size: var(--fs-nano); color: var(--fg-3); }
5712
5763
  .ds-247420 .ds-type-sample {
5713
5764
  min-width: 0; overflow-wrap: anywhere; line-height: var(--lh-tight); color: var(--fg);
5714
5765
  font-size: var(--sample-size, var(--fs-body));
5715
5766
  }
5716
5767
  .ds-247420 .ds-prim-panel { padding: clamp(10px, 2.5vw, 14px) clamp(10px, 3vw, 18px); display: flex; flex-direction: column; gap: 18px; }
5717
5768
  .ds-247420 .ds-prim-row { display: flex; gap: var(--space-2-5); flex-wrap: wrap; align-items: center; }
5718
- .ds-247420 .ds-prim-label { flex: 0 0 64px; font-family: var(--ff-mono); font-size: 11px; color: var(--fg-3); }
5769
+ .ds-247420 .ds-prim-label { flex: 0 0 64px; font-family: var(--ff-mono); font-size: var(--fs-nano); color: var(--fg-3); }
5719
5770
 
5720
5771
  /* == appended: content-site == */
5721
5772
  /* Home landing wrappers (site/theme.mjs) — replace banned inline styles. */
@@ -5847,6 +5898,10 @@
5847
5898
  /* 18px ceiling: no tier between --space-3 (16) and --space-3-5 (20). */
5848
5899
  .ds-247420 .ds-auth-form { padding: clamp(var(--space-2-75), 3vw, 18px); display: flex; flex-direction: column; gap: var(--space-2-5); }
5849
5900
  .ds-247420 .ds-auth-sent { align-items: center; text-align: center; }
5901
+ /* 32px is an ICON size, not a type size: this is the confirmation mark above
5902
+ the "check your mail" copy, sized to the 440px auth column, and the --fs-*
5903
+ scale tops out at --fs-xl (21px) before jumping to fluid clamp() heading
5904
+ tiers. Snapping it to either would visibly resize the mark. */
5850
5905
  .ds-247420 .ds-auth-sent-glyph { font-size: 32px; color: var(--panel-accent); }
5851
5906
  .ds-247420 .ds-auth-sent-title { margin: 0; font-weight: 600; }
5852
5907
  .ds-247420 .ds-auth-sent-sub { margin: 0; color: var(--panel-text-2); overflow-wrap: anywhere; }
@@ -5854,17 +5909,17 @@
5854
5909
  /* .ds-auth-field-label joins the kit small-label voice above, no overrides. */
5855
5910
  .ds-247420 .ds-auth-row-between { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); flex-wrap: wrap; }
5856
5911
  .ds-247420 .ds-auth-remember { display: flex; align-items: center; gap: var(--space-1-75); cursor: pointer; }
5857
- .ds-247420 .ds-auth-remember-text { color: var(--panel-text-2); font-size: 13px; }
5858
- .ds-247420 .ds-auth-forgot { font-size: 13px; }
5859
- .ds-247420 .ds-auth-error { padding: var(--space-2) var(--space-2-5); background: var(--panel-1); border-radius: var(--r-0); color: var(--danger); font-size: 13px; overflow-wrap: anywhere; }
5912
+ .ds-247420 .ds-auth-remember-text { color: var(--panel-text-2); font-size: var(--fs-tiny); }
5913
+ .ds-247420 .ds-auth-forgot { font-size: var(--fs-tiny); }
5914
+ .ds-247420 .ds-auth-error { padding: var(--space-2) var(--space-2-5); background: var(--panel-1); border-radius: var(--r-0); color: var(--danger); font-size: var(--fs-tiny); overflow-wrap: anywhere; }
5860
5915
  .ds-247420 .ds-auth-providers { display: flex; gap: var(--space-2); flex-wrap: wrap; }
5861
5916
  .ds-247420 .ds-auth-provider-btn { flex: 1 1 100px; min-width: 0; display: flex; align-items: center; justify-content: center; gap: var(--space-2); padding: var(--space-2-5); }
5862
5917
  .ds-247420 .ds-auth-provider-btn--loading { opacity: 0.7; pointer-events: none; }
5863
5918
  .ds-247420 .ds-auth-provider-glyph { font-family: var(--ff-mono); color: var(--panel-text-3); display: inline-flex; }
5864
- .ds-247420 .ds-auth-modes { display: flex; justify-content: center; gap: 14px; /* off-scale, matches the auth form inset */ margin-top: var(--space-2); font-size: 13px; flex-wrap: wrap; }
5919
+ .ds-247420 .ds-auth-modes { display: flex; justify-content: center; gap: 14px; /* off-scale, matches the auth form inset */ margin-top: var(--space-2); font-size: var(--fs-tiny); flex-wrap: wrap; }
5865
5920
  .ds-247420 .ds-auth-mode-link { color: var(--panel-text-3); text-decoration: none; }
5866
5921
  .ds-247420 .ds-auth-mode-link--active { color: var(--panel-text); text-decoration: underline; }
5867
- .ds-247420 .ds-auth-fineprint { text-align: center; font-size: 12px; color: var(--panel-text-3); margin: var(--space-1-75) 0; }
5922
+ .ds-247420 .ds-auth-fineprint { text-align: center; font-size: var(--fs-micro); color: var(--panel-text-3); margin: var(--space-1-75) 0; }
5868
5923
 
5869
5924
  /* == appended: gallery-misc kit cleanup == */
5870
5925
  /* --- shared helpers (converted from inline styles) --- */
@@ -5874,12 +5929,12 @@
5874
5929
  .ds-247420 .ds-kit-head { display: flex; align-items: center; justify-content: space-between; gap: clamp(var(--space-2), 2vw, var(--space-3)); flex-wrap: wrap; }
5875
5930
 
5876
5931
  /* --- gallery kit --- */
5877
- .ds-247420 .ds-tile-cap { flex: 1; display: flex; align-items: center; justify-content: center; font-family: var(--ff-mono); white-space: pre-line; color: var(--panel-text-2); font-size: 18px; min-width: 0; text-align: center; }
5878
- .ds-247420 .ds-tile-meta { display: flex; align-items: center; justify-content: space-between; gap: var(--space-1-75); font-size: 12px; flex-wrap: wrap; min-width: 0; }
5932
+ .ds-247420 .ds-tile-cap { flex: 1; display: flex; align-items: center; justify-content: center; font-family: var(--ff-mono); white-space: pre-line; color: var(--panel-text-2); font-size: var(--fs-lg); min-width: 0; text-align: center; }
5933
+ .ds-247420 .ds-tile-meta { display: flex; align-items: center; justify-content: space-between; gap: var(--space-1-75); font-size: var(--fs-micro); flex-wrap: wrap; min-width: 0; }
5879
5934
  .ds-247420 .ds-tile-glyph { font-family: var(--ff-mono); color: var(--panel-text-3); }
5880
5935
  .ds-247420 .ds-tile-label { color: var(--panel-text); overflow-wrap: anywhere; }
5881
5936
  .ds-247420 .ds-gal-swatch { height: 64px; border-radius: var(--r-0); background: var(--swatch, var(--panel-1)); }
5882
- .ds-247420 .ds-gal-swatch-meta { display: flex; justify-content: space-between; gap: var(--space-1-75); flex-wrap: wrap; font-family: var(--ff-mono); font-size: 11px; min-width: 0; }
5937
+ .ds-247420 .ds-gal-swatch-meta { display: flex; justify-content: space-between; gap: var(--space-1-75); flex-wrap: wrap; font-family: var(--ff-mono); font-size: var(--fs-nano); min-width: 0; }
5883
5938
  .ds-247420 .ds-gal-swatch-name { color: var(--panel-text); }
5884
5939
  .ds-247420 .ds-gal-swatch-hint { color: var(--panel-text-3); overflow-wrap: anywhere; }
5885
5940
  .ds-247420 .ds-lightbox-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-2); flex-wrap: wrap; }
@@ -5938,9 +5993,9 @@
5938
5993
  font-family: var(--ff-mono); font-weight: 600; text-transform: lowercase;
5939
5994
  letter-spacing: 0.02em; user-select: none; flex-shrink: 0; object-fit: cover;
5940
5995
  }
5941
- .ds-247420 .ds-avatar-sm { width: 24px; height: 24px; font-size: 10px; }
5942
- .ds-247420 .ds-avatar-md { width: 36px; height: 36px; font-size: 12px; }
5943
- .ds-247420 .ds-avatar-lg { width: 48px; height: 48px; font-size: 15px; }
5996
+ .ds-247420 .ds-avatar-sm { width: 24px; height: 24px; font-size: var(--fs-pico); }
5997
+ .ds-247420 .ds-avatar-md { width: 36px; height: 36px; font-size: var(--fs-micro); }
5998
+ .ds-247420 .ds-avatar-lg { width: 48px; height: 48px; font-size: var(--fs-sm); }
5944
5999
  .ds-247420 .ds-avatar-square { border-radius: var(--r-2, 6px); }
5945
6000
 
5946
6001
  /* SpreadsheetPreview — tabbed inline spreadsheet/CSV viewer (docstudio
@@ -6129,6 +6184,10 @@
6129
6184
  same tonal chip treatment .chat-bubble code uses. */
6130
6185
  .ds-247420 .ds-pattern-notes code {
6131
6186
  font-family: var(--ff-mono);
6187
+ /* em-relative on purpose: inline code must track whatever size the
6188
+ surrounding prose is set at (the mono face runs optically large next to
6189
+ the system stack, hence 0.92). An absolute --fs-* tier would decouple it
6190
+ from its own paragraph and break at every containing type size. */
6132
6191
  font-size: 0.92em;
6133
6192
  background: color-mix(in oklab, var(--fg) 8%, transparent);
6134
6193
  padding: 0 var(--space-1);
@@ -6837,7 +6896,7 @@
6837
6896
  justify-content: center;
6838
6897
  width: 12px;
6839
6898
  height: 12px;
6840
- font-size: 10px;
6899
+ font-size: var(--fs-pico);
6841
6900
  transform: rotate(90deg);
6842
6901
  transition: transform var(--dur-base) var(--ease);
6843
6902
  flex-shrink: 0;
@@ -7115,7 +7174,7 @@
7115
7174
  display: inline-flex;
7116
7175
  align-items: center;
7117
7176
  justify-content: center;
7118
- font-size: 10px;
7177
+ font-size: var(--fs-pico);
7119
7178
  font-weight: 600;
7120
7179
  overflow: hidden;
7121
7180
  transition: box-shadow var(--dur-snap) var(--ease);
@@ -7715,7 +7774,7 @@
7715
7774
  border: none;
7716
7775
  background: transparent;
7717
7776
  color: var(--fg);
7718
- font-size: 18px;
7777
+ font-size: var(--fs-lg);
7719
7778
  line-height: 1;
7720
7779
  cursor: pointer;
7721
7780
  border-radius: var(--r-1);
@@ -7746,7 +7805,7 @@
7746
7805
  bar here was the generic accent-stripe tell; the real accent still lands
7747
7806
  on .cm-rb-author. */
7748
7807
  border-left: var(--bw-hair) solid var(--rule-strong);
7749
- font-size: 0.85rem;
7808
+ font-size: var(--fs-xs);
7750
7809
  }
7751
7810
  .ds-247420 .cm-rb-label { flex: none; color: var(--fg-2); }
7752
7811
  .ds-247420 .cm-rb-author { color: var(--accent); font-weight: 600; }
@@ -7765,7 +7824,7 @@
7765
7824
  border: none;
7766
7825
  background: transparent;
7767
7826
  color: var(--fg-2);
7768
- font-size: 13px;
7827
+ font-size: var(--fs-tiny);
7769
7828
  line-height: 1;
7770
7829
  cursor: pointer;
7771
7830
  border-radius: var(--r-1);
@@ -7780,7 +7839,7 @@
7780
7839
  gap: var(--space-2);
7781
7840
  width: 100%;
7782
7841
  padding: var(--space-2) var(--space-3);
7783
- font-size: 0.875rem;
7842
+ font-size: var(--fs-xs);
7784
7843
  font-weight: 500;
7785
7844
  }
7786
7845
  .ds-247420 .cm-banner.clickable { cursor: pointer; }
@@ -8111,7 +8170,7 @@
8111
8170
  border: var(--bw-hair) solid var(--rule-strong);
8112
8171
  border-radius: var(--r-1);
8113
8172
  background: var(--bg-3); color: var(--fg);
8114
- cursor: pointer; font-size: 16px; line-height: 1;
8173
+ cursor: pointer; font-size: var(--fs-body); line-height: 1;
8115
8174
  }
8116
8175
  .ds-247420 .vx-vc-btn:hover { background: var(--bg-4, var(--bg-3)); }
8117
8176
  .ds-247420 .vx-vc-on { background: var(--accent); color: var(--accent-fg); border-color: var(--accent); }
@@ -8141,11 +8200,11 @@
8141
8200
  display: flex; align-items: center; justify-content: space-between;
8142
8201
  padding: var(--space-2); border-bottom: var(--bw-hair) solid var(--rule);
8143
8202
  }
8144
- .ds-247420 .cm-tp-title { font-weight: 700; font-size: var(--fs-1, 14px); }
8203
+ .ds-247420 .cm-tp-title { font-weight: 700; font-size: var(--fs-xs); }
8145
8204
  .ds-247420 .cm-tp-head-actions { display: flex; gap: var(--space-1); }
8146
8205
  .ds-247420 .cm-tp-new, .ds-247420 .cm-tp-close {
8147
8206
  border: none; background: transparent; color: var(--fg-2, var(--fg));
8148
- cursor: pointer; font-size: 16px; width: 24px; height: 24px; border-radius: var(--r-1);
8207
+ cursor: pointer; font-size: var(--fs-body); width: 24px; height: 24px; border-radius: var(--r-1);
8149
8208
  }
8150
8209
  .ds-247420 .cm-tp-new:hover, .ds-247420 .cm-tp-close:hover { background: var(--bg-3); color: var(--fg); }
8151
8210
  .ds-247420 .cm-tp-list { flex: 1; min-height: 0; overflow-y: auto; }
@@ -8161,9 +8220,9 @@
8161
8220
  .ds-247420 .cm-tp-item.is-active { background: var(--bg-3); box-shadow: inset 3px 0 0 var(--accent); }
8162
8221
  .ds-247420 .cm-tp-item.is-unread .cm-tp-item-title { font-weight: 700; }
8163
8222
  .ds-247420 .cm-tp-dot { position: absolute; left: 4px; top: 50%; transform: translateY(-50%); width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }
8164
- .ds-247420 .cm-tp-item-title { font-size: var(--fs-1, 14px); }
8165
- .ds-247420 .cm-tp-item-snippet { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .8; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
8166
- .ds-247420 .cm-tp-item-meta { display: flex; gap: var(--space-2); font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
8223
+ .ds-247420 .cm-tp-item-title { font-size: var(--fs-xs); }
8224
+ .ds-247420 .cm-tp-item-snippet { font-size: var(--fs-micro); color: var(--fg-2, var(--fg)); opacity: .8; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
8225
+ .ds-247420 .cm-tp-item-meta { display: flex; gap: var(--space-2); font-size: var(--fs-micro); color: var(--fg-2, var(--fg)); opacity: .7; }
8167
8226
  .ds-247420 .cm-tp-empty, .ds-247420 .cm-forum-empty, .ds-247420 .cm-channel-empty, .ds-247420 .cm-member-empty {
8168
8227
  display: flex; flex-direction: column; align-items: center; gap: var(--space-2);
8169
8228
  padding: var(--space-4) var(--space-3); text-align: center;
@@ -8213,10 +8272,10 @@
8213
8272
  .ds-247420 .cm-forum-item { display: flex; flex-direction: column; gap: var(--space-1); width: 100%; text-align: left; cursor: pointer; padding: var(--space-2) var(--space-3); border: none; background: transparent; border-bottom: var(--bw-hair) solid var(--rule); color: var(--fg); }
8214
8273
  .ds-247420 .cm-forum-item:hover { background: var(--bg-3); }
8215
8274
  .ds-247420 .cm-forum-item-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); }
8216
- .ds-247420 .cm-forum-item-title { font-weight: 700; font-size: var(--fs-1, 14px); }
8217
- .ds-247420 .cm-forum-item-replies { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .8; white-space: nowrap; }
8218
- .ds-247420 .cm-forum-item-snippet { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .85; }
8219
- .ds-247420 .cm-forum-item-meta { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
8275
+ .ds-247420 .cm-forum-item-title { font-weight: 700; font-size: var(--fs-xs); }
8276
+ .ds-247420 .cm-forum-item-replies { font-size: var(--fs-micro); color: var(--fg-2, var(--fg)); opacity: .8; white-space: nowrap; }
8277
+ .ds-247420 .cm-forum-item-snippet { font-size: var(--fs-micro); color: var(--fg-2, var(--fg)); opacity: .85; }
8278
+ .ds-247420 .cm-forum-item-meta { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; font-size: var(--fs-micro); color: var(--fg-2, var(--fg)); opacity: .7; }
8220
8279
  .ds-247420 .cm-forum-item-tags { display: inline-flex; gap: var(--space-1); }
8221
8280
  /* 1px vertical is OFF-SCALE ON PURPOSE — the tag is an inline chip inside the
8222
8281
  forum meta row; --space-hair (2px) tips it past the row height. */
@@ -8225,7 +8284,7 @@
8225
8284
  /* PageView — cm-page / cm-page-* */
8226
8285
  .ds-247420 .cm-page { display: flex; flex-direction: column; height: 100%; min-height: 0; overflow-y: auto; background: var(--bg-1, var(--bg-2)); color: var(--fg); }
8227
8286
  .ds-247420 .cm-page-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); padding: var(--space-3); border-bottom: var(--bw-hair) solid var(--rule); }
8228
- .ds-247420 .cm-page-title { margin: 0; font-size: var(--fs-3, 20px); font-weight: 700; }
8287
+ .ds-247420 .cm-page-title { margin: 0; font-size: var(--fs-xl); font-weight: 700; }
8229
8288
  .ds-247420 .cm-page-edit { padding: var(--space-1) var(--space-2); border: var(--bw-hair) solid var(--rule-strong); border-radius: var(--r-1); background: var(--bg-3); color: var(--fg); cursor: pointer; }
8230
8289
  .ds-247420 .cm-page-body { padding: var(--space-3); line-height: 1.6; }
8231
8290
  .ds-247420 .cm-page-empty { color: var(--fg-2, var(--fg)); opacity: .7; }
@@ -8239,8 +8298,11 @@
8239
8298
  .ds-247420 .fd-page-inner > * { min-width: 0; }
8240
8299
  .ds-247420 .fd-loading { display: flex; align-items: center; gap: var(--space-2, 10px); padding: var(--space-4, 24px); color: var(--fg-2, var(--fg)); }
8241
8300
  .ds-247420 .fd-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-2, 10px); padding: var(--space-5, 32px) var(--space-3, 16px); color: var(--fg-2, var(--fg)); text-align: center; }
8301
+ /* 28px is an ICON size (empty-state mark), not a type tier — the --fs-* ladder
8302
+ tops out at --fs-xl (21px) before every remaining rung becomes a fluid
8303
+ heading clamp, so neither substitutes without visibly resizing the mark. */
8242
8304
  .ds-247420 .fd-empty-glyph { font-size: 28px; opacity: .55; line-height: 1; }
8243
- .ds-247420 .fd-pre { margin: 0; padding: var(--space-2, 10px); background: var(--bg-3, var(--panel-bg-2)); border: var(--bw-hair, 1px) solid var(--rule, var(--panel-accent)); border-radius: var(--r-1, 6px); overflow: auto; max-height: 460px; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; font-family: var(--font-mono, ui-monospace, monospace); font-size: 12px; line-height: 1.5; }
8305
+ .ds-247420 .fd-pre { margin: 0; padding: var(--space-2, 10px); background: var(--bg-3, var(--panel-bg-2)); border: var(--bw-hair, 1px) solid var(--rule, var(--panel-accent)); border-radius: var(--r-1, 6px); overflow: auto; max-height: 460px; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; font-family: var(--font-mono, ui-monospace, monospace); font-size: var(--fs-micro); line-height: 1.5; }
8244
8306
  .ds-247420 .fd-skill-body { max-height: 320px; }
8245
8307
  .ds-247420 .fd-row-actions { display: inline-flex; gap: var(--space-1, 6px); align-items: center; }
8246
8308
  .ds-247420 .fd-chat { display: flex; flex-direction: column; gap: var(--space-2, 10px); height: 100%; min-height: 0; }
@@ -11999,7 +12061,7 @@
11999
12061
  margin: 0 0 var(--space-3) 0;
12000
12062
  }
12001
12063
  .ds-247420 #ds-article-host .toc ol { margin: 0; padding-left: var(--space-3-5); }
12002
- .ds-247420 #ds-article-host .toc li { font-size: 13px; line-height: 1.85; color: var(--panel-text); }
12064
+ .ds-247420 #ds-article-host .toc li { font-size: var(--fs-tiny); line-height: 1.85; color: var(--panel-text); }
12003
12065
  .ds-247420 #ds-article-host .toc li::marker { color: var(--panel-text-3); font-variant-numeric: tabular-nums; }
12004
12066
  .ds-247420 #ds-article-host .toc a { color: var(--panel-text-2); text-decoration: none; transition: color .12s ease; }
12005
12067
  .ds-247420 #ds-article-host .toc a:hover { color: var(--panel-accent); }
@@ -12030,6 +12092,12 @@
12030
12092
  padding: var(--space-3) var(--space-3-5);
12031
12093
  margin: var(--space-3) 0 var(--space-5) 0;
12032
12094
  font-family: var(--ff-mono);
12095
+ /* Deliberate half-step, NOT un-migrated drift: this is a transcript block set
12096
+ in the mono face, which runs optically ~1 rung larger than the system
12097
+ stack at the same px. --fs-micro (12) reads thin against the surrounding
12098
+ prose and --fs-tiny (13) reads heavy; 12.5 is the tuned midpoint. There is
12099
+ no half-rung on the --fs-* ladder and one must not be invented for a
12100
+ single block, so this literal stays. */
12033
12101
  font-size: 12.5px;
12034
12102
  line-height: 1.6;
12035
12103
  color: var(--panel-text);
@@ -12076,7 +12144,7 @@
12076
12144
  margin-top: var(--space-1-75);
12077
12145
  font-weight: 400;
12078
12146
  color: var(--panel-text-2);
12079
- font-size: 13px;
12147
+ font-size: var(--fs-tiny);
12080
12148
  line-height: 1.6;
12081
12149
  }
12082
12150
 
@@ -12088,15 +12156,15 @@
12088
12156
  margin: var(--space-2) 0;
12089
12157
  background: var(--panel-1);
12090
12158
  border-radius: var(--r-0);
12091
- font-size: 13px;
12159
+ font-size: var(--fs-tiny);
12092
12160
  box-shadow: var(--panel-shadow);
12093
12161
  text-decoration: none;
12094
12162
  }
12095
12163
  .ds-247420 .ds-prose .card:hover { background: var(--panel-hover); }
12096
12164
  .ds-247420 .ds-prose .card .card-top { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-2-75); }
12097
12165
  .ds-247420 .ds-prose .card .repo-name { font-weight: 600; color: var(--panel-text); }
12098
- .ds-247420 .ds-prose .card .stars { color: var(--panel-text-3); font-family: var(--ff-mono); font-size: 12px; flex: 0 0 auto; }
12099
- .ds-247420 .ds-prose .card .desc { color: var(--panel-text-2); font-size: 12px; line-height: 1.5; margin: 0; }
12166
+ .ds-247420 .ds-prose .card .stars { color: var(--panel-text-3); font-family: var(--ff-mono); font-size: var(--fs-micro); flex: 0 0 auto; }
12167
+ .ds-247420 .ds-prose .card .desc { color: var(--panel-text-2); font-size: var(--fs-micro); line-height: 1.5; margin: 0; }
12100
12168
  .ds-247420 .ds-prose .tags { display: flex; gap: var(--space-1-75); flex-wrap: wrap; }
12101
12169
  .ds-247420 .ds-prose .tag {
12102
12170
  background: var(--panel-2);