:root{--bg: #0e131a;--bg-raised: #161d27;--bg-hover: #1c2530;--border: #26303d;--text: #dbe4ee;--text-dim: #8494a7;--accent: #4f9cf9;--accent-hover: #6cadfa;--danger: #e5687a;--ok: #5fbf87;--warn: #d9a760;--radius: 10px;color-scheme:dark}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}button,.button{font:inherit;border:1px solid var(--border);border-radius:8px;padding:8px 16px;cursor:pointer;background:var(--bg-raised);color:var(--text);text-decoration:none;display:inline-block}button:disabled,.button.disabled{opacity:.45;cursor:default;pointer-events:none}.primary{background:var(--accent);border-color:var(--accent);color:#fff}.primary:hover:not(:disabled){background:var(--accent-hover)}.ghost{background:transparent}.ghost:hover:not(:disabled){background:var(--bg-hover)}.ghost.danger{color:var(--danger)}.brand{font-weight:700;font-size:18px;letter-spacing:.3px}.brand.big{font-size:26px;text-align:center}.brand-mark{color:var(--accent)}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:340px;display:flex;flex-direction:column;gap:12px;background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);padding:32px 28px}.tagline{margin:0 0 8px;text-align:center;color:var(--text-dim)}.login-card input{font:inherit;padding:10px 12px;border-radius:8px;border:1px solid var(--border);background:var(--bg);color:var(--text)}.login-card input:focus{outline:none;border-color:var(--accent)}.error{color:var(--danger);font-size:13px}.sso-button{text-align:center;padding:10px 16px}.local-toggle{font-size:12px;color:var(--text-dim)}.shell{max-width:1100px;margin:0 auto;padding:0 24px 48px}header{display:flex;justify-content:space-between;align-items:center;padding:18px 0;border-bottom:1px solid var(--border);margin-bottom:28px}.header-right{display:flex;align-items:center;gap:12px}.user-email{color:var(--text-dim);font-size:13px}.warning-banner{background:#d9a7601f;border:1px solid var(--warn);color:var(--warn);border-radius:var(--radius);padding:10px 14px;margin-bottom:18px;font-size:13px}.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.toolbar h1{font-size:20px;margin:0}.empty{border:1px dashed var(--border);border-radius:var(--radius);padding:64px 24px;text-align:center;color:var(--text-dim)}.empty p{margin:4px 0}.hint{font-size:13px}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px}.card{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;transition:border-color .15s}.card:hover{border-color:var(--accent)}.thumb{display:block;aspect-ratio:16 / 10;background:#0a0e14;overflow:hidden}.thumb img{width:100%;height:100%;object-fit:cover;display:block}.thumb-placeholder{height:100%;display:grid;place-items:center;color:var(--border);font-size:42px}.spinner{width:26px;height:26px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.card-body{padding:12px 14px 14px;display:flex;flex-direction:column;gap:10px}.card-meta{display:flex;align-items:center;gap:10px;font-size:12px}.mono{font-family:ui-monospace,SF Mono,Menlo,monospace;color:var(--text-dim)}.dim{color:var(--text-dim)}.card-actions{display:flex;gap:8px}.card-actions .button{flex:1;text-align:center}.badge{padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.4px}.badge-running{background:#5fbf8726;color:var(--ok)}.badge-starting,.badge-creating,.badge-stopping{background:#d9a76026;color:var(--warn)}.badge-error{background:#e5687a26;color:var(--danger)}.badge-stopped{background:var(--bg-hover);color:var(--text-dim)}.badge-building{background:#d9a76026;color:var(--warn)}.badge-ready{background:#5fbf8726;color:var(--ok)}.toolbar-actions{display:flex;gap:10px;align-items:center}select{font:inherit;padding:8px 10px;border-radius:8px;border:1px solid var(--border);background:var(--bg-raised);color:var(--text)}.images-section{margin-top:40px}.images-section h2{font-size:16px;margin:0}.image-list{display:flex;flex-direction:column;gap:8px}.image-row{display:flex;align-items:center;gap:12px;background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px}.image-name{font-weight:600}.image-apps{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.image-row .button,.image-row button{padding:5px 12px}.build-form{display:flex;flex-direction:column;gap:12px;background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-bottom:16px}.build-form input{font:inherit;padding:9px 12px;border-radius:8px;border:1px solid var(--border);background:var(--bg);color:var(--text)}.build-form input:focus{outline:none;border-color:var(--accent)}.build-form .hint{margin:0;font-size:12px;color:var(--text-dim)}.build-form .card-actions{justify-content:flex-start}.build-form .card-actions .primary{flex:0 0 auto}.app-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:8px}.app-option{display:grid;grid-template-columns:auto 1fr;column-gap:8px;align-items:center;border:1px solid var(--border);border-radius:8px;padding:8px 10px;cursor:pointer}.app-option.selected{border-color:var(--accent);background:var(--bg-hover)}.app-option .app-label{font-weight:600;font-size:13px}.app-option .app-desc{grid-column:2;font-size:11px;color:var(--text-dim)}
