/* Micro architecture scenes, scoped to existing service and region components. */
.service-grid > .service-card.ip-service { --ip-accent:#b9da9c; --ip-light:#e0efce; --ip-mid:#759f89; --ip-surface:#233b37; --ip-deep:#112321; gap:23px; }
.service-grid > .service-card.ip-service[data-interface-polish="colocation"] { --ip-accent:#c7d8aa; --ip-light:#e5ead3; --ip-mid:#90a98b; --ip-surface:#2c4038; }
.service-grid > .service-card.ip-service[data-interface-polish="connectivity"] { --ip-accent:#8ccdc9; --ip-light:#d5f4eb; --ip-mid:#6baca8; --ip-surface:#203b40; --ip-deep:#12252e; }
.service-grid > .service-card.ip-service[data-interface-polish="managed"] { --ip-accent:#afc6de; --ip-light:#e0eceb; --ip-mid:#809fa8; --ip-surface:#253a43; --ip-deep:#15252d; }
.service-card.ip-service > .card-top { position:relative; min-height:124px; align-items:flex-start; margin:0; }
.service-card.ip-service > .card-top > svg,
.service-card.ip-service > .card-top > .mono { position:relative; z-index:2; }
.service-card.ip-service > .card-top > svg { color:var(--ip-accent); width:27px; height:27px; }
.service-card.ip-service .ip-scene { position:absolute; left:50%; top:8px; width:190px; height:111px; max-width:100%; translate:-50% 0; pointer-events:none; user-select:none; z-index:1; }
.service-card.ip-service .ip-illustration { width:100%; height:100%; overflow:visible; pointer-events:none; filter:drop-shadow(0 14px 8px #0003); }
.service-card.ip-service .ip-scene-grid { fill:none; stroke:var(--ip-mid); stroke-opacity:.13; stroke-width:.65; }
.service-card.ip-service .ip-platform { fill:var(--ip-deep); stroke:var(--ip-mid); stroke-width:.7; stroke-opacity:.65; }
.service-card.ip-service .ip-platform-edge { fill:#0b171a; stroke:var(--ip-mid); stroke-width:.7; stroke-opacity:.4; }
.service-card.ip-service .ip-object-side,
.service-card.ip-service .ip-node-side { fill:var(--ip-deep); stroke:var(--ip-mid); stroke-width:.85; stroke-linejoin:round; }
.service-card.ip-service .ip-object-face { fill:var(--ip-surface); stroke:var(--ip-accent); stroke-width:.75; stroke-opacity:.8; }
.service-card.ip-service .ip-object-light { fill:var(--ip-mid); fill-opacity:.4; stroke:var(--ip-accent); stroke-width:.65; }
.service-card.ip-service .ip-trace,
.service-card.ip-service .ip-contact { fill:none; stroke:var(--ip-mid); stroke-width:.9; stroke-linecap:round; stroke-opacity:.7; }
.service-card.ip-service .ip-detail { fill:none; stroke:var(--ip-accent); stroke-width:.85; stroke-opacity:.65; stroke-linecap:round; }
.service-card.ip-service .ip-rack-light { fill:none; stroke:var(--ip-light); stroke-width:1.3; stroke-opacity:.75; stroke-linecap:round; }
.service-card.ip-service .ip-network-route { fill:none; stroke:var(--ip-mid); stroke-width:.9; stroke-opacity:.8; }
.service-card.ip-service .ip-orbit { fill:none; stroke:var(--ip-accent); stroke-width:.6; stroke-opacity:.35; stroke-dasharray:2 5; }
.service-card.ip-service .ip-node-face { fill:var(--ip-surface); stroke:var(--ip-accent); stroke-width:.8; }
.service-card.ip-service .ip-core-light { fill:var(--ip-light); stroke:var(--ip-accent); stroke-width:.6; }
.service-card.ip-service .ip-shield-inner { fill:var(--ip-accent); fill-opacity:.06; stroke:var(--ip-accent); stroke-width:.65; stroke-opacity:.55; }
.service-card.ip-service .ip-shield-check { fill:none; stroke:var(--ip-light); stroke-width:2.2; stroke-linecap:round; stroke-linejoin:round; }
.service-card.ip-service .ip-signal { fill:none; stroke:var(--ip-light); stroke-width:1.25; stroke-linecap:round; stroke-opacity:.9; stroke-dasharray:5 72; animation:ip-signal-travel 9s linear var(--ip-phase,0s) infinite; animation-play-state:paused; }
.service-card.ip-service .ip-float { animation:ip-scene-float 8s ease-in-out var(--ip-phase,0s) infinite; animation-play-state:paused; }
.service-card.ip-service .ip-core { transition:transform .65s cubic-bezier(.2,.7,.2,1); }
.service-card.ip-service > .ip-optics { position:absolute; inset:0; overflow:hidden; z-index:1; pointer-events:none; background:radial-gradient(ellipse at 50% 15%,color-mix(in srgb,var(--ip-mid) 8%,transparent),transparent 52%); }
.service-card.ip-service > .ip-optics::before { content:""; position:absolute; bottom:9px; left:9px; width:30px; height:7px; border-left:1px solid var(--ip-mid); border-bottom:1px solid var(--ip-mid); opacity:.45; transition:width .4s,opacity .4s; }
.service-card.ip-service > .ip-optics::after { content:""; position:absolute; right:10px; top:53px; width:3px; height:25px; background:repeating-linear-gradient(0deg,var(--ip-mid) 0 1px,transparent 1px 5px); opacity:.42; transition:opacity .4s; }
.service-card.ip-service.ip-motion-ready .ip-signal,
.service-card.ip-service.ip-motion-ready .ip-float { animation-play-state:running; }
.service-card.ip-service:is(:hover,:focus-visible) .ip-core { transform:translateY(-4px); }
.service-card.ip-service:is(:hover,:focus-visible) > .ip-optics::before { width:52px; opacity:.8; }
.service-card.ip-service:is(:hover,:focus-visible) > .ip-optics::after { opacity:.85; }
/* Region entry surfaces stay behind existing labels, arrows and hit targets. */
.region-row > a.ip-region,
.region-tabs > button.ip-region { position:relative; isolation:isolate; overflow:hidden; }
.ip-region > .ip-region-surface { position:absolute; inset:0; display:block; margin:0; pointer-events:none; overflow:hidden; z-index:0; background:linear-gradient(115deg,transparent 35%,#6d9d8c07); }
.ip-region > .ip-region-surface::before { content:""; position:absolute; inset:7px; border-top:1px solid #a0c9b113; border-right:1px solid #a0c9b119; clip-path:polygon(70% 0,100% 0,100% 72%,calc(100% - 1px) 72%,calc(100% - 1px) 1px,70% 1px); transition:border-color .35s; }
.ip-region > .ip-region-surface::after { content:""; position:absolute; left:0; bottom:0; width:100%; height:1px; opacity:.55; background:linear-gradient(90deg,transparent 15%,#a8cbaa 45%,#e1f4d2 50%,#8dceca 55%,transparent 85%); transform:translateX(-110%); animation:ip-edge-pass 17s linear var(--ip-phase,0s) infinite; animation-play-state:paused; }
.ip-region .ip-region-art { position:absolute; left:auto; top:-32px; right:-28px; bottom:auto; width:142px; height:124px; max-width:none; color:#7cac99; opacity:.21; pointer-events:none; transition:opacity .45s,translate .55s; }
.ip-region .ip-region-orbits { fill:none; stroke:currentColor; stroke-width:.7; }
.ip-region .ip-region-orbits circle { fill:#b7dcc2; stroke:none; }
.region-row > a.ip-region > .mono,
.region-row > a.ip-region > strong,
.region-row > a.ip-region > svg,
.region-tabs > button.ip-region > cms-text,
.region-tabs > button.ip-region > span:not(.ip-region-surface):not(.fx-layer):not(.fx-ripple) { position:relative; z-index:2; }
.region-row > a.ip-region > svg { position:absolute; }
.ip-region.ip-motion-ready > .ip-region-surface::after { animation-play-state:running; }
.ip-region:is(:hover,:focus-visible,[aria-selected="true"]) .ip-region-art { opacity:.44; translate:-5px 3px; }
.ip-region:is(:hover,:focus-visible,[aria-selected="true"]) > .ip-region-surface::before { border-color:#b6d8c05c; }
.ip-region:is(:hover,:focus-visible) > .ip-region-surface::after { opacity:1; }
@keyframes ip-signal-travel { to { stroke-dashoffset:-154; } }
@keyframes ip-scene-float { 0%,100% { transform:translateY(0); } 50% { transform:translateY(-2.5px); } }
@keyframes ip-edge-pass { 0% { transform:translateX(-110%); } 100% { transform:translateX(110%); } }
@media (max-width:680px) {
  .service-grid > .service-card.ip-service { gap:20px; }
  .service-card.ip-service > .card-top { min-height:107px; }
  .service-card.ip-service .ip-scene { top:3px; width:180px; height:104px; }
  .ip-region .ip-region-art { width:115px; height:100px; right:-34px; top:-21px; opacity:.17; }
}
@media (hover:none) {
  .service-card.ip-service .ip-float { animation:none; }
  .service-card.ip-service:is(:hover,:focus-visible) .ip-core { transform:none; }
  .ip-region > .ip-region-surface::after { animation-duration:23s; }
}
@media (prefers-reduced-motion:reduce) {
  .service-card.ip-service .ip-signal,
  .service-card.ip-service .ip-float,
  .ip-region > .ip-region-surface::after { animation:none; }
  .service-card.ip-service .ip-core,
  .service-card.ip-service > .ip-optics::before,
  .service-card.ip-service > .ip-optics::after,
  .ip-region .ip-region-art,
  .ip-region > .ip-region-surface::before { transition:none; }
  .service-card.ip-service:is(:hover,:focus-visible) .ip-core { transform:none; }
}
