:root{--bg:#fff;--panel:#0b0e14;--panel-fg:#f4f5f7;--panel-muted:#8a90a0;--fg:#0b0e14;--muted:#6b7280;--border:#e5e7eb;--border-strong:#d1d5db;--accent:#16a34a;--field-bg:#fafafa;--radius:10px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--fg);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-family:inherit}button,input{font:inherit}.login-shell{grid-template-columns:minmax(380px,44%) 1fr;min-height:100vh;display:grid}.login-brand{background:var(--panel);color:var(--panel-fg);flex-direction:column;justify-content:space-between;padding:48px 56px;display:flex}.brand-top .logo{color:var(--panel-fg)}.logo{align-items:center;gap:12px;display:inline-flex}.logo-mark{width:36px;height:36px;color:var(--accent);border:1px solid;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.logo-word{letter-spacing:-.02em;font-size:18px;font-weight:700}.brand-body h1{letter-spacing:-.02em;max-width:400px;font-size:34px;font-weight:600;line-height:1.2}.brand-lead{color:var(--panel-muted);max-width:380px;margin-top:16px;font-size:15px;line-height:1.6}.brand-list{margin-top:48px;list-style:none}.brand-list li{border-top:1px solid #ffffff1f;flex-direction:column;gap:4px;padding:18px 0;display:flex}.brand-list li:last-child{border-bottom:1px solid #ffffff1f}.brand-list-title{font-size:14px;font-weight:600}.brand-list-desc{color:var(--panel-muted);font-size:13px}.brand-foot{color:var(--panel-muted);justify-content:space-between;align-items:center;font-size:13px;display:flex}.brand-foot a{color:var(--panel-muted);text-decoration:none}.brand-foot a:hover{color:var(--panel-fg)}.login-main{justify-content:center;align-items:center;padding:48px 24px;display:flex}.login-card{flex-direction:column;width:100%;max-width:360px;display:flex}.login-card>.logo{color:var(--fg);margin-bottom:40px;display:none}.login-head h2{letter-spacing:-.02em;font-size:24px;font-weight:600}.login-head p{color:var(--muted);margin-top:8px;font-size:14px}.login-card form{flex-direction:column;gap:20px;margin-top:32px;display:flex}.field{flex-direction:column;gap:8px;display:flex}.field-label{font-size:13px;font-weight:500}.field input{border:1px solid var(--border);border-radius:var(--radius);background:var(--field-bg);width:100%;height:44px;color:var(--fg);outline:none;padding:0 14px;font-size:14px;transition:border-color .15s,background .15s}.field input::placeholder{color:#9ca3af}.field input:focus{border-color:var(--fg);background:#fff}.field-input-wrap{display:block;position:relative}.field-input-wrap input{padding-right:70px}.field-toggle{height:28px;color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:0 10px;font-size:12px;font-weight:500;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.field-toggle:hover{color:var(--fg);background:#f3f4f6}.login-row{justify-content:space-between;align-items:center;font-size:13px;display:flex}.check{cursor:pointer;color:var(--muted);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;display:inline-flex}.check input{width:15px;height:15px;accent-color:var(--fg);cursor:pointer}.link,.login-foot a{color:var(--fg);border-bottom:1px solid var(--border-strong);padding-bottom:1px;font-weight:500;text-decoration:none}.link:hover,.login-foot a:hover{border-bottom-color:var(--fg)}.btn-primary{border-radius:var(--radius);background:var(--panel);color:#fff;cursor:pointer;border:none;height:46px;font-size:14px;font-weight:600;transition:background .15s}.btn-primary:hover{background:#1c2230}.btn-primary:active{background:#000}.divider{color:#9ca3af;align-items:center;gap:12px;margin:28px 0;font-size:12px;display:flex}.divider:before,.divider:after{content:"";background:var(--border);flex:1;height:1px}.btn-ghost{border:1px solid var(--border);border-radius:var(--radius);height:46px;color:var(--fg);cursor:pointer;background:#fff;justify-content:center;align-items:center;gap:10px;font-size:14px;font-weight:500;transition:border-color .15s,background .15s;display:flex}.btn-ghost:hover{border-color:var(--border-strong);background:var(--field-bg)}.login-foot{text-align:center;color:var(--muted);margin-top:32px;font-size:13px}@media (width<=860px){.login-shell{grid-template-columns:1fr}.login-brand{display:none}.login-card>.logo{display:inline-flex}}.alert{border-radius:var(--radius);border:1px solid;margin-top:24px;padding:12px 14px;font-size:13px;line-height:1.5}.alert-error{color:#b91c1c;background:#fef2f2;border-color:#fca5a5}.alert-warning{color:#92400e;background:#fffbeb;border-color:#fcd34d}.session-head{margin-top:40px}.session-info{border:1px solid var(--border);border-radius:var(--radius);margin:28px 0}.session-info>div{justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.session-info>div+div{border-top:1px solid var(--border)}.session-info dt{color:var(--muted);font-size:13px}.session-info dd{font-size:13px;font-weight:600}.btn-primary:disabled{opacity:.6;cursor:default}.bridge-shell{justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.bridge-card{flex-direction:column;width:100%;max-width:380px;display:flex}.bridge-card .logo{color:var(--fg);align-self:flex-start}.bridge-card h2{letter-spacing:-.02em;margin-top:36px;font-size:22px;font-weight:600}.bridge-lead{color:var(--muted);margin-top:8px;font-size:14px}.bridge-steps{border:1px solid var(--border);border-radius:var(--radius);margin-top:28px;list-style:none;overflow:hidden}.bridge-steps li{color:var(--muted);align-items:center;gap:12px;padding:14px 16px;font-size:13.5px;display:flex}.bridge-steps li+li{border-top:1px solid var(--border)}.bridge-steps li.done{color:var(--fg)}.bridge-steps li.active{color:var(--fg);background:var(--field-bg);font-weight:500}.bridge-steps li.failed{color:#b91c1c}.step-dot{border:1px solid var(--border-strong);width:20px;height:20px;color:var(--fg);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:11px;font-weight:600;display:inline-flex}li.done .step-dot{border-color:var(--accent);color:var(--accent)}li.active .step-dot{border-color:var(--fg);animation:1.2s ease-in-out infinite pulse}li.failed .step-dot{color:#b91c1c;border-color:#b91c1c}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.bridge-actions{gap:10px;margin-top:20px;display:flex}.bridge-actions .btn-primary,.bridge-actions .btn-ghost{flex:1;width:auto;height:42px}
