:root{--bg:#0a0a0f;--bg-card:#12121a;--bg-input:#1a1a2e;--border:#2a2a3e;--text:#e2e2e8;--text-muted:#8888a0;--primary:#6366f1;--primary-hover:#818cf8;--accent:#06b6d4;--success:#22c55e;--warning:#f59e0b;--error:#ef4444;--radius:8px;--font-mono:"SF Mono", "Fira Code", "JetBrains Mono", monospace}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.6}a{color:var(--primary);text-decoration:none}a:hover{color:var(--primary-hover)}.app{min-height:100vh;display:flex}.sidebar{background:var(--bg-card);border-right:1px solid var(--border);width:240px;padding:24px 0;position:fixed;top:0;bottom:0;left:0;overflow-y:auto}.sidebar-logo{letter-spacing:-.5px;border-bottom:1px solid var(--border);margin-bottom:16px;padding:0 24px 24px;font-size:20px;font-weight:700}.sidebar-logo span{background:linear-gradient(135deg, var(--primary), var(--accent));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.sidebar nav{flex-direction:column;gap:2px;padding:0 12px;display:flex}.sidebar nav a{border-radius:var(--radius);color:var(--text-muted);align-items:center;gap:12px;padding:10px 12px;font-size:14px;transition:all .15s;display:flex}.sidebar nav a:hover{background:var(--bg-input);color:var(--text)}.sidebar nav a.active{color:var(--primary);background:#6366f126}.main-content{flex:1;max-width:1200px;margin-left:240px;padding:32px}.page-header{margin-bottom:32px}.page-header h1{margin-bottom:4px;font-size:28px;font-weight:700}.page-header p{color:var(--text-muted);font-size:14px}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.card-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;display:grid}.stat-card{flex-direction:column;gap:8px;display:flex}.stat-card .label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;font-size:13px}.stat-card .value{font-size:32px;font-weight:700;font-family:var(--font-mono)}.table-container{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:14px}thead th{text-align:left;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border);padding:12px 16px;font-size:12px;font-weight:500}tbody td{border-bottom:1px solid var(--border);padding:12px 16px}tbody tr:hover{background:#ffffff05}.btn{border-radius:var(--radius);cursor:pointer;border:none;align-items:center;gap:8px;padding:8px 16px;font-size:14px;font-weight:500;transition:all .15s;display:inline-flex}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover)}.btn-secondary{background:var(--bg-input);color:var(--text);border:1px solid var(--border)}.btn-secondary:hover{background:var(--border)}.btn-sm{padding:4px 10px;font-size:12px}.form-group{flex-direction:column;gap:6px;display:flex}.form-group label{color:var(--text-muted);font-size:13px;font-weight:500}input[type=text],input[type=number],select{background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);outline:none;padding:8px 12px;font-size:14px;transition:border-color .15s}input:focus,select:focus{border-color:var(--primary)}.badge{text-transform:uppercase;letter-spacing:.3px;border-radius:12px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.badge-primary{color:var(--primary);background:#6366f133}.badge-accent{color:var(--accent);background:#06b6d433}.badge-success{color:var(--success);background:#22c55e33}.badge-warning{color:var(--warning);background:#f59e0b33}.flex{display:flex}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-8{gap:8px}.gap-12{gap:12px}.gap-16{gap:16px}.gap-24{gap:24px}.mt-16{margin-top:16px}.mt-24{margin-top:24px}.mb-16{margin-bottom:16px}.mono{font-family:var(--font-mono)}.text-muted{color:var(--text-muted)}.text-sm{font-size:13px}.empty-state{text-align:center;color:var(--text-muted);padding:48px 24px}.empty-state h3{color:var(--text);margin-bottom:8px;font-size:18px}.loading{color:var(--text-muted);justify-content:center;align-items:center;padding:48px;display:flex}.error-banner{border:1px solid var(--error);border-radius:var(--radius);color:var(--error);background:#ef44441a;margin-bottom:16px;padding:12px 16px;font-size:14px}.form-row{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px;display:grid}.detail-section{margin-bottom:24px}.detail-section h2{margin-bottom:12px;font-size:18px;font-weight:600}.joint-tree{font-family:var(--font-mono);font-size:13px}.joint-group{margin-bottom:16px}.joint-group-name{color:var(--accent);margin-bottom:4px;font-weight:600}.joint-item{color:var(--text-muted);border-left:1px solid var(--border);margin-left:8px;padding:4px 0 4px 20px}.joint-item .joint-name{color:var(--text)}.joint-item .joint-limits{color:var(--text-muted);font-size:12px}.sql-editor{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);width:100%;min-height:120px;color:var(--text);font-family:var(--font-mono);resize:none;outline:none;padding:12px 16px;font-size:14px;line-height:1.6;transition:border-color .15s}.sql-editor:focus{border-color:var(--primary)}.sql-editor::placeholder{color:var(--text-muted)}.table-chip{text-align:left;background:var(--bg);border:1px solid var(--border);width:100%;color:var(--text);font-family:var(--font-mono);cursor:pointer;border-radius:6px;padding:6px 10px;font-size:12px;transition:all .15s;display:block}.table-chip:hover{border-color:var(--primary);background:#6366f114}.input{background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);outline:none;padding:8px 12px;font-size:13px;transition:border-color .15s}.input:focus{border-color:var(--primary)}.input::placeholder{color:var(--text-muted)}.engine-table-card{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;padding:12px 16px;transition:all .15s;display:block}.engine-table-card:hover{border-color:var(--primary);background:#6366f10d}
