/*
 * Holo family ex-reverse: EX-era reverse holos.
 *
 * Scope: the ex1-ex4 Mirror (whole card but the art box), and the ex5-ex16 reverses that have a per-card foil-area map
 * (the art box's background lit, the Pokemon matte; Delta Species cards of ex11/ex13 Holo Rare and ex14/ex15: the Pokemon lit).
 * Cards: the faces js/fam/ex-reverse.js claims; it adds `fam-ex-reverse` (+ `xr-mapped`, `xr-delta`) to them, and every rule
 * below is scoped to it. Generated by .claude/skills/card-textures/scripts/fam/ex-reverse/build_sheet.py: edit that, not this.
 * Specificity: body.fx-holo.fx-holo.fx-holo .tcg.era-ex.(x5).foil-reverse.fam-ex-reverse.(x4) beats the era sheet
 * (css/holo/ex.css, whose rules this overrides). Slow rainbow: see the speed rule in the generator's docstring.
 * Part of the older-era holo remaster (2026-10-01): research and photos are in /mnt/project-files/holo-remaster/ex-reverse/.
 */

/* ==== ex1-ex4 Mirror ====================================================================================================
   Real card: the whole card but the art picture is a bright prismatic rainbow foil; the art box is matte. Same layers and mask as
   the era's Mirror, but slow: the era's bands were 300% wide with multipliers 1.4 and 1.9, so a sweep of the pointer slid the
   spectrum most of a period. Here the spectrum is 1.2 cards wide, (240% - 100%) x 1.2 x 0.26 = 0.44 card (a third of a period),
   the silver ripple 0.36 of its 1-card period, and the pointer glow moves at half the pointer's speed. */
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.ex-rev-mirror .foil {
  background-image:
    radial-gradient(ellipse 46% 140% at calc(50% + (var(--pointer-x) - 50%) * 0.5) 52%, hsla(0, 0%, 100%, 0) 0%, hsla(0, 0%, 100%, 0.3) 55%, hsla(0, 0%, 100%, 0.6) 100%),
    repeating-linear-gradient(90deg, hsl(0, 0%, 100%) 0%, hsl(0, 0%, 84%) 10%, hsl(0, 0%, 98%) 20%, hsl(0, 0%, 88%) 30%, hsl(0, 0%, 100%) 41.7%),
    repeating-linear-gradient(90deg, hsl(268, 90%, 80%) 0%, hsl(222, 100%, 78%) 7.2%, hsl(186, 100%, 76%) 14.3%, hsl(132, 85%, 74%) 21.5%,
      hsl(58, 100%, 74%) 28.6%, hsl(24, 100%, 76%) 35.8%, hsl(350, 90%, 78%) 43%, hsl(268, 90%, 80%) 50%);
  background-size: 100% 100%, 240% 100%, 240% 100%;
  background-position:
    center,
    clamp(0%, calc(((50% - var(--background-x)) * 1) + 50%), 100%) 0%,
    clamp(0%, calc(((50% - var(--background-x)) * 1.2) + 50%), 100%) 0%;
  background-repeat: no-repeat, repeat-y, repeat-y;
  background-blend-mode: normal, multiply, normal;
}

/* ==== ex5-ex16: the foil is the art box's BACKGROUND (per-card map --xr-map), the Pokemon matte ==============================
   `.xr-mapped` faces only (the module claims a face when its map exists). The stamp hole (the set logo, foil-free) stays cut out. */
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped .foil, body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped .glare {
  -webkit-mask-image: var(--xr-map), var(--ex-stamp-hole);
  mask-image: var(--xr-map), var(--ex-stamp-hole);
  -webkit-mask-composite: source-out;
  mask-composite: subtract;
  mask-mode: alpha, alpha;
  -webkit-mask-size: 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  mask-size: 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  -webkit-mask-position: 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  mask-position: 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  -webkit-mask-repeat: no-repeat, no-repeat;
  mask-repeat: no-repeat, no-repeat;
}
/* Delta Species exception: the foil is ON the Pokemon = the window minus the map (and minus the stamp) */
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-delta .foil, body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-delta .glare {
  -webkit-mask-image: var(--ex-win), var(--xr-map), var(--ex-stamp-hole);
  mask-image: var(--ex-win), var(--xr-map), var(--ex-stamp-hole);
  -webkit-mask-composite: source-out, source-over;
  mask-composite: subtract, add;
  mask-mode: alpha, alpha, alpha;
  -webkit-mask-size: 100% 100%, 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  mask-size: 100% 100%, 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  -webkit-mask-position: center, 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  mask-position: center, 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  -webkit-mask-repeat: no-repeat, no-repeat, no-repeat;
  mask-repeat: no-repeat, no-repeat, no-repeat;
}

