body[data-page=homelab]{height:100dvh;min-height:0;overflow:hidden;display:flex;flex-direction:column}body[data-page=homelab] .site-nav{flex:none}.hl-page,.hl-app{flex:1;min-height:0;display:flex;flex-direction:column}.hl-toolbar{flex:none;display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;padding:10px var(--gutter);border-bottom:1px solid var(--hairline-soft)}.hl-heading{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px}.hl-title{margin:0;font-size:15px;font-weight:600;line-height:1.3;color:var(--fg)}.hl-state{font-size:12.5px;color:var(--fg-dim)}.hl-tools{margin-left:auto;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.hl-search{position:relative;display:block}.hl-search input{width:240px;height:34px;padding:0 10px 0 32px;font:inherit;font-size:13px;color:var(--fg);background:var(--bg-raised);border:1px solid var(--hairline)}.hl-search input::placeholder{color:var(--fg-faint)}.hl-search input:focus{outline:none;border-color:var(--fg)}.hl-search svg{position:absolute;left:10px;top:50%;width:15px;height:15px;transform:translateY(-50%);color:var(--fg-dim);pointer-events:none}.hl-btn{height:34px;min-width:34px;padding:0 10px;display:inline-flex;align-items:center;justify-content:center;gap:6px;font:inherit;font-size:13px;font-weight:500;color:var(--fg);background:var(--bg-raised);border:1px solid var(--hairline);cursor:pointer}.hl-btn:hover{border-color:var(--fg)}.hl-btn svg{width:15px;height:15px}.hl-zoom{min-width:46px;text-align:center;font-size:12.5px;color:var(--fg-dim);font-variant-numeric:tabular-nums}.hl-main{flex:1;min-height:0;position:relative;display:flex;overflow:hidden;overflow:clip}.hl-stage{flex:1;min-width:0;position:relative;overflow:hidden;background:#181817;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}.hl-stage.is-dragging{cursor:grabbing}.hl-canvas{--paper: #242422;--ink: #eeeeea;--ink-muted: #b6b6b0;--ink-faint: #86867f;--card: #2d2d2b;--card-line: #4b4b46;--panel: #333331;--band: #4e4e49;--band-line: #6a6a64;--hl-display: "Titillium Web", "Roboto Condensed", sans-serif;--hl-body: "Roboto Condensed", "Arial Narrow", sans-serif;position:absolute;left:0;top:0;width:max-content;transform-origin:0 0;padding:44px 48px 48px;background:var(--paper);color:var(--ink);font-family:var(--hl-body);font-size:12.5px;line-height:1.3;opacity:0;will-change:transform}.hl-canvas.is-ready{opacity:1}.hl-canvas.is-animating{transition:transform .3s var(--ease)}.hl-canvas i,.hl-canvas em{font-style:normal}.hl-defs{position:absolute;width:0;height:0;overflow:hidden}.hl-tier{display:flex;gap:24px;align-items:stretch}.hl-tier-edge{contain:inline-size;margin-bottom:112px}.hl-tier-fabric{contain:inline-size;margin-bottom:160px;align-items:flex-start}.hl-tier-floor{align-items:flex-start}.hl-box{position:relative;min-width:0;display:flex;flex-direction:column;border:2px dashed color-mix(in srgb,var(--vc) 72%,var(--paper));border-radius:12px;background:repeating-linear-gradient(135deg,transparent 0 14px,rgb(255 255 255 / .018) 14px 28px),color-mix(in srgb,var(--vc) 6%,var(--paper));transition:box-shadow .15s ease}.hl-box-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 14px;padding:8px 18px 2px;cursor:pointer;outline:none}.hl-box-head.is-static{cursor:default}.hl-box-head:focus-visible{box-shadow:inset 0 0 0 2px var(--ink);border-radius:10px}.hl-box-title{font-family:var(--hl-display);font-style:italic;font-weight:300;font-size:26px;line-height:1.25;color:#c4c4be}.hl-box-badge{font-size:13px;color:var(--ink-faint)}.hl-box-body{flex:1;padding:10px 18px 18px}.hl-box-hint{margin:-4px 0 12px;font-size:12.5px;color:var(--ink-faint)}.hl-box-cloud{flex:1}.hl-cards{display:grid;grid-template-columns:repeat(var(--n, 1),minmax(0,1fr));gap:12px;align-items:start}.hl-box-internet{flex:0 0 560px}.hl-internet{display:flex;flex-direction:column;gap:18px}.hl-wans{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:start}.hl-cloud{align-self:center;width:260px;height:auto;margin:4px 0 8px;overflow:visible}.hl-cloud path{fill:#2e2e2b;stroke:var(--vc);stroke-width:6;stroke-linejoin:round}.hl-cloud text{font-family:var(--hl-display);font-style:italic;font-weight:400;font-size:34px;fill:var(--ink)}.hl-box-unifi{flex:1}.hl-fabric{display:flex;align-items:flex-start;justify-content:space-between;gap:64px;padding-top:40px}.hl-fabric .hl-card{width:min-content;min-width:250px}.hl-fabric .hl-card:has(>.hl-chips){width:390px}.hl-box-clients{flex:none}.hl-ws-list{display:grid;grid-template-columns:repeat(var(--c, 1),400px);gap:28px 40px;align-items:start}.hl-ws{display:flex;align-items:flex-start;gap:10px}.hl-ws-nic{flex:none;width:60px;display:flex;flex-direction:column;align-items:center;gap:5px;padding-top:4px}.hl-ws .hl-card{flex:1;min-width:0}.hl-card{position:relative;display:flex;flex-direction:column;gap:9px;padding:10px 12px 11px;background:var(--card);border:1.5px solid var(--card-line);border-radius:7px;cursor:pointer;outline:none;transition:opacity .15s ease,box-shadow .15s ease}.hl-card:hover{border-color:#6d6d66}.hl-card:focus-visible{box-shadow:0 0 0 2px var(--ink)}.hl-card.k-net{background:#333330;border-color:#5c5c56}.hl-card-head{display:flex;align-items:flex-start;gap:10px;min-width:0}.hl-card-text{min-width:0;display:flex;flex-direction:column;gap:2px}.hl-card-name{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;line-height:1.2}.hl-card-name>i{font-family:var(--hl-display);font-style:italic;font-weight:700;font-size:16.5px;color:#f4f4f0;overflow-wrap:anywhere}.hl-card-sub{font-size:12.5px;line-height:1.3;color:var(--ink-muted);overflow-wrap:anywhere}.hl-ip{font-weight:700;font-size:13px;color:var(--vc);white-space:nowrap}.hl-chips{display:flex;flex-wrap:wrap;gap:5px}.hl-chip{display:inline-flex;align-items:center;gap:5px;padding:2px 7px 2px 3px;font-size:12px;line-height:18px;color:#d8d8d2;background:#252523;border:1px solid #4a4a45;border-radius:4px;white-space:nowrap}.hl-logo{display:block;flex:none;object-fit:contain}img.hl-logo.is-dark{background:#ececea;border-radius:4px;padding:2px}.hl-logo-glyph{display:inline-flex;align-items:center;justify-content:center;color:#dcdcd6;background:#41413d;border:1px solid #5c5c56;border-radius:4px}.hl-logo-text{font-size:8px;font-weight:700;letter-spacing:-.2px}.hl-vlan{display:inline-flex;align-items:center;padding:0 6px;font-size:11px;font-weight:700;line-height:17px;color:var(--vc);background:color-mix(in srgb,var(--vc) 14%,transparent);border:1px solid color-mix(in srgb,var(--vc) 65%,transparent);border-radius:3px;white-space:nowrap}.hl-vlan.is-button{font:inherit;font-size:12px;font-weight:600;line-height:20px;padding:0 8px;cursor:pointer}.hl-tagpill{display:inline-flex;align-items:center;gap:4px;padding:1px 3px 1px 7px;font-size:11.5px;font-weight:700;color:var(--ink);background:#2b2b29;border:1.5px solid #6a6a64;border-radius:4px}.hl-tagpill b{padding:0 5px;color:#1f1f1d;background:#c1df11;border-radius:2px}.hl-ports{display:flex;align-items:flex-end;gap:3px;width:max-content;padding:5px 7px 3px;background:#1f1f1e;border:1.5px solid #5a5a54;border-radius:5px}.hl-ports-gap{width:8px}.hl-port{display:inline-flex;flex-direction:column;align-items:center;gap:1px;min-width:22px;color:#8f8f89}.hl-jack{display:block;width:20px;height:18px}.hl-port.is-sfp .hl-jack{width:26px}.hl-port-lbl{font-size:9px;font-weight:700;line-height:1;white-space:nowrap}.hl-port.is-live{color:var(--jc)}.hl-port.is-wifi svg{width:20px;height:18px}.hl-nodes{display:flex;gap:40px;align-items:flex-start}.hl-node{flex:none;width:calc(var(--cols) * 328px + 52px);display:flex;flex-direction:column;align-items:center}.hl-nic{display:flex;align-items:flex-end;gap:8px;padding:5px 8px;margin-bottom:-2px;position:relative;z-index:1;background:#3a3a37;border:2px solid #5f5f59;border-bottom:0;border-radius:7px 7px 0 0}.hl-node-box{align-self:stretch;padding:0 22px 18px;border:2px dashed var(--nc);border-radius:12px;background:color-mix(in srgb,var(--nc) 8%,var(--paper));transition:box-shadow .15s ease}.hl-band{display:flex;align-items:center;gap:12px;margin:12px 0 10px;padding:7px 12px 7px 14px;background:var(--band);border:2px solid var(--band-line);border-radius:7px;cursor:pointer;outline:none;contain:inline-size}.hl-band:focus-visible{box-shadow:0 0 0 2px var(--ink)}.hl-band-text{flex:1;min-width:0;display:flex;flex-direction:column}.hl-band-name{font-family:var(--hl-display);font-size:27px;font-weight:400;line-height:1.1;color:#aeaea8;white-space:nowrap}.hl-band-name>i{font-weight:700;font-style:italic;color:color-mix(in srgb,var(--nc) 72%,#fff)}.hl-band-ip{font-size:13px;font-weight:700;color:#e5e5e1}.hl-node-box>.hl-chips{contain:inline-size;margin-bottom:2px}.hl-hw{contain:inline-size;display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:5px 22px;margin-bottom:10px;padding:9px 12px 10px;background:#1f1f1e;border:1.5px solid #4a4a45;border-radius:6px}.hl-hw-model{grid-column:1 / -1;font-family:var(--hl-display);font-size:14px;font-weight:600;color:#cfcfc9}.hl-hw-row{display:flex;align-items:baseline;flex-wrap:wrap;gap:0 8px;min-width:0;padding-left:23px;position:relative;font-size:13px;line-height:1.35}.hl-hw-icon{position:absolute;left:0;top:1px;display:flex;color:var(--nc, var(--vc, #b4b4ae))}.hl-hw-icon svg{width:15px;height:15px;stroke-width:1.9}.hl-hw-main{font-weight:700;color:#ecece7}.hl-hw-sub{color:var(--ink-muted)}.hl-hw.is-compact{grid-template-columns:1fr;gap:3px;margin-bottom:0;padding:7px 10px 8px}.hl-hw.is-compact .hl-hw-row{font-size:12.5px}.hl-hw.is-compact .hl-hw-model{font-size:13px}.hl-node-secs{display:flex;flex-wrap:wrap;align-items:flex-start;gap:0 18px}.hl-node-sec h4{margin:12px 0 6px 4px;font-family:var(--hl-display);font-style:italic;font-weight:300;font-size:21px;line-height:1.2;color:#b4b4ae}.hl-node-empty{margin:12px 4px 4px;font-family:var(--hl-display);font-style:italic;font-weight:300;font-size:18px;color:var(--ink-faint)}.hl-guests{display:grid;grid-template-columns:repeat(var(--c, 1),300px);gap:28px;align-items:start;padding:14px;background:var(--panel);border:2px solid #4a4a45;border-radius:9px}.hl-guest{display:flex;flex-direction:column;gap:8px;padding:9px 10px 10px;background:#292927;border:1px solid #47473f;border-left:3px solid var(--vc);border-radius:6px;cursor:pointer;outline:none;transition:opacity .15s ease,box-shadow .15s ease}.hl-guest:hover{border-color:#6d6d66;border-left-color:var(--vc)}.hl-guest:focus-visible{box-shadow:0 0 0 2px var(--ink)}.hl-guest-head{display:flex;align-items:flex-start;gap:9px}.hl-guest-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.hl-guest-name{display:flex;flex-wrap:wrap;align-items:baseline;gap:1px 7px;line-height:1.2}.hl-guest-name>i{font-family:var(--hl-display);font-style:italic;font-weight:700;font-size:16.5px;color:#f4f4f0;overflow-wrap:anywhere}.hl-guest-sub{font-size:12.5px;color:var(--ink-muted)}.hl-stack{padding:5px 8px 8px;background:#313130;border:1px solid #45453f;border-radius:6px}.hl-stack.is-docker{background:#0c1826;border:1.5px dashed #1f8fd6}.hl-stack h5{display:flex;align-items:center;gap:6px;margin:0 0 7px;padding-bottom:4px;font-family:var(--hl-display);font-style:italic;font-weight:400;font-size:14.5px;color:#a9a9a3;border-bottom:1.5px dashed #4f4f49}.hl-stack.is-docker h5{color:#7cc6f2;border-bottom-color:#1d5b87}.hl-svcs{display:grid;grid-template-columns:repeat(var(--sc, 1),minmax(0,1fr));gap:7px 10px}.hl-svc{display:flex;align-items:center;gap:7px;min-width:0}.hl-svc-text{min-width:0;display:flex;flex-direction:column}.hl-svc b{font-size:12.5px;font-weight:700;line-height:1.2;color:#efefeb;overflow-wrap:anywhere}.hl-svc small{font-size:11px;line-height:1.25;color:var(--ink-faint);overflow-wrap:anywhere}.hl-agents{display:flex;flex-wrap:wrap;gap:4px}.hl-agents .hl-chip{font-size:11px;line-height:16px;color:#bdbdb7}.hl-side{flex:none;width:600px;display:flex;flex-direction:column;gap:24px}.hl-zones{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:start}.hl-zone{padding:6px 10px 9px;border:2px dashed var(--zc);border-radius:9px;background:color-mix(in srgb,var(--zc) 9%,var(--paper))}.hl-zone.is-wide{grid-column:1 / -1}.hl-zone h5{margin:0 0 5px;font-family:var(--hl-display);font-style:italic;font-weight:400;font-size:17px;color:var(--ink)}.hl-zone-nets{display:grid;gap:2px 14px}.hl-zone.is-wide .hl-zone-nets{grid-template-columns:repeat(2,minmax(0,1fr))}.hl-net{display:grid;grid-template-columns:10px auto minmax(0,1fr) auto;align-items:baseline;gap:6px;width:100%;padding:2px 4px;font:inherit;font-size:12.5px;line-height:1.35;text-align:left;color:var(--ink);background:none;border:0;border-radius:4px;transition:opacity .15s ease}.hl-net.has-vlan{cursor:pointer}.hl-net.has-vlan:hover,.hl-net.is-hl{background:color-mix(in srgb,var(--vc) 16%,transparent)}.hl-net-dot{width:10px;height:10px;border-radius:50%;background:var(--vc);align-self:center}.hl-net b{font-weight:700;color:var(--vc);white-space:nowrap}.hl-net span{color:var(--ink);overflow-wrap:anywhere}.hl-net i{color:var(--ink-muted);white-space:nowrap}.hl-net em{font-weight:700;color:var(--vc)}.hl-wires{position:absolute;left:0;top:0;pointer-events:none;overflow:visible}.hl-cable path{fill:none;stroke-linecap:round;stroke-linejoin:round}.hl-cable path.halo{stroke:var(--paper);stroke-width:6;opacity:.85}.hl-cable path.line{stroke-width:2.5}.hl-cable.is-wifi path.line{stroke-width:2;stroke-dasharray:2 5}.hl-flow path{fill:none;stroke-linejoin:round}.hl-flow path.halo{stroke:var(--paper);stroke-width:6;opacity:.8}.hl-flow path.line{stroke-width:2.2;stroke-dasharray:7 6;animation:hl-march 1.1s linear infinite}.hl-flow.is-hl path.line{stroke-width:3.2}@keyframes hl-march{to{stroke-dashoffset:-13}}@media(prefers-reduced-motion:reduce){.hl-flow path.line{animation:none}}.hl-lbl rect{fill:var(--paper);stroke-width:1.5}.hl-lbl text{font-family:var(--hl-body);font-size:12px;font-weight:700}.hl-tag text{font-family:var(--hl-body);font-size:10.5px;font-weight:700;fill:#1c1c1a}.hl-canvas.is-focus .hl-card:not(.is-hl),.hl-canvas.is-focus .hl-guest:not(.is-hl){opacity:.25}.hl-canvas.is-focus .hl-node:not(.is-hl)>.hl-node-box>.hl-band,.hl-canvas.is-focus .hl-node:not(.is-hl) .hl-node-sec>h4,.hl-canvas.is-focus .hl-box:not(.is-hl)>.hl-box-head{opacity:.5}.hl-canvas.is-focus .hl-flow:not(.is-hl),.hl-canvas.is-focus .hl-flow-label:not(.is-hl){opacity:.12}.hl-canvas.is-focus .hl-net:not(.is-hl){opacity:.45}.hl-card.is-hl,.hl-guest.is-hl{box-shadow:0 0 0 2px var(--ink)}.hl-card.is-pinned,.hl-guest.is-pinned{box-shadow:0 0 0 3px var(--ink)}.hl-node.is-hl>.hl-node-box{box-shadow:0 0 0 3px color-mix(in srgb,var(--nc) 70%,#fff)}.hl-box.is-hl{box-shadow:0 0 0 3px color-mix(in srgb,var(--vc) 80%,#fff)}.hl-panel{position:absolute;top:0;right:0;bottom:0;z-index:5;width:400px;max-width:92%;overflow:auto;overscroll-behavior:contain;background:var(--bg);border-left:1px solid var(--hairline);transform:translate(102%);transition:transform .18s var(--ease)}.hl-panel.is-open{transform:none}.hl-panel-inner{padding:16px 18px 28px}.hl-panel-head{display:flex;align-items:flex-start;gap:12px}.hl-panel-head h2{margin:0;font-size:17px;font-weight:600;line-height:1.2;overflow-wrap:anywhere}.hl-panel-kind{margin-top:2px;font-size:12.5px;color:var(--fg-dim)}.hl-panel-logo{flex:none;display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;padding:5px;background:#2a2a28;border:1px solid var(--hairline)}.hl-panel-logo img.hl-logo.is-dark{padding:1px}.hl-panel-logo.is-small{width:24px;height:24px;padding:3px}.hl-panel-swatch{flex:none;width:14px;height:38px}.hl-panel-close{margin-left:auto;padding:0}.hl-panel h3{margin:18px 0 8px;font-size:12px;font-weight:600;color:var(--fg-dim)}.hl-panel ul{margin:0;padding-left:18px;font-size:13.5px;line-height:1.5;color:var(--fg-muted)}.hl-panel li{margin:4px 0}.hl-panel-p{margin:12px 0 0;font-size:13.5px;line-height:1.6;color:var(--fg-muted)}.hl-panel-svc{display:grid;grid-template-columns:24px minmax(0,1fr) auto;gap:6px 10px;align-items:center;font-size:13px;color:var(--fg)}.hl-panel-svc-name{min-width:0;overflow-wrap:anywhere}.hl-panel-svc-name small{display:block;font-size:11.5px;color:var(--fg-dim)}.hl-panel-svc-ver{font-size:12px;color:var(--fg-dim);text-align:right;white-space:nowrap}.hl-flowrow{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:6px 0;font-size:13px;color:var(--fg)}.hl-flowrow i{width:14px;border-top:2px solid}.hl-dim{color:var(--fg-dim)}.hl-links{display:flex;flex-wrap:wrap;gap:5px}.hl-link{padding:3px 9px;font:inherit;font-size:12.5px;color:var(--fg);background:var(--pill-bg);border:1px solid var(--hairline);cursor:pointer}.hl-link:hover{border-color:var(--fg)}.hl-rel{margin:8px 0}.hl-rel-label{margin-bottom:4px;font-size:12.5px;color:var(--fg-dim)}.hl-legend{flex:none;display:flex;flex-wrap:wrap;align-items:center;gap:6px 24px;padding:8px var(--gutter);border-top:1px solid var(--hairline-soft);font-size:12px;color:var(--fg-dim)}.hl-legend-group{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px}.hl-legend-item{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.hl-stripe-sw{width:14px;height:4px}.hl-wire-sw{width:18px;border-top:3px solid #e6e6e2}.hl-wire-sw.is-vlan{border-top-color:#25cdf8}.hl-wire-sw.is-wifi{border-top-style:dotted;border-top-color:#25cdf8}.hl-legend-hint{color:var(--fg-faint)}.hl-cat{display:inline-flex;align-items:center;gap:6px;padding:3px 8px;font:inherit;font-size:12px;color:var(--fg-dim);background:var(--bg-raised);border:1px solid var(--hairline);cursor:pointer;white-space:nowrap}.hl-cat:hover{color:var(--fg)}.hl-cat[aria-pressed=true]{color:var(--fg);border-color:var(--fg)}.hl-cat i{width:18px;border-top:2px dashed}
