*{box-sizing:border-box}
:root{--bg:#0f1113;--fg:#e8e8e8;--muted:#a8b0b6;--panel:#151718;--card:#1b1f23;--border:#2a2f35;--acc1:#64b5f6;--acc2:#c792ea}
html,body{height:100%}
body{margin:0;font-family:Inter,ui-sans-serif,system-ui,Segoe UI,Roboto,Helvetica,Arial;color:var(--fg);background:var(--bg)}
.container{max-width:1200px;margin:0 auto;padding:0 16px}
.site-header{padding:20px 0;border-bottom:1px solid var(--border)}
.site-header h1{margin:0 0 6px 0;font-size:28px}
.sub{margin:0;color:var(--muted)}
.site-footer{padding:16px 0;border-top:1px solid var(--border);color:var(--muted);text-align:center}
.layout{display:grid;grid-template-columns:320px 1fr;gap:16px;margin:16px 0 24px}
.panel{display:flex;flex-direction:column;gap:12px}
.card{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:14px;box-shadow:0 6px 16px rgba(0,0,0,.25)}
.card h2{margin:0 0 10px 0;font-size:18px}
label{display:flex;flex-direction:column;gap:6px;font-size:14px;margin-bottom:8px;color:var(--muted)}
input,button{font:inherit;border-radius:10px;border:1px solid var(--border);background:#0d0f10;color:var(--fg);padding:8px 10px}
button{cursor:pointer;background:linear-gradient(135deg,var(--acc1),var(--acc2));border:none}
button:hover{filter:brightness(1.05)}
.btn-row{display:flex;gap:8px;flex-wrap:wrap}
.viewport{position:relative;padding:0;height:calc(100vh - 160px)}
#view{width:100%;height:100%;display:block;background:#0b0d0f;border-radius:14px}
.hud{position:absolute;left:12px;bottom:12px;background:rgba(0,0,0,.4);padding:6px 10px;border-radius:10px;color:#ddd;font-size:12px;display:flex;gap:12px}
.err{position:absolute;right:12px;bottom:12px;max-width:45%;background:rgba(64,0,0,.6);padding:8px 10px;border-radius:10px;font:12px/1.3 ui-sans-serif;color:#ffdcdc}
.models-list{display:grid;grid-template-columns:1fr;gap:6px;margin:6px 0 10px}
.model-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px;border:1px solid var(--border);border-radius:10px;background:#0d0f10}
.model-row small{color:var(--muted)}
