@peasant-labs/fairtrade 0.0.24 → 0.0.27

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 (35) hide show
  1. package/dist/lib/{GraphLegend-sgixmPER.js → GraphLegend-kO2WP4yM.js} +1248 -1162
  2. package/dist/lib/analytics.css +1 -1
  3. package/dist/lib/analytics.js +29 -21
  4. package/dist/lib/base.css +4 -2
  5. package/dist/lib/commons.js +815 -829
  6. package/dist/lib/components.css +1 -1
  7. package/dist/lib/fonts.css +19 -21
  8. package/dist/lib/graph.css +1 -1
  9. package/dist/lib/graph.js +418 -420
  10. package/dist/lib/tokens.css +7 -4
  11. package/dist/lib/tokens.json +20 -7
  12. package/dist/lib/types/BrandMark.d.ts +2 -2
  13. package/dist/lib/types/ConnectionState.d.ts +2 -2
  14. package/dist/lib/types/DataTable.d.ts +74 -10
  15. package/dist/lib/types/DiffView.d.ts +1 -1
  16. package/dist/lib/types/GroupedMultiSelect.d.ts +1 -1
  17. package/dist/lib/types/HelperGroup.d.ts +3 -3
  18. package/dist/lib/types/Publish.d.ts +4 -4
  19. package/dist/lib/types/Redaction.d.ts +2 -2
  20. package/dist/lib/types/SessionGroupDisclosure.d.ts +5 -2
  21. package/dist/lib/types/Settings.d.ts +6 -0
  22. package/dist/lib/types/Timeline.d.ts +5 -5
  23. package/dist/lib/types/analytics/format.d.ts +5 -5
  24. package/dist/lib/types/format.d.ts +4 -0
  25. package/dist/lib/types/index.d.ts +1 -1
  26. package/dist/lib/types/redaction-categories.d.ts +17 -0
  27. package/dist/lib/types/transcript/TurnCard.d.ts +3 -1
  28. package/dist/lib/types/transcript/scroll-position.d.ts +10 -0
  29. package/dist/lib/types/transcript/state-capabilities.d.ts +1 -1
  30. package/dist/lib/types/transcript/title.d.ts +1 -1
  31. package/dist/lib/types/transcript/view-model.d.ts +2 -2
  32. package/dist/lib/ui-Y-iKXft1.js +14076 -0
  33. package/dist/lib/ui.js +4 -4
  34. package/package.json +17 -9
  35. package/dist/lib/ui-D7JaPPPx.js +0 -23542
