:root{--font-display: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-ui: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--text-2xs: .6875rem;--text-xs: .75rem;--text-sm: .8125rem;--text-md: .9375rem;--text-lg: 1.0625rem;--text-xl: 1.375rem;--text-2xl: 1.875rem;--text-3xl: 2.5rem;--text-4xl: 3.25rem;--sp-1: .25rem;--sp-2: .5rem;--sp-3: .75rem;--sp-4: 1rem;--sp-5: 1.5rem;--sp-6: 2rem;--sp-7: 3rem;--sp-8: 4rem;--r-xs: 6px;--r-sm: 8px;--r-md: 10px;--r-lg: 12px;--r-xl: 16px;--r-full: 999px;--ease: cubic-bezier(.22, 1, .36, 1);--ease-out: cubic-bezier(.22, 1, .36, 1);--dur-1: .14s;--dur-2: .24s;--dur-3: .4s;--topbar-h: 56px;--sidebar-w: 248px;--maxw: 1480px}:root,:root[data-theme=light]{color-scheme:light;--bg-0: #eeeef0;--bg-1: #f2f2f4;--bg-2: #ffffff;--bg-3: #fafafa;--bg-4: #f4f4f6;--bg-inset: #f4f4f6;--line: #e5e5e7;--line-strong: #d6d6d9;--line-faint: #efeff1;--tx-1: #101114;--tx-2: #4c4d53;--tx-3: #6c6d72;--tx-4: #a0a1a6;--tx-inv: #ffffff;--ac: #e8630c;--ac-bright: #f07018;--ac-dim: #c4530a;--ac-soft: rgba(232, 99, 12, .1);--ac-line: rgba(232, 99, 12, .35);--ac-glow: rgba(232, 99, 12, .2);--blue: #3b82f6;--blue-soft: rgba(59, 130, 246, .1);--ok: #2f9e5f;--ok-soft: rgba(47, 158, 95, .1);--warn: #b8860b;--warn-soft: rgba(184, 134, 11, .12);--err: #c8452b;--err-soft: rgba(200, 69, 43, .1);--idle: #8a8b90;--idle-soft: rgba(138, 139, 144, .12);--lock: #7c5cf0;--lock-soft: rgba(124, 92, 240, .12);--color-deco-red: #c8452b;--color-deco-green: #2f9e5f;--color-deco-cool: #3b82f6;--color-deco-purple: #7c5cf0;--sh-1: 0 1px 2px rgba(16, 17, 20, .04);--sh-2: 0 12px 34px -20px rgba(16, 17, 20, .16);--sh-3: 0 26px 64px -28px rgba(16, 17, 20, .3);--sh-pop: 0 26px 64px -28px rgba(16, 17, 20, .3), 0 0 0 1px var(--line);--dot: rgba(16, 17, 20, .04);--grid: rgba(16, 17, 20, .025);--canvas-bg: #f2f2f4;--canvas-dot: rgba(16, 17, 20, .07);--backdrop-opacity: .08}:root[data-theme=dark]{color-scheme:dark;--bg-0: #101114;--bg-1: #1a1b1e;--bg-2: #212226;--bg-3: #2a2c31;--bg-4: #26282d;--bg-inset: #151619;--line: #33343a;--line-strong: #43454b;--line-faint: #26272c;--tx-1: #f2f1ee;--tx-2: #b8b7b1;--tx-3: #9d9c96;--tx-4: #6e6d68;--tx-inv: #101114;--ac: #f07018;--ac-bright: #ff8a3d;--ac-dim: #d9640f;--ac-soft: rgba(240, 112, 24, .14);--ac-line: rgba(240, 112, 24, .42);--ac-glow: rgba(240, 112, 24, .28);--blue: #5fa2ff;--blue-soft: rgba(95, 162, 255, .14);--ok: #3fbb78;--ok-soft: rgba(63, 187, 120, .14);--warn: #d9a441;--warn-soft: rgba(217, 164, 65, .14);--err: #f0765c;--err-soft: rgba(240, 118, 92, .14);--idle: #85857f;--idle-soft: rgba(133, 133, 127, .14);--lock: #9b7cff;--lock-soft: rgba(155, 124, 255, .16);--color-deco-red: #f0765c;--color-deco-green: #3fbb78;--color-deco-cool: #5fa2ff;--color-deco-purple: #9b7cff;--sh-1: 0 1px 2px rgba(0, 0, 0, .4);--sh-2: 0 12px 34px -18px rgba(0, 0, 0, .55);--sh-3: 0 26px 64px -24px rgba(0, 0, 0, .7);--sh-pop: 0 26px 64px -24px rgba(0, 0, 0, .7), 0 0 0 1px var(--line);--dot: rgba(255, 255, 255, .05);--grid: rgba(255, 255, 255, .03);--canvas-bg: #1a1b1e;--canvas-dot: rgba(255, 255, 255, .07);--backdrop-opacity: .06}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-ui);font-size:var(--text-md);line-height:1.55;color:var(--tx-1);background-color:var(--bg-1);background-image:radial-gradient(var(--dot) 1px,transparent 1px);background-size:22px 22px;background-attachment:fixed;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;min-height:100vh}::selection{background:var(--ac-soft);color:var(--tx-1)}h1,h2,h3,h4{font-family:var(--font-display);font-weight:700;line-height:1.18;letter-spacing:-.02em;color:var(--tx-1)}h1{font-size:var(--text-2xl)}h2{font-size:var(--text-xl)}h3{font-size:var(--text-lg)}h4{font-size:var(--text-md)}h1 em,h2 em,h3 em{font-style:italic}p{color:var(--tx-2)}a{color:var(--ac);text-decoration:none}a:hover{color:var(--ac-bright)}small{font-size:var(--text-xs)}code,kbd,.mono{font-family:var(--font-mono)}*{scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:999px;border:3px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background:var(--tx-4);background-clip:content-box}:focus-visible{outline:2px solid var(--ac);outline-offset:2px;border-radius:var(--r-xs)}.app{position:relative;z-index:1;display:grid;grid-template-columns:var(--sidebar-w) 1fr;grid-template-rows:var(--topbar-h) 1fr;grid-template-areas:"brand topbar" "side  main";min-height:100vh}.app.no-side{grid-template-columns:1fr;grid-template-areas:"topbar" "main"}.topbar{grid-area:topbar}.brandbar{grid-area:brand}.sidebar{grid-area:side}.main{grid-area:main;min-width:0}.content{padding:var(--sp-6);max-width:var(--maxw);margin:0 auto}.content--wide{max-width:none}.content--flush{padding:0;max-width:none}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap;margin-bottom:var(--sp-6)}.page-head .eyebrow{font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:.16em;text-transform:uppercase;color:var(--ac);margin-bottom:var(--sp-2);display:flex;align-items:center;gap:var(--sp-2)}.page-head h1{font-size:var(--text-3xl)}.page-head .sub{color:var(--tx-3);margin-top:var(--sp-2);max-width:60ch}.page-head .actions{display:flex;gap:var(--sp-3);align-items:center}.row{display:flex;align-items:center;gap:var(--sp-3)}.row.wrap{flex-wrap:wrap}.col{display:flex;flex-direction:column;gap:var(--sp-3)}.between{justify-content:space-between}.center{justify-content:center;align-items:center}.grow{flex:1;min-width:0}.gap-2{gap:var(--sp-2)}.gap-4{gap:var(--sp-4)}.gap-5{gap:var(--sp-5)}.mt-2{margin-top:var(--sp-2)}.mt-4{margin-top:var(--sp-4)}.mt-5{margin-top:var(--sp-5)}.mt-6{margin-top:var(--sp-6)}.mb-4{margin-bottom:var(--sp-4)}.mb-5{margin-bottom:var(--sp-5)}.mb-6{margin-bottom:var(--sp-6)}.grid{display:grid;gap:var(--sp-5)}.grid-2{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}.grid-auto{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}@media(max-width:1080px){.grid-4,.grid-3{grid-template-columns:repeat(2,1fr)}}@media(max-width:720px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}}.mono{font-family:var(--font-mono);font-size:.92em}.muted{color:var(--tx-3)}.faint{color:var(--tx-4)}.tx-ac{color:var(--ac)}.eyebrow-sm{font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.14em;text-transform:uppercase;color:var(--tx-3)}.num{font-family:var(--font-display);font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hr{height:1px;background:var(--line);border:0;margin:var(--sp-5) 0}.hr.faint{background:var(--line-faint)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important}}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.reveal{opacity:0;animation:rise var(--dur-3) var(--ease-out) forwards}.reveal-1{animation-delay:40ms}.reveal-2{animation-delay:90ms}.reveal-3{animation-delay:.15s}.reveal-4{animation-delay:.21s}.reveal-5{animation-delay:.28s}.reveal-6{animation-delay:.36s}.topbar{display:flex;align-items:center;gap:var(--sp-4);height:var(--topbar-h);padding:0 var(--sp-5);background:var(--bg-2);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:40}.brandbar{display:flex;align-items:center;height:var(--topbar-h);padding:0 var(--sp-5);gap:var(--sp-3);background:var(--bg-2);border-bottom:1px solid var(--line);border-right:1px solid var(--line);position:sticky;top:0;z-index:41}.brand{display:flex;align-items:center;gap:var(--sp-3)}.brand__mark{width:26px;height:26px;border-radius:7px;flex:0 0 auto;display:grid;place-items:center;background:var(--ac);box-shadow:0 0 0 1px var(--ac-line)}.brand__mark svg{width:15px;height:15px}.brand__name{font-family:var(--font-display);font-weight:700;font-size:1.05rem;letter-spacing:-.02em;color:var(--tx-1)}.brand__name b{color:var(--ac);font-weight:700}.crumbs{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--text-sm);color:var(--tx-3);min-width:0}.crumbs a,.crumbs .link{color:var(--tx-2)}.crumbs a:hover,.crumbs .link:hover{color:var(--ac)}.crumbs .sep{color:var(--tx-4);margin:0 2px}.crumbs .cur{color:var(--tx-1);font-weight:600}.ctx-switch{display:inline-flex;align-items:center;gap:var(--sp-2);padding:5px 10px;border-radius:var(--r-sm);border:1px solid var(--line);background:var(--bg-3);font-size:var(--text-sm);color:var(--tx-1);cursor:pointer;white-space:nowrap;flex:0 0 auto}.ctx-switch:hover{border-color:var(--line-strong)}.ctx-switch .dot{width:7px;height:7px;flex:0 0 auto}.ctx-switch svg{width:15px;height:15px;flex:0 0 auto;color:var(--tx-3)}.searchbox{display:flex;align-items:center;gap:var(--sp-2);height:34px;padding:0 var(--sp-3);min-width:220px;background:var(--bg-inset);border:1px solid var(--line);border-radius:var(--r-sm);color:var(--tx-3)}.searchbox input{border:0;background:transparent;color:var(--tx-1);width:100%;font-size:var(--text-sm);font-family:var(--font-ui)}.searchbox input:focus{outline:none}.searchbox kbd{margin-left:auto}.sidebar{background:var(--bg-2);border-right:1px solid var(--line);padding:var(--sp-4) var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-2);overflow-y:auto;position:sticky;top:var(--topbar-h);height:calc(100vh - var(--topbar-h));z-index:30}.nav-group{margin-top:var(--sp-3)}.nav-group:first-child{margin-top:0}.nav-group__label{font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.14em;text-transform:uppercase;color:var(--tx-4);padding:0 var(--sp-3);margin-bottom:var(--sp-2)}.nav-item{display:flex;align-items:center;gap:var(--sp-3);padding:8px var(--sp-3);border-radius:var(--r-sm);color:var(--tx-2);font-size:var(--text-sm);font-weight:500;cursor:pointer;position:relative;transition:background var(--dur-1),color var(--dur-1)}.nav-item svg{width:17px;height:17px;flex:0 0 auto;opacity:.85}.nav-item:hover{background:var(--bg-3);color:var(--tx-1)}.nav-item.active{background:var(--ac-soft);color:var(--tx-1)}.nav-item.active:before{content:"";position:absolute;left:-3px;top:50%;transform:translateY(-50%);width:3px;height:18px;border-radius:3px;background:var(--ac)}.nav-item.active svg{color:var(--ac);opacity:1}.nav-item .badge{margin-left:auto}.nav-spacer{flex:1}.user-chip{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3);border-radius:var(--r-md);border:1px solid var(--line);background:var(--bg-3);cursor:pointer;color:var(--tx-1);text-decoration:none}.user-chip:hover{border-color:var(--line-strong)}.user-chip svg{width:16px;height:16px;flex:0 0 auto;color:var(--tx-3)}.user-chip .meta{min-width:0}.user-chip .meta .n{font-size:var(--text-sm);font-weight:600;color:var(--tx-1)}.user-chip .meta .r{font-size:var(--text-2xs);color:var(--tx-3)}.avatar{width:32px;height:32px;border-radius:var(--r-full);flex:0 0 auto;display:grid;place-items:center;font-family:var(--font-display);font-weight:700;font-size:.8rem;color:var(--tx-inv);background:var(--ac)}.avatar.sm{width:24px;height:24px;font-size:.66rem}.avatar.lg{width:44px;height:44px;font-size:1rem}.avatar.v2{background:var(--color-deco-purple)}.avatar.v3{background:var(--color-deco-cool)}.avatar.v4{background:var(--ac)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);font-family:var(--font-ui);font-size:var(--text-sm);font-weight:600;padding:9px 15px;border-radius:var(--r-sm);border:1px solid transparent;cursor:pointer;white-space:nowrap;transition:all var(--dur-1) var(--ease);line-height:1;color:var(--tx-1);background:var(--bg-3)}.btn svg{width:16px;height:16px}.btn:active{transform:translateY(0)}.btn--primary{background:var(--ac);border-color:var(--ac);color:var(--tx-inv);font-weight:600}.btn--primary:hover{background:var(--ac-bright);border-color:var(--ac-bright)}.btn--ghost{background:transparent;border-color:var(--line);color:var(--tx-1)}.btn--ghost:hover{background:var(--bg-3);border-color:var(--line-strong)}.btn--soft{background:var(--bg-3);border-color:var(--line)}.btn--soft:hover{background:var(--bg-4)}.btn--danger{background:var(--err-soft);color:var(--err);border-color:color-mix(in srgb,var(--err) 30%,transparent)}.btn--danger:hover{background:color-mix(in srgb,var(--err) 22%,transparent)}.btn--sm{padding:6px 11px;font-size:var(--text-xs);gap:5px}.btn--sm svg{width:14px;height:14px}.btn--lg{padding:12px 22px;font-size:var(--text-md)}.btn--block{width:100%}.btn--icon{padding:8px;width:34px;height:34px}.btn:disabled{opacity:.5;pointer-events:none}.btn--sso{background:var(--bg-2);border:1px solid var(--line);color:var(--tx-1);width:100%;padding:11px;gap:var(--sp-3);justify-content:center;font-weight:600}.btn--sso:hover{background:var(--bg-3);border-color:var(--line-strong)}.btn--sso svg{width:18px;height:18px}.iconbtn{width:34px;height:34px;display:grid;place-items:center;border-radius:var(--r-sm);border:1px solid transparent;background:transparent;color:var(--tx-2);cursor:pointer;transition:all var(--dur-1)}.iconbtn:hover{background:var(--bg-3);color:var(--tx-1)}.iconbtn svg{width:18px;height:18px}.panel{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-1)}.panel__head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--line)}.panel__head h3{font-size:var(--text-md)}.panel__head .sub{font-size:var(--text-xs);color:var(--tx-3)}.panel__body{padding:var(--sp-5)}.panel__body.tight{padding:0}.panel__foot{padding:var(--sp-4) var(--sp-5);border-top:1px solid var(--line);display:flex;gap:var(--sp-3);justify-content:flex-end}.card{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--sp-5);transition:border-color var(--dur-2),transform var(--dur-2),box-shadow var(--dur-2)}.card--link{cursor:pointer}.card--link:hover{border-color:var(--ac-line);transform:translateY(-2px);box-shadow:var(--sh-2)}.card--accent{border-top:2px solid var(--ac)}.stat{display:flex;flex-direction:column;gap:var(--sp-2)}.stat .k{font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.12em;text-transform:uppercase;color:var(--tx-3)}.stat .v{font-family:var(--font-display);font-weight:700;font-size:var(--text-2xl);letter-spacing:-.02em;line-height:1;font-variant-numeric:tabular-nums}.stat .d{font-size:var(--text-xs);color:var(--tx-3);display:flex;align-items:center;gap:4px}.stat .d.up{color:var(--ok)}.stat .d.down{color:var(--err)}.badge{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-mono);font-size:var(--text-2xs);font-weight:500;letter-spacing:.04em;padding:3px 8px;border-radius:var(--r-full);background:var(--bg-4);color:var(--tx-2);border:1px solid var(--line);line-height:1.4;white-space:nowrap}.badge--ok{background:var(--ok-soft);color:var(--ok);border-color:color-mix(in srgb,var(--ok) 28%,transparent)}.badge--warn{background:var(--warn-soft);color:var(--warn);border-color:color-mix(in srgb,var(--warn) 28%,transparent)}.badge--err{background:var(--err-soft);color:var(--err);border-color:color-mix(in srgb,var(--err) 28%,transparent)}.badge--idle{background:var(--idle-soft);color:var(--idle);border-color:color-mix(in srgb,var(--idle) 28%,transparent)}.badge--lock{background:var(--lock-soft);color:var(--lock);border-color:color-mix(in srgb,var(--lock) 28%,transparent)}.badge--ac{background:var(--ac-soft);color:var(--ac);border-color:var(--ac-line)}.badge--blue{background:var(--blue-soft);color:var(--blue);border-color:color-mix(in srgb,var(--blue) 28%,transparent)}.dot{width:8px;height:8px;border-radius:50%;background:var(--idle);flex:0 0 auto;display:inline-block}.dot--ok{background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}.dot--warn{background:var(--warn);box-shadow:0 0 0 3px var(--warn-soft)}.dot--err{background:var(--err);box-shadow:0 0 0 3px var(--err-soft)}.dot--lock{background:var(--lock);box-shadow:0 0 0 3px var(--lock-soft)}.dot--park{background:var(--blue);box-shadow:0 0 0 3px var(--blue-soft)}.dot--live{background:var(--ok);position:relative}.dot--live:after{content:"";position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:50%;border:2px solid var(--ok);animation:ping 1.8s var(--ease-out) infinite}@keyframes ping{0%{transform:scale(.6);opacity:.9}to{transform:scale(2.2);opacity:0}}.chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:var(--text-xs);padding:4px 9px;border-radius:var(--r-sm);background:var(--bg-4);border:1px solid var(--line);color:var(--tx-1)}.chip .x{cursor:pointer;color:var(--tx-3)}.chip .x:hover{color:var(--err)}kbd{font-family:var(--font-mono);font-size:var(--text-2xs);padding:2px 6px;border-radius:var(--r-xs);background:var(--bg-4);border:1px solid var(--line);border-bottom-width:2px;color:var(--tx-2)}.field{display:flex;flex-direction:column;gap:var(--sp-2)}.field>label,.label{font-size:var(--text-sm);font-weight:600;color:var(--tx-2)}.field .hint{font-size:var(--text-xs);color:var(--tx-3)}.field .hint.mono{font-family:var(--font-mono)}.input,.select,.textarea{width:100%;font-family:var(--font-ui);font-size:var(--text-sm);color:var(--tx-1);background:var(--bg-inset);border:1px solid var(--line);border-radius:var(--r-sm);padding:10px 12px;transition:border-color var(--dur-1),box-shadow var(--dur-1)}.input.mono,.textarea.mono{font-family:var(--font-mono)}.input::placeholder,.textarea::placeholder{color:var(--tx-4)}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--ac-line);box-shadow:0 0 0 3px var(--ac-soft)}.textarea{resize:vertical;min-height:90px;line-height:1.5}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%236f7d90' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:34px}.input-group{display:flex;align-items:stretch}.input-group>.addon{display:flex;align-items:center;padding:0 12px;background:var(--bg-4);border:1px solid var(--line);font-family:var(--font-mono);font-size:var(--text-sm);color:var(--tx-3)}.input-group>.addon:first-child{border-right:0;border-radius:var(--r-sm) 0 0 var(--r-sm)}.input-group>.addon:last-child{border-left:0;border-radius:0 var(--r-sm) var(--r-sm) 0}.input-group>.input{border-radius:0}.input-group>.input:first-child{border-radius:var(--r-sm) 0 0 var(--r-sm)}.input-group>.input:last-child{border-radius:0 var(--r-sm) var(--r-sm) 0}.switch{position:relative;display:inline-flex;align-items:center;cursor:pointer}.switch input{position:absolute;opacity:0}.switch .track{width:40px;height:22px;border-radius:999px;background:var(--bg-4);border:1px solid var(--line);transition:all var(--dur-2) var(--ease);position:relative}.switch .track:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--tx-3);transition:all var(--dur-2) var(--ease)}.switch input:checked+.track{background:var(--ac);border-color:var(--ac)}.switch input:checked+.track:after{left:20px;background:var(--tx-inv)}.check{display:inline-flex;align-items:center;gap:var(--sp-2);cursor:pointer;font-size:var(--text-sm);color:var(--tx-2)}.check input{width:17px;height:17px;accent-color:var(--ac)}.segmented{display:inline-flex;padding:3px;gap:2px;background:var(--bg-inset);border:1px solid var(--line);border-radius:var(--r-sm)}.segmented button{font-family:var(--font-ui);font-size:var(--text-xs);font-weight:600;padding:5px 12px;border-radius:5px;border:0;background:transparent;color:var(--tx-3);cursor:pointer}.segmented button.active{background:var(--bg-3);color:var(--tx-1);box-shadow:var(--sh-1)}.tabs{display:flex;gap:var(--sp-1);border-bottom:1px solid var(--line)}.tab{padding:10px var(--sp-4);font-size:var(--text-sm);font-weight:600;color:var(--tx-3);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color var(--dur-1)}.tab:hover{color:var(--tx-1)}.tab.active{color:var(--tx-1);border-bottom-color:var(--ac)}.table-wrap{overflow-x:auto}table.tbl{width:100%;border-collapse:collapse;font-size:var(--text-sm)}.tbl thead th{text-align:left;font-family:var(--font-mono);font-weight:500;font-size:var(--text-2xs);letter-spacing:.1em;text-transform:uppercase;color:var(--tx-3);padding:11px var(--sp-4);border-bottom:1px solid var(--line);white-space:nowrap;background:var(--bg-2)}.tbl tbody td{padding:12px var(--sp-4);border-bottom:1px solid var(--line-faint);color:var(--tx-2);vertical-align:middle}.tbl tbody tr{transition:background var(--dur-1)}.tbl tbody tr:hover{background:var(--bg-3)}.tbl tbody td .strong{color:var(--tx-1);font-weight:600}.tbl tbody tr:last-child td{border-bottom:0}.tbl td.right,.tbl th.right{text-align:right}.tbl td.actions{display:flex;justify-content:flex-end;align-items:center;gap:var(--sp-2);white-space:nowrap}.code{font-family:var(--font-mono);font-size:var(--text-sm);line-height:1.6;background:var(--bg-inset);border:1px solid var(--line);border-radius:var(--r-md);padding:var(--sp-4);color:var(--tx-2);overflow-x:auto;white-space:pre}.code .c-key{color:var(--ac)}.code .c-str{color:var(--ok)}.code .c-num{color:var(--warn)}.code .c-cmt{color:var(--tx-4)}.code .c-fn{color:var(--blue)}.kv{display:grid;grid-template-columns:auto 1fr;gap:var(--sp-2) var(--sp-5);align-items:baseline;font-size:var(--text-sm)}.kv dt{color:var(--tx-3);font-family:var(--font-mono);font-size:var(--text-xs)}.kv dd{color:var(--tx-1);font-family:var(--font-mono)}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;display:none;align-items:center;justify-content:center;padding:var(--sp-5);background:#03060c9e;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:fade var(--dur-2) ease}.scrim.open{display:flex}@keyframes fade{0%{opacity:0}to{opacity:1}}.modal{width:100%;max-width:520px;background:var(--bg-2);border:1px solid var(--line-strong);border-radius:var(--r-xl);box-shadow:var(--sh-3);animation:pop var(--dur-2) var(--ease-out);max-height:90vh;overflow:auto}.modal.lg{max-width:720px}@keyframes pop{0%{opacity:0;transform:translateY(12px) scale(.98)}to{opacity:1;transform:none}}.modal__head{padding:var(--sp-5) var(--sp-5) var(--sp-4);border-bottom:1px solid var(--line);display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4)}.modal__head h3{font-size:var(--text-lg)}.modal__head .sub{font-size:var(--text-sm);color:var(--tx-3);margin-top:4px}.modal__body{padding:var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-4)}.modal__foot{padding:var(--sp-4) var(--sp-5);border-top:1px solid var(--line);display:flex;gap:var(--sp-3);justify-content:flex-end}.toast-wrap{position:fixed;bottom:var(--sp-5);right:var(--sp-5);z-index:95;display:flex;flex-direction:column;gap:var(--sp-3)}.toast{display:flex;align-items:center;gap:var(--sp-3);min-width:280px;padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);background:var(--bg-3);border:1px solid var(--line-strong);box-shadow:var(--sh-pop);font-size:var(--text-sm);color:var(--tx-1);animation:pop var(--dur-2) var(--ease-out)}.toast .dot{width:9px;height:9px}.empty{text-align:center;padding:var(--sp-7) var(--sp-5);color:var(--tx-3)}.empty svg{width:40px;height:40px;color:var(--tx-4);margin-bottom:var(--sp-3)}.empty h3{color:var(--tx-2);margin-bottom:var(--sp-2)}.progress{height:6px;border-radius:999px;background:var(--bg-4);overflow:hidden}.progress>span{display:block;height:100%;border-radius:999px;background:var(--ac)}.progress.warn>span{background:var(--warn)}.progress.err>span{background:var(--err)}.callout{display:flex;gap:var(--sp-3);padding:var(--sp-4);border-radius:var(--r-md);border:1px solid var(--line);background:var(--bg-3);font-size:var(--text-sm);color:var(--tx-2)}.callout svg{width:18px;height:18px;flex:0 0 auto;margin-top:1px}.callout--ac{background:var(--ac-soft);border-color:var(--ac-line)}.callout--ac svg{color:var(--ac)}.callout--ac .btn--primary svg{color:var(--tx-inv)}.callout--warn{background:var(--warn-soft);border-color:color-mix(in srgb,var(--warn) 28%,transparent)}.callout--warn svg{color:var(--warn)}.callout--err{background:color-mix(in srgb,var(--err) 10%,transparent);border-color:color-mix(in srgb,var(--err) 32%,transparent)}.callout--err svg{color:var(--err)}.callout strong{color:var(--tx-1)}.spark{display:inline-flex;align-items:flex-end;gap:2px;height:22px}.spark i{width:3px;background:var(--ac);border-radius:2px;opacity:.8}.logo{display:inline-flex;align-items:baseline;gap:0;line-height:1;font-family:var(--font-display);font-weight:700;letter-spacing:-.01em;font-size:1.14rem;color:var(--tx-1);-webkit-user-select:none;user-select:none}.logo__text--z3{margin:0}.logo__text--name{margin-left:.02em;font-family:var(--font-ui);font-weight:600;font-size:.82em;color:var(--tx-2)}.logo__z{display:inline-block;transform:translateY(.03em)}.logo__accent{color:var(--ac);display:inline-block;transform:scaleY(.78);transform-origin:center bottom}.logo--lg{font-size:1.7rem}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;overflow:hidden;pointer-events:none}.backdrop__svg{position:absolute;top:50%;height:auto;opacity:var(--backdrop-opacity);filter:blur(.5px)}.backdrop__svg--left{left:50%;width:120vmax;transform:translate(-50%,-50%)}.backdrop__svg--right{right:0;width:120vmax;transform:translate(14%,-50%)}[data-backdrop=cover] .backdrop__svg{opacity:.18}[data-backdrop=hero] .backdrop__svg{opacity:.7}[data-backdrop=hero] .backdrop__svg--left{opacity:0}@media(max-width:880px){[data-backdrop=hero] .backdrop__svg--right{opacity:.16}}.term{background:var(--bg-3);border:1px solid var(--line);border-radius:var(--r-md);font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.7;padding:var(--sp-4);overflow:auto;max-height:460px}.term .line{white-space:pre-wrap;word-break:break-word}.term .line.lv-w{color:var(--warn)}.term .line.lv-e{color:var(--err)}.term .line.lv-i{color:var(--tx-2)}.term .line.faint{color:var(--tx-4)}.link{color:var(--ac);cursor:pointer;text-decoration:none}.link:hover{text-decoration:underline}button.link{background:none;border:0;padding:0;margin:0;font:inherit;line-height:inherit;display:inline-flex;align-items:center;gap:var(--sp-2)}.topbar-back{margin-right:var(--sp-2);flex:0 0 auto}.nav-item--danger:hover{background:color-mix(in srgb,var(--err) 8%,transparent);color:var(--err)}.nav-item--danger:hover svg{color:var(--err);opacity:1}.nav-item--danger.active{background:color-mix(in srgb,var(--err) 10%,transparent);color:var(--err)}.nav-item--danger.active:before{background:var(--err);box-shadow:0 0 10px color-mix(in srgb,var(--err) 50%,transparent)}.nav-item--danger.active svg{color:var(--err)}.zt-card{display:block;width:100%;text-align:left;padding:var(--sp-4);border-radius:var(--r-md);border:1px solid var(--line);background:var(--bg-3);cursor:pointer;transition:border-color var(--dur-1),background var(--dur-1)}.zt-card:hover:not(:disabled){border-color:var(--line-strong)}.zt-card--on{border-color:var(--ac);background:var(--ac-soft);box-shadow:0 0 0 1px var(--ac)}.zt-card:disabled{cursor:default;opacity:.85}.basegrid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-2)}.basecard{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 8px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-3);cursor:pointer;transition:border-color var(--dur-1),background var(--dur-1),box-shadow var(--dur-1)}.basecard:hover{border-color:var(--line-strong)}.basecard.is-sel{border-color:var(--ac);background:var(--ac-soft);box-shadow:0 0 0 1px var(--ac)}.basecard__t{font-weight:600;font-size:var(--text-sm);color:var(--tx-1);line-height:1.1}.basecard__s{font-size:11px;color:var(--tx-3);line-height:1}@media(max-width:560px){.basegrid{grid-template-columns:repeat(2,1fr)}}.modal.xl{max-width:920px}.mailbody{margin:0;max-height:46vh;overflow:auto;background:var(--bg-inset);border:1px solid var(--line);border-radius:var(--r-md);padding:var(--sp-3) var(--sp-4);font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.65;color:var(--tx-2);white-space:pre-wrap;overflow-wrap:anywhere}.mailbody mark{background:color-mix(in srgb,var(--warn) 34%,transparent);color:var(--tx-1);border-radius:3px}.bulkbar{position:sticky;top:0;z-index:8;display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;padding:10px var(--sp-4);margin-bottom:var(--sp-3);background:var(--ac-soft);border:1px solid var(--ac-line);border-radius:var(--r-md);font-size:var(--text-sm);color:var(--tx-1)}.tbl tbody tr.rowopen{cursor:pointer}.tbl tbody tr.is-sel{background:var(--ac-soft)}.tbl tbody tr.is-sel:hover{background:color-mix(in srgb,var(--ac) 14%,transparent)}.tbl td.pick,.tbl th.pick{width:34px;padding-right:0}.tbl td.pick input,.tbl th.pick input{width:16px;height:16px;accent-color:var(--ac);cursor:pointer;vertical-align:middle}.iconbtn:disabled{opacity:.35;cursor:default}.iconbtn:disabled:hover{background:transparent;color:var(--tx-3)}.gr{display:grid;grid-template-columns:232px 1fr 340px;height:calc(100vh - var(--topbar-h));background:var(--canvas-bg);position:relative}.gr.no-inspect{grid-template-columns:232px 1fr}.gr--full{height:100vh}.gr-embed{display:grid;grid-template-columns:1fr 340px;height:calc(100vh - var(--topbar-h));background:var(--canvas-bg);position:relative}@media(max-width:1100px){.gr-embed{grid-template-columns:1fr}.gr-embed .gr-inspect{display:none}}.gr-world{position:absolute;top:0;left:0;width:0;height:0;transform-origin:0 0;z-index:2}.gr-canvas.panning{cursor:grabbing}.gr-canvas.pannable{cursor:grab}.gr-stats{position:absolute;top:var(--sp-4);right:var(--sp-4);z-index:6;display:flex;align-items:center;gap:var(--sp-4);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--tx-3);pointer-events:none}.gr-stats .st{display:flex;align-items:center;gap:6px}.gr-stats .st svg{opacity:.65}.gr-stats .st b{color:var(--tx-2);font-weight:600}.gr-live{position:absolute;top:calc(var(--sp-4) + 20px);right:var(--sp-4);z-index:6;display:flex;align-items:center;gap:var(--sp-4);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--tx-3);text-decoration:none}.gr-live .st{display:flex;align-items:center;gap:6px}.gr-live .st svg{opacity:.65}.gr-live .st b{color:var(--tx-2);font-weight:600}.gr-live:hover .st b{color:var(--ac)}.gr-live__lbl{display:flex;align-items:center;gap:4px;color:var(--tx-3);text-transform:uppercase;letter-spacing:.08em;font-size:var(--text-2xs)}.gr-live__lbl svg{opacity:.65}.gr-palette__head{display:flex;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-1)}.gr-palette__proj{display:flex;align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.06em;color:var(--tx-3);padding-bottom:var(--sp-3);border-bottom:1px solid var(--line);margin-bottom:var(--sp-1)}.gr-palette{border-right:1px solid var(--line);background:var(--bg-2);padding:var(--sp-4);overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-4)}.gr-palette h4{font-size:var(--text-sm)}.pal-group{display:flex;flex-direction:column;gap:var(--sp-2)}.pal-group .lbl{font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.12em;text-transform:uppercase;color:var(--tx-4)}.pal-item{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3);border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-3);cursor:grab;transition:all var(--dur-1)}.pal-item:hover{border-color:var(--ac-line);transform:translate(2px)}.pal-item:active{cursor:grabbing}.pal-item .ic{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;flex:0 0 auto;background:var(--bg-4)}.pal-item .ic svg{width:16px;height:16px}.pal-item .t{font-size:var(--text-sm);font-weight:600;color:var(--tx-1)}.pal-item .d{font-size:var(--text-2xs);color:var(--tx-3)}.gr-canvas{position:relative;overflow:hidden;background-image:radial-gradient(var(--canvas-dot) 1.2px,transparent 1.2px);background-size:26px 26px;background-position:-13px -13px}.gr-canvas .edges{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1}.gr-canvas .edges path{fill:none;stroke:var(--line-strong);stroke-width:2}.gr-canvas .edges path.live{stroke:var(--ac);stroke-width:2.5}.gr-canvas .edges path.locked{stroke:var(--lock);stroke-dasharray:5 5}.gr-canvas .edges .flow{stroke:var(--ac-bright);stroke-width:2;stroke-linecap:round;stroke-dasharray:2 16;opacity:.7;animation:dash 1.4s linear infinite;pointer-events:none}@keyframes dash{to{stroke-dashoffset:-36}}@media(prefers-reduced-motion:reduce){.gr-canvas .edges .flow{animation:none;opacity:0}}.gr-canvas .edges .pending{stroke:var(--ac);stroke-width:2.5;stroke-dasharray:6 6}.gnode{position:absolute;z-index:2;width:190px;background:var(--bg-2);border:1px solid var(--line-strong);border-radius:var(--r-md);box-shadow:var(--sh-2);-webkit-user-select:none;user-select:none;transition:box-shadow var(--dur-1),border-color var(--dur-1)}.gnode:hover{border-color:var(--line-strong)}.gnode.selected{border-color:var(--ac);box-shadow:0 0 0 1px var(--ac)}.gnode.dragging{box-shadow:var(--sh-3);cursor:grabbing;z-index:5}.gnode__head{display:flex;align-items:center;gap:var(--sp-2);padding:9px 11px;border-bottom:1px solid var(--line);cursor:default;border-radius:var(--r-md) var(--r-md) 0 0}.gnode__head .ic{width:22px;height:22px;border-radius:6px;display:grid;place-items:center;flex:0 0 auto}.gnode__head .ic svg{width:13px;height:13px}.gnode__head .t{font-size:var(--text-sm);font-weight:700;color:var(--tx-1);min-width:0}.gnode__head .t small{display:block;font-family:var(--font-mono);font-size:10px;font-weight:400;color:var(--tx-3)}.gnode__body{padding:9px 11px;display:flex;flex-direction:column;gap:7px}.gnode__meta{display:flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:10.5px;color:var(--tx-3)}.gnode__tags{display:flex;flex-wrap:wrap;gap:4px}.gnode__mounts{display:flex;flex-direction:column;gap:4px}.gnode__mount{display:flex;align-items:center;gap:5px;max-width:100%;font-family:var(--font-mono);font-size:var(--text-2xs);line-height:1.4;padding:3px 8px;border-radius:var(--r-full);background:var(--bg-4);color:var(--tx-2);border:1px solid var(--line)}.gnode__mount svg{flex:0 0 auto;opacity:.7}.gnode__mount span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.gnode--router .ic{background:var(--ac-soft);color:var(--ac)}.gnode--router{border-top:2px solid var(--ac)}.gnode--pod .ic{background:var(--blue-soft);color:var(--blue)}.gnode--db .ic{background:var(--warn-soft);color:var(--warn)}.gnode--lock .ic{background:var(--lock-soft);color:var(--lock)}.gnode--ingress .ic{background:var(--ok-soft);color:var(--ok)}.gnode--ingress{border-top:2px solid var(--ok)}.port{position:absolute;width:13px;height:13px;border-radius:50%;background:var(--bg-4);border:2px solid var(--tx-4);cursor:default;z-index:3;transition:all var(--dur-1)}.port:hover,.port.hot{background:var(--ac);border-color:var(--ac-bright);transform:scale(1.25)}.port.in{left:-7px;top:50%;transform:translateY(-50%)}.port.out{right:-7px;top:50%;transform:translateY(-50%)}.port.connected{background:var(--ac);border-color:var(--ac-bright)}.gr-toolbar{position:absolute;top:var(--sp-4);left:var(--sp-4);z-index:6;display:flex;align-items:center;gap:var(--sp-2);background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);padding:5px;box-shadow:var(--sh-1)}.gr-toolbar .div{width:1px;height:20px;background:var(--line);margin:0 2px}.gr-zoom{position:absolute;bottom:var(--sp-4);left:var(--sp-4);z-index:6;display:flex;align-items:center;gap:var(--sp-2);background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);padding:4px;box-shadow:var(--sh-1)}.gr-zoom .lvl{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--tx-3);padding:0 var(--sp-2);min-width:48px;text-align:center}.gr-hint{position:absolute;bottom:var(--sp-4);left:50%;transform:translate(-50%);z-index:6;display:flex;align-items:center;gap:var(--sp-3);background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-full);padding:7px var(--sp-4);font-size:var(--text-xs);color:var(--tx-3);box-shadow:var(--sh-1)}.gr-hint kbd{font-size:10px}.gr-inspect{border-left:1px solid var(--line);background:var(--bg-2);overflow-y:auto;display:flex;flex-direction:column}.gr-inspect__head{padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:var(--sp-3)}.gr-inspect__head .ic{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;flex:0 0 auto}.gr-inspect__head .ic svg{width:16px;height:16px}.gr-inspect__head .t{min-width:0}.gr-inspect__head .t h3{font-size:var(--text-md)}.gr-inspect__head .t small{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--tx-3)}.gr-inspect__tabs{display:flex;gap:2px;padding:var(--sp-3) var(--sp-4) 0;border-bottom:1px solid var(--line)}.gr-inspect__body{padding:var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-5)}.insp-section{display:flex;flex-direction:column;gap:var(--sp-3)}.insp-section>.lbl{font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.12em;text-transform:uppercase;color:var(--tx-4);display:flex;align-items:center;justify-content:space-between}.insp-facts{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-3);overflow:hidden}.insp-fact{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-2) var(--sp-3);font-size:var(--text-xs)}.insp-fact+.insp-fact{border-top:1px solid var(--line)}.insp-fact .k{color:var(--tx-4);font-family:var(--font-mono);font-size:var(--text-2xs);text-transform:uppercase;letter-spacing:.08em;flex:0 0 auto}.insp-fact .v{color:var(--tx-1);display:inline-flex;align-items:center;gap:var(--sp-2);text-align:right;min-width:0}.insp-actions{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-2)}.insp-act{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);min-height:32px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-3);color:var(--tx-2);font-size:var(--text-xs);text-align:left;cursor:pointer;transition:border-color .12s,color .12s,background .12s}.insp-act:hover{border-color:color-mix(in srgb,var(--ac) 55%,var(--line));color:var(--tx-1);background:var(--bg-2)}.insp-act svg{flex:0 0 auto;color:var(--tx-3)}.insp-act:hover svg{color:var(--ac)}.insp-act.danger{color:var(--err);border-color:color-mix(in srgb,var(--err) 30%,var(--line))}.insp-act.danger:hover{background:color-mix(in srgb,var(--err) 12%,transparent);color:var(--err)}.insp-act.danger svg,.insp-act.danger:hover svg{color:var(--err)}.gr-inspect__empty{flex:1;display:grid;place-items:center;padding:var(--sp-6);text-align:center}.port-row{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3);border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-3)}.port-row .pt{width:9px;height:9px;border-radius:50%;background:var(--ac);flex:0 0 auto}.port-row .pt.in{background:var(--ok)}.port-row .pt.out{background:var(--blue)}.conn-row{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);background:var(--bg-3);border:1px solid var(--line);font-size:var(--text-xs)}.conn-row .arrow{color:var(--ac)}@media(max-width:1100px){.gr{grid-template-columns:200px 1fr}.gr-inspect{display:none}}.ctx-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80}.ctxmenu{position:fixed;z-index:81;min-width:180px;padding:var(--sp-2);background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--sh-3);display:flex;flex-direction:column;gap:1px}.ctxmenu .ctx-title{font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.1em;text-transform:uppercase;color:var(--tx-4);padding:var(--sp-2) var(--sp-3) var(--sp-1)}.ctxmenu .ctx-item{display:flex;align-items:center;gap:var(--sp-3);width:100%;padding:var(--sp-2) var(--sp-3);border:0;background:transparent;color:var(--tx-1);font-size:var(--text-sm);text-align:left;border-radius:var(--r-sm);cursor:pointer}.ctxmenu .ctx-item:hover{background:var(--bg-3)}.ctxmenu .ctx-item.danger{color:var(--err)}.ctxmenu .ctx-item.danger:hover{background:color-mix(in srgb,var(--err) 14%,transparent)}.ctxmenu .ctx-sep{height:1px;background:var(--line);margin:var(--sp-1) 0}.ctx-sub{position:relative}.ctx-sub>.ctx-item .ctx-caret{margin-left:auto;display:inline-flex;color:var(--tx-4)}.ctx-sub.open>.ctx-item{background:var(--bg-3)}.ctx-submenu{display:none;position:absolute;left:100%;top:-5px;z-index:82;min-width:200px;max-height:70vh;overflow-y:auto;padding:var(--sp-2);background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--sh-3);flex-direction:column;gap:1px}.ctx-sub.open>.ctx-submenu{display:flex}.ctx-submenu.flip{left:auto;right:100%}.gnode__body{cursor:default}.gnode.connect-target{border-color:var(--ac);box-shadow:0 0 0 2px var(--ac)}.gr-canvas .edges path.live.sel{stroke:var(--ac-bright);stroke-width:3.5}.gr-canvas .edges .edge-handle{fill:var(--bg-2);stroke:var(--line-strong);stroke-width:1.5;pointer-events:auto;cursor:pointer;transition:fill var(--dur-1),stroke var(--dur-1)}.gr-canvas .edges .edge-handle:hover{fill:var(--ac-soft);stroke:var(--ac)}.gr-canvas .edges .edge-handle.sel{fill:var(--ac);stroke:var(--ac-bright)}.modal.eg-modal{max-width:600px}.eg-sec{display:flex;flex-direction:column;gap:var(--sp-3)}.eg-sec__head{display:flex;align-items:center;gap:var(--sp-2)}.eg-sec__head h4{flex:1;font-size:var(--text-sm);font-weight:700;color:var(--tx-2);letter-spacing:.01em}.eg-sec__head .count{font-size:var(--text-xs);color:var(--tx-3);font-family:var(--font-mono)}.eg-list{display:flex;flex-direction:column;gap:6px}.eg-row{display:flex;align-items:center;gap:var(--sp-3);padding:7px 8px 7px 10px;border-radius:var(--r-sm);background:var(--bg-inset);border:1px solid var(--line)}.eg-row .badge{flex:0 0 auto}.eg-row__target{flex:1;min-width:0;font-family:var(--font-mono);font-size:var(--text-sm);color:var(--tx-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.eg-row__target .meta{color:var(--tx-3)}.eg-row__del{flex:0 0 auto;width:30px;height:30px}.eg-row__del:hover{background:var(--err-soft);color:var(--err)}.eg-empty{padding:18px 14px;text-align:center;color:var(--tx-3);font-size:var(--text-sm);background:var(--bg-inset);border:1px dashed var(--line-strong);border-radius:var(--r-sm)}.eg-empty strong{color:var(--tx-2)}.eg-presets{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center}.eg-presets .lbl{font-size:var(--text-xs);color:var(--tx-3);margin-right:2px}.eg-divider{height:1px;background:var(--line);border:0;margin:2px 0}.eg-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--sp-3)}.eg-form .field{gap:5px}.eg-form .field--domain{flex:1 1 200px;min-width:160px}.eg-form .field--kind{flex:0 0 130px}.eg-form .field--proto{flex:0 0 84px}.eg-form .field--port{flex:0 0 92px}.eg-form .btn{margin-left:auto}.eg-hint-any{display:flex;align-items:center;gap:6px;font-size:var(--text-xs);color:var(--warn)}.vnet-zone{position:absolute;box-sizing:border-box;border:1.5px dashed color-mix(in srgb,var(--vc) 55%,transparent);background:color-mix(in srgb,var(--vc) 7%,transparent);border-radius:var(--r-lg);transition:background var(--dur-1),border-color var(--dur-1),box-shadow var(--dur-1)}.vnet-zone.drop{border-style:solid;border-color:var(--vc);background:color-mix(in srgb,var(--vc) 16%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--vc) 45%,transparent)}.vnet-zone__head{display:flex;align-items:center;gap:6px;padding:5px 8px;cursor:grab;background:color-mix(in srgb,var(--vc) 18%,var(--bg-2));border-radius:calc(var(--r-lg) - 2px) calc(var(--r-lg) - 2px) 0 0;border-bottom:1px solid color-mix(in srgb,var(--vc) 30%,transparent);font-size:var(--text-xs);color:var(--tx-1);-webkit-user-select:none;user-select:none}.vnet-zone__head:active{cursor:grabbing}.vnet-zone__head svg{color:var(--vc);flex:0 0 auto}.vnet-zone__name{font-weight:700;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vnet-zone__count{background:color-mix(in srgb,var(--vc) 32%,transparent);border-radius:999px;padding:0 6px;font-size:var(--text-2xs);font-weight:700}.vnet-zone__xhost{font-size:var(--text-2xs);color:var(--vc);font-weight:700}.vnet-zone__gear{margin-left:auto;display:inline-flex;padding:3px;border-radius:5px;color:var(--tx-3);background:transparent;border:0;cursor:pointer}.vnet-zone__gear:hover{background:color-mix(in srgb,var(--vc) 24%,transparent);color:var(--tx-1)}.vnet-zone__hint{position:absolute;top:36px;right:6px;bottom:6px;left:6px;display:grid;place-items:center;color:color-mix(in srgb,var(--vc) 70%,var(--tx-4));font-size:var(--text-xs);pointer-events:none;opacity:.45}.vnet-zone__resize{position:absolute;right:2px;bottom:2px;width:15px;height:15px;cursor:nwse-resize;border-right:2px solid color-mix(in srgb,var(--vc) 60%,transparent);border-bottom:2px solid color-mix(in srgb,var(--vc) 60%,transparent);border-radius:0 0 7px}.gnode__vnets{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.vchip{display:inline-flex;align-items:center;gap:4px;font-size:var(--text-2xs);font-weight:600;padding:1px 7px 1px 5px;border-radius:999px;background:color-mix(in srgb,var(--vc) 14%,transparent);color:color-mix(in srgb,var(--vc) 78%,var(--tx-1));border:1px solid color-mix(in srgb,var(--vc) 35%,transparent)}.vchip__dot{width:7px;height:7px;border-radius:50%;background:var(--vc, var(--ac));display:inline-block;flex:0 0 auto}.vnet-colors{display:flex;gap:8px}.vnet-swatch{width:26px;height:26px;border-radius:7px;border:2px solid transparent;cursor:pointer;padding:0}.vnet-swatch.sel{border-color:var(--tx-1);box-shadow:0 0 0 2px var(--bg-2) inset}.auth{position:relative;z-index:1;min-height:100vh;display:grid;grid-template-columns:1.05fr 1fr}@media(max-width:880px){.auth{grid-template-columns:1fr}.auth__aside{display:none}}[data-backdrop=hero] .backdrop__svg--right{opacity:.16}.auth__aside{position:relative;overflow:hidden;padding:var(--sp-7);display:flex;flex-direction:column;justify-content:space-between;background:var(--bg-1);border-right:1px solid var(--line)}.auth__aside>*{position:relative;z-index:1}.auth__aside h2{font-family:var(--font-display);font-size:clamp(2rem,3.4vw,2.9rem);font-weight:700;line-height:1.1;letter-spacing:-.02em;max-width:16ch}.auth__aside h2 em{font-style:italic}.auth__aside p{color:var(--tx-2);max-width:44ch;margin-top:var(--sp-4)}.auth__viz{display:flex;flex-direction:column;gap:var(--sp-3);margin-top:var(--sp-6)}.auth__viz .ln{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-2);box-shadow:var(--sh-1);font-size:var(--text-sm);color:var(--tx-2)}.auth__viz .ln .ic{width:26px;height:26px;border-radius:7px;display:grid;place-items:center;background:var(--bg-4);border:1px solid var(--line-faint);color:var(--tx-3);flex:0 0 auto}.auth__viz .ln .ic svg{width:14px;height:14px}.auth__viz .ln b{color:var(--tx-1);font-weight:600}.auth__main{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--sp-6);background:transparent}.auth__card{width:100%;max-width:412px;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-2);padding:var(--sp-6)}.auth__card .brand{margin-bottom:var(--sp-6)}.auth__card h1{font-family:var(--font-display);font-size:var(--text-2xl);font-weight:700;letter-spacing:-.02em;line-height:1.14}.auth__card h1 em{font-style:italic}.auth__card .sub{color:var(--tx-3);margin-top:var(--sp-2);font-size:var(--text-sm)}.auth__form{display:flex;flex-direction:column;gap:var(--sp-4);margin-top:var(--sp-6)}.auth .btn--primary,.auth .btn--primary:hover{box-shadow:none}.auth__divider{display:flex;align-items:center;gap:var(--sp-3);font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.18em;text-transform:uppercase;color:var(--tx-4);margin:var(--sp-4) 0 var(--sp-2)}.auth__divider:before,.auth__divider:after{content:"";height:1px;flex:1;background:var(--line)}.auth__sso{display:flex;flex-direction:column;gap:var(--sp-3)}.auth__foot{margin-top:var(--sp-6);font-size:var(--text-sm);color:var(--tx-3);text-align:center}.auth__theme{position:absolute;top:var(--sp-5);right:var(--sp-5);z-index:2}.pw-field{position:relative}.pw-field .toggle{position:absolute;right:10px;top:50%;transform:translateY(-50%)}#root{min-height:100vh}.boot{min-height:100vh;display:grid;place-items:center}.spin{width:26px;height:26px;border-radius:50%;border:2.5px solid var(--line-strong);border-top-color:var(--ac);animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.proj-switch{position:relative;margin-bottom:var(--sp-2)}.proj-switch__btn{display:flex;align-items:center;gap:var(--sp-2);width:100%;padding:9px 10px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-2);color:var(--tx-1);font:inherit;font-size:var(--text-sm);font-weight:600;cursor:pointer;text-align:left}.proj-switch__btn:hover,.proj-switch__btn.open{background:var(--bg-3);border-color:var(--line-strong)}.proj-switch__btn>span.truncate{flex:1;min-width:0}.proj-switch__btn svg:first-child{color:var(--ac);flex:none}.proj-switch__btn svg:last-child{color:var(--tx-3);flex:none}.proj-switch__menu{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:40;max-height:300px;overflow-y:auto;padding:4px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-2);box-shadow:var(--sh-2)}.proj-switch__item{display:flex;align-items:center;gap:var(--sp-2);padding:8px 9px;border-radius:var(--r-xs);color:var(--tx-2);font-size:var(--text-sm);text-decoration:none}.proj-switch__item:hover{background:var(--bg-3);color:var(--tx-1)}.proj-switch__item.active{background:var(--ac-soft);color:var(--tx-1)}.proj-switch__item.active svg:last-child{color:var(--ac);margin-left:auto}.proj-switch__item>span.truncate{flex:1;min-width:0}.proj-switch__all{border-top:1px solid var(--line);margin-top:4px;padding-top:8px;border-radius:0 0 var(--r-xs) var(--r-xs);color:var(--tx-3)}.proj-switch__footer{color:var(--tx-3)}.iconbtn--active{background:var(--ac-soft);color:var(--ac)}.proj-switch__empty{padding:10px;font-size:var(--text-sm);color:var(--tx-3);text-align:center}.profile{position:relative}.profile>.user-chip{width:100%;font:inherit;text-align:left}.profile>.user-chip.open,.profile>.user-chip:hover{border-color:var(--line-strong)}.profile__menu{position:fixed;left:calc(var(--sidebar-w) + 8px);bottom:14px;width:230px;z-index:60;padding:4px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-2);box-shadow:var(--sh-2)}.profile__menu .proj-switch__item{width:100%;border:0;background:transparent;font:inherit;cursor:pointer;text-align:left}.profile__signout{color:var(--tx-3)}.nav-group--danger{margin-top:var(--sp-4);padding-top:var(--sp-2);border-top:1px solid var(--line)}.notice{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--text-sm);padding:11px 14px;border-radius:var(--r-sm);border:1px solid var(--line)}.notice svg{flex:none;opacity:.85}.notice--err{background:var(--err-soft);color:var(--err);border-color:color-mix(in srgb,var(--err) 30%,transparent)}.notice--ok{background:var(--ok-soft);color:var(--ok);border-color:color-mix(in srgb,var(--ok) 30%,transparent)}/**
 * 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:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.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}
