:root{--bg: #eef1f5;--panel: #ffffff;--border: #e6eaf0;--border-strong: #d9e0ea;--text: #172033;--text-soft: #374151;--muted: #7a8699;--accent: #2563eb;--accent-strong: #1d4ed8;--accent-soft: #eef4ff;--danger: #dc2626;--shadow-sm: 0 1px 2px rgba(15, 23, 42, .05);--shadow-md: 0 10px 30px -12px rgba(15, 23, 42, .25);--radius: 8px;font-family:Inter,PingFang SC,Microsoft YaHei,system-ui,-apple-system,Segoe UI,sans-serif;color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{overflow:hidden;background:var(--bg)}button,input,select,textarea{font-family:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:default}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#c8d1dd;border:3px solid transparent;background-clip:content-box;border-radius:10px}::-webkit-scrollbar-thumb:hover{background-color:#a8b3c2}.app-shell{display:flex;flex-direction:column;height:100vh;min-width:960px}.app-body{display:flex;flex:1;min-height:0}.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.topbar{display:flex;flex-direction:column;align-items:stretch;background:var(--panel);border-bottom:1px solid var(--border);flex-shrink:0;position:relative;z-index:10}.topbar-main{display:flex;align-items:center;gap:12px;height:56px;padding:0 16px}.brand{display:flex;align-items:center;gap:9px;-webkit-user-select:none;user-select:none;color:inherit;text-decoration:none;border-radius:8px}.brand:hover .brand-name{color:var(--accent)}.brand:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.brand-mark{width:28px;height:28px;border-radius:8px;background:linear-gradient(135deg,#3b82f6 0%,#4f46e5 100%);color:#fff;font-size:15px;font-weight:700;display:grid;place-items:center;box-shadow:0 4px 10px -4px #2563eba6}.brand-name{font-size:14px;font-weight:650;letter-spacing:.01em;display:flex;align-items:baseline;gap:5px}.brand-sub{font-size:11px;font-weight:500;color:var(--muted)}.topbar-divider{width:1px;height:20px;background:var(--border)}.template-name{width:220px;height:32px;padding:0 10px;border:1px solid transparent;border-radius:7px;background:transparent;font-size:13px;font-weight:550;outline:none;transition:background .15s,border-color .15s}.template-name:hover{background:#f4f6f9}.template-name:focus{background:#fff;border-color:var(--accent);box-shadow:0 0 0 3px #2563eb1f}.template-picker{position:relative;display:flex;align-items:center;gap:1px;flex-shrink:0}.template-picker .template-name{width:190px}.template-toggle,.template-new{width:26px;height:32px;color:var(--muted)}.template-toggle.active{background:var(--accent-soft);color:var(--accent)}.template-menu{position:absolute;top:calc(100% + 8px);left:0;width:300px;max-width:calc(100vw - 32px);padding:8px;border:1px solid var(--border);border-radius:10px;background:#fff;box-shadow:0 18px 42px -18px #0f172a73,0 0 0 1px #0f172a05;z-index:60}.template-menu-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:2px 4px 8px;border-bottom:1px solid #eff2f6}.template-menu-title{font-size:10.5px;font-weight:650;letter-spacing:.06em;color:var(--muted)}.btn.template-create{height:27px;padding:0 9px;font-size:11.5px;gap:4px}.template-list{max-height:312px;overflow-y:auto;padding-top:6px;display:flex;flex-direction:column;gap:2px}.template-item{display:flex;align-items:center;gap:10px;width:100%;padding:7px 8px;border:0;border-radius:7px;background:transparent;color:var(--text);text-align:left}.template-item:hover{background:#f5f7fa}.template-item.active{background:var(--accent-soft)}.template-thumb{width:30px;height:36px;flex-shrink:0;display:grid;place-items:center;border:1px solid #dbe2ec;border-radius:4px;background:#fff;box-shadow:inset 0 0 0 3px #f8fafc}.template-thumb i{display:block;border-radius:1px;background:#cbd5e1}.template-item.active .template-thumb{border-color:#2563eb66}.template-item.active .template-thumb i{background:var(--accent);opacity:.85}.template-item-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.template-item-name{font-size:12.5px;font-weight:550;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.template-item-meta{font-size:10.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.template-item-check{flex-shrink:0;color:var(--accent)}.template-empty{margin:4px;font-size:11.5px;color:var(--muted)}.topbar-actions{display:flex;align-items:center;gap:2px}.topbar-spacer{flex:1;min-width:0}.topbar-props{display:flex;align-items:center;gap:6px;height:40px;padding:0 16px;background:#f8fafc;border-top:1px solid var(--border);overflow-x:auto;overflow-y:hidden;scrollbar-width:none}.topbar-props::-webkit-scrollbar{display:none}.topbar-props .segmented,.topbar-props .icon-btn,.topbar-props .kind-chip{flex-shrink:0}.tbp-title{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:650;color:var(--text-soft);white-space:nowrap}.tbp-select,.tbp-num{display:inline-flex;align-items:center;gap:4px;flex-shrink:0;font-size:11px;color:var(--muted);white-space:nowrap}.tbp-select select{height:26px;max-width:112px;padding:0 4px;border:1px solid var(--border);border-radius:5px;background:#fff;color:var(--text);font-size:11.5px;outline:none}.tbp-num input{width:48px;height:26px;padding:0 2px 0 6px;border:1px solid var(--border);border-radius:5px;background:#fff;color:var(--text);font-size:11.5px;font-variant-numeric:tabular-nums;outline:none}.tbp-select select:focus,.tbp-num input:focus{border-color:var(--accent);box-shadow:0 0 0 2px #2563eb1a}.tbp-num input:disabled{background:#f1f4f8;color:#a3adbb}.tbp-num em{font-style:normal;font-size:10px;color:#a3adbb}.tbp-sep{width:1px;height:18px;flex-shrink:0;margin:0 2px;background:var(--border-strong)}.topbar-props .btn.tbp-apply{height:26px;padding:0 10px;gap:4px;border-color:var(--border-strong);background:#fff;font-size:11.5px}.topbar-props .btn.tbp-apply:hover:not(:disabled){border-color:var(--accent);background:var(--accent-soft);color:var(--accent-strong)}.tbp-hint{font-size:11px;color:var(--muted);white-space:nowrap}.tbp-hint-end{color:#a3adbb}.tbp-danger:hover:not(:disabled){background:#fef2f2;color:var(--danger)}.autosave{font-size:11.5px;color:var(--muted);display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.autosave:before{content:"";width:6px;height:6px;border-radius:50%;background:#22c55e}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;border:1px solid transparent;border-radius:7px;font-size:12.5px;font-weight:550;background:transparent;color:var(--text-soft);white-space:nowrap;transition:background .15s,color .15s,border-color .15s}.btn.ghost:hover:not(:disabled){background:#f2f5f9;color:var(--text)}.btn.primary{background:var(--accent);color:#fff;box-shadow:0 4px 10px -5px #2563ebb3}.btn.primary:hover:not(:disabled){background:var(--accent-strong)}.btn.danger-ghost{color:var(--danger)}.btn.danger-ghost:hover:not(:disabled){background:#fef2f2}.btn:disabled{opacity:.45}.btn.wide{width:100%;border-color:var(--border-strong)}.icon-btn{display:inline-grid;place-items:center;width:30px;height:30px;border:0;border-radius:6px;background:transparent;color:var(--text-soft);transition:background .15s,color .15s}.icon-btn:hover:not(:disabled){background:#f2f5f9;color:var(--text)}.icon-btn:disabled{opacity:.35}.tool-rail{width:72px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--border);padding:12px 8px;display:flex;flex-direction:column;align-items:center;gap:4px;z-index:5}.tool-rail:before{content:"添加";font-size:10px;letter-spacing:.08em;color:#a3adbb;margin-bottom:6px}.tool{width:56px;height:54px;border:0;border-radius:10px;background:transparent;color:var(--text-soft);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;font-size:10.5px;transition:background .15s,color .15s}.tool:hover{background:var(--accent-soft);color:var(--accent)}.tool svg{stroke-width:1.8}.stage{--ruler-size: 20px;position:relative;flex:1;min-width:0;min-height:0;display:grid;grid-template-columns:var(--ruler-size) minmax(0,1fr);grid-template-rows:var(--ruler-size) minmax(0,1fr);overflow:hidden;background-color:var(--bg)}.ruler-corner{grid-column:1;grid-row:1;display:grid;place-items:center;border-right:1px solid #dfe5ee;border-bottom:1px solid #dfe5ee;background:#f8fafc;color:#9aa5b5;font-size:8px;letter-spacing:.02em;-webkit-user-select:none;user-select:none}.ruler{display:block;width:100%;height:100%;min-width:0;min-height:0}.ruler-top{grid-column:2;grid-row:1}.ruler-left{grid-column:1;grid-row:2}.stage.no-rulers{--ruler-size: 0px}.stage.no-rulers .ruler,.stage.no-rulers .ruler-corner{display:none}.stage-scroll{grid-column:2;grid-row:2;min-width:0;min-height:0;overflow:auto;background-color:#eef1f5;background-image:radial-gradient(rgba(15,23,42,.09) 1px,transparent 1.2px);background-size:18px 18px}.stage-inner{width:max-content;min-width:100%;padding:48px 56px;box-sizing:border-box}.stage-page{margin:0 auto;position:relative;background-color:#fff;background-repeat:repeat;box-shadow:0 0 0 1px #0f172a12,0 24px 48px -24px #0f172a66;-webkit-user-select:none;user-select:none}.stage-page .canvas-container{position:absolute!important;left:0;top:0}.stage-page canvas{display:block}.page-margin-guide{position:absolute;z-index:3;border:1px dashed rgba(37,99,235,.55);pointer-events:none}.page-guide{position:absolute;z-index:20;background:transparent;touch-action:none}.page-guide.horizontal{cursor:ns-resize}.page-guide.vertical{cursor:ew-resize}.page-guide:before{content:"";position:absolute;background:#0ea5e9;box-shadow:0 0 0 .5px #ffffffb3}.page-guide.horizontal:before{left:0;right:0;top:3px;height:1px}.page-guide.vertical:before{top:0;bottom:0;left:3px;width:1px}.page-guide.dragging:before,.page-guide.draft:before{background:#2563eb}.page-guide.outside:before{background:#ef4444}.page-guide.draft{pointer-events:none}.page-guide-label{position:absolute;padding:2px 5px;border-radius:4px;background:#0ea5e9;color:#fff;font-size:10px;line-height:1.3;font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .12s;box-shadow:0 2px 6px -2px #0ea5e9b3}.page-guide.horizontal .page-guide-label{left:6px;top:-20px}.page-guide.vertical .page-guide-label{left:9px;top:6px}.page-guide:hover .page-guide-label,.page-guide.dragging .page-guide-label,.page-guide.draft .page-guide-label{opacity:1}.page-guide.outside .page-guide-label{background:#ef4444;box-shadow:0 2px 6px -2px #ef4444b3}.ruler-top{cursor:ns-resize}.ruler-left{cursor:ew-resize}.ruler,.page-guide{touch-action:none}body.guide-drag-h,body.guide-drag-h *{cursor:ns-resize!important}body.guide-drag-v,body.guide-drag-v *{cursor:ew-resize!important}.empty-hint{position:absolute;inset:var(--ruler-size) 0 0 var(--ruler-size);display:grid;place-items:center;pointer-events:none;z-index:2}.empty-card{display:flex;flex-direction:column;gap:5px;align-items:center;text-align:center;padding:18px 24px;border-radius:12px;border:1px solid rgba(15,23,42,.06);background:rgba(255,255,255,.86);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:var(--shadow-md)}.empty-card strong{font-size:13px;font-weight:600}.empty-card span{font-size:11.5px;color:var(--muted)}.zoom-bar{position:absolute;right:18px;bottom:18px;display:flex;align-items:center;gap:2px;padding:4px;border-radius:9px;background:rgba(255,255,255,.95);border:1px solid var(--border);box-shadow:0 10px 24px -14px #0f172a59;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:4}.zoom-btn{width:28px;height:28px;border:0;border-radius:6px;background:transparent;display:grid;place-items:center;color:var(--text-soft)}.zoom-btn:hover{background:#f1f4f8;color:var(--text)}.zoom-btn.active{background:var(--accent-soft);color:var(--accent)}.zoom-btn.active:hover{background:#e3edff;color:var(--accent-strong)}.zoom-value{min-width:52px;height:28px;border:0;background:transparent;border-radius:6px;font-size:11.5px;font-variant-numeric:tabular-nums;color:var(--text-soft)}.zoom-value:hover{background:#f1f4f8}.zoom-sep{width:1px;height:16px;background:var(--border);margin:0 4px}.inspector{width:304px;flex-shrink:0;background:var(--panel);border-left:1px solid var(--border);display:flex;flex-direction:column;min-height:0;z-index:5}.tabs{display:flex;gap:4px;margin:12px;padding:3px;background:#f1f4f8;border-radius:8px;flex-shrink:0}.tabs button{flex:1;height:30px;border:0;border-radius:6px;background:transparent;color:var(--muted);font-size:12.5px;font-weight:550;display:inline-flex;align-items:center;justify-content:center;gap:6px;transition:background .15s,color .15s,box-shadow .15s}.tabs button:hover{color:var(--text-soft)}.tabs button.active{background:#fff;color:var(--accent);box-shadow:var(--shadow-sm)}.inspector-body{flex:1;overflow-y:auto;padding:0 16px 28px}.panel-section{padding:14px 0;border-bottom:1px solid #eff2f6}.panel-section:last-child{border-bottom:0}.inspector-section{padding:0}.section-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 0 9px}.section-toggle{display:inline-flex;align-items:center;gap:5px;padding:0;border:0;background:transparent;font-size:10.5px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;color:#94a0b1;transition:color .15s}.section-toggle:hover{color:var(--text-soft)}.section-chevron{transition:transform .18s;flex-shrink:0}.inspector-section.collapsed .section-chevron{transform:rotate(-90deg)}.section-body{padding-bottom:14px}.selection-section{padding-top:10px}.multi-count{flex:1;font-size:11.5px;color:var(--muted)}.icon-btn.tiny{width:26px;height:26px;flex-shrink:0}.icon-btn.active{background:var(--accent-soft);color:var(--accent)}.orientation-row{display:flex;align-items:center;justify-content:space-between;margin-top:10px;font-size:11px;color:var(--muted)}.segmented.wide-seg button,.segmented.text-seg button{width:auto;padding:0 12px;font-size:11.5px}.segmented.text-seg button{padding:0 9px;font-size:11px}.align-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.align-grid button{height:32px;border:1px solid var(--border);border-radius:6px;background:#fbfcfe;color:var(--text-soft);display:grid;place-items:center;transition:background .15s,border-color .15s,color .15s}.align-grid button:hover:not(:disabled){background:var(--accent-soft);border-color:#c7d7fb;color:var(--accent)}.align-grid button:disabled{opacity:.35}.inline-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;font-size:11px;color:var(--muted)}.slider-field{display:flex;flex-direction:column;gap:5px;margin-top:12px}.slider-head{display:flex;align-items:center;justify-content:space-between}.slider-label{font-size:10.5px;color:var(--muted)}.slider-value{display:inline-flex;align-items:baseline;gap:1px}.slider-number{width:42px;height:22px;padding:0 2px;border:1px solid transparent;border-radius:4px;background:transparent;font-size:11.5px;font-variant-numeric:tabular-nums;text-align:right;color:var(--text-soft);outline:none}.slider-number:hover{border-color:var(--border)}.slider-number:focus{border-color:var(--accent);background:#fff}.slider-unit{width:13px;font-size:10px;color:#a3adbb}.slider-range{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:14px;margin:0;background:transparent;outline:none}.slider-range::-webkit-slider-runnable-track{height:4px;border-radius:999px;background:#e3e8ef}.slider-range::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:14px;height:14px;margin-top:-5px;border:2px solid var(--accent);border-radius:50%;background:#fff;box-shadow:0 1px 3px #0f172a38;cursor:pointer}.slider-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 3px #2563eb26}.slider-field.is-disabled{opacity:.5}.text-bg-field{margin-top:12px;margin-bottom:0}.hint-line{margin:0 0 6px;font-size:11.5px;line-height:1.7;color:var(--muted)}.hint-line:last-child{margin-bottom:0}.selection-head{display:flex;align-items:center;gap:8px}.kind-chip{flex-shrink:0;font-size:10.5px;font-weight:600;color:var(--accent);background:var(--accent-soft);border-radius:999px;padding:3px 9px}.name-input{flex:1;min-width:0;height:28px;padding:0 8px;border:1px solid transparent;border-radius:6px;background:transparent;font-size:12px;font-weight:550;outline:none}.name-input:hover{background:#f5f7fa}.name-input:focus{border-color:var(--accent);background:#fff;box-shadow:0 0 0 3px #2563eb1a}.multi-note{margin-top:8px;font-size:11.5px;line-height:1.6;color:var(--muted)}.field-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.num-field{display:flex;flex-direction:column;gap:4px;min-width:0}.num-label{font-size:10.5px;color:var(--muted)}.num-control{position:relative}.num-control input{width:100%;height:30px;border:1px solid #e3e8ef;border-radius:6px;background:#fbfcfe;padding:0 28px 0 8px;font-size:12px;font-variant-numeric:tabular-nums;outline:none;transition:border-color .15s,background .15s,box-shadow .15s}.num-control input:hover:not(:disabled){border-color:var(--border-strong)}.num-control input:focus{background:#fff;border-color:var(--accent);box-shadow:0 0 0 3px #2563eb1a}.num-control input:disabled{background:#f4f6f9;color:#a3adbb}.num-unit{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:10px;color:#a3adbb;pointer-events:none}.font-size-field .num-control select{width:100%;height:30px;padding:0 8px;border:1px solid #e3e8ef;border-radius:6px;background:#fbfcfe;font-size:12px;font-variant-numeric:tabular-nums;outline:none;transition:border-color .15s,background .15s,box-shadow .15s}.font-size-field .num-control select:hover:not(:disabled){border-color:var(--border-strong)}.font-size-field .num-control select:focus{background:#fff;border-color:var(--accent);box-shadow:0 0 0 3px #2563eb1a}.font-size-field .num-control select:disabled{background:#f4f6f9;color:#a3adbb}.select-field{display:flex;flex-direction:column;gap:4px;margin-bottom:10px;min-width:0}.select-field>span{font-size:10.5px;color:var(--muted)}.select-field select,.select-field input{width:100%;height:30px;border:1px solid #e3e8ef;border-radius:6px;background:#fbfcfe;padding:0 8px;font-size:12px;outline:none}.select-field select:focus,.select-field input:focus{border-color:var(--accent);background:#fff;box-shadow:0 0 0 3px #2563eb1a}.select-field input:disabled{background:#f4f6f9;color:#a3adbb}.select-field.compact{margin-bottom:8px}.switch-row{display:flex;align-items:center;justify-content:space-between;padding:7px 0;font-size:12px;color:var(--text-soft);cursor:pointer}.guide-actions{display:flex;align-items:center;justify-content:space-between;padding:0 0 4px;font-size:10.5px;color:var(--muted)}.switch{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:34px;height:20px;margin:0;border-radius:999px;background:#d5dce6;position:relative;cursor:pointer;transition:background .18s;flex-shrink:0}.switch:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0f172a40;transition:transform .18s}.switch:checked{background:var(--accent)}.switch:checked:after{transform:translate(14px)}.color-field{margin-bottom:10px}.color-label{display:block;font-size:10.5px;color:var(--muted);margin-bottom:4px}.color-control{display:flex;align-items:center;gap:8px;height:30px;padding:0 8px;border:1px solid #e3e8ef;border-radius:6px;background:#fbfcfe}.swatch{position:relative;width:18px;height:18px;border-radius:5px;border:1px solid rgba(15,23,42,.12);overflow:hidden;flex-shrink:0;cursor:pointer}.swatch input[type=color]{position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;opacity:0;width:40px;height:40px;cursor:pointer}.hex-input{flex:1;min-width:0;border:0;background:transparent;font-size:11.5px;color:#4b5563;font-variant-numeric:tabular-nums;text-transform:uppercase;outline:none}.hex-input::placeholder{color:#a3adbb;text-transform:none}.color-palette{display:flex;justify-content:space-between;gap:4px;margin-top:8px}.palette-dot{width:18px;height:18px;padding:0;flex-shrink:0;border:1px solid rgba(15,23,42,.14);border-radius:50%;cursor:pointer;transition:transform .12s,box-shadow .12s}.palette-dot:hover{transform:scale(1.14)}.palette-dot.active{box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--accent)}.clear-btn{border:0;background:transparent;color:var(--muted);font-size:11px;padding:2px 4px}.clear-btn:hover{color:var(--danger)}.text-content{width:100%;min-height:64px;padding:8px;margin-bottom:10px;border:1px solid #e3e8ef;border-radius:6px;background:#fbfcfe;font-size:12px;line-height:1.55;resize:vertical;outline:none}.text-content:focus{background:#fff;border-color:var(--accent);box-shadow:0 0 0 3px #2563eb1a}.text-tools{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px}.segmented{display:inline-flex;gap:2px;padding:3px;background:#f1f4f8;border-radius:7px}.segmented button{width:28px;height:26px;border:0;border-radius:5px;background:transparent;color:var(--text-soft);display:grid;place-items:center}.segmented button:hover{background:#e6ebf2}.segmented button.active{background:#fff;color:var(--accent);box-shadow:var(--shadow-sm)}.field-note{margin:8px 0 0;font-size:10.5px;color:#a3adbb}.action-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.action-grid .btn{border-color:var(--border)}.order-row{display:flex;align-items:center;justify-content:space-between;margin-top:12px;font-size:11px;color:var(--muted)}.layers-panel{padding-top:4px}.layers-panel ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.layer-row{display:flex;align-items:center;gap:7px;height:36px;padding:0 7px;border-radius:7px;font-size:12px;color:var(--text-soft);cursor:pointer;transition:background .12s,color .12s}.layer-row:hover{background:#f5f8fb}.layer-row.active{background:var(--accent-soft);color:var(--accent)}.layer-row.hidden .layer-name,.layer-row.hidden .layer-kind{opacity:.45}.layer-row .eye{width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:#94a0b1;display:grid;place-items:center;flex-shrink:0}.layer-row .eye:hover{background:#e9eef5;color:var(--text-soft)}.layer-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layer-kind{font-size:10px;color:#a3adbb;flex-shrink:0}.layer-lock{flex-shrink:0;color:#94a0b1}.layers-empty{padding:44px 0;text-align:center;font-size:12px;color:var(--muted)}.toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%);padding:9px 16px;border-radius:8px;background:#111827;color:#f9fafb;font-size:12px;box-shadow:0 12px 30px -10px #0f172a8c;z-index:120;max-width:80vw}.toast-enter-active,.toast-leave-active{transition:opacity .2s,transform .2s}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(-50%,8px)}.preview-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:grid;place-items:center;padding:32px;background:rgba(15,23,42,.5);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.preview-dialog{width:min(880px,100%);height:min(90vh,1080px);display:flex;flex-direction:column;background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 30px 80px -30px #0f172ab3}.preview-head{height:60px;padding:0 16px 0 20px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);flex-shrink:0}.preview-head strong{display:block;font-size:13.5px;font-weight:600}.preview-head span{display:block;margin-top:2px;font-size:11px;color:var(--muted)}.preview-actions{display:flex;align-items:center;gap:6px}.preview-stage{flex:1;min-height:0;overflow:auto;background:#f3f5f9;display:flex;justify-content:center;align-items:flex-start;padding:28px}.preview-stage>svg{background:#fff;box-shadow:0 0 0 1px #0f172a14,0 20px 40px -24px #0f172a73;max-width:100%;height:auto}.preview-stage-pdf{padding:0;overflow:hidden;align-items:stretch}.preview-pdf{width:100%;height:100%;border:0;background:#fff}.preview-loading{margin:auto;color:#64748b;font-size:12px}.tab-badge{display:inline-grid;place-items:center;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:#e2e8f0;color:#5b6779;font-size:9.5px;font-weight:650;line-height:1}.tabs button.active .tab-badge{background:var(--accent-soft);color:var(--accent)}.data-hint{margin:0 0 9px;font-size:11.5px;line-height:1.65;color:var(--muted)}.data-hint code{padding:1px 4px;border-radius:4px;background:#f1f5f9;color:var(--text-soft);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10.5px}.data-field-list{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}.data-field-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.25fr) 26px;align-items:center;gap:5px}.data-field-row input{width:100%;min-width:0;height:28px;padding:0 7px;border:1px solid #e3e8ef;border-radius:5px;background:#fbfcfe;font-size:11.5px;outline:none;transition:border-color .15s,background .15s,box-shadow .15s}.data-field-row input:hover{border-color:var(--border-strong)}.data-field-row input:focus{background:#fff;border-color:var(--accent);box-shadow:0 0 0 3px #2563eb17}.data-field-row .icon-btn{width:26px;height:26px;border-radius:5px;color:#94a0b1}.data-field-row .icon-btn:hover{background:#fef2f2;color:var(--danger)}.data-empty{margin:0 0 10px;padding:12px 10px;border:1px dashed var(--border-strong);border-radius:6px;font-size:11.5px;color:var(--muted);text-align:center}.data-add{height:30px;font-size:12px}.json-input{min-height:96px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px;line-height:1.55}.source-support-hint{margin:8px 0 0}.source-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:110;display:grid;place-items:center;padding:28px;background:rgba(15,23,42,.5);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.source-modal{width:min(720px,100%);max-height:min(88vh,820px);display:flex;flex-direction:column;background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 30px 80px -30px #0f172ab3}.source-modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 14px 20px;border-bottom:1px solid var(--border);flex-shrink:0}.source-modal-title{display:flex;align-items:center;gap:10px}.source-modal-icon{display:grid;place-items:center;width:34px;height:34px;border-radius:8px;background:var(--accent-soft);color:var(--accent)}.source-modal-title strong{display:block;font-size:14px;font-weight:650}.source-modal-title div>span{display:block;margin-top:2px;font-size:11px;color:var(--muted)}.source-steps{display:flex;align-items:center;gap:26px;padding:12px 20px;border-bottom:1px solid #f1f5f9;background:#fbfcfe;flex-shrink:0}.source-steps>span{position:relative;display:flex;align-items:center;gap:6px;font-size:11px;color:#94a0b1}.source-steps>span+span:before{content:"";position:absolute;left:-17px;width:8px;height:1px;background:#d7dee8}.source-steps em{display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:#e8edf4;color:#7c8899;font-style:normal;font-size:10px;font-weight:700}.source-steps>span.active{color:var(--accent)}.source-steps>span.active em{background:var(--accent);color:#fff}.source-steps>span.done em{background:#dcfce7;color:#15803d}.source-modal-body{flex:1;min-height:0;overflow:auto;padding:20px}.source-lead{margin:0 0 14px;font-size:12px;line-height:1.6;color:var(--muted)}.source-type-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.source-type-card{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:14px;border:1px solid #e3e8ef;border-radius:9px;background:#fff;text-align:left;cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s}.source-type-card:hover:not(:disabled){border-color:#c7d2e0;background:#fbfcff}.source-type-card.active{border-color:var(--accent);background:#f8faff;box-shadow:0 0 0 3px #2563eb17}.source-type-card.disabled{opacity:.72;background:#fafbfc;cursor:not-allowed}.source-type-icon{display:grid;place-items:center;width:40px;height:40px;padding:6px;box-sizing:border-box;border:1px solid rgba(15,23,42,.07);border-radius:10px;background:#fff;box-shadow:0 1px 2px #0f172a0a}.source-type-icon img{display:block;width:100%;height:100%;object-fit:contain}.source-type-copy strong{display:block;font-size:12.5px;font-weight:650;color:var(--text)}.source-type-copy span{display:block;margin-top:2px;font-size:10.5px;color:var(--muted)}.source-type-badge{position:absolute;top:10px;right:10px;padding:2px 6px;border-radius:99px;background:var(--accent-soft);color:var(--accent);font-size:9px;font-weight:650}.source-type-badge.soon{background:#f1f5f9;color:#8a94a6}.source-conn-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.source-field{display:flex;flex-direction:column;gap:5px;min-width:0}.source-field>span{font-size:11px;color:var(--muted)}.source-field input,.source-field select{width:100%;min-width:0;height:34px;padding:0 9px;border:1px solid #e3e8ef;border-radius:6px;background:#fbfcfe;font-size:12px;outline:none;transition:border-color .15s,background .15s,box-shadow .15s}.source-field input:hover,.source-field select:hover{border-color:var(--border-strong)}.source-field input:focus,.source-field select:focus{background:#fff;border-color:var(--accent);box-shadow:0 0 0 3px #2563eb17}.source-field input:disabled,.source-field select:disabled{background:#f1f5f9;color:#9aa5b5;cursor:not-allowed}.source-note{margin:12px 0 0;font-size:11px;line-height:1.6;color:var(--muted)}.source-error{margin:12px 0 0;padding:8px 10px;border:1px solid #fecaca;border-radius:6px;background:#fef2f2;color:#b91c1c;font-size:11.5px;line-height:1.5}.source-connected{display:flex;align-items:center;gap:12px;margin-bottom:12px;font-size:11.5px;color:var(--muted)}.source-ok{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:99px;background:#f0fdf4;color:#15803d;font-weight:600}.source-selects{display:flex;align-items:flex-end;gap:8px;margin-bottom:14px}.source-grow{flex:1}.source-selects .icon-btn{width:34px;height:34px;flex-shrink:0}.source-columns{border:1px solid #e3e8ef;border-radius:8px;overflow:hidden}.source-columns-head{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid #e3e8ef;background:#f8fafc;font-size:11px;color:var(--muted)}.source-link{padding:0;border:0;background:none;color:var(--accent);font-size:11px;cursor:pointer}.source-columns-list{max-height:300px;overflow:auto}.source-column{display:grid;grid-template-columns:16px minmax(0,1.1fr) minmax(0,.9fr) minmax(0,1.1fr);align-items:center;gap:10px;padding:7px 12px;border-bottom:1px solid #f1f5f9;font-size:11.5px;cursor:pointer}.source-column:last-child{border-bottom:0}.source-column:hover{background:#f8fafc}.source-column input{margin:0}.source-col-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;color:var(--text-soft)}.source-col-type{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#8a94a6;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10.5px}.source-col-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);text-align:right}.source-columns-note{margin:0;padding:7px 12px;border-top:1px solid #f1f5f9;background:#fbfcfe}.source-modal-foot{display:flex;align-items:center;gap:8px;padding:12px 20px;border-top:1px solid var(--border);background:#fff;flex-shrink:0}.source-foot-spacer{flex:1}@media (max-width: 720px){.source-type-grid,.source-conn-grid{grid-template-columns:1fr}.source-column{grid-template-columns:16px minmax(0,1fr) minmax(0,.8fr)}.source-col-value{display:none}}.binding-picker{display:flex;align-items:center;gap:6px;height:30px;margin:0 0 10px;padding:0 8px;border:1px solid #e3e8ef;border-radius:6px;background:#f8fafc;color:var(--muted);transition:border-color .15s,box-shadow .15s,background .15s}.binding-picker:focus-within{border-color:var(--accent);background:#fff;box-shadow:0 0 0 3px #2563eb17}.binding-icon{flex-shrink:0}.binding-picker select{flex:1;min-width:0;height:100%;border:0;outline:none;background:transparent;color:var(--text-soft);font-size:11.5px;cursor:pointer}.binding-picker.empty select{color:var(--muted);cursor:default}.table-grid-wrap{margin:10px 0 8px;padding:6px;border:1px solid var(--border);border-radius:7px;background:#f8fafc;overflow-x:auto}.table-cell-grid{display:grid;grid-auto-rows:26px;gap:2px;min-width:0}.table-cell-btn{display:flex;align-items:center;min-width:0;padding:0 5px;border:1px solid #dce3ec;border-radius:4px;background:#fff;color:var(--text-soft);font-size:10.5px;line-height:1.2;overflow:hidden;transition:border-color .15s,box-shadow .15s}.table-cell-btn span{min-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-cell-btn:hover{border-color:#b9c7da}.table-cell-btn.selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px #2563eb59}.table-cell-btn.anchor{box-shadow:inset 0 0 0 2px var(--accent)}.table-range-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;font-size:11px;color:var(--muted)}.table-range-label{color:var(--text-soft);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-weight:600}.table-range-count{white-space:nowrap}.table-actions{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:8px}.table-actions .btn{height:30px;border-color:var(--border-strong)}.table-panel .cell-text{min-height:48px}.table-canvas-toggle{margin-top:10px;background:var(--accent-soft);color:var(--accent);border-color:#2563eb38}.table-canvas-toggle:hover{background:#e3edff}.table-canvas-toggle.active{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 4px 10px -5px #2563ebb3}.canvas-table-editor{position:absolute;top:0;right:0;bottom:0;left:0;z-index:30;outline:none;pointer-events:none;user-select:none;-webkit-user-select:none}.cte-cell-layer{position:absolute;pointer-events:none;transform-origin:50% 50%}.cte-input{position:absolute;z-index:3;margin:0;pointer-events:auto;user-select:text;-webkit-user-select:text;border:0;border-radius:0;outline:2px solid var(--accent);outline-offset:-2px;resize:none;overflow:auto;box-shadow:0 0 0 3px #2563eb29;font-family:inherit;white-space:pre-wrap;word-break:break-word}.cte-input::placeholder{color:#64748ba6}.cte-toolbar{position:absolute;z-index:4;display:flex;align-items:center;gap:2px;height:38px;padding:4px;pointer-events:auto;border:1px solid var(--border-strong);border-radius:9px;background:#fff;box-shadow:var(--shadow-md);white-space:nowrap}.cte-btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;height:28px;padding:0 7px;border:0;border-radius:6px;background:transparent;color:var(--text-soft);font-size:11.5px;font-weight:550;white-space:nowrap;transition:background .12s,color .12s}.cte-btn.icon{width:28px;padding:0}.cte-btn:hover:not(:disabled){background:#f1f4f8;color:var(--text)}.cte-btn.active{background:var(--accent-soft);color:var(--accent)}.cte-btn:disabled{opacity:.35}.cte-btn.done{margin-left:2px;background:var(--accent);color:#fff}.cte-btn.done:hover:not(:disabled){background:var(--accent-strong);color:#fff}.cte-sep{width:1px;height:18px;margin:0 3px;background:var(--border)}.cte-range{padding:0 5px;color:var(--muted);font-size:10.5px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace}@media (max-width: 1280px){.tbp-hint-end{display:none}}@media (max-width: 1100px){.template-name{width:160px}.autosave,.tbp-hint{display:none}}
