/* Single-card foil renderer. Template masks preserve the printed image and text.
   No idle animation, canvas, per-pixel processing, external textures or filters. */
.pack-card-face.large { --light-x: 50%; --light-y: 40%; --foil-x: 50%; --foil-y: 50%; --foil-angle: 118deg; --foil-power: .07; --foil-glint: .18; }
.pack-foil-surface {
  position: absolute; inset: 0; z-index: 2; border-radius: inherit; pointer-events: none;
  opacity: 1; mix-blend-mode: screen; isolation: isolate;
  -webkit-mask-image: var(--foil-mask); mask-image: var(--foil-mask);
  -webkit-mask-size: 100% 100%; mask-size: 100% 100%;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
}
.pack-foil-surface > div { position: absolute; inset: 0; border-radius: inherit; }
.pack-foil-spectrum {
  background-image: linear-gradient(var(--foil-angle), #506fc8 0%, #92d7e1 16%, #eac77e 30%, #e69aa7 44%, #a7a0e4 58%, #82c8cf 72%, #dbd092 86%, #506fc8 100%);
  background-size: 240% 240%; background-position: var(--foil-x) var(--foil-y);
  mix-blend-mode: soft-light; opacity: var(--foil-power);
}
.pack-foil-glare {
  background: radial-gradient(ellipse at var(--light-x) var(--light-y), #fff8, #fff3 10%, #dce5ef0b 27%, transparent 49%);
  opacity: var(--foil-glint); mix-blend-mode: screen;
}
.pack-foil-grain { opacity: 0; background-position: var(--foil-x) var(--foil-y); mix-blend-mode: soft-light; }

/* Sword & Shield: directional lines in the illustration, matte yellow frame. */
.pack-card-face[data-foil-material="line"] .pack-foil-spectrum {
  background-image: linear-gradient(90deg, #98bae1 0%, #eeceb1 22%, #aea3dd 42%, #9bd7dc 64%, #edc8ac 84%, #98bae1);
  background-size: 250% 100%;
}
.pack-card-face[data-foil-material="line"] .pack-foil-grain {
  background-image: repeating-linear-gradient(90deg, transparent 0 5px, #ffffff30 5.2px 5.7px, #ffffff06 6px 10px, transparent 10px 18px);
  opacity: calc(var(--foil-power) * .8);
}
/* Modern ordinary holos: the art and silver frame catch a broad horizontal light. */
.pack-card-face[data-foil="window"][data-foil-era="sv"] .pack-foil-spectrum,
.pack-card-face[data-foil="window"][data-foil-era="me"] .pack-foil-spectrum {
  background-image: linear-gradient(0deg, #82b5d4, #d6c1e2 25%, #eed9b2 47%, #a1d8d8 70%, #82b5d4);
  background-size: 100% 270%;
}
.pack-card-face[data-foil="reverse"] .pack-foil-spectrum { opacity: calc(var(--foil-power) * .68); }
.pack-card-face[data-foil="reverse"] .pack-foil-glare { opacity: calc(var(--foil-glint) * .65); }
.pack-card-face[data-foil-material="reverse-tile"] .pack-foil-grain {
  background-image: repeating-linear-gradient(58deg, transparent 0 15px, #ffffff33 15.2px 15.8px, transparent 16px 30px), repeating-linear-gradient(122deg, transparent 0 15px, #ffffff22 15.2px 15.8px, transparent 16px 30px);
  opacity: calc(var(--foil-power) * .4);
}
.pack-card-face[data-foil-material="reverse-mosaic"] .pack-foil-grain {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='48' height='48' viewBox='0 0 48 48'%3E%3Cpath d='m0 12 12-4 9 9-3 12-12 3-6-8m21-7 13-6 14 7M18 29l11 9 12-3 7-17M29 38l-4 10M12 8l2-8m20 11L31 0M6 32 0 42m41-7 7 9' fill='none' stroke='white' stroke-opacity='.6' stroke-width='.6'/%3E%3C/svg%3E");
  opacity: calc(var(--foil-power) * .42);
}
/* Distinct ball motifs are kept outside the illustration. No generic circle is
   substituted for Master Ball; unverified symbol patterns use a quiet sheen. */
.pack-card-face[data-foil-material="pattern"] .pack-foil-grain {
  background-image: var(--foil-pattern); background-size: 37px 37px;
  opacity: calc(var(--foil-power) * 1.2); mix-blend-mode: screen;
}
.pack-card-face[data-foil="energy"] .pack-foil-spectrum { opacity: calc(var(--foil-power) * .38); }
.pack-card-face[data-foil="energy"] .pack-foil-glare { opacity: calc(var(--foil-glint) * .55); }

/* Texture follows the light with low contrast. Actual etched paths vary per
   card, so these narrow grooves suggest the material without inventing artwork. */
.pack-card-face:is([data-foil-material="etched"], [data-foil-material="rainbow"], [data-foil-material="gold"], [data-foil-material="gold-black"], [data-foil-material="amazing"], [data-foil-material="shiny-etched"]) .pack-foil-grain {
  background-image: repeating-radial-gradient(ellipse at 34% 32%, transparent 0 3px, #ffffff80 3.15px 3.6px, #00000080 3.8px 4px, transparent 4.2px 6px);
  background-size: 120% 120%; opacity: calc(var(--foil-power) * .52); mix-blend-mode: soft-light;
}
.pack-card-face[data-foil-material="rainbow"] .pack-foil-spectrum {
  background-image: linear-gradient(var(--foil-angle), #c7a4f4, #83cad7 20%, #bddb88 37%, #eddc99 53%, #e8a3aa 70%, #bf9fdc 85%, #c7a4f4);
  opacity: calc(var(--foil-power) * .74);
}
.pack-card-face:is([data-foil-material="gold"], [data-foil-material="gold-black"]) .pack-foil-spectrum {
  background-image: linear-gradient(var(--foil-angle), #bc8b31, #ecd08c 23%, #fff3bd 42%, #c6a05a 59%, #edce85 75%, #bc8b31);
  opacity: calc(var(--foil-power) * .9);
}
/* Black-and-gold gallery cards keep their printed dark field. Radiant cards
   suggest their etched mesh; neither effect attempts a per-Pokémon relief map. */
.pack-card-face[data-foil-material="gold-black"] .pack-foil-spectrum { opacity: calc(var(--foil-power) * .45); }
.pack-card-face[data-foil-material="gold-black"] .pack-foil-glare { opacity: calc(var(--foil-glint) * .55); }
.pack-card-face[data-foil-material="radiant"] .pack-foil-grain {
  background-image: repeating-linear-gradient(45deg, transparent 0 6px, #ffffff55 6.2px 6.7px, transparent 7px 13px), repeating-linear-gradient(-45deg, transparent 0 6px, #ffffff44 6.2px 6.7px, transparent 7px 13px);
  opacity: calc(var(--foil-power) * .5); mix-blend-mode: soft-light;
}
.pack-card-face[data-foil-material="amazing"] .pack-foil-spectrum { opacity: calc(var(--foil-power) * .65); }
.pack-card-face[data-foil-material="star"] .pack-foil-grain,
.pack-card-face[data-foil-material="shiny"] .pack-foil-grain {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='73' height='89' viewBox='0 0 73 89'%3E%3Cpath d='m15 10 1.5 4.5L21 16l-4.5 1.5L15 22l-1.5-4.5L9 16l4.5-1.5ZM52 57l1 3 3 1-3 1-1 3-1-3-3-1 3-1Z' fill='white'/%3E%3C/svg%3E");
  opacity: calc(var(--foil-power) * .85); mix-blend-mode: screen;
}
.pack-card-face[data-foil-material="galaxy"] .pack-foil-grain {
  background-image: radial-gradient(circle at 12px 18px, #fff9 0 1px, #ffffff18 1.5px 2.5px, transparent 3px), radial-gradient(circle at 44px 51px, #fff7 0 .8px, transparent 1.7px), radial-gradient(circle at 32px 29px, transparent 0 2px, #fff5 2.2px 3px, transparent 3.2px);
  background-size: 83px 97px, 59px 67px, 107px 139px;
  opacity: calc(var(--foil-power) * 1.25); mix-blend-mode: screen;
}
/* Mixed historical layouts and landscape reprints only receive broad light. */
.pack-card-face[data-foil-era="unknown"] .pack-foil-spectrum { opacity: calc(var(--foil-power) * .45); }
.pack-card-face[data-orientation="landscape"] .pack-foil-surface { -webkit-mask-image: none; mask-image: none; clip-path: inset(1.5% round 3px); opacity: .65; }
.pack-card-face[data-orientation="landscape"] .pack-foil-grain { display: none; }
@media (prefers-reduced-motion: reduce) {
  .pack-tilt-plane { transform: none !important; transition: none !important; }
  .pack-foil-surface, .pack-foil-surface > div { transition: none !important; animation: none !important; }
}
@media (forced-colors: active) { .pack-foil-surface { display: none; } }
