@import"https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600&display=swap";:root{--bg: oklch(.967 .006 92);--panel: oklch(.995 .003 92);--panel-2: oklch(.948 .006 92);--border: oklch(.892 .007 92);--border-soft: oklch(.928 .006 92);--text: oklch(.27 .012 86);--text-2: oklch(.46 .013 86);--text-3: oklch(.61 .011 86);--brand: oklch(.82 .15 86);--brand-fill: oklch(.8 .155 85);--brand-hover: oklch(.75 .15 83);--brand-ink: oklch(.47 .11 74);--brand-tint: oklch(.955 .045 88);--on-brand: oklch(.29 .045 80);--green: oklch(.55 .13 150);--green-dim: oklch(.955 .045 150);--red: oklch(.53 .19 27);--red-dim: oklch(.955 .055 27);--amber: oklch(.66 .13 66);--amber-dim: oklch(.95 .055 70);--info: oklch(.55 .12 245);--info-dim: oklch(.955 .04 245);--magenta: oklch(.52 .13 300);--magenta-dim: oklch(.955 .04 300);--cyan: var(--info);--yellow: var(--amber);--fs-title: 21px;--fs-entity: 15px;--fs-body: 13px;--fs-label: 12px;--fs-sub: 11px;--fs-eyebrow: 10px;--radius: 10px;--radius-sm: 7px;--mono: "SFMono-Regular", "JetBrains Mono", "Consolas", ui-monospace, monospace;--sans: "Segoe UI", "Inter", system-ui, -apple-system, sans-serif;--shadow-sm: 0 1px 2px oklch(.3 .02 86 / .06);--shadow: 0 1px 3px oklch(.3 .02 86 / .08), 0 1px 2px oklch(.3 .02 86 / .04)}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:var(--sans);font-size:var(--fs-body);line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:var(--brand-ink);text-decoration:none;font-weight:500}a:hover{text-decoration:underline}code,.mono{font-family:var(--mono)}.app{max-width:1180px;margin:0 auto;padding:22px 28px 64px}.topbar{display:flex;align-items:center;gap:18px;padding-bottom:16px;margin-bottom:24px;border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:9px;font-size:16px;font-weight:600;color:var(--text)}.brand .mark{display:inline-flex;align-items:center;height:24px;padding:0 9px;border-radius:6px;background:var(--brand-fill);color:var(--on-brand);font-weight:700;letter-spacing:.2px}.brand .ver{font-family:var(--mono);font-size:11px;color:var(--text-3);font-weight:500}.page-title{font-size:var(--fs-title);font-weight:700;color:var(--text);margin-bottom:5px;letter-spacing:-.3px}.page-sub{font-size:var(--fs-body);color:var(--text-2);margin-bottom:24px;max-width:72ch;line-height:1.55}.topbar .spacer,.spacer{flex:1}.identity{display:flex;align-items:center;gap:16px;font-size:var(--fs-label);color:var(--text-2)}.identity b{color:var(--text);font-weight:600}.entity-name{font-size:var(--fs-entity);font-weight:700;color:var(--text);letter-spacing:-.2px}.row-title{font-size:var(--fs-body);font-weight:600;color:var(--text)}.row-sub{font-size:var(--fs-sub);color:var(--text-3);margin-top:1px}.meta{display:flex;flex-direction:column;align-items:flex-end;line-height:1.25}.meta .meta-k{font-size:var(--fs-eyebrow);letter-spacing:.8px;text-transform:uppercase;color:var(--text-3);font-weight:600}.meta .meta-v{font-size:var(--fs-body);font-weight:600;color:var(--text)}.nav{display:flex;gap:4px;margin-bottom:22px}.nav button{font:inherit;font-size:12px;letter-spacing:.3px;padding:7px 14px;border-radius:var(--radius-sm);background:transparent;color:var(--text-2);border:1px solid transparent;cursor:pointer;transition:background .12s,color .12s}.nav button:hover{color:var(--text);background:var(--panel-2)}.nav button[aria-selected=true]{color:var(--brand-ink);background:var(--brand-tint)}.status{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;color:var(--text-2)}.status .led{width:7px;height:7px;border-radius:50%;background:currentColor;flex:none}.status.ok{color:var(--green)}.status.off{color:var(--red)}.status.wait,.status.warn{color:var(--amber)}.status.info{color:var(--info)}.status.muted{color:var(--text-3)}.conn{display:inline-flex;align-items:center;gap:7px;font-size:11px;color:var(--text-2)}.conn .led{width:8px;height:8px;border-radius:50%}.led.on{background:var(--green)}.led.off{background:var(--red)}.led.idle{background:var(--amber)}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px;margin-bottom:26px}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow-sm)}.card-label{font-size:var(--fs-eyebrow);letter-spacing:1.2px;text-transform:uppercase;color:var(--text-3);margin-bottom:7px;font-weight:600}.card-value{font-size:23px;font-weight:700;color:var(--text);display:flex;align-items:center;gap:8px;letter-spacing:-.5px}.card-value.sm{font-size:15px;font-weight:600;letter-spacing:-.2px}.card-sub{font-size:var(--fs-sub);color:var(--text-2);margin-top:5px}.section{margin-bottom:26px}.section-head{display:flex;align-items:center;gap:9px;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border-soft)}.section-head h2{font-size:var(--fs-eyebrow);font-weight:700;color:var(--text-2);letter-spacing:1.2px;text-transform:uppercase}.section-head .count{font-family:var(--mono);font-size:var(--fs-label);color:var(--text-3)}.section-head .spacer{flex:1}.panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}table{width:100%;border-collapse:collapse;font-size:var(--fs-body)}thead th{text-align:left;font-size:var(--fs-eyebrow);letter-spacing:1px;text-transform:uppercase;color:var(--text-3);font-weight:600;padding:9px 14px;border-bottom:1px solid var(--border);background:var(--panel-2)}tbody td{padding:10px 14px;border-bottom:1px solid var(--border-soft);vertical-align:middle;color:var(--text)}tbody tr:last-child td{border-bottom:none}tbody tr:hover{background:var(--brand-tint)}td.dim,.dim{color:var(--text-2)}td .url{font-family:var(--mono);font-size:11px;color:var(--text-2);word-break:break-all}.badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;letter-spacing:.1px;padding:2px 8px;border-radius:6px;line-height:1.6;background:var(--panel-2);color:var(--text-2);border:1px solid var(--border)}.badge.cyan{color:var(--info);background:var(--info-dim);border-color:transparent}.badge.green{color:var(--green);background:var(--green-dim);border-color:transparent}.badge.magenta{color:var(--magenta);background:var(--magenta-dim);border-color:transparent}.badge.yellow{color:var(--amber);background:var(--amber-dim);border-color:transparent}.badge.red{color:var(--red);background:var(--red-dim);border-color:transparent}.badge.muted{color:var(--text-3);background:var(--panel-2);border-color:var(--border)}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:none}.dot.on{background:var(--green)}.dot.off{background:var(--red)}.btn{font:inherit;font-size:13px;display:inline-flex;align-items:center;gap:7px;padding:7px 13px;border-radius:var(--radius-sm);cursor:pointer;background:var(--panel);color:var(--text);border:1px solid var(--border);transition:border-color .12s,background .12s,color .12s,box-shadow .12s}.btn:hover{border-color:var(--brand);background:var(--brand-tint)}.btn:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.btn:disabled{opacity:.45;cursor:not-allowed}.btn:disabled:hover{border-color:var(--border);background:var(--panel)}.btn.danger{color:var(--red)}.btn.danger:hover{border-color:var(--red);background:var(--red-dim);color:var(--red)}.btn.ghost{background:transparent;border-color:transparent;color:var(--text-2)}.btn.ghost:hover{background:var(--panel-2);color:var(--text);border-color:transparent}.btn.sm{padding:5px 10px;font-size:12px}.btn.primary{background:var(--brand-fill);border-color:var(--brand-fill);color:var(--on-brand);font-weight:600;justify-content:center}.btn.primary:hover{background:var(--brand-hover);border-color:var(--brand-hover);color:var(--on-brand)}input.btn{cursor:text;background:var(--panel);font-weight:400}input.btn::placeholder{color:var(--text-3)}input.btn:hover{border-color:var(--border-strong, var(--border));background:var(--panel)}input.btn:focus,input.btn:focus-visible{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-tint)}.switch{display:inline-flex;align-items:center;gap:10px;cursor:pointer;-webkit-user-select:none;user-select:none}.switch input{position:absolute;opacity:0;width:0;height:0}.switch .track{width:42px;height:23px;border-radius:999px;background:var(--panel-2);border:1px solid var(--border);position:relative;transition:background .16s,border-color .16s}.switch .thumb{position:absolute;top:2px;left:2px;width:17px;height:17px;border-radius:50%;background:var(--panel);border:1px solid var(--border);transition:transform .16s,background .16s}.switch input:checked+.track{background:var(--green);border-color:var(--green)}.switch input:checked+.track .thumb{transform:translate(19px);background:var(--panel);border-color:transparent}.switch input:focus-visible+.track{outline:2px solid var(--brand);outline-offset:2px}.switch .switch-label{font-size:13px;color:var(--text)}.empty{padding:24px 16px;color:var(--text-3);text-align:center}.errbar{display:flex;align-items:center;gap:10px;padding:12px 16px;margin-bottom:18px;border-radius:var(--radius);border:1px solid var(--red);background:var(--red-dim);color:var(--red);font-size:13px}.skeleton{animation:pulse 1.3s ease-in-out infinite;background:var(--panel-2);border-radius:var(--radius)}@keyframes pulse{0%,to{opacity:.6}50%{opacity:.95}}.log{font-family:var(--mono);font-size:12px;line-height:1.7;background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;max-height:360px;overflow:auto;white-space:pre-wrap;word-break:break-word}.log .ln{color:var(--text-2)}.log .ln.warn{color:var(--amber)}.log .ln.err{color:var(--red)}.log .ln.info{color:var(--text)}.toast{position:fixed;bottom:22px;left:50%;transform:translate(-50%);padding:11px 18px;border-radius:var(--radius);font-size:13px;background:var(--panel);border:1px solid var(--border);color:var(--text);box-shadow:0 8px 30px #322d222e;z-index:50}.toast.ok{border-color:var(--green);color:var(--green)}.toast.err{border-color:var(--red);color:var(--red)}.flex{display:flex;align-items:center;gap:10px}.muted{color:var(--text-3)}.icon{width:15px;height:15px;stroke-width:1.75;flex:none}.icon.spin{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.login-wrap{position:relative;display:flex;align-items:center;justify-content:center;min-height:100vh;padding:32px;overflow:hidden;background:radial-gradient(120% 90% at 12% 8%,oklch(.93 .075 88 / .9),transparent 60%),radial-gradient(100% 80% at 92% 96%,oklch(.9 .085 78 / .7),transparent 55%),var(--bg)}.login-wrap:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(oklch(.5 .02 86 / .035) 1px,transparent 1px),linear-gradient(90deg,oklch(.5 .02 86 / .035) 1px,transparent 1px);background-size:38px 38px;-webkit-mask-image:radial-gradient(120% 100% at 50% 30%,#000 35%,transparent 80%);mask-image:radial-gradient(120% 100% at 50% 30%,#000 35%,transparent 80%);pointer-events:none}.login-card{position:relative;z-index:1;display:grid;grid-template-columns:1.04fr .96fr;width:min(940px,96vw);border-radius:22px;overflow:hidden;border:1px solid var(--border);background:var(--panel);box-shadow:0 1px #fff9 inset,0 28px 60px -22px #6452356b,0 10px 24px -16px #64523557;animation:login-card-in .6s cubic-bezier(.2,.7,.2,1) both}.login-brand{position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:36px;padding:44px 40px;color:var(--on-brand);background:radial-gradient(130% 120% at 8% 0%,oklch(.9 .115 92 / .95),transparent 58%),radial-gradient(120% 120% at 100% 100%,oklch(.74 .15 70 / .92),transparent 60%),linear-gradient(150deg,var(--brand) 0%,oklch(.78 .15 80) 52%,oklch(.71 .145 72) 100%);isolation:isolate}.login-brand:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;opacity:.5;mix-blend-mode:soft-light;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}.login-eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;font-weight:600;color:#5e4117;display:flex;align-items:center;gap:9px;animation:login-up .55s .1s ease-out both}.login-eyebrow .login-pill{background:#3b2b0d29;border-radius:999px;padding:3px 9px;letter-spacing:.14em}.login-wordmark{font-family:Fraunces,Georgia,serif;font-weight:500;font-size:clamp(48px,6vw,72px);line-height:.92;letter-spacing:-.02em;color:#3d2a0e;margin:0;animation:login-up .6s .16s cubic-bezier(.2,.7,.2,1) both}.login-wordmark em{font-style:italic;color:#583309}.login-tagline{font-size:14px;line-height:1.5;max-width:30ch;color:#45351c;margin-top:12px;animation:login-up .6s .22s ease-out both}.login-form{display:flex;flex-direction:column;gap:18px;padding:48px 44px;background:var(--panel)}.login-form-head{margin-bottom:4px;animation:login-up .55s .2s ease-out both}.login-form-head h2{font-size:22px;font-weight:650;letter-spacing:-.01em;color:var(--text);margin:0 0 4px}.login-form-head p{font-size:13px;color:var(--text-3);margin:0}.login-field{display:flex;flex-direction:column;gap:7px}.login-field:nth-of-type(1){animation:login-up .5s .28s ease-out both}.login-field:nth-of-type(2){animation:login-up .5s .34s ease-out both}.login-field>span{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-3)}.login-input{width:100%;height:46px;padding:0 14px;font-size:15px;font-family:var(--sans);color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);transition:border-color .15s,box-shadow .15s,background .15s}.login-input::placeholder{color:var(--text-3)}.login-input:hover{border-color:var(--border-strong, oklch(.85 .01 86))}.login-input:focus,.login-input:focus-visible{outline:none;background:var(--panel);border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-tint)}.login-error{display:flex;align-items:center;gap:7px;color:var(--red);font-size:13px;background:var(--red-dim);border:1px solid oklch(.8 .08 27 / .5);border-radius:var(--radius-sm);padding:9px 12px;animation:login-shake .32s ease}.login-submit{margin-top:4px;height:48px;display:inline-flex;align-items:center;justify-content:center;gap:9px;font-size:15px;font-weight:650;color:var(--on-brand);border:1px solid oklch(.72 .145 78);border-radius:var(--radius);cursor:pointer;background:linear-gradient(180deg,oklch(.84 .15 86),var(--brand-fill));box-shadow:0 1px #ffffff80 inset,0 8px 18px -10px #a77612cc;transition:transform .12s,box-shadow .15s,filter .15s;animation:login-up .5s .4s ease-out both}.login-submit:hover:not(:disabled){filter:brightness(1.03);box-shadow:0 1px #ffffff80 inset,0 12px 24px -10px #a77612f2;transform:translateY(-1px)}.login-submit:active:not(:disabled){transform:translateY(0)}.login-submit:focus-visible{outline:2px solid var(--brand-ink);outline-offset:2px}.login-submit:disabled{opacity:.55;cursor:not-allowed}.login-submit .icon{transition:transform .15s}.login-submit:hover:not(:disabled) .icon{transform:translate(3px)}@keyframes login-card-in{0%{opacity:0;transform:translateY(14px) scale(.99)}to{opacity:1;transform:none}}@keyframes login-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes login-shake{0%,to{transform:translate(0)}25%{transform:translate(-4px)}75%{transform:translate(4px)}}@media (prefers-reduced-motion: reduce){.login-card,.login-card *{animation:none!important}}
