ooxml-ui 1.18.2 → 1.19.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 (75) hide show
  1. package/README.md +54 -0
  2. package/dist/building-block-styles.d.ts +5 -0
  3. package/dist/building-block-styles.d.ts.map +1 -0
  4. package/dist/chunk-6Y7KR2I3.js +299 -0
  5. package/dist/{chunk-EVL7GFC7.js → chunk-KH2ZG3N6.js} +2 -2
  6. package/dist/{chunk-MSXUCINT.js → chunk-QEIGB73C.js} +1 -1
  7. package/dist/docx/building-blocks.d.ts +31 -0
  8. package/dist/docx/component.d.ts +1 -1
  9. package/dist/docx/editor-core.d.ts +3 -0
  10. package/dist/docx/element-api.d.ts +8 -0
  11. package/dist/docx/index.d.ts +1 -0
  12. package/dist/docx/styles/index.d.ts +0 -4
  13. package/dist/docx.js +154 -38
  14. package/dist/index.js +3 -3
  15. package/dist/pptx/chunk-NDAE3JFO.cjs +1014 -0
  16. package/dist/pptx/{chunk-AUCJIB3M.mjs → chunk-NLUVYOKN.mjs} +113 -381
  17. package/dist/pptx/{chunk-S2Y3VUNC.cjs → chunk-OQQQ2GBW.cjs} +134 -402
  18. package/dist/pptx/chunk-UTFFX4M7.mjs +989 -0
  19. package/dist/pptx/dom/index.cjs +205 -205
  20. package/dist/pptx/dom/index.mjs +3 -3
  21. package/dist/pptx/index.cjs +2888 -2880
  22. package/dist/pptx/index.mjs +2 -2
  23. package/dist/pptx/render/morph-predicates.d.ts.map +1 -1
  24. package/dist/pptx/theme/index.cjs +24 -16
  25. package/dist/pptx/theme/index.d.ts +1 -0
  26. package/dist/pptx/theme/index.d.ts.map +1 -1
  27. package/dist/pptx/theme/index.mjs +1 -1
  28. package/dist/pptx/theme/office-css.d.ts +6 -0
  29. package/dist/pptx/theme/office-css.d.ts.map +1 -0
  30. package/dist/pptx/web-components/chart-format-pane-styles.d.ts +1 -1
  31. package/dist/pptx/web-components/chart-format-pane-styles.d.ts.map +1 -1
  32. package/dist/pptx/web-components/control-styles.d.ts.map +1 -1
  33. package/dist/pptx/web-components/index.d.ts.map +1 -1
  34. package/dist/pptx/web-components/mobile-bar-styles.d.ts +2 -2
  35. package/dist/pptx/web-components/mobile-bar-styles.d.ts.map +1 -1
  36. package/dist/pptx/web-components/mobile-insert-styles.d.ts +1 -1
  37. package/dist/pptx/web-components/mobile-insert-styles.d.ts.map +1 -1
  38. package/dist/pptx/web-components/notes-toolbar-styles.d.ts +1 -1
  39. package/dist/pptx/web-components/notes-toolbar-styles.d.ts.map +1 -1
  40. package/dist/pptx/web-components/office-token-bridge.d.ts.map +1 -1
  41. package/dist/pptx/web-components/subtitle-settings-styles.d.ts +1 -1
  42. package/dist/pptx/web-components/subtitle-settings-styles.d.ts.map +1 -1
  43. package/dist/pptx/web-components/theme-editor-styles.d.ts +1 -1
  44. package/dist/pptx/web-components/theme-editor-styles.d.ts.map +1 -1
  45. package/dist/teams.js +2 -2
  46. package/dist/theme-bridge.d.ts +28 -0
  47. package/dist/theme-bridge.d.ts.map +1 -0
  48. package/dist/theme.d.ts +10 -3
  49. package/dist/theme.d.ts.map +1 -0
  50. package/dist/theme.js +1 -1
  51. package/dist/visio/building-blocks.d.ts +37 -0
  52. package/dist/visio/controller.d.ts +6 -0
  53. package/dist/visio/index.d.ts +1 -0
  54. package/dist/visio/styles/theme.d.ts +1 -1
  55. package/dist/visio/styles.d.ts +1 -1
  56. package/dist/visio/viewer-element.d.ts +2 -0
  57. package/dist/visio.js +7446 -7321
  58. package/dist/xlsx/building-blocks.d.ts +55 -0
  59. package/dist/xlsx/component.d.ts +3 -1
  60. package/dist/xlsx/dialogs/styles.d.ts +1 -1
  61. package/dist/xlsx/editor-core.d.ts +1 -0
  62. package/dist/xlsx/element-api.d.ts +6 -0
  63. package/dist/xlsx/formula-bar/styles.d.ts +1 -1
  64. package/dist/xlsx/grid/page-break-layer.d.ts +1 -1
  65. package/dist/xlsx/grid/styles.d.ts +1 -1
  66. package/dist/xlsx/index.d.ts +1 -0
  67. package/dist/xlsx/page-views/page-layout-css.d.ts +1 -1
  68. package/dist/xlsx/sheet-tabs/styles.d.ts +1 -1
  69. package/dist/xlsx/surface-shell.d.ts +3 -0
  70. package/dist/xlsx/theme/styles.d.ts +1 -4
  71. package/dist/xlsx.js +412 -268
  72. package/package.json +4 -4
  73. package/dist/chunk-7E3HU7RL.js +0 -123
  74. package/dist/pptx/chunk-BDXQX6RA.cjs +0 -373
  75. package/dist/pptx/chunk-ZAOD6O2D.mjs +0 -357
package/dist/docx.js CHANGED
@@ -2,22 +2,22 @@ import { statusLayout, watchStatusWidth, compactPageText } from './chunk-UBBC5FH
2
2
  import { syncRibbonAddIns } from './chunk-SVRIVUWC.js';
3
3
  export { RIBBON_ADD_IN_EVENT } from './chunk-SVRIVUWC.js';
4
4
  import { defineSmartArt } from './chunk-ANPFMQ6E.js';
5
- import { shadcnBridge } from './chunk-7E3HU7RL.js';
5
+ import { legacyThemeAliases, legacyThemeBridge, installOfficeUiThemeFor } from './chunk-6Y7KR2I3.js';
6
6
  import { createRibbonOverflow, defineRibbon, defineRuler, defineCommentsPane, defineDialog, defineSearchField, defineSwitch, defineTitleBar, defineRibbonActions, defineBackstage, defineStatusBar, defineZoomSlider, defineContextMenu, defineColorGrid, runKeyTips, defineOptionsDialog, assignKeyTips, optionsLabels, userInterfaceSection, personalizeSection, optionText, unavailableCategory } from './chunk-SPRZIHUH.js';
7
7
  import { registerIcon } from './chunk-M6GF5ED2.js';
8
8
  import './chunk-KNC2UEUR.js';
9
9
  import './chunk-CWBSXK7P.js';
10
10
  import './chunk-LD3K2RDN.js';
11
11
  import { optionStrings, normalizeLocale, SUPPORTED_OFFICE_LOCALES, interpolate } from 'ooxml-core/i18n';
12
- import { createDocument, saveDocx, sectionsFromLayout, sectionLayoutJson, sectionsOf, pageSizeOf, columnPreset, applyPageSetup, withSection, computeListLabels, numberNotesInOrder, tocEntries, tableOfFiguresInstruction, findTableOfContents, ensureListDefinition, resolveNumberingLevel, equalColumnDraft, readColumnDraft, PAGE_SIZE_OPTIONS, PAGE_SIZES, readPageSetup, isRunHiddenForReview, resolveTableStyleFormatting, resolveParagraphFormatting, displayListLabel, setTitlePage, setLineNumbering, setVerticalAlign, setPageNumbering, ST_NumberFormat, unequalColumnPreset, setColumns, setOrientation, setPageSize, setMargins, lineSpacingLabel, formatNoteNumber, cellSourceBlocks, reviewDocumentFormatting, reviewFormattingWarnings, listRevisions, plainText, tocHyperlinks, DEFAULT_TOC_INSTRUCTION, tocBookmarks, buildTableOfContents, tocCaptionLabel, isFieldLocked, twips as twips$1, signedTwips, formatListNumber, columnTextWidth, validColumnDraft, validatePageSetup, presetOf, LIGATURE_VALUES, isLigatures, reviewRunFormatting, resolveRunFormatting, resolveThemeColorReference, lineSpacingValue, canEditControlContent, controlDate, shapeSvg, isStHighlightColor, transformCase, DEFAULT_TABLE_BORDERS, parseLineSpacingValue, twipsAttr, twipsFromPixels, isDirectionalPreset, headingLevel, reviewParagraphFormatting, isValidLanguageTag, WORD, SHAPE_PALETTE, isHeadingListKind, DEFAULT_DRAWN_SHAPE, newShape, fieldName, lineSpacingOptions, halfPointsFromPoints, changeColumnWidth, changeColumnGap, createListDefinition, linkStylesToList, headingListLevels, documentStats } from 'ooxml-core/docx';
12
+ import { createDocument, saveDocx, sectionsFromLayout, sectionLayoutJson, sectionsOf, pageSizeOf, columnPreset, applyPageSetup, withSection, computeListLabels, numberNotesInOrder, tocEntries, resolveNumberingLevel, tableOfFiguresInstruction, findTableOfContents, ensureListDefinition, equalColumnDraft, readColumnDraft, PAGE_SIZE_OPTIONS, PAGE_SIZES, readPageSetup, isRunHiddenForReview, resolveTableStyleFormatting, resolveParagraphFormatting, displayListLabel, setTitlePage, setLineNumbering, setVerticalAlign, setPageNumbering, ST_NumberFormat, unequalColumnPreset, setColumns, setOrientation, setPageSize, setMargins, lineSpacingLabel, formatNoteNumber, cellSourceBlocks, reviewDocumentFormatting, reviewFormattingWarnings, listRevisions, plainText, resolveRunFormatting, tocHyperlinks, DEFAULT_TOC_INSTRUCTION, tocBookmarks, buildTableOfContents, tocCaptionLabel, isFieldLocked, twips as twips$1, signedTwips, formatListNumber, columnTextWidth, validColumnDraft, validatePageSetup, presetOf, LIGATURE_VALUES, isLigatures, reviewRunFormatting, resolveThemeColorReference, lineSpacingValue, canEditControlContent, controlDate, shapeSvg, isStHighlightColor, transformCase, DEFAULT_TABLE_BORDERS, parseLineSpacingValue, twipsAttr, SHAPE_PALETTE, isHeadingListKind, twipsFromPixels, isDirectionalPreset, headingLevel, reviewParagraphFormatting, isValidLanguageTag, WORD, newShape, DEFAULT_DRAWN_SHAPE, fieldName, lineSpacingOptions, halfPointsFromPoints, changeColumnWidth, changeColumnGap, createListDefinition, linkStylesToList, headingListLevels, documentStats } from 'ooxml-core/docx';
13
13
  import { Schema, Fragment, DOMSerializer } from 'prosemirror-model';
14
- import { markSpecs, imageNodeSpec, fieldMarkerNodeSpec, noteReferenceNodeSpec, pageBreakNodeSpec, hardBreakNodeSpec, commentHistoryAttributes, tableCellStyle, tableStyle, createToggleFormat, expectDefined, paragraphBoxCss, themeToCssVars, lightTheme, darkTheme, normalizeThemeMode, applyThemeColors, refreshWordYjsPresence, normalizeRibbonActions, DirtyState, isWordYjsRemoteTransaction, REMOTE_TRANSACTION_META, repairCollaborativeDocumentIds, HEADER_FOOTER_INPUT, restoreSectionParts, commentThreadsFromDoc, restoreNoteParts, CollaborationClient, createCollaborationIdGenerator, WordYjsCollaboration, insertContentControl, sectionPartsJson, NotePartsStep, notePartsJson, SectionPartsStep, fitZoomPercent, hasChangeAtCursor, hasAnyChange, commentIdsAtSelection, commentAnchors, documentWordCount, fieldGuardPlugin, tableStructureGuardPlugin, contentControlPlugin, trackChangesPlugin, wordYjsPresencePlugin, chartNodeSpec, placementClass, removeCommentThread, removeCommentAnchor, deleteComment, updateCommentThreads, addComment, toggleTrackChanges, goToNextChange, goToPreviousChange, rejectAllChanges, acceptAllChanges, rejectChangeAtCursor, acceptChangeAtCursor, goToComment, appendInlineNode, sameJson, sameRuns, PARAGRAPH_KEEP_KEYS, paragraphFromAttrs, parseBordersJson, isNavigableHref, wordYjsPluginKey, setReviewRecordingPreferences, nodeNumbering, controlAtSelection, paragraphFormattingRevision, inlineNodeRun, formattingRevision, insertWordHardBreak, paragraphAttrs, resolveCellVisuals, themeDrawing, ribbonActionIdForLabel, removeWordLink, fieldResultRanges, wordLinkRangeAt, ligatureCss as ligatureCss$1, toggleCheckboxControl, wordYjsRedo, wordYjsUndo, runToInlineNodes as runToInlineNodes$1, backstageFocus, applyRunFormattingPatch, clearDirectRunFormatting, applyWordLink, ligatureStyle, wordHighlightColors, swatchColor, cssBorderSide, deleteFieldSelection, countWords, updateControlProperties, resolveComment, replyToComment, chooseListItem, chooseDate, CollaborationAuthority } from 'ooxml-core/docx/ui';
14
+ import { markSpecs, imageNodeSpec, fieldMarkerNodeSpec, noteReferenceNodeSpec, pageBreakNodeSpec, hardBreakNodeSpec, commentHistoryAttributes, tableCellStyle, tableStyle, createToggleFormat, expectDefined, paragraphBoxCss, normalizeThemeMode, applyThemeColors, refreshWordYjsPresence, normalizeRibbonActions, DirtyState, isWordYjsRemoteTransaction, REMOTE_TRANSACTION_META, repairCollaborativeDocumentIds, HEADER_FOOTER_INPUT, restoreSectionParts, commentThreadsFromDoc, restoreNoteParts, wordYjsPluginKey, wordYjsRedo, wordYjsUndo, CollaborationClient, createCollaborationIdGenerator, WordYjsCollaboration, insertContentControl, sectionPartsJson, NotePartsStep, notePartsJson, SectionPartsStep, fitZoomPercent, hasChangeAtCursor, hasAnyChange, commentIdsAtSelection, commentAnchors, documentWordCount, fieldGuardPlugin, tableStructureGuardPlugin, contentControlPlugin, trackChangesPlugin, wordYjsPresencePlugin, chartNodeSpec, placementClass, removeCommentThread, removeCommentAnchor, deleteComment, updateCommentThreads, addComment, toggleTrackChanges, goToNextChange, goToPreviousChange, rejectAllChanges, acceptAllChanges, rejectChangeAtCursor, acceptChangeAtCursor, goToComment, appendInlineNode, sameJson, sameRuns, PARAGRAPH_KEEP_KEYS, paragraphFromAttrs, parseBordersJson, isNavigableHref, setReviewRecordingPreferences, nodeNumbering, controlAtSelection, paragraphFormattingRevision, inlineNodeRun, formattingRevision, insertWordHardBreak, paragraphAttrs, resolveCellVisuals, themeDrawing, ribbonActionIdForLabel, removeWordLink, fieldResultRanges, wordLinkRangeAt, ligatureCss as ligatureCss$1, toggleCheckboxControl, runToInlineNodes as runToInlineNodes$1, backstageFocus, applyRunFormattingPatch, clearDirectRunFormatting, deleteFieldSelection, applyWordLink, ligatureStyle, wordHighlightColors, swatchColor, cssBorderSide, countWords, updateControlProperties, resolveComment, replyToComment, chooseListItem, chooseDate, CollaborationAuthority } from 'ooxml-core/docx/ui';
15
15
  export { CollaborationAuthority, CollaborationClient, RIBBON_ACTION_IDS, RIBBON_ACTION_LABELS, createCollaborationIdGenerator, darkTheme, isRibbonActionId, lightTheme, normalizeRibbonActions, repairCollaborativeDocumentIds, themeToCssVars } from 'ooxml-core/docx/ui';
16
16
  import { parseOmml, convertOmmlToLatex, convertOmmlToMathMl, EQUATION_GALLERY, latexToOmmlXml } from 'ooxml-core/math';
17
17
  import { PluginKey, TextSelection, Selection, EditorState, Plugin, NodeSelection } from 'prosemirror-state';
18
18
  import { EditorView, Decoration, DecorationSet } from 'prosemirror-view';
19
19
  import { loadDocument } from 'ooxml-core/docx/load';
20
- import { closeHistory, undo, redo, history } from 'prosemirror-history';
20
+ import { closeHistory, redo, undo, history } from 'prosemirror-history';
21
21
  import { createLayoutSession, layoutDocumentModel, pageNumbers, createFakeMeasurer, ligatureCss, cssFontStack, tokenizeRun, placeTab, cellVerticalOffset, fieldDisplayText, DEFAULT_FONT_SIZE_PT, pageNumberValues, sectionPageCounts, headerFooterSlotForPage, headerFooterForPage, paragraphFloats, floatPosition } from 'ooxml-core/docx/layout';
22
22
  import { sendableSteps, getVersion } from 'prosemirror-collab';
23
23
  import { sanitizeColor, sanitizeUserName, SequenceTracker, isValidId, classifyVersion, validateDisplayName } from 'ooxml-core/collab';
@@ -4966,7 +4966,7 @@ function dropCapCss(value) {
4966
4966
  ];
4967
4967
  }
