create-pmos 0.511.0 → 0.513.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/package.json +27 -31
  2. package/payload/KIT-VERSION +1 -1
  3. package/payload/planning/evals/eval-calibration.md +1 -1
  4. package/payload/planning/okrs/health-budgets.md +1 -1
  5. package/payload/state/discoveries.md +1 -1
  6. package/workspace/briefing-premium-adddoc-test.js +3 -3
  7. package/workspace/briefing-premium-board-test.js +2 -2
  8. package/workspace/briefing-premium-initiative-test.js +3 -3
  9. package/workspace/briefing-premium-insights-test.js +2 -2
  10. package/workspace/briefing-premium-sources-test.js +4 -5
  11. package/workspace/briefing-premium-test.js +2 -2
  12. package/workspace/changelog.json +26 -0
  13. package/workspace/fixtures/next-prompt-replay.json +40 -0
  14. package/workspace/guide/home.md +1 -1
  15. package/workspace/guide/index.md +1 -0
  16. package/workspace/guide/next-prompt.md +62 -0
  17. package/workspace/guide/settings.md +3 -1
  18. package/workspace/intel-report-ui-test.js +1 -1
  19. package/workspace/intelligence-gaps-ui-test.js +1 -1
  20. package/workspace/lib/next-prompt.js +199 -0
  21. package/workspace/lib/premium-console-type.js +15 -12
  22. package/workspace/lib/route-modules.js +1 -0
  23. package/workspace/lib/routes-next-prompt.js +248 -0
  24. package/workspace/metric-drafts-ui-test.js +2 -2
  25. package/workspace/package-lock.json +2 -2
  26. package/workspace/package.json +1 -1
  27. package/workspace/premium-menu-rows-test.js +1 -1
  28. package/workspace/premium-vw-doc-test.js +1 -1
  29. package/workspace/public/pm/bd-pin-card.css +4 -4
  30. package/workspace/public/pm/bd-publish.css +11 -11
  31. package/workspace/public/pm/bd-shared.css +17 -17
  32. package/workspace/public/pm/c3-capture.css +9 -9
  33. package/workspace/public/pm/c3-initiatives.css +23 -23
  34. package/workspace/public/pm/c3-listen.css +1 -1
  35. package/workspace/public/pm/components.css +572 -572
  36. package/workspace/public/pm/console3.css +374 -373
  37. package/workspace/public/pm/cozy-adler.css +4 -4
  38. package/workspace/public/pm/cozy-aud.css +1 -1
  39. package/workspace/public/pm/cozy-board.css +328 -328
  40. package/workspace/public/pm/cozy-ev.css +80 -78
  41. package/workspace/public/pm/cozy-home-rows.css +32 -32
  42. package/workspace/public/pm/cozy-home.css +285 -241
  43. package/workspace/public/pm/cozy-insights.css +200 -200
  44. package/workspace/public/pm/cozy-live-pill.css +5 -5
  45. package/workspace/public/pm/cozy-mtg-present.css +28 -28
  46. package/workspace/public/pm/cozy-onboard.css +15 -15
  47. package/workspace/public/pm/cozy-panel.css +39 -39
  48. package/workspace/public/pm/cozy-pick.css +5 -5
  49. package/workspace/public/pm/cozy-rec-now.css +23 -23
  50. package/workspace/public/pm/cozy-rec-present.css +11 -11
  51. package/workspace/public/pm/cozy-rec-tab.css +13 -13
  52. package/workspace/public/pm/cozy-settings.js +37 -2
  53. package/workspace/public/pm/cozy-steps.css +14 -14
  54. package/workspace/public/pm/cozy-today.css +95 -95
  55. package/workspace/public/pm/cozy-viewer.css +27 -27
  56. package/workspace/public/pm/cozy-vw-mtg.css +113 -113
  57. package/workspace/public/pm/cozy-vw-rp.css +79 -79
  58. package/workspace/public/pm/cozy-vw-shell.css +43 -43
  59. package/workspace/public/pm/cozy-vw.css +129 -129
  60. package/workspace/public/pm/cozy-xv.css +15 -15
  61. package/workspace/public/pm/cozy.css +53 -21
  62. package/workspace/public/pm/dash-view.css +27 -27
  63. package/workspace/public/pm/hi-pop.css +26 -26
  64. package/workspace/public/pm/home-chat.js +21 -4
  65. package/workspace/public/pm/home-impact.css +8 -8
  66. package/workspace/public/pm/home-ini.css +36 -36
  67. package/workspace/public/pm/home-line.css +7 -7
  68. package/workspace/public/pm/impact.css +9 -9
  69. package/workspace/public/pm/ini-view.css +243 -243
  70. package/workspace/public/pm/load-shapes.css +1 -1
  71. package/workspace/public/pm/loose-props.css +14 -14
  72. package/workspace/public/pm/metric-drafts.css +20 -20
  73. package/workspace/public/pm/ms-suggest.css +9 -9
  74. package/workspace/public/pm/next-prompt-ui.js +117 -0
  75. package/workspace/public/pm/ov-view.css +14 -14
  76. package/workspace/public/pm/premium-insights.js +3 -3
  77. package/workspace/public/pm/premium-report-frame.css +1 -1
  78. package/workspace/public/pm/premium-report-intel.css +17 -17
  79. package/workspace/public/pm/premium-report-print.css +1 -1
  80. package/workspace/public/pm/premium-vw-backlog.css +13 -13
  81. package/workspace/public/pm/premium-vw-cal.css +32 -32
  82. package/workspace/public/pm/premium-vw-copy.css +7 -7
  83. package/workspace/public/pm/premium-vw-doc.css +69 -69
  84. package/workspace/public/pm/premium-vw-item.css +12 -12
  85. package/workspace/public/pm/premium-vw-jira.css +39 -39
  86. package/workspace/public/pm/premium-vw-meet.css +28 -28
  87. package/workspace/public/pm/premium-vw-notepad.css +13 -13
  88. package/workspace/public/pm/premium-vw-notes.css +11 -11
  89. package/workspace/public/pm/premium-vw-rec.css +27 -27
  90. package/workspace/public/pm/premium-vw-report.css +21 -21
  91. package/workspace/public/pm/premium-vw-slides.css +28 -28
  92. package/workspace/public/pm/premium.css +618 -618
  93. package/workspace/public/pm/prog-order.css +6 -6
  94. package/workspace/public/pm/prog-page.css +17 -17
  95. package/workspace/public/pm/program-charter.css +33 -33
  96. package/workspace/public/pm/ready-lib.css +6 -6
  97. package/workspace/public/pm/sort-order.css +1 -1
  98. package/workspace/public/pm/split-merge.css +18 -18
  99. package/workspace/public/pm/task-card.css +24 -24
  100. package/workspace/public/pm/tk-tasks.css +42 -42
  101. package/workspace/public/pm/tk-view.css +6 -6
  102. package/workspace/public/pm/wf-page.css +31 -31
  103. package/workspace/public/premium-aud.html +1 -1
  104. package/workspace/public/premium-board.html +1 -1
  105. package/workspace/public/premium-intelligence.html +1 -1
  106. package/workspace/public/premium-rec.html +1 -1
  107. package/workspace/public/premium-viewer.html +1 -1
  108. package/workspace/public/premium-workflows.html +1 -1
  109. package/workspace/public/premium.html +1 -1
  110. package/workspace/public/vendor/plus-jakarta-sans-var.woff2 +0 -0
  111. package/workspace/server.js +1 -0
  112. package/workspace/test-lists/next-prompt.json +5 -0
  113. package/workspace/third-party/README.md +2 -1
  114. package/workspace/third-party/plus-jakarta-sans-OFL.LICENSE +93 -0
