@worm-vue3-print/canvas 1.2.2 → 1.3.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.
package/README.md CHANGED
@@ -28,12 +28,14 @@ import '@worm-vue3-print/canvas/native-controls.css'
28
28
  :initial-template="templateData"
29
29
  :fields="fields"
30
30
  :is-edit="true"
31
- :load-default-template="loadDefaultTemplate"
32
31
  :show-help="true"
33
32
  @preview="onPreview"
34
33
  @save="onSave"
35
34
  />
36
35
 
36
+ <!-- 「加载默认布局」等业务入口由宿主自渲染,不在设计器工具栏内 -->
37
+ <button type="button" @click="onLoadDefaultLayout">加载默认布局</button>
38
+
37
39
  <!-- 浏览器端免保存预览:直接使用当前画布 JSON + 业务数据 -->
38
40
  <Teleport to="body">
39
41
  <PrintHtmlPreview
@@ -64,8 +66,10 @@ function onSave(json: string) {
64
66
  // 宿主持久化模板 JSON
65
67
  }
66
68
 
67
- function loadDefaultTemplate() {
68
- return createDefaultTemplate()
69
+ /** 加载默认布局:宿主自实现;示例造空白默认模板,真实宿主可拉取服务端默认模板 */
70
+ function onLoadDefaultLayout() {
71
+ if (!confirm('将覆盖当前画布内容,是否继续?')) return
72
+ templateData.value = createDefaultTemplate()
69
73
  }
70
74
  </script>
71
75
  ```
@@ -79,12 +83,15 @@ function loadDefaultTemplate() {
79
83
  `goods`)作为表格「列表数据源」选项,拖拽/双击叶子字段插入的表达式即为完整路径
80
84
  `{goods.spec}`。左侧字段树、表达式编辑器、绑定下拉均以此为唯一数据源。
81
85
  - `is-edit`:是否编辑态。
82
- - `load-default-template()`:可选。返回默认布局 `TemplateData`(支持异步,返回 null/undefined
83
- 视为无默认布局);未注入时工具栏不展示「加载默认布局」按钮。
84
86
  - `show-help`:帮助入口开关,默认开启,传入 `false` 可关闭帮助按钮与帮助弹框。
85
87
  - `getTemplateJson()`:通过 `ref` 获取当前画布模板 JSON,用于预览 / 保存。
88
+ - `validateTemplate()`:拼版配置校验结果(`TilingIssue[]`,合法为 `[]`)。宿主在「导出 / 另存」等直接消费
89
+ `getTemplateJson()` 的链路上应先调用它,拦截列数超宽等非法配置(该路径绕不过保存按钮的闸门)。
90
+ - 模板加载 / 重置(如「加载默认布局」)属于宿主业务:把新的 `TemplateData` 赋给
91
+ `initial-template` 即可重载画布并记录一次历史(撤销可回退);设计器工具栏不内置该入口。
86
92
  - `requestScreenshot({ templateJson, printData }) => Promise<Blob>`:叠层对比截图。
87
93
  - `uploadImage(file) => Promise<string>`:图片元素上传,返回可访问 URL。
94
+ - `uploadDesignBackground(file) => Promise<string>`:设计背景(定位底图)上传,返回完整图片路径;背景仅设计画布显示,不进入预览与打印。
88
95
  - `@preview` / `@save`:预览与保存事件,具体业务(字段查询、持久化、截图适配)由宿主实现。
89
96
 
90
97
  > 模板名称、业务类型、备注等元信息不属于设计器核心:模板 JSON 不含元信息,宿主在自己的
package/dist/canvas.css CHANGED
@@ -1 +1 @@
1
- .pd-form{display:flex;flex-direction:column;gap:10px;font-size:12px;color:var(--pd-text, #303133)}.pd-field{display:flex;flex-direction:column;gap:4px}.pd-label{font-size:11px;color:var(--pd-text-muted, #909399)}.pd-input,.pd-select,.pd-color,textarea.pd-input{width:100%;height:26px;min-height:26px;padding:3px 6px;border:1px solid var(--pd-border, #d9dde6);border-radius:6px;background:#fff;color:inherit;font:inherit;box-sizing:border-box;transition:border-color .14s ease,box-shadow .14s ease}.pd-input:hover,.pd-select:hover{border-color:var(--pd-text-faint, #b4b9c4)}textarea.pd-input{height:auto;min-height:48px;resize:vertical}.pd-input:focus,.pd-select:focus,.pd-color:focus{outline:none;border-color:var(--pd-accent, #165DFF);box-shadow:0 0 0 2px #165dff1f}.pd-select{appearance:auto}.pd-color{padding:1px;height:26px}.pd-switch{appearance:none;width:32px;height:18px;margin:0;border:1px solid var(--pd-border, #dcdfe6);border-radius:999px;background:#dcdfe6;position:relative;cursor:pointer;transition:background .2s,border-color .2s}.pd-switch:checked{background:var(--pd-accent, #165DFF);border-color:var(--pd-accent, #165DFF)}.pd-switch:after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;transition:transform .2s}.pd-switch:checked:after{transform:translate(14px)}.pd-range{width:100%;accent-color:var(--pd-accent, #165DFF)}.pd-radio-group,.pd-checkbox-group{display:flex;flex-wrap:wrap;gap:6px}.pd-radio,.pd-checkbox{display:inline-flex;align-items:center;gap:4px;min-height:24px;padding:0 7px;border:1px solid var(--pd-border, #d9dde6);border-radius:6px;background:#fff;cursor:pointer;transition:border-color .14s ease,background .14s ease,color .14s ease}.pd-radio:has(input:checked),.pd-checkbox:has(input:checked){color:var(--pd-accent, #165DFF);border-color:var(--pd-accent, #165DFF);background:#165dff0f}.pd-button-group{display:inline-flex;gap:4px}.pd-button,.pd-tab{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:26px;padding:3px 8px;border:1px solid var(--pd-border, #d9dde6);border-radius:6px;background:var(--pd-bg, #f4f6fa);color:var(--pd-text, #2a2e37);font:inherit;cursor:pointer;transition:background .14s ease,border-color .14s ease,color .14s ease}.pd-button:hover{background:var(--pd-sidebar-hover, #f0f3f9);border-color:var(--pd-text-faint, #b4b9c4)}.pd-button.primary{background:var(--pd-accent, #165DFF);border-color:var(--pd-accent, #165DFF);color:#fff}.pd-button.danger{background:#f56c6c;border-color:#f56c6c;color:#fff}.pd-button.small{min-height:22px;padding:1px 6px;font-size:11px}.pd-button:disabled{opacity:.55;cursor:not-allowed}.pd-tabs{display:flex;flex-direction:column;min-height:0}.pd-tab-bar{display:flex;gap:4px;padding:8px 12px 0;border-bottom:1px solid var(--pd-border-soft, #ebeef5)}.pd-tab{border:0;border-bottom:2px solid transparent;border-radius:5px 5px 0 0;background:transparent;transition:color .14s ease,background .14s ease}.pd-tab-bar .pd-tab:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.pd-tab.active{color:var(--pd-accent, #165DFF);border-bottom-color:var(--pd-accent, #165DFF);background:transparent;font-weight:600}.pd-tab-pane{min-height:0;overflow:auto}.pd-divider{margin:6px 0;font-size:11px;color:var(--pd-text-muted, #909399)}.pd-empty{margin:16px 0;color:var(--pd-text-muted, #909399);text-align:center}.pd-badge{padding:0 4px;border-radius:3px;background:#67c23a1f;color:#529b2e;font-size:10px}.pd-dialog-overlay{position:fixed;inset:0;z-index:2000;display:grid;place-items:center;padding:16px;background:#00000073}.pd-dialog{display:flex;flex-direction:column;width:min(950px,90vw);max-height:90vh;overflow:hidden;background:#fff;border-radius:12px;box-shadow:var(--pd-shadow-md, 0 12px 40px rgba(23, 32, 60, .18))}.pd-dialog-small{width:min(400px,92vw)}.pd-dialog-large{width:min(950px,90vw)}.pd-dialog-header,.pd-dialog-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 16px}.pd-dialog-header{border-bottom:1px solid var(--pd-border-soft, #ebeef5)}.pd-dialog-footer{justify-content:flex-end;border-top:1px solid var(--pd-border-soft, #ebeef5)}.pd-dialog-body{flex:1;min-height:0;overflow:auto;padding:16px}.pd-close{width:22px;height:22px;border:0;background:transparent;color:var(--pd-text-muted, #909399);font-size:16px;cursor:pointer}.pd-icon{display:inline-flex;width:14px;height:14px}.designer-container{scrollbar-width:thin;scrollbar-color:rgba(23,32,60,.18) transparent}.designer-container ::-webkit-scrollbar{width:9px;height:9px}.designer-container ::-webkit-scrollbar-track{background:transparent}.designer-container ::-webkit-scrollbar-thumb{background:#17203c29;border-radius:999px;border:2px solid transparent;background-clip:content-box}.designer-container ::-webkit-scrollbar-thumb:hover{background:#17203c4d;border:2px solid transparent;background-clip:content-box}.designer-container ::-webkit-scrollbar-corner{background:transparent}.designer-container button:focus-visible,.designer-container [tabindex]:focus-visible,.designer-container .pd-tab:focus-visible{outline:2px solid var(--pd-accent, #165DFF);outline-offset:1px}@media(prefers-reduced-motion:reduce){.designer-container *,.designer-container *:before,.designer-container *:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.help-button[data-v-80ccab03]{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;cursor:pointer;transition:background-color .15s}.help-button[data-v-80ccab03]:hover{background:var(--pd-sidebar-hover, #f0f3f9)}.help-icon[data-v-80ccab03]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--pd-accent, #165DFF);color:#fff;font-size:12px;font-weight:600;line-height:1}.designer-toolbar[data-v-e6d10b59]{display:flex;align-items:center;gap:2px;padding:0 12px;height:50px;background:var(--pd-surface, #ffffff);border-bottom:1px solid var(--pd-border-soft, #e9ecf2);box-shadow:0 1px 2px #17203c0a,0 6px 16px -12px #17203c40;flex-shrink:0;position:relative;z-index:100}.tb-group[data-v-e6d10b59]{display:flex;align-items:center;gap:2px;padding:0 8px}.tb-group+.tb-group[data-v-e6d10b59]{border-left:1px solid var(--pd-border-soft, #e9ecf2)}.tb-btn[data-v-e6d10b59]{height:30px;min-width:30px;padding:0 8px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:12px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:5px;transition:background .14s ease,color .14s ease,border-color .14s ease,box-shadow .14s ease}.tb-btn[data-v-e6d10b59]:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.tb-btn[data-v-e6d10b59]:active{background:var(--pd-border-soft, #e9ecf2)}.tb-btn[data-v-e6d10b59]:disabled{opacity:.32;cursor:default;background:transparent;color:var(--pd-text-faint, #b4b9c4)}.tb-btn.on[data-v-e6d10b59]{color:var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .09));font-weight:600}.tb-btn.warn[data-v-e6d10b59]{color:var(--pd-accent-secondary, #f56c6c);background:var(--pd-danger-soft, rgba(245, 108, 108, .1));font-weight:600}.tb-btn .dot[data-v-e6d10b59]{width:6px;height:6px;border-radius:50%;background:var(--pd-text-faint, #b4b9c4);display:inline-block;transition:background .14s ease,box-shadow .14s ease}.tb-btn.on .dot[data-v-e6d10b59]{background:var(--pd-accent, #165DFF);box-shadow:0 0 0 3px #165dff1f}.tb-icon[data-v-e6d10b59]{font-size:15px;line-height:1}.tb-btn[data-tip][data-v-e6d10b59]{position:relative}.tb-btn[data-tip][data-v-e6d10b59]:after{content:attr(data-tip);position:absolute;bottom:-32px;left:50%;transform:translate(-50%);padding:4px 8px;font-size:12px;color:#fff;background:#1e2330e0;border-radius:4px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s ease;z-index:100}.tb-btn[data-tip][data-v-e6d10b59]:hover:after{opacity:1}.tb-btn:disabled[data-tip][data-v-e6d10b59]:after{display:none}.tb-mark[data-v-e6d10b59]{width:28px;height:28px;margin-right:2px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(150deg,var(--pd-accent-2, #3D7BFF),var(--pd-accent, #165DFF));box-shadow:0 3px 8px #165dff47,inset 0 1px #ffffff38;flex-shrink:0}.tb-mark svg[data-v-e6d10b59]{width:16px;height:16px}.tb-title[data-v-e6d10b59]{display:flex;flex-direction:column;line-height:1.2;padding-left:6px}.tb-title-name[data-v-e6d10b59]{font-size:13px;font-weight:600;color:var(--pd-text, #2a2e37);letter-spacing:.2px}.tb-title-sub[data-v-e6d10b59]{font-size:10px;color:var(--pd-text-muted, #8b909c);letter-spacing:.8px}.tb-zoom[data-v-e6d10b59]{font-size:12px;color:var(--pd-text, #2a2e37);font-variant-numeric:tabular-nums;min-width:46px;text-align:center}.tb-spacer[data-v-e6d10b59]{flex:1}.btn-primary[data-v-e6d10b59],.btn-secondary[data-v-e6d10b59]{height:32px;padding:0 16px;border-radius:7px;font-size:13px;font-weight:600;cursor:pointer;transition:filter .14s ease,background .14s ease,border-color .14s ease,box-shadow .14s ease}.btn-secondary[data-v-e6d10b59]{background:var(--pd-field-bg, #f4f6fa);color:var(--pd-text-muted, #606266);border:1px solid var(--pd-border, #d9dde6)}.btn-secondary[data-v-e6d10b59]:hover{border-color:var(--pd-accent, #165DFF);color:var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .06))}.btn-primary[data-v-e6d10b59]{background:linear-gradient(180deg,var(--pd-accent-2, #3D7BFF),var(--pd-accent, #165DFF));color:#fff;border:none;box-shadow:0 3px 10px #165dff47,inset 0 1px #ffffff2e}.btn-primary[data-v-e6d10b59]:hover{filter:brightness(1.07);box-shadow:0 5px 14px #165dff57,inset 0 1px #ffffff2e}.btn-primary[data-v-e6d10b59]:active{filter:brightness(.97)}.layer-panel[data-v-f7a10482]{border-top:1px solid var(--pd-border);padding:8px 12px;height:100%;box-sizing:border-box;overflow-y:auto}.panel-title[data-v-f7a10482]{font-size:11px;color:var(--pd-text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.layer-item[data-v-f7a10482]{display:flex;align-items:center;gap:6px;padding:4px 6px;margin-bottom:2px;border-radius:4px;cursor:pointer;font-size:12px;transition:background .1s}.layer-item[data-v-f7a10482]:hover{background:var(--pd-sidebar-hover, #f0f2f5)}.layer-item.active[data-v-f7a10482]{background:#165dff1a;color:var(--pd-accent, #165DFF);box-shadow:inset 2px 0 0 var(--pd-accent, #165DFF)}.layer-icon[data-v-f7a10482]{width:18px;text-align:center;font-size:12px;color:var(--pd-text-muted, #909399)}.layer-name[data-v-f7a10482]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--pd-text, #303133)}.layer-zone[data-v-f7a10482]{flex-shrink:0;padding:0 4px;font-size:10px;line-height:14px;color:var(--pd-ink-green, #67c23a);background:#67c23a1a;border-radius:3px}.layer-zindex[data-v-f7a10482]{font-size:10px;color:var(--pd-text-muted, #909399);font-variant-numeric:tabular-nums}.layer-actions[data-v-f7a10482]{display:flex;gap:4px;margin-top:8px}.field-tree-panel[data-v-9b326f07]{padding:0}.panel-title[data-v-9b326f07]{font-size:11px;color:var(--pd-text-muted);text-transform:uppercase;letter-spacing:.5px;padding:4px 0 8px;margin-bottom:8px;border-bottom:1px solid var(--pd-border)}.search-input[data-v-9b326f07]{margin-bottom:8px}.tree-container[data-v-9b326f07]{overflow-y:auto;min-height:0}.field-group-header[data-v-9b326f07]{display:flex;align-items:center;gap:4px;padding:5px 8px;border-radius:4px;font-size:13px;color:var(--pd-text, #303133);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .1s}.field-group-header[data-v-9b326f07]:hover{background:var(--pd-sidebar-hover, #f0f2f5)}.field-group-header.is-list[data-v-9b326f07]{color:var(--pd-accent, #165DFF);font-weight:500}.expand-icon[data-v-9b326f07]{width:12px;font-size:8px;flex-shrink:0;color:var(--pd-text-muted, #909399)}.field-row[data-v-9b326f07]{display:flex;align-items:center;gap:4px;padding:5px 8px;border-radius:4px;font-size:13px;color:var(--pd-text, #303133);cursor:grab;-webkit-user-select:none;user-select:none;transition:background .1s}.field-row[data-v-9b326f07]:hover{background:var(--pd-sidebar-hover, #f0f2f5)}.node-icon[data-v-9b326f07]{font-size:14px;flex-shrink:0;filter:saturate(.6);opacity:.9}.node-label[data-v-9b326f07]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.node-key[data-v-9b326f07]{font-size:11px;color:var(--pd-text-muted, #909399);flex-shrink:0}.group-label[data-v-9b326f07]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.left-panel[data-v-15dad0f0]{width:224px;min-width:224px;background:var(--pd-sidebar, #ffffff);border-right:1px solid var(--pd-border-soft, #e9ecf2);display:flex;flex-direction:column;overflow:hidden;transition:width .18s ease}.left-panel.collapsed[data-v-15dad0f0]{width:36px;min-width:36px;border-right:1px solid var(--pd-border-soft, #e9ecf2)}.left-collapsed[data-v-15dad0f0]{display:flex;flex-direction:column;align-items:center;gap:8px;padding-top:12px;flex:1}.lc-btn[data-v-15dad0f0]{width:26px;height:26px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .14s ease}.lc-btn[data-v-15dad0f0]:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.lc-btn.on[data-v-15dad0f0]{color:var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .09))}.left-head[data-v-15dad0f0]{display:flex;align-items:center;justify-content:space-between;height:42px;padding:0 12px;flex-shrink:0;border-bottom:1px solid var(--pd-border-soft, #e9ecf2)}.left-title[data-v-15dad0f0]{font-size:12px;font-weight:600;color:var(--pd-text, #2a2e37);letter-spacing:1.2px;display:inline-flex;align-items:center;gap:7px}.left-title[data-v-15dad0f0]:before{content:"";width:3px;height:12px;border-radius:2px;background:linear-gradient(180deg,var(--pd-accent-2, #3D7BFF),var(--pd-accent, #165DFF))}.collapse-btn[data-v-15dad0f0]{border:none;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:14px;cursor:pointer;width:24px;height:24px;border-radius:5px;transition:all .14s ease}.collapse-btn[data-v-15dad0f0]:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.left-tabs[data-v-15dad0f0]{flex:1;display:flex;flex-direction:column;overflow:hidden}.left-tabs .pd-tab-pane[data-v-15dad0f0]{flex:1;min-height:0;overflow-y:auto;padding:12px}.panel-title[data-v-15dad0f0]{font-size:11px;color:var(--pd-text-muted, #8b909c);letter-spacing:.6px;padding:2px 2px 8px;margin-bottom:10px;border-bottom:1px solid var(--pd-border-soft, #e9ecf2)}.material-card[data-v-15dad0f0]{display:flex;align-items:center;gap:10px;padding:8px 10px;margin-bottom:7px;border:1px solid var(--pd-border-soft, #e9ecf2);border-radius:8px;background:var(--pd-field-bg, #f4f6fa);cursor:grab;-webkit-user-select:none;user-select:none;transition:border-color .14s ease,background .14s ease,transform .14s ease,box-shadow .14s ease}.material-card[data-v-15dad0f0]:hover{border-color:#165dff73;background:var(--pd-surface, #ffffff);transform:translateY(-1px);box-shadow:var(--pd-shadow-sm, 0 1px 2px rgba(23, 32, 60, .05))}.material-card[data-v-15dad0f0]:active{cursor:grabbing;transform:translateY(0)}.material-icon[data-v-15dad0f0]{width:30px;height:24px;border:1px dashed var(--pd-border, #d9dde6);border-radius:5px;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--pd-accent, #165DFF);background:var(--pd-surface, #ffffff);flex-shrink:0;transition:border-color .14s ease,background .14s ease}.material-card:hover .material-icon[data-v-15dad0f0]{border-style:solid;border-color:var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .09))}.material-label[data-v-15dad0f0]{font-size:12.5px;color:var(--pd-text, #2a2e37)}.print-image[data-v-007a2979]{width:100%;height:100%;overflow:hidden}.print-image img[data-v-007a2979]{width:100%;height:100%;display:block}.image-placeholder[data-v-007a2979]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#bbb;font-size:12px;border:1px dashed #ddd;box-sizing:border-box}.table-ctx-menu[data-v-44e319c1]{position:fixed;z-index:3000;min-width:140px;padding:4px 0;background:#fff;border:1px solid #dcdfe6;border-radius:4px;box-shadow:0 2px 12px #00000026;font-size:13px}.menu-item[data-v-44e319c1]{padding:5px 14px;cursor:pointer;color:#333}.menu-item[data-v-44e319c1]:hover{background:#f5f7fa}.menu-item.disabled[data-v-44e319c1]{color:#c0c4cc;cursor:not-allowed}.menu-item.active[data-v-44e319c1]{color:#165dff}.menu-divider[data-v-44e319c1]{height:1px;margin:4px 0;background:#ebeef5}.menu-group-title[data-v-44e319c1]{padding:4px 14px;font-size:12px;color:#909399}.cell-barcode[data-v-612f4008]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}.cell-barcode svg[data-v-612f4008]{width:100%;height:100%}.cell-barcode img[data-v-612f4008]{max-width:100%;max-height:100%}.cell-barcode-fallback[data-v-612f4008]{font-style:italic;opacity:.6}.cell-image[data-v-d5bc444b]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}.cell-image img[data-v-d5bc444b]{max-width:100%;max-height:100%;display:block}.image-placeholder[data-v-d5bc444b]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#bbb;font-size:12px;border:1px dashed #ddd;box-sizing:border-box}.print-table[data-v-725d973d]{position:relative;width:100%;height:100%}.print-table table[data-v-725d973d]{border-collapse:collapse;table-layout:fixed;width:100%}.print-table td[data-v-725d973d]{box-sizing:border-box;word-break:break-all}.cell-selected[data-v-725d973d]{outline:2px solid #165DFF;outline-offset:-2px;background-color:#165dff14}.row-data-bg[data-v-725d973d]{background-image:repeating-linear-gradient(45deg,rgba(22,93,255,.04) 0 6px,transparent 6px 12px)}.data-placeholder[data-v-725d973d]{color:#909399;font-style:italic}.cell-editor[data-v-725d973d]{width:100%;border:none;outline:none;background:#fffbe6;font:inherit}.row-badges[data-v-725d973d]{position:absolute;left:-16px;top:0;width:14px}.row-badge[data-v-725d973d]{position:absolute;width:14px;display:flex;align-items:center;justify-content:center;font-size:10px;color:#909399;background:#f5f7fa;border-radius:2px}.col-resize-layer[data-v-725d973d]{position:absolute;inset:0;pointer-events:none;z-index:3}.col-resize-handle[data-v-725d973d]{position:absolute;top:0;bottom:0;width:6px;transform:translate(-50%);cursor:col-resize;pointer-events:auto}.col-resize-handle[data-v-725d973d]:after{content:"";position:absolute;top:0;bottom:0;left:50%;border-left:1px solid transparent}.col-resize-handle[data-v-725d973d]:hover:after,.col-resize-handle.dragging[data-v-725d973d]:after{border-left-color:var(--pd-accent, #165DFF)}.print-barcode[data-v-ca0cff7f]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}.print-barcode svg[data-v-ca0cff7f]{width:100%;height:100%}.print-qrcode[data-v-dfb6875c]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}.print-qrcode img[data-v-dfb6875c]{max-width:100%;max-height:100%}.print-html[data-v-880bbde5],.page-number-element[data-v-38f1d7df]{width:100%;height:100%;overflow:hidden}.print-element[data-v-c1100c7b]{box-sizing:border-box;cursor:pointer;-webkit-user-select:none;user-select:none}.print-element.design-mode[data-v-c1100c7b]{outline:1px dashed #C3C9D6}.print-element.design-mode.zone-header[data-v-c1100c7b],.print-element.design-mode.zone-footer[data-v-c1100c7b]{outline:1px dashed var(--pd-ink-green, #67c23a)}.print-element.design-mode.zone-overlay[data-v-c1100c7b]{outline:1px dashed #06B6D4}.print-element.selected[data-v-c1100c7b]{outline:1.5px solid var(--pd-accent, #165DFF);background:#165dff0a}.print-element.previewed[data-v-c1100c7b]{outline:1.5px solid rgba(22,93,255,.5);background:#165dff1a}.print-element.design-mode[data-v-c1100c7b]:hover{outline:1px dashed var(--pd-accent, #165DFF)}.print-element.locked[data-v-c1100c7b]{cursor:not-allowed}.print-element.locked[data-v-c1100c7b]:not(.selected){outline:1.5px dashed #999}.print-element.hidden[data-v-c1100c7b]{opacity:.3;pointer-events:none}.print-element.drag-ghost[data-v-c1100c7b]{opacity:.4}.drag-preview[data-v-c1100c7b]{position:absolute;inset:0;border:2px dashed var(--pd-accent, #165DFF);pointer-events:none;z-index:1000;box-sizing:border-box}.selected-indicator[data-v-c1100c7b]{position:absolute;top:-18px;left:0;font-size:10px;white-space:nowrap;pointer-events:none;z-index:20}.position-label[data-v-c1100c7b]{background:var(--pd-accent, #165DFF);color:#fff;padding:1px 6px;border-radius:3px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:10px;font-variant-numeric:tabular-nums;letter-spacing:0;box-shadow:0 2px 6px #00000026}.resize-handles[data-v-c1100c7b]{position:absolute;inset:0;pointer-events:none}.resize-handle[data-v-c1100c7b]{position:absolute;width:7px;height:7px;background:var(--pd-handle, #165DFF);border:1.5px solid #fff;border-radius:2px;box-sizing:border-box;transform:translate(-50%,-50%);box-shadow:0 1px 3px #0000002e;z-index:10;pointer-events:auto}.handle-nw[data-v-c1100c7b]{top:0;left:0;cursor:nw-resize}.handle-n[data-v-c1100c7b]{top:0;left:50%;cursor:n-resize}.handle-ne[data-v-c1100c7b]{top:0;left:100%;cursor:ne-resize}.handle-e[data-v-c1100c7b]{top:50%;left:100%;cursor:e-resize}.handle-se[data-v-c1100c7b]{top:100%;left:100%;cursor:se-resize}.handle-s[data-v-c1100c7b]{top:100%;left:50%;cursor:s-resize}.handle-sw[data-v-c1100c7b]{top:100%;left:0;cursor:sw-resize}.handle-w[data-v-c1100c7b]{top:50%;left:0;cursor:w-resize}.paper-wrapper[data-v-de85ab4d]{display:block}.hiprint-printPaper[data-v-de85ab4d]{transition:transform .15s ease-out}.zone-layer[data-v-de85ab4d]{box-sizing:border-box}.zone-layer.zone-header.design-mode[data-v-de85ab4d],.zone-layer.zone-footer.design-mode[data-v-de85ab4d]{outline:1px dashed var(--pd-ink-green, #67c23a);background:#67c23a0a}.zone-layer.zone-content.design-mode[data-v-de85ab4d]{outline:1px dashed #C3C9D6}.zone-overlay[data-v-de85ab4d]{position:absolute;top:0;left:0;width:100%;outline:1px dashed #06B6D4;background:#06b6d40a;box-sizing:border-box;pointer-events:none;z-index:1}.zone-label[data-v-de85ab4d]{position:absolute;top:2px;right:4px;font-size:9px;color:#909399;pointer-events:none;-webkit-user-select:none;user-select:none}.zone-resize-handle[data-v-de85ab4d]{position:absolute;left:0;width:100%;height:6px;cursor:ns-resize;z-index:5}.zone-resize-handle.handle-bottom[data-v-de85ab4d]{bottom:-3px}.zone-resize-handle.handle-top[data-v-de85ab4d]{top:-3px}.zone-resize-handle[data-v-de85ab4d]:hover{background:#10b98140}.zone-height-tip[data-v-de85ab4d]{position:absolute;right:4px;top:-22px;padding:1px 6px;font-size:11px;color:#fff;background:#10b981;border-radius:3px;white-space:nowrap;pointer-events:none}.grid-bg[data-v-de85ab4d]{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:0}.snap-indicator[data-v-de85ab4d]{position:absolute;width:6px;height:6px;background:var(--pd-accent, #165DFF);border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:10;animation:snap-pulse-de85ab4d .3s ease-out}@keyframes snap-pulse-de85ab4d{0%{transform:translate(-50%,-50%) scale(2);opacity:.5}to{transform:translate(-50%,-50%) scale(1);opacity:0}}.watermark-layer[data-v-de85ab4d]{pointer-events:none}.adsorb-guide[data-v-de85ab4d]{position:absolute;pointer-events:none;z-index:9999}.adsorb-guide.guide-vertical[data-v-de85ab4d]{border-left:1px dashed var(--pd-accent-secondary, #f56c6c)}.adsorb-guide.guide-horizontal[data-v-de85ab4d]{border-top:1px dashed var(--pd-accent-secondary, #f56c6c)}.manual-guide[data-v-de85ab4d]{position:absolute;pointer-events:auto;z-index:9998;cursor:move}.manual-guide.guide-vertical[data-v-de85ab4d]{border-left:1px solid #3B82F6;width:0}.manual-guide.guide-horizontal[data-v-de85ab4d]{border-top:1px solid #3B82F6;height:0}.manual-guide[data-v-de85ab4d]:before{content:"";position:absolute;pointer-events:auto}.manual-guide.guide-vertical[data-v-de85ab4d]:before{top:0;bottom:0;left:50%;width:var(--guide-hit, 8px);transform:translate(-50%)}.manual-guide.guide-horizontal[data-v-de85ab4d]:before{left:0;right:0;top:50%;height:var(--guide-hit, 8px);transform:translateY(-50%)}.manual-guide[data-v-de85ab4d]:hover{border-color:#ef4444!important}.pd-ruler[data-v-86284054]{position:absolute;display:block;pointer-events:auto;cursor:crosshair;z-index:1;background:var(--pd-ruler-bg, #f8f9fc)}.pd-ruler.is-horizontal[data-v-86284054]{box-shadow:0 1px 0 var(--pd-border-soft, #e9ecf2)}.pd-ruler.is-vertical[data-v-86284054]{box-shadow:1px 0 0 var(--pd-border-soft, #e9ecf2)}.canvas-area[data-v-fb2558b3]{flex:1;overflow:auto;display:flex;background-color:var(--pd-canvas-bg, #e6e9f0);background-image:radial-gradient(circle,rgba(23,32,60,.13) 1px,transparent 1.2px);background-size:20px 20px;background-position:center;padding:44px 28px 32px 44px;position:relative}.canvas-scroll[data-v-fb2558b3]{display:flex;flex-direction:column;align-items:center;gap:20px;position:relative;flex:none;margin:auto;width:fit-content}.overlay-layer[data-v-fb2558b3]{position:absolute;top:0;left:0;pointer-events:none;z-index:100}.overlay-image[data-v-fb2558b3]{width:100%;display:block}.marquee-selection[data-v-fb2558b3]{position:fixed;border:1.5px solid rgba(22,93,255,.7);background:#165dff14;border-radius:2px;pointer-events:none;z-index:10000}.context-menu[data-v-fb2558b3]{position:absolute;background:var(--pd-surface, #ffffff);border:1px solid var(--pd-border-soft, #e9ecf2);border-radius:8px;box-shadow:var(--pd-shadow-md, 0 10px 28px rgba(23, 32, 60, .12));padding:5px;z-index:10001;min-width:132px}.context-menu-item[data-v-fb2558b3]{padding:7px 12px;border-radius:5px;font-size:12.5px;cursor:pointer;color:var(--pd-text, #2a2e37);-webkit-user-select:none;user-select:none;transition:background .12s ease,color .12s ease}.context-menu-item[data-v-fb2558b3]:hover{background:var(--pd-accent-soft, rgba(22, 93, 255, .09));color:var(--pd-accent, #165DFF)}.context-menu-item.disabled[data-v-fb2558b3]{color:var(--pd-text-faint, #b4b9c4);cursor:not-allowed}.context-menu-item.disabled[data-v-fb2558b3]:hover{background:transparent;color:var(--pd-text-faint, #b4b9c4)}.context-menu-sep[data-v-fb2558b3]{height:1px;background:var(--pd-border-soft, #e9ecf2);margin:5px 8px}.ruler-overlay[data-v-fb2558b3]{position:absolute;inset:0;pointer-events:none;z-index:60}.ruler-corner[data-v-fb2558b3]{position:absolute;top:0;left:0;width:22px;height:22px;background:var(--pd-ruler-bg, #f8f9fc);box-shadow:1px 1px 0 var(--pd-border-soft, #e9ecf2);z-index:2}.ruler-overlay[data-v-fb2558b3] .pd-ruler.is-horizontal{top:0;left:22px}.ruler-overlay[data-v-fb2558b3] .pd-ruler.is-vertical{top:22px;left:0}.ruler-guide-preview[data-v-fb2558b3]{position:fixed;pointer-events:none;z-index:9997}.ruler-guide-preview.guide-vertical[data-v-fb2558b3]{width:0;border-left:1px dashed var(--pd-accent, #165dff)}.ruler-guide-preview.guide-horizontal[data-v-fb2558b3]{height:0;border-top:1px dashed var(--pd-accent, #165dff)}.property-search[data-v-10ab6c84]{padding:0 0 10px;background:transparent}.property-group[data-v-2ba57031]{border:1px solid var(--pd-border-soft, #e9ecf2);border-radius:8px;margin-bottom:10px;background:var(--pd-surface, #ffffff);overflow:hidden;transition:border-color .14s ease,box-shadow .14s ease}.property-group[data-v-2ba57031]:last-child{margin-bottom:2px}.property-group.is-expanded[data-v-2ba57031]{border-color:var(--pd-border-soft, #e9ecf2)}.group-header[data-v-2ba57031]{display:flex;align-items:center;padding:9px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--pd-field-bg, #f4f6fa);transition:background .14s ease}.group-header[data-v-2ba57031]:hover{background:var(--pd-sidebar-hover, #f0f3f9)}.property-group.is-expanded .group-header[data-v-2ba57031]{border-bottom:1px solid var(--pd-border-soft, #e9ecf2)}.group-icon[data-v-2ba57031]{margin-right:8px;color:var(--pd-accent, #165DFF)}.group-title[data-v-2ba57031]{flex:1;font-size:12px;font-weight:600;color:var(--pd-text, #2a2e37);letter-spacing:.3px}.expand-icon[data-v-2ba57031]{color:var(--pd-text-muted, #8b909c);font-size:10px}.group-content[data-v-2ba57031]{padding:10px 12px 12px;background:var(--pd-surface, #ffffff)}.pd-stepper[data-v-9722a7cf]{display:flex;align-items:center;width:100%}.pd-step-btn[data-v-9722a7cf]{width:26px;height:26px;flex-shrink:0;border:1px solid var(--pd-border, #d9dde6);background:var(--pd-field-bg, #f4f6fa);color:var(--pd-text, #2a2e37);font-size:14px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .14s ease,border-color .14s ease,color .14s ease}.pd-step-btn[data-v-9722a7cf]:hover:not(:disabled){background:var(--pd-sidebar-hover, #f0f3f9);border-color:var(--pd-text-faint, #b4b9c4)}.pd-step-btn[data-v-9722a7cf]:disabled{opacity:.45;cursor:not-allowed}.pd-step-minus[data-v-9722a7cf]{border-radius:6px 0 0 6px;border-right:none}.pd-step-plus[data-v-9722a7cf]{border-radius:0 6px 6px 0;border-left:none}.pd-step-input.pd-input[data-v-9722a7cf]{border-radius:0;min-width:0;flex:1;text-align:center;-moz-appearance:textfield}.pd-step-input.pd-input[data-v-9722a7cf]::-webkit-outer-spin-button,.pd-step-input.pd-input[data-v-9722a7cf]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.position-grid[data-v-bc364679]{display:grid;grid-template-columns:1fr 1fr;gap:8px}.preset-color-trigger[data-v-079f8fdd]{display:flex;align-items:center;width:100%;min-height:26px;padding:1px;border:1px solid var(--pd-border, #d9dde6);border-radius:6px;background:#fff;cursor:pointer;transition:border-color .14s ease,box-shadow .14s ease}.preset-color-trigger[data-v-079f8fdd]:hover,.preset-color-trigger[aria-expanded=true][data-v-079f8fdd]{border-color:var(--pd-accent, #165DFF)}.preset-color-trigger[data-v-079f8fdd]:focus-visible{outline:none;border-color:var(--pd-accent, #165DFF);box-shadow:0 0 0 2px #165dff1f}.preset-color-swatch[data-v-079f8fdd]{width:100%;height:22px;border-radius:4px;background-image:linear-gradient(45deg,#e9ecef 25%,transparent 25%,transparent 75%,#e9ecef 75%);background-size:8px 8px;background-position:0 0,4px 4px}.preset-color-panel[data-v-079f8fdd]{position:fixed;z-index:3000;width:190px;padding:10px;border:1px solid var(--pd-border, #d9dde6);border-radius:8px;background:#fff;box-shadow:0 8px 24px #17203c29}.picker-preview[data-v-079f8fdd]{display:flex;align-items:center;gap:8px;margin-bottom:8px}.picker-current[data-v-079f8fdd]{flex:0 0 26px;height:24px;border:1px solid rgb(0 0 0 / 12%);border-radius:5px}.picker-hex[data-v-079f8fdd]{flex:1;min-width:0;height:24px;padding:0 6px;border:1px solid var(--pd-border, #d9dde6);border-radius:5px;color:var(--pd-text, #303133);font:inherit;font-size:11px;text-transform:uppercase}.picker-hex[data-v-079f8fdd]:focus{outline:none;border-color:var(--pd-accent, #165DFF);box-shadow:0 0 0 2px #165dff1f}.picker-area[data-v-079f8fdd]{position:relative;height:100px;border:1px solid rgb(0 0 0 / 12%);border-radius:6px;overflow:hidden;cursor:crosshair;touch-action:none;background:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,hsl(var(--picker-hue) 100% 50%))}.picker-handle[data-v-079f8fdd]{position:absolute;width:12px;height:12px;border:2px solid #fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 3px #00000073;pointer-events:none}.picker-hue[data-v-079f8fdd]{width:100%;height:14px;margin:10px 0 0;appearance:none;border:1px solid rgb(0 0 0 / 12%);border-radius:999px;background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red);cursor:pointer}.picker-hue[data-v-079f8fdd]::-webkit-slider-thumb{appearance:none;width:12px;height:12px;border:2px solid #fff;border-radius:50%;background:transparent;box-shadow:0 0 3px #00000073}.picker-hue[data-v-079f8fdd]::-moz-range-thumb{width:8px;height:8px;border:2px solid #fff;border-radius:50%;background:transparent;box-shadow:0 0 3px #00000073}.picker-heading[data-v-079f8fdd]{margin-top:10px;margin-bottom:6px;font-size:11px;color:var(--pd-text-muted, #909399)}.preset-color-grid[data-v-079f8fdd]{display:grid;grid-template-columns:repeat(6,1fr);gap:5px}.preset-color-item[data-v-079f8fdd]{width:22px;height:22px;padding:0;border:1px solid rgb(0 0 0 / 12%);border-radius:5px;cursor:pointer}.preset-color-item.active[data-v-079f8fdd]{box-shadow:0 0 0 2px #fff,0 0 0 3px var(--pd-accent, #165DFF)}.color-row[data-v-9d989c80]{display:flex;gap:16px}.expression-editor[data-v-ef66ca45]{display:flex;height:450px;gap:0}.ee-nav[data-v-ef66ca45]{width:100px;background:var(--pd-sidebar);border-right:1px solid var(--pd-border);display:flex;flex-direction:column;flex-shrink:0}.ee-nav-title[data-v-ef66ca45]{padding:10px;border-bottom:1px solid var(--pd-border);font-weight:600;font-size:13px;color:var(--pd-text);text-align:center}.ee-nav-tabs[data-v-ef66ca45]{flex:1;display:flex;flex-direction:column;padding:6px;gap:4px}.ee-nav-tab[data-v-ef66ca45]{padding:8px 10px;border-radius:6px;cursor:pointer;font-size:12px;text-align:center;transition:all .2s}.ee-nav-tab.active[data-v-ef66ca45]{background:var(--pd-accent);color:#fff}.ee-nav-tab[data-v-ef66ca45]:not(.active){background:#fff;border:1px solid var(--pd-border);color:var(--pd-text)}.ee-nav-tab[data-v-ef66ca45]:hover:not(.active){background:#ecf5ff;border-color:var(--pd-accent)}.ee-content[data-v-ef66ca45]{width:300px;display:flex;flex-direction:column;border-right:1px solid var(--pd-border);flex-shrink:0}.ee-content-search[data-v-ef66ca45]{padding:10px;border-bottom:1px solid var(--pd-border)}.ee-content-list[data-v-ef66ca45]{flex:1;padding:8px;overflow-y:auto;min-height:0}.ee-func-group[data-v-ef66ca45]{margin-bottom:12px}.ee-func-group-title[data-v-ef66ca45]{font-size:11px;font-weight:600;color:var(--pd-text-muted);padding:6px 10px;margin-bottom:2px;letter-spacing:.5px}.ee-field-group[data-v-ef66ca45]{display:flex;align-items:center;gap:4px;padding:6px 10px;font-size:12px;font-weight:600;color:var(--pd-text)}.ee-field-group.is-list[data-v-ef66ca45]{color:var(--pd-accent, #165DFF)}.ee-field-group-icon[data-v-ef66ca45]{font-size:13px;filter:saturate(.6)}.ee-list-item[data-v-ef66ca45]{padding:7px 10px;cursor:pointer;border-radius:4px;margin-bottom:2px;transition:background .15s}.ee-field-info[data-v-ef66ca45]{display:flex;flex-direction:column;gap:1px}.ee-field-info .ee-item-label[data-v-ef66ca45]{font-size:12px;color:var(--pd-text)}.ee-field-info .ee-item-key[data-v-ef66ca45]{font-size:10px;color:var(--pd-text-muted);font-family:monospace}.ee-list-item[data-v-ef66ca45]:hover{background:#ecf5ff}.ee-editor[data-v-ef66ca45]{flex:1;display:flex;flex-direction:column;background:var(--pd-sidebar);min-width:0}.ee-editor-section[data-v-ef66ca45]{padding:12px;border-bottom:1px solid var(--pd-border)}.ee-editor-title[data-v-ef66ca45]{font-size:11px;color:var(--pd-text-muted);margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px}.ee-textarea[data-v-ef66ca45]{width:100%;border:1px solid var(--pd-border);border-radius:6px;padding:10px;font-family:monospace;font-size:13px;resize:vertical;box-sizing:border-box;min-height:100px}.ee-textarea[data-v-ef66ca45]:focus{outline:none;border-color:var(--pd-accent)}.ee-preview[data-v-ef66ca45]{padding:10px;background:var(--pd-bg);border:1px solid var(--pd-border);border-radius:6px;min-height:30px;font-size:13px;color:var(--pd-text);line-height:1.6}.ee-preview-error[data-v-ef66ca45]{color:#e53e3e;background:#fef2f2;border-color:#fecaca}.ee-help-section[data-v-ef66ca45]{flex:1;padding:12px;overflow-y:auto;min-height:0}.ee-help-title[data-v-ef66ca45]{font-size:11px;color:var(--pd-text-muted);margin-bottom:8px;text-transform:uppercase;letter-spacing:.5px}.ee-help-grid[data-v-ef66ca45]{display:grid;grid-template-columns:1fr 1fr;gap:8px}.ee-help-card[data-v-ef66ca45]{border-radius:6px;padding:10px}.ee-help-card-title[data-v-ef66ca45]{font-size:12px;font-weight:600;margin-bottom:4px}.ee-help-card-content[data-v-ef66ca45]{font-size:11px;line-height:1.5;color:var(--pd-text)}.ee-help-field[data-v-ef66ca45]{background:#f0f9ff;border:1px solid #bae6fd}.ee-help-field .ee-help-card-title[data-v-ef66ca45]{color:#0369a1}.ee-help-function[data-v-ef66ca45]{background:#f0fdf4;border:1px solid #bbf7d0}.ee-help-function .ee-help-card-title[data-v-ef66ca45]{color:#166534}.ee-help-variable[data-v-ef66ca45]{background:#fefce8;border:1px solid #fde68a}.ee-help-variable .ee-help-card-title[data-v-ef66ca45]{color:#854d0e}.ee-help-conditional[data-v-ef66ca45]{background:#fdf2f8;border:1px solid #fbcfe8}.ee-help-conditional .ee-help-card-title[data-v-ef66ca45]{color:#9d174d}.expression-editor[data-v-ef66ca45]{max-height:min(600px,80vh);overflow-y:auto;padding:16px}.binding-control[data-v-40a99329]{display:flex;align-items:center;gap:8px}.col-width-row[data-v-b5fdc7ff]{display:flex;align-items:center;gap:8px;margin-bottom:4px;width:100%}.border-row[data-v-e0e6d714]{display:flex;gap:10px}.border-row .pd-field[data-v-e0e6d714]{flex:1;min-width:0}.advanced-row[data-v-14924be2]{display:flex;gap:16px}.image-content-upload[data-v-b730e8e6]{display:flex;flex-direction:column;align-items:flex-start;gap:4px;margin-top:4px}.upload-label[data-v-b730e8e6]{cursor:pointer}.upload-label.disabled[data-v-b730e8e6]{opacity:.6;cursor:not-allowed}.upload-tip[data-v-b730e8e6]{margin:0;font-size:11px;color:var(--pd-text-muted, #909399)}.visually-hidden[data-v-b730e8e6]{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.cell-style-grid[data-v-7372566f]{display:grid;grid-template-columns:1fr 1fr;gap:0 8px}.border-style-row[data-v-7372566f]{display:flex;gap:6px;margin-bottom:8px}.border-presets[data-v-7372566f]{margin-bottom:8px}.merge-btns[data-v-7372566f]{margin-top:8px;display:flex;gap:8px}.field-row[data-v-7372566f]{display:flex;align-items:center;gap:8px;width:100%}.property-panel[data-v-d8fa9541]{width:280px;min-width:280px;background:var(--pd-sidebar, #ffffff);border-left:1px solid var(--pd-border-soft, #e9ecf2);display:flex;flex-direction:column;overflow:hidden;transition:width .18s ease}.property-panel.collapsed[data-v-d8fa9541]{width:36px;min-width:36px;border-left:1px solid var(--pd-border-soft, #e9ecf2)}.prop-collapsed[data-v-d8fa9541]{display:flex;flex-direction:column;align-items:center;gap:8px;padding-top:12px;flex:1}.pc-btn[data-v-d8fa9541]{width:26px;height:26px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .14s ease}.pc-btn[data-v-d8fa9541]:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.pc-btn.on[data-v-d8fa9541]{color:var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .09))}.prop-head[data-v-d8fa9541]{display:flex;align-items:center;justify-content:space-between;height:42px;padding:0 12px;flex-shrink:0;border-bottom:1px solid var(--pd-border-soft, #e9ecf2)}.prop-title[data-v-d8fa9541]{font-size:12px;font-weight:600;color:var(--pd-text, #2a2e37);letter-spacing:1.2px;display:inline-flex;align-items:center;gap:7px}.prop-title[data-v-d8fa9541]:before{content:"";width:3px;height:12px;border-radius:2px;background:linear-gradient(180deg,var(--pd-accent-2, #3D7BFF),var(--pd-accent, #165DFF))}.collapse-btn[data-v-d8fa9541]{border:none;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:14px;cursor:pointer;width:24px;height:24px;border-radius:5px;transition:all .14s ease}.collapse-btn[data-v-d8fa9541]:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.prop-tabs[data-v-d8fa9541]{flex:1;display:flex;flex-direction:column;overflow:hidden}.prop-tabs .pd-tab-pane[data-v-d8fa9541]{flex:1;min-height:0;overflow-y:auto;padding:12px}.property-content[data-v-d8fa9541]{padding:0}.margin-grid[data-v-d8fa9541]{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}.custom-size-grid[data-v-d8fa9541]{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:4px;width:100%}.custom-size-x[data-v-d8fa9541]{color:var(--pd-text-muted, #8b909c);font-size:12px}.page-bg-row[data-v-d8fa9541]{display:flex;align-items:center;gap:8px}.page-bg-picker[data-v-d8fa9541]{flex:1;min-width:0}.pd-reset[data-v-d8fa9541]{height:26px;padding:0 8px;border:1px solid var(--pd-border, #d9dde6);border-radius:5px;background:var(--pd-field-bg, #f4f6fa);color:var(--pd-text-muted, #8b909c);font-size:12px;cursor:pointer;flex-shrink:0;transition:all .14s ease}.pd-reset[data-v-d8fa9541]:hover{color:var(--pd-accent, #165DFF);border-color:var(--pd-accent, #165DFF)}.status-bar[data-v-eb34e9a7]{display:flex;align-items:center;gap:20px;height:30px;padding:0 16px;background:var(--pd-surface, #ffffff);border-top:1px solid var(--pd-border-soft, #e9ecf2);box-shadow:0 -1px 2px #17203c08;font-size:11.5px;color:var(--pd-text-muted, #8b909c);-webkit-user-select:none;user-select:none;flex-shrink:0}.status-item[data-v-eb34e9a7]{white-space:nowrap;font-variant-numeric:tabular-nums;display:inline-flex;align-items:center}.coord[data-v-eb34e9a7]{font-variant-numeric:tabular-nums;color:var(--pd-text, #2a2e37)}.status-paper[data-v-eb34e9a7]{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--pd-accent, #165DFF);font-weight:600}.status-dirty[data-v-eb34e9a7]{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;color:var(--pd-text-muted, #8b909c)}.status-dirty.on[data-v-eb34e9a7]{color:var(--pd-accent-secondary, #f56c6c)}.dirty-dot[data-v-eb34e9a7]{width:7px;height:7px;border-radius:50%;background:var(--pd-ink-green, #67c23a)}.status-dirty.on .dirty-dot[data-v-eb34e9a7]{background:var(--pd-accent-secondary, #f56c6c);box-shadow:0 0 0 3px #f56c6c24;animation:dirty-pulse-eb34e9a7 1.6s ease-in-out infinite}@keyframes dirty-pulse-eb34e9a7{0%,to{box-shadow:0 0 0 2px #f56c6c1f}50%{box-shadow:0 0 0 4px #f56c6c0d}}@media(prefers-reduced-motion:reduce){.status-dirty.on .dirty-dot[data-v-eb34e9a7]{animation:none}}.help-modal-overlay[data-v-31115934]{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.help-modal[data-v-31115934]{width:800px;max-width:90vw;height:600px;max-height:85vh;background:var(--pd-surface, #ffffff);border-radius:8px;box-shadow:0 4px 24px #00000026;display:flex;flex-direction:column;overflow:hidden}.help-modal-header[data-v-31115934]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--pd-border, #d9dde6)}.help-modal-title[data-v-31115934]{margin:0;font-size:16px;font-weight:600;color:var(--pd-text, #2a2e37)}.help-modal-title-wrap[data-v-31115934]{display:flex;align-items:center;gap:10px}.help-modal-project[data-v-31115934]{padding:2px 8px;border-radius:4px;background:var(--pd-accent-soft, rgba(22, 93, 255, .09));color:var(--pd-accent, #165DFF);font-size:12px;font-weight:500}.help-modal-close[data-v-31115934]{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:20px;cursor:pointer;transition:all .15s}.help-modal-close[data-v-31115934]:hover{background:var(--pd-sidebar-hover, #f0f3f9);color:var(--pd-text, #2a2e37)}.help-modal-body[data-v-31115934]{flex:1;display:flex;overflow:hidden}.help-modal-sidebar[data-v-31115934]{width:160px;padding:12px;border-right:1px solid var(--pd-border, #d9dde6);background:var(--pd-field-bg, #f4f6fa);overflow-y:auto}.help-tab[data-v-31115934]{display:block;width:100%;padding:10px 12px;margin-bottom:4px;border:none;border-radius:4px;background:transparent;color:var(--pd-text, #2a2e37);font-size:13px;text-align:left;cursor:pointer;transition:all .15s}.help-tab[data-v-31115934]:hover{background:var(--pd-sidebar-hover, #f0f3f9)}.help-tab.active[data-v-31115934]{background:var(--pd-accent-soft, rgba(22, 93, 255, .09));color:var(--pd-accent, #165DFF);font-weight:500}.help-modal-content[data-v-31115934]{flex:1;padding:20px;overflow-y:auto}.help-content[data-v-31115934]{font-size:14px;line-height:1.6;color:var(--pd-text, #2a2e37)}.help-content[data-v-31115934] h2{margin:0 0 16px;padding-bottom:8px;border-bottom:1px solid var(--pd-border-soft, #e9ecf2);font-size:18px;font-weight:600}.help-content[data-v-31115934] h3{margin:20px 0 12px;font-size:15px;font-weight:600}.help-content[data-v-31115934] p{margin:0 0 12px}.help-content[data-v-31115934] ul,.help-content[data-v-31115934] ol{margin:0 0 12px;padding-left:24px}.help-content[data-v-31115934] li{margin-bottom:4px}.help-content[data-v-31115934] code{padding:2px 6px;border-radius:3px;background:var(--pd-field-bg, #f4f6fa);font-family:SF Mono,Monaco,monospace;font-size:13px}.help-content[data-v-31115934] pre{margin:0 0 12px;padding:12px;border-radius:4px;background:var(--pd-field-bg, #f4f6fa);overflow-x:auto}.help-content[data-v-31115934] pre code{padding:0;background:transparent}.help-content[data-v-31115934] table{width:100%;margin:0 0 12px;border-collapse:collapse}.help-content[data-v-31115934] th,.help-content[data-v-31115934] td{padding:8px 12px;border:1px solid var(--pd-border, #d9dde6);text-align:left}.help-content[data-v-31115934] th{background:var(--pd-field-bg, #f4f6fa);font-weight:600}.help-content[data-v-31115934] blockquote{margin:0 0 12px;padding:12px 16px;border-left:3px solid var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .09))}.help-modal-enter-active[data-v-31115934],.help-modal-leave-active[data-v-31115934]{transition:opacity .2s ease}.help-modal-enter-active .help-modal[data-v-31115934],.help-modal-leave-active .help-modal[data-v-31115934]{transition:transform .2s ease}.help-modal-enter-from[data-v-31115934],.help-modal-leave-to[data-v-31115934]{opacity:0}.help-modal-enter-from .help-modal[data-v-31115934],.help-modal-leave-to .help-modal[data-v-31115934]{transform:scale(.95)}.designer-container[data-v-7f247429]{--pd-bg: #f3f5f9;--pd-surface: #ffffff;--pd-field-bg: #f4f6fa;--pd-sidebar: #ffffff;--pd-sidebar-hover: #f0f3f9;--pd-canvas-bg: #e6e9f0;--pd-paper: #FFFFFF;--pd-accent: #165DFF;--pd-accent-2: #3D7BFF;--pd-accent-soft: rgba(22, 93, 255, .09);--pd-accent-secondary: #f56c6c;--pd-danger-soft: rgba(245, 108, 108, .1);--pd-ink-green: #67c23a;--pd-text: #2a2e37;--pd-text-muted: #8b909c;--pd-text-faint: #b4b9c4;--pd-border: #d9dde6;--pd-border-soft: #e9ecf2;--pd-handle: #165DFF;--pd-ruler: #9aa1af;--pd-ruler-bg: #f8f9fc;--pd-ruler-cursor: #165DFF;--pd-radius: 6px;--pd-shadow-sm: 0 1px 2px rgba(23, 32, 60, .05);--pd-shadow-md: 0 2px 8px rgba(23, 32, 60, .06), 0 10px 28px rgba(23, 32, 60, .07);--pd-shadow-paper: 0 0 0 1px rgba(23, 32, 60, .05), 0 1px 2px rgba(23, 32, 60, .06), 0 8px 20px rgba(23, 32, 60, .08), 0 26px 60px rgba(23, 32, 60, .15);height:100%;display:flex;flex-direction:column;background:var(--pd-bg)}.designer-body[data-v-7f247429]{flex:1;display:flex;overflow:hidden}.print-html-preview[data-v-6b659619]{width:100%;height:100%;position:relative;background:#e9ebee}.print-html-preview-iframe[data-v-6b659619]{width:100%;height:100%;border:0;background:#fff}.print-html-preview-loading[data-v-6b659619],.print-html-preview-error[data-v-6b659619]{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#909399;font-size:14px}.print-html-preview-error[data-v-6b659619]{color:#f56c6c}
1
+ .pd-form{display:flex;flex-direction:column;gap:10px;font-size:12px;color:var(--pd-text, #303133)}.pd-field{display:flex;flex-direction:column;gap:4px}.pd-label{font-size:11px;color:var(--pd-text-muted, #909399)}.pd-hint{margin:2px 0 6px;color:var(--pd-text-muted, #8b909c);font-size:12px;line-height:1.4}.pd-input,.pd-select,.pd-color,textarea.pd-input{width:100%;height:26px;min-height:26px;padding:3px 6px;border:1px solid var(--pd-border, #d9dde6);border-radius:6px;background:#fff;color:inherit;font:inherit;box-sizing:border-box;transition:border-color .14s ease,box-shadow .14s ease}.pd-input:hover,.pd-select:hover{border-color:var(--pd-text-faint, #b4b9c4)}textarea.pd-input{height:auto;min-height:48px;resize:vertical}.pd-input:focus,.pd-select:focus,.pd-color:focus{outline:none;border-color:var(--pd-accent, #165DFF);box-shadow:0 0 0 2px #165dff1f}.pd-select{appearance:auto}.pd-color{padding:1px;height:26px}.pd-switch{appearance:none;width:32px;height:18px;margin:0;border:1px solid var(--pd-border, #dcdfe6);border-radius:999px;background:#dcdfe6;position:relative;cursor:pointer;transition:background .2s,border-color .2s}.pd-switch:checked{background:var(--pd-accent, #165DFF);border-color:var(--pd-accent, #165DFF)}.pd-switch:after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;transition:transform .2s}.pd-switch:checked:after{transform:translate(14px)}.pd-range{width:100%;accent-color:var(--pd-accent, #165DFF)}.pd-radio-group,.pd-checkbox-group{display:flex;flex-wrap:wrap;gap:6px}.pd-radio-group--2col,.pd-checkbox-group--2col{display:grid;grid-template-columns:1fr 1fr}.pd-radio-group--2col>.pd-radio,.pd-checkbox-group--2col>.pd-checkbox{width:60%;justify-content:flex-start}.pd-radio,.pd-checkbox{display:inline-flex;align-items:center;gap:4px;min-height:24px;padding:0 7px;border:1px solid var(--pd-border, #d9dde6);border-radius:6px;background:#fff;cursor:pointer;transition:border-color .14s ease,background .14s ease,color .14s ease}.pd-radio:has(input:checked),.pd-checkbox:has(input:checked){color:var(--pd-accent, #165DFF);border-color:var(--pd-accent, #165DFF);background:#165dff0f}.pd-button-group{display:inline-flex;gap:4px}.pd-button,.pd-tab{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:26px;padding:3px 8px;border:1px solid var(--pd-border, #d9dde6);border-radius:6px;background:var(--pd-bg, #f4f6fa);color:var(--pd-text, #2a2e37);font:inherit;cursor:pointer;transition:background .14s ease,border-color .14s ease,color .14s ease}.pd-button:hover{background:var(--pd-sidebar-hover, #f0f3f9);border-color:var(--pd-text-faint, #b4b9c4)}.pd-button.primary{background:var(--pd-accent, #165DFF);border-color:var(--pd-accent, #165DFF);color:#fff}.pd-button.danger{background:#f56c6c;border-color:#f56c6c;color:#fff}.pd-button.small{min-height:22px;padding:1px 6px;font-size:11px}.pd-button:disabled{opacity:.55;cursor:not-allowed}.pd-tabs{display:flex;flex-direction:column;min-height:0}.pd-tab-bar{display:flex;gap:4px;padding:8px 12px 0;border-bottom:1px solid var(--pd-border-soft, #ebeef5)}.pd-tab{border:0;border-bottom:2px solid transparent;border-radius:5px 5px 0 0;background:transparent;transition:color .14s ease,background .14s ease}.pd-tab-bar .pd-tab:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.pd-tab.active{color:var(--pd-accent, #165DFF);border-bottom-color:var(--pd-accent, #165DFF);background:transparent;font-weight:600}.pd-tab-pane{min-height:0;overflow:auto}.pd-divider{margin:6px 0;font-size:11px;color:var(--pd-text-muted, #909399)}.pd-empty{margin:16px 0;color:var(--pd-text-muted, #909399);text-align:center}.pd-badge{padding:0 4px;border-radius:3px;background:#67c23a1f;color:#529b2e;font-size:10px}.pd-dialog-overlay{position:fixed;inset:0;z-index:2000;display:grid;place-items:center;padding:16px;background:#00000073}.pd-dialog{display:flex;flex-direction:column;width:min(950px,90vw);max-height:90vh;overflow:hidden;background:#fff;border-radius:12px;box-shadow:var(--pd-shadow-md, 0 12px 40px rgba(23, 32, 60, .18))}.pd-dialog-small{width:min(400px,92vw)}.pd-dialog-large{width:min(950px,90vw)}.pd-dialog-header,.pd-dialog-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 16px}.pd-dialog-header{border-bottom:1px solid var(--pd-border-soft, #ebeef5)}.pd-dialog-footer{justify-content:flex-end;border-top:1px solid var(--pd-border-soft, #ebeef5)}.pd-dialog-body{flex:1;min-height:0;overflow:auto;padding:16px}.pd-close{width:22px;height:22px;border:0;background:transparent;color:var(--pd-text-muted, #909399);font-size:16px;cursor:pointer}.pd-icon{display:inline-flex;width:14px;height:14px}.designer-container{scrollbar-width:thin;scrollbar-color:rgba(23,32,60,.18) transparent}.designer-container ::-webkit-scrollbar{width:9px;height:9px}.designer-container ::-webkit-scrollbar-track{background:transparent}.designer-container ::-webkit-scrollbar-thumb{background:#17203c29;border-radius:999px;border:2px solid transparent;background-clip:content-box}.designer-container ::-webkit-scrollbar-thumb:hover{background:#17203c4d;border:2px solid transparent;background-clip:content-box}.designer-container ::-webkit-scrollbar-corner{background:transparent}.designer-container button:focus-visible,.designer-container [tabindex]:focus-visible,.designer-container .pd-tab:focus-visible{outline:2px solid var(--pd-accent, #165DFF);outline-offset:1px}@media(prefers-reduced-motion:reduce){.designer-container *,.designer-container *:before,.designer-container *:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.help-button[data-v-80ccab03]{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;cursor:pointer;transition:background-color .15s}.help-button[data-v-80ccab03]:hover{background:var(--pd-sidebar-hover, #f0f3f9)}.help-icon[data-v-80ccab03]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--pd-accent, #165DFF);color:#fff;font-size:12px;font-weight:600;line-height:1}.designer-toolbar[data-v-7a58c9f4]{display:flex;align-items:center;gap:2px;padding:0 12px;height:50px;background:var(--pd-surface, #ffffff);border-bottom:1px solid var(--pd-border-soft, #e9ecf2);box-shadow:0 1px 2px #17203c0a,0 6px 16px -12px #17203c40;flex-shrink:0;position:relative;z-index:100}.tb-group[data-v-7a58c9f4]{display:flex;align-items:center;gap:2px;padding:0 8px}.tb-group+.tb-group[data-v-7a58c9f4]{border-left:1px solid var(--pd-border-soft, #e9ecf2)}.tb-btn[data-v-7a58c9f4]{height:30px;min-width:30px;padding:0 8px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:12px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:5px;transition:background .14s ease,color .14s ease,border-color .14s ease,box-shadow .14s ease}.tb-btn[data-v-7a58c9f4]:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.tb-btn[data-v-7a58c9f4]:active{background:var(--pd-border-soft, #e9ecf2)}.tb-btn[data-v-7a58c9f4]:disabled{opacity:.32;cursor:default;background:transparent;color:var(--pd-text-faint, #b4b9c4)}.tb-btn.on[data-v-7a58c9f4]{color:var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .09));font-weight:600}.tb-btn.warn[data-v-7a58c9f4]{color:var(--pd-accent-secondary, #f56c6c);background:var(--pd-danger-soft, rgba(245, 108, 108, .1));font-weight:600}.tb-btn .dot[data-v-7a58c9f4]{width:6px;height:6px;border-radius:50%;background:var(--pd-text-faint, #b4b9c4);display:inline-block;transition:background .14s ease,box-shadow .14s ease}.tb-btn.on .dot[data-v-7a58c9f4]{background:var(--pd-accent, #165DFF);box-shadow:0 0 0 3px #165dff1f}.tb-icon[data-v-7a58c9f4]{font-size:15px;line-height:1}.tb-btn[data-tip][data-v-7a58c9f4]{position:relative}.tb-btn[data-tip][data-v-7a58c9f4]:after{content:attr(data-tip);position:absolute;bottom:-32px;left:50%;transform:translate(-50%);padding:4px 8px;font-size:12px;color:#fff;background:#1e2330e0;border-radius:4px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s ease;z-index:100}.tb-btn[data-tip][data-v-7a58c9f4]:hover:after{opacity:1}.tb-btn:disabled[data-tip][data-v-7a58c9f4]:after{display:none}.tb-mark[data-v-7a58c9f4]{width:28px;height:28px;margin-right:2px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(150deg,var(--pd-accent-2, #3D7BFF),var(--pd-accent, #165DFF));box-shadow:0 3px 8px #165dff47,inset 0 1px #ffffff38;flex-shrink:0}.tb-mark svg[data-v-7a58c9f4]{width:16px;height:16px}.tb-title[data-v-7a58c9f4]{display:flex;flex-direction:column;line-height:1.2;padding-left:6px}.tb-title-name[data-v-7a58c9f4]{font-size:13px;font-weight:600;color:var(--pd-text, #2a2e37);letter-spacing:.2px}.tb-title-sub[data-v-7a58c9f4]{font-size:10px;color:var(--pd-text-muted, #8b909c);letter-spacing:.8px}.tb-zoom[data-v-7a58c9f4]{font-size:12px;color:var(--pd-text, #2a2e37);font-variant-numeric:tabular-nums;min-width:46px;text-align:center}.tb-spacer[data-v-7a58c9f4]{flex:1}.btn-primary[data-v-7a58c9f4],.btn-secondary[data-v-7a58c9f4]{height:32px;padding:0 16px;border-radius:7px;font-size:13px;font-weight:600;cursor:pointer;transition:filter .14s ease,background .14s ease,border-color .14s ease,box-shadow .14s ease}.btn-secondary[data-v-7a58c9f4]{background:var(--pd-field-bg, #f4f6fa);color:var(--pd-text-muted, #606266);border:1px solid var(--pd-border, #d9dde6)}.btn-secondary[data-v-7a58c9f4]:hover{border-color:var(--pd-accent, #165DFF);color:var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .06))}.btn-primary[data-v-7a58c9f4]{background:linear-gradient(180deg,var(--pd-accent-2, #3D7BFF),var(--pd-accent, #165DFF));color:#fff;border:none;box-shadow:0 3px 10px #165dff47,inset 0 1px #ffffff2e}.btn-primary[data-v-7a58c9f4]:hover{filter:brightness(1.07);box-shadow:0 5px 14px #165dff57,inset 0 1px #ffffff2e}.btn-primary[data-v-7a58c9f4]:active{filter:brightness(.97)}.layer-panel[data-v-f7a10482]{border-top:1px solid var(--pd-border);padding:8px 12px;height:100%;box-sizing:border-box;overflow-y:auto}.panel-title[data-v-f7a10482]{font-size:11px;color:var(--pd-text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.layer-item[data-v-f7a10482]{display:flex;align-items:center;gap:6px;padding:4px 6px;margin-bottom:2px;border-radius:4px;cursor:pointer;font-size:12px;transition:background .1s}.layer-item[data-v-f7a10482]:hover{background:var(--pd-sidebar-hover, #f0f2f5)}.layer-item.active[data-v-f7a10482]{background:#165dff1a;color:var(--pd-accent, #165DFF);box-shadow:inset 2px 0 0 var(--pd-accent, #165DFF)}.layer-icon[data-v-f7a10482]{width:18px;text-align:center;font-size:12px;color:var(--pd-text-muted, #909399)}.layer-name[data-v-f7a10482]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--pd-text, #303133)}.layer-zone[data-v-f7a10482]{flex-shrink:0;padding:0 4px;font-size:10px;line-height:14px;color:var(--pd-ink-green, #67c23a);background:#67c23a1a;border-radius:3px}.layer-zindex[data-v-f7a10482]{font-size:10px;color:var(--pd-text-muted, #909399);font-variant-numeric:tabular-nums}.layer-actions[data-v-f7a10482]{display:flex;gap:4px;margin-top:8px}.field-tree-panel[data-v-9b326f07]{padding:0}.panel-title[data-v-9b326f07]{font-size:11px;color:var(--pd-text-muted);text-transform:uppercase;letter-spacing:.5px;padding:4px 0 8px;margin-bottom:8px;border-bottom:1px solid var(--pd-border)}.search-input[data-v-9b326f07]{margin-bottom:8px}.tree-container[data-v-9b326f07]{overflow-y:auto;min-height:0}.field-group-header[data-v-9b326f07]{display:flex;align-items:center;gap:4px;padding:5px 8px;border-radius:4px;font-size:13px;color:var(--pd-text, #303133);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .1s}.field-group-header[data-v-9b326f07]:hover{background:var(--pd-sidebar-hover, #f0f2f5)}.field-group-header.is-list[data-v-9b326f07]{color:var(--pd-accent, #165DFF);font-weight:500}.expand-icon[data-v-9b326f07]{width:12px;font-size:8px;flex-shrink:0;color:var(--pd-text-muted, #909399)}.field-row[data-v-9b326f07]{display:flex;align-items:center;gap:4px;padding:5px 8px;border-radius:4px;font-size:13px;color:var(--pd-text, #303133);cursor:grab;-webkit-user-select:none;user-select:none;transition:background .1s}.field-row[data-v-9b326f07]:hover{background:var(--pd-sidebar-hover, #f0f2f5)}.node-icon[data-v-9b326f07]{font-size:14px;flex-shrink:0;filter:saturate(.6);opacity:.9}.node-label[data-v-9b326f07]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.node-key[data-v-9b326f07]{font-size:11px;color:var(--pd-text-muted, #909399);flex-shrink:0}.group-label[data-v-9b326f07]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.left-panel[data-v-15dad0f0]{width:224px;min-width:224px;background:var(--pd-sidebar, #ffffff);border-right:1px solid var(--pd-border-soft, #e9ecf2);display:flex;flex-direction:column;overflow:hidden;transition:width .18s ease}.left-panel.collapsed[data-v-15dad0f0]{width:36px;min-width:36px;border-right:1px solid var(--pd-border-soft, #e9ecf2)}.left-collapsed[data-v-15dad0f0]{display:flex;flex-direction:column;align-items:center;gap:8px;padding-top:12px;flex:1}.lc-btn[data-v-15dad0f0]{width:26px;height:26px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .14s ease}.lc-btn[data-v-15dad0f0]:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.lc-btn.on[data-v-15dad0f0]{color:var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .09))}.left-head[data-v-15dad0f0]{display:flex;align-items:center;justify-content:space-between;height:42px;padding:0 12px;flex-shrink:0;border-bottom:1px solid var(--pd-border-soft, #e9ecf2)}.left-title[data-v-15dad0f0]{font-size:12px;font-weight:600;color:var(--pd-text, #2a2e37);letter-spacing:1.2px;display:inline-flex;align-items:center;gap:7px}.left-title[data-v-15dad0f0]:before{content:"";width:3px;height:12px;border-radius:2px;background:linear-gradient(180deg,var(--pd-accent-2, #3D7BFF),var(--pd-accent, #165DFF))}.collapse-btn[data-v-15dad0f0]{border:none;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:14px;cursor:pointer;width:24px;height:24px;border-radius:5px;transition:all .14s ease}.collapse-btn[data-v-15dad0f0]:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.left-tabs[data-v-15dad0f0]{flex:1;display:flex;flex-direction:column;overflow:hidden}.left-tabs .pd-tab-pane[data-v-15dad0f0]{flex:1;min-height:0;overflow-y:auto;padding:12px}.panel-title[data-v-15dad0f0]{font-size:11px;color:var(--pd-text-muted, #8b909c);letter-spacing:.6px;padding:2px 2px 8px;margin-bottom:10px;border-bottom:1px solid var(--pd-border-soft, #e9ecf2)}.material-card[data-v-15dad0f0]{display:flex;align-items:center;gap:10px;padding:8px 10px;margin-bottom:7px;border:1px solid var(--pd-border-soft, #e9ecf2);border-radius:8px;background:var(--pd-field-bg, #f4f6fa);cursor:grab;-webkit-user-select:none;user-select:none;transition:border-color .14s ease,background .14s ease,transform .14s ease,box-shadow .14s ease}.material-card[data-v-15dad0f0]:hover{border-color:#165dff73;background:var(--pd-surface, #ffffff);transform:translateY(-1px);box-shadow:var(--pd-shadow-sm, 0 1px 2px rgba(23, 32, 60, .05))}.material-card[data-v-15dad0f0]:active{cursor:grabbing;transform:translateY(0)}.material-icon[data-v-15dad0f0]{width:30px;height:24px;border:1px dashed var(--pd-border, #d9dde6);border-radius:5px;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--pd-accent, #165DFF);background:var(--pd-surface, #ffffff);flex-shrink:0;transition:border-color .14s ease,background .14s ease}.material-card:hover .material-icon[data-v-15dad0f0]{border-style:solid;border-color:var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .09))}.material-label[data-v-15dad0f0]{font-size:12.5px;color:var(--pd-text, #2a2e37)}.print-image[data-v-007a2979]{width:100%;height:100%;overflow:hidden}.print-image img[data-v-007a2979]{width:100%;height:100%;display:block}.image-placeholder[data-v-007a2979]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#bbb;font-size:12px;border:1px dashed #ddd;box-sizing:border-box}.table-ctx-menu[data-v-44e319c1]{position:fixed;z-index:3000;min-width:140px;padding:4px 0;background:#fff;border:1px solid #dcdfe6;border-radius:4px;box-shadow:0 2px 12px #00000026;font-size:13px}.menu-item[data-v-44e319c1]{padding:5px 14px;cursor:pointer;color:#333}.menu-item[data-v-44e319c1]:hover{background:#f5f7fa}.menu-item.disabled[data-v-44e319c1]{color:#c0c4cc;cursor:not-allowed}.menu-item.active[data-v-44e319c1]{color:#165dff}.menu-divider[data-v-44e319c1]{height:1px;margin:4px 0;background:#ebeef5}.menu-group-title[data-v-44e319c1]{padding:4px 14px;font-size:12px;color:#909399}.cell-barcode[data-v-81e37239]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}.cell-barcode svg[data-v-81e37239]{max-width:100%;max-height:100%}.cell-barcode img[data-v-81e37239]{max-width:100%;max-height:100%}.cell-barcode-fallback[data-v-81e37239]{font-style:italic;opacity:.6}.cell-image[data-v-d5bc444b]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}.cell-image img[data-v-d5bc444b]{max-width:100%;max-height:100%;display:block}.image-placeholder[data-v-d5bc444b]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#bbb;font-size:12px;border:1px dashed #ddd;box-sizing:border-box}.print-table[data-v-4531a154]{position:relative;width:100%;height:100%}.print-table table[data-v-4531a154]{border-collapse:collapse;table-layout:fixed;width:100%}.print-table td[data-v-4531a154]{box-sizing:border-box;word-break:break-all}.cell-selected[data-v-4531a154]{outline:2px solid #165DFF;outline-offset:-2px;background-color:#165dff14}.row-data-bg[data-v-4531a154]{background-image:repeating-linear-gradient(45deg,rgba(22,93,255,.04) 0 6px,transparent 6px 12px)}.data-placeholder[data-v-4531a154]{color:#909399;font-style:italic}.cell-editor[data-v-4531a154]{width:100%;border:none;outline:none;background:#fffbe6;font:inherit}.row-badges[data-v-4531a154]{position:absolute;left:-16px;top:0;width:14px}.row-badge[data-v-4531a154]{position:absolute;width:14px;display:flex;align-items:center;justify-content:center;font-size:10px;color:#909399;background:#f5f7fa;border-radius:2px}.col-resize-layer[data-v-4531a154]{position:absolute;inset:0;pointer-events:none;z-index:3}.col-resize-handle[data-v-4531a154]{position:absolute;top:0;bottom:0;width:6px;transform:translate(-50%);cursor:col-resize;pointer-events:auto}.col-resize-handle[data-v-4531a154]:after{content:"";position:absolute;top:0;bottom:0;left:50%;border-left:1px solid transparent}.col-resize-handle[data-v-4531a154]:hover:after,.col-resize-handle.dragging[data-v-4531a154]:after{border-left-color:var(--pd-accent, #165DFF)}.print-barcode[data-v-6eb95a40]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}.print-barcode svg[data-v-6eb95a40]{max-width:100%;max-height:100%}.print-qrcode[data-v-3454544f]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}.print-qrcode img[data-v-3454544f]{max-width:100%;max-height:100%}.print-html[data-v-880bbde5],.page-number-element[data-v-38f1d7df]{width:100%;height:100%;overflow:hidden}.print-element[data-v-45a5eb4c]{box-sizing:border-box;cursor:pointer;-webkit-user-select:none;user-select:none}.print-element.design-mode[data-v-45a5eb4c]{outline:1px dashed #C3C9D6}.print-element.design-mode.zone-header[data-v-45a5eb4c],.print-element.design-mode.zone-footer[data-v-45a5eb4c]{outline:1px dashed var(--pd-ink-green, #67c23a)}.print-element.design-mode.zone-overlay[data-v-45a5eb4c]{outline:1px dashed #06B6D4}.print-element.selected[data-v-45a5eb4c]{outline:1.5px solid var(--pd-accent, #165DFF);background:#165dff0a}.print-element.previewed[data-v-45a5eb4c]{outline:1.5px solid rgba(22,93,255,.5);background:#165dff1a}.print-element.design-mode[data-v-45a5eb4c]:hover{outline:1px dashed var(--pd-accent, #165DFF)}.print-element.locked[data-v-45a5eb4c]{cursor:not-allowed}.print-element.locked[data-v-45a5eb4c]:not(.selected){outline:1.5px dashed #999}.print-element.hidden[data-v-45a5eb4c]{opacity:.3;pointer-events:none}.print-element.drag-ghost[data-v-45a5eb4c]{opacity:.4}.drag-preview[data-v-45a5eb4c]{position:absolute;inset:0;border:2px dashed var(--pd-accent, #165DFF);pointer-events:none;z-index:1000;box-sizing:border-box}.selected-indicator[data-v-45a5eb4c]{position:absolute;top:-18px;left:0;font-size:10px;white-space:nowrap;pointer-events:none;z-index:20}.position-label[data-v-45a5eb4c]{background:var(--pd-accent, #165DFF);color:#fff;padding:1px 6px;border-radius:3px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:10px;font-variant-numeric:tabular-nums;letter-spacing:0;box-shadow:0 2px 6px #00000026}.resize-handles[data-v-45a5eb4c]{position:absolute;inset:0;pointer-events:none}.resize-handle[data-v-45a5eb4c]{position:absolute;width:7px;height:7px;background:var(--pd-handle, #165DFF);border:1.5px solid #fff;border-radius:2px;box-sizing:border-box;transform:translate(-50%,-50%);box-shadow:0 1px 3px #0000002e;z-index:10;pointer-events:auto}.handle-nw[data-v-45a5eb4c]{top:0;left:0;cursor:nw-resize}.handle-n[data-v-45a5eb4c]{top:0;left:50%;cursor:n-resize}.handle-ne[data-v-45a5eb4c]{top:0;left:100%;cursor:ne-resize}.handle-e[data-v-45a5eb4c]{top:50%;left:100%;cursor:e-resize}.handle-se[data-v-45a5eb4c]{top:100%;left:100%;cursor:se-resize}.handle-s[data-v-45a5eb4c]{top:100%;left:50%;cursor:s-resize}.handle-sw[data-v-45a5eb4c]{top:100%;left:0;cursor:sw-resize}.handle-w[data-v-45a5eb4c]{top:50%;left:0;cursor:w-resize}.paper-wrapper[data-v-38b3a452]{display:block}.hiprint-printPaper[data-v-38b3a452]{transition:transform .15s ease-out}.zone-layer[data-v-38b3a452]{box-sizing:border-box}.zone-layer.zone-header.design-mode[data-v-38b3a452],.zone-layer.zone-footer.design-mode[data-v-38b3a452]{outline:1px dashed var(--pd-ink-green, #67c23a);background:#67c23a0a}.zone-layer.zone-content.design-mode[data-v-38b3a452]{outline:1px dashed #C3C9D6}.zone-overlay[data-v-38b3a452]{position:absolute;top:0;left:0;width:100%;outline:1px dashed #06B6D4;background:#06b6d40a;box-sizing:border-box;pointer-events:none;z-index:1}.zone-label[data-v-38b3a452]{position:absolute;top:2px;right:4px;font-size:9px;color:#909399;pointer-events:none;-webkit-user-select:none;user-select:none}.zone-resize-handle[data-v-38b3a452]{position:absolute;left:0;width:100%;height:6px;cursor:ns-resize;z-index:5}.zone-resize-handle.handle-bottom[data-v-38b3a452]{bottom:-3px}.zone-resize-handle.handle-top[data-v-38b3a452]{top:-3px}.zone-resize-handle[data-v-38b3a452]:hover{background:#10b98140}.zone-height-tip[data-v-38b3a452]{position:absolute;right:4px;top:-22px;padding:1px 6px;font-size:11px;color:#fff;background:#10b981;border-radius:3px;white-space:nowrap;pointer-events:none}.design-background[data-v-38b3a452]{position:absolute;z-index:0;overflow:hidden;pointer-events:none}.design-background img[data-v-38b3a452]{display:block;width:100%;height:100%;object-fit:fill;pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.grid-bg[data-v-38b3a452]{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:0}.snap-indicator[data-v-38b3a452]{position:absolute;width:6px;height:6px;background:var(--pd-accent, #165DFF);border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:10;animation:snap-pulse-38b3a452 .3s ease-out}@keyframes snap-pulse-38b3a452{0%{transform:translate(-50%,-50%) scale(2);opacity:.5}to{transform:translate(-50%,-50%) scale(1);opacity:0}}.watermark-layer[data-v-38b3a452]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:0;overflow:hidden;pointer-events:none}.watermark-tile[data-v-38b3a452]{position:absolute;pointer-events:none}.adsorb-guide[data-v-38b3a452]{position:absolute;pointer-events:none;z-index:9999}.adsorb-guide.guide-vertical[data-v-38b3a452]{border-left:1px dashed var(--pd-accent-secondary, #f56c6c)}.adsorb-guide.guide-horizontal[data-v-38b3a452]{border-top:1px dashed var(--pd-accent-secondary, #f56c6c)}.manual-guide[data-v-38b3a452]{position:absolute;pointer-events:auto;z-index:9998;cursor:move}.manual-guide.guide-vertical[data-v-38b3a452]{border-left:1px solid #3B82F6;width:0}.manual-guide.guide-horizontal[data-v-38b3a452]{border-top:1px solid #3B82F6;height:0}.manual-guide[data-v-38b3a452]:before{content:"";position:absolute;pointer-events:auto}.manual-guide.guide-vertical[data-v-38b3a452]:before{top:0;bottom:0;left:50%;width:var(--guide-hit, 8px);transform:translate(-50%)}.manual-guide.guide-horizontal[data-v-38b3a452]:before{left:0;right:0;top:50%;height:var(--guide-hit, 8px);transform:translateY(-50%)}.manual-guide[data-v-38b3a452]:hover{border-color:#ef4444!important}.pd-ruler[data-v-1e7d0633]{position:absolute;display:block;pointer-events:auto;cursor:crosshair;z-index:1;background:var(--pd-ruler-bg, #f8f9fc)}.pd-ruler.is-horizontal[data-v-1e7d0633]{box-shadow:0 1px 0 var(--pd-border-soft, #e9ecf2)}.pd-ruler.is-vertical[data-v-1e7d0633]{box-shadow:1px 0 0 var(--pd-border-soft, #e9ecf2)}.canvas-area[data-v-b3acf7d7]{flex:1;overflow-x:scroll;overflow-y:auto;scrollbar-gutter:stable;display:flex;background-color:var(--pd-canvas-bg, #e6e9f0);background-image:radial-gradient(circle,rgba(23,32,60,.13) 1px,transparent 1.2px);background-size:20px 20px;background-position:center;padding:44px 28px 32px 44px;position:relative}.canvas-scroll[data-v-b3acf7d7]{display:flex;flex-direction:column;align-items:center;gap:20px;position:relative;flex:none;margin:auto;width:fit-content}.overlay-layer[data-v-b3acf7d7]{position:absolute;top:0;left:0;pointer-events:none;z-index:100}.overlay-image[data-v-b3acf7d7]{width:100%;display:block}.marquee-selection[data-v-b3acf7d7]{position:fixed;border:1.5px solid rgba(22,93,255,.7);background:#165dff14;border-radius:2px;pointer-events:none;z-index:10000}.context-menu[data-v-b3acf7d7]{position:fixed;background:var(--pd-surface, #ffffff);border:1px solid var(--pd-border-soft, #e9ecf2);border-radius:8px;box-shadow:var(--pd-shadow-md, 0 10px 28px rgba(23, 32, 60, .12));padding:5px;z-index:10001;min-width:132px}.context-menu-item[data-v-b3acf7d7]{padding:7px 12px;border-radius:5px;font-size:12.5px;cursor:pointer;color:var(--pd-text, #2a2e37);-webkit-user-select:none;user-select:none;transition:background .12s ease,color .12s ease}.context-menu-item[data-v-b3acf7d7]:hover{background:var(--pd-accent-soft, rgba(22, 93, 255, .09));color:var(--pd-accent, #165DFF)}.context-menu-item.disabled[data-v-b3acf7d7]{color:var(--pd-text-faint, #b4b9c4);cursor:not-allowed}.context-menu-item.disabled[data-v-b3acf7d7]:hover{background:transparent;color:var(--pd-text-faint, #b4b9c4)}.context-menu-sep[data-v-b3acf7d7]{height:1px;background:var(--pd-border-soft, #e9ecf2);margin:5px 8px}.ruler-overlay[data-v-b3acf7d7]{position:absolute;inset:0;pointer-events:none;z-index:60}.ruler-corner[data-v-b3acf7d7]{position:absolute;top:0;left:0;width:22px;height:22px;background:var(--pd-ruler-bg, #f8f9fc);box-shadow:1px 1px 0 var(--pd-border-soft, #e9ecf2);z-index:2}.ruler-overlay[data-v-b3acf7d7] .pd-ruler.is-horizontal{top:0;left:22px}.ruler-overlay[data-v-b3acf7d7] .pd-ruler.is-vertical{top:22px;left:0}.ruler-guide-preview[data-v-b3acf7d7]{position:fixed;pointer-events:none;z-index:9997}.ruler-guide-preview.guide-vertical[data-v-b3acf7d7]{width:0;border-left:1px dashed var(--pd-accent, #165dff)}.ruler-guide-preview.guide-horizontal[data-v-b3acf7d7]{height:0;border-top:1px dashed var(--pd-accent, #165dff)}.property-search[data-v-10ab6c84]{padding:0 0 10px;background:transparent}.property-group[data-v-2ba57031]{border:1px solid var(--pd-border-soft, #e9ecf2);border-radius:8px;margin-bottom:10px;background:var(--pd-surface, #ffffff);overflow:hidden;transition:border-color .14s ease,box-shadow .14s ease}.property-group[data-v-2ba57031]:last-child{margin-bottom:2px}.property-group.is-expanded[data-v-2ba57031]{border-color:var(--pd-border-soft, #e9ecf2)}.group-header[data-v-2ba57031]{display:flex;align-items:center;padding:9px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--pd-field-bg, #f4f6fa);transition:background .14s ease}.group-header[data-v-2ba57031]:hover{background:var(--pd-sidebar-hover, #f0f3f9)}.property-group.is-expanded .group-header[data-v-2ba57031]{border-bottom:1px solid var(--pd-border-soft, #e9ecf2)}.group-icon[data-v-2ba57031]{margin-right:8px;color:var(--pd-accent, #165DFF)}.group-title[data-v-2ba57031]{flex:1;font-size:12px;font-weight:600;color:var(--pd-text, #2a2e37);letter-spacing:.3px}.expand-icon[data-v-2ba57031]{color:var(--pd-text-muted, #8b909c);font-size:10px}.group-content[data-v-2ba57031]{padding:10px 12px 12px;background:var(--pd-surface, #ffffff)}.pd-stepper[data-v-9722a7cf]{display:flex;align-items:center;width:100%}.pd-step-btn[data-v-9722a7cf]{width:26px;height:26px;flex-shrink:0;border:1px solid var(--pd-border, #d9dde6);background:var(--pd-field-bg, #f4f6fa);color:var(--pd-text, #2a2e37);font-size:14px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .14s ease,border-color .14s ease,color .14s ease}.pd-step-btn[data-v-9722a7cf]:hover:not(:disabled){background:var(--pd-sidebar-hover, #f0f3f9);border-color:var(--pd-text-faint, #b4b9c4)}.pd-step-btn[data-v-9722a7cf]:disabled{opacity:.45;cursor:not-allowed}.pd-step-minus[data-v-9722a7cf]{border-radius:6px 0 0 6px;border-right:none}.pd-step-plus[data-v-9722a7cf]{border-radius:0 6px 6px 0;border-left:none}.pd-step-input.pd-input[data-v-9722a7cf]{border-radius:0;min-width:0;flex:1;text-align:center;-moz-appearance:textfield}.pd-step-input.pd-input[data-v-9722a7cf]::-webkit-outer-spin-button,.pd-step-input.pd-input[data-v-9722a7cf]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.position-grid[data-v-bc364679]{display:grid;grid-template-columns:1fr 1fr;gap:8px}.preset-color-trigger[data-v-12290e7e]{display:flex;align-items:center;width:100%;min-height:26px;padding:1px;border:1px solid var(--pd-border, #d9dde6);border-radius:6px;background:#fff;cursor:pointer;transition:border-color .14s ease,box-shadow .14s ease}.preset-color-trigger[data-v-12290e7e]:hover,.preset-color-trigger[aria-expanded=true][data-v-12290e7e]{border-color:var(--pd-accent, #165DFF)}.preset-color-trigger[data-v-12290e7e]:focus-visible{outline:none;border-color:var(--pd-accent, #165DFF);box-shadow:0 0 0 2px #165dff1f}.preset-color-swatch[data-v-12290e7e]{width:100%;height:22px;border-radius:4px;background-image:linear-gradient(45deg,#e9ecef 25%,transparent 25%,transparent 75%,#e9ecef 75%);background-size:8px 8px;background-position:0 0,4px 4px}.preset-color-panel[data-v-12290e7e]{position:fixed;z-index:3000;width:190px;padding:10px;border:1px solid var(--pd-border, #d9dde6);border-radius:8px;background:#fff;box-shadow:0 8px 24px #17203c29}.picker-preview[data-v-12290e7e]{display:flex;align-items:center;gap:8px;margin-bottom:8px}.picker-current[data-v-12290e7e]{flex:0 0 26px;height:24px;border:1px solid rgb(0 0 0 / 12%);border-radius:5px;background-image:linear-gradient(45deg,#e9ecef 25%,transparent 25%,transparent 75%,#e9ecef 75%);background-size:8px 8px;background-position:0 0,4px 4px}.picker-current.is-empty[data-v-12290e7e]{position:relative;background-color:#fff}.picker-current.is-empty[data-v-12290e7e]:after{content:"";position:absolute;inset:3px;background:linear-gradient(to top right,transparent calc(50% - .7px),#f53f3f calc(50% - .7px),#f53f3f calc(50% + .7px),transparent calc(50% + .7px));border-radius:3px}.picker-hex[data-v-12290e7e]{flex:1;min-width:0;height:24px;padding:0 6px;border:1px solid var(--pd-border, #d9dde6);border-radius:5px;color:var(--pd-text, #303133);font:inherit;font-size:11px;text-transform:uppercase}.picker-hex[data-v-12290e7e]:focus{outline:none;border-color:var(--pd-accent, #165DFF);box-shadow:0 0 0 2px #165dff1f}.picker-area[data-v-12290e7e]{position:relative;height:100px;border:1px solid rgb(0 0 0 / 12%);border-radius:6px;overflow:hidden;cursor:crosshair;touch-action:none;background:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,hsl(var(--picker-hue) 100% 50%))}.picker-handle[data-v-12290e7e]{position:absolute;width:12px;height:12px;border:2px solid #fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 3px #00000073;pointer-events:none}.picker-hue[data-v-12290e7e]{width:100%;height:14px;margin:10px 0 0;appearance:none;border:1px solid rgb(0 0 0 / 12%);border-radius:999px;background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red);cursor:pointer}.picker-hue[data-v-12290e7e]::-webkit-slider-thumb{appearance:none;width:12px;height:12px;border:2px solid #fff;border-radius:50%;background:transparent;box-shadow:0 0 3px #00000073}.picker-hue[data-v-12290e7e]::-moz-range-thumb{width:8px;height:8px;border:2px solid #fff;border-radius:50%;background:transparent;box-shadow:0 0 3px #00000073}.picker-heading[data-v-12290e7e]{display:flex;align-items:center;justify-content:space-between;margin-top:10px;margin-bottom:6px;font-size:11px;color:var(--pd-text-muted, #909399)}.picker-clear[data-v-12290e7e]{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;border:none;border-radius:4px;background:transparent;font-size:11px;line-height:1;color:var(--pd-text-muted, #909399);cursor:pointer}.picker-clear[data-v-12290e7e]:hover:not(:disabled){background:#0000000f;color:var(--pd-danger, #f53f3f)}.picker-clear[data-v-12290e7e]:disabled{opacity:.45;cursor:not-allowed}.preset-color-grid[data-v-12290e7e]{display:grid;grid-template-columns:repeat(6,1fr);gap:5px}.preset-color-item[data-v-12290e7e]{width:22px;height:22px;padding:0;border:1px solid rgb(0 0 0 / 12%);border-radius:5px;cursor:pointer}.preset-color-item.active[data-v-12290e7e]{box-shadow:0 0 0 2px #fff,0 0 0 3px var(--pd-accent, #165DFF)}.font-select-input[data-v-c559b167]{width:100%}.font-select-list[data-v-c559b167]{margin-top:4px;max-height:200px;overflow-y:auto;padding:2px;border:1px solid var(--pd-border, #d9dde6);border-radius:6px;background:var(--pd-surface, #ffffff);list-style:none}.font-select-option[data-v-c559b167]{padding:4px 6px;border-radius:4px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.font-select-option.is-active[data-v-c559b167]{background:var(--pd-sidebar-hover, #f0f3f9)}.font-select-option.is-muted[data-v-c559b167]{color:var(--pd-text-muted, #8b909c)}.color-row[data-v-ec9e5cb7]{display:flex;gap:12px}.color-row>.pd-field[data-v-ec9e5cb7]{flex:1 1 0;min-width:0}.expression-editor[data-v-9788fc78]{display:flex;height:450px;gap:0}.ee-nav[data-v-9788fc78]{width:100px;background:var(--pd-sidebar);border-right:1px solid var(--pd-border);display:flex;flex-direction:column;flex-shrink:0}.ee-nav-title[data-v-9788fc78]{padding:10px;border-bottom:1px solid var(--pd-border);font-weight:600;font-size:13px;color:var(--pd-text);text-align:center}.ee-nav-tabs[data-v-9788fc78]{flex:1;display:flex;flex-direction:column;padding:6px;gap:4px}.ee-nav-tab[data-v-9788fc78]{padding:8px 10px;border-radius:6px;cursor:pointer;font-size:12px;text-align:center;transition:all .2s}.ee-nav-tab.active[data-v-9788fc78]{background:var(--pd-accent);color:#fff}.ee-nav-tab[data-v-9788fc78]:not(.active){background:#fff;border:1px solid var(--pd-border);color:var(--pd-text)}.ee-nav-tab[data-v-9788fc78]:hover:not(.active){background:#ecf5ff;border-color:var(--pd-accent)}.ee-content[data-v-9788fc78]{width:300px;display:flex;flex-direction:column;border-right:1px solid var(--pd-border);flex-shrink:0}.ee-content-search[data-v-9788fc78]{padding:10px;border-bottom:1px solid var(--pd-border)}.ee-content-list[data-v-9788fc78]{flex:1;padding:8px;overflow-y:auto;min-height:0}.ee-func-group[data-v-9788fc78]{margin-bottom:12px}.ee-func-group-title[data-v-9788fc78]{font-size:11px;font-weight:600;color:var(--pd-text-muted);padding:6px 10px;margin-bottom:2px;letter-spacing:.5px}.ee-field-group[data-v-9788fc78]{display:flex;align-items:center;gap:4px;padding:6px 10px;font-size:12px;font-weight:600;color:var(--pd-text)}.ee-field-group.is-list[data-v-9788fc78]{color:var(--pd-accent, #165DFF)}.ee-field-group-icon[data-v-9788fc78]{font-size:13px;filter:saturate(.6)}.ee-list-item[data-v-9788fc78]{padding:7px 10px;cursor:pointer;border-radius:4px;margin-bottom:2px;transition:background .15s}.ee-field-info[data-v-9788fc78]{display:flex;flex-direction:column;gap:1px}.ee-field-info .ee-item-label[data-v-9788fc78]{font-size:12px;color:var(--pd-text)}.ee-field-info .ee-item-key[data-v-9788fc78]{font-size:10px;color:var(--pd-text-muted);font-family:monospace}.ee-list-item[data-v-9788fc78]:hover{background:#ecf5ff}.ee-editor[data-v-9788fc78]{flex:1;display:flex;flex-direction:column;background:var(--pd-sidebar);min-width:0}.ee-editor-section[data-v-9788fc78]{padding:12px;border-bottom:1px solid var(--pd-border)}.ee-editor-title[data-v-9788fc78]{font-size:11px;color:var(--pd-text-muted);margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px}.ee-textarea[data-v-9788fc78]{width:100%;border:1px solid var(--pd-border);border-radius:6px;padding:10px;font-family:monospace;font-size:13px;resize:vertical;box-sizing:border-box;min-height:100px}.ee-textarea[data-v-9788fc78]:focus{outline:none;border-color:var(--pd-accent)}.ee-preview[data-v-9788fc78]{padding:10px;background:var(--pd-bg);border:1px solid var(--pd-border);border-radius:6px;min-height:30px;font-size:13px;color:var(--pd-text);line-height:1.6}.ee-preview-error[data-v-9788fc78]{color:#e53e3e;background:#fef2f2;border-color:#fecaca}.ee-help-section[data-v-9788fc78]{flex:1;padding:12px;overflow-y:auto;min-height:0}.ee-help-title[data-v-9788fc78]{font-size:11px;color:var(--pd-text-muted);margin-bottom:8px;text-transform:uppercase;letter-spacing:.5px}.ee-help-grid[data-v-9788fc78]{display:grid;grid-template-columns:1fr 1fr;gap:8px}.ee-help-card[data-v-9788fc78]{border-radius:6px;padding:10px}.ee-help-card-title[data-v-9788fc78]{font-size:12px;font-weight:600;margin-bottom:4px}.ee-help-card-content[data-v-9788fc78]{font-size:11px;line-height:1.5;color:var(--pd-text)}.ee-help-field[data-v-9788fc78]{background:#f0f9ff;border:1px solid #bae6fd}.ee-help-field .ee-help-card-title[data-v-9788fc78]{color:#0369a1}.ee-help-function[data-v-9788fc78]{background:#f0fdf4;border:1px solid #bbf7d0}.ee-help-function .ee-help-card-title[data-v-9788fc78]{color:#166534}.ee-help-variable[data-v-9788fc78]{background:#fefce8;border:1px solid #fde68a}.ee-help-variable .ee-help-card-title[data-v-9788fc78]{color:#854d0e}.ee-help-conditional[data-v-9788fc78]{background:#fdf2f8;border:1px solid #fbcfe8}.ee-help-conditional .ee-help-card-title[data-v-9788fc78]{color:#9d174d}.expression-editor[data-v-9788fc78]{max-height:min(600px,80vh);overflow-y:auto;padding:16px}.binding-control[data-v-40a99329]{display:flex;align-items:center;gap:8px}.col-width-row[data-v-b5fdc7ff]{display:flex;align-items:center;gap:8px;margin-bottom:4px;width:100%}.border-row[data-v-e0e6d714]{display:flex;gap:10px}.border-row .pd-field[data-v-e0e6d714]{flex:1;min-width:0}.advanced-row[data-v-14924be2]{display:flex;gap:16px}.image-content-upload[data-v-b730e8e6]{display:flex;flex-direction:column;align-items:flex-start;gap:4px;margin-top:4px}.upload-label[data-v-b730e8e6]{cursor:pointer}.upload-label.disabled[data-v-b730e8e6]{opacity:.6;cursor:not-allowed}.upload-tip[data-v-b730e8e6]{margin:0;font-size:11px;color:var(--pd-text-muted, #909399)}.visually-hidden[data-v-b730e8e6]{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.cell-style-grid[data-v-8a66df60]{display:grid;grid-template-columns:1fr 1fr;gap:0 8px}.cell-font-field[data-v-8a66df60]{grid-column:1 / -1;padding-bottom:8px}.border-style-row[data-v-8a66df60]{display:flex;gap:6px;margin-bottom:8px}.border-presets[data-v-8a66df60]{margin-bottom:8px}.merge-btns[data-v-8a66df60]{margin-top:8px;display:flex;gap:8px}.field-row[data-v-8a66df60]{display:flex;align-items:center;gap:8px;width:100%}.watermark-config[data-v-b55bfc50]{padding:0 4px}.pd-hint[data-v-b55bfc50]{margin-left:8px;font-size:12px;color:#909399;min-width:32px}.design-background-config[data-v-3f4d2e32]{padding:0 4px}.design-background-tip[data-v-3f4d2e32]{margin:2px 0 6px;font-size:11px;line-height:1.4;color:var(--pd-text-muted, #909399)}.design-background-path[data-v-3f4d2e32]{margin-bottom:6px;padding:4px 6px;font-size:11px;color:var(--pd-text-regular, #606266);background:var(--pd-fill-light, #f5f7fa);border-radius:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.design-background-actions[data-v-3f4d2e32]{display:flex;gap:6px}.upload-label[data-v-3f4d2e32]{cursor:pointer}.upload-label.disabled[data-v-3f4d2e32]{opacity:.6;cursor:not-allowed}.visually-hidden[data-v-3f4d2e32]{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.tiling-config[data-v-aa278268]{padding:0 4px}.tiling-switch[data-v-aa278268]{display:flex;align-items:center;gap:6px;font-size:12px;cursor:pointer}.tiling-error[data-v-aa278268]{color:#f56c6c}.tiling-summary[data-v-aa278268]{color:var(--pd-text-regular, #606266)}.property-panel[data-v-f7152fc4]{width:280px;min-width:280px;background:var(--pd-sidebar, #ffffff);border-left:1px solid var(--pd-border-soft, #e9ecf2);display:flex;flex-direction:column;overflow:hidden;transition:width .18s ease}.property-panel.collapsed[data-v-f7152fc4]{width:36px;min-width:36px;border-left:1px solid var(--pd-border-soft, #e9ecf2)}.prop-collapsed[data-v-f7152fc4]{display:flex;flex-direction:column;align-items:center;gap:8px;padding-top:12px;flex:1}.pc-btn[data-v-f7152fc4]{width:26px;height:26px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .14s ease}.pc-btn[data-v-f7152fc4]:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.pc-btn.on[data-v-f7152fc4]{color:var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .09))}.prop-head[data-v-f7152fc4]{display:flex;align-items:center;justify-content:space-between;height:42px;padding:0 12px;flex-shrink:0;border-bottom:1px solid var(--pd-border-soft, #e9ecf2)}.prop-title[data-v-f7152fc4]{font-size:12px;font-weight:600;color:var(--pd-text, #2a2e37);letter-spacing:1.2px;display:inline-flex;align-items:center;gap:7px}.prop-title[data-v-f7152fc4]:before{content:"";width:3px;height:12px;border-radius:2px;background:linear-gradient(180deg,var(--pd-accent-2, #3D7BFF),var(--pd-accent, #165DFF))}.collapse-btn[data-v-f7152fc4]{border:none;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:14px;cursor:pointer;width:24px;height:24px;border-radius:5px;transition:all .14s ease}.collapse-btn[data-v-f7152fc4]:hover{color:var(--pd-text, #2a2e37);background:var(--pd-sidebar-hover, #f0f3f9)}.prop-tabs[data-v-f7152fc4]{flex:1;display:flex;flex-direction:column;overflow:hidden}.prop-tabs .pd-tab-pane[data-v-f7152fc4]{flex:1;min-height:0;overflow-y:auto;padding:12px}.property-content[data-v-f7152fc4]{padding:0}.margin-grid[data-v-f7152fc4]{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}.custom-size-grid[data-v-f7152fc4]{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:4px;width:100%}.custom-size-x[data-v-f7152fc4]{color:var(--pd-text-muted, #8b909c);font-size:12px}.pd-hint[data-v-f7152fc4]{margin:2px 0 6px;color:var(--pd-text-muted, #8b909c);font-size:12px;line-height:1.4}.page-bg-row[data-v-f7152fc4]{display:flex;align-items:center;gap:8px}.page-bg-picker[data-v-f7152fc4]{flex:1;min-width:0}.pd-reset[data-v-f7152fc4]{height:26px;padding:0 8px;border:1px solid var(--pd-border, #d9dde6);border-radius:5px;background:var(--pd-field-bg, #f4f6fa);color:var(--pd-text-muted, #8b909c);font-size:12px;cursor:pointer;flex-shrink:0;transition:all .14s ease}.pd-reset[data-v-f7152fc4]:hover{color:var(--pd-accent, #165DFF);border-color:var(--pd-accent, #165DFF)}.status-bar[data-v-a91952ff]{position:relative;display:flex;align-items:center;gap:20px;height:30px;padding:0 16px;background:var(--pd-surface, #ffffff);border-top:1px solid var(--pd-border-soft, #e9ecf2);box-shadow:0 -1px 2px #17203c08;font-size:11.5px;color:var(--pd-text-muted, #8b909c);-webkit-user-select:none;user-select:none;flex-shrink:0}.status-item[data-v-a91952ff]{white-space:nowrap;font-variant-numeric:tabular-nums;display:inline-flex;align-items:center}.coord[data-v-a91952ff]{font-variant-numeric:tabular-nums;color:var(--pd-text, #2a2e37)}.status-paper[data-v-a91952ff]{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--pd-accent, #165DFF);font-weight:600}.status-dirty[data-v-a91952ff]{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;color:var(--pd-text-muted, #8b909c)}.status-dirty.on[data-v-a91952ff]{color:var(--pd-accent-secondary, #f56c6c)}.dirty-dot[data-v-a91952ff]{width:7px;height:7px;border-radius:50%;background:var(--pd-ink-green, #67c23a)}.status-dirty.on .dirty-dot[data-v-a91952ff]{background:var(--pd-accent-secondary, #f56c6c);box-shadow:0 0 0 3px #f56c6c24;animation:dirty-pulse-a91952ff 1.6s ease-in-out infinite}@keyframes dirty-pulse-a91952ff{0%,to{box-shadow:0 0 0 2px #f56c6c1f}50%{box-shadow:0 0 0 4px #f56c6c0d}}@media(prefers-reduced-motion:reduce){.status-dirty.on .dirty-dot[data-v-a91952ff]{animation:none}}.help-modal-overlay[data-v-31115934]{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.help-modal[data-v-31115934]{width:800px;max-width:90vw;height:600px;max-height:85vh;background:var(--pd-surface, #ffffff);border-radius:8px;box-shadow:0 4px 24px #00000026;display:flex;flex-direction:column;overflow:hidden}.help-modal-header[data-v-31115934]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--pd-border, #d9dde6)}.help-modal-title[data-v-31115934]{margin:0;font-size:16px;font-weight:600;color:var(--pd-text, #2a2e37)}.help-modal-title-wrap[data-v-31115934]{display:flex;align-items:center;gap:10px}.help-modal-project[data-v-31115934]{padding:2px 8px;border-radius:4px;background:var(--pd-accent-soft, rgba(22, 93, 255, .09));color:var(--pd-accent, #165DFF);font-size:12px;font-weight:500}.help-modal-close[data-v-31115934]{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:var(--pd-text-muted, #8b909c);font-size:20px;cursor:pointer;transition:all .15s}.help-modal-close[data-v-31115934]:hover{background:var(--pd-sidebar-hover, #f0f3f9);color:var(--pd-text, #2a2e37)}.help-modal-body[data-v-31115934]{flex:1;display:flex;overflow:hidden}.help-modal-sidebar[data-v-31115934]{width:160px;padding:12px;border-right:1px solid var(--pd-border, #d9dde6);background:var(--pd-field-bg, #f4f6fa);overflow-y:auto}.help-tab[data-v-31115934]{display:block;width:100%;padding:10px 12px;margin-bottom:4px;border:none;border-radius:4px;background:transparent;color:var(--pd-text, #2a2e37);font-size:13px;text-align:left;cursor:pointer;transition:all .15s}.help-tab[data-v-31115934]:hover{background:var(--pd-sidebar-hover, #f0f3f9)}.help-tab.active[data-v-31115934]{background:var(--pd-accent-soft, rgba(22, 93, 255, .09));color:var(--pd-accent, #165DFF);font-weight:500}.help-modal-content[data-v-31115934]{flex:1;padding:20px;overflow-y:auto}.help-content[data-v-31115934]{font-size:14px;line-height:1.6;color:var(--pd-text, #2a2e37)}.help-content[data-v-31115934] h2{margin:0 0 16px;padding-bottom:8px;border-bottom:1px solid var(--pd-border-soft, #e9ecf2);font-size:18px;font-weight:600}.help-content[data-v-31115934] h3{margin:20px 0 12px;font-size:15px;font-weight:600}.help-content[data-v-31115934] p{margin:0 0 12px}.help-content[data-v-31115934] ul,.help-content[data-v-31115934] ol{margin:0 0 12px;padding-left:24px}.help-content[data-v-31115934] li{margin-bottom:4px}.help-content[data-v-31115934] code{padding:2px 6px;border-radius:3px;background:var(--pd-field-bg, #f4f6fa);font-family:SF Mono,Monaco,monospace;font-size:13px}.help-content[data-v-31115934] pre{margin:0 0 12px;padding:12px;border-radius:4px;background:var(--pd-field-bg, #f4f6fa);overflow-x:auto}.help-content[data-v-31115934] pre code{padding:0;background:transparent}.help-content[data-v-31115934] table{width:100%;margin:0 0 12px;border-collapse:collapse}.help-content[data-v-31115934] th,.help-content[data-v-31115934] td{padding:8px 12px;border:1px solid var(--pd-border, #d9dde6);text-align:left}.help-content[data-v-31115934] th{background:var(--pd-field-bg, #f4f6fa);font-weight:600}.help-content[data-v-31115934] blockquote{margin:0 0 12px;padding:12px 16px;border-left:3px solid var(--pd-accent, #165DFF);background:var(--pd-accent-soft, rgba(22, 93, 255, .09))}.help-modal-enter-active[data-v-31115934],.help-modal-leave-active[data-v-31115934]{transition:opacity .2s ease}.help-modal-enter-active .help-modal[data-v-31115934],.help-modal-leave-active .help-modal[data-v-31115934]{transition:transform .2s ease}.help-modal-enter-from[data-v-31115934],.help-modal-leave-to[data-v-31115934]{opacity:0}.help-modal-enter-from .help-modal[data-v-31115934],.help-modal-leave-to .help-modal[data-v-31115934]{transform:scale(.95)}.page-tabs[data-v-f1c7a18e]{display:flex;align-items:center;gap:8px;padding:4px 12px;background:var(--pd-sidebar, #fff);border-bottom:1px solid var(--pd-border, #d9dde6);flex-shrink:0}.page-tabs-list[data-v-f1c7a18e]{display:flex;gap:4px;overflow-x:auto;align-items:center}.page-tab[data-v-f1c7a18e]{padding:4px 12px;border:1px solid var(--pd-border, #d9dde6);border-radius:4px;background:transparent;cursor:pointer;white-space:nowrap;color:var(--pd-text, #2a2e37);font-size:12px}.page-tab.active[data-v-f1c7a18e]{background:var(--pd-accent, #165DFF);color:#fff}.page-tab-rename[data-v-f1c7a18e]{padding:4px 8px;width:96px;border:1px solid var(--pd-accent, #165DFF);border-radius:4px;font-size:12px;color:var(--pd-text, #2a2e37);outline:none}.page-tabs-actions[data-v-f1c7a18e]{display:flex;gap:4px;margin-left:auto}.page-tabs-actions button[data-v-f1c7a18e]{padding:4px 8px;border:1px solid var(--pd-border, #d9dde6);border-radius:4px;background:transparent;cursor:pointer;color:var(--pd-text-muted, #8b909c);font-size:12px;line-height:1}.page-tabs-actions button[data-v-f1c7a18e]:disabled{opacity:.4;cursor:not-allowed}.page-tabs-tip[data-v-f1c7a18e]{position:fixed;z-index:9999;transform:translate(-50%);padding:4px 8px;border-radius:4px;background:#2a2e37eb;color:#fff;font-size:12px;line-height:1.4;white-space:nowrap;pointer-events:none}.designer-container[data-v-080dee1a]{--pd-bg: #f3f5f9;--pd-surface: #ffffff;--pd-field-bg: #f4f6fa;--pd-sidebar: #ffffff;--pd-sidebar-hover: #f0f3f9;--pd-canvas-bg: #e6e9f0;--pd-paper: #FFFFFF;--pd-accent: #165DFF;--pd-accent-2: #3D7BFF;--pd-accent-soft: rgba(22, 93, 255, .09);--pd-accent-secondary: #f56c6c;--pd-danger-soft: rgba(245, 108, 108, .1);--pd-ink-green: #67c23a;--pd-text: #2a2e37;--pd-text-muted: #8b909c;--pd-text-faint: #b4b9c4;--pd-border: #d9dde6;--pd-border-soft: #e9ecf2;--pd-handle: #165DFF;--pd-ruler: #9aa1af;--pd-ruler-bg: #f8f9fc;--pd-ruler-cursor: #165DFF;--pd-radius: 6px;--pd-shadow-sm: 0 1px 2px rgba(23, 32, 60, .05);--pd-shadow-md: 0 2px 8px rgba(23, 32, 60, .06), 0 10px 28px rgba(23, 32, 60, .07);--pd-shadow-paper: 0 0 0 1px rgba(23, 32, 60, .05), 0 1px 2px rgba(23, 32, 60, .06), 0 8px 20px rgba(23, 32, 60, .08), 0 26px 60px rgba(23, 32, 60, .15);height:100%;display:flex;flex-direction:column;background:var(--pd-bg)}.designer-body[data-v-080dee1a]{flex:1;display:flex;overflow:hidden}.print-html-preview[data-v-ff7de2b5]{width:100%;height:100%;position:relative;background:#e9ebee}.print-html-preview-iframe[data-v-ff7de2b5]{width:100%;height:100%;border:0;background:#fff}.print-html-preview-loading[data-v-ff7de2b5],.print-html-preview-error[data-v-ff7de2b5]{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#909399;font-size:14px}.print-html-preview-error[data-v-ff7de2b5]{color:#f56c6c}
@@ -10,8 +10,6 @@ type __VLS_Props = {
10
10
  showTableGhostBorder?: boolean;
11
11
  selectedElementHasGroup?: boolean;
12
12
  overlayVisible?: boolean;
13
- /** 是否展示「加载默认布局」按钮(宿主注入 loadDefaultTemplate 时由 PrintDesigner 开启) */
14
- showLoadDefault?: boolean;
15
13
  /** 是否展示帮助入口(工具栏帮助按钮);默认开启,传 false 关闭 */
16
14
  showHelp?: boolean;
17
15
  };
@@ -27,7 +25,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
27
25
  redo: () => any;
28
26
  preview: () => any;
29
27
  save: () => any;
30
- "load-default": () => any;
31
28
  "move-layer": (direction: string) => any;
32
29
  "toggle-ruler": () => any;
33
30
  "toggle-grid": () => any;
@@ -47,7 +44,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
47
44
  onRedo?: (() => any) | undefined;
48
45
  onPreview?: (() => any) | undefined;
49
46
  onSave?: (() => any) | undefined;
50
- "onLoad-default"?: (() => any) | undefined;
51
47
  "onMove-layer"?: ((direction: string) => any) | undefined;
52
48
  "onToggle-ruler"?: (() => any) | undefined;
53
49
  "onToggle-grid"?: (() => any) | undefined;
@@ -0,0 +1,26 @@
1
+ import type { TemplateData } from '@worm-vue3-print/core/designer';
2
+ type __VLS_Props = {
3
+ pages: TemplateData[];
4
+ activeIndex: number;
5
+ /** 多页模式(≥2 页)才可删除;单页回落单模板 */
6
+ multi: boolean;
7
+ /** 已开启拼版:拼版模板只允许一个设计页面,禁用增页入口 */
8
+ tilingEnabled?: boolean;
9
+ };
10
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
+ add: () => any;
12
+ delete: (index: number) => any;
13
+ select: (index: number) => any;
14
+ move: (from: number, to: number) => any;
15
+ duplicate: () => any;
16
+ rename: (index: number, name: string) => any;
17
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
18
+ onAdd?: (() => any) | undefined;
19
+ onDelete?: ((index: number) => any) | undefined;
20
+ onSelect?: ((index: number) => any) | undefined;
21
+ onMove?: ((from: number, to: number) => any) | undefined;
22
+ onDuplicate?: (() => any) | undefined;
23
+ onRename?: ((index: number, name: string) => any) | undefined;
24
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
@@ -1,10 +1,14 @@
1
1
  type __VLS_Props = {
2
2
  modelValue?: string;
3
+ /** 是否允许清除颜色,边框等颜色必填场景可关闭 */
4
+ clearable?: boolean;
3
5
  };
4
6
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
5
7
  "update:modelValue": (value: string) => any;
6
8
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
7
9
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
8
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ }>, {
11
+ clearable: boolean;
12
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
13
  declare const _default: typeof __VLS_export;
10
14
  export default _default;
@@ -1,7 +1,8 @@
1
1
  import '../styles/native-controls.css';
2
- import type { RuntimeElement, PrintBusinessField, TemplateData, RequestScreenshotFn, UploadImageFn } from '@worm-vue3-print/core/designer';
2
+ import type { RuntimeElement, PrintBusinessField, TemplateData, RequestScreenshotFn, UploadImageFn, UploadDesignBackgroundFn, MultiPageTemplateData } from '@worm-vue3-print/core/designer';
3
+ import type { PrintFontDeclaration } from '@worm-vue3-print/core';
3
4
  type __VLS_Props = {
4
- initialTemplate?: TemplateData;
5
+ initialTemplate?: TemplateData | MultiPageTemplateData;
5
6
  initialElements?: RuntimeElement[];
6
7
  fields?: PrintBusinessField[];
7
8
  isEdit?: boolean;
@@ -9,13 +10,28 @@ type __VLS_Props = {
9
10
  requestScreenshot?: RequestScreenshotFn;
10
11
  /** 图片上传适配器:未注入时图片上传不可用 */
11
12
  uploadImage?: UploadImageFn;
12
- /** 加载默认布局回调(宿主实现业务逻辑;未注入时工具栏不展示该按钮),返回 null/undefined 视为无默认布局 */
13
- loadDefaultTemplate?: () => TemplateData | Promise<TemplateData | null | undefined> | null | undefined;
13
+ /** 设计背景图上传适配器:未注入时背景上传入口禁用;返回值须为完整图片路径 */
14
+ uploadDesignBackground?: UploadDesignBackgroundFn;
14
15
  /** 是否展示帮助入口(帮助按钮与帮助弹框);默认开启,传 false 关闭 */
15
16
  showHelp?: boolean;
17
+ /**
18
+ * 模板级字体声明(宿主配置):设计器据此注入 @font-face、在字体下拉中列出,
19
+ * 并在保存/预览/截图时同步写入模板 JSON,供服务端与客户端出图使用同一份字体。
20
+ */
21
+ fonts?: readonly PrintFontDeclaration[];
16
22
  };
23
+ /**
24
+ * 保存/预览/截图统一取这一份:把 prop 配置的字体同步写进模板 JSON,
25
+ * 渲染端(服务端 / 客户端 / 浏览器)只认模板里的声明。宿主未配置时保留模板自带声明。
26
+ */
27
+ declare function templateJsonWithFonts(): TemplateData | MultiPageTemplateData;
17
28
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
18
- getTemplateJson: () => TemplateData;
29
+ getTemplateJson: typeof templateJsonWithFonts;
30
+ /**
31
+ * 模板校验入口:`getTemplateJson()` 是绕过 handleSave 的旁路,
32
+ * 宿主在导出/另存链路需自行调用本方法拦截非法配置。
33
+ */
34
+ validateTemplate: () => import("@worm-vue3-print/core").TilingIssue[];
19
35
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
36
  preview: () => any;
21
37
  save: (json: string) => any;
@@ -5,6 +5,12 @@ type __VLS_Props = {
5
5
  printData?: Record<string, any> | Record<string, any>[];
6
6
  /** 图片相对路径拼接前缀(与服务端 baseUrl 同源) */
7
7
  baseUrl?: string;
8
+ /**
9
+ * 相对路径字体基址。缺省不拼接:预览 iframe 与设计器同源,
10
+ * 相对字体 URL 由页面 origin 解析,与画布注入 @font-face 的行为一致。
11
+ * 字体与页面不同源时(如字体放 CDN)传绝对基址。
12
+ */
13
+ fontBaseUrl?: string;
8
14
  };
9
15
  declare function rerender(): Promise<void>;
10
16
  /** 触发浏览器原生打印(iframe 内 @page 规则控制纸张尺寸与分页) */
@@ -14,10 +20,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
14
20
  rerender: typeof rerender;
15
21
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
16
22
  error: (message: string) => any;
17
- rendered: (pageCount: number) => any;
23
+ rendered: (pageCount: number, copies: number) => any;
18
24
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
19
25
  onError?: ((message: string) => any) | undefined;
20
- onRendered?: ((pageCount: number) => any) | undefined;
26
+ onRendered?: ((pageCount: number, copies: number) => any) | undefined;
21
27
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
28
  declare const _default: typeof __VLS_export;
23
29
  export default _default;
@@ -7,6 +7,8 @@ type __VLS_Props = {
7
7
  tableSelection?: TableSelection | null;
8
8
  recordHistory?: () => void;
9
9
  collapsed: boolean;
10
+ /** 多页模式:隐藏拼版配置并禁用连续纸纸型 */
11
+ multiPage?: boolean;
10
12
  };
11
13
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
14
  "toggle-collapse": () => any;
@@ -3,10 +3,24 @@ type __VLS_Props = {
3
3
  value: string;
4
4
  barcodeType?: string;
5
5
  qrCodeLevel?: string;
6
+ /**
7
+ * 条形码下方是否显示文本,缺省视为「显示」(与出图端 `showBarcodeText` 同口径)。
8
+ * 注意:Vue 会把缺省的布尔 prop 转成 false,调用方必须显式传 `cell.showBarcodeText !== false`。
9
+ */
6
10
  showText?: boolean;
7
11
  fit?: string;
8
12
  maxWidth?: number;
9
13
  maxHeight?: number;
14
+ /** 打印机分辨率(点/英寸):给出后条形码尺寸吸附到整数打印点 */
15
+ printerDpi?: number;
16
+ /** 单元格可用宽度(mm),点对齐用 */
17
+ targetWidthMm?: number;
18
+ /** 单元格可用高度(mm),点对齐用 */
19
+ targetHeightMm?: number;
20
+ /** 条码模块宽度倍率(2-4),缺省 2(与独立条码元素同口径) */
21
+ barWidth?: number;
22
+ /** 条码下方文本字号(相对条高,条高为 30),缺省 BARCODE_TEXT_FONT_SIZE_MODULES */
23
+ barFontSize?: number;
10
24
  };
11
25
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
26
  declare const _default: typeof __VLS_export;
@@ -0,0 +1,11 @@
1
+ import type { DesignBackground } from '@worm-vue3-print/core/designer';
2
+ type __VLS_Props = {
3
+ modelValue?: DesignBackground;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
6
+ "update:modelValue": (value: DesignBackground | undefined) => any;
7
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
8
+ "onUpdate:modelValue"?: ((value: DesignBackground | undefined) => any) | undefined;
9
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
@@ -0,0 +1,15 @@
1
+ type __VLS_Props = {
2
+ /** 当前族名;undefined 表示未设置,走全局兜底字体栈 */
3
+ modelValue?: string;
4
+ /** 空值行文案(同时用作输入框 placeholder) */
5
+ placeholder?: string;
6
+ };
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
+ "update:model-value": (value: string | undefined) => any;
9
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
10
+ "onUpdate:model-value"?: ((value: string | undefined) => any) | undefined;
11
+ }>, {
12
+ placeholder: string;
13
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ declare const _default: typeof __VLS_export;
15
+ export default _default;
@@ -0,0 +1,14 @@
1
+ import type { TemplateData } from '@worm-vue3-print/core/designer';
2
+ import type { TilingOptions } from '@worm-vue3-print/core';
3
+ type __VLS_Props = {
4
+ modelValue?: TilingOptions;
5
+ /** 完整模板:校验与摘要都需要标签纸尺寸/朝向,必须传 */
6
+ templateData?: TemplateData;
7
+ };
8
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
+ "update:modelValue": (value: TilingOptions) => any;
10
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
11
+ "onUpdate:modelValue"?: ((value: TilingOptions) => any) | undefined;
12
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
+ declare const _default: typeof __VLS_export;
14
+ export default _default;
@@ -19,6 +19,9 @@ export declare function useClipboard(): {
19
19
  verticalAlign?: import("@worm-vue3-print/core/designer").VerticalAlign | undefined;
20
20
  lineHeight?: number | undefined;
21
21
  letterSpacing?: number | undefined;
22
+ textFit?: import("@worm-vue3-print/core").TextFit | undefined;
23
+ shrinkMinFontSize?: number | undefined;
24
+ wordWrap?: boolean | undefined;
22
25
  fixed?: boolean | undefined;
23
26
  locked?: boolean | undefined;
24
27
  visible?: boolean | undefined;
@@ -34,9 +37,12 @@ export declare function useClipboard(): {
34
37
  barcodeType?: string | undefined;
35
38
  barWidth?: number | undefined;
36
39
  barAutoWidth?: string | undefined;
40
+ printerDpi?: number | undefined;
37
41
  qrCodeLevel?: string | undefined;
38
42
  src?: string | undefined;
39
43
  fit?: string | undefined;
44
+ maxWidth?: number | undefined;
45
+ maxHeight?: number | undefined;
40
46
  hideTitle?: boolean | undefined;
41
47
  draggable?: boolean | undefined;
42
48
  axis?: string | undefined;
@@ -63,6 +69,9 @@ export declare function useClipboard(): {
63
69
  barcodeType?: string | undefined;
64
70
  qrCodeLevel?: string | undefined;
65
71
  showBarcodeText?: boolean | undefined;
72
+ printerDpi?: number | undefined;
73
+ barWidth?: number | undefined;
74
+ barFontSize?: number | undefined;
66
75
  rowspan?: number | undefined;
67
76
  colspan?: number | undefined;
68
77
  merged?: boolean | undefined;
@@ -97,6 +106,8 @@ export declare function useClipboard(): {
97
106
  } | undefined;
98
107
  padding?: number | undefined;
99
108
  wordWrap?: boolean | undefined;
109
+ textFit?: import("@worm-vue3-print/core").TextFit | undefined;
110
+ shrinkMinFontSize?: number | undefined;
100
111
  fit?: "contain" | "cover" | "fill" | "none" | "scale-down" | undefined;
101
112
  maxWidth?: number | undefined;
102
113
  maxHeight?: number | undefined;
@@ -144,6 +155,9 @@ export declare function useClipboard(): {
144
155
  verticalAlign?: import("@worm-vue3-print/core/designer").VerticalAlign | undefined;
145
156
  lineHeight?: number | undefined;
146
157
  letterSpacing?: number | undefined;
158
+ textFit?: import("@worm-vue3-print/core").TextFit | undefined;
159
+ shrinkMinFontSize?: number | undefined;
160
+ wordWrap?: boolean | undefined;
147
161
  fixed?: boolean | undefined;
148
162
  locked?: boolean | undefined;
149
163
  visible?: boolean | undefined;
@@ -159,9 +173,12 @@ export declare function useClipboard(): {
159
173
  barcodeType?: string | undefined;
160
174
  barWidth?: number | undefined;
161
175
  barAutoWidth?: string | undefined;
176
+ printerDpi?: number | undefined;
162
177
  qrCodeLevel?: string | undefined;
163
178
  src?: string | undefined;
164
179
  fit?: string | undefined;
180
+ maxWidth?: number | undefined;
181
+ maxHeight?: number | undefined;
165
182
  hideTitle?: boolean | undefined;
166
183
  draggable?: boolean | undefined;
167
184
  axis?: string | undefined;
@@ -188,6 +205,9 @@ export declare function useClipboard(): {
188
205
  barcodeType?: string | undefined;
189
206
  qrCodeLevel?: string | undefined;
190
207
  showBarcodeText?: boolean | undefined;
208
+ printerDpi?: number | undefined;
209
+ barWidth?: number | undefined;
210
+ barFontSize?: number | undefined;
191
211
  rowspan?: number | undefined;
192
212
  colspan?: number | undefined;
193
213
  merged?: boolean | undefined;
@@ -222,6 +242,8 @@ export declare function useClipboard(): {
222
242
  } | undefined;
223
243
  padding?: number | undefined;
224
244
  wordWrap?: boolean | undefined;
245
+ textFit?: import("@worm-vue3-print/core").TextFit | undefined;
246
+ shrinkMinFontSize?: number | undefined;
225
247
  fit?: "contain" | "cover" | "fill" | "none" | "scale-down" | undefined;
226
248
  maxWidth?: number | undefined;
227
249
  maxHeight?: number | undefined;