docxodus 9.6.0 → 9.7.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.
@@ -8878,23 +8878,38 @@ var DocxEditor = class _DocxEditor {
8878
8878
  };
8879
8879
 
8880
8880
  // src/ribbon-chrome.ts
8881
- var RIBBON_STYLE_VERSION = "5";
8881
+ var RIBBON_STYLE_VERSION = "8";
8882
8882
  var RIBBON_STYLE_ATTR = "data-docxodus-ribbon-styles";
8883
8883
  var RIBBON_CSS = `
8884
8884
  .dxr {
8885
- --dxr-ink: #101418;
8885
+ /* OS-Legal design tokens (github.com/Open-Source-Legal/OS-Legal-Style):
8886
+ deep-teal accent, slate foreground scale, warm neutral surfaces, and
8887
+ "light touch" shadows at 0.03-0.06 opacity \u2014 structure over decoration. */
8888
+ --dxr-ink: #1e293b;
8886
8889
  --dxr-sheet: #ffffff;
8887
- --dxr-chrome: #eef1f6;
8888
- --dxr-chrome-sunk: #e3e8f0;
8889
- --dxr-rule: #d3dae4;
8890
- --dxr-accent: #1f5fd0;
8891
- --dxr-wash: #dde8fb;
8892
- --dxr-muted: #5d6975;
8893
- --dxr-data: #0b6f6a;
8894
- --dxr-danger: #a3341f;
8895
- --dxr-desk: #dfe3ea;
8896
- --dxr-ui: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
8890
+ --dxr-chrome: #ffffff;
8891
+ --dxr-chrome-sunk: #f8fafc;
8892
+ --dxr-rule: #e2e8f0;
8893
+ --dxr-rule-strong: #cbd5e1;
8894
+ --dxr-accent: #0f766e;
8895
+ --dxr-accent-hover: #0d9488;
8896
+ --dxr-accent-active: #115e59;
8897
+ --dxr-wash: #f0fdfa;
8898
+ --dxr-wash-on: #ccfbf1;
8899
+ --dxr-muted: #475569;
8900
+ --dxr-faint: #94a3b8;
8901
+ --dxr-data: #0f766e;
8902
+ --dxr-danger: #dc2626;
8903
+ --dxr-danger-wash: #fef2f2;
8904
+ --dxr-desk: #f1f5f9;
8905
+ --dxr-ui: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
8906
+ --dxr-serif: Georgia, "Times New Roman", serif;
8897
8907
  --dxr-mono: ui-monospace, SFMono-Regular, "Cascadia Mono", Consolas, monospace;
8908
+ --dxr-shadow-sm: 0 1px 2px rgba(15, 23, 42, .04);
8909
+ --dxr-shadow-md: 0 1px 3px rgba(15, 23, 42, .06), 0 4px 6px rgba(15, 23, 42, .03);
8910
+ --dxr-shadow-lg: 0 4px 6px rgba(15, 23, 42, .05), 0 10px 15px rgba(15, 23, 42, .04);
8911
+ --dxr-shadow-xl: 0 8px 16px rgba(15, 23, 42, .06), 0 20px 25px rgba(15, 23, 42, .05);
8912
+ --dxr-ease: cubic-bezier(.4, 0, .2, 1);
8898
8913
  --dxr-tap: 30px;
8899
8914
 
8900
8915
  position: relative;
@@ -8910,6 +8925,18 @@ var RIBBON_CSS = `
8910
8925
  }
8911
8926
  .dxr *, .dxr *::before, .dxr *::after { box-sizing: border-box; }
8912
8927
 
8928
+ /* \u2500\u2500 Card frame \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
8929
+ A drop-in embed carries its OWN boundary instead of hoping the host clips it:
8930
+ rounded corners, a hairline, and the house elevation. overflow: clip keeps
8931
+ the sticky chrome, scrollbars, and the loading overlay inside the curve.
8932
+ Full-bleed hosts mount with data-frame="flush" and stay edge-to-edge. */
8933
+ .dxr[data-frame="card"] {
8934
+ border: 1px solid var(--dxr-rule);
8935
+ border-radius: 14px;
8936
+ box-shadow: var(--dxr-shadow-xl);
8937
+ overflow: clip;
8938
+ }
8939
+
8913
8940
  /* Touch devices get bigger hit targets everywhere the token is used. */
8914
8941
  @media (pointer: coarse) { .dxr { --dxr-tap: 40px; } }
8915
8942
 
