.app{display:grid;grid-template-columns:1fr 340px;height:100vh}@media(max-width:800px){.app{grid-template-columns:1fr;grid-template-rows:55vh 1fr;height:auto;min-height:100vh}}.map-panel{position:relative;background:var(--background-color);border-right:1px solid var(--line);box-shadow:inset 0 0 60px rgba(var(--primary-rgb),.06);overflow:hidden}.placeholder{position:absolute;top:24px;right:24px;bottom:24px;left:24px;display:flex;align-items:center;justify-content:center;background:var(--panel);border:1px solid rgba(var(--primary-rgb),.4);border-radius:4px;color:var(--text-dim);font-family:var(--mono);font-size:12px;letter-spacing:2px;text-transform:uppercase}.floorplan-stage{position:absolute;top:24px;right:24px;bottom:24px;left:24px}.floorplan-stage svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.leak-fab{position:fixed;right:20px;bottom:20px;z-index:30;width:60px;height:60px;display:flex;align-items:center;justify-content:center;transition:transform .2s ease,opacity var(--reveal-duration) ease;opacity:0;pointer-events:none}.leak-fab.is-visible{opacity:1;pointer-events:auto}.leak-fab img{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 0 6px rgba(var(--primary-rgb),.85)) drop-shadow(0 0 14px rgba(var(--primary-rgb),.45));transition:filter .2s ease}.leak-fab:hover img,.leak-fab:focus-visible img{filter:drop-shadow(0 0 9px rgba(var(--primary-rgb),1)) drop-shadow(0 0 20px rgba(var(--primary-rgb),.65))}.leak-fab:hover,.leak-fab:focus-visible{transform:scale(1.06)}.leak-fab:focus-visible{outline:2px solid var(--accent-color);outline-offset:3px}.sidebar{background:var(--panel);border-left:1px solid var(--line);box-shadow:inset 0 0 60px rgba(var(--primary-rgb),.06);display:flex;flex-direction:column;overflow:hidden}.sidebar-head{padding:16px 18px;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:12px;letter-spacing:2px;color:var(--primary-color);text-shadow:0 0 10px rgba(var(--primary-rgb),.6);text-transform:uppercase}.directory{list-style:none;margin:0;padding:8px;overflow-y:auto;flex:1}.directory li{padding:9px 10px;border-radius:4px;cursor:pointer;font-size:13.5px;border:1px solid transparent;font-family:var(--sans);color:var(--text);opacity:0;transform:translateY(6px)}.directory.is-revealed li{opacity:1;transform:translateY(0);transition:opacity var(--reveal-duration) ease,transform var(--reveal-duration) ease}.directory li:hover,.directory li.is-hover{background:var(--panel-raised)}.directory li.is-selected{background:var(--panel-raised);border-color:var(--accent-color)}.directory-layer{display:none}.directory-layer.is-active{display:inline}.unit{cursor:pointer;outline:none;opacity:0;transform:var(--start-transform, none)}.directory-layer.is-revealed .unit{opacity:1;transform:var(--end-transform, none);transition:opacity var(--reveal-duration) ease,transform var(--reveal-duration) ease;transition-delay:calc(var(--i, 0) * var(--stagger-step))}.zone-fill{fill:var(--zone-fill, #fff)}.zone-restricted{fill:url(#hatch-restricted)}.unit path{transition:filter .15s ease}.directory-layer.is-interactive .unit.is-hover path,.directory-layer.is-interactive .unit.is-selected path{filter:drop-shadow(0 0 14px var(--accent-color))}.directory-layer:not(.is-interactive) .unit{pointer-events:none}.unit:focus-visible{outline:2px solid var(--accent-color);outline-offset:4px}.floorplan-stage.is-glitching{animation:glitch-jitter .2s steps(2,end) infinite,glitch-clip .32s steps(1,end) infinite;filter:drop-shadow(2px 1px rgba(255,0,255,.85)) drop-shadow(-2px -1px rgba(0,255,255,.85)) drop-shadow(-1px 0 rgba(255,210,0,.9));will-change:transform,clip-path}@keyframes glitch-jitter{0%{transform:translate(0) skew(0)}15%{transform:translate(-5px,2px) skew(-3deg)}30%{transform:translate(4px,-3px) skew(4deg)}45%{transform:translate(-6px,1px) skew(-2deg)}60%{transform:translate(5px,-2px) skew(3deg)}75%{transform:translate(-3px,3px) skew(-4deg)}90%{transform:translate(4px,-1px) skew(2deg)}to{transform:translate(0) skew(0)}}@keyframes glitch-clip{0%{clip-path:inset(0 0 0 0)}8%{clip-path:polygon(0 8%,100% 8%,100% 18%,0 18%,0 8%,0 34%,100% 34%,100% 40%,0 40%,0 34%,0 61%,100% 61%,100% 72%,0 72%,0 61%,0 85%,100% 85%,100% 92%,0 92%,0 85%)}16%{clip-path:inset(0 0 0 0)}24%{clip-path:polygon(0 2%,100% 2%,100% 10%,0 10%,0 2%,0 28%,100% 28%,100% 33%,0 33%,0 28%,0 50%,100% 50%,100% 63%,0 63%,0 50%,0 77%,100% 77%,100% 80%,0 80%,0 77%)}32%{clip-path:inset(0 0 0 0)}40%{clip-path:polygon(0 15%,100% 15%,100% 20%,0 20%,0 15%,0 45%,100% 45%,100% 55%,0 55%,0 45%,0 68%,100% 68%,100% 74%,0 74%,0 68%,0 90%,100% 90%,100% 97%,0 97%,0 90%)}48%{clip-path:inset(0 0 0 0)}56%{clip-path:polygon(0 5%,100% 5%,100% 12%,0 12%,0 5%,0 24%,100% 24%,100% 36%,0 36%,0 24%,0 58%,100% 58%,100% 66%,0 66%,0 58%,0 80%,100% 80%,100% 88%,0 88%,0 80%)}64%{clip-path:inset(0 0 0 0)}72%{clip-path:polygon(0 10%,100% 10%,100% 16%,0 16%,0 10%,0 38%,100% 38%,100% 48%,0 48%,0 38%,0 55%,100% 55%,100% 60%,0 60%,0 55%,0 82%,100% 82%,100% 95%,0 95%,0 82%)}80%{clip-path:inset(0 0 0 0)}88%{clip-path:polygon(0 3%,100% 3%,100% 8%,0 8%,0 3%,0 30%,100% 30%,100% 42%,0 42%,0 30%,0 65%,100% 65%,100% 70%,0 70%,0 65%,0 88%,100% 88%,100% 98%,0 98%,0 88%)}to{clip-path:inset(0 0 0 0)}}.info-panel-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;opacity:0;pointer-events:none;transition:opacity .2s ease;z-index:90}.info-panel-backdrop.is-open{opacity:1;pointer-events:auto}.info-panel{position:fixed;left:0;right:0;bottom:0;max-height:60vh;overflow-y:auto;background:var(--panel);border-top:1px solid var(--line);border-radius:16px 16px 0 0;box-shadow:0 -8px 40px rgba(var(--primary-rgb),.18);padding:22px 22px calc(20px + env(safe-area-inset-bottom));transform:translateY(100%);transition:transform .25s ease;z-index:100}.info-panel.is-open{transform:translateY(0)}.info-panel-close{position:absolute;top:8px;right:10px;background:none;border:none;color:var(--text-dim);font-size:24px;line-height:1;padding:8px;cursor:pointer}.info-panel-close:hover{color:var(--accent-color)}.info-panel-title{margin:0 28px 4px 0;font-family:var(--sans);font-weight:700;font-size:20px;color:var(--accent-color)}.info-panel-divider{margin:16px 0;border:none;border-top:1px solid var(--line)}.info-panel-subtitle{margin:0 0 12px;font-family:var(--mono);font-size:12.5px;letter-spacing:1px;text-transform:uppercase;color:var(--text-dim)}.info-panel-description{margin:0 0 16px;font-size:14.5px;line-height:1.5;color:var(--text)}.info-panel-link{display:inline-block;font-weight:700;color:var(--primary-color);text-decoration:none;border-bottom:1px solid var(--primary-color)}.info-panel-link:hover{color:var(--accent-color);border-color:var(--accent-color)}@media(min-width:800px){.info-panel{left:auto;right:24px;bottom:24px;width:340px;max-height:70vh;border-radius:12px;border:1px solid var(--line);transform:translateY(16px);opacity:0;transition:transform .25s ease,opacity .25s ease}.info-panel.is-open{transform:translateY(0);opacity:1}}
