: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{background:var(--surface2);color:var(--text);border:1px solid var(--border);border-radius:10px;width:36px;height:36px;font-size:16px;cursor:pointer}.icon-btn.danger{color:var(--danger)}.bar-actions{display:flex;gap:6px}.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}button.primary{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){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}.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)}.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{flex:1;padding:12px 6px;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--muted);font-size:14px;white-space:nowrap}.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)}.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}.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}.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}
