:root{--bg-cream:#fff8ed;--bg-pink:#fff0f3;--accent-mint:#b5ead7;--accent-lavender:#c7ceea;--accent-peach:#ffdac1;--accent-pink:#ffb7b2;--accent-yellow:#ffeaa7;--text-primary:#5d4037;--text-secondary:#8d6e63;--text-light:#a1887f;--card-bg:#fff;--card-shadow:0 4px 16px #5d403714;--card-shadow-hover:0 8px 24px #5d403724;--radius-sm:8px;--radius-md:14px;--radius-lg:20px;--radius-xl:28px;--font-family:system-ui, -apple-system, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;--transition:.2s cubic-bezier(.4,0,.2,1);--grid-border:#5d40371f}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:14px}body{font-family:var(--font-family);background:linear-gradient(135deg, var(--bg-cream) 0%, var(--bg-pink) 100%);color:var(--text-primary);min-height:100vh;overflow:hidden}#root{flex-direction:column;height:100vh;display:flex}button{cursor:pointer;background:0 0;border:none;font-family:inherit}input,select{font-family:inherit}.app-header{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);z-index:100;background:#ffffffbf;border-bottom:1px solid #5d40370f;flex-shrink:0;justify-content:space-between;align-items:center;padding:8px 20px;display:flex}.app-logo{color:var(--text-primary);align-items:center;gap:10px;font-size:1.35rem;font-weight:700;display:flex}.app-logo .logo-icon{font-size:1.6rem}.toolbar{background:var(--card-bg);border-radius:var(--radius-lg);box-shadow:var(--card-shadow);align-items:center;gap:4px;padding:4px 8px;display:flex}.toolbar-import{align-items:center;display:flex;position:relative}.import-tool-btn.processing{box-shadow:0 0 0 2px #b5ead7e6}.toolbar-import-progress{background:var(--accent-mint);pointer-events:none;border-radius:99px;max-width:24px;height:3px;position:absolute;bottom:4px;left:7px;right:auto}.page-drop-overlay{z-index:999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:4px dashed var(--accent-mint);color:var(--text-primary);pointer-events:none;background:#ffffffb8;justify-content:center;align-items:center;font-size:1.35rem;font-weight:800;display:flex;position:fixed;inset:0}.tool-btn{border-radius:var(--radius-md);width:38px;height:38px;transition:all var(--transition);color:var(--text-secondary);justify-content:center;align-items:center;display:flex;position:relative}.tool-btn svg{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;width:22px;height:22px}.tool-btn:hover{background:var(--bg-cream);color:var(--text-primary);transform:translateY(-1px)}.tool-btn:disabled{opacity:.35;cursor:default}.tool-btn:disabled:hover{color:var(--text-secondary);background:0 0;transform:none}.tool-btn.active{background:var(--accent-mint);color:var(--text-primary);transform:scale(.95);box-shadow:inset 0 2px 4px #0000001f}.tool-btn[title]:after{content:attr(title);white-space:nowrap;background:var(--text-primary);color:#fff;opacity:0;pointer-events:none;transition:opacity var(--transition);border-radius:6px;padding:2px 8px;font-size:.7rem;position:absolute;bottom:-26px;left:50%;transform:translate(-50%)}.tool-btn:hover:after{opacity:1}.toolbar-divider{background:#5d40371f;width:1px;height:24px;margin:0 4px}.header-controls{align-items:center;gap:8px;display:flex}.header-btn{border-radius:var(--radius-md);background:var(--card-bg);color:var(--text-primary);box-shadow:var(--card-shadow);transition:all var(--transition);align-items:center;gap:6px;padding:6px 14px;font-size:.85rem;font-weight:600;display:flex}.header-btn:hover{box-shadow:var(--card-shadow-hover);transform:translateY(-1px)}.header-btn.primary{background:linear-gradient(135deg, var(--accent-pink), var(--accent-peach));color:#5d4037}.app-main{flex:1;display:flex;position:relative;overflow:hidden}.palette-panel{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fffc;border-right:1px solid #5d40370f;flex-direction:column;flex-shrink:0;width:220px;min-height:0;padding:12px;display:flex;overflow:hidden}.palette-panel::-webkit-scrollbar{width:4px}.palette-panel::-webkit-scrollbar-thumb{background:var(--accent-lavender);border-radius:4px}.palette-section-title{color:var(--text-secondary);align-items:center;gap:6px;margin:8px 0 6px;font-size:.8rem;font-weight:700;display:flex}.palette-divider{border-top:1px solid #5d403714;flex-direction:column;flex:1;min-height:0;margin-top:10px;padding-top:8px;display:flex}.color-palette{flex-direction:column;flex:1;min-height:0;display:flex}.palette-controls{flex-shrink:0;align-items:center;gap:6px;margin-bottom:8px;display:flex}.palette-search{flex:1;min-width:0}.palette-search input{border-radius:var(--radius-sm);width:100%;color:var(--text-primary);background:#ffffffb8;border:1.5px solid #5d403724;padding:6px 8px;font-size:.8rem}.palette-search input:focus{border-color:var(--accent-mint);outline:none;box-shadow:0 0 0 3px #b5ead747}.palette-sort-select{border-radius:var(--radius-sm);width:58px;color:var(--text-primary);background:#ffffffb8;border:1.5px solid #5d403724;padding:6px 4px;font-size:.78rem;font-weight:700}.palette-sort-select:focus{border-color:var(--accent-mint);outline:none;box-shadow:0 0 0 3px #b5ead747}.palette-tabs{gap:4px;margin-bottom:8px;display:flex}.palette-tab{border-radius:var(--radius-sm);color:var(--text-secondary);background:var(--bg-cream);transition:all var(--transition);text-align:center;flex:1;padding:6px;font-size:.78rem;font-weight:600}.palette-tab.active{background:var(--accent-mint);color:var(--text-primary)}.color-grid{flex-wrap:wrap;flex:1;place-content:flex-start;gap:3px;min-height:0;max-height:none;padding:2px 1px 4px;display:flex;overflow-y:auto}.color-family-group{flex-direction:column;gap:4px;width:100%;padding:2px 0 5px;display:flex}.color-family-heading{color:var(--text-light);justify-content:space-between;align-items:center;padding:2px 2px 0;font-size:.68rem;font-weight:800;line-height:1;display:flex}.color-family-swatches{flex-wrap:wrap;align-content:flex-start;gap:3px;display:flex}.color-swatch{cursor:pointer;width:19px;height:19px;transition:all var(--transition);border:1.5px solid #0000;border-radius:50%;position:relative;box-shadow:0 1px 3px #0000001f,inset 0 -1px 2px #00000014}.color-swatch:hover{z-index:10;transform:translateY(-2px)scale(1.12);box-shadow:0 6px 12px #0000002e}.color-swatch.selected{border-color:var(--text-primary);box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--text-primary);transform:scale(1.1)}.color-tooltip{background:var(--text-primary);color:#fff;white-space:nowrap;pointer-events:none;z-index:1000;border-radius:8px;padding:4px 10px;font-size:.72rem;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);box-shadow:0 4px 8px #0003}.color-tooltip:after{content:"";border:5px solid #0000;border-top-color:var(--text-primary);position:absolute;top:100%;left:50%;transform:translate(-50%)}.recent-colors{flex-wrap:wrap;gap:4px;padding:6px 0;display:flex}.recent-swatch{cursor:pointer;width:22px;height:22px;transition:all var(--transition);border:1.5px solid #5d403726;border-radius:50%;box-shadow:0 1px 3px #0000001a}.recent-swatch:hover{transform:scale(1.2)}.canvas-area{background:radial-gradient(circle at 20% 30%,#b5ead726 0%,#0000 50%),radial-gradient(circle at 80% 70%,#c7ceea26 0%,#0000 50%);flex:1;display:flex;position:relative;overflow:hidden}.canvas-container{transform-origin:0 0;position:absolute;top:0;left:0}.canvas-view-controls{z-index:30;border-radius:var(--radius-md);box-shadow:var(--card-shadow);background:#ffffffe6;border:1px solid #5d403714;align-items:center;gap:4px;padding:5px;display:flex;position:absolute;top:12px;left:12px}.canvas-view-controls button,.canvas-view-controls span{border-radius:var(--radius-sm);min-width:34px;height:28px;color:var(--text-secondary);background:var(--bg-cream);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:0 8px;font-size:.78rem;font-weight:700;display:inline-flex}.canvas-view-controls button:hover{color:var(--text-primary);background:var(--accent-mint)}.canvas-view-controls span{min-width:48px;color:var(--text-primary);background:0 0}.bead-canvas{border-radius:var(--radius-md);background:#fff9;display:grid;overflow:hidden;box-shadow:0 0 40px #5d40370f}.bead-canvas.show-grid .bead-cell{border:.5px solid var(--grid-border)}.bead-cell{cursor:crosshair;background:0 0;width:100%;height:100%;transition:background-color 50ms;position:relative}.bead-cell:hover{filter:brightness(1.1)}.bead-cell.filled:after{content:"";background:var(--bead-color);border-radius:50%;width:70%;height:70%;position:absolute;top:15%;left:15%;box-shadow:inset 0 -1px 2px #0000001a,inset 0 1px 1px #ffffff4d}.cell-coordinate{color:#3d302c85;pointer-events:none;z-index:2;white-space:nowrap;justify-content:center;align-items:flex-start;font-size:clamp(5px,42%,8px);line-height:1;display:flex;position:absolute;inset:1px;overflow:hidden}.bead-cell.filled .cell-coordinate{color:#ffffffc7;text-shadow:0 1px 2px #00000073}.bead-canvas.preview-iron .bead-cell.filled:after{filter:saturate(.95)contrast(.98);border-radius:42%;width:84%;height:84%;top:8%;left:8%;box-shadow:inset 0 1px 3px #ffffff38}.bead-canvas.preview-towel .bead-cell.filled:after{filter:saturate(.82)contrast(.9);background:repeating-linear-gradient(0deg, #ffffff14 0 1px, transparent 1px 4px), repeating-linear-gradient(90deg, #0000000d 0 1px, transparent 1px 5px), var(--bead-color);border-radius:38%;width:86%;height:86%;top:7%;left:7%;box-shadow:inset 0 0 0 1px #ffffff26}.bead-canvas.preview-fine-glitter .bead-cell.filled:before,.bead-canvas.preview-coarse-glitter .bead-cell.filled:before{content:"";pointer-events:none;z-index:3;border-radius:50%;position:absolute;inset:18%}.bead-canvas.preview-fine-glitter .bead-cell.filled:before{background:radial-gradient(circle at 25% 30%,#ffffffd9 0 8%,#0000 9%),radial-gradient(circle at 70% 62%,#ffffffb3 0 6%,#0000 7%)}.bead-canvas.preview-coarse-glitter .bead-cell.filled:before{background:radial-gradient(circle at 32% 35%,#ffffffe6 0 14%,#0000 15%),radial-gradient(circle at 68% 68%,#ffffffbf 0 11%,#0000 12%)}.bom-panel{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fffc;border-left:1px solid #5d40370f;flex-direction:column;flex-shrink:0;width:260px;padding:12px;display:flex;overflow-y:auto}.bom-panel::-webkit-scrollbar{width:4px}.bom-panel::-webkit-scrollbar-thumb{background:var(--accent-lavender);border-radius:4px}.bom-title{color:var(--text-primary);justify-content:space-between;align-items:center;margin-bottom:8px;font-size:.95rem;font-weight:700;display:flex}.bom-table{border-collapse:collapse;width:100%;font-size:.78rem}.bom-table th{text-align:left;border-bottom:2px solid var(--accent-lavender);color:var(--text-secondary);padding:6px 4px;font-weight:600}.bom-table td{border-bottom:1px solid #5d40370f;padding:5px 4px}.bom-color-dot{vertical-align:middle;border-radius:50%;width:14px;height:14px;margin-right:4px;display:inline-block;box-shadow:0 1px 3px #00000026}.bom-total{background:var(--bg-cream);border-radius:var(--radius-sm);text-align:center;margin-top:8px;padding:8px;font-size:.85rem;font-weight:600}.bom-export-btn{border-radius:var(--radius-md);background:linear-gradient(135deg, var(--accent-lavender), var(--accent-mint));color:var(--text-primary);text-align:center;transition:all var(--transition);box-shadow:var(--card-shadow);justify-content:center;align-items:center;margin-top:8px;padding:8px;font-size:.82rem;font-weight:600;display:flex}.bom-export-btn:hover{box-shadow:var(--card-shadow-hover);transform:translateY(-1px)}.bom-export-btn.secondary{background:var(--bg-cream);margin-top:0}.project-file-actions{grid-template-columns:1fr 1fr;gap:6px;margin-top:6px;display:grid}.project-import-label{position:relative;overflow:hidden}.project-import-label input{opacity:0;cursor:pointer;position:absolute;inset:0}.project-file-status{border-radius:var(--radius-sm);color:var(--text-secondary);background:#b5ead73d;margin-top:6px;padding:6px 8px;font-size:.76rem;line-height:1.35}.status-bar{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--text-secondary);background:#ffffffb3;border-top:1px solid #5d40370f;flex-shrink:0;align-items:center;gap:16px;padding:4px 20px;font-size:.75rem;display:flex}.status-item{align-items:center;gap:4px;display:flex}.status-dot{background:var(--accent-mint);border-radius:50%;width:6px;height:6px}.modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1000;background:#5d40374d;justify-content:center;align-items:center;animation:.2s fadeIn;display:flex;position:fixed;inset:0}.modal-card{background:var(--card-bg);border-radius:var(--radius-xl);width:90%;max-width:460px;padding:28px;animation:.3s slideUp;box-shadow:0 20px 60px #5d403733}.modal-title{margin-bottom:12px;font-size:1.15rem;font-weight:700}.modal-actions{justify-content:flex-end;gap:8px;margin-top:18px;display:flex}.modal-btn{border-radius:var(--radius-md);transition:all var(--transition);padding:8px 20px;font-size:.85rem;font-weight:600}.modal-btn.cancel{background:var(--bg-cream);color:var(--text-secondary)}.modal-btn.confirm{background:linear-gradient(135deg, var(--accent-pink), var(--accent-peach));color:var(--text-primary)}.modal-btn:hover{transform:translateY(-1px)}.image-converter-card{padding:2px}.upload-area{border:2px dashed var(--accent-lavender);border-radius:var(--radius-md);text-align:center;cursor:pointer;transition:all var(--transition);color:var(--text-primary);box-shadow:var(--card-shadow);background:linear-gradient(135deg,#ffffffeb,#b5ead738);margin:8px 0;padding:16px 12px;font-size:.86rem;font-weight:700}.upload-area:hover,.upload-area.drag-over{border-color:var(--accent-mint);background:linear-gradient(135deg,#b5ead73d,#c7ceea2e);transform:translateY(-1px)}.upload-icon{margin-bottom:4px;font-size:2.05rem}.upload-options{flex-direction:column;gap:6px;margin-top:8px;display:flex}.upload-option{align-items:center;gap:6px;font-size:.78rem;display:flex}.upload-option label{color:var(--text-secondary)}.import-suggestion{border-radius:var(--radius-sm);color:#7a4b00;background:#fff8dccc;border:1px solid #ffb00047;margin-top:8px;padding:8px 10px;font-size:.76rem;line-height:1.45}.compact-select{border-radius:var(--radius-sm);min-width:0;color:var(--text-primary);background:#ffffffd1;border:1.5px solid #5d403724;flex:1;padding:4px 6px;font-size:.78rem}.compact-color-input{border-radius:var(--radius-sm);background:0 0;border:1.5px solid #5d403724;width:38px;height:24px;padding:2px}.mini-option-btn{border-radius:var(--radius-sm);background:var(--bg-cream);color:var(--text-secondary);white-space:nowrap;padding:4px 6px;font-size:.72rem;font-weight:700}.mini-option-btn:hover{color:var(--text-primary);background:var(--accent-mint)}.toggle-switch{width:36px;height:20px;display:inline-block;position:relative}.toggle-switch input{opacity:0;width:0;height:0}.toggle-slider{cursor:pointer;transition:all var(--transition);background:#ddd;border-radius:20px;position:absolute;inset:0}.toggle-slider:before{content:"";width:16px;height:16px;transition:all var(--transition);background:#fff;border-radius:50%;position:absolute;bottom:2px;left:2px;box-shadow:0 1px 3px #0003}.toggle-switch input:checked+.toggle-slider{background:var(--accent-mint)}.toggle-switch input:checked+.toggle-slider:before{transform:translate(16px)}.progress-bar{background:var(--bg-cream);border-radius:3px;width:100%;height:6px;margin:8px 0;overflow:hidden}.progress-fill{background:linear-gradient(90deg, var(--accent-mint), var(--accent-lavender));border-radius:3px;height:100%;transition:width .3s}.size-control{align-items:center;gap:6px;font-size:.82rem;display:flex}.size-input{border-radius:var(--radius-sm);text-align:center;background:var(--card-bg);width:52px;color:var(--text-primary);border:1.5px solid #5d403726;padding:4px 6px;font-size:.82rem}.size-input:focus{border-color:var(--accent-mint);outline:none}.export-scale{gap:4px;margin:8px 0;display:flex}.bom-preview-modes{flex-wrap:wrap;gap:4px;margin:8px 0;display:flex}.scale-btn{border-radius:var(--radius-sm);background:var(--bg-cream);color:var(--text-secondary);transition:all var(--transition);padding:4px 10px;font-size:.78rem;font-weight:600}.scale-btn.active{background:var(--accent-mint);color:var(--text-primary)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.cursor-pencil .bead-cell{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M4 20l4-1 11-11-3-3L5 16l-1 4z' fill='white' stroke='%235D4037' stroke-width='2' stroke-linejoin='round'/%3E%3C/svg%3E") 3 21,crosshair}.cursor-eraser .bead-cell{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M5 14l7-7a2 2 0 0 1 3 0l4 4a2 2 0 0 1 0 3l-5 5H9l-4-4a1 1 0 0 1 0-1z' fill='white' stroke='%235D4037' stroke-width='2' stroke-linejoin='round'/%3E%3C/svg%3E") 8 17,cell}.cursor-bucket .bead-cell{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M5 12l7-7 7 7-7 7a2 2 0 0 1-3 0l-4-4a2 2 0 0 1 0-3z' fill='white' stroke='%235D4037' stroke-width='2' stroke-linejoin='round'/%3E%3Cpath d='M19 15c1.3 1.5 2 2.6 2 3.4a2 2 0 0 1-4 0c0-.8.7-1.9 2-3.4z' fill='%23B5EAD7' stroke='%235D4037' stroke-width='2'/%3E%3C/svg%3E") 12 18,pointer}.cursor-eyedropper .bead-cell{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M14 5l5 5M6 18l1-4L17 4a2 2 0 0 1 3 3L10 17l-4 1z' fill='white' stroke='%235D4037' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 6 18,copy}.cursor-text .bead-cell{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M8 5h8M12 5v14M9 19h6' fill='none' stroke='%235D4037' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") 12 12,text}.cursor-select .bead-cell{cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M5 5h12v12H5z' fill='white' fill-opacity='.85' stroke='%235D4037' stroke-width='2' stroke-dasharray='3 2'/%3E%3Cpath d='M15 15l5 5' stroke='%235D4037' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") 6 6,crosshair}.cursor-select .bead-cell.selection-cell{cursor:move}.cursor-pan{cursor:grab!important}.cursor-pan:active{cursor:grabbing!important}.cursor-pan .bead-cell{cursor:inherit!important}.bead-cell.selection-cell{outline-offset:-2px;z-index:4;outline:2px solid #008cffd1}.bead-cell.selection-target{box-shadow:inset 0 0 0 2px #ffaa00f2}.text-editor-popover{z-index:200;border-radius:var(--radius-md);width:220px;box-shadow:var(--card-shadow-hover);background:#fffffff0;border:1px solid #5d403714;padding:10px;position:absolute;top:70px;left:236px}.text-editor-title{margin-bottom:6px;font-size:.82rem;font-weight:700}.text-editor-input{border-radius:var(--radius-sm);border:1.5px solid #5d403724;width:100%;margin-bottom:8px;padding:6px 8px;font-size:.86rem}.text-editor-row{color:var(--text-secondary);align-items:center;gap:6px;font-size:.78rem;display:flex}.text-editor-row input[type=number]{border-radius:var(--radius-sm);border:1.5px solid #5d403724;width:48px;padding:4px}.text-editor-actions{justify-content:flex-end;gap:6px;margin-top:10px;display:flex}.text-editor-actions button{border-radius:var(--radius-sm);background:var(--bg-cream);color:var(--text-secondary);padding:6px 10px;font-size:.78rem;font-weight:700}.text-editor-actions button.confirm{background:var(--accent-mint);color:var(--text-primary)}.selection-actions-popover{z-index:200;border-radius:var(--radius-md);box-shadow:var(--card-shadow-hover);background:#fffffff0;border:1px solid #5d403714;gap:6px;padding:8px;display:flex;position:absolute;top:70px;left:468px}.selection-actions-popover button{border-radius:var(--radius-sm);background:var(--bg-cream);color:var(--text-secondary);white-space:nowrap;padding:6px 8px;font-size:.76rem;font-weight:700}.selection-actions-popover button:hover:not(:disabled){background:var(--accent-mint);color:var(--text-primary)}.selection-actions-popover button:disabled{opacity:.36;cursor:default}@media (width<=720px){body{overflow:auto}#root{height:auto;min-height:100vh}.app-header{flex-wrap:wrap;justify-content:center;gap:8px;padding:8px 12px}.app-logo{justify-content:center;width:100%;font-size:1.1rem}.app-main{flex-direction:column;overflow:visible}.palette-panel,.bom-panel{border:0;width:100%;max-height:none;overflow:visible}.color-grid{flex:none;max-height:220px}.canvas-area{flex:none;min-height:72vh;padding:24px 0}.toolbar,.header-controls{max-width:100%;overflow-x:auto}.status-bar{flex-wrap:wrap;gap:8px;padding:6px 12px}.text-editor-popover{width:auto;position:fixed;top:92px;left:12px;right:12px}.selection-actions-popover{position:fixed;top:92px;left:12px;right:12px;overflow-x:auto}}
