/*
  TRAINER FULL ART HOLOGRAPHIC EFFECT
  Extracted and adapted from Pokemon Cards CSS by simeydotme
  https://github.com/simeydotme/pokemon-cards-css
*/

:root {
  /* Card dimensions */
  --card-aspect: auto;
  --card-radius: 8px;
  
  /* Sunpillar gradient colors */
  --sunpillar-1: hsl(2, 100%, 73%);
  --sunpillar-2: hsl(53, 100%, 69%);
  --sunpillar-3: hsl(93, 100%, 69%);
  --sunpillar-4: hsl(176, 100%, 76%);
  --sunpillar-5: hsl(228, 100%, 74%);
  --sunpillar-6: hsl(283, 100%, 73%);
  
  /* Sunpillar color variables for gradients */
  --sunpillar-clr-1: var(--sunpillar-1);
  --sunpillar-clr-2: var(--sunpillar-2);
  --sunpillar-clr-3: var(--sunpillar-3);
  --sunpillar-clr-4: var(--sunpillar-4);
  --sunpillar-clr-5: var(--sunpillar-5);
  --sunpillar-clr-6: var(--sunpillar-6);
  
  /* Real-time control variables */
  --rainbow-intensity: 2.6;
  --rainbow-base: 1.0;
  --saturation: 1.5;
  --contrast: 1.4;
  --scale-intensity: 0.03;
  --shine-opacity: 0.6;
  --glare-opacity: 0.0;
  --shadow-opacity: 0.8;
  --band-speed: 0.3;
  --spotlight-intensity: 0.0;
  --depth-intensity: 0.3;
  --max-rotation: 0.3;
  --rotation-multiplier: 2;
  --show-rainbow: 1;
  --texture-size: 180px;
  --texture-intensity: 0.7;
  --max-brightness: 0.8;
}

/* Container */
.trainer-holo-container {
  perspective: 1000px;
  width: 100%;
  max-width: 1200px;
  margin: 0;
}

/* Main card element */
.trainer-holo {
  position: relative;
  width: 100%;
  aspect-ratio: var(--card-aspect);
  border-radius: var(--card-radius);
  transform-style: preserve-3d;
  transform: translate3d(0px, 0px, 0.01px);
  cursor: pointer;
  
  /* Default interactive variables - start with slight angle */
  --pointer-x: 30%;
  --pointer-y: 40%;
  --card-scale: 1;
  --card-opacity: 0.6;
  --background-x: 30%;
  --background-y: 40%;
  --pointer-from-center: 0.3;
  
  /* Start with slight 3D angle */
  transform: translate3d(0px, -5px, 0.01px) rotateX(5deg) rotateY(-10deg) scale(1.02);
  
  transition: transform 0.1s ease-out;
}

/* Hover state removed - now controlled by JavaScript */

/* Inner wrapper */
.trainer-holo-inner {
  position: relative;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  overflow: hidden;
  transform-style: preserve-3d;
}

/* Card image */
.trainer-holo-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
  display: block;
  transform: translateZ(0.01px);
  position: relative;
  z-index: 1;
}

/* Texture layer - just the foil texture without rainbow */
.trainer-holo-texture {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  pointer-events: none;
  transform: translateZ(0.8px);
  z-index: 10;
  
  /* Mask to image alpha channel */
  mask: url("../images/name_foil.png");
  -webkit-mask: url("../images/name_foil.png");
  mask-size: cover;
  -webkit-mask-size: cover;
  
  background-image: var(--foil-texture, url("../images/trainerbg.png"));
  background-size: var(--texture-size, 200px) var(--texture-size, 200px);
  background-position: center center;
  background-repeat: repeat;
  
  opacity: var(--texture-intensity, 0.8);
  mix-blend-mode: overlay;
  
  transition: opacity 0.1s ease-out, background-size 0.1s ease-out;
}