@@ -8938,12 +8965,13 @@ var RIBBON_CSS = `
8938
8965
  font-weight: 600;
8939
8966
  letter-spacing: -.01em;
8940
8967
  }
8968
+ /* A filled circle, echoing the OS-Legal "Node" motif rather than a diamond. */
8941
8969
  .dxr-brand .dxr-mark {
8942
8970
  flex: 0 0 auto;
8943
8971
  width: 9px;
8944
8972
  height: 9px;
8973
+ border-radius: 50%;
8945
8974
  background: var(--dxr-accent);
8946
- clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
8947
8975
  }
8948
8976
  .dxr-brand .dxr-docname {
8949
8977
  overflow: hidden;
@@ -8975,25 +9003,25 @@ var RIBBON_CSS = `
8975
9003
  scrollbar-width: none;
8976
9004
  }
8977
9005
  .dxr-tabs::-webkit-scrollbar { display: none; }
9006
+ /* Line-variant tabs (the house Tabs default): no boxes, no fills \u2014 the selected
9007
+ tab is a 2px accent underline sitting on the panel's own hairline. */
8978
9008
  .dxr-tab {
8979
9009
  flex: 0 0 auto;
8980
- padding: 6px 15px 7px;
8981
- border: 1px solid transparent;
8982
- border-bottom: none;
8983
- border-radius: 5px 5px 0 0;
9010
+ padding: 7px 14px 8px;
9011
+ border: none;
8984
9012
  background: none;
8985
9013
  color: var(--dxr-muted);
8986
9014
  font: inherit;
8987
9015
  font-size: 12.5px;
9016
+ font-weight: 500;
8988
9017
  cursor: pointer;
9018
+ transition: color .15s var(--dxr-ease), box-shadow .15s var(--dxr-ease);
8989
9019
  }
