/* ROGUE FORGE: volumetric Duel Disk holograms (v2). Loads after duel-md.css.
   Depth = the art stacked at several depths that sway (parallax), feathered edges so the monster floats free,
   a projection cone + spinning emitter ring, scanlines, RGB split and a glitch flicker. Transform/opacity only. */
.holo3d.v2{width:calc(var(--cw) * 1.45);height:calc(var(--cw) * 1.45);bottom:46%;transform-style:preserve-3d;perspective:600px}
.holo3d.v2 .hf{transform-style:preserve-3d;animation:holoFloat 3.2s ease-in-out infinite,holoTurn 7s ease-in-out infinite}
.holo3d.v2 .vol{position:absolute;inset:0;transform-style:preserve-3d}
.holo3d.v2 img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:50% 50% 14% 14% / 40% 40% 14% 14%;
  -webkit-mask-image:radial-gradient(ellipse 58% 62% at 50% 48%,#000 55%,transparent 100%);mask-image:radial-gradient(ellipse 58% 62% at 50% 48%,#000 55%,transparent 100%);animation:none}
.holo3d.v2 .core{opacity:.92;filter:saturate(1.35) brightness(1.15) contrast(1.05) drop-shadow(-2px 0 0 rgba(255,40,80,.55)) drop-shadow(2px 0 0 rgba(40,220,255,.6)) drop-shadow(0 0 14px rgba(120,220,255,.75));animation:holoFlicker 5s steps(1) infinite}
.holo3d.v2 .sl{opacity:calc(.32 - var(--k) * .07);transform:translateZ(calc(var(--k) * -14px)) scale(calc(1 + var(--k) * .035));filter:blur(calc(var(--k) * .6px)) hue-rotate(calc(var(--k) * 12deg)) brightness(1.6);mix-blend-mode:screen}
.holo3d.v2 .scan{border-radius:50% 50% 14% 14% / 40% 40% 14% 14%;-webkit-mask-image:radial-gradient(ellipse 58% 62% at 50% 48%,#000 55%,transparent 100%);mask-image:radial-gradient(ellipse 58% 62% at 50% 48%,#000 55%,transparent 100%)}
.holo3d.v2 .glitch{position:absolute;inset:0;pointer-events:none;background:linear-gradient(transparent 0 42%,rgba(140,230,255,.35) 42% 44%,transparent 44% 70%,rgba(255,80,120,.25) 70% 71%,transparent 71%);mix-blend-mode:screen;opacity:0;animation:glitch 4.2s steps(1) infinite}
.holo3d.v2 .ring{position:absolute;left:50%;bottom:-14%;width:86%;aspect-ratio:1;transform:translateX(-50%) rotateX(78deg);border-radius:50%;
  background:conic-gradient(from 0deg,rgba(120,220,255,.0),rgba(120,220,255,.85),rgba(120,220,255,0) 30%,rgba(120,220,255,.6) 55%,rgba(120,220,255,0) 70%,rgba(120,220,255,.8));
  -webkit-mask:radial-gradient(circle,transparent 58%,#000 60%,#000 70%,transparent 72%);mask:radial-gradient(circle,transparent 58%,#000 60%,#000 70%,transparent 72%);animation:ringSpin 3s linear infinite}
.holo3d.v2 .cone{position:absolute;left:12%;right:12%;bottom:-6%;height:96%;pointer-events:none;
  background:linear-gradient(0deg,rgba(130,220,255,.42),rgba(130,220,255,.08) 70%,transparent);clip-path:polygon(38% 100%,62% 100%,100% 0,0 0);filter:blur(4px);mix-blend-mode:screen;opacity:.75;animation:conePulse 2.4s ease-in-out infinite}
.holo3d.v2.opp .ring{background:conic-gradient(from 0deg,rgba(255,110,120,0),rgba(255,110,120,.85),rgba(255,110,120,0) 30%,rgba(255,110,120,.6) 55%,rgba(255,110,120,0) 70%,rgba(255,110,120,.8))}
.holo3d.v2.opp .cone{background:linear-gradient(0deg,rgba(255,120,130,.42),rgba(255,120,130,.08) 70%,transparent)}
.holo3d.v2.opp .core{filter:saturate(1.35) brightness(1.12) drop-shadow(-2px 0 0 rgba(255,40,80,.6)) drop-shadow(2px 0 0 rgba(255,180,80,.5)) drop-shadow(0 0 14px rgba(255,110,120,.75))}
.holo3d.v2.hdef .hf{transform:scale(.72);animation:none}
.holo3d.v2.hdef .core{filter:hue-rotate(160deg) saturate(.8) brightness(1.1) drop-shadow(0 0 12px rgba(120,160,255,.7))}
.holo3d.v2.fresh .hf{animation:materialize2 1.1s .35s cubic-bezier(.2,1.2,.4,1) both,holoFloat 3.2s 1.5s ease-in-out infinite,holoTurn 7s 1.5s ease-in-out infinite}
.holo3d.v2.fresh .cone{animation:coneIn 1s .2s ease-out both,conePulse 2.4s 1.2s ease-in-out infinite}
.holo3d.v2.fresh .ring{animation:ringIn .6s ease-out both,ringSpin 3s .6s linear infinite}
@keyframes holoTurn{0%,100%{transform:rotateY(-14deg)}50%{transform:rotateY(14deg)}}
@keyframes ringSpin{to{transform:translateX(-50%) rotateX(78deg) rotate(360deg)}}
@keyframes conePulse{50%{opacity:.5}}
@keyframes coneIn{from{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:.75}}
@keyframes ringIn{from{transform:translateX(-50%) rotateX(78deg) scale(0);opacity:0}to{transform:translateX(-50%) rotateX(78deg) scale(1);opacity:1}}
@keyframes glitch{0%,100%{opacity:0;transform:none}61%{opacity:.9;transform:translateX(3px)}62%{opacity:0;transform:none}88%{opacity:.7;transform:translateX(-4px)}89%{opacity:0}}
@keyframes materialize2{0%{transform:translateY(40%) scaleY(0) scaleX(.2);opacity:0;filter:brightness(5)}45%{transform:translateY(-6%) scaleY(1.15) scaleX(.9);opacity:1;filter:brightness(2.2)}70%{transform:scaleX(1.06) scaleY(.96)}100%{transform:none;filter:none}}
/* labelled toggles: impossible to miss */
.acts .tool.lbl{width:auto;padding:0 10px;font:700 11px var(--fm, monospace);letter-spacing:.06em;white-space:nowrap;color:#bfe3ff;border-color:#3a5a8a}
.acts .tool.lbl.off{color:#7d8597;border-color:#2a3042;opacity:.8}
@media (prefers-reduced-motion: reduce){.holo3d.v2 .hf,.holo3d.v2 .ring,.holo3d.v2 .cone,.holo3d.v2 .glitch{animation:none!important}}
/* v2.1: bigger, portrait holograms that read as a monster standing on the field */
.holo3d.v2{width:calc(var(--cw) * 2);height:calc(var(--cw) * 2.5);bottom:40%}
.holo3d.v2 img,.holo3d.v2 .scan{border-radius:12px;-webkit-mask-image:radial-gradient(ellipse 72% 80% at 50% 46%,#000 62%,transparent 100%);mask-image:radial-gradient(ellipse 72% 80% at 50% 46%,#000 62%,transparent 100%)}
.holo3d.v2 .ring{width:70%;bottom:-8%}
.holo3d.v2 .cone{left:18%;right:18%}