4968
4968
  function paragraphStyle(attrs) {
4969
- const declarations2 = [
4969
+ const declarations = [
4970
4970
  attrs.align ? `text-align:${safeCssValue(attrs.align)}` : attrs.direction === "rtl" ? null : "text-align:left",
4971
4971
  attrs.direction && `direction:${safeCssValue(attrs.direction)}`,
4972
4972
  twipsCss(attrs.spacingBeforeTwips) && `margin-top:${twipsCss(attrs.spacingBeforeTwips)}`,
@@ -4985,7 +4985,7 @@ function paragraphStyle(attrs) {
4985
4985
  ...paragraphBoxCss(attrs.borders, attrs.shadingFill),
4986
4986
  ...dropCapCss(attrs.dropCap)
4987
4987
  ].filter(Boolean);
4988
- return declarations2.join(";");
4988
+ return declarations.join(";");
4989
4989
  }
4990
4990
  var schema = new Schema({
4991
4991
  nodes: {
@@ -13553,7 +13553,7 @@ function createMultilevelListDialog(getView, getModel, canEdit = () => true) {
13553
13553
  const preview = document.createElement("div");
13554
13554
  preview.setAttribute("role", "group");
13555
13555
  preview.setAttribute("aria-label", "List preview");
13556
- preview.style.cssText = "max-height:70px;overflow:auto;padding:8px;border:1px solid var(--dve-border,#ccc)";
13556
+ preview.style.cssText = "max-height:70px;overflow:auto;padding:8px;border:1px solid var(--dve-border,var(--office-border,#d1d5db))";
13557
13557
  const message = document.createElement("p");
13558
13558
  message.setAttribute("role", "alert");
13559
13559
  const ok = dialogButton("OK", true), cancel = dialogButton("Cancel");
@@ -18560,7 +18560,10 @@ var EditorCore = class {
18560
18560
  view;
18561
18561
  loaded;
18562
18562
  loadGeneration = 0;
18563
+ loading = false;
18563
18564
  readOnly = false;
18565
+ /** Set before mounting to render only the document surface. */
18566
+ surfaceOnly = false;
18564
18567
  locale = "en";
18565
18568
  reviewAuthor = "Author";
18566
18569
  theme = "auto";
@@ -18652,6 +18655,7 @@ var EditorCore = class {
18652
18655
  if (docChanged || transaction.selectionSet || remote) this.collab.presence?.schedule();
18653
18656
  }
18654
18657
  refreshControls() {
18658
+ this.element.dispatchEvent(new CustomEvent("editor-state-change"));
18655
18659
  this.parts.syncSection(this.shell.canvas, this.shell.paper);
18656
18660
  this.shell.headings?.sync(this.locale);
18657
18661
  if (this.shell.toolbar)
@@ -18710,37 +18714,37 @@ var EditorCore = class {
18710
18714
  };
18711
18715
 
18712
18716
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/aliases.css?raw
18713
- var aliases_default = "/* Chrome aliases: the pre-token custom property names, now derived from --dve-* tokens. */\n:host {\n --word: var(--dve-primary);\n --word-strong: color-mix(in srgb, var(--dve-primary) 70%, #000);\n --word-soft: color-mix(in srgb, var(--dve-primary) 12%, transparent);\n --blue: var(--word);\n --accent-soft: var(--word-soft);\n --ink: var(--dve-foreground);\n --muted: var(--dve-muted-foreground);\n --line: var(--dve-border);\n --canvas: var(--dve-muted);\n --surface: var(--dve-card);\n --chrome: var(--dve-background);\n}\n";
18717
+ var aliases_default = "/* Resolve legacy overrides at the editor boundary; canonical Office tokens otherwise inherit. */\n:host {\n --word: var(--dve-primary, var(--office-accent, #2563eb));\n --word-strong: color-mix(in srgb, var(--dve-primary, var(--office-accent, #2563eb)) 70%, #000);\n --word-soft: color-mix(\n in srgb,\n var(--dve-primary, var(--office-accent, #2563eb)) 12%,\n transparent\n );\n --blue: var(--word);\n --accent-soft: var(--dve-accent, var(--office-selected, #e5e7eb));\n --ink: var(--dve-foreground, var(--office-foreground, #1f2937));\n --muted: var(--dve-muted-foreground, var(--office-muted-foreground, #6b7280));\n --line: var(--dve-border, var(--office-border, #d1d5db));\n --canvas: var(--dve-muted, var(--office-surface, #f3f4f6));\n --surface: var(--dve-card, var(--office-surface, #f3f4f6));\n --chrome: var(--dve-background, var(--office-background, #fff));\n}\n";
18714
18718
 
18715
18719
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/base.css?raw
18716
- var base_default = ":host {\n display: block;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n min-height: 0;\n color: var(--ink);\n font:\n 13px/1.35 'Segoe UI',\n Arial,\n sans-serif;\n}\n.dve-frame {\n display: flex;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n min-height: 0;\n min-width: 0;\n flex-direction: column;\n overflow: hidden;\n border: 1px solid var(--line);\n background: var(--surface);\n box-shadow: 0 2px 8px #20212420;\n}\n/* Keyboard focus ring for every interactive part of the chrome. */\n:focus-visible {\n outline: 2px solid var(--dve-ring);\n outline-offset: 1px;\n}\n.dve-paper .ProseMirror:focus-visible {\n outline: none;\n}\n/* Only the chrome follows the theme; document pages stay white like Word's. */\n.dve-paper,\n.dve-print-page {\n color-scheme: light;\n}\n";
18720
+ var base_default = ":host {\n display: block;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n min-height: 0;\n color: var(--ink);\n font: var(--office-font-size, 13px) / var(--office-line-height, 1.4)\n var(--office-font, system-ui, sans-serif);\n}\n.dve-frame {\n display: flex;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n min-height: 0;\n min-width: 0;\n flex-direction: column;\n overflow: hidden;\n border: 1px solid var(--line);\n background: var(--surface);\n box-shadow: 0 2px 8px #20212420;\n}\n/* Keyboard focus ring for every interactive part of the chrome. */\n:focus-visible {\n outline: 2px solid var(--dve-ring, var(--office-ring, #2563eb));\n outline-offset: 1px;\n}\n.dve-paper .ProseMirror:focus-visible {\n outline: none;\n}\n/* Only the chrome follows the theme; document pages stay white like Word's. */\n.dve-paper,\n.dve-print-page {\n color-scheme: light;\n}\n";
18717
18721
 
18718
18722
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/ribbon.css?raw
18719
- var ribbon_default = ".dve-ribbon {\n display: flex;\n flex: none;\n min-width: 0;\n flex-direction: column;\n background: var(--surface);\n border-bottom: 1px solid var(--line);\n}\n/* The tab row is drawn by the shared office-ui-ribbon; these colour and size it. */\n.dve-ribbon {\n --office-ribbon-tab-height: 39px;\n --office-ribbon-contextual: #0f7b6c;\n --office-tab-indicator-width: 3px;\n}\n/* Word's File tab is text, not a filled button. */\n.dve-ribbon::part(file) {\n background: none;\n color: var(--word);\n font-weight: 600;\n}\n.dve-ribbon::part(file):hover {\n background: var(--word-soft);\n}\n.dve-ribbon::part(head) {\n padding: 0 14px;\n}\n.ribbon-panel {\n flex: none;\n box-sizing: border-box;\n min-width: 0;\n /* One height for every tab, as in Word, so switching tabs never moves the document. */\n height: 104px;\n display: flex;\n flex-wrap: nowrap;\n align-items: stretch;\n gap: 4px;\n padding: 6px 10px 4px;\n overflow-x: auto;\n overflow-y: hidden;\n overscroll-behavior-x: contain;\n scrollbar-width: thin;\n}\n.ribbon-panel[hidden] {\n display: none;\n}\n.ribbon-group {\n display: flex;\n flex: 0 0 auto;\n flex-wrap: wrap;\n align-content: flex-start;\n align-items: center;\n min-width: 0;\n max-width: 330px;\n gap: 4px 2px;\n padding: 2px 10px 18px 2px;\n border-right: 1px solid var(--line);\n}\n.ribbon-row {\n min-width: 0;\n display: flex;\n flex: 0 0 100%;\n flex-wrap: nowrap;\n align-items: center;\n gap: 2px;\n}\n.ribbon-group:last-child {\n border: 0;\n}\n.ribbon-group::after {\n position: absolute;\n right: 0;\n bottom: 2px;\n left: 0;\n color: var(--muted);\n font-size: 10px;\n line-height: 1.1;\n text-align: center;\n content: attr(data-caption);\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Clipboard'] {\n width: auto;\n max-width: none;\n flex-wrap: nowrap;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Clipboard'] button.ribbon-large {\n width: 56px;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Font'] {\n width: 338px;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Paragraph'] {\n /* The list-level and indent commands need room before the Sort and paragraph-mark buttons. */\n width: 310px;\n max-width: none;\n}\n.ribbon-group[data-label='Paragraph'] .ribbon-small {\n width: 24px;\n min-width: 24px;\n}\n.ribbon-group[data-label='Paragraph'] .ribbon-menu-compact {\n width: 36px;\n flex: none;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Styles'] select {\n width: 100%;\n max-width: 100%;\n}\n.dve-ribbon[data-editor-locale='de']\n .ribbon-panel[data-panel='Home']\n .ribbon-group[data-label='Font'] {\n width: 362px;\n max-width: none;\n}\n.dve-ribbon[data-editor-locale='fr']\n .ribbon-panel[data-panel='Home']\n .ribbon-group[data-label='Editing'],\n.dve-ribbon[data-editor-locale='de']\n .ribbon-panel[data-panel='Home']\n .ribbon-group[data-label='Editing'] {\n width: 176px;\n}\n.ribbon-group[data-label='Language'] {\n flex: 0 0 100%;\n}\n.ribbon-panel[data-panel='Review'] .ribbon-group[data-label='Tracking'],\n.ribbon-panel[data-panel='Review'] .ribbon-group[data-label='Changes'],\n.ribbon-panel[data-panel='Review'] .ribbon-group[data-label='Comments'] {\n flex: 0 0 auto;\n}\n.ribbon-group button {\n min-width: 32px;\n flex: none;\n height: 31px;\n border: 1px solid transparent;\n border-radius: 4px;\n background: transparent;\n color: var(--ink);\n font:\n 500 14px 'Segoe UI',\n Arial,\n sans-serif;\n cursor: pointer;\n padding: 0 4px;\n /* A label wider than its slot ends in an ellipsis (the title tooltip has the full text). */\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ribbon-row > button,\n.ribbon-row > select {\n flex: 0 1 auto;\n min-width: 0;\n}\n.ribbon-row > button {\n min-width: 32px;\n}\n.ribbon-group button:hover:not(:disabled) {\n background: var(--accent-soft);\n border-color: var(--line);\n}\n.ribbon-group button[aria-pressed='true'] {\n background: var(--accent-soft);\n color: var(--blue);\n}\n.ribbon-group .tool-bold {\n font-weight: 800;\n}\n.ribbon-group .tool-italic {\n font-style: italic;\n}\n.ribbon-group .tool-underline {\n text-decoration: underline;\n}\n.ribbon-group select {\n flex: none;\n max-width: 150px;\n height: 30px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n padding: 0 7px;\n color: var(--ink);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n /* Long localized labels end in an ellipsis; the full text is the title tooltip. */\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ribbon-group select option {\n background: var(--surface);\n color: var(--ink);\n}\n.ribbon-group select.font-family-select {\n width: 120px;\n}\n.ribbon-group select.font-size-select {\n width: 52px;\n}\n.ribbon-group[data-label='Font'] .ribbon-row button {\n min-width: 28px;\n padding-inline: 0;\n}\n/* Split-button carets stay narrow so the pair reads as one control. */\n.ribbon-group[data-label='Font'] .ribbon-row .ribbon-split .ribbon-caret {\n min-width: 14px;\n}\n.ribbon-group select.spacing-select {\n width: 150px;\n}\n.ribbon-group select.line-spacing-select {\n width: 112px;\n}\n.dve-body {\n display: flex;\n flex: 1;\n min-height: 0;\n min-width: 0;\n}\n.dve-canvas {\n flex: 1;\n min-height: 0;\n min-width: 0;\n max-height: none;\n overflow: auto;\n padding: 30px clamp(16px, 5vw, 70px) 60px;\n background: var(--canvas);\n overscroll-behavior: contain;\n}\n";
18723
+ var ribbon_default = ".dve-ribbon {\n display: flex;\n flex: none;\n min-width: 0;\n flex-direction: column;\n background: var(--surface);\n border-bottom: 1px solid var(--line);\n}\n/* The tab row is drawn by the shared office-ui-ribbon; these colour and size it. */\n.dve-ribbon {\n --office-ribbon-tab-height: 39px;\n --office-ribbon-contextual: #0f7b6c;\n --office-tab-indicator-width: 3px;\n}\n/* Word's File tab is text, not a filled button. */\n.dve-ribbon::part(file) {\n background: none;\n color: var(--word);\n font-weight: 600;\n}\n.dve-ribbon::part(file):hover {\n background: var(--word-soft);\n}\n.dve-ribbon::part(head) {\n padding: 0 14px;\n}\n.ribbon-panel {\n flex: none;\n box-sizing: border-box;\n min-width: 0;\n /* One height for every tab, as in Word, so switching tabs never moves the document. */\n height: 104px;\n display: flex;\n flex-wrap: nowrap;\n align-items: stretch;\n gap: 4px;\n padding: 6px 10px 4px;\n overflow-x: auto;\n overflow-y: hidden;\n overscroll-behavior-x: contain;\n scrollbar-width: thin;\n}\n.ribbon-panel[hidden] {\n display: none;\n}\n.ribbon-group {\n display: flex;\n flex: 0 0 auto;\n flex-wrap: wrap;\n align-content: flex-start;\n align-items: center;\n min-width: 0;\n max-width: 330px;\n gap: 4px 2px;\n padding: 2px 10px 18px 2px;\n border-right: 1px solid var(--line);\n}\n.ribbon-row {\n min-width: 0;\n display: flex;\n flex: 0 0 100%;\n flex-wrap: nowrap;\n align-items: center;\n gap: 2px;\n}\n.ribbon-group:last-child {\n border: 0;\n}\n.ribbon-group::after {\n position: absolute;\n right: 0;\n bottom: 2px;\n left: 0;\n color: var(--muted);\n font-size: 10px;\n line-height: 1.1;\n text-align: center;\n content: attr(data-caption);\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Clipboard'] {\n width: auto;\n max-width: none;\n flex-wrap: nowrap;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Clipboard'] button.ribbon-large {\n width: 56px;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Font'] {\n width: 338px;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Paragraph'] {\n /* The list-level and indent commands need room before the Sort and paragraph-mark buttons. */\n width: 310px;\n max-width: none;\n}\n.ribbon-group[data-label='Paragraph'] .ribbon-small {\n width: 24px;\n min-width: 24px;\n}\n.ribbon-group[data-label='Paragraph'] .ribbon-menu-compact {\n width: 36px;\n flex: none;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Styles'] select {\n width: 100%;\n max-width: 100%;\n}\n.dve-ribbon[data-editor-locale='de']\n .ribbon-panel[data-panel='Home']\n .ribbon-group[data-label='Font'] {\n width: 362px;\n max-width: none;\n}\n.dve-ribbon[data-editor-locale='fr']\n .ribbon-panel[data-panel='Home']\n .ribbon-group[data-label='Editing'],\n.dve-ribbon[data-editor-locale='de']\n .ribbon-panel[data-panel='Home']\n .ribbon-group[data-label='Editing'] {\n width: 176px;\n}\n.ribbon-group[data-label='Language'] {\n flex: 0 0 100%;\n}\n.ribbon-panel[data-panel='Review'] .ribbon-group[data-label='Tracking'],\n.ribbon-panel[data-panel='Review'] .ribbon-group[data-label='Changes'],\n.ribbon-panel[data-panel='Review'] .ribbon-group[data-label='Comments'] {\n flex: 0 0 auto;\n}\n.ribbon-group button {\n min-width: 32px;\n flex: none;\n height: 31px;\n border: 1px solid transparent;\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: transparent;\n color: var(--ink);\n font: 500 14px var(--office-font, system-ui, sans-serif);\n cursor: pointer;\n padding: 0 4px;\n /* A label wider than its slot ends in an ellipsis (the title tooltip has the full text). */\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ribbon-row > button,\n.ribbon-row > select {\n flex: 0 1 auto;\n min-width: 0;\n}\n.ribbon-row > button {\n min-width: 32px;\n}\n.ribbon-group button:hover:not(:disabled) {\n background: var(--accent-soft);\n border-color: var(--line);\n}\n.ribbon-group button[aria-pressed='true'] {\n background: var(--accent-soft);\n color: var(--blue);\n}\n.ribbon-group .tool-bold {\n font-weight: 800;\n}\n.ribbon-group .tool-italic {\n font-style: italic;\n}\n.ribbon-group .tool-underline {\n text-decoration: underline;\n}\n.ribbon-group select {\n flex: none;\n max-width: 150px;\n height: 30px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n padding: 0 7px;\n color: var(--ink);\n font: 12px var(--office-font, system-ui, sans-serif);\n /* Long localized labels end in an ellipsis; the full text is the title tooltip. */\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ribbon-group select option {\n background: var(--surface);\n color: var(--ink);\n}\n.ribbon-group select.font-family-select {\n width: 120px;\n}\n.ribbon-group select.font-size-select {\n width: 52px;\n}\n.ribbon-group[data-label='Font'] .ribbon-row button {\n min-width: 28px;\n padding-inline: 0;\n}\n/* Split-button carets stay narrow so the pair reads as one control. */\n.ribbon-group[data-label='Font'] .ribbon-row .ribbon-split .ribbon-caret {\n min-width: 14px;\n}\n.ribbon-group select.spacing-select {\n width: 150px;\n}\n.ribbon-group select.line-spacing-select {\n width: 112px;\n}\n.dve-body {\n display: flex;\n flex: 1;\n min-height: 0;\n min-width: 0;\n}\n.dve-canvas {\n flex: 1;\n min-height: 0;\n min-width: 0;\n max-height: none;\n overflow: auto;\n padding: 30px clamp(16px, 5vw, 70px) 60px;\n background: var(--canvas);\n overscroll-behavior: contain;\n}\n";
18720
18724
 
18721
18725
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/ribbon-buttons.css?raw
18722
- var ribbon_buttons_default = "/* Word-style icon commands: small icon buttons, large stacked buttons and split colour buttons. */\n.ribbon-group button.ribbon-small {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n min-width: 28px;\n height: 28px;\n padding: 0;\n}\n.ribbon-group button.ribbon-large {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n gap: 3px;\n width: 62px;\n height: 66px;\n padding: 4px 2px;\n font-size: 11px;\n line-height: 1.15;\n white-space: normal;\n text-align: center;\n}\n.ribbon-large > span {\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ribbon-stack {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.ribbon-split {\n display: inline-flex;\n align-items: center;\n}\n.ribbon-group .ribbon-split button.ribbon-color {\n position: relative;\n width: 28px;\n min-width: 28px;\n border-radius: 4px 0 0 4px;\n}\n.ribbon-color::after {\n position: absolute;\n right: 6px;\n bottom: 3px;\n left: 6px;\n height: 3px;\n background: var(--bar, transparent);\n outline: 1px solid var(--line);\n content: '';\n}\n.ribbon-group .ribbon-split .ribbon-caret {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n min-width: 14px;\n height: 28px;\n padding: 0;\n border-radius: 0 4px 4px 0;\n}\n.ribbon-popover {\n position: fixed;\n z-index: 1000;\n display: grid;\n grid-template-columns: repeat(6, 22px);\n gap: 4px;\n padding: 8px;\n border: 1px solid var(--line);\n border-radius: 6px;\n background: var(--surface);\n box-shadow: 0 6px 20px rgb(0 0 0 / 0.18);\n}\n.ribbon-popover .swatch {\n width: 22px;\n height: 22px;\n padding: 0;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--swatch);\n cursor: pointer;\n}\n.ribbon-popover .swatch:hover,\n.ribbon-popover .swatch:focus-visible {\n outline: 2px solid var(--blue);\n outline-offset: 1px;\n}\n.ribbon-popover .swatch-none {\n background: linear-gradient(135deg, transparent 46%, #c00000 46% 54%, transparent 54%);\n}\n.ribbon-group button.ribbon-inline {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 28px;\n padding: 0 8px 0 6px;\n font-size: 12px;\n}\n.ribbon-group button.ribbon-large {\n min-height: 66px;\n overflow: hidden;\n}\n.ribbon-group:has(.ribbon-large) {\n max-width: none;\n flex-wrap: wrap;\n}\n/* A row of stacked dropdown commands (Layout > Page Setup) stays on one line at the panel height. */\n.ribbon-group:has(> .ribbon-menu:not(.ribbon-menu-compact)) {\n max-width: none;\n flex-wrap: nowrap;\n}\n.ribbon-group button.ribbon-inline {\n font-weight: 400;\n}\n.ribbon-group button.ribbon-large {\n width: 70px;\n}\n.ribbon-panel[data-panel='Table'] .ribbon-group button.ribbon-large {\n width: 80px;\n}\n\n/* Word-style dropdown command: the native select is transparent and covers the whole control. */\n.ribbon-menu {\n box-sizing: border-box;\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 3px;\n width: 70px;\n height: 66px;\n padding: 4px 2px;\n border: 1px solid transparent;\n border-radius: 4px;\n color: var(--ink);\n font-size: 11px;\n line-height: 1.15;\n text-align: center;\n}\n.ribbon-menu:hover {\n border-color: var(--line);\n background: var(--accent-soft);\n}\n.ribbon-menu:focus-within {\n outline: 2px solid var(--blue);\n outline-offset: -1px;\n}\n.ribbon-menu > span {\n max-width: 100%;\n}\n.ribbon-menu > .ribbon-icon:last-of-type {\n margin-top: -2px;\n}\n.ribbon-menu-compact {\n flex-direction: row;\n width: 44px;\n height: 28px;\n padding: 0 4px;\n justify-content: center;\n gap: 2px;\n}\n.ribbon-menu-compact > .ribbon-icon:last-of-type {\n margin-top: 0;\n}\n.ribbon-group .ribbon-menu select.ribbon-menu-input {\n position: absolute;\n inset: 0;\n width: 100%;\n max-width: none;\n height: 100%;\n opacity: 0;\n cursor: pointer;\n border: 0;\n}\n.ribbon-menu[data-dve-hidden] {\n display: none;\n}\n.ribbon-stack .ribbon-small,\n.ribbon-stack .ribbon-inline {\n height: 22px;\n}\n.ribbon-stack .ribbon-inline {\n justify-content: flex-start;\n}\n.ribbon-panel[data-panel='Header & Footer'] .ribbon-stack button.ribbon-inline {\n height: 22px;\n}\n.ribbon-panel[data-panel='Header & Footer'] button.ribbon-large {\n width: 112px;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Editing'] {\n width: auto;\n min-width: 110px;\n}\n.dve-painting,\n.dve-painting * {\n cursor: copy;\n}\n";
18726
+ var ribbon_buttons_default = "/* Word-style icon commands: small icon buttons, large stacked buttons and split colour buttons. */\n.ribbon-group button.ribbon-small {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n min-width: 28px;\n height: 28px;\n padding: 0;\n}\n.ribbon-group button.ribbon-large {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n gap: 3px;\n width: 62px;\n height: 66px;\n padding: 4px 2px;\n font-size: 11px;\n line-height: 1.15;\n white-space: normal;\n text-align: center;\n}\n.ribbon-large > span {\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ribbon-stack {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.ribbon-split {\n display: inline-flex;\n align-items: center;\n}\n.ribbon-group .ribbon-split button.ribbon-color {\n position: relative;\n width: 28px;\n min-width: 28px;\n border-radius: 4px 0 0 4px;\n}\n.ribbon-color::after {\n position: absolute;\n right: 6px;\n bottom: 3px;\n left: 6px;\n height: 3px;\n background: var(--bar, transparent);\n outline: 1px solid var(--line);\n content: '';\n}\n.ribbon-group .ribbon-split .ribbon-caret {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n min-width: 14px;\n height: 28px;\n padding: 0;\n border-radius: 0 4px 4px 0;\n}\n.ribbon-popover {\n position: fixed;\n z-index: 1000;\n display: grid;\n grid-template-columns: repeat(6, 22px);\n gap: 4px;\n padding: 8px;\n border: 1px solid var(--line);\n border-radius: 6px;\n background: var(--surface);\n box-shadow: 0 6px 20px rgb(0 0 0 / 0.18);\n}\n.ribbon-popover .swatch {\n width: 22px;\n height: 22px;\n padding: 0;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--swatch);\n cursor: pointer;\n}\n.ribbon-popover .swatch:hover,\n.ribbon-popover .swatch:focus-visible {\n outline: 2px solid var(--blue);\n outline-offset: 1px;\n}\n.ribbon-popover .swatch-none {\n background: linear-gradient(135deg, transparent 46%, #c00000 46% 54%, transparent 54%);\n}\n.ribbon-group button.ribbon-inline {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 28px;\n padding: 0 8px 0 6px;\n font-size: 12px;\n}\n.ribbon-group button.ribbon-large {\n min-height: 66px;\n overflow: hidden;\n}\n.ribbon-group:has(.ribbon-large) {\n max-width: none;\n flex-wrap: wrap;\n}\n/* A row of stacked dropdown commands (Layout > Page Setup) stays on one line at the panel height. */\n.ribbon-group:has(> .ribbon-menu:not(.ribbon-menu-compact)) {\n max-width: none;\n flex-wrap: nowrap;\n}\n.ribbon-group button.ribbon-inline {\n font-weight: 400;\n}\n.ribbon-group button.ribbon-large {\n width: 70px;\n}\n.ribbon-panel[data-panel='Table'] .ribbon-group button.ribbon-large {\n width: 80px;\n}\n\n/* Word-style dropdown command: the native select is transparent and covers the whole control. */\n.ribbon-menu {\n box-sizing: border-box;\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 3px;\n width: 70px;\n height: 66px;\n padding: 4px 2px;\n border: 1px solid transparent;\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n color: var(--ink);\n font-size: 11px;\n line-height: 1.15;\n text-align: center;\n}\n.ribbon-menu:hover {\n border-color: var(--line);\n background: var(--accent-soft);\n}\n.ribbon-menu:focus-within {\n outline: 2px solid var(--blue);\n outline-offset: -1px;\n}\n.ribbon-menu > span {\n max-width: 100%;\n}\n.ribbon-menu > .ribbon-icon:last-of-type {\n margin-top: -2px;\n}\n.ribbon-menu-compact {\n flex-direction: row;\n width: 44px;\n height: 28px;\n padding: 0 4px;\n justify-content: center;\n gap: 2px;\n}\n.ribbon-menu-compact > .ribbon-icon:last-of-type {\n margin-top: 0;\n}\n.ribbon-group .ribbon-menu select.ribbon-menu-input {\n position: absolute;\n inset: 0;\n width: 100%;\n max-width: none;\n height: 100%;\n opacity: 0;\n cursor: pointer;\n border: 0;\n}\n.ribbon-menu[data-dve-hidden] {\n display: none;\n}\n.ribbon-stack .ribbon-small,\n.ribbon-stack .ribbon-inline {\n height: 22px;\n}\n.ribbon-stack .ribbon-inline {\n justify-content: flex-start;\n}\n.ribbon-panel[data-panel='Header & Footer'] .ribbon-stack button.ribbon-inline {\n height: 22px;\n}\n.ribbon-panel[data-panel='Header & Footer'] button.ribbon-large {\n width: 112px;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Editing'] {\n width: auto;\n min-width: 110px;\n}\n.dve-painting,\n.dve-painting * {\n cursor: copy;\n}\n";
18723
18727
 
18724
18728
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/ribbon-gallery.css?raw
18725
- var ribbon_gallery_default = "/* Styles gallery: a scrolling strip of tiles with a preview of each style. */\n.ribbon-gallery {\n display: flex;\n gap: 3px;\n width: 216px;\n height: 66px;\n padding: 2px;\n overflow-x: auto;\n overflow-y: hidden;\n scroll-snap-type: x proximity;\n scrollbar-width: none;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n}\n.ribbon-group .ribbon-gallery .style-tile {\n flex: 0 0 78px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n height: 58px;\n min-width: 0;\n padding: 3px 2px;\n border: 1px solid transparent;\n scroll-snap-align: start;\n}\n.style-sample {\n max-width: 100%;\n overflow: hidden;\n line-height: 1.1;\n white-space: nowrap;\n}\n.style-name {\n max-width: 100%;\n overflow: hidden;\n color: var(--muted);\n font-size: 10px;\n text-overflow: ellipsis;\n}\n.ribbon-group .ribbon-gallery .style-tile[aria-pressed='true'] {\n border-color: var(--blue);\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Styles'] {\n width: 240px;\n max-width: none;\n flex-wrap: nowrap;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Styles']:not([data-collapsed]) {\n flex: 1 0 240px;\n min-width: 240px;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Styles'] .ribbon-gallery {\n flex: 1;\n min-width: 0;\n width: auto;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Styles'] .ribbon-stack {\n gap: 2px;\n}\n\n.ribbon-group[data-label='Section breaks'] {\n width: 210px;\n}\n.ribbon-group[data-label='Page numbers'] {\n width: 400px;\n}\n\n/* Language: labelled controls flow in short columns instead of one tall stack. */\n.ribbon-group[data-label='Language'] {\n flex: 0 0 auto;\n flex-direction: column;\n flex-wrap: wrap;\n align-content: flex-start;\n max-height: 86px;\n max-width: none;\n column-gap: 12px;\n overflow: hidden;\n}\n";
18729
+ var ribbon_gallery_default = "/* Styles gallery: a scrolling strip of tiles with a preview of each style. */\n.ribbon-gallery {\n display: flex;\n gap: 3px;\n width: 216px;\n height: 66px;\n padding: 2px;\n overflow-x: auto;\n overflow-y: hidden;\n scroll-snap-type: x proximity;\n scrollbar-width: none;\n border: 1px solid var(--line);\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: var(--surface);\n}\n.ribbon-group .ribbon-gallery .style-tile {\n flex: 0 0 78px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n height: 58px;\n min-width: 0;\n padding: 3px 2px;\n border: 1px solid transparent;\n scroll-snap-align: start;\n}\n.style-sample {\n max-width: 100%;\n overflow: hidden;\n line-height: 1.1;\n white-space: nowrap;\n}\n.style-name {\n max-width: 100%;\n overflow: hidden;\n color: var(--muted);\n font-size: 10px;\n text-overflow: ellipsis;\n}\n.ribbon-group .ribbon-gallery .style-tile[aria-pressed='true'] {\n border-color: var(--blue);\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Styles'] {\n width: 240px;\n max-width: none;\n flex-wrap: nowrap;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Styles']:not([data-collapsed]) {\n flex: 1 0 240px;\n min-width: 240px;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Styles'] .ribbon-gallery {\n flex: 1;\n min-width: 0;\n width: auto;\n}\n.ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Styles'] .ribbon-stack {\n gap: 2px;\n}\n\n.ribbon-group[data-label='Section breaks'] {\n width: 210px;\n}\n.ribbon-group[data-label='Page numbers'] {\n width: 400px;\n}\n\n/* Language: labelled controls flow in short columns instead of one tall stack. */\n.ribbon-group[data-label='Language'] {\n flex: 0 0 auto;\n flex-direction: column;\n flex-wrap: wrap;\n align-content: flex-start;\n max-height: 86px;\n max-width: none;\n column-gap: 12px;\n overflow: hidden;\n}\n";
18726
18730
 
18727
18731
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/ribbon-widgets.css?raw
18728
- var ribbon_widgets_default = ".dve-keytip {\n position: absolute;\n bottom: -2px;\n left: 50%;\n z-index: 70;\n transform: translateX(-50%);\n min-width: 16px;\n padding: 1px 4px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: #1f1f1f;\n color: #fff;\n font:\n 600 11px/14px 'Segoe UI',\n Arial,\n sans-serif;\n text-align: center;\n pointer-events: none;\n}\n\n.ribbon-popover.dve-word-count {\n grid-template-columns: auto auto;\n gap: 4px 24px;\n padding: 10px 14px;\n color: var(--ink);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.dve-word-count strong {\n text-align: right;\n}\n\n.ribbon-spinner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 170px;\n font-size: 12px;\n white-space: nowrap;\n}\n.ribbon-panel[data-panel='Header & Footer'] .ribbon-group[data-label='Position'] {\n max-width: none;\n}\n.ribbon-panel[data-panel='Header & Footer'] .ribbon-group[data-label='Position'] .ribbon-spinner {\n width: auto;\n min-width: 280px;\n}\n.ribbon-panel[data-panel='Header & Footer'] .ribbon-spinner input {\n flex: none;\n}\n.ribbon-group .ribbon-spinner input {\n width: 64px;\n height: 24px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n color: var(--ink);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n}\n\n/* Editable combo boxes (font family and size). */\n.ribbon-combo {\n display: inline-flex;\n align-items: stretch;\n height: 26px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n}\n.ribbon-combo:focus-within {\n border-color: var(--blue);\n outline: 1px solid var(--blue);\n}\n.ribbon-combo.font-family-combo {\n width: 132px;\n}\n.ribbon-combo.font-size-combo {\n width: 58px;\n}\n.ribbon-combo input {\n flex: 1;\n min-width: 0;\n padding: 0 6px;\n border: 0;\n background: transparent;\n color: var(--ink);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n outline: none;\n}\n.ribbon-group .ribbon-combo .ribbon-combo-caret {\n width: 18px;\n min-width: 18px;\n height: 100%;\n border-radius: 0;\n}\n.ribbon-popover.ribbon-list {\n display: flex;\n flex-direction: column;\n gap: 0;\n min-width: 160px;\n max-height: 280px;\n overflow-y: auto;\n padding: 4px 0;\n}\n.ribbon-list button[role='option'] {\n padding: 4px 12px;\n border: 0;\n background: none;\n color: var(--ink);\n font:\n 14px 'Segoe UI',\n Arial,\n sans-serif;\n text-align: left;\n cursor: pointer;\n}\n.ribbon-list button[role='option']:hover,\n.ribbon-list button[role='option']:focus-visible {\n background: var(--accent-soft);\n outline: none;\n}\n.ribbon-list button[aria-selected='true'] {\n color: var(--blue);\n font-weight: 600;\n}\n\n.ribbon-combo[data-dve-hidden] {\n display: none;\n}\n\n/* Tiles preview a style on paper, so a style's own colours stay legible in dark themes too. */\n.ribbon-group .ribbon-gallery .style-tile {\n background: #fff;\n color: #1f1f1f;\n}\n.ribbon-group .ribbon-gallery .style-tile:hover:not(:disabled) {\n background: #f3f7fc;\n border-color: #a8c4e6;\n}\n.ribbon-group .ribbon-gallery .style-tile[aria-pressed='true'] {\n border-color: var(--blue);\n background: #e8f0fa;\n}\n.ribbon-gallery .style-name {\n color: #555;\n}\n.ribbon-group .ribbon-gallery .style-tile:disabled {\n opacity: 0.6;\n}\n\n/* Disabled controls look disabled, and keyboard focus is always visible. */\n.ribbon-group button:disabled,\n.ribbon-group select:disabled,\n.ribbon-group input:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.ribbon-menu:has(select:disabled),\n.ribbon-combo:has(input:disabled),\n.ribbon-spinner:has(input:disabled),\n.ribbon-split:has(button:disabled) {\n opacity: 0.4;\n}\n.ribbon-menu:has(select:disabled):hover {\n border-color: transparent;\n background: none;\n}\n.ribbon-group button:focus-visible {\n outline: 2px solid var(--blue);\n outline-offset: -2px;\n}\n.ribbon-menu:has(select:disabled) select,\n.ribbon-split:has(button:disabled) button:disabled {\n opacity: 1;\n}\n\n/* Dialog launcher: the small corner button of a group, as in Word. */\n.ribbon-group {\n position: relative;\n}\n.ribbon-group .ribbon-launcher {\n position: absolute;\n right: 2px;\n bottom: 0;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n min-width: 14px;\n height: 14px;\n padding: 0;\n color: var(--muted);\n}\n.ribbon-group .ribbon-launcher:hover:not(:disabled) {\n color: var(--ink);\n}\n";
18732
+ var ribbon_widgets_default = ".dve-keytip {\n position: absolute;\n bottom: -2px;\n left: 50%;\n z-index: 70;\n transform: translateX(-50%);\n min-width: 16px;\n padding: 1px 4px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--office-keytip-background, #fff);\n color: var(--office-keytip-foreground, #1f1f1f);\n font: 600 11px/14px var(--office-font, system-ui, sans-serif);\n text-align: center;\n pointer-events: none;\n}\n\n.ribbon-popover.dve-word-count {\n grid-template-columns: auto auto;\n gap: 4px 24px;\n padding: 10px 14px;\n color: var(--ink);\n font: 12px var(--office-font, system-ui, sans-serif);\n}\n.dve-word-count strong {\n text-align: right;\n}\n\n.ribbon-spinner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 170px;\n font-size: 12px;\n white-space: nowrap;\n}\n.ribbon-panel[data-panel='Header & Footer'] .ribbon-group[data-label='Position'] {\n max-width: none;\n}\n.ribbon-panel[data-panel='Header & Footer'] .ribbon-group[data-label='Position'] .ribbon-spinner {\n width: auto;\n min-width: 280px;\n}\n.ribbon-panel[data-panel='Header & Footer'] .ribbon-spinner input {\n flex: none;\n}\n.ribbon-group .ribbon-spinner input {\n width: 64px;\n height: 24px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n color: var(--ink);\n font: 12px var(--office-font, system-ui, sans-serif);\n}\n\n/* Editable combo boxes (font family and size). */\n.ribbon-combo {\n display: inline-flex;\n align-items: stretch;\n height: 26px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n}\n.ribbon-combo:focus-within {\n border-color: var(--blue);\n outline: 1px solid var(--blue);\n}\n.ribbon-combo.font-family-combo {\n width: 132px;\n}\n.ribbon-combo.font-size-combo {\n width: 58px;\n}\n.ribbon-combo input {\n flex: 1;\n min-width: 0;\n padding: 0 6px;\n border: 0;\n background: transparent;\n color: var(--ink);\n font: 12px var(--office-font, system-ui, sans-serif);\n outline: none;\n}\n.ribbon-group .ribbon-combo .ribbon-combo-caret {\n width: 18px;\n min-width: 18px;\n height: 100%;\n border-radius: 0;\n}\n.ribbon-popover.ribbon-list {\n display: flex;\n flex-direction: column;\n gap: 0;\n min-width: 160px;\n max-height: 280px;\n overflow-y: auto;\n padding: 4px 0;\n}\n.ribbon-list button[role='option'] {\n padding: 4px 12px;\n border: 0;\n background: none;\n color: var(--ink);\n font: 14px var(--office-font, system-ui, sans-serif);\n text-align: left;\n cursor: pointer;\n}\n.ribbon-list button[role='option']:hover,\n.ribbon-list button[role='option']:focus-visible {\n background: var(--accent-soft);\n outline: none;\n}\n.ribbon-list button[aria-selected='true'] {\n color: var(--blue);\n font-weight: 600;\n}\n\n.ribbon-combo[data-dve-hidden] {\n display: none;\n}\n\n/* Tiles preview a style on paper, so a style's own colours stay legible in dark themes too. */\n.ribbon-group .ribbon-gallery .style-tile {\n background: #fff;\n color: #1f1f1f;\n}\n.ribbon-group .ribbon-gallery .style-tile:hover:not(:disabled) {\n background: #f3f7fc;\n border-color: #a8c4e6;\n}\n.ribbon-group .ribbon-gallery .style-tile[aria-pressed='true'] {\n border-color: var(--blue);\n background: #e8f0fa;\n}\n.ribbon-gallery .style-name {\n color: #555;\n}\n.ribbon-group .ribbon-gallery .style-tile:disabled {\n opacity: 0.6;\n}\n\n/* Disabled controls look disabled, and keyboard focus is always visible. */\n.ribbon-group button:disabled,\n.ribbon-group select:disabled,\n.ribbon-group input:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.ribbon-menu:has(select:disabled),\n.ribbon-combo:has(input:disabled),\n.ribbon-spinner:has(input:disabled),\n.ribbon-split:has(button:disabled) {\n opacity: 0.4;\n}\n.ribbon-menu:has(select:disabled):hover {\n border-color: transparent;\n background: none;\n}\n.ribbon-group button:focus-visible {\n outline: 2px solid var(--blue);\n outline-offset: -2px;\n}\n.ribbon-menu:has(select:disabled) select,\n.ribbon-split:has(button:disabled) button:disabled {\n opacity: 1;\n}\n\n/* Dialog launcher: the small corner button of a group, as in Word. */\n.ribbon-group {\n position: relative;\n}\n.ribbon-group .ribbon-launcher {\n position: absolute;\n right: 2px;\n bottom: 0;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n min-width: 14px;\n height: 14px;\n padding: 0;\n color: var(--muted);\n}\n.ribbon-group .ribbon-launcher:hover:not(:disabled) {\n color: var(--ink);\n}\n";
18729
18733
 
18730
18734
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/ribbon-styles-group.css?raw
18731
- var ribbon_styles_group_default = "/* Styles group: gallery, previous/next/more strip, expanded gallery and pane. */\n.style-strip {\n display: flex;\n flex-direction: column;\n gap: 1px;\n width: 16px;\n}\n.ribbon-group .style-strip .style-strip-button {\n flex: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n min-width: 16px;\n height: 16px;\n min-height: 0;\n padding: 0;\n border-radius: 2px;\n}\n.ribbon-popover.styles-popover {\n display: block;\n max-height: min(70vh, 520px);\n max-width: 420px;\n overflow-y: auto;\n padding: 8px;\n}\n.styles-section-title {\n margin: 4px 2px 6px;\n color: var(--muted);\n font:\n 600 11px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.styles-grid {\n display: grid;\n grid-template-columns: repeat(4, 88px);\n gap: 4px;\n}\n.styles-popover .style-tile,\n.dve-styles-pane .style-tile {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n height: 50px;\n padding: 4px 2px;\n border: 1px solid #d5d8dc;\n background: #fff;\n color: #1f1f1f;\n cursor: pointer;\n}\n.styles-popover .style-tile[aria-pressed='true'],\n.dve-styles-pane .style-tile[aria-pressed='true'] {\n border-color: var(--blue);\n background: #e8f0fa;\n}\n.styles-popover .style-tile:hover:not(:disabled),\n.dve-styles-pane .style-tile:hover:not(:disabled) {\n border-color: #a8c4e6;\n background: #f3f7fc;\n}\n.styles-commands {\n display: grid;\n gap: 2px;\n margin-top: 8px;\n padding-top: 6px;\n border-top: 1px solid var(--line);\n}\n.styles-command {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border: 0;\n border-radius: 3px;\n background: none;\n color: var(--ink);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n text-align: left;\n cursor: pointer;\n}\n.styles-command:hover:not(:disabled) {\n background: var(--accent-soft);\n}\n.styles-command:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.dve-styles-pane {\n flex: none;\n width: 260px;\n min-height: 0;\n overflow-y: auto;\n padding: 10px 12px;\n border-left: 1px solid var(--line);\n background: var(--surface);\n color: var(--ink);\n}\n.dve-styles-pane[hidden] {\n display: none;\n}\n.dve-styles-pane-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.dve-styles-pane h2 {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n}\n.dve-styles-pane h3 {\n margin: 14px 0 6px;\n color: var(--muted);\n font:\n 600 11px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.dve-styles-pane-header button {\n border: 0;\n background: none;\n color: var(--muted);\n font-size: 18px;\n cursor: pointer;\n}\n.dve-styles-pane-list {\n display: grid;\n gap: 4px;\n}\n.dve-styles-pane .style-tile {\n flex-direction: row;\n justify-content: space-between;\n height: 34px;\n padding: 2px 10px;\n}\n.dve-styles-pane .style-name {\n color: #555;\n}\n";
18735
+ var ribbon_styles_group_default = "/* Styles group: gallery, previous/next/more strip, expanded gallery and pane. */\n.style-strip {\n display: flex;\n flex-direction: column;\n gap: 1px;\n width: 16px;\n}\n.ribbon-group .style-strip .style-strip-button {\n flex: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n min-width: 16px;\n height: 16px;\n min-height: 0;\n padding: 0;\n border-radius: 2px;\n}\n.ribbon-popover.styles-popover {\n display: block;\n max-height: min(70vh, 520px);\n max-width: 420px;\n overflow-y: auto;\n padding: 8px;\n}\n.styles-section-title {\n margin: 4px 2px 6px;\n color: var(--muted);\n font: 600 11px var(--office-font, system-ui, sans-serif);\n}\n.styles-grid {\n display: grid;\n grid-template-columns: repeat(4, 88px);\n gap: 4px;\n}\n.styles-popover .style-tile,\n.dve-styles-pane .style-tile {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n height: 50px;\n padding: 4px 2px;\n border: 1px solid #d5d8dc;\n background: #fff;\n color: #1f1f1f;\n cursor: pointer;\n}\n.styles-popover .style-tile[aria-pressed='true'],\n.dve-styles-pane .style-tile[aria-pressed='true'] {\n border-color: var(--blue);\n background: #e8f0fa;\n}\n.styles-popover .style-tile:hover:not(:disabled),\n.dve-styles-pane .style-tile:hover:not(:disabled) {\n border-color: #a8c4e6;\n background: #f3f7fc;\n}\n.styles-commands {\n display: grid;\n gap: 2px;\n margin-top: 8px;\n padding-top: 6px;\n border-top: 1px solid var(--line);\n}\n.styles-command {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border: 0;\n border-radius: 3px;\n background: none;\n color: var(--ink);\n font: 12px var(--office-font, system-ui, sans-serif);\n text-align: left;\n cursor: pointer;\n}\n.styles-command:hover:not(:disabled) {\n background: var(--accent-soft);\n}\n.styles-command:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.dve-styles-pane {\n flex: none;\n width: 260px;\n min-height: 0;\n overflow-y: auto;\n padding: 10px 12px;\n border-left: 1px solid var(--line);\n background: var(--surface);\n color: var(--ink);\n}\n.dve-styles-pane[hidden] {\n display: none;\n}\n.dve-styles-pane-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.dve-styles-pane h2 {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n}\n.dve-styles-pane h3 {\n margin: 14px 0 6px;\n color: var(--muted);\n font: 600 11px var(--office-font, system-ui, sans-serif);\n}\n.dve-styles-pane-header button {\n border: 0;\n background: none;\n color: var(--muted);\n font-size: 18px;\n cursor: pointer;\n}\n.dve-styles-pane-list {\n display: grid;\n gap: 4px;\n}\n.dve-styles-pane .style-tile {\n flex-direction: row;\n justify-content: space-between;\n height: 34px;\n padding: 2px 10px;\n}\n.dve-styles-pane .style-name {\n color: #555;\n}\n";
18732
18736
 
18733
18737
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/ribbon-popups.css?raw
18734
- var ribbon_popups_default = "/* Editing: a row-height command with a caret menu, and the Go To panel. */\n.ribbon-split-inline {\n display: flex;\n align-items: center;\n height: 22px;\n}\n.ribbon-group .ribbon-split-inline .ribbon-inline {\n flex: 1;\n width: auto;\n}\n.ribbon-menu.ribbon-menu-caret {\n flex: none;\n width: 18px;\n height: 22px;\n padding: 0;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: 0;\n}\n.ribbon-menu.ribbon-menu-caret > .ribbon-icon:last-of-type {\n margin-top: 0;\n}\n.ribbon-popover.go-to-panel {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 8px;\n width: 280px;\n padding: 10px;\n}\n.go-to-panel label {\n display: grid;\n gap: 4px;\n color: var(--muted);\n font:\n 11px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.go-to-panel select {\n height: 28px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n color: var(--ink);\n}\n.go-to-list {\n display: flex;\n flex-direction: column;\n max-height: 220px;\n overflow-y: auto;\n}\n.go-to-list button {\n overflow: hidden;\n padding: 5px 8px;\n border: 0;\n background: none;\n color: var(--ink);\n font:\n 13px 'Segoe UI',\n Arial,\n sans-serif;\n text-align: left;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n.go-to-list button:hover,\n.go-to-list button:focus-visible {\n background: var(--accent-soft);\n}\n.go-to-list p {\n margin: 6px 8px;\n color: var(--muted);\n font-size: 12px;\n}\n\n/* Insert > Table size picker. */\n.ribbon-popover.table-picker {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 8px;\n width: 206px;\n padding: 10px;\n}\n.table-picker-caption {\n color: var(--ink);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.table-picker-grid {\n display: grid;\n grid-template-columns: repeat(10, 18px);\n gap: 2px;\n outline: none;\n}\n.table-picker-grid:focus-visible {\n outline: 2px solid var(--blue);\n outline-offset: 2px;\n}\n.table-picker-grid [role='gridcell'] {\n width: 18px;\n height: 18px;\n border: 1px solid var(--line);\n background: var(--surface);\n cursor: pointer;\n}\n.table-picker-grid [role='gridcell'].active {\n border-color: var(--blue);\n background: color-mix(in srgb, var(--blue) 22%, transparent);\n}\n.table-picker-custom {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 6px;\n padding-top: 6px;\n border-top: 1px solid var(--line);\n}\n.table-picker-custom label {\n display: grid;\n gap: 2px;\n color: var(--muted);\n font:\n 11px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.table-picker-custom input {\n height: 24px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n color: var(--ink);\n}\n.table-picker-insert {\n grid-column: 1 / -1;\n height: 26px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n color: var(--ink);\n cursor: pointer;\n}\n.table-picker-insert:hover {\n background: var(--accent-soft);\n}\n\n/* Colour picker: the shared office-ui-color-grid in a ribbon popover. */\n.ribbon-popover.color-grid {\n display: block;\n padding: 4px;\n}\n.color-grid-input {\n position: absolute;\n width: 0;\n height: 0;\n padding: 0;\n border: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n/* Layout galleries: page thumbnails with a name and detail, for Margins, Size, Orientation, Columns. */\n.ribbon-menu-gallery select.ribbon-menu-input {\n pointer-events: none;\n}\n.ribbon-popover.ribbon-gallery-menu {\n display: flex;\n flex-direction: column;\n gap: 0;\n min-width: 220px;\n max-height: min(70vh, 460px);\n overflow-y: auto;\n padding: 4px;\n}\n.ribbon-gallery-menu button {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 6px 10px;\n border: 1px solid transparent;\n border-radius: 3px;\n background: none;\n color: var(--ink);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n text-align: left;\n cursor: pointer;\n}\n.ribbon-gallery-menu button:hover,\n.ribbon-gallery-menu button:focus-visible {\n border-color: var(--line);\n background: var(--accent-soft);\n outline: none;\n}\n.ribbon-gallery-menu button[aria-checked='true'] {\n border-color: var(--blue);\n}\n.gallery-words {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.gallery-name {\n font-weight: 600;\n}\n.gallery-detail {\n color: var(--muted);\n font-size: 11px;\n}\n.gallery-thumb {\n flex: none;\n}\n.gallery-thumb .thumb-page {\n fill: #fff;\n stroke: #8a8886;\n stroke-width: 0.8;\n}\n.gallery-thumb .thumb-line {\n stroke: #a19f9d;\n stroke-width: 1.2;\n}\n\n/* Collapsed groups: a narrow ribbon folds its rightmost groups into one dropdown button each. */\n.ribbon-overflow-button {\n display: none !important;\n}\n.ribbon-group[data-collapsed] {\n width: auto !important;\n min-width: 0;\n max-width: none;\n flex-wrap: nowrap;\n}\n.ribbon-group[data-collapsed] > :not(.ribbon-overflow-button) {\n display: none !important;\n}\n.ribbon-group[data-collapsed] > .ribbon-overflow-button {\n display: flex !important;\n}\n.ribbon-group button.ribbon-overflow-button[aria-expanded='true'] {\n border-color: var(--line);\n background: var(--accent-soft);\n}\n.ribbon-popover.ribbon-overflow-panel {\n display: block;\n padding: 6px 8px 2px;\n}\n.ribbon-overflow-panel .ribbon-group {\n height: 84px;\n max-width: none;\n padding-right: 2px;\n border: 0;\n}\n.ribbon-group[data-collapsed]::after {\n display: none;\n}\n/* The Language group's tall stack of fields reads as one column inside its dropdown. */\n.ribbon-overflow-panel .ribbon-group.multilingual-controls {\n width: 300px !important;\n height: auto;\n max-height: min(70vh, 420px);\n flex-direction: column;\n flex-wrap: nowrap;\n align-items: stretch;\n padding-bottom: 20px;\n overflow-y: auto;\n}\n.gallery-thumb .thumb-edge-on {\n stroke: var(--ink);\n stroke-width: 1.6;\n}\n.gallery-thumb .thumb-edge-off {\n stroke: var(--muted);\n stroke-width: 1;\n stroke-dasharray: 1.5 1.5;\n}\n.gallery-thumb .thumb-line-dark {\n stroke: var(--ink);\n}\n.gallery-thumb .thumb-arrow {\n fill: none;\n stroke: var(--blue);\n stroke-width: 1.2;\n}\n.ribbon-gallery-menu .gallery-command {\n margin-top: 4px;\n padding-top: 8px;\n border-top: 1px solid var(--line);\n border-radius: 0;\n}\n";
18738
+ var ribbon_popups_default = "/* Editing: a row-height command with a caret menu, and the Go To panel. */\n.ribbon-split-inline {\n display: flex;\n align-items: center;\n height: 22px;\n}\n.ribbon-group .ribbon-split-inline .ribbon-inline {\n flex: 1;\n width: auto;\n}\n.ribbon-menu.ribbon-menu-caret {\n flex: none;\n width: 18px;\n height: 22px;\n padding: 0;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n gap: 0;\n}\n.ribbon-menu.ribbon-menu-caret > .ribbon-icon:last-of-type {\n margin-top: 0;\n}\n.ribbon-popover.go-to-panel {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 8px;\n width: 280px;\n padding: 10px;\n}\n.go-to-panel label {\n display: grid;\n gap: 4px;\n color: var(--muted);\n font: 11px var(--office-font, system-ui, sans-serif);\n}\n.go-to-panel select {\n height: 28px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n color: var(--ink);\n}\n.go-to-list {\n display: flex;\n flex-direction: column;\n max-height: 220px;\n overflow-y: auto;\n}\n.go-to-list button {\n overflow: hidden;\n padding: 5px 8px;\n border: 0;\n background: none;\n color: var(--ink);\n font: 13px var(--office-font, system-ui, sans-serif);\n text-align: left;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n.go-to-list button:hover,\n.go-to-list button:focus-visible {\n background: var(--accent-soft);\n}\n.go-to-list p {\n margin: 6px 8px;\n color: var(--muted);\n font-size: 12px;\n}\n\n/* Insert > Table size picker. */\n.ribbon-popover.table-picker {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 8px;\n width: 206px;\n padding: 10px;\n}\n.table-picker-caption {\n color: var(--ink);\n font: 12px var(--office-font, system-ui, sans-serif);\n}\n.table-picker-grid {\n display: grid;\n grid-template-columns: repeat(10, 18px);\n gap: 2px;\n outline: none;\n}\n.table-picker-grid:focus-visible {\n outline: 2px solid var(--blue);\n outline-offset: 2px;\n}\n.table-picker-grid [role='gridcell'] {\n width: 18px;\n height: 18px;\n border: 1px solid var(--line);\n background: var(--surface);\n cursor: pointer;\n}\n.table-picker-grid [role='gridcell'].active {\n border-color: var(--blue);\n background: color-mix(in srgb, var(--blue) 22%, transparent);\n}\n.table-picker-custom {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 6px;\n padding-top: 6px;\n border-top: 1px solid var(--line);\n}\n.table-picker-custom label {\n display: grid;\n gap: 2px;\n color: var(--muted);\n font: 11px var(--office-font, system-ui, sans-serif);\n}\n.table-picker-custom input {\n height: 24px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n color: var(--ink);\n}\n.table-picker-insert {\n grid-column: 1 / -1;\n height: 26px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n color: var(--ink);\n cursor: pointer;\n}\n.table-picker-insert:hover {\n background: var(--accent-soft);\n}\n\n/* Colour picker: the shared office-ui-color-grid in a ribbon popover. */\n.ribbon-popover.color-grid {\n display: block;\n padding: 4px;\n}\n.color-grid-input {\n position: absolute;\n width: 0;\n height: 0;\n padding: 0;\n border: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n/* Layout galleries: page thumbnails with a name and detail, for Margins, Size, Orientation, Columns. */\n.ribbon-menu-gallery select.ribbon-menu-input {\n pointer-events: none;\n}\n.ribbon-popover.ribbon-gallery-menu {\n display: flex;\n flex-direction: column;\n gap: 0;\n min-width: 220px;\n max-height: min(70vh, 460px);\n overflow-y: auto;\n padding: 4px;\n}\n.ribbon-gallery-menu button {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 6px 10px;\n border: 1px solid transparent;\n border-radius: 3px;\n background: none;\n color: var(--ink);\n font: 12px var(--office-font, system-ui, sans-serif);\n text-align: left;\n cursor: pointer;\n}\n.ribbon-gallery-menu button:hover,\n.ribbon-gallery-menu button:focus-visible {\n border-color: var(--line);\n background: var(--accent-soft);\n outline: none;\n}\n.ribbon-gallery-menu button[aria-checked='true'] {\n border-color: var(--blue);\n}\n.gallery-words {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.gallery-name {\n font-weight: 600;\n}\n.gallery-detail {\n color: var(--muted);\n font-size: 11px;\n}\n.gallery-thumb {\n flex: none;\n}\n.gallery-thumb .thumb-page {\n fill: #fff;\n stroke: #8a8886;\n stroke-width: 0.8;\n}\n.gallery-thumb .thumb-line {\n stroke: #a19f9d;\n stroke-width: 1.2;\n}\n\n/* Collapsed groups: a narrow ribbon folds its rightmost groups into one dropdown button each. */\n.ribbon-overflow-button {\n display: none !important;\n}\n.ribbon-group[data-collapsed] {\n width: auto !important;\n min-width: 0;\n max-width: none;\n flex-wrap: nowrap;\n}\n.ribbon-group[data-collapsed] > :not(.ribbon-overflow-button) {\n display: none !important;\n}\n.ribbon-group[data-collapsed] > .ribbon-overflow-button {\n display: flex !important;\n}\n.ribbon-group button.ribbon-overflow-button[aria-expanded='true'] {\n border-color: var(--line);\n background: var(--accent-soft);\n}\n.ribbon-popover.ribbon-overflow-panel {\n display: block;\n padding: 6px 8px 2px;\n}\n.ribbon-overflow-panel .ribbon-group {\n height: 84px;\n max-width: none;\n padding-right: 2px;\n border: 0;\n}\n.ribbon-group[data-collapsed]::after {\n display: none;\n}\n/* The Language group's tall stack of fields reads as one column inside its dropdown. */\n.ribbon-overflow-panel .ribbon-group.multilingual-controls {\n width: 300px !important;\n height: auto;\n max-height: min(70vh, 420px);\n flex-direction: column;\n flex-wrap: nowrap;\n align-items: stretch;\n padding-bottom: 20px;\n overflow-y: auto;\n}\n.gallery-thumb .thumb-edge-on {\n stroke: var(--ink);\n stroke-width: 1.6;\n}\n.gallery-thumb .thumb-edge-off {\n stroke: var(--muted);\n stroke-width: 1;\n stroke-dasharray: 1.5 1.5;\n}\n.gallery-thumb .thumb-line-dark {\n stroke: var(--ink);\n}\n.gallery-thumb .thumb-arrow {\n fill: none;\n stroke: var(--blue);\n stroke-width: 1.2;\n}\n.ribbon-gallery-menu .gallery-command {\n margin-top: 4px;\n padding-top: 8px;\n border-top: 1px solid var(--line);\n border-radius: 0;\n}\n";
18735
18739
 
18736
18740
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/ribbon-polish.css?raw
18737
- var ribbon_polish_default = "/* Ribbon polish: distinct pressed state and Word's accent hues on command icons. Loaded last. */\n:host {\n --ribbon-accent-blue: #2b7cd3;\n --ribbon-accent-green: #2f9e5f;\n --ribbon-accent-red: #d13438;\n --ribbon-accent-orange: #d9822b;\n}\n@media (prefers-color-scheme: dark) {\n :host(:not([theme='light'])) {\n --ribbon-accent-blue: #5ea5f0;\n --ribbon-accent-green: #5cc98a;\n --ribbon-accent-red: #f07a7d;\n --ribbon-accent-orange: #f0a35e;\n }\n}\n:host([theme='dark']) {\n --ribbon-accent-blue: #5ea5f0;\n --ribbon-accent-green: #5cc98a;\n --ribbon-accent-red: #f07a7d;\n --ribbon-accent-orange: #f0a35e;\n}\n\n/* Pressed reads darker than hover, and pressing a control gives immediate feedback. */\n.ribbon-group button[aria-pressed='true'] {\n border-color: color-mix(in srgb, var(--blue) 45%, transparent);\n background: color-mix(in srgb, var(--blue) 20%, transparent);\n}\n.ribbon-group button[aria-pressed='true']:hover:not(:disabled) {\n background: color-mix(in srgb, var(--blue) 30%, transparent);\n}\n.ribbon-group button:active:not(:disabled),\n.ribbon-menu:active:not(:has(select:disabled)) {\n background: color-mix(in srgb, var(--blue) 28%, transparent);\n}\n\n/* Accent hues (buttons only; a disabled control keeps its 0.4 opacity). */\n.ribbon-icon[data-icon='table'],\n.ribbon-icon[data-icon='find'],\n.ribbon-icon[data-icon='replace'],\n.ribbon-icon[data-icon='link'],\n.ribbon-icon[data-icon='crossReference'],\n.ribbon-icon[data-icon='toc'],\n.ribbon-icon[data-icon='updateTable'],\n.ribbon-icon[data-icon='header'],\n.ribbon-icon[data-icon='footer'],\n.ribbon-icon[data-icon='pageNumber'],\n.ribbon-icon[data-icon='pageNumberIcon'],\n.ribbon-icon[data-icon='margins'],\n.ribbon-icon[data-icon='orientation'],\n.ribbon-icon[data-icon='pageSize'],\n.ribbon-icon[data-icon='columns'],\n.ribbon-icon[data-icon='select'],\n.ribbon-icon[data-icon='paste'],\n.ribbon-icon[data-icon='borders'],\n.ribbon-icon[data-icon='rowAbove'],\n.ribbon-icon[data-icon='rowBelow'],\n.ribbon-icon[data-icon='columnLeft'],\n.ribbon-icon[data-icon='columnRight'] {\n color: var(--ribbon-accent-blue);\n}\n.ribbon-icon[data-icon='picture'],\n.ribbon-icon[data-icon='formatPicture'],\n.ribbon-icon[data-icon='formatPainter'],\n.ribbon-icon[data-icon='accept'],\n.ribbon-icon[data-icon='acceptAll'],\n.ribbon-icon[data-icon='spelling'],\n.ribbon-icon[data-icon='readAloud'] {\n color: var(--ribbon-accent-green);\n}\n.ribbon-icon[data-icon='reject'],\n.ribbon-icon[data-icon='rejectAll'],\n.ribbon-icon[data-icon='deleteRow'],\n.ribbon-icon[data-icon='deleteColumn'],\n.ribbon-icon[data-icon='deleteTable'],\n.ribbon-icon[data-icon='deleteComment'],\n.ribbon-icon[data-icon='clear'] {\n color: var(--ribbon-accent-red);\n}\n.ribbon-icon[data-icon='comment'],\n.ribbon-icon[data-icon='comments'],\n.ribbon-icon[data-icon='bookmark'],\n.ribbon-icon[data-icon='caption'],\n.ribbon-icon[data-icon='footnote'],\n.ribbon-icon[data-icon='endnote'],\n.ribbon-icon[data-icon='coverPage'] {\n color: var(--ribbon-accent-orange);\n}\n\n/* Icons never shrink to make room for a two-line caption, so every large icon is the same size. */\n.ribbon-menu > .ribbon-icon,\n.ribbon-large > .ribbon-icon {\n flex: none;\n}\n\n/* A two-line caption plus the caret must still fit the dropdown command's box. */\n.ribbon-menu:not(.ribbon-menu-compact):not(.ribbon-menu-caret) {\n gap: 1px;\n height: 72px;\n line-height: 1.1;\n}\n.ribbon-menu:not(.ribbon-menu-compact):not(.ribbon-menu-caret) > .ribbon-icon:last-of-type {\n margin-top: -3px;\n}\n";
18741
+ var ribbon_polish_default = "/* Ribbon polish: distinct pressed state and Word's accent hues on command icons. Loaded last. */\n:host {\n --ribbon-accent-blue: var(--office-accent, #2563eb);\n --ribbon-accent-green: var(--office-info, #3b82f6);\n --ribbon-accent-red: var(--office-danger, #b91c1c);\n --ribbon-accent-orange: var(--office-warning, #d97706);\n}\n\n/* Pressed reads darker than hover, and pressing a control gives immediate feedback. */\n.ribbon-group button[aria-pressed='true'] {\n border-color: var(--blue);\n background: var(--accent-soft);\n}\n.ribbon-group button[aria-pressed='true']:hover:not(:disabled) {\n background: var(--accent-soft);\n}\n.ribbon-group button:active:not(:disabled),\n.ribbon-menu:active:not(:has(select:disabled)) {\n background: var(--accent-soft);\n}\n\n/* Accent hues (buttons only; a disabled control keeps its 0.4 opacity). */\n.ribbon-icon[data-icon='table'],\n.ribbon-icon[data-icon='find'],\n.ribbon-icon[data-icon='replace'],\n.ribbon-icon[data-icon='link'],\n.ribbon-icon[data-icon='crossReference'],\n.ribbon-icon[data-icon='toc'],\n.ribbon-icon[data-icon='updateTable'],\n.ribbon-icon[data-icon='header'],\n.ribbon-icon[data-icon='footer'],\n.ribbon-icon[data-icon='pageNumber'],\n.ribbon-icon[data-icon='pageNumberIcon'],\n.ribbon-icon[data-icon='margins'],\n.ribbon-icon[data-icon='orientation'],\n.ribbon-icon[data-icon='pageSize'],\n.ribbon-icon[data-icon='columns'],\n.ribbon-icon[data-icon='select'],\n.ribbon-icon[data-icon='paste'],\n.ribbon-icon[data-icon='borders'],\n.ribbon-icon[data-icon='rowAbove'],\n.ribbon-icon[data-icon='rowBelow'],\n.ribbon-icon[data-icon='columnLeft'],\n.ribbon-icon[data-icon='columnRight'] {\n color: var(--ribbon-accent-blue);\n}\n.ribbon-icon[data-icon='picture'],\n.ribbon-icon[data-icon='formatPicture'],\n.ribbon-icon[data-icon='formatPainter'],\n.ribbon-icon[data-icon='accept'],\n.ribbon-icon[data-icon='acceptAll'],\n.ribbon-icon[data-icon='spelling'],\n.ribbon-icon[data-icon='readAloud'] {\n color: var(--ribbon-accent-green);\n}\n.ribbon-icon[data-icon='reject'],\n.ribbon-icon[data-icon='rejectAll'],\n.ribbon-icon[data-icon='deleteRow'],\n.ribbon-icon[data-icon='deleteColumn'],\n.ribbon-icon[data-icon='deleteTable'],\n.ribbon-icon[data-icon='deleteComment'],\n.ribbon-icon[data-icon='clear'] {\n color: var(--ribbon-accent-red);\n}\n.ribbon-icon[data-icon='comment'],\n.ribbon-icon[data-icon='comments'],\n.ribbon-icon[data-icon='bookmark'],\n.ribbon-icon[data-icon='caption'],\n.ribbon-icon[data-icon='footnote'],\n.ribbon-icon[data-icon='endnote'],\n.ribbon-icon[data-icon='coverPage'] {\n color: var(--ribbon-accent-orange);\n}\n\n/* Icons never shrink to make room for a two-line caption, so every large icon is the same size. */\n.ribbon-menu > .ribbon-icon,\n.ribbon-large > .ribbon-icon {\n flex: none;\n}\n\n/* A two-line caption plus the caret must still fit the dropdown command's box. */\n.ribbon-menu:not(.ribbon-menu-compact):not(.ribbon-menu-caret) {\n gap: 1px;\n height: 72px;\n line-height: 1.1;\n}\n.ribbon-menu:not(.ribbon-menu-compact):not(.ribbon-menu-caret) > .ribbon-icon:last-of-type {\n margin-top: -3px;\n}\n";
18738
18742
 
18739
18743
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/ribbon-home-menus.css?raw
18740
18744
  var ribbon_home_menus_default = ".ribbon-command-split {\n flex: none;\n height: 28px;\n}\n.ribbon-command-split .ribbon-menu.ribbon-menu-caret {\n width: 14px;\n height: 28px;\n}\n.ribbon-command-split-large {\n flex-direction: column;\n height: 74px;\n}\n.ribbon-group .ribbon-command-split-large .ribbon-large {\n height: 56px;\n min-height: 56px;\n}\n.ribbon-command-split-large .ribbon-menu.ribbon-menu-caret {\n width: 100%;\n height: 18px;\n}\n.ribbon-command-split[data-dve-hidden] {\n display: none;\n}\n";
18741
18745
 
18742
18746
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/document.css?raw
18743
- var document_default = ".dve-revision-insert {\n color: var(--dve-revision-color, inherit);\n text-decoration: underline;\n text-decoration-color: var(--dve-revision-color, currentColor);\n}\n.dve-revision-delete {\n color: var(--dve-revision-color, inherit);\n text-decoration: line-through;\n text-decoration-color: var(--dve-revision-color, currentColor);\n}\n/* Moved text, like Word: green, double underline at the destination, double strike at the source. */\n.dve-revision-move {\n --dve-revision-color: #2e7d32;\n text-decoration-style: double;\n}\n.ProseMirror .dve-revision-hidden {\n /* Review visibility takes precedence over picture/equation node-view display rules. */\n display: none !important;\n}\n[data-review-display]:not([data-review-display='all']) .dve-revision-insert,\n[data-review-display]:not([data-review-display='all']) .dve-revision-delete {\n color: inherit;\n text-decoration: none;\n}\n[data-review-display]:not([data-review-display='all']) .dve-comment-range {\n background: transparent;\n}\n.dve-revision-format-markup {\n outline: 1px dotted currentColor;\n outline-offset: 2px;\n}\n.dve-comment-range {\n background: rgba(255, 212, 0, 0.28);\n}\n.dve-paper {\n box-sizing: border-box;\n position: relative;\n flex: none;\n margin: 0 auto;\n background: var(--dve-page-color, #fff);\n color: #202124;\n box-shadow:\n 0 1px 3px #20212430,\n 0 4px 12px #20212420;\n outline: none;\n /* Single spacing and no paragraph gap unless the document's styles set them, as in Word. */\n font:\n 11pt/1.2 Calibri,\n Carlito,\n Arial,\n sans-serif;\n zoom: var(--dve-zoom, 1);\n}\n.dve-paper p {\n min-height: 1.2em;\n margin: 0;\n white-space: pre-wrap;\n}\n.dve-paper p:last-child {\n margin-bottom: 0;\n}\n/* The caret marks focus in the document, as in Word; no ring around the editable area. */\n.dve-paper .ProseMirror:focus,\n.dve-paper .ProseMirror:focus-visible {\n outline: none;\n}\n.dve-paper:focus {\n box-shadow:\n 0 1px 3px #20212430,\n 0 4px 12px #20212420,\n 0 0 0 1px var(--blue);\n}\n/* Columns follow the table's grid and cell widths (equal when it has none), as Word lays them out;\n tables add no space around themselves. */\n.dve-paper table {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n margin: 0;\n}\n.dve-paper td {\n min-width: 44px;\n border: var(--dve-cell-border, 1px dashed #c8c6c4);\n vertical-align: top;\n}\n.dve-paper td p {\n margin: 0;\n}\n.dve-paper p[data-list-label]::before {\n content: attr(data-list-label);\n white-space: pre;\n user-select: none;\n}\n.dve-paper p[data-list-marker]:not([data-list-marker=''])::before {\n content: attr(data-list-marker);\n position: absolute;\n left: var(--dve-marker-left);\n text-indent: 0;\n font-family: var(--dve-marker-family);\n font-size: var(--dve-marker-size);\n font-weight: var(--dve-marker-weight);\n font-style: var(--dve-marker-style);\n color: var(--dve-marker-color);\n}\n.multilingual-controls {\n flex: 1 1 100%;\n align-items: flex-start;\n gap: 9px 14px;\n}\n.multilingual-language-control {\n display: grid;\n grid-template-columns: minmax(145px, 180px);\n gap: 4px;\n color: var(--muted);\n font-size: 11px;\n}\n.multilingual-language-control select,\n.multilingual-language-control input {\n box-sizing: border-box;\n width: 180px;\n}\n.multilingual-language-control input {\n height: 26px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n padding: 0 7px;\n color: var(--ink);\n font:\n 11px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.multilingual-note {\n align-self: end;\n max-width: 240px;\n color: var(--muted);\n font-size: 11px;\n}\n@media (max-width: 650px) {\n .ribbon-panel {\n min-height: 96px;\n padding: 6px;\n gap: 4px;\n }\n .ribbon-group {\n padding-right: 7px;\n }\n .ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Font'] {\n width: 340px;\n }\n .ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Paragraph'] {\n width: 280px;\n }\n .ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Editing'] {\n width: auto;\n }\n .ribbon-group button {\n min-width: 34px;\n min-height: 34px;\n }\n .ribbon-group select {\n max-width: min(150px, 42vw);\n }\n .dve-canvas {\n padding: 18px 8px 38px;\n align-items: flex-start;\n }\n .ribbon-group select.font-family-select {\n width: 120px;\n max-width: 38vw;\n }\n .ribbon-group select.font-size-select {\n width: 56px;\n }\n .ribbon-group select.spacing-select {\n width: min(128px, 36vw);\n }\n .ribbon-group select.line-spacing-select {\n width: min(112px, 32vw);\n }\n}\n.dve-break-marker {\n display: block;\n margin: 0.4em 0;\n padding: 2px 0;\n border-top: 1px dashed var(--muted);\n border-bottom: 1px dashed var(--muted);\n color: var(--muted);\n font-size: 10px;\n text-align: center;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n user-select: none;\n}\n.dve-note-reference {\n color: var(--blue);\n cursor: default;\n}\n.dve-header,\n.dve-footer {\n box-sizing: border-box;\n width: 816px;\n max-width: 100%;\n margin: 0 auto;\n padding: 10px clamp(16px, 5vw, 70px);\n background: var(--surface);\n color: var(--muted);\n font:\n 10pt/1.35 Calibri,\n Arial,\n sans-serif;\n}\n.dve-header {\n border-bottom: 1px dashed var(--line);\n}\n.dve-footer {\n border-top: 1px dashed var(--line);\n}\n.dve-header-footer-label {\n margin-bottom: 2px;\n color: var(--muted);\n font-size: 10px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.dve-notes-container {\n box-sizing: border-box;\n width: 816px;\n max-width: 100%;\n margin: 12px auto 0;\n}\n.dve-notes {\n box-sizing: border-box;\n padding: 10px clamp(16px, 5vw, 70px);\n background: var(--surface);\n border-top: 1px solid var(--line);\n font:\n 10pt/1.35 Calibri,\n Arial,\n sans-serif;\n}\n.dve-notes-heading {\n margin: 0 0 6px;\n color: var(--ink);\n font-size: 12px;\n}\n.dve-note-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.dve-note-list li {\n display: flex;\n gap: 4px;\n align-items: baseline;\n margin-bottom: 4px;\n}\n.dve-note-marker {\n flex: none;\n color: var(--muted);\n}\n@media (prefers-reduced-motion: reduce) {\n * {\n scroll-behavior: auto !important;\n }\n}\n\n/* Print Layout: a read-only, paginated render kept beside the continuous\n editing surface (see print-layout.ts / print-layout-view.ts). */\n";
18747
+ var document_default = ".dve-revision-insert {\n color: var(--dve-revision-color, inherit);\n text-decoration: underline;\n text-decoration-color: var(--dve-revision-color, currentColor);\n}\n.dve-revision-delete {\n color: var(--dve-revision-color, inherit);\n text-decoration: line-through;\n text-decoration-color: var(--dve-revision-color, currentColor);\n}\n/* Moved text, like Word: green, double underline at the destination, double strike at the source. */\n.dve-revision-move {\n --dve-revision-color: #2e7d32;\n text-decoration-style: double;\n}\n.ProseMirror .dve-revision-hidden {\n /* Review visibility takes precedence over picture/equation node-view display rules. */\n display: none !important;\n}\n[data-review-display]:not([data-review-display='all']) .dve-revision-insert,\n[data-review-display]:not([data-review-display='all']) .dve-revision-delete {\n color: inherit;\n text-decoration: none;\n}\n[data-review-display]:not([data-review-display='all']) .dve-comment-range {\n background: transparent;\n}\n.dve-revision-format-markup {\n outline: 1px dotted currentColor;\n outline-offset: 2px;\n}\n.dve-comment-range {\n background: rgba(255, 212, 0, 0.28);\n}\n.dve-paper {\n box-sizing: border-box;\n position: relative;\n flex: none;\n margin: 0 auto;\n background: var(--dve-page-color, var(--office-paper, #fff));\n color: #202124;\n box-shadow:\n 0 1px 3px #20212430,\n 0 4px 12px #20212420;\n outline: none;\n /* Single spacing and no paragraph gap unless the document's styles set them, as in Word. */\n font:\n 11pt/1.2 Calibri,\n Carlito,\n Arial,\n sans-serif;\n zoom: var(--dve-zoom, 1);\n}\n.dve-paper p {\n min-height: 1.2em;\n margin: 0;\n white-space: pre-wrap;\n}\n.dve-paper p:last-child {\n margin-bottom: 0;\n}\n/* The caret marks focus in the document, as in Word; no ring around the editable area. */\n.dve-paper .ProseMirror:focus,\n.dve-paper .ProseMirror:focus-visible {\n outline: none;\n}\n.dve-paper:focus {\n box-shadow:\n 0 1px 3px #20212430,\n 0 4px 12px #20212420,\n 0 0 0 1px var(--blue);\n}\n/* Columns follow the table's grid and cell widths (equal when it has none), as Word lays them out;\n tables add no space around themselves. */\n.dve-paper table {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n margin: 0;\n}\n.dve-paper td {\n min-width: 44px;\n border: var(--dve-cell-border, 1px dashed #c8c6c4);\n vertical-align: top;\n}\n.dve-paper td p {\n margin: 0;\n}\n.dve-paper p[data-list-label]::before {\n content: attr(data-list-label);\n white-space: pre;\n user-select: none;\n}\n.dve-paper p[data-list-marker]:not([data-list-marker=''])::before {\n content: attr(data-list-marker);\n position: absolute;\n left: var(--dve-marker-left);\n text-indent: 0;\n font-family: var(--dve-marker-family);\n font-size: var(--dve-marker-size);\n font-weight: var(--dve-marker-weight);\n font-style: var(--dve-marker-style);\n color: var(--dve-marker-color);\n}\n.multilingual-controls {\n flex: 1 1 100%;\n align-items: flex-start;\n gap: 9px 14px;\n}\n.multilingual-language-control {\n display: grid;\n grid-template-columns: minmax(145px, 180px);\n gap: 4px;\n color: var(--muted);\n font-size: 11px;\n}\n.multilingual-language-control select,\n.multilingual-language-control input {\n box-sizing: border-box;\n width: 180px;\n}\n.multilingual-language-control input {\n height: 26px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n padding: 0 7px;\n color: var(--ink);\n font: 11px var(--office-font, system-ui, sans-serif);\n}\n.multilingual-note {\n align-self: end;\n max-width: 240px;\n color: var(--muted);\n font-size: 11px;\n}\n@media (max-width: 650px) {\n .ribbon-panel {\n min-height: 96px;\n padding: 6px;\n gap: 4px;\n }\n .ribbon-group {\n padding-right: 7px;\n }\n .ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Font'] {\n width: 340px;\n }\n .ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Paragraph'] {\n width: 280px;\n }\n .ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Editing'] {\n width: auto;\n }\n .ribbon-group button {\n min-width: 34px;\n min-height: 34px;\n }\n .ribbon-group select {\n max-width: min(150px, 42vw);\n }\n .dve-canvas {\n padding: 18px 8px 38px;\n align-items: flex-start;\n }\n .ribbon-group select.font-family-select {\n width: 120px;\n max-width: 38vw;\n }\n .ribbon-group select.font-size-select {\n width: 56px;\n }\n .ribbon-group select.spacing-select {\n width: min(128px, 36vw);\n }\n .ribbon-group select.line-spacing-select {\n width: min(112px, 32vw);\n }\n}\n.dve-break-marker {\n display: block;\n margin: 0.4em 0;\n padding: 2px 0;\n border-top: 1px dashed var(--muted);\n border-bottom: 1px dashed var(--muted);\n color: var(--muted);\n font-size: 10px;\n text-align: center;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n user-select: none;\n}\n.dve-note-reference {\n color: var(--blue);\n cursor: default;\n}\n.dve-header,\n.dve-footer {\n box-sizing: border-box;\n width: 816px;\n max-width: 100%;\n margin: 0 auto;\n padding: 10px clamp(16px, 5vw, 70px);\n background: var(--surface);\n color: var(--muted);\n font:\n 10pt/1.35 Calibri,\n Arial,\n sans-serif;\n}\n.dve-header {\n border-bottom: 1px dashed var(--line);\n}\n.dve-footer {\n border-top: 1px dashed var(--line);\n}\n.dve-header-footer-label {\n margin-bottom: 2px;\n color: var(--muted);\n font-size: 10px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.dve-notes-container {\n box-sizing: border-box;\n width: 816px;\n max-width: 100%;\n margin: 12px auto 0;\n}\n.dve-notes {\n box-sizing: border-box;\n padding: 10px clamp(16px, 5vw, 70px);\n background: var(--surface);\n border-top: 1px solid var(--line);\n font:\n 10pt/1.35 Calibri,\n Arial,\n sans-serif;\n}\n.dve-notes-heading {\n margin: 0 0 6px;\n color: var(--ink);\n font-size: 12px;\n}\n.dve-note-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.dve-note-list li {\n display: flex;\n gap: 4px;\n align-items: baseline;\n margin-bottom: 4px;\n}\n.dve-note-marker {\n flex: none;\n color: var(--muted);\n}\n@media (prefers-reduced-motion: reduce) {\n * {\n scroll-behavior: auto !important;\n }\n}\n\n/* Print Layout: a read-only, paginated render kept beside the continuous\n editing surface (see print-layout.ts / print-layout-view.ts). */\n";
18744
18748
 
18745
18749
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/underline.css?raw
18746
18750
  var underline_default = `/* Styled runs paint their own underline. Do not superimpose the semantic mark's single line. */
@@ -18766,46 +18770,42 @@ var underline_default = `/* Styled runs paint their own underline. Do not superi
18766
18770
  `;
18767
18771
 
18768
18772
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/print.css?raw
18769
- var print_default = ".dve-print-pages {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 24px;\n margin: 0 auto;\n zoom: var(--dve-zoom, 1);\n}\n/* The view wraps the layout's own pages container; zoom the pair once, not twice. */\n.dve-print-pages > .dve-print-pages {\n zoom: 1;\n}\n.dve-print-pages[hidden] {\n display: none;\n}\n.dve-print-page {\n position: relative;\n flex: none;\n background: var(--dve-page-color, #fff);\n color: #202124;\n box-shadow:\n 0 1px 3px #20212430,\n 0 4px 12px #20212420;\n overflow: hidden;\n}\n.dve-print-column {\n position: absolute;\n z-index: 1;\n}\n/* The frame and handles of a selected floating picture, as in Word. */\n.dve-print-float-frame {\n position: absolute;\n z-index: 4;\n box-sizing: border-box;\n border: 1px solid var(--word, #2b579a);\n pointer-events: none;\n}\n.dve-print-float-handle {\n position: absolute;\n box-sizing: border-box;\n width: 9px;\n height: 9px;\n border: 1px solid var(--word, #2b579a);\n background: #fff;\n pointer-events: auto;\n touch-action: none;\n}\n.dve-print-float-handle[data-float-handle='nw'] {\n left: -5px;\n top: -5px;\n}\n.dve-print-float-handle[data-float-handle='n'] {\n left: calc(50% - 5px);\n top: -5px;\n}\n.dve-print-float-handle[data-float-handle='ne'] {\n right: -5px;\n top: -5px;\n}\n.dve-print-float-handle[data-float-handle='e'] {\n right: -5px;\n top: calc(50% - 5px);\n}\n.dve-print-float-handle[data-float-handle='se'] {\n right: -5px;\n bottom: -5px;\n}\n.dve-print-float-handle[data-float-handle='s'] {\n left: calc(50% - 5px);\n bottom: -5px;\n}\n.dve-print-float-handle[data-float-handle='sw'] {\n left: -5px;\n bottom: -5px;\n}\n.dve-print-float-handle[data-float-handle='w'] {\n left: -5px;\n top: calc(50% - 5px);\n}\n/* Floating pictures sit in front of text unless anchored behind it (wp:anchor/@behindDoc). */\n.dve-print-float {\n z-index: 2;\n}\n.dve-print-float-behind {\n z-index: 0;\n}\n.dve-print-picture-missing {\n box-sizing: border-box;\n border: 1px dashed #8a8886;\n background: #f3f2f1;\n}\n.dve-print-chart {\n overflow: hidden;\n background: #fff;\n}\n.dve-print-chart > svg {\n display: block;\n width: 100%;\n height: 100%;\n}\n.dve-print-chart-frame {\n display: grid;\n place-items: center;\n color: #605e5c;\n font-size: 11px;\n}\n.dve-print-block {\n position: absolute;\n left: 0;\n width: 100%;\n}\n.dve-print-line {\n position: absolute;\n left: 0;\n width: 100%;\n font:\n 11pt/1.2 Calibri,\n Arial,\n sans-serif;\n cursor: text;\n}\n.dve-print-line span {\n position: absolute;\n top: 0;\n}\n.dve-print-row {\n position: absolute;\n left: 0;\n width: 100%;\n}\n/* Cells sit at their grid positions; borders come from the document (Word prints no gridlines). */\n.dve-print-cell {\n position: absolute;\n top: 0;\n box-sizing: border-box;\n}\n.dve-print-cell-content {\n position: absolute;\n bottom: 0;\n}\n@media print {\n .dve-ribbon,\n .dve-status,\n .multilingual-controls {\n display: none !important;\n }\n .dve-canvas {\n overflow: visible !important;\n padding: 0 !important;\n }\n .dve-paper {\n display: none !important;\n }\n .dve-print-pages {\n gap: 0 !important;\n zoom: 1 !important;\n }\n .dve-print-page {\n /* Like Word, page colours are not printed unless asked for. */\n background: #fff !important;\n box-shadow: none !important;\n break-after: page;\n }\n}\n.dve-print-header,\n.dve-print-footer {\n position: absolute;\n color: var(--ink);\n font-size: 11pt;\n pointer-events: none;\n}\n/* Header and footer editing in place on a page: the body dims, like Word. */\n.dve-print-story-editing .dve-print-block {\n opacity: 0.45;\n}\n.dve-print-header.dve-header-footer-editing,\n.dve-print-footer.dve-header-footer-editing {\n pointer-events: auto;\n cursor: text;\n z-index: 3;\n}\n.dve-print-header p,\n.dve-print-footer p {\n margin: 0;\n}\n.dve-print-header table,\n.dve-print-footer table {\n width: 100%;\n border-collapse: collapse;\n}\n\n/* Complex field begin/code/separate/end markers: kept in the document, never shown. */\n.dve-field-marker {\n display: inline;\n font-size: 0;\n}\n\n/* TOC entries link to hidden _Toc bookmarks; Word draws them in the entry's style, not as links. */\na.dve-link[data-anchor^='_Toc'] {\n color: inherit;\n text-decoration: none;\n}\n\n/* Tabs sized to Word's tab stops by tab-stops-view.ts; leaders fill the tab's width. */\n.dve-tab {\n display: inline-block;\n overflow: hidden;\n white-space: pre;\n vertical-align: baseline;\n text-indent: 0;\n}\n.dve-tab-leader-dot,\n.dve-tab-leader-middleDot {\n background-image: radial-gradient(circle, currentColor 0.8px, transparent 1.1px);\n background-size: 4px 4px;\n background-repeat: repeat-x;\n background-position: right 0 bottom 0.25em;\n}\n.dve-tab-leader-hyphen {\n background-image: linear-gradient(to right, currentColor 50%, transparent 50%);\n background-size: 6px 1px;\n background-repeat: repeat-x;\n background-position: right 0 bottom 0.4em;\n}\n.dve-tab-leader-underscore,\n.dve-tab-leader-heavy {\n border-bottom: 1px solid currentColor;\n}\n.dve-tab-leader-heavy {\n border-bottom-width: 2px;\n}\n\n/* Footnotes above the bottom margin; the separator is Word's 2-inch rule. */\n.dve-print-footnotes {\n position: absolute;\n z-index: 1;\n}\n.dve-print-footnote-separator {\n position: absolute;\n top: -7px;\n left: 0;\n width: 192px;\n border-top: 1px solid currentColor;\n}\n.dve-print-footnote-continuation-separator {\n width: 100%;\n}\n.dve-print-footnote {\n position: absolute;\n left: 0;\n width: 100%;\n}\n\n/* A note edited in place on its page: its number stays beside the editor. */\n.dve-print-note-container.dve-header-footer-editing {\n display: flex;\n align-items: flex-start;\n gap: 0.25em;\n z-index: 3;\n cursor: text;\n}\n.dve-print-note-container .dve-header-footer-editor {\n flex: 1 1 auto;\n min-width: 0;\n}\n.dve-print-note-label {\n font-size: 0.65em;\n line-height: 1.4;\n vertical-align: baseline;\n}\n\n[data-print-view] .dve-notes-container {\n display: none;\n}\n\n/* Word draws superscript and subscript at about two thirds size without growing the line. */\n.dve-paper sup,\n.dve-paper sub {\n font-size: 0.65em;\n line-height: 0;\n}\n/* Exact-height rows clip content that does not fit, as Word does. */\n.dve-print-cell {\n overflow: hidden;\n}\n.dve-print-paragraph-frame {\n position: absolute;\n top: 0;\n box-sizing: border-box;\n}\n\n/* View > Multiple Pages: Print Layout's sheets sit side by side and wrap, instead of one column. */\n.dve-canvas[data-multipage] .dve-print-pages {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: center;\n}\n\n/* Layout > Line Numbers: numbers in the left margin, one per printed line. */\n.dve-print-line-number {\n position: absolute;\n width: 40px;\n text-align: right;\n font:\n 10px 'Segoe UI',\n Arial,\n sans-serif;\n color: #444;\n pointer-events: none;\n}\n\n/* Native input stays mounted while page geometry supplies the visible selection. */\n.dve-paper.dve-print-input {\n position: fixed;\n top: 0;\n left: 0;\n margin: 0;\n opacity: 0;\n max-height: 1px;\n overflow: hidden;\n pointer-events: none;\n z-index: -1;\n}\n.dve-print-pages {\n position: relative;\n}\n.dve-print-selection-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 3;\n}\n.dve-print-caret,\n.dve-print-selection {\n position: absolute;\n pointer-events: none;\n}\n.dve-print-caret {\n background: currentColor;\n animation: dve-print-caret-blink 1s step-end infinite;\n}\n.dve-print-selection {\n background: Highlight;\n opacity: 0.3;\n}\n@keyframes dve-print-caret-blink {\n 50% {\n opacity: 0;\n }\n}\n@media print {\n .dve-print-input,\n .dve-print-selection-layer {\n display: none !important;\n }\n}\n/* In-place text editing of a floating shape or text box. */\n.dve-print-float-text {\n position: absolute;\n z-index: 5;\n box-sizing: border-box;\n padding: 4px 7px;\n resize: none;\n overflow: auto;\n border: 1px dashed var(--word, #2b579a);\n background: rgb(255 255 255 / 0.85);\n color: #000;\n font:\n 14.67px Calibri,\n Arial,\n sans-serif;\n text-align: center;\n}\n";
18773
+ var print_default = ".dve-print-pages {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 24px;\n margin: 0 auto;\n zoom: var(--dve-zoom, 1);\n}\n/* The view wraps the layout's own pages container; zoom the pair once, not twice. */\n.dve-print-pages > .dve-print-pages {\n zoom: 1;\n}\n.dve-print-pages[hidden] {\n display: none;\n}\n.dve-print-page {\n position: relative;\n flex: none;\n background: var(--dve-page-color, var(--office-paper, #fff));\n color: #202124;\n box-shadow:\n 0 1px 3px #20212430,\n 0 4px 12px #20212420;\n overflow: hidden;\n}\n.dve-print-column {\n position: absolute;\n z-index: 1;\n}\n/* The frame and handles of a selected floating picture, as in Word. */\n.dve-print-float-frame {\n position: absolute;\n z-index: 4;\n box-sizing: border-box;\n border: 1px solid var(--word, #2b579a);\n pointer-events: none;\n}\n.dve-print-float-handle {\n position: absolute;\n box-sizing: border-box;\n width: 9px;\n height: 9px;\n border: 1px solid var(--word, #2b579a);\n background: #fff;\n pointer-events: auto;\n touch-action: none;\n}\n.dve-print-float-handle[data-float-handle='nw'] {\n left: -5px;\n top: -5px;\n}\n.dve-print-float-handle[data-float-handle='n'] {\n left: calc(50% - 5px);\n top: -5px;\n}\n.dve-print-float-handle[data-float-handle='ne'] {\n right: -5px;\n top: -5px;\n}\n.dve-print-float-handle[data-float-handle='e'] {\n right: -5px;\n top: calc(50% - 5px);\n}\n.dve-print-float-handle[data-float-handle='se'] {\n right: -5px;\n bottom: -5px;\n}\n.dve-print-float-handle[data-float-handle='s'] {\n left: calc(50% - 5px);\n bottom: -5px;\n}\n.dve-print-float-handle[data-float-handle='sw'] {\n left: -5px;\n bottom: -5px;\n}\n.dve-print-float-handle[data-float-handle='w'] {\n left: -5px;\n top: calc(50% - 5px);\n}\n/* Floating pictures sit in front of text unless anchored behind it (wp:anchor/@behindDoc). */\n.dve-print-float {\n z-index: 2;\n}\n.dve-print-float-behind {\n z-index: 0;\n}\n.dve-print-picture-missing {\n box-sizing: border-box;\n border: 1px dashed #8a8886;\n background: #f3f2f1;\n}\n.dve-print-chart {\n overflow: hidden;\n background: #fff;\n}\n.dve-print-chart > svg {\n display: block;\n width: 100%;\n height: 100%;\n}\n.dve-print-chart-frame {\n display: grid;\n place-items: center;\n color: #605e5c;\n font-size: 11px;\n}\n.dve-print-block {\n position: absolute;\n left: 0;\n width: 100%;\n}\n.dve-print-line {\n position: absolute;\n left: 0;\n width: 100%;\n font:\n 11pt/1.2 Calibri,\n Arial,\n sans-serif;\n cursor: text;\n}\n.dve-print-line span {\n position: absolute;\n top: 0;\n}\n.dve-print-row {\n position: absolute;\n left: 0;\n width: 100%;\n}\n/* Cells sit at their grid positions; borders come from the document (Word prints no gridlines). */\n.dve-print-cell {\n position: absolute;\n top: 0;\n box-sizing: border-box;\n}\n.dve-print-cell-content {\n position: absolute;\n bottom: 0;\n}\n@media print {\n .dve-ribbon,\n .dve-status,\n .multilingual-controls {\n display: none !important;\n }\n .dve-canvas {\n overflow: visible !important;\n padding: 0 !important;\n }\n .dve-paper {\n display: none !important;\n }\n .dve-print-pages {\n gap: 0 !important;\n zoom: 1 !important;\n }\n .dve-print-page {\n /* Like Word, page colours are not printed unless asked for. */\n background: #fff !important;\n box-shadow: none !important;\n break-after: page;\n }\n}\n.dve-print-header,\n.dve-print-footer {\n position: absolute;\n color: var(--ink);\n font-size: 11pt;\n pointer-events: none;\n}\n/* Header and footer editing in place on a page: the body dims, like Word. */\n.dve-print-story-editing .dve-print-block {\n opacity: 0.45;\n}\n.dve-print-header.dve-header-footer-editing,\n.dve-print-footer.dve-header-footer-editing {\n pointer-events: auto;\n cursor: text;\n z-index: 3;\n}\n.dve-print-header p,\n.dve-print-footer p {\n margin: 0;\n}\n.dve-print-header table,\n.dve-print-footer table {\n width: 100%;\n border-collapse: collapse;\n}\n\n/* Complex field begin/code/separate/end markers: kept in the document, never shown. */\n.dve-field-marker {\n display: inline;\n font-size: 0;\n}\n\n/* TOC entries link to hidden _Toc bookmarks; Word draws them in the entry's style, not as links. */\na.dve-link[data-anchor^='_Toc'] {\n color: inherit;\n text-decoration: none;\n}\n\n/* Tabs sized to Word's tab stops by tab-stops-view.ts; leaders fill the tab's width. */\n.dve-tab {\n display: inline-block;\n overflow: hidden;\n white-space: pre;\n vertical-align: baseline;\n text-indent: 0;\n}\n.dve-tab-leader-dot,\n.dve-tab-leader-middleDot {\n background-image: radial-gradient(circle, currentColor 0.8px, transparent 1.1px);\n background-size: 4px 4px;\n background-repeat: repeat-x;\n background-position: right 0 bottom 0.25em;\n}\n.dve-tab-leader-hyphen {\n background-image: linear-gradient(to right, currentColor 50%, transparent 50%);\n background-size: 6px 1px;\n background-repeat: repeat-x;\n background-position: right 0 bottom 0.4em;\n}\n.dve-tab-leader-underscore,\n.dve-tab-leader-heavy {\n border-bottom: 1px solid currentColor;\n}\n.dve-tab-leader-heavy {\n border-bottom-width: 2px;\n}\n\n/* Footnotes above the bottom margin; the separator is Word's 2-inch rule. */\n.dve-print-footnotes {\n position: absolute;\n z-index: 1;\n}\n.dve-print-footnote-separator {\n position: absolute;\n top: -7px;\n left: 0;\n width: 192px;\n border-top: 1px solid currentColor;\n}\n.dve-print-footnote-continuation-separator {\n width: 100%;\n}\n.dve-print-footnote {\n position: absolute;\n left: 0;\n width: 100%;\n}\n\n/* A note edited in place on its page: its number stays beside the editor. */\n.dve-print-note-container.dve-header-footer-editing {\n display: flex;\n align-items: flex-start;\n gap: 0.25em;\n z-index: 3;\n cursor: text;\n}\n.dve-print-note-container .dve-header-footer-editor {\n flex: 1 1 auto;\n min-width: 0;\n}\n.dve-print-note-label {\n font-size: 0.65em;\n line-height: 1.4;\n vertical-align: baseline;\n}\n\n[data-print-view] .dve-notes-container {\n display: none;\n}\n\n/* Word draws superscript and subscript at about two thirds size without growing the line. */\n.dve-paper sup,\n.dve-paper sub {\n font-size: 0.65em;\n line-height: 0;\n}\n/* Exact-height rows clip content that does not fit, as Word does. */\n.dve-print-cell {\n overflow: hidden;\n}\n.dve-print-paragraph-frame {\n position: absolute;\n top: 0;\n box-sizing: border-box;\n}\n\n/* View > Multiple Pages: Print Layout's sheets sit side by side and wrap, instead of one column. */\n.dve-canvas[data-multipage] .dve-print-pages {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: center;\n}\n\n/* Layout > Line Numbers: numbers in the left margin, one per printed line. */\n.dve-print-line-number {\n position: absolute;\n width: 40px;\n text-align: right;\n font: 10px var(--office-font, system-ui, sans-serif);\n color: #444;\n pointer-events: none;\n}\n\n/* Native input stays mounted while page geometry supplies the visible selection. */\n.dve-paper.dve-print-input {\n position: fixed;\n top: 0;\n left: 0;\n margin: 0;\n opacity: 0;\n max-height: 1px;\n overflow: hidden;\n pointer-events: none;\n z-index: -1;\n}\n.dve-print-pages {\n position: relative;\n}\n.dve-print-selection-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 3;\n}\n.dve-print-caret,\n.dve-print-selection {\n position: absolute;\n pointer-events: none;\n}\n.dve-print-caret {\n background: currentColor;\n animation: dve-print-caret-blink 1s step-end infinite;\n}\n.dve-print-selection {\n background: Highlight;\n opacity: 0.3;\n}\n@keyframes dve-print-caret-blink {\n 50% {\n opacity: 0;\n }\n}\n@media print {\n .dve-print-input,\n .dve-print-selection-layer {\n display: none !important;\n }\n}\n/* In-place text editing of a floating shape or text box. */\n.dve-print-float-text {\n position: absolute;\n z-index: 5;\n box-sizing: border-box;\n padding: 4px 7px;\n resize: none;\n overflow: auto;\n border: 1px dashed var(--word, #2b579a);\n background: rgb(255 255 255 / 0.85);\n color: #000;\n font:\n 14.67px Calibri,\n Arial,\n sans-serif;\n text-align: center;\n}\n";
18770
18774
 
18771
18775
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/chrome-titlebar.css?raw
18772
- var chrome_titlebar_default = ".dve-frame {\n position: relative;\n border: 0;\n box-shadow: none;\n}\n.dve-icon {\n flex: none;\n}\n.dve-icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 28px;\n padding: 0 6px;\n border: 0;\n border-radius: 4px;\n background: none;\n color: inherit;\n cursor: pointer;\n}\n.dve-icon-button:hover:not(:disabled),\n.dve-icon-button[aria-pressed='true'] {\n background: var(--word-soft);\n}\n.dve-icon-button:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n/* Title bar: drawn by the shared office-ui-title-bar; these colour it. */\n.dve-titlebar {\n flex: none;\n --office-title-bar-height: 40px;\n --office-title-bar-background: var(--chrome);\n --office-title-bar-border: var(--line);\n --office-title-bar-mark-background: var(--word);\n --office-title-bar-mark-foreground: var(--dve-primary-foreground);\n}\n";
18776
+ var chrome_titlebar_default = ".dve-frame {\n position: relative;\n border: 0;\n box-shadow: none;\n}\n.dve-icon {\n flex: none;\n}\n.dve-icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 28px;\n padding: 0 6px;\n border: 0;\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: none;\n color: inherit;\n cursor: pointer;\n}\n.dve-icon-button:hover:not(:disabled),\n.dve-icon-button[aria-pressed='true'] {\n background: var(--word-soft);\n}\n.dve-icon-button:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n/* Title bar: drawn by the shared office-ui-title-bar; these colour it. */\n.dve-titlebar {\n flex: none;\n --office-title-bar-height: 40px;\n --office-title-bar-background: var(--chrome);\n --office-title-bar-border: var(--line);\n --office-title-bar-mark-background: var(--word);\n --office-title-bar-mark-foreground: var(\n --dve-primary-foreground,\n var(--office-accent-foreground, #fff)\n );\n}\n";
18773
18777
 
18774
18778
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/backstage.css?raw
18775
- var backstage_default = "/* Backstage: the shared office-ui-backstage draws the frame; these colour it and style the pages. */\n.dve-backstage {\n --office-backstage-nav-width: 220px;\n --office-backstage-nav-background: var(--word);\n --office-backstage-nav-foreground: var(--dve-primary-foreground);\n --office-backstage-item-hover: var(--word-strong);\n z-index: 40;\n background: var(--surface);\n}\n.dve-backstage-content {\n overflow: auto;\n padding: 28px 40px;\n color: var(--ink);\n}\n.dve-backstage-content h2 {\n margin: 0 0 20px;\n font-size: 30px;\n font-weight: 300;\n}\n.dve-backstage-content h3 {\n margin: 24px 0 10px;\n font-size: 15px;\n font-weight: 600;\n}\n.dve-backstage-facts {\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n gap: 6px 24px;\n margin: 0;\n}\n.dve-backstage-facts dt {\n color: var(--muted);\n}\n.dve-backstage-facts dd {\n margin: 0;\n overflow-wrap: anywhere;\n}\n.dve-compatibility-notes {\n display: grid;\n gap: 8px;\n max-width: 760px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.dve-compatibility-notes li {\n display: flex;\n gap: 8px;\n padding: 10px 12px;\n border: 1px solid var(--line);\n border-radius: 6px;\n line-height: 1.45;\n}\n.dve-compatibility-notes .dve-icon {\n margin-top: 2px;\n color: #b7791f;\n}\n.dve-backstage-tile {\n display: inline-flex;\n flex-direction: column;\n gap: 8px;\n padding: 8px;\n border: 1px solid transparent;\n border-radius: 6px;\n background: none;\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n}\n.dve-backstage-tile:hover {\n border-color: var(--line);\n background: var(--word-soft);\n}\n.dve-backstage-tile-preview {\n width: 150px;\n height: 190px;\n border: 1px solid var(--line);\n background: #fff;\n box-shadow: 0 1px 3px #0002;\n}\n.dve-backstage-primary {\n padding: 8px 18px;\n border: 0;\n border-radius: 4px;\n background: var(--word);\n color: var(--dve-primary-foreground);\n font: inherit;\n cursor: pointer;\n}\n.dve-backstage-muted {\n color: var(--muted);\n}\n\n.dve-backstage-title {\n margin: 0 0 4px;\n font-size: 26px;\n font-weight: 400;\n overflow-wrap: anywhere;\n}\n.dve-backstage-columns {\n display: grid;\n grid-template-columns: minmax(0, 1fr) 300px;\n gap: 40px;\n align-items: start;\n}\n.dve-backstage-properties {\n padding: 4px 0 0 24px;\n border-left: 1px solid var(--line);\n}\n.dve-backstage-properties h3 {\n margin-top: 0;\n}\n.dve-backstage-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 24px;\n max-width: 760px;\n margin-bottom: 12px;\n padding: 14px 18px;\n border: 1px solid var(--line);\n border-radius: 6px;\n}\n.dve-backstage-card h3 {\n margin: 0 0 4px;\n}\n.dve-backstage-card p {\n margin: 0;\n}\n.dve-backstage-field {\n display: grid;\n gap: 4px;\n max-width: 420px;\n margin-bottom: 14px;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-backstage-field input,\n.dve-backstage-field select {\n height: 32px;\n padding: 0 8px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font:\n 14px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.dve-backstage-home-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n margin: 24px 0;\n}\n.dve-backstage-toggle {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.dve-backstage-toggle input {\n width: 18px;\n height: 18px;\n}\n@media (max-width: 760px) {\n .dve-backstage-content {\n padding: 20px;\n }\n .dve-backstage-card {\n align-items: stretch;\n flex-direction: column;\n }\n .dve-backstage-columns {\n grid-template-columns: minmax(0, 1fr);\n }\n .dve-backstage-properties {\n padding-left: 0;\n border-left: 0;\n }\n}\n\n/* File > Options > Customize Ribbon: one block per tab, one fieldset per group, a checkbox per command. */\n.dve-options-note {\n margin: 0 0 8px;\n color: var(--muted);\n font-size: 11px;\n}\n.dve-options-action {\n margin: 0 0 8px;\n padding: 6px 11px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: 12px;\n cursor: pointer;\n}\n.dve-customize-tab h3 {\n margin: 14px 0 4px;\n padding-bottom: 2px;\n border-bottom: 1px solid var(--line);\n color: var(--muted);\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.dve-customize-group {\n margin: 0 0 8px;\n padding: 6px 10px 8px;\n border: 1px solid var(--line);\n border-radius: 4px;\n}\n.dve-customize-group legend {\n padding: 0 4px;\n color: var(--muted);\n font-size: 11px;\n}\n.dve-customize-row {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 180px;\n padding: 2px 8px 2px 0;\n font-size: 12px;\n}\n";
18779
+ var backstage_default = "/* Backstage: the shared office-ui-backstage draws the frame; these colour it and style the pages. */\n.dve-backstage {\n --office-backstage-nav-width: 220px;\n --office-backstage-nav-background: var(--word);\n --office-backstage-nav-foreground: var(\n --dve-primary-foreground,\n var(--office-accent-foreground, #fff)\n );\n --office-backstage-item-hover: var(--word-strong);\n z-index: 40;\n background: var(--surface);\n}\n.dve-backstage-content {\n overflow: auto;\n padding: 28px 40px;\n color: var(--ink);\n}\n.dve-backstage-content h2 {\n margin: 0 0 20px;\n font-size: 30px;\n font-weight: 300;\n}\n.dve-backstage-content h3 {\n margin: 24px 0 10px;\n font-size: 15px;\n font-weight: 600;\n}\n.dve-backstage-facts {\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n gap: 6px 24px;\n margin: 0;\n}\n.dve-backstage-facts dt {\n color: var(--muted);\n}\n.dve-backstage-facts dd {\n margin: 0;\n overflow-wrap: anywhere;\n}\n.dve-compatibility-notes {\n display: grid;\n gap: 8px;\n max-width: 760px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.dve-compatibility-notes li {\n display: flex;\n gap: 8px;\n padding: 10px 12px;\n border: 1px solid var(--line);\n border-radius: 6px;\n line-height: 1.45;\n}\n.dve-compatibility-notes .dve-icon {\n margin-top: 2px;\n color: #b7791f;\n}\n.dve-backstage-tile {\n display: inline-flex;\n flex-direction: column;\n gap: 8px;\n padding: 8px;\n border: 1px solid transparent;\n border-radius: 6px;\n background: none;\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n}\n.dve-backstage-tile:hover {\n border-color: var(--line);\n background: var(--word-soft);\n}\n.dve-backstage-tile-preview {\n width: 150px;\n height: 190px;\n border: 1px solid var(--line);\n background: #fff;\n box-shadow: 0 1px 3px #0002;\n}\n.dve-backstage-primary {\n padding: 8px 18px;\n border: 0;\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: var(--word);\n color: var(--dve-primary-foreground, var(--office-accent-foreground, #fff));\n font: inherit;\n cursor: pointer;\n}\n.dve-backstage-muted {\n color: var(--muted);\n}\n\n.dve-backstage-title {\n margin: 0 0 4px;\n font-size: 26px;\n font-weight: 400;\n overflow-wrap: anywhere;\n}\n.dve-backstage-columns {\n display: grid;\n grid-template-columns: minmax(0, 1fr) 300px;\n gap: 40px;\n align-items: start;\n}\n.dve-backstage-properties {\n padding: 4px 0 0 24px;\n border-left: 1px solid var(--line);\n}\n.dve-backstage-properties h3 {\n margin-top: 0;\n}\n.dve-backstage-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 24px;\n max-width: 760px;\n margin-bottom: 12px;\n padding: 14px 18px;\n border: 1px solid var(--line);\n border-radius: 6px;\n}\n.dve-backstage-card h3 {\n margin: 0 0 4px;\n}\n.dve-backstage-card p {\n margin: 0;\n}\n.dve-backstage-field {\n display: grid;\n gap: 4px;\n max-width: 420px;\n margin-bottom: 14px;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-backstage-field input,\n.dve-backstage-field select {\n height: 32px;\n padding: 0 8px;\n border: 1px solid var(--line);\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: var(--surface);\n color: var(--ink);\n font: 14px var(--office-font, system-ui, sans-serif);\n}\n.dve-backstage-home-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n margin: 24px 0;\n}\n.dve-backstage-toggle {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.dve-backstage-toggle input {\n width: 18px;\n height: 18px;\n}\n@media (max-width: 760px) {\n .dve-backstage-content {\n padding: 20px;\n }\n .dve-backstage-card {\n align-items: stretch;\n flex-direction: column;\n }\n .dve-backstage-columns {\n grid-template-columns: minmax(0, 1fr);\n }\n .dve-backstage-properties {\n padding-left: 0;\n border-left: 0;\n }\n}\n\n/* File > Options > Customize Ribbon: one block per tab, one fieldset per group, a checkbox per command. */\n.dve-options-note {\n margin: 0 0 8px;\n color: var(--muted);\n font-size: 11px;\n}\n.dve-options-action {\n margin: 0 0 8px;\n padding: 6px 11px;\n border: 1px solid var(--line);\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: 12px;\n cursor: pointer;\n}\n.dve-customize-tab h3 {\n margin: 14px 0 4px;\n padding-bottom: 2px;\n border-bottom: 1px solid var(--line);\n color: var(--muted);\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.dve-customize-group {\n margin: 0 0 8px;\n padding: 6px 10px 8px;\n border: 1px solid var(--line);\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n}\n.dve-customize-group legend {\n padding: 0 4px;\n color: var(--muted);\n font-size: 11px;\n}\n.dve-customize-row {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 180px;\n padding: 2px 8px 2px 0;\n font-size: 12px;\n}\n";
18776
18780
 
18777
18781
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/status-dialogs.css?raw
18778
- var status_dialogs_default = "/* Status bar: drawn by the shared office-ui-status-bar; this only places it in the frame. */\n.dve-status {\n display: block;\n flex: none;\n min-width: 0;\n border-top: 1px solid var(--line);\n}\n\n@media (max-width: 760px) {\n .dve-backstage-content {\n padding: 20px;\n }\n}\n\n/* Dialogs: the shared office-ui-dialog draws the modal frame; these style the fields inside it. */\n.dve-dialog {\n --office-dialog-width: min(440px, calc(100vw - 32px));\n}\n/* The fields are the dialog's light-DOM children, laid out in the shared body. */\n.dve-dialog > :not([slot]) + :not([slot]) {\n margin-top: 10px;\n}\n.dve-dialog label {\n display: grid;\n gap: 4px;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-dialog input,\n.dve-dialog select {\n height: 30px;\n padding: 0 8px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n}\n.dve-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n}\n.dve-dialog-actions button {\n min-height: 30px;\n padding: 0 14px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n}\n.dve-dialog-actions .dve-dialog-primary {\n border-color: var(--word);\n background: var(--word);\n color: var(--dve-primary-foreground);\n}\n";
18782
+ var status_dialogs_default = "/* Status bar: drawn by the shared office-ui-status-bar; this only places it in the frame. */\n.dve-status {\n display: block;\n flex: none;\n min-width: 0;\n border-top: 1px solid var(--line);\n}\n\n@media (max-width: 760px) {\n .dve-backstage-content {\n padding: 20px;\n }\n}\n\n/* Dialogs: the shared office-ui-dialog draws the modal frame; these style the fields inside it. */\n.dve-dialog {\n --office-dialog-width: min(440px, calc(100vw - 32px));\n}\n/* The fields are the dialog's light-DOM children, laid out in the shared body. */\n.dve-dialog > :not([slot]) + :not([slot]) {\n margin-top: 10px;\n}\n.dve-dialog label {\n display: grid;\n gap: 4px;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-dialog input,\n.dve-dialog select {\n height: 30px;\n padding: 0 8px;\n border: 1px solid var(--line);\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n}\n.dve-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n}\n.dve-dialog-actions button {\n min-height: 30px;\n padding: 0 14px;\n border: 1px solid var(--line);\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n}\n.dve-dialog-actions .dve-dialog-primary {\n border-color: var(--word);\n background: var(--word);\n color: var(--dve-primary-foreground, var(--office-accent-foreground, #fff));\n}\n";
18779
18783
 
18780
18784
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/chrome-document.css?raw
18781
- var chrome_document_default = "/* Links, pictures and hidden text in the document */\n.dve-equation {\n display: inline-block;\n vertical-align: middle;\n max-width: 100%;\n font-family: 'Cambria Math', math, serif;\n}\n.dve-equation-display {\n display: block;\n margin: 0.5em 0;\n text-align: center;\n}\n.dve-equation-unavailable {\n color: var(--muted);\n font-size: 0.85em;\n}\n.dve-paper a.dve-link {\n color: var(--word);\n text-decoration: underline;\n cursor: text;\n}\n.dve-paper img.dve-image {\n max-width: 100%;\n height: auto;\n vertical-align: bottom;\n}\n.dve-paper .dve-image-placeholder {\n display: inline-grid;\n place-items: center;\n border: 1px dashed var(--line);\n background: var(--canvas);\n color: var(--muted);\n font-size: 11px;\n}\n/* Charts: painted read-only from the cached values in the chart part. */\n.dve-paper .dve-chart {\n display: inline-block;\n vertical-align: bottom;\n max-width: 100%;\n overflow: hidden;\n background: #fff;\n}\n.dve-paper .dve-chart > svg {\n display: block;\n width: 100%;\n height: 100%;\n}\n.dve-paper .dve-image-placeholder:has(.dve-textbox-line) {\n place-items: start;\n align-content: start;\n overflow: hidden;\n padding: 4px 6px;\n box-sizing: border-box;\n text-align: left;\n border-style: solid;\n}\n.dve-paper .dve-textbox-line {\n display: block;\n color: var(--text, #1f1f1f);\n font-size: 12px;\n}\n.dve-paper:not([data-show-hidden]) .dve-hidden-text {\n display: none;\n}\n.dve-paper[data-show-hidden] .dve-hidden-text {\n opacity: 0.55;\n text-decoration: underline dotted;\n}\n\n/* Pictures: selection outline and proportional resize handle */\n.dve-paper .dve-picture {\n position: relative;\n display: inline-block;\n max-width: 100%;\n line-height: 0;\n}\n.dve-paper .dve-picture-selected {\n outline: 2px solid var(--word);\n outline-offset: 1px;\n}\n.dve-picture-handle {\n position: absolute;\n right: -5px;\n bottom: -5px;\n display: none;\n width: 10px;\n height: 10px;\n border: 1px solid var(--word);\n background: #fff;\n cursor: nwse-resize;\n}\n.dve-picture-selected .dve-picture-handle {\n display: block;\n}\n.dve-dialog textarea {\n min-height: 60px;\n padding: 6px 8px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n resize: vertical;\n}\n.dve-dialog-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n.dve-dialog .dve-dialog-check {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--ink);\n}\n\n/* Header/footer editing (double-click a header or footer) */\n.dve-header-footer-slot[data-slot] {\n cursor: text;\n}\n.dve-header-footer-editing {\n outline: 1px dashed var(--word);\n outline-offset: 4px;\n}\n.dve-header-footer-editor .ProseMirror {\n outline: none;\n white-space: pre-wrap;\n}\n.dve-header-footer-editor .ProseMirror p {\n margin: 0;\n}\n\n/* Section break marks after the paragraph that ends a section */\n.dve-paper .dve-section-end::after {\n display: block;\n margin: 6px 0;\n border-top: 1px dotted var(--muted);\n border-bottom: 1px dotted var(--muted);\n color: var(--muted);\n content: attr(data-section-break);\n font-size: 10px;\n line-height: 14px;\n text-align: center;\n user-select: none;\n}\n\n/* Floating pictures: an approximation of Word's text wrapping */\n.dve-paper .dve-float-left,\n.dve-header-footer-body .dve-float-left {\n float: left;\n margin: 2px 12px 6px 0;\n}\n.dve-paper .dve-float-right,\n.dve-header-footer-body .dve-float-right {\n float: right;\n margin: 2px 0 6px 12px;\n}\n.dve-paper .dve-float-block {\n display: block;\n width: fit-content;\n margin: 6px 0;\n}\n.dve-paper .dve-float-block-center {\n margin-right: auto;\n margin-left: auto;\n}\n.dve-paper .dve-float-block-right {\n margin-left: auto;\n}\n.dve-paper[data-show-marks] .ProseMirror p::after,\n.dve-paper[data-show-marks] .ProseMirror h1::after,\n.dve-paper[data-show-marks] .ProseMirror h2::after,\n.dve-paper[data-show-marks] .ProseMirror h3::after {\n color: var(--blue);\n content: '\\00b6';\n opacity: 0.7;\n pointer-events: none;\n}\n\n/* Font and Paragraph dialogs */\n.dve-format-dialog {\n --office-dialog-width: min(520px, calc(100vw - 32px));\n}\n.dve-format-dialog .dve-dialog-fieldset {\n display: grid;\n gap: 8px;\n margin: 0;\n padding: 8px 10px 10px;\n border: 1px solid var(--line);\n border-radius: 6px;\n}\n.dve-format-dialog legend {\n padding: 0 4px;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-format-dialog .dve-dialog-cols {\n grid-template-columns: repeat(var(--cols, 2), minmax(0, 1fr));\n}\n.dve-format-dialog input[type='color'] {\n padding: 2px;\n}\n.dve-format-dialog .dve-dialog-fieldset > .dve-dialog-check {\n display: flex;\n}\n.dve-font-dialog .dve-dialog-fieldset:nth-of-type(1) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.dve-font-dialog .dve-font-tab-panel[hidden] {\n display: none;\n}\n.dve-font-tab-panel {\n display: grid;\n gap: 10px;\n}\n.dve-font-dialog .dve-font-tab-panel .dve-dialog-fieldset:has(.dve-dialog-cols) {\n grid-template-columns: 1fr;\n}\n.dve-font-tabs {\n display: flex;\n gap: 2px;\n border-bottom: 1px solid var(--line);\n}\n.dve-font-tabs button {\n background: transparent;\n border: 0;\n border-radius: 0;\n padding: 7px 14px;\n}\n.dve-font-tabs button[aria-selected='true'] {\n color: var(--word);\n border-bottom: 2px solid var(--word);\n font-weight: 600;\n}\n.dve-format-preview {\n display: grid;\n min-height: 54px;\n place-items: center;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: #fff;\n color: #000;\n overflow: hidden;\n}\n.dve-dialog input[type='checkbox'] {\n width: 16px;\n height: 16px;\n padding: 0;\n margin: 0;\n accent-color: var(--word);\n}\n.dve-format-dialog .dve-dialog-fieldset:has(> .dve-dialog-check):not(:has(> .dve-dialog-cols)) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 6px 12px;\n}\n.dve-format-dialog\n .dve-dialog-fieldset:has(> .dve-dialog-check):not(:has(> .dve-dialog-cols))\n legend {\n grid-column: 1 / -1;\n}\n\n/* View > Gridlines: a quarter-inch alignment grid over the page. */\n.dve-paper[data-show-gridlines] {\n background-image:\n linear-gradient(to right, #8ab4f855 1px, transparent 1px),\n linear-gradient(to bottom, #8ab4f855 1px, transparent 1px);\n background-size: 24px 24px;\n}\n\n.dve-dialog-message {\n min-height: 1.2em;\n margin: 0;\n color: #b3261e;\n font-size: 12px;\n}\n\n/* View > Ruler: placement only; the shared office-ui-ruler draws ticks, margins and markers. */\n.dve-canvas > .dve-ruler {\n position: sticky;\n top: -30px;\n z-index: 6;\n flex: none;\n height: 22px;\n margin: -30px auto 8px;\n border: 1px solid var(--line);\n pointer-events: none;\n}\n";
18785
+ var chrome_document_default = "/* Links, pictures and hidden text in the document */\n.dve-equation {\n display: inline-block;\n vertical-align: middle;\n max-width: 100%;\n font-family: 'Cambria Math', math, serif;\n}\n.dve-equation-display {\n display: block;\n margin: 0.5em 0;\n text-align: center;\n}\n.dve-equation-unavailable {\n color: var(--muted);\n font-size: 0.85em;\n}\n.dve-paper a.dve-link {\n color: var(--word);\n text-decoration: underline;\n cursor: text;\n}\n.dve-paper img.dve-image {\n max-width: 100%;\n height: auto;\n vertical-align: bottom;\n}\n.dve-paper .dve-image-placeholder {\n display: inline-grid;\n place-items: center;\n border: 1px dashed var(--line);\n background: var(--canvas);\n color: var(--muted);\n font-size: 11px;\n}\n/* Charts: painted read-only from the cached values in the chart part. */\n.dve-paper .dve-chart {\n display: inline-block;\n vertical-align: bottom;\n max-width: 100%;\n overflow: hidden;\n background: #fff;\n}\n.dve-paper .dve-chart > svg {\n display: block;\n width: 100%;\n height: 100%;\n}\n.dve-paper .dve-image-placeholder:has(.dve-textbox-line) {\n place-items: start;\n align-content: start;\n overflow: hidden;\n padding: 4px 6px;\n box-sizing: border-box;\n text-align: left;\n border-style: solid;\n}\n.dve-paper .dve-textbox-line {\n display: block;\n color: var(--text, #1f1f1f);\n font-size: 12px;\n}\n.dve-paper:not([data-show-hidden]) .dve-hidden-text {\n display: none;\n}\n.dve-paper[data-show-hidden] .dve-hidden-text {\n opacity: 0.55;\n text-decoration: underline dotted;\n}\n\n/* Pictures: selection outline and proportional resize handle */\n.dve-paper .dve-picture {\n position: relative;\n display: inline-block;\n max-width: 100%;\n line-height: 0;\n}\n.dve-paper .dve-picture-selected {\n outline: 2px solid var(--word);\n outline-offset: 1px;\n}\n.dve-picture-handle {\n position: absolute;\n right: -5px;\n bottom: -5px;\n display: none;\n width: 10px;\n height: 10px;\n border: 1px solid var(--word);\n background: #fff;\n cursor: nwse-resize;\n}\n.dve-picture-selected .dve-picture-handle {\n display: block;\n}\n.dve-dialog textarea {\n min-height: 60px;\n padding: 6px 8px;\n border: 1px solid var(--line);\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n resize: vertical;\n}\n.dve-dialog-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n.dve-dialog .dve-dialog-check {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--ink);\n}\n\n/* Header/footer editing (double-click a header or footer) */\n.dve-header-footer-slot[data-slot] {\n cursor: text;\n}\n.dve-header-footer-editing {\n outline: 1px dashed var(--word);\n outline-offset: 4px;\n}\n.dve-header-footer-editor .ProseMirror {\n outline: none;\n white-space: pre-wrap;\n}\n.dve-header-footer-editor .ProseMirror p {\n margin: 0;\n}\n\n/* Section break marks after the paragraph that ends a section */\n.dve-paper .dve-section-end::after {\n display: block;\n margin: 6px 0;\n border-top: 1px dotted var(--muted);\n border-bottom: 1px dotted var(--muted);\n color: var(--muted);\n content: attr(data-section-break);\n font-size: 10px;\n line-height: 14px;\n text-align: center;\n user-select: none;\n}\n\n/* Floating pictures: an approximation of Word's text wrapping */\n.dve-paper .dve-float-left,\n.dve-header-footer-body .dve-float-left {\n float: left;\n margin: 2px 12px 6px 0;\n}\n.dve-paper .dve-float-right,\n.dve-header-footer-body .dve-float-right {\n float: right;\n margin: 2px 0 6px 12px;\n}\n.dve-paper .dve-float-block {\n display: block;\n width: fit-content;\n margin: 6px 0;\n}\n.dve-paper .dve-float-block-center {\n margin-right: auto;\n margin-left: auto;\n}\n.dve-paper .dve-float-block-right {\n margin-left: auto;\n}\n.dve-paper[data-show-marks] .ProseMirror p::after,\n.dve-paper[data-show-marks] .ProseMirror h1::after,\n.dve-paper[data-show-marks] .ProseMirror h2::after,\n.dve-paper[data-show-marks] .ProseMirror h3::after {\n color: var(--blue);\n content: '\\00b6';\n opacity: 0.7;\n pointer-events: none;\n}\n\n/* Font and Paragraph dialogs */\n.dve-format-dialog {\n --office-dialog-width: min(520px, calc(100vw - 32px));\n}\n.dve-format-dialog .dve-dialog-fieldset {\n display: grid;\n gap: 8px;\n margin: 0;\n padding: 8px 10px 10px;\n border: 1px solid var(--line);\n border-radius: 6px;\n}\n.dve-format-dialog legend {\n padding: 0 4px;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-format-dialog .dve-dialog-cols {\n grid-template-columns: repeat(var(--cols, 2), minmax(0, 1fr));\n}\n.dve-format-dialog input[type='color'] {\n padding: 2px;\n}\n.dve-format-dialog .dve-dialog-fieldset > .dve-dialog-check {\n display: flex;\n}\n.dve-font-dialog .dve-dialog-fieldset:nth-of-type(1) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.dve-font-dialog .dve-font-tab-panel[hidden] {\n display: none;\n}\n.dve-font-tab-panel {\n display: grid;\n gap: 10px;\n}\n.dve-font-dialog .dve-font-tab-panel .dve-dialog-fieldset:has(.dve-dialog-cols) {\n grid-template-columns: 1fr;\n}\n.dve-font-tabs {\n display: flex;\n gap: 2px;\n border-bottom: 1px solid var(--line);\n}\n.dve-font-tabs button {\n background: transparent;\n border: 0;\n border-radius: 0;\n padding: 7px 14px;\n}\n.dve-font-tabs button[aria-selected='true'] {\n color: var(--word);\n border-bottom: 2px solid var(--word);\n font-weight: 600;\n}\n.dve-format-preview {\n display: grid;\n min-height: 54px;\n place-items: center;\n border: 1px solid var(--line);\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: #fff;\n color: #000;\n overflow: hidden;\n}\n.dve-dialog input[type='checkbox'] {\n width: 16px;\n height: 16px;\n padding: 0;\n margin: 0;\n accent-color: var(--word);\n}\n.dve-format-dialog .dve-dialog-fieldset:has(> .dve-dialog-check):not(:has(> .dve-dialog-cols)) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 6px 12px;\n}\n.dve-format-dialog\n .dve-dialog-fieldset:has(> .dve-dialog-check):not(:has(> .dve-dialog-cols))\n legend {\n grid-column: 1 / -1;\n}\n\n/* View > Gridlines: a quarter-inch alignment grid over the page. */\n.dve-paper[data-show-gridlines] {\n background-image:\n linear-gradient(to right, #8ab4f855 1px, transparent 1px),\n linear-gradient(to bottom, #8ab4f855 1px, transparent 1px);\n background-size: 24px 24px;\n}\n\n.dve-dialog-message {\n min-height: 1.2em;\n margin: 0;\n color: #b3261e;\n font-size: 12px;\n}\n\n/* View > Ruler: placement only; the shared office-ui-ruler draws ticks, margins and markers. */\n.dve-canvas > .dve-ruler {\n position: sticky;\n top: -30px;\n z-index: 6;\n flex: none;\n height: 22px;\n margin: -30px auto 8px;\n border: 1px solid var(--line);\n pointer-events: none;\n}\n";
18782
18786
 
18783
18787
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/page-navigator.css?raw
18784
- var page_navigator_default = "/* Page thumbnail rail and ribbon customisation */\n[data-dve-hidden] {\n display: none !important;\n}\n.dve-pages-rail {\n display: flex;\n flex: none;\n flex-direction: column;\n box-sizing: border-box;\n width: 156px;\n min-height: 0;\n border-right: 1px solid var(--line);\n background: var(--surface);\n color: var(--ink);\n}\n.dve-pages-rail[hidden] {\n display: none;\n}\n.dve-pages-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 8px;\n border-bottom: 1px solid var(--line);\n font-size: 11px;\n font-weight: 600;\n}\n.dve-pages-close {\n border: 0;\n border-radius: 4px;\n background: none;\n color: var(--muted);\n font-size: 16px;\n line-height: 1;\n cursor: pointer;\n}\n.dve-pages-close:hover {\n background: var(--word-soft);\n}\n.dve-pages-message {\n margin: 0;\n padding: 12px 10px;\n color: var(--muted);\n font-size: 11px;\n line-height: 1.4;\n}\n.dve-pages-message[hidden],\n.dve-pages-list[hidden] {\n display: none;\n}\n.dve-pages-list {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 10px 0 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n}\n.dve-page-thumb {\n display: flex;\n flex: none;\n flex-direction: column;\n align-items: center;\n gap: 3px;\n padding: 4px;\n border: 2px solid transparent;\n border-radius: 4px;\n cursor: pointer;\n}\n.dve-page-thumb:hover {\n background: var(--word-soft);\n}\n.dve-page-thumb[aria-selected='true'] {\n border-color: var(--word);\n background: var(--word-soft);\n}\n.dve-page-thumb-sheet {\n position: relative;\n overflow: hidden;\n background: #fff;\n box-shadow: 0 1px 3px #20212440;\n pointer-events: none;\n}\n.dve-page-thumb-sheet .dve-print-page {\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: none;\n}\n.dve-page-thumb-number {\n color: var(--muted);\n font-size: 11px;\n}\n.dve-page-thumb[aria-selected='true'] .dve-page-thumb-number {\n color: var(--ink);\n font-weight: 600;\n}\n@media print {\n .dve-pages-rail {\n display: none !important;\n }\n}\n";
18788
+ var page_navigator_default = "/* Page thumbnail rail and ribbon customisation */\n[data-dve-hidden] {\n display: none !important;\n}\n.dve-pages-rail {\n display: flex;\n flex: none;\n flex-direction: column;\n box-sizing: border-box;\n width: 156px;\n min-height: 0;\n border-right: 1px solid var(--line);\n background: var(--surface);\n color: var(--ink);\n}\n.dve-pages-rail[hidden] {\n display: none;\n}\n.dve-pages-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 8px;\n border-bottom: 1px solid var(--line);\n font-size: 11px;\n font-weight: 600;\n}\n.dve-pages-close {\n border: 0;\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: none;\n color: var(--muted);\n font-size: 16px;\n line-height: 1;\n cursor: pointer;\n}\n.dve-pages-close:hover {\n background: var(--word-soft);\n}\n.dve-pages-message {\n margin: 0;\n padding: 12px 10px;\n color: var(--muted);\n font-size: 11px;\n line-height: 1.4;\n}\n.dve-pages-message[hidden],\n.dve-pages-list[hidden] {\n display: none;\n}\n.dve-pages-list {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 10px 0 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n}\n.dve-page-thumb {\n display: flex;\n flex: none;\n flex-direction: column;\n align-items: center;\n gap: 3px;\n padding: 4px;\n border: 2px solid transparent;\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n cursor: pointer;\n}\n.dve-page-thumb:hover {\n background: var(--word-soft);\n}\n.dve-page-thumb[aria-selected='true'] {\n border-color: var(--word);\n background: var(--word-soft);\n}\n.dve-page-thumb-sheet {\n position: relative;\n overflow: hidden;\n background: #fff;\n box-shadow: 0 1px 3px #20212440;\n pointer-events: none;\n}\n.dve-page-thumb-sheet .dve-print-page {\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: none;\n}\n.dve-page-thumb-number {\n color: var(--muted);\n font-size: 11px;\n}\n.dve-page-thumb[aria-selected='true'] .dve-page-thumb-number {\n color: var(--ink);\n font-weight: 600;\n}\n@media print {\n .dve-pages-rail {\n display: none !important;\n }\n}\n";
18785
18789
 
18786
18790
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/keyboard-menu.css?raw
18787
- var keyboard_menu_default = "/* Keyboard shortcut help. The context menu is the shared office-ui-context-menu element. */\n.dve-shortcut-help {\n max-height: calc(100% - 180px);\n overflow: auto;\n width: min(560px, calc(100% - 32px));\n}\n.dve-shortcut-help .dve-shortcut-note {\n margin: 0;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-shortcut-help table {\n width: 100%;\n border-collapse: collapse;\n}\n.dve-shortcut-help th,\n.dve-shortcut-help td {\n padding: 5px 8px;\n border-bottom: 1px solid var(--dve-border);\n text-align: left;\n vertical-align: top;\n}\n.dve-shortcut-help th {\n color: var(--muted);\n font-size: 12px;\n font-weight: 600;\n}\n.dve-shortcut-help kbd {\n padding: 1px 6px;\n border: 1px solid var(--dve-border);\n border-radius: 4px;\n background: var(--surface);\n font:\n 12px/1.4 ui-monospace,\n 'SFMono-Regular',\n Consolas,\n monospace;\n white-space: nowrap;\n}\n.dve-canvas:focus-visible {\n outline-offset: -2px;\n}\n\n/* Command-level KeyTips sit on the control itself, fixed to the viewport. */\n.dve-keytip-command {\n position: fixed;\n bottom: auto;\n}\n.dve-keytip[hidden] {\n display: none;\n}\n";
18791
+ var keyboard_menu_default = "/* Keyboard shortcut help. The context menu is the shared office-ui-context-menu element. */\n.dve-shortcut-help {\n max-height: calc(100% - 180px);\n overflow: auto;\n width: min(560px, calc(100% - 32px));\n}\n.dve-shortcut-help .dve-shortcut-note {\n margin: 0;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-shortcut-help table {\n width: 100%;\n border-collapse: collapse;\n}\n.dve-shortcut-help th,\n.dve-shortcut-help td {\n padding: 5px 8px;\n border-bottom: 1px solid var(--dve-border, var(--office-border, #d1d5db));\n text-align: left;\n vertical-align: top;\n}\n.dve-shortcut-help th {\n color: var(--muted);\n font-size: 12px;\n font-weight: 600;\n}\n.dve-shortcut-help kbd {\n padding: 1px 6px;\n border: 1px solid var(--dve-border, var(--office-border, #d1d5db));\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: var(--surface);\n font:\n 12px/1.4 ui-monospace,\n 'SFMono-Regular',\n Consolas,\n monospace;\n white-space: nowrap;\n}\n.dve-canvas:focus-visible {\n outline-offset: -2px;\n}\n\n/* Command-level KeyTips sit on the control itself, fixed to the viewport. */\n.dve-keytip-command {\n position: fixed;\n bottom: auto;\n}\n.dve-keytip[hidden] {\n display: none;\n}\n";
18788
18792
 
18789
18793
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/smartart.css?raw
18790
- var smartart_default = "/* SmartArt: a read-only display of the diagram's saved drawing */\n.dve-smartart {\n position: relative;\n max-width: 100%;\n box-sizing: border-box;\n vertical-align: bottom;\n line-height: normal;\n}\n.dve-smartart:not(.dve-float-left):not(.dve-float-right):not(.dve-float-block) {\n display: inline-block;\n}\n.dve-smartart:focus-visible {\n outline: 2px solid var(--word);\n outline-offset: 2px;\n}\n.dve-smartart-selected {\n outline: 2px solid var(--word);\n outline-offset: 1px;\n}\n.dve-smartart-drawing {\n display: block;\n width: 100%;\n height: 100%;\n}\n.dve-smartart-box {\n overflow: auto;\n border: 1px dashed var(--line);\n background: var(--canvas);\n color: var(--text, #1f1f1f);\n font-size: 12px;\n}\n.dve-smartart-placeholder {\n display: block;\n padding: 6px 8px;\n}\n.dve-smartart-heading {\n display: block;\n color: var(--muted);\n font-size: 11px;\n}\n.dve-smartart-placeholder ul,\n.dve-smartart-notes ul {\n margin: 4px 0 0;\n padding-left: 18px;\n}\n.dve-smartart-info {\n position: absolute;\n top: 2px;\n right: 2px;\n display: none;\n width: 20px;\n height: 20px;\n padding: 0;\n border: 1px solid var(--line);\n border-radius: 50%;\n background: var(--surface, #fff);\n color: var(--muted);\n font: italic 700 12px/1 serif;\n cursor: pointer;\n}\n.dve-smartart:hover .dve-smartart-info,\n.dve-smartart:focus-within .dve-smartart-info,\n.dve-smartart-selected .dve-smartart-info,\n.dve-smartart-info[aria-expanded='true'] {\n display: block;\n}\n.dve-smartart-notes {\n position: absolute;\n z-index: 3;\n top: 26px;\n right: 2px;\n width: max-content;\n max-width: min(320px, 90%);\n padding: 6px 8px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface, #fff);\n color: var(--text, #1f1f1f);\n font-size: 11px;\n text-align: left;\n box-shadow: 0 2px 8px rgb(0 0 0 / 0.18);\n}\n.dve-smartart-notes[hidden] {\n display: none;\n}\n";
18794
+ var smartart_default = "/* SmartArt: a read-only display of the diagram's saved drawing */\n.dve-smartart {\n position: relative;\n max-width: 100%;\n box-sizing: border-box;\n vertical-align: bottom;\n line-height: normal;\n}\n.dve-smartart:not(.dve-float-left):not(.dve-float-right):not(.dve-float-block) {\n display: inline-block;\n}\n.dve-smartart:focus-visible {\n outline: 2px solid var(--word);\n outline-offset: 2px;\n}\n.dve-smartart-selected {\n outline: 2px solid var(--word);\n outline-offset: 1px;\n}\n.dve-smartart-drawing {\n display: block;\n width: 100%;\n height: 100%;\n}\n.dve-smartart-box {\n overflow: auto;\n border: 1px dashed var(--line);\n background: var(--canvas);\n color: var(--text, #1f1f1f);\n font-size: 12px;\n}\n.dve-smartart-placeholder {\n display: block;\n padding: 6px 8px;\n}\n.dve-smartart-heading {\n display: block;\n color: var(--muted);\n font-size: 11px;\n}\n.dve-smartart-placeholder ul,\n.dve-smartart-notes ul {\n margin: 4px 0 0;\n padding-left: 18px;\n}\n.dve-smartart-info {\n position: absolute;\n top: 2px;\n right: 2px;\n display: none;\n width: 20px;\n height: 20px;\n padding: 0;\n border: 1px solid var(--line);\n border-radius: 50%;\n background: var(--surface, #fff);\n color: var(--muted);\n font: italic 700 12px/1 serif;\n cursor: pointer;\n}\n.dve-smartart:hover .dve-smartart-info,\n.dve-smartart:focus-within .dve-smartart-info,\n.dve-smartart-selected .dve-smartart-info,\n.dve-smartart-info[aria-expanded='true'] {\n display: block;\n}\n.dve-smartart-notes {\n position: absolute;\n z-index: 3;\n top: 26px;\n right: 2px;\n width: max-content;\n max-width: min(320px, 90%);\n padding: 6px 8px;\n border: 1px solid var(--line);\n border-radius: var(--dve-radius, var(--office-radius, 4px));\n background: var(--surface, #fff);\n color: var(--text, #1f1f1f);\n font-size: 11px;\n text-align: left;\n box-shadow: 0 2px 8px rgb(0 0 0 / 0.18);\n}\n.dve-smartart-notes[hidden] {\n display: none;\n}\n";
18791
18795
 
18792
18796
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/content-controls.css?raw
18793
- var content_controls_default = "/* Content controls (w:sdt): Word's hover and selected outline, title tab and grey placeholder. */\n.dve-sdt {\n position: relative;\n box-decoration-break: clone;\n -webkit-box-decoration-break: clone;\n}\n.dve-sdt[data-sdt-placeholder],\np[data-sdt-block] .dve-sdt[data-sdt-placeholder] {\n color: #808080;\n}\n.dve-sdt:hover,\n.dve-sdt.dve-sdt-active,\np[data-sdt-block]:hover,\np[data-sdt-block].dve-sdt-active {\n outline: 1px solid var(--dve-sdt-outline, #b6b6b6);\n outline-offset: 1px;\n}\n.dve-sdt.dve-sdt-active,\np[data-sdt-block].dve-sdt-active {\n outline-color: var(--dve-sdt-active, #4472c4);\n}\n/* The title tab sits above the control while it is hovered or holds the caret. */\n.dve-sdt[data-sdt-title]:hover::before,\n.dve-sdt[data-sdt-title].dve-sdt-active::before,\np[data-sdt-block][data-sdt-title]:hover::before,\np[data-sdt-block][data-sdt-title].dve-sdt-active::before {\n content: attr(data-sdt-title);\n position: absolute;\n left: -1px;\n bottom: 100%;\n max-width: 22em;\n padding: 0 6px;\n overflow: hidden;\n background: var(--dve-sdt-active, #4472c4);\n color: #fff;\n font:\n 11px/16px 'Segoe UI',\n Arial,\n sans-serif;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n z-index: 2;\n}\np[data-sdt-block] {\n position: relative;\n}\np[data-sdt-block][data-sdt-title]:hover::before,\np[data-sdt-block][data-sdt-title].dve-sdt-active::before {\n bottom: auto;\n top: -17px;\n}\n/* A drop-down, combo box or date picker shows its arrow at the end. */\n.dve-sdt[data-sdt-kind='dropDownList'].dve-sdt-active::after,\n.dve-sdt[data-sdt-kind='comboBox'].dve-sdt-active::after,\n.dve-sdt[data-sdt-kind='date'].dve-sdt-active::after,\n.dve-sdt[data-sdt-kind='dropDownList']:hover::after,\n.dve-sdt[data-sdt-kind='comboBox']:hover::after,\n.dve-sdt[data-sdt-kind='date']:hover::after {\n content: '\\25be';\n display: inline-block;\n width: 16px;\n margin-left: 4px;\n background: var(--dve-sdt-active, #4472c4);\n color: #fff;\n font-size: 11px;\n line-height: 16px;\n text-align: center;\n vertical-align: baseline;\n cursor: pointer;\n}\n.dve-sdt[data-sdt-kind='date']:hover::after,\n.dve-sdt[data-sdt-kind='date'].dve-sdt-active::after {\n content: '\\25bc';\n font-size: 8px;\n}\n.dve-sdt[data-sdt-kind='checkbox'] {\n cursor: pointer;\n}\n.dve-sdt[data-sdt-lock='sdtLocked']:hover,\n.dve-sdt[data-sdt-lock='sdtContentLocked']:hover {\n outline-style: solid;\n}\n\n/* The calendar and list popups of drop-down, combo box and date controls. */\n.ribbon-popover.sdt-calendar {\n display: grid;\n gap: 6px;\n width: 224px;\n padding: 8px;\n}\n.sdt-calendar-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ink);\n font:\n 600 13px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.sdt-calendar-head button,\n.sdt-calendar-foot button {\n min-width: 26px;\n height: 24px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n}\n.sdt-calendar-head button:hover,\n.sdt-calendar-foot button:hover {\n background: var(--accent-soft);\n}\n.sdt-calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 1px;\n text-align: center;\n}\n.sdt-calendar-grid span,\n.sdt-calendar-grid button {\n height: 26px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--ink);\n font:\n 12px 'Segoe UI',\n Arial,\n sans-serif;\n line-height: 24px;\n}\n.sdt-calendar-grid span {\n color: var(--muted);\n}\n.sdt-calendar-grid button {\n cursor: pointer;\n}\n.sdt-calendar-grid button:hover,\n.sdt-calendar-grid button:focus-visible {\n background: var(--accent-soft);\n}\n.sdt-calendar-grid button.outside {\n color: var(--muted);\n}\n.sdt-calendar-grid button.today {\n border-color: var(--blue);\n}\n.sdt-calendar-grid button.selected {\n background: var(--blue);\n color: #fff;\n}\n.sdt-calendar-foot {\n display: flex;\n justify-content: center;\n}\n\n/* Insert > Equation dialog: the LaTeX source and the live preview. */\n.dve-equation-source {\n width: 100%;\n box-sizing: border-box;\n font:\n 13px/1.4 Consolas,\n 'Cascadia Mono',\n monospace;\n}\n.dve-equation-preview {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 64px;\n padding: 8px;\n overflow: auto;\n border: 1px solid var(--line);\n background: var(--surface);\n color: var(--ink);\n font-size: 20px;\n}\n";
18797
+ var content_controls_default = "/* Content controls (w:sdt): Word's hover and selected outline, title tab and grey placeholder. */\n.dve-sdt {\n position: relative;\n box-decoration-break: clone;\n -webkit-box-decoration-break: clone;\n}\n.dve-sdt[data-sdt-placeholder],\np[data-sdt-block] .dve-sdt[data-sdt-placeholder] {\n color: #808080;\n}\n.dve-sdt:hover,\n.dve-sdt.dve-sdt-active,\np[data-sdt-block]:hover,\np[data-sdt-block].dve-sdt-active {\n outline: 1px solid var(--dve-sdt-outline, #b6b6b6);\n outline-offset: 1px;\n}\n.dve-sdt.dve-sdt-active,\np[data-sdt-block].dve-sdt-active {\n outline-color: var(--dve-sdt-active, #4472c4);\n}\n/* The title tab sits above the control while it is hovered or holds the caret. */\n.dve-sdt[data-sdt-title]:hover::before,\n.dve-sdt[data-sdt-title].dve-sdt-active::before,\np[data-sdt-block][data-sdt-title]:hover::before,\np[data-sdt-block][data-sdt-title].dve-sdt-active::before {\n content: attr(data-sdt-title);\n position: absolute;\n left: -1px;\n bottom: 100%;\n max-width: 22em;\n padding: 0 6px;\n overflow: hidden;\n background: var(--dve-sdt-active, #4472c4);\n color: #fff;\n font: 11px/16px var(--office-font, system-ui, sans-serif);\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n z-index: 2;\n}\np[data-sdt-block] {\n position: relative;\n}\np[data-sdt-block][data-sdt-title]:hover::before,\np[data-sdt-block][data-sdt-title].dve-sdt-active::before {\n bottom: auto;\n top: -17px;\n}\n/* A drop-down, combo box or date picker shows its arrow at the end. */\n.dve-sdt[data-sdt-kind='dropDownList'].dve-sdt-active::after,\n.dve-sdt[data-sdt-kind='comboBox'].dve-sdt-active::after,\n.dve-sdt[data-sdt-kind='date'].dve-sdt-active::after,\n.dve-sdt[data-sdt-kind='dropDownList']:hover::after,\n.dve-sdt[data-sdt-kind='comboBox']:hover::after,\n.dve-sdt[data-sdt-kind='date']:hover::after {\n content: '\\25be';\n display: inline-block;\n width: 16px;\n margin-left: 4px;\n background: var(--dve-sdt-active, #4472c4);\n color: #fff;\n font-size: 11px;\n line-height: 16px;\n text-align: center;\n vertical-align: baseline;\n cursor: pointer;\n}\n.dve-sdt[data-sdt-kind='date']:hover::after,\n.dve-sdt[data-sdt-kind='date'].dve-sdt-active::after {\n content: '\\25bc';\n font-size: 8px;\n}\n.dve-sdt[data-sdt-kind='checkbox'] {\n cursor: pointer;\n}\n.dve-sdt[data-sdt-lock='sdtLocked']:hover,\n.dve-sdt[data-sdt-lock='sdtContentLocked']:hover {\n outline-style: solid;\n}\n\n/* The calendar and list popups of drop-down, combo box and date controls. */\n.ribbon-popover.sdt-calendar {\n display: grid;\n gap: 6px;\n width: 224px;\n padding: 8px;\n}\n.sdt-calendar-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ink);\n font: 600 13px var(--office-font, system-ui, sans-serif);\n}\n.sdt-calendar-head button,\n.sdt-calendar-foot button {\n min-width: 26px;\n height: 24px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n}\n.sdt-calendar-head button:hover,\n.sdt-calendar-foot button:hover {\n background: var(--accent-soft);\n}\n.sdt-calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 1px;\n text-align: center;\n}\n.sdt-calendar-grid span,\n.sdt-calendar-grid button {\n height: 26px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--ink);\n font: 12px var(--office-font, system-ui, sans-serif);\n line-height: 24px;\n}\n.sdt-calendar-grid span {\n color: var(--muted);\n}\n.sdt-calendar-grid button {\n cursor: pointer;\n}\n.sdt-calendar-grid button:hover,\n.sdt-calendar-grid button:focus-visible {\n background: var(--accent-soft);\n}\n.sdt-calendar-grid button.outside {\n color: var(--muted);\n}\n.sdt-calendar-grid button.today {\n border-color: var(--blue);\n}\n.sdt-calendar-grid button.selected {\n background: var(--blue);\n color: #fff;\n}\n.sdt-calendar-foot {\n display: flex;\n justify-content: center;\n}\n\n/* Insert > Equation dialog: the LaTeX source and the live preview. */\n.dve-equation-source {\n width: 100%;\n box-sizing: border-box;\n font:\n 13px/1.4 Consolas,\n 'Cascadia Mono',\n monospace;\n}\n.dve-equation-preview {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 64px;\n padding: 8px;\n overflow: auto;\n border: 1px solid var(--line);\n background: var(--surface);\n color: var(--ink);\n font-size: 20px;\n}\n";
18794
18798
 
18795
18799
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/shapes.css?raw
18796
- var shapes_default = "/* Drawing shapes on the editing surface, the draw tool and the Insert > Shapes gallery. */\n.ProseMirror p {\n position: relative;\n}\n.dve-shape {\n display: inline-block;\n position: relative;\n vertical-align: bottom;\n line-height: 0;\n}\n.dve-shape svg {\n display: block;\n}\n.dve-shape-floating {\n position: absolute;\n z-index: 2;\n}\n.dve-shape-floating.dve-shape-behind {\n z-index: 0;\n}\n.dve-shape-selected {\n outline: 2px solid var(--blue, #2b579a);\n outline-offset: 2px;\n}\n.dve-shape-handle {\n display: none;\n position: absolute;\n right: -6px;\n bottom: -6px;\n width: 9px;\n height: 9px;\n border: 1px solid var(--blue, #2b579a);\n background: #fff;\n cursor: nwse-resize;\n}\n.dve-shape-selected .dve-shape-handle {\n display: block;\n}\n.dve-drawing-shape,\n.dve-drawing-shape * {\n cursor: crosshair !important;\n}\n.dve-shape-rubber {\n position: fixed;\n z-index: 1000;\n border: 1px dashed var(--blue, #2b579a);\n background: rgba(68, 114, 196, 0.12);\n pointer-events: none;\n}\n\n.ribbon-popover.shape-picker {\n width: 244px;\n max-height: 420px;\n padding: 6px 8px 8px;\n overflow-y: auto;\n}\n.shape-picker h4 {\n margin: 6px 0 4px;\n color: var(--muted);\n font:\n 600 11px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.shape-picker-grid {\n display: grid;\n grid-template-columns: repeat(8, 26px);\n gap: 2px;\n}\n.shape-picker-grid button {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n border: 1px solid transparent;\n background: transparent;\n cursor: pointer;\n}\n.shape-picker-grid button:hover,\n.shape-picker-grid button:focus-visible {\n border-color: var(--blue, #2b579a);\n background: var(--accent-soft);\n}\n";
18800
+ var shapes_default = "/* Drawing shapes on the editing surface, the draw tool and the Insert > Shapes gallery. */\n.ProseMirror p {\n position: relative;\n}\n.dve-shape {\n display: inline-block;\n position: relative;\n vertical-align: bottom;\n line-height: 0;\n}\n.dve-shape svg {\n display: block;\n}\n.dve-shape-floating {\n position: absolute;\n z-index: 2;\n}\n.dve-shape-floating.dve-shape-behind {\n z-index: 0;\n}\n.dve-shape-selected {\n outline: 2px solid var(--blue, #2b579a);\n outline-offset: 2px;\n}\n.dve-shape-handle {\n display: none;\n position: absolute;\n right: -6px;\n bottom: -6px;\n width: 9px;\n height: 9px;\n border: 1px solid var(--blue, #2b579a);\n background: #fff;\n cursor: nwse-resize;\n}\n.dve-shape-selected .dve-shape-handle {\n display: block;\n}\n.dve-drawing-shape,\n.dve-drawing-shape * {\n cursor: crosshair !important;\n}\n.dve-shape-rubber {\n position: fixed;\n z-index: 1000;\n border: 1px dashed var(--blue, #2b579a);\n background: rgba(68, 114, 196, 0.12);\n pointer-events: none;\n}\n\n.ribbon-popover.shape-picker {\n width: 244px;\n max-height: 420px;\n padding: 6px 8px 8px;\n overflow-y: auto;\n}\n.shape-picker h4 {\n margin: 6px 0 4px;\n color: var(--muted);\n font: 600 11px var(--office-font, system-ui, sans-serif);\n}\n.shape-picker-grid {\n display: grid;\n grid-template-columns: repeat(8, 26px);\n gap: 2px;\n}\n.shape-picker-grid button {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n border: 1px solid transparent;\n background: transparent;\n cursor: pointer;\n}\n.shape-picker-grid button:hover,\n.shape-picker-grid button:focus-visible {\n border-color: var(--blue, #2b579a);\n background: var(--accent-soft);\n}\n";
18797
18801
 
18798
18802
  // src/docx/styles/index.ts
18799
- var declarations = (theme, scheme) => Object.entries(themeToCssVars(theme)).map(([name, value]) => `${name}:${value};`).join("") + `color-scheme:${scheme};`;
18800
- var themeTokenText = `:host{${declarations(lightTheme, "light")}}
18801
- @media (prefers-color-scheme: dark){:host(:not([theme="light"])){${declarations(darkTheme, "dark")}}}
18802
- :host([theme="dark"]){${declarations(darkTheme, "dark")}}
18803
- :host([theme="light"]){${declarations(lightTheme, "light")}}`;
18803
+ var themeTokenText = legacyThemeAliases(":host", "--dve-", "--_dve-") + ":host{color-scheme:inherit;}";
18804
18804
  var editorStyleText = [
18805
18805
  themeTokenText,
18806
18806
  aliases_default,
18807
- // The shared elements read --office-*; feed them from the editor's --dve-* theme.
18808
- shadcnBridge(":host", "--dve-", { extra: { "--office-font": "'Segoe UI', Arial, sans-serif" } }),
18807
+ // Private aliases resolve on the host; legacy compatibility only remaps the inner chrome.
18808
+ legacyThemeBridge(".dve-frame", "--_dve-"),
18809
18809
  base_default,
18810
18810
  ribbon_default,
18811
18811
  ribbon_buttons_default,
@@ -24272,7 +24272,7 @@ function createChrome(core, api) {
24272
24272
  }
24273
24273
  function buildShell(core, api) {
24274
24274
  const { element, shell } = core;
24275
- if (shell.toolbar) {
24275
+ if (shell.paper) {
24276
24276
  attachPrintEditing(core);
24277
24277
  return;
24278
24278
  }
@@ -24282,8 +24282,8 @@ function buildShell(core, api) {
24282
24282
  style.textContent = editorStyleText;
24283
24283
  const frame = document.createElement("section");
24284
24284
  frame.className = "dve-frame";
24285
- const toolbar = createRibbon(core.locale);
24286
- on(toolbar, "ribbon-action", (event) => routeRibbonAction(core, event.detail));
24285
+ const toolbar = core.surfaceOnly ? void 0 : createRibbon(core.locale);
24286
+ if (toolbar) on(toolbar, "ribbon-action", (event) => routeRibbonAction(core, event.detail));
24287
24287
  const canvas = document.createElement("main");
24288
24288
  canvas.className = "dve-canvas";
24289
24289
  const paper = document.createElement("div");
@@ -24315,6 +24315,16 @@ function buildShell(core, api) {
24315
24315
  { passive: true }
24316
24316
  );
24317
24317
  shell.printLayout = printLayout;
24318
+ if (core.surfaceOnly) {
24319
+ frame.append(canvas);
24320
+ root.append(style, frame);
24321
+ Object.assign(shell, { canvas, paper });
24322
+ attachPrintEditing(core);
24323
+ attachCanvasClick(core);
24324
+ applyShellLabels(element, paper, core.locale);
24325
+ return;
24326
+ }
24327
+ if (!toolbar) return;
24318
24328
  shell.navigator = new PageNavigator({
24319
24329
  pages: () => printLayout.pageElements(),
24320
24330
  pageSnapshot: (index) => printLayout.pageSnapshot(index),
@@ -24954,9 +24964,102 @@ function reflectAttribute(element, name, value) {
24954
24964
  if (name === "locale" && current2 !== null && normalizeEditorLocale(current2) === value) return;
24955
24965
  element.setAttribute(name, value);
24956
24966
  }
24967
+ function wordToolbarProps(core) {
24968
+ const view = core.targetView();
24969
+ const state = view?.state;
24970
+ const canEdit = Boolean(view?.editable && core.canEditBody() && !core.loading);
24971
+ const values2 = /* @__PURE__ */ new Map();
24972
+ const add = (key2, value2) => {
24973
+ if (!values2.has(key2)) values2.set(key2, /* @__PURE__ */ new Set());
24974
+ values2.get(key2).add(value2);
24975
+ };
24976
+ if (state) {
24977
+ const sample = (text, paragraph2) => {
24978
+ for (const key2 of ["bold", "italic", "underline"])
24979
+ add(
24980
+ key2,
24981
+ text.marks.some((mark) => mark.type.name === key2)
24982
+ );
24983
+ const font = effectiveFont(state, text, paragraph2);
24984
+ add("fontFamily", font.family);
24985
+ add("fontSize", font.size);
24986
+ add("alignment", String(paragraph2.attrs.align ?? "left"));
24987
+ };
24988
+ if (state.selection.empty)
24989
+ sample(
24990
+ schema.text("x", state.storedMarks ?? state.selection.$from.marks()),
24991
+ state.selection.$from.parent
24992
+ );
24993
+ else
24994
+ state.doc.nodesBetween(state.selection.from, state.selection.to, (node, _pos, parent) => {
24995
+ if (node.isText && parent) sample(node, parent);
24996
+ });
24997
+ }
24998
+ const value = (key2, fallback) => {
24999
+ const set = values2.get(key2);
25000
+ return set?.size ? set.size === 1 ? [...set][0] : null : fallback;
25001
+ };
25002
+ const run = (action) => {
25003
+ if (core.loading || !core.canEditBody() || !core.targetView()?.editable) return false;
25004
+ routeRibbonAction(core, action);
25005
+ core.refreshControls();
25006
+ return true;
25007
+ };
25008
+ const shared = state && wordYjsPluginKey.getState(state);
25009
+ return {
25010
+ labels: Object.fromEntries(
25011
+ ["Bold", "Italic", "Underline", "Undo", "Redo"].map((label) => [
25012
+ label,
25013
+ translate(core.locale, label)
25014
+ ])
25015
+ ),
25016
+ canEdit,
25017
+ list: state ? listKindOf(state.selection.$from.parent, core.model.numberingCatalog) : null,
25018
+ selection: state ? { from: state.selection.from, to: state.selection.to } : null,
25019
+ bold: value("bold", false),
25020
+ italic: value("italic", false),
25021
+ underline: value("underline", false),
25022
+ fontFamily: value("fontFamily", "Calibri"),
25023
+ fontSize: value("fontSize", 11),
25024
+ alignment: value("alignment", "left"),
25025
+ canUndo: Boolean(canEdit && state && (shared ? wordYjsUndo : undo)(state)),
25026
+ canRedo: Boolean(canEdit && state && (shared ? wordYjsRedo : redo)(state)),
25027
+ onBold: () => run({ type: "format", key: "bold" }),
25028
+ onItalic: () => run({ type: "format", key: "italic" }),
25029
+ onUnderline: () => run({ type: "format", key: "underline" }),
25030
+ onFontFamilyChange: (family) => run({ type: "font", key: "family", value: family }),
25031
+ onFontSizeChange: (size) => run({ type: "font", key: "size", value: String(size) }),
25032
+ onAlignmentChange: (alignment) => run({ type: "align", value: alignment }),
25033
+ onListChange: (kind) => run({ type: "list", key: kind }),
25034
+ onUndo: () => run({ type: "history", key: "undo" }),
25035
+ onRedo: () => run({ type: "history", key: "redo" })
25036
+ };
25037
+ }
25038
+
25039
+ // src/docx/element-api.ts
24957
25040
  var HTMLElementBase = typeof HTMLElement === "undefined" ? class {
24958
25041
  } : HTMLElement;
24959
25042
  var DocxEditorApi = class extends HTMLElementBase {
25043
+ /** Choose before connecting. This mode mounts only the document and its editing surface. */
25044
+ get surfaceOnly() {
25045
+ return this.core.surfaceOnly;
25046
+ }
25047
+ set surfaceOnly(value) {
25048
+ if (this.core.shell.paper && value !== this.core.surfaceOnly)
25049
+ throw new Error("Choose surfaceOnly before mounting the editor.");
25050
+ this.core.surfaceOnly = Boolean(value);
25051
+ }
25052
+ getToolbarProps() {
25053
+ return wordToolbarProps(this.core);
25054
+ }
25055
+ get loading() {
25056
+ return this.core.loading;
25057
+ }
25058
+ /** Selection and formatting updates, including changes which do not dirty the document. */
25059
+ subscribeEditorState(listener) {
25060
+ this.addEventListener("editor-state-change", listener);
25061
+ return () => this.removeEventListener("editor-state-change", listener);
25062
+ }
24960
25063
  /** Join a synchronized Yjs room after loading its matching source package. */
24961
25064
  startYjsCollaboration(session, options) {
24962
25065
  const { core } = this;
@@ -25137,13 +25240,17 @@ var DocxEditorElement = class extends DocxEditorApi {
25137
25240
  else this.core.pendingFileName = value;
25138
25241
  reflectAttribute(this, "file-name", this.fileName);
25139
25242
  }
25140
- /** `light`, `dark`, or `auto` (default, follows the OS). Reflected to the `theme` attribute. */
25243
+ /** `light`, `dark`, or `auto` (default, inherits the Office theme, then follows the OS). Reflected to the `theme` attribute. */
25141
25244
  get theme() {
25142
25245
  return this.core.theme;
25143
25246
  }
25144
25247
  set theme(value) {
25248
+ const previous = this.core.theme;
25145
25249
  this.core.theme = normalizeThemeMode(value);
25146
25250
  reflectAttribute(this, "theme", this.core.theme);
25251
+ if (this.core.theme !== "auto") this.setAttribute("data-office-theme", this.core.theme);
25252
+ else if (previous !== "auto" && this.getAttribute("data-office-theme") === previous)
25253
+ this.removeAttribute("data-office-theme");
25147
25254
  }
25148
25255
  /** Token overrides applied as inline `--dve-*` custom properties on the host. */
25149
25256
  get themeColors() {
@@ -25194,6 +25301,7 @@ var DocxEditorElement = class extends DocxEditorApi {
25194
25301
  reflectAttribute(this, "read-only", this.core.readOnly);
25195
25302
  }
25196
25303
  connectedCallback() {
25304
+ installOfficeUiThemeFor(this);
25197
25305
  buildShell(this.core, this.shellApi);
25198
25306
  renderDocument(this.core);
25199
25307
  }
@@ -25215,6 +25323,8 @@ var DocxEditorElement = class extends DocxEditorApi {
25215
25323
  const { core } = this;
25216
25324
  this.assertDocumentReplaceable();
25217
25325
  const generation = ++core.loadGeneration;
25326
+ core.loading = true;
25327
+ core.refreshControls();
25218
25328
  try {
25219
25329
  const session = await loadDocument(input);
25220
25330
  if (generation !== core.loadGeneration) return;
@@ -25226,6 +25336,11 @@ var DocxEditorElement = class extends DocxEditorApi {
25226
25336
  const error = cause instanceof Error ? cause : new Error(String(cause));
25227
25337
  if (generation === core.loadGeneration) emit(this, "document-error", error);
25228
25338
  throw error;
25339
+ } finally {
25340
+ if (generation === core.loadGeneration) {
25341
+ core.loading = false;
25342
+ core.refreshControls();
25343
+ }
25229
25344
  }
25230
25345
  }
25231
25346
  setLoadedDocument(session) {
@@ -25281,6 +25396,7 @@ var DocxEditorElement = class extends DocxEditorApi {
25281
25396
  const { core } = this;
25282
25397
  core.detachedState = void 0;
25283
25398
  if (bumpGeneration) core.loadGeneration++;
25399
+ if (bumpGeneration) core.loading = false;
25284
25400
  core.loaded = session;
25285
25401
  core.model = model;
25286
25402
  core.inserts.reset();