8990
- .dxr-tab:hover { color: var(--dxr-ink); background: #e6ebf3; }
9020
+ .dxr-tab:hover { color: var(--dxr-ink); }
8991
9021
  .dxr-tab[aria-selected="true"] {
8992
9022
  color: var(--dxr-ink);
8993
9023
  font-weight: 600;
8994
- background: var(--dxr-chrome-sunk);
8995
- border-color: var(--dxr-rule);
8996
- box-shadow: inset 0 2px 0 var(--dxr-accent);
9024
+ box-shadow: inset 0 -2px 0 var(--dxr-accent);
8997
9025
  }
8998
9026
  /* Contextual tab \u2014 present only while the caret is inside a table. */
8999
9027
  .dxr-tab[data-contextual] { color: var(--dxr-accent); }
@@ -9023,7 +9051,7 @@ var RIBBON_CSS = `
9023
9051
  .dxr-group:last-child { border-right: none; }
9024
9052
  .dxr-group:first-child { padding-left: 0; }
9025
9053
  .dxr-glabel {
9026
- color: var(--dxr-muted);
9054
+ color: var(--dxr-faint);
9027
9055
  font-size: 9.5px;
9028
9056
  font-weight: 600;
9029
9057
  letter-spacing: .11em;
@@ -9032,48 +9060,69 @@ var RIBBON_CSS = `
9032
9060
  .dxr-row { display: flex; gap: 3px; align-items: center; }
9033
9061
 
9034
9062
  /* \u2500\u2500 Controls \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
9063
+ /* One button family, house-style: every control is a ghost \u2014 no borders, no
9064
+ fills, no per-button boxes. Hover paints a quiet slate wash; the active
9065
+ (toggled) state paints a teal one. Save alone is the flat primary, so the
9066
+ surface has exactly one accent-colored action. */
9035
9067
  .dxr button, .dxr label.dxr-btn {
9036
9068
  min-height: var(--dxr-tap);
9037
9069
  padding: 5px 9px;
9038
- border: 1px solid transparent;
9039
- border-radius: 4px;
9070
+ border: none;
9071
+ border-radius: 6px;
9040
9072
  background: none;
9041
9073
  color: var(--dxr-ink);
9042
9074
  font: inherit;
9043
9075
  font-size: 13px;
9076
+ font-weight: 500;
9044
9077
  line-height: 1.15;
9045
9078
  cursor: pointer;
9079
+ transition: background-color .15s var(--dxr-ease), color .15s var(--dxr-ease),
9080
+ box-shadow .15s var(--dxr-ease), transform .15s var(--dxr-ease);
9046
9081
  }
9047
9082
  .dxr label.dxr-btn { display: inline-flex; align-items: center; }
9048
- .dxr button:hover, .dxr label.dxr-btn:hover { background: #d6deea; }
9049
- .dxr button:active { background: #c8d3e3; }
9083
+ .dxr button:hover, .dxr label.dxr-btn:hover { background: #f1f5f9; }
9084
+ .dxr button:active { background: #e2e8f0; }
9050
9085
  .dxr button:disabled { opacity: .38; cursor: default; background: none; }
9051
- .dxr button.dxr-on { color: var(--dxr-accent); background: var(--dxr-wash); border-color: #b3ccf2; }
9052
- .dxr-quick button, .dxr-quick label.dxr-btn {
9053
- padding: 4px 10px;
9054
- border-color: var(--dxr-rule);
9055
- background: #f7f9fc;
9056
- font-size: 12.5px;
9057
- }
9058
- .dxr-quick button:hover, .dxr-quick label.dxr-btn:hover { background: #fff; border-color: #b9c4d4; }
9059
- .dxr-quick button:disabled:hover { background: #f7f9fc; border-color: var(--dxr-rule); }
9060
- .dxr button.dxr-icon { min-width: var(--dxr-tap); text-align: center; }
9086
+ .dxr button.dxr-on { color: var(--dxr-accent); background: var(--dxr-wash-on); }
9087
+ .dxr-quick button, .dxr-quick label.dxr-btn { padding: 4px 10px; font-size: 12.5px; }
9088
+ /* Save \u2014 the house primary: flat accent, sm shadow, the 1px lift on hover. */
9089
+ .dxr-quick button[data-dxr="save"]:not(:disabled) {
9090
+ background: var(--dxr-accent);
9091
+ color: #fff;
9092
+ font-weight: 600;
9093
+ box-shadow: var(--dxr-shadow-sm);
9094
+ }
9095
+ .dxr-quick button[data-dxr="save"]:not(:disabled):hover {
9096
+ background: var(--dxr-accent-hover);
9097
+ box-shadow: var(--dxr-shadow-md);
9098
+ transform: translateY(-1px);
9099
+ }
9100
+ .dxr-quick button[data-dxr="save"]:not(:disabled):active {
9101
+ background: var(--dxr-accent-active);
9102
+ box-shadow: var(--dxr-shadow-sm);
9103
+ transform: translateY(0);
9104
+ }
9105
+ /* Icon controls sit quieter than text ones until touched (house IconButton). */
9106
+ .dxr button.dxr-icon { min-width: var(--dxr-tap); text-align: center; color: var(--dxr-muted); }
9107
+ .dxr button.dxr-icon:hover:not(:disabled) { color: var(--dxr-ink); }
9108
+ .dxr button.dxr-icon.dxr-on { color: var(--dxr-accent); }
9061
9109
  /* Icons are inline SVG drawn from the same shapes the control acts on (text lines,
9062
9110
  rules), so alignment and indent read at a glance instead of relying on arrow
9063
9111
  glyphs that collide with undo/redo. currentColor keeps them in step with state. */
9064
9112
  .dxr button svg { display: block; margin: 0 auto; fill: currentColor; }
9065
9113
  .dxr button.dxr-wide { display: inline-flex; align-items: center; justify-content: center; gap: 6px; }
9066
- .dxr button.dxr-danger:hover { color: var(--dxr-danger); background: #f6dcd6; }
9114
+ .dxr button.dxr-danger:hover { color: var(--dxr-danger); background: var(--dxr-danger-wash); }
9067
9115
  .dxr select, .dxr input[type="number"], .dxr input[type="text"] {
9068
9116
  min-height: var(--dxr-tap);
9069
9117
  padding: 4px 6px;
9070
9118
  border: 1px solid var(--dxr-rule);
9071
- border-radius: 4px;
9072
- background: #f7f9fc;
9119
+ border-radius: 6px;
9120
+ background: var(--dxr-sheet);
9073
9121
  color: var(--dxr-ink);
9074
9122
  font: inherit;
9075
9123
  font-size: 12.5px;
9076
9124
  }
9125
+ .dxr select:hover, .dxr input:hover { border-color: var(--dxr-rule-strong); }
9077
9126
  .dxr select:focus-visible, .dxr input:focus-visible, .dxr button:focus-visible,
9078
9127
  .dxr .dxr-tab:focus-visible, .dxr label.dxr-btn:focus-within {
9079
9128
  outline: 2px solid var(--dxr-accent);
@@ -9104,7 +9153,7 @@ var RIBBON_CSS = `
9104
9153
  height: 25px;
9105
9154
  padding: 0 10px;
9106
9155
  overflow-x: auto;
9107
- background: #f7f9fc;
9156
+ background: #fafafa;
9108
9157
  border-top: 1px solid var(--dxr-rule);
9109
9158
  color: var(--dxr-muted);
9110
9159
  font-family: var(--dxr-mono);
@@ -9123,7 +9172,7 @@ var RIBBON_CSS = `
9123
9172
  .dxr-rail .dxr-cell:first-child { padding-left: 0; }
9124
9173
  .dxr-rail .dxr-cell:last-child { border-right: none; }
9125
9174
  .dxr-rail .dxr-k {
9126
- color: #8b96a3;
9175
+ color: var(--dxr-faint);
9127
9176
  font-family: var(--dxr-ui);
9128
9177
  font-size: 9.5px;
9129
9178
  letter-spacing: .1em;
@@ -9131,7 +9180,7 @@ var RIBBON_CSS = `
9131
9180
  }
9132
9181
  .dxr-rail .dxr-v { color: var(--dxr-data); }
9133
9182
  .dxr-rail .dxr-v.dxr-flash { animation: dxr-railflash .45s ease-out; }
9134
- @keyframes dxr-railflash { from { background: #b9ecdf; } to { background: transparent; } }
9183
+ @keyframes dxr-railflash { from { background: #ccfbf1; } to { background: transparent; } }
9135
9184
 
9136
9185
  /* \u2500\u2500 Hint \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
9137
9186
  .dxr-hint {
@@ -9146,8 +9195,8 @@ var RIBBON_CSS = `
9146
9195
  .dxr-hint kbd {
9147
9196
  padding: 0 4px;
9148
9197
  border: 1px solid var(--dxr-rule);
9149
- border-radius: 3px;
9150
- background: #e8ecf3;
9198
+ border-radius: 4px;
9199
+ background: #f1f5f9;
9151
9200
  font-family: var(--dxr-mono);
9152
9201
  font-size: 11px;
9153
9202
  }
@@ -9162,13 +9211,34 @@ var RIBBON_CSS = `
9162
9211
  SHOULD win.
9163
9212
  (No backticks in this file's comments: the stylesheet is a template literal.) */
9164
9213
  .dxr-scroll { flex: 1 1 auto; min-height: 0; overflow: auto; -webkit-overflow-scrolling: touch; }
9214
+ /* Soft scroll boundaries: content dissolves at the chrome and at the bottom edge
9215
+ instead of hard-clipping. Sticky gradient veils cost one paint layer each and
9216
+ never intercept input. */
9217
+ .dxr-scroll::before, .dxr-scroll::after {
9218
+ content: "";
9219
+ position: sticky;
9220
+ z-index: 3;
9221
+ display: block;
9222
+ height: 26px;
9223
+ pointer-events: none;
9224
+ }
9225
+ .dxr-scroll::before {
9226
+ top: 0;
9227
+ margin-bottom: -26px;
9228
+ background: linear-gradient(to bottom, var(--dxr-desk), transparent);
9229
+ }
9230
+ .dxr-scroll::after {
9231
+ bottom: 0;
9232
+ margin-top: -26px;
9233
+ background: linear-gradient(to top, var(--dxr-desk), transparent);
9234
+ }
9165
9235
  .dxr[data-chrome] .dxr-surface { margin: 26px auto; padding: 0 16px 96px; }
9166
9236
  .dxr-surface [contenteditable="true"]:focus {
9167
9237
  outline: 2px solid var(--dxr-accent);
9168
9238
  outline-offset: 2px;
9169
9239
  border-radius: 2px;
9170
9240
  }
9171
- @media (hover: hover) { .dxr-surface [contenteditable="true"]:hover { background: #f2f7ff; } }
9241
+ @media (hover: hover) { .dxr-surface [contenteditable="true"]:hover { background: var(--dxr-wash); } }
9172
9242
 
9173
9243
  /* Header/footer bands: stories live in their own OOXML parts outside the body,
9174
9244
  so they dock as their own regions. Styled from the same tokens as the ribbon
@@ -9180,9 +9250,10 @@ var RIBBON_CSS = `
9180
9250
  margin: 0 auto 14px;
9181
9251
  padding: 9px 72px 13px;
9182
9252
  border: 1px solid var(--dxr-rule);
9183
- border-left: 2px solid #c2ccd9;
9184
- border-radius: 3px;
9253
+ border-left: 2px solid #5eead4;
9254
+ border-radius: 6px;
9185
9255
  background: var(--dxr-sheet);
9256
+ box-shadow: var(--dxr-shadow-sm);
9186
9257
  }
9187
9258
  .dxr-surface .docx-hf-band + .docx-body-flow { margin-top: 0; }
9188
9259
  .dxr-surface .docx-hf-band[data-hf-band="footer"] { margin: 14px auto 0; }
@@ -9201,8 +9272,8 @@ var RIBBON_CSS = `
9201
9272
  .dxr-surface .docx-hf-chrome select, .dxr-surface .docx-hf-chrome input {
9202
9273
  padding: 3px 5px;
9203
9274
  border: 1px solid var(--dxr-rule);
9204
- border-radius: 4px;
9205
- background: #f7f9fc;
9275
+ border-radius: 6px;
9276
+ background: var(--dxr-sheet);
9206
9277
  color: var(--dxr-ink);
9207
9278
  font: inherit;
9208
9279
  font-family: var(--dxr-ui);
@@ -9216,22 +9287,22 @@ var RIBBON_CSS = `
9216
9287
  .dxr-surface .docx-hf-warning {
9217
9288
  margin: 0 0 8px -60px;
9218
9289
  padding: 7px 9px;
9219
- border: 1px solid #e8d9a8;
9220
- border-left: 2px solid #c9a227;
9221
- border-radius: 3px;
9222
- background: #fdf6e3;
9223
- color: #6b5310;
9290
+ border: 1px solid #fde68a;
9291
+ border-left: 2px solid #d97706;
9292
+ border-radius: 6px;
9293
+ background: #fffbeb;
9294
+ color: #92400e;
9224
9295
  font-size: 12px;
9225
9296
  line-height: 1.45;
9226
9297
  }
9227
9298
  .dxr-surface .docx-hf-warning button {
9228
9299
  margin-left: 6px;
9229
9300
  padding: 2px 8px;
9230
- border-color: #e8d9a8;
9301
+ border-color: #fde68a;
9231
9302
  background: #fff;
9232
9303
  font-size: 12px;
9233
9304
  }
9234
- .dxr-surface .docx-hf-placeholder { color: #9aa4b1; font-style: italic; }
9305
+ .dxr-surface .docx-hf-placeholder { color: var(--dxr-faint); font-style: italic; }
9235
9306
  .dxr-surface .docx-hf-inherited {
9236
9307
  color: var(--dxr-muted);
9237
9308
  font-style: italic;
@@ -9251,7 +9322,7 @@ var RIBBON_CSS = `
9251
9322
  padding: 56px 0;
9252
9323
  border-radius: 3px;
9253
9324
  background: var(--dxr-sheet);
9254
- box-shadow: 0 1px 3px rgba(16, 20, 24, .14), 0 8px 24px rgba(16, 20, 24, .05);
9325
+ box-shadow: 0 1px 3px rgba(15, 23, 42, .08), 0 12px 24px rgba(15, 23, 42, .06);
9255
9326
  }
9256
9327
 
9257
9328
  /* \u2500\u2500 Table size picker \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
@@ -9261,9 +9332,9 @@ var RIBBON_CSS = `
9261
9332
  z-index: 30;
9262
9333
  padding: 9px;
9263
9334
  border: 1px solid var(--dxr-rule);
9264
- border-radius: 6px;
9335
+ border-radius: 12px;
9265
9336
  background: #fff;
9266
- box-shadow: 0 4px 16px rgba(16, 20, 24, .18);
9337
+ box-shadow: var(--dxr-shadow-xl);
9267
9338
  }
9268
9339
  .dxr-pop[data-open] { display: block; }
9269
9340
  .dxr-gridcells { display: grid; grid-template-columns: repeat(10, 16px); gap: 2px; }
@@ -9271,11 +9342,11 @@ var RIBBON_CSS = `
9271
9342
  width: 16px;
9272
9343
  height: 16px;
9273
9344
  border: 1px solid var(--dxr-rule);
9274
- border-radius: 2px;
9275
- background: #f2f5f9;
9345
+ border-radius: 3px;
9346
+ background: var(--dxr-chrome-sunk);
9276
9347
  cursor: pointer;
9277
9348
  }
9278
- .dxr-gridcells div[data-on] { background: var(--dxr-wash); border-color: var(--dxr-accent); }
9349
+ .dxr-gridcells div[data-on] { background: #ccfbf1; border-color: var(--dxr-accent); }
9279
9350
  .dxr-popfoot {
9280
9351
  display: flex;
9281
9352
  justify-content: space-between;
@@ -9358,11 +9429,11 @@ var RIBBON_CSS = `
9358
9429
  display: grid;
9359
9430
  place-items: center;
9360
9431
  padding: 24px;
9361
- color: #f4f9ff;
9432
+ color: #f8fafc;
9362
9433
  background:
9363
- radial-gradient(circle at 20% 20%, rgba(63, 128, 255, .24), transparent 22rem),
9364
- radial-gradient(circle at 82% 80%, rgba(176, 91, 255, .22), transparent 24rem),
9365
- linear-gradient(145deg, #071221 0%, #0b1930 52%, #101426 100%);
9434
+ radial-gradient(circle at 20% 20%, rgba(13, 148, 136, .2), transparent 22rem),
9435
+ radial-gradient(circle at 82% 80%, rgba(45, 212, 191, .1), transparent 24rem),
9436
+ linear-gradient(150deg, #0b1220 0%, #0f172a 55%, #0f2723 100%);
9366
9437
  transition: opacity .55s ease, visibility .55s ease;
9367
9438
  }
9368
9439
  .dxr-loader[hidden] { display: none; }
@@ -9381,14 +9452,14 @@ var RIBBON_CSS = `
9381
9452
  .dxr-orbit {
9382
9453
  position: absolute;
9383
9454
  inset: 7%;
9384
- border: 1px solid rgba(115, 204, 255, .22);
9455
+ border: 1px solid rgba(45, 212, 191, .24);
9385
9456
  border-radius: 50%;
9386
9457
  animation: dxr-spin 9s linear infinite;
9387
9458
  }
9388
9459
  .dxr-orbit.dxr-two {
9389
9460
  inset: 20%;
9390
9461
  border-style: dashed;
9391
- border-color: rgba(196, 128, 255, .32);
9462
+ border-color: rgba(94, 234, 212, .3);
9392
9463
  animation-duration: 6s;
9393
9464
  animation-direction: reverse;
9394
9465
  }
@@ -9398,19 +9469,19 @@ var RIBBON_CSS = `
9398
9469
  height: 10px;
9399
9470
  border-radius: 50%;
9400
9471
  content: "";
9401
- background: #52e5ff;
9402
- box-shadow: 0 0 18px #52e5ff;
9472
+ background: #2dd4bf;
9473
+ box-shadow: 0 0 18px rgba(45, 212, 191, .8);
9403
9474
  }
9404
9475
  .dxr-orbit::before { top: -5px; left: 50%; }
9405
- .dxr-orbit::after { right: 7%; bottom: 12%; background: #b26cff; box-shadow: 0 0 18px #b26cff; }
9476
+ .dxr-orbit::after { right: 7%; bottom: 12%; background: #5eead4; box-shadow: 0 0 18px rgba(94, 234, 212, .7); }
9406
9477
  .dxr-card {
9407
9478
  position: absolute;
9408
9479
  inset: 24% 28%;
9409
9480
  padding: 20px 15px;
9410
- border: 1px solid rgba(255, 255, 255, .33);
9481
+ border: 1px solid rgba(255, 255, 255, .3);
9411
9482
  border-radius: 14px;
9412
- background: linear-gradient(150deg, rgba(255, 255, 255, .18), rgba(255, 255, 255, .06));
9413
- box-shadow: 0 22px 50px rgba(0, 0, 0, .35), 0 0 45px rgba(71, 150, 255, .13);
9483
+ background: linear-gradient(150deg, rgba(255, 255, 255, .16), rgba(255, 255, 255, .05));
9484
+ box-shadow: 0 22px 50px rgba(0, 0, 0, .35), 0 0 45px rgba(13, 148, 136, .15);
9414
9485
  backdrop-filter: blur(10px);
9415
9486
  animation: dxr-float 3.6s ease-in-out infinite;
9416
9487
  }
@@ -9420,8 +9491,8 @@ var RIBBON_CSS = `
9420
9491
  right: -9px;
9421
9492
  padding: 4px 7px;
9422
9493
  border-radius: 6px;
9423
- background: #52e5ff;
9424
- color: #06111d;
9494
+ background: #2dd4bf;
9495
+ color: #042f2e;
9425
9496
  content: "DOCX";
9426
9497
  font-size: 8px;
9427
9498
  font-weight: 900;
@@ -9438,46 +9509,49 @@ var RIBBON_CSS = `
9438
9509
  }
9439
9510
  .dxr-card i:nth-child(2) { width: 76%; animation-delay: -.45s; }
9440
9511
  .dxr-card i:nth-child(3) { width: 88%; animation-delay: -.85s; }
9441
- .dxr-card i:nth-child(4) { width: 58%; background: rgba(255, 111, 139, .75); animation-delay: -1.2s; }
9512
+ .dxr-card i:nth-child(4) { width: 58%; background: rgba(248, 113, 113, .75); animation-delay: -1.2s; }
9442
9513
  .dxr-chip {
9443
9514
  position: absolute;
9444
9515
  display: grid;
9445
9516
  width: 34px;
9446
9517
  height: 34px;
9447
9518
  place-items: center;
9448
- border: 1px solid rgba(255, 255, 255, .17);
9519
+ border: 1px solid rgba(255, 255, 255, .16);
9449
9520
  border-radius: 11px;
9450
- background: rgba(12, 28, 49, .88);
9521
+ background: rgba(15, 30, 46, .88);
9451
9522
  box-shadow: 0 12px 30px rgba(0, 0, 0, .28);
9452
9523
  font-size: 11px;
9453
9524
  font-weight: 850;
9454
9525
  }
9455
- .dxr-chip.dxr-b { left: 2%; top: 30%; color: #52e5ff; animation: dxr-chip 3s ease-in-out infinite; }
9456
- .dxr-chip.dxr-r { right: -2%; bottom: 24%; color: #ff8da0; animation: dxr-chip 3s -1.4s ease-in-out infinite; }
9457
- .dxr-chip.dxr-s { left: 20%; bottom: 0; color: #52e0a2; animation: dxr-chip 3s -.7s ease-in-out infinite; }
9458
- .dxr-eyebrow { color: #52e5ff; font-size: 10px; font-weight: 850; letter-spacing: .16em; text-transform: uppercase; }
9526
+ .dxr-chip.dxr-b { left: 2%; top: 30%; color: #5eead4; animation: dxr-chip 3s ease-in-out infinite; }
9527
+ .dxr-chip.dxr-r { right: -2%; bottom: 24%; color: #fca5a5; animation: dxr-chip 3s -1.4s ease-in-out infinite; }
9528
+ .dxr-chip.dxr-s { left: 20%; bottom: 0; color: #6ee7b7; animation: dxr-chip 3s -.7s ease-in-out infinite; }
9529
+ .dxr-eyebrow { color: #5eead4; font-size: 10px; font-weight: 850; letter-spacing: .16em; text-transform: uppercase; }
9530
+ /* Georgia headline \u2014 the house pairing of a serif headline over Inter UI copy. */
9459
9531
  .dxr-loader h2 {
9460
9532
  margin: 10px auto 10px;
9461
9533
  max-width: 520px;
9462
- font-size: clamp(23px, 5vw, 40px);
9463
- line-height: 1.05;
9464
- letter-spacing: -.045em;
9534
+ font-family: var(--dxr-serif);
9535
+ font-size: clamp(23px, 5vw, 38px);
9536
+ font-weight: 500;
9537
+ line-height: 1.08;
9538
+ letter-spacing: -.02em;
9465
9539
  }
9466
- .dxr-loader-copy > p { margin: 0 auto; max-width: 46ch; color: #9eb2c9; font-size: 13.5px; line-height: 1.6; }
9540
+ .dxr-loader-copy > p { margin: 0 auto; max-width: 46ch; color: #94a3b8; font-size: 13.5px; line-height: 1.6; }
9467
9541
  .dxr-ad {
9468
9542
  display: flex;
9469
9543
  gap: 12px;
9470
9544
  margin: 20px auto 0;
9471
9545
  max-width: 420px;
9472
9546
  padding: 13px;
9473
- border: 1px solid rgba(126, 160, 200, .16);
9474
- border-radius: 13px;
9547
+ border: 1px solid rgba(148, 163, 184, .16);
9548
+ border-radius: 12px;
9475
9549
  background: rgba(255, 255, 255, .04);
9476
9550
  text-align: left;
9477
9551
  }
9478
- .dxr-ad .dxr-num { color: #b26cff; font: 800 10px/1.4 var(--dxr-mono); }
9552
+ .dxr-ad .dxr-num { color: #2dd4bf; font: 800 10px/1.4 var(--dxr-mono); }
9479
9553
  .dxr-ad strong { display: block; font-size: 12.5px; }
9480
- .dxr-ad .dxr-adcopy { display: block; margin-top: 4px; color: #849bb5; font-size: 11.5px; line-height: 1.45; }
9554
+ .dxr-ad .dxr-adcopy { display: block; margin-top: 4px; color: #8ba0b9; font-size: 11.5px; line-height: 1.45; }
9481
9555
  .dxr-ad[data-swap] { animation: dxr-swap .4s ease; }
9482
9556
  .dxr-track {
9483
9557
  height: 3px;
@@ -9491,8 +9565,8 @@ var RIBBON_CSS = `
9491
9565
  width: 12%;
9492
9566
  height: 100%;
9493
9567
  border-radius: inherit;
9494
- background: linear-gradient(90deg, #52e5ff, #5c7cff, #b26cff);
9495
- box-shadow: 0 0 16px rgba(82, 229, 255, .55);
9568
+ background: linear-gradient(90deg, #14b8a6, #2dd4bf, #5eead4);
9569
+ box-shadow: 0 0 16px rgba(45, 212, 191, .5);
9496
9570
  transition: width .65s cubic-bezier(.22, .8, .28, 1);
9497
9571
  }
9498
9572
  .dxr-meta {
@@ -9501,7 +9575,7 @@ var RIBBON_CSS = `
9501
9575
  gap: 14px;
9502
9576
  margin: 9px auto 0;
9503
9577
  max-width: 420px;
9504
- color: #647e9c;
9578
+ color: #64748b;
9505
9579
  font: 700 9px/1 var(--dxr-mono);
9506
9580
  letter-spacing: .09em;
9507
9581
  text-transform: uppercase;
@@ -9510,9 +9584,9 @@ var RIBBON_CSS = `
9510
9584
  display: none;
9511
9585
  margin-top: 18px;
9512
9586
  padding: 9px 14px;
9513
- border: 1px solid rgba(255, 127, 145, .4);
9587
+ border: 1px solid rgba(248, 113, 113, .4);
9514
9588
  border-radius: 9px;
9515
- background: rgba(255, 127, 145, .12);
9589
+ background: rgba(248, 113, 113, .12);
9516
9590
  color: #fff;
9517
9591
  cursor: pointer;
9518
9592
  }
@@ -9627,8 +9701,8 @@ var RIBBON_HTML = `
9627
9701
  )}</button>
9628
9702
  </div>
9629
9703
  <div class="dxr-row">
9630
- <button type="button" data-list="bullet" title="Bullet list">&#8226; List</button>
9631
- <button type="button" data-list="decimal" title="Numbered list">1. List</button>
9704
+ <button type="button" data-list="bullet" title="Bullet list">Bullets</button>
9705
+ <button type="button" data-list="decimal" title="Numbered list">Numbered</button>
9632
9706
  <button type="button" data-pagebreak title="Start this block on a new page">Page break</button>
9633
9707
  </div>
9634
9708
  </div>
@@ -9951,6 +10025,7 @@ var RibbonSurface = class {
9951
10025
  const root = doc.createElement("div");
9952
10026
  root.className = "dxr";
9953
10027
  root.dataset.state = "idle";
10028
+ root.dataset.frame = this.options.frame ?? "flush";
9954
10029
  root.innerHTML = RIBBON_HTML;
9955
10030
  for (const el of Array.from(root.querySelectorAll("[data-dxr]"))) {
9956
10031
  el.id = this.idPrefix + el.dataset.dxr;
@@ -12018,6 +12093,9 @@ async function createRibbonEditor(container, source, options = {}) {
12018
12093
  mount2.root.style.minHeight = "0";
12019
12094
  const ribbon = mountRibbon(mount2.root, {
12020
12095
  documentName: ribbonOptions.documentName ?? nameFromSource(source),
12096
+ // A drop-in embed sits in the middle of someone's page, so it carries its own
12097
+ // boundary (rounded card + shadow). Full-bleed hosts pass frame: "flush".
12098
+ frame: "card",
12021
12099
  ...ribbonOptions,
12022
12100
  // Exports arrive after the runtime boots; the loader covers that gap.
12023
12101
  exports: void 0
@@ -1 +1 @@
1
- {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAOH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAqB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIpD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExE;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC;AAwPtE,6CAA6C;AAC7C,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBjF;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,2BAA2B;IAC3B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC,CAsCrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,EAC9B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAED,MAAM,WAAW,yBAA0B,SAAQ,aAAa;IAC9D,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAaD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,EAC9B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,YAAY,CAAC,CA0CvB"}
1
+ {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAOH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAqB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIpD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExE;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC;AAwPtE,6CAA6C;AAC7C,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBjF;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,2BAA2B;IAC3B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC,CAsCrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,EAC9B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAED,MAAM,WAAW,yBAA0B,SAAQ,aAAa;IAC9D,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAaD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,EAC9B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,YAAY,CAAC,CA6CvB"}