/* Dimensional card overlays. Scope deliberately excludes the approved CEO. */
.tile-vector .portfolio-structure {
  filter: drop-shadow(0 12px 10px rgb(0 0 0 / .5));
}
.tile-vector:has(.portfolio-structure)::before {
  background: radial-gradient(ellipse, rgb(5 5 5 / .65), transparent 74%);
  filter: blur(7px);
}
.portfolio-structure .v-glass { fill-opacity: 1; }
.portfolio-structure .v-core { fill-opacity: .65; }
.portfolio-structure .v-float,
.portfolio-structure .v-turn,
.portfolio-structure .v-orbit,
.portfolio-structure .v-shuttle,
.portfolio-structure .v-rise,
.portfolio-structure .v-scan,
.portfolio-structure .v-pulse {
  transform-box: view-box;
  transform-origin: var(--origin, 100px 100px);
  animation-play-state: paused;
}
.tile.is-open .portfolio-structure .v-float { animation: portfolio-float 6s ease-in-out var(--phase, 0s) infinite; }
.tile.is-open .portfolio-structure .v-turn { animation: portfolio-turn 24s linear var(--phase, 0s) infinite; }
.tile.is-open .portfolio-structure .v-orbit { animation: portfolio-orbit 12s linear var(--phase, 0s) infinite; }
.tile.is-open .portfolio-structure .v-shuttle { animation: portfolio-shuttle 5s ease-in-out var(--phase, 0s) infinite; }
.tile.is-open .portfolio-structure .v-rise { animation: portfolio-rise 5.5s ease-in-out var(--phase, 0s) infinite; }
.tile.is-open .portfolio-structure .v-scan { animation: portfolio-scan 6s ease-in-out var(--phase, 0s) infinite; }
.tile.is-open .portfolio-structure .v-pulse { animation: portfolio-pulse 4.5s ease-in-out var(--phase, 0s) infinite; }
.tile.is-open .portfolio-structure .v-flow {
  stroke: var(--white);
  stroke-dasharray: 12 110;
  animation: portfolio-flow 5s linear var(--phase, 0s) infinite;
}
@keyframes portfolio-float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-6px); }
}
@keyframes portfolio-turn { to { transform: rotate(360deg); } }
@keyframes portfolio-orbit { to { transform: rotate(-360deg); } }
@keyframes portfolio-shuttle {
  0%, 100% { transform: translate(0, 0); }
  50% { transform: translate(10px, -5px); }
}
@keyframes portfolio-rise {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
}
@keyframes portfolio-scan {
  0%, 100% { transform: translateY(-9px); opacity: .35; }
  50% { transform: translateY(9px); opacity: .9; }
}
@keyframes portfolio-pulse {
  0%, 100% { opacity: .35; }
  50% { opacity: .95; }
}
@keyframes portfolio-flow { from { stroke-dashoffset: 122; } to { stroke-dashoffset: 0; } }
@media (prefers-reduced-motion: reduce) {
  .tile .portfolio-structure * { animation: none !important; }
}