@@ -34,6 +34,7 @@ import * as VWC from './cozy-viewer.js';
34
34
  import { canDictate, dictate } from './home-dictate.js';
35
35
  import { adler } from './cozy-adler.js';
36
36
  import { snapOf, turnEnded } from './chat-turn-end.js'; // a finished turn re-reads what the Viewer shows (batch 25 item 3)
37
+ import { nextPromptUi } from './next-prompt-ui.js'; // the suggested next prompt and the Sharper card above the box (batch 26 item 2)
37
38
  /* The views a chat opens go in the Viewer: on a page with no dialog the old viewer's views draw in the cozy card (premium-viewer.js). */
38
39
  const views = {
39
40
  ctx: () => import('./premium-vw-ctx.js'), file: () => import('./premium-vw-file.js'), attach: () => import('./premium-attach.js'),
@@ -78,6 +79,18 @@ export function mountChat(el, host) {
78
79
  const role = () => (C.t && C.t.role) || roleOf(C.sess || null, host.roles(), firstUser());
79
80
  const firstUser = () => { const m = ((C.conv && C.conv.messages) || []).find((x) => x.role === 'user'); return m ? m.text : ''; };
80
81
  const running = () => !!C.conv && (C.conv.turn === 'agent' || C.conv.turn === 'tool') && C.conv.state !== 'ended';
82
+ // the suggested next prompt (batch 26 item 2): cards above the box after a reply, a Sharper card while the PM types a rough prompt
83
+ const NPU = nextPromptUi({ el, host, box: () => foot.querySelector('textarea'), redrawFoot: () => { if (C.t) drawFoot({ role: role() }); } });
84
+ el.addEventListener('np-grow', (e) => grow(e.target), true);
85
+ const plain = (s) => String(s || '').replace(/```pmos-[\s\S]*?```/g, '').trim();
86
+ function npCtx() {
87
+ const t = C.t, ms = (C.conv && C.conv.messages) || [];
88
+ let ai = -1; for (let i = ms.length - 1; i >= 0; i--) if (ms[i] && ms[i].role !== 'user' && plain(ms[i].text)) { ai = i; break; }
89
+ let pi = -1; for (let i = ai - 1; i >= 0; i--) if (ms[i] && ms[i].role === 'user') { pi = i; break; }
90
+ const ini = /^init:/.test(String(t.key || ''));
91
+ return { key: t.key || t.sid || '', reply: ai >= 0 ? plain(ms[ai].text).slice(0, 6000) : '', asked: pi >= 0 ? shownUser(String(ms[pi].text || '')).slice(0, 2000) : '',
92
+ initiative: ini ? String(t.title || '') : '', stage: ini ? String(t.sub || '') : '', title: String(t.title || '') };
93
+ }
81
94
 
82
95
  /* ── reading ── */
83
96
  async function read() {
@@ -98,6 +111,8 @@ export function mountChat(el, host) {
98
111
  const ended = turnEnded(C.turn, snap); C.turn = snap;
99
112
  draw();
100
113
  if (ended && host.turnEnded) host.turnEnded(t);
114
+ NPU.read(snap.busy);
115
+ if (ended && !(C.conv && C.conv.ask)) NPU.turnEnded(npCtx());
101
116
  clearTimeout(C.timer);
102
117
  const live = (C.th && (C.th.session || C.th.working)) || (t.sid && C.conv && C.conv.state !== 'ended');
103
118
  C.timer = setTimeout(() => { if (!document.hidden) read(); else C.timer = setTimeout(read, IDLE_POLL); }, live ? POLL : IDLE_POLL);
@@ -429,7 +444,7 @@ export function mountChat(el, host) {
429
444
  const html = `${also}<form class="hm-box${on ? ' ut-on' : ''}" id="hmForm">${dot}<textarea id="hmIn" rows="1" aria-label="A message for ${esc(R.role.name)}" placeholder="${esc(ph)}"></textarea>`
430
445
  + `<div class="hm-tb">${add}`
431
446
  + to + wait + scope + `<span class="sp"></span>${host.viewerClosed() ? '<span class="hm-key">Enter sends · Shift+Enter for a new line</span>' : ''}`
432
- + `${mic}<button type="submit" class="hm-send" aria-label="Send" title="Send">${SVG(UP, 18)}</button></div>`
447
+ + `${NPU.undoHtml()}${mic}<button type="submit" class="hm-send" aria-label="Send" title="Send">${SVG(UP, 18)}</button></div>`
433
448
  + filesRow()
434
449
  + '</form>';
435
450
  if (foot.__h !== html) {
@@ -511,6 +526,7 @@ export function mountChat(el, host) {
511
526
  return;
512
527
  }
513
528
  const b = e.target.closest('button, [data-file], [data-att], [data-ctx]'); if (!b || !el.contains(b)) return;
529
+ if (NPU.click(b)) return;
514
530
  // ✓ types /compact (and hides the ✦ until the pie moves); ✕ hides it until the session is 10 points fuller
515
531
  if (b.dataset.hmCpt && C.cpt) { if (b.dataset.hmCpt === 'ok') host.compact(sid()); else host.dismissCompact(sid(), C.cpt.pct); C.cpt = null; sug.hidden = true; put(sug, ''); return; }
516
532
  if (b.dataset.hmSug && C.sug) { const g = C.sug; if (b.dataset.hmSug === 'link') host.linkTo(C.t.sid, g.id); else { host.dismissLink(C.t.sid); drawSug(); } return; }
@@ -572,7 +588,7 @@ export function mountChat(el, host) {
572
588
  el.addEventListener('submit', (e) => { e.preventDefault(); const ta = foot.querySelector('textarea'); const v = ta.value; if (GU.submit(v)) { ta.value = ''; grow(ta); return; }
573
589
  // the box empties at once and the bubble shows (batch 24 item 2); a send that fails puts the words back, unless the PM typed again
574
590
  if (!v.trim() && !C.files.length) return;
575
- ta.value = ''; grow(ta);
591
+ ta.value = ''; grow(ta); NPU.sent();
576
592
  send(v).then((ok) => { const box = foot.querySelector('textarea'); if (!ok && box && !box.value) { box.value = v; grow(box); } }); });
577
593
  const shutAdd = (focus) => { if (!C.addOpen) return; C.addOpen = false; drawFoot({ role: role() }); if (focus) { const a = foot.querySelector('#hmAdd'); if (a) a.focus(); } };
578
594
  document.addEventListener('click', (e) => { if (C.addOpen && e.target.isConnected && !e.target.closest('.hm-addw')) shutAdd(false); }, true);
@@ -580,6 +596,7 @@ export function mountChat(el, host) {
580
596
  document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && !e.defaultPrevented && el.isConnected && !el.contains(e.target) && !document.querySelector('[data-esc-layer]') && GU.escape()) e.preventDefault(); });
581
597
  el.addEventListener('keydown', (e) => {
582
598
  if (e.key === 'Escape' && C.addOpen) { e.preventDefault(); e.stopPropagation(); shutAdd(true); return; }
599
+ if (e.key === 'Escape' && NPU.escape()) { e.preventDefault(); e.stopPropagation(); return; }
583
600
  if (e.key === 'Escape' && GU.escape()) { e.preventDefault(); e.stopPropagation(); return; }
584
601
  if (e.target.id !== 'hmIn') { if (e.key === 'Escape' && running() && !document.querySelector('[data-esc-layer]') && !(window.czViewer && window.czViewer.isOpen())) press('esc'); return; }
585
602
  if (e.isComposing || e.keyCode === 229) return;
@@ -592,7 +609,7 @@ export function mountChat(el, host) {
592
609
  el.addEventListener('input', (e) => {
593
610
  const card = C.t && C.t.intro && C.t.intro.card;
594
611
  if (card && card.input && e.target.closest('.hm-icard')) { card.input(e.target, e.target.closest('.hm-icard')); return; }
595
- if (e.target.id === 'hmIn') { grow(e.target); C.slashAt = 0; drawSlash(); }
612
+ if (e.target.id === 'hmIn') { grow(e.target); C.slashAt = 0; drawSlash(); NPU.input(e.target.value); }
596
613
  });
597
614
  /* ── the mic ── dictation into the box only (HmMic). A desk shows the blue dot in the box; a phone shows the Speak to Claude sheet. */
598
615
  const box = () => foot.querySelector('textarea');
@@ -671,7 +688,7 @@ export function mountChat(el, host) {
671
688
  if (notesM) notesM.then((M) => setTimeout(() => M.syncNotes(), 0)); // the Notes open in the Viewer belonged to the conversation before
672
689
  const same = C.t && t && C.t.key === t.key && C.t.sid === t.sid;
673
690
  C.t = t;
674
- if (!same) { C.addOpen = false; C.th = null; C.conv = null; C.show = 12; C.open = new Set(); C.files = []; C.marked = null; C.touched = null; C.picked = {}; C.pend = []; C.plOpen = false; C.plAll = false; C.seenAt = t.key ? host.seen(t.key) : null; put(log, introHtml(t.intro)); put(pl, ''); pl.hidden = true; C.jump = true; peek(null); }
691
+ if (!same) { NPU.open(); C.addOpen = false; C.th = null; C.conv = null; C.show = 12; C.open = new Set(); C.files = []; C.marked = null; C.touched = null; C.picked = {}; C.pend = []; C.plOpen = false; C.plAll = false; C.seenAt = t.key ? host.seen(t.key) : null; put(log, introHtml(t.intro)); put(pl, ''); pl.hidden = true; C.jump = true; peek(null); }
675
692
  draw(); read();
676
693
  },
677
694
  refresh() { if (C.t) draw(); },
@@ -4,23 +4,23 @@
4
4
  .im-q { position: relative; display: flex; align-items: flex-start; gap: 10px; padding: 12px 8px 12px 16px; border-radius: 18px; background: var(--cz-bluebg); }
5
5
  .im-k { flex: none; display: inline-flex; margin-top: 2px; color: var(--cz-blueink); }
6
6
  .im-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
7
- .im-t { font-size: var(--fs-4); font-weight: 700; line-height: 1.35; color: var(--cz-ink); overflow-wrap: anywhere; }
8
- .im-w { font-size: var(--fs-3); color: var(--cz-ink2); overflow-wrap: anywhere; }
9
- .im-src { display: inline-flex; align-items: center; gap: 4px; margin-top: 2px; font-size: var(--fs-2); color: var(--cz-ink3); text-decoration: none; }
7
+ .im-t { font-size: var(--fs-row); font-weight: var(--fw-strong); line-height: 1.35; color: var(--cz-ink); overflow-wrap: anywhere; }
8
+ .im-w { font-size: var(--fs-body); color: var(--cz-ink2); overflow-wrap: anywhere; line-height: var(--lh-body); }
9
+ .im-src { display: inline-flex; align-items: center; gap: 4px; margin-top: 2px; font-size: var(--fs-meta); color: var(--cz-ink3); text-decoration: none; line-height: var(--lh-meta); }
10
10
  .im-src:hover { text-decoration: underline; }
11
11
  .im-src svg, .im-lock svg { flex: none; }
12
12
  .im-mw { position: relative; flex: none; }
13
13
  .im-more { width: 28px; height: 28px; color: var(--cz-ink2); }
14
14
  .ut-ib.im-more svg { stroke-width: 3.2; }
15
15
  .im-pop { position: absolute; right: 0; top: 32px; z-index: 5; padding: 4px; border-radius: 14px; background: var(--cz-card); box-shadow: 0 14px 34px -14px rgba(42, 46, 53, .4), 0 0 0 1px var(--cz-hair); }
16
- .im-pop button { display: flex; align-items: center; gap: 8px; height: 36px; padding: 0 12px; border: 0; border-radius: 10px; background: none; color: var(--cz-ink); font: inherit; font-size: var(--fs-3); font-weight: 600; white-space: nowrap; cursor: pointer; }
16
+ .im-pop button { display: flex; align-items: center; gap: 8px; height: 36px; padding: 0 12px; border: 0; border-radius: 10px; background: none; color: var(--cz-ink); font: inherit; font-size: var(--fs-row); font-weight: var(--fw-strong); white-space: nowrap; cursor: pointer; line-height: var(--lh-row); }
17
17
  .im-pop button:hover, .im-pop button:focus-visible { background: var(--cz-well); }
18
18
  .im-pop svg { width: 15px; height: 15px; }
19
- .im-q.im-gone { align-items: center; padding: 8px 8px 8px 16px; background: var(--cz-well); color: var(--cz-ink3); font-size: var(--fs-3); }
19
+ .im-q.im-gone { align-items: center; padding: 8px 8px 8px 16px; background: var(--cz-well); color: var(--cz-ink3); font-size: var(--fs-body); line-height: var(--lh-body); }
20
20
  .im-gt { flex: 1; min-width: 0; overflow-wrap: anywhere; }
21
- .im-undo { flex: none; height: 32px; padding: 0 12px; border: 0; border-radius: 999px; background: none; color: var(--cz-blueink); font: inherit; font-size: var(--fs-3); font-weight: 700; cursor: pointer; }
21
+ .im-undo { flex: none; height: 32px; padding: 0 12px; border: 0; border-radius: 999px; background: none; color: var(--cz-blueink); font: inherit; font-size: var(--fs-row); font-weight: var(--fw-strong); cursor: pointer; line-height: var(--lh-row); }
22
22
  .im-undo:hover { background: var(--cz-card); }
23
- .im-lock { display: flex; align-items: center; gap: 6px; margin: 10px 0 0; font-size: var(--fs-2); color: var(--cz-ink3); }
24
- .im-msg { margin: 4px 0 0; font-size: var(--fs-2); color: var(--cz-ink3); }
23
+ .im-lock { display: flex; align-items: center; gap: 6px; margin: 10px 0 0; font-size: var(--fs-meta); color: var(--cz-ink3); line-height: var(--lh-meta); }
24
+ .im-msg { margin: 4px 0 0; font-size: var(--fs-meta); color: var(--cz-ink3); line-height: var(--lh-meta); }
25
25
  .im-msg:empty { display: none; }
26
26
  @media (prefers-reduced-motion: no-preference) { .im-q { transition: background-color .2s ease; } }
@@ -4,9 +4,9 @@
4
4
  /* ── the stage move in the card (InStage) ── */
5
5
  .hi-slot { display: contents; }
6
6
  .hi-mv { display: flex; flex-direction: column; gap: 8px; padding-top: 4px; }
7
- .hi-why, .hi-note { margin: 0; font-size: var(--fs-2); color: var(--cz-ink3); }
7
+ .hi-why, .hi-note { margin: 0; font-size: var(--fs-meta); color: var(--cz-ink3); line-height: var(--lh-meta); }
8
8
  .hi-note b { color: var(--cz-ink2); }
9
- .hi-swl { display: flex; align-items: center; gap: 8px; font-size: var(--fs-2); color: var(--cz-ink2); }
9
+ .hi-swl { display: flex; align-items: center; gap: 8px; font-size: var(--fs-meta); color: var(--cz-ink2); line-height: var(--lh-meta); }
10
10
  .hi-sw { position: relative; flex: none; width: 32px; height: 20px; border-radius: 999px; background: var(--cz-c-d9dce1); border: 0; padding: 0; cursor: pointer; }
11
11
  .hi-sw::after { content: ""; position: absolute; top: 3px; left: 3px; width: 14px; height: 14px; border-radius: 50%; background: var(--cz-card); transition: left .15s; }
12
12
  .hi-sw[aria-checked="true"] { background: var(--cz-blue); }
@@ -19,13 +19,13 @@
19
19
  .hi-self { align-self: flex-start; }
20
20
 
21
21
  /* ── the list column groups (InTasks, InDocs) ── */
22
- .hi-g .hm-gh .hi-n { margin-left: auto; font-weight: 700; font-size: var(--fs-2); color: var(--cz-ink3); }
22
+ .hi-g .hm-gh .hi-n { margin-left: auto; font-weight: var(--fw-strong); font-size: var(--fs-label); color: var(--cz-ink3); line-height: var(--lh-label); }
23
23
  .hm-r.hi-r { min-height: 48px; margin-bottom: 2px; }
24
24
  .hm-r.hi-r .hm-rm { min-height: 48px; padding: 7px 10px; }
25
- .hm-r.hi-r .hm-rt b { font-weight: 600; }
25
+ .hm-r.hi-r .hm-rt b { font-weight: var(--fw-strong); }
26
26
  .hm-r.hi-r > .hi-chk { margin-left: 12px; }
27
27
  .hm-rt em.q { color: var(--cz-ink3); }
28
- .hm-rt em.late { color: var(--cz-late); font-weight: 700; }
28
+ .hm-rt em.late { color: var(--cz-late); font-weight: var(--fw-strong); }
29
29
  .hm-rt em.risk { color: var(--cz-risk); }
30
30
  .hm-dot.hi-risk { background: var(--cz-dot-risk); }
31
31
  .hm-tile.hi-sq { border-radius: 50%; background: var(--cz-well2); box-shadow: none; }
@@ -38,39 +38,39 @@
38
38
 
39
39
 
40
40
  /* ── the Viewer: Tasks, Documents, Stage (InTasks, InDocs) ── */
41
- .hi-v { display: flex; flex-direction: column; gap: 12px; padding: 16px 20px 24px; font-size: var(--fs-3); color: var(--cz-ink); }
41
+ .hi-v { display: flex; flex-direction: column; gap: 12px; padding: 16px 20px 24px; font-size: var(--fs-body); color: var(--cz-ink); line-height: var(--lh-body); }
42
42
  .hi-seg { align-self: flex-start; }
43
43
  .hi-vh2 { display: flex; align-items: center; gap: 8px; }
44
- .hi-vh2 h2 { flex: 1; min-width: 0; margin: 0; font-size: var(--fs-5); font-weight: 800; }
45
- .cz-pick.hi-pick { height: 30px; font-size: var(--fs-2); font-weight: 700; color: var(--cz-ink2); }
44
+ .hi-vh2 h2 { flex: 1; min-width: 0; margin: 0; font-size: var(--fs-panel); font-weight: var(--fw-strong); line-height: var(--lh-panel); }
45
+ .cz-pick.hi-pick { height: 30px; font-size: var(--fs-label); font-weight: var(--fw-strong); color: var(--cz-ink2); line-height: var(--lh-label); }
46
46
  .cz-pick.hi-pick svg { fill: none; stroke: currentColor; }
47
- .hi-empty { margin: 0; font-size: var(--fs-2); color: var(--cz-ink3); }
47
+ .hi-empty { margin: 0; font-size: var(--fs-meta); color: var(--cz-ink3); line-height: var(--lh-meta); }
48
48
  .hi-tg { display: flex; flex-direction: column; border-radius: 12px; }
49
49
  .hi-tg.over { background: var(--cz-bluebg); }
50
50
  .hi-gh { display: flex; align-items: center; gap: 6px; margin-top: 4px; }
51
51
  .hi-ghb { flex: 1; display: flex; align-items: center; gap: 6px; height: 32px; padding: 0; border: 0; background: none; color: var(--cz-ink); font: inherit; cursor: pointer; text-align: left; }
52
52
  .hi-ghb svg { color: var(--cz-ink3); }
53
- .hi-ghb b { font-size: var(--fs-3); }
54
- .hi-ghb span { font-size: var(--fs-2); color: var(--cz-ink3); }
55
- .hi-trow { display: flex; align-items: center; gap: 10px; padding: 8px 4px; border-bottom: 1px solid var(--cz-hair); font-size: var(--fs-3); min-height: 26px; }
53
+ .hi-ghb b { font-size: var(--fs-body); line-height: var(--lh-body); }
54
+ .hi-ghb span { font-size: var(--fs-meta); color: var(--cz-ink3); line-height: var(--lh-meta); }
55
+ .hi-trow { display: flex; align-items: center; gap: 10px; padding: 8px 4px; border-bottom: 1px solid var(--cz-hair); font-size: var(--fs-body); min-height: 26px; line-height: var(--lh-body); }
56
56
  .hi-trow:last-child { border-bottom: 0; }
57
57
  .hi-trow[draggable="true"] { cursor: grab; }
58
58
  .hi-trow.drag { opacity: .5; }
59
59
  .hi-tt { flex: 1; min-width: 0; border: 0; background: none; padding: 0; font: inherit; color: var(--cz-ink); text-align: left; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
60
- .hi-tt em { font-style: normal; color: var(--cz-ink3); font-size: var(--fs-2); }
60
+ .hi-tt em { font-style: normal; color: var(--cz-ink3); font-size: var(--fs-meta); line-height: var(--lh-meta); }
61
61
  .hi-trow.done .hi-tt { text-decoration: line-through; color: var(--cz-ink3); }
62
- .hi-pill { display: inline-flex; align-items: center; height: 20px; padding: 0 9px; border-radius: 999px; font: inherit; font-size: var(--fs-1); font-weight: 700; background: var(--cz-well); color: var(--cz-ink2); white-space: nowrap; border: 0; flex: none; }
62
+ .hi-pill { display: inline-flex; align-items: center; height: 20px; padding: 0 9px; border-radius: 999px; font: inherit; font-size: var(--fs-badge); font-weight: var(--fw-strong); background: var(--cz-well); color: var(--cz-ink2); white-space: nowrap; border: 0; flex: none; line-height: var(--lh-badge); }
63
63
  button.hi-pill { cursor: pointer; }
64
64
  .hi-pill.ok { background: var(--cz-okbg); color: var(--cz-ok); }
65
65
  .hi-pill.w { background: var(--cz-riskbg); color: var(--cz-risk); }
66
66
  .hi-pill.dash { background: transparent; box-shadow: inset 0 0 0 1px var(--cz-c-c5c9d0); color: var(--cz-ink3); }
67
- .hi-av { width: 22px; height: 22px; border-radius: 50%; background: var(--cz-well2); color: var(--cz-ink2); font-size: var(--fs-1); font-weight: 800; display: inline-grid; place-items: center; flex: none; }
68
- .hi-due { font-size: var(--fs-2); color: var(--cz-ink3); min-width: 38px; text-align: right; flex: none; }
69
- .hi-due.late { color: var(--cz-late); font-weight: 700; }
67
+ .hi-av { width: 22px; height: 22px; border-radius: 50%; background: var(--cz-well2); color: var(--cz-ink2); font-size: var(--fs-badge); font-weight: var(--fw-strong); display: inline-grid; place-items: center; flex: none; line-height: var(--lh-badge); }
68
+ .hi-due { font-size: var(--fs-meta); color: var(--cz-ink3); min-width: 38px; text-align: right; flex: none; line-height: var(--lh-meta); }
69
+ .hi-due.late { color: var(--cz-late); font-weight: var(--fw-strong); }
70
70
  .hi-trow .hi-ib { opacity: .35; }
71
71
  .hi-trow:hover .hi-ib, .hi-trow .hi-ib:focus-visible, .hi-trow .hi-ib[aria-expanded="true"] { opacity: 1; }
72
72
  .hi-add { display: flex; align-items: center; gap: 8px; height: 40px; border-radius: 14px; background: var(--cz-well); padding: 0 6px 0 12px; }
73
- .hi-add input { flex: 1; min-width: 0; border: 0; background: none; outline: 0; font: inherit; font-size: var(--fs-3); color: var(--cz-ink); }
73
+ .hi-add input { flex: 1; min-width: 0; border: 0; background: none; outline: 0; font: inherit; font-size: var(--fs-body); color: var(--cz-ink); line-height: var(--lh-body); }
74
74
  .hi-foot { display: flex; gap: 4px; flex-wrap: wrap; border-top: 1px solid var(--cz-hair); padding-top: 8px; }
75
75
  .hi-drow { display: flex; align-items: flex-start; gap: 10px; padding: 8px; border-radius: 12px; }
76
76
  .hi-drow.look { background: var(--cz-bluebg); }
@@ -79,12 +79,12 @@ button.hi-pill { cursor: pointer; }
79
79
  .hi-dic { width: 30px; height: 30px; border-radius: 9px; background: var(--cz-well); display: inline-grid; place-items: center; flex: none; color: var(--cz-ink2); }
80
80
  .hi-dic.dash { background: none; box-shadow: inset 0 0 0 1.5px var(--cz-c-d9dce1); color: var(--cz-ink3); }
81
81
  .hi-dtx { min-width: 0; display: block; }
82
- .hi-dtx b { font-weight: 800; }
83
- .hi-dtx .hi-k { font-size: var(--fs-2); color: var(--cz-ink3); }
84
- .hi-dtx em { display: block; font-style: normal; font-size: var(--fs-2); color: var(--cz-ink3); }
85
- .hi-dtx small { display: block; font-size: var(--fs-1); color: var(--cz-ink3); overflow-wrap: anywhere; }
82
+ .hi-dtx b { font-weight: var(--fw-strong); }
83
+ .hi-dtx .hi-k { font-size: var(--fs-meta); color: var(--cz-ink3); line-height: var(--lh-meta); }
84
+ .hi-dtx em { display: block; font-style: normal; font-size: var(--fs-meta); color: var(--cz-ink3); line-height: var(--lh-meta); }
85
+ .hi-dtx small { display: block; font-size: var(--fs-meta); color: var(--cz-ink3); overflow-wrap: anywhere; line-height: var(--lh-meta); }
86
86
  .hi-drow.later { align-items: center; color: var(--cz-ink3); }
87
- .hi-dt { flex: 1; font-size: var(--fs-3); }
87
+ .hi-dt { flex: 1; font-size: var(--fs-body); line-height: var(--lh-body); }
88
88
  .hi-drow > .hi-pill, .hi-drow > .hi-btn { margin-top: 4px; }
89
89
  .hi-sec { display: flex; flex-direction: column; gap: 8px; }
90
90
  .hi-stages { display: flex; flex-wrap: wrap; gap: 6px; }
@@ -130,13 +130,13 @@ button.hi-pill { cursor: pointer; }
130
130
  @media (max-width: 760px) { .hi-v.hi-page { padding-left: 0; padding-right: 0; } }
131
131
  .hi-pg { display: flex; flex-direction: column; gap: 2px; }
132
132
  .hi-pgh { display: flex; align-items: center; gap: 8px; min-height: 32px; padding: 0 4px; }
133
- .hi-pgh b { font-size: var(--fs-3); font-weight: 800; color: var(--cz-ink); }
134
- .hi-pgh .hi-n { font-size: var(--fs-2); font-weight: 700; color: var(--cz-ink3); }
133
+ .hi-pgh b { font-size: var(--fs-row); font-weight: var(--fw-strong); color: var(--cz-ink); line-height: var(--lh-row); }
134
+ .hi-pgh .hi-n { font-size: var(--fs-label); font-weight: var(--fw-strong); color: var(--cz-ink3); line-height: var(--lh-label); }
135
135
  .hi-pgh .hm-gadd { margin-left: auto; }
136
- .hi-pgm { align-self: flex-start; display: inline-flex; align-items: center; gap: 4px; min-height: 36px; padding: 0 8px; border: 0; border-radius: 10px; background: none; color: var(--cz-ink2); font: inherit; font-size: var(--fs-2); font-weight: 700; cursor: pointer; }
136
+ .hi-pgm { align-self: flex-start; display: inline-flex; align-items: center; gap: 4px; min-height: 36px; padding: 0 8px; border: 0; border-radius: 10px; background: none; color: var(--cz-ink2); font: inherit; font-size: var(--fs-label); font-weight: var(--fw-strong); cursor: pointer; line-height: var(--lh-label); }
137
137
  .hi-pge { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; padding: 10px 6px; }
138
- .hi-pge p { margin: 0; font-size: var(--fs-2); color: var(--cz-ink3); }
139
- .hi-talk { min-height: 44px; border: 0; border-radius: 22px; background: var(--cz-well); color: var(--cz-ink3); font: inherit; font-size: var(--fs-3); text-align: left; padding: 0 16px; cursor: pointer; }
138
+ .hi-pge p { margin: 0; font-size: var(--fs-meta); color: var(--cz-ink3); line-height: var(--lh-meta); }
139
+ .hi-talk { min-height: 44px; border: 0; border-radius: 22px; background: var(--cz-well); color: var(--cz-ink3); font: inherit; font-size: var(--fs-body); text-align: left; padding: 0 16px; cursor: pointer; line-height: var(--lh-body); }
140
140
  @media (hover: hover) { .hi-pgm:hover { background: var(--cz-well2); } }
141
141
 
142
142
  /* ── D99: the initiative's own workflow (WfTriage, WfAChange, WfAWontDo) ── */
@@ -150,22 +150,22 @@ button.hi-pill { cursor: pointer; }
150
150
  .hm-card.hm-sc { padding: 0; background: transparent; box-shadow: none; }
151
151
  .hm-box.hm-scb { background: var(--cz-card); border-radius: 18px; padding: 12px; gap: 0; box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--cz-blue) 45%, transparent); }
152
152
  .hm-sch { display: flex; align-items: center; gap: 8px; min-height: 28px; }
153
- .hm-sch > b { font-size: var(--fs-3); font-weight: 800; color: var(--cz-ink); }
154
- .hm-sch .of { font-size: var(--fs-2); color: var(--cz-ink3); font-weight: 600; }
153
+ .hm-sch > b { font-size: var(--fs-row); font-weight: var(--fw-strong); color: var(--cz-ink); line-height: var(--lh-row); }
154
+ .hm-sch .of { font-size: var(--fs-label); color: var(--cz-ink3); font-weight: var(--fw-strong); line-height: var(--lh-label); }
155
155
  .hm-sch .hm-wf { display: inline-flex; align-items: center; justify-content: center; padding: 3px; margin-left: 2px; border: 0; border-radius: 9px; background: none; cursor: pointer; color: inherit; }
156
156
  .hm-sch .hm-wf:hover, .hm-sch .hm-wf[aria-expanded="true"] { background: var(--cz-well); }
157
- .hm-sct { margin-left: auto; display: inline-flex; align-items: center; gap: 5px; font-size: var(--fs-2); color: var(--cz-ink3); font-weight: 600; white-space: nowrap; }
157
+ .hm-sct { margin-left: auto; display: inline-flex; align-items: center; gap: 5px; font-size: var(--fs-label); color: var(--cz-ink3); font-weight: var(--fw-strong); white-space: nowrap; line-height: var(--lh-label); }
158
158
  .hm-sct.over { color: var(--cz-risk); }
159
159
  .hm-bars.hm-scbars { margin: 10px 0 8px; }
160
160
  .hm-bars.hm-scbars i { position: relative; } .hm-bars.hm-scbars i::after { content: ""; position: absolute; inset: -6px 0; } /* a taller hover target for the stage name */
161
161
  .hm-bars.hm-scbars i.skip { background: repeating-linear-gradient(90deg, color-mix(in srgb, var(--cz-ink3) 40%, transparent) 0 4px, transparent 4px 7px); }
162
162
  .hm-scl { border-top: 1px solid var(--cz-hair); padding-top: 8px; margin-top: 2px; }
163
- .hm-scwhy { margin: 0; padding: 4px 0 2px 34px; font-size: var(--fs-2); color: var(--cz-ink3); }
164
- .hm-scb > .hm-none { margin: 4px 0 0; font-size: var(--fs-2); color: var(--cz-ink3); }
163
+ .hm-scwhy { margin: 0; padding: 4px 0 2px 34px; font-size: var(--fs-meta); color: var(--cz-ink3); line-height: var(--lh-meta); }
164
+ .hm-scb > .hm-none { margin: 4px 0 0; font-size: var(--fs-meta); color: var(--cz-ink3); line-height: var(--lh-meta); }
165
165
  /* the move sheet: Move now and Back as two quiet buttons, side by side on a desktop, stacked on the phone */
166
166
  .hi-nxa { display: flex; gap: 8px; padding-top: 10px; border-top: 1px solid var(--cz-hair); }
167
167
  .hi-nxa .hi-btn { flex: 1; justify-content: center; height: 40px; border-radius: 12px; }
168
- .hi-pop .hi-swl { font-size: var(--fs-3); font-weight: 700; color: var(--cz-ink); min-height: 44px; }
168
+ .hi-pop .hi-swl { font-size: var(--fs-row); font-weight: var(--fw-strong); color: var(--cz-ink); min-height: 44px; line-height: var(--lh-row); }
169
169
  .hi-pop .hi-swl > span { flex: 1; }
170
170
  .hi-pop .hi-sw { width: 44px; height: 28px; }
171
171
  .hi-pop .hi-sw::after { top: 4px; left: 4px; width: 20px; height: 20px; }
@@ -178,6 +178,6 @@ button.hi-pill { cursor: pointer; }
178
178
  .hi-pop .hi-sw[aria-checked="true"]::before, .hi-v .hi-sw[aria-checked="true"]::before, :root[data-theme="dark"] .hi-pop .hi-sw[aria-checked="true"]::before, :root[data-theme="dark"] .hi-v .hi-sw[aria-checked="true"]::before { background: var(--cz-blue); }
179
179
  .hi-pop .hi-sw::after, .hi-v .hi-sw::after { top: 12px; z-index: 1; background: var(--cz-onsolid); }
180
180
  .hi-pop.sheet .hi-nxa { flex-direction: column; border-top: 0; padding-top: 0; }
181
- .hi-pop.sheet .hi-nxa .hi-btn { height: 48px; border-radius: 14px; font-size: var(--fs-3); font-weight: 800; }
182
- .hi-pop.sheet .hi-h3 { font-size: var(--fs-4); }
181
+ .hi-pop.sheet .hi-nxa .hi-btn { height: 48px; border-radius: 14px; font-size: var(--fs-row); font-weight: var(--fw-strong); line-height: var(--lh-row); }
182
+ .hi-pop.sheet .hi-h3 { font-size: var(--fs-body); line-height: var(--lh-body); }
183
183
  }
@@ -7,19 +7,19 @@
7
7
  .pl-row { display: flex; align-items: center; gap: 4px; min-height: 48px; padding: 2px 4px 2px 0; }
8
8
  .pl-hit { flex: 1; min-width: 0; display: flex; align-items: center; gap: 10px; min-height: 44px; padding: 0 6px 0 14px; border: 0; background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; border-radius: 14px; }
9
9
  .pl-hit:focus-visible, .pl-stop:focus-visible, .pl-ib:focus-visible, .pl-dvb:focus-visible { outline: 2px solid var(--cz-blue); outline-offset: 2px; }
10
- .pl-t { flex: 1; min-width: 0; font-size: var(--fs-3); font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
10
+ .pl-t { flex: 1; min-width: 0; font-size: var(--fs-row); font-weight: var(--fw-strong); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: var(--lh-row); }
11
11
  .hm-pl.open .pl-t { white-space: normal; }
12
12
  .hm-pl.you .pl-t, .hm-goalq .pl-t { color: var(--cz-blueink); }
13
- .pl-n { flex: none; font-size: var(--fs-2); font-weight: 600; color: var(--cz-ink3); }
13
+ .pl-n { flex: none; font-size: var(--fs-label); font-weight: var(--fw-strong); color: var(--cz-ink3); line-height: var(--lh-label); }
14
14
  .pl-cv { flex: none; display: inline-flex; color: var(--cz-ink3); }
15
15
  .pl-dot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--cz-blue); }
16
16
  .pl-clk { display: inline-flex; color: var(--cz-ink3); }
17
17
  .pl-stop { flex: none; width: 40px; height: 40px; border-radius: 50%; border: 1px solid var(--cz-hair); background: var(--cz-card); color: var(--cz-ink); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; }
18
18
  .pl-body { padding: 0 14px 12px; }
19
- .pl-head { margin: 0 0 10px; font-size: var(--fs-2); color: var(--cz-ink3); line-height: 1.4; }
19
+ .pl-head { margin: 0 0 10px; font-size: var(--fs-meta); color: var(--cz-ink3); line-height: 1.4; }
20
20
  .pl-sl { margin-top: 2px; }
21
- .pl-now { display: flex; align-items: center; gap: 8px; margin: 4px 0 0; padding-top: 10px; border-top: 1px solid var(--cz-hair); font-size: var(--fs-2); min-width: 0; }
22
- .pl-now b { flex: none; font-weight: 800; }
21
+ .pl-now { display: flex; align-items: center; gap: 8px; margin: 4px 0 0; padding-top: 10px; border-top: 1px solid var(--cz-hair); font-size: var(--fs-meta); min-width: 0; line-height: var(--lh-meta); }
22
+ .pl-now b { flex: none; font-weight: var(--fw-strong); }
23
23
  .pl-nt { min-width: 0; color: var(--cz-ink2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
24
24
  .hm-pl.open .pl-nt { white-space: normal; }
25
25
  .pl-acts { display: flex; gap: 8px; margin-top: 10px; }
@@ -29,10 +29,10 @@
29
29
  /* the Viewer (a desktop) */
30
30
  .pl-vw { padding: 16px 20px; }
31
31
  .pl-vwh { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 6px; }
32
- .pl-vwh b { flex: 1; min-width: 0; font-size: var(--fs-4); font-weight: 800; line-height: 1.3; }
32
+ .pl-vwh b { flex: 1; min-width: 0; font-size: var(--fs-row); font-weight: var(--fw-strong); line-height: 1.3; }
33
33
 
34
34
  /* the divider where a run finished */
35
- .pl-dv { display: flex; align-items: center; gap: 10px; margin: 4px 0; font-size: var(--fs-2); font-weight: 700; color: var(--cz-ink2); }
35
+ .pl-dv { display: flex; align-items: center; gap: 10px; margin: 4px 0; font-size: var(--fs-label); font-weight: var(--fw-strong); color: var(--cz-ink2); line-height: var(--lh-label); }
36
36
  .pl-dv .ln { flex: 1; height: 1px; background: var(--cz-hair); }
37
37
  .pl-dv.stop { color: var(--cz-risk); }
38
38
  .pl-dvb { display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 0 8px; border: 0; background: transparent; color: inherit; font: inherit; cursor: pointer; border-radius: 10px; }
@@ -2,24 +2,24 @@
2
2
  * leaf outside Adler's sprout. Colours are the --cz-* tokens of cozy.css, type is the var(--fs-N) scale. */
3
3
  .im { display: flex; flex-direction: column; gap: 14px; font-family: var(--cz-sans); color: var(--cz-ink); }
4
4
  .im-hd { display: flex; flex-direction: column; gap: 4px; }
5
- .im-hd b { font-size: var(--fs-5); font-weight: 800; letter-spacing: -.01em; }
6
- .im-hd span { font-size: var(--fs-4); color: var(--cz-ink2); }
5
+ .im-hd b { font-size: var(--fs-display); font-weight: var(--fw-strong); letter-spacing: -.01em; line-height: var(--lh-display); }
6
+ .im-hd span { font-size: var(--fs-body); color: var(--cz-ink2); line-height: var(--lh-body); }
7
7
  .im-card { background: var(--cz-card); border: 1px solid var(--cz-hair); border-radius: 18px; padding: 4px 16px; }
8
8
  .im-row { display: flex; align-items: center; gap: 12px; min-height: 60px; padding: 8px 0; border-top: 1px solid var(--cz-hair); }
9
9
  .im-row:first-child { border-top: 0; }
10
10
  .im-tile { width: 36px; height: 36px; border-radius: 10px; flex: none; display: inline-flex; align-items: center; justify-content: center; background: var(--cz-well); color: var(--cz-ink2); }
11
11
  .im-tile.b { background: var(--cz-bluebg); color: var(--cz-blue); }
12
12
  .im-tile.g { background: var(--cz-okbg); color: var(--cz-ok); }
13
- .im-av { width: 36px; height: 36px; border-radius: 18px; flex: none; display: inline-flex; align-items: center; justify-content: center; font-weight: 800; font-size: var(--fs-3); background: var(--cz-well); color: var(--cz-ink); }
13
+ .im-av { width: 36px; height: 36px; border-radius: 18px; flex: none; display: inline-flex; align-items: center; justify-content: center; font-weight: var(--fw-strong); font-size: var(--fs-row); background: var(--cz-well); color: var(--cz-ink); line-height: var(--lh-row); }
14
14
  .im-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
15
- .im-t { font-size: var(--fs-4); font-weight: 400; }
16
- b.im-t { font-weight: 700; }
17
- .im-s { font-size: var(--fs-3); color: var(--cz-ink2); }
15
+ .im-t { font-size: var(--fs-body); font-weight: var(--fw-regular); line-height: var(--lh-body); }
16
+ b.im-t { font-weight: var(--fw-strong); }
17
+ .im-s { font-size: var(--fs-body); color: var(--cz-ink2); line-height: var(--lh-body); }
18
18
  .im-ib { width: 44px; height: 44px; border-radius: 22px; flex: none; display: inline-flex; align-items: center; justify-content: center; background: var(--cz-well); color: var(--cz-ink2); text-decoration: none; }
19
- .im-lock { display: flex; align-items: center; gap: 6px; margin: 0; font-size: var(--fs-3); color: var(--cz-ink2); }
19
+ .im-lock { display: flex; align-items: center; gap: 6px; margin: 0; font-size: var(--fs-body); color: var(--cz-ink2); line-height: var(--lh-body); }
20
20
  .im-wk { display: flex; flex-direction: column; gap: 8px; }
21
21
  .im-wk.quiet { flex-direction: row; align-items: baseline; gap: 10px; padding: 4px 0; }
22
- .im-wl { font-size: var(--fs-2); font-weight: 800; letter-spacing: .02em; color: var(--cz-ink2); flex: none; }
22
+ .im-wl { font-size: var(--fs-label); font-weight: var(--fw-strong); letter-spacing: .02em; color: var(--cz-ink2); flex: none; line-height: var(--lh-label); }
23
23
  .im-row .im-wl { width: 64px; }
24
24
  .im-wk summary { display: flex; align-items: center; gap: 10px; min-height: 44px; cursor: pointer; list-style: none; border-radius: 12px; }
25
25
  .im-wk summary::-webkit-details-marker { display: none; }
@@ -31,7 +31,7 @@ b.im-t { font-weight: 700; }
31
31
  .im-made { margin-top: 18px; }
32
32
  .im-win { margin-bottom: 12px; border-radius: 18px; overflow: hidden; }
33
33
  .im-ch { margin: 12px 0; }
34
- .im-mt { display: flex; align-items: center; gap: 6px; margin: 8px 0 0; font-size: var(--fs-3); color: var(--cz-ink2); }
34
+ .im-mt { display: flex; align-items: center; gap: 6px; margin: 8px 0 0; font-size: var(--fs-body); color: var(--cz-ink2); line-height: var(--lh-body); }
35
35
  .im-face { width: 40px; height: 44px; border: 0; padding: 0; margin: 0 -4px 0 0; background: none; border-radius: 22px; flex: none; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; }
36
36
  .im-face .ad-svg.hv-ad { width: 36px; height: 36px; }
37
37
  @media (hover: hover) { .im-ib:hover, .im-face:hover, .im-wk summary:hover { background: var(--cz-well2); } }