:root{--bg: #0f172a;--surface: #1e293b;--surface2: #273449;--border: #334155;--text: #e2e8f0;--muted: #94a3b8;--accent: #3b82f6;--accent-2: #60a5fa;--danger: #ef4444;--ok: #22c55e}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;background:var(--bg);color:var(--text);font-family:-apple-system,SF Pro Text,Segoe UI,Roboto,system-ui,sans-serif;-webkit-tap-highlight-color:transparent}.page{min-height:100%;display:flex;flex-direction:column}.app-bar{display:flex;align-items:center;gap:8px;padding:12px 14px;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:5}.app-bar h1{flex:1;margin:0;font-size:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-btn{display:inline-flex;align-items:center;justify-content:center;background:var(--surface2);color:var(--text);border:1px solid var(--border);border-radius:10px;width:36px;height:36px;cursor:pointer}.icon-btn.danger{color:var(--danger)}.bar-actions{display:flex;gap:6px}.mode-toggle{min-width:66px;height:36px;border:1px solid var(--border);border-radius:10px;background:var(--surface2);color:var(--muted);font-size:12px;font-weight:700}.mode-toggle.active{border-color:var(--accent);color:#bfdbfe;background:#3b82f62e}.card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:16px;margin:12px}.card h2{margin:0 0 10px;font-size:15px}button{font-family:inherit}.icon{width:20px;height:20px;flex:0 0 20px}button .icon{width:18px;height:18px;flex-basis:18px}.icon-btn .icon{width:20px;height:20px}button.primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--accent);color:#fff;border:none;border-radius:12px;padding:12px 16px;font-size:15px;cursor:pointer}button.primary:disabled{opacity:.6}.block{width:100%;margin-top:10px}button:not(.primary):not(.icon-btn){display:inline-flex;align-items:center;justify-content:center;gap:7px;background:var(--surface2);color:var(--text);border:1px solid var(--border);border-radius:10px;padding:10px 14px;font-size:14px;cursor:pointer}.btn-small{margin-top:8px;padding:6px 10px!important;font-size:13px!important}input,textarea{width:100%;padding:11px 12px;border-radius:10px;border:1px solid var(--border);background:var(--surface2);color:var(--text);font-size:15px;font-family:inherit}textarea{resize:vertical}.muted{color:var(--muted)}.small{font-size:12px}.import-generator{position:relative;display:flex;align-items:center;justify-content:center;gap:8px;margin-top:10px;padding:11px 12px;border:1px dashed rgba(96,165,250,.55);border-radius:10px;color:#bfdbfe;background:#3b82f614;font-size:13px;font-weight:700;cursor:pointer}.import-generator input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer}.saved-generator{position:relative;padding:0}.saved-generator>button:first-child{width:100%;min-height:100%;border:0;background:transparent;color:inherit;padding:12px}.remove-generator{position:absolute;top:6px;right:6px;width:30px;height:30px;padding:0!important;border-color:#f8717159!important;color:var(--danger)!important;background:#0f172ab3!important}.admin-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;padding:12px}.metric{display:flex;flex-direction:column;gap:8px;padding:14px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.metric span{color:var(--muted);font-size:12px}.metric strong{color:var(--text);font-size:18px}.metric.good{border-color:#22c55e73}.metric.bad{border-color:#f871718c}.admin-failures{list-style:none;padding:0;margin:0;display:grid;gap:8px}.admin-failures li{display:flex;gap:8px;align-items:flex-start;padding:9px;border:1px solid rgba(248,113,113,.25);border-radius:10px;background:#7f1d1d1f}.admin-failures span{color:var(--muted);font-size:12px;line-height:1.35}.hint{color:var(--muted);font-size:14px}.error-banner,.banner{margin:10px 12px 0;padding:10px 12px;border-radius:10px;font-size:14px}.banner-error,.error-banner{background:#ef444426;color:#fca5a5;border:1px solid var(--danger)}.banner-success{background:#22c55e26;color:#86efac;border:1px solid var(--ok)}.operation-status{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:10px 12px 0;padding:12px;border:1px solid rgba(96,165,250,.45);border-radius:12px;background:#3b82f61f}.operation-status div{display:flex;flex-direction:column;gap:2px;min-width:0}.operation-status strong{font-size:14px}.operation-status span{color:var(--muted);font-size:12px}.operation-status button{flex:0 0 auto}.create-card input{margin-bottom:4px}.project-list{list-style:none;padding:0;margin:0}.project-item{display:flex;justify-content:space-between;align-items:center;padding:12px;border-radius:10px;cursor:pointer}.project-item:hover{background:var(--surface2)}.project-name{font-weight:600}.project-date{color:var(--muted);font-size:12px}.viewer-area{position:relative;height:42vh;min-height:200px;background:var(--bg);border-bottom:1px solid var(--border)}.viewer-wrap,.viewer-canvas{width:100%;height:100%}.viewer-canvas canvas{display:block}.viewer-overlay{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:#0f172a99;color:var(--muted);font-size:15px}.viewer-error{color:#fca5a5}.viewer-empty{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--muted);text-align:center;padding:20px}.tabs{display:flex;background:var(--surface);border-bottom:1px solid var(--border);overflow-x:auto}.tabs button{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;flex:1;padding:10px 8px;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--muted);font-size:12px;white-space:nowrap;min-width:76px}.tabs button .icon{width:22px;height:22px;flex-basis:22px}.tabs button.active{color:var(--accent-2);border-bottom-color:var(--accent)}.tab-panel{padding:12px 14px;flex:1}.action-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.panel textarea{margin-bottom:10px}.change-summary{margin-top:12px;padding:10px;border-radius:10px;background:var(--surface2);font-size:13px}.change-summary span{color:var(--muted)}.quick-actions{display:flex;gap:8px;overflow-x:auto;padding-bottom:8px;margin-bottom:8px}.quick-actions button{flex:0 0 auto;font-size:12px!important;padding:8px 10px!important;white-space:nowrap}.fix-actions,.clarify,.dialog-timeline{display:flex;flex-direction:column;gap:8px;margin-bottom:10px;padding:10px;border-radius:12px;border:1px solid rgba(148,163,184,.25);background:#27344980}.fix-actions strong,.clarify strong,.dialog-timeline strong{font-size:13px}.fix-actions div,.clarify-question div{display:flex;gap:6px;overflow-x:auto}.fix-actions button,.clarify-question button{flex:0 0 auto;padding:7px 9px!important;font-size:12px!important;white-space:nowrap}.clarify-question{display:flex;flex-direction:column;gap:6px}.clarify-question>span{color:var(--muted);font-size:12px}.timeline-item{display:grid;grid-template-columns:34px minmax(0,1fr);gap:8px;align-items:start}.timeline-item span{color:var(--accent-2);font-size:12px;font-weight:700}.timeline-item p{margin:0;color:var(--muted);font-size:12px;line-height:1.35}.cut-builder{display:flex;flex-direction:column;gap:10px;padding:12px;margin-bottom:10px;border:1px solid var(--border);border-radius:12px;background:#273449a6}.cut-builder-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.cut-builder-head strong{font-size:14px}.cut-builder-head button{padding:7px 10px!important;font-size:12px!important}.segmented{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.segmented button{min-height:36px;padding:7px 6px!important;font-size:12px!important;line-height:1.15}.segmented button.active{border-color:var(--accent);background:#3b82f640;color:#bfdbfe}.cut-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.cut-fields label{display:flex;flex-direction:column;gap:4px}.cut-fields span{color:var(--muted);font-size:12px}.intent-preview{display:flex;flex-direction:column;gap:5px;margin:0 0 10px;padding:10px;border-radius:10px;border:1px solid rgba(96,165,250,.35);background:#3b82f61a}.intent-preview strong{font-size:13px}.intent-preview span{color:#bfdbfe;font-size:12px}.operation-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(142px,1fr));gap:10px}.zone-picker{display:flex;gap:8px;overflow-x:auto;margin:0 0 12px;padding-bottom:4px}.zone-picker button{flex:0 0 auto;padding:7px 10px!important;font-size:12px!important}.zone-picker button.active{border-color:var(--accent);background:#3b82f640;color:#bfdbfe}.part-type-badge{display:inline-flex;margin:0 0 10px;padding:6px 10px;border:1px solid rgba(96,165,250,.32);border-radius:10px;background:#0f172a73;color:#bfdbfe;font-size:12px;font-weight:700}.pick-info{display:grid;gap:4px;margin:0 0 12px;padding:8px 10px;border:1px solid rgba(250,204,21,.35);border-radius:10px;background:#713f1229;color:#fde68a;font-size:12px}.operation-card{min-height:124px;flex-direction:column;align-items:flex-start!important;justify-content:flex-start!important;text-align:left}.operation-card .icon{color:var(--accent-2)}.operation-card strong{font-size:14px}.operation-card span{color:var(--muted);font-size:12px;line-height:1.3}.param-group{margin-bottom:14px;padding:10px;border:1px solid rgba(148,163,184,.22);border-radius:12px;background:#27344959}.param-group h3{margin:0 0 8px;font-size:13px;color:#bfdbfe}.param-row{display:flex;align-items:flex-start;flex-wrap:wrap;gap:2px 10px;margin-bottom:10px;padding-bottom:4px;border-bottom:1px dashed rgba(148,163,184,.2)}.param-row label{flex:1;min-width:90px;font-size:14px;line-height:34px}.param-input{display:flex;align-items:center;gap:6px;flex:1.2;min-width:120px}.param-input input{text-align:right}.param-slider{flex:1 1 100%;padding:0;accent-color:var(--accent)}.unit{color:var(--muted);min-width:26px;font-size:13px}.panel-scad .scad-editor{display:flex;margin-bottom:10px;border:1px solid var(--border);border-radius:10px;overflow:hidden;height:260px}.scad-gutter{background:var(--surface2);color:var(--muted);padding:8px 6px;text-align:right;overflow:hidden;font-family:ui-monospace,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.5;-webkit-user-select:none;user-select:none}.scad-gutter div{height:18px}.scad-editor textarea{flex:1;border:none;border-radius:0;background:#0b1220;font-family:ui-monospace,Cascadia Code,Consolas,monospace;font-size:12.5px;line-height:1.5;-moz-tab-size:4;tab-size:4;white-space:pre}.revision-list{list-style:none;padding:0;margin:0}.revision-item{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px;margin-bottom:10px}.revision-item.active{border-color:var(--accent)}.rev-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.rev-source{background:var(--surface2);border-radius:6px;padding:2px 6px;font-size:11px;color:var(--muted)}.rev-status{margin-left:auto;font-size:11px;text-transform:uppercase}.rev-status.valid{color:var(--ok)}.rev-status.failed{color:var(--danger)}.rev-status.draft,.rev-status.rendering{color:#fbbf24}.rev-summary{font-size:13px;color:var(--muted);margin-bottom:4px}.rev-dialog{font-size:12px;color:#bfdbfe;margin-bottom:4px}.version-compare{display:flex;flex-direction:column;gap:8px;margin-bottom:12px;padding:12px;border:1px solid rgba(96,165,250,.35);border-radius:12px;background:#3b82f61a}.version-compare strong{font-size:13px}.version-compare div{display:grid;grid-template-columns:minmax(0,1fr) 22px minmax(0,1fr);align-items:center;gap:8px}.version-compare span{min-width:0;color:#bfdbfe;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-drawing .drawing-stage{position:relative;height:70vh;min-height:300px;overflow:hidden;background:#f8fafc;border:1px solid var(--border);border-radius:10px;touch-action:none;cursor:grab}.panel-drawing .drawing-stage:active{cursor:grabbing}.panel-drawing .drawing-canvas{width:100%;height:100%;display:flex;align-items:center;justify-content:center;will-change:transform}.panel-drawing .drawing-canvas svg{width:100%;height:100%;background:#fff;border-radius:6px;box-shadow:0 2px 8px #00000014}.panel-drawing .drawing-hint{position:absolute;bottom:8px;right:10px;font-size:11px;color:var(--muted);background:#ffffffd9;padding:3px 8px;border-radius:6px;pointer-events:none}.param-row{position:relative}.param-input input.invalid{border-color:var(--danger);background:#ef444414}.param-meta{flex:1 1 100%;display:flex;justify-content:flex-end;gap:10px;margin-top:2px}.param-range{font-size:11px;color:var(--muted);white-space:nowrap}.param-error{font-size:11px;color:#fca5a5;white-space:nowrap}.param-warning{font-size:11px;color:#fde68a;white-space:nowrap}.preset-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.model-check{display:flex;flex-direction:column;gap:5px;margin-top:12px;padding:10px;border-radius:10px;border:1px solid rgba(251,191,36,.45);background:#fbbf241a}.model-check strong{font-size:13px;color:#fde68a}.model-check span{font-size:12px;color:#fef3c7}.gallery{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:16px;margin:12px}.gallery h2{margin:0 0 4px;font-size:15px}.template-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin-top:12px}.template-card{display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px 10px;background:var(--surface2);border:1px solid var(--border);border-radius:12px;cursor:pointer;text-align:center;min-height:96px}.template-card:disabled{opacity:.6;cursor:default}.template-icon{width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;border-radius:12px;background:#3b82f629;color:var(--accent-2)}.template-icon .icon{width:30px;height:30px;flex-basis:30px}.template-preview{width:64px;height:44px;color:var(--accent-2)}.template-preview *{fill:#60a5fa47;stroke:currentColor;stroke-width:3}.template-preview .cut{fill:var(--surface2)}.template-name{font-weight:600;font-size:14px;color:var(--text)}.template-desc{font-size:11px;color:var(--muted);line-height:1.3}.template-busy{font-size:12px;color:var(--accent-2)}
