@import"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;600;700&family=JetBrains+Mono:wght@400;600&display=swap";/**
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
* https://github.com/chjj/term.js
* @license MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* Originally forked from (with the author's permission):
*   Fabrice Bellard's javascript vt100 for jslinux:
*   http://bellard.org/jslinux/
*   Copyright (c) 2011 Fabrice Bellard
*   The original design remains. The terminal itself
*   has been extended to include xterm CSI codes, among
*   other features.
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;inset:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}:root{color-scheme:dark;--bg: #0e1524;--bg-soft: #18233a;--bg-card: #22304d;--border: rgba(130, 190, 255, .16);--text: #f6f8ff;--text-soft: rgba(221, 232, 255, .7);--accent: #3ad0ff;--accent-strong: #2aa8ff;--danger: #ff6b6b;--warning: #ffb347;--bg-gradient-top: #223a63}[data-theme=light]{color-scheme:light;--bg: #f2f6ff;--bg-soft: #e7eefc;--bg-card: #ffffff;--border: rgba(46, 77, 140, .18);--text: #1d2a40;--text-soft: rgba(34, 50, 78, .65);--accent: #1fa2ff;--accent-strong: #167fd4;--danger: #d64545;--warning: #d48b2f;--bg-gradient-top: #cfdcf5}*{box-sizing:border-box;margin:0;padding:0}body{font-family:Space Grotesk,Segoe UI,sans-serif;background:radial-gradient(circle at top,var(--bg-gradient-top),var(--bg) 55%);color:var(--text);min-height:100vh}#root{min-height:100vh}button,input,select{font-family:inherit}.app-loader{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px}.pulse{width:18px;height:18px;background:var(--accent);border-radius:999px;animation:pulse 1.8s infinite}@keyframes pulse{0%{transform:scale(.8);opacity:.4}50%{transform:scale(1);opacity:1}to{transform:scale(.8);opacity:.4}}.login-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:40px 20px}.login-card{width:min(480px,100%);background:var(--bg-card);border:1px solid var(--border);border-radius:24px;padding:32px;box-shadow:0 20px 60px #090c1180;display:flex;flex-direction:column;gap:24px}.theme-toggle-row{display:flex;justify-content:flex-end}.login-brand{display:flex;gap:16px;flex-direction:column;align-items:center;text-align:center}.login-logo{width:300px;height:auto;display:block;filter:drop-shadow(0 10px 22px rgba(48,211,255,.25))}.login-brand h1{font-size:28px;letter-spacing:-.02em}.login-brand p{color:var(--text-soft);font-size:14px}.glow-dot{width:46px;height:46px;border-radius:16px;background:radial-gradient(circle at top,var(--accent),#1685c7);box-shadow:0 0 24px #30d3ff99}.login-form{display:grid;gap:16px}label{display:grid;gap:8px;font-size:13px;text-transform:uppercase;letter-spacing:.08em;color:var(--text-soft)}input,select{background:var(--bg-soft);border:1px solid var(--border);border-radius:12px;padding:12px 14px;color:var(--text);font-size:15px}textarea{background:var(--bg-soft);border:1px solid var(--border);border-radius:12px;padding:12px 14px;color:var(--text);font-size:15px;resize:vertical;min-height:110px}button{background:var(--accent);color:#041613;border:none;border-radius:12px;padding:12px 18px;font-weight:600;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}button:hover{transform:translateY(-1px);box-shadow:0 8px 20px #4dd3b94d}button:disabled{opacity:.6;cursor:not-allowed;box-shadow:none}button.warn{background:var(--warning)}button.ghost{background:transparent;color:var(--text);border:1px solid var(--border)}button.ghost:hover{box-shadow:none;border-color:#ffffff4d}.error-chip{background:#f4606033;color:#ffb0b0;padding:8px 12px;border-radius:999px;font-size:13px}.success-chip{background:#4dd3b933;color:#c9fff0;padding:8px 12px;border-radius:999px;font-size:13px}.login-footer{display:flex;justify-content:space-between;font-size:12px;color:var(--text-soft)}.login-footer a{color:var(--text-soft);text-decoration:none}.login-footer a:hover{text-decoration:underline}.brand-credit{margin-top:6px;font-size:11px;color:#dce8ff80;text-align:center}.brand-credit a{color:#78beffe6;text-decoration:none}.brand-credit a:hover{text-decoration:underline}.dashboard-credit{margin-top:18px;text-align:right}.form-actions{display:grid;gap:10px}.link-button{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}.dashboard-shell{display:grid;grid-template-columns:280px 1fr;min-height:100vh}.sidebar{position:relative;background:var(--bg-soft);border-right:1px solid var(--border);padding:28px 20px;display:flex;flex-direction:column;gap:24px}.sidebar:before{content:"";position:absolute;inset:0 0 auto;height:96px;background:linear-gradient(180deg,var(--bg-gradient-top) 0%,var(--bg-soft) 100%);border-bottom:1px solid rgba(130,190,255,.1);pointer-events:none;z-index:0}.sidebar>*{position:relative;z-index:1}.brand{min-height:72px}.brand{display:flex;gap:12px;align-items:center}.brand-logo{width:190px;height:auto;display:block;filter:drop-shadow(0 10px 24px rgba(48,211,255,.25))}.nav-section h4{font-size:13px;text-transform:uppercase;color:var(--text-soft);letter-spacing:.2em;margin-bottom:10px}.chip-list{display:flex;flex-wrap:wrap;gap:8px}.chip{background:transparent;color:var(--text);border:1px solid var(--border);padding:6px 12px;border-radius:999px;font-size:12px}.chip.active{background:var(--accent);color:#041613}.vm-list{display:grid;gap:10px}.sort-row{margin-bottom:10px}.sort-row label{font-size:11px}.sort-row select{margin-top:6px;width:100%}.vm-item{display:flex;justify-content:space-between;align-items:center;padding:12px;border-radius:14px;border:1px solid var(--border);background:transparent;text-align:left}.vm-item div{display:grid;gap:4px}.vm-item strong{font-size:15px;color:var(--text)}.vm-type-pill{display:inline-flex;align-items:center;gap:6px}.vm-item .vm-type-pill{font-size:11px;color:#f6f7fb59;letter-spacing:.08em;text-transform:uppercase}[data-theme=light] .vm-type-pill{color:#2b3a58}.vm-item em{font-style:normal;font-size:12px;color:var(--accent)}.vm-item.active{border-color:#4dd3b966;background:#4dd3b914}.main{padding:32px 36px 48px}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;gap:16px;flex-wrap:wrap}.header h1{font-size:28px}.header p{color:var(--text-soft);margin-top:6px}.user-greeting{background:var(--bg-card);border:1px solid var(--border);padding:10px 14px;border-radius:999px;font-size:13px;color:var(--text-soft)}.ip-hint{margin-top:6px;font-size:12px;color:#dce8ff99;display:flex;align-items:center;gap:8px}.ip-hint-icon{width:18px;height:18px;border-radius:999px;border:1px solid rgba(247,183,74,.6);background:#f7b74a2e;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:#ffdba6f2}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:28px}.stat-card{background:var(--bg-card);border:1px solid var(--border);padding:18px;border-radius:18px;display:grid;gap:10px}.stat-card h3{font-size:13px;text-transform:uppercase;letter-spacing:.2em;color:var(--text-soft)}.stat-value{font-size:20px;font-weight:600}.stat-sub{font-size:13px;color:var(--text-soft)}.vm-detail{background:var(--bg-card);border:1px solid var(--border);border-radius:24px;padding:24px;display:grid;gap:24px}.vm-header{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px}.vm-header h2{font-size:24px}.action-row{display:flex;flex-wrap:wrap;gap:10px}.vm-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}.metric{background:var(--bg-soft);border:1px solid var(--border);padding:12px;border-radius:14px;display:grid;gap:6px}.metric span{font-size:12px;color:var(--text-soft);text-transform:uppercase;letter-spacing:.08em}.metric strong{font-family:JetBrains Mono,monospace;font-size:14px}.vm-panels{display:grid;grid-template-columns:2fr 1fr;gap:18px}.panel{background:var(--bg-soft);border:1px solid var(--border);border-radius:18px;padding:16px;display:grid;gap:12px}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.panel h3{font-size:14px;text-transform:uppercase;color:var(--text-soft);letter-spacing:.2em}.console-shell{display:grid;gap:8px}.console-status{font-size:12px;color:var(--text-soft);display:flex;align-items:center;justify-content:space-between;gap:12px}.console-status button{padding:6px 10px;font-size:11px}.console-screen{width:100%;min-height:420px;height:clamp(420px,62vh,760px);background:#0a0c12;border-radius:12px;overflow:hidden}.console-screen:focus{outline:2px solid rgba(77,211,185,.6);outline-offset:2px}.console-screen canvas{width:100%;height:100%;display:block}.terminal-screen .xterm{height:100%}.mode-toggle{display:flex;gap:8px}.modal-backdrop{position:fixed;inset:0;background:#060a12b3;display:flex;align-items:center;justify-content:center;padding:24px;z-index:50}.modal{width:min(560px,100%);background:var(--bg-card);border:1px solid var(--border);border-radius:20px;padding:24px;display:grid;gap:14px;box-shadow:0 30px 80px #05080e99}.modal p{color:var(--text-soft);font-size:14px}.media-list{max-height:280px;overflow:auto;display:grid;gap:10px}.media-item{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:var(--bg-soft);font-size:14px}.media-item span{font-family:JetBrains Mono,monospace;font-size:12px}.media-item em{font-style:normal;color:var(--text-soft);font-size:12px}.modal-actions{display:flex;justify-content:flex-end;gap:10px}.resource-list{display:grid;gap:10px;align-content:start}.resources-panel{display:flex;flex-direction:column}.resources-panel .hint{margin-top:auto}.resource-list div{display:flex;justify-content:space-between;padding-bottom:8px;border-bottom:1px solid rgba(255,255,255,.04)}.resource-list span{color:var(--text-soft);font-size:12px}.hint{font-size:12px;color:var(--text-soft);margin-top:6px}.vm-empty{padding:40px;text-align:center;color:var(--text-soft)}@media (max-width: 1000px){.dashboard-shell{grid-template-columns:1fr}.sidebar{position:relative;border-right:none;border-bottom:1px solid var(--border)}.vm-panels{grid-template-columns:1fr}}@media (max-width: 640px){.main{padding:24px 16px 32px}.login-card{padding:24px}.login-footer{flex-direction:column;gap:6px}}
