:root{--sidebar-w:300px;--border:#d7d9de;--bg-app:#eef0f3;--bg-sidebar:#fbfbfc;--accent:#2563eb;--pending:#f59e0b;--text:#1c1e21;--text-muted:#6b7078}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{color:var(--text);background:var(--bg-app);font-family:Inter,Arial,Helvetica,sans-serif}.app{width:100%;height:100vh;display:flex}.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);background:var(--bg-sidebar);padding:18px 18px 40px;overflow-y:auto}.sidebar-left{border-right:1px solid var(--border)}.sidebar-right{border-left:1px solid var(--border)}.sidebar h1{margin:0 0 4px;font-size:16px;font-weight:700}.sidebar .subtitle{color:var(--text-muted);margin:0 0 18px;font-size:12px}fieldset{border:1px solid var(--border);border-radius:8px;margin:0 0 14px;padding:10px 12px 14px}legend{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);padding:0 4px;font-size:12px;font-weight:700}.row{gap:8px;margin-bottom:8px;display:flex}.row:last-child{margin-bottom:0}.field{flex-direction:column;flex:1;gap:3px;display:flex}.field label{color:var(--text-muted);font-size:11.5px}input[type=number],input[type=text],select{border:1px solid var(--border);width:100%;color:var(--text);background:#fff;border-radius:6px;padding:6px 7px;font-family:inherit;font-size:13px}input[type=number]:focus,input[type=text]:focus,select:focus{outline:2px solid var(--accent);outline-offset:-1px}button{font-family:inherit}button:disabled{opacity:.5;cursor:not-allowed}.checkbox-line{cursor:pointer;align-items:center;gap:7px;margin-bottom:7px;font-size:13px;display:flex}.checkbox-line:last-child{margin-bottom:0}.checkbox-line input{margin:0}.checkbox-line.small{margin:0;font-size:12px}.style-toggle{gap:6px;display:flex}.style-toggle label{text-align:center;border:1px solid var(--border);cursor:pointer;color:var(--text-muted);border-radius:6px;flex:1;padding:8px 4px;font-size:12px}.style-toggle input{display:none}.style-toggle label:has(input:checked){background:var(--accent);border-color:var(--accent);color:#fff}.mode-toggle{margin-bottom:16px}.add-point-form{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.add-point-form input[type=number]{flex:none;width:56px}.add-point-form input[type=text],.add-point-form select{flex:1;min-width:90px}.add-point-form input[type=color]{border:1px solid var(--border);background:#fff;border-radius:6px;flex:none;width:32px;height:30px;padding:2px}fieldset>button[type=button]{border:1px solid var(--border);cursor:pointer;width:100%;color:var(--text);background:#fff;border-radius:7px;padding:9px 10px;font-size:13px}fieldset>button[type=button]:hover{filter:brightness(.97)}.points-list{flex-direction:column;gap:6px;max-height:220px;margin:10px 0 0;padding:0;list-style:none;display:flex;overflow-y:auto}.point-item{border:1px solid var(--border);background:#fff;border-radius:6px;flex-wrap:wrap;align-items:center;gap:6px;padding:5px 6px;font-size:12.5px;display:flex}.point-item .swatch{border:1.5px solid #00000040;border-radius:50%;flex:none;width:14px;height:14px}.point-item .swatch.bar{border:none;border-radius:4px;width:20px;height:8px}.point-item .point-coord{white-space:nowrap;font-weight:600}.point-item .point-label{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.point-item button{cursor:pointer;color:var(--text-muted);background:0 0;border:none;border-radius:4px;padding:2px 4px;font-size:13px}.point-item button:hover{color:var(--text);background:#f0f1f3}.point-item input,.point-item select{padding:4px 5px;font-size:12px}.point-item .save-btn{background:var(--accent);color:#fff}.empty-hint{color:var(--text-muted);padding:6px 2px;font-size:12px}.panel-hint{color:var(--text-muted);margin:0 0 8px;font-size:11.5px;line-height:1.4}.point-item--clickable{cursor:pointer}.point-item--clickable:hover{border-color:var(--accent)}.point-item--editing{border-color:var(--accent);background:#f5f8ff}input[type=range]{width:100%}.range-val{color:var(--text-muted);font-size:12px}.export-buttons{flex-direction:column;gap:8px;display:flex}.export-buttons button{border:1px solid var(--border);cursor:pointer;color:var(--text);background:#fff;border-radius:7px;padding:9px 10px;font-size:13px;font-weight:600}.export-buttons button.primary{background:var(--accent);border-color:var(--accent);color:#fff}.export-buttons button:hover{filter:brightness(.97)}.filename-preview{color:var(--text-muted);word-break:break-all;margin-top:8px;font-size:11px}.canvas-area{flex:1;justify-content:center;align-items:center;min-width:0;padding:32px;display:flex;position:relative;overflow:auto}.preview-wrap{background:#fff;border-radius:6px;max-width:100%;max-height:100%;padding:0;line-height:0;box-shadow:0 8px 28px #14161e24,0 1px 4px #14161e14}.preview-wrap.checkerboard{background-color:#fff;background-image:linear-gradient(45deg,#d9d9dc 25%,#0000 25%),linear-gradient(-45deg,#d9d9dc 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#d9d9dc 75%),linear-gradient(-45deg,#0000 75%,#d9d9dc 75%);background-position:0 0,0 10px,10px -10px,-10px 0;background-size:20px 20px}.preview-wrap svg{width:100%;max-width:100%;height:auto;max-height:calc(100vh - 160px);display:block}.floating-toolbar{border:1px solid var(--border);background:#fff;border-radius:999px;align-items:center;gap:4px;padding:6px;display:flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #14161e29,0 1px 4px #14161e14}.floating-toolbar button{color:var(--text-muted);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:999px;padding:9px 16px;font-size:13px;font-weight:600}.floating-toolbar button:hover{background:#f0f1f3}.floating-toolbar button.active{background:var(--accent);color:#fff}.floating-toolbar .toolbar-divider{background:var(--border);width:1px;height:22px;margin:0 4px}.floating-toolbar input[type=color]{border:1px solid var(--border);cursor:pointer;background:#fff;border-radius:50%;width:30px;height:30px;padding:2px}.error-box{color:#a11212;background:#fdecec;border:1px solid #f3b4b4;border-radius:6px;margin-bottom:12px;padding:8px 10px;font-size:12.5px}.toast{color:#fff;opacity:0;pointer-events:none;z-index:50;background:#1c1e21;border-radius:8px;padding:10px 16px;font-size:13px;transition:opacity .18s,transform .18s;position:fixed;bottom:28px;left:50%;transform:translate(-50%)translateY(10px)}.toast.visible{opacity:1;transform:translate(-50%)translateY(0)}
