:root{--color-bg-base:#f4f7fb;--color-bg-panel:#ffffff;--color-bg-toolbar:#ffffff;--color-bg-status:#eef3f8;--color-border:#d8e1eb;--color-border-active:#aebdcb;--color-text-primary:#18212f;--color-text-secondary:#526173;--color-text-muted:#7d8a99;--color-accent:#2563eb;--color-accent-hover:#1d4ed8;--color-danger:#dc2626;--color-danger-hover:#b91c1c;--color-success:#15803d;--font-sans:"Outfit",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--font-mono:"JetBrains Mono","SF Mono",Menlo,Consolas,monospace}*{box-sizing:border-box;margin:0;padding:0}body,html{height:100%;width:100%;overflow:hidden;background-color:var(--color-bg-base);color:var(--color-text-primary);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body:has(.tutorial-page){overflow:hidden}.cad-theme{display:flex;flex-direction:column;height:100vh}.auth-view,.dashboard-view{min-height:100vh;width:100%;background:radial-gradient(circle at top left,rgba(37,99,235,.12),transparent 32rem),var(--color-bg-base);color:var(--color-text-primary)}.auth-view{display:grid;place-items:center;padding:24px}.auth-panel{width:min(380px,100%);background:var(--color-bg-panel);border:1px solid var(--color-border);border-radius:8px;box-shadow:0 18px 45px rgba(15,23,42,.12);display:flex;flex-direction:column;gap:14px;padding:28px}.auth-brand{margin:0 0 8px}.auth-panel label{font-size:.88rem;font-weight:700;color:var(--color-text-secondary)}.auth-panel input{width:100%;border:1px solid var(--color-border);border-radius:6px;background:#ffffff;color:var(--color-text-primary);font:500 1rem var(--font-sans);padding:10px 12px;outline:none}.auth-panel input:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px rgba(37,99,235,.12)}.auth-error,.dashboard-status{color:var(--color-danger);font-size:.86rem;line-height:1.4}.dashboard-view{overflow:auto;padding:32px}.dashboard-shell{width:min(1180px,100%);margin:0 auto}.dashboard-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:24px}.dashboard-header p{margin-top:8px;color:var(--color-text-secondary);font-size:.95rem}.dashboard-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.dashboard-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));grid-gap:16px;gap:16px}.project-card{background:var(--color-bg-panel);border:1px solid var(--color-border);border-radius:8px;padding:16px;box-shadow:0 10px 24px rgba(15,23,42,.07);display:flex;flex-direction:column;gap:12px;min-height:230px}.project-thumbnail{width:100%;height:150px;border:1px solid var(--color-border);border-radius:6px;background:#f8fafc;overflow:hidden;cursor:pointer;display:grid;place-items:center;padding:0;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.project-thumbnail:hover{border-color:var(--color-accent);box-shadow:0 10px 22px rgba(37,99,235,.12);transform:translateY(-1px)}.project-thumbnail-canvas{width:100%;height:100%;display:block}.project-thumbnail-status{color:var(--color-text-muted);font-size:.82rem;padding:16px;text-align:center}.project-thumbnail-status.is-error{color:var(--color-danger)}.project-card h2{color:var(--color-text-primary);font-size:1.05rem;line-height:1.25;overflow-wrap:anywhere}.project-card p{color:var(--color-text-muted);font-size:.82rem}.project-card pre{flex:1 1;background:#f8fafc;border:1px solid var(--color-border);border-radius:6px;color:var(--color-text-secondary);font:.78rem/1.45 var(--font-mono);overflow:hidden;padding:10px;white-space:pre-wrap}.project-card-actions{display:flex;flex-wrap:wrap;gap:8px}.toolbar{height:50px;background-color:var(--color-bg-toolbar);border-bottom:1px solid var(--color-border);padding:0 16px;gap:12px;box-shadow:0 1px 0 rgba(15,23,42,.04);z-index:10;flex-shrink:0}.toolbar,.toolbar-brand{display:flex;align-items:center}.toolbar-brand{gap:8px;margin-right:16px}.toolbar-brand h1{font-size:1.15rem;font-weight:700;letter-spacing:.5px;background:linear-gradient(135deg,#2563eb,#0f766e);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.toolbar-brand .logo{color:#2563eb}.toolbar-divider{width:1px;height:24px;background-color:var(--color-border);margin:0 4px}.toolbar-section{display:flex;align-items:center;gap:8px}.toolbar-section.right-section{margin-left:auto}.select-wrapper{position:relative}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#ffffff;border:1px solid var(--color-border);color:var(--color-text-primary);padding:6px 32px 6px 12px;border-radius:6px;font-family:var(--font-sans);font-size:.85rem;font-weight:500;cursor:pointer;outline:none;transition:border-color .15s ease,background-color .15s ease}select:hover{border-color:var(--color-border-active);background-color:#f8fafc}select:focus{border-color:var(--color-accent)}.select-wrapper:after{content:"▾";position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--color-text-secondary);pointer-events:none;font-size:.75rem}.btn{font-family:var(--font-sans);font-size:.85rem;font-weight:600;padding:6px 12px;border-radius:6px;border:1px solid transparent;cursor:pointer;display:inline-flex;align-items:center;gap:6px;outline:none;transition:all .15s ease}.btn-primary{background-color:var(--color-accent);color:#ffffff}.btn-primary:hover{background-color:var(--color-accent-hover)}.btn-secondary{background-color:#ffffff;border-color:var(--color-border);color:var(--color-text-primary)}.btn-secondary:hover{background-color:#f1f5f9;border-color:var(--color-border-active)}.btn-danger{background-color:#fff5f5;border-color:#fecaca;color:var(--color-danger)}.btn-danger:hover{background-color:var(--color-danger-hover);border-color:var(--color-danger);color:#ffffff}.btn .icon{font-size:.95rem}.main-layout{display:flex;flex:1 1;height:calc(100vh - 80px)}.main-layout,.pane{position:relative;overflow:hidden}.pane{height:100%}.left-pane{width:40%;display:flex;flex-direction:column;background-color:var(--color-bg-panel);border-right:1px solid var(--color-border);z-index:2}.right-pane{flex:1 1;background-color:#edf2f7;z-index:1}.resizer{width:6px;background-color:#e6edf5;cursor:col-resize;z-index:3;transition:background-color .2s ease;flex-shrink:0;border-left:1px solid var(--color-border);border-right:1px solid var(--color-border)}.resizer:active,.resizer:hover{background-color:var(--color-accent)}.controls-header,.editor-header{height:36px;background-color:#f8fafc;border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;padding:0 16px;flex-shrink:0}.panel-title{font-size:.8rem;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--color-text-secondary)}.save-status-indicator{font-size:.75rem;color:var(--color-text-muted);transition:color .2s ease}.save-status-indicator.saving{color:var(--color-accent)}.editor-container-wrapper{flex:1 1;position:relative;overflow:hidden;background-color:#1e1e1e}.editor-container{position:absolute;top:0;left:0;width:100%;height:100%}.controls-panel-wrapper{border-top:1px solid var(--color-border);background-color:var(--color-bg-panel);display:flex;flex-direction:column;max-height:350px;min-height:100px;flex-shrink:0}.controls-panel{flex:1 1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}.no-controls-msg{font-size:.85rem;color:var(--color-text-muted);text-align:center;padding:16px 0;line-height:1.4}.no-controls-msg code{background-color:#eaf1f8;padding:2px 4px;border-radius:4px;font-family:var(--font-mono);color:#2563eb}.control-row{display:grid;grid-template-columns:120px 1fr 50px;align-items:center;grid-gap:12px;gap:12px;font-size:.85rem}.control-row.checkbox-row{grid-template-columns:120px 1fr}.control-label{font-weight:500;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.control-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#d8e1eb;height:6px;border-radius:3px;outline:none;width:100%}.control-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--color-accent);cursor:pointer;-webkit-transition:transform .1s ease,background-color .1s ease;transition:transform .1s ease,background-color .1s ease}.control-slider::-webkit-slider-thumb:hover{transform:scale(1.2);background:var(--color-accent-hover)}.control-value{font-family:var(--font-mono);font-size:.8rem;color:var(--color-text-secondary);text-align:right}.control-checkbox-wrapper{display:flex;align-items:center}.control-checkbox{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:18px;height:18px;background-color:#ffffff;border:1px solid var(--color-border);border-radius:4px;cursor:pointer;position:relative;outline:none;transition:background-color .15s ease,border-color .15s ease}.control-checkbox:checked{background-color:var(--color-accent);border-color:var(--color-accent)}.control-checkbox:checked:after{content:"✓";position:absolute;left:4px;top:-1px;color:white;font-size:.8rem;font-weight:700}.color-picker-wrapper{display:flex;align-items:center;gap:8px}.control-color-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:32px;height:28px;border:2px solid var(--color-border);border-radius:6px;cursor:pointer;background:none;padding:0;outline:none;transition:border-color .15s ease,transform .1s ease;flex-shrink:0}.control-color-input::-webkit-color-swatch-wrapper{padding:0}.control-color-input::-webkit-color-swatch{border:none;border-radius:4px}.control-color-input:hover{border-color:var(--color-accent);transform:scale(1.08)}.control-color-hex{font-family:var(--font-mono);font-size:.78rem;color:var(--color-text-secondary);letter-spacing:.05em}.ai-panel-wrapper{border-top:1px solid var(--color-border);background-color:var(--color-bg-panel);display:flex;flex-direction:column;flex-shrink:0}.ai-header{height:36px;background-color:#f8fafc;border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;padding:0 16px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0}.ai-header:hover{background-color:#eef3f8}.ai-spark{color:var(--color-accent-hover);margin-right:2px}.ai-collapse-icon{color:var(--color-text-secondary);font-size:.8rem;transition:transform .2s ease}.ai-panel-wrapper.collapsed .ai-collapse-icon{transform:rotate(-90deg)}.ai-panel-wrapper.collapsed .ai-body{display:none}.ai-body{padding:12px 16px;display:flex;flex-direction:column;gap:10px}.ai-prompt{width:100%;resize:vertical;min-height:44px;max-height:160px;background-color:#ffffff;border:1px solid var(--color-border);border-radius:6px;color:var(--color-text-primary);font-family:var(--font-sans);font-size:.85rem;line-height:1.4;padding:8px 10px;outline:none;transition:border-color .15s ease}.ai-prompt:focus{border-color:var(--color-accent)}.ai-prompt::placeholder{color:var(--color-text-muted)}.ai-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ai-actions .btn:disabled{opacity:.45;cursor:not-allowed}.ai-status{font-size:.8rem;color:var(--color-text-secondary);display:flex;align-items:center;gap:8px;min-height:18px}.ai-status.is-error{color:var(--color-danger)}.ai-status.is-loading{color:var(--color-accent-hover)}.ai-spinner{width:12px;height:12px;border:2px solid rgba(37,99,235,.18);border-top:2px solid var(--color-accent-hover);border-radius:50%;animation:ai-spin .7s linear infinite;flex-shrink:0}@keyframes ai-spin{to{transform:rotate(1turn)}}.ai-explanation{font-size:.8rem;color:var(--color-text-secondary);background-color:#f8fafc;border:1px solid var(--color-border);border-left:3px solid var(--color-accent);border-radius:4px;padding:8px 10px;line-height:1.45}.viewport-container{width:100%;height:100%;position:absolute;top:0;left:0}.status-bar{height:30px;background-color:var(--color-bg-status);border-top:1px solid var(--color-border);padding:0 16px;font-size:.75rem;color:var(--color-text-secondary);z-index:10;flex-shrink:0}.status-bar,.status-group{display:flex;align-items:center}.status-group{gap:6px}.status-group.push-right{margin-left:auto}.status-divider{width:1px;height:14px;background-color:var(--color-border);margin:0 12px}.status-label{color:var(--color-text-muted)}.status-value{font-weight:600}.status-idle{color:var(--color-text-secondary)}.status-rendering{color:var(--color-accent-hover);animation:pulse 1.5s infinite}.status-success{color:var(--color-success)}.status-failed{color:var(--color-danger)}.error-group{margin-left:16px;background-color:rgba(248,113,113,.1);padding:2px 8px;border-radius:4px;border:1px solid rgba(248,113,113,.2);max-width:50vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.error-label{color:var(--color-danger)!important}.error-value{color:var(--color-danger);font-family:var(--font-mono)}.hidden{display:none!important}.tutorial-page{width:100%;height:100vh;overflow-y:auto;background-color:var(--color-bg-base);color:var(--color-text-primary);padding:40px 20px}.tutorial-container{max-width:800px;margin:0 auto}.tutorial-header{border-bottom:1px solid var(--color-border);padding-bottom:24px;margin-bottom:32px;display:flex;align-items:center;justify-content:space-between}.tutorial-header h1{font-size:2rem;font-weight:700;background:linear-gradient(135deg,#38bdf8,#0369a1);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.tutorial-subtitle{margin:4px 0 0;color:var(--color-text-muted)}.back-link{text-decoration:none;font-weight:600;color:var(--color-text-secondary);transition:color .15s ease;display:inline-flex;align-items:center;gap:6px}.back-link:hover{color:var(--color-accent-hover)}.tutorial-page h2{color:#38bdf8;font-size:1.4rem;margin-top:40px;margin-bottom:12px;border-bottom:1px solid rgba(56,189,248,.15);padding-bottom:6px}.tutorial-page h3{font-size:1.1rem;margin-top:24px;margin-bottom:8px;color:var(--color-text-primary)}.tutorial-page .sig-list{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.tutorial-page .sig{font-family:var(--font-mono);font-size:.82rem;background:rgba(56,189,248,.1);border:1px solid rgba(56,189,248,.25);color:#38bdf8;padding:2px 10px;border-radius:20px}.tutorial-page p{color:var(--color-text-secondary);margin-bottom:16px;line-height:1.6;font-size:.95rem}.tutorial-page code{background-color:#1e1e1e;padding:2px 6px;border-radius:4px;font-family:var(--font-mono);font-size:.85rem;color:#38bdf8;border:1px solid var(--color-border)}.tutorial-page pre{background-color:#1a1a1a;border:1px solid var(--color-border);border-radius:8px;padding:16px;margin:12px 0 24px;overflow-x:auto}.tutorial-page pre code{background-color:transparent;padding:0;color:#e2e8f0;font-size:.85rem;border:none}.tutorial-page ol,.tutorial-page ul{margin-left:20px;margin-bottom:16px;color:var(--color-text-secondary)}.tutorial-page li{margin-bottom:8px;line-height:1.5}.tutorial-page .highlight-box{background-color:rgba(0,122,204,.08);border-left:4px solid var(--color-accent);padding:16px;border-radius:0 8px 8px 0;margin:20px 0}.tutorial-page .highlight-box p{margin-bottom:0;color:var(--color-text-primary)}.tutorial-page .color-swatches{display:flex;gap:6px;margin-bottom:12px}.tutorial-page .swatch{width:18px;height:18px;border-radius:50%;border:1px solid rgba(255,255,255,.15);flex-shrink:0}@keyframes pulse{0%{opacity:.6}50%{opacity:1}to{opacity:.6}}.controls-panel::-webkit-scrollbar{width:6px}.controls-panel::-webkit-scrollbar-track{background:transparent}.controls-panel::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.controls-panel::-webkit-scrollbar-thumb:hover{background:#94a3b8}dialog{background:var(--color-bg-panel);border:1px solid var(--color-border);border-radius:12px;color:var(--color-text-primary);max-width:650px;width:90%;max-height:80vh;padding:0;box-shadow:0 20px 25px -5px rgba(0,0,0,.5),0 10px 10px -5px rgba(0,0,0,.4);outline:none}dialog::-webkit-backdrop{background:rgba(0,0,0,.7);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}dialog::backdrop{background:rgba(0,0,0,.7);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.dialog-header{padding:16px 24px;background-color:var(--color-bg-toolbar);border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;align-items:center}.dialog-header h2{font-size:1.1rem;font-weight:700;color:var(--color-text-primary)}.dialog-body{padding:24px;overflow-y:auto;max-height:calc(80vh - 120px);font-size:.9rem;line-height:1.6}.dialog-body h3{margin:20px 0 8px;color:var(--color-accent);font-size:1.05rem}.dialog-body h3:first-of-type{margin-top:0}.dialog-body p{color:var(--color-text-secondary);margin-bottom:8px}.dialog-body code{background-color:#eaf1f8;padding:2px 6px;border-radius:4px;font-family:var(--font-mono);font-size:.85rem;color:var(--color-accent)}.dialog-body pre{background-color:#f8fafc;border:1px solid var(--color-border);border-radius:8px;padding:14px;margin:8px 0 20px;overflow-x:auto}.dialog-body pre code{background-color:transparent;padding:0;color:var(--color-text-primary);font-size:.85rem}.btn-close-dialog{background:transparent;border:none;color:var(--color-text-secondary);font-size:1.5rem;cursor:pointer;line-height:1;outline:none;transition:color .15s ease}.btn-close-dialog:hover{color:var(--color-danger)}