@@ -1 +1 @@
1
- @layer analytics{.gan-root{min-width:0;height:100%;min-height:0;font-family:var(--font-mono);--gan-pad-x:max(var(--sp-4), calc((100% - 1360px) / 2));flex-direction:column;max-width:none;margin-inline:0;display:flex}.gan-head{align-items:flex-start;gap:var(--sp-3);padding:var(--sp-4) var(--gan-pad-x);border-bottom:var(--bd);flex-direction:column;display:flex}.gan-head-titles{min-width:0}.gan-h2{font-family:var(--font-display);font-weight:700;font-size:var(--fs-md);color:var(--ink-strong);text-transform:lowercase;margin:0;line-height:1.15}.gan-sub{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-3);text-transform:lowercase;margin-top:var(--sp-1)}.gan-scroll{min-height:0;padding:var(--sp-4) var(--gan-pad-x);gap:var(--sp-4);flex-direction:column;flex:auto;display:flex;overflow:auto}.gan-toggle{align-items:center;gap:var(--sp-3);flex-wrap:wrap;min-width:0;display:flex}.gan-toggle-lab{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-3);display:inline-flex}.gan-toggle-lab .lucide{width:var(--ic-sm);height:var(--ic-sm)}.gan-toggle-lab b{color:var(--ink-2);font-variant-numeric:tabular-nums;font-weight:600}.gan-toggle-chips{gap:var(--sp-1);flex-wrap:wrap;display:flex}.gan-seg{box-sizing:border-box;height:var(--control-h-sm);padding:0 var(--sp-2);font-family:var(--font-mono);text-transform:lowercase;color:var(--ink-4);background:var(--canvas);border:var(--bd-strong);cursor:pointer;transition:color var(--dur-1), border-color var(--dur-1), background var(--dur-1);font-size:11px;line-height:1}.gan-seg:hover{color:var(--ink);border-color:var(--amber-dim)}.gan-seg:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}.gan-seg.is-on{color:var(--ink);border-color:var(--rule-strong);background:var(--surface-2)}.gan-seg.is-on:before{content:">";color:var(--amber-dim);margin-right:var(--sp-1)}.gan-kpis{gap:var(--sp-3);grid-template-columns:repeat(6,1fr);display:grid}.gan-tile{gap:var(--sp-1);background:var(--surface);border:var(--bd-strong);padding:var(--sp-3);flex-direction:column;min-width:0;display:flex}.gan-tile-lab{align-items:center;gap:var(--sp-1);font-family:var(--font-mono);text-transform:lowercase;color:var(--ink-3);font-size:11px;display:inline-flex}.gan-tile-lab .lucide{width:13px;height:13px;color:var(--ink-4);flex:none}.gan-tile-val{font-family:var(--font-display);font-weight:700;font-size:var(--fs-lg);color:var(--ink-strong);font-variant-numeric:tabular-nums;line-height:1}.gan-tile-hint{font-family:var(--font-mono);color:var(--ink-4);text-transform:lowercase;text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.gan-grid{gap:var(--sp-4);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.gan-card{gap:var(--sp-3);background:var(--surface);border:var(--bd-strong);padding:var(--sp-3) var(--sp-4) var(--sp-4);flex-direction:column;min-width:0;display:flex}.gan-card-head{justify-content:space-between;align-items:flex-start;gap:var(--sp-3);display:flex}.gan-card-titles{min-width:0}.gan-card-title{align-items:center;gap:var(--sp-2);font-family:var(--font-display);font-weight:700;font-size:var(--fs-body);color:var(--ink-strong);text-transform:lowercase;margin:0;line-height:1.2;display:inline-flex}.gan-card-title .lucide{width:var(--ic-sm);height:var(--ic-sm);color:var(--ink-3);flex:none}.gan-card-sub{font-family:var(--font-mono);color:var(--ink-3);text-transform:lowercase;margin-top:2px;font-size:11px;display:block}.gan-card-figure{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-2);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none}.gan-card-body{min-width:0}.gan-donut{gap:var(--sp-4);grid-template-columns:180px minmax(0,1fr);align-items:center;display:grid}.gan-donut-svg{width:100%;max-width:180px;height:auto;display:block}.gan-slice{cursor:pointer;transition:opacity var(--dur-1)}.gan-slice:focus-visible{outline:3px solid var(--focus-ring)}.gan-donut-num{font-family:var(--font-display);fill:var(--ink-strong);font-variant-numeric:tabular-nums;font-size:30px;font-weight:700}.gan-donut-lab{font-family:var(--font-mono);fill:var(--ink-3);text-transform:lowercase;font-size:11px}.gan-donut-empty{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-3);text-transform:lowercase;padding:var(--sp-5) var(--sp-2);text-align:center}.gan-legend{flex-direction:column;gap:2px;min-width:0;margin:0;padding:0;list-style:none;display:flex}.gan-legend-row{align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-2);cursor:default;transition:background var(--dur-1);grid-template-columns:12px minmax(0,1fr) auto auto;display:grid}.gan-legend-row.is-hot{background:var(--surface-hover)}.gan-legend-sw{border:1px solid color-mix(in srgb, var(--canvas) 30%, transparent);flex:none;width:10px;height:10px}.gan-legend-nm{font-family:var(--font-mono);color:var(--ink-2);text-transform:lowercase;text-overflow:ellipsis;font-size:12px;overflow:hidden}.gan-legend-v{font-family:var(--font-mono);color:var(--ink);font-variant-numeric:tabular-nums;text-align:right;font-size:12px}.gan-legend-pct{font-family:var(--font-mono);color:var(--ink-4);font-variant-numeric:tabular-nums;text-align:right;min-width:34px;font-size:11px}.gan-typical{flex-direction:column;display:flex}.gan-typrow{justify-content:space-between;align-items:baseline;gap:var(--sp-3);padding:var(--sp-3) 0;border-bottom:var(--bd);display:flex}.gan-typrow:last-child{border-bottom:0}.gan-typlab{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-2);text-transform:lowercase}.gan-typvals{align-items:baseline;gap:var(--sp-2);display:inline-flex}.gan-typmed{font-family:var(--font-mono);font-size:var(--fs-md);color:var(--ink-strong);font-variant-numeric:tabular-nums}.gan-typsep{color:var(--ink-5)}.gan-typp90{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-4);font-variant-numeric:tabular-nums}.gan-tablecard{gap:var(--sp-2);background:var(--surface);border:var(--bd-strong);padding:var(--sp-3) var(--sp-4) var(--sp-4);flex-direction:column;min-width:0;display:flex;overflow:hidden}.gan-tablecard .tbl-wrap{margin-top:var(--sp-2)}.gan-contrib{align-items:center;gap:var(--sp-2);color:var(--ink);display:inline-flex}.gan-table-foot{gap:var(--sp-4);margin-top:var(--sp-3);padding-top:var(--sp-3);border-top:var(--bd);flex-wrap:wrap;display:flex}.gan-foot{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-3);border-left:2px solid var(--rule-strong);max-width:64ch;padding-left:var(--sp-3);line-height:1.6}@media (width<=920px){.gan-kpis{grid-template-columns:repeat(3,1fr)}.gan-grid{grid-template-columns:1fr}}@media (width<=560px){.gan-kpis{grid-template-columns:repeat(2,1fr)}.gan-donut{grid-template-columns:1fr;justify-items:center}.gan-legend{width:100%}.gan-head,.gan-scroll{padding:var(--sp-3)}.gan-tablecard{padding:var(--sp-2) var(--sp-3) var(--sp-3)}.gan-tablecard .tbl-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}}}.gan-root section{max-width:none;margin:0;padding:0}.gan-root .gan-card,.gan-root .gan-tablecard{padding:var(--sp-3) var(--sp-4) var(--sp-4)}@media (width<=560px){.gan-root .gan-tablecard{padding:var(--sp-2) var(--sp-3) var(--sp-3)}}
1
+ @layer analytics{.gan-root{min-width:0;height:100%;min-height:0;font-family:var(--font-mono);--gan-pad-x:max(var(--sp-4), calc((100% - 1360px) / 2));flex-direction:column;max-width:none;margin-inline:0;display:flex}.gan-head{align-items:flex-start;gap:var(--sp-3);padding:var(--sp-4) var(--gan-pad-x);border-bottom:var(--bd);flex-direction:column;display:flex}.gan-head-titles{min-width:0}.gan-h2{font-family:var(--font-display);font-weight:700;font-size:var(--fs-lg);color:var(--ink-strong);text-transform:lowercase;line-height:var(--lh-body);overflow-wrap:anywhere;margin:0}.gan-sub{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-3);text-transform:lowercase;margin-top:var(--sp-1)}.gan-scroll{min-height:0;padding:var(--sp-4) var(--gan-pad-x);gap:var(--sp-4);flex-direction:column;flex:auto;display:flex;overflow:auto}.gan-toggle{align-items:center;gap:var(--sp-3);flex-wrap:wrap;min-width:0;display:flex}.gan-toggle-lab{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-3);display:inline-flex}.gan-toggle-lab .lucide{width:var(--ic-sm);height:var(--ic-sm)}.gan-toggle-lab b{color:var(--ink-2);font-variant-numeric:tabular-nums;font-weight:600}.gan-toggle-chips{gap:var(--sp-1);flex-wrap:wrap;display:flex}.gan-seg{box-sizing:border-box;height:var(--control-h-sm);padding:0 var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;line-height:var(--lh-mono);color:var(--ink-4);background:var(--canvas);border:var(--bd-strong);cursor:pointer}@media (prefers-reduced-motion:no-preference){.gan-seg{transition:color var(--dur-1), border-color var(--dur-1), background var(--dur-1)}}.gan-seg:hover{color:var(--ink);border-color:var(--amber-dim)}.gan-seg:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset)}.gan-seg.is-on{color:var(--amber-fill-ink);border-color:var(--amber-fill);background:var(--amber-fill);border-bottom-width:var(--stroke-emphasis);font-weight:700}.gan-kpis{gap:var(--sp-3);grid-template-columns:repeat(6,1fr);display:grid}.gan-tile{gap:var(--sp-1);background:var(--surface);border:var(--bd-strong);padding:var(--sp-3);flex-direction:column;min-width:0;display:flex}.gan-tile summary{cursor:pointer;gap:var(--sp-1);min-height:var(--target-min);flex-direction:column;display:flex}.gan-tile summary:after{content:"details";font-size:var(--fs-label);color:var(--ink-3)}.gan-tile details[open]>summary:after{content:"hide details"}.gan-tile-detail{margin-block:var(--sp-3) 0;font-family:var(--font-body);font-size:var(--fs-body);line-height:var(--lh-body);white-space:pre-wrap;overflow-wrap:anywhere}.gan-tile-lab{align-items:center;gap:var(--sp-1);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-3);overflow-wrap:anywhere;display:inline-flex}.gan-tile-lab .lucide{width:var(--ic-sm);height:var(--ic-sm);color:var(--ink-4);flex:none}.gan-tile-val{font-family:var(--font-display);font-weight:700;font-size:var(--fs-lg);color:var(--ink-strong);font-variant-numeric:tabular-nums;line-height:1}.gan-tile-hint{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-4);text-transform:lowercase;overflow-wrap:anywhere}.gan-grid{gap:var(--sp-4);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.gan-card{gap:var(--sp-3);background:var(--surface);border:var(--bd-strong);padding:var(--sp-3) var(--sp-4) var(--sp-4);flex-direction:column;min-width:0;display:flex}.gan-card-head{justify-content:space-between;align-items:flex-start;gap:var(--sp-3);display:flex}.gan-card-titles{min-width:0}.gan-card-title{align-items:center;gap:var(--sp-2);font-family:var(--font-display);font-weight:700;font-size:var(--fs-lg);color:var(--ink-strong);text-transform:lowercase;line-height:var(--lh-body);overflow-wrap:anywhere;margin:0;display:inline-flex}.gan-card-title .lucide{width:var(--ic-sm);height:var(--ic-sm);color:var(--ink-3);flex:none}.gan-card-sub{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-3);text-transform:lowercase;margin-top:var(--sp-1);display:block}.gan-card-figure{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-2);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none}.gan-card-body{min-width:0}.gan-donut{gap:var(--sp-4);grid-template-columns:180px minmax(0,1fr);align-items:center;display:grid}.gan-donut-svg{width:100%;max-width:180px;height:auto;display:block}.gan-slice{cursor:pointer}@media (prefers-reduced-motion:no-preference){.gan-slice{transition:opacity var(--dur-1)}}.gan-slice:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring)}.gan-donut-num{font-family:var(--font-display);fill:var(--ink-strong);font-variant-numeric:tabular-nums;font-size:30px;font-weight:700}.gan-donut-lab{font-family:var(--font-mono);font-size:var(--fs-label);fill:var(--ink-3);text-transform:lowercase}.gan-donut-empty{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-3);text-transform:lowercase;padding:var(--sp-5) var(--sp-2);text-align:center}.gan-legend{flex-direction:column;gap:2px;min-width:0;margin:0;padding:0;list-style:none;display:flex}.gan-legend-row{align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-2);cursor:default;grid-template-columns:12px minmax(0,1fr) auto auto;display:grid}@media (prefers-reduced-motion:no-preference){.gan-legend-row{transition:background var(--dur-1)}}.gan-legend-row.is-hot{background:var(--surface-hover)}.gan-legend-sw{border:1px solid color-mix(in srgb, var(--canvas) 30%, transparent);flex:none;width:10px;height:10px}.gan-legend-nm{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-2);text-transform:lowercase;overflow-wrap:anywhere}.gan-legend-v{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink);font-variant-numeric:tabular-nums;text-align:right}.gan-legend-pct{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-4);font-variant-numeric:tabular-nums;text-align:right;min-width:var(--sp-6)}.gan-typical{flex-direction:column;display:flex}.gan-typrow{justify-content:space-between;align-items:baseline;gap:var(--sp-3);padding:var(--sp-3) 0;border-bottom:var(--bd);display:flex}.gan-typrow:last-child{border-bottom:0}.gan-typlab{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-2);text-transform:lowercase}.gan-typvals{align-items:baseline;gap:var(--sp-2);display:inline-flex}.gan-typmed{font-family:var(--font-mono);font-size:var(--fs-md);color:var(--ink-strong);font-variant-numeric:tabular-nums}.gan-typsep{color:var(--ink-5)}.gan-typp90{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-4);font-variant-numeric:tabular-nums}.gan-tablecard{gap:var(--sp-2);background:var(--surface);border:var(--bd-strong);padding:var(--sp-3) var(--sp-4) var(--sp-4);flex-direction:column;min-width:0;display:flex;overflow:hidden}.gan-tablecard .tbl-wrap{margin-top:var(--sp-2)}.gan-contrib{align-items:center;gap:var(--sp-2);color:var(--ink);display:inline-flex}.gan-table-foot{gap:var(--sp-4);margin-top:var(--sp-3);padding-top:var(--sp-3);border-top:var(--bd);flex-wrap:wrap;display:flex}.gan-foot{font-family:var(--font-body);font-size:var(--fs-body);color:var(--ink-3);line-height:var(--lh-body);max-width:var(--measure-prose);border-left:var(--stroke-emphasis) solid var(--rule-strong);padding-left:var(--sp-3)}@media (width<1024px){.gan-kpis{grid-template-columns:repeat(3,1fr)}.gan-grid{grid-template-columns:1fr}}@media (width<768px){.gan-card-head{flex-wrap:wrap}.gan-kpis{grid-template-columns:repeat(2,1fr)}.gan-donut{grid-template-columns:1fr;justify-items:center}.gan-legend{width:100%}.gan-head,.gan-scroll{padding:var(--sp-3)}.gan-tablecard{padding:var(--sp-2) var(--sp-3) var(--sp-3)}.gan-tablecard .tbl-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}}}.gan-root section{max-width:none;margin:0;padding:0}.gan-root .gan-card,.gan-root .gan-tablecard{padding:var(--sp-3) var(--sp-4) var(--sp-4)}@media (width<768px){.gan-root .gan-tablecard{padding:var(--sp-2) var(--sp-3) var(--sp-3)}}
@@ -583,39 +583,44 @@ function pe({ payload: c, title: l, subtitle: u, sections: h, showSectionToggle:
583
583
  children: [
584
584
  /* @__PURE__ */ i(q, {
585
585
  icon: o,
586
- label: "sessions",
586
+ label: "new sessions",
587
587
  value: b(F.totalSessions),
588
- hint: "recorded"
588
+ hint: "recorded",
589
+ detail: F.sessionsPerWeek.map((e) => `${e.week}: ${b(e.count)} sessions`).join("\n") || "no recorded weeks"
589
590
  }),
590
591
  /* @__PURE__ */ i(q, {
591
592
  icon: _,
592
593
  label: "contributors",
593
594
  value: b(F.totalContributors),
594
- hint: ye(F.perContributorBreakdown)
595
+ hint: ye(F.perContributorBreakdown),
596
+ detail: F.perContributorBreakdown.map((e) => `${e.contributorId}: ${b(e.sessions)} sessions`).join("\n") || "no recorded contributors"
595
597
  }),
596
598
  /* @__PURE__ */ i(q, {
597
599
  icon: ee,
598
- label: "returning rate",
600
+ label: "contributors in multiple weeks",
599
601
  value: x(F.returningContributorRate.rate),
600
- hint: `${b(F.returningContributorRate.returning)} of ${b(F.returningContributorRate.total)}`
602
+ hint: `${b(F.returningContributorRate.returning)} of ${b(F.returningContributorRate.total)}`,
603
+ detail: `${b(F.returningContributorRate.returning)} returning contributors active in two or more weeks; ${b(F.returningContributorRate.total)} contributors with dated sessions.`
601
604
  }),
602
605
  /* @__PURE__ */ i(q, {
603
606
  icon: f,
604
- label: "session → commit",
607
+ label: "sessions linked to commits",
605
608
  value: x(F.sessionToCommitRate.rate),
606
- hint: `${b(F.sessionToCommitRate.withCommit)} of ${b(F.sessionToCommitRate.total)}`
609
+ hint: `${b(F.sessionToCommitRate.withCommit)} of ${b(F.sessionToCommitRate.total)}`,
610
+ detail: `${b(F.sessionToCommitRate.withCommit)} sessions linked to a commit; ${b(F.sessionToCommitRate.total - F.sessionToCommitRate.withCommit)} without a linked commit.`
607
611
  }),
608
612
  /* @__PURE__ */ i(q, {
609
613
  icon: d,
610
- label: "longest streak",
611
- value: `${b(F.longestStreak.weeks)} wk`,
612
- hint: F.longestStreak.startWeek == null ? void 0 : `from ${F.longestStreak.startWeek}`
614
+ label: "weeks with sessions",
615
+ detail: F.sessionsPerWeek.filter((e) => e.count > 0).map((e) => e.week).join("\n") || "no weeks with sessions",
616
+ value: `${b(F.sessionsPerWeek.filter((e) => e.count > 0).length)} wk`
613
617
  }),
614
618
  /* @__PURE__ */ i(q, {
615
619
  icon: p,
616
620
  label: "projects",
617
621
  value: b(F.totalProjects),
618
- hint: X(D, F.totalProjects)
622
+ hint: X(D, F.totalProjects),
623
+ detail: [...new Set(D.map((e) => e.project).filter(Boolean))].join("\n") || `${b(F.totalProjects)} projects in the supplied summary.`
619
624
  })
620
625
  ]
621
626
  }) : null,
