:root{--bg: #0d0d0d;--bg-2: #141414;--panel: #1a1a1a;--panel-2: #232323;--panel-3: #2e2e2e;--accent: #ff6600;--accent-2: #ff8a33;--accent-soft: rgba(255, 102, 0, .15);--text: #ededed;--text-strong: #ffffff;--muted: #a3a3a3;--muted-2: #777777;--ok: #22c55e;--warn: #f59e0b;--danger: #f87171;--border: #333333;--border-soft: #262626;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--radius-sm: 8px;--radius: 12px;--radius-lg: 16px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .28);--shadow: 0 2px 6px rgba(0, 0, 0, .3), 0 1px 2px rgba(0, 0, 0, .22);--shadow-lg: 0 12px 32px rgba(0, 0, 0, .45);--font: "Segoe UI", system-ui, -apple-system, "Inter", sans-serif;--fs-xs: 11px;--fs-sm: 12px;--fs-base: 14px;--fs-md: 16px;--fs-lg: 20px;--fs-xl: 28px;color-scheme:dark}*{box-sizing:border-box}html,body{height:100%}body{margin:0;font-family:var(--font);font-size:var(--fs-base);line-height:1.5;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,h4{color:var(--text-strong);font-weight:700;line-height:1.25;letter-spacing:-.01em}h2{font-size:var(--fs-lg)}h3{font-size:var(--fs-md)}.muted{color:var(--muted)}.small{font-size:var(--fs-sm)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#3a3a3a;border-radius:999px;border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:#555;background-clip:padding-box}::-webkit-scrollbar-corner{background:transparent}*{scrollbar-width:thin;scrollbar-color:#3a3a3a transparent}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:var(--sp-5);background:radial-gradient(1200px 600px at 20% -10%,rgba(255,102,0,.18),transparent 60%),radial-gradient(900px 500px at 100% 110%,rgba(255,138,51,.12),transparent 55%),linear-gradient(160deg,var(--bg-2),var(--bg))}.login{width:380px;max-width:100%;display:flex;flex-direction:column;gap:var(--sp-3);box-shadow:var(--shadow-lg);padding:var(--sp-6)}.login h1{margin:0;font-size:var(--fs-xl);letter-spacing:-.02em}.login h1 span{color:var(--accent-2);font-weight:400}.login>p.muted{margin:0 0 var(--sp-2)}.login input,.card input{padding:12px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--panel-2);color:var(--text);font-size:var(--fs-base);transition:border-color .15s ease,box-shadow .15s ease}.login input:focus,.card input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.login button,.card button:not(.logout):not(nav button){padding:12px 16px;border:none;border-radius:var(--radius-sm);background:var(--accent);color:#fff;font-weight:600;cursor:pointer;font-size:var(--fs-base);transition:background .15s ease,transform .05s ease,box-shadow .15s ease}.login button:hover,.card button:not(.logout):not(nav button):hover{background:#e65c00;box-shadow:var(--shadow)}.login button:active,.card button:not(.logout):not(nav button):active{transform:translateY(1px)}.login button:disabled{opacity:.6;cursor:default}.error{color:var(--danger);font-size:13px}.app{display:flex;min-height:100vh}.sidebar{width:260px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:var(--sp-4) var(--sp-3);height:100vh;position:sticky;top:0}.brand{display:flex;align-items:center;gap:var(--sp-2);font-size:18px;font-weight:700;padding:var(--sp-1) var(--sp-2) var(--sp-4);flex-shrink:0;letter-spacing:-.01em;color:var(--text-strong)}.brand b{color:var(--text);font-weight:500}.brand-logo{height:24px;width:auto;display:block}.login-logo{height:52px;width:auto;display:block;margin:0 auto var(--sp-3)}.brand-sub{font-size:20px;font-weight:600;color:var(--muted);text-align:center;margin:0 0 var(--sp-1);letter-spacing:.04em}.sidebar nav{display:flex;flex-direction:column;gap:2px;flex:1;overflow-y:auto;overflow-x:hidden;min-height:0;margin:0 -4px;padding:0 4px}.nav-section{margin-bottom:var(--sp-3)}.nav-section-title{font-size:10px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted-2);padding:var(--sp-2) var(--sp-3) var(--sp-1);font-weight:700}.sidebar nav button{text-align:left;background:transparent;border:none;color:var(--text);padding:9px var(--sp-3);border-radius:var(--radius-sm);cursor:pointer;font-size:var(--fs-base);display:flex;gap:10px;align-items:center;line-height:1.3;transition:background .13s ease,color .13s ease;position:relative}.sidebar nav button>span{flex-shrink:0;width:18px;text-align:center}.sidebar nav button:hover{background:var(--panel-2)}.sidebar nav button.active{background:var(--accent-soft);color:var(--text-strong);font-weight:600}.sidebar nav button.active:before{content:"";position:absolute;left:2px;top:6px;bottom:6px;width:3px;border-radius:3px;background:var(--accent)}.sidebar-foot{border-top:1px solid var(--border);padding-top:var(--sp-3);margin-top:var(--sp-2);flex-shrink:0}.logout{margin-top:var(--sp-2);width:100%;padding:var(--sp-2);background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:var(--radius-sm);cursor:pointer;transition:border-color .15s ease,color .15s ease,background .15s ease}.logout:hover{border-color:var(--danger);color:var(--danger);background:#f8717114}.content{flex:1;min-width:0;padding:var(--sp-5) var(--sp-6);overflow:auto;height:100vh}.topbar{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--sp-4)}.topbar h2{margin:0 0 var(--sp-1)}.topbar p{margin:0}.menu-toggle{display:none;background:var(--panel-2);border:1px solid var(--border);color:var(--text-strong);font-size:20px;line-height:1;border-radius:8px;padding:6px 12px;cursor:pointer;flex-shrink:0}.menu-toggle:hover{background:var(--panel)}.sidebar-overlay{display:none}.badge{padding:6px 12px;border-radius:20px;font-size:13px;font-weight:600;white-space:nowrap}.badge.ok{background:#22c55e26;color:var(--ok)}.badge.warn{background:#f59e0b26;color:var(--warn)}.health-row{display:flex;gap:var(--sp-2);margin:var(--sp-4) 0;flex-wrap:wrap}.chip{padding:5px 10px;border-radius:6px;font-size:var(--fs-sm);font-weight:500}.chip.ok{background:#22c55e1f;color:var(--ok)}.chip.warn{background:#f59e0b1f;color:var(--warn)}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:var(--sp-5);margin-top:var(--sp-4);box-shadow:var(--shadow-sm)}.card h3{margin:0 0 var(--sp-1)}.reports{list-style:none;padding:0;margin:var(--sp-4) 0 0;display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--sp-2)}.reports li{background:var(--panel-2);padding:10px 12px;border-radius:var(--radius-sm);font-size:13px;border-left:3px solid var(--accent);transition:transform .12s ease,background .12s ease}.reports li:hover{background:var(--panel-3);transform:translate(2px)}.chat{display:flex;flex-direction:column;height:calc(100vh - 220px)}.chat-log{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:14px;padding-right:var(--sp-1)}.chat-empty{text-align:center;margin:auto;max-width:520px}.suggestions{display:flex;flex-wrap:wrap;gap:var(--sp-2);justify-content:center;margin-top:var(--sp-4)}.suggestions button{background:var(--panel-2);border:1px solid var(--border);color:var(--text);padding:8px 14px;border-radius:20px;cursor:pointer;font-size:13px;transition:border-color .15s ease,background .15s ease}.suggestions button:hover{border-color:var(--accent);background:var(--panel-3)}.msg{display:flex;flex-direction:column;gap:6px;max-width:80%}.msg.user{align-self:flex-end;align-items:flex-end}.msg.ai{align-self:flex-start}.bubble{padding:12px 16px;border-radius:14px;font-size:var(--fs-base);line-height:1.55;box-shadow:var(--shadow-sm)}.msg.user .bubble{background:var(--accent);color:#fff;border-bottom-right-radius:4px}.msg.ai .bubble{background:var(--panel-2);border-bottom-left-radius:4px}.sql{font-size:var(--fs-sm)}.sql summary{cursor:pointer;color:var(--muted)}.sql summary:hover{color:var(--accent-2)}.sql pre{background:#070c16;padding:12px;border-radius:var(--radius-sm);overflow-x:auto;font-size:var(--fs-sm);border:1px solid var(--border)}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:var(--radius-sm);max-height:70vh}.table-wrap table{border-collapse:collapse;width:100%;font-size:var(--fs-sm)}.table-wrap th,.table-wrap td{padding:9px 12px;border-bottom:1px solid var(--border-soft);text-align:left;white-space:nowrap}.table-wrap th{background:var(--panel-2);position:sticky;top:0;z-index:1;font-weight:600;color:var(--text-strong);box-shadow:inset 0 -1px 0 var(--border)}.table-wrap tbody tr{transition:background .1s ease}.table-wrap tbody tr:nth-child(2n){background:#ffffff04}.table-wrap tbody tr:hover{background:var(--accent-soft)}.table-wrap td{color:var(--text)}.chat-input{display:flex;gap:var(--sp-2);margin-top:14px}.chat-input input{flex:1;padding:12px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--panel-2);color:var(--text)}.chat-input input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.chat-input button{padding:12px 20px;border:none;border-radius:var(--radius-sm);background:var(--accent);color:#fff;font-weight:600;cursor:pointer}.chat-input button:hover{background:#e65c00}.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--sp-3);margin-bottom:var(--sp-4)}.kpi{background:linear-gradient(160deg,var(--panel),var(--panel-2));border:1px solid var(--border);border-radius:var(--radius);padding:var(--sp-4) var(--sp-4) var(--sp-4) var(--sp-5);position:relative;overflow:hidden;box-shadow:var(--shadow-sm);transition:transform .12s ease,box-shadow .12s ease,border-color .12s ease}.kpi:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--accent)}.kpi:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--panel-3)}.kpi b{font-size:26px;display:block;margin-bottom:4px;color:var(--text-strong);font-variant-numeric:tabular-nums;letter-spacing:-.02em}.kpi span{font-size:var(--fs-sm);color:var(--muted);text-transform:uppercase;letter-spacing:.4px;font-weight:600}.kpi.ok:before{background:var(--ok)}.kpi.warn:before{background:var(--warn)}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-4);margin-bottom:var(--sp-4)}@media(max-width:900px){.grid2{grid-template-columns:1fr}}.barlist{display:flex;flex-direction:column;gap:9px;margin-top:var(--sp-3)}.barrow{display:grid;grid-template-columns:150px 1fr 64px;align-items:center;gap:var(--sp-3)}.barlabel{font-size:var(--fs-sm);color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bartrack{background:var(--panel-2);border-radius:999px;height:18px;overflow:hidden;box-shadow:inset 0 0 0 1px var(--border-soft)}.barfill{height:100%;background:var(--accent);border-radius:999px;min-width:4px;transition:width .5s cubic-bezier(.22,.61,.36,1)}.barval{font-size:var(--fs-sm);text-align:right;font-variant-numeric:tabular-nums;color:var(--text-strong);font-weight:600}.import-tabs{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-4);flex-wrap:wrap}.import-tabs button{padding:10px 18px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--panel);color:var(--muted);cursor:pointer;font-size:var(--fs-base);font-weight:600;transition:background .15s ease,color .15s ease,border-color .15s ease}.import-tabs button:hover{color:var(--text);border-color:var(--panel-3)}.import-tabs button.active{background:var(--accent);color:#fff;border-color:var(--accent)}.import-form select option{background:var(--panel-2)}.import-form{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:var(--sp-3)}.import-form select,.import-form input[type=file]{padding:10px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--panel-2);color:var(--text);font-size:var(--fs-base)}.import-form select:focus,.import-form input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.import-form button,.card button:not(.logout):not(nav button){padding:10px 18px;border:none;border-radius:var(--radius-sm);background:var(--accent);color:#fff;font-weight:600;cursor:pointer;font-size:var(--fs-base)}.card button:disabled{opacity:.6;cursor:default}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;margin-top:var(--sp-3)}.stat{background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--sp-3);text-align:center}.stat b{font-size:22px;display:block;font-variant-numeric:tabular-nums}.stat span{font-size:var(--fs-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.3px}.stat.ok b{color:var(--ok)}.stat.warn b{color:var(--warn)}.progress{height:14px;background:var(--panel-2);border-radius:999px;overflow:hidden;border:1px solid var(--border)}.progress.sm{height:8px}.progress-bar{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width .4s ease;border-radius:999px}.file-list{display:flex;flex-direction:column;gap:var(--sp-3);margin-top:14px}.file-card{background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:14px}.file-head{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.file-body{margin-top:10px}.file-body select{padding:8px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--panel);color:var(--text)}.chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:var(--sp-2)}.val-stats{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:var(--sp-2)}.layout-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin-top:var(--sp-3)}.layout-card{background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--sp-3);border-left:3px solid var(--accent-2)}.layout-name{font-weight:600;margin-bottom:4px}.cad-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-top:14px}.cad-item{background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 12px}.cad-item span{display:block;font-size:var(--fs-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.3px}.cad-item b{font-size:var(--fs-base)}.build-note{margin-top:var(--sp-3);padding:12px 14px;border-radius:var(--radius-sm);font-size:13px;background:#f59e0b1a;border:1px solid rgba(245,158,11,.3);color:var(--text)}.detail-head{display:flex;gap:var(--sp-2);flex-wrap:wrap;align-items:center}.tag{font-size:var(--fs-xs);padding:4px 10px;border-radius:6px;background:#ff8a331f;color:var(--accent-2);font-weight:600}.tag.pending{background:#f59e0b1f;color:var(--warn)}.spinner{width:18px;height:18px;border-radius:50%;border:2px solid var(--border);border-top-color:var(--accent);display:inline-block;vertical-align:-3px;margin-right:8px;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.empty{text-align:center;color:var(--muted);padding:var(--sp-6) var(--sp-4);border:1px dashed var(--border);border-radius:var(--radius)}.skeleton{background:linear-gradient(90deg,var(--panel-2) 25%,var(--panel-3) 37%,var(--panel-2) 63%);background-size:400% 100%;border-radius:var(--radius-sm);animation:shimmer 1.4s ease infinite}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@media(max-width:1024px){.sidebar{width:210px;padding:var(--sp-3) var(--sp-2)}.sidebar nav button{padding:9px 10px;font-size:13px}.brand{font-size:16px}.content{padding:var(--sp-4) var(--sp-4)}.barrow{grid-template-columns:110px 1fr 56px}}@media(max-width:768px){.menu-toggle{display:inline-flex;align-items:center}.app{display:block}.sidebar{position:fixed;top:0;left:0;z-index:60;width:82%;max-width:300px;height:100vh;transform:translate(-100%);transition:transform .25s ease;box-shadow:0 10px 40px #00000080}.app.menu-open .sidebar{transform:translate(0)}.app.menu-open .sidebar-overlay{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;z-index:50}.content{height:auto;min-height:100vh;padding:var(--sp-3)}.topbar{align-items:center;gap:var(--sp-3)}.topbar h2{font-size:17px}.kpi-row{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--sp-2)}.kpi{padding:var(--sp-2) var(--sp-3)}.kpi b{font-size:20px}.grid2{grid-template-columns:1fr}.card{padding:var(--sp-3)}.barrow{grid-template-columns:84px 1fr 48px}.msg{max-width:92%}.chat{height:auto;min-height:60vh}.badge{align-self:flex-start}}
