/**
 * 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;right:0;left:0;top:0;bottom: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;left:0;top:0;bottom:0;right: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}*{box-sizing:border-box}body{margin:0;font-family:Segoe UI,Helvetica Neue,Arial,sans-serif;background:#0c0f14;color:#e2e8f0}a{color:inherit;text-decoration:none}.page{padding:24px;max-width:1200px;margin:0 auto}.page.page-wide{max-width:none;width:100%;margin:0;padding-left:24px;padding-right:24px}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px}.page-header h1{margin:0}.page-actions{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}.center{display:flex;min-height:100vh;align-items:center;justify-content:center}.card{background:#111827;border:1px solid #1f2937;padding:24px;border-radius:12px;box-shadow:0 12px 30px #0000004d}.card h1,.card h3{margin-top:0}.card label{display:block;margin-bottom:12px;font-size:14px}.card input,.card textarea{width:100%;margin-top:6px;padding:8px 10px;border-radius:8px;border:1px solid #334155;background:#0b1220;color:#e2e8f0}.header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.header-left{display:flex;align-items:center;gap:12px;position:relative}.header-right{display:flex;align-items:center;gap:12px}.language-card{display:flex;flex-direction:column;gap:6px;padding:8px 12px;border-radius:10px;background:#0f172a;border:1px solid #1f2937;min-width:140px}.language-card select{width:100%;border-radius:8px;border:1px solid #334155;background:#0b1220;color:#e2e8f0;padding:6px 8px}.icon-button{background:#0f172a;border:1px solid #1f2937;color:#e2e8f0;padding:6px 10px;border-radius:8px;cursor:pointer}.menu{position:absolute;top:42px;left:0;background:#0f1724;border:1px solid #1f2937;border-radius:10px;box-shadow:0 10px 30px #00000059;display:flex;flex-direction:column;min-width:220px;z-index:10}.menu button{background:transparent;border:none;color:#e2e8f0;padding:10px 14px;text-align:left;cursor:pointer}.menu button:hover{background:#1e293b}.menu-section{display:flex;flex-direction:column;gap:6px;padding:8px 14px}.menu-section select{width:100%}.audit-controls{display:flex;gap:8px;align-items:center;margin:10px 0 16px}.audit-controls input{flex:1;border-radius:8px;border:1px solid #334155;background:#0b1220;color:#e2e8f0;padding:8px 10px}.muted.small{font-size:12px;color:#94a3b8}.form-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));margin-bottom:20px}.form-grid textarea{grid-column:1 / -1}.add-node-panel{display:flex;flex-direction:column;gap:16px}.add-node-toggle{align-self:flex-start}.checkbox{display:flex;align-items:center;gap:8px}.file-input{display:flex;flex-direction:column;gap:6px;font-size:14px}.file-input input[type=file]{padding:6px 0;background:transparent;border:none}button,.link-button{display:inline-flex;align-items:center;justify-content:center;line-height:1;background:#2563eb;color:#fff;border:none;padding:8px 12px;border-radius:8px;cursor:pointer}button:hover,.link-button:hover{background:#1d4ed8}button.danger{background:#ef4444}button.danger:hover{background:#dc2626}.table{border:1px solid #1f2937;border-radius:10px;overflow:hidden}.table-row{display:grid;grid-template-columns:1.2fr 1fr 2fr 2fr;column-gap:16px;row-gap:10px;padding:16px 20px;border-bottom:1px solid #1f2937;align-items:center}.table-row>div{min-width:0}.table.nodes .table-row{grid-template-columns:minmax(0,1.2fr) minmax(0,.9fr) minmax(0,1.7fr) minmax(0,.9fr) minmax(200px,2fr) 160px}.table.compact .table-row{grid-template-columns:1.4fr 1.6fr .6fr 1fr 1fr .8fr .8fr .8fr}.badge.problem-count{margin-left:8px;padding:2px 6px;border-radius:999px;font-size:12px;background:#1f2937;border:1px solid #334155;color:#e2e8f0}.table.users-table .table-row{grid-template-columns:minmax(120px,1.2fr) minmax(140px,1fr) minmax(180px,1fr)}.table.users-table .table-row .actions{display:flex;gap:8px;justify-content:flex-start}.table.users-table .table-row .actions button{width:auto}.table-row.head{background:#0b1220;font-weight:600}.table-row:last-child{border-bottom:none}.table-row .actions{display:grid;grid-auto-rows:minmax(36px,auto);gap:8px;width:100%;min-width:0;align-items:center;justify-items:stretch}.table-row .actions button,.table-row .actions .link-button{width:100%}.table-row>div:not(.actions){white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nodes-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:20px;align-items:start;grid-auto-rows:max-content}.dashboard-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:24px}.dashboard-card{background:#111827;border:1px solid #1f2937;border-radius:12px;padding:16px}.dashboard-value{font-size:22px;font-weight:600;margin-top:6px}.dashboard-section{margin-top:24px}.dashboard-section-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}.dashboard-filters{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.dashboard-filters input{background:#0b1220;border:1px solid #334155;color:#e2e8f0;padding:8px 10px;border-radius:8px}.dashboard-filters .checkbox{display:flex;align-items:center;gap:6px;font-size:13px;color:#cbd5f5}.table.dashboard-nodes .table-row{grid-template-columns:minmax(140px,1.4fr) minmax(90px,.6fr) minmax(70px,.5fr) minmax(120px,.9fr) minmax(120px,.9fr) minmax(90px,.7fr) minmax(90px,.7fr) minmax(90px,.7fr) minmax(140px,1fr) minmax(120px,.8fr)}.table.dashboard-users .table-row{grid-template-columns:minmax(140px,1.2fr) minmax(120px,1fr) minmax(110px,.8fr) minmax(120px,.9fr) minmax(90px,.7fr) minmax(90px,.7fr) minmax(140px,1fr) minmax(140px,1fr)}.badge.stale{background:#7c2d12;color:#fde68a}.badge.source{margin-left:8px;text-transform:none}.badge.source-ok{background:#0f766e;color:#ccfbf1}.badge.source-bad{background:#334155;color:#e2e8f0}.node-name{font-weight:600}.nodes-cards-head{display:flex;justify-content:space-between;align-items:center;padding:6px 4px;grid-column:1 / -1}.header-user{display:flex;align-items:center;gap:12px}.nodes-cards-head h3{margin:0}.node-type-toggle{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.toggle-pill{background:#0f172a;border:1px solid #1f2937;color:#cbd5f5;padding:6px 12px;border-radius:999px;cursor:pointer;font-size:12px;text-transform:uppercase;letter-spacing:.04em}.toggle-pill.active{background:#2563eb;border-color:#2563eb;color:#fff;box-shadow:0 8px 16px #2563eb40}.muted{color:#94a3b8}.muted.small{font-size:12px}.validation-summary{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:8px 0 16px}.validation-badge{display:inline-flex;align-items:center;gap:6px}.validation-detail{font-size:12px;color:#94a3b8}.node-card{background:linear-gradient(145deg,#121720,#0d121a);border:1px solid #1c2431;border-radius:16px;padding:18px;box-shadow:0 18px 36px #00000073;display:flex;flex-direction:column;gap:14px;height:fit-content}.node-card-top{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;flex-wrap:wrap}.node-card-select{display:inline-flex;align-items:center;gap:8px}.node-card-select input{width:18px;height:18px;accent-color:#2563eb}.node-card-title{display:flex;flex-direction:column;gap:6px;min-width:0}.node-name-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.node-name{font-size:20px;font-weight:700;color:#f8fafc;flex:1 1 160px;min-width:0}.tag-row{display:flex;gap:6px;flex-wrap:wrap}.chip.subtle{background:#1b2432;border-color:#2a3445}.node-link a{color:#9cc1ff}.node-versions{display:flex;gap:12px;flex-wrap:wrap}.node-uptime{text-align:right;min-width:120px;display:flex;flex-direction:column;align-items:flex-end;gap:2px}.node-uptime .icon-button{align-self:center}.uptime-value{font-size:24px;font-weight:700;color:#e0f2fe}.uptime-label{color:#94a3b8;font-size:12px}.uptime-arrow{font-size:12px;color:#64748b}.node-availability{background:#101722;border:1px solid #1d2531;border-radius:12px;padding:14px;display:flex;flex-direction:column;gap:8px}.availability-header{display:flex;justify-content:space-between;align-items:center}.node-availability .availability{gap:8px}.metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.metrics.empty{color:#94a3b8}.metric{background:#0f1724;border:1px solid #1d2531;border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:6px;overflow:hidden;min-width:0}.metric-header{display:flex;justify-content:space-between;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}.metric-header span{min-width:0}.metric-header .muted.small{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.metric-bars{display:grid;grid-auto-flow:column;grid-auto-columns:4px;gap:3px;align-items:end;max-width:100%;overflow:hidden;width:100%;min-width:0}.metric-bar{width:4px;border-radius:999px;background:#334155}.metric-bar.cpu{background:#38bdf8}.metric-bar.mem{background:#22c55e}.metric-bar.disk{background:#fbbf24}.node-meta-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}.meta-box{background:#101722;border:1px solid #1d2531;border-radius:10px;padding:10px 12px}.meta-label{font-size:12px;color:#94a3b8}.meta-value{font-size:14px;color:#e2e8f0;word-break:break-all}.node-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.node-actions button,.node-actions .link-button{min-width:90px;min-height:36px}button.primary{background:#2563eb}button.primary:hover{background:#1d4ed8}button.secondary{background:#1f2937}button.secondary:hover{background:#2a3547}button.warning{background:#f59e0b;color:#0b0f17}button.warning:hover{background:#d97706}button.ghost{background:#b91c1c}button.ghost:hover{background:#991b1b}.btn-inline{width:auto;justify-self:start;padding:8px 16px}.error{background:#7f1d1d;padding:10px 12px;border-radius:8px;margin:12px 0}.hint{font-size:12px;color:#94a3b8}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172acc;display:flex;align-items:center;justify-content:center;padding:20px;z-index:30}.node-details-modal{z-index:40}.overlay-modal{z-index:50}.action-plan-modal{z-index:60}.edit-node-modal{z-index:50}.ssh-modal{z-index:60}.modal-content{background:#0b1220;border:1px solid #1f2937;padding:20px;border-radius:12px;width:min(900px,90vw);max-height:90vh;overflow:auto}.modal-content.auth-modal{width:min(520px,92vw);background:#0b1220;border:1px solid #1f2937;box-shadow:0 20px 60px #0009}.node-details-content{width:min(980px,95vw);max-height:90vh;overflow-y:auto;overflow-x:hidden}.node-details-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.node-id{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px}.node-id .ghost.small{padding:4px 8px;font-size:12px}.modal-content textarea{width:100%;background:#0f172a;color:#e2e8f0;border-radius:8px;border:1px solid #334155;padding:10px;font-family:Courier New,monospace}.modal-content.wide{width:min(1100px,92vw)}.modal-content h3{margin:0}.modal-content label{display:flex;flex-direction:column;gap:6px;font-size:14px;color:#cbd5f5}.modal-content input,.modal-content select,.modal-content textarea{width:100%;background:#0f1724;border:1px solid #2a3344;color:#e2e8f0;border-radius:8px;padding:8px 10px}.modal-content select{height:36px}.modal-content .actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}.qr-img{width:180px;height:180px;border-radius:10px;border:1px solid #1f2937;background:#0b1220}.ssh-modal-content{height:min(80vh,820px);display:flex;flex-direction:column;gap:12px}.terminal-container{flex:1;border-radius:10px;border:1px solid #1f2937;background:#0b1220;padding:8px;overflow:hidden}.terminal-container .xterm{height:100%}.ssh-status .badge{text-transform:uppercase}.files-toolbar{display:flex;flex-wrap:wrap;gap:16px;align-items:center;justify-content:space-between;background:#0c121ce6;border:1px solid var(--border);border-radius:16px;padding:12px;margin-bottom:16px}.files-select{display:flex;gap:12px;align-items:center}.files-select label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:#cbd5f5}.files-select select{background:#0b1220;border:1px solid #2a3344;color:#e2e8f0;border-radius:10px;padding:7px 10px}.files-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.files-search{background:#0b1220;border:1px solid #2a3344;color:#e2e8f0;border-radius:10px;padding:8px 10px;min-width:220px}.db-toolbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:16px}.db-toolbar label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:#cbd5f5}.db-toolbar select{background:#0f1724;border:1px solid #2a3344;color:#e2e8f0;border-radius:8px;padding:6px 8px;min-width:220px}.db-tabs{display:flex;gap:8px}.db-section{padding:16px}.db-section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.db-section-actions{display:flex;align-items:center;gap:12px}.db-toggle{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:#cbd5f5}.db-warning{padding:10px 12px;border:1px solid rgba(250,204,21,.25);background:#facc1514;color:#fde68a;border-radius:10px;font-size:12px;margin-bottom:12px}.db-table .data-row{grid-template-columns:2fr 1fr 1.2fr 1fr}.db-iframe{padding:0;overflow:hidden;margin-top:16px;height:70vh}.db-iframe iframe{width:100%;height:70vh;border:0;display:block}.files-breadcrumbs{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:12px;border:1px solid var(--border);background:#0c121cb8;margin-bottom:16px;flex-wrap:wrap}.breadcrumb{background:transparent;border:none;color:#93c5fd;cursor:pointer;padding:0}.files-layout{display:grid;grid-template-columns:260px 1fr;gap:16px;align-items:start}.files-sidebar{background:#0c121ce6;border:1px solid var(--border);border-radius:16px;padding:12px;max-height:72vh;overflow:auto}.files-shortcuts{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.tree-divider{height:1px;background:#1f2937;margin:8px 0 12px}.tree-node{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.tree-item{display:inline-flex;align-items:center;justify-content:space-between;width:100%;background:transparent;border:1px solid transparent;color:#e2e8f0;padding:6px 8px;border-radius:8px;cursor:pointer}.tree-item.active,.tree-item:hover{border-color:#3b82f666;background:#1e3a8a33}.tree-toggle{align-self:flex-end;background:#0b1220;border:1px solid #2a3344;color:#e2e8f0;padding:2px 6px;border-radius:6px;cursor:pointer;font-size:12px}.tree-children{padding-left:12px;display:flex;flex-direction:column;gap:6px}.files-list{background:#0c121ce6;border:1px solid var(--border);border-radius:16px;overflow-x:auto;overflow-y:hidden}.files-list .table{width:100%;border:none;border-radius:0}.files-list .table .table-row{grid-template-columns:minmax(220px,1.4fr) minmax(100px,.7fr) minmax(170px,.9fr) minmax(110px,.7fr) minmax(260px,1.25fr);gap:10px;padding:12px 16px;border-bottom:1px solid var(--border)}.files-list .table .table-row.head{background:#0b122099;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.files-list .table .table-row .actions{display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:6px}.files-list .table .table-row .actions button{width:auto;padding:6px 10px;border-radius:8px;font-size:12px}.files-list .table .table-row>div:not(.actions){white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-name{cursor:pointer;font-weight:600}.file-name.is-dir{color:#93c5fd}.hidden-file{display:none}.file-preview-image{max-width:100%;border-radius:10px;border:1px solid #1f2937}@media (max-width: 980px){.files-layout{grid-template-columns:1fr}.files-sidebar{max-height:40vh}}.plan-steps ul{margin:6px 0 0;padding-left:18px;color:#e2e8f0}.modal-header{display:flex;flex-direction:column;gap:12px;margin-bottom:12px}.tabs{display:flex;gap:8px;flex-wrap:wrap}.tab{background:#1e293b;color:#cbd5f5;border:1px solid #334155;padding:6px 10px;border-radius:8px;cursor:pointer}.tab.active{background:#2563eb;border-color:#2563eb;color:#fff;box-shadow:0 6px 14px #2563eb4d}.grid-2{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.clients .table-row input{width:100%}.clients-cards-mobile{display:none}.source-card .actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px}.client-card{background:#0d1522;border:1px solid #1f2937;border-radius:12px;padding:14px;display:flex;flex-direction:column;gap:12px;margin-top:12px}.client-card .field-label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#94a3b8;margin-bottom:6px}.client-card .row{display:flex;gap:8px}.client-card .row input{flex:1}.clients-toolbar{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:10px;flex-wrap:wrap}.clients-toolbar input{flex:1}.pagination{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.pagination select{background:#0f1724;border:1px solid #2a3344;color:#e2e8f0;border-radius:8px;padding:6px 8px}.services-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 0;flex-wrap:wrap}.table.services .table-row{grid-template-columns:minmax(120px,.9fr) minmax(180px,1.6fr) minmax(120px,.8fr) minmax(120px,.8fr) minmax(80px,.6fr) minmax(90px,.6fr) minmax(140px,.9fr) minmax(90px,.6fr) minmax(200px,1.2fr)}@media (max-width: 900px){.nodes-cards{grid-template-columns:1fr}.tabs{flex-wrap:wrap;gap:6px;padding-bottom:0}.tab{padding:4px 8px;font-size:12px;border-radius:7px}.table.sources .table-row>div{min-width:120px}.table.sources .table-row input,.table.sources .table-row select{min-width:140px}.table.services{overflow-x:auto;-webkit-overflow-scrolling:touch}.table.services .table-row{min-width:1280px;width:max-content}.table.bots{width:100%}.table.bots .table-row>div{display:flex;flex-direction:column;gap:6px;min-width:0}.table.bots .table-row .status-cell{display:grid;grid-template-columns:auto 1fr;gap:6px 8px;align-items:center}.table.bots .table-row .status-cell .status-error{grid-column:1 / -1;font-size:11px;color:#fca5a5;line-height:1.3;word-break:break-word}.bots-view{grid-column:1 / -1;width:100%;display:block}.bots-view .table.bots{width:100%}.bots-status{grid-column:1 / -1}.bot-error{font-size:12px;color:#fca5a5;line-height:1.4;word-break:break-word}.clients-table .table-row.head{display:none!important}.clients-table .table-row{display:flex!important;flex-direction:column;gap:12px;padding:14px;width:100%}.clients-table .table-row>div{display:flex;flex-direction:column;gap:6px;min-width:0}.clients-table .table-row>div:before{content:attr(data-label);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#94a3b8}.clients-table .table-row input,.clients-table .table-row select,.clients-table .table-row button{width:100%}.clients-table .table-row div[data-label=Enable]{flex-direction:row;align-items:center;gap:10px}.clients-table .table-row div[data-label=Enable]:before{margin-right:4px}.clients-table .table-row div[data-label=Actions]{align-items:stretch}.table.bots .table-row.head{display:none}.table.bots .table-row{display:flex;flex-direction:column;gap:10px;padding:14px;width:100%}.table.bots .table-row>div{display:flex;flex-direction:column;gap:6px}.table.bots .table-row>div:before{content:attr(data-label);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#94a3b8}.table.bots .table-row .actions{align-items:stretch}.clients-table-desktop{display:none}.clients-cards-mobile{display:flex;flex-direction:column}}.availability{display:flex;flex-direction:column;gap:6px;min-width:0;overflow:hidden;width:100%}.availability.empty{font-size:12px;color:#94a3b8}.availability-bars{display:grid;grid-auto-flow:column;grid-auto-columns:6px;gap:4px;align-items:end;max-width:100%;overflow:hidden;justify-content:end;width:100%;min-width:0}.availability .bar{width:6px;height:18px;border-radius:4px;background:#334155}.availability .bar.online{background:#22c55e}.availability .bar.degraded{background:#f59e0b}.availability .bar.offline{background:#ef4444}.availability-meta{display:flex;justify-content:space-between;font-size:11px;color:#94a3b8}.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:12px;background:#334155;color:#e2e8f0;text-transform:uppercase}.badge.online{background:#14532d;color:#bbf7d0}.badge.degraded{background:#7c2d12;color:#fde68a}.badge.offline{background:#7f1d1d;color:#fecaca}.badge.queued{background:#334155;color:#e2e8f0}.badge.running{background:#0f766e;color:#ccfbf1}.badge.success{background:#14532d;color:#bbf7d0}.badge.failed{background:#7f1d1d;color:#fecaca}.deploy-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.deploy-status{margin-bottom:12px}.deploy-items{display:grid;gap:12px}.deploy-item{border:1px solid #1f2937;background:#0f1724;border-radius:12px;padding:12px}.deploy-item-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.deploy-item-title{font-weight:600;word-break:break-word}.deploy-log{white-space:pre-wrap;font-size:12px;background:#0b1220;border:1px solid #1f2937;border-radius:8px;padding:10px;max-height:240px;overflow:auto}@media (max-width: 700px){.audit-table .table-row.head{display:none}.audit-table .table-row{grid-template-columns:1fr}.audit-table .table-row>div{display:flex;justify-content:space-between;gap:12px;text-align:right;white-space:normal}.audit-table .table-row>div:before{content:attr(data-label);color:#94a3b8;text-align:left}}.badge.connected{background:#1d4ed8;color:#dbeafe}.badge.connecting{background:#0f766e;color:#ccfbf1}.badge.disconnected{background:#475569;color:#e2e8f0}.badge.error{background:#991b1b;color:#fee2e2}html.rtl body{direction:rtl}.list-editor{display:flex;flex-direction:column;gap:8px}.list-label{font-size:13px;color:#cbd5f5}.chips{display:flex;gap:6px;flex-wrap:wrap}.chip{background:#1e293b;border:1px solid #334155;color:#e2e8f0;padding:2px 8px;border-radius:999px;display:inline-flex;gap:6px;align-items:center;font-size:12px}.chip button{background:transparent;border:none;color:#94a3b8;cursor:pointer;padding:0}.list-input{display:flex;gap:8px}.list-input input{flex:1}:root{--bg-0: #070b11;--bg-1: #0b1220;--bg-2: #111827;--bg-3: #0f1724;--border: #1f2937;--accent: #22c55e;--accent-soft: rgba(34, 197, 94, .18);--text: #e2e8f0;--muted: #94a3b8}body{font-family:Space Grotesk,IBM Plex Sans,Segoe UI,sans-serif;background:radial-gradient(circle at top right,rgba(34,197,94,.08),transparent 45%),radial-gradient(circle at 15% 20%,rgba(59,130,246,.08),transparent 40%),#070b11;color:var(--text)}.app-shell{display:flex;min-height:100vh;background:radial-gradient(circle at 20% 10%,rgba(34,197,94,.08),transparent 45%)}.app-main{flex:1;padding:28px 32px 40px;min-width:0}.sidebar{width:240px;padding:24px 16px;background:#0a0f19e6;border-right:1px solid var(--border);position:sticky;top:0;height:100vh}.sidebar-brand{display:flex;align-items:center;gap:10px;margin-bottom:24px}.sidebar-brand-button{background:transparent;border:none;padding:0;text-align:left;width:100%;cursor:pointer}.sidebar-brand-button:hover,.sidebar-brand-button:focus,.sidebar-brand-button:focus-visible{background:transparent;outline:none}.sidebar-section{font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);padding:6px 12px 2px;margin-top:8px}.sidebar-section-toggle{background:transparent;border:none;padding:6px 12px 2px;margin-top:8px;color:var(--muted);text-transform:uppercase;letter-spacing:.12em;font-size:11px;display:flex;align-items:center;justify-content:flex-start;width:100%;cursor:pointer}.sidebar-section-toggle .chev{transition:transform .2s ease}.sidebar-section-toggle .chev.open{transform:rotate(180deg)}.detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin:12px 0}.detail-message{background:#0f1724cc;border:1px solid var(--border);border-radius:10px;padding:12px;margin:6px 0 16px;max-height:280px;overflow:auto;white-space:pre-wrap}.brand-dot{width:12px;height:12px;border-radius:50%;background:var(--accent);box-shadow:0 0 12px #22c55e99}.brand-title{font-size:16px;font-weight:700}.brand-sub{font-size:12px;color:var(--muted)}.sidebar-nav{display:flex;flex-direction:column;gap:8px}.sidebar-item{background:transparent;border:1px solid transparent;color:var(--text);padding:10px 12px;border-radius:10px;text-align:left;display:flex;align-items:center;justify-content:space-between;gap:8px}.sidebar-item.active{background:#22c55e24;border-color:#22c55e66;box-shadow:0 10px 30px #22c55e26}.sidebar-item.disabled{opacity:.5;cursor:not-allowed}.sidebar-tag{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.sidebar-add-icon{width:18px;height:18px;border-radius:50%;background:#22c55e2e;border:1px solid rgba(34,197,94,.45);color:var(--accent);display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:20px}.topbar-title{font-size:28px;font-weight:700}.topbar-sub{color:var(--muted);font-size:13px}.topbar-actions{display:flex;align-items:center;gap:12px}.dashboard-sticky{position:sticky;top:0;z-index:20;padding:8px 0 12px;margin:-8px 0 20px;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}.mini-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:20px}.mini-card{position:relative;background:#0d131de6;border:1px solid var(--border);border-radius:16px;padding:18px;overflow:hidden;min-height:110px;box-shadow:0 12px 24px #00000059}.mini-card.clickable{cursor:pointer}.mini-card.clickable:hover{border-color:#78be96cc}.mini-card.ok{border-color:#22c55e4d}.mini-card.warn{border-color:#f59e0b66}.mini-ring{position:absolute;right:12px;top:12px;width:48px;height:48px;border-radius:50%;background:conic-gradient(var(--accent) calc(var(--progress, 0) * 1turn),#1f2937 0);mask:radial-gradient(circle at center,transparent 58%,#000 59%);opacity:.9}.mini-body{position:relative;z-index:1}.mini-value{font-size:22px;font-weight:600}.mini-sub{font-size:12px;color:var(--muted);margin-top:4px}.mini-label{margin-top:10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#cbd5f5}.service-card{background:#0c121ce6;border:1px solid var(--border);border-radius:16px;padding:20px;display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:20px}.service-title{font-size:20px;font-weight:700;margin-bottom:8px}.service-meta{display:flex;flex-direction:column;gap:4px;color:var(--muted);font-size:13px}.status-pill{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:11px;background:#1f2937;color:#e2e8f0;text-transform:uppercase}.status-pill.ok{background:#22c55e33;color:#bbf7d0}.service-actions{display:flex;flex-wrap:wrap;gap:8px}.table-card{background:#0c121ce6;border:1px solid var(--border);border-radius:16px;padding:16px;margin-bottom:20px}.node-details-content .table-card{overflow-x:auto}.node-details-content .data-table{min-width:0}.node-details-content .data-row>div{min-width:0}.node-details-content .data-table.bots-table .data-row{grid-template-columns:minmax(150px,1.3fr) minmax(90px,.7fr) minmax(190px,1.25fr) minmax(130px,.85fr) minmax(180px,1fr)}.section-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px}.section-actions{display:flex;gap:10px;align-items:center}.nodes-layout{display:flex;flex-direction:column;gap:16px}.nodes-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}.nodes-toolbar-info{display:flex;flex-direction:column;gap:8px}.nodes-checks-filter{display:inline-flex;align-items:center;gap:8px}.nodes-checks-filter select{min-width:180px;background:#0b1220;border:1px solid #2a3344;color:var(--text);padding:6px 10px;border-radius:10px}.section-actions input{background:#0b1220;border:1px solid #2a3344;color:var(--text);padding:8px 10px;border-radius:10px}.data-table{display:flex;flex-direction:column;gap:0}.data-row{display:grid;align-items:center;gap:14px;padding:14px 12px;border-bottom:1px solid var(--border);color:var(--text)}.data-row.head{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);background:#0b122099}.data-table.nodes-table .data-row{grid-template-columns:40px minmax(180px,1.3fr) minmax(160px,1fr) minmax(150px,1fr) minmax(160px,1fr) minmax(160px,1fr) minmax(220px,1.1fr)}.data-table.dashboard-nodes-table .data-row{grid-template-columns:40px minmax(180px,1.2fr) minmax(160px,.95fr) minmax(150px,.9fr) minmax(160px,1fr) minmax(220px,1.05fr) minmax(170px,.95fr) minmax(220px,1fr)}.data-table.nodes-table.selectable .data-row{grid-template-columns:36px 40px minmax(180px,1.3fr) minmax(160px,1fr) minmax(150px,1fr) minmax(160px,1fr) minmax(160px,1fr) minmax(220px,1.1fr)}.data-table.users-table .data-row{grid-template-columns:minmax(160px,1.2fr) minmax(160px,1fr) minmax(140px,.8fr) minmax(140px,.9fr) minmax(120px,.8fr) minmax(120px,.8fr) minmax(160px,1fr) minmax(160px,1fr)}.data-table.bots-table.with-node .data-row{grid-template-columns:minmax(170px,1.1fr) minmax(210px,1.45fr) minmax(100px,.65fr) minmax(220px,1.25fr) minmax(150px,.85fr) minmax(220px,1fr);gap:10px;padding:10px 12px}.data-table.bots-table .data-row{grid-template-columns:minmax(220px,1.45fr) minmax(100px,.65fr) minmax(220px,1.25fr) minmax(150px,.85fr) minmax(220px,1fr);gap:10px;padding:10px 12px}.data-table.bots-table .data-row.head{padding:10px 12px}.data-table.bots-table .check-target{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.data-table.bots-table .check-kind{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.data-table.bots-table .status-cell{min-width:0;display:flex;flex-direction:column;gap:4px}.data-table.bots-table .status-main{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}.data-table.bots-table .status-text,.table.services .status-text{font-size:12px;color:#e2e8f0;line-height:1.2}.data-table.bots-table .status-error{color:#fca5a5;font-size:11px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.table.services .status-cell{min-width:0;display:flex;flex-direction:column;gap:4px}.table.services .status-main{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}.table.services .status-error{color:#fca5a5;font-size:11px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.data-table.bots-table .actions.compact{gap:4px}.data-table.bots-table .actions.compact button{padding:4px 8px;border-radius:8px;font-size:11px;line-height:1.1}.data-table.key-storage-table.key-storage-form .data-row{grid-template-columns:minmax(180px,1.3fr) minmax(140px,1fr) minmax(180px,1.2fr) minmax(200px,1.2fr) minmax(220px,1.2fr);align-items:center}.data-table.key-storage-table.key-storage-form .data-row.head{grid-template-columns:minmax(180px,1.3fr) minmax(140px,1fr) minmax(180px,1.2fr) minmax(200px,1.2fr) minmax(220px,1.2fr)}.data-table.key-storage-table.key-storage-list .data-row{grid-template-columns:minmax(120px,1.15fr) minmax(160px,1.25fr) minmax(140px,1fr) minmax(74px,.5fr) minmax(110px,.8fr) minmax(140px,.85fr) minmax(160px,.95fr);align-items:start}.data-table.key-storage-table.key-storage-list .data-row.head{grid-template-columns:minmax(120px,1.15fr) minmax(160px,1.25fr) minmax(140px,1fr) minmax(74px,.5fr) minmax(110px,.8fr) minmax(140px,.85fr) minmax(160px,.95fr)}.data-table.key-storage-table .data-row input,.data-table.key-storage-table .data-row select{width:100%;min-width:0;border:1px solid #2a3344;background:#0b1220;color:var(--text);border-radius:10px;padding:7px 10px;font-size:13px;transition:border-color .2s ease,box-shadow .2s ease}.data-table.key-storage-table .data-row input::placeholder{color:#7b8798}.data-table.key-storage-table .data-row input:focus,.data-table.key-storage-table .data-row select:focus{outline:none;border-color:#3b82f6b3;box-shadow:0 0 0 2px #3b82f62e}.data-table.key-storage-table .data-row select{color-scheme:dark;cursor:pointer}.data-table.key-storage-table .mono{word-break:break-all}.key-storage-card{background:linear-gradient(180deg,#0c121cf2,#080e18eb);overflow-x:auto}.key-storage-card .data-table,.key-storage-list-card .data-table{min-width:0}.key-storage-table .key-primary{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.key-storage-table .key-secondary,.key-storage-table .key-cell-fingerprint,.key-storage-table .key-cell-uploader{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.key-storage-table .key-cell-size{white-space:nowrap}.data-table.key-storage-table .actions{justify-content:flex-end}.data-table.key-storage-table .data-row>div{min-width:0}.data-table.key-storage-table .data-row.key-storage-empty-row{grid-template-columns:1fr}.data-table .actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.data-table .actions button{width:auto}.node-title{font-weight:600}.node-checks-summary{margin-top:4px;display:flex;gap:8px;flex-wrap:wrap}.node-check-chip{min-width:0;width:auto;padding:3px 8px;border-radius:999px;border:1px solid #334155;background:#1e293b;color:#cbd5e1;font-size:12px;display:inline-flex;gap:6px;align-items:center;cursor:pointer}.node-check-chip strong{font-weight:700;color:#e2e8f0}.node-check-chip:hover{border-color:#64748b;background:#273449}.node-check-chip.has-items{border-color:#10b98180;background:#10b98126;color:#a7f3d0}.node-check-chip.has-items strong{color:#d1fae5}.location-cell{display:inline-flex;align-items:center;gap:8px}.flag{font-size:16px}.row-actions{display:flex;gap:6px;flex-wrap:wrap}.traffic-cell{display:flex;flex-direction:column;gap:4px}.status-dot{display:inline-flex;width:10px;height:10px;border-radius:50%;background:#475569}.status-dot.ok{background:var(--accent);box-shadow:0 0 10px #22c55eb3}.status-dot.bad{background:#ef4444}.uptime-bar{width:100%;height:6px;background:#1f2937;border-radius:999px;overflow:hidden;margin-bottom:6px}.uptime-bar-fill{height:100%;background:linear-gradient(90deg,#22c55ecc,#4ade8080);border-radius:999px}.node-metric-lines{display:flex;flex-direction:column;gap:4px}.node-metric-line{display:grid;grid-template-columns:52px minmax(90px,1fr) 56px;align-items:center;gap:8px}.node-metric-label{font-size:11px;color:var(--muted)}.node-metric-value{font-size:11px;color:#cbd5e1;text-align:right;white-space:nowrap}.node-metric-bar{width:100%;height:5px;border-radius:999px;background:#1f2937;overflow:hidden}.node-metric-bar-fill{height:100%;border-radius:999px}.node-metric-bar.good .node-metric-bar-fill{background:linear-gradient(90deg,#22c55ed9,#4ade808c)}.node-metric-bar.warn .node-metric-bar-fill{background:linear-gradient(90deg,#f59e0bd9,#fbbf248c)}.node-metric-bar.bad .node-metric-bar-fill{background:linear-gradient(90deg,#ef4444e6,#f87171a6)}.node-metric-bar.unknown .node-metric-bar-fill{background:linear-gradient(90deg,#64748b8c,#64748b59)}.grid-bottom{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:20px}.bottom-card{background:#0b111cd9;border:1px solid var(--border);border-radius:16px;padding:18px}.bottom-card.clickable{cursor:pointer}.bottom-card.clickable:hover{border-color:#78be96cc}.bottom-value{font-size:22px;font-weight:600;margin:10px 0 6px}.bottom-sub{font-size:12px;color:var(--muted)}.details-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:16px}.metric-card{background:#0d141ee6;border:1px solid #1f2a37;border-radius:12px;padding:12px 14px;display:flex;flex-direction:column;gap:6px}.metric-label{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.metric-value{font-size:16px;font-weight:600}.metric-sub{font-size:12px;color:var(--muted)}button.ghost{background:#94a3b81f;border:1px solid #243042;color:var(--text)}button.ghost:hover{background:#94a3b833}button.danger.ghost{background:#ef444433;border-color:#7f1d1d;color:#fecaca}button.danger.ghost:hover{background:#ef444452}@media (max-width: 1100px){.app-shell{flex-direction:column}.sidebar{width:100%;height:auto;position:relative;display:flex;flex-direction:row;align-items:center;gap:16px;overflow-x:auto}.sidebar-nav{flex-direction:row;flex-wrap:wrap}}@media (max-width: 900px){.service-card,.section-head{flex-direction:column;align-items:flex-start}.data-row{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}}