@@ -642,7 +647,7 @@ function pe({ payload: c, title: l, subtitle: u, sections: h, showSectionToggle:
642
647
  P.weeklyActiveContributors ? /* @__PURE__ */ i(v, {
643
648
  icon: _,
644
649
  title: "weekly active contributors",
645
- subtitle: B === "new" ? `new contributors per week · ${b($(Q(F.newContributorVelocity, "newContributors")))} new` : `distinct contributors active each week · ${b($(Q(F.weeklyActiveContributors, "contributors")))} active`,
650
+ subtitle: B === "new" ? `new contributors per week, ${b($(Q(F.newContributorVelocity, "newContributors")))} new` : `distinct contributors active each week, ${b($(Q(F.weeklyActiveContributors, "contributors")))} active`,
646
651
  aside: /* @__PURE__ */ i(he, {
647
652
  view: B,
648
653
  canShowNew: !!P.newContributorVelocity,
@@ -675,7 +680,7 @@ function pe({ payload: c, title: l, subtitle: u, sections: h, showSectionToggle:
675
680
  P.newContributorVelocity ? /* @__PURE__ */ i(v, {
676
681
  icon: te,
677
682
  title: "new contributors per week",
678
- subtitle: "acquisition signal · first appearance",
683
+ subtitle: "first recorded session, by contributor",
679
684
  aside: `${b($(Q(F.newContributorVelocity, "newContributors")))} new`,
680
685
  children: /* @__PURE__ */ i(e, {
681
686
  data: J(Q(F.newContributorVelocity, "newContributors")),
@@ -716,7 +721,7 @@ function pe({ payload: c, title: l, subtitle: u, sections: h, showSectionToggle:
716
721
  P.sessionStats ? /* @__PURE__ */ i(v, {
717
722
  icon: o,
718
723
  title: "typical vs. tail",
719
- subtitle: "median · p90",
724
+ subtitle: "median, p90",
720
725
  aside: "per session",
721
726
  children: /* @__PURE__ */ i(_e, { data: F.sessionStats })
722
727
  }) : null
@@ -725,7 +730,7 @@ function pe({ payload: c, title: l, subtitle: u, sections: h, showSectionToggle:
725
730
  P.contributorTable ? /* @__PURE__ */ a(v, {
726
731
  icon: _,
727
732
  title: "contributors",
728
- subtitle: "rolled up · sorted by session volume",
733
+ subtitle: "rolled up, sorted by session volume",
729
734
  aside: `${b(F.perContributorBreakdown.length)} people`,
730
735
  className: "gan-tablecard",
731
736
  children: [/* @__PURE__ */ i(W, {
@@ -834,11 +839,11 @@ function he({ view: e, canShowNew: t, onChange: n }) {
834
839
  })]
835
840
  });
836
841
  }
837
- function q({ icon: e, label: t, value: n, hint: r }) {
838
- return /* @__PURE__ */ a("div", {
842
+ function q({ icon: e, label: t, value: n, hint: r, detail: o }) {
843
+ return /* @__PURE__ */ i("div", {
839
844
  className: "gan-tile",
840
845
  role: "listitem",
841
- children: [
846
+ children: /* @__PURE__ */ a("details", { children: [/* @__PURE__ */ a("summary", { children: [
842
847
  /* @__PURE__ */ a("span", {
843
848
  className: "gan-tile-lab",
844
849
  children: [
@@ -858,7 +863,10 @@ function q({ icon: e, label: t, value: n, hint: r }) {
858
863
  className: "gan-tile-hint",
859
864
  children: r
860
865
  })
861
- ]
866
+ ] }), /* @__PURE__ */ i("p", {
867
+ className: "gan-tile-detail",
868
+ children: o
869
+ })] })
862
870
  });
863
871
  }
864
872
  function J(e) {
@@ -1000,7 +1008,7 @@ function Y({ label: e, median: t, p90: n }) {
1000
1008
  /* @__PURE__ */ i("span", {
1001
1009
  className: "gan-typsep",
1002
1010
  "aria-hidden": "true",
1003
- children: "·"
1011
+ children: ","
1004
1012
  }),
1005
1013
  /* @__PURE__ */ i("span", {
1006
1014
  className: "gan-typp90 tnum",
@@ -1015,7 +1023,7 @@ function ve(e, t) {
1015
1023
  X(e, t.totalProjects),
1016
1024
  `${b(t.totalContributors)} ${Z(t.totalContributors, "contributor", "contributors")}`,
1017
1025
  `${b(t.totalSessions)} ${Z(t.totalSessions, "session", "sessions")} across ${b(t.sessionsPerWeek.length)} ${Z(t.sessionsPerWeek.length, "week", "weeks")}`
1018
- ].join(" · ");
1026
+ ].join(", ");
1019
1027
  }
1020
1028
  function X(e, t) {
1021
1029
  let n = [...new Set(e.map((e) => e.projectKey).filter(Boolean))].sort();
package/dist/lib/base.css CHANGED
@@ -38,11 +38,10 @@ p, .turn .body, .empty p, .prose {
38
38
  word-spacing: normal;
39
39
  }
40
40
  em, i { font-style: normal; font-weight: 600; }
41
- :focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 2px; }
41
+ :focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: var(--focus-ring-offset); }
42
42
  a { color: var(--amber); text-decoration: none; }
43
43
  a.link, .prose a { text-decoration: underline dotted; text-underline-offset: 3px; }
44
44
  a.link:hover, a.link:focus-visible, .prose a:hover { text-decoration-style: solid; }
45
- section { max-width: var(--maxw); margin: 0 auto; padding: 0 var(--gutter); }
46
45
  @media (prefers-reduced-motion: reduce) {
47
46
  html { scroll-behavior: auto; }
48
47
  *, *::before, *::after {
@@ -51,4 +50,7 @@ section { max-width: var(--maxw); margin: 0 auto; padding: 0 var(--gutter); }
51
50
  transition-duration: .01ms !important;
52
51
  }
53
52
  }
53
+ @media (prefers-reduced-transparency: reduce) {
54
+ *, *::before, *::after { backdrop-filter: none !important; }
55
+ }
54
56
  }