@import "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap";
:root{--paper-50:#fbfaf7;--paper-100:#f7f5f2;--paper-200:#efebe4;--paper-300:#e4dfd6;--paper-400:#cfc9bd;--slate-50:#f2f3f5;--slate-100:#d9dce0;--slate-200:#b0b5bd;--slate-300:#7c828c;--slate-400:#4f545c;--slate-500:#2e323a;--slate-600:#1f2228;--slate-700:#14161a;--slate-800:#0c0e12;--red-50:#fdecec;--red-100:#f9c9c9;--red-200:#f08585;--red-300:#dc3c3c;--red-400:#c8102e;--red-500:#a40a24;--red-600:#7a0719;--amber-50:#fdf3dc;--amber-100:#f9de92;--amber-200:#efc04a;--amber-300:#d99a17;--amber-400:#a8740a;--green-50:#e8f1ea;--green-100:#b8d7bf;--green-200:#6fa77b;--green-300:#2e7d44;--green-400:#1f5a30;--steel-50:#ecf0f4;--steel-100:#c6d0da;--steel-200:#889aaa;--steel-300:#4d6172;--steel-400:#324554;--bg-1:var(--paper-100);--bg-2:#fff;--bg-3:var(--paper-200);--bg-inverse:var(--slate-700);--fg-1:var(--slate-700);--fg-2:var(--slate-400);--fg-3:var(--slate-300);--fg-on-alarm:#fff;--fg-on-dark:var(--paper-50);--border:var(--paper-300);--border-strong:var(--paper-400);--border-on-dark:var(--slate-500);--alarm:var(--red-400);--alarm-strong:var(--red-500);--alarm-bg:var(--red-50);--alarm-border:var(--red-100);--warning:var(--amber-300);--warning-strong:var(--amber-400);--warning-bg:var(--amber-50);--warning-border:var(--amber-100);--fault:var(--steel-300);--fault-strong:var(--steel-400);--fault-bg:var(--steel-50);--fault-border:var(--steel-100);--normal:var(--green-300);--normal-strong:var(--green-400);--normal-bg:var(--green-50);--normal-border:var(--green-100);--info:var(--steel-300);--info-bg:var(--steel-50);--focus:#2563ca;--focus-ring:#2563ca59;--scrim:#14161a8c;--font-sans:"IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--font-display:var(--font-sans);--fw-regular:400;--fw-medium:500;--fw-semibold:600;--fw-bold:700;--fs-11:11px;--fs-12:12px;--fs-13:13px;--fs-14:14px;--fs-16:16px;--fs-18:18px;--fs-22:22px;--fs-28:28px;--fs-36:36px;--fs-48:48px;--lh-tight:1.15;--lh-snug:1.3;--lh-normal:1.5;--lh-loose:1.65;--tracking-tight:-.01em;--tracking-normal:0;--tracking-wide:.04em;--tracking-caps:.08em;--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-14:56px;--space-20:80px;--radius-sm:4px;--radius-md:6px;--radius-lg:10px;--radius-pill:999px;--shadow-0:none;--shadow-1:0 1px 2px #14161a0f, 0 1px 1px #14161a0a;--shadow-2:0 12px 24px -8px #14161a2e, 0 4px 8px #14161a14;--ease:cubic-bezier(.2, 0, 0, 1);--dur-micro:.12s;--dur-panel:.2s;--dur-route:.32s;--sidebar-w:240px;--sidebar-w-collapsed:64px;--header-h:56px}.theme-dark{--bg-1:var(--slate-700);--bg-2:var(--slate-600);--bg-3:var(--slate-500);--bg-inverse:var(--paper-100);--fg-1:var(--paper-50);--fg-2:var(--slate-200);--fg-3:var(--slate-300);--border:var(--slate-500);--border-strong:var(--slate-400);--alarm-bg:#c8102e1f;--alarm-border:#c8102e66;--warning-bg:#d99a171f;--warning-border:#d99a1759;--fault-bg:#4d61722e;--fault-border:#4d617280;--normal-bg:#2e7d4424;--normal-border:#2e7d4466;--info-bg:#2563ca1f;--shadow-1:0 1px 2px #0006, 0 1px 1px #0000004d;--shadow-2:0 12px 24px -8px #0009, 0 4px 8px #0006}.t-display,h1.display{font-family:var(--font-display);font-weight:var(--fw-bold);font-size:var(--fs-48);line-height:var(--lh-tight);letter-spacing:var(--tracking-tight);color:var(--fg-1)}.t-h1,h1{font-family:var(--font-sans);font-weight:var(--fw-semibold);font-size:var(--fs-28);line-height:var(--lh-tight);letter-spacing:var(--tracking-tight);color:var(--fg-1);margin:0}.t-h2,h2{font-family:var(--font-sans);font-weight:var(--fw-semibold);font-size:var(--fs-22);line-height:var(--lh-snug);color:var(--fg-1);margin:0}.t-h3,h3{font-family:var(--font-sans);font-weight:var(--fw-semibold);font-size:var(--fs-18);line-height:var(--lh-snug);color:var(--fg-1);margin:0}.t-h4,h4{font-family:var(--font-sans);font-weight:var(--fw-semibold);font-size:var(--fs-16);line-height:var(--lh-snug);color:var(--fg-1);margin:0}.t-body,p{font-family:var(--font-sans);font-weight:var(--fw-regular);font-size:var(--fs-14);line-height:var(--lh-normal);color:var(--fg-1)}.t-body-lg{font-family:var(--font-sans);font-size:var(--fs-16);line-height:var(--lh-normal);color:var(--fg-1)}.t-body-sm,small{font-family:var(--font-sans);font-size:var(--fs-13);line-height:var(--lh-normal);color:var(--fg-2)}.t-eyebrow{font-family:var(--font-sans);font-weight:var(--fw-semibold);font-size:var(--fs-11);letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--fg-2)}.t-mono,code,.t-num{font-family:var(--font-mono);font-size:var(--fs-13);font-variant-numeric:tabular-nums;color:var(--fg-1)}.t-num{font-variant-numeric:tabular-nums}.t-label{font-family:var(--font-sans);font-weight:var(--fw-medium);font-size:var(--fs-12);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--fg-2)}html,body{font-family:var(--font-sans);color:var(--fg-1);background:var(--bg-1);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background:var(--bg-1);color:var(--fg-1);font-family:var(--font-sans)}.app{grid-template-columns:var(--sidebar-w) 1fr;grid-template-rows:var(--header-h) 1fr;height:100vh;min-height:720px;display:grid}.app>.topbar{grid-column:1/-1}.app>.sidebar{grid-row:2}.app>.content{background:var(--bg-1);grid-row:2;overflow:auto}.topbar{background:var(--bg-2);border-bottom:1px solid var(--border);height:var(--header-h);align-items:center;gap:16px;padding:0 20px;display:flex}.topbar .logo{width:calc(var(--sidebar-w) - 20px);align-items:center;gap:10px;display:flex}.topbar .logo img{width:30px;height:30px}.topbar .logo .name{letter-spacing:-.01em;font-size:14px;font-weight:700;line-height:1.1}.topbar .logo .sub{color:var(--fg-3);letter-spacing:.08em;text-transform:uppercase;font-size:10.5px}.topbar .vsep{background:var(--border);width:1px;height:24px}.topbar .breadcrumb{color:var(--fg-2);align-items:center;gap:8px;font-size:13px;display:flex}.topbar .breadcrumb .cur{color:var(--fg-1);font-weight:600}.topbar .breadcrumb .sep{color:var(--fg-3)}.topbar .spacer{flex:1}.topbar .search{background:var(--paper-50);border:1px solid var(--border);border-radius:6px;align-items:center;gap:8px;width:280px;padding:6px 12px;display:flex}.topbar .search input{font-family:var(--font-sans);width:100%;color:var(--fg-1);background:0 0;border:0;outline:none;font-size:13px}.topbar .icon-btn{cursor:pointer;width:36px;height:36px;color:var(--fg-2);background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;display:flex;position:relative}.topbar .icon-btn:hover{background:var(--bg-3)}.topbar .icon-btn .ind{background:var(--alarm);border:1.5px solid var(--bg-2);border-radius:50%;width:8px;height:8px;position:absolute;top:7px;right:7px}.topbar .avatar{background:var(--steel-400);color:#fff;width:32px;height:32px;font-family:var(--font-sans);letter-spacing:.02em;cursor:pointer;transition:opacity var(--dur-micro);border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:11.5px;font-weight:600;line-height:1;display:flex}.topbar .avatar:hover{opacity:.8}.sidebar{background:var(--bg-2);border-right:1px solid var(--border);flex-direction:column;gap:4px;padding:12px 8px;display:flex;overflow:auto}.sidebar .nav-label{letter-spacing:.08em;text-transform:uppercase;color:var(--fg-3);padding:12px 12px 6px;font-size:10.5px;font-weight:600}.sidebar .nav-item{color:var(--fg-1);cursor:pointer;font-size:13.5px;font-family:var(--font-sans);text-align:left;white-space:nowrap;background:0 0;border:0;border-radius:6px;align-items:center;gap:10px;width:100%;padding:8px 12px;display:flex;position:relative}.sidebar .nav-item>span:not(.badge):not(.lc){text-overflow:ellipsis;flex:1;overflow:hidden}.sidebar .nav-item:hover{background:var(--bg-3)}.sidebar .nav-item .icn{width:16px;height:16px;color:var(--fg-2);flex-shrink:0}.sidebar .nav-item.active{background:var(--paper-200);font-weight:600}.sidebar .nav-item.active .icn{color:var(--alarm)}.sidebar .nav-item.active:before{content:"";background:var(--alarm);border-radius:0 3px 3px 0;width:3px;position:absolute;top:8px;bottom:8px;left:-8px}.sidebar .badge{background:var(--alarm);color:#fff;font-size:10.5px;font-weight:600;font-family:var(--font-mono);border-radius:999px;margin-left:auto;padding:1px 7px}.sidebar .nav-sep{background:var(--border);height:1px;margin:8px 4px}.sidebar .nav-foot{border-top:1px solid var(--border);color:var(--fg-3);justify-content:space-between;align-items:center;margin-top:auto;padding:8px 12px;font-size:11px;display:flex}.sidebar .nav-foot .conn{align-items:center;gap:6px;display:flex}.sidebar .nav-foot .conn .pulse{background:var(--normal);border-radius:50%;width:7px;height:7px}.page{max-width:100%;padding:24px 28px}.page-head{align-items:flex-end;gap:12px;margin-bottom:20px;display:flex}.page-head .titles h1{letter-spacing:-.01em;font-size:24px;font-weight:600}.page-head .titles .sub{color:var(--fg-2);margin-top:2px;font-size:13px}.page-head .spacer{flex:1}.btn{font-family:var(--font-sans);cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:6px;align-items:center;gap:8px;padding:8px 14px;font-size:13px;font-weight:500;line-height:1;display:inline-flex}.btn-primary{background:var(--slate-700);color:#fff}.btn-primary:hover{background:var(--slate-600)}.btn-secondary{background:var(--bg-2);color:var(--fg-1);border-color:var(--border)}.btn-secondary:hover{background:var(--bg-3)}.btn-danger{background:var(--alarm);color:#fff}.btn-danger:hover{background:var(--alarm-strong)}.btn-ghost{color:var(--fg-1);background:0 0}.btn-ghost:hover{background:var(--bg-3)}.btn-sm{padding:6px 10px;font-size:12px}.btn-icon{padding:8px}.btn:focus-visible{box-shadow:0 0 0 2px var(--focus-ring);border-color:var(--focus);outline:none}.card{background:var(--bg-2);border:1px solid var(--border);border-radius:10px}.card-pad{padding:20px}.card-pad-sm{padding:14px}.input{font-family:var(--font-sans);border:1px solid var(--border);background:var(--bg-2);color:var(--fg-1);box-sizing:border-box;border-radius:6px;outline:none;width:100%;height:36px;padding:8px 12px;font-size:14px}.input:focus{border-color:var(--focus);box-shadow:0 0 0 2px var(--focus-ring)}.field{flex-direction:column;gap:6px;display:flex}.field label{letter-spacing:.04em;text-transform:uppercase;color:var(--fg-2);font-size:12px;font-weight:500}.field .help{color:var(--fg-3);font-size:11px}.pill{white-space:nowrap;border:1px solid;border-radius:999px;align-items:center;gap:6px;padding:3px 9px;font-size:11.5px;font-weight:600;line-height:1.3;display:inline-flex}.pill .dot{border-radius:50%;width:6px;height:6px}.pill-alarm{background:var(--alarm-bg);border-color:var(--alarm-border);color:var(--alarm-strong)}.pill-alarm .dot{background:var(--alarm);animation:1.2s ease-in-out infinite dot-pulse}.pill-warning{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-strong)}.pill-warning .dot{background:var(--warning)}.pill-fault{background:var(--fault-bg);border-color:var(--fault-border);color:var(--fault-strong)}.pill-fault .dot{background:var(--fault)}.pill-normal{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-strong)}.pill-normal .dot{background:var(--normal)}.pill-ack{background:var(--info-bg);color:#1b4f9f;border-color:#2563ca4d}.pill-ack .dot{background:var(--focus)}.pill-silenced{background:var(--slate-50);border-color:var(--paper-300);color:var(--slate-400)}.pill-silenced .dot{background:var(--slate-300)}@keyframes dot-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.8)}}.stats{grid-template-columns:repeat(4,1fr);gap:12px;display:grid}.stat{background:var(--bg-2);border:1px solid var(--border);border-radius:10px;padding:14px 16px}.stat .label{letter-spacing:.08em;text-transform:uppercase;color:var(--fg-2);white-space:nowrap;align-items:center;gap:8px;font-size:11px;font-weight:600;display:flex}.stat .delta{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.stat .value{font-family:var(--font-mono);font-variant-numeric:tabular-nums;margin-top:6px;font-size:28px;font-weight:600;line-height:1.1}.stat .delta{font-family:var(--font-mono);color:var(--fg-3);margin-top:2px;font-size:11px}.stat.alarm .value{color:var(--alarm)}.stat.warning .value{color:var(--warning-strong)}.stat.fault .value{color:var(--fault-strong)}.stat.normal .value{color:var(--normal-strong)}.table{border-collapse:collapse;width:100%}.table th{text-align:left;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-2);border-bottom:1px solid var(--border);background:var(--paper-50);padding:10px 16px;font-size:11px;font-weight:600}.table td{color:var(--fg-1);border-bottom:1px solid var(--border);vertical-align:middle;padding:12px 16px;font-size:13px}.table tr:last-child td{border-bottom:0}.table tr.row-alarm td:first-child{box-shadow:inset 3px 0 0 var(--alarm)}.table tr:hover td{background:var(--paper-50);cursor:pointer}.table .mono{font-family:var(--font-mono);font-size:12px}.table .num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;text-align:right}.lc{display:inline-block}.lc svg{stroke:currentColor;stroke-width:1.75px;fill:none;stroke-linecap:round;stroke-linejoin:round;width:100%;height:100%;display:block}.banner{border:1px solid;border-radius:8px;align-items:stretch;gap:0;display:flex;overflow:hidden}.banner .bar{flex-shrink:0;width:4px}.banner .body{flex:1;align-items:flex-start;gap:12px;padding:12px 14px;display:flex}.banner .icon{flex-shrink:0;width:20px;height:20px;margin-top:1px}.banner .title{color:var(--fg-1);font-size:14px;font-weight:600}.banner .sub{color:var(--fg-2);margin-top:2px;font-size:12.5px}.banner .right{align-items:center;gap:8px;padding-right:12px;display:flex}.banner-alarm{background:var(--alarm-bg);border-color:var(--alarm-border)}.banner-alarm .bar{background:var(--alarm)}.banner-alarm .icon{color:var(--alarm-strong)}.banner-warning{background:var(--warning-bg);border-color:var(--warning-border)}.banner-warning .bar{background:var(--warning)}.banner-warning .icon{color:var(--warning-strong)}.banner-fault{background:var(--fault-bg);border-color:var(--fault-border)}.banner-fault .bar{background:var(--fault)}.banner-fault .icon{color:var(--fault-strong)}.login-wrap{grid-template-columns:1fr 1fr;min-height:100vh;display:grid}.login-art{background:var(--slate-700);color:var(--paper-50);flex-direction:column;justify-content:space-between;padding:48px;display:flex;position:relative;overflow:hidden}.login-art:before{content:"";pointer-events:none;background:repeating-linear-gradient(0deg,#0000 0 39px,#ffffff0a 39px 40px),repeating-linear-gradient(90deg,#0000 0 39px,#ffffff0a 39px 40px);position:absolute;inset:0}.login-art>*{position:relative}.login-art .brand{align-items:center;gap:12px;display:flex}.login-art .brand img{width:36px;height:36px}.login-art .brand-name{font-size:18px;font-weight:700}.login-art .brand-sub{letter-spacing:.1em;text-transform:uppercase;color:var(--slate-200);font-size:11px}.login-art .head{font-family:var(--font-sans);letter-spacing:-.01em;color:var(--paper-50);font-size:36px;font-weight:600;line-height:1.15}.login-art .head-sub{color:var(--slate-100);max-width:440px;margin-top:14px;font-size:15px;line-height:1.5}.login-art .meta{font-family:var(--font-mono);color:var(--slate-200);gap:24px;font-size:11.5px;display:flex}.login-form{justify-content:center;align-items:center;padding:48px;display:flex}.login-form .inner{width:100%;max-width:380px}.login-form h2{margin-bottom:4px;font-size:22px;font-weight:600}.login-form .sub{color:var(--fg-2);margin-bottom:28px;font-size:13px}.code-input{gap:8px;display:flex}.code-input input{font-family:var(--font-mono);text-align:center;border:1px solid var(--border);background:var(--bg-2);width:44px;height:52px;color:var(--fg-1);border-radius:6px;outline:none;font-size:22px}.code-input input:focus{border-color:var(--focus);box-shadow:0 0 0 2px var(--focus-ring)}.eyebrow{letter-spacing:.08em;text-transform:uppercase;color:var(--fg-2);font-size:11px;font-weight:600}.divider{background:var(--border);height:1px}.muted{color:var(--fg-2)}.dim{color:var(--fg-3)}.seg{background:var(--paper-50);border:1px solid var(--border);border-radius:6px;gap:2px;padding:2px;display:inline-flex}.seg button{cursor:pointer;color:var(--fg-2);font-size:12px;font-weight:500;font-family:var(--font-sans);white-space:nowrap;background:0 0;border:0;border-radius:4px;padding:5px 10px}.seg button.on{background:var(--bg-2);color:var(--fg-1);box-shadow:0 1px 2px #14161a14}.topbar .menu-toggle,.sidebar-backdrop{display:none}@media (max-width:768px){.app{grid-template-columns:1fr;height:100dvh;min-height:0}.app>.topbar{grid-column:1}.app>.content{grid-area:2/1}.topbar .menu-toggle{flex-shrink:0;display:flex}.topbar .logo .name,.topbar .logo .sub{display:none}.topbar .logo{width:auto}.topbar .vsep,.topbar .search,.topbar .hide-mobile{display:none}.topbar .avatar{display:flex}.app>.sidebar{top:var(--header-h);width:var(--sidebar-w);z-index:200;box-shadow:none;grid-row:unset;transition:transform .22s;position:fixed;bottom:0;left:0;transform:translate(-100%)}.app>.sidebar.sidebar--open{transform:translate(0);box-shadow:4px 0 24px #0000002e}.sidebar-backdrop{inset:0;top:var(--header-h);z-index:199;background:#00000059;display:block;position:fixed}.page{padding:16px}}
.proj-switch{border:1px solid var(--border);background:var(--paper-50);cursor:pointer;transition:background var(--dur-micro) var(--ease);border-radius:8px;flex-direction:column;gap:4px;margin:4px 4px 10px;padding:10px;display:flex}.proj-switch:hover{background:var(--bg-3)}.proj-switch .label{letter-spacing:.08em;text-transform:uppercase;color:var(--fg-3);font-size:10.5px;font-weight:600}.proj-switch .name{color:var(--fg-1);align-items:center;gap:6px;font-size:14px;font-weight:600;display:flex}.proj-switch .meta{font-family:var(--font-mono);color:var(--fg-2);font-size:11px}.proj-menu{width:calc(var(--sidebar-w) - 16px);background:var(--bg-2);border:1px solid var(--border);box-shadow:var(--shadow-2);z-index:30;border-radius:8px;flex-direction:column;gap:2px;padding:6px;display:flex;position:absolute;top:110px;left:8px}.proj-menu .item{cursor:pointer;font-family:var(--font-sans);color:var(--fg-1);text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:10px;width:100%;padding:8px 10px;font-size:13px;display:flex}.proj-menu .item:hover{background:var(--bg-3)}.proj-menu .item.on{background:var(--paper-200);font-weight:600}.proj-menu .item .ct{font-family:var(--font-mono);color:var(--fg-3);margin-left:auto;font-size:11px}.proj-menu .sep{background:var(--border);height:1px;margin:4px 0}.toolbar{border-bottom:1px solid var(--border);background:var(--bg-2);align-items:center;gap:8px;padding:12px 24px;display:flex}.toolbar .grow{flex:1}.chip{border:1px solid var(--border);color:var(--fg-1);background:var(--bg-2);cursor:pointer;white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:4px 10px;font-size:12px;font-weight:500;display:inline-flex}.chip:hover{background:var(--bg-3)}.chip.active{background:var(--paper-200);border-color:var(--border-strong);font-weight:600}.chip .k{color:var(--fg-3);font-weight:500}.filterbar{border-bottom:1px solid var(--border);background:var(--paper-50);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 24px;display:flex}.table tr.row-sel td{background:var(--paper-50)}.table tr.row-sel td:first-child{box-shadow:inset 3px 0 0 var(--slate-700)}.table tr td:first-child{width:36px;padding-right:0}.table tr.row-focused td{background:var(--paper-200)}.table tr.row-focused td:first-child{box-shadow:inset 3px 0 0 var(--focus)}.table .row-actions{gap:4px;display:none}.table tr:hover .row-actions{display:inline-flex}.cb{border:1.5px solid var(--border-strong);background:var(--bg-2);cursor:pointer;width:16px;height:16px;transition:all var(--dur-micro) var(--ease);border-radius:3px;flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.cb:hover{border-color:var(--fg-2)}.cb.on,.cb.mixed{background:var(--slate-700);border-color:var(--slate-700)}.cb.on:after{content:"";border-bottom:2px solid #fff;border-right:2px solid #fff;width:4px;height:8px;transform:rotate(45deg)translate(-1px,-1px)}.cb.mixed:after{content:"";background:#fff;width:8px;height:2px}.devcards{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;padding:16px 24px;display:grid}.devcard{background:var(--bg-2);border:1px solid var(--border);cursor:pointer;transition:border-color var(--dur-micro), box-shadow var(--dur-micro);border-radius:10px;flex-direction:column;gap:10px;padding:14px;display:flex;position:relative}.devcard:hover{border-color:var(--border-strong);box-shadow:var(--shadow-1)}.devcard.selected{border-color:var(--slate-700);box-shadow:0 0 0 1px var(--slate-700)}.devcard.focused{border-color:var(--focus);box-shadow:0 0 0 1px var(--focus)}.devcard .head{align-items:center;gap:8px;display:flex}.devcard .id{font-family:var(--font-mono);letter-spacing:-.01em;color:var(--fg-1);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;font-weight:600;overflow:hidden}.devcard .meta{color:var(--fg-2);align-items:center;gap:6px;font-size:11.5px;display:flex}.devcard .meta .esp{align-items:center;gap:4px;display:inline-flex}.devcard .ver{font-family:var(--font-mono);color:var(--fg-1);margin-left:auto;font-size:12px;font-weight:500}.devcard .spark{height:26px;display:block}.devcard .foot{color:var(--fg-3);font-size:11px;font-family:var(--font-mono);align-items:center;gap:6px;display:flex}.bulkbar{z-index:5;background:var(--slate-700);color:var(--paper-50);border-top:1px solid var(--slate-500);align-items:center;gap:12px;padding:12px 24px;display:flex;position:sticky;bottom:0}.bulkbar .count{font-size:13.5px;font-weight:600}.bulkbar .grow{flex:1}.bulkbar .btn-secondary{color:var(--paper-50);border-color:var(--slate-400);background:0 0}.bulkbar .btn-secondary:hover{background:var(--slate-600)}.bulkbar .btn-primary{background:var(--paper-50);color:var(--slate-700)}.bulkbar .btn-primary:hover{background:#fff}.scrim{background:var(--scrim);z-index:50;animation:scrim-in var(--dur-panel) var(--ease);position:fixed;inset:0}@keyframes scrim-in{0%{opacity:0}to{opacity:1}}.sidepanel{background:var(--bg-2);border-left:1px solid var(--border);width:480px;max-width:100vw;box-shadow:var(--shadow-2);z-index:51;animation:panel-in var(--dur-panel) var(--ease);flex-direction:column;display:flex;position:fixed;top:0;bottom:0;right:0}.sidepanel.wide{width:640px}.sidepanel.wide .body{padding:0}@keyframes panel-in{0%{transform:translate(100%)}to{transform:translate(0)}}.sidepanel .head{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:18px 20px;display:flex}.sidepanel .head h2{margin:0;font-size:16px;font-weight:600}.sidepanel .head .sub{color:var(--fg-2);font-size:12px}.sidepanel .body{flex-direction:column;flex:1;gap:18px;padding:20px;display:flex;overflow:auto}.sidepanel .foot{border-top:1px solid var(--border);background:var(--bg-2);align-items:center;gap:8px;padding:14px 20px;display:flex}.sidepanel .foot .grow{flex:1}.sec{flex-direction:column;gap:8px;display:flex}.sec .label{letter-spacing:.08em;text-transform:uppercase;color:var(--fg-2);font-size:11px;font-weight:600}.pick{border:1px solid var(--border);cursor:pointer;background:var(--bg-2);transition:all var(--dur-micro);border-radius:8px;align-items:center;gap:10px;padding:10px 12px;display:flex}.pick:hover{background:var(--bg-3)}.pick.on{border-color:var(--slate-700);background:var(--paper-50);box-shadow:0 0 0 1px var(--slate-700)}.pick .radio{border:1.5px solid var(--border-strong);border-radius:999px;flex:none;justify-content:center;align-items:center;width:16px;height:16px;display:flex}.pick.on .radio{border-color:var(--slate-700)}.pick.on .radio:after{content:"";background:var(--slate-700);border-radius:999px;width:8px;height:8px}.pick .title{font-size:13.5px;font-weight:600}.pick .desc{color:var(--fg-2);font-size:12px}.chantabs{background:var(--paper-50);border:1px solid var(--border);border-radius:6px;gap:2px;padding:2px;display:inline-flex}.chantabs button{cursor:pointer;color:var(--fg-2);font-size:12px;font-weight:500;font-family:var(--font-sans);background:0 0;border:0;border-radius:4px;align-items:center;gap:6px;padding:5px 12px;display:inline-flex}.chantabs button.on{background:var(--bg-2);color:var(--fg-1);box-shadow:var(--shadow-1)}.chantabs .dot{border-radius:999px;width:6px;height:6px}.chantabs .dot.stable{background:var(--normal)}.chantabs .dot.beta{background:var(--warning)}.chantabs .dot.dev{background:var(--fault)}.subnav{border-bottom:1px solid var(--border);background:var(--bg-2);gap:0;padding:0 24px;display:flex}.subnav button{font-family:var(--font-sans);color:var(--fg-2);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:8px;margin-bottom:-1px;padding:12px 16px;font-size:13.5px;font-weight:500;display:inline-flex}.subnav button:hover{color:var(--fg-1)}.subnav button.on{color:var(--fg-1);border-bottom-color:var(--slate-700);font-weight:600}.subnav button .ct{background:var(--bg-3);color:var(--fg-2);font-family:var(--font-mono);border-radius:999px;padding:1px 6px;font-size:10.5px;font-weight:500}.split{grid-template-columns:320px 1fr;height:100%;display:grid}.split .list{border-right:1px solid var(--border);background:var(--bg-2);overflow:auto}.split .list .item{border-bottom:1px solid var(--border);cursor:pointer;transition:background var(--dur-micro);border-left:3px solid #0000;flex-direction:column;gap:4px;padding:12px 16px;display:flex}.split .list .item:hover{background:var(--paper-50)}.split .list .item.on{background:var(--paper-200);border-left-color:var(--focus)}.split .list .item .top{align-items:center;gap:8px;display:flex}.split .list .item .id{font-family:var(--font-mono);font-size:12.5px;font-weight:600}.split .list .item .sub{color:var(--fg-2);font-size:11.5px}.split .list .item .ver{font-family:var(--font-mono);color:var(--fg-3);margin-left:auto;font-size:11px}.split .detail{background:var(--bg-1);overflow:auto}.detail-head{background:var(--bg-2);border-bottom:1px solid var(--border);align-items:flex-start;gap:16px;padding:18px 24px;display:flex}.detail-head .chip-thumb{background:var(--slate-700);width:60px;height:42px;color:var(--paper-50);font-family:var(--font-mono);letter-spacing:.02em;text-align:center;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:4px 6px;font-size:11px;font-weight:600;line-height:1.3;display:flex}.detail-head h2{font-family:var(--font-mono);margin:0;font-size:18px;font-weight:700}.detail-head .sub{color:var(--fg-2);margin-top:2px;font-size:13px}.detail-head .grow{flex:1}.detail-tabs{border-bottom:1px solid var(--border);background:var(--bg-2);gap:0;padding:0 24px;display:flex}.detail-tabs button{color:var(--fg-2);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;margin-bottom:-1px;padding:10px 14px;font-size:13px;font-weight:500}.detail-tabs button.on{color:var(--fg-1);border-bottom-color:var(--slate-700);font-weight:600}.detail-body{grid-template-columns:1fr 1fr;gap:12px;padding:20px 24px;display:grid}.detail-body .full{grid-column:1/-1}.metric{background:var(--bg-2);border:1px solid var(--border);border-radius:10px;padding:14px}.metric .label{letter-spacing:.06em;text-transform:uppercase;color:var(--fg-2);font-size:11px;font-weight:600}.metric .value{font-family:var(--font-mono);margin-top:4px;font-size:22px;font-weight:600}.metric .delta{font-family:var(--font-mono);color:var(--fg-3);font-size:11px}.release{background:var(--bg-2);border:1px solid var(--border);cursor:default;border-radius:10px;grid-template-columns:160px 1fr auto;align-items:center;gap:18px;padding:18px 20px;display:grid}.release:hover{border-color:var(--border-strong)}.release.deployed{border-color:var(--slate-700);box-shadow:0 0 0 1px var(--slate-700)}.release .ver{font-family:var(--font-mono);letter-spacing:-.01em;font-size:18px;font-weight:700}.release .title{font-size:14px;font-weight:600}.release .meta{color:var(--fg-2);margin-top:4px;font-size:12px}.release .uptake{color:var(--fg-2);align-items:center;gap:10px;margin-top:8px;font-size:11.5px;display:flex}.release .uptake .bar{background:var(--paper-200);border-radius:999px;flex:1;max-width:280px;height:6px;overflow:hidden}.release .uptake .bar>span{background:var(--slate-700);height:100%;display:block}.release .acts{flex-direction:row;flex-shrink:0;align-items:center;gap:6px;display:flex}.mono{font-family:var(--font-mono)}.tag{background:var(--paper-200);color:var(--fg-1);font-size:11.5px;font-weight:500;font-family:var(--font-mono);border-radius:4px;align-items:center;gap:6px;padding:2px 8px;display:inline-flex}.esp-icon{color:var(--fault)}.spark-line{stroke-width:1.5px;fill:none}.toast{background:var(--slate-700);color:var(--paper-50);box-shadow:var(--shadow-2);z-index:60;animation:toast-in .2s var(--ease);border-radius:8px;align-items:center;gap:10px;padding:12px 18px;font-size:13.5px;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,20px)}to{opacity:1;transform:translate(-50%)}}.group{background:var(--bg-2);border:1px solid var(--border);border-radius:10px;margin-bottom:10px;overflow:hidden}.group .gh{background:var(--paper-50);border-bottom:1px solid var(--border);cursor:pointer;align-items:center;gap:12px;padding:12px 16px;display:flex}.group .gh .name{font-size:14px;font-weight:600}.group .gh .ct{font-family:var(--font-mono);color:var(--fg-2);font-size:12px}.group .gh .grow{flex:1}.group.collapsed .gh{border-bottom:0}.sidebar .nav-item.disabled{opacity:.5;cursor:not-allowed}.empty{text-align:center;color:var(--fg-2);padding:60px 24px}.empty .ic{width:40px;height:40px;color:var(--fg-3);margin:0 auto 12px}.selgroup{background:var(--paper-50);border:1px solid var(--border-strong);animation:selgroup-in .18s var(--ease);border-radius:8px;align-items:center;gap:6px;padding:4px 6px 4px 10px;display:inline-flex}@keyframes selgroup-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.selgroup-count{color:var(--fg-1);border-right:1px solid var(--border);white-space:nowrap;align-items:center;gap:6px;margin-right:2px;padding-right:6px;font-size:12.5px;font-weight:600;display:inline-flex}.selgroup-dot{background:var(--slate-700);border-radius:999px;width:7px;height:7px;display:inline-block}.modal{background:var(--bg-2);border:1px solid var(--border);width:520px;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);box-shadow:var(--shadow-2);z-index:60;animation:modal-in .18s var(--ease);border-radius:12px;flex-direction:column;display:flex;position:fixed;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-50%)}@keyframes modal-in{0%{opacity:0;transform:translate(-50%,calc(12px - 50%))}to{opacity:1;transform:translate(-50%,-50%)}}.modal .mhead{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:18px 20px;display:flex}.modal .mhead h2{margin:0;font-size:16px;font-weight:600}.modal .mhead .sub{color:var(--fg-2);font-size:12px}.modal .mbody{flex-direction:column;gap:16px;padding:20px;display:flex;overflow:auto}.modal .mfoot{border-top:1px solid var(--border);background:var(--bg-2);align-items:center;gap:8px;padding:14px 20px;display:flex}.modal .mfoot .grow{flex:1}.dropzone{border:1.5px dashed var(--border-strong);text-align:center;background:var(--paper-50);cursor:pointer;transition:border-color var(--dur-micro), background var(--dur-micro);border-radius:10px;flex-direction:column;align-items:center;gap:10px;padding:24px;display:flex}.dropzone:hover{border-color:var(--focus);background:var(--bg-2)}.dropzone.has-file{border-style:solid;border-color:var(--slate-700);background:var(--bg-2);text-align:left;align-items:flex-start}.dropzone .ic-wrap{background:var(--bg-3);width:40px;height:40px;color:var(--fg-2);border-radius:10px;justify-content:center;align-items:center;display:flex}.dropzone.has-file .ic-wrap{background:var(--paper-200);color:var(--slate-700)}.dropzone .fname{font-family:var(--font-mono);color:var(--fg-1);font-size:13px;font-weight:600}.dropzone .fmeta{font-family:var(--font-mono);color:var(--fg-3);font-size:11px}.form-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}.form-grid .full{grid-column:1/-1}textarea.input{resize:vertical;height:auto;min-height:70px;padding:8px 12px;line-height:1.5}.upload-progress{background:var(--paper-200);border-radius:999px;height:6px;overflow:hidden}.upload-progress>span{background:var(--slate-700);height:100%;transition:width .2s var(--ease);display:block}.ro-list{flex-direction:column;gap:10px;padding:16px 24px;display:flex}.ro-card{background:var(--bg-2);border:1px solid var(--border);cursor:pointer;transition:border-color var(--dur-micro), box-shadow var(--dur-micro);border-radius:10px;grid-template-columns:100px 1fr 220px 140px auto;align-items:center;gap:18px;padding:16px 18px;display:grid}.ro-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-1)}.ro-card.selected{border-color:#2563ca73;box-shadow:0 0 0 1px #2563ca26}.ro-card .id{font-family:var(--font-mono);letter-spacing:-.01em;font-size:13px;font-weight:600}.ro-card .id .hash{color:var(--fg-3)}.ro-card .verflow{font-family:var(--font-mono);align-items:center;gap:8px;margin-top:4px;font-size:13px;display:flex}.ro-card .verflow .from{color:var(--fg-3);text-decoration:line-through;-webkit-text-decoration-color:var(--fg-3);text-decoration-color:var(--fg-3)}.ro-card .verflow .arrow{color:var(--fg-3)}.ro-card .verflow .to{color:var(--fg-1);font-weight:700}.ro-card .title{color:var(--fg-1);font-size:13.5px;font-weight:600}.ro-card .sub{color:var(--fg-2);flex-wrap:wrap;align-items:center;gap:8px;margin-top:2px;font-size:11.5px;display:flex}.ro-card .sub .dot-sep{color:var(--fg-3)}.ro-card .ro-progress{flex-direction:column;gap:5px;display:flex}.ro-card .ro-progress .top{font-family:var(--font-mono);color:var(--fg-2);align-items:center;gap:8px;font-size:12px;display:flex}.ro-card .ro-progress .top .big{color:var(--fg-1);font-size:13.5px;font-weight:700}.ro-card .ro-progress .bar{background:var(--paper-200);border-radius:999px;height:6px;display:flex;overflow:hidden}.ro-card .ro-progress .bar>span{height:100%;transition:width .4s var(--ease);display:block}.ro-card .ro-progress .bar>.succ{background:var(--normal)}.ro-card .ro-progress .bar>.fail{background:var(--alarm)}.ro-card .ro-progress .bar>.pend{background:var(--fault);opacity:.4}.ro-card .ro-when{color:var(--fg-2);text-align:right;flex-direction:column;align-items:flex-end;gap:2px;font-size:11.5px;display:flex}.ro-card .ro-when .by{color:var(--fg-3);font-family:var(--font-mono);font-size:11px}.ro-card .ro-act{align-items:center;gap:6px;display:flex}.ro-status{text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;border:1px solid;border-radius:999px;align-items:center;gap:6px;padding:3px 9px;font-size:11px;font-weight:600;display:inline-flex}.ro-status .dot{border-radius:999px;width:6px;height:6px}.ro-status.running{background:var(--info-bg);color:#1b4f9f;border-color:#2563ca4d}.ro-status.running .dot{background:var(--focus);animation:1.2s ease-in-out infinite dot-pulse}.ro-status.scheduled{background:var(--paper-100);border-color:var(--border);color:var(--fg-2)}.ro-status.scheduled .dot{background:var(--fg-3)}.ro-status.completed{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-strong)}.ro-status.completed .dot{background:var(--normal)}.ro-status.failed,.ro-status.rolled-back{background:var(--alarm-bg);border-color:var(--alarm-border);color:var(--alarm-strong)}.ro-status.failed .dot,.ro-status.rolled-back .dot{background:var(--alarm)}.ro-status.paused{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-strong)}.ro-status.paused .dot{background:var(--warning)}.waves{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.wave{border:1px solid var(--border);background:var(--bg-2);border-radius:10px;padding:12px}.wave.done{border-color:var(--normal-border);background:var(--normal-bg)}.wave.running{background:var(--info-bg);border-color:#2563ca66}.wave.paused{border-color:var(--warning-border);background:var(--warning-bg)}.wave .pct{font-family:var(--font-mono);letter-spacing:-.01em;font-size:22px;font-weight:700}.wave .sub{color:var(--fg-2);margin-top:2px;font-size:11.5px}.wave .row{font-family:var(--font-mono);color:var(--fg-2);justify-content:space-between;margin-top:8px;font-size:11.5px;display:flex}.evlog{font-family:var(--font-mono);background:var(--slate-700);color:var(--paper-50);border-radius:8px;font-size:12px;line-height:1.55;overflow:hidden}.evlog .row{border-bottom:1px solid var(--slate-500);gap:12px;padding:6px 14px;display:flex}.evlog .row:last-child{border-bottom:0}.evlog .row .t{color:var(--slate-200);flex:none;width:90px}.evlog .row .who{color:var(--paper-50);flex:none;width:130px}.evlog .row .msg{flex:1}.evlog .row.fail .msg{color:var(--red-100)}.evlog .row.ok .msg{color:var(--green-100)}.evlog .row.event .msg{color:var(--paper-50);font-style:italic}.dc-card .ab-app{width:100%;height:100%;position:relative;overflow:hidden}.dc-card .ab-app .app{height:100%!important;min-height:0!important}.dc-card .ab-app .sidepanel,.dc-card .ab-app .modal,.dc-card .ab-app .scrim,.dc-card .ab-app .toast{position:absolute!important}.ov{grid-template-columns:1fr;gap:12px;padding:14px 24px 24px;display:grid}.ov-hero{background:var(--bg-2);border:1px solid var(--border);border-radius:12px;grid-template-columns:1fr 220px;align-items:center;gap:24px;padding:22px 24px;display:grid}.ov-hero .left h1{letter-spacing:-.015em;align-items:center;gap:12px;margin:0;font-size:26px;font-weight:600;display:flex}.ov-hero .left .desc{color:var(--fg-2);margin-top:4px;font-size:13.5px}.ov-hero .left .legend{color:var(--fg-2);flex-wrap:wrap;gap:14px;margin-top:14px;font-size:12.5px;display:flex}.ov-hero .left .legend .item{align-items:center;gap:6px;display:inline-flex}.ov-hero .left .legend .swatch{border-radius:3px;width:9px;height:9px}.ov-hero .left .legend .n{font-family:var(--font-mono);color:var(--fg-1);font-variant-numeric:tabular-nums;font-weight:600}.health-ring{width:180px;height:180px;margin-left:auto;position:relative}.health-ring svg{transform:rotate(-90deg)}.health-ring .center{flex-direction:column;justify-content:center;align-items:center;gap:2px;display:flex;position:absolute;inset:0}.health-ring .center .big{font-family:var(--font-mono);font-size:32px;font-weight:700;line-height:1}.health-ring .center .sub{color:var(--fg-2);text-transform:uppercase;letter-spacing:.08em;font-size:10.5px;font-weight:600}.ov-tiles{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.ov-tile{background:var(--bg-2);border:1px solid var(--border);cursor:pointer;transition:border-color var(--dur-micro), box-shadow var(--dur-micro);border-radius:10px;flex-direction:column;gap:8px;padding:16px 18px;display:flex}.ov-tile:hover{border-color:var(--focus);box-shadow:0 0 0 1px var(--focus-ring)}.ov-tile .head{letter-spacing:.06em;text-transform:uppercase;color:var(--fg-2);align-items:center;gap:8px;font-size:12px;font-weight:600;display:flex}.ov-tile .head .grow{flex:1}.ov-tile .head .more{color:var(--focus);text-transform:none;letter-spacing:0;font-size:11px;font-weight:500}.ov-tile .big{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:26px;font-weight:700;line-height:1}.ov-tile .sub{color:var(--fg-2);flex-wrap:wrap;align-items:center;gap:8px;font-size:12px;display:flex}.ov-tile .sub b{color:var(--fg-1);font-weight:600;font-family:var(--font-mono)}.ov-tile .sub .pill{padding:1px 7px;font-size:10.5px}.ov-ia{background:var(--bg-2);border:1px solid var(--border);border-radius:12px;padding:20px 24px}.ov-ia-diagram{grid-template-rows:1fr auto 1fr;grid-template-columns:1fr 1fr;gap:0;padding:18px 4px 4px;display:grid;position:relative}.ov-ia-node{background:var(--bg-2);border:1.5px solid var(--border-strong);cursor:pointer;transition:all var(--dur-micro);z-index:2;border-radius:10px;flex-direction:column;gap:4px;padding:12px;display:flex;position:relative}.ov-ia-node:hover{border-color:var(--focus);box-shadow:0 0 0 2px var(--focus-ring)}.ov-ia-node .ttl{align-items:center;gap:6px;font-size:13px;font-weight:600;display:flex}.ov-ia-node .desc{color:var(--fg-3);margin-top:2px;font-size:11px;line-height:1.3}.ov-ia-verb{z-index:1;grid-column:1/-1;justify-content:center;align-items:center;height:56px;display:flex;position:relative}.ov-ia-verb .pill-verb{background:var(--slate-700);color:var(--paper-50);box-shadow:var(--shadow-1);z-index:3;border-radius:999px;align-items:center;gap:6px;padding:7px 14px;font-size:12.5px;font-weight:600;display:inline-flex}.ov-ia-lines{pointer-events:none;z-index:0;position:absolute;inset:0}.card-head{align-items:center;gap:8px;margin-bottom:10px;display:flex}.card-head h3{margin:0;font-size:14px;font-weight:600}