/* Shine layer - main holographic effect */
.trainer-holo-shine {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  pointer-events: none;
  transform: translateZ(1px);
  z-index: 2;
  mix-blend-mode: color-dodge;
  
  opacity: calc((var(--card-opacity) * var(--shine-opacity)) + 0.2);
  
  /* Mask to image alpha channel */
  mask: url("../images/name_foil.png");
  -webkit-mask: url("../images/name_foil.png");
  mask-size: cover;
  -webkit-mask-size: cover;
  
  /* Trainer Full Art specific styles */
  --space: 5%;
  --angle: 133deg;
  --imgsize: cover;
  --foil: var(--foil-texture, url("../images/trainerbg.png"));
  
  background-image:
    var(--foil),
    repeating-linear-gradient( 0deg, 
      var(--sunpillar-clr-1) calc(var(--space)*1), 
      var(--sunpillar-clr-2) calc(var(--space)*2), 
      var(--sunpillar-clr-3) calc(var(--space)*3), 
      var(--sunpillar-clr-4) calc(var(--space)*4), 
      var(--sunpillar-clr-5) calc(var(--space)*5), 
      var(--sunpillar-clr-6) calc(var(--space)*6), 
      var(--sunpillar-clr-1) calc(var(--space)*7)
    ),
    repeating-linear-gradient( 
      var(--angle), 
      #0e152e 0%, 
      hsl(180, 10%, 60%) 3.8%, 
      hsl(180, 29%, 66%) 4.5%, 
      hsl(180, 10%, 60%) 5.2%, 
      #0e152e 10%, 
      #0e152e 12% 
    ),
    radial-gradient(
      farthest-corner circle 
      at var(--pointer-x) var(--pointer-y),
      hsla(0, 0%, 0%, 0.1) 12%, 
      hsla(0, 0%, 0%, 0.15) 20%, 
      hsla(0, 0%, 0%, 0.25) 120%
    );

  background-position: 
    center center, 
    0% var(--background-y), 
    calc( (var(--background-x) + (var(--background-y)*0.2)) * var(--band-speed) ) var(--background-y), 
    var(--background-x) var(--background-y);

  background-blend-mode: soft-light, hue, hard-light;
  background-size: var(--texture-size, 150px) var(--texture-size, 150px), 200% 100%, 200% 100%, 200% 100%;
  
  /* Conditionally show rainbow stripes */
  --rainbow-opacity: calc(var(--show-rainbow) * 1);

  filter: brightness(min(calc((var(--pointer-from-center)*var(--rainbow-intensity)) + var(--rainbow-base)), var(--max-brightness))) contrast(var(--contrast)) saturate(var(--saturation));
  mix-blend-mode: color-dodge;
  
  transition: opacity 0.1s ease-out, filter 0.1s ease-out;
}

/* Shine :after layer */
.trainer-holo-shine::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  transform: translateZ(1.2px);
  
  background-image:
    var(--foil),
    repeating-linear-gradient( 0deg, 
      var(--sunpillar-clr-6) calc(var(--space)*1), 
      var(--sunpillar-clr-1) calc(var(--space)*2), 
      var(--sunpillar-clr-2) calc(var(--space)*3), 
      var(--sunpillar-clr-3) calc(var(--space)*4), 
      var(--sunpillar-clr-4) calc(var(--space)*5), 
      var(--sunpillar-clr-5) calc(var(--space)*6), 
      var(--sunpillar-clr-6) calc(var(--space)*7)
    ),
    repeating-linear-gradient( 
      var(--angle), 
      #0e152e 0%, 
      hsl(180, 10%, 60%) 3.8%, 
      hsl(180, 29%, 66%) 4.5%, 
      hsl(180, 10%, 60%) 5.2%, 
      #0e152e 10%, 
      #0e152e 12% 
    ),
    radial-gradient(
      farthest-corner circle 
      at var(--pointer-x) var(--pointer-y),
      hsla(0, 0%, 0%, 0.1) 12%, 
      hsla(0, 0%, 0%, 0.15) 20%, 
      hsla(0, 0%, 0%, 0.25) 120%
    );

  background-position: 
    center center, 
    0% var(--background-y), 
    calc( (var(--background-x) + (var(--background-y)*0.2)) * calc(-1 * var(--band-speed))) calc( var(--background-y) * -1), 
    var(--background-x) var(--background-y);

  background-size: var(--texture-size, 150px) var(--texture-size, 150px), 200% 100%, 200% 100%, 200% 100%;

  filter: brightness(min(calc((var(--pointer-from-center)*var(--rainbow-intensity)) + 0.8), var(--max-brightness))) contrast(1.5) saturate(var(--saturation));
  mix-blend-mode: exclusion;
}

