:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root[data-theme=dark]{--bg-primary: #2a2a2a;--bg-secondary: #333;--bg-tertiary: #1a1a1a;--bg-hover: #3a3a3a;--bg-active: #222;--border-primary: #444;--border-secondary: #555;--text-primary: #ffffff;--text-secondary: #ccc;--text-tertiary: #888;--accent-primary: #4a9eff;--accent-hover: #6bb3ff;--accent-active: #357abd;--scrollbar-track: #1a1a1a;--scrollbar-thumb: #444;--scrollbar-thumb-hover: #555;--overlay-bg: rgba(40, 40, 40, .8);--overlay-hover: rgba(60, 60, 60, .9);--overlay-active: rgba(30, 30, 30, .9);--dropdown-bg: rgba(30, 30, 30, .95);--dropdown-border: rgba(255, 255, 255, .1)}:root[data-theme=light]{--bg-primary: #f5f5f5;--bg-secondary: #ffffff;--bg-tertiary: #e8e8e8;--bg-hover: #e0e0e0;--bg-active: #d0d0d0;--border-primary: #d0d0d0;--border-secondary: #b0b0b0;--text-primary: #1a1a1a;--text-secondary: #333;--text-tertiary: #666;--accent-primary: #2563eb;--accent-hover: #1d4ed8;--accent-active: #1e40af;--scrollbar-track: #e8e8e8;--scrollbar-thumb: #c0c0c0;--scrollbar-thumb-hover: #a0a0a0;--overlay-bg: rgba(255, 255, 255, .9);--overlay-hover: rgba(240, 240, 240, .95);--overlay-active: rgba(220, 220, 220, .95);--dropdown-bg: rgba(255, 255, 255, .98);--dropdown-border: rgba(0, 0, 0, .1)}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;cursor:pointer;transition:border-color .25s}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}.control-panel{width:480px;height:100vh;background:var(--bg-primary);color:var(--text-primary);padding:8px 16px;overflow-y:auto;box-shadow:0 0 16px #0000001a}@media (orientation: portrait){.control-panel{width:100%;height:50vh;position:fixed;bottom:0;left:0;right:0}}.tabs-container{display:flex;flex-direction:column;height:100%}.tabs-header{display:flex;gap:4px;margin-bottom:4px;border-bottom:2px solid var(--border-primary);overflow-x:auto;flex-shrink:0;padding:4px 0}.tabs-header::-webkit-scrollbar{height:6px}.tabs-header::-webkit-scrollbar-track{background:var(--scrollbar-track)}.tabs-header::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:2px}.tab-button{padding:12px 20px;border:none;background:transparent;color:var(--text-tertiary);font-size:18px;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap;flex-shrink:0;position:relative;display:flex;flex-direction:column;align-items:center;gap:4px}.tab-button:after{content:"";width:80%;height:3px;border-radius:2px;background:transparent;transition:background .2s}.tab-button:hover{color:var(--text-secondary);background:#4a90e21a}.tab-button.active{color:var(--accent-primary);background:#4a90e226}.tab-button.active:after{background:var(--accent-primary)}.control-panel::-webkit-scrollbar{width:8px}.control-panel::-webkit-scrollbar-track{background:var(--scrollbar-track)}.control-panel::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:4px}.control-panel::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}.tab-content{flex:1;overflow-y:auto;overflow-x:visible;padding-right:5px;padding-top:16px;padding-bottom:16px}.tab-content::-webkit-scrollbar{width:6px}.tab-content::-webkit-scrollbar-track{background:var(--scrollbar-track)}.tab-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:3px}.tab-content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}.add-item-button{width:100%;padding:12px;margin-bottom:15px;border:2px dashed var(--border-primary);border-radius:4px;background:var(--bg-primary);color:var(--accent-primary);font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.add-item-button:hover{background:var(--bg-secondary);border-color:var(--accent-primary)}.array-item{margin-bottom:12px;border:1px solid var(--border-primary);border-radius:6px;background:var(--bg-primary);overflow:hidden}.array-item-header{display:flex;justify-content:space-between;align-items:center;padding:12px 15px;cursor:pointer;background:var(--bg-secondary);transition:background .2s;gap:10px}.array-item-header:hover{background:var(--bg-hover)}.array-item-header>span:not(.toggle-icon){font-size:14px;font-weight:500;color:var(--text-secondary);flex:1}.array-item-actions{display:flex;align-items:center;gap:10px}.name-edit-input{flex:1;padding:6px 10px;border:2px solid var(--accent-primary);border-radius:4px;background:var(--bg-active);color:var(--text-primary);font-size:14px;font-weight:500;font-family:inherit;outline:none}.name-edit-input:focus{border-color:var(--accent-hover)}.edit-name-button{padding:6px;border:1px solid var(--accent-primary);border-radius:3px;background:transparent;color:var(--accent-primary);cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}.edit-name-button .icon{width:16px;height:16px}.edit-name-button:hover{background:var(--accent-primary);color:#fff}.hide-item-button{padding:6px;border:1px solid #ffa500;border-radius:3px;background:transparent;color:orange;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}.hide-item-button .icon{width:16px;height:16px}.hide-item-button:hover{background:orange;color:#fff}.remove-item-button{padding:6px;border:1px solid #ff4444;border-radius:3px;background:transparent;color:#f44;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}.remove-item-button .icon{width:16px;height:16px}.remove-item-button:hover{background:#f44;color:#fff}.array-item-content{padding:15px;border-top:1px solid var(--border-primary)}.hour-selector{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.hour-selector button{padding:10px;border:2px solid var(--border-primary);border-radius:4px;background:var(--bg-primary);color:var(--text-secondary);font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.hour-selector button:hover{background:var(--bg-hover);border-color:var(--border-secondary)}.hour-selector button.active{background:var(--accent-primary);border-color:var(--accent-primary);color:#fff;font-weight:600}.point-array-control{margin-bottom:20px}.toggle-icon{color:var(--text-tertiary);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-right:4px}.toggle-icon .icon{width:16px;height:16px}.add-item-container{position:relative;z-index:10;overflow:visible}.add-item-container.dropdown-active{z-index:2000;overflow:visible}.type-dropdown{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:var(--bg-secondary);border:2px solid var(--accent-primary);border-radius:6px;overflow:hidden;box-shadow:0 4px 12px #0000004d;z-index:1000;animation:dropdownSlide .2s ease-out}@keyframes dropdownSlide{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.type-dropdown-item{width:100%;padding:12px 15px;border:none;border-bottom:1px solid var(--border-primary);background:var(--bg-secondary);color:var(--text-primary);font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;text-align:left;border-radius:0}.type-dropdown-item:last-child{border-bottom:none}.type-dropdown-item:hover{background:var(--accent-primary);color:#fff}.type-dropdown-item:active{background:var(--accent-active)}.add-item-buttons-row{display:flex;gap:10px;margin-bottom:15px}.add-item-buttons-row .add-item-container{flex:1;margin-bottom:0}.add-item-buttons-row .add-item-button{margin-bottom:0}.preset-button{display:flex;align-items:center;justify-content:center;gap:8px;color:#9333ea}.preset-button:hover{border-color:#9333ea}.preset-button .icon{width:18px;height:18px}.preset-dropdown{max-height:400px;overflow-y:auto}.preset-dropdown::-webkit-scrollbar{width:6px}.preset-dropdown::-webkit-scrollbar-track{background:var(--scrollbar-track)}.preset-dropdown::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:3px}.preset-item{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:14px 15px}.preset-name{font-weight:600;font-size:14px}.preset-description{font-size:12px;font-weight:400;opacity:.8;line-height:1.3}.preset-item:hover .preset-description{opacity:1}.control-group{margin-bottom:30px}.control-group:last-child{margin-bottom:0}.control-group label{display:block;margin-bottom:8px;font-size:14px;color:var(--text-secondary);font-weight:700}.control-description{font-size:12px;color:var(--text-tertiary);margin-bottom:8px}.range-label-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.range-label-row label{margin-bottom:0}.range-value{font-size:14px;color:var(--accent-primary);font-weight:600;font-variant-numeric:tabular-nums}.control-group input[type=range]{width:100%;height:6px;border-radius:3px;background:var(--border-primary);outline:none;-webkit-appearance:none}.control-group input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:var(--accent-primary);cursor:pointer;transition:background .2s}.control-group input[type=range]::-webkit-slider-thumb:hover{background:var(--accent-hover)}.control-group input[type=range]::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:var(--accent-primary);cursor:pointer;border:none;transition:background .2s}.control-group input[type=range]::-moz-range-thumb:hover{background:var(--accent-hover)}.color-label-row{display:flex;justify-content:space-between;align-items:center;gap:12px}.color-label-row label{margin-bottom:0;flex-shrink:0}.color-label-row input[type=color]{width:60%;flex-shrink:0}.control-group input[type=color]{height:40px;border:2px solid var(--border-primary);border-radius:4px;cursor:pointer;background:var(--bg-active)}.control-group input[type=text]{width:100%;padding:10px;border:2px solid var(--border-primary);border-radius:4px;background:var(--bg-active);color:var(--text-primary);font-size:14px;font-family:inherit;transition:border-color .2s}.control-group input[type=text]:focus{outline:none;border-color:var(--accent-primary)}.control-group input[type=text]::placeholder{color:var(--text-tertiary)}.select-label-row{display:flex;justify-content:space-between;align-items:center;gap:12px}.select-label-row label{margin-bottom:0;flex-shrink:0}.select-label-row select{width:60%;flex-shrink:0}.control-group select{padding:10px;border:1px solid var(--border-primary);border-radius:4px;background:var(--bg-secondary);color:var(--text-primary);font-size:14px;font-family:inherit;cursor:pointer}.checkbox-label{display:flex!important;justify-content:space-between;align-items:center;width:100%;margin-bottom:0!important;cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox-label input[type=checkbox]{position:relative;width:44px;height:24px;cursor:pointer;appearance:none;-webkit-appearance:none;background:var(--border-primary);border-radius:12px;transition:background .3s;flex-shrink:0;outline:none}.checkbox-label input[type=checkbox]:before{content:"";position:absolute;width:18px;height:18px;border-radius:50%;background:#fff;top:3px;left:3px;transition:transform .3s,background .3s;box-shadow:0 2px 4px #0003}.checkbox-label input[type=checkbox]:checked{background:var(--accent-primary)}.checkbox-label input[type=checkbox]:checked:before{transform:translate(20px)}.checkbox-label input[type=checkbox]:hover{opacity:.9}.checkbox-label span{font-size:14px;color:var(--text-secondary);font-weight:700;flex:1}.button-group{display:flex;gap:8px;flex-wrap:wrap}.button-group button{flex:1;min-width:80px;padding:10px 15px;border:2px solid var(--border-primary);border-radius:4px;background:var(--bg-primary);color:var(--text-secondary);font-size:14px;cursor:pointer;transition:all .2s}.button-group button:hover{background:var(--bg-hover);border-color:var(--border-secondary)}.button-group button.active{background:var(--accent-primary);border-color:var(--accent-primary);color:#fff;font-weight:600}.button-group button:disabled{cursor:not-allowed;opacity:.6}.image-label-row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px}.image-label-row label{margin-bottom:0;flex-shrink:0}.image-file-input{flex-shrink:0;font-size:14px;cursor:pointer}.image-preview{margin-top:8px;display:flex;align-items:flex-start;gap:12px}.image-preview img{flex-shrink:0}.clear-image-button{padding:8px 12px;font-size:12px;border:2px solid var(--border-primary);border-radius:4px;background:var(--bg-primary);color:var(--text-secondary);cursor:pointer;transition:all .2s;white-space:nowrap;flex-shrink:0}.clear-image-button:hover{background:var(--bg-hover);border-color:var(--border-secondary)}.point-graph-editor{display:flex;flex-direction:column;gap:12px;padding:12px;background:var(--bg-tertiary);border-radius:8px;border:1px solid var(--border-primary)}.graph-description{margin:0;font-size:13px;color:var(--text-tertiary);line-height:1.4}.point-graph-canvas{width:100%;height:600px;border:2px solid var(--border-primary);border-radius:4px;cursor:crosshair;background:var(--bg-primary)}.point-graph-canvas:active{cursor:grabbing}.graph-controls{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.graph-button{padding:6px 12px;background:var(--bg-primary);border:2px solid var(--accent-primary);border-radius:4px;color:var(--accent-primary);font-size:13px;font-weight:500;cursor:pointer;transition:all .2s}.graph-button:hover:not(:disabled){background:#4a9eff1a;border-color:var(--accent-hover)}.graph-button:active:not(:disabled){background:#4a9eff33}.graph-button:disabled{opacity:.4;cursor:not-allowed}.graph-button-cutout{border-color:#b366ff;color:#b366ff}.graph-button-cutout:hover:not(:disabled){background:#b366ff1a;border-color:#c488ff}.graph-button-delete{border-color:#f44;color:#f44}.graph-button-delete:hover:not(:disabled){background:#ff44441a;border-color:#f66}.point-count{margin-left:auto;font-size:13px;color:var(--text-tertiary);font-weight:500}.point-editor{padding:12px;background:var(--bg-tertiary);border-radius:4px;border:1px solid var(--border-primary)}.point-editor-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;gap:10px}.point-editor h4{margin:0;color:var(--text-secondary);font-size:14px;font-weight:600}.point-editor-controls{display:flex;flex-direction:column;gap:0}.point-editor-controls .control-group{margin-bottom:16px}.point-editor-controls .control-group:last-child{margin-bottom:0}.graph-instructions{padding:10px;background:var(--bg-tertiary);border-radius:4px;border:1px solid var(--border-primary)}.graph-instructions strong{display:block;margin-bottom:6px;color:var(--text-secondary);font-size:13px}.graph-instructions ul{margin:0;padding-left:20px;list-style-type:disc}.graph-instructions li{font-size:12px;color:var(--text-tertiary);line-height:1.6;margin-bottom:2px}.graph-instructions li:last-child{margin-bottom:0}.bevel-control{margin:8px 0}.bevel-control-header{margin-bottom:8px}.bevel-control-header .checkbox-label{font-weight:500;font-size:14px}.bevel-control-body{margin-left:16px;padding-left:16px;border-left:2px solid var(--border-primary);display:flex;flex-direction:column;gap:8px;margin-top:8px}.bevel-control-item{display:flex;flex-direction:column;gap:4px}.position-control{margin:8px 0}.position-control-header{margin-bottom:8px}.position-control-description{font-size:12px;color:var(--text-tertiary);margin-top:4px;margin-left:0;line-height:1.4}.position-control-body{margin-left:0;padding-left:16px;border-left:2px solid var(--border-primary);display:flex;flex-direction:column;gap:8px;margin-top:8px}.position-control-item{display:flex;flex-direction:column;gap:4px}*{margin:0;padding:0;box-sizing:border-box}body{overflow:hidden}#root{width:100vw;height:100vh}.canvas-overlay-buttons{position:absolute;top:20px;right:20px;display:flex;flex-direction:column;align-items:flex-end;gap:10px;z-index:10}.overlay-button{min-width:48px;width:48px;height:48px;padding:0;background:var(--overlay-bg);color:var(--text-primary);border:none;border-radius:24px;cursor:pointer;transition:width .3s ease,background .2s ease,padding .3s ease;display:flex;align-items:center;justify-content:flex-end;box-shadow:0 8px 16px #0000001a;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);overflow:hidden;white-space:nowrap;flex-shrink:0}.overlay-button .icon{width:24px;height:24px;flex-shrink:0;margin:12px}.overlay-button .button-label{opacity:0;max-width:0;margin-right:0;font-size:14px;font-weight:500;transition:opacity .5s ease,max-width .5s ease,margin .5s ease;overflow:hidden}.overlay-button:hover{width:auto;padding-left:12px;background:var(--overlay-hover)}.overlay-button:hover .icon{margin-left:0}.overlay-button:hover .button-label{opacity:1;max-width:200px;margin-right:12px}.overlay-button:active{background:var(--overlay-active)}.overlay-button.light-on .icon{color:#ffb700}.overlay-button.light-off .icon{color:#1e90ff}.config-actions-divider{height:1px;background:#fff3;margin:5px 0}.overlay-button.config-action-button .icon{color:#4a90e2}.overlay-button.config-action-button.export-button .icon{color:#28a745}.overlay-button.config-action-button.clear-button .icon{color:#dc3545}.overlay-button.time-control-button.stopped .icon{color:#28a745}.overlay-button.time-control-button.running .icon{color:#ffc107}.overlay-button.config-action-button.preset-load-button .icon{color:#9333ea}@media (orientation: portrait){.app-container{flex-direction:column!important}.canvas-container{flex:none!important;height:50vh!important;width:100%!important;min-width:100%!important}}
