.infinite-canvas-module__QqzwHG__shell{background:var(--background);color:#eeeef0;width:100%;height:100%;font-family:var(--font-geist-sans),sans-serif;flex-direction:column;display:flex;position:relative;overflow:hidden}.infinite-canvas-module__QqzwHG__viewport{touch-action:none;-webkit-user-select:none;user-select:none;contain:strict;isolation:isolate;background:var(--background);position:absolute;inset:0;overflow:hidden;transform:translateZ(0)}.infinite-canvas-module__QqzwHG__world{transform-origin:0 0;opacity:0;position:absolute;top:0;left:0}.infinite-canvas-module__QqzwHG__footer{z-index:10;pointer-events:none;justify-content:flex-end;align-items:center;gap:15px;padding:15px 32px 23px;display:flex;position:absolute;bottom:0;left:0;right:0}.infinite-canvas-module__QqzwHG__tools{background:var(--background);pointer-events:auto;border:1px solid #3b3b42;border-radius:10px;align-items:center;gap:4px;padding:5px;display:flex}.infinite-canvas-module__QqzwHG__tools button{color:#dedde5;cursor:pointer;background:0 0;border:0;border-radius:6px;min-width:32px;height:32px;font-size:19px}.infinite-canvas-module__QqzwHG__tools button:hover{background:#ffffff0d}.infinite-canvas-module__QqzwHG__tools>span{text-align:center;font-variant-numeric:tabular-nums;color:#aaaab5;width:46px;font-size:10px}.infinite-canvas-module__QqzwHG__tools i{background:#ffffff15;width:1px;height:18px;margin:0 5px}.infinite-canvas-module__QqzwHG__tools .infinite-canvas-module__QqzwHG__fit{padding:0 10px;font-size:10px}.infinite-canvas-module__QqzwHG__fit span{margin-left:12px}.infinite-canvas-module__QqzwHG__tools .infinite-canvas-module__QqzwHG__fullscreen{place-items:center;display:grid}.infinite-canvas-module__QqzwHG__shell button:focus-visible,.infinite-canvas-module__QqzwHG__shell a:focus-visible,.infinite-canvas-module__QqzwHG__viewport:focus-visible{outline-offset:3px;outline:2px solid #c5adeb}@media (max-width:700px){.infinite-canvas-module__QqzwHG__footer{justify-content:center;padding:10px 14px 18px}}:root.light-theme .infinite-canvas-module__QqzwHG__shell{color:#17181b}:root.light-theme .infinite-canvas-module__QqzwHG__tools{border-color:#00000018}:root.light-theme .infinite-canvas-module__QqzwHG__tools button{color:#26262b}:root.light-theme .infinite-canvas-module__QqzwHG__tools button:hover{background:#0000000d}:root.light-theme .infinite-canvas-module__QqzwHG__tools>span{color:#6d6d78}:root.light-theme .infinite-canvas-module__QqzwHG__tools i{background:#00000015}:root.light-theme .infinite-canvas-module__QqzwHG__shell button:focus-visible{outline-color:#8b6fc9}:root.light-theme .infinite-canvas-module__QqzwHG__shell a:focus-visible{outline-color:#8b6fc9}:root.light-theme .infinite-canvas-module__QqzwHG__viewport:focus-visible{outline-color:#8b6fc9}
.homelab-module__9Xrq2W__shell{--primary:#eeeef0;background:var(--background);color:#eeeef0;width:100%;height:100%;font-family:var(--font-geist-sans),sans-serif;flex-direction:column;display:flex;position:relative;overflow:hidden}.homelab-module__9Xrq2W__navigation{z-index:10;pointer-events:none;justify-content:space-between;align-items:center;gap:20px;min-height:68px;padding:12px 32px;display:flex;position:absolute;top:0;left:0;right:0}.homelab-module__9Xrq2W__tabs{background:var(--background);pointer-events:auto;border:1px solid #ffffff12;border-radius:10px;gap:3px;padding:4px;display:flex}.homelab-module__9Xrq2W__tabs button{color:#95959f;cursor:pointer;white-space:nowrap;background:0 0;border:0;border-radius:6px;padding:8px 15px;font-size:11px}.homelab-module__9Xrq2W__tabs button:hover{background:#ffffff0d}.homelab-module__9Xrq2W__tabs button[aria-pressed=true]{color:#95959f;background:#ffffff0d}.homelab-module__9Xrq2W__zone{pointer-events:none;background:#191a1d;border:1px solid #38393e;border-radius:18px;padding:23px 25px;position:absolute}.homelab-module__9Xrq2W__zoneLabel{letter-spacing:1.4px;color:#8b8b96;font-size:11px}.homelab-module__9Xrq2W__zoneIdentity{align-items:center;gap:11px;margin:7px 0 4px;display:flex}.homelab-module__9Xrq2W__zoneIdentity svg{opacity:.9;flex:none}.homelab-module__9Xrq2W__zone h2{letter-spacing:-.5px;margin:0;font-size:23px;font-weight:550;line-height:1.3}.homelab-module__9Xrq2W__zone p{color:#8f8f99;margin:0;font-size:12px}.homelab-module__9Xrq2W__connections{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.homelab-module__9Xrq2W__card{text-align:left;color:#ededf1;cursor:pointer;background:#24252b;border:1px solid #3a3b43;border-radius:11px;align-items:center;gap:13px;padding:16px;transition:opacity .2s,border-color .2s,background .2s;display:flex;position:absolute;box-shadow:0 3px 8px #0002}.homelab-module__9Xrq2W__card:hover{background:#2c2d35;border-color:#858391}.homelab-module__9Xrq2W__card.homelab-module__9Xrq2W__selected{border-color:#cab5f0;box-shadow:0 0 0 3px #bba0e826}.homelab-module__9Xrq2W__proxyCard{border-color:#5a6778;padding-bottom:30px}.homelab-module__9Xrq2W__icon{background:#18191e;border-radius:9px;flex:none;justify-content:center;align-items:center;width:35px;height:35px;display:flex}.homelab-module__9Xrq2W__icon>span{color:#b9b6c6;font-size:23px}.homelab-module__9Xrq2W__cardText{flex-direction:column;gap:5px;min-width:0;display:flex}.homelab-module__9Xrq2W__cardText strong{letter-spacing:-.3px;white-space:nowrap;font-size:15px;font-weight:550}.homelab-module__9Xrq2W__cardText>span{color:#aaaab7;overflow-wrap:anywhere;font-size:10.5px;line-height:1.45}.homelab-module__9Xrq2W__cardTag{letter-spacing:1.4px;color:#9db4d1;font-size:7px;position:absolute;bottom:9px;left:64px}.homelab-module__9Xrq2W__shell button:focus-visible,.homelab-module__9Xrq2W__shell a:focus-visible{outline-offset:3px;outline:2px solid #c5adeb}@media (max-width:700px){.homelab-module__9Xrq2W__navigation{min-height:60px}.homelab-module__9Xrq2W__tabs{flex-wrap:wrap;justify-content:center}}@media (prefers-reduced-motion:reduce){.homelab-module__9Xrq2W__card{transition:none}}.homelab-module__9Xrq2W__hypervisor{pointer-events:none;background:#bf784607;border:1.5px solid #9b643c;border-radius:24px;padding:27px 30px;position:absolute}.homelab-module__9Xrq2W__hypervisorTitle{align-items:center;gap:13px;display:flex}.homelab-module__9Xrq2W__hypervisorTitle strong{letter-spacing:-.5px;font-size:24px;font-weight:550}.homelab-module__9Xrq2W__hypervisorTitle>span{letter-spacing:1.5px;color:#cf9974;border:1px solid #855d3d;border-radius:5px;margin-left:7px;padding:5px 8px;font-size:9px}.homelab-module__9Xrq2W__vmCount{color:#b39c8a;font-size:12px;position:absolute;top:38px;right:30px}.homelab-module__9Xrq2W__networkClient{background:linear-gradient(135deg,#78cbbb06,#0000 55%),#191a1d;border-color:#35504c}.homelab-module__9Xrq2W__zoneSelect{border-radius:inherit;pointer-events:auto;cursor:pointer;background:0 0;border:0;width:100%;height:100%;padding:0;position:absolute;inset:0}.homelab-module__9Xrq2W__zone:has(.homelab-module__9Xrq2W__zoneSelect:hover){border-color:#71968c}.homelab-module__9Xrq2W__zone[data-destination=true]{border-color:#cab5f0;box-shadow:0 0 0 3px #bba0e826}.homelab-module__9Xrq2W__zone:has(.homelab-module__9Xrq2W__zoneSelect[aria-pressed=true]){border-color:#cab5f0;box-shadow:0 0 0 3px #bba0e826}.homelab-module__9Xrq2W__connectionHit{pointer-events:stroke;cursor:pointer;outline:none}.homelab-module__9Xrq2W__connectionHit:focus{outline:none}.homelab-module__9Xrq2W__connectionHit:hover{stroke:#c5adeb22}.homelab-module__9Xrq2W__connectionHit:focus-visible{stroke:#c5adeb55;stroke-width:8px;outline:none}.homelab-module__9Xrq2W__networkHost{background:linear-gradient(145deg,#78cbbb14,#0000 75%),#191a1d;border-color:#78cbbb99;box-shadow:0 0 0 4px #78cbbb08}.homelab-module__9Xrq2W__hostCaption{color:#99c6ba;letter-spacing:.2px;font-size:10px;position:absolute;bottom:12px;left:25px}.homelab-module__9Xrq2W__siteIndicator{z-index:2;border:3px solid var(--background);pointer-events:auto;cursor:pointer;background:#7e8791;border-radius:50%;width:16px;height:16px;position:absolute;top:0;left:0;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #7e879144}.homelab-module__9Xrq2W__connectionTraffic{animation:1.8s linear infinite homelab-module__9Xrq2W__connectionTraffic}.homelab-module__9Xrq2W__canvasInteracting .homelab-module__9Xrq2W__connections path{animation-play-state:paused}.homelab-module__9Xrq2W__canvasDetailView .homelab-module__9Xrq2W__connections path{animation:none}@media (prefers-reduced-motion:reduce){.homelab-module__9Xrq2W__connectionTraffic{animation:none;display:none}}@keyframes homelab-module__9Xrq2W__connectionTraffic{0%{stroke-dashoffset:0}to{stroke-dashoffset:-90px}}.homelab-module__9Xrq2W__shell svg[data-tech]{opacity:1;background:#181e22;border-radius:3px;box-shadow:0 0 0 4px #181e22}.homelab-module__9Xrq2W__icon:has(svg[data-tech]){background:#181e22}.homelab-module__9Xrq2W__icon svg[data-tech]{box-shadow:none}.homelab-module__9Xrq2W__shell svg[data-tech=github],.homelab-module__9Xrq2W__shell svg[data-tech=wireguard]{background:#e6ebe8;box-shadow:0 0 0 4px #e6ebe8}.homelab-module__9Xrq2W__icon:has(svg[data-tech=github],svg[data-tech=wireguard]){background:#e6ebe8}.homelab-module__9Xrq2W__icon svg[data-tech=github],.homelab-module__9Xrq2W__icon svg[data-tech=wireguard]{box-shadow:none}.homelab-module__9Xrq2W__siteIndicator[data-state=up],.homelab-module__9Xrq2W__siteIndicator[data-state=auth]{background:#63d69a;box-shadow:0 0 0 1px #63d69a55,0 0 12px #63d69a35}.homelab-module__9Xrq2W__siteIndicator[data-state=down]{background:#ed7c7c;box-shadow:0 0 0 1px #ed7c7c55}:root.light-theme .homelab-module__9Xrq2W__shell{color:#17181b}:root.light-theme .homelab-module__9Xrq2W__tabs{border-color:#00000014}:root.light-theme .homelab-module__9Xrq2W__tabs button{color:#6c6c74}:root.light-theme .homelab-module__9Xrq2W__tabs button:hover{background:#0000000d}:root.light-theme .homelab-module__9Xrq2W__tabs button[aria-pressed=true]{color:#6c6c74;background:#0000000d}:root.light-theme .homelab-module__9Xrq2W__zone{background:#f3f3f1;border-color:#00000018}:root.light-theme .homelab-module__9Xrq2W__zoneLabel{color:#6b6b73}:root.light-theme .homelab-module__9Xrq2W__zone p{color:#6f6f78}:root.light-theme .homelab-module__9Xrq2W__card{color:#1c1c20;background:#fff;border-color:#00000020;box-shadow:0 3px 8px #00000010}:root.light-theme .homelab-module__9Xrq2W__card:hover{background:#f7f7f6;border-color:#b7b7bd}:root.light-theme .homelab-module__9Xrq2W__card.homelab-module__9Xrq2W__selected{border-color:#8b6fc9;box-shadow:0 0 0 3px #8b6fc926}:root.light-theme .homelab-module__9Xrq2W__proxyCard{border-color:#5c7186}:root.light-theme .homelab-module__9Xrq2W__icon{background:#eef0f2}:root.light-theme .homelab-module__9Xrq2W__icon>span{color:#6f6b7d}:root.light-theme .homelab-module__9Xrq2W__cardText>span{color:#6d6d78}:root.light-theme .homelab-module__9Xrq2W__cardTag{color:#5f7ea3}:is(:root.light-theme .homelab-module__9Xrq2W__shell button:focus-visible,:root.light-theme .homelab-module__9Xrq2W__shell a:focus-visible){outline-color:#8b6fc9}:root.light-theme .homelab-module__9Xrq2W__hostCaption{color:#2f7566}:root.light-theme .homelab-module__9Xrq2W__networkClient{background:linear-gradient(135deg,#78cbbb10,#0000 55%),#f3f8f6;border-color:#78cbbb55}:root.light-theme .homelab-module__9Xrq2W__networkHost{background:linear-gradient(145deg,#78cbbb1c,#0000 75%),#f0f7f4;border-color:#1f8a7299;box-shadow:0 0 0 4px #78cbbb14}:root.light-theme .homelab-module__9Xrq2W__zone:has(.homelab-module__9Xrq2W__zoneSelect:hover){border-color:#3f8a76}:root.light-theme .homelab-module__9Xrq2W__zone:has(.homelab-module__9Xrq2W__zoneSelect[aria-pressed=true]){border-color:#8b6fc9;box-shadow:0 0 0 3px #8b6fc926}:root.light-theme .homelab-module__9Xrq2W__zone[data-destination=true]{border-color:#8b6fc9;box-shadow:0 0 0 3px #8b6fc926}:root.light-theme .homelab-module__9Xrq2W__siteIndicator{background:#6b7078;box-shadow:0 0 0 1px #6b707844}:is(:root.light-theme .homelab-module__9Xrq2W__siteIndicator[data-state=up],:root.light-theme .homelab-module__9Xrq2W__siteIndicator[data-state=auth]){background:#1f9d68;box-shadow:0 0 0 1px #1f9d6855,0 0 10px #1f9d6830}:root.light-theme .homelab-module__9Xrq2W__siteIndicator[data-state=down]{background:#d64545;box-shadow:0 0 0 1px #d6454555}:root.light-theme .homelab-module__9Xrq2W__shell svg[data-tech]{background:#eef0f2;box-shadow:0 0 0 4px #eef0f2}:root.light-theme .homelab-module__9Xrq2W__icon:has(svg[data-tech]){background:#eef0f2}:is(:root.light-theme .homelab-module__9Xrq2W__shell svg[data-tech=github],:root.light-theme .homelab-module__9Xrq2W__shell svg[data-tech=wireguard]){background:#e3e7e4;box-shadow:0 0 0 4px #e3e7e4}:root.light-theme .homelab-module__9Xrq2W__icon:has(svg[data-tech=github],svg[data-tech=wireguard]){background:#e3e7e4}:root.light-theme .homelab-module__9Xrq2W__hypervisor{background:#f2a15f0d;border-color:#b9803f}:root.light-theme .homelab-module__9Xrq2W__hypervisorTitle>span{color:#8a5a2d;border-color:#d9a066}:root.light-theme .homelab-module__9Xrq2W__vmCount{color:#7a5f47}@media (max-width:700px),(max-width:1000px) and (pointer:coarse){.homelab-module__9Xrq2W__navigation{flex-wrap:wrap;gap:20px;padding:12px 14px}.homelab-module__9Xrq2W__tabs{grid-template-columns:minmax(0,.8fr) minmax(0,.8fr) minmax(0,1.5fr) minmax(0,1.2fr) minmax(0,1.2fr);gap:2px;width:100%;display:grid}.homelab-module__9Xrq2W__tabs button{min-width:0;padding:8px 2px;font-size:clamp(9px,2.65vw,11px)}}
.photo-canvas-module__bSyfJG__photo{background:var(--background);cursor:pointer;border:0;border-radius:12px;padding:0;display:block;position:absolute;box-shadow:0 8px 32px #0002}.photo-canvas-module__bSyfJG__photoImage{object-fit:contain;border-radius:inherit;pointer-events:none;width:100%;max-width:none;height:100%;display:block}.photo-canvas-module__bSyfJG__empty{border:1px dashed var(--border);background:var(--background);text-align:center;border-radius:16px;flex-direction:column;justify-content:center;align-items:center;gap:12px;width:400px;height:220px;display:flex}.photo-canvas-module__bSyfJG__empty svg{color:var(--secondary)}.photo-canvas-module__bSyfJG__empty strong{font-size:16px;font-weight:500}.photo-canvas-module__bSyfJG__empty p{color:var(--secondary);font-size:12px}.photo-canvas-module__bSyfJG__empty span{color:var(--secondary);font-size:10px}
.project-dialog-module__mVF3vW__dialog{border:1px solid var(--border);background:var(--background);width:calc(100% - 32px);max-width:none;height:calc(100dvh - 32px);max-height:none;color:var(--primary);border-radius:20px;margin:auto;padding:0;overflow:hidden;box-shadow:0 32px 120px #0006}.project-dialog-module__mVF3vW__dialog[open]{flex-direction:column;animation:.2s cubic-bezier(.22,1,.36,1) project-dialog-module__mVF3vW__dialog-enter;display:flex}.project-dialog-module__mVF3vW__dialog::backdrop{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#000a}@keyframes project-dialog-module__mVF3vW__dialog-enter{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}.project-dialog-module__mVF3vW__header{border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;display:flex}.project-dialog-module__mVF3vW__header h2{letter-spacing:-.01em;font-size:14px;font-weight:600;line-height:24px}.project-dialog-module__mVF3vW__headerActions{flex:none;align-items:center;gap:10px;display:flex}.project-dialog-module__mVF3vW__body{grid-template-columns:var(--details-w,33%) 9px minmax(0, 1fr);flex:1;min-height:0;display:grid}.project-dialog-module__mVF3vW__details{overscroll-behavior:contain;background:var(--background);padding:26px;overflow-y:auto}.project-dialog-module__mVF3vW__resizer{z-index:1;cursor:col-resize;touch-action:none;position:relative}.project-dialog-module__mVF3vW__resizer:before{content:"";background:var(--border);width:1px;position:absolute;top:0;bottom:0;right:0}.project-dialog-module__mVF3vW__resizer:after{content:"";background:var(--border);border-radius:999px;width:4px;height:36px;transition:background-color .12s,height .12s;position:absolute;top:50%;right:0;transform:translate(50%,-50%)}.project-dialog-module__mVF3vW__resizer:hover:after,.project-dialog-module__mVF3vW__resizer[data-active=true]:after{background:var(--primary);height:48px}.project-dialog-module__mVF3vW__resizer:focus-visible{outline:none}.project-dialog-module__mVF3vW__resizer:focus-visible:after{background:var(--primary)}.project-dialog-module__mVF3vW__details section{margin-top:28px}.project-dialog-module__mVF3vW__details h3{margin-bottom:12px;font-size:13px;font-weight:600}.project-dialog-module__mVF3vW__details p{font-size:13px;line-height:1.8}.project-dialog-module__mVF3vW__details p:not(.project-dialog-module__mVF3vW__intro){opacity:.75}.project-dialog-module__mVF3vW__details .project-dialog-module__mVF3vW__intro{font-size:14px;line-height:24px}.project-dialog-module__mVF3vW__canvasSection{flex-direction:column;min-width:0;min-height:0;display:flex}.project-dialog-module__mVF3vW__canvas{flex:1;min-height:0;position:relative}.project-dialog-module__mVF3vW__projectLink{background:color-mix(in srgb, var(--primary) 5%, transparent);min-height:28px;color:color-mix(in srgb, var(--primary) 80%, transparent);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;gap:6px;padding:4px 10px;font-size:14px;line-height:20px;transition:background-color .15s,color .15s;display:inline-flex}.project-dialog-module__mVF3vW__projectLink:hover{background:color-mix(in srgb, var(--primary) 10%, transparent);color:var(--primary)}.project-dialog-module__mVF3vW__projectLink:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.project-dialog-module__mVF3vW__details:focus-visible{outline:2px solid var(--primary);outline-offset:-3px}@media (max-width:900px){.project-dialog-module__mVF3vW__dialog{border-radius:16px;width:calc(100% - 24px);height:calc(100dvh - 24px)}.project-dialog-module__mVF3vW__body{background:var(--border);flex-direction:column;gap:1px;display:flex;overflow:hidden}.project-dialog-module__mVF3vW__details{overscroll-behavior:contain;flex:1;min-height:0;padding:22px;overflow-y:auto}.project-dialog-module__mVF3vW__resizer{display:none}.project-dialog-module__mVF3vW__canvasSection{flex:none;height:40svh}.project-dialog-module__mVF3vW__header{padding:12px 16px}}@media (max-width:480px){.project-dialog-module__mVF3vW__header{gap:8px;padding-inline:12px}.project-dialog-module__mVF3vW__headerActions{gap:6px}.project-dialog-module__mVF3vW__projectLink{padding-inline:8px}}@media (prefers-reduced-motion:reduce){.project-dialog-module__mVF3vW__dialog[open]{animation:none}}
