:root{--color-bg: #ffffff;--color-surface: #ffffff;--color-surface-subtle: #f7f8fa;--color-surface-hover: #f1f3f5;--color-text: #0a0a0a;--color-text-secondary: #5b6470;--color-text-muted: #8a929c;--color-text-on-accent: #ffffff;--color-border: #e7e9ee;--color-border-strong: #d3d7de;--color-accent: #0a0a0a;--color-accent-hover: #262626;--color-accent-active: #000000;--color-success: #16a34a;--color-success-bg: #ecfdf3;--color-warning: #b45309;--color-warning-bg: #fef6e7;--color-danger: #dc2626;--color-danger-bg: #fef2f2;--focus-ring: 0 0 0 3px rgba(10, 10, 10, .18);--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--text-xs: 12px;--text-sm: 13px;--text-base: 14px;--text-md: 15px;--text-lg: 18px;--text-xl: 22px;--text-2xl: 28px;--weight-regular: 400;--weight-medium: 500;--weight-semibold: 600;--weight-bold: 700;--leading-tight: 1.25;--leading-normal: 1.5;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-pill: 999px;--shadow-sm: 0 1px 2px rgba(16, 24, 40, .04);--shadow-md: 0 1px 3px rgba(16, 24, 40, .06), 0 1px 2px rgba(16, 24, 40, .04);--shadow-lg: 0 12px 32px rgba(16, 24, 40, .12), 0 2px 8px rgba(16, 24, 40, .06);--content-max: 1040px;--transition: .14s ease}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-normal);color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3{margin:0;color:var(--color-text);line-height:var(--leading-tight);letter-spacing:-.01em}.app{min-height:100vh;display:flex;flex-direction:column}.muted{color:var(--color-text-muted);font-weight:var(--weight-regular)}.mono{font-family:var(--font-mono);font-size:var(--text-xs)}.topbar{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-3) var(--space-6);background:var(--color-surface);border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:10}.brand{display:inline-flex;align-items:center;gap:var(--space-2)}.brand-logo{height:32px;width:auto;display:block}.brand-name{font-size:var(--text-lg);font-weight:var(--weight-bold);letter-spacing:-.02em;color:var(--color-text)}.brand-sep{width:1px;height:20px;background:var(--color-border);margin:0 var(--space-1)}.brand-tag{font-size:var(--text-sm);color:var(--color-text-secondary);font-weight:var(--weight-medium)}.topbar-actions{display:flex;align-items:center;gap:var(--space-3)}.doc-link{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);font-size:var(--text-base);font-weight:var(--weight-medium);color:var(--color-text);text-decoration:none;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);white-space:nowrap;transition:background var(--transition),border-color var(--transition)}.doc-link:hover{background:var(--color-surface-hover);border-color:var(--color-border-strong)}.doc-link:focus-visible{outline:none;box-shadow:var(--focus-ring)}.key-input{display:flex;gap:var(--space-2)}.key-input input{width:240px}input{width:100%;padding:var(--space-2) var(--space-3);font-family:inherit;font-size:var(--text-base);color:var(--color-text);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);transition:border-color var(--transition),box-shadow var(--transition)}input::placeholder{color:var(--color-text-muted)}input:hover{border-color:var(--color-border-strong)}input:focus{outline:none;border-color:var(--color-accent);box-shadow:var(--focus-ring)}label{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--color-text-secondary)}button{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);font-family:inherit;font-size:var(--text-base);font-weight:var(--weight-medium);color:var(--color-text);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition),border-color var(--transition),box-shadow var(--transition),opacity var(--transition)}button:hover{background:var(--color-surface-hover);border-color:var(--color-border-strong)}button:focus-visible{outline:none;box-shadow:var(--focus-ring)}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--color-accent);color:var(--color-text-on-accent);border-color:var(--color-accent);font-weight:var(--weight-semibold)}button.primary:hover:not(:disabled){background:var(--color-accent-hover);border-color:var(--color-accent-hover)}button.primary:active:not(:disabled){background:var(--color-accent-active)}button.danger{background:transparent;color:var(--color-danger);border-color:var(--color-border)}button.danger:hover:not(:disabled){background:var(--color-danger-bg);border-color:var(--color-danger)}.icon-btn{padding:var(--space-1);width:32px;height:32px;font-size:var(--text-md);color:var(--color-text-muted);background:transparent;border:0;border-radius:var(--radius-md)}.icon-btn:hover{background:var(--color-surface-hover);color:var(--color-text)}.content{flex:1;width:100%;max-width:var(--content-max);margin:0 auto;padding:var(--space-8) var(--space-6)}.content-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-6)}h1{font-size:var(--text-xl);font-weight:var(--weight-bold)}.banner{padding:var(--space-3) var(--space-4);border-radius:var(--radius-lg);background:var(--color-surface-subtle);border:1px solid var(--color-border);color:var(--color-text-secondary);font-size:var(--text-base);margin-bottom:var(--space-4)}.banner.err{background:var(--color-danger-bg);border-color:#f5c2c2;color:var(--color-danger)}.empty{padding:var(--space-12) var(--space-6);text-align:center;color:var(--color-text-muted);background:var(--color-surface-subtle);border:1px dashed var(--color-border-strong);border-radius:var(--radius-lg)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--space-4)}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-5);box-shadow:var(--shadow-sm);transition:box-shadow var(--transition),border-color var(--transition)}.card:hover{box-shadow:var(--shadow-md);border-color:var(--color-border-strong)}.card-top{display:flex;align-items:center;gap:var(--space-3)}.avatar{width:44px;height:44px;flex-shrink:0;border-radius:var(--radius-pill);background:var(--color-surface-subtle);border:1px solid var(--color-border);display:flex;align-items:center;justify-content:center;font-weight:var(--weight-semibold);color:var(--color-text-secondary);overflow:hidden}.avatar img{width:100%;height:100%;object-fit:cover}.card-id{display:flex;flex-direction:column;flex:1;min-width:0;gap:2px}.card-id strong{font-weight:var(--weight-semibold);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-id span{font-size:var(--text-sm)}.card-meta{display:flex;justify-content:space-between;align-items:center;margin:var(--space-4) 0;padding-top:var(--space-4);border-top:1px solid var(--color-border);font-size:var(--text-xs)}.card-actions{display:flex;justify-content:flex-end}.badge{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--text-xs);font-weight:var(--weight-semibold);padding:var(--space-1) var(--space-2);border-radius:var(--radius-pill);border:1px solid transparent;white-space:nowrap}.badge:before{content:"";width:6px;height:6px;border-radius:var(--radius-pill);background:currentColor}.badge-connected{background:var(--color-success-bg);color:var(--color-success)}.badge-pending{background:var(--color-warning-bg);color:var(--color-warning)}.badge-disconnected{background:var(--color-danger-bg);color:var(--color-danger)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a0a0a66;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;padding:var(--space-4);z-index:100}.modal{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);padding:var(--space-6);width:100%;max-width:400px}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-5)}.modal-head h2{font-size:var(--text-lg);font-weight:var(--weight-semibold)}.stack{display:flex;flex-direction:column;gap:var(--space-4)}.center{align-items:center;text-align:center}.seg{display:flex;gap:var(--space-1);padding:var(--space-1);background:var(--color-surface-subtle);border:1px solid var(--color-border);border-radius:var(--radius-md)}.seg button{flex:1;background:transparent;border:0;color:var(--color-text-secondary);font-weight:var(--weight-medium)}.seg button:hover{background:var(--color-surface-hover)}.seg .seg-on{background:var(--color-surface);color:var(--color-text);box-shadow:var(--shadow-sm);border:1px solid var(--color-border)}.qr{width:240px;height:240px;background:#fff;border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-2)}.pairing-code{font-family:var(--font-mono);font-size:var(--text-2xl);letter-spacing:6px;font-weight:var(--weight-bold);color:var(--color-text);background:var(--color-surface-subtle);border:1px solid var(--color-border);padding:var(--space-3) var(--space-5);border-radius:var(--radius-md)}.ok{color:var(--color-success);font-weight:var(--weight-semibold)}.err{color:var(--color-danger)}.tabs{display:inline-flex;gap:var(--space-1);padding:var(--space-1);margin-bottom:var(--space-6);background:var(--color-surface-subtle);border:1px solid var(--color-border);border-radius:var(--radius-md)}.tabs button{background:transparent;border:0;color:var(--color-text-secondary);font-weight:var(--weight-medium)}.tabs button:hover{background:var(--color-surface-hover)}.tabs .tab-on{background:var(--color-surface);color:var(--color-text);box-shadow:var(--shadow-sm);border:1px solid var(--color-border)}.head-with-live{display:inline-flex;align-items:center;gap:var(--space-3)}.live{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--color-success);text-transform:uppercase;letter-spacing:.04em}.live-dot{width:8px;height:8px;border-radius:var(--radius-pill);background:var(--color-success);box-shadow:0 0 #16a34a80;animation:pulse 1.8s ease-out infinite}.infra-summary{font-size:var(--text-sm)}@keyframes pulse{0%{box-shadow:0 0 #16a34a73}70%{box-shadow:0 0 0 7px #16a34a00}to{box-shadow:0 0 #16a34a00}}.machines{display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:var(--space-4);align-items:start}.machine{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-5);box-shadow:var(--shadow-sm)}.machine-head{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}.machine-title{display:flex;gap:var(--space-3);min-width:0}.machine-icon{font-size:22px;line-height:1}.machine-title strong{font-weight:var(--weight-semibold);font-size:var(--text-md)}.machine-sub{font-size:var(--text-xs)}.machine-stats{display:flex;gap:var(--space-5);margin:var(--space-4) 0;padding:var(--space-3) 0;border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}.stat{display:flex;flex-direction:column;gap:2px}.stat-label{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.03em}.stat-val{font-size:var(--text-sm);font-weight:var(--weight-semibold);font-variant-numeric:tabular-nums}.machine-cap{display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-4)}.cap-bar{flex:1;height:6px;background:var(--color-surface-subtle);border-radius:var(--radius-pill);overflow:hidden}.cap-fill{display:block;height:100%;border-radius:var(--radius-pill);transition:width var(--transition)}.cap-up{background:var(--color-success)}.cap-warn{background:var(--color-warning)}.cap-down{background:var(--color-danger)}.cap-label{font-size:var(--text-xs);white-space:nowrap}.pods{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--space-2)}.pod{border:1px solid var(--color-border);border-left:3px solid var(--color-border-strong);border-radius:var(--radius-md);padding:var(--space-3);background:var(--color-surface-subtle)}.pod-up{border-left-color:var(--color-success)}.pod-warn{border-left-color:var(--color-warning)}.pod-down{border-left-color:var(--color-danger)}.pod-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);margin-bottom:var(--space-2)}.pod-ip{font-weight:var(--weight-semibold);font-size:var(--text-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pod-meta{display:flex;justify-content:space-between;align-items:center;margin-top:var(--space-2)}.pod-count{font-size:var(--text-sm);font-weight:var(--weight-semibold);font-variant-numeric:tabular-nums}.pod-count.full{color:var(--color-danger)}.pod-egress{color:var(--color-text-muted)}.slots{display:flex;gap:3px}.slot{flex:1;height:8px;border-radius:2px;background:var(--color-border)}.slot-on{background:var(--color-accent)}.dot{width:9px;height:9px;flex-shrink:0;border-radius:var(--radius-pill);background:var(--color-text-muted)}.dot-up{background:var(--color-success);animation:pulse 1.8s ease-out infinite}.dot-warn{background:var(--color-warning)}.dot-down{background:var(--color-danger)}.badge-up{background:var(--color-success-bg);color:var(--color-success)}.badge-warn{background:var(--color-warning-bg);color:var(--color-warning)}.badge-down{background:var(--color-danger-bg);color:var(--color-danger)}
