body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}:root{--blur-factor: 4}#main{padding:20px;display:grid;grid-template:auto 1fr / 180px 1fr;gap:20px}#controls{justify-self:start}#controls label{display:block;padding:10px 0}#controls label span{display:block}#controls button{font-size:14px;padding:3px 10px}#stage{position:relative;outline:1px solid #000;-webkit-user-select:none;user-select:none;justify-self:start}#stage .point{position:absolute;width:11px;height:11px;margin:-5px 0 0 -5px;box-sizing:border-box;border:2px solid #fff;border-radius:50%;box-shadow:1px 1px 3px #000000b3;-webkit-user-select:none;user-select:none}#stage .point[data-selected]{width:15px;height:15px;margin:-7px 0 0 -7px;border-width:4px}#stage svg{pointer-events:none}#popup-color-picker{position:absolute}#project-link{grid-area:2 / 1 / 2 / 3}*{box-sizing:border-box;margin:0;padding:0}:root{--bg-primary: #ffffff;--bg-secondary: #f8f9fa;--bg-tertiary: #e9ecef;--text-primary: #212529;--text-secondary: #495057;--text-muted: #6c757d;--border-color: #dee2e6;--accent-primary: #0d6efd;--accent-secondary: #6c757d;--accent-danger: #dc3545;--shadow: rgba(0, 0, 0, .1);--shadow-lg: rgba(0, 0, 0, .15)}@media (prefers-color-scheme: dark){:root{--bg-primary: #0d1117;--bg-secondary: #161b22;--bg-tertiary: #21262d;--text-primary: #f0f6fc;--text-secondary: #c9d1d9;--text-muted: #8b949e;--border-color: #30363d;--accent-primary: #58a6ff;--accent-secondary: #8b949e;--accent-danger: #f85149;--shadow: rgba(0, 0, 0, .3);--shadow-lg: rgba(0, 0, 0, .4)}}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--bg-primary);color:var(--text-primary);line-height:1.6}.app{min-height:100vh;display:flex;flex-direction:column}.container{max-width:1200px;margin:0 auto;padding:0 20px}.app-header{background:var(--bg-secondary);border-bottom:1px solid var(--border-color);padding:20px 0;text-align:center}.app-title{font-size:2rem;font-weight:700;margin-bottom:6px;background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.app-subtitle{font-size:.85rem;color:var(--text-secondary);margin-bottom:0;max-width:800px;margin-left:auto;margin-right:auto}.app-main{flex:1;padding:30px 0}.demo-section{background:var(--bg-secondary);border-radius:12px;padding:24px;box-shadow:0 4px 12px var(--shadow);border:1px solid var(--border-color)}.demo-content{display:grid;grid-template-columns:1fr 380px;gap:32px;align-items:start}@media (max-width: 1024px){.demo-content{grid-template-columns:1fr;gap:30px}}.mesh-container{display:flex;flex-direction:column;align-items:center;gap:16px}.mesh-canvas{border:2px solid var(--border-color);border-radius:8px;box-shadow:0 2px 8px var(--shadow);background:var(--bg-primary)}.mesh-canvas [data-index]:hover{transform:translate(-50%,-50%) scale(1.05)!important;box-shadow:0 3px 10px #0003,0 0 0 1px #ffffffe6!important}.mesh-instructions{display:flex;gap:20px;flex-wrap:wrap;justify-content:center}.mesh-instructions p{font-size:.9rem;color:var(--text-secondary);text-align:center}.mesh-instructions strong{color:var(--text-primary)}.controls-panel{background:var(--bg-tertiary);border-radius:8px;padding:18px;border:1px solid var(--border-color)}.control-section{margin-bottom:20px}.control-section:last-child{margin-bottom:0}.control-title{font-size:1rem;font-weight:600;margin-bottom:12px;color:var(--text-primary)}.control-group{margin-bottom:14px}.control-group:last-child{margin-bottom:0}.control-label{display:block}.label-text{display:block;font-size:.85rem;font-weight:500;margin-bottom:6px;color:var(--text-secondary)}.color-input-wrapper{display:flex;align-items:center;gap:10px}.color-input{width:36px;height:28px;border:1px solid var(--border-color);border-radius:6px;cursor:pointer;background:none}.color-value{font-family:SF Mono,Monaco,Inconsolata,Roboto Mono,Consolas,Courier New,monospace;font-size:.85rem;color:var(--text-secondary);text-transform:uppercase}.range-input-wrapper{display:flex;align-items:center;gap:10px}.range-input{flex:1;height:4px;border-radius:2px;background:var(--border-color);outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.range-input::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--accent-primary);cursor:pointer;border:2px solid var(--bg-primary);box-shadow:0 2px 4px var(--shadow)}.range-input::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--accent-primary);cursor:pointer;border:2px solid var(--bg-primary);box-shadow:0 2px 4px var(--shadow)}.range-value{font-family:SF Mono,Monaco,Inconsolata,Roboto Mono,Consolas,Courier New,monospace;font-size:.8rem;color:var(--text-secondary);min-width:35px;text-align:right}.btn{padding:10px 16px;border:1px solid transparent;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;white-space:nowrap;line-height:1.2;text-align:center;-webkit-user-select:none;user-select:none;outline:none;position:relative;box-sizing:border-box}.btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px var(--shadow)}.btn:active{transform:translateY(0)}.btn:focus-visible{outline:2px solid var(--accent-primary);outline-offset:2px}.btn:disabled{opacity:.6;cursor:not-allowed;pointer-events:none}.btn:disabled:hover{transform:none;box-shadow:none}.btn svg{flex-shrink:0;width:16px;height:16px}.btn-primary{background:var(--accent-primary);border-color:var(--accent-primary);color:#fff}.btn-primary:hover:not(:disabled){background:color-mix(in srgb,var(--accent-primary) 85%,black);border-color:color-mix(in srgb,var(--accent-primary) 85%,black)}.btn-primary:active:not(:disabled){background:color-mix(in srgb,var(--accent-primary) 80%,black);border-color:color-mix(in srgb,var(--accent-primary) 80%,black)}.btn-secondary{background:var(--bg-primary);border-color:var(--border-color);color:var(--text-primary)}.btn-secondary:hover:not(:disabled){background:var(--bg-tertiary);border-color:var(--accent-primary);color:var(--text-primary)}.btn-secondary:active:not(:disabled){background:color-mix(in srgb,var(--bg-tertiary) 90%,var(--accent-primary))}.btn-danger{background:var(--accent-danger);border-color:var(--accent-danger);color:#fff}.btn-danger:hover:not(:disabled){background:color-mix(in srgb,var(--accent-danger) 85%,black);border-color:color-mix(in srgb,var(--accent-danger) 85%,black)}.btn-danger:active:not(:disabled){background:color-mix(in srgb,var(--accent-danger) 80%,black);border-color:color-mix(in srgb,var(--accent-danger) 80%,black)}.btn-danger:disabled{background:var(--text-muted);border-color:var(--text-muted);color:#fff}.export-actions{display:flex;gap:12px;justify-content:stretch;margin-bottom:16px;flex-wrap:wrap}.export-actions .btn{flex:1;min-width:0}.help-text{display:block;font-size:.75rem;color:var(--text-muted);margin-top:6px}.app-footer{background:var(--bg-secondary);border-top:1px solid var(--border-color);padding:24px 0}.footer-content{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:20px}.footer-links{display:flex;gap:24px}.footer-links a{color:var(--accent-primary);text-decoration:none;font-size:.9rem;font-weight:500;transition:all .2s ease}.footer-links a:hover{color:var(--accent-primary);text-decoration:underline}.footer-author{font-size:.9rem;color:var(--text-secondary)}.footer-author a{color:var(--accent-primary);text-decoration:none;font-weight:500;transition:all .2s ease}.footer-author a:hover{text-decoration:underline}@media (max-width: 768px){.app-header{padding:16px 0}.app-title{font-size:1.6rem;margin-bottom:4px}.app-subtitle{font-size:.8rem;margin-bottom:0}.app-main{padding:20px 0}.demo-section{padding:16px}.demo-content{grid-template-columns:1fr;gap:20px}.footer-content{flex-direction:column;text-align:center}.mesh-instructions{flex-direction:column;gap:8px}}