/* Plain rainbow (ex11, ex13-ex16): a smooth vivid spectrum over the map, an overlay-type blend so the art's own light and dark
   stay (a screen/opaque layer painted a flat green sheet and failed review): the colour rides the picture's tones. Every layer is
   200% wide with multiplier 1: a sweep of the pointer slides the spectrum 0.26 card, a quarter of a (one-card) period. */
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.ex-rev-plain .foil {
  background-image:
    radial-gradient(farthest-corner circle at var(--pointer-x) var(--pointer-y), hsla(0, 0%, 100%, 0.35) 0%, hsla(0, 0%, 100%, 0.1) 30%, hsla(0, 0%, 100%, 0) 62%),
    linear-gradient(115deg, hsl(0, 100%, 58%) 0%, hsl(45, 100%, 55%) 8%, hsl(100, 100%, 48%) 17%, hsl(170, 100%, 48%) 25%, hsl(215, 100%, 58%) 33%, hsl(275, 100%, 62%) 41%, hsl(330, 100%, 60%) 50%, hsl(30, 100%, 56%) 58%, hsl(70, 100%, 50%) 66%, hsl(140, 100%, 48%) 74%, hsl(200, 100%, 56%) 83%, hsl(260, 100%, 62%) 91%, hsl(320, 100%, 60%) 100%);
  background-size: 100% 100%, 200% 200%;
  background-position:
    center,
    clamp(0%, calc(((50% - var(--background-x)) * 1) + 50%), 100%) clamp(0%, calc(((50% - var(--background-y)) * 1) + 50%), 100%);
  background-repeat: no-repeat, no-repeat;
  background-blend-mode: soft-light, normal;
  filter: none;
  mix-blend-mode: overlay;
  opacity: calc((0.5 + var(--card-opacity) * 0.4) * var(--foil-strength, 1));
}
/* a delta card lights the whole Pokemon, a large area: a little less colour so the body keeps its own shading */
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-delta.ex-rev-plain .foil {
  opacity: calc((0.4 + var(--card-opacity) * 0.34) * var(--foil-strength, 1));
}
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.ex-rev-plain:not(.lit):not(.settling) .foil {
  background-image: linear-gradient(115deg, hsl(200, 95%, 58%), hsl(300, 85%, 62%) 50%, hsl(165, 100%, 52%));
  background-size: 100% 100%;
  background-position: center;
  background-blend-mode: normal;
  opacity: calc(0.3 * var(--foil-strength, 1));
}
/* the era's own glare, cut to the map */
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.ex-rev-plain .glare {
  mix-blend-mode: overlay;
}

