/* Both sides share one eight-second cycle, four seconds apart. */
.building .sync-left,.building .sync-right{animation:security-side 8s ease-in-out infinite;opacity:0}
.building .sync-right{animation-delay:-4s}
.building .scan-layer{display:none}
.building .signal-rings .sync-left,.building .signal-rings .sync-right{transform:none;animation-name:security-side;animation-duration:8s;animation-timing-function:ease-in-out;animation-iteration-count:infinite}
.building .signal-rings .sync-left{animation-delay:0s}.building .signal-rings .sync-right{animation-delay:-4s}
.building .signal-rings .entrance-ring{animation:entrance-status 3s ease-out infinite}
.alarm-waves circle{transform-box:fill-box;transform-origin:center;animation:alarm-wave 3s ease-out infinite;opacity:0}
.alarm-waves circle:nth-child(2){animation-delay:-1s}.alarm-waves circle:nth-child(3){animation-delay:-2s}
.alarm-lamp{animation:alarm-lamp 3s ease-in-out infinite}
@keyframes security-side{0%,5%{opacity:0}15%,32%{opacity:.86}45%,100%{opacity:0}}
@keyframes alarm-wave{0%{opacity:.7;transform:scale(.65)}85%,100%{opacity:0;transform:scale(2.9)}}
@keyframes alarm-lamp{0%,100%{opacity:.55}35%,55%{opacity:1}}
@keyframes entrance-status{0%{opacity:.5;transform:scale(.8)}85%,100%{opacity:0;transform:scale(2.8)}}
@media(prefers-reduced-motion:reduce){.building .sync-left,.building .sync-right{animation:none!important;opacity:.25}.alarm-waves,.building .entrance-ring{display:none}.alarm-lamp{animation:none;opacity:1}}

/* A steady pair, never an entire facade or an overlapping random count. */
.building .window-cell{opacity:0;transition:none;animation:none}
.window-cell.is-lit{opacity:.86;animation:window-pair-on .6s ease-in-out both}
.building .perimeter-light>.sync-left,.building .perimeter-light>.sync-right,.building .signal-rings>.sync-left,.building .signal-rings>.sync-right{animation:none;opacity:.12;transition:opacity .6s ease-in-out;transform:none}
.building .perimeter-light>.is-current-side,.building .signal-rings>.is-current-side{opacity:.86}
@keyframes window-pair-on{from{opacity:0}to{opacity:.86}}
@media(prefers-reduced-motion:reduce){.window-cell.is-lit{animation:none}.building .perimeter-light>path,.building .signal-rings>circle{transition:none}}

/* The selected window has its own complete frame; the route stays quiet. */
.building .window-cell.is-lit{stroke:#ee8c55;stroke-width:1.8;stroke-linejoin:round;paint-order:stroke fill;filter:drop-shadow(0 0 2px #ffa56d88)}
.building .perimeter-light>.sync-left,.building .perimeter-light>.sync-right,.building .perimeter-light>.is-current-side{opacity:.23;transition:none}
.building .signal-rings>.sync-left,.building .signal-rings>.sync-right,.building .signal-rings>.is-current-side{opacity:.2;transition:none}
.building .signal-rings .entrance-ring{display:none}
.house-alarm-wave{stroke-width:1.5;vector-effect:non-scaling-stroke;transform-box:view-box;transform-origin:257px 352px;animation:house-protection 6s linear infinite;opacity:0;pointer-events:none}
.house-alarm-wave:nth-child(2){animation-delay:-2s}
.house-alarm-wave:nth-child(3){animation-delay:-4s}
.house-alarm-base{stroke-width:1;opacity:.16;stroke-dasharray:3 8}
@keyframes house-protection{0%{opacity:0;transform:scale(.15)}5%{opacity:.65}65%{opacity:.32}100%{opacity:0;transform:scale(16)}}
@media(prefers-reduced-motion:reduce){.house-alarm-wave{animation:none;opacity:.14}.house-alarm-wave:nth-child(2){display:none}}

/* All three control points emit the same calm, repeating signal. */
.building .signal-rings>circle.entrance-ring,.building .signal-rings>circle.sync-left,.building .signal-rings>circle.sync-right{display:block;opacity:0;transform-box:fill-box;transform-origin:center;animation:control-point-wave 4s ease-out infinite}
.building .signal-rings>circle.sync-left{animation-delay:-1.3s}
.building .signal-rings>circle.sync-right{animation-delay:-2.6s}
@keyframes control-point-wave{0%{opacity:.55;transform:scale(.55)}85%,100%{opacity:0;transform:scale(1.65)}}
@media(prefers-reduced-motion:reduce){.building .signal-rings>circle.entrance-ring,.building .signal-rings>circle.sync-left,.building .signal-rings>circle.sync-right{animation:none;opacity:.2;transform:none}}

.alarm-feed,.alarm-branch{stroke-width:2.5;stroke-dasharray:110 1000;stroke-dashoffset:110;opacity:0;pointer-events:none}
.alarm-feed{animation:alarm-feed 8s linear infinite}
.alarm-branch{animation:alarm-branch 8s linear infinite}
.alarm-origin-ripple{stroke-width:1.5;transform-box:view-box;transform-origin:257px 352px;animation:alarm-source 8s ease-out infinite}
.protection-shell{opacity:0;animation:protection-shell 8s linear infinite}
@keyframes alarm-feed{0%{stroke-dashoffset:110;opacity:0}2%{opacity:.85}18.75%{stroke-dashoffset:-1000;opacity:.85}22%,100%{stroke-dashoffset:-1000;opacity:0}}
@keyframes alarm-branch{0%,18%{stroke-dashoffset:110;opacity:0}20%{opacity:.9}43.75%{stroke-dashoffset:-1000;opacity:.9}47%,100%{stroke-dashoffset:-1000;opacity:0}}
@keyframes alarm-source{0%{transform:scale(.4);opacity:.75}22%,100%{transform:scale(3);opacity:0}}
@keyframes protection-shell{0%,44%{opacity:0}50%{opacity:.28}62%{opacity:.6}80%{opacity:.48}100%{opacity:0}}
@media(prefers-reduced-motion:reduce){.alarm-feed,.alarm-branch,.protection-shell{animation:none;opacity:0}.alarm-origin-ripple{animation:none;transform:none;opacity:.2}}
