*{box-sizing:border-box}body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#f0f2f5}#loginScreen{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:#eceff2;z-index:100}#loginScreen.hidden{display:none}.login-box{background:#fff;border-radius:16px;padding:2.5rem;width:100%;max-width:385px;box-shadow:0 4px 24px rgba(0,0,0,.1);animation:popIn .35s cubic-bezier(.34,1.56,.64,1)}@keyframes popIn{0%{opacity:0;transform:scale(.9) translateY(16px)}to{opacity:1;transform:scale(1) translateY(0)}}.login-logo{font-size:28px;margin-bottom:.5rem}.login-title{font-size:22px;font-weight:600;color:#1a1a1a;margin-bottom:4px}.login-sub{font-size:13px;color:#888;margin-bottom:2rem}.field{margin-bottom:1rem}.field label{display:block;font-size:12px;font-weight:600;color:#555;margin-bottom:6px}.field input{width:100%;border:1.5px solid #e0e0e0;border-radius:8px;padding:.7rem 1rem;font-size:14px;font-family:inherit;color:#1a1a1a;outline:none;transition:border-color .2s,box-shadow .2s}.field input:focus{border-color:#2196f3;box-shadow:0 0 0 3px rgba(33,150,243,.12)}.login-btn{width:100%;padding:.8rem;background:#2196f3;color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;font-family:inherit;cursor:pointer;margin-top:.5rem;transition:background .2s,transform .15s}.login-btn:hover{background:#1976d2}.login-btn:active{transform:scale(.98)}.login-error{background:#ffebee;border:1px solid #ffcdd2;border-radius:8px;padding:.6rem .875rem;font-size:12px;color:#c62828;margin-top:.875rem;display:none}.login-error.show{display:block;animation:shake .3s ease}@keyframes shake{0%,to{transform:translateX(0)}25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}#dashboard{display:none}#dashboard.visible{display:block}.container{max-width:1100px;margin:0 auto;padding:2rem 1rem}.header{margin-bottom:2rem;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem}.header-left h1{font-size:28px;font-weight:600;margin:0;color:#1a1a1a}.header-left p{font-size:13px;color:#888;margin:4px 0 0}.header-right{gap:10px;flex-wrap:wrap}.header-right,.session-timer{display:flex;align-items:center}.session-timer{gap:6px;background:#fff;border:1.5px solid #e0e0e0;border-radius:8px;padding:.5rem .875rem;font-size:13px;font-weight:500;color:#333;transition:all .3s}.session-timer.warn{border-color:#ff9800;background:#fff3e0;color:#e65100}.session-timer.danger{border-color:#f44336;background:#ffebee;color:#c62828;animation:pulse-danger .5s infinite alternate}@keyframes pulse-danger{0%{box-shadow:0 0 0 rgba(244,67,54,0)}to{box-shadow:0 0 10px rgba(244,67,54,.3)}}.timer-dot{width:7px;height:7px;border-radius:50%;background:#4caf50;animation:blink 2s infinite;flex-shrink:0}.session-timer.warn .timer-dot{background:#ff9800;animation-duration:.8s}.session-timer.danger .timer-dot{background:#f44336;animation-duration:.3s}@keyframes blink{0%,to{opacity:1}50%{opacity:.2}}.logout-btn{padding:.6rem 1rem;background:#fff;color:#c62828;border:1.5px solid #ffcdd2;border-radius:8px;font-size:13px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .2s}.logout-btn:hover{background:#ffebee;border-color:#f44336}.refresh-all-btn{padding:.6rem 1.2rem;background:#2196f3;color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:6px;transition:background .2s;flex-shrink:0;font-family:inherit}.refresh-all-btn:hover{background:#1976d2}.refresh-all-btn:disabled{opacity:.6;cursor:not-allowed}.refresh-all-btn.spinning svg{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.instance-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));grid-gap:1.25rem;gap:1.25rem}.instance-card{background:#fff;border:1px solid #e0e0e0;border-radius:14px;padding:1.5rem;position:relative;overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,.06);transition:box-shadow .2s}.instance-card:hover{box-shadow:0 4px 12px rgba(0,0,0,.1)}.instance-card:before{content:"";position:absolute;top:0;left:0;right:0;height:4px;background:#e0e0e0;transition:background .3s}.instance-card.running:before{background:#4caf50}.instance-card.stopped:before{background:#f44336}.instance-card.loading:before{background:#ff9800}.instance-card.starting:before{background:#2196f3}.instance-card.stopping:before{background:#9c27b0}.instance-card.unknown:before{background:#9e9e9e}.card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:.75rem}.card-title{flex:1 1;min-width:0}.instance-name{font-size:17px;font-weight:600;color:#1a1a1a;margin:0 0 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.instance-id{font-size:11px;color:#aaa;font-family:monospace}.card-refresh-btn{background:transparent;border:1px solid #e0e0e0;border-radius:8px;width:34px;height:34px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#999;flex-shrink:0;transition:all .2s;padding:0}.card-refresh-btn:hover{border-color:#2196f3;color:#2196f3;background:#e3f2fd}.card-refresh-btn:disabled{opacity:.4;cursor:not-allowed}.card-refresh-btn.spinning svg{animation:spin .8s linear infinite}.instance-info{background:#f9f9f9;border-radius:8px;padding:.6rem .875rem;margin-bottom:1rem;display:flex;flex-direction:column;gap:4px}.info-row{display:flex;align-items:center;justify-content:space-between;font-size:12px}.info-label{color:#999}.info-val{color:#333;font-family:monospace;font-size:11px}.info-val.ip{color:#1976d2;font-weight:600}.info-val.none{color:#bbb;font-style:italic;font-family:inherit}.instance-status{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:700;padding:.4rem .75rem;border-radius:20px;text-transform:uppercase;letter-spacing:.5px;margin-bottom:1.1rem}.instance-status .dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.instance-status.running{background:#e8f5e9;color:#2e7d32}.instance-status.running .dot{background:#4caf50;animation:blink 2s infinite}.instance-status.stopped{background:#ffebee;color:#c62828}.instance-status.stopped .dot{background:#f44336}.instance-status.loading{background:#fff3e0;color:#e65100}.instance-status.loading .dot{background:#ff9800;animation:blink .8s infinite}.instance-status.starting{background:#e3f2fd;color:#1565c0}.instance-status.starting .dot{background:#2196f3;animation:blink .8s infinite}.instance-status.stopping{background:#f3e5f5;color:#6a1b9a}.instance-status.stopping .dot{background:#9c27b0;animation:blink .8s infinite}.instance-status.unknown{background:#f5f5f5;color:#757575}.instance-status.unknown .dot{background:#9e9e9e}.action-buttons{display:flex;gap:.75rem}.action-buttons button{flex:1 1;padding:.75rem 1rem;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;border:1px solid #ddd;background:#fff;text-transform:uppercase;letter-spacing:.3px;font-family:inherit;transition:all .2s}.action-buttons button:hover{background:#f5f5f5}.action-buttons button:active{transform:scale(.97)}.action-buttons button:disabled{opacity:.4;cursor:not-allowed;transform:none}.action-buttons button.on{border-color:#4caf50;color:#2e7d32}.action-buttons button.on:hover:not(:disabled){background:#e8f5e9}.action-buttons button.off{border-color:#f44336;color:#c62828}.action-buttons button.off:hover:not(:disabled){background:#ffebee}#logoutOverlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:200;align-items:center;justify-content:center}#logoutOverlay.show{display:flex}.logout-modal{background:#fff;border-radius:16px;padding:2.5rem;text-align:center;max-width:360px;width:90%;box-shadow:0 8px 40px rgba(0,0,0,.2);animation:popIn .3s cubic-bezier(.34,1.56,.64,1)}.logout-modal .icon{font-size:40px;margin-bottom:1rem}.logout-modal h2{font-size:20px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.logout-modal p{font-size:13px;color:#777;line-height:1.6;margin-bottom:1.5rem}.back-login-btn{width:100%;padding:.75rem;background:#2196f3;border:none;border-radius:8px;color:#fff;font-size:14px;font-weight:600;font-family:inherit;cursor:pointer;transition:background .2s}.back-login-btn:hover{background:#1976d2}.message{position:fixed;top:1.5rem;right:1.5rem;padding:.875rem 1.25rem;border-radius:10px;font-size:13px;font-weight:500;z-index:1000;animation:slideIn .3s ease;box-shadow:0 4px 16px rgba(0,0,0,.15);max-width:320px}@keyframes slideIn{0%{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}.message.success{background:#4caf50;color:#fff}.message.error{background:#f44336;color:#fff}.message.loading{background:#ff9800;color:#fff}