:root{--bg: #0b0b0c;--bg-2: #121215;--panel: #16161a;--border: #25252b;--text: #ececf1;--muted: #8b8b95;--accent: #7c5cff;--accent-2: #5a3ff0;--error: #ff6b6b;--ok: #4ade80}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);font-size:14px}a{color:var(--accent);text-decoration:none}button{font-family:inherit}code{font-family:ui-monospace,SF Mono,Consolas,monospace;font-size:.9em}input,select,textarea{background:var(--bg-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 10px;font-family:inherit;font-size:14px;width:100%}textarea{resize:vertical}button[type=submit],.primary{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:10px 16px;font-weight:600;cursor:pointer}button[type=submit]:hover{background:var(--accent-2)}button[type=submit]:disabled{opacity:.5;cursor:not-allowed}.linkbtn{background:transparent;border:none;color:var(--muted);cursor:pointer;padding:0;margin-left:8px;font-size:inherit}.linkbtn:hover{color:var(--text)}.muted{color:var(--muted)}.small{font-size:12px}.error{color:var(--error);white-space:pre-wrap}.loading{padding:40px;color:var(--muted)}.login{display:grid;place-items:center;min-height:100vh;padding:24px}.login-card{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:32px;width:100%;max-width:380px}.login-card h1{margin:0 0 8px}.login-card form{display:flex;flex-direction:column;gap:12px;margin-top:16px}.shell{display:flex;flex-direction:column;min-height:100vh}.topbar{display:flex;align-items:center;gap:24px;padding:12px 20px;background:var(--bg-2);border-bottom:1px solid var(--border)}.brand{font-weight:700;letter-spacing:.02em}.topbar nav{display:flex;gap:16px;flex:1}.topbar nav a{color:var(--muted);padding:6px 10px;border-radius:6px}.topbar nav a:hover{color:var(--text);background:var(--panel)}.who{color:var(--muted)}main{padding:24px;max-width:1400px;margin:0 auto;width:100%;flex:1}.generate{display:grid;grid-template-columns:1fr 1fr;gap:20px}@media (max-width: 980px){.generate{grid-template-columns:1fr}}.panel{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:20px;display:flex;flex-direction:column;gap:12px}.panel h2{margin:0 0 4px}.panel label{display:flex;flex-direction:column;gap:4px;color:var(--muted);font-size:12px}.panel label input,.panel label select,.panel label textarea{color:var(--text)}.row{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px}.loras{border:1px solid var(--border);border-radius:10px;padding:10px}.loras legend{padding:0 6px;color:var(--muted);font-size:12px}.loras ul{list-style:none;margin:0;padding:0;max-height:260px;overflow:auto}.loras li{display:flex;align-items:center;gap:8px;padding:4px 2px;border-bottom:1px solid var(--border)}.loras li.selected{background:#7c5cff14}.lora-row{flex:1;flex-direction:row!important;align-items:center;gap:8px;color:var(--text)!important}.lora-name{font-size:13px}.scale{width:80px!important}.result .jobview img{width:100%;height:auto;border-radius:10px}.spinner{padding:40px;text-align:center;color:var(--muted)}.history h2{margin:0 0 16px}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}.tile{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:0;overflow:hidden;cursor:pointer;display:flex;flex-direction:column;color:inherit;text-align:left}.tile:hover{border-color:var(--accent)}.tile img{width:100%;aspect-ratio:1 / 1;object-fit:cover}.tile .placeholder{aspect-ratio:1 / 1;display:grid;place-items:center;color:var(--muted);background:var(--bg-2)}.tile .caption{padding:8px 10px;font-size:12px;color:var(--muted);border-top:1px solid var(--border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tile.status-failed{border-color:var(--error)}.lab{display:grid;grid-template-columns:360px 1fr;gap:20px;align-items:flex-start}@media (max-width: 980px){.lab{grid-template-columns:1fr}}.lab-controls{position:sticky;top:20px;max-height:calc(100vh - 100px);overflow-y:auto;background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:16px}.lab-controls-inner{display:flex;flex-direction:column;gap:10px}.lab-controls h2{margin:0 0 6px}.lab-controls label{display:flex;flex-direction:column;gap:4px;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em}.lab-controls label input,.lab-controls label select,.lab-controls label textarea{color:var(--text);text-transform:none;letter-spacing:0;font-size:13px}.lab-controls .row{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:8px}.lab-controls .check{flex-direction:row!important;align-items:center;gap:6px}.lab-controls .check input{width:auto}.lab-controls .check span{font-size:12px;color:var(--text);text-transform:none;letter-spacing:0}.lab-controls .loras{border:1px solid var(--border);border-radius:10px;padding:8px}.lab-controls .loras legend{padding:0 4px;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em}.lab-controls .loras ul{list-style:none;margin:0;padding:0;max-height:220px;overflow:auto}.lab-controls .loras li{padding:4px 2px;border-bottom:1px solid var(--border)}.lab-controls .loras li:last-child{border-bottom:none}.lab-controls .loras li.selected{background:#7c5cff14;border-radius:6px}.lab-controls .lora-row{flex-direction:row!important;align-items:center;gap:6px;color:var(--text)!important;text-transform:none;letter-spacing:0}.lab-controls .lora-name{font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scale-control{display:grid;grid-template-columns:1fr 64px;gap:6px;padding:4px 0 4px 24px;align-items:center}.scale-control input[type=range]{width:100%;accent-color:var(--accent)}.scale-control .scale{width:100%!important}.lab-controls .actions{display:flex;gap:8px;align-items:center;margin-top:4px}.lab-controls .actions .primary{flex:1;padding:8px 10px}.lab-controls .kbd-hint kbd{background:var(--bg-2);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-family:ui-monospace,Consolas,monospace;font-size:11px}.lab-gallery{min-height:60vh}.lab-gallery .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}.lab-gallery .empty{padding:40px 0;text-align:center}.lab-gallery .tile{background:var(--panel);border:1px solid var(--border);border-radius:10px;overflow:hidden;display:flex;flex-direction:column}.lab-gallery .tile:hover{border-color:var(--accent)}.lab-gallery .tile-body{background:none;border:none;padding:0;cursor:pointer}.lab-gallery .tile img{width:100%;aspect-ratio:9/16;object-fit:cover;display:block}.lab-gallery .tile .placeholder{width:100%;aspect-ratio:9/16;display:grid;place-items:center;background:var(--bg-2);color:var(--muted);font-size:12px}.lab-gallery .tile .placeholder.shimmer{background:linear-gradient(110deg,var(--bg-2) 30%,#1f1f24 50%,var(--bg-2) 70%);background-size:200% 100%;animation:shimmer 1.6s linear infinite}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.lab-gallery .tile.status-failed{border-color:var(--error)}.lab-gallery .tile-meta{display:flex;align-items:center;gap:6px;padding:6px 8px;border-top:1px solid var(--border);font-size:11px}.lab-gallery .tile-meta span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lab-gallery .tile-meta .linkbtn{font-size:14px;line-height:1;padding:0 4px}.lab-detail{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000e0;display:grid;place-items:center;z-index:100;padding:24px}.lab-detail-inner{background:var(--panel);border:1px solid var(--border);border-radius:12px;display:grid;grid-template-columns:minmax(0,1fr) 340px;max-width:1400px;max-height:92vh;width:100%;overflow:hidden}.lab-detail-image{background:#000;display:grid;place-items:center;overflow:auto}.lab-detail-image img{max-width:100%;max-height:92vh;object-fit:contain}.lab-detail-meta{padding:16px;overflow-y:auto}.lab-detail-meta h3{margin:16px 0 6px;font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.lab-detail-meta h3:first-of-type{margin-top:0}.lab-detail-actions{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.lab-detail-actions .primary.small{padding:6px 10px;font-size:12px}.kv{display:grid;grid-template-columns:90px 1fr;gap:4px 8px;font-size:13px;margin:0}.kv dt{color:var(--muted)}.kv dd{margin:0;word-break:break-all}.lora-chips{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:4px;font-size:13px}.prompt-text{font-size:13px;line-height:1.4;margin:0 0 8px;word-break:break-word}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000db;display:grid;place-items:center;z-index:100;padding:24px}.lightbox-inner{max-width:95vw;max-height:95vh;display:flex;gap:20px;align-items:flex-start}.lightbox-inner img{max-height:92vh;max-width:70vw;border-radius:10px}.lightbox-meta{color:var(--text);max-width:320px}
