:root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.4;font-weight:400;color-scheme:light;color:#2c3e50;background-color:#f5f5f5;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;min-width:320px;min-height:100vh}:root{--color-bg: #f5f5f5;--color-surface: #ffffff;--color-border: #e0e0e0;--color-text: #2c3e50;--color-text-secondary: #7f8c8d;--color-primary: #3498db;--color-primary-hover: #2980b9;--color-accent: #e74c3c;--color-success: #27ae60;--color-toolbar-bg: #2c3e50;--color-toolbar-text: #ecf0f1;--color-sidebar-bg: #ffffff;--font-mono: "Fira Code", "JetBrains Mono", "Consolas", monospace;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--radius: 4px;--shadow: 0 1px 3px rgba(0, 0, 0, .12);--shadow-md: 0 4px 6px rgba(0, 0, 0, .1)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;width:100%;overflow:hidden}body{font-family:var(--font-sans);font-size:13px;color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased}.app{display:flex;flex-direction:column;height:100vh;width:100vw}.app__content{display:flex;flex:1;overflow:hidden}.app__sidebar{width:320px;min-width:280px;max-width:400px;background:var(--color-sidebar-bg);border-right:1px solid var(--color-border);overflow-y:auto;flex-shrink:0}.app__main{flex:1;overflow:hidden;position:relative}.app__preview{width:100%;height:100%;padding:12px}.app__preview--3d{padding:0}.app__editor{width:100%;height:100%}.toolbar{display:flex;align-items:center;gap:16px;padding:0 16px;height:44px;background:var(--color-toolbar-bg);color:var(--color-toolbar-text);border-bottom:1px solid rgba(0,0,0,.2);flex-shrink:0}.toolbar__brand{margin-right:0}.toolbar__logo{font-size:15px;font-weight:700;letter-spacing:.5px}.toolbar__select{padding:4px 8px;border:1px solid rgba(255,255,255,.25);border-radius:var(--radius);background:#ffffff1a;color:var(--color-toolbar-text);font-size:12px;font-family:var(--font-sans);cursor:pointer;transition:all .15s;min-width:160px}.toolbar__select:hover{background:#ffffff2e;border-color:#fff6}.toolbar__select:focus{outline:none;border-color:var(--color-primary)}.toolbar__select option{background:var(--color-toolbar-bg, #2c3e50);color:var(--color-toolbar-text)}.toolbar__section{display:flex;align-items:center;gap:6px}.toolbar__btn{padding:5px 12px;border:1px solid rgba(255,255,255,.2);border-radius:var(--radius);background:transparent;color:var(--color-toolbar-text);font-size:12px;cursor:pointer;transition:all .15s;font-family:var(--font-sans)}.toolbar__btn:hover{background:#ffffff1a}.toolbar__btn--active,.toolbar__btn--primary{background:var(--color-primary);border-color:var(--color-primary)}.toolbar__btn--primary:hover{background:var(--color-primary-hover)}.toolbar__btn:disabled{opacity:.4;cursor:not-allowed}.toolbar__toggle{display:flex;align-items:center;gap:4px;font-size:11px;cursor:pointer;opacity:.8}.toolbar__toggle:hover{opacity:1}.toolbar__toggle input[type=checkbox]{width:14px;height:14px}.toolbar__export{margin-left:auto}.parameter-panel{padding:16px}.parameter-panel__header{display:flex;align-items:baseline;gap:8px;margin-bottom:16px;padding-bottom:12px;border-bottom:2px solid var(--color-primary)}.parameter-panel__title{font-size:16px;font-weight:600;color:var(--color-text)}.parameter-panel__fefco{font-size:11px;color:var(--color-text-secondary);background:#f0f0f0;padding:2px 8px;border-radius:10px;font-family:var(--font-mono)}.parameter-panel__section{margin-bottom:16px}.parameter-panel__section-title{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-secondary);margin-bottom:10px}.parameter-panel__toggle{display:flex;align-items:center;gap:6px;width:100%;padding:8px 12px;border:1px solid var(--color-border);border-radius:var(--radius);background:#fafafa;color:var(--color-text);font-size:13px;cursor:pointer;font-family:var(--font-sans);transition:background .15s}.parameter-panel__toggle:hover{background:#f0f0f0}.parameter-panel__advanced{margin-top:10px;padding-top:10px;border-top:1px solid var(--color-border)}.parameter-panel__output{background:#f9f9f9;padding:12px;border-radius:var(--radius);border:1px solid var(--color-border)}.parameter-panel__table{width:100%;font-size:12px;border-collapse:collapse;margin-bottom:10px}.parameter-panel__table th,.parameter-panel__table td{padding:4px 8px;text-align:right;font-family:var(--font-mono)}.parameter-panel__table th{text-align:center;font-weight:600;color:var(--color-text-secondary);border-bottom:1px solid var(--color-border)}.parameter-panel__table td:first-child{text-align:left;font-family:var(--font-sans);font-weight:500}.parameter-panel__stats{display:flex;gap:12px;font-size:11px;color:var(--color-text-secondary);font-family:var(--font-mono)}.parameter-panel__actions{margin-top:16px;display:flex;gap:8px}.parameter-panel__btn{padding:8px 16px;border-radius:var(--radius);font-size:12px;cursor:pointer;border:1px solid var(--color-border);font-family:var(--font-sans);transition:all .15s}.parameter-panel__btn--secondary{background:#f8f8f8;color:var(--color-text)}.parameter-panel__btn--secondary:hover{background:#e8e8e8}.parameter-panel__btn--primary{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.parameter-panel__btn--primary:hover{background:var(--color-primary-hover)}.dimension-input{margin-bottom:12px}.dimension-input__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.dimension-input__label{font-size:12px;font-weight:500;color:var(--color-text)}.dimension-input__value-group{display:flex;align-items:center;gap:4px}.dimension-input__number{width:72px;padding:4px 6px;border:1px solid var(--color-border);border-radius:var(--radius);font-size:12px;font-family:var(--font-mono);text-align:right;color:var(--color-text);background:var(--color-surface)}.dimension-input__number:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #3498db33}.dimension-input__unit{font-size:11px;color:var(--color-text-secondary);font-family:var(--font-mono)}.dimension-input__slider{width:100%;height:4px;margin:4px 0 2px;accent-color:var(--color-primary)}.dimension-input__range{display:flex;justify-content:space-between;font-size:10px;color:#bbb;font-family:var(--font-mono)}.material-selector{margin-bottom:8px}.material-selector__label{display:block;font-size:12px;font-weight:500;margin-bottom:6px}.material-selector__select{width:100%;padding:6px 8px;border:1px solid var(--color-border);border-radius:var(--radius);font-size:12px;font-family:var(--font-sans);color:var(--color-text);background:var(--color-surface);margin-bottom:8px}.material-selector__thickness{display:flex;flex-direction:column;gap:4px}.material-selector__thickness label{font-size:11px;color:var(--color-text-secondary);font-family:var(--font-mono)}.material-selector__thickness input[type=range]{width:100%;accent-color:var(--color-primary)}.three-d-preview{width:100%;height:100%;display:flex;flex-direction:column}.three-d-preview__controls{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#34495e;border-bottom:1px solid rgba(0,0,0,.2)}.three-d-preview__btn{padding:4px 10px;border:1px solid rgba(255,255,255,.2);border-radius:var(--radius);background:transparent;color:#ecf0f1;font-size:11px;cursor:pointer;font-family:var(--font-sans);transition:background .15s}.three-d-preview__btn:hover{background:#ffffff1a}.three-d-preview__label{font-size:11px;color:#ecf0f1;font-family:var(--font-mono);min-width:36px;text-align:right}.three-d-preview__slider{flex:1;accent-color:var(--color-primary)}.template-editor{display:flex;height:100%}.template-editor--empty{display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)}.template-editor__tree{width:220px;background:#f8f9fa;border-right:1px solid var(--color-border);overflow-y:auto;padding:12px;flex-shrink:0}.template-editor__tree h3{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-secondary);margin-bottom:12px}.template-editor__tree-section{margin-bottom:12px}.template-editor__tree-header{display:flex;align-items:center;justify-content:space-between;font-size:11px;font-weight:600;color:var(--color-text);padding:4px 0;border-bottom:1px solid var(--color-border);margin-bottom:4px}.template-editor__tree-add-btn{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;border:1px solid var(--color-border);border-radius:3px;background:var(--color-bg);color:var(--color-text);font-size:13px;font-weight:600;cursor:pointer;line-height:1}.template-editor__tree-add-btn:hover{background:#d5f5e3;border-color:#27ae60;color:#27ae60}.template-editor__add-param-form{display:flex;flex-direction:column;gap:4px;padding:6px 8px;margin-bottom:4px;background:#f0f4f8;border-radius:4px;border:1px solid var(--color-border)}.template-editor__add-param-input{width:100%;padding:4px 6px;font-size:11px;font-family:var(--font-mono, monospace);border:1px solid var(--color-border);border-radius:3px;background:var(--color-bg);color:var(--color-text);box-sizing:border-box}.template-editor__add-param-input:focus{outline:none;border-color:#3498db;box-shadow:0 0 0 1px #3498db33}.template-editor__add-param-error{font-size:10px;color:#e74c3c;padding:0 2px}.template-editor__add-param-actions{display:flex;gap:4px}.template-editor__add-param-btn{flex:1;padding:3px 8px;font-size:11px;font-family:var(--font-sans);border:1px solid var(--color-border);border-radius:3px;cursor:pointer}.template-editor__add-param-btn--confirm{background:#27ae60;color:#fff;border-color:#27ae60}.template-editor__add-param-btn--confirm:hover{background:#219a52}.template-editor__add-param-btn--cancel{background:var(--color-bg);color:var(--color-text)}.template-editor__add-param-btn--cancel:hover{background:#e8ecef}.template-editor__tree-item{display:flex;align-items:center;gap:6px;padding:3px 8px;font-size:12px;border-radius:3px;cursor:default;width:100%;text-align:left;border:none;background:none;font-family:var(--font-sans);color:var(--color-text)}button.template-editor__tree-item{cursor:pointer}button.template-editor__tree-item:hover{background:#e8ecef}.template-editor__tree-item--selected{background:#d5f5e3}.template-editor__tree-icon{font-size:11px;width:14px;text-align:center;flex-shrink:0}.template-editor__tree-label{font-size:10px;color:var(--color-text-secondary);margin-left:auto}.template-editor__tree-meta{font-size:10px;color:var(--color-text-secondary);margin-left:auto;font-family:var(--font-mono)}.template-editor__canvas{flex:1;display:flex;flex-direction:column}.template-editor__canvas-area{flex:1;overflow:hidden;position:relative;background:#fafafa}.face-properties{display:flex;flex-direction:column;gap:8px}.face-properties__field{display:flex;flex-direction:column;gap:3px}.face-properties__field label{font-size:10px;font-weight:600;text-transform:uppercase;color:var(--color-text-secondary)}.face-properties__field input[type=text],.face-properties__field input[type=number]{padding:4px 6px;border:1px solid var(--color-border);border-radius:3px;font-size:12px;font-family:var(--font-mono);background:var(--color-surface);color:var(--color-text)}.face-properties__computed{font-size:10px;color:var(--color-primary);font-family:var(--font-mono)}.face-properties__path{font-family:var(--font-mono);font-size:10px;background:#f0f0f0;padding:6px;border-radius:3px;max-height:120px;overflow-y:auto}.face-properties__path-cmd{padding:1px 0;color:var(--color-text-secondary)}.editor-canvas{width:100%;height:100%;display:block;background:#fafafa;outline:none}.editor-canvas--empty{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--color-text-secondary);font-size:14px}.editor-canvas__face-group{cursor:pointer}.editor-canvas__face{transition:fill .1s}.editor-canvas__face-group:hover .editor-canvas__face{fill:#3498db1a}.editor-canvas__fold{pointer-events:stroke}.editor-canvas__fold:hover{stroke-opacity:1}.editor-canvas__hole{pointer-events:fill}.editor-toolbar{display:flex;align-items:center;gap:4px;padding:4px 8px;background:#f0f0f0;border-bottom:1px solid var(--color-border);flex-shrink:0;flex-wrap:wrap}.editor-toolbar__section{display:flex;align-items:center;gap:4px}.editor-toolbar__section-label{font-size:10px;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.3px;margin-right:2px}.editor-toolbar__separator{width:1px;height:20px;background:var(--color-border);margin:0 4px}.editor-toolbar__btn{padding:3px 8px;border:1px solid var(--color-border);border-radius:3px;background:#fff;color:var(--color-text);font-size:11px;cursor:pointer;font-family:var(--font-sans);transition:all .12s;line-height:1.4}.editor-toolbar__btn:hover{background:#e8ecef;border-color:#ccc}.editor-toolbar__btn--active{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.editor-toolbar__btn--active:hover{background:var(--color-primary-hover)}.editor-toolbar__btn--secondary{background:#f8f8f8;font-weight:500}.editor-toolbar__btn--secondary:hover{background:#e0e0e0}.editor-toolbar__toggle{display:flex;align-items:center;gap:3px;font-size:10px;color:var(--color-text);cursor:pointer}.editor-toolbar__toggle input[type=checkbox]{width:12px;height:12px;margin:0}.editor-toolbar__zoom-label{font-size:10px;font-family:var(--font-mono);color:var(--color-text-secondary);min-width:36px;text-align:center}.properties-panel{width:260px;background:#f8f9fa;border-left:1px solid var(--color-border);overflow-y:auto;padding:12px;flex-shrink:0}.properties-panel h3{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--color-text-secondary);margin-bottom:12px}.properties-panel__empty{font-size:12px;color:var(--color-text-secondary);text-align:center;padding:24px 0}.properties-panel__error{font-size:12px;color:var(--color-accent);padding:8px}.properties-panel__content{display:flex;flex-direction:column;gap:6px}.properties-panel__type-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;background:#d5f5e3;color:#27ae60;align-self:flex-start;margin-bottom:4px}.properties-panel__type-badge--fold{background:#fdebd0;color:#e67e22}.properties-panel__type-badge--hole{background:#fadbd8;color:#e74c3c}.properties-panel__type-badge--param{background:#d4efdf;color:#1a5276}.properties-panel__field{display:flex;flex-direction:column;gap:2px}.properties-panel__field--row{flex-direction:row;align-items:center}.properties-panel__field-label{font-size:10px;font-weight:600;text-transform:uppercase;color:var(--color-text-secondary)}.properties-panel__field-input{padding:3px 6px;border:1px solid var(--color-border);border-radius:3px;font-size:12px;font-family:var(--font-sans);background:#fff;color:var(--color-text);transition:border-color .15s}.properties-panel__field-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #3498db26}.properties-panel__field-input--expr{font-family:var(--font-mono);font-size:11px;background:#fffef5}.properties-panel__field-input--expr:focus{background:#fff}.properties-panel__field-computed{font-size:10px;color:var(--color-primary);font-family:var(--font-mono)}.properties-panel__field-value-static{font-size:12px;font-family:var(--font-mono);color:var(--color-text);padding:3px 0}.properties-panel__field-select{padding:3px 6px;border:1px solid var(--color-border);border-radius:3px;font-size:12px;font-family:var(--font-sans);background:#fff;color:var(--color-text)}.properties-panel__checkbox-label{display:flex;align-items:center;gap:6px;font-size:12px;cursor:pointer}.properties-panel__checkbox-label input[type=checkbox]{width:14px;height:14px}.properties-panel__section{margin-top:8px;padding-top:8px;border-top:1px solid var(--color-border)}.properties-panel__section-header{font-size:10px;font-weight:600;text-transform:uppercase;color:var(--color-text-secondary);margin-bottom:6px}.properties-panel__path-list{display:flex;flex-direction:column;gap:3px;max-height:200px;overflow-y:auto}.properties-panel__path-cmd{display:flex;align-items:center;gap:3px;padding:2px 0}.properties-panel__path-cmd-type{font-size:11px;font-weight:700;font-family:var(--font-mono);color:var(--color-primary);width:14px;flex-shrink:0}.properties-panel__path-cmd-close{font-size:10px;color:var(--color-text-secondary);font-style:italic}.properties-panel__path-input{flex:1;min-width:0;padding:2px 4px;border:1px solid #e0e0e0;border-radius:2px;font-size:10px;font-family:var(--font-mono);color:var(--color-text);background:#fff}.properties-panel__path-input:focus{outline:none;border-color:var(--color-primary)}.properties-panel__path-input--small{max-width:50px}.properties-panel__delete-btn{margin-top:12px;padding:6px 12px;border:1px solid #e74c3c;border-radius:3px;background:#fff;color:#e74c3c;font-size:11px;cursor:pointer;font-family:var(--font-sans);transition:all .15s}.properties-panel__delete-btn:hover{background:#e74c3c;color:#fff}.editor-toolbar__btn--small{padding:2px 6px;font-size:10px;min-width:32px;line-height:1.3}.properties-panel__path-cmd-header{display:flex;align-items:center;gap:4px;margin-bottom:2px}.properties-panel__path-cmd-type-select{width:36px;padding:1px 2px;border:1px solid var(--color-border);border-radius:2px;background:#fff;color:var(--color-primary);font-size:11px;font-weight:600;font-family:var(--font-mono);cursor:pointer}.properties-panel__path-cmd-type-select:hover{border-color:var(--color-primary)}.properties-panel__path-cmd-actions{display:flex;align-items:center;gap:2px;margin-left:auto}.properties-panel__path-cmd-btn{padding:1px 4px;border:1px solid var(--color-border);border-radius:2px;background:#f8f8f8;color:var(--color-text);font-size:10px;font-family:var(--font-mono);cursor:pointer;line-height:1.3;transition:all .12s}.properties-panel__path-cmd-btn:hover{background:#e8ecef;border-color:#ccc}.properties-panel__path-cmd-btn--delete{color:#e74c3c;border-color:#f0c0b8}.properties-panel__path-cmd-btn--delete:hover{background:#e74c3c;color:#fff;border-color:#e74c3c}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#ccc;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#aaa}