/* Patterned sets (ex5-ex10): the printed pattern lit by the spectrum, only where the map allows. The pattern is the brightness
   (screen), the gradient its colour: the wide spectrum slides 0.26 card across a full pointer sweep; the radial multiply is the
   pointer-led glow. Rest state: the pattern in two soft hues. */
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-pat .foil {
  background-image:
    radial-gradient(farthest-corner circle at var(--pointer-x) var(--pointer-y), hsl(0, 0%, 100%) 0%, hsl(0, 0%, 80%) 40%, hsl(0, 0%, 56%) 100%),
    linear-gradient(112deg, hsl(0, 100%, 58%) 0%, hsl(45, 100%, 55%) 8%, hsl(100, 100%, 48%) 17%, hsl(170, 100%, 48%) 25%, hsl(215, 100%, 58%) 33%, hsl(275, 100%, 62%) 41%, hsl(330, 100%, 60%) 50%, hsl(30, 100%, 56%) 58%, hsl(70, 100%, 50%) 66%, hsl(140, 100%, 48%) 74%, hsl(200, 100%, 56%) 83%, hsl(260, 100%, 62%) 91%, hsl(320, 100%, 60%) 100%);
  background-size: 100% 100%, 200% 200%;
  background-position:
    center,
    clamp(0%, calc(((50% - var(--background-x)) * 1) + 50%), 100%) clamp(0%, calc(((50% - var(--background-y)) * 1) + 50%), 100%);
  background-repeat: no-repeat, no-repeat;
  background-blend-mode: multiply;
  filter: brightness(1.2) saturate(1.2);
  mix-blend-mode: screen;
  opacity: calc((0.42 + var(--card-opacity) * 0.5) * var(--foil-strength, 1));
  -webkit-mask-image: var(--xr-tile), var(--xr-map), var(--ex-stamp-hole);
  mask-image: var(--xr-tile), var(--xr-map), var(--ex-stamp-hole);
  -webkit-mask-composite: source-in, source-out;
  mask-composite: intersect, subtract;
  mask-mode: alpha, alpha, alpha;
  -webkit-mask-size: 100% 100%, 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  mask-size: 100% 100%, 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  -webkit-mask-position: center, 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  mask-position: center, 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  -webkit-mask-repeat: no-repeat, no-repeat, no-repeat;
  mask-repeat: no-repeat, no-repeat, no-repeat;
}
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-pat:not(.lit):not(.settling) .foil {
  background-image: linear-gradient(115deg, hsl(200, 80%, 66%), hsl(300, 70%, 70%) 50%, hsl(172, 90%, 62%));
  background-size: 100% 100%;
  background-position: center;
  background-blend-mode: normal;
  filter: none;
  mix-blend-mode: screen;
  opacity: calc(0.45 * var(--foil-strength, 1));
}
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-pat.ex-rev-set-ex5 { --xr-tile: url("/assets/foil/ex-reverse/energy-l.webp"); }
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-pat.ex-rev-set-ex6 { --xr-tile: url("/assets/foil/ex-reverse/energy-m.webp"); }
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-pat.ex-rev-set-ex7 { --xr-tile: url("/assets/foil/ex-reverse/energy-s.webp"); }
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-pat.ex-rev-set-ex8 { --xr-tile: url("/assets/foil/ex-reverse/wheel.webp"); }
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-pat.ex-rev-set-ex9 { --xr-tile: url("/assets/foil/ex-reverse/pokeball.webp"); }
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-pat.ex-rev-set-ex10 { --xr-tile: url("/assets/foil/ex-reverse/pokeball.webp"); }
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.xr-pat.xr-delta .foil {
  -webkit-mask-image: var(--xr-tile), var(--ex-win), var(--xr-map), var(--ex-stamp-hole);
  mask-image: var(--xr-tile), var(--ex-win), var(--xr-map), var(--ex-stamp-hole);
  -webkit-mask-composite: source-in, source-out, source-over;
  mask-composite: intersect, subtract, add;
  mask-mode: alpha, alpha, alpha, alpha;
  -webkit-mask-size: 100% 100%, 100% 100%, 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  mask-size: 100% 100%, 100% 100%, 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  -webkit-mask-position: center, center, 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  mask-position: center, center, 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  -webkit-mask-repeat: no-repeat, no-repeat, no-repeat, no-repeat;
  mask-repeat: no-repeat, no-repeat, no-repeat, no-repeat;
}

