@superdoc-dev/mcp 0.12.0-next.8 → 0.12.0-next.9

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 (2) hide show
  1. package/dist/index.js +749 -126
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -52172,7 +52172,7 @@ var init_remark_gfm_BhnWr3yf_es = __esm(() => {
52172
52172
  emptyOptions2 = {};
52173
52173
  });
52174
52174
 
52175
- // ../../packages/superdoc/dist/chunks/SuperConverter-e4tY-2EB.es.js
52175
+ // ../../packages/superdoc/dist/chunks/SuperConverter-BtvpSnE5.es.js
52176
52176
  function getExtensionConfigField(extension$1, field, context = { name: "" }) {
52177
52177
  const fieldValue = extension$1.config[field];
52178
52178
  if (typeof fieldValue === "function")
@@ -86315,7 +86315,7 @@ function isSettled(status) {
86315
86315
  function normalizeFamilyName(name) {
86316
86316
  return name.trim().replace(/^['"]+|['"]+$/g, "").trim().toLowerCase();
86317
86317
  }
86318
- function buildFallback(row, physicalFamily, verdict, faceSlot) {
86318
+ function buildFallback(row, physicalFamily, verdict, faceSlot, faceSource) {
86319
86319
  const glyphExceptions = faceSlot ? row.glyphExceptions?.filter((g) => g.slot === faceSlot) : row.glyphExceptions ? [...row.glyphExceptions] : undefined;
86320
86320
  return {
86321
86321
  substituteFamily: physicalFamily,
@@ -86325,6 +86325,7 @@ function buildFallback(row, physicalFamily, verdict, faceSlot) {
86325
86325
  faces: row.faces,
86326
86326
  evidenceId: row.evidenceId,
86327
86327
  generic: row.generic,
86328
+ ...faceSource ? { faceSource: { ...faceSource } } : {},
86328
86329
  ...glyphExceptions && glyphExceptions.length > 0 ? { glyphExceptions } : {}
86329
86330
  };
86330
86331
  }
@@ -86365,11 +86366,18 @@ function isFaceScoped(row) {
86365
86366
  const f2 = row.faces;
86366
86367
  return f2.regular || f2.bold || f2.italic || f2.boldItalic;
86367
86368
  }
86369
+ function faceSourceFor(row, face) {
86370
+ const explicit = row.faceSources?.[face];
86371
+ if (explicit)
86372
+ return explicit;
86373
+ return isFaceScoped(row) && row.faces[face] ? { kind: "real" } : undefined;
86374
+ }
86368
86375
  function decideRowForFace(row, face, canRenderFamily$1) {
86369
86376
  const base$1 = decideRow(row, canRenderFamily$1);
86370
86377
  if (base$1.kind !== "fallback")
86371
86378
  return base$1;
86372
- if (isFaceScoped(row) && !row.faces[face])
86379
+ const faceSource = faceSourceFor(row, face);
86380
+ if (isFaceScoped(row) && !faceSource)
86373
86381
  return {
86374
86382
  kind: "face_missing",
86375
86383
  substituteFamily: base$1.fallback.substituteFamily,
@@ -86377,9 +86385,10 @@ function decideRowForFace(row, face, canRenderFamily$1) {
86377
86385
  generic: row.generic
86378
86386
  };
86379
86387
  const faceVerdict = row.faceVerdicts?.[face] ?? row.verdict;
86388
+ const projectedFaceSource = faceSource?.kind === "synthetic" ? faceSource : undefined;
86380
86389
  return {
86381
86390
  kind: "fallback",
86382
- fallback: buildFallback(row, base$1.fallback.substituteFamily, faceVerdict, face)
86391
+ fallback: buildFallback(row, base$1.fallback.substituteFamily, faceVerdict, face, projectedFaceSource)
86383
86392
  };
86384
86393
  }
86385
86394
  function getFallbackDecision(family$1, options = {}) {
@@ -86429,12 +86438,87 @@ function family(name, filePrefix, license) {
86429
86438
  faces: fourFaces(filePrefix)
86430
86439
  };
86431
86440
  }
86441
+ function familyWithFaces(name, license, faces) {
86442
+ return {
86443
+ family: name,
86444
+ license,
86445
+ faces
86446
+ };
86447
+ }
86432
86448
  function normalizeFamilyKey$1(family$1) {
86433
86449
  return family$1.trim().replace(/^["']|["']$/g, "").toLowerCase();
86434
86450
  }
86435
86451
  function sortPairs(pairs) {
86436
86452
  return pairs.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
86437
86453
  }
86454
+ function faceSlotFor$1({ weight, style }) {
86455
+ const bold = weight === "700";
86456
+ const italic = style === "italic";
86457
+ if (bold && italic)
86458
+ return "boldItalic";
86459
+ if (bold)
86460
+ return "bold";
86461
+ if (italic)
86462
+ return "italic";
86463
+ return "regular";
86464
+ }
86465
+ function faceKeyForSlot(slot) {
86466
+ switch (slot) {
86467
+ case "bold":
86468
+ return {
86469
+ weight: "700",
86470
+ style: "normal"
86471
+ };
86472
+ case "italic":
86473
+ return {
86474
+ weight: "400",
86475
+ style: "italic"
86476
+ };
86477
+ case "boldItalic":
86478
+ return {
86479
+ weight: "700",
86480
+ style: "italic"
86481
+ };
86482
+ case "regular":
86483
+ return {
86484
+ weight: "400",
86485
+ style: "normal"
86486
+ };
86487
+ }
86488
+ }
86489
+ function reasonForFallback(policyAction) {
86490
+ return policyAction === "category_fallback" ? "category_fallback" : "bundled_substitute";
86491
+ }
86492
+ function resolveDocfontsFace(primary, face, hasFace) {
86493
+ const decision = getFallbackDecisionForFace(primary, faceSlotFor$1(face), { canRenderFamily });
86494
+ if (decision.kind === "face_missing")
86495
+ return {
86496
+ physical: primary,
86497
+ reason: "fallback_face_absent"
86498
+ };
86499
+ if (decision.kind !== "fallback")
86500
+ return null;
86501
+ const fallback = decision.fallback;
86502
+ if (fallback.policyAction !== "substitute" && fallback.policyAction !== "category_fallback")
86503
+ return null;
86504
+ if (hasFace(fallback.substituteFamily, face.weight, face.style))
86505
+ return {
86506
+ physical: fallback.substituteFamily,
86507
+ reason: reasonForFallback(fallback.policyAction)
86508
+ };
86509
+ const sourceFace = fallback.faceSource?.kind === "synthetic" ? faceKeyForSlot(fallback.faceSource.from) : face;
86510
+ if (!hasFace(fallback.substituteFamily, sourceFace.weight, sourceFace.style))
86511
+ return fallback.policyAction === "substitute" ? {
86512
+ physical: primary,
86513
+ reason: "fallback_face_absent"
86514
+ } : null;
86515
+ const sourceDiffers = sourceFace.weight !== face.weight || sourceFace.style !== face.style;
86516
+ return {
86517
+ physical: fallback.substituteFamily,
86518
+ reason: reasonForFallback(fallback.policyAction),
86519
+ ...sourceDiffers ? { sourceFace } : {}
86520
+ };
86521
+ }
86438
86522
  function deriveBundledSubstitutes() {
86439
86523
  const substitutes = {};
86440
86524
  for (const row of SUBSTITUTION_EVIDENCE) {
@@ -86576,11 +86660,13 @@ function buildFaceReport(usedFaces, registry2, resolver$1) {
86576
86660
  weight,
86577
86661
  style
86578
86662
  };
86579
- const { physicalFamily, reason } = resolver$1 ? resolver$1.resolveFace(logicalFamily, face, hasFace) : resolveFace(logicalFamily, face, hasFace);
86663
+ const resolution = resolver$1 ? resolver$1.resolveFace(logicalFamily, face, hasFace) : resolveFace(logicalFamily, face, hasFace);
86664
+ const { physicalFamily, reason } = resolution;
86665
+ const statusFace = resolution.sourceFace ?? face;
86580
86666
  const loadStatus = registry2.getFaceStatus({
86581
86667
  family: physicalFamily,
86582
- weight,
86583
- style
86668
+ weight: statusFace.weight,
86669
+ style: statusFace.style
86584
86670
  });
86585
86671
  const missing = reason === "fallback_face_absent" || reason === "category_fallback" || isSettled(loadStatus) && loadStatus !== "loaded";
86586
86672
  const evidence = isRenderedSubstitute(reason) ? toEvidence(getRenderableFallbackForFace(logicalFamily, faceSlotFor(face), RENDER_ALL)) : undefined;
@@ -86707,8 +86793,8 @@ function deriveOfferings() {
86707
86793
  function compareLogicalFamily(a, b) {
86708
86794
  return a.logicalFamily.localeCompare(b.logicalFamily, "en", { sensitivity: "base" });
86709
86795
  }
86710
- function getDefaultFontOfferings() {
86711
- return FONT_OFFERINGS.filter((o) => o.offering === "default").sort(compareLogicalFamily);
86796
+ function getBuiltInToolbarFontOfferings() {
86797
+ return FONT_OFFERINGS.filter((o) => o.offering === "default" || o.offering === "qualified" && ADVERTISED_QUALIFIED_TOOLBAR_FAMILIES.has(o.logicalFamily)).sort(compareLogicalFamily);
86712
86798
  }
86713
86799
  function fontOfferingStack(offering) {
86714
86800
  return `${offering.logicalFamily}, ${offering.generic}`;
@@ -86717,7 +86803,7 @@ function fontOfferingRenderStack(offering) {
86717
86803
  return offering.physicalFamily ? `${offering.physicalFamily}, ${offering.generic}` : fontOfferingStack(offering);
86718
86804
  }
86719
86805
  function getDefaultFontFamilyOptions() {
86720
- return getDefaultFontOfferings().map((offering) => ({
86806
+ return getBuiltInToolbarFontOfferings().map((offering) => ({
86721
86807
  label: offering.logicalFamily,
86722
86808
  value: fontOfferingStack(offering)
86723
86809
  }));
@@ -113650,18 +113736,10 @@ var isRegExp = (value) => {
113650
113736
  physical: primary,
113651
113737
  reason: "registered_face"
113652
113738
  };
113739
+ const docfonts = resolveDocfontsFace(primary, face, hasFace);
113740
+ if (docfonts)
113741
+ return docfonts;
113653
113742
  const bundled = BUNDLED_SUBSTITUTES[key];
113654
- if (bundled && hasFace(bundled, face.weight, face.style))
113655
- return {
113656
- physical: bundled,
113657
- reason: "bundled_substitute"
113658
- };
113659
- const category = CATEGORY_FALLBACKS[key];
113660
- if (category && hasFace(category, face.weight, face.style))
113661
- return {
113662
- physical: category,
113663
- reason: "category_fallback"
113664
- };
113665
113743
  if (override || bundled)
113666
113744
  return {
113667
113745
  physical: primary,
@@ -113694,11 +113772,12 @@ var isRegExp = (value) => {
113694
113772
  }
113695
113773
  resolveFace(logicalFamily, face, hasFace) {
113696
113774
  const primary = splitStack(logicalFamily)[0] ?? logicalFamily;
113697
- const { physical, reason } = this.#resolveFaceLadder(primary, face, hasFace);
113775
+ const { physical, reason, sourceFace } = this.#resolveFaceLadder(primary, face, hasFace);
113698
113776
  return {
113699
113777
  logicalFamily,
113700
113778
  physicalFamily: stripFamilyQuotes(physical),
113701
- reason
113779
+ reason,
113780
+ ...sourceFace ? { sourceFace } : {}
113702
113781
  };
113703
113782
  }
113704
113783
  resolvePhysicalFamilyForFace(cssFontFamily, face, hasFace) {
@@ -114074,7 +114153,7 @@ var isRegExp = (value) => {
114074
114153
  const detail = sources && sources.length ? ` from ${sources.join(", ")}` : "";
114075
114154
  console.warn(`[superdoc] font asset failed to load for "${family$1}"${detail}. Check fonts.assetBaseUrl / fonts.resolveAssetUrl so the bundled .woff2 are served.`);
114076
114155
  }
114077
- }, registriesByFontSet, domlessRegistry = null, BUNDLED_FAMILIES, FONT_OFFERINGS, prepareCommentParaIds = (comment) => {
114156
+ }, registriesByFontSet, domlessRegistry = null, BUNDLED_FAMILIES, ADVERTISED_QUALIFIED_TOOLBAR_FAMILIES, FONT_OFFERINGS, prepareCommentParaIds = (comment) => {
114078
114157
  return {
114079
114158
  ...comment,
114080
114159
  commentParaId: generateDocxRandomId()
@@ -118050,7 +118129,7 @@ var isRegExp = (value) => {
118050
118129
  state.kern = kernNode.attributes["w:val"];
118051
118130
  }
118052
118131
  }, SuperConverter;
118053
- var init_SuperConverter_e4tY_2EB_es = __esm(() => {
118132
+ var init_SuperConverter_BtvpSnE5_es = __esm(() => {
118054
118133
  init_rolldown_runtime_Bg48TavK_es();
118055
118134
  init_jszip_C49i9kUs_es();
118056
118135
  init_xml_js_CqGKpaft_es();
@@ -155390,6 +155469,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155390
155469
  measurementRefs: ["calibri__carlito#analytic_advance#2026-06-03", "calibri__carlito#face_aggregate#2026-06-03"],
155391
155470
  exportRule: "preserve_original_name",
155392
155471
  advance: {
155472
+ basis: "latin_full",
155393
155473
  meanDelta: 0,
155394
155474
  maxDelta: 0
155395
155475
  },
@@ -155422,6 +155502,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155422
155502
  ],
155423
155503
  exportRule: "preserve_original_name",
155424
155504
  advance: {
155505
+ basis: "latin_full",
155425
155506
  meanDelta: 0.0002378,
155426
155507
  maxDelta: 0.2310758
155427
155508
  },
@@ -155461,6 +155542,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155461
155542
  measurementRefs: ["arial__liberation-sans#analytic_advance#2026-06-03"],
155462
155543
  exportRule: "preserve_original_name",
155463
155544
  advance: {
155545
+ basis: "latin_full",
155464
155546
  meanDelta: 0,
155465
155547
  maxDelta: 0
155466
155548
  },
@@ -155488,6 +155570,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155488
155570
  measurementRefs: ["times-new-roman__liberation-serif#analytic_advance#2026-06-03"],
155489
155571
  exportRule: "preserve_original_name",
155490
155572
  advance: {
155573
+ basis: "latin_full",
155491
155574
  meanDelta: 0,
155492
155575
  maxDelta: 0
155493
155576
  },
@@ -155515,6 +155598,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155515
155598
  measurementRefs: ["courier-new__liberation-mono#analytic_advance#2026-06-03"],
155516
155599
  exportRule: "preserve_original_name",
155517
155600
  advance: {
155601
+ basis: "latin_full",
155518
155602
  meanDelta: 0,
155519
155603
  maxDelta: 0
155520
155604
  },
@@ -155551,6 +155635,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155551
155635
  ],
155552
155636
  exportRule: "preserve_original_name",
155553
155637
  advance: {
155638
+ basis: "latin_full",
155554
155639
  meanDelta: 0.0000197,
155555
155640
  maxDelta: 0.0183727
155556
155641
  },
@@ -155600,6 +155685,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155600
155685
  ],
155601
155686
  exportRule: "preserve_original_name",
155602
155687
  advance: {
155688
+ basis: "latin_full",
155603
155689
  meanDelta: 0,
155604
155690
  maxDelta: 0.5
155605
155691
  },
@@ -155640,6 +155726,131 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155640
155726
  exportRule: "preserve_original_name",
155641
155727
  candidateLicense: null
155642
155728
  },
155729
+ {
155730
+ evidenceId: "arial-black",
155731
+ generic: "sans-serif",
155732
+ logicalFamily: "Arial Black",
155733
+ physicalFamily: "Archivo Black",
155734
+ verdict: "visual_only",
155735
+ faces: {
155736
+ regular: true,
155737
+ bold: false,
155738
+ italic: false,
155739
+ boldItalic: false
155740
+ },
155741
+ faceSources: { italic: {
155742
+ kind: "synthetic",
155743
+ from: "regular"
155744
+ } },
155745
+ gates: {
155746
+ static: "pass",
155747
+ metric: "fail",
155748
+ layout: "not_run",
155749
+ ship: "fail"
155750
+ },
155751
+ policyAction: "substitute",
155752
+ measurementRefs: ["arial-black__archivo-black#visual_review#2026-06-09"],
155753
+ exportRule: "preserve_original_name",
155754
+ candidateLicense: "OFL-1.1",
155755
+ faceVerdicts: { italic: "visual_only" }
155756
+ },
155757
+ {
155758
+ evidenceId: "arial-rounded-mt-bold",
155759
+ generic: "sans-serif",
155760
+ logicalFamily: "Arial Rounded MT Bold",
155761
+ physicalFamily: "Ubuntu",
155762
+ verdict: "visual_only",
155763
+ faces: {
155764
+ regular: true,
155765
+ bold: true,
155766
+ italic: true,
155767
+ boldItalic: true
155768
+ },
155769
+ gates: {
155770
+ static: "pass",
155771
+ metric: "fail",
155772
+ layout: "not_run",
155773
+ ship: "fail"
155774
+ },
155775
+ policyAction: "category_fallback",
155776
+ measurementRefs: ["arial-rounded-mt-bold__ubuntu#visual_review#2026-06-09"],
155777
+ exportRule: "preserve_original_name",
155778
+ candidateLicense: "Ubuntu-font-1.0"
155779
+ },
155780
+ {
155781
+ evidenceId: "bookman-old-style",
155782
+ generic: "serif",
155783
+ logicalFamily: "Bookman Old Style",
155784
+ physicalFamily: "TeX Gyre Bonum",
155785
+ verdict: "visual_only",
155786
+ faces: {
155787
+ regular: true,
155788
+ bold: true,
155789
+ italic: true,
155790
+ boldItalic: true
155791
+ },
155792
+ gates: {
155793
+ static: "pass",
155794
+ metric: "fail",
155795
+ layout: "not_run",
155796
+ ship: "fail"
155797
+ },
155798
+ policyAction: "substitute",
155799
+ measurementRefs: ["bookman-old-style__tex-gyre-bonum#visual_review#2026-06-09"],
155800
+ exportRule: "preserve_original_name",
155801
+ candidateLicense: "GUST-Font-License-1.0"
155802
+ },
155803
+ {
155804
+ evidenceId: "century",
155805
+ generic: "serif",
155806
+ logicalFamily: "Century",
155807
+ physicalFamily: "C059",
155808
+ verdict: "visual_only",
155809
+ faces: {
155810
+ regular: true,
155811
+ bold: true,
155812
+ italic: true,
155813
+ boldItalic: true
155814
+ },
155815
+ gates: {
155816
+ static: "pass",
155817
+ metric: "fail",
155818
+ layout: "not_run",
155819
+ ship: "fail"
155820
+ },
155821
+ policyAction: "substitute",
155822
+ measurementRefs: ["century__c059#visual_review#2026-06-09"],
155823
+ exportRule: "preserve_original_name",
155824
+ candidateLicense: "AGPL-3.0-only WITH PS-or-PDF-font-exception-20170817"
155825
+ },
155826
+ {
155827
+ evidenceId: "garamond",
155828
+ generic: "serif",
155829
+ logicalFamily: "Garamond",
155830
+ physicalFamily: "Cardo",
155831
+ verdict: "visual_only",
155832
+ faces: {
155833
+ regular: true,
155834
+ bold: true,
155835
+ italic: true,
155836
+ boldItalic: false
155837
+ },
155838
+ faceSources: { boldItalic: {
155839
+ kind: "synthetic",
155840
+ from: "bold"
155841
+ } },
155842
+ gates: {
155843
+ static: "pass",
155844
+ metric: "fail",
155845
+ layout: "not_run",
155846
+ ship: "fail"
155847
+ },
155848
+ policyAction: "category_fallback",
155849
+ measurementRefs: ["garamond__cardo#visual_review#2026-06-09"],
155850
+ exportRule: "preserve_original_name",
155851
+ candidateLicense: "OFL-1.1",
155852
+ faceVerdicts: { boldItalic: "visual_only" }
155853
+ },
155643
155854
  {
155644
155855
  evidenceId: "consolas",
155645
155856
  generic: "monospace",
@@ -155662,6 +155873,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155662
155873
  measurementRefs: ["consolas__inconsolata-semiexpanded#analytic_advance#2026-06-03"],
155663
155874
  exportRule: "preserve_original_name",
155664
155875
  advance: {
155876
+ basis: "monospace_cell",
155665
155877
  meanDelta: 0.00035999999999999997,
155666
155878
  maxDelta: 0.00035999999999999997
155667
155879
  },
@@ -155694,74 +155906,84 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155694
155906
  evidenceId: "tahoma",
155695
155907
  generic: "sans-serif",
155696
155908
  logicalFamily: "Tahoma",
155697
- physicalFamily: null,
155909
+ physicalFamily: "Noto Sans",
155698
155910
  verdict: "visual_only",
155699
155911
  faces: {
155700
- regular: false,
155701
- bold: false,
155702
- italic: false,
155703
- boldItalic: false
155912
+ regular: true,
155913
+ bold: true,
155914
+ italic: true,
155915
+ boldItalic: true
155704
155916
  },
155705
155917
  gates: {
155706
- static: "not_run",
155918
+ static: "pass",
155707
155919
  metric: "fail",
155708
155920
  layout: "not_run",
155709
- ship: "not_run"
155921
+ ship: "fail"
155710
155922
  },
155711
155923
  policyAction: "category_fallback",
155712
- measurementRefs: ["tahoma#top_candidates#2026-06-03"],
155924
+ measurementRefs: ["tahoma__noto-sans#visual_review#2026-06-09"],
155713
155925
  exportRule: "preserve_original_name",
155714
- candidateLicense: null
155926
+ candidateLicense: "OFL-1.1"
155715
155927
  },
155716
155928
  {
155717
155929
  evidenceId: "trebuchet-ms",
155718
155930
  generic: "sans-serif",
155719
155931
  logicalFamily: "Trebuchet MS",
155720
- physicalFamily: null,
155932
+ physicalFamily: "PT Sans",
155721
155933
  verdict: "visual_only",
155722
155934
  faces: {
155723
- regular: false,
155724
- bold: false,
155725
- italic: false,
155726
- boldItalic: false
155935
+ regular: true,
155936
+ bold: true,
155937
+ italic: true,
155938
+ boldItalic: true
155727
155939
  },
155728
155940
  gates: {
155729
- static: "not_run",
155941
+ static: "pass",
155730
155942
  metric: "fail",
155731
155943
  layout: "not_run",
155732
- ship: "not_run"
155944
+ ship: "fail"
155733
155945
  },
155734
155946
  policyAction: "category_fallback",
155735
- measurementRefs: ["trebuchet-ms#top_candidates#2026-06-03"],
155947
+ measurementRefs: ["trebuchet-ms__pt-sans#visual_review#2026-06-09"],
155736
155948
  exportRule: "preserve_original_name",
155737
- candidateLicense: null
155949
+ candidateLicense: "OFL-1.1"
155738
155950
  },
155739
155951
  {
155740
155952
  evidenceId: "comic-sans-ms",
155741
155953
  generic: "sans-serif",
155742
155954
  logicalFamily: "Comic Sans MS",
155743
- physicalFamily: "Comic Neue",
155955
+ physicalFamily: "Comic Relief",
155744
155956
  verdict: "visual_only",
155745
155957
  faces: {
155746
- regular: false,
155747
- bold: false,
155958
+ regular: true,
155959
+ bold: true,
155748
155960
  italic: false,
155749
155961
  boldItalic: false
155750
155962
  },
155963
+ faceSources: {
155964
+ italic: {
155965
+ kind: "synthetic",
155966
+ from: "regular"
155967
+ },
155968
+ boldItalic: {
155969
+ kind: "synthetic",
155970
+ from: "bold"
155971
+ }
155972
+ },
155751
155973
  gates: {
155752
- static: "not_run",
155974
+ static: "pass",
155753
155975
  metric: "fail",
155754
155976
  layout: "not_run",
155755
- ship: "not_run"
155977
+ ship: "fail"
155756
155978
  },
155757
155979
  policyAction: "category_fallback",
155758
- measurementRefs: ["comic-sans-ms__comic-neue#analytic_advance#2026-06-03"],
155980
+ measurementRefs: ["comic-sans-ms__comic-relief#visual_review#2026-06-09"],
155759
155981
  exportRule: "preserve_original_name",
155760
- advance: {
155761
- meanDelta: 0.1005,
155762
- maxDelta: 0.1419
155763
- },
155764
- candidateLicense: "OFL-1.1"
155982
+ candidateLicense: "OFL-1.1",
155983
+ faceVerdicts: {
155984
+ italic: "visual_only",
155985
+ boldItalic: "visual_only"
155986
+ }
155765
155987
  },
155766
155988
  {
155767
155989
  evidenceId: "candara",
@@ -155854,11 +156076,51 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155854
156076
  measurementRefs: ["lucida-console__cousine#analytic_advance#2026-06-03"],
155855
156077
  exportRule: "preserve_original_name",
155856
156078
  advance: {
156079
+ basis: "monospace_cell",
155857
156080
  meanDelta: 0.004050000000000001,
155858
156081
  maxDelta: 0.004050000000000001
155859
156082
  },
155860
156083
  candidateLicense: "OFL-1.1"
155861
156084
  },
156085
+ {
156086
+ evidenceId: "gill-sans-mt-condensed",
156087
+ generic: "sans-serif",
156088
+ logicalFamily: "Gill Sans MT Condensed",
156089
+ physicalFamily: "PT Sans Narrow",
156090
+ verdict: "visual_only",
156091
+ faces: {
156092
+ regular: true,
156093
+ bold: true,
156094
+ italic: false,
156095
+ boldItalic: false
156096
+ },
156097
+ faceSources: {
156098
+ italic: {
156099
+ kind: "synthetic",
156100
+ from: "regular"
156101
+ },
156102
+ boldItalic: {
156103
+ kind: "synthetic",
156104
+ from: "bold"
156105
+ }
156106
+ },
156107
+ gates: {
156108
+ static: "pass",
156109
+ metric: "fail",
156110
+ layout: "not_run",
156111
+ ship: "fail"
156112
+ },
156113
+ policyAction: "category_fallback",
156114
+ measurementRefs: ["gill-sans-mt-condensed__pt-sans-narrow#visual_review#2026-06-09"],
156115
+ exportRule: "preserve_original_name",
156116
+ candidateLicense: "OFL-1.1",
156117
+ faceVerdicts: {
156118
+ regular: "visual_only",
156119
+ bold: "visual_only",
156120
+ italic: "visual_only",
156121
+ boldItalic: "visual_only"
156122
+ }
156123
+ },
155862
156124
  {
155863
156125
  evidenceId: "aptos-display",
155864
156126
  generic: "sans-serif",
@@ -155925,6 +156187,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155925
156187
  measurementRefs: ["helvetica__liberation-sans#analytic_advance#2026-06-03"],
155926
156188
  exportRule: "preserve_original_name",
155927
156189
  advance: {
156190
+ basis: "latin_full",
155928
156191
  meanDelta: 0,
155929
156192
  maxDelta: 0
155930
156193
  },
@@ -155952,6 +156215,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155952
156215
  measurementRefs: ["calibri-light__carlito#analytic_advance#2026-06-05"],
155953
156216
  exportRule: "preserve_original_name",
155954
156217
  advance: {
156218
+ basis: "latin_full",
155955
156219
  meanDelta: 0.0148,
155956
156220
  maxDelta: 0.066
155957
156221
  },
@@ -155979,6 +156243,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155979
156243
  measurementRefs: ["baskerville-old-face_regular__bacasime-antique#regular#w400#7dac1e5f#analytic_advance#2026-06-05"],
155980
156244
  exportRule: "preserve_original_name",
155981
156245
  advance: {
156246
+ basis: "latin_full",
155982
156247
  meanDelta: 0,
155983
156248
  maxDelta: 0.4915590863952334
155984
156249
  },
@@ -155996,13 +156261,27 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
155996
156261
  generic: "serif",
155997
156262
  logicalFamily: "Cooper Black",
155998
156263
  physicalFamily: "Caprasimo",
155999
- verdict: "metric_safe",
156264
+ verdict: "visual_only",
156000
156265
  faces: {
156001
156266
  regular: true,
156002
156267
  bold: false,
156003
156268
  italic: false,
156004
156269
  boldItalic: false
156005
156270
  },
156271
+ faceSources: {
156272
+ bold: {
156273
+ kind: "synthetic",
156274
+ from: "regular"
156275
+ },
156276
+ italic: {
156277
+ kind: "synthetic",
156278
+ from: "regular"
156279
+ },
156280
+ boldItalic: {
156281
+ kind: "synthetic",
156282
+ from: "regular"
156283
+ }
156284
+ },
156006
156285
  gates: {
156007
156286
  static: "pass",
156008
156287
  metric: "pass",
@@ -156010,14 +156289,20 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
156010
156289
  ship: "not_run"
156011
156290
  },
156012
156291
  policyAction: "substitute",
156013
- measurementRefs: ["cooper-black_regular__caprasimo#regular#w400#786ab84e#analytic_advance#2026-06-05"],
156292
+ measurementRefs: ["cooper-black_regular__caprasimo#regular#w400#786ab84e#analytic_advance#2026-06-05", "cooper-black__caprasimo#synthetic_faces#visual_review#2026-06-09"],
156014
156293
  exportRule: "preserve_original_name",
156015
156294
  advance: {
156295
+ basis: "latin_full",
156016
156296
  meanDelta: 0,
156017
156297
  maxDelta: 0
156018
156298
  },
156019
156299
  candidateLicense: "OFL-1.1",
156020
- faceVerdicts: { regular: "metric_safe" }
156300
+ faceVerdicts: {
156301
+ regular: "metric_safe",
156302
+ bold: "visual_only",
156303
+ italic: "visual_only",
156304
+ boldItalic: "visual_only"
156305
+ }
156021
156306
  }
156022
156307
  ];
156023
156308
  LINE_BREAK_SAFE_VERDICTS = new Set([
@@ -156031,7 +156316,12 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
156031
156316
  family("Caladea", "Caladea", "Apache-2.0"),
156032
156317
  family("Liberation Sans", "LiberationSans", "OFL-1.1"),
156033
156318
  family("Liberation Serif", "LiberationSerif", "OFL-1.1"),
156034
- family("Liberation Mono", "LiberationMono", "OFL-1.1")
156319
+ family("Liberation Mono", "LiberationMono", "OFL-1.1"),
156320
+ familyWithFaces("Caprasimo", "OFL-1.1", [{
156321
+ weight: "normal",
156322
+ style: "normal",
156323
+ file: "Caprasimo-Regular.woff2"
156324
+ }])
156035
156325
  ]);
156036
156326
  SUBSTITUTION_EVIDENCE = SUBSTITUTION_EVIDENCE$1;
156037
156327
  bundledFamilies = new Set(BUNDLED_MANIFEST.map((f2) => f2.family));
@@ -156047,6 +156337,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
156047
156337
  OS2_MIN_LENGTH = OS2_FSSELECTION + 2;
156048
156338
  registriesByFontSet = /* @__PURE__ */ new WeakMap;
156049
156339
  BUNDLED_FAMILIES = new Set(BUNDLED_MANIFEST.map((f2) => f2.family));
156340
+ ADVERTISED_QUALIFIED_TOOLBAR_FAMILIES = new Set(["Cooper Black"]);
156050
156341
  FONT_OFFERINGS = deriveOfferings();
156051
156342
  ALL_COMMENT_TARGETS = COMMENT_FILE_BASENAMES;
156052
156343
  REL_ID_NUMERIC_PATTERN = /rId|mi/g;
@@ -157834,7 +158125,7 @@ var init_SuperConverter_e4tY_2EB_es = __esm(() => {
157834
158125
  };
157835
158126
  });
157836
158127
 
157837
- // ../../packages/superdoc/dist/chunks/create-headless-toolbar-3iIgFoKe.es.js
158128
+ // ../../packages/superdoc/dist/chunks/create-headless-toolbar-BV5L35wQ.es.js
157838
158129
  function parseSizeUnit(val = "0") {
157839
158130
  const length = val.toString() || "0";
157840
158131
  const value = Number.parseFloat(length);
@@ -168192,8 +168483,8 @@ var CSS_DIMENSION_REGEX, DOM_SIZE_UNITS, normalizeActorId = (value) => {
168192
168483
  }
168193
168484
  };
168194
168485
  };
168195
- var init_create_headless_toolbar_3iIgFoKe_es = __esm(() => {
168196
- init_SuperConverter_e4tY_2EB_es();
168486
+ var init_create_headless_toolbar_BV5L35wQ_es = __esm(() => {
168487
+ init_SuperConverter_BtvpSnE5_es();
168197
168488
  init_uuid_B2wVPhPi_es();
168198
168489
  init_constants_D9qj59G2_es();
168199
168490
  init_dist_B8HfvhaK_es();
@@ -222877,7 +223168,7 @@ var init_remark_gfm_eZN6yzWQ_es = __esm(() => {
222877
223168
  init_remark_gfm_BhnWr3yf_es();
222878
223169
  });
222879
223170
 
222880
- // ../../packages/superdoc/dist/chunks/src-M0JgzZDj.es.js
223171
+ // ../../packages/superdoc/dist/chunks/src-DumwyEvl.es.js
222881
223172
  function deleteProps(obj, propOrProps) {
222882
223173
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
222883
223174
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -263344,6 +263635,9 @@ function applySourceAnchorDataset(element3, sourceAnchor) {
263344
263635
  else
263345
263636
  delete element3.dataset.sourceOccurrenceId;
263346
263637
  }
263638
+ function allowFontSynthesis(element3) {
263639
+ element3.style.setProperty("font-synthesis", "weight style");
263640
+ }
263347
263641
  function getCellSegmentCount(cell2) {
263348
263642
  if (cell2.blocks && cell2.blocks.length > 0) {
263349
263643
  let total = 0;
@@ -282362,7 +282656,8 @@ function makeResolveFace(resolver2, hasFace) {
282362
282656
  const r$1 = resolver2.resolveFace(logical, face, hasFace);
282363
282657
  return {
282364
282658
  physicalFamily: r$1.physicalFamily,
282365
- reason: r$1.reason
282659
+ reason: r$1.reason,
282660
+ sourceFace: r$1.sourceFace
282366
282661
  };
282367
282662
  };
282368
282663
  if (resolver2)
@@ -282392,10 +282687,14 @@ function collect(acc, node2, resolveFace2) {
282392
282687
  const usedKey = `${logicalPrimary.toLowerCase()}|${weight}|${style2}`;
282393
282688
  if (acc.usedFaces.has(usedKey))
282394
282689
  return;
282395
- const { physicalFamily, reason } = resolveFace2(node2.fontFamily, {
282690
+ const { physicalFamily, reason, sourceFace } = resolveFace2(node2.fontFamily, {
282396
282691
  weight,
282397
282692
  style: style2
282398
282693
  });
282694
+ const requiredFace = sourceFace ?? {
282695
+ weight,
282696
+ style: style2
282697
+ };
282399
282698
  acc.usedFaces.set(usedKey, {
282400
282699
  logicalFamily: logicalPrimary,
282401
282700
  weight,
@@ -282406,15 +282705,17 @@ function collect(acc, node2, resolveFace2) {
282406
282705
  weight,
282407
282706
  style2,
282408
282707
  (physicalFamily || "").toLowerCase(),
282708
+ requiredFace.weight,
282709
+ requiredFace.style,
282409
282710
  reason
282410
282711
  ]);
282411
282712
  if (physicalFamily) {
282412
- const reqKey = `${physicalFamily.toLowerCase()}|${weight}|${style2}`;
282713
+ const reqKey = `${physicalFamily.toLowerCase()}|${requiredFace.weight}|${requiredFace.style}`;
282413
282714
  if (!acc.requiredFaces.has(reqKey))
282414
282715
  acc.requiredFaces.set(reqKey, {
282415
282716
  family: physicalFamily,
282416
- weight,
282417
- style: style2
282717
+ weight: requiredFace.weight,
282718
+ style: requiredFace.style
282418
282719
  });
282419
282720
  }
282420
282721
  }
@@ -304832,6 +305133,7 @@ menclose::after {
304832
305133
  });
304833
305134
  if (run2.fontSize != null)
304834
305135
  markerEl.style.fontSize = `${run2.fontSize}px`;
305136
+ allowFontSynthesis(markerEl);
304835
305137
  markerEl.style.fontWeight = run2.bold ? "bold" : "";
304836
305138
  markerEl.style.fontStyle = run2.italic ? "italic" : "";
304837
305139
  if (run2.color)
@@ -306817,6 +307119,7 @@ menclose::after {
306817
307119
  style: run2.italic ? "italic" : "normal"
306818
307120
  });
306819
307121
  dropCapEl.style.fontSize = `${run2.fontSize}px`;
307122
+ allowFontSynthesis(dropCapEl);
306820
307123
  if (run2.bold)
306821
307124
  dropCapEl.style.fontWeight = "bold";
306822
307125
  if (run2.italic)
@@ -306936,6 +307239,7 @@ menclose::after {
306936
307239
  style: run2.italic ? "italic" : "normal"
306937
307240
  });
306938
307241
  element3.style.fontSize = `${run2.fontSize}px`;
307242
+ allowFontSynthesis(element3);
306939
307243
  if (run2.bold)
306940
307244
  element3.style.fontWeight = "bold";
306941
307245
  if (run2.italic)
@@ -307128,6 +307432,7 @@ menclose::after {
307128
307432
  }
307129
307433
  if (run2.textColor)
307130
307434
  annotation.style.color = run2.textColor;
307435
+ allowFontSynthesis(annotation);
307131
307436
  if (run2.bold)
307132
307437
  annotation.style.fontWeight = "bold";
307133
307438
  if (run2.italic)
@@ -320321,13 +320626,13 @@ menclose::after {
320321
320626
  return;
320322
320627
  console.log(...args$1);
320323
320628
  }, HEADER_FOOTER_INIT_BUDGET_MS = 200, MAX_ZOOM_WARNING_THRESHOLD = 10, MAX_SELECTION_RECTS_PER_USER = 100, SEMANTIC_RESIZE_DEBOUNCE_MS = 120, MIN_SEMANTIC_CONTENT_WIDTH_PX = 1, GLOBAL_PERFORMANCE, PresentationEditor, ICONS, TEXTS, tableActionsOptions, TRACKED_MARK_NAMES;
320324
- var init_src_M0JgzZDj_es = __esm(() => {
320629
+ var init_src_DumwyEvl_es = __esm(() => {
320325
320630
  init_rolldown_runtime_Bg48TavK_es();
320326
- init_SuperConverter_e4tY_2EB_es();
320631
+ init_SuperConverter_BtvpSnE5_es();
320327
320632
  init_jszip_C49i9kUs_es();
320328
320633
  init_xml_js_CqGKpaft_es();
320329
320634
  init_uuid_B2wVPhPi_es();
320330
- init_create_headless_toolbar_3iIgFoKe_es();
320635
+ init_create_headless_toolbar_BV5L35wQ_es();
320331
320636
  init_constants_D9qj59G2_es();
320332
320637
  init_dist_B8HfvhaK_es();
320333
320638
  init_unified_Dsuw2be5_es();
@@ -341039,7 +341344,7 @@ function print() { __p += __j.call(arguments, '') }
341039
341344
  };
341040
341345
  }
341041
341346
  }, [["__scopeId", "data-v-d25821a5"]]);
341042
- TOOLBAR_FONTS = getDefaultFontOfferings().map((offering) => ({
341347
+ TOOLBAR_FONTS = getBuiltInToolbarFontOfferings().map((offering) => ({
341043
341348
  label: offering.logicalFamily,
341044
341349
  key: fontOfferingStack(offering),
341045
341350
  fontWeight: 400,
@@ -355292,11 +355597,11 @@ function print() { __p += __j.call(arguments, '') }
355292
355597
  ]);
355293
355598
  });
355294
355599
 
355295
- // ../../packages/superdoc/dist/chunks/create-super-doc-ui-BbHhTe5g.es.js
355600
+ // ../../packages/superdoc/dist/chunks/create-super-doc-ui-DCDD6DVT.es.js
355296
355601
  var headlessToolbarConstants, MOD_ALIASES, ALT_ALIASES, CTRL_ALIASES, SHIFT_ALIASES, BUILTIN_CONTEXT_MENU_GROUPS, BUILTIN_GROUP_ORDER, RESERVED_PROXY_PROPERTY_NAMES, ALL_TOOLBAR_COMMAND_IDS, EMPTY_ACTIVE_IDS;
355297
- var init_create_super_doc_ui_BbHhTe5g_es = __esm(() => {
355298
- init_SuperConverter_e4tY_2EB_es();
355299
- init_create_headless_toolbar_3iIgFoKe_es();
355602
+ var init_create_super_doc_ui_DCDD6DVT_es = __esm(() => {
355603
+ init_SuperConverter_BtvpSnE5_es();
355604
+ init_create_headless_toolbar_BV5L35wQ_es();
355300
355605
  headlessToolbarConstants = {
355301
355606
  DEFAULT_TEXT_ALIGN_OPTIONS: [
355302
355607
  {
@@ -355578,16 +355883,16 @@ var init_zipper_yaJVJ4z9_es = __esm(() => {
355578
355883
 
355579
355884
  // ../../packages/superdoc/dist/super-editor.es.js
355580
355885
  var init_super_editor_es = __esm(() => {
355581
- init_src_M0JgzZDj_es();
355582
- init_SuperConverter_e4tY_2EB_es();
355886
+ init_src_DumwyEvl_es();
355887
+ init_SuperConverter_BtvpSnE5_es();
355583
355888
  init_jszip_C49i9kUs_es();
355584
355889
  init_xml_js_CqGKpaft_es();
355585
- init_create_headless_toolbar_3iIgFoKe_es();
355890
+ init_create_headless_toolbar_BV5L35wQ_es();
355586
355891
  init_constants_D9qj59G2_es();
355587
355892
  init_dist_B8HfvhaK_es();
355588
355893
  init_unified_Dsuw2be5_es();
355589
355894
  init_DocxZipper_FUsfThjV_es();
355590
- init_create_super_doc_ui_BbHhTe5g_es();
355895
+ init_create_super_doc_ui_DCDD6DVT_es();
355591
355896
  init_ui_C5PAS9hY_es();
355592
355897
  init_eventemitter3_BnGqBE_Q_es();
355593
355898
  init_errors_CNaD6vcg_es();
@@ -456797,7 +457102,7 @@ var init_exporter = __esm(() => {
456797
457102
  // ../../shared/font-system/src/types.ts
456798
457103
  var init_types8 = () => {};
456799
457104
 
456800
- // ../../node_modules/.pnpm/@docfonts+fallbacks@0.6.0/node_modules/@docfonts/fallbacks/dist/data.js
457105
+ // ../../node_modules/.pnpm/@docfonts+fallbacks@0.12.0/node_modules/@docfonts/fallbacks/dist/data.js
456801
457106
  var SUBSTITUTION_EVIDENCE2;
456802
457107
  var init_data = __esm(() => {
456803
457108
  SUBSTITUTION_EVIDENCE2 = [
@@ -456826,6 +457131,7 @@ var init_data = __esm(() => {
456826
457131
  ],
456827
457132
  exportRule: "preserve_original_name",
456828
457133
  advance: {
457134
+ basis: "latin_full",
456829
457135
  meanDelta: 0,
456830
457136
  maxDelta: 0
456831
457137
  },
@@ -456858,6 +457164,7 @@ var init_data = __esm(() => {
456858
457164
  ],
456859
457165
  exportRule: "preserve_original_name",
456860
457166
  advance: {
457167
+ basis: "latin_full",
456861
457168
  meanDelta: 0.0002378,
456862
457169
  maxDelta: 0.2310758
456863
457170
  },
@@ -456901,6 +457208,7 @@ var init_data = __esm(() => {
456901
457208
  ],
456902
457209
  exportRule: "preserve_original_name",
456903
457210
  advance: {
457211
+ basis: "latin_full",
456904
457212
  meanDelta: 0,
456905
457213
  maxDelta: 0
456906
457214
  },
@@ -456930,6 +457238,7 @@ var init_data = __esm(() => {
456930
457238
  ],
456931
457239
  exportRule: "preserve_original_name",
456932
457240
  advance: {
457241
+ basis: "latin_full",
456933
457242
  meanDelta: 0,
456934
457243
  maxDelta: 0
456935
457244
  },
@@ -456959,6 +457268,7 @@ var init_data = __esm(() => {
456959
457268
  ],
456960
457269
  exportRule: "preserve_original_name",
456961
457270
  advance: {
457271
+ basis: "latin_full",
456962
457272
  meanDelta: 0,
456963
457273
  maxDelta: 0
456964
457274
  },
@@ -456995,6 +457305,7 @@ var init_data = __esm(() => {
456995
457305
  ],
456996
457306
  exportRule: "preserve_original_name",
456997
457307
  advance: {
457308
+ basis: "latin_full",
456998
457309
  meanDelta: 0.0000197,
456999
457310
  maxDelta: 0.0183727
457000
457311
  },
@@ -457047,6 +457358,7 @@ var init_data = __esm(() => {
457047
457358
  ],
457048
457359
  exportRule: "preserve_original_name",
457049
457360
  advance: {
457361
+ basis: "latin_full",
457050
457362
  meanDelta: 0,
457051
457363
  maxDelta: 0.5
457052
457364
  },
@@ -457091,6 +457403,149 @@ var init_data = __esm(() => {
457091
457403
  exportRule: "preserve_original_name",
457092
457404
  candidateLicense: null
457093
457405
  },
457406
+ {
457407
+ evidenceId: "arial-black",
457408
+ generic: "sans-serif",
457409
+ logicalFamily: "Arial Black",
457410
+ physicalFamily: "Archivo Black",
457411
+ verdict: "visual_only",
457412
+ faces: {
457413
+ regular: true,
457414
+ bold: false,
457415
+ italic: false,
457416
+ boldItalic: false
457417
+ },
457418
+ faceSources: {
457419
+ italic: {
457420
+ kind: "synthetic",
457421
+ from: "regular"
457422
+ }
457423
+ },
457424
+ gates: {
457425
+ static: "pass",
457426
+ metric: "fail",
457427
+ layout: "not_run",
457428
+ ship: "fail"
457429
+ },
457430
+ policyAction: "substitute",
457431
+ measurementRefs: [
457432
+ "arial-black__archivo-black#visual_review#2026-06-09"
457433
+ ],
457434
+ exportRule: "preserve_original_name",
457435
+ candidateLicense: "OFL-1.1",
457436
+ faceVerdicts: {
457437
+ italic: "visual_only"
457438
+ }
457439
+ },
457440
+ {
457441
+ evidenceId: "arial-rounded-mt-bold",
457442
+ generic: "sans-serif",
457443
+ logicalFamily: "Arial Rounded MT Bold",
457444
+ physicalFamily: "Ubuntu",
457445
+ verdict: "visual_only",
457446
+ faces: {
457447
+ regular: true,
457448
+ bold: true,
457449
+ italic: true,
457450
+ boldItalic: true
457451
+ },
457452
+ gates: {
457453
+ static: "pass",
457454
+ metric: "fail",
457455
+ layout: "not_run",
457456
+ ship: "fail"
457457
+ },
457458
+ policyAction: "category_fallback",
457459
+ measurementRefs: [
457460
+ "arial-rounded-mt-bold__ubuntu#visual_review#2026-06-09"
457461
+ ],
457462
+ exportRule: "preserve_original_name",
457463
+ candidateLicense: "Ubuntu-font-1.0"
457464
+ },
457465
+ {
457466
+ evidenceId: "bookman-old-style",
457467
+ generic: "serif",
457468
+ logicalFamily: "Bookman Old Style",
457469
+ physicalFamily: "TeX Gyre Bonum",
457470
+ verdict: "visual_only",
457471
+ faces: {
457472
+ regular: true,
457473
+ bold: true,
457474
+ italic: true,
457475
+ boldItalic: true
457476
+ },
457477
+ gates: {
457478
+ static: "pass",
457479
+ metric: "fail",
457480
+ layout: "not_run",
457481
+ ship: "fail"
457482
+ },
457483
+ policyAction: "substitute",
457484
+ measurementRefs: [
457485
+ "bookman-old-style__tex-gyre-bonum#visual_review#2026-06-09"
457486
+ ],
457487
+ exportRule: "preserve_original_name",
457488
+ candidateLicense: "GUST-Font-License-1.0"
457489
+ },
457490
+ {
457491
+ evidenceId: "century",
457492
+ generic: "serif",
457493
+ logicalFamily: "Century",
457494
+ physicalFamily: "C059",
457495
+ verdict: "visual_only",
457496
+ faces: {
457497
+ regular: true,
457498
+ bold: true,
457499
+ italic: true,
457500
+ boldItalic: true
457501
+ },
457502
+ gates: {
457503
+ static: "pass",
457504
+ metric: "fail",
457505
+ layout: "not_run",
457506
+ ship: "fail"
457507
+ },
457508
+ policyAction: "substitute",
457509
+ measurementRefs: [
457510
+ "century__c059#visual_review#2026-06-09"
457511
+ ],
457512
+ exportRule: "preserve_original_name",
457513
+ candidateLicense: "AGPL-3.0-only WITH PS-or-PDF-font-exception-20170817"
457514
+ },
457515
+ {
457516
+ evidenceId: "garamond",
457517
+ generic: "serif",
457518
+ logicalFamily: "Garamond",
457519
+ physicalFamily: "Cardo",
457520
+ verdict: "visual_only",
457521
+ faces: {
457522
+ regular: true,
457523
+ bold: true,
457524
+ italic: true,
457525
+ boldItalic: false
457526
+ },
457527
+ faceSources: {
457528
+ boldItalic: {
457529
+ kind: "synthetic",
457530
+ from: "bold"
457531
+ }
457532
+ },
457533
+ gates: {
457534
+ static: "pass",
457535
+ metric: "fail",
457536
+ layout: "not_run",
457537
+ ship: "fail"
457538
+ },
457539
+ policyAction: "category_fallback",
457540
+ measurementRefs: [
457541
+ "garamond__cardo#visual_review#2026-06-09"
457542
+ ],
457543
+ exportRule: "preserve_original_name",
457544
+ candidateLicense: "OFL-1.1",
457545
+ faceVerdicts: {
457546
+ boldItalic: "visual_only"
457547
+ }
457548
+ },
457094
457549
  {
457095
457550
  evidenceId: "consolas",
457096
457551
  generic: "monospace",
@@ -457115,6 +457570,7 @@ var init_data = __esm(() => {
457115
457570
  ],
457116
457571
  exportRule: "preserve_original_name",
457117
457572
  advance: {
457573
+ basis: "monospace_cell",
457118
457574
  meanDelta: 0.00035999999999999997,
457119
457575
  maxDelta: 0.00035999999999999997
457120
457576
  },
@@ -457149,80 +457605,90 @@ var init_data = __esm(() => {
457149
457605
  evidenceId: "tahoma",
457150
457606
  generic: "sans-serif",
457151
457607
  logicalFamily: "Tahoma",
457152
- physicalFamily: null,
457608
+ physicalFamily: "Noto Sans",
457153
457609
  verdict: "visual_only",
457154
457610
  faces: {
457155
- regular: false,
457156
- bold: false,
457157
- italic: false,
457158
- boldItalic: false
457611
+ regular: true,
457612
+ bold: true,
457613
+ italic: true,
457614
+ boldItalic: true
457159
457615
  },
457160
457616
  gates: {
457161
- static: "not_run",
457617
+ static: "pass",
457162
457618
  metric: "fail",
457163
457619
  layout: "not_run",
457164
- ship: "not_run"
457620
+ ship: "fail"
457165
457621
  },
457166
457622
  policyAction: "category_fallback",
457167
457623
  measurementRefs: [
457168
- "tahoma#top_candidates#2026-06-03"
457624
+ "tahoma__noto-sans#visual_review#2026-06-09"
457169
457625
  ],
457170
457626
  exportRule: "preserve_original_name",
457171
- candidateLicense: null
457627
+ candidateLicense: "OFL-1.1"
457172
457628
  },
457173
457629
  {
457174
457630
  evidenceId: "trebuchet-ms",
457175
457631
  generic: "sans-serif",
457176
457632
  logicalFamily: "Trebuchet MS",
457177
- physicalFamily: null,
457633
+ physicalFamily: "PT Sans",
457178
457634
  verdict: "visual_only",
457179
457635
  faces: {
457180
- regular: false,
457181
- bold: false,
457182
- italic: false,
457183
- boldItalic: false
457636
+ regular: true,
457637
+ bold: true,
457638
+ italic: true,
457639
+ boldItalic: true
457184
457640
  },
457185
457641
  gates: {
457186
- static: "not_run",
457642
+ static: "pass",
457187
457643
  metric: "fail",
457188
457644
  layout: "not_run",
457189
- ship: "not_run"
457645
+ ship: "fail"
457190
457646
  },
457191
457647
  policyAction: "category_fallback",
457192
457648
  measurementRefs: [
457193
- "trebuchet-ms#top_candidates#2026-06-03"
457649
+ "trebuchet-ms__pt-sans#visual_review#2026-06-09"
457194
457650
  ],
457195
457651
  exportRule: "preserve_original_name",
457196
- candidateLicense: null
457652
+ candidateLicense: "OFL-1.1"
457197
457653
  },
457198
457654
  {
457199
457655
  evidenceId: "comic-sans-ms",
457200
457656
  generic: "sans-serif",
457201
457657
  logicalFamily: "Comic Sans MS",
457202
- physicalFamily: "Comic Neue",
457658
+ physicalFamily: "Comic Relief",
457203
457659
  verdict: "visual_only",
457204
457660
  faces: {
457205
- regular: false,
457206
- bold: false,
457661
+ regular: true,
457662
+ bold: true,
457207
457663
  italic: false,
457208
457664
  boldItalic: false
457209
457665
  },
457666
+ faceSources: {
457667
+ italic: {
457668
+ kind: "synthetic",
457669
+ from: "regular"
457670
+ },
457671
+ boldItalic: {
457672
+ kind: "synthetic",
457673
+ from: "bold"
457674
+ }
457675
+ },
457210
457676
  gates: {
457211
- static: "not_run",
457677
+ static: "pass",
457212
457678
  metric: "fail",
457213
457679
  layout: "not_run",
457214
- ship: "not_run"
457680
+ ship: "fail"
457215
457681
  },
457216
457682
  policyAction: "category_fallback",
457217
457683
  measurementRefs: [
457218
- "comic-sans-ms__comic-neue#analytic_advance#2026-06-03"
457684
+ "comic-sans-ms__comic-relief#visual_review#2026-06-09"
457219
457685
  ],
457220
457686
  exportRule: "preserve_original_name",
457221
- advance: {
457222
- meanDelta: 0.1005,
457223
- maxDelta: 0.1419
457224
- },
457225
- candidateLicense: "OFL-1.1"
457687
+ candidateLicense: "OFL-1.1",
457688
+ faceVerdicts: {
457689
+ italic: "visual_only",
457690
+ boldItalic: "visual_only"
457691
+ }
457226
457692
  },
457227
457693
  {
457228
457694
  evidenceId: "candara",
@@ -457323,11 +457789,53 @@ var init_data = __esm(() => {
457323
457789
  ],
457324
457790
  exportRule: "preserve_original_name",
457325
457791
  advance: {
457792
+ basis: "monospace_cell",
457326
457793
  meanDelta: 0.004050000000000001,
457327
457794
  maxDelta: 0.004050000000000001
457328
457795
  },
457329
457796
  candidateLicense: "OFL-1.1"
457330
457797
  },
457798
+ {
457799
+ evidenceId: "gill-sans-mt-condensed",
457800
+ generic: "sans-serif",
457801
+ logicalFamily: "Gill Sans MT Condensed",
457802
+ physicalFamily: "PT Sans Narrow",
457803
+ verdict: "visual_only",
457804
+ faces: {
457805
+ regular: true,
457806
+ bold: true,
457807
+ italic: false,
457808
+ boldItalic: false
457809
+ },
457810
+ faceSources: {
457811
+ italic: {
457812
+ kind: "synthetic",
457813
+ from: "regular"
457814
+ },
457815
+ boldItalic: {
457816
+ kind: "synthetic",
457817
+ from: "bold"
457818
+ }
457819
+ },
457820
+ gates: {
457821
+ static: "pass",
457822
+ metric: "fail",
457823
+ layout: "not_run",
457824
+ ship: "fail"
457825
+ },
457826
+ policyAction: "category_fallback",
457827
+ measurementRefs: [
457828
+ "gill-sans-mt-condensed__pt-sans-narrow#visual_review#2026-06-09"
457829
+ ],
457830
+ exportRule: "preserve_original_name",
457831
+ candidateLicense: "OFL-1.1",
457832
+ faceVerdicts: {
457833
+ regular: "visual_only",
457834
+ bold: "visual_only",
457835
+ italic: "visual_only",
457836
+ boldItalic: "visual_only"
457837
+ }
457838
+ },
457331
457839
  {
457332
457840
  evidenceId: "aptos-display",
457333
457841
  generic: "sans-serif",
@@ -457396,6 +457904,7 @@ var init_data = __esm(() => {
457396
457904
  ],
457397
457905
  exportRule: "preserve_original_name",
457398
457906
  advance: {
457907
+ basis: "latin_full",
457399
457908
  meanDelta: 0,
457400
457909
  maxDelta: 0
457401
457910
  },
@@ -457425,6 +457934,7 @@ var init_data = __esm(() => {
457425
457934
  ],
457426
457935
  exportRule: "preserve_original_name",
457427
457936
  advance: {
457937
+ basis: "latin_full",
457428
457938
  meanDelta: 0.0148,
457429
457939
  maxDelta: 0.066
457430
457940
  },
@@ -457454,6 +457964,7 @@ var init_data = __esm(() => {
457454
457964
  ],
457455
457965
  exportRule: "preserve_original_name",
457456
457966
  advance: {
457967
+ basis: "latin_full",
457457
457968
  meanDelta: 0,
457458
457969
  maxDelta: 0.4915590863952334
457459
457970
  },
@@ -457475,13 +457986,27 @@ var init_data = __esm(() => {
457475
457986
  generic: "serif",
457476
457987
  logicalFamily: "Cooper Black",
457477
457988
  physicalFamily: "Caprasimo",
457478
- verdict: "metric_safe",
457989
+ verdict: "visual_only",
457479
457990
  faces: {
457480
457991
  regular: true,
457481
457992
  bold: false,
457482
457993
  italic: false,
457483
457994
  boldItalic: false
457484
457995
  },
457996
+ faceSources: {
457997
+ bold: {
457998
+ kind: "synthetic",
457999
+ from: "regular"
458000
+ },
458001
+ italic: {
458002
+ kind: "synthetic",
458003
+ from: "regular"
458004
+ },
458005
+ boldItalic: {
458006
+ kind: "synthetic",
458007
+ from: "regular"
458008
+ }
458009
+ },
457485
458010
  gates: {
457486
458011
  static: "pass",
457487
458012
  metric: "pass",
@@ -457490,26 +458015,31 @@ var init_data = __esm(() => {
457490
458015
  },
457491
458016
  policyAction: "substitute",
457492
458017
  measurementRefs: [
457493
- "cooper-black_regular__caprasimo#regular#w400#786ab84e#analytic_advance#2026-06-05"
458018
+ "cooper-black_regular__caprasimo#regular#w400#786ab84e#analytic_advance#2026-06-05",
458019
+ "cooper-black__caprasimo#synthetic_faces#visual_review#2026-06-09"
457494
458020
  ],
457495
458021
  exportRule: "preserve_original_name",
457496
458022
  advance: {
458023
+ basis: "latin_full",
457497
458024
  meanDelta: 0,
457498
458025
  maxDelta: 0
457499
458026
  },
457500
458027
  candidateLicense: "OFL-1.1",
457501
458028
  faceVerdicts: {
457502
- regular: "metric_safe"
458029
+ regular: "metric_safe",
458030
+ bold: "visual_only",
458031
+ italic: "visual_only",
458032
+ boldItalic: "visual_only"
457503
458033
  }
457504
458034
  }
457505
458035
  ];
457506
458036
  });
457507
458037
 
457508
- // ../../node_modules/.pnpm/@docfonts+fallbacks@0.6.0/node_modules/@docfonts/fallbacks/dist/fallbacks.js
458038
+ // ../../node_modules/.pnpm/@docfonts+fallbacks@0.12.0/node_modules/@docfonts/fallbacks/dist/fallbacks.js
457509
458039
  function normalizeFamilyName2(name) {
457510
458040
  return name.trim().replace(/^['"]+|['"]+$/g, "").trim().toLowerCase();
457511
458041
  }
457512
- function buildFallback2(row2, physicalFamily, verdict, faceSlot) {
458042
+ function buildFallback2(row2, physicalFamily, verdict, faceSlot, faceSource) {
457513
458043
  const glyphExceptions = faceSlot ? row2.glyphExceptions?.filter((g2) => g2.slot === faceSlot) : row2.glyphExceptions ? [...row2.glyphExceptions] : undefined;
457514
458044
  return {
457515
458045
  substituteFamily: physicalFamily,
@@ -457519,6 +458049,7 @@ function buildFallback2(row2, physicalFamily, verdict, faceSlot) {
457519
458049
  faces: row2.faces,
457520
458050
  evidenceId: row2.evidenceId,
457521
458051
  generic: row2.generic,
458052
+ ...faceSource ? { faceSource: { ...faceSource } } : {},
457522
458053
  ...glyphExceptions && glyphExceptions.length > 0 ? { glyphExceptions } : {}
457523
458054
  };
457524
458055
  }
@@ -457543,6 +458074,35 @@ function decideRow2(row2, canRenderFamily2) {
457543
458074
  fallback: buildFallback2(row2, physicalFamily, verdict)
457544
458075
  };
457545
458076
  }
458077
+ function isFaceScoped2(row2) {
458078
+ const f2 = row2.faces;
458079
+ return f2.regular || f2.bold || f2.italic || f2.boldItalic;
458080
+ }
458081
+ function faceSourceFor2(row2, face) {
458082
+ const explicit = row2.faceSources?.[face];
458083
+ if (explicit)
458084
+ return explicit;
458085
+ return isFaceScoped2(row2) && row2.faces[face] ? { kind: "real" } : undefined;
458086
+ }
458087
+ function decideRowForFace2(row2, face, canRenderFamily2) {
458088
+ const base6 = decideRow2(row2, canRenderFamily2);
458089
+ if (base6.kind !== "fallback")
458090
+ return base6;
458091
+ const faceSource = faceSourceFor2(row2, face);
458092
+ if (isFaceScoped2(row2) && !faceSource)
458093
+ return {
458094
+ kind: "face_missing",
458095
+ substituteFamily: base6.fallback.substituteFamily,
458096
+ evidenceId: row2.evidenceId,
458097
+ generic: row2.generic
458098
+ };
458099
+ const faceVerdict = row2.faceVerdicts?.[face] ?? row2.verdict;
458100
+ const projectedFaceSource = faceSource?.kind === "synthetic" ? faceSource : undefined;
458101
+ return {
458102
+ kind: "fallback",
458103
+ fallback: buildFallback2(row2, base6.fallback.substituteFamily, faceVerdict, face, projectedFaceSource)
458104
+ };
458105
+ }
457546
458106
  function getFallbackDecision2(family2, options = {}) {
457547
458107
  const row2 = BY_LOGICAL2.get(normalizeFamilyName2(family2));
457548
458108
  return row2 ? decideRow2(row2, options.canRenderFamily) : { kind: "unknown" };
@@ -457551,6 +458111,10 @@ function getRenderableFallback2(family2, options) {
457551
458111
  const decision = getFallbackDecision2(family2, options);
457552
458112
  return decision.kind === "fallback" ? decision.fallback : null;
457553
458113
  }
458114
+ function getFallbackDecisionForFace2(family2, face, options = {}) {
458115
+ const row2 = BY_LOGICAL2.get(normalizeFamilyName2(family2));
458116
+ return row2 ? decideRowForFace2(row2, face, options.canRenderFamily) : { kind: "unknown" };
458117
+ }
457554
458118
  var LINE_BREAK_SAFE_VERDICTS2, BY_LOGICAL2;
457555
458119
  var init_fallbacks = __esm(() => {
457556
458120
  init_data();
@@ -457565,7 +458129,7 @@ var init_fallbacks = __esm(() => {
457565
458129
  ]));
457566
458130
  });
457567
458131
 
457568
- // ../../node_modules/.pnpm/@docfonts+fallbacks@0.6.0/node_modules/@docfonts/fallbacks/dist/index.js
458132
+ // ../../node_modules/.pnpm/@docfonts+fallbacks@0.12.0/node_modules/@docfonts/fallbacks/dist/index.js
457569
458133
  var init_dist11 = __esm(() => {
457570
458134
  init_data();
457571
458135
  init_fallbacks();
@@ -457583,6 +458147,9 @@ function fourFaces2(filePrefix) {
457583
458147
  function family2(name, filePrefix, license) {
457584
458148
  return { family: name, license, faces: fourFaces2(filePrefix) };
457585
458149
  }
458150
+ function familyWithFaces2(name, license, faces) {
458151
+ return { family: name, license, faces };
458152
+ }
457586
458153
  var BUNDLED_MANIFEST2;
457587
458154
  var init_bundled_manifest = __esm(() => {
457588
458155
  BUNDLED_MANIFEST2 = Object.freeze([
@@ -457590,7 +458157,8 @@ var init_bundled_manifest = __esm(() => {
457590
458157
  family2("Caladea", "Caladea", "Apache-2.0"),
457591
458158
  family2("Liberation Sans", "LiberationSans", "OFL-1.1"),
457592
458159
  family2("Liberation Serif", "LiberationSerif", "OFL-1.1"),
457593
- family2("Liberation Mono", "LiberationMono", "OFL-1.1")
458160
+ family2("Liberation Mono", "LiberationMono", "OFL-1.1"),
458161
+ familyWithFaces2("Caprasimo", "OFL-1.1", [{ weight: "normal", style: "normal", file: "Caprasimo-Regular.woff2" }])
457594
458162
  ]);
457595
458163
  });
457596
458164
 
@@ -457608,6 +458176,59 @@ function normalizeFamilyKey3(family3) {
457608
458176
  function sortPairs2(pairs) {
457609
458177
  return pairs.sort(([a2], [b2]) => a2 < b2 ? -1 : a2 > b2 ? 1 : 0);
457610
458178
  }
458179
+ function faceSlotFor2({ weight, style: style2 }) {
458180
+ const bold = weight === "700";
458181
+ const italic = style2 === "italic";
458182
+ if (bold && italic)
458183
+ return "boldItalic";
458184
+ if (bold)
458185
+ return "bold";
458186
+ if (italic)
458187
+ return "italic";
458188
+ return "regular";
458189
+ }
458190
+ function faceKeyForSlot2(slot) {
458191
+ switch (slot) {
458192
+ case "bold":
458193
+ return { weight: "700", style: "normal" };
458194
+ case "italic":
458195
+ return { weight: "400", style: "italic" };
458196
+ case "boldItalic":
458197
+ return { weight: "700", style: "italic" };
458198
+ case "regular":
458199
+ return { weight: "400", style: "normal" };
458200
+ }
458201
+ }
458202
+ function reasonForFallback2(policyAction) {
458203
+ return policyAction === "category_fallback" ? "category_fallback" : "bundled_substitute";
458204
+ }
458205
+ function resolveDocfontsFace2(primary, face, hasFace) {
458206
+ const decision = getFallbackDecisionForFace2(primary, faceSlotFor2(face), { canRenderFamily: canRenderFamily2 });
458207
+ if (decision.kind === "face_missing") {
458208
+ return { physical: primary, reason: "fallback_face_absent" };
458209
+ }
458210
+ if (decision.kind !== "fallback")
458211
+ return null;
458212
+ const fallback = decision.fallback;
458213
+ if (fallback.policyAction !== "substitute" && fallback.policyAction !== "category_fallback")
458214
+ return null;
458215
+ if (hasFace(fallback.substituteFamily, face.weight, face.style)) {
458216
+ return {
458217
+ physical: fallback.substituteFamily,
458218
+ reason: reasonForFallback2(fallback.policyAction)
458219
+ };
458220
+ }
458221
+ const sourceFace = fallback.faceSource?.kind === "synthetic" ? faceKeyForSlot2(fallback.faceSource.from) : face;
458222
+ if (!hasFace(fallback.substituteFamily, sourceFace.weight, sourceFace.style)) {
458223
+ return fallback.policyAction === "substitute" ? { physical: primary, reason: "fallback_face_absent" } : null;
458224
+ }
458225
+ const sourceDiffers = sourceFace.weight !== face.weight || sourceFace.style !== face.style;
458226
+ return {
458227
+ physical: fallback.substituteFamily,
458228
+ reason: reasonForFallback2(fallback.policyAction),
458229
+ ...sourceDiffers ? { sourceFace } : {}
458230
+ };
458231
+ }
457611
458232
  function deriveBundledSubstitutes2() {
457612
458233
  const substitutes = {};
457613
458234
  for (const row2 of SUBSTITUTION_EVIDENCE3) {
@@ -457730,14 +458351,10 @@ class FontResolver2 {
457730
458351
  if (hasFace(primary, face.weight, face.style)) {
457731
458352
  return { physical: primary, reason: "registered_face" };
457732
458353
  }
458354
+ const docfonts = resolveDocfontsFace2(primary, face, hasFace);
458355
+ if (docfonts)
458356
+ return docfonts;
457733
458357
  const bundled = BUNDLED_SUBSTITUTES2[key2];
457734
- if (bundled && hasFace(bundled, face.weight, face.style)) {
457735
- return { physical: bundled, reason: "bundled_substitute" };
457736
- }
457737
- const category = CATEGORY_FALLBACKS2[key2];
457738
- if (category && hasFace(category, face.weight, face.style)) {
457739
- return { physical: category, reason: "category_fallback" };
457740
- }
457741
458358
  if (override || bundled) {
457742
458359
  return { physical: primary, reason: "fallback_face_absent" };
457743
458360
  }
@@ -457763,8 +458380,13 @@ class FontResolver2 {
457763
458380
  resolveFace(logicalFamily, face, hasFace) {
457764
458381
  const parts = splitStack2(logicalFamily);
457765
458382
  const primary = parts[0] ?? logicalFamily;
457766
- const { physical, reason } = this.#resolveFaceLadder(primary, face, hasFace);
457767
- return { logicalFamily, physicalFamily: stripFamilyQuotes2(physical), reason };
458383
+ const { physical, reason, sourceFace } = this.#resolveFaceLadder(primary, face, hasFace);
458384
+ return {
458385
+ logicalFamily,
458386
+ physicalFamily: stripFamilyQuotes2(physical),
458387
+ reason,
458388
+ ...sourceFace ? { sourceFace } : {}
458389
+ };
457768
458390
  }
457769
458391
  resolvePhysicalFamilyForFace(cssFontFamily, face, hasFace) {
457770
458392
  if (!cssFontFamily)
@@ -458223,11 +458845,12 @@ function deriveOfferings2() {
458223
458845
  });
458224
458846
  return Object.freeze(offerings);
458225
458847
  }
458226
- var BUNDLED_FAMILIES2, FONT_OFFERINGS2;
458848
+ var BUNDLED_FAMILIES2, ADVERTISED_QUALIFIED_TOOLBAR_FAMILIES2, FONT_OFFERINGS2;
458227
458849
  var init_font_offerings = __esm(() => {
458228
458850
  init_substitution_evidence();
458229
458851
  init_bundled_manifest();
458230
458852
  BUNDLED_FAMILIES2 = new Set(BUNDLED_MANIFEST2.map((f2) => f2.family));
458853
+ ADVERTISED_QUALIFIED_TOOLBAR_FAMILIES2 = new Set(["Cooper Black"]);
458231
458854
  FONT_OFFERINGS2 = deriveOfferings2();
458232
458855
  });
458233
458856