.figure-tabs .tab.dragging{opacity:.5}.figure-tabs .tab.drop-target{box-shadow:inset 2px 0 #3b82f6}.confirm-backdrop{position:fixed;inset:0;background:#18181b73;display:flex;align-items:center;justify-content:center;z-index:2000}.confirm-dialog{background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:10px;box-shadow:0 12px 40px #00000040;width:min(360px,92vw);padding:18px 20px}.confirm-dialog h3{margin:0 0 8px;font-size:15px}.confirm-dialog p{margin:0 0 16px;font-size:13px;color:var(--muted)}.confirm-actions{display:flex;justify-content:flex-end;gap:8px}.confirm-actions .danger{background:#dc2626;border-color:#dc2626;color:#fff}.confirm-actions .danger:hover{background:#b91c1c;border-color:#b91c1c}.data-grid.selecting{user-select:none;-webkit-user-select:none}.data-grid.selecting input{user-select:none;-webkit-user-select:none;pointer-events:none}.gallery-backdrop{position:fixed;inset:0;background:#18181b73;display:flex;align-items:center;justify-content:center;z-index:1000;padding:24px}.gallery-panel{background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 40px #00000040;width:min(1080px,100%);height:88vh;display:flex;flex-direction:column;overflow:hidden}.gallery-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.gallery-header h2{margin:0;font-size:16px;font-weight:600}.gallery-header p{margin:2px 0 0;font-size:12px;color:var(--muted)}.gallery-close{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:8px;width:32px;height:32px;font-size:18px;line-height:1;cursor:pointer}.gallery-close:hover{background:var(--bg)}.gallery-scroll{flex:1;min-height:0;overflow-y:auto;padding:8px 20px 20px}.gallery-group{margin-top:16px}.gallery-group+.gallery-group{margin-top:22px;padding-top:16px;border-top:1px solid var(--border)}.gallery-group-title{margin:0 0 10px;font-size:13px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));align-items:stretch;gap:16px}.gallery-card{min-width:0;border:1px solid var(--border);border-radius:10px;background:var(--panel);overflow:hidden;display:flex;flex-direction:column}.gallery-thumb{background:#fff;border-bottom:1px solid var(--border);flex:none;height:160px;padding:10px}.gallery-thumb-svg{display:block;width:100%;height:100%}.gallery-body{flex:1;padding:12px 14px 14px;display:flex;flex-direction:column}.gallery-card h3{flex:none;margin:0 0 4px;font-size:14px;font-weight:600}.gallery-card p{flex:none;margin:0 0 10px;font-size:12px;color:var(--muted)}.gallery-add{flex:none;margin-top:auto;align-self:flex-end;border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:8px;padding:6px 12px;font-size:13px;cursor:pointer}.gallery-card .gallery-add:hover{background:#1d4ed8;border-color:#1d4ed8;color:#fff;filter:none}:root{--border: #d4d4d8;--bg: #f4f4f5;--panel: #ffffff;--text: #18181b;--muted: #71717a;--accent: #2563eb}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;color:var(--text);background:var(--bg)}.app{display:flex;flex-direction:column;height:100%}button{font:inherit;border:1px solid var(--border);background:#fff;border-radius:5px;padding:4px 9px;cursor:pointer;color:var(--text)}.topbar>button,.insert-toolbar button:not(.fmt){min-height:30px;white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;gap:5px}button:hover:not(:disabled){background:#f0f5ff;border-color:#b9ccf2}button:disabled{opacity:.45;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover{background:#1d4ed8}button.small{padding:2px 7px;font-size:12px}input,select,textarea{font:inherit;border:1px solid var(--border);border-radius:4px;padding:3px 6px;background:#fff;color:var(--text)}input:focus,select:focus,textarea:focus{outline:2px solid #bfdbfe;border-color:var(--accent)}.topbar{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--border)}.topbar .brand{font-weight:650;margin-right:4px;white-space:nowrap}.topbar .copy-btn{min-width:96px}.topbar .project-name{width:200px;color:var(--muted)}.topbar .spacer{flex:1}.divider{width:1px;height:20px;background:var(--border);margin:0 4px}.insert-toolbar{display:flex;align-items:center;gap:6px;padding:6px 12px;background:var(--panel);border-bottom:1px solid var(--border);flex-wrap:wrap}.insert-toolbar .group-label{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em;margin-right:2px}.insert-toolbar button.fmt{min-width:32px;display:inline-flex;align-items:center;justify-content:center;height:26px;padding:0 7px}.dropdown{position:relative;display:inline-block}.dropdown-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:30;display:flex;flex-direction:column;min-width:150px;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 14px #00000024;padding:4px}.insert-toolbar .dropdown-menu button{border:none;border-radius:4px;padding:5px 9px;width:100%;justify-content:flex-start;text-align:left;gap:8px}.figure-tabs{display:flex;align-items:flex-end;gap:2px;padding:4px 12px 0;background:var(--panel);border-bottom:1px solid var(--border)}.figure-tabs .tab{display:flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--border);border-bottom:none;border-radius:6px 6px 0 0;background:var(--bg);cursor:pointer;max-width:180px;min-width:0}.figure-tabs .tab>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.figure-tabs .tab .close{flex:none}.figure-tabs .tab.active{background:#fff;font-weight:600;position:relative;top:1px}.figure-tabs .tab .close{border:none;padding:0 3px;background:transparent;color:var(--muted)}.figure-tabs .tab .close:hover{color:#dc2626}.figure-tabs .add-tab{border:none;background:transparent;font-size:16px;padding:2px 8px;color:var(--muted)}.figure-tabs .tab input{font:inherit;width:100px;padding:1px 4px;margin:-2px 0;border:1px solid var(--accent);border-radius:4px}.main{flex:1;display:flex;min-height:0}aside.left{width:295px;background:var(--panel);border-right:1px solid var(--border);overflow-y:auto;padding-bottom:220px}aside.right{width:270px;background:var(--panel);border-left:1px solid var(--border);overflow-y:auto}.canvas-container{flex:1;position:relative;min-width:0;background:#e4e4e7}.canvas-scroll{position:absolute;inset:0;overflow:auto;display:grid;place-items:center;padding:24px}.canvas-sheet{position:relative;flex:none;box-shadow:0 2px 12px #0000002e;background:#fff}.canvas-sheet svg{display:block}.zoom-bar{position:absolute;right:14px;bottom:14px;display:flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:4px 8px;box-shadow:0 1px 6px #0000001f}.zoom-bar span{min-width:42px;text-align:center;color:var(--muted)}.zoom-pct{min-width:52px;padding:4px 6px;color:var(--muted)}.zoom-menu{top:auto;bottom:calc(100% + 4px);left:50%;transform:translate(-50%);min-width:110px}.zoom-menu button{justify-content:center}.zoom-menu button.active{background:#eff4ff}.text-edit-overlay{position:absolute;min-width:8px;white-space:pre;outline:1.5px dashed var(--accent);outline-offset:2px;background:#ffffffd9;color:#000}.title-edit-overlay{font-family:var(--font, Arial, Helvetica, sans-serif);font-size:13px;line-height:1.2;border:none;outline:1.5px dashed var(--accent);outline-offset:1px;border-radius:2px;padding:0 1px;background:#ffffffe6;color:#000;white-space:nowrap;z-index:20}.text-edit-overlay:focus{outline-style:solid}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:10px 12px 6px;font-weight:650}.data-panel.empty{padding:18px 14px;color:var(--muted)}.data-grid{display:block;overflow-x:auto;width:100%;border-collapse:collapse}.data-grid th,.data-grid td{border:1px solid var(--border);padding:0;position:relative;min-width:4.4em}.data-grid th.rownum,.data-grid td.rownum{min-width:34px}.data-grid th{background:var(--bg);font-weight:600}.data-grid input{width:100%;border:none;border-radius:0;padding:4px 6px;background:transparent}.data-grid input:focus{outline:2px solid var(--accent);outline-offset:-2px}.data-grid .rownum{width:34px;text-align:center;color:var(--muted);background:var(--bg);font-size:11px}.data-grid td.rownum{cursor:grab}.data-grid td.sel,.data-grid td.sel input{background:#dbeafe}.data-grid .del{display:none;position:absolute;right:1px;top:1px;border:none;background:transparent;color:#dc2626;padding:0 3px;font-size:11px}.data-grid th:hover .del,.data-grid td:hover .del{display:block}.grid-actions{display:flex;gap:6px;padding:8px 12px}.series-block{border-top:1px solid var(--border);padding:6px 12px 8px}.series-block .series-name{font-weight:600;margin-bottom:4px}.inspector{padding-bottom:24px}.section{border-bottom:1px solid var(--border);padding:8px 12px 10px}.section-title{font-weight:650;margin-bottom:6px}.field-row{display:flex;align-items:center;gap:8px;margin:4px 0}.field-row .field-label{width:96px;flex:none;color:var(--muted)}.field-row input[type=number],.field-row input[type=text],.field-row select,.field-row textarea{flex:1;min-width:0}.field-row.check{cursor:pointer}.rich-field{margin:4px 0}.rich-field-head{display:flex;align-items:center;gap:4px;margin-bottom:2px}.rich-field-head .field-label{flex:1;color:var(--muted)}.rich-field-head .rich-fmt{display:flex;gap:2px}.rich-field-head .rich-fmt button{padding:0 5px;font-size:11px;min-width:22px}.rich-input{border:1px solid var(--border);border-radius:4px;padding:3px 6px;background:#fff;min-height:24px;white-space:pre-wrap}.rich-input:focus{outline:2px solid #bfdbfe;border-color:var(--accent)}.rich-input:empty:before{content:attr(data-ph);color:var(--muted);pointer-events:none}.glyph-select{position:relative;flex:1;min-width:0}.glyph-trigger{width:100%;display:flex;align-items:center;gap:6px;padding:2px 6px}.glyph-preview{display:inline-flex;align-items:center;flex:none}.glyph-text{flex:1;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.glyph-caret{color:var(--muted);font-size:13px;flex:none}.insert-toolbar .caret{font-size:15px;line-height:1;color:var(--muted);margin-left:-1px}.glyph-menu{position:absolute;top:calc(100% + 3px);right:0;z-index:40;min-width:100%;width:max-content;max-width:320px;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 14px #00000024;padding:3px;max-height:240px;overflow-y:auto}.glyph-menu .glyph-text{overflow:visible;text-overflow:clip}.glyph-menu button{width:100%;display:flex;align-items:center;gap:6px;border:none;border-radius:4px;padding:4px 6px}.glyph-menu button.active{background:#eff4ff}.subhead{color:var(--muted);font-size:12px;margin:8px 0 3px}.tick-row{display:flex;align-items:center;gap:4px;margin:3px 0}.tick-row .tick-pos{width:62px;flex:none}.tick-row input[type=text]{flex:1;min-width:0}.tick-row input[type=number]{flex:1 1 40px;width:auto;min-width:0}.tick-row select,.tick-row .glyph-select{flex:1 1 30px;min-width:0}.tick-row .del-tick{border:none;background:transparent;color:#dc2626;padding:0 4px}.curve-builder{padding:0 12px 8px}.curve-builder .hint{padding:4px 0 0}.hint{color:var(--muted);padding:8px 12px;margin:0}.linkish{border:none;background:none;padding:0;color:var(--accent);text-decoration:underline;cursor:pointer;font:inherit}.hint-warn{color:#ea580c;font-weight:500}.warn{color:#b45309;background:#fffbeb;border:1px solid #fde68a;border-radius:4px;padding:5px 8px;margin:4px 0 0;font-size:12px}.danger-zone{padding:12px}.danger-zone button{color:#dc2626;border-color:#fecaca}.danger-zone button:hover{background:#fef2f2;border-color:#dc2626}.canvas-scroll{touch-action:pan-x pan-y;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.canvas-sheet svg [data-object-id],.canvas-sheet svg [data-object-id] *{touch-action:none}@media(pointer:coarse){button{min-height:38px;padding:6px 11px}button.small{min-height:30px}.figure-tabs .tab .close,.figure-tabs .add-tab,.data-grid .del,.rich-field-head .rich-fmt button,.tick-row .del-tick{min-height:0}.insert-toolbar button.fmt{min-width:38px}input,select,textarea{min-height:34px}.data-grid input{min-height:32px}.figure-tabs .tab{padding:8px 12px}.glyph-menu button,.dropdown-menu button{min-height:40px}}@media(max-width:768px),(pointer:coarse)and (max-height:500px){body{font-size:14px;overscroll-behavior:none}.app.mobile{height:100dvh}.topbar{gap:6px;padding:6px 10px}.topbar .brand{font-size:13px}.topbar-menu{left:auto;right:0;min-width:210px}.topbar-menu .project-name{width:auto;margin:2px 2px 6px}.insert-toolbar{gap:5px;padding:6px 8px}.insert-toolbar .group-label,.insert-toolbar .divider{display:none}.figure-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch;padding:3px 8px 0}.figure-tabs .tab{flex:none;padding:4px 9px;font-size:12px}.figure-tabs .add-tab{min-height:0;padding:2px 8px}.mobile-nav{flex:none;display:flex;gap:8px;padding:6px 10px calc(6px + env(safe-area-inset-bottom));background:var(--panel);border-top:1px solid var(--border);position:relative;z-index:100}.mobile-nav button{flex:1;min-height:42px;font-size:14px}.mobile-nav button.active{background:#eff4ff;border-color:var(--accent);color:var(--accent);font-weight:600}.sheet-backdrop{position:fixed;inset:0;background:#18181b59;z-index:90}.sheet{position:fixed;left:0;right:0;bottom:calc(54px + env(safe-area-inset-bottom));height:62dvh;z-index:95;display:flex;flex-direction:column;background:var(--panel);border-top:1px solid var(--border);border-radius:14px 14px 0 0;box-shadow:0 -6px 24px #0000002e}.sheet-head{flex:none;display:flex;align-items:center;justify-content:space-between;padding:8px 8px 8px 14px;border-bottom:1px solid var(--border)}.sheet-title{font-weight:650}.sheet-close{color:var(--accent);font-weight:600;border:none;background:none}.sheet-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:220px}.zoom-bar{right:10px;bottom:10px}.gallery-backdrop{padding:0}.gallery-panel{width:100%;height:100dvh;border-radius:0;border:none}}@media(pointer:coarse)and (max-height:500px){.topbar,.insert-toolbar{padding:3px 8px}.topbar>button,.insert-toolbar button{min-height:30px;padding:3px 9px}.figure-tabs .tab{padding:3px 9px}.mobile-nav{position:fixed;left:auto;right:10px;top:50%;transform:translateY(-50%);flex-direction:column;width:auto;padding:5px;gap:5px;border:1px solid var(--border);border-radius:10px;box-shadow:0 1px 6px #0000001f;z-index:80}.mobile-nav button{flex:none;min-height:36px;padding:4px 12px}.sheet{inset:0 0 0 auto;height:auto;width:min(390px,62vw);border-radius:0;border-left:1px solid var(--border);box-shadow:-6px 0 24px #0000002e}.sheet-body{padding-bottom:120px}.zoom-bar{right:10px;bottom:8px}}.topbar svg,.back-btn svg,.mobile-nav button svg,.glyph-caret svg,.caret svg{display:block;flex:none}.back-btn{display:inline-flex;align-items:center;gap:4px;min-height:30px;padding:4px 9px;border:1px solid var(--border);border-radius:5px;background:#fff;color:var(--text);text-decoration:none;white-space:nowrap}.back-btn:hover{background:#f0f5ff;border-color:#b9ccf2}.mobile-nav button{display:inline-flex;align-items:center;justify-content:center;gap:6px}.glyph-caret,.insert-toolbar .caret{display:inline-flex;align-items:center}