/* ex12 Legend Maker (cosmos sparkle): the era's cosmos tile (random dots, seeded per card) lit by the same slow spectrum, in the map. */
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.ex-rev-cosmos .foil {
  background-image:
    radial-gradient(farthest-corner circle at var(--pointer-x) var(--pointer-y), hsl(0, 0%, 100%) 0%, hsl(0, 0%, 80%) 40%, hsl(0, 0%, 56%) 100%),
    linear-gradient(112deg, hsl(0, 100%, 58%) 0%, hsl(45, 100%, 55%) 8%, hsl(100, 100%, 48%) 17%, hsl(170, 100%, 48%) 25%, hsl(215, 100%, 58%) 33%, hsl(275, 100%, 62%) 41%, hsl(330, 100%, 60%) 50%, hsl(30, 100%, 56%) 58%, hsl(70, 100%, 50%) 66%, hsl(140, 100%, 48%) 74%, hsl(200, 100%, 56%) 83%, hsl(260, 100%, 62%) 91%, hsl(320, 100%, 60%) 100%);
  background-size: 100% 100%, 200% 200%;
  background-position:
    center,
    clamp(0%, calc(((50% - var(--background-x)) * 1) + 50%), 100%) clamp(0%, calc(((50% - var(--background-y)) * 1) + 50%), 100%);
  background-repeat: no-repeat, no-repeat;
  background-blend-mode: multiply;
  filter: brightness(1.25) saturate(1.2);
  mix-blend-mode: screen;
  opacity: calc((0.45 + var(--card-opacity) * 0.5) * var(--foil-strength, 1));
  -webkit-mask-image: var(--ex-cosmos), var(--xr-map), var(--ex-stamp-hole);
  mask-image: var(--ex-cosmos), var(--xr-map), var(--ex-stamp-hole);
  -webkit-mask-composite: source-in, source-out;
  mask-composite: intersect, subtract;
  mask-mode: alpha, alpha, alpha;
  -webkit-mask-size: 100% auto, 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  mask-size: 100% auto, 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  -webkit-mask-position: var(--seed-pos), 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  mask-position: var(--seed-pos), 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  -webkit-mask-repeat: repeat, no-repeat, no-repeat;
  mask-repeat: repeat, no-repeat, no-repeat;
}
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.ex-rev-cosmos.xr-delta .foil {
  -webkit-mask-image: var(--ex-cosmos), var(--ex-win), var(--xr-map), var(--ex-stamp-hole);
  mask-image: var(--ex-cosmos), var(--ex-win), var(--xr-map), var(--ex-stamp-hole);
  -webkit-mask-composite: source-in, source-out, source-over;
  mask-composite: intersect, subtract, add;
  mask-mode: alpha, alpha, alpha, alpha;
  -webkit-mask-size: 100% auto, 100% 100%, 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  mask-size: 100% auto, 100% 100%, 100% 100%, calc(var(--st-w) * 100%) calc(var(--st-h) * 100%);
  -webkit-mask-position: var(--seed-pos), center, 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  mask-position: var(--seed-pos), center, 0% 0%, calc(var(--st-x) / (1 - var(--st-w)) * 100%) calc(var(--st-y) / (1 - var(--st-h)) * 100%);
  -webkit-mask-repeat: repeat, no-repeat, no-repeat, no-repeat;
  mask-repeat: repeat, no-repeat, no-repeat, no-repeat;
}
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped.ex-rev-cosmos:not(.lit):not(.settling) .foil {
  background-image: linear-gradient(115deg, hsl(200, 90%, 70%), hsl(300, 80%, 72%) 50%, hsl(172, 100%, 64%));
  background-size: 100% 100%;
  background-position: center;
  background-blend-mode: normal;
  filter: none;
  opacity: calc(0.5 * var(--foil-strength, 1));
}
/* the era's pseudo layers stay off (the pattern lives in .foil) */
body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped .foil::before, body.fx-holo.fx-holo.fx-holo .tcg.era-ex.era-ex.era-ex.era-ex.era-ex.foil-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.fam-ex-reverse.xr-mapped .foil::after {
  background-image: none;
  -webkit-mask-image: none;
  mask-image: none;
  filter: none;
  mix-blend-mode: normal;
}