/* Shine :before layer - spotlight effect */
.trainer-holo-shine::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  transform: translateZ(1px);
  z-index: 1;
  
  /* Exempt from parent mask to allow full spotlight effect */
  mask: none;
  -webkit-mask: none;
  
  background-image: 
    radial-gradient( 
      farthest-corner circle at var(--pointer-x) var(--pointer-y), 
      hsl(0, 0%, 100%) 0%, 
      hsla(0, 0%, 0%, 0) 80% 
    );
  
  mix-blend-mode: screen;
  opacity: calc(var(--spotlight-intensity) * 1.5);
}

/* Glare layer */
.trainer-holo-glare {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  pointer-events: none;
  transform: translateZ(1.41px);
  z-index: 3;
  overflow: hidden;
  
  opacity: calc(var(--card-opacity) * var(--glare-opacity));
  
  background-image: 
    radial-gradient( 
      farthest-corner circle at var(--pointer-x) var(--pointer-y), 
      hsl(0, 0%, 75%) 5%, 
      hsl(200, 5%, 35%) 60%, 
      hsl(320, 40%, 10%) 150% 
    );

  background-size: 120% 150%;
  background-position: center center;

  mix-blend-mode: hard-light;
  filter: brightness(1) contrast(1.2) saturate(1);
  
  /* Mask to image alpha channel */
  mask: url("../images/name_foil.png");
  -webkit-mask: url("../images/name_foil.png");
  mask-size: cover;
  -webkit-mask-size: cover;
  
  transition: opacity 0.1s ease-out;
}

/* Depth shadow layer */
.trainer-holo-shadow {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  pointer-events: none;
  transform: translateZ(0.5px);
  z-index: 1;
  overflow: hidden;
  
  opacity: calc((var(--card-opacity) * var(--shadow-opacity)) + 0.15);
  
  background-image: 
    linear-gradient(135deg, 
      hsla(0, 0%, 0%, calc(var(--pointer-from-center) * 0.8)) 0%,
      hsla(0, 0%, 0%, calc(var(--pointer-from-center) * 0.4)) 25%,
      hsla(0, 0%, 0%, calc(var(--pointer-from-center) * 0.2)) 50%,
      hsla(0, 0%, 0%, calc(var(--pointer-from-center) * 0.4)) 75%,
      hsla(0, 0%, 0%, calc(var(--pointer-from-center) * 0.8)) 100%
    ),
    radial-gradient( 
      farthest-corner circle at var(--pointer-x) var(--pointer-y), 
      hsla(0, 0%, 0%, 0) 0%, 
      hsla(0, 0%, 0%, calc(var(--pointer-from-center) * 0.3)) 100%
    );

  background-size: 200% 200%;
  background-position: center center;

  mix-blend-mode: multiply;
  
  /* Mask to image alpha channel */
  mask: url("../images/name_foil.png");
  -webkit-mask: url("../images/name_foil.png");
  mask-size: cover;
  -webkit-mask-size: cover;
  
  transition: opacity 0.1s ease-out;
}

/* Anti-aliasing trick */
.trainer-holo,
.trainer-holo * {
  outline: 1px solid transparent;
}

